diff --git a/dictsource/de_rules b/dictsource/de_rules index fb141b56..e3896f33 100644 --- a/dictsource/de_rules +++ b/dictsource/de_rules @@ -256,7 +256,7 @@ e) chen (_ C@n ü) chen (_ C@n - chs ks (_ + chs ks chance SA~s@ chara (kt k%ara _) ch (ic S diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 691c270f..8d75b59b 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -78,7 +78,7 @@ S s2 t t2 tS ts v w z Z -Dictionary de_dict 2012-06-27 +Dictionary de_dict 2012-09-13 3 @ @- a A A: aI aU A~ E E2 E: e: EI i I @@ -102,7 +102,7 @@ p Q r R s s; t T ts v x z -Dictionary en_dict 2012-09-08 +Dictionary en_dict 2012-09-14 0 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI3 aI@ @@ -376,7 +376,7 @@ S s; S; t t; tS ts tS; ts; v w x z Z Z; -Dictionary pt_dict 2012-09-11 +Dictionary pt_dict 2012-09-14 & &/ &U~ &~ @ @- a A aI aU e E eI EI eU EU @@ -508,11 +508,11 @@ i i. i[ iA iE io iou N- 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 Q q -Q" Q^ r R R2 R3 s s. -S; t th ts ts. ts. tS; tS; -tsh v w x X z. +; C f h j J^ k kh +l l# m n N p ph Q +q Q" Q^ r R R2 R3 s +s. S; t th ts ts. ts. tS; +tS; tsh v w x X z. Dictionary zhy_dict 2009-01-19 @@ -814,10 +814,10 @@ tS ts tS; v x z Z z; Z; -Dictionary tt_dict 2012-09-11 +Dictionary tt_dict 2012-09-14 -a A A2 e e2 i I o -u u2 V W y +& a A e e2 e: i I +o u u2 V W y : ? b d f g h j k l m n N p q r @@ -825,10 +825,11 @@ R s S S; t w x z Z Z; -Dictionary ko_dict 2012-06-14 +Dictionary ko_dict 2012-09-14 @ a e E i o u u- * - ; b d dZ; g h -j k k- kh l m n p -p- ph s t t- tS tS; w +j k k- kh l m n N +p p- ph q r s t t- +tS tS; w diff --git a/dictsource/en_list b/dictsource/en_list index 74ca29b9..e1d79dbe 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -3054,6 +3054,7 @@ Katie keIti Keighli keIli Keanu kI'A:nu: Kieran ki@r@n +Kris krIs Laurence l0r@ns Lawrence l0r@ns Leann li:'an diff --git a/dictsource/es_rules b/dictsource/es_rules index b9b0ea9d..e040bb71 100644 --- a/dictsource/es_rules +++ b/dictsource/es_rules @@ -1,4 +1,4 @@ -// translation rules for Spanish +// translation rules for Spanish // This file is UTF-8 encoded // Conditional rules @@ -128,8 +128,9 @@ ll (_ l .group m m m + @) m (_ =m _) mn (em n -_) mb (A mb + _) mb (A mb .group n diff --git a/dictsource/ko_list b/dictsource/ko_list index 2cb02d83..00082ddf 100644 --- a/dictsource/ko_list +++ b/dictsource/ko_list @@ -1,5 +1,6 @@ $textmode +// Number forms: _0 ᅧᆼ _1 ᅵᆯ _2 ᅵ @@ -23,6 +24,46 @@ _0C 백 _0M1 천 _1M1 천 +$phonememode +_0M2 m'an // 10^4 +_1M2 m'an +_0M3 tSh-@n||m'an // 10^7 +_1M3 tSh-@n||m'an +_0M4 '@q // 10^8 +_1M4 '@q +_0M5 tSh-@n||'@q // 10^11 +_1M5 tSh-@n||'@q +_0M6 tS;'o // 10^12 +_1M6 tS;'o +_0M7 tSh-@n||tS;'o +_1M7 tSh-@n||tS;'o +_0M8 gj'@nN +_1M8 gj'@nN +$textmode + + +// Character names: +ㄱ ㄱㅣㅇㅕㄱ +ㄲ ㅆㅏㅇㄱㅣㅇㅕㄱ +ㄴ ㄴㅣㅇㅡㄴ +ㄷ ㄷㅣㄱㅡㄷ +ㄸ ㅆㅏㅇㄷㅣㄱㅡㄷ +ㄹ ㄹㅣㅇㅡㄹ +ㅁ ㅁㅣㅇㅡㅁ +ㅂ ㅂㅣㅇㅡㅂ +ㅃ ㅆㅏㅇㅂㅣㅇㅡㅂ +ㅅ ㅅㅣㅇㅗㅅ +ㅆ ㅆㅏㅇㅅㅣㅇㅗㅅ +ㅇ ㅇㅣㅇㅡㅇ +ㅈ ㅈㅣㅇㅡㅈ +ㅉ ㅆㅏㅇㅈㅣㅇㅡㅈ +ㅊ ㅊㅣㅇㅡㅊ +ㅋ ㅋㅣㅇㅡㅋ +ㅌ ㅌㅣㅇㅡㅌ +ㅍ ㅍㅣㅇㅡㅍ +ㅎ ㅎㅣㅇㅡㅎ + +// Misc: // 사ᅵ시ᅩᆺ 고랫재 고랟째 귓밥 귇빱 diff --git a/dictsource/ko_rules b/dictsource/ko_rules index 328e5a33..12d89194 100644 --- a/dictsource/ko_rules +++ b/dictsource/ko_rules @@ -19,20 +19,20 @@ // Order: ㄱㄲㅋ ㄷㄸㅌ ㅂㅃㅍ ㅅㅆㅈㅉㅊ ㄴㅁ ㄹ ㅎ .group ᄀ // ㄱ - ᄀ g - _) ᄀ k + ᄀ q + _) ᄀ g L01) ᄀ k- L03) ᄀ kh .group ᄁ // ㄲ - ᄁ k- + ᄁ q- .group ᄏ // ㅋ ᄏ kh .group ᄃ // ㄷ ᄃ d - _) ᄃ t + _) ᄃ d L01) ᄃ t- L03) ᄃ th @@ -55,7 +55,7 @@ ᄑ ph .group ᄉ // ㅅ - ᄉ s + ᄉ |s L01) ᄉ s- .group ᄊ // ㅆ @@ -68,16 +68,16 @@ L03) ᄌ tSh; .group ᄍ // ㅉ - ᄍ tS;- // TODO: phoneme + ᄍ 'tS;- // TODO: phoneme .group ᄎ // ㅊ - ᄎ tSh; // TODO: phoneme + ᄎ tSh- // TODO: phoneme .group ᄂ // ㄴ - ᄂ n + ᄂ ;n .group ᄆ // ㅁ - ᄆ m + ᄆ ;m .group ᄅ // ㄹ ᄅ * // TODO: alveolar flap [ɾ] @@ -87,7 +87,7 @@ ᄒ h // TODO: [ɦ] _) ᄒ h -// Medials +// Medials or vowels .group ᅡ // ㅏ ᅡ a @@ -157,7 +157,7 @@ // Order: ㄱㄳㄲㅋ ㄷㅌ ㅂㅍ ㅅㅆㅈㅊ ㄴㅁ ㅇㅎ ㄹ .group ᆨ // ㄱ - ᆨ k // TODO: final stops + ᆨ q // It is actually q, as using k adds unnecessary sound. ᆨᄒ kh .group ᆪ // ㄳ @@ -175,14 +175,14 @@ ᆿ (A kh .group ᆮ // ㄷ - ᆮ t + ᆮ d- // Actually a soft D. ᆮᄂ nn ᆮᄆ mm ᆮᄒ th ᆮ (L02 dZ; .group ᇀ // ㅌ - ᇀ t + ᇀ t- ᇀᄂ nn ᇀᄆ mm ᇀ (A th @@ -202,14 +202,14 @@ ᇁ (A ph .group ᆺ // ㅅ - ᆺ t + ᆺ t- ᆺᄂ nn ᆺᄆ mm ᆺ (A s ᆺᄒ s- .group ᆻ // ㅆ - ᆻ t + ᆻ t- ᆻᄂ nn ᆻᄆ mm ᆻ (A s- @@ -241,14 +241,14 @@ ᆷ m .group ᆼ // ㅇ - ᆼ ng + ᆼ nN .group ᇂ // ㅎ - ᇂ t + ᇂ t- ᇂ (A .group ᆯ // ㄹ - ᆯ l + ᆯ rr ᆯᄅ l ᆯ (A * diff --git a/dictsource/pt_list b/dictsource/pt_list index 0c125207..f9a2b59d 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -644,6 +644,7 @@ governo gov'ernU $noun // $alt changes stressed [e] or [o] phoneme to open [E] or [O] // $alt2 changes stressed [E] or [O] phoneme to close [e] or [o] +aborto $alt $verb acerto $alt2 $noun adereço $alt2 adore $alt @@ -659,10 +660,12 @@ ameba $alt amores $alt2 anoiteça $alt2 anoiteço $alt2 +apego $alt2 apreço $alt2 aperto $alt2 $noun apoio $alt $verb aprendeste $alt2 +arremesso $alt2 $noun assembleia $alt atrozes $alt austera $alt @@ -676,11 +679,13 @@ boleia $alt bolo $alt2 borboleta $alt2 bordo $alt +bromelha $alt cabeça $alt2 cacete $alt2 cachorra $alt2 camiseta $alt2 cantora $alt2 +caractere $alt casebre $alt catorze $alt2 cefaleia $alt @@ -714,9 +719,12 @@ crede $alt2 cresce $alt crescem $alt der $alt +desapego $alt2 $noun desce $alt descem $alt +descordo $alt descova $alt2 +desespero $alt2 $noun desfecho $alt2 desprezo $alt $verb deva $alt2 @@ -727,8 +735,11 @@ discordo $alt dobro $alt2 $noun doce $alt2 droga $alt +emprego $alt2 $noun endereço $alt2 enumerem $alt +enredo $alt $verb +enterro $alt2 $noun enxerto $alt2 $noun epopeia $alt eritreia $alt @@ -740,7 +751,7 @@ esforços $alt esperma $alt espeto $alt2 $noun espiroqueta $alt2 -enterro $alt2 $noun +esqueleto $alt2 estiverdes $alt estiveres $alt estrofe $alt @@ -750,6 +761,7 @@ expeça $alt2 expeço $alt2 farofa $alt febre $alt +fera $alt fere $alt ferem $alt fezes $alt @@ -758,6 +770,7 @@ Fizeram $alt fizerem $alt fizerdes $alt fizeres $alt +folga $alt fogos $alt fores $alt2 forro $alt $verb @@ -765,6 +778,7 @@ fosse $alt2 fossem $alt2 foste $alt2 frevo $alt2 +galera $alt gameta $alt2 geleia $alt gelo $alt $verb @@ -850,10 +864,12 @@ povos $alt poxa p'oS& preta $alt2 preto $alt2 +primavera $alt profere $alt proferem $alt puder $alt puserdes $alt +recomeço $alt2 $noun recordo $alt recorto $alt rede $alt2 @@ -874,11 +890,14 @@ sincero $alt sobe $alt sobem $alt soco $alt2 +soco $alt $verb sofrem $alt sofre $alt sofreste $alt2 +sogra $alt sopre $alt soprem $alt +sopro $alt $verb sorvete $alt2 sossego $alt2 $noun souber $alt @@ -889,6 +908,7 @@ sugere $alt sugerem $alt suor swOr tapete $alt2 +tempero $alt $verb teta $alt2 tiver $alt tiveres $alt diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 227096e9..f25f31b2 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -16,7 +16,7 @@ // endings .L01 a am o -.L02 a am e em o +.L02 a am e em o ue uem .L03 a am .group a @@ -367,6 +367,13 @@ _compar) e (çL01_ e _desapar) e (çL01_ e _esclar) e (çL01_ e _reapar) e (çL01_ e + _sol) e (trL01_ E +_acont) e (çL03_ e +_envaid) e (çL01_ e + _ofer) e (çL01_ e +_enriqu) e (çL01_ e +_descr) e (vL01_ e +_enfraqu) e (çL01_ e //endsort .group é @@ -653,11 +660,14 @@ _reapar) e (çL01_ e ?1 f) o (rmulá u // eg: formulário, formulários. ?1 v) o (lt O +//sort _m) o (lhL02_ O + _ref) o (gL02_ O c) o (rrL03_ o // escorra, incorra, corra, recorra _m) o (rrL03_ o _ap) oi (L03_ OI p) ostos (_ Ost=Us# // dispostos etc. +//endsort .group ô ô ''o diff --git a/dictsource/tt_list b/dictsource/tt_list index 340e2c8f..b34ce97d 100644 --- a/dictsource/tt_list +++ b/dictsource/tt_list @@ -36,8 +36,8 @@ щ SS;A ъ kAlVnl,Vqbilges'e ы V: -ь neS;kal,ekbilges'e -э e: +ь neS;k&l,ekbilges'e +э e|: ю ju я jA @@ -69,7 +69,7 @@ _4X kVr'Vk _5X ill'e _6X Altm'VS _7X Z;itm'eS -_8X siks'an +_8X siks'&n _9X tuks'An _0C j'Wz _0M1 m'eN @@ -80,4 +80,4 @@ _1M3 milli'Ard _0M4 billi'on _1M4 billi'on -_dpt bWt,en +_dpt _bWt,en diff --git a/dictsource/tt_rules b/dictsource/tt_rules index 09d21a83..2923bff1 100755 --- a/dictsource/tt_rules +++ b/dictsource/tt_rules @@ -6,7 +6,8 @@ а A .group ә - ә a + ә & + әе e: // 'әнкәен' .group б б b @@ -15,13 +16,13 @@ в w // [v] in Russian words .group г - г g // may be [Q] or [r"] ?? + г g // changes to [Q] or [Q"] .group д д d .group е - _) е je2 // may be [je] [jV] + _) е je2 // changes to [je] or [jV] е e .group ё @@ -38,6 +39,7 @@ .group и и i + A) и j .group й й j @@ -54,7 +56,7 @@ .group н н n - н (к N +// н (к N н (г N н (х N @@ -81,9 +83,11 @@ .group у у u // or w + A) у w .group ү ү y // or w + A) ү w .group ф ф f @@ -120,10 +124,10 @@ э e .group ю - ю ju2 // or jy + ю ju2 // changes to ju or jy .group я - я jA2 // or ja + я ja // changes to jA or j& .group $ dolAR diff --git a/phsource/compile_report b/phsource/compile_report index 6b7406f3..38e51190 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,88 +1,88 @@ 83 phoneme tables new total - base 107 107 -consonants 10 116 - base2 26 123 - en 53 153 - en-n 33 153 - en-us 41 154 - en-sc 40 155 - en-rp 34 153 - en-wm 31 153 - en-wi 30 153 - af 39 136 - cy 29 132 - de 41 139 - eo 13 114 - jbo 2 114 - nci 3 123 - fi 41 133 - et 40 133 - fr 64 144 - fr-ca 11 144 - hi 57 148 - ta 23 152 - kn 17 148 - ml 21 151 - hu 25 122 - lt 44 137 - lv 29 125 - nl 35 128 - pl 22 120 - sk 28 135 - cs 7 135 - hr 25 140 - mk 3 141 - sr 14 142 - ru 49 137 - bg 14 123 - it 19 127 - la 21 124 - es 15 123 - es-la 1 123 - ca 11 125 - pt 29 138 - pt-pt 20 138 - ro 36 146 - el 10 123 - grc 12 127 - sv 22 127 - no 28 132 - is 42 139 - vi 41 139 - zhy 41 136 - zh 64 153 - sw 9 108 - tr 19 126 - ku 18 127 - id 15 125 - sq 33 126 - hy 23 117 - da 27 120 - ka 19 112 - rw 15 130 - ne 18 156 - pa 15 150 - prs 8 111 - sl 10 135 - gd 6 107 - nso 12 111 - ht 11 144 - az 10 127 - ak 8 109 - am 15 112 - wo 18 118 - dv 14 148 - te 16 148 - si 24 154 - tn 27 119 - mt 32 127 - bo 10 152 - kk 20 117 - fa 9 110 - ga 21 125 - tt 18 116 - ko 15 114 + base 109 109 +consonants 10 118 + base2 26 125 + en 53 155 + en-n 33 155 + en-us 41 156 + en-sc 40 157 + en-rp 34 155 + en-wm 31 155 + en-wi 30 155 + af 39 138 + cy 29 134 + de 41 141 + eo 13 116 + jbo 2 116 + nci 3 125 + fi 41 135 + et 40 135 + fr 64 146 + fr-ca 11 146 + hi 57 150 + ta 23 154 + kn 17 150 + ml 21 153 + hu 25 124 + lt 44 139 + lv 29 127 + nl 35 130 + pl 22 122 + sk 28 137 + cs 7 137 + hr 25 142 + mk 3 143 + sr 14 144 + ru 49 139 + bg 14 124 + it 19 129 + la 21 126 + es 15 125 + es-la 1 125 + ca 11 127 + pt 29 140 + pt-pt 20 140 + ro 36 148 + el 10 125 + grc 12 129 + sv 22 129 + no 28 134 + is 42 141 + vi 41 141 + zhy 41 138 + zh 64 155 + sw 9 110 + tr 19 128 + ku 18 129 + id 15 127 + sq 33 127 + hy 23 119 + da 27 122 + ka 19 114 + rw 15 132 + ne 18 158 + pa 15 152 + prs 8 113 + sl 10 137 + gd 6 109 + nso 12 113 + ht 11 146 + az 10 129 + ak 8 111 + am 15 114 + wo 18 120 + dv 14 150 + te 16 150 + si 24 156 + tn 27 121 + mt 32 129 + bo 10 154 + kk 20 118 + fa 9 112 + ga 21 127 + tt 23 120 + ko 15 116 Data file Used by b/b [b] base @@ -417,7 +417,7 @@ l/l_ [l] base [l/] fr l/l_@ [l/3] base [l/] fr -l/l@ [hæu] base +l/l@ [h1ø] base [l#] base [l] fr [l/2] fr @@ -451,7 +451,7 @@ l/L2_oL [l/2] base l/L2_uL [l/2] base l/l_3 [l/] de l/l_4 [ll] sq -l/la [hæu] base +l/la [h1ø] base [l#] base [l] fr [l/2] fr @@ -459,7 +459,7 @@ l/la [h [K] tn l/l_a [l/3] base [l/] fr -l/le [hæu] base +l/le [h1ø] base [l#] base [l] fr [l/2] fr @@ -471,7 +471,7 @@ l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [hæu] base +l/li [h1ø] base [l#] base [l] fr [l/2] fr @@ -481,11 +481,11 @@ l/li [h l/l_i [l/3] base [l/] fr [i] sq -ll/ll [L] bg -ll/_ll [L] bg +ll/ll [L] base +ll/_ll [L] base l/l_long [l] base [l] fr -l/lo [hæu] base +l/lo [h1ø] base [l#] base [l/2] fr [K] nso @@ -496,7 +496,7 @@ l^/l_rfx [l.] base [l;] lt [l] ru [l^] ru -l/lu [hæu] base +l/lu [h1ø] base [l#] base [l] fr [l/2] fr @@ -505,7 +505,7 @@ l/lu [h l/l_u [l/3] base [l/] fr l/l_vi [l] vi -ll/xll [L] bg +ll/xll [L] base l/l_y [l/] fr l/tl [l] base [l] fr @@ -1493,7 +1493,7 @@ vowel/@_2 [@] vi [@] sq [V] sq [@/] sq -vowel/&_2 [a] tt + [V] tt vowel/@_3 [@#] en [@] en-sc [I] en-sc @@ -1655,7 +1655,6 @@ vowel/aa [a:] et [aa] zhy [a] hy [a] az - [A] tt vowel/aa# [O] en-us [0] en-wi [a2] fi @@ -1682,6 +1681,7 @@ vowel/aa_8 [0] en-us [A1] et [A] nl [a:] is + [A] tt [a] ko vowel/aa_9 [a] fi [a] et @@ -1749,6 +1749,7 @@ vowel/e_3 [i] en-n vowel/e_5 [i] en-sc vowel/e_6 [e] ht [e] ak + [e:] tt vowel/e_7 [e:] et vowel/e_8 [E:] de [e] fr @@ -1756,6 +1757,7 @@ vowel/e_8 [E:] de vowel/ee [E] en-n [E] sv [e] ka + [&] tt vowel/e_e [E] en-sc [E:] is vowel/ee# [E#] pl @@ -2083,7 +2085,6 @@ vowel/o-_2 [V] en-n vowel/o_3 [oU] en-sc [o] kk vowel/o-_3 [U] en-rp - [V] tt vowel/o-_4 [o] ro [o] am vowel/o_5 [O] da diff --git a/phsource/ph_bulgarian b/phsource/ph_bulgarian index 4a56e0fb..005c03f7 100644 --- a/phsource/ph_bulgarian +++ b/phsource/ph_bulgarian @@ -72,20 +72,7 @@ phoneme l endphoneme phoneme L // velar L - liquid - lengthmod 7 - - IF nextPh(isNotVowel) THEN - ChangePhoneme(l/2) // use 'dark' [l] after a vowel - ENDIF - - VowelEnding(ll/xll, -40) - - IF prevPh(isPause) THEN - FMT(ll/_ll) - ENDIF - - FMT(ll/ll) + import_phoneme base/L endphoneme diff --git a/phsource/ph_english b/phsource/ph_english index 088a6e57..566f3536 100644 --- a/phsource/ph_english +++ b/phsource/ph_english @@ -51,8 +51,7 @@ phoneme l // use dark [l/2] before not-vowel liquid lengthmod 7 - IF nextPhW(isVowel) THEN - ELSE + IF NOT nextPhW(isVowel) THEN IF prevPh(isVowel) OR prevPh(j) OR prevPh(w) THEN ChangePhoneme(l/2) ELSE @@ -110,8 +109,7 @@ phoneme z/2 // used for 's suffix InsertPhoneme(I2) ENDIF - IF prevPh(isVoiced) THEN - ELSE + IF NOT prevPh(isVoiced) THEN ChangePhoneme(s) ENDIF ChangePhoneme(z) diff --git a/phsource/ph_tatar b/phsource/ph_tatar index a6e6b1ff..d37d3e34 100644 --- a/phsource/ph_tatar +++ b/phsource/ph_tatar @@ -1,6 +1,6 @@ -// use 'flag1' for front vowels +// use 'flag1' for front vowels, 'flag2' for back vowels phoneme i vowel flag1 starttype #i endtype #i @@ -15,11 +15,87 @@ phoneme y endphoneme phoneme u - vowel starttype #u endtype #u + vowel flag2 starttype #u endtype #u length 180 FMT(vowel/u) endphoneme + +phoneme e + vowel flag1 starttype #@ endtype #@ + length 110 + FMT(vowel/ii#) +endphoneme + + +phoneme W + vowel flag1 starttype #@ endtype #@ + length 110 + FMT(vowel/oe) +endphoneme + +phoneme o + vowel flag2 starttype #o endtype #o + length 110 + FMT(vowel/o_mid) +endphoneme + +phoneme V + vowel flag2 starttype #@ endtype #@ + length 110 + ipa ɯ + FMT(vowel/@_2) +endphoneme + + +phoneme & + vowel flag1 starttype #e endtype #e + length 180 + FMT(vowel/ee) +endphoneme + +phoneme A + vowel flag2 starttype #a endtype #a + length 180 + IF NOT nextPhW(w) AND NOT thisPh(isTranslationGiven) THEN + IF thisPh(isFirstVowel) THEN + ChangePhoneme(0) + ENDIF + IF prevVowel(0) AND thisPh(isSecondVowel) THEN + ChangePhoneme(0) + ENDIF + ENDIF + FMT(vowel/aa_8) +endphoneme + +phoneme 0 + vowel flag2 starttype #o endtype #o + length 180 + FMT(vowel/0_3) +endphoneme + + +phoneme e: + vowel flag1 starttype #e endtype #e + length 240 + FMT(vowel/e_6) +endphoneme + +phoneme I + vowel flag1 starttype #i endtype #i + length 110 + FMT(vowel/ii) +endphoneme + +phoneme a // letter 'я' + vowel starttype #a endtype #a + length 180 + IF prevVowel(isFlag1) OR nextVowel(isFlag1) THEN // front vowels + ChangePhoneme(&) + ENDIF + ChangePhoneme(A) +endphoneme + phoneme u2 // letter 'ю' vowel starttype #u endtype #u length 180 @@ -30,78 +106,14 @@ phoneme u2 // letter 'ю' ENDIF endphoneme -phoneme e - vowel flag1 starttype #@ endtype #@ - length 100 - FMT(vowel/ii#) -endphoneme - phoneme e2 // 'e' at start of word vowel starttype #@ endtype #@ length 100 - IF nextVowel(isFlag1) THEN + IF nextVowel(isFlag2) THEN + ChangePhoneme(V) + ELSE ChangePhoneme(e) ENDIF - ChangePhoneme(V) -endphoneme - -phoneme W - vowel flag1 starttype #@ endtype #@ - length 100 - FMT(vowel/oe) -endphoneme - -phoneme o - vowel starttype #o endtype #o - length 100 - FMT(vowel/o_mid) -endphoneme - -phoneme V - vowel starttype #@ endtype #@ - length 100 - FMT(vowel/o-_3) -endphoneme - - -phoneme a - vowel flag1 starttype #a endtype #a - length 180 - FMT(vowel/&_2) -endphoneme - -phoneme A - vowel starttype #a endtype #a - length 180 - IF thisPh(isFirstVowel) THEN - ChangePhoneme(0) - ENDIF - IF prevVowel(0) THEN - ChangePhoneme(0) - ENDIF - FMT(vowel/aa) -endphoneme - -phoneme A2 // letter 'я' - vowel starttype #a endtype #a - length 180 - IF prevVowel(isFlag1) OR nextVowel(isFlag1) THEN - ChangePhoneme(a) - ENDIF - ChangePhoneme(A) -endphoneme - -phoneme 0 - vowel starttype #o endtype #o - length 180 - FMT(vowel/0_3) -endphoneme - - -phoneme I - vowel flag1 starttype #i endtype #i - length 100 - FMT(vowel/ii) endphoneme @@ -113,10 +125,39 @@ phoneme r endphoneme phoneme t - import_phoneme base/t[ + import_phoneme base2/t endphoneme phoneme d import_phoneme base/d[ endphoneme +phoneme k + vls vel stop + IF prevVowel(isFlag2) OR nextVowel(isFlag2) THEN // back vowels + ChangePhoneme(q) + ENDIF + CALL base/k +endphoneme + +phoneme G + import_phoneme base/Q" +endphoneme + +phoneme g + vcd vel frc + IF prevVowel(isFlag2) OR nextVowel(isFlag2) THEN + ChangePhoneme(G) + ELSE + ChangePhoneme(Q) + ENDIF +endphoneme + + +phoneme l + liquid + IF prevVowel(isFlag2) OR nextVowel(isFlag2) THEN + ChangePhoneme(L) + ENDIF + CALL base/l +endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index dab4c599..0b536b85 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -576,6 +576,29 @@ phoneme l. endphoneme +phoneme L/ + import_phoneme base/l/2 +endphoneme + +phoneme L // velar L + liquid + lengthmod 7 + + IF nextPh(isNotVowel) THEN + ChangePhoneme(L/) // use 'dark' [l] after a vowel + ENDIF + + VowelEnding(ll/xll, -40) + + IF prevPh(isPause) THEN + FMT(ll/_ll) + ENDIF + + FMT(ll/ll) +endphoneme + + + phoneme w liquid diff --git a/src/compiledata.cpp b/src/compiledata.cpp index d0f005b1..de977964 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -71,6 +71,7 @@ typedef struct { #define k_AND 1 #define k_OR 2 #define k_THEN 3 +#define k_NOT 4 #define kTHISSTRESS 0x800 @@ -90,6 +91,7 @@ static keywtab_t k_conditions[] = { {"AND", 0, k_AND}, {"OR", 0, k_OR}, {"THEN", 0, k_THEN}, + {"NOT", 0, k_NOT}, {"prevPh", tWHICH_PHONEME, 0}, {"prevPhW", tWHICH_PHONEME, 5}, {"thisPh", tWHICH_PHONEME, 1}, @@ -2257,10 +2259,11 @@ int CompileIf(int elif) int key; int finish = 0; int word = 0; - int word2 = 0; + int word2; int data; int bitmap; int brackets; + int not_flag; USHORT *prog_last_if = NULL; then_count = 2; @@ -2268,6 +2271,8 @@ int CompileIf(int elif) while(!finish) { + not_flag = 0; + word2 = 0; if(prog_out >= prog_out_max) { error("Phoneme program too large", NULL); @@ -2277,6 +2282,13 @@ int CompileIf(int elif) if((key = NextItem(tCONDITION)) < 0) error("Expected a condition, not '%s'",item_string); + if((item_type == 0) && (key == k_NOT)) + { + not_flag = 1; + if((key = NextItem(tCONDITION)) < 0) + error("Expected a condition, not '%s'",item_string); + } + if(item_type == tWHICH_PHONEME) { // prevPh(), thisPh(), nextPh(), next2Ph() etc @@ -2331,7 +2343,9 @@ int CompileIf(int elif) *prog_out++ = word | i_CONDITION; if(word2 != 0) - *prog_out++ = word2; + *prog_out++ = word2; + if(not_flag) + *prog_out++ = i_NOT; // expect AND, OR, THEN switch(NextItem(tCONDITION)) diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 85a4ead6..0aa1d63c 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -521,7 +521,7 @@ sprintf(outptr,"* "); unsigned short ipa1[96] = { 0x20,0x21,0x22,0x2b0,0x24,0x25,0x0e6,0x2c8,0x28,0x27e,0x2a,0x2b,0x2cc,0x2d,0x2e,0x2f, 0x252,0x31,0x32,0x25c,0x34,0x35,0x36,0x37,0x275,0x39,0x2d0,0x2b2,0x3c,0x3d,0x3e,0x294, -0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x4c,0x271,0x14b,0x254, +0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x29f,0x271,0x14b,0x254, 0x3a6,0x263,0x280,0x283,0x3b8,0x28a,0x28c,0x153,0x3c7,0xf8,0x292,0x32a,0x5c,0x5d,0x5e,0x5f, 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x261,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x303,0x7f diff --git a/src/synthdata.cpp b/src/synthdata.cpp index eb557105..d39d90d5 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.46.24 11.Sep.12"; +const char *version_string = "1.46.25 14.Sep.12"; const int version_phdata = 0x014624; int option_device_number = -1; @@ -929,6 +929,7 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ int instn2; int or_flag; bool truth; + bool truth2; int data; int end_flag; int ix; @@ -1044,14 +1045,20 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ while((instn & 0xe000) == 0x2000) { // process a sequence of conditions, using boolean accumulator - if(or_flag) - truth = (truth || InterpretCondition(tr, control, plist, prog, worddata)); - else - truth = (truth && InterpretCondition(tr, control, plist, prog, worddata)); - or_flag = instn & 0x1000; + truth2 = InterpretCondition(tr, control, plist, prog, worddata); prog += NumInstnWords(prog); + if(*prog == i_NOT) + { + truth2 = truth2 ^ 1; + prog++; + } + + if(or_flag) + truth = truth || truth2; + else + truth = truth && truth2; + or_flag = instn & 0x1000; instn = *prog; -// instn = *(++prog); } if(truth == false) diff --git a/src/synthesize.h b/src/synthesize.h index 10151e09..b7041b72 100644 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -273,6 +273,7 @@ typedef struct { #define i_RETURN 0x0001 #define i_CONTINUE 0x0002 +#define i_NOT 0x0003 // Group 0 instrcutions with 8 bit operand. These values go into bits 8-15 of the instruction #define i_CHANGE_PHONEME 0x01 diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 7f0b9b69..eb6ca4b4 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -957,6 +957,8 @@ SetLengthMods(tr,3); // all equal tr->langopts.stress_rule = 8; // ?? 1st syllable if it is heavy, else 2nd syllable tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words tr->langopts.numbers = NUM_OMIT_1_HUNDRED; + tr->langopts.break_numbers = 0x9999998; + tr->langopts.max_digits = 20; } break; diff --git a/src/translate.cpp b/src/translate.cpp index aa06eed1..fdc7e40c 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -3206,7 +3206,8 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre break; *pn++ = c; - if((--nx > 0) && (tr->langopts.break_numbers & (1 << nx))) + nx--; + if((nx > 0) && (tr->langopts.break_numbers & (1 << nx))) { memcpy(&num_wtab[nw++], &words[ix], sizeof(WORD_TAB)); // copy the 'words' entry for each word of numbers