The strong caret indicates where an inserted character will be displayed when that character's direction is the same as the base direction o f the text. The weak caret shows where an inserted character will be displayed when the character's direction is the opposite of the base direction. When you're working with bidirectional text, you can't simply add the widths of the glyphs before a character offset to calculate the caret position. For the caret to be properly positioned, the widths of the glyphs to the left of the offset need to be added and the current context taken into account. Unless the context is taken into account, the glyph metrics won't necessarily match the display.
All text editors allow the user to move the caret with the arrow keys.
Users expect the caret to move in the direction of the pressed arrow key. In bidirectional text or in text with ligatures, this behavior would cause the caret to jump across glyphs at direction boundaries and move in the reverse direction within different directional runs. To move the caret smoothly through bidirectional text, you need to take into account the direction of the text runs. Moving the caret across a directional boundary is even more complicated. For example, there should never be a caret between an o and an umlaut if they are represented by two separa te characters.