From 4b3085a7fe8980432aa63ddf614fee2a6fb04e94 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 25 Jul 2020 19:25:02 +0300 Subject: [PATCH] Fix last change * src/composite.c (composition_reseat_it): Fix of the commentary, and a minor change of the last fix. --- src/composite.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/composite.c b/src/composite.c index 2fbe6796b59..a5288cb8a25 100644 --- a/src/composite.c +++ b/src/composite.c @@ -1171,7 +1171,9 @@ composition_compute_stop_pos (struct composition_it *cmp_it, ptrdiff_t charpos, character to check, and CHARPOS and BYTEPOS are indices in the string. In that case, FACE must not be NULL. BIDI_LEVEL is the bidi embedding level of the current paragraph, and is used to calculate the - direction argument to pass to the font shaper. + direction argument to pass to the font shaper; value of -1 means the + caller doesn't know the embedding level (used by callers which didn't + invoke the display routines that perform bidi-display-reordering). If the character is composed, setup members of CMP_IT (id, nglyphs, from, to, reversed_p), and return true. Otherwise, update @@ -1256,7 +1258,16 @@ composition_reseat_it (struct composition_it *cmp_it, ptrdiff_t charpos, else bpos = CHAR_TO_BYTE (cpos); } - if ((bidi_level & 1) == 0) + /* The bidi_level < 0 case below strictly speaking should + never happen, since we get here when bidi scan direction + is backward in the buffer, which can only happen if the + display routines were called to perform the bidi + reordering. But it doesn't harm to test for that, and + avoid someon raising their brows and thinking it's a + subtle bug... */ + if (bidi_level < 0) + direction = Qnil; + else if ((bidi_level & 1) == 0) direction = QL2R; else direction = QR2L; -- 2.39.2