Fixes for ordinal numbers (lang=hu). Change phoneme names in Indian languages , [t.h] and [d.h] to [th.] [dh.] git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@226 d46cf337-b52f-0410-862d-fd96e6ae7743master
@@ -742,7 +742,6 @@ | |||
_) ne (g ne: | |||
neglig ne:gli:Z | |||
neglige ne:gli:Z | |||
&in) nen (_S3 @n | |||
&) ness _^_EN | |||
news _^_EN | |||
nieder ni:d3 | |||
@@ -1050,7 +1049,8 @@ | |||
_) voll (z f%Ol | |||
_) vorder fO*d@* | |||
-) vorha (nd fo:*h'a | |||
_) vor (ne 'fO* | |||
_) vor (ne 'fo:* | |||
_) vor (n fO* | |||
_) vor (@P3 'fo:* | |||
_) voraus (@P6 fo:*'aUs |
@@ -78,9 +78,10 @@ o o- ong ou u u@ ua uai | |||
uei uo y y& y@ yE yi yu | |||
; C f h j k kh l | |||
L m n N p ph r R | |||
s s. S; t th ts ts. ts. | |||
tS; tS; tsh v w x X z. | |||
L m n N p ph q r | |||
R s s. S; t th ts ts. | |||
ts. tS; tS; tsh v w x X | |||
z. | |||
Dictionary ca_dict | |||
@@ -472,11 +473,11 @@ l- o O o: O: O~ o~ r- | |||
U u: u~ V | |||
- : b bh c ch d d. | |||
d.h dh f g gh h H j | |||
dh dh. f g gh h H j | |||
J Jh k kh l l. m n | |||
N n. n^ p ph Q q r | |||
r. s S s. t T t. t.h | |||
th v w x z | |||
r. s S s. t T t. th | |||
th. v w x z | |||
Dictionary ta_dict | |||
@@ -499,10 +500,10 @@ O~ o~ r- U u u: u:~ u~ | |||
V | |||
* b B bh c C ch d | |||
d. d.h dh g gh h j J | |||
d. dh dh. g gh h j J | |||
Jh k kh l m n N n. | |||
n^ p ph Q r r. s S | |||
s. t t. t.h th tS x z | |||
s. t t. th th. tS x z | |||
Dictionary eu_dict | |||
@@ -523,11 +524,11 @@ a a: aI aU e E e: i | |||
I i: o o: r- u u: V | |||
y | |||
: b bh c ch d d. d.h | |||
dh dZ f g gh h j J | |||
: b bh c ch d d. dh | |||
dh. dZ f g gh h j J | |||
Jh k kh l l. m n N | |||
n. n^ p ph R R2 s S | |||
s. S; t t. t.h th tS v | |||
s. S; t t. th th. tS v | |||
w z | |||
@@ -537,11 +538,11 @@ a a: aI aU e E e: i | |||
I i: o o: r- u u: V | |||
y | |||
: b bh c ch d d. d.h | |||
dh dZ f g gh h j J | |||
: b bh c ch d d. dh | |||
dh. dZ f g gh h j J | |||
Jh k kh l l. m n N | |||
n. n^ p ph R R2 s s. | |||
S; t t. t.h th tS v w | |||
S; t t. th th. tS v w | |||
z z. | |||
@@ -563,11 +564,11 @@ o~ r- u uI u~ V VI VU | |||
V~ | |||
- : b bh c ch d d. | |||
d.h dh f g gh h H j | |||
J Jh k kh l l. m n | |||
N n. n^ p ph Q q r | |||
r. s S s. t T t. t.h | |||
th v w x z z. | |||
dh f g gh h H j J | |||
Jh k kh l l. m n N | |||
n. n^ p ph Q q r r. | |||
s S s. t T t. th v | |||
w x z z. | |||
Dictionary pap_dict | |||
@@ -593,12 +594,12 @@ t tS v w x z | |||
Dictionary pa_dict | |||
a a~ e E e~ E~ i I | |||
i: i~ I~ o O o: O~ o~ | |||
r- U u u~ U~ V V~ | |||
@ a a~ e E e~ E~ i | |||
I i: i~ I~ o O o: O~ | |||
o~ r- U u u~ U~ V V~ | |||
: b bh c ch d d. d.h | |||
dh f g gh H j J Jh | |||
k kh l l. m n N n. | |||
n^ p ph Q R s S t | |||
t. t.h th v x z | |||
: ; b bh c ch d d. | |||
dh dh. f g gh H j J | |||
Jh k kh l l. m n N | |||
n. n^ p ph Q R s S | |||
t t. th th. v x z |
@@ -10,7 +10,7 @@ _4 c'a:r: | |||
_5 p'a:nc | |||
_6 ch'@2 | |||
_7 s'a:t | |||
_8 'a:t.h | |||
_8 'a:th. | |||
_9 n'O: | |||
?3 _9 n'aU | |||
@@ -22,7 +22,7 @@ _14 ch'O:d@2 | |||
_15 p'Vndr@2 | |||
_16 s'o:l@2 | |||
_17 s'Vt:r@2 | |||
_18 Vt.h:'a:r@2 | |||
_18 Vth.:'a:r@2 | |||
_19 Unn'Is | |||
_20 b'i:s | |||
@@ -69,15 +69,15 @@ _57 sVt:'a:w@n | |||
_58 ath:'a:w@n | |||
_59 Uns'Vth | |||
_60 s'a:t.h | |||
_61 'Iks@t.h | |||
_62 b'a:s@t.h | |||
_63 t'Irs@t.h | |||
_64 c'O~s@t.h | |||
_65 paIns@t.h | |||
_66 ch'Ija:s@t.h | |||
_67 s'Vrs@t.h | |||
_68 ars@t.h | |||
_60 s'a:th. | |||
_61 'Iks@th. | |||
_62 b'a:s@th. | |||
_63 t'Irs@th. | |||
_64 c'O~s@th. | |||
_65 paIns@th. | |||
_66 ch'Ija:s@th. | |||
_67 s'Vrs@th. | |||
_68 ars@th. | |||
_69 Un@h,at:'Vr: | |||
_70 sat:'Vr: | |||
@@ -137,10 +137,10 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? | |||
झ Jh@ | |||
ञ n^@ | |||
ट t.@ | |||
ठ t.h@ | |||
ठ th.@ | |||
ड d.@ | |||
ड़ r.@ | |||
ढ d.h@ | |||
ढ dh.@ | |||
ण n.@ // retroflex n.@ | |||
त t@ | |||
थ th@ |
@@ -238,9 +238,9 @@ | |||
?1 ट (_ t. | |||
.group ठ | |||
ठ t.hV | |||
ठ (B t.h | |||
?1 ठ (_ t.h | |||
ठ th.V | |||
ठ (B th. | |||
?1 ठ (_ th. | |||
.group ड | |||
ड d.V | |||
@@ -252,9 +252,9 @@ | |||
?1 ड़ (_ r. | |||
.group ढ | |||
ढ d.hV | |||
ढ (B d.h | |||
?1 ढ (_ d.h | |||
ढ dh.V | |||
ढ (B dh. | |||
?1 ढ (_ dh. | |||
ढ़ r.hV // nukta (should retroflex flap) | |||
ढ़ (B r.h // nukta | |||
?1 ढ़ (_ r.h // nukta |
@@ -55,7 +55,7 @@ hierar) ch (i C | |||
nyol) c (sz ts | |||
har) c (sz ts | |||
lán) c (sz ts | |||
pá) c ts | |||
pá) c (só ts | |||
per) c (sz ts | |||
pol) c (so ts | |||
por) c (sé ts | |||
@@ -335,6 +335,8 @@ tsd tSd | |||
tsé tSe: | |||
t (cs t | |||
ttsé tS:e: | |||
tsu tSu | |||
j) ts tS | |||
C) tj c | |||
A) tj (A c: | |||
C) tyj c |
@@ -77,8 +77,8 @@ _! a:ctS:Vr,ijVkk,URi | |||
U+bf9 ru:ba:j | |||
// abbreviations | |||
ரூ ru:ba:j $dot | |||
Rs ru:pi:z $dot | |||
ரூ ru:ba:j $dot $only | |||
Rs ru:pi:z $dot $only | |||
// numbers | |||
_0 suz.ijVm // சுழியம் |
@@ -1,66 +1,66 @@ | |||
61 phoneme tables | |||
new total | |||
base 103 103 | |||
base2 26 124 | |||
en 50 149 | |||
en_n 32 149 | |||
en_us 37 150 | |||
en_sc 39 151 | |||
en_rp 34 149 | |||
en_wm 31 149 | |||
en_wi 30 149 | |||
af 39 135 | |||
cy 29 129 | |||
de 33 130 | |||
eo 13 115 | |||
jbo 4 116 | |||
fi 40 134 | |||
fr 55 141 | |||
fr_ca 11 141 | |||
hi 62 151 | |||
ta 20 154 | |||
hu 23 119 | |||
lv 29 126 | |||
nl 28 126 | |||
pl 20 117 | |||
sk 28 135 | |||
cs 6 135 | |||
hr 26 140 | |||
mk 3 141 | |||
sr 14 140 | |||
ru 39 134 | |||
it 17 127 | |||
la 21 121 | |||
base 104 104 | |||
base2 26 125 | |||
en 50 150 | |||
en_n 32 150 | |||
en_us 37 151 | |||
en_sc 39 152 | |||
en_rp 34 150 | |||
en_wm 31 150 | |||
en_wi 30 150 | |||
af 39 136 | |||
cy 29 130 | |||
de 33 131 | |||
eo 13 116 | |||
jbo 4 117 | |||
fi 40 135 | |||
fr 55 142 | |||
fr_ca 11 142 | |||
hi 62 152 | |||
ta 20 155 | |||
hu 23 120 | |||
lv 29 127 | |||
nl 28 127 | |||
pl 20 118 | |||
sk 28 136 | |||
cs 6 136 | |||
hr 26 141 | |||
mk 3 142 | |||
sr 14 141 | |||
ru 39 135 | |||
it 17 128 | |||
la 21 122 | |||
es 9 125 | |||
es_la 1 125 | |||
ca 11 127 | |||
pt 28 140 | |||
pt_pt 20 140 | |||
ro 36 146 | |||
el 8 124 | |||
grc 12 128 | |||
sv 25 125 | |||
no 28 129 | |||
is 33 129 | |||
vi 41 140 | |||
zhy 41 137 | |||
zh 66 154 | |||
sw 14 112 | |||
tr 18 127 | |||
ku 18 128 | |||
id 15 126 | |||
sq 35 127 | |||
hy 24 119 | |||
da 21 118 | |||
rw 15 131 | |||
ml 13 153 | |||
kn 15 153 | |||
bn 59 157 | |||
ne 18 159 | |||
mr 12 151 | |||
eu 6 125 | |||
mn 15 114 | |||
pa 12 152 | |||
pt 28 141 | |||
pt_pt 20 141 | |||
ro 36 147 | |||
el 8 125 | |||
grc 12 129 | |||
sv 25 126 | |||
no 28 130 | |||
is 33 130 | |||
vi 41 141 | |||
zhy 41 138 | |||
zh 66 155 | |||
sw 14 113 | |||
tr 18 128 | |||
ku 18 129 | |||
id 15 127 | |||
sq 35 128 | |||
hy 24 120 | |||
da 21 119 | |||
rw 15 132 | |||
ml 13 154 | |||
kn 15 154 | |||
bn 59 159 | |||
ne 18 160 | |||
mr 12 152 | |||
eu 6 126 | |||
mn 15 115 | |||
pa 13 153 | |||
Data file Used by | |||
b/b [b] base | |||
@@ -175,7 +175,7 @@ d/xd [d] base | |||
[d] hi | |||
[d.] hi | |||
[dh] hi | |||
[d.h] hi | |||
[dh.] hi | |||
[d] hu | |||
[d] pl | |||
[dz] pl | |||
@@ -938,8 +938,8 @@ ustop/q [q] base | |||
ustop/q_u [q] base | |||
ustop/t [t] base | |||
[t2] en | |||
[d.h] hi | |||
[t.h] hi | |||
[dh.] hi | |||
[th.] hi | |||
[t] zhy | |||
[t.h] bn | |||
ustop/t_ [t] base | |||
@@ -1392,6 +1392,7 @@ voc/v [v] base | |||
[v] is | |||
[v] da | |||
[v] bn | |||
[v] pa | |||
voc/v_ [B] base | |||
[v] base | |||
[v] fi | |||
@@ -1403,11 +1404,15 @@ voc/v_ [B] base | |||
[v] is | |||
[v] da | |||
[v] bn | |||
voc/v# [v] hi | |||
voc/v#_ [v] hi | |||
[v] pa | |||
voc/v# [v#] base | |||
[v] hi | |||
voc/v#_ [v#] base | |||
[v] hi | |||
voc/v2 [v#] es | |||
voc/vj [v] base | |||
[v] fr | |||
[v] pa | |||
vocw/dh [D] base | |||
[D] es | |||
vocw/Q [Q] base | |||
@@ -1422,6 +1427,7 @@ vocw/v [B] base | |||
[v] ta | |||
[v#] es | |||
[v;] ro | |||
[v] pa | |||
vocw/zh [Z] base | |||
[Z;] ro | |||
vocw/zh_rfx [z.] base | |||
@@ -2429,7 +2435,7 @@ x/d [d] base | |||
[t#] en_us | |||
[d] fr | |||
[d.] hi | |||
[d.h] hi | |||
[dh.] hi | |||
[d] hr | |||
[d] el | |||
[d] is |
@@ -437,14 +437,14 @@ phoneme t. | |||
switchvoicing d. | |||
endphoneme | |||
phoneme t.h | |||
phoneme th. | |||
vls rfx stop | |||
vowelin f1=0 f2=1800 -300 300 f3=-400 80 | |||
vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2 | |||
lengthmod 2 | |||
wave ustop/t | |||
// wave ustop/th_rfx | |||
switchvoicing d.h | |||
switchvoicing dh. | |||
endphoneme | |||
phoneme d. | |||
@@ -460,7 +460,7 @@ phoneme d. | |||
switchvoicing t. | |||
endphoneme | |||
phoneme d.h | |||
phoneme dh. | |||
vcd rfx stop | |||
vowelin f1=1 f2=1800 -300 300 f3=-400 80 | |||
vowelout f1=1 f2=1800 -300 300 f3=-400 80 colr=2 | |||
@@ -468,7 +468,7 @@ phoneme d.h | |||
// formants d/xd+x/d+ustop/th_rfx | |||
after @ d/xd | |||
lengthmod 5 | |||
switchvoicing t.h | |||
switchvoicing th. | |||
endphoneme | |||
@@ -807,6 +807,17 @@ phoneme v | |||
endphoneme | |||
phoneme v# // approximant, not fricative | |||
vcd lbd frc | |||
vowelin f1=1 f2=900 -300 -300 f3=-100 100 | |||
vowelout f1=1 f2=900 -500 -300 f3=-100 60 len=50 | |||
lengthmod 6 | |||
formants voc/v# | |||
before _ voc/v#_ | |||
switchvoicing f | |||
endphoneme | |||
phoneme D | |||
vcd dnt frc | |||
vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 |
@@ -761,7 +761,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out) | |||
int value; | |||
int subtract; | |||
int repeat = 0; | |||
int wflags = 0; | |||
WORD_TAB wtab[2]; | |||
unsigned int flags; | |||
char ph_roman[30]; | |||
char number_chars[N_WORD_BYTES]; | |||
@@ -772,6 +772,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out) | |||
acc = 0; | |||
prev = 0; | |||
subtract = 0x7fff; | |||
memset(wtab, 0, sizeof(wtab)); | |||
while((c = *word++) != ' ') | |||
{ | |||
@@ -826,8 +827,8 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out) | |||
sprintf(number_chars," %d ",acc); | |||
if(tr->langopts.numbers & NUM_ROMAN_ORDINAL) | |||
wflags |= FLAG_ORDINAL; | |||
TranslateNumber(tr, &number_chars[1], p, &flags, wflags); | |||
wtab[0].flags |= FLAG_ORDINAL; | |||
TranslateNumber(tr, &number_chars[1], p, &flags, wtab); | |||
if(tr->langopts.numbers & NUM_ROMAN_AFTER) | |||
strcat(ph_out,ph_roman); | |||
@@ -1282,8 +1283,8 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
} // end of LookupNum3 | |||
static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int *flags, int wflags) | |||
{//==================================================================================================== | |||
static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int *flags, WORD_TAB *wtab) | |||
{//======================================================================================================== | |||
// Number translation with various options | |||
// the "word" may be up to 4 digits | |||
// "words" of 3 digits may be preceded by another number "word" for thousands or millions | |||
@@ -1324,9 +1325,10 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
value = this_value = atoi(word); | |||
ph_ordinal2[0] = 0; | |||
if((tr->langopts.numbers & NUM_ORDINAL_DOT) && (word[ix] == '.') && !isdigit(word[ix+2])) | |||
if((tr->langopts.numbers & NUM_ORDINAL_DOT) && (word[ix] == '.') && IsAlpha(word[ix+2]) && !(wtab[1].flags & FLAG_FIRST_UPPER)) | |||
{ | |||
// ordinal number is indicated by dot after the number | |||
// but not if the next word starts with an upper-case letter | |||
ordinal = 2; | |||
word[ix] = ' '; | |||
@@ -1371,7 +1373,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
} | |||
} | |||
if(wflags & FLAG_ORDINAL) | |||
if(wtab[0].flags & FLAG_ORDINAL) | |||
ordinal = 2; | |||
ph_append[0] = 0; | |||
@@ -1586,13 +1588,13 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, int wflags) | |||
{//============================================================================================ | |||
int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab) | |||
{//================================================================================================ | |||
if(option_sayas == SAYAS_DIGITS1) | |||
return(0); // speak digits individually | |||
if(tr->langopts.numbers != 0) | |||
return(TranslateNumber_1(tr, word1, ph_out, flags, wflags)); | |||
return(TranslateNumber_1(tr, word1, ph_out, flags, wtab)); | |||
return(0); | |||
} // end of TranslateNumber |
@@ -35,7 +35,7 @@ | |||
#include "translate.h" | |||
#include "wave.h" | |||
const char *version_string = "1.41.11 09.Oct.09"; | |||
const char *version_string = "1.41.13 10.Oct.09"; | |||
const int version_phdata = 0x014100; | |||
int option_device_number = -1; |
@@ -527,7 +527,6 @@ Translator *SelectTranslator(const char *name) | |||
if(name2 == L('p','a')) | |||
{ | |||
tr->langopts.numbers = 0; // no number rules yet | |||
tr->letter_bits_offset = OFFSET_GURMUKHI; | |||
} | |||
SetIndicLetters(tr); |
@@ -715,7 +715,7 @@ if((wmark > 0) && (wmark < 8)) | |||
if(word_phonemes[0] == phonSWITCH) | |||
return(0); | |||
found = TranslateNumber(tr,word1,phonemes,dictionary_flags,wflags); | |||
found = TranslateNumber(tr,word1,phonemes,dictionary_flags,wtab); | |||
} | |||
if(!found & ((wflags & FLAG_UPPERS) != FLAG_FIRST_UPPER)) | |||
@@ -1962,6 +1962,7 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t | |||
int prev_out2; | |||
int prev_in2=0; | |||
int next_in; | |||
int next_in_nbytes; | |||
int char_inserted=0; | |||
int clause_pause; | |||
int pre_pause_add=0; | |||
@@ -2130,7 +2131,7 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t | |||
source_index += utf8_in(&cc,&source[source_index]); // cc = source[source_index++]; | |||
c = cc; | |||
} | |||
utf8_in(&next_in,&source[source_index]); | |||
next_in_nbytes = utf8_in(&next_in,&source[source_index]); | |||
if((c == CTRL_EMBEDDED) || (c == ctrl_embedded)) | |||
{ | |||
@@ -2333,13 +2334,18 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre | |||
prev_in2 = c; | |||
} | |||
else | |||
if((c != ' ') && iswupper(prev_in) && iswlower(next_in) && | |||
(memcmp(&source[source_index],"s ",2) != 0)) // ENGLISH specific plural | |||
if((c != ' ') && iswupper(prev_in) && iswlower(next_in)) | |||
{ | |||
c = ' '; // change from upper to lower case, start new word at the last uppercase | |||
space_inserted = 1; | |||
prev_in2 = c; | |||
next_word_flags |= FLAG_NOSPACE; | |||
int next2_in; | |||
utf8_in(&next2_in,&source[source_index + next_in_nbytes]); | |||
if(IsAlpha(next2_in)) | |||
{ | |||
// changing from upper to lower case, start new word at the last uppercase, if 3 or more letters | |||
c = ' '; | |||
space_inserted = 1; | |||
prev_in2 = c; | |||
next_word_flags |= FLAG_NOSPACE; | |||
} | |||
} | |||
} | |||
} |
@@ -569,7 +569,7 @@ int SetTranslator2(const char *name); | |||
void DeleteTranslator(Translator *tr); | |||
int Lookup(Translator *tr, const char *word, char *ph_out); | |||
int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, int wflags); | |||
int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab); | |||
int TranslateRoman(Translator *tr, char *word, char *ph_out); | |||
void ChangeWordStress(Translator *tr, char *word, int new_stress); |