Browse Source

[1.41.17]

espeakedit: add "format *_rules file" feature.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@228 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 15 years ago
parent
commit
7fc0ab97e1

+ 1
- 1
dictsource/de_list View File

@@ -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

+ 12
- 2
dictsource/de_rules View File

@@ -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

+ 5
- 5
dictsource/dict_phonemes View File

@@ -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

+ 4
- 0
dictsource/en_list View File

@@ -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

+ 0
- 9
dictsource/en_rules View File

@@ -5401,17 +5401,8 @@
A_) - (_D _
C_) - (_D _

+ plVs
_) ++ (_ plVspl'Vs
\+\+\+) + // ignore + after the first 3

\#\#) # (_ _::
A_) # haS
C_) # haS
\#) #

. d0t
D) . (D+ ,pOInt
. (. _:
\.) .


+ 3
- 0
dictsource/hi_list View File

@@ -172,6 +172,9 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?
फ़ f@
य़ j@

// Punctuation
। dVn.d.V

// Pronouns
मैं $u // main: I
मुझे $u

+ 45
- 70
dictsource/hu_list View File

@@ -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


+ 426
- 398
dictsource/hu_rules View File

@@ -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

+ 61
- 12
dictsource/ta_list View File

@@ -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

+ 22
- 2
dictsource/ta_rules View File

@@ -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 _

+ 26
- 14
src/espeakedit.cpp View File

@@ -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())

+ 257
- 0
src/extras.cpp View File

@@ -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

+ 2
- 1
src/main.h View File

@@ -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,

+ 4
- 2
src/menus.cpp View File

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

+ 54
- 23
src/numbers.cpp View File

@@ -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++;

+ 12
- 2
src/readclause.cpp View File

@@ -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

+ 1
- 1
src/synthdata.cpp View File

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

+ 3
- 1
src/tr_languages.cpp View File

@@ -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

+ 1
- 1
src/translate.cpp View File

@@ -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
}
}

+ 4
- 1
src/translate.h View File

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

Loading…
Cancel
Save