Phoneme definitions. Add "equivalents" table to translate phonemes from a foreign language (eg. English) into the equivalant phonemes of this language. This is used when *_rules and *_list files indicate that a word uses pronunciation rules from a different language. Unpronouncable words can be recognised by rules in *_rule files. This feature is now used for en, de, es. Lang=ta, hi. Letter-names for combining vowel characters are distinguished from stand-alone vowel characters by a preceding beep. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@251 d46cf337-b52f-0410-862d-fd96e6ae7743master
@@ -109,7 +109,6 @@ _5C sins'Ents | |||
_7C s,ets'Ents | |||
_9C n,Ous'Ents | |||
_0M1 m'il | |||
_1M1 m'il // no '1' before thousand | |||
_0M2 mil^'on@s | |||
_dpt _koma | |||
//_roman Rom'a |
@@ -1,7 +1,7 @@ | |||
tv $abbrev | |||
// PB = Peter Bjarkov - [email protected] | |||
iv $abbrev | |||
// This file is UTF8 encoded | |||
// Spelling-to-phoneme words for Danish | |||
@@ -130,6 +130,8 @@ _0M4 bilij'o:n3 | |||
_0and 3 | |||
_dpt _k,Vm&: | |||
_roman d%En | |||
// PB a number followed by dot | |||
// ordinals are followed by a dot in Danish | |||
@@ -6156,7 +6158,7 @@ proceder $alt | |||
producere $alt | |||
profaner $alt | |||
professionaliser $alt | |||
profeter $alt | |||
profetere $alt | |||
profilere $alt | |||
profiter $alt | |||
prognosticer $alt | |||
@@ -8563,6 +8565,7 @@ ovation $alt | |||
ovulation $alt | |||
oxidation $alt | |||
participation $alt | |||
pavillon $alt | |||
passion $alt | |||
pension $alt | |||
perception $alt |
@@ -81,10 +81,11 @@ | |||
// PB general rule: [a] after k before m | |||
k) a (m a // PB kam, kamp | |||
c) a (mp & // PB camping | |||
// PB kamm => [a] | |||
k) a (mm a // PB kammerat | |||
// PB amm => [a] | |||
a (mm a // PB kammerat, amme | |||
// PB kame => [&] | |||
k) a (me & // PB kamel, kamera | |||
// PB general rule: [&] after d | |||
d) a (+ & // PB dame, dag | |||
d) a (g@ a // PB dagbog | |||
@@ -160,6 +161,7 @@ | |||
l) a (gt+ A // PB lagt | |||
l) ag (_ &j // lag | |||
f) ag (s au // PB fagsnak | |||
l) ag (C au // PB flagstang, lagkage | |||
// PB general rule: [A] before vn after consonant | |||
C) a (vn A // favn, savn | |||
// PB general rule: [a] after kl before consonant | |||
@@ -486,6 +488,7 @@ amsterd) a (m 'a // PB | |||
sp) ag (num Au // PB | |||
r) ag (e+ Au // PB drage, rage | |||
C) age (+ &:j@ // PB tage, bage, kage | |||
g) age (+ &:S@ // PB | |||
fl) ager (mus AuV // PB | |||
C) ager (_+ &:jV // PB tager, bager, kager | |||
l) agd (e &:j // PB lagde | |||
@@ -625,6 +628,7 @@ _trienn) ale '&:l@ | |||
offi) ce (r se // PB sprogofficer | |||
ce (rt s'E // PB koncert | |||
c (i s | |||
frederi) c (ia =ks // PB | |||
c (k | |||
ch (+ S // PB check, chokolade | |||
mi) ch (a k S | |||
@@ -803,7 +807,7 @@ stikor) d // PB exception - silent d in 'stikord' | |||
dodge dVdZ // PB city | |||
daiquiri d&k@ri // PB drink | |||
_) duke dZu:k // PB Duke - name | |||
_) drive dRAjv // PB drive-in | |||
_) drive (- dRAjv // PB drive-in | |||
.group é // added by PB | |||
é 'e // idé, entré | |||
@@ -815,6 +819,8 @@ stikor) d // PB exception - silent d in 'stikord' | |||
&b) e (@ E, // PB hv'alrosbest,and | |||
// PB general rules | |||
l) e e | |||
val) e (ncia 'E // PB | |||
al) er V // PB maler | |||
perl) e @ // PB | |||
_dil) e (mma 'E // PB | |||
ll) e (de // PB silent e - billede | |||
@@ -851,6 +857,7 @@ stikor) d // PB exception - silent d in 'stikord' | |||
rn) e (d+ e // PB derned | |||
an) e (r @ // PB anerkende | |||
L09) e (de E // nede, nederlag | |||
mus) e (um 'E // PB stressed | |||
mån) e (d @ // PB | |||
L09) e (t e // metal | |||
L09) e (l E // mellem | |||
@@ -1062,6 +1069,7 @@ _sakram) e (nte 'e | |||
_st) eg (_ e // steg - verb, problem with noun = "roast" | |||
best) eg (_ 'e // PB besteg | |||
best) eg (et_ 'e // PB besteget | |||
st) eg (å @g // PB præstegård | |||
n) egl ajl // PB negl | |||
r) egel Ejl // PB regel | |||
r) egl Ejl // PB regler | |||
@@ -1176,6 +1184,7 @@ muskat) el ''El // PB | |||
intellektu) el el // // PB | |||
bestandd) el el // PB | |||
halvd) el el // PB | |||
evang) el el // PB evangelie | |||
d) el (t+ el // PB tildelt | |||
lob) el (ia 'el // PB | |||
d) el (A+ el // PB dele, omdele | |||
@@ -1186,6 +1195,7 @@ _offici) el (+ 'el // PB officiel | |||
mod) el el // PB fotomodel | |||
_mod) el 'el // PB modelbureau | |||
u) el (+ 'el // aktuel, seksuel, visuel | |||
u) el (t+ 'el // aktuelt, seksuelt, visuelt | |||
gennemsku) el (ig =el | |||
ur) el (_+ '&#l // konjunkturel | |||
and) el el // andel | |||
@@ -1303,7 +1313,7 @@ _præsid) en (t 'en // præsidentfrue | |||
&b) en (+ en // PB koben, nøgleben | |||
_åb) en (+ @n // PB åben | |||
våb) en (+ @n // PB våben | |||
C) en (sC @n // PB TEST - verdensmagt | |||
// C) en (sC @n // PB TEST - verdensmagt | |||
tj) en (st En // PB fortjenstmedalje | |||
m) en (s+ En // PB menstruation | |||
g) en (st en // PB genstand | |||
@@ -1500,7 +1510,9 @@ L06L06) er V // PB klipper | |||
_) er (_ &r // PB er | |||
L09) er (ne_ V // PB kameraerne | |||
juvel) er (en 'er // PB juveleren | |||
juvel) er (er 'er // PB juvelerer | |||
juvel) erer ''eV // PB juvelerer | |||
_man) erer 'eV // PB | |||
man) erer eV // PB | |||
_l) er (_++ er // PB ler | |||
v) er (r_ er // PB levere | |||
th) er_ V // Luther | |||
@@ -1537,7 +1549,7 @@ L06L06) er V // PB klipper | |||
år) ede (_+ 3D@ // PB sårede | |||
odr) ede (_+ 3D@ // PB fodrede | |||
obr) ede (_ 3D@ // PB erobrede | |||
tr) ede (_+ 3D@ // PB splintrede | |||
tr) ede (_+ 3D-@ // PB splintrede | |||
hundr) ed (+ @:D // PB hundred | |||
rn) ed (e eD // PB dernede | |||
&k) ede (+ eD@ // PB dødkede | |||
@@ -1568,6 +1580,7 @@ _tromp) et 'et // PB stressed | |||
_klarin) et 'et // PB | |||
_servi) et 'et // PB | |||
servi) et et // PB | |||
_prof) et 'et // PB stressed | |||
klarin) et et // PB | |||
_plan) et 'et // PB | |||
meg) et (+ et // PB not a suffix | |||
@@ -1708,7 +1721,9 @@ _vinaigr) ette '&t@ | |||
al) geriet Sj3r'i@d // PB Algeriet | |||
al) gerier Sj'iV // PB Algeriet | |||
al) gerisk Sj'i:rsg | |||
g (iro S // PB | |||
guinea gin'e& // PB | |||
gui (nnes ge // PB | |||
ødi) g (t_ // nødigt | |||
i) g (i g | |||
g (entl j // PB egentlig | |||
@@ -1721,6 +1736,7 @@ _vinaigr) ette '&t@ | |||
ble) g (ansigt j // PB blegansigt | |||
ble) g (fi j | |||
L08e) g j // PB steg, spegepølse | |||
g (å++ g // PB præstegård | |||
L08e) g (t g // PB stegt | |||
æ) g (e j | |||
æl) g (e j // PB sælge vælge | |||
@@ -1825,7 +1841,8 @@ _vinaigr) ette '&t@ | |||
geneve Sen'E:v // PB | |||
genève Sen'E:v // PB | |||
_) gudskelov (_ gusg@lVu // PB | |||
georgia dZV:dZj& | |||
georgia dZV:dZj& // PB | |||
gibraltar SibRalt'A // PB | |||
.group ge | |||
@@ -1890,6 +1907,7 @@ _korte) ge =Se | |||
_l) ig (_ordentligt ek // PB | |||
_l) ig (_godt ek // PB | |||
_l) ig (_roligt ek // PB | |||
pav) ill (o ilj // PB pavillon | |||
færd) ig i // PB silent g | |||
hurt) ig i // PB silent g | |||
ig (hed i // PB vittighed | |||
@@ -1977,6 +1995,7 @@ intell) ige (n ig'e // PB intelligent | |||
sk) i (dt i // PB skidt | |||
sk) i (mm e // PB skimmel | |||
mask) i (n 'i // PB stressed - maskinskrive | |||
par) i (s 'i // PB | |||
h) i (d i // PB hidtil | |||
b) i (lled e / PB billede | |||
kr) i (dt i // PB skridt, kridt | |||
@@ -2247,6 +2266,7 @@ _terap) i 'i | |||
v) i (sne e // PB | |||
l) i (e j | |||
r) i (gt e // PB rigtigt | |||
r) i (c e // PB Fredericia | |||
l) ig (g+ e // PB ligge - only one g | |||
s) i (e j | |||
// t) i (e j | |||
@@ -2365,6 +2385,7 @@ _sport) iv 'iw | |||
spe) k (takl // silent k - spektakler | |||
&) k k // after stressed vowel | |||
_) kate (_ kEjt // PB name | |||
karaoke k&r&'ouki // PB | |||
// &) kk g | |||
.group l // PB l changed to l/3 in ph_danish | |||
@@ -2607,6 +2628,8 @@ subtrahe) nd nd | |||
.group ng | |||
ng (_ N // general rule - ting, ring | |||
A) ng (e N // general rule - mange, penge | |||
i) ngeni (ø nSin // PB ingeniør | |||
eva) ng (el ng // PB evangelie | |||
allo) ng (e NS // PB | |||
_ri) ng (o ng // PB Ringo - name | |||
hæ) ng N // PB hængning | |||
@@ -2722,6 +2745,7 @@ mening) oko (k ok'V // PB meningokokker | |||
hypok) o (nder 'V // PB | |||
d) o (b V // PB dobbelt | |||
d) o (nn V // PB donna | |||
b) o (ls V // PB bolsje | |||
h) o (ll V // PB Holland | |||
_horis) o (n 'V // PB horisont | |||
o (nt V // PB dont | |||
@@ -3019,6 +3043,8 @@ dødvægtt) on Vn | |||
kol) on Vn | |||
kol) onn 'Vn // kolonne - only one n, stressed | |||
kompagn) on VN | |||
_pavill) on 'VN | |||
pavill) on VN | |||
orl) on Vn | |||
_maked) on 'on // PB makedoner | |||
perl) on Vn | |||
@@ -3126,7 +3152,7 @@ _success) or =V | |||
_f) or (a_ 'V // PB fora (plur. of 'forum') | |||
_f) or (an_ 'V // PB foran | |||
_f) or (ankørende 'V // PB forankørende | |||
_f) or (annævnt'V // PB forannævnt | |||
_f) or (annævnt 'V // PB forannævnt | |||
_f) or (ansat 'V // PB foransat | |||
_f) or (anstille 'V // PB foranstillet | |||
_f) or (anstående 'V // PB foranstående | |||
@@ -3472,6 +3498,7 @@ strabad) s s // PB not a suffix | |||
ky) s s // PB not a suffix | |||
anderlede) s s // PB not a suffix | |||
interferen) s s // PB not a suffix | |||
residen) s s // PB | |||
tilpa) s s | |||
s (p s | |||
@@ -3505,6 +3532,7 @@ franci) sc (o sk // PB Francisco | |||
sydney sidni // PB | |||
shakespeare SEiksbi:r // PB | |||
squash sgwVS // PB | |||
shor (t SV // PB shorts | |||
_) stone sdoun // PB namde - Stone | |||
er_) sig (_til saj // PB avoid [si] - glæder sig [saj] til | |||
et_) sig (_til saj // PB avoid [si] - glædet sig [saj] til | |||
@@ -3741,6 +3769,7 @@ meningi) ti (s =ti | |||
// PB final -tur in da_list - stressed u | |||
&t) ur ($p_alt 'ur // struktur | |||
_komf) ur 'ur // PB | |||
// PB final -ut in da_list - stressed u | |||
&) ut ($p_alt 'ut // rekrut | |||
@@ -3991,7 +4020,8 @@ _molek) y (le 'y // PB stressed | |||
f) yrre (t Y:V // PB fyrretræ | |||
n) y (t Y // PB nyt | |||
n) y (tt W // PB nytte, benytte | |||
n) y (k W: // PB nyk | |||
n) y (k_ W // PB nyk | |||
n) y (ker W // PB nykker | |||
kn) y (tt W: // PB tilknytte | |||
kn) y (t y // PB knyt | |||
k) y (s W // PB kys | |||
@@ -4052,12 +4082,13 @@ _molek) y (le 'y // PB stressed | |||
tr) æ (n &# // PB trænge | |||
tr) æ (ne E // PB træne | |||
dr) æ (n E // PB dræne | |||
// kr) æ (f &# // PB kræfter | |||
// kr) æ (m &# // PB skræmme, kræmmer | |||
kr) æ (f &# // PB kræfter | |||
kr) æ (m &# // PB skræmme, kræmmer | |||
// r) æ (n &# // PB changed from [Aj] - rænke | |||
// r) æ (k &# // PB række | |||
// r) æ (t &# // PB åndedræt | |||
r) æ (C &# // PB rædsel | |||
r) æ (d &# // PB rædsel | |||
æ (ld+ E // PB forældre | |||
pr) æ (k E // PB præke | |||
bl) ære EV // PB blærerøv | |||
gr) æ (ken E // Grækenland | |||
@@ -4065,9 +4096,13 @@ _molek) y (le 'y // PB stressed | |||
br) æ (dd a // PB brædder | |||
br) æ (t &# // PB bræt | |||
dr) æ (gtig &# // PB nederdrægtig | |||
r) æ (k &# // PB skrækkelig | |||
br) æ (nd &# // PB brænde | |||
pr) æ (st & // PB præst | |||
tr) æ (t & // PB træt | |||
tr) æ (f &# // PB træffe | |||
tr) æ (k &# // PB trække | |||
fr) æ (k &# // PB | |||
gr) æ (n & // PB grænse | |||
gr) æ (s &# // PB græs | |||
gr) æ (d &# // PB græde | |||
@@ -4104,6 +4139,7 @@ majest) æ (t 'E // PB stressed æ | |||
øjer W#jV // PB bøjer | |||
ø (jn W# // PB øjne | |||
l) øg 'Vj // løgn, løg | |||
gl) øgg Wg // PB gløgg | |||
g) øg (l Vj // PB gøgler | |||
l) ø (s W | |||
C) ø (j W# // PB søjle, bøjle | |||
@@ -4184,8 +4220,10 @@ uimodst) å (elig 'O // PB stressed | |||
åre V3 // PB tåre | |||
å (lti V // PB måltid | |||
.group ' | |||
's (_S2 s | |||
'en (_S3 @n | |||
'er (_S3 %V | |||
'erne (_S5 %Vn@ | |||
'ernes (_S6 %Vn@s | |||
@@ -4196,7 +4234,3 @@ uimodst) å (elig 'O // PB stressed | |||
$ dVlV // PB changed from [dVlar] | |||
ñ _^_ES // PB mañana | |||
ï i: // PB Thaïs | |||
'er (_ %V // PB 60'er | |||
'erne (_ %Vn@ // PB 60'erne | |||
'ernes (_ %Vn@s // PB 60'ernes | |||
'en (_S3 %@n // PB EMP'en - doesn't work |
@@ -121,7 +121,6 @@ _8X '_axtsIC | |||
_9X 'nOYntsIC | |||
_0C 'hUnd3t | |||
_0M1 'taUz@nt | |||
_1M1 'taUz@nt // no '1' before thousand | |||
_0M2 ||mIlI'o:n@n | |||
_1M2 _'aIn@||mIlI'o:n | |||
_0M3 ||mIlI'ard@n | |||
@@ -611,33 +610,34 @@ hm h@m | |||
horsam hO3zA:m | |||
hostie $alt | |||
illegitim Ile:gi:t'i:m | |||
illiberal Ili:b@r'A:l | |||
illoyal IlOajA:l | |||
immobilie $alt | |||
indem Ind'e:m | |||
inden Ind'e:n | |||
inder Ind3 | |||
indes Ind'Es | |||
indessen Ind'Es@n | |||
injurie $alt | |||
inka INkA: | |||
inkaisch INkA:IS | |||
inkonstant $1 | |||
insbesondere $3 | |||
interess Int@r'Es | |||
intern Int'Ern | |||
januar janu:A:r | |||
kamelie $alt | |||
kanoe kan'u: | |||
kastanie $alt | |||
kid kId | |||
komödie $alt | |||
konservativ $1 | |||
konsul $1 | |||
kurie $alt | |||
illegitim Ile:gi:t'i:m | |||
illiberal Ili:b@r'A:l | |||
illoyal IlOajA:l | |||
immobilie $alt | |||
indem Ind'e:m | |||
inden Ind'e:n | |||
inder Ind3 | |||
indes Ind'Es | |||
indessen Ind'Es@n | |||
injurie $alt | |||
inka INkA: | |||
inkaisch INkA:IS | |||
inkonstant $1 | |||
insbesondere $3 | |||
interess Int@r'Es | |||
intern Int'Ern | |||
januar janu:A:r | |||
kamelie $alt | |||
kanoe kan'u: | |||
kastanie $alt | |||
kid kId | |||
komödie $alt | |||
konservativ $1 | |||
konsul $1 | |||
kurie $alt | |||
kwaß kvas | |||
lappalie $alt | |||
lilie $alt | |||
@@ -709,17 +709,12 @@ telegen te:le:g'e:n | |||
the D@ // English | |||
theater te:'A:t3 | |||
train tre:n | |||
tsunami tsu:n'a:mi: | |||
turin $2 | |||
umweg $1 | |||
unten Unt@n | |||
wasserung vas@rUN // because -ung isn't marked as a suffix | |||
weiterung vaIt@rUN | |||
weither vaIth'Er | |||
weitum vaIt_|'Um | |||
woher vo:h'e:r | |||
verein fEr'aIn | |||
vielbesprochen $3 | |||
vielleicht $2 | |||
@@ -729,18 +724,31 @@ vorherig fo:rh'e:rIg# | |||
vorig fo:rIg# | |||
//wahrscheinlich $2 | |||
warum vA:r'Um | |||
warum vA:r'Um | |||
wasserung vas@rUN // because -ung isn't marked as a suffix | |||
weiterung vaIt@rUN | |||
weither vaIth'Er | |||
weitum vaIt_|'Um | |||
woher vo:h'e:r | |||
zoom zu:m | |||
zugegen tsu:g'e:g@n | |||
zudem tsu:'de:m | |||
zloty slOti: | |||
zoom zu:m | |||
zugegen tsu:g'e:g@n | |||
zudem tsu:'de:m | |||
zugegen tsu:g'e:g@n | |||
zurück $2 | |||
zymbal $1 | |||
zurück $2 | |||
zymbal $1 | |||
// Names | |||
Djakarta dZak'artA: | |||
Djibouti dZib'u:ti: | |||
Georg ge:Ork $only | |||
George dZO:rdZ | |||
Khmer kme:r | |||
Mc m@-k | |||
Neumexiko $2 | |||
Neuseeland $2 | |||
Rwanda rU'andA: | |||
Sri sr,i: |
@@ -18,7 +18,8 @@ | |||
// * <http://www.gnu.org/licenses/>. * | |||
// ***************************************************************************/ | |||
.L01 c f h k p q s t // unvoiced, except s+vowel | |||
.L01 l r | |||
.L02 c f h k p q s t // unvoiced, except s+vowel | |||
// This file is UTF-8 encoded | |||
@@ -145,10 +146,11 @@ | |||
.group b | |||
_) b (_ be: | |||
_) b (L01A b // allow bl br at start of word | |||
b b | |||
b) b | |||
b (_N p | |||
b (L01 p | |||
b (L02 p | |||
b (sA b | |||
bt (_N pt | |||
@@ -197,6 +199,12 @@ | |||
.group c | |||
_) c (_ se: | |||
_) c (L01A k // allow cl cr at start of word | |||
_) ch (L01A k | |||
_) ch (a S | |||
_) ch (A C | |||
_) ch (o k | |||
c k | |||
c) c | |||
@@ -212,7 +220,6 @@ | |||
e) chen (_ C@n | |||
ü) chen (_ C@n | |||
_) chr kr | |||
chs ks (_ | |||
ck k | |||
@@ -225,8 +232,6 @@ | |||
_) ch (if S | |||
_) ch (il S | |||
chip (_ tSIp // English | |||
_) ch (ol k | |||
_) ch (or k | |||
bre) ch (en x | |||
chro kro: | |||
@@ -236,6 +241,7 @@ | |||
pla) c (ie ts | |||
coat (_ _^_EN | |||
_) code ko:t | |||
_) computer(@P kOmpj'u:t3 | |||
_) cow _^_EN | |||
crew _^_EN | |||
cup _^_EN | |||
@@ -243,10 +249,13 @@ | |||
.group d | |||
_) d (_ de: | |||
_) d (rA d // allow dr at start of word | |||
_) d (schA d | |||
_) d (shA d | |||
d d | |||
d) d | |||
d (_N t | |||
d (L01 t | |||
d (L02 t | |||
d (sA d | |||
ds (_ ts | |||
dt t | |||
@@ -440,6 +449,8 @@ | |||
_) f (_ Ef | |||
f f | |||
f) f | |||
_) f (L01A f // allow fl fr at start of word | |||
_) f (jord f | |||
_) faks (i f%akz | |||
_) farb (C@P4 f'arp | |||
@@ -459,12 +470,17 @@ | |||
.group g | |||
_) g (_ ge: | |||
_) g (L01A g // allow _gl _gr | |||
g g | |||
g (g | |||
g (_N k | |||
g (L01 k | |||
g (L02 k | |||
g (sA g | |||
gd (_N kt | |||
_) gh (A g | |||
_) g (nA g@- // allow _gn | |||
B) gn (A g@-n | |||
i) gt (_ Ct | |||
zei) gt (_ kt | |||
gtet (_ kt@t | |||
@@ -472,8 +488,6 @@ | |||
_) g (eHC g // hC, lC, mC, nC, rC | |||
_) gn (A g@-n | |||
B) gn (A g@-n | |||
@) ght (_ _^_EN | |||
graph grAf | |||
@@ -580,7 +594,7 @@ | |||
i (dee %i: | |||
i (erin =i: | |||
&) ig (+ Ig# // [ig] or [iC] | |||
igh aI | |||
igh (K _^_EN | |||
i (i i:_! | |||
@@ -679,9 +693,13 @@ formal) ie =I@ | |||
_) j (_ jOt | |||
j j | |||
.group k | |||
_) k (_ kA: | |||
k k | |||
_) k (L01A k // allow _kl _kr | |||
_) k (ha k | |||
_) k (nA k // allow _kn | |||
k) k | |||
// @) keit (_S4 kaIt | |||
@@ -753,6 +771,7 @@ formal) ie =I@ | |||
_) mit (P3 m'It | |||
mitt mIt | |||
mitt (eil mItt | |||
_) m (nem m // allow _mnem | |||
_) mo (rb m%O | |||
_) mono (@ m,o:no: | |||
_) motor m%o:to:r | |||
@@ -829,6 +848,7 @@ formal) ie =I@ | |||
z) oo (m u: | |||
&t) or (_ =o:r | |||
&) oren (_ 'o:r@n | |||
_) orts (@P4 'Orts | |||
oso (_ 'o:zo: | |||
st) o (ss o: | |||
oy (K OY | |||
@@ -838,9 +858,17 @@ formal) ie =I@ | |||
.group p | |||
_) p (_ pe: | |||
p p | |||
p) p | |||
pf pF | |||
p) p | |||
_) p (L01A p // allow _pl _pr | |||
_) pf (A pF | |||
_) pf (L01A pF // allow _pfl _pfr | |||
_) ph (A f // allow _ph | |||
_) ph (L01A f // allow _phl _phr | |||
_) phth (A ft | |||
ph f | |||
_) p (neu p // allow _pneu | |||
_) p (sA p // allow _ps | |||
_) p (tol p | |||
pake (t p%ake: | |||
_) para (@ p,ara | |||
@@ -857,6 +885,7 @@ formal) ie =I@ | |||
po (et p%o: | |||
poesie po:e:z'i: | |||
_) poly (@P4 p,o:ly: | |||
_) polygon (@P7 po:ly:g'o:n | |||
partei p%artaI | |||
_) perfe (k p%ErfE | |||
_) polik p'o:li:k | |||
@@ -884,7 +913,7 @@ formal) ie =I@ | |||
r (r | |||
b) r @-* | |||
_) r r | |||
_) rh r | |||
_) rh (A r // allow _rh | |||
rangier rA:NZ'i:r | |||
_) re (d re: | |||
@@ -901,15 +930,39 @@ formal) ie =I@ | |||
ss s | |||
sst (@ sSt | |||
_) s (cA s // allow _sc | |||
_) s (cr s // allow _scr | |||
_) sch (A S | |||
_) sch (L01A S | |||
_) sch (mA S | |||
_) sch (nA S | |||
_) sch (w S | |||
_) sh (A S | |||
_) sh (rA S | |||
_) s (kA s // allow _sk | |||
_) s (kL01A s // allow _skl _skr | |||
_) s (lA s | |||
_) s (mA s | |||
_) s (nA s | |||
_) s (pA S | |||
_) s (phA s | |||
_) s (plA S | |||
_) s (plend s | |||
_) s (prA S | |||
_) s (quA s | |||
_) s (tA S | |||
_) s (trA S | |||
_) s (ve s | |||
_) s (wA s | |||
_) s (zA s | |||
sch S | |||
_) sh S | |||
sh (K S | |||
sou (nd saU | |||
p) s (a s | |||
p) s (i s | |||
t) s (i s | |||
k) s (i s | |||
_) sp Sp | |||
_be) sp Sp | |||
_ge) sp Sp | |||
_ver) sp Sp | |||
@@ -925,7 +978,6 @@ formal) ie =I@ | |||
&C) ster (_S4 st3 | |||
&C) stes (_S4 st@s | |||
_) st St | |||
_be) st St | |||
_ge) st St | |||
_ver) st St | |||
@@ -970,9 +1022,15 @@ formal) ie =I@ | |||
.group t | |||
_) t (_ te: | |||
t t | |||
t) t | |||
t) t | |||
_) th (A t // allow _th | |||
_) th (rA t // allow _thr | |||
th (K t | |||
K) th t | |||
_) t (rA t // allow _tr | |||
_) tsch (A tS | |||
_) t (setse t | |||
_) tw (A tw | |||
tz ts | |||
&t) te (_ @ | |||
@@ -1005,7 +1063,6 @@ formal) ie =I@ | |||
_) talent tal'Ent | |||
tch tS | |||
_) tsch tS | |||
t (chen_ t | |||
_) teen _^_EN | |||
_) tele (@ t,e:le: | |||
@@ -1094,6 +1151,10 @@ formal) ie =I@ | |||
v) v | |||
v (_N f | |||
_) v (lad v | |||
_) v (lies f | |||
_) v (ri f | |||
_) vie fi: | |||
_) vi (CC vI | |||
_) vi vi: | |||
@@ -1147,6 +1208,9 @@ formal) ie =I@ | |||
.group w | |||
_) w (_ ve: | |||
w v | |||
_) wh (A v | |||
_) w (lad v | |||
_) w (rA v | |||
@) wert (_ vErt | |||
_) wh _^_EN | |||
@@ -1182,7 +1246,9 @@ formal) ie =I@ | |||
.group z | |||
_) z (_ tsEt | |||
z ts | |||
z) z | |||
z) z | |||
_) z (den z | |||
_) z (wA ts // allow _zw | |||
_) zentral (@P7 tsEntr'A:l | |||
_) zentral (i tsEntral |
@@ -15,7 +15,7 @@ n N n^ p r s S t | |||
T tS v w x x2 z Z | |||
Dictionary ca_dict 2010-05-12 | |||
Dictionary ca_dict 2010-07-27 | |||
@ a a# aI e E E2 i | |||
o O u U | |||
@@ -53,7 +53,7 @@ p r s S t T v w | |||
x z | |||
Dictionary da_dict 2010-07-03 | |||
Dictionary da_dict 2010-07-29 | |||
& &# 0 3 @ @- a A | |||
e E i o O u V W | |||
@@ -65,7 +65,7 @@ l/2 l/3 m n N p r R | |||
s S t T tS v w z | |||
Dictionary hu_dict 2010-07-17 | |||
Dictionary hu_dict 2010-08-02 | |||
A a: E e: i i: o o: | |||
u u: Y y y: Y: | |||
@@ -76,7 +76,7 @@ n^ p r R R2 s S s2 | |||
t tS ts v z Z | |||
Dictionary de_dict 2010-07-03 | |||
Dictionary de_dict 2010-07-27 | |||
3 3: @ @- a A A: aI | |||
aU E E2 E: e: EI i I | |||
@@ -100,7 +100,7 @@ n^ p Q r R s s; t | |||
T ts v x z z; | |||
Dictionary en_dict 2010-07-13 | |||
Dictionary en_dict 2010-07-30 | |||
0 3 3: @ @- @2 @5 @L | |||
a a# A: A@ aa aI aI@ aU | |||
@@ -110,10 +110,10 @@ O@ o@ OI oU O~ U u: U@ | |||
V VR | |||
: ; ? b C d D dZ | |||
f g g- h j k l l# | |||
m n N n^ p Q r r- | |||
s S t T t2 tS v w | |||
x z Z | |||
f g h j k l l# m | |||
n N n^ p Q r r- s | |||
S t T t2 tS v w x | |||
z Z | |||
Dictionary eo_dict 2010-05-19 | |||
@@ -127,7 +127,7 @@ s S t T tS ts v w | |||
x z Z | |||
Dictionary es_dict 2010-07-13 | |||
Dictionary es_dict 2010-07-28 | |||
a aI aU e E eI eU i | |||
o O oI u | |||
@@ -150,16 +150,16 @@ l m n N p r s S | |||
s2 t v w Z | |||
Dictionary fr_dict 2010-07-18 | |||
Dictionary fr_dict 2010-07-30 | |||
@ @- a A~ e E E2 E: | |||
E~ i I o O o3 O~ u | |||
u: w W W~ y Y | |||
@ @- a A~ e E E: E~ | |||
i I o O O~ u u: w | |||
W W~ y Y | |||
- : b d dZ f g h | |||
j k l m n N n2 n^ | |||
p p2 r r2 s S t t2 | |||
t3 tS v z Z z2 z3 | |||
: b d dZ f g h j | |||
k l m n N n2 n^ p | |||
p2 r r2 s S t t2 t3 | |||
tS v z Z z2 z3 | |||
Dictionary grc_dict 2008-03-03 | |||
@@ -185,32 +185,32 @@ N n^ p r R R2 s S | |||
t tS ts tS; v x z Z | |||
Dictionary hi_dict 2009-11-24 | |||
Dictionary hi_dict 2010-07-30 | |||
@ @- @2 @3 a a: aI aU | |||
e E e: E: E~ i I i: | |||
l- o O o: O: O~ o~ r- | |||
U u: u~ V | |||
- : b bh c ch d d. | |||
dh dh. f g gh h H j | |||
J Jh k kh l l. m n | |||
N n. n^ p ph Q q r | |||
r. s S s. t T t. th | |||
th. v w x z | |||
#X1 #X2 - : b bh c ch | |||
d d. dh dh. f g gh h | |||
H j J Jh k kh l l. | |||
m n N n. n^ p ph Q | |||
q r r. s S s. t T | |||
t. th th. v w x z | |||
Dictionary ta_dict 2010-07-18 | |||
Dictionary ta_dict 2010-07-30 | |||
a a: aI aU e E e: i | |||
I i: o o: u U u: U: | |||
V V# | |||
I i: o o: u U u2 u: | |||
U: V V# | |||
: ; b C d d. dZ f | |||
g h H j k l l. m | |||
n N n. n^ p Q r R | |||
s S s. t T t. th tS | |||
v w z z. | |||
#X1 #X2 : ; b C d d. | |||
dZ f g h H j k l | |||
l. m n N n. n^ p Q | |||
r R s S s. t T t. | |||
th tS v w z z. | |||
Dictionary hy_dict 2008-12-22 | |||
@@ -325,7 +325,7 @@ k l m n p R s S | |||
t tS v w x | |||
Dictionary nl_dict 2010-07-18 | |||
Dictionary nl_dict 2010-07-27 | |||
8 @ @- A a: A~ E e: | |||
EI eU i I O O: o: u | |||
@@ -349,7 +349,7 @@ k l m n N p r R | |||
s S s; t v w x z | |||
Dictionary pap_dict 2009-05-02 | |||
Dictionary pap_dict 2010-07-27 | |||
a a/ aI e E eI i o | |||
O u y Y | |||
@@ -474,7 +474,7 @@ p R R^ s S t tS ts | |||
v w x z Z | |||
Dictionary tr_dict 2010-06-02 | |||
Dictionary tr_dict 2010-07-27 | |||
@ a e E i I o O | |||
u U W y Y | |||
@@ -636,3 +636,14 @@ O~ u w y | |||
; b d f g j k l | |||
m n N p r s S t | |||
tS v z Z | |||
Dictionary az_dict 2010-07-27 | |||
& @ a e E i o u | |||
W y | |||
* b c C d dZ f g | |||
h j J k l m n p | |||
Q R s S t tS v w | |||
x z Z |
@@ -1132,7 +1132,6 @@ finite faInaIt | |||
fishnet fISnEt | |||
fiord fi:O@d | |||
fix fIks // for fixer | |||
fjord fIO@d | |||
flagellum fla#dZEl@m | |||
flamenco fla#mENkoU | |||
flexible flEksIb@L | |||
@@ -2447,6 +2446,7 @@ Durham dVr@m | |||
Egyptian IdZ'IpS@n | |||
Eire e@r@ | |||
Geneva dZ@ni:v@ | |||
Gdansk g@-dansk | |||
Gomera goUm'e@r@ | |||
Harare ha#rA:rI | |||
Hanoi han'OI | |||
@@ -2481,6 +2481,7 @@ Lesotho l@s'u:tu: | |||
Liberia laIb'i@ri:@ | |||
Lima li:ma# | |||
Luxembourg lVks@mb3:g | |||
Lvov l@-v0v | |||
?5 Luxembourg lVks@mbVRg | |||
Madagascar mad@g'ask3 | |||
Madras m@draas | |||
@@ -2536,6 +2537,7 @@ Qatar katA@ | |||
Quebec kwI2bEk | |||
Raleigh rA:lI | |||
Reno ri:noU | |||
Rio ri:oU | |||
Sahel sA:h'El | |||
Saigon saIg'0n | |||
Santiago santI'A:goU | |||
@@ -2556,6 +2558,7 @@ Taiwan taI'wan | |||
(tel aviv) t,El||a#v'i:v | |||
Tenerife tEn3r'i:f | |||
Texas tEks@s | |||
Tblisi t@-bli:si | |||
Toronto t@r0ntoU | |||
Timor ti:mo@ | |||
Tokyo toUkIoU | |||
@@ -2611,6 +2614,7 @@ Bambi bambi: | |||
Barack ba#rA:k | |||
Barbara bA@b@r@ | |||
Betsy bEtsI | |||
Bjorn bjO@n | |||
Boris b0rIs | |||
Brien braI@n | |||
Candace kandIs | |||
@@ -2638,11 +2642,13 @@ Declan dEkla#n | |||
Denise d@ni:s | |||
Derek dErIk | |||
Dinah daIn@ | |||
Dmitri d@mi:tri | |||
Dominic d0mI2nIk | |||
Donaghy d0n'hi: | |||
Doris d0rIs | |||
Dorothy dO@r@Ti | |||
Dougall du:g@L | |||
Dvina d@vi:n@ | |||
Dylan dIl@n | |||
Edith i:dIT | |||
Elise I2li:z |
@@ -28,6 +28,8 @@ | |||
// ?7 Scottish | |||
// ?8 Use full vowel, not schwa in some word endings | |||
// Group Y, vowels + y | |||
.L01 l r | |||
.L02 i y | |||
.L03 a i o u // vowel, not 'e' | |||
@@ -76,7 +78,6 @@ | |||
aar 'A@ | |||
w) a (b 0 | |||
r) a (ciA eI | |||
_r) a (cis eI | |||
w) a (d 0 | |||
ow) a (d @ | |||
ae i: | |||
@@ -230,8 +231,8 @@ | |||
&) able (_S4iev @b@L // suffix | |||
&c) able (_ @b@L | |||
@ct) able (_ =@b@L | |||
&) ability (S7iev @b'IlI2t%I // suffix | |||
&) abilities (S9iev @b'IlI2t%Iz // suffix | |||
&) ability (S7iev @b'IlI2t%i // suffix | |||
&) abilities (S9iev @b'IlI2t%iz // suffix | |||
&) ably (_S4iefv @bl%I | |||
&c) ably (_S4fv @bl%I | |||
@@ -252,7 +253,10 @@ | |||
accu (ra akjU | |||
accus (A a#kju:z | |||
ace (_ eIs | |||
sp) ac (e eIs | |||
_r) ac (e eIs | |||
_) ac (e a#s | |||
_r) ac (is eIs | |||
acean (_ 'eIS@n | |||
pl) ac (at a#k | |||
pl) ac (eb @s | |||
@@ -277,7 +281,7 @@ | |||
achia 'eIS@ | |||
f) ac (ilit @s | |||
_m) ace (d asI | |||
m) achi (n# @Si: | |||
m) achi (nA# @Si: | |||
m) achina (t aSI2neI | |||
ach (rom ak | |||
ac (id_ as | |||
@@ -312,6 +316,7 @@ | |||
_b) ac (o eIk | |||
y) ach (t 0 | |||
&) ac (y_ @s | |||
cr) ac (y_ =@s | |||
.group ad | |||
_) ad (@ a#d | |||
@@ -979,7 +984,7 @@ | |||
purch) as (e Is | |||
ph) ase (_ eIz | |||
r) ase (_ eIz | |||
&) asey (_ @s%I | |||
&) asey (_ @s%i | |||
b) as (i eIs | |||
b) as (il az | |||
as (sist a# | |||
@@ -992,7 +997,7 @@ | |||
nt) as (t as | |||
as (ive 'eIs | |||
as (ymp as | |||
&) asy (_ @s%I | |||
&) asy (_ @s%i | |||
w) ast (e# eIst | |||
.group at | |||
@@ -1131,6 +1136,10 @@ | |||
.group b | |||
b b | |||
_) bh b | |||
_) b (L01Y b // allow _bl _br | |||
_) brz (e brz | |||
b (b | |||
m) b (_ | |||
_) bally (@ b,alI2 | |||
@@ -1233,6 +1242,10 @@ | |||
.group c | |||
c k | |||
_) c (L01Y k // allow _cl _cr | |||
_) cz (ar ts | |||
_) cz (e tS | |||
cc k | |||
ck k | |||
c (e s | |||
@@ -1272,6 +1285,9 @@ | |||
czech tSEk | |||
.group ch | |||
_) ch (Y tS | |||
_) ch (L01Y k | |||
ch tS | |||
ch (r k | |||
chry (sa krI | |||
@@ -1469,6 +1485,11 @@ | |||
.group d | |||
d d | |||
_) d (L01Y d // allow _dl _dr | |||
_) dj (Y dZ | |||
_) d (nie d | |||
_) d (wY d // allow _dw | |||
d (d | |||
_) d' (AP2 d | |||
@@e) d (_S1 d // suffix | |||
@@ -1698,7 +1719,7 @@ | |||
econo (m Ik'0n@ | |||
econo (mic i:k@n'0 | |||
_) eco (s i:koU | |||
&) ecy (_ @s%I | |||
&) ecy (_ @s%i | |||
ee i: | |||
coff) ee I | |||
ee (m 'i: | |||
@@ -2028,7 +2049,7 @@ | |||
_) encha (n %EntSaa | |||
enclav EnkleIv | |||
en (core 0n | |||
&) ency (_ @ns%I | |||
&) ency (_ @ns%i | |||
ency (cli %EnsI | |||
en (dA_ 'En | |||
_) en (d En | |||
@@ -2432,6 +2453,9 @@ | |||
.group f | |||
f f | |||
_) f (L01Y f // allow _fl _fr | |||
_) fj (ord fI' | |||
f (f | |||
fa (ciA feI | |||
fa (miliar f@ | |||
@@ -2445,6 +2469,11 @@ | |||
.group g | |||
g g | |||
_) g (L01Y g | |||
_) gh (Y g | |||
_) g (nY | |||
_) g (wA g | |||
gg g | |||
g (e dZ | |||
_) gaol dZeIl | |||
@@ -2458,10 +2487,8 @@ | |||
g (ilC g | |||
l) ging dZI2N | |||
g (y dZ | |||
_) g (n | |||
exa) gg (er dZ | |||
ght t | |||
_) gh g | |||
gh (_ g | |||
C) gh (A g | |||
gh (C g | |||
@@ -2721,6 +2748,7 @@ | |||
.group ie | |||
ie I | |||
X) ie i: | |||
ie (_ aI | |||
ied (_S2i d // suffix | |||
ieds (_S3i dz | |||
@@ -2741,7 +2769,7 @@ | |||
ie (k i: | |||
ie (l i: | |||
ie (llA I2'E | |||
n) iel (_ I2@L | |||
&n) iel (_ I2@L | |||
&r) iel (_ =i:@L | |||
ie (n i@ | |||
d) iene (_ 'aIi:n | |||
@@ -2787,6 +2815,7 @@ | |||
ie (ve i: | |||
s) ie (ve I | |||
ie (z i: | |||
_t) ie aI | |||
.group ig | |||
am) ig (a_ i:g | |||
@@ -2860,19 +2889,19 @@ | |||
.group in | |||
@) ing (_+S3dve IN | |||
@) ings (_S4dve INz | |||
@) ingly (_S5dve INg-lI | |||
@) ingment (_S7dve INg-m@nt | |||
@) ingly (_S5dve INlI | |||
@) ingment (_S7dve INm@nt | |||
logu) ing (_S4v IN | |||
x) ing (_+S3v IN | |||
el) ing (_+S3dv IN | |||
@@om) ing (_S3dv IN | |||
en) ing (_S3v IN | |||
en) ings (_S4v INz | |||
en) ingly (_S5vf INg-lI | |||
en) ingly (_S5vf INgI | |||
er) ing (_S3v IN | |||
er) ings (_S4v INz | |||
er) ingly (_S5vf INg-lI | |||
er) ingment (_S7v INg-m@nt | |||
er) ingly (_S5vf INlI | |||
er) ingment (_S7v INm@nt | |||
Br) ing (_ IN | |||
?7 &) in (_ @n | |||
@@ -3160,13 +3189,13 @@ | |||
_) it' %It | |||
_m) it (o aIt | |||
it (o_ 'i:t | |||
_C) ity (_ ItI | |||
_C) ity (_ Iti | |||
_ed) it It | |||
cred) it It | |||
CAt) it (_ 'i:t //apetite | |||
v) it (al aIt | |||
t) it (l aIt | |||
&) ity (_ =I2t%I | |||
&) ity (_ =I2t%i | |||
orb) it It | |||
@@) it (an_ =It | |||
?3 &) itary (_ @tEr%I // military | |||
@@ -3251,7 +3280,10 @@ | |||
.group k | |||
k k | |||
k (k | |||
_) kn n | |||
_) k (L01Y k | |||
_) k (hY k | |||
_) k (wY k | |||
_) kn (Y n | |||
kn (if n | |||
kn (iv n | |||
kn (it n | |||
@@ -3269,6 +3301,10 @@ | |||
.group l | |||
l l | |||
l (l | |||
_) l (hY l | |||
_) ll (Y l | |||
_) l (ju l | |||
l (_ l | |||
A') ll l | |||
A) ll l | |||
@@ -3333,9 +3369,11 @@ | |||
?8 @) lessly (_S6i lEsl%I | |||
?8 @) lessness (_S8i lEsnEs | |||
.group m | |||
m m | |||
mm m | |||
_) mn (e n | |||
h) m (_ @m | |||
B) m (_ @m | |||
l) m (_ m | |||
@@ -3361,7 +3399,6 @@ | |||
_) mc (A mak | |||
_) mc (-A mak | |||
mn (_ m | |||
_) mn n | |||
&B) me (_ m%I | |||
@) men (_ mEn | |||
&) ment (_S4 m@nt | |||
@@ -3422,6 +3459,8 @@ | |||
.group n | |||
n n | |||
n) n | |||
_) n (gY+ @-N | |||
&ia) n (_S1 n | |||
&ia) ns (_S2 nz | |||
@) name (_S4 neIm | |||
@@ -4111,7 +4150,7 @@ | |||
&dr) ous (_ =@s | |||
&l) ous (_ @s | |||
&) ous (_ @s | |||
&) ousy (_ @s%I | |||
&) ousy (_ @s%i | |||
&m) ous (_ @s | |||
&n) ous (_ @s | |||
_) out (@P3 %aUt // prefix out | |||
@@ -4226,6 +4265,14 @@ | |||
.group p | |||
p p | |||
p (p | |||
_) p (L01Y p // allow _pl _pr | |||
_) pf (Y f | |||
_) ph (Y f | |||
_) ph (L01Y f | |||
_) pn (eu n | |||
_) ps (Y s | |||
_) pt (Y t | |||
ph f | |||
phenome (n fI2n0mI | |||
phenyl f,i:naIl | |||
@@ -4252,12 +4299,10 @@ | |||
poly (@@ p,0lI | |||
poly (@ p0lI | |||
pota (t p@teI | |||
_) ps s | |||
pseudo su:doU | |||
psych saIk | |||
psycho saIkoU | |||
psycho (lo saIk'0 | |||
_) pt t | |||
ei) pt t | |||
ras) p (b | |||
_) pur (su p3 | |||
@@ -4388,7 +4433,6 @@ | |||
pro (log proU | |||
.group q | |||
_) q (B kju: | |||
q k | |||
q (q | |||
qu kw | |||
@@ -4413,13 +4457,15 @@ | |||
.group r | |||
r r | |||
rr r | |||
_) rh (Y r | |||
_) rw (a r%U | |||
r) r (_ | |||
C) r (_N r@ | |||
e) r (_ 3 | |||
@) r (B @ | |||
3_) rd (_ | |||
rEr (_ r3 | |||
_) rh r | |||
C) rh r | |||
rheu ru: | |||
rhi (n raI | |||
@@ -4433,7 +4479,6 @@ | |||
_) ru (bL01 ru: | |||
_) run (a rVn | |||
_) run (o rVn | |||
_) rw r%U | |||
&ant) ry (_S2 r%I | |||
.group re | |||
@@ -4541,7 +4586,29 @@ | |||
s s | |||
s (s | |||
s (sh s | |||
_) s (cY s | |||
_) s (cL01Y s | |||
_) sch S | |||
_) sh (Y S | |||
_) sh (L01Y S | |||
_) s (kY s | |||
_) s (kL01Y s | |||
_) s (lY s | |||
_) s (mY s | |||
_) s (nY s | |||
_) s (pY s | |||
_) s (phY s | |||
_) s (pL01Y s | |||
_) s (qu s | |||
_) s (ri s | |||
_) s (tY s | |||
_) s (trY s | |||
_) s (va s | |||
_) s (ve s | |||
_) s (wY s | |||
_) s (zY s | |||
sche (m ski: | |||
_) sch (ism sk | |||
_) schiz skIts | |||
@@ -4721,6 +4788,14 @@ | |||
.group t | |||
t t | |||
t) t | |||
_) th (Y T | |||
_) th (rY T | |||
_) th (wY T | |||
_) t (rY t | |||
_) t (sY t | |||
_) t (wY t | |||
_) tz (ar ts | |||
tch tS | |||
_) tele tElI2 | |||
r) tga (g gI | |||
@@ -4901,6 +4976,7 @@ | |||
?8 &f) ully (_ Vl%I | |||
&) u (lous_ =jU | |||
b) ul (r Ul | |||
&ic) ul (t @L | |||
_) ultra (@ ,Ultra | |||
u (lul V | |||
@) u (lum =jU | |||
@@ -4972,7 +5048,7 @@ | |||
g) ui (lC I | |||
_g) ui (le aI | |||
@) ui (ty 'ju:I | |||
g) ui (dA aI | |||
g) ui (dA# aI | |||
g) uide (l aId | |||
beg) ui (l aI | |||
_g) ui (n I | |||
@@ -5098,6 +5174,7 @@ | |||
.group v | |||
v v | |||
v (v | |||
_) v (la v | |||
@) va (len veI | |||
_) vehem vi@m | |||
@@ -5108,6 +5185,9 @@ | |||
.group w | |||
w w | |||
w (w | |||
_) wh (Y w | |||
_) wr (Y r | |||
C) w (_ w@ | |||
wh w | |||
wr r | |||
@@ -5140,14 +5220,14 @@ | |||
As) w (ick | |||
.group x | |||
_) x (C Eks | |||
x ks | |||
x) x (A | |||
_) xy zaI | |||
_) x z | |||
_) x (Y z | |||
xio (n kS@ | |||
xious =kS@s | |||
xu (a =kSu: | |||
xure (_ kS%U@ | |||
.group y | |||
y j | |||
@@ -5164,6 +5244,8 @@ | |||
y (Be# aI | |||
@C) y (Be# aI | |||
ye (_ aI | |||
y (ear j | |||
%B) y (_NS1d i | |||
%B) y (_S1d I | |||
_C) y (Ce aI | |||
C) y (i I | |||
@@ -5201,10 +5283,11 @@ | |||
d) yse (n Is@ | |||
f) y (_ aI | |||
ff) y (_ I | |||
&sk) y (_ =I | |||
&sk) y (_ =i | |||
den) y (_ aI | |||
bel) y (_ aI | |||
&) y (_ %I | |||
&) y (_N %i | |||
y (_ aI | |||
y (Cic_ 'I | |||
y (Cical 'I | |||
@@ -5257,6 +5340,11 @@ | |||
.group z | |||
z z | |||
z (z | |||
_) zh (Y Z | |||
_) z (lot z | |||
_) zs (Y z | |||
_) z (wY z | |||
@) zales (_ z'A:lEs | |||
zes (_ zI2z | |||
zh Z |
@@ -106,7 +106,6 @@ _5C kinj'EntOs | |||
_7C s,eteTj'EntOs | |||
_9C n,OBeTj'EntOs | |||
_0M1 m'il | |||
_1M1 m'il // no '1' before thousand | |||
_0M2 miJ^'ones | |||
_1M2 'unmiJ^'On | |||
_0M4 _biJ^'onEs | |||
@@ -358,23 +357,23 @@ alguna $u | |||
b be | |||
c Te | |||
d de | |||
f Efe | |||
f _|Efe | |||
g xe | |||
h atSe | |||
j xOta | |||
k ka | |||
l Ele | |||
m Eme | |||
n Ene | |||
ñ En^e | |||
l _|Ele | |||
m _|Eme | |||
n _|Ene | |||
ñ _|En^e | |||
p pe | |||
q ku | |||
r E**e | |||
s Ese | |||
r _|E**e | |||
s _|Ese | |||
t te | |||
v uBe | |||
v _|uBe | |||
w ,uBe||d'OBle | |||
x Ekis | |||
x _|Ekis | |||
z TEta | |||
_a a |
@@ -5,11 +5,12 @@ | |||
// ?1 Castilian | |||
// ?2 Latin America | |||
.L01 j w l r b d g n m p t k c | |||
.L01 l r y | |||
.L02 b d g n m // change [s] to [z] before these | |||
.L03 f h j s y z // allow [B] [D] [Q] before these consonants | |||
.L03 f h j s y z r // allow [B] [D] [Q] before these consonants | |||
.L04 b v f p // labials, nasals are [m] | |||
.L05 g k // velars, nasals are [N] | |||
.L06 j w l r b d g n m p t k c | |||
.group a | |||
a a | |||
@@ -22,7 +23,8 @@ | |||
.group b | |||
b b | |||
_) b b // phoneme definition may change it to [B] | |||
_) b ($unpr b // phoneme definition may change it to [B] | |||
_) b (L01A b // Only bl, br are allowed at start of word | |||
b (A B | |||
b (cY B | |||
b (L03 B | |||
@@ -33,13 +35,17 @@ | |||
.group c | |||
c k | |||
_) c (L01A k // allow: cl cr at start of word | |||
_) ch (A tS // allow _ch | |||
c (Y T // ce, ci | |||
ch tS | |||
.group d | |||
d d | |||
_) d d // phoneme definition may change it to [D] | |||
_) d ($unpr d // phoneme definition may change it to [D] | |||
_) d (rA d | |||
d (A D | |||
d (cY D | |||
d (L03 D | |||
@@ -64,11 +70,15 @@ | |||
.group f | |||
f f | |||
_) f (L01A f // allow fl fr at start of word | |||
.group g | |||
g g | |||
_) g g // phoneme definition may change it to [Q] | |||
_) g ($unpr g // phoneme definition may change it to [Q] | |||
_) g (L01A g | |||
_) gh (A g // allow _gh in foreign words | |||
_) gn (A n | |||
g (A Q | |||
g (cY Q | |||
g (L03 Q | |||
@@ -95,10 +105,12 @@ | |||
.group k | |||
k k | |||
_) k (L01A k // allow kl kr at start of word | |||
.group l | |||
l l | |||
_) ll (A J^ // allowe _ll | |||
ll J^ | |||
?2 A) ll (A j: | |||
@@ -106,6 +118,8 @@ | |||
.group m | |||
m m | |||
_) mn (em n | |||
m (K n | |||
m (L04 m | |||
m (_L04 m | |||
@@ -136,11 +150,14 @@ | |||
.group p | |||
p p | |||
_) p (L01A p // allow pl pr at start of word | |||
p (t p: | |||
_) ph f | |||
ph (K f | |||
_) ps (ico s | |||
_) ps (i s | |||
_) ps (eudo s | |||
_) pt (ero t | |||
_) pt (ol t | |||
.group q | |||
@@ -150,7 +167,6 @@ | |||
.group r | |||
r R | |||
_) r RR2 | |||
r (_ * | |||
r (t ** | |||
A) r (A ** | |||
@@ -165,13 +181,15 @@ | |||
.group s | |||
s s | |||
&) s (_S1 s | |||
_) s (C Es | |||
_) sh S | |||
_) s (C %Es | |||
_) sh (A S | |||
_) sh (L01A S | |||
sh (K S | |||
.group t | |||
t t | |||
_) t (L01A t // all tr at start of word | |||
_) th T | |||
th (K T | |||
@@ -188,15 +206,15 @@ | |||
.group v | |||
v B | |||
_) v b | |||
_) v (L01A b // allow vl vr at start of word | |||
?1 m) v b | |||
?1 n) v b | |||
?1 v (L01 b | |||
?1 v (L06 b | |||
?1 v (iA b | |||
?1 v (uA b | |||
?2 v v# | |||
?2 _) v v | |||
?2 v (L01 v | |||
?2 v (L06 v | |||
?2 v (j v | |||
?2 v (iA v | |||
?2 v (uA v | |||
@@ -204,18 +222,19 @@ | |||
.group w | |||
w w | |||
_) wh (A w | |||
.group x | |||
x ks | |||
?1 A) x (A Qs | |||
x (_ =Qs | |||
_) x z // ? | |||
_) x ($unpr z // ? | |||
.group y | |||
y i | |||
_) y J | |||
_) y ($unpr J | |||
_m) y J | |||
n) y J | |||
_l) y J |
@@ -24,7 +24,7 @@ | |||
// 2006-11-18 Gilles Casse <[email protected]> | |||
// | |||
// Updated 2010-07-16 Michel Such <[email protected]> | |||
// Updated 2010-07-25 Michel Such <[email protected]> | |||
// | |||
// * Numbers, a few abbreviations and exceptions. | |||
// | |||
@@ -83,8 +83,8 @@ z zEd | |||
// accent names | |||
_lig ligat'yr | |||
_acu aksA~tE2g'y | |||
_ac2 dublaksA~tE2g'y | |||
_acu aksA~tEg'y | |||
_ac2 dublaksA~tEg'y | |||
_brv br'Ev | |||
_ced sed'ij | |||
_cir aksA~sirkO~fl'Eks | |||
@@ -104,29 +104,29 @@ _cap maZysk'yl | |||
_?A l'Etr | |||
_?? sE~b'oll | |||
_#9 tabylasiO~ | |||
_#32 E2spas | |||
_#32 Espas | |||
_" gijmE2 | |||
_" gijmE | |||
_# djEz | |||
_' apostr'Of | |||
_( parA~tEz_goS | |||
_) parA~tEz_drwat | |||
_, virgyl | |||
_- tirE2 | |||
_- tirE | |||
_. _|pw%E~ | |||
_/ barOblik | |||
_/ baroblik | |||
_: d'Y||pw'E~ | |||
_; pwE~||virg'yl | |||
_< E~feriWr | |||
_= egal | |||
_> syperiWr | |||
_? pwE~||dE~tE2rogasj'O~ | |||
_? pwE~||dE~tErogasj'O~ | |||
_! pwE~||dEksklamasj'O~ | |||
_[ krOSE2_goS | |||
_\ barOblik_E~vErse | |||
_] krOSE2_drwa | |||
_[ krOSE_goS | |||
_\ bakslaS | |||
_] krOSE_drwa | |||
_^ sirkO~flEks | |||
__ sulin^e | |||
_` aks'A~_gr'av | |||
@@ -134,8 +134,8 @@ _{ akOlad_goS | |||
_| bar_vErtik'al | |||
_} akOlad_drwat | |||
² pyis'A~s||d'Y | |||
_« uvre||gijm'E2 | |||
_» fErme||gijm'E2 | |||
_« uvre||gijm'E | |||
_» fErme||gijm'E | |||
_’ apostr'Of | |||
_‘ apostr'Of | |||
_µ mikr'o | |||
@@ -174,7 +174,7 @@ _5 sE~k | |||
_6 siz3 | |||
_7 sEt | |||
_8 _|yit3 | |||
_9 nYf | |||
_9 nWf | |||
_10 diz3 | |||
_11 _|O~z | |||
_12 duz | |||
@@ -184,7 +184,7 @@ _15 kE~z | |||
_16 sEz | |||
_17 disEt | |||
_18 dizyit3 | |||
_19 diznYf | |||
_19 diznWf | |||
_20 vE~t2 | |||
_21 vE~te:W~ | |||
_22 vE~tdYz2 | |||
@@ -194,7 +194,7 @@ _25 vE~tsE~k | |||
_26 vE~tsiz3 | |||
_27 vE~tsEt | |||
_28 vE~tyit3 | |||
_29 vE~tnYf | |||
_29 vE~tnWf | |||
_3X trA~t | |||
_31 trA~te:W~ | |||
_4X karA~t | |||
@@ -251,17 +251,18 @@ cci $abbrev | |||
cia $abbrev | |||
cio $abbrev | |||
cm centimètre $text | |||
collins kOlins | |||
collins _^_en | |||
cpu $abbrev | |||
ctrl _::kO~trOl | |||
dept depart@mA~ | |||
dept département $text | |||
divx diviks | |||
ebay _^_en | |||
(e bay) ebay $text | |||
ebcdic @besedik | |||
edf @d,eEf | |||
eml @,EmEl | |||
etc E2tsetera | |||
etc Etsetera | |||
fyi fWr||jWr||InfWrm'EjSWn | |||
ghz ZigaErts | |||
(g hz) ZigaErts | |||
hmm hWm | |||
@@ -271,14 +272,13 @@ ibm ib,e'Em | |||
ide $abbrev | |||
ip ipe | |||
irc I,Er_|se | |||
jaws dZo3:z | |||
kbit kilobit | |||
kde $abbrev | |||
kg kilogramme $text | |||
khz kiloErts | |||
km kilomètre $text | |||
(km player) ka,EmplE2j'Wr | |||
(kmplayer) ka,EmplE2j'Wr | |||
(km player) ka,EmplEj'Wr | |||
(kmplayer) ka,EmplEj'Wr | |||
kw kilowatt $text | |||
m. m@siY | |||
mbit megabit | |||
@@ -314,12 +314,12 @@ sap $abbrev | |||
scsi $abbrev | |||
solaris solaris | |||
sos $abbrev | |||
s.t.p silt@:pl'E2 | |||
s.v.p silvu:pl'E2 | |||
s.t.p silt@:pl'E | |||
s.v.p silvu:pl'E | |||
st s'E~t2 | |||
ste s'E~t | |||
stp silt@:pl'E2 | |||
svp silvu:pl'E2 | |||
stp silt@:pl'E | |||
svp silvu:pl'E | |||
tva $abbrev | |||
uk $abbrev | |||
ups ypeEs | |||
@@ -331,7 +331,6 @@ u.s y:Es | |||
virgin virZin | |||
vip v,i||,aj||p'i | |||
(web visum) webvisum $text | |||
windows windo3z | |||
wma $abbrev | |||
xfce iksEfse@ | |||
xy $abbrev | |||
@@ -421,10 +420,11 @@ lui $u+ $verbf | |||
ca sa $u+ $capital $verbf | |||
ce $u+ $nounf | |||
ceux $u+ | |||
celle $u+ | |||
celles $u+ | |||
ceci $u+ $verbf | |||
cela $u+ $verbf | |||
voici $u+ | |||
voilà $u+ | |||
cet $u $nounf | |||
cette $u $nounf | |||
ces sez2 $u $nounf | |||
@@ -435,6 +435,8 @@ ces sez2 $u $nounf | |||
(celles ci) sEl||si $verbf $u+ | |||
(celles là) sEl||la $verbf $u+ | |||
plupart $u+ | |||
voici $u+ | |||
voilà $u+ | |||
// possessives | |||
ma $u $nounf | |||
@@ -527,8 +529,8 @@ pourtant $u+ | |||
// auxillary verbs (be, have, can, etc) | |||
suis $u+ $verb | |||
es E2z2 $u+ | |||
est E2t2 $u+ | |||
es Ez2 $u+ | |||
est Et2 $u+ | |||
sommes $u+ $verb | |||
êtes $u+ $verb | |||
sont $u+ $verb | |||
@@ -544,7 +546,7 @@ sois $u+ $verb | |||
soit $u+ | |||
ai $u+ $verb | |||
(ai je) E2Z $u+ | |||
(ai je) EZ $u+ | |||
as as | |||
as az2 $u+ $verb | |||
(as tu) aty | |||
@@ -642,7 +644,6 @@ albinos albinos | |||
alleluia alelui'a | |||
alterego altErego | |||
anis anis | |||
any Eni $u | |||
armageddon armagedO~ | |||
auvent ovA~ | |||
beta beta | |||
@@ -653,7 +654,7 @@ blues _^_en | |||
blum blum | |||
broglie breuil $text | |||
browglie breuil $text | |||
buffer bYfYr | |||
buffer bYfWr | |||
bus bys | |||
bus by $verb | |||
cancer kA~sEr | |||
@@ -673,11 +674,12 @@ dot dOt | |||
enfer A~fEr | |||
fahrenheit far@najt | |||
faut fot2 $u+ | |||
feldspath fEldspat | |||
fier fjer $verb | |||
for $u+ | |||
francis frA~sis | |||
fred frEd | |||
free frI: | |||
free _^_en | |||
fuel fjul | |||
gangster gA~gstEr | |||
gars ga | |||
@@ -685,20 +687,20 @@ genesis Zenezis | |||
georges ZOrZ | |||
gilles Zil | |||
gin dZin | |||
gulf gWlf | |||
gulf gOlf | |||
gus gys | |||
gym Zim | |||
han _|A~ | |||
hélas elas $u+ | |||
jacques Zak | |||
karaoke karaOke | |||
karaoke karaoke | |||
kevin kevin | |||
laetitia letisja | |||
laser lazEr | |||
listbox listbOks | |||
louis lwi | |||
malus malys | |||
mai mE2 | |||
mailto mEjltu_ | |||
mai mE | |||
mapper _^_en | |||
mars mars | |||
mas mas | |||
@@ -712,32 +714,31 @@ mrs _^_en | |||
oasis oazis | |||
ours urs | |||
pataquès patakEs | |||
patchwork patSwWrk | |||
peter pItWr | |||
peter _^_en | |||
phallus falys | |||
polder pOldEr | |||
premier pr@mjer2 | |||
program _^_en | |||
(program files) prOgramfajlz | |||
query kueri | |||
queries kueri | |||
query _^_en | |||
queries _^_en | |||
quid kwid $u+ | |||
quit kwit | |||
recorder rikOrdWr | |||
quit _^_en | |||
recorder _^_en | |||
requiem rekyijEm | |||
revolver revOlvEr | |||
sas sas | |||
scan skan | |||
scan _^_en | |||
scanner skaner2 $verb | |||
scanner skanWr $noun | |||
scanners skanWr | |||
shampoing SA~pwE~ | |||
sir sWr | |||
sir _^_en | |||
souris suri | |||
stocker stoker2 | |||
sus sys | |||
sus sy $verb | |||
sushi suSi | |||
thierry tjEri | |||
to tu $u+ | |||
tramway tramwE: | |||
tuttiquanti tutikw'anti | |||
@@ -745,7 +746,6 @@ vaut $u+ | |||
vaux $u+ | |||
vénus venys | |||
vot vOt | |||
writer raitWr | |||
yves iv | |||
@@ -777,18 +777,17 @@ zut zyt | |||
// et (t is said) | |||
exocet E2gzOsEt | |||
exocet EgzosEt | |||
fret fr'Et | |||
budget bydZE2 | |||
budget bydZE | |||
hamlet _|amlEt | |||
knesset knesEt | |||
lazaret lazarE2 | |||
lazaret lazarE | |||
margaret margarEt | |||
net nEt | |||
offset OfsEt | |||
set sEt | |||
soviet soviEt | |||
stewart stIwart | |||
// urt (t is said) | |||
kurt kurt | |||
@@ -800,19 +799,14 @@ yogourt _|iogurt | |||
short SOrt | |||
// art (t said) | |||
steward stiwart | |||
stuttgart Stutgart | |||
hart art | |||
kart kart | |||
smart smart | |||
// irt | |||
(sweat shirt) swEtSWrt | |||
(sweat shirts) swEtSWrt | |||
(tee shirt) t,IS'Wrt | |||
(tee shirts) t,IS'Wrt | |||
(t shirt) t,IS'Wrt | |||
(t shirts) t,IS'Wrt | |||
(t shirt) _^_en | |||
(t shirts) _^_en | |||
// words from other languages | |||
@@ -821,34 +815,38 @@ acer asEr | |||
and _^_en | |||
amazon amaz'On | |||
apple _^_en | |||
at at $u+ | |||
(audible manager) od,ibl||manadZ'Wr | |||
at _^_en | |||
(audible manager) _^_en | |||
balabolka balabOlka | |||
be _^_en | |||
better _^_en | |||
bin bin | |||
bit bit | |||
bluetooth blut'us | |||
bluetooth _^_en | |||
computer _^_en | |||
(cyber link) _^_en | |||
debian debjan | |||
do _^_en | |||
edit _^_en | |||
emacs E2maks | |||
emacspeak E2makspI:k | |||
emacs _^_en | |||
end _^_en | |||
espeak @spI:k | |||
ethernet etErnEt | |||
exit egzit | |||
(file zilla) f,ajl||zij'a | |||
from frOm $u+ | |||
(file zilla) _^_en | |||
from _^_en | |||
get _^_en | |||
google gug=Wl | |||
google _^_en | |||
gnome gnOm | |||
gnu $abbrev | |||
hamburger _|A~b@rgWr | |||
he _^_en | |||
her _^_en | |||
help _^_en | |||
hot _^_en | |||
in in $u+ | |||
inside _^_en | |||
in _^_en | |||
internet E~tErn'Et | |||
(internet explorer) E~tErn'Et||E2ksplOr'Wr | |||
(internet explorer) E~tErn'Et||EksplOr'Wr | |||
it _^_en | |||
klaxon klaksOn | |||
let _^_en | |||
lite _^_en | |||
@@ -856,28 +854,29 @@ login _^_en | |||
logon _^_en | |||
(mac os x) makoEsiks | |||
made _^_en | |||
mail _^_en | |||
mailto _^_en | |||
media medja | |||
messenger mE2sEnZWr | |||
my maj $u+ | |||
messenger _^_en | |||
nat nat | |||
not _^_en | |||
null _^_en | |||
ok oke $u+ | |||
open op'Wn | |||
(open source) op,Wn||s'urs | |||
outlook autlu:k | |||
open _^_en | |||
outlook _^_en | |||
paint _^_en | |||
paper _^_en | |||
people _^_en | |||
redhat rEdat | |||
redhat _^_en | |||
same _^_en | |||
sametime _^_en | |||
she _^_en | |||
sun _^_en | |||
(text aloud) tEkst||@la=wd | |||
(text aloud) _^_en | |||
ubuntu ubuntu | |||
up _^_en | |||
win win $u+ | |||
yes _^_en | |||
yet _^_en | |||
// tions (tjO~ instead of sjO~) | |||
@@ -903,6 +902,7 @@ vincent vE~sA~ | |||
// Some countries, areas and languages | |||
afrikaans afrikans | |||
aix Eks | |||
aruba aruba | |||
bahamas baamas | |||
bangladesh bA~gladES | |||
bayeux bajY | |||
@@ -915,14 +915,17 @@ burundi burundi | |||
calvados calvadoss $text | |||
christmas krismas | |||
croatie kroasi | |||
esperanto E2sperA~to | |||
esperanto EsperA~to | |||
groenland groEnlA~d | |||
guatemala gwatemala | |||
hindi _|indi | |||
honduras _|O~dyras | |||
kenya kenja | |||
koweït kowEjt | |||
laos laOs | |||
leone leOn | |||
lesotho lezOto | |||
libye libi | |||
liechtenstein liStWnStajn | |||
angeles A~nZelEs | |||
malawi malawi | |||
@@ -935,15 +938,12 @@ oman oman | |||
palaos palaOs | |||
samoa samoa | |||
swaziland swazilA~d | |||
leone leOn | |||
koweït kowEjt | |||
taïwan tajwan | |||
texas tE2ks'as | |||
texas tEks'as | |||
tuvalu tuvalu | |||
vanuatu vanuatu | |||
venezuela venezy-E2la | |||
venezuela venezyEla | |||
(viêt nam) vjEtnam | |||
wallis walis | |||
futuna futuna | |||
zimbabwe zimbabwe | |||
@@ -27,7 +27,7 @@ | |||
// http://www.fluxnic.net/cicero | |||
// | |||
// Rules are now maintained by Michel Such <[email protected]> | |||
// Last update: 2010-07-16 Michel Such <[email protected]> | |||
// Last update: 2010-07-30 Michel Such <[email protected]> | |||
// | |||
// Letter classes: | |||
@@ -45,7 +45,32 @@ | |||
.L03 d l m n s t v | |||
.L04 c d f g l m n v | |||
.L05 g h k l m v w | |||
.L06 l r s | |||
// Following groups are used to manage mute e inside words. | |||
// After or before L06, e is not mute | |||
.L06 bl br cl cr ct dr fl fr ft gl gr kl kr pl pr tr vr | |||
// After L07, e is not mute | |||
.L07 ec éc ed éd lb lc ld lg lm ln lp lt lv rb rc rd rf rg rl rm rn rp rs rt rv | |||
// All consonants + ch gu qu used as ch g k | |||
.L08 b c d f g h j k l m n p q r s t v w x z ch qu gu | |||
// E placed after a consonant following L09 is not mute | |||
.L09 l r s | |||
// When these diphtonges are after a consonant folllowing e, e is not mute | |||
.L10 ia ie io ua ue ui uo | |||
.L11 b p | |||
.L12 é è al ib ie l om on ré | |||
// Words ending "son" pust sound english if preceded by L13 | |||
.L13 d g k l p er hn | |||
// For english words ending "side" | |||
.L14 be in up ut | |||
.group a | |||
@@ -56,21 +81,18 @@ | |||
ain (K E~ // pain | |||
Ct) ain (_ E~n2 // certain ami | |||
ch) ain (_ E~n2 // prochain arret | |||
ai (_ e // dirai ferai... | |||
_ess) ai (_ E2 // essai | |||
_vr) ai (_ E2 // vrai | |||
ai (b E // faible | |||
ais (_ E2z2 // dirais ferais... | |||
ait (_ E2t2 // dirait ferait... | |||
aient (_ E2t2 // diraient feraient... | |||
ai E | |||
ai (_ e | |||
_bal) ai (_ E | |||
_ess) ai (_ E | |||
_vr) ai (_ E | |||
aie E | |||
ais (_ Ez2 | |||
ait (_ Et2 | |||
aient Et2 | |||
f) ai (sA @ // faisons faisan | |||
a (ilK a | |||
aie (me E2 // paiement | |||
ai E // aile | |||
ai (L06 E // aile | |||
ai (CAX E // aile | |||
am (b A~ // jambon | |||
am (p A~ // camp | |||
am (L11 A~ // jambon, tampon | |||
am (m a // programmation | |||
_) am (n am // amnistie | |||
am (n a // condamner | |||
@@ -106,22 +128,22 @@ | |||
aud (_ o // chaud | |||
_C) aud (_ od // Maud | |||
au (l_ O // Paul | |||
au (re_ o // dinosaure | |||
au (re_ O // dinosaure | |||
_) audio (@P5 odio | |||
_) auto (@P4 oto | |||
_) autom (n otO | |||
bb) aye (X ei // abbaye | |||
ay (C E // aymé | |||
ay Ej // paye | |||
ay (_ E2 // display | |||
Xl) ayer (X E2jWr // player, layer | |||
ay (_ E // display | |||
Xl) ayer (X EjWr // player, layer | |||
h) am (_S2 am | |||
w) an (_ an | |||
a a // bateau | |||
// group a: English section | |||
sm) all _^_en // small, smaller | |||
a (wC _^_en | |||
any _^_en | |||
aw (K _^_en | |||
.group b | |||
@@ -131,12 +153,9 @@ _C) aud (_ od // Maud | |||
// group b: English section | |||
back _^_en | |||
bbl _^_en | |||
bird _^_en // bird | |||
board _^_en // board, keyboard | |||
box (_ _^_en // box, inbox, outbox | |||
bugg _^_en // debugger | |||
_) by _^_en // by, bye, bypass | |||
.group c | |||
@@ -239,50 +258,64 @@ _ingré) dien (t_ djA~ // ingrédient | |||
_) devic _^_en | |||
dle (X _^_en // bundle, handle | |||
.group e | |||
// Define use of the final 'e' in french | |||
e (_ | |||
// Manage mute e inside words | |||
@C) e (CeCA @ | |||
@L08) e (CA | |||
@L08) e (CL10C @ | |||
@L08) e (L06 | |||
@L08) e (L06L10C @ | |||
@L06) e (CA @ | |||
@L06) e (L06 @ | |||
@L07) e (CA @ | |||
@L07) e (L06 @ | |||
@L09gu) e (CA @ | |||
@L09gu) e (L06 @ | |||
@L09qu) e (CA @ | |||
@L09qu) e (L06 @ | |||
e (ct+++++ E | |||
e (x+++++ E | |||
_C) e (_ @ // je te | |||
-c) e (_ | |||
-j) e (_ | |||
C) e (- | |||
e (Ce_ E | |||
eau o // bateau | |||
g) ea (s_ a // mangeas | |||
cap) e (la_ e | |||
gh) e (tAX e // spagheti | |||
j) e (a // Jean Jeanne | |||
p) ect (_ E2 // suspect | |||
_) e (CAN e // Evident | |||
_) e (L06A e // Ecran | |||
_eC) e (CA++ E // Evenement | |||
eau (++ o // bateau | |||
e (CC E | |||
cap) e (la_ E | |||
gh) e (tAX E // spagheti | |||
p) ect (_ E // suspect | |||
ect (_ Ekt // direct | |||
pi) ed (_ e // pied | |||
_art) e (++ e // arte, artefact | |||
_cl) ef (_ e // clef | |||
_cr) e (at e | |||
_) ein (K En // Einstein | |||
ein (K E~ // peindre | |||
pl) ein (_ E~n2 // plein emploi | |||
e (il E // vieille | |||
ei E // neige | |||
eoi wa // asseoir | |||
ell El // selle | |||
el (K El // celsius, caramel | |||
e (oi // asseoir | |||
el (l E // belle | |||
_f) em (me a // femme | |||
i) e (mA // remerciement, d�ploiement | |||
e (ro_ e // Cicero | |||
A) e (rA // remerciera | |||
tch) e (rX W | |||
@) em (me a // patiemment | |||
em (b A~ // décembre | |||
em (L11 A~ // décembre | |||
em (mACC A~ // emmancher | |||
em (mACAC A~ // emmagasiner | |||
em (ma E2 // emmanuel | |||
em (ma E // emmanuel | |||
em (mai A~ // emmailloter | |||
l) em (n a // solemnel | |||
il) emn Em // dilemne | |||
em (p A~ | |||
en (_ A~n2 // en | |||
en (hA A~n // enharmonique | |||
_C) en (j E~ // benjamin | |||
@@ -440,7 +473,7 @@ s_couv) en (t_ // elles couvent | |||
_hiv) er (X Er // hiver | |||
Cst) er (X Er // hamster | |||
_cart) er (X Er // carter | |||
_cutt) er (X Er // cutter | |||
_cutt) er (X Wr // cutter | |||
tain) er (X Er // container | |||
_ti) er (_ Er | |||
ack) er (K Wr | |||
@@ -467,6 +500,7 @@ s_couv) en (t_ // elles couvent | |||
Am) es (nA e // Dumesnil | |||
d) esh (A ez // Deshormeaux | |||
f) eb (vA E // Lefebvre | |||
_r) e (ss @ // ressembler | |||
_r) e (ssu e // ressusciter | |||
@@ -477,13 +511,14 @@ s_couv) en (t_ // elles couvent | |||
dg) et (_ Et // Bridget, gadget | |||
k) et (_ Et | |||
tick) et (_ E2 | |||
tick) et (_ E | |||
m) et (_ Et2 | |||
eu Y // eu | |||
eu (CX W // neuf | |||
eu (CeX W // fleuve | |||
eu (Cer_ Y // pleurer | |||
eu (i W // feuille | |||
eu (CeX Y // meule | |||
eu (reX W // demeure | |||
gu) eu (leX W // gueule | |||
@@ -494,82 +529,46 @@ gu) eu (ler Y // gueuler | |||
_) eut (_ yt2 | |||
eut (_ Yt2 | |||
_) extra (uP5 E2kstra | |||
_) extra (CP5 E2kstra | |||
eux (_ Yz2 | |||
_) extra (uP5 Ekstra | |||
_) extra (CP5 Ekstra | |||
_) eû y // eût | |||
eû Y: // jeûne | |||
ey (_ E2 // dahomey | |||
ey (C E2 // ceylan | |||
ey (_ E // dahomey | |||
ey (C E // ceylan | |||
ey Ej // asseye | |||
ez (_ ez2 // nez mangez chez | |||
g) e (A // mangeons | |||
g) eu Y // vengeur | |||
g) eu W // vengeur | |||
g) eu (re y // gageure | |||
_d) e (ch @ | |||
_r) e (ch @ // recherche | |||
e (Cl @ | |||
_l) e (xA E2 | |||
_m) e (xA E2 | |||
_l) e (CA @ | |||
_l) e (ChA @ | |||
_l) e (ClA @ // Leclerc | |||
tr) e (CA @ | |||
tr) e (ChA @ | |||
e (CC E // infect pelle mettre | |||
e (Cr @ | |||
_) e (C% e // effet, effectuer | |||
e (C_ E | |||
e (t_ E2 | |||
e (rC E | |||
es (_ z2 | |||
%C) e (xA E2 | |||
@gu) e (CA | |||
@gu) er (A r | |||
@qu) e (CA | |||
@qu) er (A r | |||
_qu) e (CA @ | |||
@L06gu) e (CA @ | |||
@L06qu) e (CA @ | |||
@C) e (CA | |||
@C) e (li @ | |||
@ch) e (li @ | |||
@C) er (A r | |||
@C) e (rion++ @ | |||
@C) e (riez++ @ | |||
@ch) e (CA | |||
@ch) er (A r | |||
L06ch) e (CA @ | |||
@L06C) e (CA @ | |||
@CL06) e (CA @ | |||
@bC) e (CA @ | |||
@ct) e (CA @ | |||
%C) e (CA++ | |||
%C) er (A++ r | |||
@C) e (xA++ E2 | |||
@c) e (v++ @ | |||
@d) e (v++ @ | |||
@C) e (CrA | |||
@ch) e (CrA | |||
@L06ch) e (CrA @ | |||
@L06C) e (CrA @ | |||
@L06C) e (rrA E | |||
@CL06) e (CrA @ | |||
%C) e (CrA++ | |||
e (ri_++ e | |||
e (ria_++ e | |||
e (ro_++ e // Cicero | |||
e (rr+++ E | |||
e @ // menue | |||
_) e (CA e | |||
_) e (xC++ E2 | |||
Cr) eam Im | |||
Cr) eam I:m | |||
Cr) eamer ImWr | |||
Cl) eaner InWr | |||
vert) e (rX W | |||
@@ -580,26 +579,23 @@ gu) eu (ler Y // gueuler | |||
// group e: English section | |||
eac _^_en | |||
C) ead _^_en // read, head | |||
eak _^_en // break, speak | |||
eal _^_en // deal | |||
ear _^_en // ear, search | |||
eas _^_en // please | |||
eave _^_en // leave | |||
ea _^_en | |||
e (CeX _^_en | |||
ed (_ _^_en | |||
ee _^_en // meeting | |||
efore (_ _^_en // before | |||
eing (_ _^_en // being, boeing | |||
eive _^_en // receive | |||
eld (_ _^_en // field | |||
el (CX _^_en // field | |||
el (sX El | |||
_) enter (_ _^_en // enter | |||
_) enhan _^_en | |||
qu) est (_ _^_en // request | |||
qu) este (X_ _^_en // requested, requester | |||
_) even (X _^_en // forever, however | |||
_) ever _^_en // forever, however | |||
_) even (K _^_en | |||
_) ever _^_en | |||
oC) ever _^_en // forever, however | |||
ew (++ _^_en | |||
_) eye _^_en | |||
@@ -636,6 +632,8 @@ gu) eu (ler Y // gueuler | |||
.group g | |||
g g | |||
g (Y Z | |||
ge (a Z | |||
ge (o Z | |||
su) gg (Y gZ // suggérer suggestif | |||
gg g // agglomérer | |||
@@ -683,6 +681,7 @@ _quatrevin) gts (_ z2 | |||
// group g: English section | |||
_) game (X _^_en | |||
girl _^_en // girl | |||
gh (K _^_en | |||
gy (_ _^_en | |||
@@ -732,7 +731,7 @@ _quatrevin) gts (_ z2 | |||
// group h: English section | |||
_) half _^_en | |||
here (_ _^_en // here | |||
_) ha (C_ _^_en | |||
.group i | |||
@@ -751,11 +750,8 @@ _quatrevin) gts (_ z2 | |||
or) ien (t iA~ // orient, orienter | |||
ot) ien (t_ jA~ // quotient | |||
i (e_ i | |||
_) i (ce@ aj // iceberg | |||
_) ill il // illégal | |||
ill (_ il // Bill | |||
_C) ill (y_ il // Billy | |||
_) il (l i // illégal | |||
aigu) ill ij // aiguille | |||
anqu) ill il // tranquille | |||
c) ill (i il | |||
@@ -776,17 +772,14 @@ _quatrevin) gts (_ z2 | |||
imm imm // immaculé | |||
im (_ im // karim | |||
im (C E~ // timbre | |||
w) in in // winrar | |||
inct (_ E~ // distinct | |||
in (h in // inhumain | |||
in (kX iN // link | |||
in (n i // innombrable | |||
in (C E~ // vingt | |||
in (_ E~ // vin | |||
ing (_ iN | |||
// ing (_ iN | |||
ing (h ing | |||
ing (s iN | |||
ing (to iN | |||
_) infra (sP5 E~fra | |||
_) inter (@@P5 E~tEr | |||
_) interr (A E~tEr | |||
@@ -810,13 +803,17 @@ _quatrevin) gts (_ z2 | |||
ibuter (X _^_en | |||
iev _^_en | |||
ife (_ _^_en | |||
igh _^_en | |||
ign (_ _^_en | |||
ill (_ _^_en // Bill | |||
C) ill (y_ _^_en // Billy | |||
ing (_ _^_en | |||
C) irt (_ _^_en | |||
iven (_ _^_en | |||
ind (X _^_en // find, mind | |||
_C) ind (erX _^_en // finder | |||
AC) ind (erX _^_en // reminder | |||
ize (X _^_en // realize | |||
_bAl) i (ze i | |||
C) ird (X _^_en // bird | |||
ize (K _^_en // realize | |||
ram_f) i (le _^_en | |||
.group ï | |||
@@ -833,6 +830,7 @@ _quatrevin) gts (_ z2 | |||
.group j | |||
j Z // adjoint joujoux | |||
je (a Z // Jean | |||
_) j' (P2v Z | |||
_) jazz dZaz | |||
_) j (obK dZ | |||
@@ -849,10 +847,11 @@ _quatrevin) gts (_ z2 | |||
ke (s_ _^_en // makes, takes | |||
ke (rX _^_en // maker | |||
ke (nX _^_en // taken | |||
AC) k (X _^_en // bank | |||
.group l | |||
l l // lit | |||
ll l // aller | |||
ll (A l // aller | |||
_) l' (P2 l | |||
au) lt // hérault | |||
uCi) l (_ // outil, fusil | |||
@@ -862,10 +861,15 @@ _quatrevin) gts (_ z2 | |||
_) lorsqu' (P7 lorsk | |||
// group l: English section | |||
ld (_ _^_en // could | |||
less (_ _^_en // noiseless | |||
%C) l (eX _^_en | |||
ff) l (eX l | |||
pp) l (eX l | |||
_) line (X _^_en | |||
_) live _^_en | |||
@) loud (_ _^_en | |||
ll (X _^_en | |||
AC) l (X _^_en | |||
.group m | |||
@@ -877,8 +881,9 @@ _quatrevin) gts (_ z2 | |||
master (_S6 mastWr | |||
// group m: English section | |||
_) mail (_ _^_en // mailer | |||
mov (ieX _^_en // move, movy | |||
m (n_ _^_en // column, autumn | |||
mov (AX _^_en // move, movy | |||
mov (ie_ _^_en // move, movy | |||
.group n | |||
@@ -894,19 +899,23 @@ _quatrevin) gts (_ z2 | |||
_) neuro (@@P5 nYro | |||
_) nvda (P4 Envedea | |||
// group n: English section | |||
_) name _^_en | |||
_re) name _^_en | |||
n (eme_ _^_en | |||
n (emes_ _^_en | |||
.group o | |||
br) oc (_ o // broc | |||
cr) oc (_ o // escroc | |||
ls) on (_ On | |||
Cst) on (_ On | |||
_) os (_ Os | |||
_) os (_++ Os | |||
_v) os (gY o | |||
s_) os (_ o | |||
x_) os (_ o | |||
o (t_ o | |||
oe (ll wa // moelleux | |||
oe (llA wa // moelleux | |||
oe (i W // oeil | |||
_) oe (C Y // oesophage | |||
_ph) oe (C e // phoetus | |||
@@ -921,8 +930,7 @@ _quatrevin) gts (_ z2 | |||
oin (_ wE~ // coin | |||
oi wa // poil | |||
oê (l wa // poêle | |||
om (b O~ // bombe | |||
om (p O~ // trompe | |||
om (L11 O~ // bombe, pompe | |||
n) om (X O~ // nom | |||
om (_ Om // www.web.com | |||
@@ -937,10 +945,6 @@ _quatrevin) gts (_ z2 | |||
_) on (z _|O~ // onze, onzième | |||
_c) on (_ O~ // no comment | |||
ps) on (_ On // Epson | |||
gt) on (_ On // Washington | |||
Cst) on (_ On | |||
ps) on (_ On | |||
_C) on (_ O~n2 // mon appui, mon histoire, mon havre | |||
alc) oo (l O // alcool | |||
@@ -969,7 +973,10 @@ _quatrevin) gts (_ z2 | |||
o (_ o // zorro allégro | |||
gr) oss os // grosse, grossir | |||
C) o (sA o // position | |||
C) o (me_ o // atome, chrome | |||
_C) o (me_ O // Rome tome | |||
o (sA o // position | |||
o (zA o // Mozilla | |||
o (CC O // poste, votre | |||
o O | |||
@@ -979,8 +986,13 @@ _quatrevin) gts (_ z2 | |||
oa (s_ oa | |||
oa (CerX _^_en | |||
oach _^_en | |||
old (er_ _^_en // folder, older | |||
oes _^_en | |||
_) of (X _^_en | |||
o (lder_ _^_en // folder, older | |||
_) o (rder_ _^_en // order | |||
C) oing (_ _^_en // going | |||
gt) on (_ _^_en | |||
Cst) on (_ _^_en | |||
oo (Ce _^_en // boomer | |||
oo (k _^_en // book, cook | |||
oo (st _^_en // booster | |||
@@ -992,7 +1004,7 @@ _quatrevin) gts (_ z2 | |||
_sC) ot _^_en // shot, slot, spot | |||
ow (e _^_en // flower, power | |||
ow (X _^_en | |||
oy (X _^_en // boy, toy | |||
_C) oy (X _^_en // boy, toy | |||
.group ô | |||
@@ -1005,11 +1017,11 @@ _quatrevin) gts (_ z2 | |||
_) para (pCP4 para | |||
_) photo (@P5 foto | |||
_) poly (@P4 poli | |||
_) post (KP4 post | |||
_) post (CP4 post | |||
_) post (ACCP4 post | |||
_) pseudo (@P6 psYdo | |||
p (p // appliquer | |||
pays pE2iz2 // pays, paysage | |||
pays pEiz2 // pays, paysage | |||
ph f // phrase | |||
m) ps (_ // temps champs | |||
@@ -1076,7 +1088,6 @@ _quatrevin) gts (_ z2 | |||
// group r: English section | |||
_) real _^_en | |||
resen _^_en | |||
rst (_ _^_en | |||
_) rule _^_en | |||
@@ -1175,13 +1186,19 @@ _cACpu) s (_ s | |||
_tou) s (_leurs_ | |||
// group s: English section | |||
CA) sh (_ _^_en // punish | |||
send (_ _^_en | |||
sh (_ _^_en | |||
sh (Ap _^_en // shop, ship | |||
sh (At _^_en // shut, shot | |||
_) side (X+++ _^_en | |||
L14) side (X+++ _^_en | |||
_) sky _^_en | |||
_) smil _^_en // smile, smiley | |||
spy _^_en | |||
_A) s (_ _^_en | |||
L13) son (_ _^_en | |||
L13) ston (_ _^_en | |||
stone (_ _^_en | |||
.group t | |||
@@ -1194,7 +1211,9 @@ _cACpu) s (_ s | |||
VCi) t (_ t2 | |||
t (_ | |||
peti) t (_ t2 | |||
_) th t // thon | |||
th (L12++ t | |||
or) th (++ t | |||
_) th (erm t | |||
ts (_S1 z2 // silent at end of word unless next word starts with a vowel | |||
C) t (_ t // compost watt soft script malttact abrupt | |||
ki) t (_ t // kit | |||
@@ -1284,13 +1303,13 @@ _cACpu) s (_ s | |||
_transA) t (_ t | |||
// group t: English section | |||
C) th (_ _^_en // month | |||
_) th (eX _^_en // the, then | |||
_) th (aX _^_en // than, that | |||
th (A _^_en // this | |||
th (K _^_en // month | |||
_) time _^_en | |||
tle (_ _^_en | |||
too _^_en | |||
ttl _^_en | |||
g) ton (_ _^_en // try, country | |||
try (_ _^_en // try, country | |||
sCar) t (_ _^_en // smart, start | |||
sCar) t (er_ _^_en // starter | |||
@@ -1299,34 +1318,30 @@ _transA) t (_ t | |||
.group u | |||
u y // cruel nuage brut | |||
ue (il W // orgueil | |||
ui yi // nuit, fuite | |||
uin (K yE~ // juin | |||
_s) u (rfX W | |||
_C) u (rfX W | |||
_bl) u (ff W | |||
_s) u (rfeX W | |||
uy (A yij | |||
C) ucci utSi // capuccino | |||
c) ueill Wj // cueillir | |||
c) ueil (_ Wj // recueil | |||
_g) ua wa | |||
ag) ua (X wa | |||
Ctig) ua (_ wa | |||
_c) ul (_ y | |||
_) ultra (P5 yltra | |||
g) u (ay u | |||
g) ueill Wj // orgueilleux | |||
haïk) u (X u | |||
C) u (bX W // hub, club | |||
C) u (gX W // bug, mug | |||
_n) u (rse W // nurse | |||
r) u (nX W // run, autorun | |||
pr) unt (_ W~ // emprunt | |||
um (_ Om // album | |||
f) um (_ W~ // parfum | |||
um (b W~ // humble | |||
um (p W~ | |||
um (L11 W~ // humble | |||
un (C W~ // emprunt lundi | |||
un (n y // tunnel | |||
CC) un (_ W~ // brun | |||
@@ -1341,10 +1356,14 @@ _transA) t (_ t | |||
uz (z W | |||
// group u: English section | |||
ual (_ _^_en // usual | |||
uch (_ _^_en // much | |||
_b) usi _^_en // business, businessman | |||
C) ui (ce _^_en // produice, juice | |||
C) ult (_ _^_en | |||
umber (_ _^_en | |||
ump (_ _^_en | |||
r) u (nX _^_en // run, autorun | |||
unch _^_en | |||
under _^_en // under, understand, thunder | |||
_C) un (_ _^_en | |||
@@ -1353,6 +1372,7 @@ _transA) t (_ t | |||
up (_ _^_en // setup | |||
urn (X _^_en // burn, turn | |||
ust (_ _^_en // just, trust | |||
uzz _^_en // buzz | |||
.group ü | |||
@@ -1378,19 +1398,19 @@ _transA) t (_ t | |||
.group w | |||
w w | |||
_) w (A _|w | |||
w (ag v // wagon | |||
wa (ve_ wE:j // wave | |||
wa (re_ wE: // hardware software | |||
w (ag++ v // wagon | |||
// group w: English section | |||
e) w (K _^_en | |||
_) wan _^_en | |||
_) w (AC _^_en | |||
_) w (ina w | |||
_) w (Ai _^_en | |||
_) w (ACo w | |||
_) we _^_en | |||
wh _^_en // why whisky when | |||
wr _^_en // write | |||
war _^_en // war | |||
wav _^_en // wave | |||
way _^_en // way, away | |||
_) wir _^_en // wire | |||
winn _^_en // winner | |||
wise _^_en | |||
with _^_en | |||
wor _^_en | |||
@@ -1432,13 +1452,19 @@ _transA) t (_ t | |||
_) yacht _^_en // yacht, yachtman | |||
_) yahoo (P5 ja'u | |||
ym (K E~ // tympan | |||
y (nn i | |||
y (nA i | |||
ym (L11 E~ // tympan | |||
X) ys (_ is | |||
yx (_ iks | |||
yn E~ // laryngite | |||
yn (K E~ // laryngite | |||
y (nn i | |||
// group y: English section | |||
_C) y (_ _^_en | |||
C) y (e_ _^_en | |||
%C) y (_ _^_en | |||
//@CAC) y (_ _^_en | |||
nC) y (_ _^_en | |||
yze _^_en | |||
.group z | |||
@@ -1466,6 +1492,7 @@ _transA) t (_ t | |||
$ dOlar | |||
° d@gre | |||
_n_) ° // n° | |||
' (C _^_en | |||
@@ -172,6 +172,29 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? | |||
फ़ f@ | |||
य़ j@ | |||
// combining vowel signs | |||
ा #X2a: | |||
ि #X1I | |||
ी #X2i: | |||
ु #X1U | |||
ू #X2u: | |||
ृ #X1rI | |||
ॄ #X1rI | |||
ॅ #X1E | |||
ॆ #X1e | |||
े #X2e: | |||
ै #X2E: | |||
?2 ै #X2aI | |||
ॉ #X1O | |||
ॊ #X1o | |||
ो #X2o: | |||
ौ #X2O: | |||
?3 ौ #X2aU | |||
ॢ #X1l- | |||
ॣ #X2l-: | |||
ॐ #X1o~m | |||
// Punctuation | |||
। dVn.d.V | |||
@@ -28,7 +28,6 @@ _9X kilEntsvEn | |||
_0C sa:z | |||
_0M1 EzER2 | |||
_1M1 EzER2 | |||
_2M1 ke:tEzER2 | |||
_0M2 millio: | |||
_1M2 EJmillio: | |||
@@ -129,15 +128,15 @@ _#-től e:tY:l $alt2 | |||
_#-tól a:to:l $alt2 | |||
_#-ig e:ig $alt2 //special date ordinal numbers for example elsejéig, negyedikéig etc. | |||
_#-éről e:R2Y:l | |||
_#-áról a:R2o:l $alt2 | |||
_#-áról a:R2o:l | |||
_#-ától a:to:l $alt2 | |||
_#-ától a:to:l | |||
_#-ről e:R2Y:l $alt2 | |||
_#-ról a:R2o:l $alt2 | |||
_#-ével e:vEl $alt2 | |||
_#-ával a:vAl $alt2 | |||
_#-éig e:ig $alt2 | |||
_#-áig a:ig $alt2 | |||
_#-ével e:vEl | |||
_#-ával a:vAl | |||
_#-éig e:ig | |||
_#-áig a:ig | |||
_#-étől e:tY:l $alt2 | |||
_#-ét e:t $alt2 | |||
_#-át a:t $alt2 | |||
@@ -168,8 +167,8 @@ _#-ához a:hoz | |||
(1-ig) elsejéig $text $alt2 | |||
(1-éről) elsejéről $text $alt2 | |||
(1-ről) elsejéről $text $alt2 | |||
(1-ével) elsejével $text $alt2 | |||
(1-éig) elsejéig $text $alt2 | |||
(1-ével) elsejével $text | |||
(1-éig) elsejéig $text | |||
(1-étől) elsejétől $text $alt2 | |||
(1-ét) elsejét $text $alt2 | |||
(1-je) elseje $text $alt2 | |||
@@ -188,6 +187,8 @@ _#-ához a:hoz | |||
(1-éhez) elsejéhez $text $alt2 | |||
(2-i) másodikai $text $alt2 | |||
(2-ig) másodikáig $text $alt2 | |||
(2-étől) másodikától $text $alt2 //this is not mistake, don't change! | |||
(2-től) másodikától $text $alt2 //this is not a mistake, don't change! | |||
(3-i) hAR2_mAdikAi $alt2 | |||
(3-ig) harmadikáig $text $alt2 | |||
(6-i) hAtodikAi $alt2 | |||
@@ -238,6 +239,7 @@ _#-ához a:hoz | |||
(2-őn) kEt:Y:n | |||
(2-n) kEt:Y:n | |||
(2-m) kEt:Y:m | |||
(2-el) kEt:Y:vEl | |||
// entries with a single digit such as (2-i) also apply to 22, 32, etc, unless $only | |||
(30-cal) hAR2mints:Al | |||
(3-al) ha:R2om:Al | |||
@@ -294,6 +296,18 @@ _20e hus | |||
(80-al) n^oltsvAn:Al | |||
(90-el) kilEntsvEn:El | |||
//Special roman number suffixes and exceptions | |||
(XVI-ig) tizEnhAtodikig //Special roman number suffix exception | |||
(II-el) kEt:Y:vEl | |||
(III-al) ha:R2om:Al | |||
(IV-el) ne:J:El | |||
(5-el) Yt:El //this exception not working, Espeak always spokening YtEl phoneme, but Yt:El phoneme is right | |||
(VI-al) hAt:Al | |||
(VII-el) he:t:El | |||
(VIII-al) n^olts:Al | |||
(IX-el) kilEnts:El | |||
(CD-ellenőrzést) tse:de:El:EnY:R2ze:St //this is not a mistake, default Espeak spokening roman number before the ellenőrzés word | |||
// These words mean that a dot after number, immediately preceding, does not mean an ordinal number | |||
január $alt | |||
február $alt | |||
@@ -346,6 +360,8 @@ tavaszi $alt | |||
nyári $alt | |||
őszi $alt | |||
téli $alt | |||
végén $alt | |||
elején $alt | |||
// accent names | |||
_lig ligAtu:R2A | |||
@@ -403,7 +419,7 @@ BAR bAR2 $allcaps | |||
(a . m .) An^n^i||m'int | |||
ún u:JnEvEzEt: $hasdot | |||
dr doktoR2 $dot | |||
dr doktoR2 $hasdot | |||
mr mistER2 $hasdot //in hungarian we not use, but lot of books contains this word. | |||
mrs misis $hasdot //In hungarian we not use, but lot of book contains this word. | |||
miss mis: $hasdot | |||
@@ -413,7 +429,7 @@ MB mEgAba:jt $allcaps | |||
OK ok $allcaps | |||
mvgyosz Emve:Je:oEs | |||
OTP o:te:pe: $allcaps | |||
id idY:SEb: $hasdot | |||
id idY:SEb: $hasdot $only | |||
ill illEtvE $hasdot | |||
ifj ifjAb: $hasdot | |||
mta $abbrev | |||
@@ -1007,6 +1023,36 @@ halt $unstressend | |||
ész $unstressend | |||
kapta $unstressend | |||
kaptak $unstressend | |||
kék $unstressend | |||
kelt $unstressend | |||
kárt $unstressend | |||
gróf $unstressend | |||
grófot $unstressend | |||
lakik $unstressend | |||
laknak $unstressend | |||
laktak $unstressend | |||
kapsz $unstressend | |||
tudta $unstressend | |||
kapnak $unstressend | |||
tért $unstressend | |||
törtek $unstressend | |||
tört $unstressend | |||
vész $unstressend | |||
park $unstressend | |||
tartja $unstressend | |||
válik $unstressend | |||
rajta $unstressend | |||
merült $unstressend | |||
zuhant $unstressend | |||
jöttek $unstressend | |||
leltem $unstressend | |||
múlva $unstressend | |||
várta $unstressend | |||
ház $unstressend | |||
állnak $unstressend | |||
idején $unstressend | |||
néznek $unstressend | |||
érezte $unstressend | |||
// word pairs | |||
@@ -1045,7 +1091,7 @@ kell $unstressend // should | |||
szabad $u+ // can (allowed) | |||
fog $u+ // going to | |||
fog $unstressend // going to | |||
fogok $u+ | |||
fogsz $u+ | |||
fogunk $u+ |
@@ -83,6 +83,9 @@ gyümöl) cs (zs tS | |||
fil) c (csiz ts | |||
szo) c (segély ts | |||
_kó) c (csomó ts | |||
árbó) c (csúcs ts | |||
árbo) c (csúcs ts | |||
fegyen) c (csoport ts | |||
.group ch | |||
anar) ch (i h | |||
@@ -208,12 +211,15 @@ menetren) dsz (erű d|s | |||
va) d (szeder d | |||
twee) d (sapk d | |||
fe) dd (hetetlen d | |||
ezre) d (segé d | |||
erő) d (szerű d | |||
csalá) d (szociol d | |||
száza) d (szemle d | |||
zöl) d (szem d | |||
ezre) d (segé d | |||
erő) d (szerű d | |||
csalá) d (szociol d | |||
száza) d (szemle d | |||
zöl) d (szem d | |||
utó) d (jelöl d | |||
cselé) ds (ég tS: | |||
föl) d (szegély d | |||
stran) d (szezon d | |||
.group dz | |||
fogó) dz (kod ts | |||
@@ -250,9 +256,11 @@ titkoló) dz z | |||
ringató) dz z | |||
mére) dz (k ts | |||
pilóta) dzs (ek dZ | |||
ezre) dz (ene d|z | |||
száza) dz (ene d|z | |||
honvé) dz (ászló d|z | |||
ezre) dz (ene d|z | |||
száza) dz (ene d|z | |||
honvé) dz (ászló d|z | |||
smarag) dz (öld d|z | |||
kapáló) dz z | |||
.group e | |||
e E | |||
@@ -261,7 +269,7 @@ honvé) dz (ászló d|z | |||
_) ehhez EhEz | |||
_) egyezség EJ:ESSe:g | |||
_) egyezségg EJ:ESSe:g: | |||
.group é | |||
é e: | |||
@@ -410,6 +418,13 @@ tizene) gy (en J: | |||
_e) gy (év J: | |||
_e) gy (órá J: | |||
_e) gy (se J | |||
je) gy (ezte J | |||
na) gy (sebes J | |||
_í) gys (e J|S | |||
na) gy (siker J | |||
huszone) gy (edik J: | |||
je) gy (ért J | |||
harmince) gy (edik J: | |||
.group h | |||
h h | |||
@@ -461,6 +476,7 @@ tizene) gy (en J: | |||
kk k: | |||
kk (C k: | |||
_) köztársaság k'Ysta:R2SASa:g | |||
_) köztársaságg k'Ysta:R2SASa:g: | |||
központ kYspont | |||
központt kYspont: | |||
központj kYsponc | |||
@@ -525,7 +541,7 @@ keresztü) l (j l | |||
_) e) lj (ár lj | |||
ha) ll (ga l | |||
_ta) lj (án lj | |||
_fé) l (jobb l | |||
_fé) l (jobb l | |||
@@ -846,6 +862,7 @@ kitöré) ssz (erű Ss | |||
nyúva) ssz s: | |||
hirdeté) ssz (erve Ss | |||
páncélo) ssz Ss | |||
hajtá) ssz (erű Ss | |||
.group sz | |||
sz s | |||
@@ -1030,7 +1047,7 @@ négyze) t (centi t | |||
á) tj (öt t|j | |||
á) tj (ön t|j | |||
á) t (süvít t | |||
bará) tj (ára c: | |||
bará) tj (ár c: //barátjára, barátjáról words need spokening c: phoneme | |||
kísérle) t (sorozat t | |||
á) t (sült t | |||
á) t (süt t | |||
@@ -1084,7 +1101,19 @@ fejeze) t (cím t | |||
pán) t (szél t | |||
boo) t (sorrend t | |||
_á) t (jöj t | |||
ú) tsz (oros t|s | |||
ú) tsz (oros t|s | |||
művele) t (sáv t | |||
_ké) t (szob t | |||
ne) t (sátor t | |||
há) tj (ár c: | |||
ker) t (szomszéd t | |||
éle) t (járadék t | |||
_á) t (sodor t | |||
par) t (sáv t | |||
tes) t (játék t | |||
ö) t (jegyű t | |||
ha) t (jegyű t | |||
hé) t (jegyű t | |||
.group ts | |||
ts (_S2 tS //general rule with word end of ts letters | |||
@@ -1171,6 +1200,7 @@ indula) tsz (ó t|s | |||
sie) tsz ts: | |||
szemé) ts (ég tS: | |||
ré) ts (ég tS: | |||
já) tsz (ok ts: | |||
.group u | |||
u u | |||
@@ -1242,7 +1272,7 @@ lefeje) z (ték s | |||
gá) z (cső z | |||
ké) z (sz zz | |||
ké) z (sz z | |||
há) z (so z | |||
@@ -108,7 +108,6 @@ _8X t'Axt@x | |||
_9X n'e:g@nt@x | |||
_0C h'OndErt | |||
_0M1 d'WyzEnt | |||
_1M1 d'WyzEnt | |||
_0M2 m'iljun | |||
_0M3 m'iljArt | |||
_0M4 b'iljun |
@@ -73,7 +73,6 @@ _8X otS'enta | |||
_9X nob'enta | |||
_0C sj'en | |||
_0M1 m'il | |||
_1M1 m'il | |||
_0M2 mi'on | |||
_dpt _kOma/ | |||
@@ -33,6 +33,20 @@ U+bcd ot.RU | |||
ஏ je: | |||
// combining vowels, precede by a click so they can be distinguished from stand-alone vowels | |||
ா #X2a:: | |||
ி #X1i | |||
ீ #X2i:: | |||
ு #X1u | |||
ூ #X2u:: | |||
ெ #X1e | |||
ே #X2e:: | |||
ை #X2aI | |||
ொ #X1o | |||
ோ #X2o:: | |||
ௌ #X2aU | |||
// speak Latin letters as English | |||
a e:j | |||
@@ -151,9 +165,7 @@ _8C ;en.n.u:t.t.Ri | |||
_9C tol.l.a:jirVttU | |||
_0M1x a:jirVm | |||
_1M1x a:jirVm | |||
_0M1 a:jirVttU | |||
_1M1 a:jirVttU | |||
_0M2x lVd.tSVm // 100,000 | |||
_1M2x orUlVd.tSVm | |||
@@ -234,6 +246,7 @@ tamil தமிழ் $text | |||
பலத்தில் $alt | |||
பலத்தின் $alt | |||
பைக்ல $alt | |||
பாவ்லா $alt | |||
(பி . ஏ) bije: | |||
@@ -242,7 +242,7 @@ | |||
அப) க (ீர்த்தி k | |||
_பால்) க (ுட k | |||
_வளை) க (ுட k | |||
மன்னார்) க (ுடி k | |||
மன்னார்) கு (டி ku2 | |||
நற்) க (ுண g | |||
_சற்) க (ுண g | |||
க (ுமார k | |||
@@ -281,6 +281,8 @@ | |||
வி) க்ட (ோரியா kt. // victoria | |||
வி) க (்ரம k | |||
ஆ) க (்ரோஷ k | |||
_கால) க (ட்ட kV | |||
_வலை) க (ாப் k | |||
//endsort | |||
@@ -388,7 +390,6 @@ | |||
ிங்) ட (ன் t.V // -ington | |||
_) ட (ாக்க t. // talkies | |||
_) டிராக்ட (ர t.ira:gt.V | |||
_) ட (யர t.V | |||
_) ட (ைம்_ t. | |||
டெலிப (ோன t.elif | |||
_) ட (ம்ப்ளர t.V | |||
@@ -404,6 +405,9 @@ | |||
_) ட (ேப t. | |||
_) டாக (்ஸி t.a:k | |||
_ல) ட்ட d.d.V# | |||
_) ட (யர் t.V | |||
_) ட (யரில t.V | |||
.group ண | |||
ண n.V | |||
@@ -684,6 +688,7 @@ _பார்வ) த (ி t | |||
ச) த (்ரு t | |||
த) த (்ரூப t | |||
பா) த (்ரூம t | |||
_கௌ) த (மி tV | |||
//endsort | |||
@@ -733,6 +738,7 @@ _பார்வ) த (ி t | |||
_) ப (கிரங்க bV | |||
_) ப (கிஷ்க bV | |||
_) ப (கீர bV | |||
_) ப (க்கெட் bV | |||
_) பக் (த bVk | |||
_) ப (ங்கம bV | |||
_) ப (ங்களா bV | |||
@@ -790,12 +796,14 @@ _பார்வ) த (ி t | |||
_) ப (லூன bV | |||
_) ப (வாணி bV | |||
_) ப (வானி bV | |||
_) பவுண்ட (ன faUn.t.V | |||
_) ப (வ்ய bV | |||
_) ப (ஸ bV | |||
_) ப (ாகங்க b | |||
_) ப (ாகத b | |||
_) ப (ாகம b | |||
_) ப (ாக்கிய b | |||
_) ப (ாங்க் b | |||
_) ப (ாசு b | |||
_) ப (ாசுர p | |||
_) ப (ாடி_பில்டிங் b | |||
@@ -1062,6 +1070,8 @@ _முகத்தின்_) ப (ாவ b | |||
மன) ப்பி (ரமை bb | |||
துர்) ப்ப (ோதனை bb | |||
கம்) ப்யூட (ர pjU:t.V | |||
மென்) ப (ொருள் p | |||
வன்) ப (ொருள் p | |||
//endsort | |||
// If ப+ appearing in the middle of a word is followed by ட+ |
@@ -113,7 +113,6 @@ _9X doksan | |||
_0C jyz | |||
_2C 'icijyz | |||
_0M1 bIn | |||
_1M1 bIn | |||
_0M2 miljon | |||
_0M3 miljar | |||
_dpt _viRg,Yl_| |
@@ -327,4 +327,5 @@ | |||
.group | |||
$ dolar | |||
' (Pb // split a word at ' and translate the first part separately. | |||
ə E // used in Aberbaijan | |||
ä E |
@@ -1,4 +1,4 @@ | |||
64 phoneme tables | |||
65 phoneme tables | |||
new total | |||
base 107 107 | |||
consonants 9 115 | |||
@@ -17,17 +17,17 @@ consonants 9 115 | |||
jbo 2 114 | |||
nci 3 123 | |||
fi 40 133 | |||
fr 55 137 | |||
fr-ca 11 137 | |||
hi 58 149 | |||
ta 20 151 | |||
fr 58 140 | |||
fr-ca 11 140 | |||
hi 59 150 | |||
ta 21 153 | |||
hu 24 121 | |||
lv 29 125 | |||
nl 24 125 | |||
pl 20 118 | |||
sk 28 133 | |||
cs 6 133 | |||
hr 26 138 | |||
hr 25 138 | |||
mk 3 139 | |||
sr 14 138 | |||
it 18 126 | |||
@@ -55,15 +55,16 @@ consonants 9 115 | |||
hy 23 117 | |||
da 24 120 | |||
rw 15 130 | |||
ml 13 150 | |||
ne 18 156 | |||
pa 14 150 | |||
ml 13 151 | |||
ne 18 157 | |||
pa 14 151 | |||
prs 8 111 | |||
sl 7 133 | |||
gd 6 107 | |||
bg 10 119 | |||
nso 8 107 | |||
ht 11 137 | |||
ht 11 140 | |||
az 10 127 | |||
Data file Used by | |||
b/b [b] base | |||
@@ -341,8 +342,8 @@ l/l_ [l/] base | |||
[l/] fr | |||
l/l_@ [l/3] base | |||
[l/] fr | |||
l/l@ [l#] base | |||
[€¦] base | |||
l/l@ [h&w] base | |||
[l#] base | |||
[l] fr | |||
[l/2] fr | |||
l/L1_aL [l/] base | |||
@@ -367,14 +368,14 @@ l/L2_oL [l/2] base | |||
l/L2_uL [l/2] base | |||
l/l_3 [l/] de | |||
l/l_4 [ll] sq | |||
l/la [l#] base | |||
[€¦] base | |||
l/la [h&w] base | |||
[l#] base | |||
[l] fr | |||
[l/2] fr | |||
l/l_a [l/3] base | |||
[l/] fr | |||
l/le [l#] base | |||
[€¦] base | |||
l/le [h&w] base | |||
[l#] base | |||
[l] fr | |||
[l/2] fr | |||
l/l_e [l/3] base | |||
@@ -383,8 +384,8 @@ l/L_eL_af [&] af | |||
[&:] af | |||
l/l_front [L] sq | |||
l/l_front_ [l/4] sq | |||
l/li [l#] base | |||
[€¦] base | |||
l/li [h&w] base | |||
[l#] base | |||
[l] fr | |||
[l/2] fr | |||
[l] zh | |||
@@ -395,15 +396,15 @@ ll/ll [L] bg | |||
ll/_ll [L] bg | |||
l/l_long [l] base | |||
[l] fr | |||
l/lo [l#] base | |||
[€¦] base | |||
l/lo [h&w] base | |||
[l#] base | |||
[l] fr | |||
[l/2] fr | |||
l/l_o [l/3] base | |||
[l/] fr | |||
l^/l_rfx [l.] base | |||
l/lu [l#] base | |||
[€¦] base | |||
l/lu [h&w] base | |||
[l#] base | |||
[l] fr | |||
[l/2] fr | |||
l/l_u [l/3] base | |||
@@ -731,6 +732,7 @@ ustop/p_asp [ph] consonants | |||
[bh] hi | |||
[ph] zh | |||
[p#] hy | |||
ustop/percus02 [#X2] hi | |||
ustop/percus10 [#X1] base | |||
ustop/pl [p] base | |||
[p-] consonants | |||
@@ -834,6 +836,7 @@ vdiph/0i [OI] pt | |||
vdiph/0i_2 [OI] en-sc | |||
[OI] en-wi | |||
[AI] no | |||
vdiph2/8@ [U@] en | |||
vdiph2/e@ [3:] en-sc | |||
[e@] en-sc | |||
[e@] en-wi | |||
@@ -1047,8 +1050,7 @@ vdiph/@u [u:] en-wm | |||
[@U] vi | |||
[@:U] vi | |||
vdiph/@u_2 [oU] en-rp | |||
vdiph/@u_3 [o3] fr | |||
[@U] ro | |||
vdiph/@u_3 [@U] ro | |||
vdiph/@u_en [oU] en | |||
[@U] id | |||
vdiph/ui [uI] base2 | |||
@@ -1202,6 +1204,7 @@ vowel/& [a] en-rp | |||
[&:] lv | |||
[&] sv | |||
[&#] da | |||
[&] az | |||
vowel/0 [0] en | |||
[O] hi | |||
[O] pt | |||
@@ -1238,6 +1241,7 @@ vowel/@_4 [@] en-us | |||
[@] no | |||
vowel/@_6 [@] en | |||
[W] fr | |||
[W2] fr | |||
vowel/8 [o-] zh | |||
vowel/8_2 [U] en-us | |||
[8] sv | |||
@@ -1343,6 +1347,7 @@ vowel/aa [A] fr-ca | |||
[A:] no | |||
[aa] zhy | |||
[a] hy | |||
[a] az | |||
vowel/aa# [O] en-us | |||
[0] en-wi | |||
[a2] fi | |||
@@ -1422,7 +1427,6 @@ vowel/e_5 [i] en-sc | |||
vowel/e_6 [e] ht | |||
vowel/e_8 [E:] de | |||
[e] fr | |||
vowel/e_9 [E2] fr | |||
vowel/ee [E] en-n | |||
[E] sv | |||
vowel/e_e [E] en-sc | |||
@@ -1497,6 +1501,7 @@ vowel/e_mid2 [E] af | |||
[E] da | |||
[e] bg | |||
[e] nso | |||
[e] az | |||
vowel/@_fnt [@] en-wi | |||
[@2] en-wi | |||
[@2] hr | |||
@@ -1535,7 +1540,6 @@ vowel/i_2 [i2] de | |||
[i:] la | |||
[i:] sv | |||
vowel/i_3 [i] af | |||
[I] fr | |||
[i:] sk | |||
vowel/i_4 [i] fi | |||
[i] hu | |||
@@ -1605,6 +1609,7 @@ vowel/ii_4 [I2] en | |||
vowel/ii_5 [I] la | |||
[i] zh | |||
[i] bg | |||
[i] az | |||
vowel/ii_6 [I] en-wm | |||
[I] en-wi | |||
[I2] en-wi | |||
@@ -1683,10 +1688,12 @@ vowel/oe [W] af | |||
vowel/oe_2 [W] no | |||
vowel/oe_4 [W] sv | |||
vowel/o_mid [U@] en-rp | |||
[O] fr | |||
[o] hu | |||
[o] tr | |||
[o] ne | |||
[o] bg | |||
[o] az | |||
vowel/o_mid2 [O] fr | |||
[O] ht | |||
vowel/oo [o] base | |||
@@ -1750,7 +1757,6 @@ vowelr/o_r [o@] en-sc | |||
vowelr/r-voc [r-] base | |||
[r-] sk | |||
[r:] sk | |||
[r-] hr | |||
vowelr/V3_r [VR] en | |||
[3] en-sc | |||
[@r] zh | |||
@@ -1784,15 +1790,18 @@ vowel/u#_4 [U] en-sc | |||
[u:] en-sc | |||
vowel/u_5 [u] sw | |||
[u] nso | |||
[u] az | |||
vowel/u#_5 [y] vi | |||
vowel/u_6 [u:] en-rp | |||
[u] ta | |||
[u2] ta | |||
[u:] ta | |||
[U] pt-pt | |||
[u] pt-pt | |||
[u] ku | |||
vowel/u_7 [u] vi | |||
vowel/u#_7 [@] tr | |||
[@] az | |||
vowel/u_bck [u] base2 | |||
[U] cy | |||
[u] fi | |||
@@ -1849,6 +1858,7 @@ vowel/V [3] en-sc | |||
[@] bg | |||
vowel/V_2 [V] en | |||
[a] af | |||
[V] fr | |||
[V] ru | |||
[V#] ru | |||
[V] ku | |||
@@ -1873,6 +1883,7 @@ vowel/y [y] base2 | |||
[yu] zhy | |||
[y] sq | |||
[y] da | |||
[y] az | |||
vowel/y# [Y] base2 | |||
[3:] en-wm | |||
[Y:] de | |||
@@ -1888,6 +1899,7 @@ vowel/y_2 [y:] la | |||
[y] zh | |||
vowel/y#_2 [Y] hu | |||
[Y:] sv | |||
[W] az | |||
vowel/y_3 [y] af | |||
vowel/y#_3 [W] is | |||
[W:] is |
@@ -99,7 +99,7 @@ tune c3 | |||
prehead 46 57 | |||
headenv fall 16 | |||
head 4 80 30 -5 -15 | |||
headextend 25 63 38 13 0 | |||
headextend 0 63 38 13 0 | |||
nucleus0 fall-rise 75 40 | |||
endtune | |||
@@ -122,3 +122,4 @@ headextend 16 82 50 32 16 | |||
nucleus0 fall 92 8 | |||
nucleus fall 92 80 76 8 | |||
endtune | |||
@@ -25,6 +25,7 @@ endphoneme | |||
phoneme a // short A | |||
vowel starttype #a endtype #a | |||
ipa ɐ | |||
length 140 | |||
FMT(vowel/V_2) | |||
endphoneme | |||
@@ -38,6 +39,7 @@ endphoneme | |||
phoneme I // short I, Schwa | |||
vowel starttype #@ endtype #@ | |||
ipa ə | |||
length 140 | |||
IF nextPh(r/) THEN | |||
Length 190 | |||
@@ -106,6 +108,7 @@ endphoneme | |||
phoneme e@ // long E | |||
vowel starttype #i endtype #@ | |||
ipa iə | |||
length 230 | |||
FMT(vdiph/i@_2) | |||
endphoneme | |||
@@ -121,6 +124,7 @@ endphoneme | |||
phoneme o@ // long O | |||
vowel starttype #u endtype #@ | |||
ipa ʊə | |||
length 250 | |||
FMT(vdiph2/o@) | |||
endphoneme | |||
@@ -165,6 +169,7 @@ endphoneme | |||
phoneme eI | |||
vowel starttype #e endtype #i | |||
ipa ɛɪ | |||
length 170 | |||
IfNextVowelAppend(;) | |||
FMT(vdiph/@i_2) | |||
@@ -181,6 +186,7 @@ endphoneme | |||
phoneme oI | |||
vowel starttype #o endtype #i | |||
ipa ʊɪ | |||
length 290 | |||
IfNextVowelAppend(;) | |||
FMT(vdiph/oi_2) | |||
@@ -325,4 +331,3 @@ phoneme c // used in -tjie | |||
WAV(ustop/ki) | |||
endphoneme | |||
@@ -12,6 +12,7 @@ endphoneme | |||
phoneme a# | |||
vowel starttype #@ endtype #@ | |||
ipa ɐ | |||
unstressed | |||
length 170 | |||
FMT(vowel/a#_3) |
@@ -230,13 +230,6 @@ phoneme x | |||
endphoneme | |||
phoneme r- // syllabic r | |||
vowel starttype #@ endtype #@ | |||
length 240 | |||
FMT(vowelr/r-voc) | |||
endphoneme | |||
phoneme R | |||
import_phoneme base/R | |||
endphoneme | |||
@@ -245,7 +238,7 @@ endphoneme | |||
phoneme r* | |||
vowel nonsyllabic | |||
unstressed | |||
ipa r | |||
ipa NULL | |||
length 50 | |||
starttype #@ endtype #@ | |||
AppendPhoneme(*) |
@@ -204,6 +204,7 @@ endphoneme | |||
phoneme i // optional variant of [I] for end of words | |||
vowel starttype #i endtype #i | |||
ipa ɪ | |||
length 140 | |||
IfNextVowelAppend(;) | |||
FMT(vowel/ii_en) | |||
@@ -334,7 +335,7 @@ endphoneme | |||
phoneme aI | |||
vowel starttype #a endtype #i | |||
length 240 | |||
IF nextPh(#a) OR nextPh(#o) THEN | |||
IF nextPh(#a) THEN | |||
AppendPhoneme(;) | |||
ENDIF | |||
FMT(vdiph/ai_2) | |||
@@ -383,6 +384,9 @@ phoneme U@ | |||
vowel starttype #u endtype #@ | |||
length 200 | |||
IfNextVowelAppend(r-) | |||
IF thisPh(isUnstressed) THEN | |||
FMT(vdiph2/8@) | |||
ENDIF | |||
FMT(vdiph2/uu@) | |||
endphoneme | |||
@@ -1,7 +1,7 @@ | |||
//==================================================== | |||
// French | |||
//==================================================== | |||
// Updated 2010-07-16 Michel Such <[email protected]> | |||
// Updated 2010-07-25 Michel Such <[email protected]> | |||
phoneme #l virtual | |||
// Used for l and l/ | |||
@@ -24,7 +24,7 @@ endphoneme | |||
procedure pre_r | |||
IF prevPh(y) THEN | |||
VowelEnding(vwl_fr/y2r) | |||
ELIF prevPh(E) OR prevPh(E2) THEN | |||
ELIF prevPh(E) THEN | |||
VowelEnding(vwl_fr/e_2r) | |||
ELIF prevPh(A~) THEN | |||
VowelEnding(vwl_fr/aa2r) | |||
@@ -47,7 +47,7 @@ endprocedure | |||
procedure post_r | |||
IF nextPh(E) OR nextPh(E2) THEN | |||
IF nextPh(E) THEN | |||
VowelStart(vwl_fr/re2) | |||
ELIF nextPh(W) THEN | |||
VowelStart(vwl_fr/r@2) | |||
@@ -285,6 +285,11 @@ phoneme a | |||
endphoneme | |||
phoneme a# // For english words | |||
import_phoneme en/a# | |||
endphoneme | |||
phoneme e | |||
vowel starttype #e endtype #e | |||
@@ -313,14 +318,6 @@ phoneme E | |||
endphoneme | |||
phoneme E2 // Between e and E | |||
vowel starttype #e endtype #e | |||
length 170 | |||
FMT(vowel/e_9) | |||
endphoneme | |||
phoneme i | |||
vowel starttype #i endtype #i | |||
palatal | |||
@@ -347,15 +344,13 @@ phoneme i | |||
endphoneme | |||
phoneme I // longer than i | |||
vowel starttype #i endtype #i | |||
palatal | |||
length 240 | |||
ipa i | |||
phoneme I // For english words | |||
import_phoneme en/I | |||
endphoneme | |||
IfNextVowelAppend(;) | |||
FMT(vowel/i_3) | |||
phoneme I2 // For english words | |||
import_phoneme en/I2 | |||
endphoneme | |||
@@ -396,18 +391,22 @@ phoneme O | |||
vowel starttype #o endtype #o | |||
length 170 | |||
IF nextPhW(z) OR nextPhW(z2) OR nextPhW(z3) THEN | |||
ChangePhoneme(o) | |||
IF thisPh(isFinalVowel) THEN | |||
FMT(vowel/o_mid2) | |||
ENDIF | |||
IF nextPhW(#l) AND next2Ph(isNotVowel) THEN | |||
FMT(vowel/o_mid2) | |||
ENDIF | |||
IF nextPhW(#r) AND next2Ph(isNotVowel) THEN | |||
FMT(vowel/o_mid2) | |||
ENDIF | |||
FMT(vowel/o_mid2) | |||
FMT(vowel/o_mid) | |||
endphoneme | |||
phoneme o3 // almost like english oU | |||
vowel starttype #@ endtype #u | |||
length 220 | |||
FMT(vdiph/@u_3) | |||
phoneme oU | |||
import_phoneme en/oU | |||
endphoneme | |||
@@ -451,6 +450,15 @@ phoneme W | |||
endphoneme | |||
phoneme W2 // For english words | |||
vowel starttype #@ endtype #@ | |||
length 100 | |||
unstressed | |||
FMT(vowel/@_6) | |||
endphoneme | |||
phoneme Y | |||
vowel starttype #@ endtype #@ | |||
length 170 | |||
@@ -714,14 +722,14 @@ phoneme p | |||
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 | |||
IF nextPh(isPause2) THEN | |||
WAV(ustop/p_, 70) | |||
WAV(ustop/p_, 80) | |||
ELIF nextPh(@-) THEN | |||
WAV(ustop/p_unasp, 60) | |||
WAV(ustop/p_unasp, 70) | |||
ELIF nextPh(#l) THEN | |||
WAV(ustop/pl, 30) | |||
WAV(ustop/pl, 40) | |||
ELIF nextPh(#r) THEN | |||
length 40 | |||
WAV(ustop/p_, 60) | |||
WAV(ustop/p_, 70) | |||
ENDIF | |||
WAV(ustop/p_unasp_, 90) | |||
endphoneme | |||
@@ -849,6 +857,14 @@ phoneme v | |||
FMT(voc/v) addWav(vocw/v, 60) | |||
endphoneme | |||
phoneme V // For english words | |||
vowel starttype #a endtype #@ | |||
length 140 | |||
ChangeIfDiminished(@) | |||
FMT(vowel/V_2) | |||
endphoneme | |||
phoneme z | |||
vcd alv frc sibilant | |||
@@ -895,4 +911,82 @@ phoneme z3 // "six" and "dix". [s] before pause, [z] before vowel, else [] | |||
endphoneme | |||
// translate from English to French phonemes | |||
equivalents en | |||
remove_stress | |||
0 O | |||
3 W r | |||
3: W : r | |||
@ W | |||
@- W | |||
@2 W | |||
@5 W | |||
@L W l | |||
a a | |||
a# a# | |||
A: a : | |||
A@ a r | |||
aa a : | |||
aI a j | |||
aI@ a j W2 r | |||
aU a w | |||
aU@ a w @ | |||
A~ A~ | |||
E E | |||
e: e | |||
e@ E : r | |||
eI E : j/ | |||
i i | |||
I I | |||
I2 I2 | |||
i: i : | |||
i@ i r | |||
i@3 i : r | |||
O O | |||
O: O : | |||
o: o | |||
O@ O r | |||
o@ O r | |||
OI O j | |||
oU oU | |||
O~ O~ | |||
U u | |||
u: u: | |||
U@ u r | |||
V V | |||
IR i r | |||
VR W r | |||
b b | |||
C C | |||
d d | |||
D D | |||
dZ dZ | |||
f f | |||
g g | |||
h h | |||
j j | |||
k k | |||
l l | |||
l# l# | |||
m m | |||
n n | |||
N N | |||
n^ n^ | |||
p p | |||
Q Q | |||
r r | |||
r- r | |||
s s | |||
S S | |||
t t | |||
T T | |||
t2 t | |||
tS tS | |||
v v | |||
w w/ | |||
x x | |||
z z | |||
Z Z | |||
endphoneme | |||
@@ -110,7 +110,7 @@ endphoneme | |||
phoneme A // reduces to [a] if not stressed | |||
vowel starttype #a endtype #a | |||
length 250 | |||
ChangeIfNotStressed(a) | |||
ChangeIfUnstressed(a) | |||
FMT(vowel/aa_6) | |||
endphoneme | |||
@@ -377,3 +377,81 @@ phoneme UR | |||
endphoneme | |||
// translate from English to German phonemes | |||
equivalents en | |||
0 O | |||
3 3 | |||
3: W : | |||
@ @ | |||
@- @- | |||
@2 @ | |||
@5 @ | |||
@L U l | |||
a a | |||
a# a | |||
A: A: | |||
A@ A: r | |||
aa a | |||
aI aI | |||
aI@ aI 3 | |||
aU aU | |||
aU@ aU 3 | |||
A~ O n | |||
E E | |||
e: e: | |||
e@ E: r | |||
eI e: | |||
i I | |||
I I | |||
I2 I | |||
i: i: | |||
i@ i: 3 | |||
i@3 i: r | |||
O O | |||
O: O : | |||
o: o: | |||
O@ O : r | |||
o@ O : r | |||
OI OY | |||
oU o: | |||
O~ O n | |||
U U | |||
u: u: | |||
U@ U r | |||
V W | |||
IR I r | |||
VR W r | |||
b b | |||
C C | |||
d d | |||
D D | |||
dZ dZ | |||
f f | |||
g g | |||
h h | |||
j j | |||
k k | |||
l l | |||
l# l# | |||
m m | |||
n n | |||
N N | |||
n^ n^ | |||
p p | |||
Q Q | |||
r r | |||
r- r | |||
s s | |||
S S | |||
t t | |||
T T | |||
t2 t | |||
tS tS | |||
v v | |||
w w | |||
x x | |||
z z | |||
Z Z | |||
endphoneme |
@@ -477,5 +477,12 @@ phoneme gh | |||
FMT(g2/xg) addWav(ustop/k_asp, 70) | |||
endphoneme | |||
//================ | |||
phoneme #X2 // click, use for indicating combining long vowels | |||
vls alv frc sibilant | |||
lengthmod 3 | |||
WAV(ustop/percus02) | |||
endphoneme | |||
@@ -102,14 +102,14 @@ endphoneme | |||
phoneme r- | |||
phoneme r- // syllabic r | |||
vowel starttype #@ endtype #@ | |||
ipa rU+0329 | |||
length 220 | |||
FMT(vowelr/r-voc) | |||
endphoneme | |||
phoneme r: | |||
phoneme r: // syllabic r | |||
vowel starttype #@ endtype #@ | |||
ipa rU+0329ː | |||
length 300 |
@@ -53,6 +53,7 @@ endphoneme | |||
phoneme E- | |||
vowel starttype #@ endtype #@ | |||
ipa ə | |||
unstressed | |||
length 140 | |||
FMT(vowel/ee#_2) | |||
@@ -74,6 +75,7 @@ endphoneme | |||
phoneme u- | |||
vowel starttype #u endtype #u | |||
ipa ʉ | |||
length 200 | |||
FMT(vowel/u#_2) | |||
endphoneme |
@@ -85,8 +85,15 @@ phoneme u | |||
FMT(vowel/u_6) | |||
endphoneme | |||
phoneme u2 // as [u] but don't reduce | |||
vowel starttype #u endtype #u | |||
length 110 | |||
FMT(vowel/u_6) | |||
endphoneme | |||
phoneme U | |||
vowel starttype #u endtype #u | |||
ipa ʉ | |||
length 110 | |||
FMT(vowel/u#_3) | |||
endphoneme | |||
@@ -103,6 +110,7 @@ endphoneme | |||
phoneme U: | |||
vowel starttype #u endtype #u | |||
ipa ʉ | |||
length 240 | |||
FMT(vowel/u#_3) | |||
endphoneme |
@@ -84,14 +84,17 @@ phoneme u | |||
FMT(vowel/u_2) | |||
endphoneme | |||
phoneme U | |||
vowel starttype #u endtype #u | |||
length 150 | |||
FMT(vowel/uu_2) | |||
endphoneme | |||
phoneme @ // previously u# | |||
phoneme @ | |||
vowel starttype #@ endtype #@ | |||
ipa ɯ | |||
length 150 | |||
FMT(vowel/u#_7) | |||
endphoneme |
@@ -198,6 +198,7 @@ endphoneme | |||
phoneme m- | |||
vowel starttype #@ endtype #@ | |||
ipa mU+0329 | |||
length 170 | |||
IF thisPh(isWordStart) THEN | |||
@@ -211,6 +212,7 @@ endphoneme | |||
phoneme n- | |||
vowel starttype #@ endtype #@ | |||
ipa nU+0329 | |||
length 170 | |||
IF thisPh(isWordStart) THEN | |||
@@ -224,6 +226,7 @@ endphoneme | |||
phoneme N- | |||
vowel starttype #e endtype #e | |||
ipa ŋU+0329 | |||
length 190 | |||
FMT(nn/nn-syl) | |||
endphoneme | |||
@@ -1811,3 +1814,6 @@ include ph_northern-sotho | |||
phonemetable ht fr | |||
include ph_haitian | |||
phonemetable az tr | |||
include ph_azerbaijani |
@@ -288,7 +288,7 @@ void swap_phonindex (const char *infile, const char *outfile) | |||
{//========================================================== | |||
FILE *in, *out; | |||
char buf_4[4]; | |||
unsigned int val; | |||
unsigned short val; | |||
in = fopen (infile, "rb"); | |||
if (in == NULL) { | |||
@@ -324,7 +324,7 @@ void swap_phonindex (const char *infile, const char *outfile) | |||
void swap_phontab (const char *infile, const char *outfile) | |||
{//======================================================== | |||
FILE *in, *out; | |||
char buf_4[4]; | |||
char buf_8[8]; | |||
int i, n_phoneme_tables; | |||
in = fopen (infile, "rb"); | |||
@@ -339,18 +339,18 @@ void swap_phontab (const char *infile, const char *outfile) | |||
exit (1); | |||
} | |||
fread (buf_4, 4, 1, in); | |||
fwrite (buf_4, 4, 1, out); | |||
n_phoneme_tables = buf_4[0]; | |||
fread (buf_8, 4, 1, in); | |||
fwrite (buf_8, 4, 1, out); | |||
n_phoneme_tables = buf_8[0]; | |||
for (i = 0; i < n_phoneme_tables; i++) { | |||
int n_phonemes, j; | |||
char tab_name[N_PHONEME_TAB_NAME]; | |||
fread (buf_4, 4, 1, in); | |||
fwrite (buf_4, 4, 1, out); | |||
fread (buf_8, 8, 1, in); | |||
fwrite (buf_8, 8, 1, out); | |||
n_phonemes = buf_4[0]; | |||
n_phonemes = buf_8[0]; | |||
fread (tab_name, N_PHONEME_TAB_NAME, 1, in); | |||
fwrite (tab_name, N_PHONEME_TAB_NAME, 1, out); |
@@ -149,6 +149,7 @@ enum { | |||
kPROCEDURE, | |||
kENDPHONEME, | |||
kENDPROCEDURE, | |||
kEQUIVALENTS, | |||
kPHONEMENUMBER, | |||
kPHONEMETABLE, | |||
kINCLUDE, | |||
@@ -243,6 +244,7 @@ static keywtab_t keywords[] = { | |||
{"procedure", tSTATEMENT, kPROCEDURE}, | |||
{"endphoneme", tSTATEMENT, kENDPHONEME}, | |||
{"endprocedure", tSTATEMENT, kENDPROCEDURE}, | |||
{"equivalents", tSTATEMENT, kEQUIVALENTS}, | |||
{"import_phoneme", tSTATEMENT, kIMPORT_PH}, | |||
{"stress_type",tSTATEMENT, kSTRESSTYPE}, | |||
{"starttype", tSTATEMENT, kSTARTTYPE}, | |||
@@ -363,6 +365,10 @@ static PHONEME_TAB *phoneme_tab2; | |||
static int phoneme_flags; | |||
static int place_articulation; | |||
static char *p_equivalence; | |||
static char equivalence_buf[20000]; | |||
#define N_PROCS 50 | |||
int n_procs; | |||
int proc_addr[N_PROCS]; | |||
@@ -2479,6 +2485,23 @@ static int CompileSwitch(int type) | |||
static PHONEME_TAB_LIST *FindPhonemeTable(const char *string) | |||
{//========================================================== | |||
int ix; | |||
for(ix=0; ix<n_phoneme_tabs; ix++) | |||
{ | |||
if(strcmp(phoneme_tab_list2[ix].name, string) == 0) | |||
{ | |||
return(&phoneme_tab_list2[ix]); | |||
} | |||
} | |||
error("Unknown phoneme table: '%s'",string); | |||
return(NULL); | |||
} // end of FindPhonemeTable | |||
static PHONEME_TAB *FindPhoneme(const char *string) | |||
{//================================================ | |||
PHONEME_TAB_LIST *phtab = NULL; | |||
@@ -2487,7 +2510,7 @@ static PHONEME_TAB *FindPhoneme(const char *string) | |||
char *phname; | |||
char buf[200]; | |||
// is this the name of a phoneme which is ijn scope | |||
// is this the name of a phoneme which is in scope | |||
if((strlen(string) <= 4) && ((ix = LookupPhoneme(string,0)) != -1)) | |||
{ | |||
return(&phoneme_tab2[ix]); | |||
@@ -2500,17 +2523,9 @@ static PHONEME_TAB *FindPhoneme(const char *string) | |||
*phname++ = 0; | |||
} | |||
for(ix=0; ix<n_phoneme_tabs; ix++) | |||
{ | |||
if(strcmp(phoneme_tab_list2[ix].name,buf) == 0) | |||
{ | |||
phtab = &phoneme_tab_list2[ix]; | |||
break; | |||
} | |||
} | |||
phtab = FindPhonemeTable(buf); | |||
if(phtab == NULL) | |||
{ | |||
error("Unknown phoneme table: '%s'",buf); | |||
return(NULL); // phoneme table not found | |||
} | |||
@@ -3025,6 +3040,7 @@ static void WritePhonemeTables() | |||
fputc(phoneme_tab_list2[ix].includes,f_phtab); | |||
fputc(0,f_phtab); | |||
fputc(0,f_phtab); | |||
Write4Bytes(f_phtab, phoneme_tab_list2[ix].equivalence_tables); // byte index into phondata for equivalence tables | |||
fwrite(phoneme_tab_list2[ix].name,1,N_PHONEME_TAB_NAME,f_phtab); | |||
@@ -3047,6 +3063,8 @@ static void WritePhonemeTables() | |||
static void EndPhonemeTable() | |||
{//========================== | |||
int ix; | |||
int *pw; | |||
int length; | |||
if(n_phoneme_tabs == 0) | |||
return; | |||
@@ -3061,10 +3079,24 @@ static void EndPhonemeTable() | |||
fprintf(f_errors,"%3d: Phoneme [%s] not declared, referenced at line %d\n",linenum, | |||
WordToString(phoneme_tab2[ix].mnemonic),int(phoneme_tab2[ix].program)); | |||
error_count++; | |||
phoneme_tab2[ix].type = 0; // prevent the error message repeating | |||
} | |||
} | |||
n_phcodes_list[n_phoneme_tabs-1] = n_phcodes; | |||
if((length = p_equivalence - equivalence_buf) > 0) | |||
{ | |||
// terminate the list of phoneme equivalence tables | |||
pw = (int *)p_equivalence; | |||
pw[0] = 0; | |||
// write the equivalence data into phondata, and remember it's address | |||
ix = ftell(f_phdata); | |||
fprintf(f_phcontents,"Q 0x%.5x %s\n", ix, phoneme_tab_list2[n_phoneme_tabs-1].name); | |||
phoneme_tab_list2[n_phoneme_tabs-1].equivalence_tables = ix; | |||
fwrite(equivalence_buf, length+4, 1, f_phdata); | |||
} | |||
} | |||
@@ -3092,11 +3124,12 @@ static void StartPhonemeTable(const char *name) | |||
if(gui_flag) | |||
progress->Update(n_phoneme_tabs); | |||
memset(&phoneme_tab_list2[n_phoneme_tabs], 0, sizeof(PHONEME_TAB_LIST)); | |||
phoneme_tab_list2[n_phoneme_tabs].phoneme_tab_ptr = phoneme_tab2 = p; | |||
memset(phoneme_tab_list2[n_phoneme_tabs].name, 0, N_PHONEME_TAB_NAME); | |||
strncpy0(phoneme_tab_list2[n_phoneme_tabs].name, name, N_PHONEME_TAB_NAME); | |||
n_phcodes = 1; | |||
phoneme_tab_list2[n_phoneme_tabs].includes = 0; | |||
p_equivalence = equivalence_buf; | |||
if(n_phoneme_tabs > 0) | |||
{ | |||
@@ -3131,6 +3164,111 @@ static void StartPhonemeTable(const char *name) | |||
} // end of StartPhonemeTable | |||
static void CompileEquivalents() | |||
{//============================= | |||
// a list of phonemes in another language and the equivalent phoneme strings in this language | |||
int ix; | |||
int n_names; | |||
int n_bytes; | |||
int foreign_phoneme; | |||
int foreign_error = 0; | |||
int remove_stress = 0; | |||
char *p_start; | |||
char *p; | |||
int foreign_table; | |||
char foreign_table_name[40]; | |||
char line_buf[80]; | |||
char names[6][80]; | |||
char phcode[7]; | |||
char save_voice_name[80]; | |||
NextItem(tSTRING); | |||
strcpy(foreign_table_name, item_string); | |||
strcpy(save_voice_name,voice_name2); | |||
if((foreign_table = SelectPhonemeTableName(foreign_table_name)) < 0) | |||
{ | |||
error("Unknown phoneme table '%s'", foreign_table_name); | |||
foreign_error = 1; | |||
foreign_phoneme = 0; | |||
} | |||
p_start = p_equivalence; | |||
p_equivalence += 8; | |||
p_start[0] = foreign_table; | |||
linenum--; | |||
while(!feof(f_in)) | |||
{ | |||
linenum++; | |||
if(fgets(line_buf, sizeof(line_buf), f_in) == NULL) | |||
break; | |||
if((p = strstr(line_buf,"//")) != NULL) | |||
*p = 0; | |||
for(ix=0; ix<6; ix++) | |||
names[ix][0] = 0; | |||
n_names = sscanf(line_buf,"%s %s %s %s %s %s",names[0],names[1],names[2],names[3],names[4],names[5]); | |||
if(n_names < 1) | |||
continue; | |||
if(strcmp(names[0],"endphoneme") == 0) | |||
break; | |||
if(strcmp(names[0],"remove_stress") == 0) | |||
{ | |||
remove_stress = 1; | |||
continue; | |||
} | |||
if(p_equivalence > &equivalence_buf[sizeof(equivalence_buf) - 16]) | |||
{ | |||
error("'equivalents' tables are too large",NULL); | |||
break; | |||
} | |||
if(foreign_error == 0) | |||
{ | |||
phcode[0] = foreign_phoneme = LookupPhonemeString(names[0]); | |||
if(foreign_phoneme == 0) | |||
{ | |||
sprintf(line_buf,"%s/%s", foreign_table_name, names[0]); | |||
error("Unknown phoneme '%s'", line_buf); | |||
} | |||
} | |||
for(ix=1; ix<n_names; ix++) | |||
{ | |||
phcode[ix] = LookupPhoneme(names[ix], 1); | |||
} | |||
// only write a translation if it has an effect | |||
if((n_names > 2) || (phcode[0] != phcode[1])) | |||
{ | |||
// write: foreign phoneme number, then a string of local phoneme numbers | |||
memcpy(p_equivalence, phcode, n_names); | |||
p_equivalence += n_names; | |||
*p_equivalence++ = 0; | |||
} | |||
} | |||
*p_equivalence++ = 0; | |||
p_equivalence = (char *)((int)(p_equivalence + 3) & ~0x3); // align to word boundary | |||
n_bytes = p_equivalence - p_start; | |||
p_start[1] = remove_stress; | |||
n_bytes = n_bytes / 4; | |||
p_start[2] = n_bytes >> 8; // index of next table | |||
p_start[3] = n_bytes; | |||
LoadVoice(voice_name2,0); // reset the original phoneme table | |||
LoadVoiceVariant(save_voice_name,0); | |||
} // end of CompileEquivalents | |||
static void CompilePhonemeFiles() | |||
{//============================== | |||
int item; | |||
@@ -3161,8 +3299,9 @@ static void CompilePhonemeFiles() | |||
item = NextItem(tKEYWORD); | |||
if(item == kINCLUDE) | |||
switch(item) | |||
{ | |||
case kINCLUDE: | |||
NextItem(tSTRING); | |||
sprintf(buf,"%s%s",path_source,item_string); | |||
if((stack_ix < N_STACK) && (f = fopen_log(f_errors,buf,"rb")) != NULL) | |||
@@ -3176,32 +3315,36 @@ static void CompilePhonemeFiles() | |||
strncpy0(current_fname,item_string,sizeof(current_fname)); | |||
linenum = 1; | |||
} | |||
} | |||
else | |||
if(item == kPHONEMETABLE) | |||
{ | |||
break; | |||
case kPHONEMETABLE: | |||
EndPhonemeTable(); | |||
NextItem(tSTRING); // name of the new phoneme table | |||
StartPhonemeTable(item_string); | |||
} | |||
else | |||
if(item == kPHONEMESTART) | |||
{ | |||
break; | |||
case kPHONEMESTART: | |||
if(n_phoneme_tabs == 0) | |||
{ | |||
Error("phonemetable is missing"); | |||
return; | |||
} | |||
CompilePhoneme(1); | |||
} | |||
else | |||
if(item == kPROCEDURE) | |||
{ | |||
break; | |||
case kPROCEDURE: | |||
CompilePhoneme(0); | |||
break; | |||
case kEQUIVALENTS: | |||
CompileEquivalents(); | |||
break; | |||
default: | |||
if(!feof(f_in)) | |||
Error("Keyword 'phoneme' expected"); | |||
break; | |||
} | |||
else | |||
if(!feof(f_in)) | |||
Error("Keyword 'phoneme' expected"); | |||
} | |||
phoneme_tab2[n_phcodes+1].mnemonic = 0; // terminator | |||
} // end of CompilePhonemeFiles | |||
@@ -3275,6 +3418,7 @@ memset(markers_used,0,sizeof(markers_used)); | |||
"# S - A SPECT_SEQ structure\n" | |||
"# W - A wavefile segment\n" | |||
"# E - An envelope\n" | |||
"# Q - Phoneme equivalence tables\n" | |||
"#\n" | |||
"# Address is the displacement within phondata of this item\n" | |||
"#\n" |
@@ -53,6 +53,7 @@ static char *hash_chains[N_HASH_DICT]; | |||
static char letterGroupsDefined[N_LETTER_GROUPS]; | |||
MNEM_TAB mnem_rules[] = { | |||
{"unpr", 0x01}, | |||
{"w_alt2", 0x12}, | |||
{"w_alt3", 0x13}, | |||
{"w_alt", 0x11}, // note: put longer names before their sub-strings | |||
@@ -192,8 +193,8 @@ char *print_dictionary_flags(unsigned int *flags) | |||
char *DecodeRule(const char *group_chars, int group_length, char *rule) | |||
{//==================================================================== | |||
char *DecodeRule(const char *group_chars, int group_length, char *rule, int control) | |||
{//================================================================================= | |||
/* Convert compiled match template to ascii */ | |||
unsigned char rb; | |||
@@ -268,16 +269,20 @@ char *DecodeRule(const char *group_chars, int group_length, char *rule) | |||
if(rb == RULE_DOLLAR) | |||
{ | |||
p[0] = '$'; | |||
name = LookupMnemName(mnem_rules, *rule++); | |||
strcpy(&p[1],name); | |||
p += (strlen(name)+1); | |||
value = *rule++ & 0xff; | |||
if((value != 0x01) || (control & FLAG_UNPRON_TEST)) | |||
{ | |||
p[0] = '$'; | |||
name = LookupMnemName(mnem_rules, value); | |||
strcpy(&p[1],name); | |||
p += (strlen(name)+1); | |||
} | |||
c = ' '; | |||
} | |||
else | |||
if(rb == RULE_ENDING) | |||
{ | |||
static const char *flag_chars = "ei vtfq t"; | |||
static const char *flag_chars = "eipvdfq tba "; | |||
flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f); | |||
suffix_char = 'S'; | |||
if(flags & (SUFX_P >> 8)) |
@@ -38,15 +38,16 @@ int dictionary_skipwords; | |||
char dictionary_name[40]; | |||
extern char *print_dictionary_flags(unsigned int *flags); | |||
extern char *DecodeRule(const char *group_chars, int group_length, char *rule); | |||
extern char *DecodeRule(const char *group_chars, int group_length, char *rule, int control); | |||
// accented characters which indicate (in some languages) the start of a separate syllable | |||
//static const unsigned short diereses_list[7] = {L'ä',L'ë',L'ï',L'ö',L'ü',L'ÿ',0}; | |||
static const unsigned short diereses_list[7] = {0xe4,0xeb,0xef,0xf6,0xfc,0xff,0}; | |||
// convert characters to an approximate 7 bit ascii equivalent | |||
// used for checking for vowels | |||
static unsigned char remove_accent[] = { | |||
// used for checking for vowels (up to 0x259=schwa) | |||
#define N_REMOVE_ACCENT 0x25e | |||
static unsigned char remove_accent[N_REMOVE_ACCENT] = { | |||
'a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i', // 0c0 | |||
'd','n','o','o','o','o','o', 0, 'o','u','u','u','u','y','t','s', // 0d0 | |||
'a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i', // 0e0 | |||
@@ -73,7 +74,9 @@ static unsigned char remove_accent[] = { | |||
'r','r','r','r','u','u','u','u','s','s','t','t','y','y','h','h', // 210 | |||
'n','d','o','o','z','z','a','a','e','e','o','o','o','o','o','o', // 220 | |||
'o','o','y','y','l','n','t','j','d','q','a','c','c','l','t','s', // 230 | |||
'z', 0 }; | |||
'z', 0, 0, 'b','u','v','e','e','j','j','q','q','r','r','y','y', // 240 | |||
'a','a','a','b','o','c','d','d','e','e','e','e','e','e' }; | |||
@@ -86,8 +89,8 @@ void strncpy0(char *to,const char *from, int size) | |||
} | |||
static int reverse_word_bytes(int word) | |||
{//============================= | |||
int Reverse4Bytes(int word) | |||
{//======================== | |||
// reverse the order of bytes from little-endian to big-endian | |||
#ifdef ARCH_BIG | |||
int ix; | |||
@@ -170,9 +173,9 @@ static void InitGroups(Translator *tr) | |||
pw = (unsigned int *)(tr->langopts.replace_chars); | |||
while(*pw != 0) | |||
{ | |||
*pw = reverse_word_bytes(*pw); | |||
*pw = Reverse4Bytes(*pw); | |||
pw++; | |||
*pw = reverse_word_bytes(*pw); | |||
*pw = Reverse4Bytes(*pw); | |||
pw++; | |||
} | |||
#endif | |||
@@ -275,7 +278,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
pw = (int *)(tr->data_dictlist); | |||
length = reverse_word_bytes(pw[1]); | |||
length = Reverse4Bytes(pw[1]); | |||
if(size <= (N_HASH_DICT + sizeof(int)*2)) | |||
{ | |||
@@ -283,10 +286,10 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
return(2); | |||
} | |||
if((reverse_word_bytes(pw[0]) != N_HASH_DICT) || | |||
if((Reverse4Bytes(pw[0]) != N_HASH_DICT) || | |||
(length <= 0) || (length > 0x8000000)) | |||
{ | |||
fprintf(stderr,"Bad data: '%s' (%x length=%x)\n",fname,reverse_word_bytes(pw[0]),length); | |||
fprintf(stderr,"Bad data: '%s' (%x length=%x)\n",fname,Reverse4Bytes(pw[0]),length); | |||
return(2); | |||
} | |||
tr->data_dictrules = &(tr->data_dictlist[length]); | |||
@@ -742,7 +745,7 @@ static int IsLetter(Translator *tr, int letter, int group) | |||
} | |||
else | |||
{ | |||
if((letter >= 0xc0) && (letter <= 0x241)) | |||
if((letter >= 0xc0) && (letter < N_REMOVE_ACCENT)) | |||
return(tr->letter_bits[remove_accent[letter-0xc0]] & (1L << group)); | |||
} | |||
@@ -753,107 +756,31 @@ static int IsLetter(Translator *tr, int letter, int group) | |||
} | |||
static int IsVowel(Translator *tr, int letter) | |||
{//=========================================== | |||
return(IsLetter(tr, letter, 0)); | |||
int IsVowel(Translator *tr, int letter) | |||
{//==================================== | |||
return(IsLetter(tr, letter, LETTERGP_VOWEL2)); | |||
} | |||
static int Unpronouncable_en(Translator *tr, char *word) | |||
{//===================================================== | |||
/* Determines whether a word in 'unpronouncable', i.e. whether it should | |||
be spoken as individual letters. | |||
This function is language specific. | |||
*/ | |||
static int Unpronouncable2(Translator *tr, char *word) | |||
{//=================================================== | |||
int c; | |||
int vowel_posn=9; | |||
int index; | |||
int count; | |||
int ix; | |||
int apostrophe=0; | |||
static unsigned char initials_bitmap[86] = { | |||
0x00, 0x00, 0x00, 0x00, 0x22, 0x08, 0x00, 0x88, // 0 | |||
0x20, 0x24, 0x20, 0x80, 0x10, 0x00, 0x00, 0x00, | |||
0x00, 0x28, 0x08, 0x00, 0x88, 0x22, 0x04, 0x00, // 16 | |||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |||
0x00, 0x88, 0x22, 0x04, 0x00, 0x02, 0x00, 0x04, // 32 | |||
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |||
0x00, 0x28, 0x8a, 0x03, 0x00, 0x00, 0x40, 0x00, // 48 | |||
0x02, 0x00, 0x41, 0xca, 0xbb, 0x06, 0x20, 0x80, | |||
0x91, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, // 64 | |||
0x08, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, | |||
0x00, 0x00, 0x22, 0x00, 0x01, 0x00, }; | |||
// words which we pass through to the dictionary, even though they look unpronouncable | |||
static const char *exceptions[] = { | |||
"'s ", "st ","nd ","rd ","th ",NULL }; | |||
if((*word == ' ') || (*word == 0)) | |||
return(0); | |||
for(ix=0; exceptions[ix] != NULL; ix++) | |||
{ | |||
// Seemingly uncpronouncable words, but to be looked in the dictionary rules instead | |||
if(memcmp(word,exceptions[ix],3)==0) | |||
return(0); | |||
} | |||
index=0; | |||
count=0; | |||
for(;;) | |||
{ | |||
index += utf8_in(&c,&word[index]); | |||
count++; | |||
if((c==0) || (c==' ') || (c == '\'')) | |||
break; | |||
if(IsVowel(tr, c) || (c == 'y')) | |||
{ | |||
vowel_posn = count; | |||
break; | |||
} | |||
if(c == '\'') | |||
apostrophe = 1; | |||
else | |||
if(!IsAlpha(c)) | |||
return(0); // letter (not vowel) outside Latin character range or apostrophe, abort test | |||
} | |||
if((vowel_posn > 5) || ((word[0]!='s') && (vowel_posn > 4))) | |||
return(1); // no vowel, or no vowel in first four letters | |||
/* there is at least one vowel, is the initial letter combination valid ? */ | |||
if(vowel_posn < 3) | |||
return(0); /* vowel in first two letters, OK */ | |||
if(apostrophe) | |||
return(0); // first two letters not a-z, abort test | |||
index = (word[0]-'a') * 26 + (word[1]-'a'); | |||
if(initials_bitmap[index >> 3] & (1L << (index & 7))) | |||
return(0); | |||
else | |||
return(1); /****/ | |||
} /* end of Unpronounceable */ | |||
static int Unpronouncable_de(Translator *tr, char *word) | |||
{//===================================================== | |||
if(memcmp(word,"tsch",4)==0) | |||
return(0); | |||
return(2); | |||
int end_flags; | |||
char ph_buf[N_WORD_PHONEMES]; | |||
ph_buf[0] = 0; | |||
c = word[-1]; | |||
word[-1] = ' '; // ensure there is a space before the "word" | |||
end_flags = TranslateRules(tr, word, ph_buf, sizeof(ph_buf), NULL, FLAG_UNPRON_TEST, NULL); | |||
word[-1] = c; | |||
if((end_flags == 0) || (end_flags & SUFX_UNPRON)) | |||
return(1); | |||
return(0); | |||
} | |||
int Unpronouncable(Translator *tr, char *word) | |||
{//=========================================== | |||
/* Determines whether a word in 'unpronouncable', i.e. whether it should | |||
@@ -868,18 +795,6 @@ int Unpronouncable(Translator *tr, char *word) | |||
int index; | |||
int count; | |||
int apostrophe=0; | |||
int result=2; // unknown | |||
if(tr->translator_name == L('e','n')) | |||
{ | |||
return(Unpronouncable_en(tr,word)); | |||
} | |||
if(tr->translator_name == L('d','e')) | |||
{ | |||
result = Unpronouncable_de(tr,word); | |||
} | |||
if(result < 2) | |||
return(result); | |||
utf8_in(&c,word); | |||
if((tr->letter_bits_offset > 0) && (c < 0x241)) | |||
@@ -899,9 +814,12 @@ int Unpronouncable(Translator *tr, char *word) | |||
for(;;) | |||
{ | |||
index += utf8_in(&c,&word[index]); | |||
if((c==0) || (c==' ') || (c == '\'')) | |||
if((c==0) || (c==' ')) | |||
break; | |||
if((c=='\'') && (count > 1)) | |||
break; // "tv'" but not "l'" | |||
if(count==0) | |||
c1 = c; | |||
count++; | |||
@@ -916,11 +834,14 @@ int Unpronouncable(Translator *tr, char *word) | |||
apostrophe = 1; | |||
else | |||
if(!iswalpha(c)) | |||
return(0); // letter (not vowel) outside a-z range or apostrophe, abort test | |||
return(0); | |||
} | |||
if((vowel_posn < 9) && (tr->langopts.param[LOPT_UNPRONOUNCABLE] == 2)) | |||
return(0); // option means allow any word with a vowel | |||
if((vowel_posn > 2) && (tr->langopts.param[LOPT_UNPRONOUNCABLE] == 2)) | |||
{ | |||
// Lookup unpronounable rules in *_rules | |||
return(Unpronouncable2(tr, word)); | |||
} | |||
if(c1 == tr->langopts.param[LOPT_UNPRONOUNCABLE]) | |||
vowel_posn--; // disregard this as the initial letter when counting | |||
@@ -1813,6 +1734,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
int match_type; /* left, right, or consume */ | |||
int failed; | |||
int unpron_ignore; | |||
int consumed; /* number of letters consumed from input */ | |||
int count; /* count through rules in the group */ | |||
int syllable_count; | |||
@@ -1858,6 +1780,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
/* search through dictionary rules */ | |||
while(rule[0] != RULE_GROUP_END) | |||
{ | |||
unpron_ignore = word_flags & FLAG_UNPRON_TEST; | |||
match_type=0; | |||
consumed = 0; | |||
letter = 0; | |||
@@ -1874,6 +1797,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
/* work through next rule until end, or until no-match proved */ | |||
rule_start = rule; | |||
failed = 0; | |||
while(!failed) | |||
{ | |||
@@ -1904,6 +1828,14 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
break; | |||
case RULE_PRE: | |||
match_type = RULE_PRE; | |||
if(word_flags & FLAG_UNPRON_TEST) | |||
{ | |||
// checking the start of the word for unpronouncable character sequences, only | |||
// consider rules which explicitly match the start of a word | |||
if(rule[0] != ' ') | |||
failed = 1; | |||
unpron_ignore = 0; | |||
} | |||
break; | |||
case RULE_POST: | |||
match_type = RULE_POST; | |||
@@ -2046,8 +1978,14 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
case RULE_DOLLAR: | |||
command = *rule++; | |||
if(command == 0x01) | |||
{ | |||
match.end_type = SUFX_UNPRON; // $unpron | |||
} | |||
else | |||
if((command & 0xf0) == 0x10) | |||
{ | |||
// $w_alt | |||
if(dict_flags & (1 << (BITNUM_FLAG_ALT + (command & 0xf)))) | |||
add_points = 23; | |||
else | |||
@@ -2056,6 +1994,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
else | |||
if((command & 0xf0) == 0x20) | |||
{ | |||
// $p_alt | |||
// make a copy of the word up to the post-match characters | |||
ix = *word - word_start + consumed + group_length + 1; | |||
memcpy(word_buf, word_start-1, ix); | |||
@@ -2151,8 +2090,8 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
break; | |||
case RULE_DEL_FWD: | |||
// find the next 'e' in the word and replace by '' | |||
for(p = *word + group_length; *p != ' '; p++) | |||
// find the next 'e' in the word and replace by 'E' | |||
for(p = *word + group_length; p < post_ptr; p++) | |||
{ | |||
if(*p == 'e') | |||
{ | |||
@@ -2366,9 +2305,11 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
match.points += add_points; | |||
} | |||
if(failed == 2) | |||
if((failed == 2) && (unpron_ignore == 0)) | |||
{ | |||
/* matched OK, is this better than the last best match ? */ | |||
if(match.points >= best.points) | |||
{ | |||
memcpy(&best,&match,sizeof(match)); | |||
@@ -2386,7 +2327,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ | |||
if(group_length > 1) | |||
pts += 35; // to account for an extra letter matching | |||
DecodePhonemes(match.phonemes,decoded_phonemes); | |||
fprintf(f_trans,"%3d\t%s [%s]\n",pts,DecodeRule(group_chars, group_length, rule_start),decoded_phonemes); | |||
fprintf(f_trans,"%3d\t%s [%s]\n",pts,DecodeRule(group_chars, group_length, rule_start, word_flags), decoded_phonemes); | |||
} | |||
} | |||
@@ -2469,7 +2410,10 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
wordbuf[ix] = c; | |||
} | |||
wordbuf[ix] = 0; | |||
fprintf(f_trans,"Translate '%s'\n",wordbuf); | |||
if(word_flags & FLAG_UNPRON_TEST) | |||
fprintf(f_trans,"Unpronouncable? '%s'\n",wordbuf); | |||
else | |||
fprintf(f_trans,"Translate '%s'\n",wordbuf); | |||
} | |||
p = p_start; | |||
@@ -2597,7 +2541,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
} | |||
// no match, try removing the accent and re-translating the word | |||
if((letter >= 0xc0) && (letter <= 0x241) && ((ix = remove_accent[letter-0xc0]) != 0)) | |||
if((letter >= 0xc0) && (letter < N_REMOVE_ACCENT) && ((ix = remove_accent[letter-0xc0]) != 0)) | |||
{ | |||
// within range of the remove_accent table | |||
if((p[-2] != ' ') || (p[n] != ' ')) | |||
@@ -2682,7 +2626,11 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
strcpy(phonemes,match1.phonemes); | |||
return(0); | |||
} | |||
if(word_flags & FLAG_UNPRON_TEST) | |||
return(match1.end_type | 1); | |||
match1.end_type &= ~SUFX_UNPRON; | |||
if((match1.end_type != 0) && (end_phonemes != NULL)) | |||
{ | |||
/* a standard ending has been found, re-translate the word without it */ | |||
@@ -3524,7 +3472,8 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) | |||
if((strcmp(ending,"s")==0) || (strcmp(ending,"es")==0)) | |||
end_flags |= FLAG_SUFX_S; | |||
if(strcmp(ending,"'s")==0) | |||
// if(strcmp(ending,"'s")==0) | |||
if(ending[0] == '\'') | |||
end_flags &= ~FLAG_SUFX; // don't consider 's as an added suffix | |||
return(end_flags); |
@@ -233,6 +233,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) | |||
EVT_MENU(MENU_LEXICON_DE, MyFrame::OnTools) | |||
EVT_MENU(MENU_LEXICON_IT, MyFrame::OnTools) | |||
EVT_MENU(MENU_LEXICON_IT2, MyFrame::OnTools) | |||
EVT_MENU(MENU_LEXICON_TEST, MyFrame::OnTools) | |||
EVT_MENU(MENU_TO_UTF8, MyFrame::OnTools) | |||
EVT_MENU(MENU_COUNT_WORDS, MyFrame::OnTools) | |||
EVT_MENU(MENU_TEST, MyFrame::OnTools) | |||
@@ -608,6 +609,7 @@ void MyFrame::OnTools(wxCommandEvent& event) | |||
case MENU_LEXICON_DE: | |||
case MENU_LEXICON_IT: | |||
case MENU_LEXICON_IT2: | |||
case MENU_LEXICON_TEST: | |||
CompareLexicon(event.GetId()); // Compare a lexicon with _rules translation | |||
break; | |||
@@ -763,6 +763,75 @@ void Lexicon_De() | |||
} | |||
extern int IsVowel(Translator *tr, int letter); | |||
void Lexicon_Test() | |||
{//================ | |||
int c1, c2, c3; | |||
char *p; | |||
int prev_c1=0; | |||
int prev_c2=0; | |||
int prev_c3 = 0; | |||
FILE *f_in; | |||
FILE *f_out; | |||
char buf[200]; | |||
wxString s_fname = wxFileSelector(_T("List of UTF-8 words with Combining Grave Accent U+300 to indicate stress"),path_dir1, | |||
_T(""),_T(""),_T("*"),wxOPEN); | |||
if(s_fname.IsEmpty()) | |||
return; | |||
strcpy(buf,s_fname.mb_str(wxConvLocal)); | |||
path_dir1 = wxFileName(s_fname).GetPath(); | |||
if((f_in = fopen(buf,"r")) == NULL) | |||
{ | |||
wxLogError(_T("Can't read file: ") + wxString(buf,wxConvLocal)); | |||
return; | |||
} | |||
strcat(buf,"_1"); | |||
if((f_out = fopen(buf,"w")) == NULL) | |||
{ | |||
wxLogError(_T("Can't write file: ") + wxString(buf,wxConvLocal)); | |||
fclose(f_in); | |||
return; | |||
} | |||
while(!feof(f_in)) | |||
{ | |||
if((p = fgets(buf,sizeof(buf),f_in)) == NULL) | |||
break; | |||
if(buf[0] == 0) | |||
continue; | |||
p += utf8_in(&c1, p); | |||
p += utf8_in(&c2, p); | |||
p += utf8_in(&c3, p); | |||
c1 = towlower(c1); | |||
c2 = towlower(c2); | |||
c3 = towlower(c3); | |||
if(IsVowel(translator, c1)) | |||
continue; | |||
if(IsVowel(translator, c2)) | |||
continue; | |||
if((prev_c1 != c1) || (prev_c2 != c2) || ((prev_c3 != c3) && !IsVowel(translator,c3))) | |||
fputc('\n',f_out); | |||
prev_c1 = c1; | |||
prev_c2 = c2; | |||
prev_c3 = c3; | |||
fprintf(f_out,"%s",buf); | |||
} | |||
fclose(f_in); | |||
fclose(f_out); | |||
} // end of Lexicon_Test | |||
void Lexicon_Bg() | |||
{//============== | |||
// Bulgarian: compare stress markup in a list of words with lookup using bg_rules | |||
@@ -1275,6 +1344,9 @@ void CompareLexicon(int id) | |||
case MENU_LEXICON_IT2: | |||
Lexicon_It(2); | |||
break; | |||
case MENU_LEXICON_TEST: | |||
Lexicon_Test(); | |||
break; | |||
} | |||
} // end of CompareLexicon | |||
@@ -161,6 +161,7 @@ enum { | |||
MENU_LEXICON_DE, | |||
MENU_LEXICON_IT, | |||
MENU_LEXICON_IT2, | |||
MENU_LEXICON_TEST, | |||
MENU_TO_UTF8, | |||
MENU_COUNT_WORDS, | |||
MENU_TEST, |
@@ -128,6 +128,7 @@ wxMenuBar *MakeMenu(int type, const char *dict_name) | |||
lexicon_menu->Append(MENU_LEXICON_DE, _("German")); | |||
lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); | |||
lexicon_menu->Append(MENU_LEXICON_IT2, _("Italian, pass 2")); | |||
// lexicon_menu->Append(MENU_LEXICON_TEST, _("Test")); | |||
tools_menu = new wxMenu; | |||
tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); |
@@ -766,7 +766,7 @@ static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB | |||
if(word_end[0] == '.') | |||
utf8_in(&c2, &word_end[2]); | |||
else | |||
utf8_in(&c2, &word_end[1]); | |||
utf8_in(&c2, &word_end[0]); | |||
if((word_end[1] != 0) && ((c2 == 0) || (wtab[0].flags & FLAG_COMMA_AFTER) || IsAlpha(c2))) | |||
{ | |||
@@ -850,8 +850,8 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
flags[0] = 0; | |||
flags[1] = 0; | |||
if((tr->langopts.numbers & NUM_ROMAN_CAPITALS) && !(wtab[0].flags & FLAG_ALL_UPPER)) | |||
return(0); | |||
if(((tr->langopts.numbers & NUM_ROMAN_CAPITALS) && !(wtab[0].flags & FLAG_ALL_UPPER)) || isdigit(word[-2])) | |||
return(0); // not '2xx' | |||
word_start = word; | |||
while((c = *word++) != ' ') | |||
@@ -889,6 +889,10 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
prev = value; | |||
n_digits++; | |||
} | |||
if(isdigit(word[0])) | |||
return(0); // eg. 'xx2' | |||
acc += prev; | |||
if(acc < tr->langopts.min_roman) | |||
return(0); | |||
@@ -896,6 +900,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
if(acc > tr->langopts.max_roman) | |||
return(0); | |||
Lookup(tr, "_roman",ph_roman); // precede by "roman" if _rom is defined in *_list | |||
p = &ph_out[0]; | |||
@@ -931,6 +936,10 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
return(0); | |||
} | |||
} | |||
else | |||
{ | |||
wtab[0].flags |= FLAG_ORDINAL; | |||
} | |||
} | |||
tr->prev_dict_flags = 0; | |||
@@ -1071,6 +1080,10 @@ static int LookupThousands(Translator *tr, int value, int thousandplex, int thou | |||
} | |||
} | |||
sprintf(ph_out,"%s%s",ph_of,ph_thousands); | |||
if((value == 1) && (thousandplex == 1) && (tr->langopts.numbers & NUM_OMIT_1_THOUSAND)) | |||
return(1); | |||
return(found_value); | |||
} | |||
@@ -130,7 +130,8 @@ typedef struct { | |||
char name[N_PHONEME_TAB_NAME]; | |||
PHONEME_TAB *phoneme_tab_ptr; | |||
int n_phonemes; | |||
int includes; // also include the phonemes from this other phoneme table | |||
int includes; // also include the phonemes from this other phoneme table | |||
int equivalence_tables; // lists of equivalent phonemes to match other languages, byte index into phondata | |||
} PHONEME_TAB_LIST; | |||
@@ -613,7 +613,7 @@ void MyFrame::OnProsody(wxCommandEvent& WXUNUSED(event)) | |||
prosodyframe->CreateStatusBar(); | |||
int width, height; | |||
wxMDIClientWindow *clientwin = this->GetClientWindow(); | |||
wxMDIClientWindow *clientwin = (wxMDIClientWindow *)this->GetClientWindow(); | |||
clientwin->GetClientSize(&width, &height); | |||
#ifdef deleted |
@@ -1995,8 +1995,8 @@ static MNEM_TAB xml_char_mnemonics[] = { | |||
{NULL,-1}}; | |||
int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type) | |||
{//============================================================================================================= | |||
int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type, char *voice_change) | |||
{//================================================================================================================================= | |||
/* Find the end of the current clause. | |||
Write the clause into buf | |||
@@ -2051,6 +2051,7 @@ int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix | |||
tr->clause_lower_count = 0; | |||
end_of_input = 0; | |||
*tone_type = 0; | |||
*voice_change = 0; | |||
f_input = f_in; // for GetC etc | |||
@@ -2218,16 +2219,11 @@ f_input = f_in; // for GetC etc | |||
if(terminator & CLAUSE_BIT_VOICE) | |||
{ | |||
// a change in voice, write the new voice name to the end of the buf | |||
p = current_voice_id; | |||
while((*p != 0) && (ix < (n_buf-1))) | |||
{ | |||
buf[ix++] = *p++; | |||
} | |||
buf[ix++] = 0; | |||
strcpy(voice_change, current_voice_id); | |||
} | |||
return(terminator); | |||
} | |||
c1 = ' '; | |||
c2 = GetC(); | |||
continue; | |||
} |
@@ -73,7 +73,7 @@ BOOL load_MBR() | |||
if(hinstDllMBR != NULL) | |||
return TRUE; // already loaded | |||
if (!(hinstDllMBR=LoadLibraryA("mbrola.dll"))) | |||
if ((hinstDllMBR=LoadLibraryA("mbrola.dll")) == 0) | |||
return FALSE; | |||
init_MBR =(PROCIC) GetProcAddress(hinstDllMBR,"init_MBR"); | |||
write_MBR =(PROCIC) GetProcAddress(hinstDllMBR,"write_MBR"); |
@@ -35,8 +35,8 @@ | |||
#include "translate.h" | |||
#include "wave.h" | |||
const char *version_string = "1.43.57 18.Jul.10"; | |||
const int version_phdata = 0x014354; | |||
const char *version_string = "1.43.63 02.Aug.10"; | |||
const int version_phdata = 0x014361; | |||
int option_device_number = -1; | |||
FILE *f_logespeak = NULL; | |||
@@ -49,7 +49,7 @@ PHONEME_TAB *phoneme_tab[N_PHONEME_TAB]; | |||
unsigned char phoneme_tab_flags[N_PHONEME_TAB]; // bit 0: not inherited | |||
USHORT *phoneme_index=NULL; | |||
char *spects_data=NULL; | |||
char *phondata_ptr=NULL; | |||
unsigned char *wavefile_data=NULL; | |||
static unsigned char *phoneme_tab_data = NULL; | |||
@@ -116,16 +116,17 @@ int LoadPhData() | |||
int result = 1; | |||
int length; | |||
unsigned char *p; | |||
int *pw; | |||
if((phoneme_tab_data = (unsigned char *)ReadPhFile((void *)(phoneme_tab_data),"phontab",NULL)) == NULL) | |||
return(-1); | |||
if((phoneme_index = (USHORT *)ReadPhFile((void *)(phoneme_index),"phonindex",NULL)) == NULL) | |||
return(-1); | |||
if((spects_data = ReadPhFile((void *)(spects_data),"phondata",NULL)) == NULL) | |||
if((phondata_ptr = ReadPhFile((void *)(phondata_ptr),"phondata",NULL)) == NULL) | |||
return(-1); | |||
if((tunes = (TUNE *)ReadPhFile((void *)(tunes),"intonations",&length)) == NULL) | |||
return(-1); | |||
wavefile_data = (unsigned char *)spects_data; | |||
wavefile_data = (unsigned char *)phondata_ptr; | |||
n_tunes = length / sizeof(TUNE); | |||
// read the version number from the first 4 bytes of phondata | |||
@@ -150,7 +151,9 @@ int LoadPhData() | |||
n_phonemes = p[0]; | |||
phoneme_tab_list[ix].n_phonemes = p[0]; | |||
phoneme_tab_list[ix].includes = p[1]; | |||
p += 4; | |||
pw = (int *)p; | |||
phoneme_tab_list[ix].equivalence_tables = Reverse4Bytes(pw[1]); | |||
p += 8; | |||
memcpy(phoneme_tab_list[ix].name,p,N_PHONEME_TAB_NAME); | |||
p += N_PHONEME_TAB_NAME; | |||
phoneme_tab_list[ix].phoneme_tab_ptr = (PHONEME_TAB *)p; | |||
@@ -168,10 +171,10 @@ void FreePhData(void) | |||
{//================== | |||
Free(phoneme_tab_data); | |||
Free(phoneme_index); | |||
Free(spects_data); | |||
Free(phondata_ptr); | |||
phoneme_tab_data=NULL; | |||
phoneme_index=NULL; | |||
spects_data=NULL; | |||
phondata_ptr=NULL; | |||
} | |||
@@ -226,7 +229,7 @@ frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, | |||
frame_t *frame; | |||
static frameref_t frames_buf[N_SEQ_FRAMES]; | |||
seq = (SPECT_SEQ *)(&spects_data[fmt_params->fmt_addr]); | |||
seq = (SPECT_SEQ *)(&phondata_ptr[fmt_params->fmt_addr]); | |||
seqk = (SPECT_SEQK *)seq; | |||
nf = seq->n_frames; | |||
@@ -279,7 +282,7 @@ frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, | |||
{ | |||
// a secondary reference has been returned, which is not a wavefile | |||
// add these spectra to the main sequence | |||
seq2 = (SPECT_SEQ *)(&spects_data[fmt_params->fmt2_addr]); | |||
seq2 = (SPECT_SEQ *)(&phondata_ptr[fmt_params->fmt2_addr]); | |||
seqk2 = (SPECT_SEQK *)seq2; | |||
// first frame of the addition just sets the length of the last frame of the main seq | |||
@@ -371,7 +374,7 @@ unsigned char *GetEnvelope(int index) | |||
fprintf(stderr,"espeak: No envelope\n"); | |||
return(envelope_data[0]); // not found, use a default envelope | |||
} | |||
return((unsigned char *)&spects_data[index]); | |||
return((unsigned char *)&phondata_ptr[index]); | |||
} | |||
@@ -254,6 +254,9 @@ static int DoSample2(int index, int which, int std_length, int control, int leng | |||
wav_length = (p[1] * 256); | |||
wav_length += p[0]; // length in bytes | |||
if(wav_length == 0) | |||
return(0); | |||
min_length = speed.min_sample_len; | |||
if(wav_scale==0) | |||
@@ -1656,7 +1659,8 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) | |||
{ | |||
InterpretPhoneme2(p->tone_ph, &phdata_tone); | |||
pitch_env = GetEnvelope(phdata_tone.pitch_env); | |||
amp_env = GetEnvelope(phdata_tone.amp_env); | |||
if(phdata_tone.amp_env > 0) | |||
amp_env = GetEnvelope(phdata_tone.amp_env); | |||
} | |||
StartSyllable(); |
@@ -533,6 +533,7 @@ int SelectPhonemeTableName(const char *name); | |||
void Write4Bytes(FILE *f, int value); | |||
int Read4Bytes(FILE *f); | |||
int Reverse4Bytes(int word); | |||
int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *err_name,int flags); | |||
@@ -130,7 +130,7 @@ static Translator* NewTranslator(void) | |||
memset(tr->letter_bits,0,sizeof(tr->letter_bits)); | |||
memset(tr->letter_groups,0,sizeof(tr->letter_groups)); | |||
// 0-5 sets of characters matched by A B C E F G in pronunciation rules | |||
// 0-5 sets of characters matched by A B C H F G Y in pronunciation rules | |||
// these may be set differently for different languages | |||
SetLetterBits(tr,0,"aeiou"); // A vowels, except y | |||
SetLetterBits(tr,1,"bcdfgjklmnpqstvxz"); // B hard consonants, excluding h,r,w | |||
@@ -424,7 +424,7 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.stress_rule = STRESSPOSN_1L; | |||
SetLetterVowel(tr,'y'); | |||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900; | |||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900 | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_ORDINAL; | |||
} | |||
break; | |||
@@ -440,8 +440,9 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.param[LOPT_LONG_VOWEL_THRESHOLD] = 175/2; | |||
memcpy(tr->stress_lengths,stress_lengths_de,sizeof(tr->stress_lengths)); | |||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_ALLOW_SPACE | NUM_ORDINAL_DOT | NUM_ROMAN; | |||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ALLOW_SPACE | NUM_ORDINAL_DOT | NUM_ROMAN; | |||
SetLetterVowel(tr,'y'); | |||
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 2; // use de_rules for unpronouncable rules | |||
} | |||
break; | |||
@@ -458,6 +459,8 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.numbers = NUM_HUNDRED_AND | NUM_ROMAN | NUM_1900; | |||
tr->langopts.param[LOPT_COMBINE_WORDS] = 2; // allow "mc" to cmbine with the following word | |||
tr->langopts.suffix_add_e = 'e'; | |||
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 2; // use en_rules for unpronouncable rules | |||
SetLetterBits(tr,6,"aeiouy"); // Group Y: vowels, including y | |||
} | |||
break; | |||
@@ -547,7 +550,7 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.unstressed_wd2 = 2; | |||
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | |||
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_ROMAN | NUM_ROMAN_AFTER; | |||
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_AFTER; | |||
if(name2 == L('c','a')) | |||
{ | |||
@@ -559,6 +562,10 @@ Translator *SelectTranslator(const char *name) | |||
{ | |||
tr->langopts.stress_flags = 0x100 | 0x6 | 0x30; // stress last syllable unless word ends with a vowel | |||
} | |||
else | |||
{ | |||
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 2; // use es_rules for unpronouncable rules | |||
} | |||
} | |||
break; | |||
@@ -702,7 +709,7 @@ Translator *SelectTranslator(const char *name) | |||
tr->langopts.param[LOPT_IT_DOUBLING] = 1; | |||
tr->langopts.param[LOPT_ANNOUNCE_PUNCT] = 2; // don't break clause before announcing . ? ! | |||
tr->langopts.numbers = NUM_DFRACTION_5 | NUM_ALLOW_SPACE | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ROMAN_CAPITALS | NUM_ORDINAL_DOT | NUM_OMIT_1_HUNDRED; | |||
tr->langopts.numbers = NUM_DFRACTION_5 | NUM_ALLOW_SPACE | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ROMAN_CAPITALS | NUM_ORDINAL_DOT | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND; | |||
tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator | |||
tr->langopts.decimal_sep = ','; | |||
tr->langopts.max_roman = 899; | |||
@@ -879,7 +886,7 @@ SetLengthMods(tr,3); // all equal | |||
tr->letter_groups[0] = vowels_cyrillic; | |||
tr->langopts.stress_rule = STRESSPOSN_3R; // antipenultimate | |||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2; | |||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_2; | |||
tr->langopts.numbers2 = 0x8a; // variant numbers before thousands,milliards | |||
} | |||
break; | |||
@@ -1098,7 +1105,7 @@ SetLengthMods(tr,3); // all equal | |||
if(name2 == L('t','a')) | |||
{ | |||
tr->letter_bits_offset = OFFSET_TAMIL; | |||
tr->langopts.numbers = 0x1; | |||
tr->langopts.numbers = NUM_OMIT_1_THOUSAND ; | |||
} | |||
if(name2 == L('m','r')) | |||
{ | |||
@@ -1140,8 +1147,8 @@ SetLengthMods(tr,3); // all equal | |||
case L('t','r'): // Turkish | |||
{ | |||
static const unsigned char stress_amps_tr[8] = {18,16, 20,20, 20,21, 21,20 }; | |||
static const short stress_lengths_tr[8] = {190,180, 200,200, 0,0, 240,250}; | |||
static const unsigned char stress_amps_tr[8] = {18,16, 20,21, 20,21, 21,20 }; | |||
static const short stress_lengths_tr[8] = {190,180, 200,230, 0,0, 240,250}; | |||
SetupTranslator(tr,stress_lengths_tr,stress_amps_tr); | |||
tr->charset_a0 = charsets[9]; // ISO-8859-9 - Latin5 | |||
@@ -1149,7 +1156,7 @@ SetLengthMods(tr,3); // all equal | |||
tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable | |||
tr->langopts.stress_flags = 0x20; //no automatic secondary stress | |||
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2; | |||
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_2; | |||
tr->langopts.max_initial_consonants = 2; | |||
} | |||
break; |
@@ -667,6 +667,98 @@ static int CheckDottedAbbrev(char *word1, WORD_TAB *wtab) | |||
} // end of CheckDottedAbbrev | |||
extern char *phondata_ptr; | |||
int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes) | |||
{//==================================================================== | |||
// tr: the original language | |||
// lang2: phoneme table number for the temporary language | |||
// phonemes: the phonemes to be replaced | |||
int ix; | |||
int len; | |||
char phon; | |||
char *p; | |||
unsigned char *pb; | |||
char *eqlist; | |||
char *p_out; | |||
char *p_in; | |||
int remove_stress = 0; | |||
char phonbuf[N_WORD_PHONEMES]; | |||
// has a phoneme equivalence table been specified for thus language pair? | |||
if((ix = phoneme_tab_list[tr->phoneme_tab_ix].equivalence_tables) == 0) | |||
return(0); | |||
pb = (unsigned char *)&phondata_ptr[ix]; | |||
for(;;) | |||
{ | |||
if(pb[0] == 0) | |||
return(0); // table not found | |||
if(pb[0] == lang2) | |||
break; | |||
len = (pb[2] << 8) + pb[3]; // size of this table in words | |||
pb += (len * 4); | |||
} | |||
remove_stress = pb[1]; | |||
if(option_phonemes == 2) | |||
{ | |||
DecodePhonemes(phonemes, phonbuf); | |||
fprintf(f_trans,"(%s) %s -> (%s) ", phoneme_tab_list[lang2].name, phonbuf, phoneme_tab_list[tr->phoneme_tab_ix].name); | |||
} | |||
p_in = phonemes; | |||
eqlist = (char *)&pb[8]; | |||
p_out = phonbuf; | |||
while((phon = *p_in++) != 0) | |||
{ | |||
if(remove_stress && ((phon & 0xff) < phonSTRESS_PREV)) | |||
continue; // remove stress marks | |||
// is there a translation for this phoneme code? | |||
p = eqlist; | |||
while(*p != 0) | |||
{ | |||
len = strlen(&p[1]); | |||
if(*p == phon) | |||
{ | |||
strcpy(p_out, &p[1]); | |||
p_out += len; | |||
break; | |||
} | |||
p += (len + 2); | |||
} | |||
if(*p == 0) | |||
{ | |||
// no translation found | |||
*p_out++ = phon; | |||
} | |||
} | |||
*p_out = 0; | |||
if(remove_stress) | |||
{ | |||
SetWordStress(tr, phonbuf, NULL, -1, 0); | |||
} | |||
strcpy(phonemes, phonbuf); | |||
if(option_phonemes == 2) | |||
{ | |||
SelectPhonemeTable(tr->phoneme_tab_ix); | |||
DecodePhonemes(phonemes, phonbuf); | |||
fprintf(f_trans,"%s\n\n", phonbuf); | |||
} | |||
return(1); | |||
} // end of ChangeEquivalentPhonemes | |||
int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab) | |||
{//=========================================================================== | |||
@@ -1148,6 +1240,12 @@ strcpy(phonemes2,phonemes); | |||
strcpy(word_phonemes,phonemes); | |||
return(0); | |||
} | |||
if(dictionary_flags2[0] & FLAG_ABBREV) | |||
{ | |||
// Removing the suffix leaves a word which should be spoken as individual letters | |||
// Not yet implemented | |||
} | |||
if(dictionary_flags[0]==0) | |||
{ | |||
dictionary_flags[0] = dictionary_flags2[0]; | |||
@@ -1697,6 +1795,19 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa | |||
p[1] = phonSCHWA; | |||
p[2] = 0; | |||
} | |||
// ?? Option to convert from language2 phonemes to the equivalent language1 phonemes | |||
// ?? Option to set the word-stress according to language1 rules eg. lang=fr) | |||
if(ChangeEquivalentPhonemes(tr, switch_phonemes, (char *)p)) | |||
{ | |||
switch_phonemes = -1; | |||
} | |||
if(switch_phonemes == -1) | |||
{ | |||
strcpy(dictionary_name, old_dictionary_name); | |||
SelectPhonemeTable(voice->phoneme_tab_ix); | |||
} | |||
} | |||
if(!(word_flags & FLAG_HYPHEN)) | |||
@@ -2196,6 +2307,7 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t | |||
short charix[N_TR_SOURCE+4]; | |||
WORD_TAB words[N_CLAUSE_WORDS]; | |||
static char voice_change_name[40]; | |||
int word_count=0; // index into words | |||
char sbuf[N_TR_SOURCE]; | |||
@@ -2218,7 +2330,7 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t | |||
for(ix=0; ix<N_TR_SOURCE; ix++) | |||
charix[ix] = 0; | |||
terminator = ReadClause(tr, f_text, source, charix, &charix_top, N_TR_SOURCE, &tone2); | |||
terminator = ReadClause(tr, f_text, source, charix, &charix_top, N_TR_SOURCE, &tone2, voice_change_name); | |||
if((f_logespeak != NULL) && (logging_type & 4)) | |||
{ | |||
@@ -3038,7 +3150,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre | |||
{ | |||
// return new voice name if an embedded voice change command terminated the clause | |||
if(terminator & CLAUSE_BIT_VOICE) | |||
*voice_change = &source[source_index]; | |||
*voice_change = voice_change_name; | |||
else | |||
*voice_change = NULL; | |||
} |
@@ -112,6 +112,8 @@ | |||
#define FLAG_SUFFIX_VOWEL 0x08000000 // remember an initial vowel from the suffix | |||
#define FLAG_NO_TRACE 0x10000000 // passed to TranslateRules() to suppress dictionary lookup printout | |||
#define FLAG_NO_PREFIX 0x20000000 | |||
#define FLAG_UNPRON_TEST 0x80000000 // do unpronounability test on the beginning of the word | |||
// prefix/suffix flags (bits 8 to 14, bits 16 to 22) don't use 0x8000, 0x800000 | |||
#define SUFX_E 0x0100 // e may have been added | |||
@@ -125,6 +127,8 @@ | |||
#define SUFX_B 0x20000 // break, this character breaks the word into stem and suffix (used with SUFX_P) | |||
#define SUFX_A 0x40000 // remember that the suffix starts with a vowel | |||
#define SUFX_UNPRON 0x8000 // used to return $unpron flag from *_rules | |||
#define FLAG_ALLOW_TEXTMODE 0x02 // allow dictionary to translate to text rather than phonemes | |||
#define FLAG_SUFX 0x04 | |||
@@ -221,9 +225,9 @@ | |||
typedef const char * constcharptr; | |||
typedef struct { | |||
int points; | |||
int points; | |||
const char *phonemes; | |||
int end_type; | |||
int end_type; | |||
char *del_fwd; | |||
} MatchRecord; | |||
@@ -388,6 +392,7 @@ typedef struct { | |||
#define NUM_AND_HUNDRED 0x40000 | |||
#define NUM_THOUSAND_AND 0x80000 | |||
#define NUM_VIGESIMAL 0x100000 | |||
#define NUM_OMIT_1_THOUSAND 0x200000 | |||
#define NUM_ROMAN 0x1000000 | |||
#define NUM_ROMAN_CAPITALS 0x2000000 | |||
@@ -413,6 +418,7 @@ typedef struct { | |||
// bit18= 'and' before hundreds | |||
// bit19= 'and' after thousands if there are no hundreds | |||
// bit20= vigesimal number, if tens are not found | |||
// bit21= omit "one" before "thousand" | |||
// bit24= recognize roman numbers | |||
// bit25= Roman numbers only if upper case | |||
@@ -484,7 +490,8 @@ typedef struct | |||
char phon_out[300]; | |||
char phonemes_repeat[20]; | |||
int phonemes_repeat_count; | |||
int phonemes_repeat_count; | |||
int phoneme_tab_ix; | |||
unsigned char stress_amps[8]; | |||
unsigned char stress_amps_r[8]; | |||
@@ -650,7 +657,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, | |||
int TranslateRules(Translator *tr, char *p, char *phonemes, int size, char *end_phonemes, int end_flags, unsigned int *dict_flags); | |||
int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab); | |||
void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *tone, char **voice_change); | |||
int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type); | |||
int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type, char *voice_change); | |||
void SetVoiceStack(espeak_VOICE *v); | |||
void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_DATA *phdata); |
@@ -978,6 +978,7 @@ voice_t *LoadVoice(const char *vname, int control) | |||
fprintf(stderr,"Unknown phoneme table: '%s'\n",phonemes_name); | |||
} | |||
voice->phoneme_tab_ix = ix; | |||
new_translator->phoneme_tab_ix = ix; | |||
error = LoadDictionary(new_translator, new_dictionary, control & 4); | |||
if(dictionary_name[0]==0) | |||
return(NULL); // no dictionary loaded |
@@ -41,7 +41,7 @@ | |||
*/ | |||
extern wxString path_phsource; | |||
extern char *spects_data; | |||
extern char *phondata_ptr; | |||
extern USHORT *phoneme_index; | |||
extern int n_phoneme_tables; | |||
@@ -664,7 +664,7 @@ void MakeVowelLists(void) | |||
{ | |||
ix = vowelfmt_addr[vowelfmt_ix]; | |||
seq = (SPECT_SEQ *)(&spects_data[ix]); | |||
seq = (SPECT_SEQ *)(&phondata_ptr[ix]); | |||
seqk = (SPECT_SEQK *)seq; | |||
if(seq->frame[0].frflags & FRFLAG_KLATT) |