diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c index ff0b0305..dc76d5f8 100644 --- a/src/libespeak-ng/translate.c +++ b/src/libespeak-ng/translate.c @@ -1207,7 +1207,19 @@ int TranslateWord(Translator *tr, char *word_start, WORD_TAB *wtab, char *word_o while (!isspace(*word_out)) ++word_out; while (isspace(*word_out)) ++word_out; } - snprintf(word_phonemes, sizeof(word_phonemes), "%s", words_phonemes); + + // If the list file contains a text replacement to another + // entry in the list file, e.g.: + // ripost riposte $text + // riposte rI#p0st + // calling it from a prefix or suffix rule such as 'riposted' + // causes word_out[0] to be NULL, as TranslateWord3 has the + // information needed to perform the mapping. In this case, + // no phonemes have been written in this loop and the phonemes + // have been calculated, so don't override them. + if (phonemes != words_phonemes) { + snprintf(word_phonemes, sizeof(word_phonemes), "%s", words_phonemes); + } } return flags; } diff --git a/tests/translate.test b/tests/translate.test index 72659e14..43c408d1 100755 --- a/tests/translate.test +++ b/tests/translate.test @@ -23,8 +23,18 @@ test_phonemes hi " r'UcI" "रुचि" test_phonemes hi " dUk'a:n" "दुकान" test_phonemes hi " ka:n'u:n" "कानून" -# Emoji +#----- Emoji [http://www.unicode.org/reports/tr51/tr51-12.html] ----- -# ED-3 - emoji_character [http://www.unicode.org/reports/tr51/tr51-12.html#def_emoji_character] +# ED-3 - emoji_character +# TODO: Fix adjacent emoji without whitespace so the pronunciation is separated by a space. +test_phonemes en " 'e@ri:z" "♈" +test_phonemes en " 'e@ri:zr'eInboU" "♈🌈" +test_phonemes en " 'e@ri:z r'eInboU" "♈ 🌈" + +# multi-word +# TODO: Add support for multi-word emoji. test_phonemes en " Ekskla#m'eIS@N kw'EstS@n m'A@k" "⁉" test_phonemes en " Ekskla#m'eIS@N kw'EstS@n m'A@k r'eInboU" "⁉ 🌈" +# A list entry that uses '$text' to map to another list entry crashes 1.49.2 multi-word support: +test_phonemes en " d'eIbju:tI2d" "débuted" +test_phonemes en-US " d'eIbju:t#I#d" "débuted"