|
|
|
|
|
|
|
|
case 0x00: |
|
|
case 0x00: |
|
|
// phoneme type, vowel, nasal, fricative, etc |
|
|
// phoneme type, vowel, nasal, fricative, etc |
|
|
return ph->type == data; |
|
|
return ph->type == data; |
|
|
break; |
|
|
|
|
|
case 0x20: |
|
|
case 0x20: |
|
|
// place of articulation |
|
|
// place of articulation |
|
|
return ((ph->phflags >> 16) & 0xf) == data; |
|
|
return ((ph->phflags >> 16) & 0xf) == data; |
|
|
break; |
|
|
|
|
|
case 0x40: |
|
|
case 0x40: |
|
|
// is a bit set in phoneme flags |
|
|
// is a bit set in phoneme flags |
|
|
return (ph->phflags & (1 << data)) != 0; |
|
|
return (ph->phflags & (1 << data)) != 0; |
|
|
break; |
|
|
|
|
|
case 0x80: |
|
|
case 0x80: |
|
|
switch (data) |
|
|
switch (data) |
|
|
{ |
|
|
{ |
|
|
|
|
|
|
|
|
return plist->sourceix == 0; |
|
|
return plist->sourceix == 0; |
|
|
case 8: // isWordEnd |
|
|
case 8: // isWordEnd |
|
|
return plist[1].sourceix || (plist[1].ph->type == phPAUSE); |
|
|
return plist[1].sourceix || (plist[1].ph->type == phPAUSE); |
|
|
break; |
|
|
|
|
|
case 9: // isAfterStress |
|
|
case 9: // isAfterStress |
|
|
if (plist->sourceix != 0) |
|
|
if (plist->sourceix != 0) |
|
|
return false; |
|
|
return false; |
|
|
|
|
|
|
|
|
if (plist->ph->type == phVOWEL) |
|
|
if (plist->ph->type == phVOWEL) |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
break; |
|
|
|
|
|
case 12: // isVoiced |
|
|
case 12: // 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 13: // isFirstVowel |