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); |