It is possible -- especially at higher speeds -- for the n at the
end of a word to be velarised if the next word starts with a velar
plosive. I prefer the velarised sound between word boundaries, but
others do not. As such, limit the velarisation to within the word
only.
[1] https://en.wikipedia.org/wiki/English_phonology
LookupDict2: Fix searching entries longer than 128
This is a fix for https://github.com/nvaccess/nvda/issues/7740.
With the addition of emoji support, dictionary entries can now be
longer than 128 bytes. This fix makes sure the character is
interpreted as an unsigned byte so it does not treat long entries
as having a negative offset.
Treating the offset as a signed byte (like in the previous code)
could cause the hash chain search to loop indefinitely when
processing certain input, like the Tamil characters in the NVDA
issue noted above that is added as a test case to translate.test.
translate: Don't crash translating root words that map to another list entry.
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.
There is no fr-CA language dialect dialect file, nor has there
been in the espeak/espeak-ng history.
The fr-CA phoneme table defined the additional phonemes [U], [y"],
[E:], and [A]. The fr-FR phoneme table mapped these to [u], [y],
[E], and [a] respectively. This meant to describe the phonemes that
have not been merged in fr-CA, but have merged in fr-FR, as described
in https://en.wikipedia.org/wiki/Quebec_French_phonology.
The only use of these phonemes in the French dictionary was with
the word "tramway" using [E:]. This has been replaced with [E] to
match the rest of the dictionary file transcriptions, and those
phonemes for fr-CA have been removed.
If fr-CA is supported in the future, the French dictionary would
need to be modified to reverse the merger of the phonemes that are
not merged in fr-CA, with the merge logic being performed in the
fr-FR phoneme table like in the code being removed in this commit.