When designing a font for another language in Unicode, how do you change the position of the characters to show up how they need to show up?
Edit: Since the characters don't seem to be showing up for some of you, I am including an image with the text and will reference which line in the image I am referring to when using the characters (Format: [character]/[line number in image])
For example, in Gurmukhi, the ਿ/1 (vowel) character should show up before the (consonant) character that it is attached to. For example, when attached to ਸ/2, it shows up as ਸਿ/3. Though it shows up before, the ਿ/1 character is actually after the ਸ/2 character (in terms of how it's stored). You can see this by copying the characters together into another textbox and pressing backspace.
It is notable that it even shifts the character that it is attached to over to create space when needed. See this example: ਨਾਮ/4 and ਨਾਮਿ/5. You can here that it shifts the ਮ/6 character to the right in order to create room for the ਿ/1 character (again, you can see it better if you copy and press backspace).
I have seen other character positions handled with anchors, but those don't seem to apply here exactly. Even for other characters in Gurmukhi, anchors are used to change the character position. For example, the way that the ੁ/7 is supposed to be positioned below a consonant, like so: ਸੁ/8. The way that Unicode fonts handle this is with anchors, but when it comes to the ਿ/1, that is not the case. When opening a Unicode font on something like FontForge, you can see that there is no anchors in the ਿ/1 character (U+0A3F in case you want to see). Also, I've seen that right-to-left languages like Arabic don't have anchors either, so they are probably handled in a different way as well.
But how exactly are these cases handled?