Pressing Enter with the cursor right after an emoji moves the emoji
down with the tail, instead of leaving it on the line above. The split
lands one emoji to the left of the cursor.
richOffsetForFieldOffset() converts the field cursor into an offset in
the article text through a list of replacements, and that list is only
ever filled from formulas — see MarkedTextLeafSourceSignature's caller
in iv_editor_text_entities.cpp. An emoji changes length between the two
coordinate systems exactly the same way a formula does: one character in
the field document, two UTF-16 units in the text. Nothing compensates
for it.
The direction fits, the magnitude does not yet: four emoji precede the
cursor in the reported case, so the shortfall should be four units, but
the split moved by two. Rather than guess again, log both offsets, the
text length, the replacement count and what sits on either side of the
landing point.
Temporary diagnostics, capped at 60 lines per run.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>