| { "isVel", 0, CONDITION_IS_PLACE_OF_ARTICULATION | phPLACE_VELAR }, | { "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 } | { NULL, 0, 0 } | ||||
| }; | }; |
| return ((ph->phflags >> 16) & 0xf) == data; | return ((ph->phflags >> 16) & 0xf) == data; | ||||
| case CONDITION_IS_PHFLAG_SET: | case CONDITION_IS_PHFLAG_SET: | ||||
| return (ph->phflags & (1 << data)) != 0; | return (ph->phflags & (1 << data)) != 0; | ||||
| case 0x80: | |||||
| case CONDITION_IS_OTHER: | |||||
| switch (data) | 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); | 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); | return (ph->type == phPAUSE) || (plist_this->synthflags & SFLAG_NEXT_PAUSE); | ||||
| case 6: // isWordStart | |||||
| case isWordStart: | |||||
| return plist->sourceix != 0; | return plist->sourceix != 0; | ||||
| case 8: // isWordEnd | |||||
| case isWordEnd: | |||||
| return plist[1].sourceix || (plist[1].ph->type == phPAUSE); | return plist[1].sourceix || (plist[1].ph->type == phPAUSE); | ||||
| case 9: // isAfterStress | |||||
| case isAfterStress: | |||||
| if (plist->sourceix != 0) | if (plist->sourceix != 0) | ||||
| return false; | return false; | ||||
| do { | do { | ||||
| } while (plist->sourceix == 0); | } while (plist->sourceix == 0); | ||||
| break; | break; | ||||
| case 10: // isNotVowel | |||||
| case isNotVowel: | |||||
| return ph->type != phVOWEL; | return ph->type != phVOWEL; | ||||
| case 11: // isFinalVowel | |||||
| case isFinalVowel: | |||||
| for (;;) { | for (;;) { | ||||
| plist++; | plist++; | ||||
| if (plist->sourceix != 0) | if (plist->sourceix != 0) | ||||
| if (plist->ph->type == phVOWEL) | if (plist->ph->type == phVOWEL) | ||||
| return false; | return false; | ||||
| } | } | ||||
| case 12: // isVoiced | |||||
| case isVoiced: | |||||
| return (ph->type == phVOWEL) || (ph->type == phLIQUID) || (ph->phflags & phVOICED); | return (ph->type == phVOWEL) || (ph->type == phLIQUID) || (ph->phflags & phVOICED); | ||||
| case 13: // isFirstVowel | |||||
| case isFirstVowel: | |||||
| return CountVowelPosition(plist) == 1; | return CountVowelPosition(plist) == 1; | ||||
| case 14: // isSecondVowel | |||||
| case isSecondVowel: | |||||
| return CountVowelPosition(plist) == 2; | return CountVowelPosition(plist) == 2; | ||||
| case 0x10: // isTranslationGiven | |||||
| case isTranslationGiven: | |||||
| return (plist->synthflags & SFLAG_DICTIONARY) != 0; | return (plist->synthflags & SFLAG_DICTIONARY) != 0; | ||||
| } | } | ||||
| break; | break; |
| #define i_WAVADD 0xf000 | #define i_WAVADD 0xf000 | ||||
| // conditions | // 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_PHONEME_TYPE 0x00 | ||||
| #define CONDITION_IS_PLACE_OF_ARTICULATION 0x20 | #define CONDITION_IS_PLACE_OF_ARTICULATION 0x20 | ||||
| #define CONDITION_IS_PHFLAG_SET 0x40 | #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 | #define i_StressLevel 0x800 | ||||