Browse Source

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.
master
Reece H. Dunn 8 years ago
parent
commit
dd422ffbdb
1 changed files with 5 additions and 1 deletions
  1. 5
    1
      src/libespeak-ng/compiledata.c

+ 5
- 1
src/libespeak-ng/compiledata.c 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");

Loading…
Cancel
Save