From caf8e650c2fadbc607f5b83f2bedf8e4031ebebf Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 20 Mar 2022 21:36:04 +0100 Subject: [PATCH] MatchRule: Support multibyte doubled letters When matching a double-letter whose encoding needs multiple bytes, to properly skip the double-letter we have to skip these bytes, like other rules. --- src/libespeak-ng/dictionary.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index d7cf1396..2d273b3c 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -1810,9 +1810,10 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ failed = 1; break; case RULE_DOUBLE: - if (letter_w == last_letter_w) + if (letter_w == last_letter_w) { add_points = (21-distance_right); - else + post_ptr += letter_xbytes; + } else failed = 1; break; case RULE_DOLLAR: @@ -2004,9 +2005,10 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ failed = 1; break; case RULE_DOUBLE: - if (letter_w == last_letter_w) + if (letter_w == last_letter_w) { add_points = (21-distance_left); - else + pre_ptr -= letter_xbytes; + } else failed = 1; break; case RULE_DIGIT: