Fix, speak letter names of Hangul (Korean) characters. Fix, ChangePhoneme(NULL) caused problems for word-gap options. Recognize Arabic comma U+060C. Languages changes: pt, nl, bn, te, da. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@336 d46cf337-b52f-0410-862d-fd96e6ae7743master
| @@ -1,4 +1,4 @@ | |||
| // Aragon translation rules | |||
| // Aragon translation rules | |||
| // This file is UTF-8 encoded | |||
| // letters | |||
| @@ -182,6 +182,7 @@ $ d'olar | |||
| / baRRa | |||
| \ kontraBaRRa | |||
| | b'aRRaBertik'al | |||
| ° graUs | |||
| _- gj'on | |||
| ! TaRR'ar||eksklamaTj'on | |||
| @@ -5,7 +5,7 @@ | |||
| // Bengali numbers are changed to latin characters before translation | |||
| _0 S'unjO | |||
| _1 '&k | |||
| _2 duj | |||
| _2 d'uj | |||
| _3 t'in | |||
| _4 tS'ar | |||
| _5 p'a~tS | |||
| @@ -125,7 +125,7 @@ _0M1 h'ajar | |||
| _0M2 l'ak# | |||
| _0M3 k'ot.i | |||
| _0M4 'Orbud | |||
| _dpt dOsomik | |||
| _dpt _d'Osomik_ | |||
| // Single consonants | |||
| @@ -133,40 +133,42 @@ _dpt dOsomik | |||
| খ k#O | |||
| গ gO | |||
| ঘ g#O | |||
| ঙ 'uNO | |||
| ঙ 'uNO~ | |||
| চ tSO | |||
| ছ tShO // [h] to distinguish from [tS] | |||
| জ JO | |||
| ঝ J#O | |||
| ঞ 'iNO | |||
| ঞ 'iNO~ | |||
| ট t.O | |||
| ঠ t.#O | |||
| ড d.O | |||
| ঢ d.#O | |||
| ণ m'odd#ennO | |||
| ণ m,odd#en.n.'O | |||
| ত tO | |||
| থ t#O | |||
| দ dO | |||
| ধ d#O | |||
| ন d'ontennO | |||
| ন d,ontenn'O | |||
| প pO | |||
| ফ fO // or [p#O] ? | |||
| ব bO | |||
| ভ b#O | |||
| ম mO | |||
| য় Oj | |||
| য ontostedZ'O | |||
| য ,ontostedZ'O | |||
| র rO | |||
| ড় r.O | |||
| ড় r.O // (d. + nukta) | |||
| ঢ় hr.O | |||
| ঢ় hr.O // (d#. + nukta) | |||
| ল lO | |||
| শ taleboS:O | |||
| ষ mud#en:oS:O | |||
| স d'onteS:O | |||
| শ t,aleboS:'O | |||
| ষ m,ud#en:oS:'O | |||
| স d,onteS:'O | |||
| হ hO | |||
| ৎ kh'Ond.otO | |||
| ৎ kh,Ond.ot'O | |||
| ক্ষ k,ojmud#en:oS:'O | |||
| // full vowels | |||
| অ O | |||
| @@ -176,11 +178,16 @@ _dpt dOsomik | |||
| উ hrOS:o'u | |||
| ঊ dirg#o'u | |||
| ঋ ri | |||
| এ e | |||
| ঐ oj | |||
| ও o | |||
| ঔ ow | |||
| এ e $u+ // word 'it' | |||
| ঐ oj $u+ // word 'that' | |||
| ও o $u+ $brk // 'and' | |||
| _এ e | |||
| _ঐ oj | |||
| _ও o | |||
| // combining vowel signs | |||
| া 'akar | |||
| ি r'oS:ikar | |||
| @@ -200,12 +207,17 @@ _dpt dOsomik | |||
| ঁ tS'Ondrobindu | |||
| ় b'indu | |||
| _, koma | |||
| $ d.Olar | |||
| % SOtk'Ora | |||
| + jOg | |||
| = SOman | |||
| // Punctuation | |||
| । dVn.d.V | |||
| _, koma | |||
| _? pr'oSnOtSihnO | |||
| // Pronouns | |||
| আমি $u // main: I | |||
| @@ -1,4 +1,4 @@ | |||
| | |||
| // This file is UTF8 encoded | |||
| // letter groups: | |||
| @@ -384,3 +384,5 @@ | |||
| ৢ l- | |||
| ৣ l- | |||
| __) - (_D bij'og | |||
| D_) - (_D bij'og | |||
| @@ -54,38 +54,38 @@ _?? symbol | |||
| _#9 tab | |||
| _#32 blank | |||
| * 'asd&r,isg $max3 | |||
| % pRos'end $max3 | |||
| @ sn,&:bel'&: | |||
| / sgRVsdrai $max3 | |||
| \ 'Vmvendsgr,VsdRai $max3 | |||
| * '&sd@-r,isg $max3 | |||
| % pRos'End $max3 | |||
| @ sn,&b@-l'&: | |||
| / sgRVsdrAj $max3 | |||
| \ 'VmvEndsgr,VsdRai $max3 | |||
| _, k'oma: | |||
| _; se:mi:ko:lVn | |||
| _; semiko:lVn | |||
| _: k'o:lVn | |||
| _. pONtOm // PN u => O | |||
| _? spWrgsmVlstajn | |||
| _! udRVbstejn | |||
| _- binnesdrai | |||
| __ b'Onsdrai | |||
| _? spWrsmOlstAjn | |||
| _! udRVbstAjn | |||
| _- bin@-sdrAi | |||
| __ b'OnsdrAi | |||
| & _Vw | |||
| £ pun? | |||
| € euro | |||
| © kVpirajt | |||
| ÷ divid'eReD||meD | |||
| © kVpirAjt | |||
| ÷ divid'eRVD||mED | |||
| = l'imeD | |||
| # n'OmV | |||
| § paragr'af | |||
| × g'aNe | |||
| ª feminin||Wdin'al | |||
| º m'askulin||Wdin'al | |||
| ® registr'Er@D||v'ar@mErk3 | |||
| ¼ en||kvart | |||
| ¾ trEkv'art | |||
| ® registr'ErVD||v'Ar@-mErk@- | |||
| ¼ en||kvArt | |||
| ¾ trEkv'Art | |||
| ¢ s'ent | |||
| ¥ j'en: | |||
| µ my | |||
| ' apostr'Vf | |||
| ½ en'hal | |||
| ½ en'h&l | |||
| + plus | |||
| // numbers | |||
| @@ -11132,7 +11132,7 @@ ide id'e // idea | |||
| idé id'e // idea | |||
| tune tun3 $capital // PB Tune lufthavn - not "tune a car" [tjune] | |||
| ny ny // new | |||
| også Vs@- // also | |||
| også ?Vs@- // also | |||
| idet id'e // in so far as | |||
| (rub og stub) R'Ob||V||sd'Ob | |||
| tre tr'E // the number 3 | |||
| @@ -11140,8 +11140,8 @@ rejicere rejis'eV // PB should not be pronounced [raje] | |||
| rejicerer rejis'eV // PB | |||
| rejiceres rejis'eVs // PB | |||
| rejicering rejis'eRiN // PB | |||
| nogle n'o:@-n // PB English: 'some' - must be pronounced like the Danish word 'nogen' | |||
| nogen n'o:@-n // PB | |||
| nogle n'o@-n // PB English: 'some' - must be pronounced like the Danish word 'nogen' | |||
| nogen n'o@-n // PB | |||
| ligesom l?isVm // PB | |||
| bliver blir // PB | |||
| konfirmand kVnferm'&nd // PB | |||
| @@ -25,7 +25,7 @@ n^ p p` r s S t t` | |||
| tS tS` v w x z Z | |||
| Dictionary an_dict 2013-03-28 | |||
| Dictionary an_dict 2013-03-29 | |||
| a aI aU e E eI eU i | |||
| o O oI u U | |||
| @@ -36,7 +36,7 @@ Q r R R2 s S t T | |||
| t# tS w x | |||
| Dictionary te_dict 2013-03-26 | |||
| Dictionary te_dict 2013-03-31 | |||
| a a: aI aU e E e: i | |||
| i: l- o o: r- u u: | |||
| @@ -60,7 +60,7 @@ s; t t; tS ts v x z | |||
| Z z; | |||
| Dictionary bn_dict 2013-03-29 | |||
| Dictionary bn_dict 2013-03-31 | |||
| & a a~ e e~ i i~ l- | |||
| o O o: O~ o~ r- u u~ | |||
| @@ -111,7 +111,7 @@ p r s S t T v w | |||
| x z | |||
| Dictionary da_dict 2013-03-29 | |||
| Dictionary da_dict 2013-03-31 | |||
| & &# 0 3 ?& ?&# ?0 ?A | |||
| ?e ?E ?i ?o ?O ?u ?V ?W | |||
| @@ -150,7 +150,7 @@ p Q r R s s; t T | |||
| ts v x z | |||
| Dictionary en_dict 2013-03-28 | |||
| Dictionary en_dict 2013-03-30 | |||
| 0 0# 3 3: @ @- @2 @5 | |||
| @L a a# A: A@ aa aI aI3 | |||
| @@ -178,7 +178,7 @@ s S t T tS ts v w | |||
| x z Z | |||
| Dictionary es_dict 2013-03-28 | |||
| Dictionary es_dict 2013-03-29 | |||
| @ a aI aU e E eI eU | |||
| i o O oI u | |||
| @@ -273,10 +273,10 @@ N n^ p r R R2 s S | |||
| t tS ts tS; v x z Z | |||
| Dictionary hi_dict 2013-03-16 | |||
| Dictionary hi_dict 2013-03-31 | |||
| @ @- @2 a a: aI aU a~ | |||
| e E e: E: E~ i I i: | |||
| @ @2 a a: aI aU a~ e | |||
| E e: E: e~ E~ i I i: | |||
| l- o O o: O: O~ o~ r- | |||
| u U u: u~ V | |||
| @@ -336,7 +336,7 @@ n^# p Q r R r# R2 s | |||
| S s2 t T tl# v x z | |||
| Dictionary it_dict 2012-11-22 | |||
| Dictionary it_dict 2013-03-29 | |||
| @- a a/ aI aU e E eI | |||
| i I i# o O u | |||
| @@ -462,7 +462,7 @@ N n^ p r R s S t | |||
| tS ts tS; v x z Z | |||
| Dictionary ml_dict 2013-03-16 | |||
| Dictionary ml_dict 2013-03-31 | |||
| @ a a# a: aI aU e E | |||
| e: i I i: o o: r- u | |||
| @@ -501,7 +501,7 @@ r r. s S s. t t# t. | |||
| t.# v w x z | |||
| Dictionary nl_dict 2013-03-27 | |||
| Dictionary nl_dict 2013-03-29 | |||
| 8 @ @- a A a: A~ e | |||
| E e# E2 e: EI eU i I | |||
| @@ -563,7 +563,7 @@ S s; S; t t; tS ts tS; | |||
| ts; v w x z Z Z; | |||
| Dictionary pt_dict 2013-03-29 | |||
| Dictionary pt_dict 2013-03-31 | |||
| & &/ &U~ &~ @ @- a A | |||
| aI aU e E eI EI eU EU | |||
| @@ -592,7 +592,7 @@ ts; v v; w w2 x z Z | |||
| z; Z; | |||
| Dictionary ru_dict 2011-10-24 | |||
| Dictionary ru_dict 2013-03-31 | |||
| 8 @- a A e E E# E% | |||
| E2 i I I# I3 I^ ja ju | |||
| @@ -1,4 +1,4 @@ | |||
| | |||
| // You can use the en_extra file, rather than this one | |||
| // to add your own pronunciation definitions. | |||
| @@ -1631,6 +1631,7 @@ gigantic dZaIg'antIk | |||
| gilead g'IlIad | |||
| gimme gImi | |||
| giraffe dZI2raaf | |||
| github gIthVb | |||
| glacier gleIS3 | |||
| goin ,goUI2n $only // for goin' | |||
| gonna g,@n@ | |||
| @@ -29,6 +29,7 @@ _tld t'ilde | |||
| // names of symbols | |||
| ª a | |||
| º o | |||
| ° grados | |||
| _. punto | |||
| _, koma | |||
| _; p,untoik'oma | |||
| @@ -162,7 +162,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? | |||
| श S@ | |||
| ष s.@ // retroflex [S] | |||
| स s@ | |||
| ह H@- | |||
| ह H@ | |||
| क़ q@ | |||
| ख़ x@ | |||
| ग़ Q@ | |||
| @@ -196,10 +196,21 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? | |||
| _?? Vks.@r | |||
| // Alphabet names | |||
| _ar 'Vrbi | |||
| _cyr sIrIk'Ik | |||
| _zh c'i@ni | |||
| // Punctuation | |||
| । dVn.d.V | |||
| $ dOl@r | |||
| % pVt'IS@t | |||
| + plVs | |||
| = bVr'a:b@r | |||
| * ta:r'a:Nk@n | |||
| * | |||
| // Pronouns | |||
| मैं $u // main: IrI | |||
| मुझे $u | |||
| @@ -262,7 +273,7 @@ _?? Vks.@r | |||
| को $u // ko: to | |||
| तक $u // tak: until, for(time) | |||
| बिना $u $pause // without (preposition) | |||
| में $u // me: in | |||
| में me~: $u+ // me: in | |||
| से $u // se: from, with, by | |||
| @@ -272,7 +283,7 @@ _?? Vks.@r | |||
| // Conjunctions | |||
| और $u $pause // aur: and | |||
| और $u $brk // aur: and | |||
| य j@ $u $pause // ja: or | |||
| अगर $u $pause // agar: if | |||
| यदि $u $pause // yadi: if, whether | |||
| @@ -299,5 +310,5 @@ _?? Vks.@r | |||
| // Exceptions | |||
| क्रिकेट krIk'Et | |||
| क्रिकेट kr'IkIt | |||
| सायबर s'aIb@r | |||
| @@ -390,7 +390,7 @@ | |||
| ः H // visarga | |||
| .group ् // virama | |||
| ् | |||
| ् | |||
| // Extra consonants | |||
| @@ -410,7 +410,7 @@ | |||
| ज़ zV | |||
| ज़ (B z | |||
| .group ड़ // dddha (should retroflex flap) | |||
| .group ड़ // dddha (should retroflex flap ?) | |||
| ड़ r.V | |||
| ड़ (B r. | |||
| @@ -443,8 +443,3 @@ | |||
| .group | |||
| $ dOlV | |||
| % pVsEnt | |||
| @@ -1,4 +1,4 @@ | |||
| // This file is UTF-8 encoded | |||
| // This file is UTF-8 encoded | |||
| // $alt change [e] or [o] in the stressed syllable to [E] or [O] | |||
| @@ -82,6 +82,7 @@ _tld t'ilde | |||
| # kantSellet:o | |||
| @ ki'otS:ola | |||
| ~ tilde | |||
| ° g@-*'a:di | |||
| : d,uep'unti | |||
| _! p,untoesklamat'ivo | |||
| @@ -295,12 +295,5 @@ | |||
| .group 0xe0a4 // devanagari | |||
| 0xe0a4 _^_HI // switch to hindi voice | |||
| .group 0xe0a5 // devanagari | |||
| 0xe0a5 _^_HI | |||
| .group | |||
| $ do:l.ar | |||
| @@ -1,4 +1,4 @@ | |||
| | |||
| // This file in UTF8 encoded | |||
| // $alt2, remove s from plural, remove en from plural | |||
| @@ -80,6 +80,7 @@ _- k'OpElt,e:k@n | |||
| = Q@l'EIkte:k@n | |||
| __ l'IgEntst@-*'e:pj@ | |||
| € 'Y:*o:t,e:k@n | |||
| ° Qra:d@n | |||
| // numbers | |||
| @@ -683,6 +683,7 @@ bolo $alt2 | |||
| bolo $alt $verb | |||
| borboleta $alt2 | |||
| bordo $alt | |||
| borra $alt2 $noun | |||
| bosque $alt | |||
| boto $alt2 $noun | |||
| brejo $alt | |||
| @@ -693,12 +694,13 @@ cacete $alt2 | |||
| cachorra $alt2 | |||
| caderneta $alt2 | |||
| cadete $alt2 | |||
| camelha $alt | |||
| camelo $alt2 | |||
| camiseta $alt2 | |||
| cantora $alt2 | |||
| capacete $alt2 | |||
| caractere $alt | |||
| carbureto $alt2 | |||
| carbureto $alt2 | |||
| careta $alt2 | |||
| carreta $alt2 | |||
| carroça $alt | |||
| @@ -707,7 +709,7 @@ cateto $alt2 | |||
| catorze $alt2 | |||
| cebola $alt2 | |||
| cefaleia $alt | |||
| centopeia $alt | |||
| centopeia $alt | |||
| cerca $alt | |||
| cerca $alt2 $noun | |||
| cerco $alt $verb | |||
| @@ -735,8 +737,11 @@ concerto $alt2 $noun | |||
| concertos $alt2 | |||
| concordo $alt | |||
| conforto $alt $verb | |||
| console $alt2 $noun | |||
| consolo $alt2 $noun | |||
| controle $alt2 $noun | |||
| controles $alt2 | |||
| controles $alt $verb | |||
| controlo $alt2 $noun | |||
| coreia $alt | |||
| coreto $alt2 | |||
| @@ -747,19 +752,19 @@ corto $alt | |||
| corveta $alt2 | |||
| corvos $alt | |||
| coto $alt2 | |||
| cotovelo $alt2 | |||
| cotovelo $alt2 | |||
| cratera $alt | |||
| crede $alt2 | |||
| crepe $alt | |||
| decore $alt | |||
| degelo $alt2 | |||
| degelo $alt2 | |||
| desapego $alt2 $noun | |||
| descordo $alt | |||
| desemprego $alt2 | |||
| desemprego $alt $verb | |||
| desespero $alt2 $noun | |||
| desfecho $alt2 | |||
| desmantelo $alt2 $noun | |||
| desmantelo $alt2 $noun | |||
| desporto $alt2 | |||
| desportos $alt | |||
| desprezo $alt2 $noun | |||
| @@ -768,7 +773,7 @@ desse $alt $verb | |||
| deste $alt2 | |||
| deste $alt $verb | |||
| desterro $alt2 | |||
| destroem $alt | |||
| destroem $alt | |||
| deveras $alt | |||
| dez $alt | |||
| diarreia $alt | |||
| @@ -787,11 +792,12 @@ endereço $alt $verb | |||
| enforco $alt | |||
| engordo $alt | |||
| enredo $alt $verb | |||
| enrosco $alt $verb | |||
| enrosco $alt $verb | |||
| enterro $alt2 $noun | |||
| enumerem $alt | |||
| envelope $alt | |||
| envolto $alt2 | |||
| enxaqueca $alt2 | |||
| enxerto $alt2 $noun | |||
| epopeia $alt | |||
| eritreia $alt | |||
| @@ -800,7 +806,7 @@ erro $alt $verb | |||
| esboço $alt $verb | |||
| escopeta $alt2 | |||
| escova $alt2 $noun | |||
| escovas $alt2 | |||
| escovas $alt2 | |||
| escovo $alt | |||
| escroto $alt2 | |||
| esforço $alt $verb | |||
| @@ -813,18 +819,18 @@ espiroqueta $alt2 | |||
| espoleta $alt2 | |||
| esposa $alt2 | |||
| esqueleto $alt2 | |||
| estilete $alt2 | |||
| estilete $alt2 | |||
| estrela $alt2 | |||
| estrofe $alt | |||
| estorno $alt $verb | |||
| estorvo $alt $verb | |||
| etiqueta $alt2 | |||
| europa $alt | |||
| europeia $alt | |||
| europeia $alt | |||
| exagero $alt $verb | |||
| explore $alt | |||
| faceta $alt2 | |||
| fantoche $alt | |||
| fantoche $alt | |||
| farofa $alt | |||
| febre $alt | |||
| fera $alt | |||
| @@ -843,7 +849,7 @@ forca $alt2 | |||
| força $alt2 $noun | |||
| forças $alt2 | |||
| forço $alt | |||
| formos $alt2 | |||
| formos $alt2 | |||
| forro $alt $verb | |||
| frevo $alt2 | |||
| fulgores $alt2 | |||
| @@ -851,8 +857,8 @@ galera $alt | |||
| galileia $alt | |||
| gameta $alt2 | |||
| geleia $alt | |||
| gelo $alt2 | |||
| gelo $alt $verb | |||
| gelo $alt2 | |||
| gelo $alt $verb | |||
| genebra $alt | |||
| gesso $alt2 | |||
| golpe $alt | |||
| @@ -871,16 +877,18 @@ hemorroida $alt | |||
| hoje $alt2 | |||
| horrores $alt2 | |||
| ideia $alt | |||
| interesse $alt2 $noun | |||
| imberbe $alt | |||
| interesse $alt2 | |||
| interesse $alt $verb | |||
| jogo $alt2 $noun | |||
| joguete $alt2 | |||
| lagosta $alt2 | |||
| lambreta $alt2 | |||
| lebre $alt | |||
| lembrete $alt2 | |||
| lepra $alt | |||
| lepra $alt | |||
| leste $alt2 $verb | |||
| lingueta $alt2 | |||
| lingueta $alt2 | |||
| lopes $alt | |||
| macete $alt2 | |||
| maior $alt | |||
| @@ -901,9 +909,9 @@ minueto $alt2 | |||
| miolo $alt2 | |||
| miolos $alt | |||
| modelo $alt2 | |||
| modelo $alt $verb | |||
| modelo $alt $verb | |||
| moeda $alt | |||
| mofo $alt $verb | |||
| mofo $alt $verb | |||
| molho $alt2 $noun | |||
| monera $alt | |||
| morcego $alt2 | |||
| @@ -928,7 +936,7 @@ obstetra $alt | |||
| odisseia $alt | |||
| onu $1 | |||
| olho $alt2 $noun | |||
| onomatopeia $alt | |||
| onomatopeia $alt | |||
| opereta $alt2 | |||
| ordens $alt | |||
| osso $alt2 | |||
| @@ -942,7 +950,6 @@ palacete $alt2 | |||
| palheta $alt2 | |||
| panfleto $alt2 | |||
| pangeia $alt | |||
| panqueca p,&~Nk'Ek& | |||
| pantera $alt | |||
| parede $alt2 | |||
| pastora $alt2 | |||
| @@ -970,7 +977,7 @@ pose $alt2 | |||
| povos $alt | |||
| poxa p'oS& | |||
| primavera $alt | |||
| prosopopeia $alt | |||
| prosopopeia $alt | |||
| quarteto $alt2 | |||
| queda $alt | |||
| quede $alt2 | |||
| @@ -986,13 +993,13 @@ reforço $alt $verb | |||
| reforços $alt | |||
| refresco $alt $verb | |||
| reitora $alt2 | |||
| rejo $alt | |||
| rejo $alt | |||
| relevo $alt2 $noun | |||
| remorso $alt | |||
| renovo $alt $verb | |||
| renovo $alt $verb | |||
| retorno $alt $verb | |||
| reuva $alt | |||
| rigores $alt2 | |||
| reuva $alt | |||
| rigores $alt2 | |||
| rixa x'iS& | |||
| rocha $alt | |||
| rock $alt | |||
| @@ -1037,10 +1044,10 @@ tocha $alt | |||
| toga $alt | |||
| topo $alt $verb | |||
| torno $alt $verb | |||
| tornozelo $alt2 | |||
| tornozelo $alt2 | |||
| torre $alt2 $noun | |||
| torres $alt2 | |||
| torro $alt | |||
| torro $alt | |||
| tortos $alt | |||
| traqueia $alt | |||
| travesso $alt2 | |||
| @@ -1054,6 +1061,7 @@ tumores $alt2 | |||
| valeta $alt2 | |||
| vanessa $alt2 | |||
| velozes $alt | |||
| verbete $alt2 | |||
| violeta $alt2 | |||
| violoncelo $alt | |||
| voga $alt | |||
| @@ -1070,7 +1078,8 @@ zorra $alt2 | |||
| ?1 back b'Ek | |||
| ?2 backup bEk'&p | |||
| ?2 backups bEk'&ps | |||
| ?1 blind bl'aind | |||
| blind bl'aind | |||
| book buk | |||
| ?1 braille b:r'aily | |||
| ?2 Braille bR'aili | |||
| ?1 cancel k'&ns'El | |||
| @@ -1087,7 +1096,6 @@ zorra $alt2 | |||
| ?2 download daUNl'owd | |||
| ?3 download dau~Nl'owd | |||
| ?1 end 'end | |||
| ?1 escape Sk'eIpy | |||
| ?2 esc 'Esk | |||
| ?3 esc 'EskI | |||
| ?1 explorer ,ekspl'O:*&r- | |||
| @@ -1110,6 +1118,7 @@ zorra $alt2 | |||
| ?2 Intranet iNtRan'Et | |||
| ?1 kernel k'Ern,El | |||
| ?2 kernel k'Ern@l | |||
| laptop lEptOp | |||
| ?1 line l'ain | |||
| layout l'eI,aUt | |||
| ?2 logo l'OgU | |||
| @@ -1140,14 +1149,12 @@ símbolo s'imbolU | |||
| ?2 software s'Oftwe@- | |||
| ?1 space sp'eIsy | |||
| ?1 sporting sp'Ort,ing | |||
| ?1 tab t'ab | |||
| tab t'aby | |||
| ?1 telemóvel t,El,Em'OvEl | |||
| ?1 telemóveis t,El,Em'OveIs# | |||
| ?1 up &p | |||
| ?1 upload &pl'oud | |||
| ?2 web w'Eb | |||
| ?2 verbete verb'etSi | |||
| ?2 verbetes verb'etSis | |||
| ?1 yahoo 'i,ah'u | |||
| ?2 yahoo iah'u | |||
| ?1 yes j'Es | |||
| @@ -1161,14 +1168,16 @@ louis _^_FR | |||
| // foreign product names | |||
| ?1 access 'aks,Es | |||
| ?1 adobe &d'Oby | |||
| apple 'Epow | |||
| chrome kR'owmi | |||
| debian d'Ebj&~N | |||
| ?1 excel ,Eks'El | |||
| ?1 express ,Ekspr'Es | |||
| espeak isp'i:k | |||
| ?1 espeakedit isp'i:kEd,it | |||
| facebook feisybuk | |||
| ?1 fedora _^_EN | |||
| ?1 firefox f'ai&rfOks | |||
| ?2 firefox f'ai@fOks | |||
| firefox f'ai@fOks | |||
| ?1 front fr'ont | |||
| ?1 jaws dZ'au:z | |||
| ?1 linux l,in'uks | |||
| @@ -1203,6 +1212,7 @@ playstation _^_EN | |||
| suse z'u:ts@ | |||
| ?1 start st'art // nero StartSmart | |||
| ?1 time t'aImy // nero show time | |||
| twitter tw'iter | |||
| ubuntu ub'untu | |||
| ?1 unix ,u:n'iks | |||
| ?2 unix j'uniks | |||
| @@ -100,6 +100,7 @@ | |||
| ái (s ''aI | |||
| á (iCK ''a | |||
| áy ''aI | |||
| ál (C ''aU | |||
| áu ''aU | |||
| áu (s ''aU | |||
| ?1 ál ''Al | |||
| @@ -221,13 +222,13 @@ | |||
| f) e (rem_ E | |||
| e (que_ E | |||
| e (quem_ E | |||
| e (quem_ E | |||
| e (rgA_ E | |||
| e (rgAm_ E | |||
| e (rgue_ E | |||
| e (rguem_ E | |||
| e (rgue_ E | |||
| e (rguem_ E | |||
| e (rsA_ E | |||
| e (rsAm_ E | |||
| @@ -242,7 +243,7 @@ e (rguem_ E | |||
| e (stAm_ E | |||
| e (strA_ E | |||
| e (rme_ E | |||
| e (rme_ E | |||
| e (rnA_ E | |||
| e (rnAm_ E | |||
| @@ -461,6 +462,7 @@ respond) e (L07_ e // cor- | |||
| _gr) e (gL03_ e | |||
| _gal) e (gL03_ e | |||
| _n) e (grL03_ e | |||
| _ch) e (guL02_ e | |||
| estr) ei (L04_ EI | |||
| _inv) e (jL04_ E | |||
| tr) e (pL04_ E // es- | |||
| @@ -488,10 +490,9 @@ _recup) e (rL04_ E | |||
| _refrig) e (rL04_ E | |||
| _v) e (rbL03_ E | |||
| _p) e (rdL02_ E | |||
| _ch) e (guL02_ e | |||
| _l) e (rdL03_ E | |||
| _h) e (rdL04_ E | |||
| _bez) e (rrL03_ e | |||
| _bez) e (rrL03_ e | |||
| _inv) e (rtL03_ e | |||
| _f) e (rvL03_ e | |||
| _refr) e (scL01_ E | |||
| @@ -536,6 +537,7 @@ _entorp) e (çL03_ e | |||
| éi (s ''EI | |||
| é (iCK ''E | |||
| éy ''eI | |||
| él (C ''EU | |||
| éu ''EU | |||
| éu (s ''EU | |||
| é (uCK ''E | |||
| @@ -576,18 +578,18 @@ _entorp) e (çL03_ e | |||
| gu (Y g | |||
| a) gu (ent gw | |||
| _ar) gu (i gw | |||
| averi) gu (e gw | |||
| averi) gu (e gw | |||
| enxa) gu (e gw | |||
| i) gu (idade gw | |||
| i) gu (idade gw | |||
| lin) gu (e gw | |||
| lin) gu (i gw | |||
| _min) gu (e gw | |||
| _min) gu (e gw | |||
| _pin) gu (im_ gw | |||
| _pin) gu (ins_ gw | |||
| _sa) gu (i gw | |||
| _sa) gu (i gw | |||
| san) gu (ín gw | |||
| san) gu (in gw | |||
| tin) gu (i gw | |||
| tin) gu (i gw | |||
| ?1 n) gu (A gw // eg: língua, etc. | |||
| ?1 man) gu (ei g // mangueira | |||
| ?1 gu (ém_ g // eg: alguém, ninguém, etc... | |||
| @@ -620,6 +622,8 @@ _entorp) e (çL03_ e | |||
| i (A_ 'i | |||
| i (am_ 'i | |||
| i (em_ 'i | |||
| io (_ iU | |||
| io (s_ iU | |||
| i (oCK i | |||
| @@ -657,6 +661,7 @@ _entorp) e (çL03_ e | |||
| ím (C ''im | |||
| ín (K ''iN | |||
| ính ''in^ | |||
| íl (C ''IU | |||
| .group j | |||
| @@ -754,6 +759,9 @@ _entorp) e (çL03_ e | |||
| o (ltA_ O | |||
| o (ltAm_ O | |||
| o (lve_ O | |||
| o (lvem_ O | |||
| o (sA_ O | |||
| o (so_N o // not for osos_ | |||
| o (sAm_ O | |||
| @@ -831,10 +839,10 @@ _entorp) e (çL03_ e | |||
| //sort | |||
| _f) o (L05_ o | |||
| _f) o (L07_ o | |||
| _engl) o (bL04_ O | |||
| _s) o (bL02_ O | |||
| _af) o (bL04_ O | |||
| _esn) o (bL04_ O | |||
| _af) o (bL04_ O | |||
| _engl) o (bL04_ O | |||
| br) o (chL04_ O | |||
| _deb) o (chL04_ O | |||
| _m) o (fL01_ O | |||
| @@ -842,8 +850,6 @@ _entorp) e (çL03_ e | |||
| _s) o (frL02_ O | |||
| r) o (gL04_ O // inter- | |||
| _j) o (gL04_ O | |||
| _emp) o (lgL04_ O | |||
| _f) o (lgL04_ O | |||
| _af) o (gL04_ O | |||
| _adv) o (gL04_ O | |||
| _ref) o (gL04_ O | |||
| @@ -851,15 +857,12 @@ _f) o (lgL04_ O | |||
| _ap) oi (L02_ OI | |||
| _b) oi (L04_ OI | |||
| _t) o (lL03_ o | |||
| _f) o (lgL04_ O | |||
| _emp) o (lgL04_ O | |||
| c) o (lhL02_ O // es- en- re- | |||
| _t) o (lhL02_ O | |||
| _m) o (lhL04_ O | |||
| env) o (lvL02_ O // des- | |||
| _abs) o (lvL02_ O | |||
| _dev) o (lvL02_ O | |||
| _res) o (lvL02_ O | |||
| _rev) o (lvL02_ O | |||
| _ent) o (pL02_ O | |||
| ent) o (pL02_ O | |||
| _c) o (pL03_ O | |||
| _ens) o (pL04_ O | |||
| _s) o (prL04_ O | |||
| @@ -941,21 +944,21 @@ _remem) o (rL04_ O | |||
| ?1 _) qua kwa // quatro, etc. | |||
| ?1 _) que ke // quente, etc. | |||
| ?1 _) quei (C k'eI // queira, queima, etc | |||
| A) quên (C kw'eN // frequência, etc. | |||
| C) quên (C kw'eN // delinquência, etc. | |||
| C) quên (A kw'eN // quinquênio, etc. | |||
| quên kw'eN // quinquênio, etc. | |||
| ade) qu (e kw | |||
| _a) qu (idade_ kw | |||
| _a) qu (ífero_ kw | |||
| e) qu (estr kw | |||
| ese) qu (ív kw | |||
| _e) qu (in kw | |||
| fre) qu (ent kw | |||
| _ini) qu (idade_ kw | |||
| li) qu (id kw | |||
| lí) qu (id kw | |||
| n) qu (en kw | |||
| _) qu (inqu kw | |||
| se) qu (en kw | |||
| tran) qu (il kw | |||
| ?1 quec kes // esquece, etc. | |||
| ?1 queç kes // esqueça. | |||
| ?1 A) que (nA_ ke // pequeno, etc. | |||
| ?1 C) quê (_ ke // porquê, etc. | |||
| @@ -1013,6 +1016,14 @@ _remem) o (rL04_ O | |||
| ?1 A) s (G+ Z | |||
| ?1 A) s (_KS1 s# | |||
| ?1 A) s (_G+S1 Z | |||
| s (b z | |||
| s (d z | |||
| s (g z | |||
| s (l z | |||
| s (m z | |||
| s (n z | |||
| sr zx | |||
| s (v z | |||
| _) sobre (@P5 sob*e | |||
| @@ -51,9 +51,9 @@ _6C S,E#s;t;s'ot | |||
| _7C s;,Ims'ot | |||
| _8C vOs;Ims'ot | |||
| _9C dev;Vts'ot | |||
| _1MA1 t'ys;Its;V // no '1' before thousand | |||
| _0MA1 t'ys;Its;i | |||
| _0M1 t'ys;Vts; | |||
| _1MA1 t'ys;ItS;V // no '1' before thousand | |||
| _0MA1 t'ys;ItS;i | |||
| _0M1 t'ys;VtS; | |||
| _1MA2 m;,IlI;'on | |||
| _0MA2 m;,IlI;'ona | |||
| _0M2 m;,IlI;'onof | |||
| @@ -22,7 +22,7 @@ n En | |||
| o o: | |||
| p pi: | |||
| q kju: | |||
| r a:r | |||
| r a:rp | |||
| s Es | |||
| t t#i: | |||
| u ju: | |||
| @@ -40,7 +40,7 @@ _1 okat.i | |||
| _1a oka | |||
| _2 rend.u | |||
| _3 mu:d.u | |||
| _4 na:lgu | |||
| _4 na:lugu | |||
| _5 aIdu | |||
| _6 a:ru | |||
| _7 ;e:d.u | |||
| @@ -48,20 +48,20 @@ _8 ;enimidi | |||
| _9 tommidi | |||
| _1X padi | |||
| _11 padakond.u | |||
| _12 pannemd.u | |||
| _13 padamu:d.u: | |||
| _12 pannend.u | |||
| _13 padammu:d.u: | |||
| _14 pad#na:lugu | |||
| _15 padihe:nu | |||
| _16 padaha:ru | |||
| _17 padihe:d.u | |||
| _18 padd#enimidi | |||
| _19 pamdommadi | |||
| _19 pandommidi | |||
| _2X irav#aI | |||
| _3X muppaI | |||
| _4X nalub#aI | |||
| _5X ja:b#aI | |||
| _6X arav#aI | |||
| _7X d.eb#baI | |||
| _7X d.#eb#baI | |||
| _8X jenab#aI | |||
| _9X tomb#aI | |||
| _0C v#andala | |||
| @@ -85,7 +85,7 @@ _?? aks.aram // 'unknown character' | |||
| + ku:d.ika | |||
| * naks.atra | |||
| \ bja:kasla:s. | |||
| / sla:s. | |||
| / kudiva:lugi:ta | |||
| © ka:pi:raIt. | |||
| ¶ v#e:ra: | |||
| @@ -137,7 +137,7 @@ U+c4d v#ottu | |||
| ఫ్ ip# | |||
| బ్ ib | |||
| భ్ ib# | |||
| మ్ im | |||
| మ్ imu: | |||
| య్ ij | |||
| ర్ ir | |||
| ఱ్ ir | |||
| @@ -224,7 +224,7 @@ | |||
| . ఁ n // candrabindu | |||
| ం m // anusvara (this should nasalize the vowel) | |||
| ం n // anusvara (this should nasalize the vowel) | |||
| ః h // visarga | |||
| @@ -243,7 +243,7 @@ | |||
| ూ u: | |||
| ృ ru | |||
| ృ r- | |||
| ౄ r-: | |||
| @@ -1,6 +1,6 @@ | |||
| name english | |||
| language en-uk 2 | |||
| language en-gb 2 | |||
| language en-uk 2 | |||
| language en 2 | |||
| gender male | |||
| @@ -1,4 +1,4 @@ | |||
| name spanish-latin-american | |||
| name spanish-latin-am | |||
| language es-la | |||
| language es-mx 6 | |||
| language es 6 | |||
| @@ -28,7 +28,7 @@ consonants 11 119 | |||
| ne 18 157 | |||
| ur 6 149 | |||
| pa 15 151 | |||
| ta 23 153 | |||
| ta 24 153 | |||
| kn 17 149 | |||
| ml 26 152 | |||
| te 16 149 | |||
| @@ -429,7 +429,6 @@ l/l_ [l] base | |||
| [l/3] da | |||
| l/l_@ [l/3] base | |||
| [l/] fr | |||
| [l/3] da | |||
| l/l@ [l#] base | |||
| base vowelstart_l | |||
| [l] fr | |||
| @@ -468,14 +467,12 @@ l/la [l#] base | |||
| [l/2] fr | |||
| l/l_a [l/3] base | |||
| [l/] fr | |||
| [l/3] da | |||
| l/le [l#] base | |||
| base vowelstart_l | |||
| [l] fr | |||
| [l/2] fr | |||
| l/l_e [l/3] base | |||
| [l/] fr | |||
| [l/3] da | |||
| l/L_eL_af [&] af | |||
| [&:] af | |||
| l/l_front [L] sq | |||
| @@ -488,7 +485,6 @@ l/li [l#] base | |||
| l/l_i [l/3] base | |||
| [l/] fr | |||
| [i] sq | |||
| [l/3] da | |||
| ll/ll [L] base | |||
| ll/_ll [L] base | |||
| l/l_long [l] base | |||
| @@ -498,7 +494,6 @@ l/lo [l#] base | |||
| [l/2] fr | |||
| l/l_o [l/3] base | |||
| [l/] fr | |||
| [l/3] da | |||
| l^/l_rfx [l.] base | |||
| [l;] lt | |||
| [l] ru | |||
| @@ -509,7 +504,6 @@ l/lu [l#] base | |||
| [l/2] fr | |||
| l/l_u [l/3] base | |||
| [l/] fr | |||
| [l/3] da | |||
| l/l_vi [l] vi | |||
| ll/xll [L] base | |||
| l/l_y [l/] fr | |||
| @@ -35,37 +35,37 @@ endphoneme | |||
| phoneme i | |||
| vowel starttype #i endtype #i | |||
| length 200 | |||
| length 210 | |||
| FMT(vowel/i_6) | |||
| endphoneme | |||
| phoneme u | |||
| vowel starttype #u endtype #u | |||
| length 200 | |||
| length 210 | |||
| FMT(vowel/u) | |||
| endphoneme | |||
| phoneme e | |||
| vowel starttype #e endtype #e | |||
| length 200 | |||
| length 210 | |||
| FMT(vowel/e) | |||
| endphoneme | |||
| phoneme & | |||
| vowel starttype #a endtype #a | |||
| length 200 | |||
| length 210 | |||
| FMT(vowel/&_2) | |||
| endphoneme | |||
| phoneme o | |||
| vowel starttype #o endtype #o | |||
| length 200 | |||
| length 210 | |||
| IF nextPhW(w) THEN | |||
| length 160 | |||
| length 170 | |||
| ENDIF | |||
| FMT(vowel/o) | |||
| endphoneme | |||
| @@ -8,6 +8,116 @@ | |||
| // AC + @- OR V: Long "pile" [pi:l@-] | |||
| // AC[i]: Long "smidig" [smi:Di] | |||
| // Change the length of short vowels (?+vowel) | |||
| procedure ShortVowelLength | |||
| // "endelig" - Short initial vowel sounds too short | |||
| IF thisPh(isWordStart) THEN | |||
| length 160 | |||
| RETURN | |||
| ENDIF | |||
| // "slutte" t/d + @- makes the u too long | |||
| IF next2PhW(@-) THEN | |||
| IF nextPhW(t) OR nextPhW(d) THEN | |||
| //length 100 | |||
| LengthAdd -50 | |||
| // Don't shorten it further if it comes after an "r" sound | |||
| // Exit the procedure | |||
| RETURN | |||
| ENDIF | |||
| ENDIF | |||
| // "bygget" - consonant + [@-D] makes the vowel too long | |||
| IF next2PhW(@-) THEN | |||
| IF next3PhW(t) OR next3PhW(d) OR next3PhW(D) THEN | |||
| LengthAdd -50 | |||
| // Don't shorten it further if it comes after an "r" sound ("brygget") | |||
| // Exit the procedure | |||
| RETURN | |||
| ENDIF | |||
| ENDIF | |||
| // "bygger" - consonant + [V] makes the vowel too long | |||
| IF nextPhW(isNotVowel) AND next2PhW(V) THEN | |||
| LengthAdd -50 | |||
| // Don't shorten it further if it comes after an "r" sound ("brygger") | |||
| // Exit the procedure | |||
| RETURN | |||
| ENDIF | |||
| // "rigtigt", "fred", "frem", "centralen" - R makes the vowel too long | |||
| IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN | |||
| // length 100 | |||
| LengthAdd -50 | |||
| ENDIF | |||
| // "ring", "ringe", "fængsel" | |||
| IF nextPhW(N) THEN | |||
| // length 100 | |||
| LengthAdd -10 | |||
| ENDIF | |||
| // "sigte" t/d + @- makes the vowel too long | |||
| IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) THEN | |||
| IF next3PhW(@-) THEN | |||
| // length 100 | |||
| LengthAdd -50 | |||
| ENDIF | |||
| ENDIF | |||
| endprocedure | |||
| // Change the length of normal vowels (without ? in front of them) | |||
| procedure LongVowelLength | |||
| // "alene" - Short initial vowel sounds too short at length 140 | |||
| IF thisPh(isWordStart) THEN | |||
| length 160 | |||
| RETURN | |||
| ENDIF | |||
| // "forlade" - [D@-] makes the vowel too long | |||
| IF nextPhW(D) AND next2PhW(@-) THEN | |||
| length 180 | |||
| RETURN | |||
| ENDIF | |||
| // PB long vowel followed by [@-] or [V](vowel+vowel) - "pigen" [p'i@-n] | |||
| IF nextPhW(@-) OR nextPhW(V) THEN | |||
| length 225 | |||
| ENDIF | |||
| // PB "enig", "enige", "evig", "stædig" - vowel+consolant+[i] | |||
| IF nextPhW(isNotVowel) AND next2PhW(i) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "ræve", "dele", "mene", "røve", "møve" | |||
| IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(3) OR next3PhW(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "vilje", "nedladende" [n'eDl&D@-n@-], "delte" - short followed by 2 consonants | |||
| IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN | |||
| // Don't make "møve" [m'Ww_!@-_!] short | |||
| IF NOT next2PhW(_!) THEN | |||
| length 140 | |||
| ENDIF | |||
| ENDIF | |||
| // "bryde", "bryder", "strålen", "henrivende" R makes the vowel too long | |||
| IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN | |||
| IF next2PhW(@-) OR next2PhW(V) THEN | |||
| // length 180 | |||
| LengthAdd -70 | |||
| ENDIF | |||
| ENDIF | |||
| // "syste", "sylte" t/d/D + @- makes the vowel too long | |||
| // "international", - added [V] TEST | |||
| IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) OR next2PhW(D) THEN | |||
| IF next3PhW(@-) OR next3PhW(V) THEN | |||
| length 110 | |||
| ENDIF | |||
| ENDIF | |||
| // "glimrende" [l/3] makes the following vowel too long | |||
| // LengthAdd doesn't work here. The length could be 225 or 140 - 30 | |||
| IF prevPhW(l/3) THEN | |||
| // LengthAdd -30 | |||
| length 110 | |||
| ENDIF | |||
| // "længe" - short - 2 consonants => 1 consonant (ng => [N]) | |||
| IF nextPhW(N) THEN | |||
| length 140 | |||
| ENDIF | |||
| endprocedure | |||
| // A bit longer than [@-] | |||
| phoneme @ | |||
| vowel starttype #@ endtype #@ | |||
| unstressed | |||
| @@ -59,26 +169,12 @@ phoneme i | |||
| length 140 | |||
| // Long vowel followed by consonant and @- "gide", "pile" | |||
| IF nextPhW(isNotVowel) AND next2PhW(@-) THEN | |||
| length 225 | |||
| // length 225 | |||
| ENDIF | |||
| // "gider", vrider" | |||
| IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN | |||
| length 140 | |||
| ENDIF | |||
| // PB long vowel followed by [@-] - "pigen" [p'i@-n] | |||
| IF nextPhW(@-) OR nextPhW(V) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "vilje" - short followed by 2 consonants | |||
| IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN | |||
| length 140 | |||
| ENDIF | |||
| // PB "tie", "stige", "krige" vowel + vowel: extra length | |||
| // What is causing this very short [i] in words with final [@-]? | |||
| // NOT "galleriet" [g,?&lVR'i@-D] | |||
| IF nextPhW(V) OR nextPhW(@) OR nextPhW(@-) AND NOT next2PhW(D) THEN | |||
| // length 240 | |||
| ENDIF | |||
| //"skider" short | |||
| IF nextPhW(D) AND next2PhW(V) THEN | |||
| length 140 | |||
| @@ -87,7 +183,7 @@ ENDIF | |||
| IF nextPhW(D) AND next2PhW(V) AND next3PhW(V) THEN | |||
| length 225 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| FMT(vowel/i_4) | |||
| endphoneme | |||
| @@ -95,7 +191,8 @@ endphoneme | |||
| // sviret vs. svirret | |||
| phoneme ?i | |||
| vowel starttype #i endtype #i | |||
| length 100 | |||
| length 140 | |||
| CALL ShortVowelLength | |||
| IfNextVowelAppend(;) | |||
| FMT(vowel/i_4) | |||
| endphoneme | |||
| @@ -111,22 +208,8 @@ endphoneme | |||
| phoneme e | |||
| vowel starttype #e endtype #e | |||
| length 140 | |||
| // "dele", "mene" | |||
| IF next2PhW(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| // PB "ring", "ringe" | |||
| IF nextPhW(N) THEN | |||
| length 140 | |||
| ENDIF | |||
| // PB "enig", "enige", "evig" | |||
| IF nextPhW(isNotVowel) AND next2PhW(i) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "nedladende" [n'eDl&D@-n@-], "delte" - before 2 consonants: short | |||
| IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN | |||
| length 140 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| CALL ShortVowelLength | |||
| FMT(vowel/e) | |||
| endphoneme | |||
| @@ -135,14 +218,7 @@ endphoneme | |||
| phoneme ?e | |||
| vowel starttype #e endtype #e | |||
| length 140 | |||
| // "rigtigt" R makes the e too long | |||
| IF prevPhW(R) THEN | |||
| length 100 | |||
| ENDIF | |||
| // "sigte" t/d + @- makes the e too long | |||
| IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) AND next3PhW(@-) THEN | |||
| length 100 | |||
| ENDIF | |||
| CALL ShortVowelLength | |||
| FMT(vowel/e) | |||
| endphoneme | |||
| @@ -153,29 +229,18 @@ phoneme E | |||
| IF thisPh(isWordEnd) THEN | |||
| IfNextVowelAppend(_!) | |||
| ENDIF | |||
| // "ræve" | |||
| IF nextVowel(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "ære", "kærester", "ærefrygt" - longer E | |||
| // "ære", "kærester", "ærefrygt" - vowel + vowel | |||
| IF nextPhW(V) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "stædig" [st'EDi] long | |||
| IF nextPhW(isNotVowel) AND next2PhW(i) THEN | |||
| // "dræber" TEST shortened by -70 in procedure because of the "r" sound | |||
| IF prevPhW(R) OR prevPhW(r) OR prevPhW(3-) AND next2PhW(V) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "længe" - short - 2 consonants => 1 consonant | |||
| IF nextPhW(N) THEN | |||
| length 140 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| // "værelse" [v'E3-Vls@_!] | |||
| IF nextPhW(3-) AND next2PhW(V) THEN | |||
| length 100 | |||
| ENDIF | |||
| // "mælkebøtte" - short followed by 2 consonants | |||
| IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN | |||
| length 140 | |||
| ENDIF | |||
| FMT(vowel/e_mid2) | |||
| endphoneme | |||
| @@ -186,14 +251,7 @@ phoneme ?E | |||
| vowel starttype #e endtype #e | |||
| ipa ε | |||
| length 140 | |||
| // "fred" R makes the E too long | |||
| IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN | |||
| length 100 | |||
| ENDIF | |||
| // "fængsel" N makes the E too long | |||
| IF nextPhW(N) THEN | |||
| length 100 | |||
| ENDIF | |||
| CALL ShortVowelLength | |||
| FMT(vowel/e_mid2) | |||
| endphoneme | |||
| @@ -203,22 +261,17 @@ phoneme & | |||
| length 140 | |||
| // "same", "sale", "bade" - consonant + @-: long | |||
| // but NOT "hinanden" | |||
| IF next2PhW(@-) OR next2PhW(@) AND NOT next3PhW(n) THEN | |||
| length 225 | |||
| IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(@) THEN | |||
| IF NOT next3PhW(n) THEN | |||
| length 225 | |||
| ENDIF | |||
| ENDIF | |||
| // ThisPh + V or @- | |||
| // "ae", "aer" vowel + vowel: extra length | |||
| IF nextPhW(@-) OR nextPhW(V) THEN | |||
| length 260 | |||
| ENDIF | |||
| // "stadig" [st&Di], "stadigt" [st&Dit] | |||
| IF nextPhW(isNotVowel) AND next2PhW(i) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "Alfie", "alfer" - short before 2 consonants | |||
| IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN | |||
| length 140 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| FMT(vowel/ee_2) | |||
| endphoneme | |||
| @@ -228,7 +281,7 @@ endphoneme | |||
| phoneme ?& | |||
| vowel starttype #e endtype #e | |||
| length 140 | |||
| FMT(vowel/ee_2) | |||
| FMT(vowel/ee_2) | |||
| endphoneme | |||
| // Added for the æ in "dræbt" | |||
| @@ -236,6 +289,8 @@ phoneme &# | |||
| vowel starttype #e endtype #e | |||
| length 140 | |||
| ipa a | |||
| CALL LongVowelLength | |||
| // CALL ShortVowelLength | |||
| FMT(vowel/&) | |||
| endphoneme | |||
| @@ -243,40 +298,28 @@ endphoneme | |||
| // "revl" vs. "tremme" | |||
| phoneme ?&# | |||
| vowel starttype #e endtype #e | |||
| length 120 | |||
| length 140 | |||
| CALL ShortVowelLength | |||
| FMT(vowel/&) | |||
| endphoneme | |||
| phoneme A // PB changed to a_8 | |||
| vowel starttype #a endtype #a | |||
| length 140 | |||
| // PB long vowel followed by consonant and certain vowels - "drabelig" | |||
| IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(V) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "bange" [bAN@-] - [N] = 2 consonants (ng) => short | |||
| IF nextPhW(N) THEN | |||
| length 140 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| // "fare" [f'A:A] | |||
| IF nextPhW(A) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "gratis" | |||
| IF next2PhW(i) THEN | |||
| length 225 | |||
| ENDIF | |||
| IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN | |||
| length 140 | |||
| ENDIF | |||
| FMT(vowel/a_8) | |||
| endphoneme | |||
| // PB short A | |||
| // "drab" vs. "drabelig" | |||
| // "krabbe" vs. "drabelig" | |||
| phoneme ?A | |||
| vowel starttype #a endtype #a | |||
| length 140 | |||
| CALL ShortVowelLength | |||
| FMT(vowel/a_8) | |||
| endphoneme | |||
| @@ -287,10 +330,7 @@ phoneme u | |||
| IF nextPhW(@-) OR nextPhW(V) OR next2PhW(@-) OR next2PhW(V)THEN | |||
| length 225 | |||
| ENDIF | |||
| // "umulig" [u:m'uli] | |||
| IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN | |||
| length 225 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| FMT(vowel/u_bck) | |||
| endphoneme | |||
| @@ -299,10 +339,7 @@ endphoneme | |||
| phoneme ?u | |||
| vowel starttype #u endtype #u | |||
| length 140 | |||
| // "slutte" t/d + @- makes the u too long | |||
| IF nextPhW(t) OR nextPhW(d) AND next2PhW(@-) THEN | |||
| length 100 | |||
| ENDIF | |||
| CALL ShortVowelLength | |||
| FMT(vowel/u_bck) | |||
| endphoneme | |||
| @@ -317,10 +354,7 @@ ENDIF | |||
| IF next2PhW(V) OR next2PhW(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "modig" - long vowel after consonant + [i] | |||
| IF nextPhW(D) AND next2PhW(i) THEN | |||
| length 225 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| FMT(vowel/o_2) | |||
| endphoneme | |||
| @@ -344,14 +378,11 @@ ENDIF | |||
| IF nextPhW(V) OR nextPhW(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "rådig" | |||
| IF nextVowel(i) AND nextVowel(isFinalVowel) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "såre", "sårede" [s'O:?OD@-] | |||
| IF nextPhW(O) OR nextPhW(?O) THEN | |||
| length 225 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| FMT(vowel/o_5) | |||
| endphoneme | |||
| @@ -366,14 +397,7 @@ endphoneme | |||
| phoneme V | |||
| vowel starttype #@ endtype #@ | |||
| length 140 | |||
| // "forlig" | |||
| IF nextPhW(isNotVowel) AND next2PhW(i) THEN | |||
| length 225 | |||
| ENDIF | |||
| // PB "konge" - ng=>n | |||
| IF nextPhW(N) THEN | |||
| length 140 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| FMT(vowel/V_4) | |||
| endphoneme | |||
| @@ -387,10 +411,8 @@ endphoneme | |||
| phoneme 0 | |||
| vowel starttype #o endtype #o | |||
| length 140 //225 | |||
| IF nextPhW(3) OR nextPhW(V) OR nextPhW(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| length 140 | |||
| ipa ɔ | |||
| FMT(vowel/oo_2) | |||
| endphoneme | |||
| @@ -398,6 +420,7 @@ endphoneme | |||
| phoneme ?0 | |||
| vowel starttype #o endtype #o | |||
| length 140 | |||
| ipa ɔ | |||
| FMT(vowel/oo_2) | |||
| endphoneme | |||
| @@ -407,24 +430,20 @@ phoneme y | |||
| // PB long vowel followed by consonant and certain vowels | |||
| // "gyde", "gyder" | |||
| IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(V) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "dydig" [dyDi] | |||
| IF nextPhW(isNotVowel) AND next2PhW(i) THEN | |||
| length 225 | |||
| // not "gebyret" TEST | |||
| IF NOT nextPhW(3-) AND NOT nextPhW(R) AND NOT nextPhW(r) THEN | |||
| length 225 | |||
| ENDIF | |||
| ENDIF | |||
| // "syge" [sy@-] vowel + vowel: extra length, but NOT "fyret" [fyVD] | |||
| IF nextPhW(@-) OR nextPhW(3) AND NOT next2PhW(D) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "tyve" | |||
| IF nextPhW(?u) AND next2PhW(@-) THEN | |||
| IF nextPhW(w) AND next2PhW(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "bryde" R makes the y too long | |||
| IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN | |||
| length 180 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| FMT(vowel/y) | |||
| endphoneme | |||
| @@ -433,25 +452,14 @@ endphoneme | |||
| phoneme ?y | |||
| vowel starttype #i endtype #i | |||
| length 140 | |||
| // "udrydde" R makes the y too long | |||
| IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN | |||
| length 100 | |||
| ENDIF | |||
| // "hytte" t/d + @- makes the y too long | |||
| IF nextPhW(t) OR nextPhW(d) AND next2PhW(@-) THEN | |||
| length 100 | |||
| ENDIF | |||
| CALL ShortVowelLength | |||
| FMT(vowel/y) | |||
| endphoneme | |||
| phoneme Y | |||
| vowel starttype #i endtype #i | |||
| length 225 | |||
| IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN | |||
| glstop | |||
| length 140 | |||
| ENDIF | |||
| IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN | |||
| length 140 | |||
| IF nextPhW(V) OR nextPhW(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| FMT(vowel/yy) | |||
| @@ -460,34 +468,15 @@ endphoneme | |||
| phoneme W | |||
| vowel starttype #@ endtype #@ | |||
| length 140 | |||
| // "kløe" vowel + vowel: long | |||
| IF nextPhW(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "røve" W + 1 consonant + 3 or W or @ | |||
| IF next2PhW(@-) OR next2PhW(3) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "røveri" but NOT "surfer" [sWfV] TEST | |||
| IF next2PhW(V) OR next2PhW(?V) AND NOT next2PhW(isFinalVowel) THEN | |||
| length 140 | |||
| ENDIF | |||
| // PB "nødig", "nødigt", "kølige" - long | |||
| IF nextVowel(i) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "møve" [mWw@-] - long | |||
| IF nextPhW(w) AND nextVowel(@-) THEN | |||
| length 225 | |||
| ENDIF | |||
| // "børnebog" - short | |||
| IF nextPhW(r) AND next2PhW(n) AND next3PhW(@-) THEN | |||
| length 140 | |||
| ENDIF | |||
| // PB "synge" | |||
| IF nextPhW(N) THEN | |||
| length 140 | |||
| ENDIF | |||
| CALL LongVowelLength | |||
| FMT(vowel/oe) | |||
| endphoneme | |||
| @@ -496,10 +485,7 @@ endphoneme | |||
| phoneme ?W | |||
| vowel starttype #@ endtype #@ | |||
| length 140 | |||
| // "bryllup", "rødder" R makes the y too long | |||
| IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN | |||
| length 100 | |||
| ENDIF | |||
| CALL ShortVowelLength | |||
| FMT(vowel/oe) | |||
| endphoneme | |||
| @@ -519,6 +505,7 @@ endphoneme | |||
| phoneme ?W# | |||
| vowel starttype #@ endtype #@ | |||
| length 140 | |||
| CALL ShortVowelLength | |||
| FMT(vowel/V) | |||
| endphoneme | |||
| @@ -562,24 +549,6 @@ endphoneme | |||
| phoneme l/3 // Replacement for [l/] | |||
| liquid | |||
| lengthmod 7 | |||
| IF nextPhW(isVowel) THEN | |||
| // ChangePhoneme(l) | |||
| ENDIF | |||
| PrevVowelEndings | |||
| VowelEnding(l/l_@) | |||
| VowelEnding(l/l_a) | |||
| VowelEnding(l/l_e, -50) // hjælpe | |||
| VowelEnding(l/l_i, -70) // flygte? | |||
| VowelEnding(l/l_o, -60) // stole, skole, hjulpet | |||
| VowelEnding(l/l_u, -70) | |||
| EndSwitch | |||
| // IF nextPh(isLiquid) THEN | |||
| // FMT(l/_l) | |||
| // ENDIF | |||
| FMT(l/l_) | |||
| endphoneme | |||
| @@ -322,7 +322,7 @@ endphoneme | |||
| phoneme aI3 | |||
| vowel starttype #a endtype #@ | |||
| length 300 | |||
| length 310 | |||
| ipa aɪɚ | |||
| IfNextVowelAppend(r-) | |||
| FMT(vwl_en_us/ai3) | |||
| @@ -159,3 +159,7 @@ phoneme # // a NULL phoneme for 'virama' | |||
| ChangePhoneme(NULL) | |||
| endphoneme | |||
| phoneme z. | |||
| CALL base/z. | |||
| ipa U+027B | |||
| endphoneme | |||
| @@ -3059,6 +3059,7 @@ int CompilePhoneme(int compile_phoneme) | |||
| case kRETURN: | |||
| *prog_out++ = i_RETURN; | |||
| DecThenCount(); | |||
| break; | |||
| case kINCLUDE: | |||
| @@ -699,11 +699,38 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) | |||
| else | |||
| language = L('e','n'); | |||
| if(language != tr->translator_name) | |||
| if((language != tr->translator_name) || (language == L('k','o'))) | |||
| { | |||
| char *p3; | |||
| int initial, code; | |||
| char hangul_buf[12]; | |||
| // speak in the language for this alphabet (or English) | |||
| ph_buf[2] = SetTranslator2(WordToString2(language)); | |||
| LookupLetter(translator2, letter, word[n_bytes], &ph_buf[3], control & 1); | |||
| if(((code = letter - 0xac00) >= 0) && (letter <= 0xd7af)) | |||
| { | |||
| // Special case for Korean letters. | |||
| // break a syllable hangul into 2 or 3 individual jamo | |||
| hangul_buf[0] = ' '; | |||
| p3 = &hangul_buf[1]; | |||
| if((initial = (code/28)/21) != 11) | |||
| { | |||
| p3 += utf8_out(initial + 0x1100, p3); | |||
| } | |||
| utf8_out(((code/28) % 21) + 0x1161, p3); // medial | |||
| utf8_out((code % 28) + 0x11a7, &p3[3]); // final | |||
| p3[6] = ' '; | |||
| p3[7] = 0; | |||
| ph_buf[3] = 0; | |||
| TranslateRules(translator2, &hangul_buf[1], &ph_buf[3], sizeof(ph_buf)-3, NULL, 0, NULL); | |||
| SetWordStress(translator2, &ph_buf[3], NULL, -1, 0); | |||
| } | |||
| else | |||
| { | |||
| LookupLetter(translator2, letter, word[n_bytes], &ph_buf[3], control & 1); | |||
| } | |||
| if(ph_buf[3] == phonSWITCH) | |||
| { | |||
| @@ -125,6 +125,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| int delete_count; | |||
| int word_start; | |||
| int inserted; | |||
| int deleted; | |||
| PHONEME_DATA phdata; | |||
| int n_ph_list3; | |||
| @@ -343,6 +344,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| plist3 = &ph_list3[j]; | |||
| inserted = 0; | |||
| deleted = 0; | |||
| if(insert_ph != 0) | |||
| { | |||
| // we have a (linking) phoneme which we need to insert here | |||
| @@ -431,23 +433,27 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| plist3->phcode = alternative; | |||
| if(alternative == 1) | |||
| continue; // NULL phoneme, discard | |||
| if(ph->type == phVOWEL) | |||
| { | |||
| plist3->synthflags |= SFLAG_SYLLABLE; | |||
| if(ph2->type != phVOWEL) | |||
| plist3->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed | |||
| deleted = 1; // NULL phoneme, discard | |||
| } | |||
| else | |||
| plist3->synthflags &= ~SFLAG_SYLLABLE; | |||
| { | |||
| if(ph->type == phVOWEL) | |||
| { | |||
| plist3->synthflags |= SFLAG_SYLLABLE; | |||
| if(ph2->type != phVOWEL) | |||
| plist3->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed | |||
| } | |||
| else | |||
| plist3->synthflags &= ~SFLAG_SYLLABLE; | |||
| // re-interpret the changed phoneme | |||
| // But it doesn't obey a second ChangePhoneme() | |||
| InterpretPhoneme(tr, 0x100, plist3, &phdata, &worddata); | |||
| // re-interpret the changed phoneme | |||
| // But it doesn't obey a second ChangePhoneme() | |||
| InterpretPhoneme(tr, 0x100, plist3, &phdata, &worddata); | |||
| } | |||
| } | |||
| if(ph->type == phVOWEL) | |||
| if((ph->type == phVOWEL) && (deleted == 0)) | |||
| { | |||
| PHONEME_LIST *p; | |||
| @@ -552,7 +558,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| } | |||
| } | |||
| if(plist3 != plist3_inserted) | |||
| if((plist3 != plist3_inserted) && (ix > 0)) | |||
| { | |||
| if((x = (tr->langopts.word_gap & 0x7)) != 0) | |||
| { | |||
| @@ -585,51 +591,54 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| // not yet implemented | |||
| } | |||
| phlist[ix].ph = ph; | |||
| phlist[ix].type = ph->type; | |||
| phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module | |||
| phlist[ix].synthflags = plist3->synthflags; | |||
| phlist[ix].stresslevel = plist3->stresslevel & 0xf; | |||
| phlist[ix].wordstress = plist3->wordstress; | |||
| phlist[ix].tone_ph = plist3->tone_ph; | |||
| phlist[ix].sourceix = 0; | |||
| phlist[ix].phcode = ph->code; | |||
| if(plist3->sourceix != 0) | |||
| if(deleted == 0) | |||
| { | |||
| phlist[ix].sourceix = plist3->sourceix; | |||
| phlist[ix].newword = 1; // this phoneme is the start of a word | |||
| phlist[ix].ph = ph; | |||
| phlist[ix].type = ph->type; | |||
| phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module | |||
| phlist[ix].synthflags = plist3->synthflags; | |||
| phlist[ix].stresslevel = plist3->stresslevel & 0xf; | |||
| phlist[ix].wordstress = plist3->wordstress; | |||
| phlist[ix].tone_ph = plist3->tone_ph; | |||
| phlist[ix].sourceix = 0; | |||
| phlist[ix].phcode = ph->code; | |||
| if(plist3->sourceix != 0) | |||
| { | |||
| phlist[ix].sourceix = plist3->sourceix; | |||
| phlist[ix].newword = 1; // this phoneme is the start of a word | |||
| if(start_sentence) | |||
| if(start_sentence) | |||
| { | |||
| phlist[ix].newword = 5; // start of sentence + start of word | |||
| start_sentence = 0; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| phlist[ix].newword = 5; // start of sentence + start of word | |||
| start_sentence = 0; | |||
| phlist[ix].newword = 0; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| phlist[ix].newword = 0; | |||
| } | |||
| // phlist[ix].length = ph->std_length; | |||
| phlist[ix].length = phdata.pd_param[i_SET_LENGTH]*2; | |||
| if((ph->code == phonPAUSE_LONG) && (option_wordgap > 0)) | |||
| { | |||
| phlist[ix].ph = phoneme_tab[phonPAUSE_SHORT]; | |||
| phlist[ix].length = option_wordgap*14; // 10mS per unit at the default speed | |||
| } | |||
| // phlist[ix].length = ph->std_length; | |||
| phlist[ix].length = phdata.pd_param[i_SET_LENGTH]*2; | |||
| if((ph->code == phonPAUSE_LONG) && (option_wordgap > 0) && (plist3[1].sourceix != 0)) | |||
| { | |||
| phlist[ix].ph = phoneme_tab[phonPAUSE_SHORT]; | |||
| phlist[ix].length = option_wordgap*14; // 10mS per unit at the default speed | |||
| } | |||
| if(ph->type==phVOWEL || ph->type==phLIQUID || ph->type==phNASAL || ph->type==phVSTOP || ph->type==phVFRICATIVE || (ph->phflags & phPREVOICE)) | |||
| { | |||
| phlist[ix].length = 128; // length_mod | |||
| phlist[ix].env = PITCHfall; | |||
| } | |||
| if(ph->type==phVOWEL || ph->type==phLIQUID || ph->type==phNASAL || ph->type==phVSTOP || ph->type==phVFRICATIVE || (ph->phflags & phPREVOICE)) | |||
| { | |||
| phlist[ix].length = 128; // length_mod | |||
| phlist[ix].env = PITCHfall; | |||
| } | |||
| phlist[ix].prepause = 0; | |||
| phlist[ix].amp = 20; // default, will be changed later | |||
| phlist[ix].pitch1 = 255; | |||
| phlist[ix].pitch2 = 255; | |||
| ix++; | |||
| phlist[ix].prepause = 0; | |||
| phlist[ix].amp = 20; // default, will be changed later | |||
| phlist[ix].pitch1 = 255; | |||
| phlist[ix].pitch2 = 255; | |||
| ix++; | |||
| } | |||
| } | |||
| phlist[ix].newword = 2; // end of clause | |||
| @@ -85,6 +85,7 @@ static const unsigned short punct_chars[] = {',','.','?','!',':',';', | |||
| 0x055e, // Armenian question | |||
| 0x055b, // Armenian emphasis mark | |||
| 0x060c, // Arabic , | |||
| 0x061b, // Arabic ; | |||
| 0x061f, // Arabic ? | |||
| 0x06d4, // Arabic . | |||
| @@ -132,6 +133,7 @@ static const unsigned int punct_attributes [] = { 0, | |||
| CLAUSE_QUESTION | PUNCT_IN_WORD, // Armenian question | |||
| CLAUSE_PERIOD | PUNCT_IN_WORD, // Armenian emphasis mark | |||
| CLAUSE_COMMA, // Arabic , | |||
| CLAUSE_SEMICOLON, // Arabic ; | |||
| CLAUSE_QUESTION, // Arabic question mark | |||
| CLAUSE_PERIOD, // Arabic full stop | |||
| @@ -575,6 +575,7 @@ void CalcLengths(Translator *tr) | |||
| int last_pitch = 0; | |||
| int pitch_start; | |||
| int length_mod; | |||
| int next2type; | |||
| int len; | |||
| int env2; | |||
| int end_of_clause; | |||
| @@ -689,8 +690,19 @@ void CalcLengths(Translator *tr) | |||
| p->prepause = 40; | |||
| if((prev->type == phPAUSE) || (prev->type == phVOWEL)) // || (prev->ph->mnemonic == ('/'*256+'r'))) | |||
| p->prepause = 0; | |||
| if(prev->type == phVOWEL) | |||
| { | |||
| p->prepause = 0; // use murmur instead to link from the preceding vowel | |||
| } | |||
| else | |||
| if(prev->type == phPAUSE) | |||
| { | |||
| // reduce by the length of the preceding pause | |||
| if(prev->length < p->prepause) | |||
| p->prepause -= prev->length; | |||
| else | |||
| p->prepause = 0; | |||
| } | |||
| else | |||
| if(p->newword==0) | |||
| { | |||
| @@ -827,9 +839,17 @@ if(stress <= 1) | |||
| next3 = &phoneme_list[ix+4]; | |||
| } | |||
| next2type = next2->ph->length_mod; | |||
| if(more_syllables==0) | |||
| { | |||
| len = tr->langopts.length_mods0[next2->ph->length_mod *10+ next->ph->length_mod]; | |||
| if(next->newword || next2->newword) | |||
| { | |||
| // don't use 2nd phoneme over a word boundary, unless it's a pause | |||
| if(next2type != 1) | |||
| next2type = 0; | |||
| } | |||
| len = tr->langopts.length_mods0[next2type *10+ next->ph->length_mod]; | |||
| if((next->newword) && (tr->langopts.word_gap & 0x20)) | |||
| { | |||
| @@ -841,7 +861,7 @@ if(stress <= 1) | |||
| } | |||
| else | |||
| { | |||
| length_mod = tr->langopts.length_mods[next2->ph->length_mod *10+ next->ph->length_mod]; | |||
| length_mod = tr->langopts.length_mods[next2type *10+ next->ph->length_mod]; | |||
| if((next->type == phNASAL) && (next2->type == phSTOP || next2->type == phVSTOP) && (next3->ph->phflags & phFORTIS)) | |||
| length_mod -= 15; | |||
| @@ -35,7 +35,7 @@ | |||
| #include "translate.h" | |||
| #include "wave.h" | |||
| const char *version_string = "1.47.03e 29.Mar.13"; | |||
| const char *version_string = "1.47.03f 31.Mar.13"; | |||
| const int version_phdata = 0x014701; | |||
| int option_device_number = -1; | |||
| @@ -93,12 +93,12 @@ ALPHABET alphabets [] = { | |||
| {"_ti", OFFSET_TIBET, 0xf00, 0xfff, 0, 0}, | |||
| {"_my", OFFSET_MYANMAR, 0x1000,0x109f, 0, 0}, | |||
| {"_ka", OFFSET_GEORGIAN, 0x10a0,0x10ff, L('k','a'), AL_WORDS}, | |||
| {"_ko", OFFSET_KOREAN, 0x1100,0x11ff, 0, 0}, | |||
| {"_ko", OFFSET_KOREAN, 0x1100,0x11ff, L('k','o'), AL_WORDS}, | |||
| {"_eth", OFFSET_ETHIOPIC, 0x1200,0x139f, 0, 0}, | |||
| {"_braille", 0x2800, 0x2800,0x28ff, 0, AL_NO_SYMBOL}, | |||
| {"_ja", 0x3040, 0x3040,0x30ff, 0, AL_NOT_CODE}, | |||
| {"_zh", 0x3100, 0x3100,0x9fff, 0, AL_NOT_CODE}, | |||
| {"_ko", 0xa700, 0xa700,0xd7ff, 0, AL_NOT_CODE}, | |||
| {"_ko", 0xa700, 0xa700,0xd7ff, L('k','o'), AL_NOT_CODE | AL_WORDS}, | |||
| {NULL, 0, 0, 0, 0, 0} | |||
| }; | |||
| @@ -1732,6 +1732,7 @@ int SetTranslator2(const char *new_language) | |||
| translator2->phoneme_tab_ix = new_phoneme_tab; | |||
| } | |||
| } | |||
| translator2->phonemes_repeat[0] = 0; | |||
| return(new_phoneme_tab); | |||
| } // end of SetTranslator2 | |||
| @@ -2440,6 +2441,35 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c, | |||
| 0x72,0x73,0x74,0x75 | |||
| }; | |||
| // check for Korean Hangul letters | |||
| if(((code = c - 0xac00) >= 0) && (c <= 0xd7af)) | |||
| { | |||
| // break a syllable hangul into 2 or 3 individual jamo | |||
| initial = (code/28)/21; | |||
| medial = (code/28) % 21; | |||
| final = code % 28; | |||
| if(initial == 11) | |||
| { | |||
| // null initial | |||
| c = medial + 0x1161; | |||
| if(final > 0) | |||
| *insert = final + 0x11a7; | |||
| } | |||
| else | |||
| { | |||
| // extact the initial and insert the remainder with a null initial | |||
| c = initial + 0x1100; | |||
| *insert = (11*28*21) + (medial*28) + final + 0xac00; | |||
| } | |||
| return(c); | |||
| } | |||
| else if(((code = c - 0x3130) >= 0) && (code < 0x34)) | |||
| { | |||
| // Hangul compatibility jamo | |||
| return(hangul_compatibility[code] + 0x1100); | |||
| } | |||
| switch(tr->translator_name) | |||
| { | |||
| case L('a','f'): | |||
| @@ -2467,36 +2497,6 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c, | |||
| } | |||
| } | |||
| break; | |||
| case L('k','o'): | |||
| if(((code = c - 0xac00) >= 0) && (c <= 0xd7af)) | |||
| { | |||
| // break a syllable hangul into 2 or 3 individual jamo | |||
| initial = (code/28)/21; | |||
| medial = (code/28) % 21; | |||
| final = code % 28; | |||
| if(initial == 11) | |||
| { | |||
| // null initial | |||
| c = medial + 0x1161; | |||
| if(final > 0) | |||
| *insert = final + 0x11a7; | |||
| } | |||
| else | |||
| { | |||
| // extact the initial and insert the remainder with a null initial | |||
| c = initial + 0x1100; | |||
| *insert = (11*28*21) + (medial*28) + final + 0xac00; | |||
| } | |||
| return(c); | |||
| } | |||
| else if(((code = c - 0x3130) >= 0) && (code < 0x34)) | |||
| { | |||
| // Hangul compatibility jamo | |||
| return(hangul_compatibility[code] + 0x1100); | |||
| } | |||
| break; | |||
| } | |||
| return(SubstituteChar(tr, c, next_in, insert, wordflags)); | |||
| } | |||
| @@ -2951,7 +2951,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre | |||
| } | |||
| else | |||
| { | |||
| if(iswlower(prev_in)) | |||
| if((iswlower(prev_in)) && (prev_in != 0xba)) // Windows thinks masc.ordinal (0xba) is lower-case | |||
| { | |||
| // lower case followed by upper case in a word | |||
| if(UpperCaseInWord(tr, &sbuf[ix], c) == 1) | |||
| @@ -1883,12 +1883,24 @@ void FreeVoiceList() | |||
| ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
| {//======================================================================== | |||
| #ifndef PLATFORM_RISCOS | |||
| char path_voices[sizeof(path_home)+12]; | |||
| #ifdef PLATFORM_RISCOS | |||
| if(n_voices_list == 0) | |||
| { | |||
| sprintf(path_voices,"%s%cvoices",path_home,PATHSEP); | |||
| len_path_voices = strlen(path_voices)+1; | |||
| GetVoices(path_voices); | |||
| voices_list[n_voices_list] = NULL; // voices list terminator | |||
| } | |||
| return((const espeak_VOICE **)voices_list); | |||
| #else | |||
| int ix; | |||
| int j; | |||
| espeak_VOICE *v; | |||
| static espeak_VOICE **voices = NULL; | |||
| char path_voices[sizeof(path_home)+12]; | |||
| // free previous voice list data | |||
| FreeVoiceList(); | |||
| @@ -1926,7 +1938,6 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
| } | |||
| return((const espeak_VOICE **)voices); | |||
| #endif | |||
| return((const espeak_VOICE **)voices_list); | |||
| } // end of espeak_ListVoices | |||