Ensure phoneme type is set before start/endtype.

The eSpeak code uses `end_type` for the `voicingswitch` property
when used with consonants. It also allows `endtype` to be specified
in consonants if it is the same as `starttype`.

This code adds a check in the `starttype` and `endtype` handlers
to ensure that the phoneme type has been set to preserve the
eSpeak behaviour for these properties.
This commit is contained in:
Reece H. Dunn
2017-01-28 12:03:54 +00:00
parent 9cb38f2df4
commit dd422ffbdb
+5 -1
View File
@@ -2142,12 +2142,16 @@ int CompilePhoneme(int compile_phoneme)
if (phcode == -1)
phcode = LookupPhoneme(item_string, 1);
phoneme_out->start_type = phcode;
if (phoneme_out->type == phINVALID)
error("a phoneme type or manner of articulation must be specified before starttype");
break;
case kENDTYPE:
phcode = NextItem(tPHONEMEMNEM);
if (phcode == -1)
phcode = LookupPhoneme(item_string, 1);
if (phoneme_out->type == phVOWEL)
if (phoneme_out->type == phINVALID)
error("a phoneme type or manner of articulation must be specified before endtype");
else if (phoneme_out->type == phVOWEL)
phoneme_out->end_type = phcode;
else if (phcode != phoneme_out->start_type)
error("endtype must equal starttype for consonants");