| @@ -120,22 +120,22 @@ static keywtab_t k_properties[] = { | |||
| { "isVel", 0, CONDITION_IS_PLACE_OF_ARTICULATION | phPLACE_VELAR }, | |||
| { "isDiminished", 0, i_isDiminished }, | |||
| { "isUnstressed", 0, i_isUnstressed }, | |||
| { "isNotStressed", 0, i_isNotStressed }, | |||
| { "isStressed", 0, i_isStressed }, | |||
| { "isMaxStress", 0, i_isMaxStress }, | |||
| { "isPause2", 0, i_isBreak }, | |||
| { "isWordStart", 0, i_isWordStart }, | |||
| { "isWordEnd", 0, i_isWordEnd }, | |||
| { "isAfterStress", 0, i_isAfterStress }, | |||
| { "isNotVowel", 0, i_isNotVowel }, | |||
| { "isFinalVowel", 0, i_isFinalVowel }, | |||
| { "isVoiced", 0, i_isVoiced }, // voiced consonant, or vowel | |||
| { "isFirstVowel", 0, i_isFirstVowel }, | |||
| { "isSecondVowel", 0, i_isSecondVowel }, | |||
| { "isTranslationGiven", 0, i_IsTranslationGiven }, // phoneme translation given in **_list or as [[...]] | |||
| { "isDiminished", 0, CONDITION_IS_OTHER | isDiminished }, | |||
| { "isUnstressed", 0, CONDITION_IS_OTHER | isUnstressed }, | |||
| { "isNotStressed", 0, CONDITION_IS_OTHER | isNotStressed }, | |||
| { "isStressed", 0, CONDITION_IS_OTHER | isStressed }, | |||
| { "isMaxStress", 0, CONDITION_IS_OTHER | isMaxStress }, | |||
| { "isPause2", 0, CONDITION_IS_OTHER | isBreak }, | |||
| { "isWordStart", 0, CONDITION_IS_OTHER | isWordStart }, | |||
| { "isWordEnd", 0, CONDITION_IS_OTHER | isWordEnd }, | |||
| { "isAfterStress", 0, CONDITION_IS_OTHER | isAfterStress }, | |||
| { "isNotVowel", 0, CONDITION_IS_OTHER | isNotVowel }, | |||
| { "isFinalVowel", 0, CONDITION_IS_OTHER | isFinalVowel }, | |||
| { "isVoiced", 0, CONDITION_IS_OTHER | isVoiced }, | |||
| { "isFirstVowel", 0, CONDITION_IS_OTHER | isFirstVowel }, | |||
| { "isSecondVowel", 0, CONDITION_IS_OTHER | isSecondVowel }, | |||
| { "isTranslationGiven", 0, CONDITION_IS_OTHER | isTranslationGiven }, | |||
| { NULL, 0, 0 } | |||
| }; | |||
| @@ -636,22 +636,22 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, | |||
| return ((ph->phflags >> 16) & 0xf) == data; | |||
| case CONDITION_IS_PHFLAG_SET: | |||
| return (ph->phflags & (1 << data)) != 0; | |||
| case 0x80: | |||
| case CONDITION_IS_OTHER: | |||
| switch (data) | |||
| { | |||
| case 0: | |||
| case 1: | |||
| case 2: | |||
| case 3: | |||
| case 4: | |||
| case isDiminished: | |||
| case isUnstressed: | |||
| case isNotStressed: | |||
| case isStressed: | |||
| case isMaxStress: | |||
| return StressCondition(tr, plist, data, 0); | |||
| case 5: // isBreak, Either pause phoneme, or (stop/vstop/vfric not followed by vowel or (liquid in same word)) | |||
| case isBreak: | |||
| return (ph->type == phPAUSE) || (plist_this->synthflags & SFLAG_NEXT_PAUSE); | |||
| case 6: // isWordStart | |||
| case isWordStart: | |||
| return plist->sourceix != 0; | |||
| case 8: // isWordEnd | |||
| case isWordEnd: | |||
| return plist[1].sourceix || (plist[1].ph->type == phPAUSE); | |||
| case 9: // isAfterStress | |||
| case isAfterStress: | |||
| if (plist->sourceix != 0) | |||
| return false; | |||
| do { | |||
| @@ -661,9 +661,9 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, | |||
| } while (plist->sourceix == 0); | |||
| break; | |||
| case 10: // isNotVowel | |||
| case isNotVowel: | |||
| return ph->type != phVOWEL; | |||
| case 11: // isFinalVowel | |||
| case isFinalVowel: | |||
| for (;;) { | |||
| plist++; | |||
| if (plist->sourceix != 0) | |||
| @@ -671,13 +671,13 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, | |||
| if (plist->ph->type == phVOWEL) | |||
| return false; | |||
| } | |||
| case 12: // isVoiced | |||
| case isVoiced: | |||
| return (ph->type == phVOWEL) || (ph->type == phLIQUID) || (ph->phflags & phVOICED); | |||
| case 13: // isFirstVowel | |||
| case isFirstVowel: | |||
| return CountVowelPosition(plist) == 1; | |||
| case 14: // isSecondVowel | |||
| case isSecondVowel: | |||
| return CountVowelPosition(plist) == 2; | |||
| case 0x10: // isTranslationGiven | |||
| case isTranslationGiven: | |||
| return (plist->synthflags & SFLAG_DICTIONARY) != 0; | |||
| } | |||
| break; | |||
| @@ -312,26 +312,27 @@ typedef struct { | |||
| #define i_WAVADD 0xf000 | |||
| // conditions | |||
| #define i_isDiminished 0x80 | |||
| #define i_isUnstressed 0x81 | |||
| #define i_isNotStressed 0x82 | |||
| #define i_isStressed 0x83 | |||
| #define i_isMaxStress 0x84 | |||
| #define i_isBreak 0x85 | |||
| #define i_isWordStart 0x86 | |||
| #define i_isWordEnd 0x88 | |||
| #define i_isAfterStress 0x89 | |||
| #define i_isNotVowel 0x8a | |||
| #define i_isFinalVowel 0x8b | |||
| #define i_isVoiced 0x8c | |||
| #define i_isFirstVowel 0x8d | |||
| #define i_isSecondVowel 0x8e | |||
| #define i_IsTranslationGiven 0x90 | |||
| #define CONDITION_IS_PHONEME_TYPE 0x00 | |||
| #define CONDITION_IS_PLACE_OF_ARTICULATION 0x20 | |||
| #define CONDITION_IS_PHFLAG_SET 0x40 | |||
| #define CONDITION_IS_OTHER 0x80 | |||
| // other conditions | |||
| #define isDiminished 0 | |||
| #define isUnstressed 1 | |||
| #define isNotStressed 2 | |||
| #define isStressed 3 | |||
| #define isMaxStress 4 | |||
| #define isBreak 5 // pause phoneme or (stop/vstop/vfric not followed by vowel or (liquid in same word)) | |||
| #define isWordStart 6 | |||
| #define isWordEnd 8 | |||
| #define isAfterStress 9 | |||
| #define isNotVowel 10 | |||
| #define isFinalVowel 11 | |||
| #define isVoiced 12 // voiced consonant, or vowel | |||
| #define isFirstVowel 13 | |||
| #define isSecondVowel 14 | |||
| #define isTranslationGiven 16 // phoneme translation given in **_list or as [[...]] | |||
| #define i_StressLevel 0x800 | |||