Move handling of SetLetterVowel() to language files
Contributes to:
Issue #218, https://github.com/espeak-ng/espeak-ng/issues/218
Changes:
language files have a new keyword letterVowel. It can be a latin alphabet from a-z or a hex value (used by bulgarian).
Errors in parsing the values are only reported, nothing is done about them.
About testing:
I haven't noticed any differences in the output audio with letterVowel set or unset in any tested language. The code seems to work and the correct bits seem to be set, but I don't know how to confirm from the final audio.
TODO:
1. Write better documentation in docs/voices.md
2. The code uses new_translator. Should it use translator instead?
This is not used by any of the espeak-ng voices and languages.
Additionally, this functionality would be superceded by support
for specifying the language used by different scripts in the
language argument on the command line.
1. Store the encoding enumeration values in the Translation
object, instead of the charset table.
2. Use the encoding.c charset table data instead of the ones
in translate.c.
3. Remove the charset language file option -- it is only used
in the Arabic language file, but is used incorrectly there.
4. Specify ISO 8859-6 for the 8-bit encoding for Arabic instead
of UTF-8, so that espeakCHARS_8BIT and espeakCHARS_AUTO work
correctly for Arabic.
Windows: Fix a crash when building the 'en' voice.
This occurs in ReadVoiceFile (voices.c) when calling isspace to
isolate the attribute name. It happens because the msvc
implementation of isspace asserts that the character is in a valid
range, which fails for non-ASCII characters.
This commit resolves the problem by calling iswspace, which uses
the ucd-tools implementation.
Don't check if the MBROLA voice data is present on Windows.
With the original eSpeak Windows port, the MBROLA voices had to
be present in an mbrola folder of the espeak-data. This will be
different in espeak-ng, allowing the MBROLA voice files to be
located elsewhere on the system.
Remove the additional LoadVoice search heuristics.
These heuristics were designed to guess the location of the voice
files without searching the voice list. The heuristics are very
implementation dependent, and easily break when voices move around.
The voices are still found correctly, so these heuristics are
redundant.