espeak_Char(32) can speak "space" by adding an entry for _#32 in *_list file. Similarly for Tab. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@61 d46cf337-b52f-0410-862d-fd96e6ae7743master
| @@ -1,4 +1,4 @@ | |||
| //maintainer: Willem van der Walt | |||
| //maintainer: Willem van der Walt | |||
| // email: [email protected] | |||
| // tel: +27 12 8413996 | |||
| // Meraka Institute, CSIR | |||
| @@ -541,6 +541,7 @@ rukkerig rWk@r@x2 | |||
| samelewing sA:m@l,e@v@N | |||
| sedert se@d@rt | |||
| sektore $2 | |||
| sinteties $2 | |||
| skepsele skEps@l@ | |||
| s'n s'@n | |||
| sobere s'o@b@r@ | |||
| @@ -16,6 +16,7 @@ | |||
| a (C a | |||
| C) a (Csier %a // (ge)finansier/kassier | |||
| j) a (pan %a //japan first a sound and stress | |||
| C) abie 'A:bi | |||
| abo (C %abO // move default stress and fix a and o sounds: abominasie/abonnement/aborsie | |||
| _) a (bC %a // abdy/ablatief/ablusie/abstrak, etdc. | |||
| @@ -37,6 +38,11 @@ | |||
| _) aka a%k@ //akademie etc. | |||
| akkedis a%k@d'Is //akkedis and compounds | |||
| ae A: //should be A:@ but sounds wrong | |||
| konst) abel A:b@l //exception for konstabel in compounds | |||
| t) abel %ab'&l //tabelopskrif temperatuurtabel etc. | |||
| t) abell %ab'&l //tabelle fix double l | |||
| w) a (tering A: //watering exception to the rest | |||
| C) a (tering %a //short unstressed a before tering formatering etc. except watering | |||
| ai aI | |||
| adres %adrEs // fix last e sound of adres as last part of compounds | |||
| _) alle (C al@ // alledaags/e/allerhande | |||
| @@ -734,7 +740,8 @@ | |||
| CoeC) e (C @ //fix e in boetedoening, boedelbelasting and many others | |||
| orr) e (l @ //fix e in borrel, orrel, korrel in compounds | |||
| intell) e (k %E //intellek, and friends | |||
| p) e (ring 'e@ //imansipering and others e sound and stress | |||
| roep) e (ring 'e@ //groepering e sound and stress | |||
| eval (u %iv%al // evaluasie/evalueer/evaluering | |||
| CAt) e (gn & //fix e in mikrotegnologie and others | |||
| ei) e @ //eiewys and others | |||
| @@ -924,6 +931,7 @@ | |||
| iber (i@ %ibe@r // Liberië/Siberië/Liberiese/Siberiese/Iberiese | |||
| ie i | |||
| h) i (dro i //hidro in compounds | |||
| _) in (a@ In_ //inasem inagneming etc. | |||
| _) iese (C ,is@ // iesegrimmig and derivitives | |||
| ieus i'Y@s // this ending always takes stress | |||
| C) i (g @// figuur/figure/stoksielsaligalleenA | |||
| @@ -1320,7 +1328,6 @@ | |||
| minder (jar m@n@r // move default stress: minderjarig and derivitives | |||
| miner (A m@n@r // mineraal and many compounds | |||
| mi (neur m%i // move default stress: mineur and compounds | |||
| minnares (_ m@n%arEs // fix stress and e sound: minnares/medeminnares and similar | |||
| mikr (o mikr | |||
| ministers m@n'Ist@rs | |||
| mise (ra m@s // fix stress and drop e: miserabel/-e/-s/-ste | |||
| @@ -1449,6 +1456,7 @@ | |||
| _) na (skeer n''A: // restore default stress: naskeermiddel/-room | |||
| _) na (tC na // many compounds beginning with nat | |||
| na (tuur n%a // natuur and compounds and derivitives | |||
| navig n%av%ix2 //navigasie, navigeer etc. | |||
| @) na (_ na // shorten final na, except for: | |||
| r) na (_ nA: // daarna/hierna/waarna | |||
| nadruklik nA:dr'Wkl@k // nadruklik/e | |||
| @@ -2176,12 +2184,15 @@ | |||
| te (oo t@ // geboorteoorskot/kosteoorweging/siekteoorsaak/terroristeoorlog | |||
| _) teraarde t%&r?A:rd@ // move default stress and fix e sounds: teraardebestelling/-s | |||
| n) terie t@r'i // galanterie/infanterie and compounds | |||
| wa) te (ring t@ //water exception to rest | |||
| Ca) te (ring t'e@ //opdatering formatering etc. | |||
| _) tering te@r@N // tering and compounds | |||
| tesou (rie t%Es%u //tesourie and compounds | |||
| moles) tering te@r@N // molestering/kindermolestering | |||
| _) ter (l t@r // move default stress: terloops/-e | |||
| @) term (_ t&r@ // correct pronunciation of e | |||
| @) terme (_ t&rm@ // correct pronunciation of 1st e | |||
| sin) te (ti te@ //sintetiseer, compounds and derivitives | |||
| tern (K t'&:r@-n //lantern ekstern etc. | |||
| tern (e_ t'&rn // interne/eksterne | |||
| _) ter (nA t@r // terneergedruk/ternouernood | |||
| @@ -2302,6 +2313,7 @@ | |||
| ven (ster fe~n // nasalise | |||
| ven (yn f@n // venyn/venynig | |||
| ver f@r | |||
| virtu v@rtS%y //virtueel virtuose etc. fix v and t sounds and assure lack of stress | |||
| _) ver (@P3 f@r | |||
| verant (w f@r%ant // (on)verantwoordelik/-heid/verantwoording | |||
| verende f'e@r@nd@ | |||
| @@ -2459,7 +2471,7 @@ | |||
| woe (styn v%u // move default stress: woestyn and compounds | |||
| wolke vOlk@ // nimbuswolke/wolkekrabber | |||
| woorde vo@rd@ | |||
| w (yser v //padwyser and many others with wyser in compounds | |||
| nt) w (A v | |||
| .group x | |||
| @@ -2515,7 +2527,7 @@ | |||
| ** | |||
| **) * (_ _:: | |||
| + plus | |||
| + pl'Ws | |||
| _) ++ (_ pluspl'us | |||
| \+\+\+) + // ignore + after the first 3 | |||
| @@ -307,9 +307,9 @@ y Y yI yU | |||
| * *; b b; c C d d; | |||
| dZ f f; g h j k l | |||
| l; m m; n N n; p p; | |||
| r s S s; S; t t; tS | |||
| ts ts; v v; w z Z z; | |||
| Z; | |||
| r s S S; t T t; tS | |||
| ts ts; v v; w w2 x z | |||
| Z z; Z; | |||
| Dictionary is_dict | |||
| @@ -54,6 +54,8 @@ z zEd | |||
| _cap k,ap@-t@L | |||
| _?A lEt3 | |||
| _?? sImb@L | |||
| _#9 tab | |||
| _#32 speIs | |||
| _! Ekskl@m'eIS@n | |||
| _" kwoUts | |||
| @@ -135,6 +137,7 @@ _0M3 b'Ili@n | |||
| _0and @n | |||
| ?3 _0and | |||
| _dpt pOInt | |||
| _roman roUm@n_ | |||
| // ABBREVIATIONS | |||
| @@ -187,10 +190,6 @@ u.s ju:'Es | |||
| wwii dVb@Lju:dVb@Lju:t'u: | |||
| xy $abbrev | |||
| ii tu: $abbrev // roman numerals | |||
| iii Tri: $abbrev | |||
| iv fo@ $abbrev | |||
| nd $only | |||
| rd $only | |||
| @@ -3,43 +3,45 @@ | |||
| // numbers | |||
| _0 TE*o | |||
| _1 'uno | |||
| _2 d'os | |||
| _3 t@-*'es | |||
| _4 kw'at@-*o | |||
| _5 T'inko | |||
| _6 s'eIs | |||
| _7 sj'Ete | |||
| _8 'otSo | |||
| _9 nw'Eve | |||
| _1X dj'ET | |||
| _11 'onTe | |||
| _12 d'oTe | |||
| _13 t@-*'ETe | |||
| _14 kat'oRTe | |||
| _15 k'inTe | |||
| _20 v'eInte | |||
| _2X v'eInt | |||
| _3X t@-*'eInta | |||
| _4X kwa*'Enta | |||
| _5X Tinkw'Enta | |||
| _6X sEs'Enta | |||
| _7X sEt'Enta | |||
| _8X otS'Enta | |||
| _9X nov'Enta | |||
| _0C T'ientos | |||
| _1C0 T'ien // exactly one hundred | |||
| _1C T'iento | |||
| _5C kinj'Entos | |||
| _0M1 m'il | |||
| _1M1 m'il // no '1' before thousand | |||
| _0M2 mil^'ones | |||
| _1M2 'unmil^'on | |||
| _0M4 _bil^'ones | |||
| _1M4 'unbil^'on | |||
| _0and i | |||
| _dpt koma | |||
| _0 TE*o | |||
| _1 'uno | |||
| _2 d'os | |||
| _3 t@-*'es | |||
| _4 kw'at@-*o | |||
| _5 T'inko | |||
| _6 s'eIs | |||
| _7 sj'Ete | |||
| _8 'otSo | |||
| _9 nw'Eve | |||
| _1X dj'ET | |||
| _11 'onTe | |||
| _12 d'oTe | |||
| _13 t@-*'ETe | |||
| _14 kat'oRTe | |||
| _15 k'inTe | |||
| _20 v'eInte | |||
| _2X v'eInt | |||
| _3X t@-*'eInta | |||
| _4X kwa*'Enta | |||
| _5X Tinkw'Enta | |||
| _6X sEs'Enta | |||
| _7X sEt'Enta | |||
| _8X otS'Enta | |||
| _9X nov'Enta | |||
| _0C T'ientos | |||
| _1C0 T'ien // exactly one hundred | |||
| _1C T'iento | |||
| _5C kinj'Entos | |||
| _7C s,EtETj'Entos | |||
| _9C n,ovETj'Entos | |||
| _0M1 m'il | |||
| _1M1 m'il // no '1' before thousand | |||
| _0M2 mil^'ones | |||
| _1M2 'unmil^'on | |||
| _0M4 _bil^'ones | |||
| _1M4 'unbil^'on | |||
| _0and i | |||
| _dpt koma | |||
| @@ -101,7 +103,7 @@ os $u+ | |||
| // possessives | |||
| mi $u+ | |||
| mi mi $u+ | |||
| mis $u+ | |||
| tu $u+ | |||
| tus $u+ | |||
| @@ -1,12 +1,16 @@ | |||
| // translation rules | |||
| // translation rules for Spanish | |||
| // This file is UTF-8 encoded | |||
| // Conditional rules | |||
| // ?1 Castilian | |||
| // ?2 Latin America | |||
| .group a | |||
| _) a (_ a | |||
| a a | |||
| ai aI | |||
| ay aI | |||
| ay (K aI | |||
| ay (_ 'aI | |||
| @@ -39,7 +43,7 @@ | |||
| e E | |||
| e (_ e | |||
| ei eI | |||
| ey eI | |||
| ey (K eI | |||
| ey (_ 'eI | |||
| _) eu eU | |||
| @@ -153,7 +157,7 @@ | |||
| .group v | |||
| _) v (_ ve | |||
| _) v (_ uve | |||
| v v | |||
| _) v v | |||
| m) v v | |||
| @@ -161,7 +165,7 @@ | |||
| .group w | |||
| _) w (_ d'oBle,u | |||
| _) w (_ ,uve||d'oBle | |||
| w w | |||
| @@ -155,37 +155,7 @@ _0M4 b'ilijUna | |||
| _1M4 b'ilijUn | |||
| _dpt _:z'a*Ez_ | |||
| // Roman numerals | |||
| ii $abbrev | |||
| iii $abbrev | |||
| iv $abbrev | |||
| vii $abbrev | |||
| viii $abbrev | |||
| ix $abbrev | |||
| xi $abbrev | |||
| xii $abbrev | |||
| xiii $abbrev | |||
| xiv $abbrev | |||
| xvi $abbrev | |||
| xvii $abbrev | |||
| xviii $abbrev | |||
| xix $abbrev | |||
| xxi $abbrev | |||
| xxii $abbrev | |||
| xxiii $abbrev | |||
| xxiv $abbrev | |||
| xxvi $abbrev | |||
| xxvii $abbrev | |||
| xxviii $abbrev | |||
| xxix $abbrev | |||
| xxxi $abbrev | |||
| xxxii $abbrev | |||
| xxxiii $abbrev | |||
| xxxiv $abbrev | |||
| xxxvi $abbrev | |||
| xxxvii $abbrev | |||
| xxxviii $abbrev | |||
| xxxix $abbrev | |||
| // Abbreviations | |||
| aaa $abbrev | |||
| @@ -63,34 +63,7 @@ u.n u:JnEvEzEt: $dot | |||
| ú.n u:JnEvEzEt: $dot | |||
| vö v'EZd||_'Yss2E | |||
| ?1 i EJ $abbrev | |||
| ii kEttY: $abbrev | |||
| iii ha:R2om $abbrev | |||
| iv ne:J $abbrev | |||
| vi hAt $abbrev | |||
| vii he:t $abbrev | |||
| viii n^olts $abbrev | |||
| ix kilEnts $abbrev | |||
| xi tizEnEJ $abbrev | |||
| xii tizEnkEttY: $abbrev | |||
| xiii tizEnha:Rom $abbrev | |||
| xiv tizEnne:J $abbrev | |||
| xv tizEnYt $abbrev | |||
| xvi tizEnhAt $abbrev | |||
| xvii tizEnhe:t $abbrev | |||
| xviii tizEnn^olts $abbrev | |||
| xix tizEnkilEnts $abbrev | |||
| xx hu:s $abbrev | |||
| xxi husonEJ $abbrev | |||
| xxii husonkEttY: $abbrev | |||
| xxiii husonha:Rom $abbrev | |||
| xxiv husonne:J $abbrev | |||
| xxv husonYt $abbrev | |||
| xxvi husonhAt $abbrev | |||
| xxvii husonhe:t $abbrev | |||
| xxviii husonn^olts $abbrev | |||
| xxix husonkilEnts $abbrev | |||
| xxx hARmints $abbrev | |||
| ?1 i EJ $abbrev // option for Roman number | |||
| // Articles | |||
| @@ -135,6 +108,8 @@ noha $u $pause // even thought | |||
| nem $alt2 $strend | |||
| ne $u+ | |||
| e $u // "-e" question | |||
| e $atend // stressed at end of sentence | |||
| // Unstressed adverbs prepositions etc. | |||
| néhány $u+ | |||
| @@ -189,6 +164,8 @@ ről $u | |||
| on $u // on | |||
| en $u | |||
| ön $u | |||
| an $u // so many persons | |||
| ón $u | |||
| szor $u // times | |||
| szer $u | |||
| ször $u | |||
| @@ -241,6 +218,9 @@ egyaránt $u // alike | |||
| minden $u // all | |||
| részben $u // partly | |||
| egyik $u // one of | |||
| másik $u // the other | |||
| // word pairs | |||
| @@ -341,5 +321,7 @@ $ dolla:R2 | |||
| // Main Exceptions List | |||
| //===================== | |||
| nato na:to: | |||
| @@ -6,14 +6,12 @@ | |||
| a A | |||
| _) a (_ %A | |||
| !_n) ato a:to: // NATO | |||
| .group á | |||
| á a: | |||
| .group b | |||
| b b | |||
| bb b: | |||
| // bb b: | |||
| biz (A b'iz, // bizalmas etc. | |||
| biedermeier bi:dER2ma:jER2 | |||
| @@ -59,7 +57,7 @@ hierar) ch (i C | |||
| .group d | |||
| d d | |||
| dd d: | |||
| // dd d: | |||
| dz dz | |||
| A) dz (A d:z | |||
| dzs dZ | |||
| @@ -82,7 +80,6 @@ hierar) ch (i C | |||
| .group e | |||
| e E | |||
| D_-_) es (_ %ES | |||
| .group é | |||
| @@ -97,7 +94,7 @@ hierar) ch (i C | |||
| .group g | |||
| g g | |||
| gg g: | |||
| // gg g: | |||
| gy J | |||
| ggy J: | |||
| @@ -109,7 +106,8 @@ hierar) ch (i C | |||
| A) gyj (A J: | |||
| _e) gy (es J: | |||
| _e) gy (et J: | |||
| _e) gy (et_ J: | |||
| _e) gy (etlen J: | |||
| _e) gy (ik J: | |||
| _e) gy (üt J: | |||
| _minde) gy (ik J: | |||
| @@ -135,6 +133,7 @@ _minde) gy (ik J: | |||
| .group k | |||
| k k | |||
| kk k: | |||
| kk (C kk | |||
| _) köz kYz | |||
| .group l | |||
| @@ -186,6 +185,7 @@ szamue) ly lli | |||
| .group p | |||
| p p | |||
| pp p: | |||
| pp (C pp | |||
| p (v p_ | |||
| _) potsdam potsda:m | |||
| @@ -199,6 +199,7 @@ szamue) ly lli | |||
| r R2 | |||
| rr RR | |||
| rm R2_m | |||
| r (cc R | |||
| _) richa (rd R2iCa: | |||
| _) richá (rd R2iCa: | |||
| @@ -232,6 +233,7 @@ _munká) s S | |||
| -) t (_ t | |||
| t t | |||
| tt t: | |||
| tt (C tt | |||
| ty c | |||
| // s) ty c: // | |||
| // z) ty c: // keztyű | |||
| @@ -118,8 +118,8 @@ mi $u+ | |||
| ti $u+ | |||
| si $u+ | |||
| ci $u+ | |||
| vi $u+ | |||
| li $u+ | |||
| vi vi $u+ | |||
| li li $u+ | |||
| // words that double the following consonant | |||
| @@ -259,118 +259,44 @@ estote $u | |||
| sunto $u | |||
| // numerals 1-100 | |||
| // numerals | |||
| ii II // word, not numeric | |||
| vi wI // word, not numeric | |||
| i 'u:nUs $capital | |||
| ii d'UO $capital | |||
| iii t@-*,e:s | |||
| iv kw'at:UOR | |||
| v kw'i:NkwE | |||
| vi s,Eks $capital | |||
| vii s'EptEm | |||
| viii 'Okto: | |||
| ix n'OwEm | |||
| x d'EkEm | |||
| xi 'u:ndEkIm | |||
| xii dU'OdEkIm | |||
| xiii t@-*,e:d'EkIm | |||
| xiv kwat:w'ORdEkIm | |||
| xv kw,i:nd'EkIm | |||
| xvi s'EdEkIm | |||
| xvii sEpt'EndEkIm | |||
| xviii dUOdEwIg'IntI | |||
| xix u:ndEwIg'IntI | |||
| xx wi:g'Inti: | |||
| xxi wi:g'Inti:||'u:nUs | |||
| xxii wi:g'Inti:||d'UO | |||
| xxiii wi:g'Inti:||t@-*,e:s | |||
| xxiv wi:g'Inti:||kw'at:UOR | |||
| xxv wi:g'Inti:||kw'i:NkwE | |||
| xxvi wi:g'Inti:||s,Eks | |||
| xxvii wi:g'Inti:||s'EptEm | |||
| xxviii wi:g'Inti:||'Okto: | |||
| xxix wi:g'Inti:||n'OwEm | |||
| xxx t@-*i:g'Inta: | |||
| xxxi t@-*i:g'Inta:||'u:nUs | |||
| xxxii t@-*i:g'Inta:||d'UO | |||
| xxxiii t@-*i:g'Inta:||t@-*,e:s | |||
| xxxiv t@-*i:g'Inta:||kw'at:UOR | |||
| xxxv t@-*i:g'Inta:||kw'i:NkwE | |||
| xxxvi t@-*i:g'Inta:||s,Eks | |||
| xxxvii t@-*i:g'Inta:||s'EptEm | |||
| xxxviii t@-*i:g'Inta:||'Okto: | |||
| xxxix t@-*i:g'Inta:||n'OwEm | |||
| xl kwad@-*a:g'Inta: | |||
| xli kwad@-*a:g'Inta:||'u:nUs | |||
| xlii kwad@-*a:g'Inta:||d'UO | |||
| xliii kwad@-*a:g'Inta:||t@-*,e:s | |||
| xliv kwad@-*a:g'Inta:||kw'at:UOR | |||
| xlv kwad@-*a:g'Inta:||kw'i:NkwE | |||
| xlvi kwad@-*a:g'Inta:||s,Eks | |||
| xlvii kwad@-*a:g'Inta:||s'EptEm | |||
| xlviii kwad@-*a:g'Inta:||'Okto: | |||
| xlix kwad@-*a:g'Inta:||n'OwEm | |||
| l kwi:Nkwa:g'Inta: | |||
| li kwi:Nkwa:g'Inta:||'u:nUs $capital | |||
| lii kwi:Nkwa:g'Inta:||d'UO | |||
| liii kwi:Nkwa:g'Inta:||t@-*,e:s | |||
| liv kwi:Nkwa:g'Inta:||kw'at:UOR | |||
| lv kwi:Nkwa:g'Inta:||kw'i:NkwE | |||
| lvi kwi:Nkwa:g'Inta:||s,Eks | |||
| lvii kwi:Nkwa:g'Inta:||s'EptEm | |||
| lviii kwi:Nkwa:g'Inta:||'Okto: | |||
| lix kwi:Nkwa:g'Inta:||n'OwEm | |||
| lx sEksa:g'Inta: | |||
| lxi sEksa:g'Inta:||'u:nUs | |||
| lxii sEksa:g'Inta:||d'UO | |||
| lxiii sEksa:g'Inta:||t@-*,e:s | |||
| lxiv sEksa:g'Inta:||kw'at:UOR | |||
| lxv sEksa:g'Inta:||kw'i:NkwE | |||
| lxvi sEksa:g'Inta:||s,Eks | |||
| lxvii sEksa:g'Inta:||s'EptEm | |||
| lxviii sEksa:g'Inta:||'Okto: | |||
| lxix sEksa:g'Inta:||n'OwEm | |||
| lxx sEptUa:g'Inta: $capital | |||
| lxxi sEptUa:g'Inta:||'u:nUs | |||
| lxxii sEptUa:g'Inta:||d'UO | |||
| lxxiii sEptUa:g'Inta:||t@-*,e:s | |||
| lxxiv sEptUa:g'Inta:||kw'at:UOR | |||
| lxxv sEptUa:g'Inta:||kw'i:NkwE | |||
| lxxvi sEptUa:g'Inta:||s,Eks | |||
| lxxvii sEptUa:g'Inta:||s'EptEm | |||
| lxxviii sEptUa:g'Inta:||'Okto: | |||
| lxxix sEptUa:g'Inta:||n'OwEm | |||
| lxxx Okto:g'Inta: | |||
| lxxxi Okto:g'Inta:||'u:nUs | |||
| lxxxii Okto:g'Inta:||d'UO | |||
| lxxxiii Okto:g'Inta:||t@-*,e:s | |||
| lxxxiv Okto:g'Inta:||kw'at:UOR | |||
| lxxxv Okto:g'Inta:||kw'i:NkwE | |||
| lxxxvi Okto:g'Inta:||s,Eks | |||
| lxxxvii Okto:g'Inta:||s'EptEm | |||
| lxxxviii Okto:g'Inta:||'Okto: | |||
| lxxxix Okto:g'Inta:||n'OwEm | |||
| xc no:na:g'Inta: | |||
| xci no:na:g'Inta:||'u:nUs | |||
| xcii no:na:g'Inta:||d'UO | |||
| xciii no:na:g'Inta:||t@-*,e:s | |||
| xciv no:na:g'Inta:||kw'at:UOR | |||
| xcv no:na:g'Inta:||kw'i:NkwE | |||
| xcvi no:na:g'Inta:||s,Eks | |||
| xcvii no:na:g'Inta:||s'EptEm | |||
| xcviii no:na:g'Inta:||'Okto: | |||
| xcix no:na:g'Inta:||n'OwEm | |||
| c k'EntUm | |||
| // This list could be expanded further, however programming | |||
| // the pronunciation would be more efficient. | |||
| _0 n'Ulla | |||
| _1 'u:nUs | |||
| _2 d'UO | |||
| _3 t@-*,e:s | |||
| _4 kw'at:UOR | |||
| _5 kw'i:NkwE | |||
| _6 s,Eks | |||
| _7 s'EptEm | |||
| _8 'Okto: | |||
| _9 n'OwEm | |||
| _10 d'EkEm | |||
| _11 'u:ndEkIm | |||
| _12 dU'OdEkIm | |||
| _13 t@-*,e:d'EkIm | |||
| _14 kwat:w'ORdEkIm | |||
| _15 kw,i:nd'EkIm | |||
| _16 s'EdEkIm | |||
| _17 sEpt'EndEkIm | |||
| _18 dUOdEwIg'IntI | |||
| _19 u:ndEwIg'IntI | |||
| _2X wi:g'Inti: | |||
| _3X t@-*i:g'Inta: | |||
| _4X kwad@-*a:g'Inta: | |||
| _5X kwi:Nkwa:g'Inta: | |||
| _6X sEksa:g'Inta: | |||
| _7X sEptUa:g'Inta: | |||
| _8X Okto:g'Inta: | |||
| _9X no:na:g'Inta: | |||
| _0C k'EntUm | |||
| _0M1 m'IllE | |||
| @@ -28,6 +28,11 @@ _õ ,otS'iU | |||
| _ú ,u&g'udU | |||
| _ü ,utR'em& | |||
| i i // speak i v x as letters, not Roman numbers | |||
| v ve | |||
| x Sis# | |||
| _cap maI'uskulU | |||
| _?A l'etR& | |||
| _?? s'imbolU | |||
| @@ -80,23 +85,23 @@ _" 'abRi;'asp&||d'upl&s# | |||
| // numeric | |||
| //******** | |||
| ?1_0 z'Eru | |||
| ?2_0 z'E*U | |||
| ?1_1 'um | |||
| ?2_1 'uN | |||
| _2 d'oIs# | |||
| ?1 _0 z'Eru | |||
| ?2 _0 z'E*U | |||
| ?1 _1 'um | |||
| ?2 _1 'uN | |||
| _2 d'oIs# | |||
| ?1 _3 tr'es# | |||
| ?2 _3 tR'es# | |||
| ?1 _4 kw'atru | |||
| ?2 _4 kw'atRu | |||
| _5 s'iNku | |||
| _6 s'eIs# | |||
| ?1_7 s'Ety | |||
| ?2_7 s'EtSi | |||
| _8 'oItu | |||
| ?1_9 n'Ovy | |||
| ?2_9 n'Ovi | |||
| 10 d'Es# | |||
| _5 s'iNku | |||
| _6 s'eIs# | |||
| ?1 _7 s'Ety | |||
| ?2 _7 s'EtSi | |||
| _8 'oItu | |||
| ?1 _9 n'Ovy | |||
| ?2 _9 n'Ovi | |||
| _10 d'Es# | |||
| ?1_11 'oNzy | |||
| ?2_11 'oNzi | |||
| @@ -200,20 +205,15 @@ ue $abbrev | |||
| unts $abbrev | |||
| usb $abbrev | |||
| // roman numerals | |||
| ?1 ii d'oIs# $abbrev | |||
| ?1 iii tr'es# $abbrev | |||
| ?1 iv kw'atru $abbrev | |||
| dr $dot | |||
| dra $dot | |||
| mr $dot | |||
| mrs $dot | |||
| prof pr'Of $dot | |||
| sr $dot | |||
| ?1 sra ,Es;'Errj'a $dot | |||
| ?2 sra $dot | |||
| dr $dot | |||
| dra $dot | |||
| mr $dot | |||
| mrs $dot | |||
| prof pr'Of $dot | |||
| sr $dot | |||
| ?1 sra ,Es;'Errj'a $dot | |||
| ?2 sra $dot | |||
| // articles | |||
| o $u+ | |||
| @@ -603,7 +603,6 @@ | |||
| únh ''u~n^ | |||
| .group v | |||
| _) v (_ ve | |||
| v v | |||
| v (v | |||
| @@ -616,7 +615,6 @@ | |||
| .group x | |||
| _) x (_ Sis# | |||
| x (A S | |||
| A) x (A ks | |||
| _e) x (A z | |||
| @@ -1,8 +1,10 @@ | |||
| // translation rules for Romanian | |||
| // This file is UTF-8 encoded | |||
| .group a | |||
| a a | |||
| ai aI | |||
| @@ -11,52 +13,58 @@ | |||
| au (_ 'aU | |||
| a (AAA a | |||
| &) a (_S1q a | |||
| gi) a (_S1q 'a | |||
| V@) a (_ 'a | |||
| V@) a (N_ 'a | |||
| ăi) a (_ 'a | |||
| @) abil (_ 'abil | |||
| _) anti (@P4 anti | |||
| @) ale (_ 'ale | |||
| @ion) a (_ 'a | |||
| .group ă | |||
| ă @ | |||
| ăi @I | |||
| ăi (_ @I | |||
| ău @U // ?? only at end of word ?? | |||
| ău (_ @U | |||
| ăi (m_ @'i | |||
| ăi (t_ @'i | |||
| ăi (ţi_ @'i | |||
| ăi (te @'i | |||
| ăi (n_ @'i | |||
| ăi (na_ @'i | |||
| ăi (ni_ @'i | |||
| ăi (ne_ @'i | |||
| ău (_ '@U | |||
| @) ăte (_S3t @te | |||
| @) ătă (_S3t @t@ | |||
| @) ătul (_S4t @tul | |||
| @) ătele (_S5t @tele | |||
| @) ătului (_S6t @tuluI | |||
| @) ătelor (_S6t @telor | |||
| &) ă (_S1 @ | |||
| &ec) ă (_ @ | |||
| @ăC) ă (_ @ | |||
| @er) ă (_ @ | |||
| @iţ) ă (_ @ | |||
| @) ă (Că_ =@ | |||
| ări (A_ @*'i | |||
| ării (_ @*'iI | |||
| ări (AA_ @*'i | |||
| @) ăt (_S2t @t | |||
| @) ătă (_S3t @t@ | |||
| @) ătul (_S4t @tul | |||
| @) ătele (_S5t @tele | |||
| @) ătului (_S6t @tuluI | |||
| @) ătelor (_S6t @telor | |||
| @) ăie (_ =@Ie | |||
| .group â | |||
| â y | |||
| âi yI | |||
| âu yU | |||
| @) âie (_ =yIe | |||
| .group b | |||
| b b | |||
| @) b (i_ b; | |||
| bb b | |||
| @) b (i_ b; | |||
| @) b (il_ =b | |||
| @) b (ila_ =b | |||
| @) b (ili_ =b | |||
| @) b (ilii_ =b | |||
| @) b (ilului_ =b | |||
| @) b (ililor_ =b | |||
| @) b (ilile_ =b | |||
| mo) bil (_ b'il | |||
| @@ -70,55 +78,70 @@ | |||
| @@) col (_ =kol | |||
| @@) coli (_S1t =I^ | |||
| @@) cole (_S1t e | |||
| @) cni (_ kn'i | |||
| @) cnea (_ kne'a | |||
| .group d | |||
| d d | |||
| dd d | |||
| @) d (i_ d; | |||
| .group e | |||
| e e | |||
| ei eI | |||
| // eu eU // only at end of word ?? | |||
| // eu e[u // ?? | |||
| _) ei eI | |||
| ei (_ eI | |||
| // eu eU // only at end of word ?? | |||
| // eu e[u // ?? | |||
| eu (_ 'eU | |||
| ea ea | |||
| &) ea (_S2q ea | |||
| &) eSi eaj | |||
| eau eaw | |||
| eo eo | |||
| eoa eO'a | |||
| e (AAA e | |||
| @) eş (_ =eS | |||
| @) eşul (_ =eSul | |||
| @) eşi (_ =eSI^ | |||
| @) eşului (_ =eSuluI | |||
| @) eşilor (_ =eSilor | |||
| @) ec (a_ =ek | |||
| @) ec (ă_ =ek | |||
| @) ec (ii_ =ek | |||
| @) ec (ile_ =ek | |||
| @) ec (ilor_ =ek | |||
| @At) ec (i@_ etS | |||
| @At) ec (A_ ek | |||
| @At) ec (ii_ eTtS | |||
| // &) es (_S1q e | |||
| &C) e (re_ %e | |||
| _ac) ee (a eI | |||
| r) ei (er_ 'eI | |||
| @) e (re_ =e | |||
| @) e (ri_ =e | |||
| @) e (rea_ =e | |||
| @) e (rii_ =e | |||
| i) e (re_ e | |||
| i) e (ri_ e | |||
| i) e (rii_ e | |||
| i) e (rea_ e | |||
| _ac) ee (a eI | |||
| r) ei (er_ 'eI | |||
| @) eş (_ =eS | |||
| @) eşul (_ =eSul | |||
| @) eşi (_ =eSI^ | |||
| @) eşului (_ =eSuluI | |||
| @) eşilor (_ =eSilor | |||
| // &) es (_S1q e | |||
| @) e (ra_ =e | |||
| @) e (ră_ =e | |||
| @f) e (ra_ e | |||
| @f) e (ra_ e | |||
| i) e (ră_ e | |||
| i) e (ra_ e | |||
| eoa eO'a | |||
| .group f | |||
| f f | |||
| ff f | |||
| @) f (i_ f; | |||
| @@ -138,22 +161,48 @@ | |||
| .group i | |||
| i i | |||
| i (A j | |||
| @) i (e_ j | |||
| &C) i (_N$1q i/ | |||
| &) i (_N$1q i | |||
| &) i (-N$1q i // don't reduce to [I^] if a hyphen follows | |||
| ţ) i (-Că i | |||
| ţ) i (-Ci i | |||
| ţ) i (-l i | |||
| ţ) i (-ne i | |||
| &') i (_ i | |||
| ţi-) i (_ _ // combined with previous word as [iI] | |||
| Cr) i (_ i | |||
| V&) i (_ 'i // verb | |||
| V&) i (N_ 'i // verb | |||
| ăC) ia (_ 'ia | |||
| âC) ia (_ 'ia | |||
| ăC) ie (_ 'ie | |||
| âC) ie (_ 'ie | |||
| @) ie (_S1q ie | |||
| g) i (ne_ =i | |||
| g) i (nea_ =i | |||
| c) i (uC | |||
| cţ) ie (_ =ie | |||
| cţ) iei (_ =ieI | |||
| cţ) ia (_ =ja | |||
| graf) ie (_ 'ie | |||
| graf) ia (_ 'ia | |||
| graf) iei (_ 'ieI | |||
| graf) ii (_ 'iI | |||
| scop) ie (_ 'ie | |||
| scop) ia (_ 'ia | |||
| scop) iei (_ ieI | |||
| scop) ii (_ 'iI | |||
| er) ia (_ 'ia | |||
| er) iei (_ 'ieI | |||
| on) ie (_ 'ie | |||
| on) ia (_ 'ia | |||
| on) iei (_ 'ieI | |||
| uş) ie (_ 'ie | |||
| uş) ia (_ 'ia | |||
| uş) iei (_ 'ieI | |||
| // @) ie (_S1q ie | |||
| iei (_ 'ieI | |||
| ii iI | |||
| @@ -163,15 +212,26 @@ | |||
| iu ju | |||
| &) ic (_ =ik | |||
| &) ica (_ =ika | |||
| &) ice (_ =itSe | |||
| &) icile (_ =itSile | |||
| &) icile (_ =itSile | |||
| &) icilor (_ =itSilor | |||
| @) icii (_ =itSiI | |||
| scr) i (e 'i | |||
| &) ing (_ %iNg // foreign words | |||
| i (t_ 'i | |||
| ioa iO'a | |||
| ioa iO'a | |||
| @) işte (_ =iSte | |||
| @) iştea (_ =iStea | |||
| @) i (ţă_++++++++ =i | |||
| @) i (ţe_ =i | |||
| @) i (ţei_ =i | |||
| @) i (ţelor_ =i | |||
| -) i (_ j | |||
| @) i (ţele_ =i | |||
| .group î | |||
| @@ -190,6 +250,7 @@ | |||
| .group l | |||
| l l | |||
| ll l | |||
| @) l (i_ l; | |||
| _) l (_ le | |||
| -) l (_ l // -l | |||
| @@ -205,6 +266,7 @@ | |||
| .group m | |||
| _) m (_ me | |||
| m m | |||
| mm m | |||
| @) m (i_ m; | |||
| _) m (-a m | |||
| @@ -220,69 +282,75 @@ | |||
| @) n (tic_ =n | |||
| @) n (ic_ =n | |||
| _) n (-a n | |||
| -) n (_ n | |||
| -) n (_ n | |||
| @itudi) ne (_S2t ne | |||
| @itudi) nea (_S3t nea | |||
| @itudi) nii (_S3t niI | |||
| @itudi) ni (_S2t ni | |||
| @itudi) nile (_S4t nile | |||
| @itudi) nilor (_S5t nilor | |||
| .group o | |||
| o o | |||
| oa Oa | |||
| oai Oaj | |||
| oi oI | |||
| _) oi oI | |||
| oi (_ 'oI | |||
| ou oU | |||
| ou (_ 'oU | |||
| o (AAA o | |||
| @) oi (t_ o'i | |||
| @) oi (tă_ o'i | |||
| @) oi (ţi_ o'i | |||
| @) oi (te_ o'i | |||
| .group p | |||
| p p | |||
| pp p | |||
| @) p (i_ p; | |||
| .group q | |||
| q k | |||
| qu kw | |||
| .group r | |||
| r r | |||
| A) r (A * | |||
| C) r (A @-* | |||
| rr *r | |||
| A) r (i_ *; | |||
| _) re (@P2v re | |||
| _) re (gul re | |||
| @u) ri (_NS2t rI^ | |||
| r r | |||
| rr r | |||
| A) r (A * | |||
| C) r (A @-* | |||
| rr *r | |||
| A) r (i_ *; | |||
| _) re (@P2T re | |||
| _) re (gul re | |||
| @u) ri (_NS2t rI^ | |||
| C) ri (_ @-*i | |||
| @u) rii (_S3t riI | |||
| @u) rile (_S4t rile | |||
| @) rilor (_S5t rilor | |||
| @u) rilor (_S5t rilor | |||
| C) ri (_ @-*i | |||
| @) răm (_S1t m | |||
| @) răţi (_S4t *@tsI^ | |||
| @u) re (_S2t *e | |||
| .group s | |||
| _) s (_ se | |||
| _) s (-a s | |||
| s s | |||
| @) s (i_ s; | |||
| -) s (_ s | |||
| sh S | |||
| ss s | |||
| &) sprezece (_S8t sp@-*ez,etSe | |||
| @) sem (_S1t m | |||
| @) seră (_S2t *@ | |||
| @) serăm (_S3t *@m | |||
| @) serăm (_S3t *@m | |||
| @) serăţi (_S4t *@tsI^ | |||
| @) seşi (_S2t SI^ | |||
| @) sni (_ sn'i | |||
| @) sni (_ sn'i | |||
| .group ş | |||
| @@ -298,6 +366,10 @@ | |||
| tt (_ t | |||
| @) t (i_ t; | |||
| ts ts | |||
| tz ts | |||
| tt t | |||
| .group ţ | |||
| ţ ts | |||
| @@ -314,19 +386,34 @@ | |||
| .group u | |||
| u u | |||
| u (A w | |||
| ui uI | |||
| _) ui uI | |||
| ui (_ uI | |||
| ui (e wi | |||
| V&) ui (_ u'i | |||
| ui (m_ u'i | |||
| ui (t_ u'i | |||
| ui (ţi_ u'i | |||
| ui (se_ u'i | |||
| &) ul (_S2t ul | |||
| @ic) ul (_S2 ul | |||
| @ic) uri (_S3 urI^ | |||
| V&) ui (_N u'i | |||
| &) ul (_S2t ul | |||
| @ic) ul (_S2t ul | |||
| @ic) ule (_S3t ule | |||
| @ic) ului (_S4t uluI | |||
| @ic) uri (_S3 urI^ | |||
| @ic) urile (_S5 urile | |||
| &) ului (_S4t uluI | |||
| @) us (_S2t us | |||
| @) usul (_S4t usul | |||
| @) usuri (_S5t usuri | |||
| @) usului (_S6t usuluI | |||
| @) usurile (_SS´7t usurile | |||
| @) usurilor (_S8t usurilor | |||
| @ăC) u (N_ 'u | |||
| @) um (_S2t um | |||
| @) umul (_S4t umul | |||
| @) umului (_S6t umuluI | |||
| @) umuri (_S5t umuri | |||
| @) umurile (_S7t umurile | |||
| @) umurilor (_S8t umurilor | |||
| c) um (_ um | |||
| @) uie (_ =wie | |||
| .group v | |||
| @@ -342,10 +429,17 @@ | |||
| x ks | |||
| A) x (A gz | |||
| ma) x (i ks | |||
| e) x (e ks | |||
| cone) x (iu ks | |||
| i) x (e ks | |||
| o) x (e ks // boxele | |||
| u) x (a ks | |||
| a) x (a ks | |||
| a) x (ă ks | |||
| a) x (e ks | |||
| i) x (a ks | |||
| o) x (a ks | |||
| A) x (â ks | |||
| @) x (ibil ks | |||
| o) x (i ks // oxigen | |||
| a) x (ia ks // axial | |||
| ale) x ks | |||
| @@ -359,15 +453,22 @@ | |||
| .group z | |||
| z z | |||
| zz z | |||
| @) z (i_ z; | |||
| .group | |||
| ö Y | |||
| % protSent | |||
| D_) % la_sut@ | |||
| % p@-*otSent | |||
| $ dolar | |||
| + plus | |||
| & ampersand | |||
| © k'apiraIt | |||
| @ a*'ond | |||
| / sleS | |||
| € 'eU*o | |||
| ° g@-*ade | |||
| , (D v'irgul@ | |||
| @@ -384,3 +485,5 @@ | |||
| *) * (* | |||
| ** | |||
| **) * (_ _:: | |||
| @@ -6,24 +6,26 @@ | |||
| 0 r/ NULL 0 r | |||
| 0 r- NULL 0 r | |||
| 0 g- NULL 0 NULL | |||
| 0 w/ NULL 0 w | |||
| 0 w NULL 0 u | |||
| 0 w/ NULL 0 u | |||
| 0 * NULL 0 r | |||
| 0 ; NULL 0 NULL | |||
| 0 a e 15 a _ | |||
| 0 a NULL 0 a | |||
| 0 @- NULL 0 NULL | |||
| 0 j/ NULL 0 j | |||
| 0 I^ _ 0 I | |||
| 0 I^ NULL 20 I _ | |||
| 0 @U NULL 60 @ w | |||
| 0 aU NULL 60 a w | |||
| 0 eU NULL 60 e w | |||
| 0 eU NULL 80 e u | |||
| 0 iU NULL 60 i w | |||
| 0 yU NULL 60 l w | |||
| 0 yU NULL 60 1 w | |||
| 0 oU NULL 60 o w | |||
| 0 @I NULL 60 @ j | |||
| 0 iI NULL 60 i j | |||
| 0 aI NULL 60 a j | |||
| 0 eI NULL 60 e j | |||
| 0 eI NULL 100 e i | |||
| 0 oI NULL 60 o j | |||
| 0 uI NULL 60 u j | |||
| 0 yI NULL 60 1 j | |||
| @@ -154,7 +154,7 @@ phoneme 3: | |||
| vowel starttype (@) endtype (@) | |||
| length 230 | |||
| formants vwl_en_us/3_us | |||
| reduceto @ 0 | |||
| // reduceto @ 0 | |||
| linkout r- | |||
| endphoneme | |||
| @@ -51,13 +51,18 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control) | |||
| char capital[20]; | |||
| char ph_buf[30]; | |||
| char ph_buf2[50]; | |||
| static char single_letter[8] = {0}; | |||
| static char single_letter[10] = {0,0}; | |||
| ph_buf[0] = 0; | |||
| capital[0] = 0; | |||
| n_bytes = utf8_in(&letter,word,0); | |||
| if((letter & 0xfff00) == 0x0e000) | |||
| { | |||
| letter &= 0xff; // uncode private usage area | |||
| } | |||
| if(control > 2) | |||
| { | |||
| // include CAPITAL information | |||
| @@ -68,8 +73,17 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control) | |||
| } | |||
| letter = towlower(letter); | |||
| if((letter <= 32) || iswspace(letter)) | |||
| { | |||
| // lookup space as _&32 etc. | |||
| sprintf(&single_letter[1],"_#%d ",letter); | |||
| Lookup(&single_letter[1],ph_buf); | |||
| strcat(phonemes,ph_buf); | |||
| return(n_bytes); | |||
| } | |||
| len = utf8_out(letter,&single_letter[2]); | |||
| single_letter[2+len] = ' '; | |||
| single_letter[len+2] = ' '; | |||
| next = RULE_SPELLING; | |||
| if(word[n_bytes] == ' ') | |||
| @@ -186,6 +200,67 @@ void Translator::SetSpellingStress(char *phonemes, int control) | |||
| int Translator::TranslateRoman(char *word, char *ph_out) | |||
| {//===================================================== | |||
| int c; | |||
| char *p; | |||
| int acc; | |||
| int prev; | |||
| int value; | |||
| int subtract; | |||
| unsigned int flags; | |||
| char number_chars[N_WORD_BYTES]; | |||
| static char *roman_numbers = "ixcmvld"; | |||
| static int roman_values[] = {1,10,100,1000,5,50,500}; | |||
| if((langopts.numbers & NUM_ROMAN) == 0) | |||
| return(0); | |||
| acc = 0; | |||
| prev = 0; | |||
| subtract = 0x7fff; | |||
| while((c = *word++) != ' ') | |||
| { | |||
| if((p = strchr(roman_numbers,c)) == NULL) | |||
| return(0); | |||
| value = roman_values[p - roman_numbers]; | |||
| if((prev==5) || (prev==50) || (prev==500)) | |||
| { | |||
| if(value >= prev) | |||
| return(0); | |||
| } | |||
| if((prev != 0) && (prev < value)) | |||
| { | |||
| if(((acc % 10) != 0) || ((prev*10) < value)) | |||
| return(0); | |||
| subtract = prev; | |||
| value -= subtract; | |||
| } | |||
| else | |||
| if(value >= subtract) | |||
| return(0); | |||
| else | |||
| acc += prev; | |||
| prev = value; | |||
| } | |||
| acc += prev; | |||
| if(acc < 2) | |||
| return(0); | |||
| if(acc > langopts.max_roman) | |||
| return(0); | |||
| Lookup("_roman",ph_out); // precede by "roman" if _rom is defined in *_list | |||
| p = &ph_out[strlen(ph_out)]; | |||
| sprintf(number_chars," %d ",acc); | |||
| TranslateNumber(&number_chars[1],p,&flags,0); | |||
| return(1); | |||
| } // end of TranslateRoman | |||
| int Translator::LookupNum2(int value, int control, char *ph_out) | |||
| @@ -589,7 +664,7 @@ int Translator::TranslateNumber_1(char *word, char *ph_out, unsigned int *flags, | |||
| { | |||
| if((thousandplex > 0) && (value < 1000)) | |||
| { | |||
| if(langopts.numbers & 0x40000) | |||
| if(langopts.numbers2 & 0x100) | |||
| { | |||
| if((thousandplex == 1) && (value >= 100)) | |||
| { | |||
| @@ -1546,6 +1546,10 @@ f_input = f_in; // for GetC etc | |||
| c1 = j; | |||
| } | |||
| } | |||
| if((sayas_mode == 0x14) && (c1 <= 0x20)) | |||
| { | |||
| c1 += 0xe000; // move into unicode private usage area | |||
| } | |||
| } | |||
| else | |||
| if(c1 == '<') | |||
| @@ -35,7 +35,7 @@ | |||
| #include "translate.h" | |||
| #include "wave.h" | |||
| const char *version_string = "1.27.05 05.Jul.07"; | |||
| const char *version_string = "1.27.06 07.Jul.07"; | |||
| const int version_phdata = 0x012701; | |||
| int option_device_number = -1; | |||
| @@ -44,8 +44,7 @@ Translator_English::Translator_English() : Translator() | |||
| langopts.stress_rule = 0; | |||
| langopts.word_gap = 0; | |||
| langopts.numbers = 0x41; | |||
| langopts.numbers = 0x41 + NUM_ROMAN; | |||
| } | |||
| @@ -122,7 +122,7 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.param[LOPT_PREFIXES] = 1; | |||
| memcpy(tr->stress_lengths,stress_lengths_de,sizeof(tr->stress_lengths)); | |||
| tr->langopts.numbers = 0x11c19; | |||
| tr->langopts.numbers = 0x11c19 + NUM_ROMAN; | |||
| SetLetterVowel(tr,'y'); | |||
| } | |||
| break; | |||
| @@ -213,7 +213,7 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.unstressed_wd2 = 2; | |||
| tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | |||
| tr->langopts.numbers = 0x529; | |||
| tr->langopts.numbers = 0x529 + NUM_ROMAN; | |||
| } | |||
| break; | |||
| @@ -271,7 +271,8 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.stress_rule = 6; // stress on last heaviest syllable | |||
| tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable | |||
| tr->langopts.numbers = 0x811 + 0x40000; | |||
| tr->langopts.numbers = 0x811; | |||
| tr->langopts.numbers2 = 0x100; | |||
| tr->letter_bits_offset = OFFSET_DEVANAGARI; | |||
| tr->langopts.replace_chars = replace_chars_hi; | |||
| tr->langopts.replacement_chars = replacement_chars_hi; | |||
| @@ -302,7 +303,7 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.max_initial_consonants = 5; | |||
| tr->langopts.spelling_stress = 1; | |||
| tr->langopts.numbers = 0x1c0d + 0x4000; | |||
| tr->langopts.numbers = 0x1c0d + 0x4000 + NUM_ROMAN; | |||
| tr->langopts.numbers2 = 0x4a; // variant numbers before thousands,milliards | |||
| tr->langopts.replace_chars = replace_cyrillic; | |||
| tr->langopts.replacement_chars = replace_cyrillic_latin; | |||
| @@ -336,7 +337,7 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.param[LOPT_COMBINE_WORDS] = 99; // combine some prepositions with the following word | |||
| tr->langopts.long_stop = 130; | |||
| tr->langopts.numbers = 0x1809; | |||
| tr->langopts.numbers = 0x1809 + NUM_ROMAN; | |||
| SetLetterVowel(tr,'y'); | |||
| tr->langopts.spelling_stress = 1; | |||
| //SetLengthMods(tr,3); // all equal | |||
| @@ -384,7 +385,7 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.param[LOPT_IT_DOUBLING] = 2; // double the first consonant if the previous word ends in a stressed vowel | |||
| tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels | |||
| tr->langopts.param[LOPT_REDUCE] = 1; // reduce vowels even if phonemes are specified in it_list | |||
| tr->langopts.numbers = 0x2709 + 0x800; | |||
| tr->langopts.numbers = 0x2709 + 0x800 + NUM_ROMAN; | |||
| } | |||
| break; | |||
| @@ -397,6 +398,8 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.unstressed_wd1 = 0; | |||
| tr->langopts.unstressed_wd2 = 2; | |||
| tr->langopts.param[LOPT_DIERESES] = 1; | |||
| tr->langopts.numbers = 0x1 + NUM_ROMAN; | |||
| tr->langopts.max_roman = 5000; | |||
| } | |||
| break; | |||
| @@ -483,7 +486,7 @@ Translator *SelectTranslator(const char *name) | |||
| // tr->langopts.vowel_pause = 1; | |||
| tr->langopts.stress_rule = 3; // stress on final syllable | |||
| tr->langopts.stress_flags = 0x6 | 0x10 | 0x20000; | |||
| tr->langopts.numbers = 0xa69 + 0x2000; | |||
| tr->langopts.numbers = 0xa69 + 0x2000 + NUM_ROMAN; | |||
| tr->punct_to_tone[0][3] = 2; // use exclamation intonation | |||
| SetLetterVowel(tr,'y'); | |||
| } | |||
| @@ -505,7 +508,7 @@ Translator *SelectTranslator(const char *name) | |||
| tr->charset_a0 = charsets[2]; // ISO-8859-2 | |||
| tr->langopts.replace_chars = replace_chars_ro; | |||
| tr->langopts.replacement_chars = replacement_chars_ro; | |||
| tr->langopts.numbers = 0x1829+0x6000; | |||
| tr->langopts.numbers = 0x1829+0x6000 + NUM_ROMAN; | |||
| tr->langopts.numbers2 = 0x1e; // variant numbers before all thousandplex | |||
| } | |||
| break; | |||
| @@ -576,7 +579,8 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.stress_rule = 2; | |||
| tr->langopts.stress_flags = 0x6 | 0x10; | |||
| tr->langopts.numbers = 0x408e1; | |||
| tr->langopts.numbers = 0x8e1; | |||
| tr->langopts.numbers2 = 0x100; | |||
| } | |||
| break; | |||
| @@ -942,7 +946,7 @@ Translator_Afrikaans::Translator_Afrikaans() : Translator() | |||
| langopts.param[LOPT_PREFIXES] = 1; | |||
| SetLetterVowel(this,'y'); // add 'y' to vowels | |||
| langopts.numbers = 0x0d1; | |||
| langopts.numbers = 0x0d1 + NUM_ROMAN; | |||
| memcpy(stress_lengths,stress_lengths2,sizeof(stress_lengths)); | |||
| } | |||
| @@ -438,6 +438,7 @@ Translator::Translator() | |||
| langopts.length_mods0 = length_mods_en0; | |||
| langopts.long_stop = 100; | |||
| langopts.max_roman = 49; | |||
| langopts.thousands_sep = ','; | |||
| langopts.decimal_sep = '.'; | |||
| @@ -667,7 +668,13 @@ if((wmark > 0) && (wmark < 8)) | |||
| found = TranslateNumber(word,phonemes,&dictionary_flags,wflags); | |||
| } | |||
| if((wflags & FLAG_ALL_UPPER) && (clause_upper_count <= clause_lower_count) && | |||
| if(!found & ((word_flags & FLAG_UPPERS) != FLAG_FIRST_UPPER)) | |||
| { | |||
| // either all upper or all lower case | |||
| found = TranslateRoman(word,phonemes); | |||
| } | |||
| if(!found && (wflags & FLAG_ALL_UPPER) && (clause_upper_count <= clause_lower_count) && | |||
| !(dictionary_flags & (FLAG_ABBREV | FLAG_SKIPWORDS)) && (word_length>1) && (word_length<4) && iswalpha(first_char)) | |||
| { | |||
| // An upper case word in a lower case clause. This could be an abbreviation. | |||
| @@ -1635,6 +1642,7 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ | |||
| int phoneme_mode = 0; | |||
| int dict_flags; // returned from dictionary lookup | |||
| int word_flags; // set here | |||
| int next_word_flags; | |||
| int embedded_count = 0; | |||
| int letter_count = 0; | |||
| char *word; | |||
| @@ -1715,6 +1723,7 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ | |||
| word_count = 0; | |||
| single_quoted = 0; | |||
| word_flags = 0; | |||
| next_word_flags = 0; | |||
| expect_verb=0; | |||
| expect_past=0; | |||
| expect_verb_s=0; | |||
| @@ -1827,7 +1836,7 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ | |||
| } | |||
| } | |||
| else | |||
| if((option_sayas2 & 0xf0) != 1) | |||
| if((option_sayas2 & 0xf0) != 0x10) | |||
| { | |||
| if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out)) | |||
| { | |||
| @@ -1937,6 +1946,7 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) | |||
| c = ' '; // change from upper to lower case, start new word at the last uppercase | |||
| prev_in2 = c; | |||
| source_index = prev_source_index; // unget | |||
| next_word_flags |= FLAG_NOSPACE; | |||
| } | |||
| //#endif | |||
| } | |||
| @@ -2116,7 +2126,8 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) | |||
| for(k=j; charix[k]!=0; k++); | |||
| words[word_count].length = k-j; | |||
| word_flags = 0; | |||
| word_flags = next_word_flags; | |||
| next_word_flags = 0; | |||
| pre_pause = 0; | |||
| word_mark = 0; | |||
| all_upper_case = FLAG_ALL_UPPER; | |||
| @@ -69,12 +69,14 @@ | |||
| // wordflags, flags in source word | |||
| #define FLAG_ALL_UPPER 0x1 /* no lower case letters in the word */ | |||
| #define FLAG_FIRST_UPPER 0x2 /* first letter is upper case */ | |||
| #define FLAG_UPPERS 0x3 // FLAG_ALL_UPPER | FLAG_FIRST_UPPER | |||
| #define FLAG_HAS_PLURAL 0x4 /* upper-case word with s or 's lower-case ending */ | |||
| #define FLAG_PHONEMES 0x8 /* word is phonemes */ | |||
| #define FLAG_LAST_WORD 0x10 /* last word in clause */ | |||
| #define FLAG_STRESSED_WORD 0x20 /* this word has explicit stress */ | |||
| #define FLAG_EMBEDDED 0x40 /* word is preceded by embedded commands */ | |||
| #define FLAG_HYPHEN 0x80 | |||
| #define FLAG_NOSPACE 0x100 // word is not seperated from previous word by a space | |||
| #define FLAG_DONT_SWITCH_TRANSLATOR 0x1000 | |||
| #define FLAG_SUFFIX_REMOVED 0x2000 | |||
| #define FLAG_HYPHEN_AFTER 0x4000 | |||
| @@ -275,6 +277,7 @@ typedef struct { | |||
| unsigned char *length_mods; | |||
| unsigned char *length_mods0; | |||
| #define NUM_ROMAN 0x20000 | |||
| // bits0-1=which numbers routine to use. | |||
| // bit2= thousands separator must be space | |||
| // bit3= , decimal separator, not . | |||
| @@ -289,15 +292,16 @@ typedef struct { | |||
| // bit12=allow space as thousands separator (in addition to langopts.thousands_sep) | |||
| // bits13-15 post-decimal-digits 0=single digits, 1=(LANG=it) 2=(LANG=pl) 3=(LANG=ro) | |||
| // bit16=dot after number indicates ordinal | |||
| // bit18=special word for 100,000s LANG=sw | |||
| // bit17=recognize roman numbers | |||
| int numbers; | |||
| // bits 1-4 use variant form of numbers before thousands,millions,etc. | |||
| // bit6=(LANG=pl) two forms of plural, M or MA | |||
| // bit7=(LANG-ru) use MB for 1 thousand, million, etc | |||
| // bit8=(LANG=sw) special word for 100,000s | |||
| int numbers2; | |||
| int max_roman; | |||
| int thousands_sep; | |||
| int decimal_sep; | |||
| int intonation; // 1=tone language | |||
| @@ -388,6 +392,7 @@ private: | |||
| int LookupNum3(int value, char *ph_out, int suppress_null, int thousandplex, int prev_thousands); | |||
| int LookupThousands(int value, int thousandplex, char *ph_out); | |||
| int TranslateNumber_1(char *word1, char *ph_out, unsigned int *flags, int wflags); | |||
| int TranslateRoman(char *word, char *ph_out); | |||
| void InitGroups(void); | |||
| void AppendPhonemes(char *string, int size, const char *ph); | |||