{ "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 | ||||