diff --git a/dictsource/de_list b/dictsource/de_list index f03f9c0a..3bf38345 100644 --- a/dictsource/de_list +++ b/dictsource/de_list @@ -504,7 +504,6 @@ ausgeschamt aUsg@SA:mt außerdem aUs3d'e:m aventurin avEntu:*'i:n ave A:ve: -avenue av@n'y: balkan $1 balkon $2 @@ -600,6 +599,7 @@ intern Int'E*n januar janu:A:* kamelie $alt +kanoe kan'u: kastanie $alt kid kId komödie $alt diff --git a/dictsource/de_rules b/dictsource/de_rules index f09e5eab..27fcbcc4 100644 --- a/dictsource/de_rules +++ b/dictsource/de_rules @@ -293,7 +293,7 @@ &) e (BB_ E2 e (gt_+ e: &) el (_ @l - &) eln (_S1 n + &) eln (_NS1 n &) elnd (_S2 nt &) e (lt_ @ &) em (_NS2 @m @@ -464,6 +464,7 @@ graph (_ g@-*'A:f green _^_EN guide _^_EN + gue (_ k .group h @@ -767,6 +768,7 @@ _) ober (ste o:b3 _) ob (jek %Op _) obst (reP4 'o:pst + oe (_ o:@ @) o (g_ 'o: t) ogen (_ o:g'e:n @) o (gin_ 'o: @@ -821,6 +823,7 @@ _) q (_ ku: q k qu kv + @) que (_ =k .group r _) r (_ E* @@ -872,11 +875,15 @@ &) schaft (_S6 Saft ä) schen sC@n // but not wäschen + wä) schen S@n fe) schen sC@n ie) schen sC@n h) schen sC@n ö) schen sC@n // but not löschen + lö) schen S@n + rö) schen S@n äu) schen sC@n // but not täuschen + täu) schen S@n schein (lich S'aIn _) schul (@P5 S'u:l @@ -955,7 +962,9 @@ uh (+ u: uell u:'El ue y: - &) ue (_ u:@ // statue + r) ue (_ u:@ + t) ue (_ u:@ + ue (_ 'y: u (C% U u (CC U @@ -1026,6 +1035,7 @@ _) v (ie f _) v (iet v _) v (iz f + v (og f v (oll f v (olk f v (ölC f diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index b33a6eaf..aa403e6c 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -485,11 +485,11 @@ Dictionary ta_dict a a: aI aU e E e: i I i: o o: U u u: V -: ; b c C d d. dZ -f g h j k l l. m -n N n. n^ p r R s -S s. t t. th tS v w -z z. +: ; b C d d. dZ f +g h j k l l. m n +N n. n^ p r R s S +s. t t. th tS v w z +z. Dictionary bn_dict diff --git a/dictsource/en_list b/dictsource/en_list index 4bb75ae0..f6623593 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -219,6 +219,7 @@ _₠ jU@roU ∞ Inf'InI2tI2 ≠ n0t'i:kw@LtU № nju:m@roU +। dVnda2 ß S,A@p'Es ə SwA: @@ -2125,6 +2126,7 @@ tone toUn tonight t@naIt tonne tVn tornado tO@n'eIdoU +tortilla tO@t'i:a2 touche tu:SeI $only toupee tu:peI transcript $1 $onlys @@ -2641,6 +2643,7 @@ Leanne li:'an Lenore lEn'o@ Leroy li:rOI Liam li:@m +Lois loUIs Louis lu:I Louise lu:w'i:z Madeline mad@lI2n @@ -2712,6 +2715,7 @@ Stuart stju:3t ?3 Stuart stu:3t Suzy su:zI Theresa t@ri:z@ +Therese t@ri:z Thomas t0m@s Tina ti:n@ Tracy treIsI diff --git a/dictsource/en_rules b/dictsource/en_rules index ac566f0c..c5a3f8a1 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -5401,17 +5401,8 @@ A_) - (_D _ C_) - (_D _ - + plVs - _) ++ (_ plVspl'Vs - \+\+\+) + // ignore + after the first 3 - - \#\#) # (_ _:: - A_) # haS - C_) # haS - \#) # . d0t - D) . (D+ ,pOInt . (. _: \.) . diff --git a/dictsource/hi_list b/dictsource/hi_list index d13c1b36..d81e028a 100755 --- a/dictsource/hi_list +++ b/dictsource/hi_list @@ -172,6 +172,9 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? फ़ f@ य़ j@ +// Punctuation +। dVn.d.V + // Pronouns मैं $u // main: I मुझे $u diff --git a/dictsource/hu_list b/dictsource/hu_list index 7dc4f3b6..2ae99548 100755 --- a/dictsource/hu_list +++ b/dictsource/hu_list @@ -1,9 +1,6 @@ // Translations for Hungarian words // This file is UTF-8 encoded. -// Conditional rules: -// ?1 speak "i" as Roman number -?1 elso: // Numbers _0 nullA @@ -51,6 +48,8 @@ _0Z3 EzR2Ed _0Z4 ti:zEzR2Ed _0Z5 sa:zEzR2Ed _0Z6 miliomod +_0Z7 ti:zmiliomod +_0Z8 sa:zmiliomod // ordinal numbers @@ -78,6 +77,37 @@ _0M1o EzR2Edik _1M1o EzR2Edik _2M1o ke:tEzR2Edik +_0-a A +_0-i Ei +_0-e E +_0-án a:n +_0-ára a:R2A +_0-ére e:R2E +_0-ra a:R2A +_0-re e:R2E +_0-én e:n +_0-ai Ai +_0-ei Ei +(1-e) elseje $text +(1-én) elsején $text +(1-jén) elsején $text +(1-i) elsejei $text +(1-ei) elsejei $text +(1-ére) elsejére $text +(1-re) elsejére $text +(2-i) másodikai $text +(3-i) harmadikai $text +(6-i) hatodikai $text +(8-i) nyolcadikai $text +(13-i) tizenharmadikai $text +(16-i) tizenhatodikai $text +(18-i) tizennyolcadikai $text +(20-i) huszadikai $text +(23-i) huszonharmadikai $text +(26-i) huszonhatodikai $text +(28-i) huszonnyolcadikai $text +(30-i) harmincadikai $text + // These words mean that a dot after number, immediately preceding, does not mean an ordinal number január $alt február $alt @@ -135,10 +165,12 @@ _tld tildE // characters _#9 tAb +_#13 vAlAmi _#32 so:kYz _cap n'AJ_| // Abbreviations +ÁNTSZ a:Ente:Es $allcaps km kilo:me:tER2 mm milime:tER2 @@ -405,6 +437,8 @@ z ze: _é e: é $atend +V // this means that "v ve:" is only used for lower-case +X cs tSe: dz dze: @@ -440,7 +474,7 @@ ny En^ ° fokjEl Ft foR2int \ bEks2lES $max3 -^ fölfelényíl $text +^ fYlfEle:n^i:l _, vEss2Y: _; pontoSvEss2Y: @@ -452,7 +486,7 @@ __ Ala:hu:za:S $max3 _' ApostR2o:f _– nAJkYtY: _— kviR2tmi:nus -_" ide:zY:jEl $max3 +_" ide:zY:jEl _( b'Alza:R2o:jEl $max3 _) j'obbza:R2o:jEl $max3 _[ n^'ito:sYglEtES $max3 @@ -461,6 +495,10 @@ _{ k'EzdY:kAptSoS $max3 _} v'e:gkAptSoS $max3 _… pontpontpont $max3 _• di:spont +_| fyg:Y:lEgESvonAl +_> nAJob +_< kiSSEb +_¤ pe:nznEmjEl // Main Exceptions List @@ -471,74 +509,11 @@ nato na:to: $textmode MSZP emeszpé SZDSZ eszdéesz - -colon kettőspont (://) kettőspontperper $pause egyezség eggyesség -(1-én) elsején -(1-jén) elsején -(2-án) másodikán -(3-án) harmadikán -(4-én) negyedikén -(5-én) ötödikén -(6-án) hatodikán -(7-én) hetedikén -(8-án) nyolcadikán -(9-én) kilencedikén -(10-én) tizedikén -(11-én) tizeneggyedikén -(12-én) tizenkettedikén -(13-án) tizenharmadikán -(14-én) tizennegyedikén -(15-én) tizenötödikén -(16-án) tizenhatodikán -(17-én) tizenhetedikén -(18-án) tizennyolcadikán -(19-én) tizenkilencedikén -(20-án) huszadikán -(21-én) huszoneggyedikén -(22-én) huszonkettedikén -(23-án) huszonharmadikán -(24-én) huszonnegyedikén -(25-én) huszonötödikén -(26-án) huszonhatodikán -(27-én) huszonhetedikén -(28-án) huszonnyolcadikán -(29-én) huszonkilencedikén -(30-án) harmincadikán -(31-én) harminceggyedikén -(1-e) elseje -(2-a) másodika -(3-a) harmadika -(4-e) negyedike -(5-e) ötödike -(6-a) hatodika -(7-e) hetedike -(8-a) nyolcadika -(9-e) kilencedike -(10-e) tizedike -(11-e) tizeneggyedike -(12-e) tizenkettedike -(13-a) tizenharmadika -(14-e) tizennegyedike -(15-e) tizenötödike -(16-a) tizenhatodika -(17-e) tizenhetedike -(18-a) tizennyolcadika -(19-e) tizenkilencedike -(20-a) huszadika -(21-e) huszoneggyedike -(22-e) huszonkettedike -(23-a) huszonharmadika -(24-e) huszonnegyedike -(25-e) huszonötödike -(26-a) huszonhatodika -(27-e) huszonhetedike -(28-a) huszonnyolcadika -(29-e) huszonkilencedike -(30-a) harmincadika -(31-e) harmincegyedike + + (Szvsz) eszvéesz (edik szeptember) szeptember diff --git a/dictsource/hu_rules b/dictsource/hu_rules index 0375ce72..7448fa85 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -10,496 +10,524 @@ .group a - a A - _) a (_ %A -_) alattvaló _!'AlAtvAlo: + a A + _) a (_ %A + _) alattvaló _!'AlAtvAlo: .group á - á a: - @) ában (_S4 a:bAn - @) ának (_S4 a:nAk - + á a: + @) ában (_S4 a:bAn + @) ának (_S4 a:nAk + @) ától (_S4 a:to:l .group b - b b -bb b: - @) ban (_S3 bAn - @) ben (_S3 bEn + b b + bb b: + @) ban (_S3 bAn + @) ben (_S3 bEn + + biz (A b'iz, // bizalmas etc. + biedermeier bi:dER2ma:jER2 - biz (A b'iz, // bizalmas etc. - biedermeier bi:dER2ma:jER2 .group c - c ts - cc ts: - cs tS - ccs tS: - !) cz ts // in names which start with a capital letter -ar) csz (e ts -harmin) c ts -anar) ch (i C -hierar) ch (i C - me) ch (a C - te) ch (n C - pszi) ch C - pszy) ch C - mün) ch (en C - maso) ch (istA C - monar) ch (i C - _pe) ch C - szé) ch tS - _zi) ch (y tS + c ts + cc ts: + cs tS + ccs tS: + !) cz ts // in names which start with a capital letter + ar) csz (e ts +harmin) c ts + anar) ch (i C +hierar) ch (i C + me) ch (a C + te) ch (n C + pszi) ch C + pszy) ch C + mün) ch (en C + maso) ch (istA C + monar) ch (i C + _pe) ch C + szé) ch tS + _zi) ch (y tS - c (szín tS + c (szín tS - dA) c (sz ts - kilen) c (sz ts - kvar) c (sz ts - mala) c (sá ts - nyol) c (sz ts - har) c (sz ts - lán) c (sz ts -pá) c (só ts - per) c (sz ts - pol) c (so ts - por) c (sé ts - por) c (sz ts - rán) c (sz ts - tán) c (sz ts + dA) c (sz ts + kilen) c (sz ts + kvar) c (sz ts + mala) c (sá ts + nyol) c (sz ts + har) c (sz ts + lán) c (sz ts + pá) c (só ts + per) c (sz ts + pol) c (so ts + por) c (sé ts + por) c (sz ts + rán) c (sz ts + tán) c (sz ts - _szé) che (ny tSe: - _szé) ché (ny tSe: - _sto) ck (holm k + _szé) che (ny tSe: + _szé) ché (ny tSe: + _sto) ck (holm k - _) church tSYR2tS + _) church tSYR2tS .group d - d d -dd d: -dts tS: -dt t: -apró) d (sz d -a) dsz ts: -beszé) d (szin d -cselé) d d -enge) dsz ts: -engedelmeske) dsz ts: -fogó) dz (kod ts -hazu) dsz ts: -ha) d (járat d -hor) d (szék d -mara) dsz ts: -tu) dsz ts: -kére) dz ts -mentegető) dz z -// dd d: - dz dz - A) dz (A d:z - dzs dZ - A) dzs dZ: - C) ds tS - ds (C tS - A) ds (A tS: - dsz ts - dsz (C ts - A) dsz (A ts: - dz dz - C) dzs dZ - A) dzs (A dZ: - C) dj J - A) dj (A J: -dj J: -min) dny n^ + d d + dd d: + dts tS: + dt t: + apró) d (sz d + a) dsz ts: + beszé) d (szin d + cselé) d d + enge) dsz ts: +engedelmeske) dsz ts: + fogó) dz (kod ts +fenyegető) dz z + föl) d (sánc d + hazu) dsz ts: + ha) d (járat d + ha) d (sor d + hor) d (szék d +harapó) dz z + mara) dsz ts: + pa) d (sor d + tu) dsz ts: + kére) dz ts +mentegető) dz z + dz dz + A) dz (A d:z + dzs dZ + A) dzs dZ: + C) ds tS + ds (C tS + A) ds (A tS: + dsz ts + dsz (C ts + A) dsz (A ts: + dz dz + C) dzs dZ + A) dzs (A dZ: + C) dj J + A) dj (A J: + dj J: + min) dny n^ .group e - e E + e E + + D_-_) es (_ %ES + _) egyezség _!'EJ:ESSe:g - D_-_) es (_ %ES -_) egyezség _!'EJ:ESSe:g .group é - é e: - éi (é e::i: - @) ében (_S4 e:bEn - @) ének (_S4 e:nEk + é e: + éi (é e::i: + @) ében (_S4 e:bEn + @) ének (_S4 e:nEk + @) étől (_S4 e:tY:l .group ë - ë Y + ë Y .group f - f f + f f .group g - g g -gg g: - gy J - ggy J: + g g + gg g: + gy J + ggy J: - gys tS - A) gys (A tS: - gysz Js - A) gysz (A Js: - C) gyj J - A) gyj (A J: -ha) gyj J: -e) gy (jelentésű J -_e) gy (es J: - _e) gy (et_ J: + gys tS + A) gys (A tS: + gysz Js + A) gysz (A Js: + C) gyj J + A) gyj (A J: + ha) gyj J: + e) gy (jelentésű J + _e) gy (es J: + _e) gy (et_ J: _e) gy (etlen J: - _e) gy (ik J: - _e) gy (üt J: -e) gyj (elentésű Jj -gyön) gy (sor J -_minde) gy (ik J: + _e) gy (ik J: + _e) gy (üt J: + e) gyj (elentésű Jj + gyön) gy (sor J +_minde) gy (ik J: - na) gysz (a Js + na) gysz (a Js - _) goethe gY:tE - _) goethé gY:te: -me) g (gyú g -me) g (győz g -me) g (gyil g -me) g (gyű g -me) g (gyász g -me) g (gyűr g -le) g (gy g + _) goethe gY:tE + _) goethé gY:te: + me) g (gyú g + me) g (győz g + me) g (gyil g + me) g (gyű g + me) g (gyász g + me) g (gyűr g + le) g (gy g .group h - h h + h h .group i - i i - @) i (_S1 i + i i + @) i (_S1 i -_) itthon ithon + _) itthon ithon .group í - í i: -íts i:tS: -fesz) ítsd i:tSd -bizony) ítsd i:tSd + í i: + íts i:tS: + fesz) ítsd i:tSd +bizony) ítsd i:tSd .group j - j j - @) jában (_S5 ja:bAn - @) jának (_S5 ja:nAk - -_) javíts jAvi:tS: -_) javítsd jAvi:tSd + j j + @) jában (_S5 ja:bAn + @) jának (_S5 ja:nAk + @) jától (_S5 ja:to:l + _) javíts jAvi:tS: + _) javítsd jAvi:tSd .group k - k k - kk k: - kk (C kk -_) köztársaság k'Ysta:R2SASa:g -_) központ k'Yspont + k k + kk k: + kk (C kk + _) köztársaság k'Ysta:R2SASa:g + központ kYspont -_) köz kYz -_) község kYSSe:g -_) készség ke:SSe:g -_) kétség ke:tS:e:g + _) köz kYz + _) község kYSSe:g + készség ke:SSe:g + _) kétség ke:tS:e:g .group l - l l -lj j - ly j - lly jj + l l + lj l^j + cé) l (já jj - A) lj (A l^j -á) ll (j j -beszé) lj jj -bére) lj jj -fáj) l l -fájla) l (j jj -gondo) lj jjj -ke) lj jj -sajná) lj jjj -llj jjj -C) ly (_ li - _kéth) ly li -szamue) lly lli -szamue) ly lli + ly j + lly jj - mi) ll (i l + A) lj (A l^j + á) ll (j j + beszé) lj jj + bére) lj jj + fáj) l l + fájla) l (j jj + gondo) lj jjj + ke) lj jj + sajná) lj jjj + llj jjj + C) ly (_ li + _kéth) ly li +szamue) lly lli +szamue) ly lli + + mi) ll (i l .group m - m m + m m - ko) mm (uni m + ko) mm (uni m .group n - n n - n (g N - n (k N - n (p m - ny n^ - nny n^n^ - nj n^n^ -nyj n^n^ + n n + n (g N + n (k N + n (p m + ny n^ + nny n^n^ + nj n^n^ + nyj n^n^ - _) nem (- n,Em // has $alt2 attribute in hu_list, combine with the next word -me) nny (ország n^ -me) nny (d n^ + _) nem (- n,Em // has $alt2 attribute in hu_list, combine with the next word + me) nny (ország n^ + me) nny (d n^ .group o - o o + o o - _r) oose (velt u:z -_) otthon othon + _r) oose (velt u:z + _) otthon othon .group ó - ó o: + ó o: .group ö - ö Y + ö Y .group ő - ő Y: + ő Y: .group p - p p - pp p: - pp (C pp - p (v p_ + p p + pp p: + pp (C pp + p (v p_ - _) potsdam potsda:m + _) potsdam potsda:m .group q - q kv - qu kv + q kv + qu kv .group r -r R2 - rr RR - rm R2_m - r (cc R + r R2 + rr RR + rm R2_m + r (cc R - _) richa (rd R2iCa: - _) richá (rd R2iCa: + _) richa (rd R2iCa: + _) richá (rd R2iCa: .group s - s S - sz s - ssz ss2 -szts stS: -föld) s (ánc S -s (színű S - hel) s (inki z + s S + sz s + ssz ss2 + szts stS: + sztsze stsE + föld) s (ánc S + s (színű S + hel) s (inki z - ki) s (ebb SS - _má) s (szó S -_munká) s S -_nyílá) s S - _o) slo slo: - _o) sló slo: - tojá) s S + ki) s (ebb SS + _má) s (szó S +_munká) s S +_nyílá) s S + _o) slo slo: + _o) sló slo: + tojá) s S - _) semmelweiss sEmmElvEjs - _) semmelweis sEmmElvEjs + _) semmelweiss sEmmElvEjs + _) semmelweis sEmmElvEjs _) semmelweiß sEmmElvEjs - engel) s s - mu) ss (olini ss2 - _) saar sa:R2 - _wa) sh (ing S + engel) s s + mu) ss (olini ss2 + _) saar sa:R2 + _wa) sh (ing S - sz (öld Sz - va) s (zabl S|| + sz (öld Sz + va) s (zabl S|| - egé) szs (ég S + egé) szs (ég S -liszte) szs (ák SZ -pénze) s S - rend) sz (er s: +liszte) szs (ák SZ + pénze) s S + rend) sz (er s: .group t - _) t (_ te: - -) t (_ t - t t - tc ts: - tt t: - tt (C tt -ttn t:n - ty c + _) t (_ te: + -) t (_ t + t t + tc ts: + tt t: + @) tól (_S3 to:l + @) től (_S3 tY:l + tt (C tt + ttn t:n + ttr t:R2 + ty c // s) ty c: // // z) ty c: // keztyű - ttj tc: - tty c: -apá) ts (ág tS: -becsüle) t t -csalódo) tts (ág tS: -cson) t t -cson) tj c -ezüs) t t -éle) t t + ttj tc: + tty c: + apá) ts (ág tS: +becsüle) t t +becsüle) tt t: + cson) t t + cson) tt t: + cson) tj c + ezüs) t t + ezüs) tt t: + éle) t t + éle) tt t: + felej) ts tS + gyapo) t t + gyapo) tt t: + gráni) t t + gráni) tt t: + já) tsz (ani ts: + tsz ts: + szorí) ts (a tS: + ürí) ts (e tS: + mula) ts tS: + nemze) ts tS: + nemze) t (szo t + néme) ts (ég tS: + min) t t + tse tSE + tso tSo + ttsá tS:a: + tsa tSA + tsá tSa: + tsd tSd + tsé tSe: + t (cs t + ttsé tS:e: + tsu tSu + tsö tSY + j) ts tS + C) tj c + A) tj (A c: + C) tyj c + A) tyj (A c: -felej) ts tS + _ka) ty (n ti -gyapo) t t +vörösmar) ty ti + á) t (sza t + á) t (jár t + á) t (szö t + á) t (sző t + á) t (szú t + á) t (szű t + á) t (jut t + á) t (juss t + á) t (jö t + állí) ts tS: +állapo) t (sor t + bará) ts tS: + dön) ts (ön tS +folyama) t (jel t + hi) t (sze t +kattin) ts tS + kiál) ts tS + köve) ts (ég tS: + t (jel t //need this general rule when any not added word contains the tjel part + kür) t t + kür) tj c + kür) t (jel t + küldö) ttj c: + neve) ts (ég tS: + on) ts (u tS + o) tt t: + szen) t (szék t + szé) t t + szé) tt t: + szöve) ts (ég tS: + söté) ts (ég tS: + sajá) ts (ág tS: -gráni) t t +pillan) ts tS -já) tsz (ani ts: -tsz ts: -szorí) ts (a tS: -ürí) ts (e tS: -mula) ts tS: -nemze) ts tS: -néme) ts (ég tS: -min) t t -tse tSE -tso tSo -tsa tSA -tsá tSa: -tsd tSd -tsé tSe: -t (cs t -ttsé tS:e: -tsu tSu -j) ts tS -C) tj c - A) tj (A c: - C) tyj c - A) tyj (A c: + tar) ts tS + á) t (sor t + á) t (sé t + (á) t (sze t + á) t (suh t + á) t (sur t + ne) t (c t + ne) t (se t + ne) t (szo t - _ka) ty (n ti - -vörösmar) ty ti -á) t (sza t -á) t (jár t -á) t (sző t -á) t (szú t -á) t (szű t -á) t (jut t -á) t (jö t -bizo) tts (ág tS: -állí) ts tS: -állapo) t (sor t -bará) ts tS: -dön) ts (ön tS -elhivato) tts (ág tS: -folyama) t (jel t -kiál) ts tS -köve) ts (ég tS: -kür) t t -kür) tj c -küldö) ttj c: -korlátozo) tts tS: -neve) ts (ég tS: -on) ts (u tS -o) tt t: -szen)t (szék t -szé) t t -szöve) ts (ég tS: -söté) ts (ég tS: -sajá) ts (ág tS: - -pillan) ts tS -romlo) tts tS: -tar) ts tS -á) t (sor t -á) t (sé t -ne) t (c t -ne) t (se t -ne) t (szo t - -lehe) ts (ég tS: -tehe) ts (ég tS: -lá) tsz ts: -fize) ts (ég tS: -segí) ts tS: -á) ts (ó tS: -ismere) ts (ég tS: -lé) t (szám t -ké) t (száz t -ö) t (száz t -ha) t (száz t -hé) t (száz t -vé) ts (ég tS: + lehe) ts (ég tS: + tehe) ts (ég tS: + lá) tsz ts: + lá) t (sze t + fize) ts (ég tS: + segí) ts tS: + á) ts (ó tS: +ismere) ts (ég tS: + lé) t (szám t + ké) t (száz t + ö) t (száz t + ha) t (száz t + hé) t (száz t + vé) ts (ég tS: .group u - u u + u u .group ú - ú u: + ú u: .group ü - ü y + ü y + ütt yt: .group ű - ű y: + ű y: .group v - v v + v v + _) v (_ ve: _) versailles vER2sa:j .group w - w v + w v .group x - x ks + _) x (_ iks + x ks .group y - _) y j - y i - K) y (K i + _) y j + y i + K) y (K i .group z - z z -zs Z - zzs Z: -a) z (t s -a) z (tán s -befeje) z (te s -bi) z (tons s -bi) z (tos s -bron) z (sz z -csontvá) z z -e) z (t s -ho) z (ta s -ho) z (tá s -helye) z (ked s -inté) z (ked s -költö) z (köd s + z z + zs Z + zzs Z: + a) z (t s + a) z (tán s +befeje) z (te s + bi) z (tons s + bi) z (tos s + bron) z (sz z +csontvá) z z + e) z (t s + ho) z (ta s + ho) z (tá s + helye) z (ked s + inté) z (ked s + költö) z (köd s -lefeje) z (te s -lefeje) z (ték s -pén) z (tár s -ré) z (sz z -tartó) z s -gá) z (sz z - gé) z (sz z +lefeje) z (te s +lefeje) z (ték s + pén) z (tár s + ré) z (sz z + tartó) z s + gá) z (sz z + gé) z (sz z - ké) z (sz zz - há) z (so z - há) z (sz z - lá) z (sz z - má) zc (sz z - mé) zc (sz z - nehé) z (sé S -iga) zs (ág SS -ga) zs (ág SS -pén) z z - szá) z (sz z - tí) z (sz z - tű) z (sz z - ví) z (sz z + ké) z (sz zz + há) z (so z + há) z (sz z + lá) z (sz z + má) zc (sz z + mé) zc (sz z + nehé) z (sé S + iga) zs (ág SS + ga) zs (ág SS + pén) z z + szá) z (sz z + tí) z (sz z + tű) z (sz z + ví) z (sz z tor) z (szülött z - tor) z (ság z - _vité) z z - _ví) z (s z + tor) z (ság z + _vité) z z + _ví) z (s z ga) zs (ág zS _gá) zsz (ámla zs: @@ -514,12 +542,12 @@ _szára) zs (ág SS .group -_) :-) v'iJoR2 + _) :-) v'iJoR2 - $ dolla:R2 - ä E - æ E - ß s - ç tS - ñ n^ - ø Y + $ dolla:R2 + ä E + æ E + ß s + ç tS + ñ n^ + ø Y diff --git a/dictsource/ta_list b/dictsource/ta_list index 1ba926aa..36cfdc38 100644 --- a/dictsource/ta_list +++ b/dictsource/ta_list @@ -65,19 +65,35 @@ z zEd // symbols _?? kuRij,i:d.U_ _cap kapit.Vl // English -_. pul.l.i -_, kVma: -_; ka:RbUl.l.,i -_: araIpp,Ul.l.V -_? ke:l.vikk,URi -_! a:ctS:Vr,ijVkk,URi -% விழுக்காடு $text -= samVm +_. mut.RU||pul.l.i // முற்று புள்ளி +_, ka:l||pul.l.i // கால் புள்ளி +_; a:raIb||pul.l.i // ஆரைப் புள்ளி +_: mukka:l||pul.l.i // முக்கால் புள்ளி +_( id.V||piRaI // இட பிறை +_) vVlV||piRaI // வல பிறை +_[ id.V||sadUrVm // இட சதுரம் +_] vVlV||sadUrVm // வல சதுரம் +_{ id.V||gVn.Vm // இட கணம் +_} vVlV||gVn.Vm // வல கணம் +_" me:Rgo:l. // மேற்கோள் +_' ot.RaI||m'e:Rgo:l. // ொற்றை மேற்கோள் +__ ad.ig||ko:d.U // அடிக் கோடு +_- in.aIppUg // இணைப்புக் + +\ p'in||s,a:jvU // பின் சாய்வு +! vijVppU // வியப்பு +_? ke:l.vi // கேள்வி +# en.||kuRi $max3 // எண் குறி += samVnba:d.U $max3 // சமன்பாடு ++ ku:t.t.Vl $max3 // கூட்டல் +* perUkkVl $max3 // பெருக்கல் +/ sa:jvU // சாய்வு +÷ vVgUttVl // வகுத்தல் +% viz.Ukka:d.U $max3 // விழுக்காடு U+bf9 ru:ba:j // abbreviations ரூ ru:ba:j $dot $only -Rs ru:pi:z $dot $only // numbers _0 suz.ijVm // சுழியம் @@ -162,10 +178,10 @@ _dpt _pul.l.i // exceptions பாபு $alt // initial ப as [b] -பாலு $alt பவானி $alt பகவதி $alt பானம் $alt +பாணம் $alt பாறம் $alt பாரதி $alt பாரதம் $alt @@ -174,6 +190,33 @@ _dpt _pul.l.i பாகம் $alt பண்தம் $alt பவனி $alt +பயில்வான் $alt +பாபா $alt +போண்டா $alt +பஜ்ஜி $alt +பாதாம் $alt +பலூன் $alt +பிராமணன் $alt +பிரம்மன் $alt +பம்பாய் $alt +போகம் $alt +போதனை $alt +பூகோலம் $alt +பூலோகம் $alt +பூமி $alt +பூகம்பம் $alt +பூதம் $alt +புதன் $alt +பலி $alt +பலம் $alt +பலவான் $alt +பகவான் $alt +பாகவதம் $alt +பகவத் $alt +பங்கம் $alt +பீடி $alt +பீதி $alt + தானம் $alt // initial த as [d] தேகம் $alt @@ -202,6 +245,7 @@ _dpt _pul.l.i திக் $alt தடக் $alt தீக்ஷை $alt +தடியன் $alt @@ -221,8 +265,13 @@ _dpt _pul.l.i குகை $alt கிரி $alt கோமதி $alt - - +கயா $alt +காயத்ரி $alt +கங்கை $alt +கங்கா $alt +குரு $alt +குகன் $alt பப pVpV +டாக்டர் d.a:ktVr diff --git a/dictsource/ta_rules b/dictsource/ta_rules index 1c8d744d..9df78129 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -90,6 +90,11 @@ ட்) ச (B tS ஞ்) ச dZV ஞ்) ச (B dZ + _) ச (ட் tS + _) ச (Bட் tS + _) ச (ன் tS + _) ச (Bன் tS + ஜ dZV @@ -102,8 +107,8 @@ ட d.V ட (B d. - _) ட t.V - _) ட (B t. +// _) ட t.V +// _) ட (B t. ட்ட t.t.V ட்ட (B t.t. @@ -129,6 +134,7 @@ _) த (ெய்வ d _) த (ுஷ் d _) த (க்ஷிணா dV + _) த (ண்ட dV ந nV ந (B n // dental n @@ -153,6 +159,14 @@ ஃ) ப fV ஃ) ப (B f + _) ப (ால b + _) ப (ாலு b + _) ப (ானு b + _) ப (ீம b + _) ப (காசுர bV + _) ப (ோஜ b + _) ப (தில bV + ம mV ம (B m @@ -246,3 +260,9 @@ ் // virama $ dolV D) . (D+ _pul.l.i + + !) rs (_.D ru:pi:z // Rs. + + __) - (_D kVz.ittVl // minus கழித்தல் + A_) - (_D _ + C_) - (_D _ diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index dbebab12..4677d2e6 100755 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -59,6 +59,7 @@ const char *path_data; extern void TestTest(int control); extern void CompareLexicon(int); extern void ConvertToUtf8(); +extern void FormatDictionary(const char *dictname); extern void init_z(); extern void CompileInit(void); @@ -73,6 +74,10 @@ extern void MakeWordFreqList(); extern const char *dict_name; +extern wxMenu *speak_menu; +extern wxMenu *data_menu; + + MyFrame *myframe = NULL; SpectDisplay *currentcanvas = NULL; @@ -158,21 +163,21 @@ extern void VoiceReset(int control); // Create the main frame window - myframe = new MyFrame(NULL, -1, AppName, wxPoint(0, 0), wxSize(1024, 768), + myframe = new MyFrame(NULL, -1, AppName, wxPoint(0, 0), wxSize(1024, 768), wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE | wxHSCROLL | wxVSCROLL); - // Make a menubar - myframe->SetMenuBar(MakeMenu(0)); + // Make a menubar + myframe->SetMenuBar(MakeMenu(0)); + myframe->CreateStatusBar(); + myframe->SetVoiceTitle(voice_name2); - myframe->CreateStatusBar(); + myframe->Maximize(); + myframe->Show(TRUE); - myframe->Maximize(); - myframe->Show(TRUE); - - SetTopWindow(myframe); + SetTopWindow(myframe); wxInitAllImageHandlers(); // wxImage::AddHandler(wxPNGHandler); return TRUE; @@ -194,6 +199,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) EVT_MENU(MENU_COMPILE_PH, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_DICT, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_DICT_DEBUG, MyFrame::OnTools) + EVT_MENU(MENU_FORMAT_DICTIONARY, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_MBROLA, MyFrame::OnTools) EVT_MENU(MENU_CLOSE_ALL, MyFrame::OnQuit) EVT_MENU(MENU_QUIT, MyFrame::OnQuit) @@ -284,10 +290,6 @@ wxSashLayoutWindow *win; wxLogError(_T("Failed to load voice data")); strcpy(dictionary_name,"en"); } - else - { - SetVoiceTitle(voice_name2); - } WavegenSetVoice(voice); for(param=0; paramSetLabel(MENU_COMPILE_DICT, wxString(buf,wxConvLocal)); + sprintf(buf,"&Format '%s_rules' file",dictionary_name); + data_menu->SetLabel(MENU_FORMAT_DICTIONARY, wxString(buf,wxConvLocal)); + } } @@ -605,6 +615,10 @@ void MyFrame::OnTools(wxCommandEvent& event) fclose(log); break; + case MENU_FORMAT_DICTIONARY: + FormatDictionary(dictionary_name); + break; + case MENU_VOWELCHART1: MakeVowelLists(); break; @@ -623,8 +637,6 @@ void MyFrame::OnTools(wxCommandEvent& event) } } -extern wxMenu *speak_menu; - void MyFrame::OnSpeak(wxCommandEvent& event) {//========================================= switch(event.GetId()) diff --git a/src/extras.cpp b/src/extras.cpp index 451999f1..d0214346 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -1312,6 +1312,263 @@ void ConvertToUtf8() //****************************************************************************************************** +void FormatDictionary(const char *dictname) +{//======================================== +// Format the *_rules file for the current voice + + FILE *f_in; + FILE *f_out; + char *p; + char *p_start; + unsigned short *pw; + unsigned short *pw_match; + unsigned short *pw_post; + unsigned short *pw_phonemes; + int c; + int ix; + int n_pre; + int n_match; + int n_post; + int n_phonemes; + int n_spaces; + int n_out; + int formatting; + int comment; + char buf[200]; + unsigned short bufw[200]; + char conditional[80]; + char fname_in[200]; + char fname_out[200]; + + const int tab1 = 8; + const int tab2 = 18; + const int tab3 = 28; + + sprintf(fname_in,"%s/%s_rules",path_dsource,dictname); + sprintf(fname_out,"%s_formatted",fname_in); + + if((f_in = fopen(fname_in,"r")) == NULL) + { + wxLogError(_T("Can't open rules file: ") + wxString(fname_in,wxConvLocal)); + return; + } + if((f_out = fopen(fname_out,"w")) == NULL) + { + wxLogError(_T("Can't write to file: ") + wxString(fname_out,wxConvLocal)); + fclose(f_in); + return; + } + + formatting = 0; + n_match = 0; + while(fgets(buf, sizeof(buf)-1, f_in) != NULL) + { + buf[sizeof(buf)-1] = 0; // ensure zero byte terminator + + ix = strlen(buf) - 1; + while((buf[ix]=='\n') || (buf[ix]==' ') || (buf[ix]=='\t')) ix--; + buf[ix+1] = 0; // strip tailing spaces + + p_start = buf; + while((*p_start==' ') || (*p_start == '\t')) p_start++; // skip leading spaces + + comment = 0; + if((p_start[0]=='/') && (p_start[1]=='/')) + comment = 1; + + ix = 0; + if(*p_start == '?') + { + // conditional rule + while(!isspace(*p_start) && (*p_start != 0)) + { + conditional[ix++] = *p_start++; + } + while((*p_start == ' ') || (*p_start == '\t')) p_start++; + } + conditional[ix] = 0; + + if(buf[0] == '.') + { + formatting = 0; + } + if(memcmp(p_start, ".group", 6) == 0) + { + formatting = 2; + if(n_match > 0) + { + // previous line was not blank, so add a blank line + fprintf(f_out,"\n"); + } + } + + n_match = 0; + + if((formatting == 1) && (comment==0)) + { + // convert from UTF-8 to UTF-16 + p = p_start; + pw = bufw; + do { + p += utf8_in(&c, p); + *pw++ = c; + } while (c != 0); + + pw = bufw; + + while((*pw != ')') && (*pw != 0) && !iswspace(*pw)) pw++; + + n_pre = 0; + n_post = 0; + n_phonemes = 0; + n_spaces = 0; + + if(*pw != 0) + n_spaces = tab1; + + if(*pw == ')') + { + // there is a pre-condition + n_pre = pw - bufw + 1; + n_spaces = tab1 - n_pre - 1; + pw++; + while((*pw==' ') || (*pw=='\t')) pw++; + } + else + { + pw = bufw; + } + + pw_match = pw; + while(((c = *pw)!= ' ') && (c != '\t') && (c != '(') && (c != 0)) + { + pw++; + } + n_match = pw - pw_match; + + while(((c = *pw)==' ') || (c == '\t')) pw++; + + if(*pw == '(') + { + pw_post = pw; + while(((c = *pw)!=' ') && (c != '\t') && (c != 0)) pw++; + n_post = pw - pw_post; + while(((c = *pw)==' ') || (c == '\t')) pw++; + } + + if((*pw != 0) && ((*pw != '/') || (pw[1] != '/'))) + { + pw_phonemes = pw; + while(((c = *pw)!=' ') && (c != '\t') && (c != 0)) pw++; + n_phonemes = pw - pw_phonemes; + while(((c = *pw)==' ') || (c == '\t')) pw++; + } + + // write formatted line + p = buf; + + if(conditional[0] != 0) + { + ix = 0; + while(conditional[ix] != 0) + { + *p++ = conditional[ix++]; + n_spaces--; + } + *p++ = ' '; + n_spaces--; + } + + while(n_spaces-- > 0) + { + *p++ = ' '; + } + if(n_pre > 0) + { + ix = 0; + for(ix=0; ix 0) + { + ix = 0; + for(ix=0; ix 0) + { + for(ix=0; ix= tab1) + n_out += (n_pre - tab1 + 1); + + if(n_phonemes > 0) + { + n_spaces = tab2 - n_out; + + while(n_spaces-- > 0) + { + *p++ = ' '; + n_out++; + } + + // write the phoneme codes + for(ix=0; ix 0) + { + *p++ = ' '; + } + } + + // write the remainer of the line + while(*pw != 0) + { + p+= utf8_out(*pw++, p); + } + *p = 0; + } + + if(formatting > 1) + formatting--; + + fprintf(f_out, "%s\n", buf); + } + + fclose(f_in); + fclose(f_out); + wxLogStatus(_("Written to file: ") + wxString(fname_out,wxConvLocal)); +} // end of FormatDictionary + + +//****************************************************************************************************** //#define calcspeedtab diff --git a/src/main.h b/src/main.h index e70f7608..d99a36f7 100755 --- a/src/main.h +++ b/src/main.h @@ -51,6 +51,7 @@ class MyFrame: public wxMDIParentFrame void OnNewWindow(wxCommandEvent& event); void OnProsody(wxCommandEvent& event); + void SetVoiceTitle(char *voice_name); protected: @@ -58,7 +59,6 @@ protected: wxSashLayoutWindow* m_leftWindow1; wxSashLayoutWindow* m_leftWindow2; wxSashLayoutWindow* m_bottomWindow; - void SetVoiceTitle(char *voice_name); wxTimer m_timer; DECLARE_EVENT_TABLE() @@ -135,6 +135,7 @@ enum { MENU_COMPILE_PH, MENU_COMPILE_DICT, MENU_COMPILE_DICT_DEBUG, + MENU_FORMAT_DICTIONARY, MENU_COMPILE_MBROLA, MENU_SPEAK_TRANSLATE, diff --git a/src/menus.cpp b/src/menus.cpp index a5da5f1d..d0dc1922 100755 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -24,6 +24,7 @@ wxMenu *speak_menu; +wxMenu *data_menu = NULL; wxMenuBar *MakeMenu(int type) {//========================== @@ -32,7 +33,6 @@ wxMenuBar *MakeMenu(int type) wxMenu *help_menu; wxMenu *option_menu = NULL; wxMenu *paths_menu; - wxMenu *data_menu = NULL; wxMenu *tools_menu; wxMenu *voice_menu; wxMenu *vowelchart_menu; @@ -86,8 +86,10 @@ wxMenuBar *MakeMenu(int type) data_menu = new wxMenu; data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data")); data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); - data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (&debug)")); + data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list...")); + data_menu->AppendSeparator(); + data_menu->Append(MENU_FORMAT_DICTIONARY, _("&Format *_rules file")); // OPTIONS MENU paths_menu = new wxMenu; diff --git a/src/numbers.cpp b/src/numbers.cpp index ea25c166..64c4d580 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -751,8 +751,40 @@ void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars) static char ph_ordinal2[12]; -int TranslateRoman(Translator *tr, char *word, char *ph_out) -{//===================================================== + +static int CheckDotOrdinal(Translator *tr, char *word, WORD_TAB *wtab, int lowercase) +{//================================================================================== +// nextupper: Next word must start with lower-case + + int ordinal = 0; + int c2; + + if((tr->langopts.numbers & NUM_ORDINAL_DOT) && (word[0] == '.')) + { + if((lowercase==0) || !(wtab[1].flags & FLAG_FIRST_UPPER)) + { + utf8_in(&c2, &word[2]); + if(IsAlpha(c2)) + { + // ordinal number is indicated by dot after the number + // but not if the next word starts with an upper-case letter + ordinal = 2; + word[0] = ' '; + if(tr->translator_name == L('h','u')) + { + // lang=hu don't treat dot as ordinal indicator if the next word is a month name ($alt) + if(TranslateWord(tr, &word[2], 0, NULL) & FLAG_ALT_TRANS) + ordinal = 0; + } + } + } + } + return(ordinal); +} // end of CheckDotOrdinal + + +int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) +{//========================================================================= int c; char *p; const char *p2; @@ -761,7 +793,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out) int value; int subtract; int repeat = 0; - WORD_TAB wtab[2]; + int n_digits = 0; unsigned int flags; char ph_roman[30]; char number_chars[N_WORD_BYTES]; @@ -772,7 +804,9 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out) acc = 0; prev = 0; subtract = 0x7fff; - memset(wtab, 0, sizeof(wtab)); + + if((tr->langopts.numbers & NUM_ROMAN_CAPITALS) && !(wtab[0].flags & FLAG_ALL_UPPER)) + return(0); while((c = *word++) != ' ') { @@ -807,9 +841,10 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out) else acc += prev; prev = value; + n_digits++; } acc += prev; - if(acc < 2) + if(acc < tr->langopts.min_roman) return(0); if(acc > tr->langopts.max_roman) @@ -826,12 +861,22 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out) sprintf(number_chars," %d ",acc); - if(tr->langopts.numbers & NUM_ROMAN_ORDINAL) + if(CheckDotOrdinal(tr, word, wtab, 0)) wtab[0].flags |= FLAG_ORDINAL; + + if(tr->langopts.numbers & NUM_ROMAN_ORDINAL) + { + if((n_digits <= 1) && !(wtab[0].flags & FLAG_ORDINAL)) + return(0); + wtab[0].flags |= FLAG_ORDINAL; + } + + TranslateNumber(tr, &number_chars[1], p, &flags, wtab); if(tr->langopts.numbers & NUM_ROMAN_AFTER) strcat(ph_out,ph_roman); + return(1); } // end of TranslateRoman @@ -1313,8 +1358,6 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned char ph_buf[200]; char ph_buf2[50]; char suffix[20]; - char *wordptr; - unsigned int dictflags; static const char str_pause[2] = {phonPAUSE_NOLINK,0}; @@ -1325,22 +1368,10 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned value = this_value = atoi(word); ph_ordinal2[0] = 0; - if((tr->langopts.numbers & NUM_ORDINAL_DOT) && (word[ix] == '.') && IsAlpha(word[ix+2]) && !(wtab[1].flags & FLAG_FIRST_UPPER)) - { - // ordinal number is indicated by dot after the number - // but not if the next word starts with an upper-case letter - ordinal = 2; - word[ix] = ' '; - if(tr->translator_name == L('h','u')) - { - // lang=hu don't treat dot as ordinal indicator if the next word is a month name ($alt) - wordptr = &word[ix+2]; - dictflags = TranslateWord(tr, &word[ix+2], 0, NULL); - if(dictflags & FLAG_ALT_TRANS) - ordinal = 0; - } - } - else + + ordinal = CheckDotOrdinal(tr, &word[ix], wtab, 1); + + if(ordinal == 0) { // look for an ordinal number suffix after the number ix++; diff --git a/src/readclause.cpp b/src/readclause.cpp index 7d30883d..1423ae0f 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -357,6 +357,15 @@ int towlower2(unsigned int c) return(towlower(c)); } + +static int IsRomanU(unsigned int c) +{//================================ + if((c=='I') || (c=='V') || (c=='X') || (c=='L')) + return(1); + return(0); +} + + static void GetC_unget(int c) {//========================== // This is only called with UTF8 input, not wchar input @@ -2388,10 +2397,11 @@ if(option_ssml) parag=1; if((nl_count==0) && (c1 == '.')) { - if(iswdigit(cprev) && (tr->langopts.numbers & NUM_ORDINAL_DOT)) + if((tr->langopts.numbers & NUM_ORDINAL_DOT) && + (iswdigit(cprev) || (IsRomanU(cprev) && (IsRomanU(cprev2) || iswspace(cprev2))))) // lang=hu { // dot after a number indicates an ordinal number - if(islower(c_next) || (c_next == '<')) + if(!iswdigit(cprev) || iswlower(c_next) || (c_next == '<')) is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag) } else diff --git a/src/synthdata.cpp b/src/synthdata.cpp index ef6fb1f2..584d5eb5 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.41.15 12.Oct.09"; +const char *version_string = "1.41.17 15.Oct.09"; const int version_phdata = 0x014100; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 5f7c5c71..d2907b23 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -164,6 +164,7 @@ static Translator* NewTranslator(void) tr->langopts.long_stop = 100; tr->langopts.max_roman = 49; + tr->langopts.min_roman = 2; tr->langopts.thousands_sep = ','; tr->langopts.decimal_sep = '.'; tr->langopts.break_numbers = BREAK_THOUSANDS; // 1000, 1000,000 1,000,000 etc @@ -588,7 +589,8 @@ Translator *SelectTranslator(const char *name) tr->langopts.param[LOPT_IT_DOUBLING] = 1; tr->langopts.param[LOPT_COMBINE_WORDS] = 99; // combine some prepositions with the following word - tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_5 | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ORDINAL_DOT | NUM_OMIT_1_HUNDRED; + tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_5 | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ROMAN_CAPITALS | NUM_ORDINAL_DOT | NUM_OMIT_1_HUNDRED; + tr->langopts.min_roman = 1; SetLetterVowel(tr,'y'); tr->langopts.spelling_stress = 1; SetLengthMods(tr,3); // all equal diff --git a/src/translate.cpp b/src/translate.cpp index efbe581f..c982c4bf 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -740,7 +740,7 @@ if((wmark > 0) && (wmark < 8)) if((tr->langopts.numbers & NUM_ROMAN) || ((tr->langopts.numbers & NUM_ROMAN_UC) && (wflags & FLAG_ALL_UPPER))) { - if((found = TranslateRoman(tr, word1, phonemes)) != 0) + if((found = TranslateRoman(tr, word1, phonemes, wtab)) != 0) dictionary_flags[0] |= FLAG_ABBREV; // prevent emphasis if capitals } } diff --git a/src/translate.h b/src/translate.h index 51f0c4bb..bb1ccacf 100755 --- a/src/translate.h +++ b/src/translate.h @@ -352,6 +352,7 @@ typedef struct { #define NUM_ROMAN_AFTER 0x200000 #define NUM_VIGESIMAL 0x400000 #define NUM_ROMAN_ORDINAL 0x800000 +#define NUM_ROMAN_CAPITALS 0x1000000 // bits0-1=which numbers routine to use. // bit2= thousands separator must be space @@ -374,6 +375,7 @@ typedef struct { // bit21= say "roman" after the number, not before // bit22= vigesimal number, if tens are not found // bit23=Roman numbers are ordinal numbers + // bit24=Roman numbers must be capital letters int numbers; // bits 1-4 use variant form of numbers before thousands,millions,etc. @@ -386,6 +388,7 @@ typedef struct { #define BREAK_THOUSANDS 0x49249248 int break_numbers; // which digits to break the number into thousands, millions, etc (Hindi has 100,000 not 1,000,000) int max_roman; + int min_roman; int thousands_sep; int decimal_sep; @@ -570,7 +573,7 @@ void DeleteTranslator(Translator *tr); int Lookup(Translator *tr, const char *word, char *ph_out); int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab); -int TranslateRoman(Translator *tr, char *word, char *ph_out); +int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab); void ChangeWordStress(Translator *tr, char *word, int new_stress); void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars);