diff --git a/dictsource/de_rules b/dictsource/de_rules index 00e48706..f09e5eab 100644 --- a/dictsource/de_rules +++ b/dictsource/de_rules @@ -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 diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 2c680e15..8af3a6ef 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -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 diff --git a/dictsource/hi_list b/dictsource/hi_list index 17e05a48..d13c1b36 100755 --- a/dictsource/hi_list +++ b/dictsource/hi_list @@ -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@ diff --git a/dictsource/hi_rules b/dictsource/hi_rules index 906a2a61..738f6415 100755 --- a/dictsource/hi_rules +++ b/dictsource/hi_rules @@ -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 diff --git a/dictsource/hu_rules b/dictsource/hu_rules index e4243aa6..7f8643e2 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -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 diff --git a/dictsource/ta_list b/dictsource/ta_list index f208ded7..00fb65b0 100644 --- a/dictsource/ta_list +++ b/dictsource/ta_list @@ -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 // சுழியம் diff --git a/phsource/compile_report b/phsource/compile_report index ccd9b8b4..85cdcb5c 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -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 diff --git a/phsource/ph_hindi b/phsource/ph_hindi index ec18d4c0..a82565d1 100644 --- a/phsource/ph_hindi +++ b/phsource/ph_hindi @@ -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 diff --git a/phsource/phonemes b/phsource/phonemes index e4ac994a..3993da28 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -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 diff --git a/src/numbers.cpp b/src/numbers.cpp index ac1209cc..2b6e1b2f 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -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 diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 36a18fee..ea6e0f3f 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -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; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index dcb4d5c9..23e22a2a 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -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); diff --git a/src/translate.cpp b/src/translate.cpp index 0a03aa1d..a94266bd 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -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; + } } } } diff --git a/src/translate.h b/src/translate.h index 2a075e98..2eaead14 100755 --- a/src/translate.h +++ b/src/translate.h @@ -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);