|
|
@@ -966,51 +966,48 @@ static int TranslateLetter(Translator *tr, char *word, char *phonemes, int contr |
|
|
|
|
|
|
|
if (ph_buf[0] == 0) { |
|
|
|
// character name not found |
|
|
|
speak_letter_number = 1; |
|
|
|
if (!(al_flags & AL_NO_SYMBOL)) { |
|
|
|
if (iswalpha(letter)) |
|
|
|
Lookup(translator, "_?A", ph_buf); |
|
|
|
|
|
|
|
if (ph_buf[0] == 0) { |
|
|
|
speak_letter_number = 1; |
|
|
|
if (!(al_flags & AL_NO_SYMBOL)) { |
|
|
|
if (iswalpha(letter)) |
|
|
|
Lookup(translator, "_?A", ph_buf); |
|
|
|
if ((ph_buf[0] == 0) && !iswspace(letter)) |
|
|
|
Lookup(translator, "_??", ph_buf); |
|
|
|
|
|
|
|
if ((ph_buf[0] == 0) && !iswspace(letter)) |
|
|
|
Lookup(translator, "_??", ph_buf); |
|
|
|
|
|
|
|
if (ph_buf[0] == 0) |
|
|
|
EncodePhonemes("l'et@", ph_buf, NULL); |
|
|
|
} |
|
|
|
if (ph_buf[0] == 0) |
|
|
|
EncodePhonemes("l'et@", ph_buf, NULL); |
|
|
|
} |
|
|
|
|
|
|
|
if (!(control & 4) && (al_flags & AL_NOT_CODE)) { |
|
|
|
// don't speak the character code number, unless we want full details of this character |
|
|
|
speak_letter_number = 0; |
|
|
|
} |
|
|
|
if (!(control & 4) && (al_flags & AL_NOT_CODE)) { |
|
|
|
// don't speak the character code number, unless we want full details of this character |
|
|
|
speak_letter_number = 0; |
|
|
|
} |
|
|
|
|
|
|
|
if (speak_letter_number) { |
|
|
|
if (al_offset == 0x2800) { |
|
|
|
// braille dots symbol, list the numbered dots |
|
|
|
p2 = hexbuf; |
|
|
|
for (ix = 0; ix < 8; ix++) { |
|
|
|
if (letter & (1 << ix)) |
|
|
|
*p2++ = '1'+ix; |
|
|
|
} |
|
|
|
*p2 = 0; |
|
|
|
} else { |
|
|
|
// speak the hexadecimal number of the character code |
|
|
|
sprintf(hexbuf, "%x", letter); |
|
|
|
if (speak_letter_number) { |
|
|
|
if (al_offset == 0x2800) { |
|
|
|
// braille dots symbol, list the numbered dots |
|
|
|
p2 = hexbuf; |
|
|
|
for (ix = 0; ix < 8; ix++) { |
|
|
|
if (letter & (1 << ix)) |
|
|
|
*p2++ = '1'+ix; |
|
|
|
} |
|
|
|
*p2 = 0; |
|
|
|
} else { |
|
|
|
// speak the hexadecimal number of the character code |
|
|
|
sprintf(hexbuf, "%x", letter); |
|
|
|
} |
|
|
|
|
|
|
|
pbuf = ph_buf; |
|
|
|
for (p2 = hexbuf; *p2 != 0; p2++) { |
|
|
|
pbuf += strlen(pbuf); |
|
|
|
*pbuf++ = phonPAUSE_VSHORT; |
|
|
|
LookupLetter(translator, *p2, 0, pbuf, 1); |
|
|
|
if (((pbuf[0] == 0) || (pbuf[0] == phonSWITCH)) && (*p2 >= 'a')) { |
|
|
|
// This language has no translation for 'a' to 'f', speak English names using base phonemes |
|
|
|
EncodePhonemes(hex_letters[*p2 - 'a'], pbuf, NULL); |
|
|
|
} |
|
|
|
pbuf = ph_buf; |
|
|
|
for (p2 = hexbuf; *p2 != 0; p2++) { |
|
|
|
pbuf += strlen(pbuf); |
|
|
|
*pbuf++ = phonPAUSE_VSHORT; |
|
|
|
LookupLetter(translator, *p2, 0, pbuf, 1); |
|
|
|
if (((pbuf[0] == 0) || (pbuf[0] == phonSWITCH)) && (*p2 >= 'a')) { |
|
|
|
// This language has no translation for 'a' to 'f', speak English names using base phonemes |
|
|
|
EncodePhonemes(hex_letters[*p2 - 'a'], pbuf, NULL); |
|
|
|
} |
|
|
|
strcat(pbuf, pause_string); |
|
|
|
} |
|
|
|
strcat(pbuf, pause_string); |
|
|
|
} |
|
|
|
} |
|
|
|
|