espeakedit: add "format *_rules file" feature. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@228 d46cf337-b52f-0410-862d-fd96e6ae7743master
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -5401,17 +5401,8 @@ | |||
| A_) - (_D _ | |||
| C_) - (_D _ | |||
| + plVs | |||
| _) ++ (_ plVspl'Vs | |||
| \+\+\+) + // ignore + after the first 3 | |||
| \#\#) # (_ _:: | |||
| A_) # haS | |||
| C_) # haS | |||
| \#) # | |||
| . d0t | |||
| D) . (D+ ,pOInt | |||
| . (. _: | |||
| \.) . | |||
| @@ -172,6 +172,9 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? | |||
| फ़ f@ | |||
| य़ j@ | |||
| // Punctuation | |||
| । dVn.d.V | |||
| // Pronouns | |||
| मैं $u // main: I | |||
| मुझे $u | |||
| @@ -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 | |||
| @@ -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 (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 | |||
| _szé) che (ny tSe: | |||
| _szé) ché (ny tSe: | |||
| _sto) ck (holm k | |||
| _) church tSYR2tS | |||
| 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 | |||
| 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 | |||
| _) 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: | |||
| 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: | |||
| 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: | |||
| _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: | |||
| 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 | |||
| _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 | |||
| _) 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 | |||
| 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 | |||
| l l | |||
| lj l^j | |||
| cé) l (já jj | |||
| ly j | |||
| lly 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 | |||
| 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 | |||
| 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 | |||
| 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 | |||
| _) 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 | |||
| felej) ts tS | |||
| gyapo) t t | |||
| gráni) t t | |||
| 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: | |||
| _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: | |||
| 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: | |||
| _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 (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: | |||
| pillan) ts tS | |||
| 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 | |||
| 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 | |||
| 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 | |||
| 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 | |||
| 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 | |||
| $ dolla:R2 | |||
| ä E | |||
| æ E | |||
| ß s | |||
| ç tS | |||
| ñ n^ | |||
| ø Y | |||
| _) :-) v'iJoR2 | |||
| $ dolla:R2 | |||
| ä E | |||
| æ E | |||
| ß s | |||
| ç tS | |||
| ñ n^ | |||
| ø Y | |||
| @@ -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 | |||
| @@ -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 _ | |||
| @@ -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)); | |||
| myframe->CreateStatusBar(); | |||
| // Make a menubar | |||
| myframe->SetMenuBar(MakeMenu(0)); | |||
| myframe->CreateStatusBar(); | |||
| myframe->SetVoiceTitle(voice_name2); | |||
| 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; param<N_SPEECH_PARAM; param++) | |||
| @@ -312,7 +314,15 @@ wxSashLayoutWindow *win; | |||
| void MyFrame::SetVoiceTitle(char *voice_name) | |||
| {//========================================== | |||
| char buf[100]; | |||
| SetTitle(AppName + _T(" - ") + wxString(voice_name,wxConvLocal) + _T(" voice")); | |||
| if(data_menu != NULL) | |||
| { | |||
| sprintf(buf,"Compile &dictionary '%s'",dictionary_name); | |||
| data_menu->SetLabel(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()) | |||
| @@ -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<n_pre; ix++) | |||
| { | |||
| p += utf8_out(bufw[ix], p); | |||
| } | |||
| *p++ = ' '; | |||
| } | |||
| // write the match condition | |||
| if(n_match > 0) | |||
| { | |||
| ix = 0; | |||
| for(ix=0; ix<n_match; ix++) | |||
| { | |||
| p += utf8_out(pw_match[ix], p); | |||
| } | |||
| *p++ = ' '; | |||
| } | |||
| // write the post condition | |||
| if(n_post > 0) | |||
| { | |||
| for(ix=0; ix<n_post; ix++) | |||
| { | |||
| p += utf8_out(pw_post[ix], p); | |||
| } | |||
| *p++ = ' '; | |||
| n_post++; | |||
| } | |||
| n_out = tab1 + n_match + n_post; | |||
| if(n_pre >= 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<n_phonemes; ix++) | |||
| { | |||
| p += utf8_out(pw_phonemes[ix], p); | |||
| } | |||
| } | |||
| if(*pw != 0) | |||
| { | |||
| *p++ = ' '; | |||
| n_phonemes++; | |||
| n_spaces = tab3 - (n_out + n_phonemes); | |||
| while(n_spaces-- > 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 | |||
| @@ -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, | |||
| @@ -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; | |||
| @@ -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(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++; | |||
| @@ -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 | |||
| @@ -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; | |||
| @@ -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 | |||
| @@ -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 | |||
| } | |||
| } | |||
| @@ -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); | |||