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
_7C s,ets'Ents | _7C s,ets'Ents | ||||
_9C n,Ous'Ents | _9C n,Ous'Ents | ||||
_0M1 m'il | _0M1 m'il | ||||
_1M1 m'il // no '1' before thousand | |||||
_0M2 mil^'on@s | _0M2 mil^'on@s | ||||
_dpt _koma | _dpt _koma | ||||
//_roman Rom'a | //_roman Rom'a |
tv $abbrev | |||||
// PB = Peter Bjarkov - [email protected] | // PB = Peter Bjarkov - [email protected] | ||||
iv $abbrev | |||||
// This file is UTF8 encoded | // This file is UTF8 encoded | ||||
// Spelling-to-phoneme words for Danish | // Spelling-to-phoneme words for Danish | ||||
_0and 3 | _0and 3 | ||||
_dpt _k,Vm&: | _dpt _k,Vm&: | ||||
_roman d%En | |||||
// PB a number followed by dot | // PB a number followed by dot | ||||
// ordinals are followed by a dot in Danish | // ordinals are followed by a dot in Danish | ||||
producere $alt | producere $alt | ||||
profaner $alt | profaner $alt | ||||
professionaliser $alt | professionaliser $alt | ||||
profeter $alt | |||||
profetere $alt | |||||
profilere $alt | profilere $alt | ||||
profiter $alt | profiter $alt | ||||
prognosticer $alt | prognosticer $alt | ||||
ovulation $alt | ovulation $alt | ||||
oxidation $alt | oxidation $alt | ||||
participation $alt | participation $alt | ||||
pavillon $alt | |||||
passion $alt | passion $alt | ||||
pension $alt | pension $alt | ||||
perception $alt | perception $alt |
// PB general rule: [a] after k before m | // PB general rule: [a] after k before m | ||||
k) a (m a // PB kam, kamp | k) a (m a // PB kam, kamp | ||||
c) a (mp & // PB camping | 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 => [&] | // PB kame => [&] | ||||
k) a (me & // PB kamel, kamera | k) a (me & // PB kamel, kamera | ||||
// PB general rule: [&] after d | // PB general rule: [&] after d | ||||
d) a (+ & // PB dame, dag | d) a (+ & // PB dame, dag | ||||
d) a (g@ a // PB dagbog | d) a (g@ a // PB dagbog | ||||
l) a (gt+ A // PB lagt | l) a (gt+ A // PB lagt | ||||
l) ag (_ &j // lag | l) ag (_ &j // lag | ||||
f) ag (s au // PB fagsnak | f) ag (s au // PB fagsnak | ||||
l) ag (C au // PB flagstang, lagkage | |||||
// PB general rule: [A] before vn after consonant | // PB general rule: [A] before vn after consonant | ||||
C) a (vn A // favn, savn | C) a (vn A // favn, savn | ||||
// PB general rule: [a] after kl before consonant | // PB general rule: [a] after kl before consonant | ||||
sp) ag (num Au // PB | sp) ag (num Au // PB | ||||
r) ag (e+ Au // PB drage, rage | r) ag (e+ Au // PB drage, rage | ||||
C) age (+ &:j@ // PB tage, bage, kage | C) age (+ &:j@ // PB tage, bage, kage | ||||
g) age (+ &:S@ // PB | |||||
fl) ager (mus AuV // PB | fl) ager (mus AuV // PB | ||||
C) ager (_+ &:jV // PB tager, bager, kager | C) ager (_+ &:jV // PB tager, bager, kager | ||||
l) agd (e &:j // PB lagde | l) agd (e &:j // PB lagde | ||||
offi) ce (r se // PB sprogofficer | offi) ce (r se // PB sprogofficer | ||||
ce (rt s'E // PB koncert | ce (rt s'E // PB koncert | ||||
c (i s | c (i s | ||||
frederi) c (ia =ks // PB | |||||
c (k | c (k | ||||
ch (+ S // PB check, chokolade | ch (+ S // PB check, chokolade | ||||
mi) ch (a k S | mi) ch (a k S | ||||
dodge dVdZ // PB city | dodge dVdZ // PB city | ||||
daiquiri d&k@ri // PB drink | daiquiri d&k@ri // PB drink | ||||
_) duke dZu:k // PB Duke - name | _) duke dZu:k // PB Duke - name | ||||
_) drive dRAjv // PB drive-in | |||||
_) drive (- dRAjv // PB drive-in | |||||
.group é // added by PB | .group é // added by PB | ||||
é 'e // idé, entré | é 'e // idé, entré | ||||
&b) e (@ E, // PB hv'alrosbest,and | &b) e (@ E, // PB hv'alrosbest,and | ||||
// PB general rules | // PB general rules | ||||
l) e e | l) e e | ||||
val) e (ncia 'E // PB | |||||
al) er V // PB maler | |||||
perl) e @ // PB | perl) e @ // PB | ||||
_dil) e (mma 'E // PB | _dil) e (mma 'E // PB | ||||
ll) e (de // PB silent e - billede | ll) e (de // PB silent e - billede | ||||
rn) e (d+ e // PB derned | rn) e (d+ e // PB derned | ||||
an) e (r @ // PB anerkende | an) e (r @ // PB anerkende | ||||
L09) e (de E // nede, nederlag | L09) e (de E // nede, nederlag | ||||
mus) e (um 'E // PB stressed | |||||
mån) e (d @ // PB | mån) e (d @ // PB | ||||
L09) e (t e // metal | L09) e (t e // metal | ||||
L09) e (l E // mellem | L09) e (l E // mellem | ||||
_st) eg (_ e // steg - verb, problem with noun = "roast" | _st) eg (_ e // steg - verb, problem with noun = "roast" | ||||
best) eg (_ 'e // PB besteg | best) eg (_ 'e // PB besteg | ||||
best) eg (et_ 'e // PB besteget | best) eg (et_ 'e // PB besteget | ||||
st) eg (å @g // PB præstegård | |||||
n) egl ajl // PB negl | n) egl ajl // PB negl | ||||
r) egel Ejl // PB regel | r) egel Ejl // PB regel | ||||
r) egl Ejl // PB regler | r) egl Ejl // PB regler | ||||
intellektu) el el // // PB | intellektu) el el // // PB | ||||
bestandd) el el // PB | bestandd) el el // PB | ||||
halvd) el el // PB | halvd) el el // PB | ||||
evang) el el // PB evangelie | |||||
d) el (t+ el // PB tildelt | d) el (t+ el // PB tildelt | ||||
lob) el (ia 'el // PB | lob) el (ia 'el // PB | ||||
d) el (A+ el // PB dele, omdele | d) el (A+ el // PB dele, omdele | ||||
mod) el el // PB fotomodel | mod) el el // PB fotomodel | ||||
_mod) el 'el // PB modelbureau | _mod) el 'el // PB modelbureau | ||||
u) el (+ 'el // aktuel, seksuel, visuel | u) el (+ 'el // aktuel, seksuel, visuel | ||||
u) el (t+ 'el // aktuelt, seksuelt, visuelt | |||||
gennemsku) el (ig =el | gennemsku) el (ig =el | ||||
ur) el (_+ '&#l // konjunkturel | ur) el (_+ '&#l // konjunkturel | ||||
and) el el // andel | and) el el // andel | ||||
&b) en (+ en // PB koben, nøgleben | &b) en (+ en // PB koben, nøgleben | ||||
_åb) en (+ @n // PB åben | _åb) en (+ @n // PB åben | ||||
våb) en (+ @n // PB vå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 | tj) en (st En // PB fortjenstmedalje | ||||
m) en (s+ En // PB menstruation | m) en (s+ En // PB menstruation | ||||
g) en (st en // PB genstand | g) en (st en // PB genstand | ||||
_) er (_ &r // PB er | _) er (_ &r // PB er | ||||
L09) er (ne_ V // PB kameraerne | L09) er (ne_ V // PB kameraerne | ||||
juvel) er (en 'er // PB juveleren | 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 | _l) er (_++ er // PB ler | ||||
v) er (r_ er // PB levere | v) er (r_ er // PB levere | ||||
th) er_ V // Luther | th) er_ V // Luther | ||||
år) ede (_+ 3D@ // PB sårede | år) ede (_+ 3D@ // PB sårede | ||||
odr) ede (_+ 3D@ // PB fodrede | odr) ede (_+ 3D@ // PB fodrede | ||||
obr) ede (_ 3D@ // PB erobrede | obr) ede (_ 3D@ // PB erobrede | ||||
tr) ede (_+ 3D@ // PB splintrede | |||||
tr) ede (_+ 3D-@ // PB splintrede | |||||
hundr) ed (+ @:D // PB hundred | hundr) ed (+ @:D // PB hundred | ||||
rn) ed (e eD // PB dernede | rn) ed (e eD // PB dernede | ||||
&k) ede (+ eD@ // PB dødkede | &k) ede (+ eD@ // PB dødkede | ||||
_klarin) et 'et // PB | _klarin) et 'et // PB | ||||
_servi) et 'et // PB | _servi) et 'et // PB | ||||
servi) et et // PB | servi) et et // PB | ||||
_prof) et 'et // PB stressed | |||||
klarin) et et // PB | klarin) et et // PB | ||||
_plan) et 'et // PB | _plan) et 'et // PB | ||||
meg) et (+ et // PB not a suffix | meg) et (+ et // PB not a suffix | ||||
al) geriet Sj3r'i@d // PB Algeriet | al) geriet Sj3r'i@d // PB Algeriet | ||||
al) gerier Sj'iV // PB Algeriet | al) gerier Sj'iV // PB Algeriet | ||||
al) gerisk Sj'i:rsg | al) gerisk Sj'i:rsg | ||||
g (iro S // PB | |||||
guinea gin'e& // PB | guinea gin'e& // PB | ||||
gui (nnes ge // PB | |||||
ødi) g (t_ // nødigt | ødi) g (t_ // nødigt | ||||
i) g (i g | i) g (i g | ||||
g (entl j // PB egentlig | g (entl j // PB egentlig | ||||
ble) g (ansigt j // PB blegansigt | ble) g (ansigt j // PB blegansigt | ||||
ble) g (fi j | ble) g (fi j | ||||
L08e) g j // PB steg, spegepølse | L08e) g j // PB steg, spegepølse | ||||
g (å++ g // PB præstegård | |||||
L08e) g (t g // PB stegt | L08e) g (t g // PB stegt | ||||
æ) g (e j | æ) g (e j | ||||
æl) g (e j // PB sælge vælge | æl) g (e j // PB sælge vælge | ||||
geneve Sen'E:v // PB | geneve Sen'E:v // PB | ||||
genève Sen'E:v // PB | genève Sen'E:v // PB | ||||
_) gudskelov (_ gusg@lVu // PB | _) gudskelov (_ gusg@lVu // PB | ||||
georgia dZV:dZj& | |||||
georgia dZV:dZj& // PB | |||||
gibraltar SibRalt'A // PB | |||||
.group ge | .group ge | ||||
_l) ig (_ordentligt ek // PB | _l) ig (_ordentligt ek // PB | ||||
_l) ig (_godt ek // PB | _l) ig (_godt ek // PB | ||||
_l) ig (_roligt ek // PB | _l) ig (_roligt ek // PB | ||||
pav) ill (o ilj // PB pavillon | |||||
færd) ig i // PB silent g | færd) ig i // PB silent g | ||||
hurt) ig i // PB silent g | hurt) ig i // PB silent g | ||||
ig (hed i // PB vittighed | ig (hed i // PB vittighed | ||||
sk) i (dt i // PB skidt | sk) i (dt i // PB skidt | ||||
sk) i (mm e // PB skimmel | sk) i (mm e // PB skimmel | ||||
mask) i (n 'i // PB stressed - maskinskrive | mask) i (n 'i // PB stressed - maskinskrive | ||||
par) i (s 'i // PB | |||||
h) i (d i // PB hidtil | h) i (d i // PB hidtil | ||||
b) i (lled e / PB billede | b) i (lled e / PB billede | ||||
kr) i (dt i // PB skridt, kridt | kr) i (dt i // PB skridt, kridt | ||||
v) i (sne e // PB | v) i (sne e // PB | ||||
l) i (e j | l) i (e j | ||||
r) i (gt e // PB rigtigt | r) i (gt e // PB rigtigt | ||||
r) i (c e // PB Fredericia | |||||
l) ig (g+ e // PB ligge - only one g | l) ig (g+ e // PB ligge - only one g | ||||
s) i (e j | s) i (e j | ||||
// t) i (e j | // t) i (e j | ||||
spe) k (takl // silent k - spektakler | spe) k (takl // silent k - spektakler | ||||
&) k k // after stressed vowel | &) k k // after stressed vowel | ||||
_) kate (_ kEjt // PB name | _) kate (_ kEjt // PB name | ||||
karaoke k&r&'ouki // PB | |||||
// &) kk g | // &) kk g | ||||
.group l // PB l changed to l/3 in ph_danish | .group l // PB l changed to l/3 in ph_danish | ||||
.group ng | .group ng | ||||
ng (_ N // general rule - ting, ring | ng (_ N // general rule - ting, ring | ||||
A) ng (e N // general rule - mange, penge | 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 | allo) ng (e NS // PB | ||||
_ri) ng (o ng // PB Ringo - name | _ri) ng (o ng // PB Ringo - name | ||||
hæ) ng N // PB hængning | hæ) ng N // PB hængning | ||||
hypok) o (nder 'V // PB | hypok) o (nder 'V // PB | ||||
d) o (b V // PB dobbelt | d) o (b V // PB dobbelt | ||||
d) o (nn V // PB donna | d) o (nn V // PB donna | ||||
b) o (ls V // PB bolsje | |||||
h) o (ll V // PB Holland | h) o (ll V // PB Holland | ||||
_horis) o (n 'V // PB horisont | _horis) o (n 'V // PB horisont | ||||
o (nt V // PB dont | o (nt V // PB dont | ||||
kol) on Vn | kol) on Vn | ||||
kol) onn 'Vn // kolonne - only one n, stressed | kol) onn 'Vn // kolonne - only one n, stressed | ||||
kompagn) on VN | kompagn) on VN | ||||
_pavill) on 'VN | |||||
pavill) on VN | |||||
orl) on Vn | orl) on Vn | ||||
_maked) on 'on // PB makedoner | _maked) on 'on // PB makedoner | ||||
perl) on Vn | perl) on Vn | ||||
_f) or (a_ 'V // PB fora (plur. of 'forum') | _f) or (a_ 'V // PB fora (plur. of 'forum') | ||||
_f) or (an_ 'V // PB foran | _f) or (an_ 'V // PB foran | ||||
_f) or (ankørende 'V // PB forankørende | _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 (ansat 'V // PB foransat | ||||
_f) or (anstille 'V // PB foranstillet | _f) or (anstille 'V // PB foranstillet | ||||
_f) or (anstående 'V // PB foranstående | _f) or (anstående 'V // PB foranstående | ||||
ky) s s // PB not a suffix | ky) s s // PB not a suffix | ||||
anderlede) s s // PB not a suffix | anderlede) s s // PB not a suffix | ||||
interferen) s s // PB not a suffix | interferen) s s // PB not a suffix | ||||
residen) s s // PB | |||||
tilpa) s s | tilpa) s s | ||||
s (p s | s (p s | ||||
sydney sidni // PB | sydney sidni // PB | ||||
shakespeare SEiksbi:r // PB | shakespeare SEiksbi:r // PB | ||||
squash sgwVS // PB | squash sgwVS // PB | ||||
shor (t SV // PB shorts | |||||
_) stone sdoun // PB namde - Stone | _) stone sdoun // PB namde - Stone | ||||
er_) sig (_til saj // PB avoid [si] - glæder sig [saj] til | er_) sig (_til saj // PB avoid [si] - glæder sig [saj] til | ||||
et_) sig (_til saj // PB avoid [si] - glædet sig [saj] til | et_) sig (_til saj // PB avoid [si] - glædet sig [saj] til | ||||
// PB final -tur in da_list - stressed u | // PB final -tur in da_list - stressed u | ||||
&t) ur ($p_alt 'ur // struktur | &t) ur ($p_alt 'ur // struktur | ||||
_komf) ur 'ur // PB | |||||
// PB final -ut in da_list - stressed u | // PB final -ut in da_list - stressed u | ||||
&) ut ($p_alt 'ut // rekrut | &) ut ($p_alt 'ut // rekrut | ||||
f) yrre (t Y:V // PB fyrretræ | f) yrre (t Y:V // PB fyrretræ | ||||
n) y (t Y // PB nyt | n) y (t Y // PB nyt | ||||
n) y (tt W // PB nytte, benytte | 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 (tt W: // PB tilknytte | ||||
kn) y (t y // PB knyt | kn) y (t y // PB knyt | ||||
k) y (s W // PB kys | k) y (s W // PB kys | ||||
tr) æ (n &# // PB trænge | tr) æ (n &# // PB trænge | ||||
tr) æ (ne E // PB træne | tr) æ (ne E // PB træne | ||||
dr) æ (n E // PB dræ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) æ (n &# // PB changed from [Aj] - rænke | ||||
// r) æ (k &# // PB række | // r) æ (k &# // PB række | ||||
// r) æ (t &# // PB åndedræt | // 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 | pr) æ (k E // PB præke | ||||
bl) ære EV // PB blærerøv | bl) ære EV // PB blærerøv | ||||
gr) æ (ken E // Grækenland | gr) æ (ken E // Grækenland | ||||
br) æ (dd a // PB brædder | br) æ (dd a // PB brædder | ||||
br) æ (t &# // PB bræt | br) æ (t &# // PB bræt | ||||
dr) æ (gtig &# // PB nederdrægtig | dr) æ (gtig &# // PB nederdrægtig | ||||
r) æ (k &# // PB skrækkelig | |||||
br) æ (nd &# // PB brænde | |||||
pr) æ (st & // PB præst | pr) æ (st & // PB præst | ||||
tr) æ (t & // PB træt | tr) æ (t & // PB træt | ||||
tr) æ (f &# // PB træffe | tr) æ (f &# // PB træffe | ||||
tr) æ (k &# // PB trække | |||||
fr) æ (k &# // PB | |||||
gr) æ (n & // PB grænse | gr) æ (n & // PB grænse | ||||
gr) æ (s &# // PB græs | gr) æ (s &# // PB græs | ||||
gr) æ (d &# // PB græde | gr) æ (d &# // PB græde | ||||
øjer W#jV // PB bøjer | øjer W#jV // PB bøjer | ||||
ø (jn W# // PB øjne | ø (jn W# // PB øjne | ||||
l) øg 'Vj // løgn, løg | l) øg 'Vj // løgn, løg | ||||
gl) øgg Wg // PB gløgg | |||||
g) øg (l Vj // PB gøgler | g) øg (l Vj // PB gøgler | ||||
l) ø (s W | l) ø (s W | ||||
C) ø (j W# // PB søjle, bøjle | C) ø (j W# // PB søjle, bøjle | ||||
åre V3 // PB tåre | åre V3 // PB tåre | ||||
å (lti V // PB måltid | å (lti V // PB måltid | ||||
.group ' | .group ' | ||||
's (_S2 s | 's (_S2 s | ||||
'en (_S3 @n | |||||
'er (_S3 %V | 'er (_S3 %V | ||||
'erne (_S5 %Vn@ | 'erne (_S5 %Vn@ | ||||
'ernes (_S6 %Vn@s | 'ernes (_S6 %Vn@s | ||||
$ dVlV // PB changed from [dVlar] | $ dVlV // PB changed from [dVlar] | ||||
ñ _^_ES // PB mañana | ñ _^_ES // PB mañana | ||||
ï i: // PB Thaïs | ï 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 |
_9X 'nOYntsIC | _9X 'nOYntsIC | ||||
_0C 'hUnd3t | _0C 'hUnd3t | ||||
_0M1 'taUz@nt | _0M1 'taUz@nt | ||||
_1M1 'taUz@nt // no '1' before thousand | |||||
_0M2 ||mIlI'o:n@n | _0M2 ||mIlI'o:n@n | ||||
_1M2 _'aIn@||mIlI'o:n | _1M2 _'aIn@||mIlI'o:n | ||||
_0M3 ||mIlI'ard@n | _0M3 ||mIlI'ard@n | ||||
horsam hO3zA:m | horsam hO3zA:m | ||||
hostie $alt | 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 | lappalie $alt | ||||
lilie $alt | lilie $alt | ||||
the D@ // English | the D@ // English | ||||
theater te:'A:t3 | theater te:'A:t3 | ||||
train tre:n | train tre:n | ||||
tsunami tsu:n'a:mi: | |||||
turin $2 | turin $2 | ||||
umweg $1 | umweg $1 | ||||
unten Unt@n | 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 | verein fEr'aIn | ||||
vielbesprochen $3 | vielbesprochen $3 | ||||
vielleicht $2 | vielleicht $2 | ||||
vorig fo:rIg# | vorig fo:rIg# | ||||
//wahrscheinlich $2 | //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 | zugegen tsu:g'e:g@n | ||||
zurück $2 | |||||
zymbal $1 | |||||
zurück $2 | |||||
zymbal $1 | |||||
// Names | // Names | ||||
Djakarta dZak'artA: | |||||
Djibouti dZib'u:ti: | |||||
Georg ge:Ork $only | Georg ge:Ork $only | ||||
George dZO:rdZ | George dZO:rdZ | ||||
Khmer kme:r | |||||
Mc m@-k | |||||
Neumexiko $2 | Neumexiko $2 | ||||
Neuseeland $2 | Neuseeland $2 | ||||
Rwanda rU'andA: | |||||
Sri sr,i: |
// * <http://www.gnu.org/licenses/>. * | // * <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 | // This file is UTF-8 encoded | ||||
.group b | .group b | ||||
_) b (_ be: | _) b (_ be: | ||||
_) b (L01A b // allow bl br at start of word | |||||
b b | b b | ||||
b) b | b) b | ||||
b (_N p | b (_N p | ||||
b (L01 p | |||||
b (L02 p | |||||
b (sA b | b (sA b | ||||
bt (_N pt | bt (_N pt | ||||
.group c | .group c | ||||
_) c (_ se: | _) 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 k | ||||
c) c | c) c | ||||
e) chen (_ C@n | e) chen (_ C@n | ||||
ü) chen (_ C@n | ü) chen (_ C@n | ||||
_) chr kr | |||||
chs ks (_ | chs ks (_ | ||||
ck k | ck k | ||||
_) ch (if S | _) ch (if S | ||||
_) ch (il S | _) ch (il S | ||||
chip (_ tSIp // English | chip (_ tSIp // English | ||||
_) ch (ol k | |||||
_) ch (or k | |||||
bre) ch (en x | bre) ch (en x | ||||
chro kro: | chro kro: | ||||
pla) c (ie ts | pla) c (ie ts | ||||
coat (_ _^_EN | coat (_ _^_EN | ||||
_) code ko:t | _) code ko:t | ||||
_) computer(@P kOmpj'u:t3 | |||||
_) cow _^_EN | _) cow _^_EN | ||||
crew _^_EN | crew _^_EN | ||||
cup _^_EN | cup _^_EN | ||||
.group d | .group d | ||||
_) d (_ de: | _) d (_ de: | ||||
_) d (rA d // allow dr at start of word | |||||
_) d (schA d | |||||
_) d (shA d | |||||
d d | d d | ||||
d) d | d) d | ||||
d (_N t | d (_N t | ||||
d (L01 t | |||||
d (L02 t | |||||
d (sA d | d (sA d | ||||
ds (_ ts | ds (_ ts | ||||
dt t | dt t | ||||
_) f (_ Ef | _) f (_ Ef | ||||
f f | f f | ||||
f) f | f) f | ||||
_) f (L01A f // allow fl fr at start of word | |||||
_) f (jord f | |||||
_) faks (i f%akz | _) faks (i f%akz | ||||
_) farb (C@P4 f'arp | _) farb (C@P4 f'arp | ||||
.group g | .group g | ||||
_) g (_ ge: | _) g (_ ge: | ||||
_) g (L01A g // allow _gl _gr | |||||
g g | g g | ||||
g (g | g (g | ||||
g (_N k | g (_N k | ||||
g (L01 k | |||||
g (L02 k | |||||
g (sA g | g (sA g | ||||
gd (_N kt | gd (_N kt | ||||
_) gh (A g | |||||
_) g (nA g@- // allow _gn | |||||
B) gn (A g@-n | |||||
i) gt (_ Ct | i) gt (_ Ct | ||||
zei) gt (_ kt | zei) gt (_ kt | ||||
gtet (_ kt@t | gtet (_ kt@t | ||||
_) g (eHC g // hC, lC, mC, nC, rC | _) g (eHC g // hC, lC, mC, nC, rC | ||||
_) gn (A g@-n | |||||
B) gn (A g@-n | |||||
@) ght (_ _^_EN | @) ght (_ _^_EN | ||||
graph grAf | graph grAf | ||||
i (dee %i: | i (dee %i: | ||||
i (erin =i: | i (erin =i: | ||||
&) ig (+ Ig# // [ig] or [iC] | &) ig (+ Ig# // [ig] or [iC] | ||||
igh aI | |||||
igh (K _^_EN | |||||
i (i i:_! | i (i i:_! | ||||
_) j (_ jOt | _) j (_ jOt | ||||
j j | j j | ||||
.group k | .group k | ||||
_) k (_ kA: | _) k (_ kA: | ||||
k k | k k | ||||
_) k (L01A k // allow _kl _kr | |||||
_) k (ha k | |||||
_) k (nA k // allow _kn | |||||
k) k | k) k | ||||
// @) keit (_S4 kaIt | // @) keit (_S4 kaIt | ||||
_) mit (P3 m'It | _) mit (P3 m'It | ||||
mitt mIt | mitt mIt | ||||
mitt (eil mItt | mitt (eil mItt | ||||
_) m (nem m // allow _mnem | |||||
_) mo (rb m%O | _) mo (rb m%O | ||||
_) mono (@ m,o:no: | _) mono (@ m,o:no: | ||||
_) motor m%o:to:r | _) motor m%o:to:r | ||||
z) oo (m u: | z) oo (m u: | ||||
&t) or (_ =o:r | &t) or (_ =o:r | ||||
&) oren (_ 'o:r@n | &) oren (_ 'o:r@n | ||||
_) orts (@P4 'Orts | |||||
oso (_ 'o:zo: | oso (_ 'o:zo: | ||||
st) o (ss o: | st) o (ss o: | ||||
oy (K OY | oy (K OY | ||||
.group p | .group p | ||||
_) p (_ pe: | _) p (_ pe: | ||||
p p | 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 | ph f | ||||
_) p (neu p // allow _pneu | |||||
_) p (sA p // allow _ps | |||||
_) p (tol p | |||||
pake (t p%ake: | pake (t p%ake: | ||||
_) para (@ p,ara | _) para (@ p,ara | ||||
po (et p%o: | po (et p%o: | ||||
poesie po:e:z'i: | poesie po:e:z'i: | ||||
_) poly (@P4 p,o:ly: | _) poly (@P4 p,o:ly: | ||||
_) polygon (@P7 po:ly:g'o:n | |||||
partei p%artaI | partei p%artaI | ||||
_) perfe (k p%ErfE | _) perfe (k p%ErfE | ||||
_) polik p'o:li:k | _) polik p'o:li:k | ||||
r (r | r (r | ||||
b) r @-* | b) r @-* | ||||
_) r r | _) r r | ||||
_) rh r | |||||
_) rh (A r // allow _rh | |||||
rangier rA:NZ'i:r | rangier rA:NZ'i:r | ||||
_) re (d re: | _) re (d re: | ||||
ss s | ss s | ||||
sst (@ sSt | 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 | sch S | ||||
_) sh S | |||||
sh (K S | sh (K S | ||||
sou (nd saU | sou (nd saU | ||||
p) s (a s | p) s (a s | ||||
p) s (i s | p) s (i s | ||||
t) s (i s | t) s (i s | ||||
k) s (i s | k) s (i s | ||||
_) sp Sp | |||||
_be) sp Sp | _be) sp Sp | ||||
_ge) sp Sp | _ge) sp Sp | ||||
_ver) sp Sp | _ver) sp Sp | ||||
&C) ster (_S4 st3 | &C) ster (_S4 st3 | ||||
&C) stes (_S4 st@s | &C) stes (_S4 st@s | ||||
_) st St | |||||
_be) st St | _be) st St | ||||
_ge) st St | _ge) st St | ||||
_ver) st St | _ver) st St | ||||
.group t | .group t | ||||
_) t (_ te: | _) t (_ te: | ||||
t t | t t | ||||
t) t | |||||
t) t | |||||
_) th (A t // allow _th | |||||
_) th (rA t // allow _thr | |||||
th (K t | th (K t | ||||
K) th t | K) th t | ||||
_) t (rA t // allow _tr | |||||
_) tsch (A tS | |||||
_) t (setse t | |||||
_) tw (A tw | |||||
tz ts | tz ts | ||||
&t) te (_ @ | &t) te (_ @ | ||||
_) talent tal'Ent | _) talent tal'Ent | ||||
tch tS | tch tS | ||||
_) tsch tS | |||||
t (chen_ t | t (chen_ t | ||||
_) teen _^_EN | _) teen _^_EN | ||||
_) tele (@ t,e:le: | _) tele (@ t,e:le: | ||||
v) v | v) v | ||||
v (_N f | v (_N f | ||||
_) v (lad v | |||||
_) v (lies f | |||||
_) v (ri f | |||||
_) vie fi: | _) vie fi: | ||||
_) vi (CC vI | _) vi (CC vI | ||||
_) vi vi: | _) vi vi: | ||||
.group w | .group w | ||||
_) w (_ ve: | _) w (_ ve: | ||||
w v | w v | ||||
_) wh (A v | |||||
_) w (lad v | |||||
_) w (rA v | |||||
@) wert (_ vErt | @) wert (_ vErt | ||||
_) wh _^_EN | _) wh _^_EN | ||||
.group z | .group z | ||||
_) z (_ tsEt | _) z (_ tsEt | ||||
z ts | z ts | ||||
z) z | |||||
z) z | |||||
_) z (den z | |||||
_) z (wA ts // allow _zw | |||||
_) zentral (@P7 tsEntr'A:l | _) zentral (@P7 tsEntr'A:l | ||||
_) zentral (i tsEntral | _) zentral (i tsEntral |
T tS v w x x2 z Z | 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 | @ a a# aI e E E2 i | ||||
o O u U | o O u U | ||||
x z | x z | ||||
Dictionary da_dict 2010-07-03 | |||||
Dictionary da_dict 2010-07-29 | |||||
& &# 0 3 @ @- a A | & &# 0 3 @ @- a A | ||||
e E i o O u V W | e E i o O u V W | ||||
s S t T tS v w z | 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: | A a: E e: i i: o o: | ||||
u u: Y y y: Y: | u u: Y y y: Y: | ||||
t tS ts v z Z | t tS ts v z Z | ||||
Dictionary de_dict 2010-07-03 | |||||
Dictionary de_dict 2010-07-27 | |||||
3 3: @ @- a A A: aI | 3 3: @ @- a A A: aI | ||||
aU E E2 E: e: EI i I | aU E E2 E: e: EI i I | ||||
T ts v x z z; | T ts v x z z; | ||||
Dictionary en_dict 2010-07-13 | |||||
Dictionary en_dict 2010-07-30 | |||||
0 3 3: @ @- @2 @5 @L | 0 3 3: @ @- @2 @5 @L | ||||
a a# A: A@ aa aI aI@ aU | a a# A: A@ aa aI aI@ aU | ||||
V VR | V VR | ||||
: ; ? b C d D dZ | : ; ? 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 | Dictionary eo_dict 2010-05-19 | ||||
x z Z | x z Z | ||||
Dictionary es_dict 2010-07-13 | |||||
Dictionary es_dict 2010-07-28 | |||||
a aI aU e E eI eU i | a aI aU e E eI eU i | ||||
o O oI u | o O oI u | ||||
s2 t v w Z | 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 | Dictionary grc_dict 2008-03-03 | ||||
t tS ts tS; v x z Z | 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 | @ @- @2 @3 a a: aI aU | ||||
e E e: E: E~ i I i: | e E e: E: E~ i I i: | ||||
l- o O o: O: O~ o~ r- | l- o O o: O: O~ o~ r- | ||||
U u: u~ V | 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 | 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 | Dictionary hy_dict 2008-12-22 | ||||
t tS v w x | t tS v w x | ||||
Dictionary nl_dict 2010-07-18 | |||||
Dictionary nl_dict 2010-07-27 | |||||
8 @ @- A a: A~ E e: | 8 @ @- A a: A~ E e: | ||||
EI eU i I O O: o: u | EI eU i I O O: o: u | ||||
s S s; t v w x z | 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 | a a/ aI e E eI i o | ||||
O u y Y | O u y Y | ||||
v w x z Z | v w x z Z | ||||
Dictionary tr_dict 2010-06-02 | |||||
Dictionary tr_dict 2010-07-27 | |||||
@ a e E i I o O | @ a e E i I o O | ||||
u U W y Y | u U W y Y | ||||
; b d f g j k l | ; b d f g j k l | ||||
m n N p r s S t | m n N p r s S t | ||||
tS v z Z | 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 |
fishnet fISnEt | fishnet fISnEt | ||||
fiord fi:O@d | fiord fi:O@d | ||||
fix fIks // for fixer | fix fIks // for fixer | ||||
fjord fIO@d | |||||
flagellum fla#dZEl@m | flagellum fla#dZEl@m | ||||
flamenco fla#mENkoU | flamenco fla#mENkoU | ||||
flexible flEksIb@L | flexible flEksIb@L | ||||
Egyptian IdZ'IpS@n | Egyptian IdZ'IpS@n | ||||
Eire e@r@ | Eire e@r@ | ||||
Geneva dZ@ni:v@ | Geneva dZ@ni:v@ | ||||
Gdansk g@-dansk | |||||
Gomera goUm'e@r@ | Gomera goUm'e@r@ | ||||
Harare ha#rA:rI | Harare ha#rA:rI | ||||
Hanoi han'OI | Hanoi han'OI | ||||
Liberia laIb'i@ri:@ | Liberia laIb'i@ri:@ | ||||
Lima li:ma# | Lima li:ma# | ||||
Luxembourg lVks@mb3:g | Luxembourg lVks@mb3:g | ||||
Lvov l@-v0v | |||||
?5 Luxembourg lVks@mbVRg | ?5 Luxembourg lVks@mbVRg | ||||
Madagascar mad@g'ask3 | Madagascar mad@g'ask3 | ||||
Madras m@draas | Madras m@draas | ||||
Quebec kwI2bEk | Quebec kwI2bEk | ||||
Raleigh rA:lI | Raleigh rA:lI | ||||
Reno ri:noU | Reno ri:noU | ||||
Rio ri:oU | |||||
Sahel sA:h'El | Sahel sA:h'El | ||||
Saigon saIg'0n | Saigon saIg'0n | ||||
Santiago santI'A:goU | Santiago santI'A:goU | ||||
(tel aviv) t,El||a#v'i:v | (tel aviv) t,El||a#v'i:v | ||||
Tenerife tEn3r'i:f | Tenerife tEn3r'i:f | ||||
Texas tEks@s | Texas tEks@s | ||||
Tblisi t@-bli:si | |||||
Toronto t@r0ntoU | Toronto t@r0ntoU | ||||
Timor ti:mo@ | Timor ti:mo@ | ||||
Tokyo toUkIoU | Tokyo toUkIoU | ||||
Barack ba#rA:k | Barack ba#rA:k | ||||
Barbara bA@b@r@ | Barbara bA@b@r@ | ||||
Betsy bEtsI | Betsy bEtsI | ||||
Bjorn bjO@n | |||||
Boris b0rIs | Boris b0rIs | ||||
Brien braI@n | Brien braI@n | ||||
Candace kandIs | Candace kandIs | ||||
Denise d@ni:s | Denise d@ni:s | ||||
Derek dErIk | Derek dErIk | ||||
Dinah daIn@ | Dinah daIn@ | ||||
Dmitri d@mi:tri | |||||
Dominic d0mI2nIk | Dominic d0mI2nIk | ||||
Donaghy d0n'hi: | Donaghy d0n'hi: | ||||
Doris d0rIs | Doris d0rIs | ||||
Dorothy dO@r@Ti | Dorothy dO@r@Ti | ||||
Dougall du:g@L | Dougall du:g@L | ||||
Dvina d@vi:n@ | |||||
Dylan dIl@n | Dylan dIl@n | ||||
Edith i:dIT | Edith i:dIT | ||||
Elise I2li:z | Elise I2li:z |
// ?7 Scottish | // ?7 Scottish | ||||
// ?8 Use full vowel, not schwa in some word endings | // ?8 Use full vowel, not schwa in some word endings | ||||
// Group Y, vowels + y | |||||
.L01 l r | .L01 l r | ||||
.L02 i y | .L02 i y | ||||
.L03 a i o u // vowel, not 'e' | .L03 a i o u // vowel, not 'e' | ||||
aar 'A@ | aar 'A@ | ||||
w) a (b 0 | w) a (b 0 | ||||
r) a (ciA eI | r) a (ciA eI | ||||
_r) a (cis eI | |||||
w) a (d 0 | w) a (d 0 | ||||
ow) a (d @ | ow) a (d @ | ||||
ae i: | ae i: | ||||
&) able (_S4iev @b@L // suffix | &) able (_S4iev @b@L // suffix | ||||
&c) able (_ @b@L | &c) able (_ @b@L | ||||
@ct) 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 | &) ably (_S4iefv @bl%I | ||||
&c) ably (_S4fv @bl%I | &c) ably (_S4fv @bl%I | ||||
accu (ra akjU | accu (ra akjU | ||||
accus (A a#kju:z | accus (A a#kju:z | ||||
ace (_ eIs | ace (_ eIs | ||||
sp) ac (e eIs | |||||
_r) ac (e eIs | |||||
_) ac (e a#s | _) ac (e a#s | ||||
_r) ac (is eIs | |||||
acean (_ 'eIS@n | acean (_ 'eIS@n | ||||
pl) ac (at a#k | pl) ac (at a#k | ||||
pl) ac (eb @s | pl) ac (eb @s | ||||
achia 'eIS@ | achia 'eIS@ | ||||
f) ac (ilit @s | f) ac (ilit @s | ||||
_m) ace (d asI | _m) ace (d asI | ||||
m) achi (n# @Si: | |||||
m) achi (nA# @Si: | |||||
m) achina (t aSI2neI | m) achina (t aSI2neI | ||||
ach (rom ak | ach (rom ak | ||||
ac (id_ as | ac (id_ as | ||||
_b) ac (o eIk | _b) ac (o eIk | ||||
y) ach (t 0 | y) ach (t 0 | ||||
&) ac (y_ @s | &) ac (y_ @s | ||||
cr) ac (y_ =@s | |||||
.group ad | .group ad | ||||
_) ad (@ a#d | _) ad (@ a#d | ||||
purch) as (e Is | purch) as (e Is | ||||
ph) ase (_ eIz | ph) ase (_ eIz | ||||
r) ase (_ eIz | r) ase (_ eIz | ||||
&) asey (_ @s%I | |||||
&) asey (_ @s%i | |||||
b) as (i eIs | b) as (i eIs | ||||
b) as (il az | b) as (il az | ||||
as (sist a# | as (sist a# | ||||
nt) as (t as | nt) as (t as | ||||
as (ive 'eIs | as (ive 'eIs | ||||
as (ymp as | as (ymp as | ||||
&) asy (_ @s%I | |||||
&) asy (_ @s%i | |||||
w) ast (e# eIst | w) ast (e# eIst | ||||
.group at | .group at | ||||
.group b | .group b | ||||
b b | b b | ||||
_) bh b | |||||
_) b (L01Y b // allow _bl _br | |||||
_) brz (e brz | |||||
b (b | b (b | ||||
m) b (_ | m) b (_ | ||||
_) bally (@ b,alI2 | _) bally (@ b,alI2 | ||||
.group c | .group c | ||||
c k | c k | ||||
_) c (L01Y k // allow _cl _cr | |||||
_) cz (ar ts | |||||
_) cz (e tS | |||||
cc k | cc k | ||||
ck k | ck k | ||||
c (e s | c (e s | ||||
czech tSEk | czech tSEk | ||||
.group ch | .group ch | ||||
_) ch (Y tS | |||||
_) ch (L01Y k | |||||
ch tS | ch tS | ||||
ch (r k | ch (r k | ||||
chry (sa krI | chry (sa krI | ||||
.group d | .group d | ||||
d d | d d | ||||
_) d (L01Y d // allow _dl _dr | |||||
_) dj (Y dZ | |||||
_) d (nie d | |||||
_) d (wY d // allow _dw | |||||
d (d | d (d | ||||
_) d' (AP2 d | _) d' (AP2 d | ||||
@@e) d (_S1 d // suffix | @@e) d (_S1 d // suffix | ||||
econo (m Ik'0n@ | econo (m Ik'0n@ | ||||
econo (mic i:k@n'0 | econo (mic i:k@n'0 | ||||
_) eco (s i:koU | _) eco (s i:koU | ||||
&) ecy (_ @s%I | |||||
&) ecy (_ @s%i | |||||
ee i: | ee i: | ||||
coff) ee I | coff) ee I | ||||
ee (m 'i: | ee (m 'i: | ||||
_) encha (n %EntSaa | _) encha (n %EntSaa | ||||
enclav EnkleIv | enclav EnkleIv | ||||
en (core 0n | en (core 0n | ||||
&) ency (_ @ns%I | |||||
&) ency (_ @ns%i | |||||
ency (cli %EnsI | ency (cli %EnsI | ||||
en (dA_ 'En | en (dA_ 'En | ||||
_) en (d En | _) en (d En | ||||
.group f | .group f | ||||
f f | f f | ||||
_) f (L01Y f // allow _fl _fr | |||||
_) fj (ord fI' | |||||
f (f | f (f | ||||
fa (ciA feI | fa (ciA feI | ||||
fa (miliar f@ | fa (miliar f@ | ||||
.group g | .group g | ||||
g g | g g | ||||
_) g (L01Y g | |||||
_) gh (Y g | |||||
_) g (nY | |||||
_) g (wA g | |||||
gg g | gg g | ||||
g (e dZ | g (e dZ | ||||
_) gaol dZeIl | _) gaol dZeIl | ||||
g (ilC g | g (ilC g | ||||
l) ging dZI2N | l) ging dZI2N | ||||
g (y dZ | g (y dZ | ||||
_) g (n | |||||
exa) gg (er dZ | exa) gg (er dZ | ||||
ght t | ght t | ||||
_) gh g | |||||
gh (_ g | gh (_ g | ||||
C) gh (A g | C) gh (A g | ||||
gh (C g | gh (C g | ||||
.group ie | .group ie | ||||
ie I | ie I | ||||
X) ie i: | |||||
ie (_ aI | ie (_ aI | ||||
ied (_S2i d // suffix | ied (_S2i d // suffix | ||||
ieds (_S3i dz | ieds (_S3i dz | ||||
ie (k i: | ie (k i: | ||||
ie (l i: | ie (l i: | ||||
ie (llA I2'E | ie (llA I2'E | ||||
n) iel (_ I2@L | |||||
&n) iel (_ I2@L | |||||
&r) iel (_ =i:@L | &r) iel (_ =i:@L | ||||
ie (n i@ | ie (n i@ | ||||
d) iene (_ 'aIi:n | d) iene (_ 'aIi:n | ||||
ie (ve i: | ie (ve i: | ||||
s) ie (ve I | s) ie (ve I | ||||
ie (z i: | ie (z i: | ||||
_t) ie aI | |||||
.group ig | .group ig | ||||
am) ig (a_ i:g | am) ig (a_ i:g | ||||
.group in | .group in | ||||
@) ing (_+S3dve IN | @) ing (_+S3dve IN | ||||
@) ings (_S4dve INz | @) ings (_S4dve INz | ||||
@) ingly (_S5dve INg-lI | |||||
@) ingment (_S7dve INg-m@nt | |||||
@) ingly (_S5dve INlI | |||||
@) ingment (_S7dve INm@nt | |||||
logu) ing (_S4v IN | logu) ing (_S4v IN | ||||
x) ing (_+S3v IN | x) ing (_+S3v IN | ||||
el) ing (_+S3dv IN | el) ing (_+S3dv IN | ||||
@@om) ing (_S3dv IN | @@om) ing (_S3dv IN | ||||
en) ing (_S3v IN | en) ing (_S3v IN | ||||
en) ings (_S4v INz | en) ings (_S4v INz | ||||
en) ingly (_S5vf INg-lI | |||||
en) ingly (_S5vf INgI | |||||
er) ing (_S3v IN | er) ing (_S3v IN | ||||
er) ings (_S4v INz | 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 | Br) ing (_ IN | ||||
?7 &) in (_ @n | ?7 &) in (_ @n | ||||
_) it' %It | _) it' %It | ||||
_m) it (o aIt | _m) it (o aIt | ||||
it (o_ 'i:t | it (o_ 'i:t | ||||
_C) ity (_ ItI | |||||
_C) ity (_ Iti | |||||
_ed) it It | _ed) it It | ||||
cred) it It | cred) it It | ||||
CAt) it (_ 'i:t //apetite | CAt) it (_ 'i:t //apetite | ||||
v) it (al aIt | v) it (al aIt | ||||
t) it (l aIt | t) it (l aIt | ||||
&) ity (_ =I2t%I | |||||
&) ity (_ =I2t%i | |||||
orb) it It | orb) it It | ||||
@@) it (an_ =It | @@) it (an_ =It | ||||
?3 &) itary (_ @tEr%I // military | ?3 &) itary (_ @tEr%I // military | ||||
.group k | .group k | ||||
k k | k k | ||||
k (k | k (k | ||||
_) kn n | |||||
_) k (L01Y k | |||||
_) k (hY k | |||||
_) k (wY k | |||||
_) kn (Y n | |||||
kn (if n | kn (if n | ||||
kn (iv n | kn (iv n | ||||
kn (it n | kn (it n | ||||
.group l | .group l | ||||
l l | l l | ||||
l (l | l (l | ||||
_) l (hY l | |||||
_) ll (Y l | |||||
_) l (ju l | |||||
l (_ l | l (_ l | ||||
A') ll l | A') ll l | ||||
A) ll l | A) ll l | ||||
?8 @) lessly (_S6i lEsl%I | ?8 @) lessly (_S6i lEsl%I | ||||
?8 @) lessness (_S8i lEsnEs | ?8 @) lessness (_S8i lEsnEs | ||||
.group m | .group m | ||||
m m | m m | ||||
mm m | mm m | ||||
_) mn (e n | |||||
h) m (_ @m | h) m (_ @m | ||||
B) m (_ @m | B) m (_ @m | ||||
l) m (_ m | l) m (_ m | ||||
_) mc (A mak | _) mc (A mak | ||||
_) mc (-A mak | _) mc (-A mak | ||||
mn (_ m | mn (_ m | ||||
_) mn n | |||||
&B) me (_ m%I | &B) me (_ m%I | ||||
@) men (_ mEn | @) men (_ mEn | ||||
&) ment (_S4 m@nt | &) ment (_S4 m@nt | ||||
.group n | .group n | ||||
n n | n n | ||||
n) n | n) n | ||||
_) n (gY+ @-N | |||||
&ia) n (_S1 n | &ia) n (_S1 n | ||||
&ia) ns (_S2 nz | &ia) ns (_S2 nz | ||||
@) name (_S4 neIm | @) name (_S4 neIm | ||||
&dr) ous (_ =@s | &dr) ous (_ =@s | ||||
&l) ous (_ @s | &l) ous (_ @s | ||||
&) ous (_ @s | &) ous (_ @s | ||||
&) ousy (_ @s%I | |||||
&) ousy (_ @s%i | |||||
&m) ous (_ @s | &m) ous (_ @s | ||||
&n) ous (_ @s | &n) ous (_ @s | ||||
_) out (@P3 %aUt // prefix out | _) out (@P3 %aUt // prefix out | ||||
.group p | .group p | ||||
p p | p 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 | ph f | ||||
phenome (n fI2n0mI | phenome (n fI2n0mI | ||||
phenyl f,i:naIl | phenyl f,i:naIl | ||||
poly (@@ p,0lI | poly (@@ p,0lI | ||||
poly (@ p0lI | poly (@ p0lI | ||||
pota (t p@teI | pota (t p@teI | ||||
_) ps s | |||||
pseudo su:doU | pseudo su:doU | ||||
psych saIk | psych saIk | ||||
psycho saIkoU | psycho saIkoU | ||||
psycho (lo saIk'0 | psycho (lo saIk'0 | ||||
_) pt t | |||||
ei) pt t | ei) pt t | ||||
ras) p (b | ras) p (b | ||||
_) pur (su p3 | _) pur (su p3 | ||||
pro (log proU | pro (log proU | ||||
.group q | .group q | ||||
_) q (B kju: | |||||
q k | q k | ||||
q (q | q (q | ||||
qu kw | qu kw | ||||
.group r | .group r | ||||
r r | r r | ||||
rr r | rr r | ||||
_) rh (Y r | |||||
_) rw (a r%U | |||||
r) r (_ | r) r (_ | ||||
C) r (_N r@ | C) r (_N r@ | ||||
e) r (_ 3 | e) r (_ 3 | ||||
@) r (B @ | @) r (B @ | ||||
3_) rd (_ | 3_) rd (_ | ||||
rEr (_ r3 | rEr (_ r3 | ||||
_) rh r | |||||
C) rh r | C) rh r | ||||
rheu ru: | rheu ru: | ||||
rhi (n raI | rhi (n raI | ||||
_) ru (bL01 ru: | _) ru (bL01 ru: | ||||
_) run (a rVn | _) run (a rVn | ||||
_) run (o rVn | _) run (o rVn | ||||
_) rw r%U | |||||
&ant) ry (_S2 r%I | &ant) ry (_S2 r%I | ||||
.group re | .group re | ||||
s s | s s | ||||
s (s | s (s | ||||
s (sh s | s (sh s | ||||
_) s (cY s | |||||
_) s (cL01Y s | |||||
_) sch 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: | sche (m ski: | ||||
_) sch (ism sk | _) sch (ism sk | ||||
_) schiz skIts | _) schiz skIts | ||||
.group t | .group t | ||||
t t | t 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 | tch tS | ||||
_) tele tElI2 | _) tele tElI2 | ||||
r) tga (g gI | r) tga (g gI | ||||
?8 &f) ully (_ Vl%I | ?8 &f) ully (_ Vl%I | ||||
&) u (lous_ =jU | &) u (lous_ =jU | ||||
b) ul (r Ul | b) ul (r Ul | ||||
&ic) ul (t @L | |||||
_) ultra (@ ,Ultra | _) ultra (@ ,Ultra | ||||
u (lul V | u (lul V | ||||
@) u (lum =jU | @) u (lum =jU | ||||
g) ui (lC I | g) ui (lC I | ||||
_g) ui (le aI | _g) ui (le aI | ||||
@) ui (ty 'ju:I | @) ui (ty 'ju:I | ||||
g) ui (dA aI | |||||
g) ui (dA# aI | |||||
g) uide (l aId | g) uide (l aId | ||||
beg) ui (l aI | beg) ui (l aI | ||||
_g) ui (n I | _g) ui (n I | ||||
.group v | .group v | ||||
v v | v v | ||||
v (v | v (v | ||||
_) v (la v | |||||
@) va (len veI | @) va (len veI | ||||
_) vehem vi@m | _) vehem vi@m | ||||
.group w | .group w | ||||
w w | w w | ||||
w (w | w (w | ||||
_) wh (Y w | |||||
_) wr (Y r | |||||
C) w (_ w@ | C) w (_ w@ | ||||
wh w | wh w | ||||
wr r | wr r | ||||
As) w (ick | As) w (ick | ||||
.group x | .group x | ||||
_) x (C Eks | |||||
x ks | x ks | ||||
x) x (A | x) x (A | ||||
_) xy zaI | _) xy zaI | ||||
_) x z | |||||
_) x (Y z | |||||
xio (n kS@ | xio (n kS@ | ||||
xious =kS@s | xious =kS@s | ||||
xu (a =kSu: | xu (a =kSu: | ||||
xure (_ kS%U@ | |||||
.group y | .group y | ||||
y j | y j | ||||
y (Be# aI | y (Be# aI | ||||
@C) y (Be# aI | @C) y (Be# aI | ||||
ye (_ aI | ye (_ aI | ||||
y (ear j | |||||
%B) y (_NS1d i | |||||
%B) y (_S1d I | %B) y (_S1d I | ||||
_C) y (Ce aI | _C) y (Ce aI | ||||
C) y (i I | C) y (i I | ||||
d) yse (n Is@ | d) yse (n Is@ | ||||
f) y (_ aI | f) y (_ aI | ||||
ff) y (_ I | ff) y (_ I | ||||
&sk) y (_ =I | |||||
&sk) y (_ =i | |||||
den) y (_ aI | den) y (_ aI | ||||
bel) y (_ aI | bel) y (_ aI | ||||
&) y (_ %I | &) y (_ %I | ||||
&) y (_N %i | |||||
y (_ aI | y (_ aI | ||||
y (Cic_ 'I | y (Cic_ 'I | ||||
y (Cical 'I | y (Cical 'I | ||||
.group z | .group z | ||||
z z | z z | ||||
z (z | z (z | ||||
_) zh (Y Z | |||||
_) z (lot z | |||||
_) zs (Y z | |||||
_) z (wY z | |||||
@) zales (_ z'A:lEs | @) zales (_ z'A:lEs | ||||
zes (_ zI2z | zes (_ zI2z | ||||
zh Z | zh Z |
_7C s,eteTj'EntOs | _7C s,eteTj'EntOs | ||||
_9C n,OBeTj'EntOs | _9C n,OBeTj'EntOs | ||||
_0M1 m'il | _0M1 m'il | ||||
_1M1 m'il // no '1' before thousand | |||||
_0M2 miJ^'ones | _0M2 miJ^'ones | ||||
_1M2 'unmiJ^'On | _1M2 'unmiJ^'On | ||||
_0M4 _biJ^'onEs | _0M4 _biJ^'onEs | ||||
b be | b be | ||||
c Te | c Te | ||||
d de | d de | ||||
f Efe | |||||
f _|Efe | |||||
g xe | g xe | ||||
h atSe | h atSe | ||||
j xOta | j xOta | ||||
k ka | k ka | ||||
l Ele | |||||
m Eme | |||||
n Ene | |||||
ñ En^e | |||||
l _|Ele | |||||
m _|Eme | |||||
n _|Ene | |||||
ñ _|En^e | |||||
p pe | p pe | ||||
q ku | q ku | ||||
r E**e | |||||
s Ese | |||||
r _|E**e | |||||
s _|Ese | |||||
t te | t te | ||||
v uBe | |||||
v _|uBe | |||||
w ,uBe||d'OBle | w ,uBe||d'OBle | ||||
x Ekis | |||||
x _|Ekis | |||||
z TEta | z TEta | ||||
_a a | _a a |
// ?1 Castilian | // ?1 Castilian | ||||
// ?2 Latin America | // ?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 | .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] | .L04 b v f p // labials, nasals are [m] | ||||
.L05 g k // velars, nasals are [N] | .L05 g k // velars, nasals are [N] | ||||
.L06 j w l r b d g n m p t k c | |||||
.group a | .group a | ||||
a a | a a | ||||
.group b | .group b | ||||
b 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 (A B | ||||
b (cY B | b (cY B | ||||
b (L03 B | b (L03 B | ||||
.group c | .group c | ||||
c k | c k | ||||
_) c (L01A k // allow: cl cr at start of word | |||||
_) ch (A tS // allow _ch | |||||
c (Y T // ce, ci | c (Y T // ce, ci | ||||
ch tS | ch tS | ||||
.group d | .group d | ||||
d 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 (A D | ||||
d (cY D | d (cY D | ||||
d (L03 D | d (L03 D | ||||
.group f | .group f | ||||
f f | f f | ||||
_) f (L01A f // allow fl fr at start of word | |||||
.group g | .group g | ||||
g 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 (A Q | ||||
g (cY Q | g (cY Q | ||||
g (L03 Q | g (L03 Q | ||||
.group k | .group k | ||||
k k | k k | ||||
_) k (L01A k // allow kl kr at start of word | |||||
.group l | .group l | ||||
l l | l l | ||||
_) ll (A J^ // allowe _ll | |||||
ll J^ | ll J^ | ||||
?2 A) ll (A j: | ?2 A) ll (A j: | ||||
.group m | .group m | ||||
m m | m m | ||||
_) mn (em n | |||||
m (K n | m (K n | ||||
m (L04 m | m (L04 m | ||||
m (_L04 m | m (_L04 m | ||||
.group p | .group p | ||||
p p | p p | ||||
_) p (L01A p // allow pl pr at start of word | |||||
p (t p: | p (t p: | ||||
_) ph f | _) ph f | ||||
ph (K f | ph (K f | ||||
_) ps (ico s | |||||
_) ps (i s | |||||
_) ps (eudo s | _) ps (eudo s | ||||
_) pt (ero t | |||||
_) pt (ol t | |||||
.group q | .group q | ||||
.group r | .group r | ||||
r R | r R | ||||
_) r RR2 | |||||
r (_ * | r (_ * | ||||
r (t ** | r (t ** | ||||
A) r (A ** | A) r (A ** | ||||
.group s | .group s | ||||
s s | s s | ||||
&) s (_S1 s | &) s (_S1 s | ||||
_) s (C Es | |||||
_) sh S | |||||
_) s (C %Es | |||||
_) sh (A S | |||||
_) sh (L01A S | |||||
sh (K S | sh (K S | ||||
.group t | .group t | ||||
t t | t t | ||||
_) t (L01A t // all tr at start of word | |||||
_) th T | _) th T | ||||
th (K T | th (K T | ||||
.group v | .group v | ||||
v B | v B | ||||
_) v b | |||||
_) v (L01A b // allow vl vr at start of word | |||||
?1 m) v b | ?1 m) v b | ||||
?1 n) v b | ?1 n) v b | ||||
?1 v (L01 b | |||||
?1 v (L06 b | |||||
?1 v (iA b | ?1 v (iA b | ||||
?1 v (uA b | ?1 v (uA b | ||||
?2 v v# | ?2 v v# | ||||
?2 _) v v | ?2 _) v v | ||||
?2 v (L01 v | |||||
?2 v (L06 v | |||||
?2 v (j v | ?2 v (j v | ||||
?2 v (iA v | ?2 v (iA v | ||||
?2 v (uA v | ?2 v (uA v | ||||
.group w | .group w | ||||
w w | w w | ||||
_) wh (A w | |||||
.group x | .group x | ||||
x ks | x ks | ||||
?1 A) x (A Qs | ?1 A) x (A Qs | ||||
x (_ =Qs | x (_ =Qs | ||||
_) x z // ? | |||||
_) x ($unpr z // ? | |||||
.group y | .group y | ||||
y i | y i | ||||
_) y J | |||||
_) y ($unpr J | |||||
_m) y J | _m) y J | ||||
n) y J | n) y J | ||||
_l) y J | _l) y J |
// 2006-11-18 Gilles Casse <[email protected]> | // 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. | // * Numbers, a few abbreviations and exceptions. | ||||
// | // | ||||
// accent names | // accent names | ||||
_lig ligat'yr | _lig ligat'yr | ||||
_acu aksA~tE2g'y | |||||
_ac2 dublaksA~tE2g'y | |||||
_acu aksA~tEg'y | |||||
_ac2 dublaksA~tEg'y | |||||
_brv br'Ev | _brv br'Ev | ||||
_ced sed'ij | _ced sed'ij | ||||
_cir aksA~sirkO~fl'Eks | _cir aksA~sirkO~fl'Eks | ||||
_?A l'Etr | _?A l'Etr | ||||
_?? sE~b'oll | _?? sE~b'oll | ||||
_#9 tabylasiO~ | _#9 tabylasiO~ | ||||
_#32 E2spas | |||||
_#32 Espas | |||||
_" gijmE2 | |||||
_" gijmE | |||||
_# djEz | _# djEz | ||||
_' apostr'Of | _' apostr'Of | ||||
_( parA~tEz_goS | _( parA~tEz_goS | ||||
_) parA~tEz_drwat | _) parA~tEz_drwat | ||||
_, virgyl | _, virgyl | ||||
_- tirE2 | |||||
_- tirE | |||||
_. _|pw%E~ | _. _|pw%E~ | ||||
_/ barOblik | |||||
_/ baroblik | |||||
_: d'Y||pw'E~ | _: d'Y||pw'E~ | ||||
_; pwE~||virg'yl | _; pwE~||virg'yl | ||||
_< E~feriWr | _< E~feriWr | ||||
_= egal | _= egal | ||||
_> syperiWr | _> syperiWr | ||||
_? pwE~||dE~tE2rogasj'O~ | |||||
_? pwE~||dE~tErogasj'O~ | |||||
_! pwE~||dEksklamasj'O~ | _! pwE~||dEksklamasj'O~ | ||||
_[ krOSE2_goS | |||||
_\ barOblik_E~vErse | |||||
_] krOSE2_drwa | |||||
_[ krOSE_goS | |||||
_\ bakslaS | |||||
_] krOSE_drwa | |||||
_^ sirkO~flEks | _^ sirkO~flEks | ||||
__ sulin^e | __ sulin^e | ||||
_` aks'A~_gr'av | _` aks'A~_gr'av | ||||
_| bar_vErtik'al | _| bar_vErtik'al | ||||
_} akOlad_drwat | _} akOlad_drwat | ||||
² pyis'A~s||d'Y | ² pyis'A~s||d'Y | ||||
_« uvre||gijm'E2 | |||||
_» fErme||gijm'E2 | |||||
_« uvre||gijm'E | |||||
_» fErme||gijm'E | |||||
_’ apostr'Of | _’ apostr'Of | ||||
_‘ apostr'Of | _‘ apostr'Of | ||||
_µ mikr'o | _µ mikr'o | ||||
_6 siz3 | _6 siz3 | ||||
_7 sEt | _7 sEt | ||||
_8 _|yit3 | _8 _|yit3 | ||||
_9 nYf | |||||
_9 nWf | |||||
_10 diz3 | _10 diz3 | ||||
_11 _|O~z | _11 _|O~z | ||||
_12 duz | _12 duz | ||||
_16 sEz | _16 sEz | ||||
_17 disEt | _17 disEt | ||||
_18 dizyit3 | _18 dizyit3 | ||||
_19 diznYf | |||||
_19 diznWf | |||||
_20 vE~t2 | _20 vE~t2 | ||||
_21 vE~te:W~ | _21 vE~te:W~ | ||||
_22 vE~tdYz2 | _22 vE~tdYz2 | ||||
_26 vE~tsiz3 | _26 vE~tsiz3 | ||||
_27 vE~tsEt | _27 vE~tsEt | ||||
_28 vE~tyit3 | _28 vE~tyit3 | ||||
_29 vE~tnYf | |||||
_29 vE~tnWf | |||||
_3X trA~t | _3X trA~t | ||||
_31 trA~te:W~ | _31 trA~te:W~ | ||||
_4X karA~t | _4X karA~t | ||||
cia $abbrev | cia $abbrev | ||||
cio $abbrev | cio $abbrev | ||||
cm centimètre $text | cm centimètre $text | ||||
collins kOlins | |||||
collins _^_en | |||||
cpu $abbrev | cpu $abbrev | ||||
ctrl _::kO~trOl | ctrl _::kO~trOl | ||||
dept depart@mA~ | |||||
dept département $text | |||||
divx diviks | divx diviks | ||||
ebay _^_en | ebay _^_en | ||||
(e bay) ebay $text | (e bay) ebay $text | ||||
ebcdic @besedik | ebcdic @besedik | ||||
edf @d,eEf | edf @d,eEf | ||||
eml @,EmEl | eml @,EmEl | ||||
etc E2tsetera | |||||
etc Etsetera | |||||
fyi fWr||jWr||InfWrm'EjSWn | |||||
ghz ZigaErts | ghz ZigaErts | ||||
(g hz) ZigaErts | (g hz) ZigaErts | ||||
hmm hWm | hmm hWm | ||||
ide $abbrev | ide $abbrev | ||||
ip ipe | ip ipe | ||||
irc I,Er_|se | irc I,Er_|se | ||||
jaws dZo3:z | |||||
kbit kilobit | kbit kilobit | ||||
kde $abbrev | kde $abbrev | ||||
kg kilogramme $text | kg kilogramme $text | ||||
khz kiloErts | khz kiloErts | ||||
km kilomètre $text | 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 | kw kilowatt $text | ||||
m. m@siY | m. m@siY | ||||
mbit megabit | mbit megabit | ||||
scsi $abbrev | scsi $abbrev | ||||
solaris solaris | solaris solaris | ||||
sos $abbrev | 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 | st s'E~t2 | ||||
ste s'E~t | ste s'E~t | ||||
stp silt@:pl'E2 | |||||
svp silvu:pl'E2 | |||||
stp silt@:pl'E | |||||
svp silvu:pl'E | |||||
tva $abbrev | tva $abbrev | ||||
uk $abbrev | uk $abbrev | ||||
ups ypeEs | ups ypeEs | ||||
virgin virZin | virgin virZin | ||||
vip v,i||,aj||p'i | vip v,i||,aj||p'i | ||||
(web visum) webvisum $text | (web visum) webvisum $text | ||||
windows windo3z | |||||
wma $abbrev | wma $abbrev | ||||
xfce iksEfse@ | xfce iksEfse@ | ||||
xy $abbrev | xy $abbrev | ||||
ca sa $u+ $capital $verbf | ca sa $u+ $capital $verbf | ||||
ce $u+ $nounf | ce $u+ $nounf | ||||
ceux $u+ | |||||
celle $u+ | |||||
celles $u+ | |||||
ceci $u+ $verbf | ceci $u+ $verbf | ||||
cela $u+ $verbf | cela $u+ $verbf | ||||
voici $u+ | |||||
voilà $u+ | |||||
cet $u $nounf | cet $u $nounf | ||||
cette $u $nounf | cette $u $nounf | ||||
ces sez2 $u $nounf | ces sez2 $u $nounf | ||||
(celles ci) sEl||si $verbf $u+ | (celles ci) sEl||si $verbf $u+ | ||||
(celles là) sEl||la $verbf $u+ | (celles là) sEl||la $verbf $u+ | ||||
plupart $u+ | plupart $u+ | ||||
voici $u+ | |||||
voilà $u+ | |||||
// possessives | // possessives | ||||
ma $u $nounf | ma $u $nounf | ||||
// auxillary verbs (be, have, can, etc) | // auxillary verbs (be, have, can, etc) | ||||
suis $u+ $verb | suis $u+ $verb | ||||
es E2z2 $u+ | |||||
est E2t2 $u+ | |||||
es Ez2 $u+ | |||||
est Et2 $u+ | |||||
sommes $u+ $verb | sommes $u+ $verb | ||||
êtes $u+ $verb | êtes $u+ $verb | ||||
sont $u+ $verb | sont $u+ $verb | ||||
soit $u+ | soit $u+ | ||||
ai $u+ $verb | ai $u+ $verb | ||||
(ai je) E2Z $u+ | |||||
(ai je) EZ $u+ | |||||
as as | as as | ||||
as az2 $u+ $verb | as az2 $u+ $verb | ||||
(as tu) aty | (as tu) aty | ||||
alleluia alelui'a | alleluia alelui'a | ||||
alterego altErego | alterego altErego | ||||
anis anis | anis anis | ||||
any Eni $u | |||||
armageddon armagedO~ | armageddon armagedO~ | ||||
auvent ovA~ | auvent ovA~ | ||||
beta beta | beta beta | ||||
blum blum | blum blum | ||||
broglie breuil $text | broglie breuil $text | ||||
browglie breuil $text | browglie breuil $text | ||||
buffer bYfYr | |||||
buffer bYfWr | |||||
bus bys | bus bys | ||||
bus by $verb | bus by $verb | ||||
cancer kA~sEr | cancer kA~sEr | ||||
enfer A~fEr | enfer A~fEr | ||||
fahrenheit far@najt | fahrenheit far@najt | ||||
faut fot2 $u+ | faut fot2 $u+ | ||||
feldspath fEldspat | |||||
fier fjer $verb | fier fjer $verb | ||||
for $u+ | for $u+ | ||||
francis frA~sis | francis frA~sis | ||||
fred frEd | fred frEd | ||||
free frI: | |||||
free _^_en | |||||
fuel fjul | fuel fjul | ||||
gangster gA~gstEr | gangster gA~gstEr | ||||
gars ga | gars ga | ||||
georges ZOrZ | georges ZOrZ | ||||
gilles Zil | gilles Zil | ||||
gin dZin | gin dZin | ||||
gulf gWlf | |||||
gulf gOlf | |||||
gus gys | gus gys | ||||
gym Zim | gym Zim | ||||
han _|A~ | |||||
hélas elas $u+ | hélas elas $u+ | ||||
jacques Zak | jacques Zak | ||||
karaoke karaOke | |||||
karaoke karaoke | |||||
kevin kevin | kevin kevin | ||||
laetitia letisja | laetitia letisja | ||||
laser lazEr | laser lazEr | ||||
listbox listbOks | listbox listbOks | ||||
louis lwi | louis lwi | ||||
malus malys | malus malys | ||||
mai mE2 | |||||
mailto mEjltu_ | |||||
mai mE | |||||
mapper _^_en | mapper _^_en | ||||
mars mars | mars mars | ||||
mas mas | mas mas | ||||
oasis oazis | oasis oazis | ||||
ours urs | ours urs | ||||
pataquès patakEs | pataquès patakEs | ||||
patchwork patSwWrk | |||||
peter pItWr | |||||
peter _^_en | |||||
phallus falys | phallus falys | ||||
polder pOldEr | polder pOldEr | ||||
premier pr@mjer2 | premier pr@mjer2 | ||||
program _^_en | program _^_en | ||||
(program files) prOgramfajlz | |||||
query kueri | |||||
queries kueri | |||||
query _^_en | |||||
queries _^_en | |||||
quid kwid $u+ | quid kwid $u+ | ||||
quit kwit | |||||
recorder rikOrdWr | |||||
quit _^_en | |||||
recorder _^_en | |||||
requiem rekyijEm | requiem rekyijEm | ||||
revolver revOlvEr | revolver revOlvEr | ||||
sas sas | sas sas | ||||
scan skan | |||||
scan _^_en | |||||
scanner skaner2 $verb | scanner skaner2 $verb | ||||
scanner skanWr $noun | scanner skanWr $noun | ||||
scanners skanWr | scanners skanWr | ||||
shampoing SA~pwE~ | shampoing SA~pwE~ | ||||
sir sWr | |||||
sir _^_en | |||||
souris suri | souris suri | ||||
stocker stoker2 | stocker stoker2 | ||||
sus sys | sus sys | ||||
sus sy $verb | sus sy $verb | ||||
sushi suSi | sushi suSi | ||||
thierry tjEri | |||||
to tu $u+ | to tu $u+ | ||||
tramway tramwE: | tramway tramwE: | ||||
tuttiquanti tutikw'anti | tuttiquanti tutikw'anti | ||||
vaux $u+ | vaux $u+ | ||||
vénus venys | vénus venys | ||||
vot vOt | vot vOt | ||||
writer raitWr | |||||
yves iv | yves iv | ||||
// et (t is said) | // et (t is said) | ||||
exocet E2gzOsEt | |||||
exocet EgzosEt | |||||
fret fr'Et | fret fr'Et | ||||
budget bydZE2 | |||||
budget bydZE | |||||
hamlet _|amlEt | hamlet _|amlEt | ||||
knesset knesEt | knesset knesEt | ||||
lazaret lazarE2 | |||||
lazaret lazarE | |||||
margaret margarEt | margaret margarEt | ||||
net nEt | net nEt | ||||
offset OfsEt | offset OfsEt | ||||
set sEt | set sEt | ||||
soviet soviEt | soviet soviEt | ||||
stewart stIwart | |||||
// urt (t is said) | // urt (t is said) | ||||
kurt kurt | kurt kurt | ||||
short SOrt | short SOrt | ||||
// art (t said) | // art (t said) | ||||
steward stiwart | |||||
stuttgart Stutgart | stuttgart Stutgart | ||||
hart art | hart art | ||||
kart kart | kart kart | ||||
smart smart | smart smart | ||||
// irt | // 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 | // words from other languages | ||||
and _^_en | and _^_en | ||||
amazon amaz'On | amazon amaz'On | ||||
apple _^_en | apple _^_en | ||||
at at $u+ | |||||
(audible manager) od,ibl||manadZ'Wr | |||||
at _^_en | |||||
(audible manager) _^_en | |||||
balabolka balabOlka | |||||
be _^_en | |||||
better _^_en | |||||
bin bin | bin bin | ||||
bit bit | bit bit | ||||
bluetooth blut'us | |||||
bluetooth _^_en | |||||
computer _^_en | computer _^_en | ||||
(cyber link) _^_en | (cyber link) _^_en | ||||
debian debjan | debian debjan | ||||
do _^_en | |||||
edit _^_en | edit _^_en | ||||
emacs E2maks | |||||
emacspeak E2makspI:k | |||||
emacs _^_en | |||||
end _^_en | end _^_en | ||||
espeak @spI:k | |||||
ethernet etErnEt | ethernet etErnEt | ||||
exit egzit | exit egzit | ||||
(file zilla) f,ajl||zij'a | |||||
from frOm $u+ | |||||
(file zilla) _^_en | |||||
from _^_en | |||||
get _^_en | get _^_en | ||||
google gug=Wl | |||||
google _^_en | |||||
gnome gnOm | gnome gnOm | ||||
gnu $abbrev | gnu $abbrev | ||||
hamburger _|A~b@rgWr | hamburger _|A~b@rgWr | ||||
he _^_en | |||||
her _^_en | |||||
help _^_en | help _^_en | ||||
hot _^_en | hot _^_en | ||||
in in $u+ | |||||
inside _^_en | |||||
in _^_en | |||||
internet E~tErn'Et | internet E~tErn'Et | ||||
(internet explorer) E~tErn'Et||E2ksplOr'Wr | |||||
(internet explorer) E~tErn'Et||EksplOr'Wr | |||||
it _^_en | |||||
klaxon klaksOn | klaxon klaksOn | ||||
let _^_en | let _^_en | ||||
lite _^_en | lite _^_en | ||||
logon _^_en | logon _^_en | ||||
(mac os x) makoEsiks | (mac os x) makoEsiks | ||||
made _^_en | made _^_en | ||||
mail _^_en | |||||
mailto _^_en | |||||
media medja | media medja | ||||
messenger mE2sEnZWr | |||||
my maj $u+ | |||||
messenger _^_en | |||||
nat nat | nat nat | ||||
not _^_en | not _^_en | ||||
null _^_en | null _^_en | ||||
ok oke $u+ | ok oke $u+ | ||||
open op'Wn | |||||
(open source) op,Wn||s'urs | |||||
outlook autlu:k | |||||
open _^_en | |||||
outlook _^_en | |||||
paint _^_en | paint _^_en | ||||
paper _^_en | paper _^_en | ||||
people _^_en | people _^_en | ||||
redhat rEdat | |||||
redhat _^_en | |||||
same _^_en | same _^_en | ||||
sametime _^_en | sametime _^_en | ||||
she _^_en | |||||
sun _^_en | sun _^_en | ||||
(text aloud) tEkst||@la=wd | |||||
(text aloud) _^_en | |||||
ubuntu ubuntu | ubuntu ubuntu | ||||
up _^_en | up _^_en | ||||
win win $u+ | |||||
yes _^_en | yes _^_en | ||||
yet _^_en | |||||
// tions (tjO~ instead of sjO~) | // tions (tjO~ instead of sjO~) | ||||
// Some countries, areas and languages | // Some countries, areas and languages | ||||
afrikaans afrikans | afrikaans afrikans | ||||
aix Eks | aix Eks | ||||
aruba aruba | |||||
bahamas baamas | bahamas baamas | ||||
bangladesh bA~gladES | bangladesh bA~gladES | ||||
bayeux bajY | bayeux bajY | ||||
calvados calvadoss $text | calvados calvadoss $text | ||||
christmas krismas | christmas krismas | ||||
croatie kroasi | croatie kroasi | ||||
esperanto E2sperA~to | |||||
esperanto EsperA~to | |||||
groenland groEnlA~d | groenland groEnlA~d | ||||
guatemala gwatemala | guatemala gwatemala | ||||
hindi _|indi | hindi _|indi | ||||
honduras _|O~dyras | honduras _|O~dyras | ||||
kenya kenja | kenya kenja | ||||
koweït kowEjt | |||||
laos laOs | laos laOs | ||||
leone leOn | |||||
lesotho lezOto | lesotho lezOto | ||||
libye libi | |||||
liechtenstein liStWnStajn | liechtenstein liStWnStajn | ||||
angeles A~nZelEs | angeles A~nZelEs | ||||
malawi malawi | malawi malawi | ||||
palaos palaOs | palaos palaOs | ||||
samoa samoa | samoa samoa | ||||
swaziland swazilA~d | swaziland swazilA~d | ||||
leone leOn | |||||
koweït kowEjt | |||||
taïwan tajwan | taïwan tajwan | ||||
texas tE2ks'as | |||||
texas tEks'as | |||||
tuvalu tuvalu | tuvalu tuvalu | ||||
vanuatu vanuatu | vanuatu vanuatu | ||||
venezuela venezy-E2la | |||||
venezuela venezyEla | |||||
(viêt nam) vjEtnam | (viêt nam) vjEtnam | ||||
wallis walis | wallis walis | ||||
futuna futuna | futuna futuna | ||||
zimbabwe zimbabwe | zimbabwe zimbabwe | ||||
// http://www.fluxnic.net/cicero | // http://www.fluxnic.net/cicero | ||||
// | // | ||||
// Rules are now maintained by Michel Such <[email protected]> | // 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: | // Letter classes: | ||||
.L03 d l m n s t v | .L03 d l m n s t v | ||||
.L04 c d f g l m n v | .L04 c d f g l m n v | ||||
.L05 g h k l m v w | .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 | .group a | ||||
ain (K E~ // pain | ain (K E~ // pain | ||||
Ct) ain (_ E~n2 // certain ami | Ct) ain (_ E~n2 // certain ami | ||||
ch) ain (_ E~n2 // prochain arret | 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 | f) ai (sA @ // faisons faisan | ||||
a (ilK a | 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 (m a // programmation | ||||
_) am (n am // amnistie | _) am (n am // amnistie | ||||
am (n a // condamner | am (n a // condamner | ||||
aud (_ o // chaud | aud (_ o // chaud | ||||
_C) aud (_ od // Maud | _C) aud (_ od // Maud | ||||
au (l_ O // Paul | au (l_ O // Paul | ||||
au (re_ o // dinosaure | |||||
au (re_ O // dinosaure | |||||
_) audio (@P5 odio | _) audio (@P5 odio | ||||
_) auto (@P4 oto | _) auto (@P4 oto | ||||
_) autom (n otO | _) autom (n otO | ||||
bb) aye (X ei // abbaye | bb) aye (X ei // abbaye | ||||
ay (C E // aymé | ay (C E // aymé | ||||
ay Ej // paye | 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 | h) am (_S2 am | ||||
w) an (_ an | w) an (_ an | ||||
a a // bateau | a a // bateau | ||||
// group a: English section | // group a: English section | ||||
sm) all _^_en // small, smaller | |||||
a (wC _^_en | |||||
any _^_en | |||||
aw (K _^_en | |||||
.group b | .group b | ||||
// group b: English section | // group b: English section | ||||
back _^_en | back _^_en | ||||
bbl _^_en | |||||
bird _^_en // bird | |||||
board _^_en // board, keyboard | board _^_en // board, keyboard | ||||
box (_ _^_en // box, inbox, outbox | box (_ _^_en // box, inbox, outbox | ||||
bugg _^_en // debugger | bugg _^_en // debugger | ||||
_) by _^_en // by, bye, bypass | |||||
.group c | .group c | ||||
_) devic _^_en | _) devic _^_en | ||||
dle (X _^_en // bundle, handle | dle (X _^_en // bundle, handle | ||||
.group e | .group e | ||||
// Define use of the final 'e' in french | // Define use of the final 'e' in french | ||||
e (_ | 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 (_ @ // je te | ||||
-c) e (_ | -c) e (_ | ||||
-j) e (_ | -j) e (_ | ||||
C) 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 | ect (_ Ekt // direct | ||||
pi) ed (_ e // pied | pi) ed (_ e // pied | ||||
_art) e (++ e // arte, artefact | _art) e (++ e // arte, artefact | ||||
_cl) ef (_ e // clef | _cl) ef (_ e // clef | ||||
_cr) e (at e | |||||
_) ein (K En // Einstein | _) ein (K En // Einstein | ||||
ein (K E~ // peindre | ein (K E~ // peindre | ||||
pl) ein (_ E~n2 // plein emploi | pl) ein (_ E~n2 // plein emploi | ||||
e (il E // vieille | e (il E // vieille | ||||
ei E // neige | 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 | _f) em (me a // femme | ||||
i) e (mA // remerciement, d�ploiement | i) e (mA // remerciement, d�ploiement | ||||
e (ro_ e // Cicero | |||||
A) e (rA // remerciera | A) e (rA // remerciera | ||||
tch) e (rX W | tch) e (rX W | ||||
@) em (me a // patiemment | @) em (me a // patiemment | ||||
em (b A~ // décembre | |||||
em (L11 A~ // décembre | |||||
em (mACC A~ // emmancher | em (mACC A~ // emmancher | ||||
em (mACAC A~ // emmagasiner | em (mACAC A~ // emmagasiner | ||||
em (ma E2 // emmanuel | |||||
em (ma E // emmanuel | |||||
em (mai A~ // emmailloter | em (mai A~ // emmailloter | ||||
l) em (n a // solemnel | l) em (n a // solemnel | ||||
il) emn Em // dilemne | il) emn Em // dilemne | ||||
em (p A~ | |||||
en (_ A~n2 // en | en (_ A~n2 // en | ||||
en (hA A~n // enharmonique | en (hA A~n // enharmonique | ||||
_C) en (j E~ // benjamin | _C) en (j E~ // benjamin | ||||
_hiv) er (X Er // hiver | _hiv) er (X Er // hiver | ||||
Cst) er (X Er // hamster | Cst) er (X Er // hamster | ||||
_cart) er (X Er // carter | _cart) er (X Er // carter | ||||
_cutt) er (X Er // cutter | |||||
_cutt) er (X Wr // cutter | |||||
tain) er (X Er // container | tain) er (X Er // container | ||||
_ti) er (_ Er | _ti) er (_ Er | ||||
ack) er (K Wr | ack) er (K Wr | ||||
Am) es (nA e // Dumesnil | Am) es (nA e // Dumesnil | ||||
d) esh (A ez // Deshormeaux | d) esh (A ez // Deshormeaux | ||||
f) eb (vA E // Lefebvre | |||||
_r) e (ss @ // ressembler | _r) e (ss @ // ressembler | ||||
_r) e (ssu e // ressusciter | _r) e (ssu e // ressusciter | ||||
dg) et (_ Et // Bridget, gadget | dg) et (_ Et // Bridget, gadget | ||||
k) et (_ Et | k) et (_ Et | ||||
tick) et (_ E2 | |||||
tick) et (_ E | |||||
m) et (_ Et2 | m) et (_ Et2 | ||||
eu Y // eu | eu Y // eu | ||||
eu (CX W // neuf | eu (CX W // neuf | ||||
eu (CeX W // fleuve | eu (CeX W // fleuve | ||||
eu (Cer_ Y // pleurer | eu (Cer_ Y // pleurer | ||||
eu (i W // feuille | |||||
eu (CeX Y // meule | eu (CeX Y // meule | ||||
eu (reX W // demeure | eu (reX W // demeure | ||||
gu) eu (leX W // gueule | gu) eu (leX W // gueule | ||||
_) eut (_ yt2 | _) eut (_ yt2 | ||||
eut (_ Yt2 | eut (_ Yt2 | ||||
_) extra (uP5 E2kstra | |||||
_) extra (CP5 E2kstra | |||||
eux (_ Yz2 | |||||
_) extra (uP5 Ekstra | |||||
_) extra (CP5 Ekstra | |||||
_) eû y // eût | _) eû y // eût | ||||
eû Y: // jeûne | eû Y: // jeûne | ||||
ey (_ E2 // dahomey | |||||
ey (C E2 // ceylan | |||||
ey (_ E // dahomey | |||||
ey (C E // ceylan | |||||
ey Ej // asseye | ey Ej // asseye | ||||
ez (_ ez2 // nez mangez chez | ez (_ ez2 // nez mangez chez | ||||
g) e (A // mangeons | g) e (A // mangeons | ||||
g) eu Y // vengeur | |||||
g) eu W // vengeur | |||||
g) eu (re y // gageure | g) eu (re y // gageure | ||||
_d) e (ch @ | _d) e (ch @ | ||||
_r) e (ch @ // recherche | _r) e (ch @ // recherche | ||||
e (Cl @ | e (Cl @ | ||||
_l) e (xA E2 | |||||
_m) e (xA E2 | |||||
_l) e (CA @ | _l) e (CA @ | ||||
_l) e (ChA @ | _l) e (ChA @ | ||||
_l) e (ClA @ // Leclerc | _l) e (ClA @ // Leclerc | ||||
tr) e (CA @ | tr) e (CA @ | ||||
tr) e (ChA @ | tr) e (ChA @ | ||||
e (CC E // infect pelle mettre | |||||
e (Cr @ | e (Cr @ | ||||
_) e (C% e // effet, effectuer | _) e (C% e // effet, effectuer | ||||
e (C_ E | e (C_ E | ||||
e (t_ E2 | |||||
e (rC E | e (rC E | ||||
es (_ z2 | 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 (rr+++ E | ||||
e @ // menue | e @ // menue | ||||
_) e (CA e | _) e (CA e | ||||
_) e (xC++ E2 | |||||
Cr) eam Im | |||||
Cr) eam I:m | |||||
Cr) eamer ImWr | Cr) eamer ImWr | ||||
Cl) eaner InWr | Cl) eaner InWr | ||||
vert) e (rX W | vert) e (rX W | ||||
// group e: English section | // 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 | ed (_ _^_en | ||||
ee _^_en // meeting | ee _^_en // meeting | ||||
efore (_ _^_en // before | efore (_ _^_en // before | ||||
eing (_ _^_en // being, boeing | eing (_ _^_en // being, boeing | ||||
eive _^_en // receive | eive _^_en // receive | ||||
eld (_ _^_en // field | |||||
el (CX _^_en // field | |||||
el (sX El | |||||
_) enter (_ _^_en // enter | _) enter (_ _^_en // enter | ||||
_) enhan _^_en | _) enhan _^_en | ||||
qu) est (_ _^_en // request | qu) est (_ _^_en // request | ||||
qu) este (X_ _^_en // requested, requester | 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 | oC) ever _^_en // forever, however | ||||
ew (++ _^_en | |||||
_) eye _^_en | _) eye _^_en | ||||
.group g | .group g | ||||
g g | g g | ||||
g (Y Z | g (Y Z | ||||
ge (a Z | |||||
ge (o Z | |||||
su) gg (Y gZ // suggérer suggestif | su) gg (Y gZ // suggérer suggestif | ||||
gg g // agglomérer | gg g // agglomérer | ||||
// group g: English section | // group g: English section | ||||
_) game (X _^_en | _) game (X _^_en | ||||
girl _^_en // girl | girl _^_en // girl | ||||
gh (K _^_en | |||||
gy (_ _^_en | gy (_ _^_en | ||||
// group h: English section | // group h: English section | ||||
_) half _^_en | _) half _^_en | ||||
here (_ _^_en // here | |||||
_) ha (C_ _^_en | |||||
.group i | .group i | ||||
or) ien (t iA~ // orient, orienter | or) ien (t iA~ // orient, orienter | ||||
ot) ien (t_ jA~ // quotient | ot) ien (t_ jA~ // quotient | ||||
i (e_ i | |||||
_) i (ce@ aj // iceberg | _) 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 | aigu) ill ij // aiguille | ||||
anqu) ill il // tranquille | anqu) ill il // tranquille | ||||
c) ill (i il | c) ill (i il | ||||
imm imm // immaculé | imm imm // immaculé | ||||
im (_ im // karim | im (_ im // karim | ||||
im (C E~ // timbre | im (C E~ // timbre | ||||
w) in in // winrar | |||||
inct (_ E~ // distinct | inct (_ E~ // distinct | ||||
in (h in // inhumain | in (h in // inhumain | ||||
in (kX iN // link | |||||
in (n i // innombrable | in (n i // innombrable | ||||
in (C E~ // vingt | in (C E~ // vingt | ||||
in (_ E~ // vin | in (_ E~ // vin | ||||
ing (_ iN | |||||
// ing (_ iN | |||||
ing (h ing | ing (h ing | ||||
ing (s iN | ing (s iN | ||||
ing (to iN | |||||
_) infra (sP5 E~fra | _) infra (sP5 E~fra | ||||
_) inter (@@P5 E~tEr | _) inter (@@P5 E~tEr | ||||
_) interr (A E~tEr | _) interr (A E~tEr | ||||
ibuter (X _^_en | ibuter (X _^_en | ||||
iev _^_en | iev _^_en | ||||
ife (_ _^_en | ife (_ _^_en | ||||
igh _^_en | |||||
ign (_ _^_en | |||||
ill (_ _^_en // Bill | |||||
C) ill (y_ _^_en // Billy | |||||
ing (_ _^_en | |||||
C) irt (_ _^_en | |||||
iven (_ _^_en | iven (_ _^_en | ||||
ind (X _^_en // find, mind | ind (X _^_en // find, mind | ||||
_C) ind (erX _^_en // finder | _C) ind (erX _^_en // finder | ||||
AC) ind (erX _^_en // reminder | 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 | ram_f) i (le _^_en | ||||
.group ï | .group ï | ||||
.group j | .group j | ||||
j Z // adjoint joujoux | j Z // adjoint joujoux | ||||
je (a Z // Jean | |||||
_) j' (P2v Z | _) j' (P2v Z | ||||
_) jazz dZaz | _) jazz dZaz | ||||
_) j (obK dZ | _) j (obK dZ | ||||
ke (s_ _^_en // makes, takes | ke (s_ _^_en // makes, takes | ||||
ke (rX _^_en // maker | ke (rX _^_en // maker | ||||
ke (nX _^_en // taken | ke (nX _^_en // taken | ||||
AC) k (X _^_en // bank | |||||
.group l | .group l | ||||
l l // lit | l l // lit | ||||
ll l // aller | |||||
ll (A l // aller | |||||
_) l' (P2 l | _) l' (P2 l | ||||
au) lt // hérault | au) lt // hérault | ||||
uCi) l (_ // outil, fusil | uCi) l (_ // outil, fusil | ||||
_) lorsqu' (P7 lorsk | _) lorsqu' (P7 lorsk | ||||
// group l: English section | // group l: English section | ||||
ld (_ _^_en // could | |||||
less (_ _^_en // noiseless | less (_ _^_en // noiseless | ||||
%C) l (eX _^_en | |||||
ff) l (eX l | |||||
pp) l (eX l | |||||
_) line (X _^_en | |||||
_) live _^_en | _) live _^_en | ||||
@) loud (_ _^_en | @) loud (_ _^_en | ||||
ll (X _^_en | |||||
AC) l (X _^_en | |||||
.group m | .group m | ||||
master (_S6 mastWr | master (_S6 mastWr | ||||
// group m: English section | // 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 | .group n | ||||
_) neuro (@@P5 nYro | _) neuro (@@P5 nYro | ||||
_) nvda (P4 Envedea | _) nvda (P4 Envedea | ||||
// group n: English section | |||||
_) name _^_en | |||||
_re) name _^_en | |||||
n (eme_ _^_en | |||||
n (emes_ _^_en | |||||
.group o | .group o | ||||
br) oc (_ o // broc | br) oc (_ o // broc | ||||
cr) oc (_ o // escroc | cr) oc (_ o // escroc | ||||
ls) on (_ On | |||||
Cst) on (_ On | |||||
_) os (_ Os | |||||
_) os (_++ Os | |||||
_v) os (gY o | _v) os (gY o | ||||
s_) os (_ o | s_) os (_ o | ||||
x_) os (_ o | x_) os (_ o | ||||
o (t_ o | o (t_ o | ||||
oe (ll wa // moelleux | |||||
oe (llA wa // moelleux | |||||
oe (i W // oeil | oe (i W // oeil | ||||
_) oe (C Y // oesophage | _) oe (C Y // oesophage | ||||
_ph) oe (C e // phoetus | _ph) oe (C e // phoetus | ||||
oin (_ wE~ // coin | oin (_ wE~ // coin | ||||
oi wa // poil | oi wa // poil | ||||
oê (l wa // poêle | oê (l wa // poêle | ||||
om (b O~ // bombe | |||||
om (p O~ // trompe | |||||
om (L11 O~ // bombe, pompe | |||||
n) om (X O~ // nom | n) om (X O~ // nom | ||||
om (_ Om // www.web.com | om (_ Om // www.web.com | ||||
_) on (z _|O~ // onze, onzième | _) on (z _|O~ // onze, onzième | ||||
_c) on (_ O~ // no comment | _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 | _C) on (_ O~n2 // mon appui, mon histoire, mon havre | ||||
alc) oo (l O // alcool | alc) oo (l O // alcool | ||||
o (_ o // zorro allégro | o (_ o // zorro allégro | ||||
gr) oss os // grosse, grossir | 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 (CC O // poste, votre | ||||
o O | o O | ||||
oa (s_ oa | oa (s_ oa | ||||
oa (CerX _^_en | oa (CerX _^_en | ||||
oach _^_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 | C) oing (_ _^_en // going | ||||
gt) on (_ _^_en | |||||
Cst) on (_ _^_en | |||||
oo (Ce _^_en // boomer | oo (Ce _^_en // boomer | ||||
oo (k _^_en // book, cook | oo (k _^_en // book, cook | ||||
oo (st _^_en // booster | oo (st _^_en // booster | ||||
_sC) ot _^_en // shot, slot, spot | _sC) ot _^_en // shot, slot, spot | ||||
ow (e _^_en // flower, power | ow (e _^_en // flower, power | ||||
ow (X _^_en | ow (X _^_en | ||||
oy (X _^_en // boy, toy | |||||
_C) oy (X _^_en // boy, toy | |||||
.group ô | .group ô | ||||
_) para (pCP4 para | _) para (pCP4 para | ||||
_) photo (@P5 foto | _) photo (@P5 foto | ||||
_) poly (@P4 poli | _) poly (@P4 poli | ||||
_) post (KP4 post | |||||
_) post (CP4 post | |||||
_) post (ACCP4 post | _) post (ACCP4 post | ||||
_) pseudo (@P6 psYdo | _) pseudo (@P6 psYdo | ||||
p (p // appliquer | p (p // appliquer | ||||
pays pE2iz2 // pays, paysage | |||||
pays pEiz2 // pays, paysage | |||||
ph f // phrase | ph f // phrase | ||||
m) ps (_ // temps champs | m) ps (_ // temps champs | ||||
// group r: English section | // group r: English section | ||||
_) real _^_en | _) real _^_en | ||||
resen _^_en | |||||
rst (_ _^_en | rst (_ _^_en | ||||
_) rule _^_en | _) rule _^_en | ||||
_tou) s (_leurs_ | _tou) s (_leurs_ | ||||
// group s: English section | // group s: English section | ||||
CA) sh (_ _^_en // punish | |||||
send (_ _^_en | |||||
sh (_ _^_en | sh (_ _^_en | ||||
sh (Ap _^_en // shop, ship | sh (Ap _^_en // shop, ship | ||||
sh (At _^_en // shut, shot | sh (At _^_en // shut, shot | ||||
_) side (X+++ _^_en | |||||
L14) side (X+++ _^_en | |||||
_) sky _^_en | _) sky _^_en | ||||
_) smil _^_en // smile, smiley | _) smil _^_en // smile, smiley | ||||
spy _^_en | spy _^_en | ||||
_A) s (_ _^_en | |||||
L13) son (_ _^_en | |||||
L13) ston (_ _^_en | |||||
stone (_ _^_en | |||||
.group t | .group t | ||||
VCi) t (_ t2 | VCi) t (_ t2 | ||||
t (_ | t (_ | ||||
peti) t (_ t2 | 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 | ts (_S1 z2 // silent at end of word unless next word starts with a vowel | ||||
C) t (_ t // compost watt soft script malttact abrupt | C) t (_ t // compost watt soft script malttact abrupt | ||||
ki) t (_ t // kit | ki) t (_ t // kit | ||||
_transA) t (_ t | _transA) t (_ t | ||||
// group t: English section | // 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 | _) time _^_en | ||||
tle (_ _^_en | tle (_ _^_en | ||||
too _^_en | too _^_en | ||||
ttl _^_en | ttl _^_en | ||||
g) ton (_ _^_en // try, country | |||||
try (_ _^_en // try, country | try (_ _^_en // try, country | ||||
sCar) t (_ _^_en // smart, start | sCar) t (_ _^_en // smart, start | ||||
sCar) t (er_ _^_en // starter | sCar) t (er_ _^_en // starter | ||||
.group u | .group u | ||||
u y // cruel nuage brut | u y // cruel nuage brut | ||||
ue (il W // orgueil | |||||
ui yi // nuit, fuite | ui yi // nuit, fuite | ||||
uin (K yE~ // juin | uin (K yE~ // juin | ||||
_s) u (rfX W | |||||
_C) u (rfX W | |||||
_bl) u (ff W | _bl) u (ff W | ||||
_s) u (rfeX W | _s) u (rfeX W | ||||
uy (A yij | uy (A yij | ||||
C) ucci utSi // capuccino | C) ucci utSi // capuccino | ||||
c) ueill Wj // cueillir | |||||
c) ueil (_ Wj // recueil | |||||
_g) ua wa | _g) ua wa | ||||
ag) ua (X wa | ag) ua (X wa | ||||
Ctig) ua (_ wa | Ctig) ua (_ wa | ||||
_c) ul (_ y | _c) ul (_ y | ||||
_) ultra (P5 yltra | _) ultra (P5 yltra | ||||
g) u (ay u | g) u (ay u | ||||
g) ueill Wj // orgueilleux | |||||
haïk) u (X u | haïk) u (X u | ||||
C) u (bX W // hub, club | C) u (bX W // hub, club | ||||
C) u (gX W // bug, mug | C) u (gX W // bug, mug | ||||
_n) u (rse W // nurse | _n) u (rse W // nurse | ||||
r) u (nX W // run, autorun | |||||
pr) unt (_ W~ // emprunt | pr) unt (_ W~ // emprunt | ||||
um (_ Om // album | um (_ Om // album | ||||
f) um (_ W~ // parfum | f) um (_ W~ // parfum | ||||
um (b W~ // humble | |||||
um (p W~ | |||||
um (L11 W~ // humble | |||||
un (C W~ // emprunt lundi | un (C W~ // emprunt lundi | ||||
un (n y // tunnel | un (n y // tunnel | ||||
CC) un (_ W~ // brun | CC) un (_ W~ // brun | ||||
uz (z W | uz (z W | ||||
// group u: English section | // group u: English section | ||||
ual (_ _^_en // usual | |||||
uch (_ _^_en // much | |||||
_b) usi _^_en // business, businessman | _b) usi _^_en // business, businessman | ||||
C) ui (ce _^_en // produice, juice | C) ui (ce _^_en // produice, juice | ||||
C) ult (_ _^_en | |||||
umber (_ _^_en | umber (_ _^_en | ||||
ump (_ _^_en | ump (_ _^_en | ||||
r) u (nX _^_en // run, autorun | |||||
unch _^_en | unch _^_en | ||||
under _^_en // under, understand, thunder | under _^_en // under, understand, thunder | ||||
_C) un (_ _^_en | _C) un (_ _^_en | ||||
up (_ _^_en // setup | up (_ _^_en // setup | ||||
urn (X _^_en // burn, turn | urn (X _^_en // burn, turn | ||||
ust (_ _^_en // just, trust | ust (_ _^_en // just, trust | ||||
uzz _^_en // buzz | |||||
.group ü | .group ü | ||||
.group w | .group w | ||||
w w | w w | ||||
_) w (A _|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 | // 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 | wr _^_en // write | ||||
war _^_en // war | |||||
wav _^_en // wave | |||||
way _^_en // way, away | way _^_en // way, away | ||||
_) wir _^_en // wire | |||||
winn _^_en // winner | |||||
wise _^_en | |||||
with _^_en | |||||
wor _^_en | wor _^_en | ||||
_) yacht _^_en // yacht, yachtman | _) yacht _^_en // yacht, yachtman | ||||
_) yahoo (P5 ja'u | _) yahoo (P5 ja'u | ||||
ym (K E~ // tympan | |||||
y (nn i | |||||
y (nA i | |||||
ym (L11 E~ // tympan | |||||
X) ys (_ is | 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 | .group z | ||||
$ dOlar | $ dOlar | ||||
° d@gre | ° d@gre | ||||
_n_) ° // n° | _n_) ° // n° | ||||
' (C _^_en | |||||
फ़ f@ | फ़ f@ | ||||
य़ j@ | य़ 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 | // Punctuation | ||||
। dVn.d.V | । dVn.d.V | ||||
_0C sa:z | _0C sa:z | ||||
_0M1 EzER2 | _0M1 EzER2 | ||||
_1M1 EzER2 | |||||
_2M1 ke:tEzER2 | _2M1 ke:tEzER2 | ||||
_0M2 millio: | _0M2 millio: | ||||
_1M2 EJmillio: | _1M2 EJmillio: | ||||
_#-tól a:to:l $alt2 | _#-tól a:to:l $alt2 | ||||
_#-ig e:ig $alt2 //special date ordinal numbers for example elsejéig, negyedikéig etc. | _#-ig e:ig $alt2 //special date ordinal numbers for example elsejéig, negyedikéig etc. | ||||
_#-éről e:R2Y:l | _#-é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 e:R2Y:l $alt2 | ||||
_#-ról a:R2o: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ől e:tY:l $alt2 | ||||
_#-ét e:t $alt2 | _#-ét e:t $alt2 | ||||
_#-át a:t $alt2 | _#-át a:t $alt2 | ||||
(1-ig) elsejéig $text $alt2 | (1-ig) elsejéig $text $alt2 | ||||
(1-éről) elsejéről $text $alt2 | (1-éről) elsejéről $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ől) elsejétől $text $alt2 | ||||
(1-ét) elsejét $text $alt2 | (1-ét) elsejét $text $alt2 | ||||
(1-je) elseje $text $alt2 | (1-je) elseje $text $alt2 | ||||
(1-éhez) elsejéhez $text $alt2 | (1-éhez) elsejéhez $text $alt2 | ||||
(2-i) másodikai $text $alt2 | (2-i) másodikai $text $alt2 | ||||
(2-ig) másodikáig $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-i) hAR2_mAdikAi $alt2 | ||||
(3-ig) harmadikáig $text $alt2 | (3-ig) harmadikáig $text $alt2 | ||||
(6-i) hAtodikAi $alt2 | (6-i) hAtodikAi $alt2 | ||||
(2-őn) kEt:Y:n | (2-őn) kEt:Y:n | ||||
(2-n) kEt:Y:n | (2-n) kEt:Y:n | ||||
(2-m) kEt:Y:m | (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 | // entries with a single digit such as (2-i) also apply to 22, 32, etc, unless $only | ||||
(30-cal) hAR2mints:Al | (30-cal) hAR2mints:Al | ||||
(3-al) ha:R2om:Al | (3-al) ha:R2om:Al | ||||
(80-al) n^oltsvAn:Al | (80-al) n^oltsvAn:Al | ||||
(90-el) kilEntsvEn:El | (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 | // These words mean that a dot after number, immediately preceding, does not mean an ordinal number | ||||
január $alt | január $alt | ||||
február $alt | február $alt | ||||
nyári $alt | nyári $alt | ||||
őszi $alt | őszi $alt | ||||
téli $alt | téli $alt | ||||
végén $alt | |||||
elején $alt | |||||
// accent names | // accent names | ||||
_lig ligAtu:R2A | _lig ligAtu:R2A | ||||
(a . m .) An^n^i||m'int | (a . m .) An^n^i||m'int | ||||
ún u:JnEvEzEt: $hasdot | ú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. | 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. | mrs misis $hasdot //In hungarian we not use, but lot of book contains this word. | ||||
miss mis: $hasdot | miss mis: $hasdot | ||||
OK ok $allcaps | OK ok $allcaps | ||||
mvgyosz Emve:Je:oEs | mvgyosz Emve:Je:oEs | ||||
OTP o:te:pe: $allcaps | OTP o:te:pe: $allcaps | ||||
id idY:SEb: $hasdot | |||||
id idY:SEb: $hasdot $only | |||||
ill illEtvE $hasdot | ill illEtvE $hasdot | ||||
ifj ifjAb: $hasdot | ifj ifjAb: $hasdot | ||||
mta $abbrev | mta $abbrev | ||||
ész $unstressend | ész $unstressend | ||||
kapta $unstressend | kapta $unstressend | ||||
kaptak $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 | // word pairs | ||||
szabad $u+ // can (allowed) | szabad $u+ // can (allowed) | ||||
fog $u+ // going to | |||||
fog $unstressend // going to | |||||
fogok $u+ | fogok $u+ | ||||
fogsz $u+ | fogsz $u+ | ||||
fogunk $u+ | fogunk $u+ |
fil) c (csiz ts | fil) c (csiz ts | ||||
szo) c (segély ts | szo) c (segély ts | ||||
_kó) c (csomó ts | _kó) c (csomó ts | ||||
árbó) c (csúcs ts | |||||
árbo) c (csúcs ts | |||||
fegyen) c (csoport ts | |||||
.group ch | .group ch | ||||
anar) ch (i h | anar) ch (i h | ||||
va) d (szeder d | va) d (szeder d | ||||
twee) d (sapk d | twee) d (sapk d | ||||
fe) dd (hetetlen 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 | .group dz | ||||
fogó) dz (kod ts | fogó) dz (kod ts | ||||
ringató) dz z | ringató) dz z | ||||
mére) dz (k ts | mére) dz (k ts | ||||
pilóta) dzs (ek dZ | 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 | .group e | ||||
e E | e E | ||||
_) ehhez EhEz | _) ehhez EhEz | ||||
_) egyezség EJ:ESSe:g | _) egyezség EJ:ESSe:g | ||||
_) egyezségg EJ:ESSe:g: | |||||
.group é | .group é | ||||
é e: | é e: | ||||
_e) gy (év J: | _e) gy (év J: | ||||
_e) gy (órá J: | _e) gy (órá J: | ||||
_e) gy (se 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 | .group h | ||||
h h | h h | ||||
kk k: | kk k: | ||||
kk (C k: | kk (C k: | ||||
_) köztársaság k'Ysta:R2SASa:g | _) köztársaság k'Ysta:R2SASa:g | ||||
_) köztársaságg k'Ysta:R2SASa:g: | |||||
központ kYspont | központ kYspont | ||||
központt kYspont: | központt kYspont: | ||||
központj kYsponc | központj kYsponc | ||||
_) e) lj (ár lj | _) e) lj (ár lj | ||||
ha) ll (ga l | ha) ll (ga l | ||||
_ta) lj (án lj | _ta) lj (án lj | ||||
_fé) l (jobb l | |||||
_fé) l (jobb l | |||||
nyúva) ssz s: | nyúva) ssz s: | ||||
hirdeté) ssz (erve Ss | hirdeté) ssz (erve Ss | ||||
páncélo) ssz Ss | páncélo) ssz Ss | ||||
hajtá) ssz (erű Ss | |||||
.group sz | .group sz | ||||
sz s | sz s | ||||
á) tj (öt t|j | á) tj (öt t|j | ||||
á) tj (ön t|j | á) tj (ön t|j | ||||
á) t (süvít t | á) 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 | kísérle) t (sorozat t | ||||
á) t (sült t | á) t (sült t | ||||
á) t (süt t | á) t (süt t | ||||
pán) t (szél t | pán) t (szél t | ||||
boo) t (sorrend t | boo) t (sorrend t | ||||
_á) t (jöj 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 | .group ts | ||||
ts (_S2 tS //general rule with word end of ts letters | ts (_S2 tS //general rule with word end of ts letters | ||||
sie) tsz ts: | sie) tsz ts: | ||||
szemé) ts (ég tS: | szemé) ts (ég tS: | ||||
ré) ts (ég tS: | ré) ts (ég tS: | ||||
já) tsz (ok ts: | |||||
.group u | .group u | ||||
u u | u u | ||||
gá) z (cső z | gá) z (cső z | ||||
ké) z (sz zz | |||||
ké) z (sz z | |||||
há) z (so z | há) z (so z | ||||
_9X n'e:g@nt@x | _9X n'e:g@nt@x | ||||
_0C h'OndErt | _0C h'OndErt | ||||
_0M1 d'WyzEnt | _0M1 d'WyzEnt | ||||
_1M1 d'WyzEnt | |||||
_0M2 m'iljun | _0M2 m'iljun | ||||
_0M3 m'iljArt | _0M3 m'iljArt | ||||
_0M4 b'iljun | _0M4 b'iljun |
_9X nob'enta | _9X nob'enta | ||||
_0C sj'en | _0C sj'en | ||||
_0M1 m'il | _0M1 m'il | ||||
_1M1 m'il | |||||
_0M2 mi'on | _0M2 mi'on | ||||
_dpt _kOma/ | _dpt _kOma/ | ||||
ஏ je: | ஏ 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 | // speak Latin letters as English | ||||
a e:j | a e:j | ||||
_9C tol.l.a:jirVttU | _9C tol.l.a:jirVttU | ||||
_0M1x a:jirVm | _0M1x a:jirVm | ||||
_1M1x a:jirVm | |||||
_0M1 a:jirVttU | _0M1 a:jirVttU | ||||
_1M1 a:jirVttU | |||||
_0M2x lVd.tSVm // 100,000 | _0M2x lVd.tSVm // 100,000 | ||||
_1M2x orUlVd.tSVm | _1M2x orUlVd.tSVm | ||||
பலத்தில் $alt | பலத்தில் $alt | ||||
பலத்தின் $alt | பலத்தின் $alt | ||||
பைக்ல $alt | பைக்ல $alt | ||||
பாவ்லா $alt | |||||
(பி . ஏ) bije: | (பி . ஏ) bije: | ||||
அப) க (ீர்த்தி k | அப) க (ீர்த்தி k | ||||
_பால்) க (ுட k | _பால்) க (ுட k | ||||
_வளை) க (ுட k | _வளை) க (ுட k | ||||
மன்னார்) க (ுடி k | |||||
மன்னார்) கு (டி ku2 | |||||
நற்) க (ுண g | நற்) க (ுண g | ||||
_சற்) க (ுண g | _சற்) க (ுண g | ||||
க (ுமார k | க (ுமார k | ||||
வி) க்ட (ோரியா kt. // victoria | வி) க்ட (ோரியா kt. // victoria | ||||
வி) க (்ரம k | வி) க (்ரம k | ||||
ஆ) க (்ரோஷ k | ஆ) க (்ரோஷ k | ||||
_கால) க (ட்ட kV | |||||
_வலை) க (ாப் k | |||||
//endsort | //endsort | ||||
ிங்) ட (ன் t.V // -ington | ிங்) ட (ன் t.V // -ington | ||||
_) ட (ாக்க t. // talkies | _) ட (ாக்க t. // talkies | ||||
_) டிராக்ட (ர t.ira:gt.V | _) டிராக்ட (ர t.ira:gt.V | ||||
_) ட (யர t.V | |||||
_) ட (ைம்_ t. | _) ட (ைம்_ t. | ||||
டெலிப (ோன t.elif | டெலிப (ோன t.elif | ||||
_) ட (ம்ப்ளர t.V | _) ட (ம்ப்ளர t.V | ||||
_) ட (ேப t. | _) ட (ேப t. | ||||
_) டாக (்ஸி t.a:k | _) டாக (்ஸி t.a:k | ||||
_ல) ட்ட d.d.V# | _ல) ட்ட d.d.V# | ||||
_) ட (யர் t.V | |||||
_) ட (யரில t.V | |||||
.group ண | .group ண | ||||
ண n.V | ண n.V | ||||
ச) த (்ரு t | ச) த (்ரு t | ||||
த) த (்ரூப t | த) த (்ரூப t | ||||
பா) த (்ரூம t | பா) த (்ரூம t | ||||
_கௌ) த (மி tV | |||||
//endsort | //endsort | ||||
_) ப (கிரங்க bV | _) ப (கிரங்க bV | ||||
_) ப (கிஷ்க bV | _) ப (கிஷ்க bV | ||||
_) ப (கீர bV | _) ப (கீர bV | ||||
_) ப (க்கெட் bV | |||||
_) பக் (த bVk | _) பக் (த bVk | ||||
_) ப (ங்கம bV | _) ப (ங்கம bV | ||||
_) ப (ங்களா bV | _) ப (ங்களா bV | ||||
_) ப (லூன bV | _) ப (லூன bV | ||||
_) ப (வாணி bV | _) ப (வாணி bV | ||||
_) ப (வானி bV | _) ப (வானி bV | ||||
_) பவுண்ட (ன faUn.t.V | |||||
_) ப (வ்ய bV | _) ப (வ்ய bV | ||||
_) ப (ஸ bV | _) ப (ஸ bV | ||||
_) ப (ாகங்க b | _) ப (ாகங்க b | ||||
_) ப (ாகத b | _) ப (ாகத b | ||||
_) ப (ாகம b | _) ப (ாகம b | ||||
_) ப (ாக்கிய b | _) ப (ாக்கிய b | ||||
_) ப (ாங்க் b | |||||
_) ப (ாசு b | _) ப (ாசு b | ||||
_) ப (ாசுர p | _) ப (ாசுர p | ||||
_) ப (ாடி_பில்டிங் b | _) ப (ாடி_பில்டிங் b | ||||
மன) ப்பி (ரமை bb | மன) ப்பி (ரமை bb | ||||
துர்) ப்ப (ோதனை bb | துர்) ப்ப (ோதனை bb | ||||
கம்) ப்யூட (ர pjU:t.V | கம்) ப்யூட (ர pjU:t.V | ||||
மென்) ப (ொருள் p | |||||
வன்) ப (ொருள் p | |||||
//endsort | //endsort | ||||
// If ப+ appearing in the middle of a word is followed by ட+ | // If ப+ appearing in the middle of a word is followed by ட+ |
_0C jyz | _0C jyz | ||||
_2C 'icijyz | _2C 'icijyz | ||||
_0M1 bIn | _0M1 bIn | ||||
_1M1 bIn | |||||
_0M2 miljon | _0M2 miljon | ||||
_0M3 miljar | _0M3 miljar | ||||
_dpt _viRg,Yl_| | _dpt _viRg,Yl_| |
.group | .group | ||||
$ dolar | $ dolar | ||||
' (Pb // split a word at ' and translate the first part separately. | ' (Pb // split a word at ' and translate the first part separately. | ||||
ə E // used in Aberbaijan | |||||
ä E |
64 phoneme tables | |||||
65 phoneme tables | |||||
new total | new total | ||||
base 107 107 | base 107 107 | ||||
consonants 9 115 | consonants 9 115 | ||||
jbo 2 114 | jbo 2 114 | ||||
nci 3 123 | nci 3 123 | ||||
fi 40 133 | 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 | hu 24 121 | ||||
lv 29 125 | lv 29 125 | ||||
nl 24 125 | nl 24 125 | ||||
pl 20 118 | pl 20 118 | ||||
sk 28 133 | sk 28 133 | ||||
cs 6 133 | cs 6 133 | ||||
hr 26 138 | |||||
hr 25 138 | |||||
mk 3 139 | mk 3 139 | ||||
sr 14 138 | sr 14 138 | ||||
it 18 126 | it 18 126 | ||||
hy 23 117 | hy 23 117 | ||||
da 24 120 | da 24 120 | ||||
rw 15 130 | rw 15 130 | ||||
ml 13 150 | |||||
ne 18 156 | |||||
pa 14 150 | |||||
ml 13 151 | |||||
ne 18 157 | |||||
pa 14 151 | |||||
prs 8 111 | prs 8 111 | ||||
sl 7 133 | sl 7 133 | ||||
gd 6 107 | gd 6 107 | ||||
bg 10 119 | bg 10 119 | ||||
nso 8 107 | nso 8 107 | ||||
ht 11 137 | |||||
ht 11 140 | |||||
az 10 127 | |||||
Data file Used by | Data file Used by | ||||
b/b [b] base | b/b [b] base | ||||
[l/] fr | [l/] fr | ||||
l/l_@ [l/3] base | l/l_@ [l/3] base | ||||
[l/] fr | [l/] fr | ||||
l/l@ [l#] base | |||||
[€¦] base | |||||
l/l@ [h&w] base | |||||
[l#] base | |||||
[l] fr | [l] fr | ||||
[l/2] fr | [l/2] fr | ||||
l/L1_aL [l/] base | l/L1_aL [l/] base | ||||
l/L2_uL [l/2] base | l/L2_uL [l/2] base | ||||
l/l_3 [l/] de | l/l_3 [l/] de | ||||
l/l_4 [ll] sq | l/l_4 [ll] sq | ||||
l/la [l#] base | |||||
[€¦] base | |||||
l/la [h&w] base | |||||
[l#] base | |||||
[l] fr | [l] fr | ||||
[l/2] fr | [l/2] fr | ||||
l/l_a [l/3] base | l/l_a [l/3] base | ||||
[l/] fr | [l/] fr | ||||
l/le [l#] base | |||||
[€¦] base | |||||
l/le [h&w] base | |||||
[l#] base | |||||
[l] fr | [l] fr | ||||
[l/2] fr | [l/2] fr | ||||
l/l_e [l/3] base | l/l_e [l/3] base | ||||
[&:] af | [&:] af | ||||
l/l_front [L] sq | l/l_front [L] sq | ||||
l/l_front_ [l/4] sq | l/l_front_ [l/4] sq | ||||
l/li [l#] base | |||||
[€¦] base | |||||
l/li [h&w] base | |||||
[l#] base | |||||
[l] fr | [l] fr | ||||
[l/2] fr | [l/2] fr | ||||
[l] zh | [l] zh | ||||
ll/_ll [L] bg | ll/_ll [L] bg | ||||
l/l_long [l] base | l/l_long [l] base | ||||
[l] fr | [l] fr | ||||
l/lo [l#] base | |||||
[€¦] base | |||||
l/lo [h&w] base | |||||
[l#] base | |||||
[l] fr | [l] fr | ||||
[l/2] fr | [l/2] fr | ||||
l/l_o [l/3] base | l/l_o [l/3] base | ||||
[l/] fr | [l/] fr | ||||
l^/l_rfx [l.] base | l^/l_rfx [l.] base | ||||
l/lu [l#] base | |||||
[€¦] base | |||||
l/lu [h&w] base | |||||
[l#] base | |||||
[l] fr | [l] fr | ||||
[l/2] fr | [l/2] fr | ||||
l/l_u [l/3] base | l/l_u [l/3] base | ||||
[bh] hi | [bh] hi | ||||
[ph] zh | [ph] zh | ||||
[p#] hy | [p#] hy | ||||
ustop/percus02 [#X2] hi | |||||
ustop/percus10 [#X1] base | ustop/percus10 [#X1] base | ||||
ustop/pl [p] base | ustop/pl [p] base | ||||
[p-] consonants | [p-] consonants | ||||
vdiph/0i_2 [OI] en-sc | vdiph/0i_2 [OI] en-sc | ||||
[OI] en-wi | [OI] en-wi | ||||
[AI] no | [AI] no | ||||
vdiph2/8@ [U@] en | |||||
vdiph2/e@ [3:] en-sc | vdiph2/e@ [3:] en-sc | ||||
[e@] en-sc | [e@] en-sc | ||||
[e@] en-wi | [e@] en-wi | ||||
[@U] vi | [@U] vi | ||||
[@:U] vi | [@:U] vi | ||||
vdiph/@u_2 [oU] en-rp | vdiph/@u_2 [oU] en-rp | ||||
vdiph/@u_3 [o3] fr | |||||
[@U] ro | |||||
vdiph/@u_3 [@U] ro | |||||
vdiph/@u_en [oU] en | vdiph/@u_en [oU] en | ||||
[@U] id | [@U] id | ||||
vdiph/ui [uI] base2 | vdiph/ui [uI] base2 | ||||
[&:] lv | [&:] lv | ||||
[&] sv | [&] sv | ||||
[&#] da | [&#] da | ||||
[&] az | |||||
vowel/0 [0] en | vowel/0 [0] en | ||||
[O] hi | [O] hi | ||||
[O] pt | [O] pt | ||||
[@] no | [@] no | ||||
vowel/@_6 [@] en | vowel/@_6 [@] en | ||||
[W] fr | [W] fr | ||||
[W2] fr | |||||
vowel/8 [o-] zh | vowel/8 [o-] zh | ||||
vowel/8_2 [U] en-us | vowel/8_2 [U] en-us | ||||
[8] sv | [8] sv | ||||
[A:] no | [A:] no | ||||
[aa] zhy | [aa] zhy | ||||
[a] hy | [a] hy | ||||
[a] az | |||||
vowel/aa# [O] en-us | vowel/aa# [O] en-us | ||||
[0] en-wi | [0] en-wi | ||||
[a2] fi | [a2] fi | ||||
vowel/e_6 [e] ht | vowel/e_6 [e] ht | ||||
vowel/e_8 [E:] de | vowel/e_8 [E:] de | ||||
[e] fr | [e] fr | ||||
vowel/e_9 [E2] fr | |||||
vowel/ee [E] en-n | vowel/ee [E] en-n | ||||
[E] sv | [E] sv | ||||
vowel/e_e [E] en-sc | vowel/e_e [E] en-sc | ||||
[E] da | [E] da | ||||
[e] bg | [e] bg | ||||
[e] nso | [e] nso | ||||
[e] az | |||||
vowel/@_fnt [@] en-wi | vowel/@_fnt [@] en-wi | ||||
[@2] en-wi | [@2] en-wi | ||||
[@2] hr | [@2] hr | ||||
[i:] la | [i:] la | ||||
[i:] sv | [i:] sv | ||||
vowel/i_3 [i] af | vowel/i_3 [i] af | ||||
[I] fr | |||||
[i:] sk | [i:] sk | ||||
vowel/i_4 [i] fi | vowel/i_4 [i] fi | ||||
[i] hu | [i] hu | ||||
vowel/ii_5 [I] la | vowel/ii_5 [I] la | ||||
[i] zh | [i] zh | ||||
[i] bg | [i] bg | ||||
[i] az | |||||
vowel/ii_6 [I] en-wm | vowel/ii_6 [I] en-wm | ||||
[I] en-wi | [I] en-wi | ||||
[I2] en-wi | [I2] en-wi | ||||
vowel/oe_2 [W] no | vowel/oe_2 [W] no | ||||
vowel/oe_4 [W] sv | vowel/oe_4 [W] sv | ||||
vowel/o_mid [U@] en-rp | vowel/o_mid [U@] en-rp | ||||
[O] fr | |||||
[o] hu | [o] hu | ||||
[o] tr | [o] tr | ||||
[o] ne | [o] ne | ||||
[o] bg | [o] bg | ||||
[o] az | |||||
vowel/o_mid2 [O] fr | vowel/o_mid2 [O] fr | ||||
[O] ht | [O] ht | ||||
vowel/oo [o] base | vowel/oo [o] base | ||||
vowelr/r-voc [r-] base | vowelr/r-voc [r-] base | ||||
[r-] sk | [r-] sk | ||||
[r:] sk | [r:] sk | ||||
[r-] hr | |||||
vowelr/V3_r [VR] en | vowelr/V3_r [VR] en | ||||
[3] en-sc | [3] en-sc | ||||
[@r] zh | [@r] zh | ||||
[u:] en-sc | [u:] en-sc | ||||
vowel/u_5 [u] sw | vowel/u_5 [u] sw | ||||
[u] nso | [u] nso | ||||
[u] az | |||||
vowel/u#_5 [y] vi | vowel/u#_5 [y] vi | ||||
vowel/u_6 [u:] en-rp | vowel/u_6 [u:] en-rp | ||||
[u] ta | [u] ta | ||||
[u2] ta | |||||
[u:] ta | [u:] ta | ||||
[U] pt-pt | [U] pt-pt | ||||
[u] pt-pt | [u] pt-pt | ||||
[u] ku | [u] ku | ||||
vowel/u_7 [u] vi | vowel/u_7 [u] vi | ||||
vowel/u#_7 [@] tr | vowel/u#_7 [@] tr | ||||
[@] az | |||||
vowel/u_bck [u] base2 | vowel/u_bck [u] base2 | ||||
[U] cy | [U] cy | ||||
[u] fi | [u] fi | ||||
[@] bg | [@] bg | ||||
vowel/V_2 [V] en | vowel/V_2 [V] en | ||||
[a] af | [a] af | ||||
[V] fr | |||||
[V] ru | [V] ru | ||||
[V#] ru | [V#] ru | ||||
[V] ku | [V] ku | ||||
[yu] zhy | [yu] zhy | ||||
[y] sq | [y] sq | ||||
[y] da | [y] da | ||||
[y] az | |||||
vowel/y# [Y] base2 | vowel/y# [Y] base2 | ||||
[3:] en-wm | [3:] en-wm | ||||
[Y:] de | [Y:] de | ||||
[y] zh | [y] zh | ||||
vowel/y#_2 [Y] hu | vowel/y#_2 [Y] hu | ||||
[Y:] sv | [Y:] sv | ||||
[W] az | |||||
vowel/y_3 [y] af | vowel/y_3 [y] af | ||||
vowel/y#_3 [W] is | vowel/y#_3 [W] is | ||||
[W:] is | [W:] is |
prehead 46 57 | prehead 46 57 | ||||
headenv fall 16 | headenv fall 16 | ||||
head 4 80 30 -5 -15 | head 4 80 30 -5 -15 | ||||
headextend 25 63 38 13 0 | |||||
headextend 0 63 38 13 0 | |||||
nucleus0 fall-rise 75 40 | nucleus0 fall-rise 75 40 | ||||
endtune | endtune | ||||
nucleus0 fall 92 8 | nucleus0 fall 92 8 | ||||
nucleus fall 92 80 76 8 | nucleus fall 92 80 76 8 | ||||
endtune | endtune | ||||
phoneme a // short A | phoneme a // short A | ||||
vowel starttype #a endtype #a | vowel starttype #a endtype #a | ||||
ipa ɐ | |||||
length 140 | length 140 | ||||
FMT(vowel/V_2) | FMT(vowel/V_2) | ||||
endphoneme | endphoneme | ||||
phoneme I // short I, Schwa | phoneme I // short I, Schwa | ||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
ipa ə | |||||
length 140 | length 140 | ||||
IF nextPh(r/) THEN | IF nextPh(r/) THEN | ||||
Length 190 | Length 190 | ||||
phoneme e@ // long E | phoneme e@ // long E | ||||
vowel starttype #i endtype #@ | vowel starttype #i endtype #@ | ||||
ipa iə | |||||
length 230 | length 230 | ||||
FMT(vdiph/i@_2) | FMT(vdiph/i@_2) | ||||
endphoneme | endphoneme | ||||
phoneme o@ // long O | phoneme o@ // long O | ||||
vowel starttype #u endtype #@ | vowel starttype #u endtype #@ | ||||
ipa ʊə | |||||
length 250 | length 250 | ||||
FMT(vdiph2/o@) | FMT(vdiph2/o@) | ||||
endphoneme | endphoneme | ||||
phoneme eI | phoneme eI | ||||
vowel starttype #e endtype #i | vowel starttype #e endtype #i | ||||
ipa ɛɪ | |||||
length 170 | length 170 | ||||
IfNextVowelAppend(;) | IfNextVowelAppend(;) | ||||
FMT(vdiph/@i_2) | FMT(vdiph/@i_2) | ||||
phoneme oI | phoneme oI | ||||
vowel starttype #o endtype #i | vowel starttype #o endtype #i | ||||
ipa ʊɪ | |||||
length 290 | length 290 | ||||
IfNextVowelAppend(;) | IfNextVowelAppend(;) | ||||
FMT(vdiph/oi_2) | FMT(vdiph/oi_2) | ||||
WAV(ustop/ki) | WAV(ustop/ki) | ||||
endphoneme | endphoneme | ||||
phoneme a# | phoneme a# | ||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
ipa ɐ | |||||
unstressed | unstressed | ||||
length 170 | length 170 | ||||
FMT(vowel/a#_3) | FMT(vowel/a#_3) |
endphoneme | endphoneme | ||||
phoneme r- // syllabic r | |||||
vowel starttype #@ endtype #@ | |||||
length 240 | |||||
FMT(vowelr/r-voc) | |||||
endphoneme | |||||
phoneme R | phoneme R | ||||
import_phoneme base/R | import_phoneme base/R | ||||
endphoneme | endphoneme | ||||
phoneme r* | phoneme r* | ||||
vowel nonsyllabic | vowel nonsyllabic | ||||
unstressed | unstressed | ||||
ipa r | |||||
ipa NULL | |||||
length 50 | length 50 | ||||
starttype #@ endtype #@ | starttype #@ endtype #@ | ||||
AppendPhoneme(*) | AppendPhoneme(*) |
phoneme i // optional variant of [I] for end of words | phoneme i // optional variant of [I] for end of words | ||||
vowel starttype #i endtype #i | vowel starttype #i endtype #i | ||||
ipa ɪ | |||||
length 140 | length 140 | ||||
IfNextVowelAppend(;) | IfNextVowelAppend(;) | ||||
FMT(vowel/ii_en) | FMT(vowel/ii_en) | ||||
phoneme aI | phoneme aI | ||||
vowel starttype #a endtype #i | vowel starttype #a endtype #i | ||||
length 240 | length 240 | ||||
IF nextPh(#a) OR nextPh(#o) THEN | |||||
IF nextPh(#a) THEN | |||||
AppendPhoneme(;) | AppendPhoneme(;) | ||||
ENDIF | ENDIF | ||||
FMT(vdiph/ai_2) | FMT(vdiph/ai_2) | ||||
vowel starttype #u endtype #@ | vowel starttype #u endtype #@ | ||||
length 200 | length 200 | ||||
IfNextVowelAppend(r-) | IfNextVowelAppend(r-) | ||||
IF thisPh(isUnstressed) THEN | |||||
FMT(vdiph2/8@) | |||||
ENDIF | |||||
FMT(vdiph2/uu@) | FMT(vdiph2/uu@) | ||||
endphoneme | endphoneme | ||||
//==================================================== | //==================================================== | ||||
// French | // French | ||||
//==================================================== | //==================================================== | ||||
// Updated 2010-07-16 Michel Such <[email protected]> | |||||
// Updated 2010-07-25 Michel Such <[email protected]> | |||||
phoneme #l virtual | phoneme #l virtual | ||||
// Used for l and l/ | // Used for l and l/ | ||||
procedure pre_r | procedure pre_r | ||||
IF prevPh(y) THEN | IF prevPh(y) THEN | ||||
VowelEnding(vwl_fr/y2r) | VowelEnding(vwl_fr/y2r) | ||||
ELIF prevPh(E) OR prevPh(E2) THEN | |||||
ELIF prevPh(E) THEN | |||||
VowelEnding(vwl_fr/e_2r) | VowelEnding(vwl_fr/e_2r) | ||||
ELIF prevPh(A~) THEN | ELIF prevPh(A~) THEN | ||||
VowelEnding(vwl_fr/aa2r) | VowelEnding(vwl_fr/aa2r) | ||||
procedure post_r | procedure post_r | ||||
IF nextPh(E) OR nextPh(E2) THEN | |||||
IF nextPh(E) THEN | |||||
VowelStart(vwl_fr/re2) | VowelStart(vwl_fr/re2) | ||||
ELIF nextPh(W) THEN | ELIF nextPh(W) THEN | ||||
VowelStart(vwl_fr/r@2) | VowelStart(vwl_fr/r@2) | ||||
endphoneme | endphoneme | ||||
phoneme a# // For english words | |||||
import_phoneme en/a# | |||||
endphoneme | |||||
phoneme e | phoneme e | ||||
vowel starttype #e endtype #e | vowel starttype #e endtype #e | ||||
endphoneme | endphoneme | ||||
phoneme E2 // Between e and E | |||||
vowel starttype #e endtype #e | |||||
length 170 | |||||
FMT(vowel/e_9) | |||||
endphoneme | |||||
phoneme i | phoneme i | ||||
vowel starttype #i endtype #i | vowel starttype #i endtype #i | ||||
palatal | palatal | ||||
endphoneme | 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 | endphoneme | ||||
vowel starttype #o endtype #o | vowel starttype #o endtype #o | ||||
length 170 | 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 | ENDIF | ||||
FMT(vowel/o_mid2) | |||||
FMT(vowel/o_mid) | |||||
endphoneme | endphoneme | ||||
phoneme o3 // almost like english oU | |||||
vowel starttype #@ endtype #u | |||||
length 220 | |||||
FMT(vdiph/@u_3) | |||||
phoneme oU | |||||
import_phoneme en/oU | |||||
endphoneme | endphoneme | ||||
endphoneme | endphoneme | ||||
phoneme W2 // For english words | |||||
vowel starttype #@ endtype #@ | |||||
length 100 | |||||
unstressed | |||||
FMT(vowel/@_6) | |||||
endphoneme | |||||
phoneme Y | phoneme Y | ||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
length 170 | length 170 | ||||
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 | Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 | ||||
IF nextPh(isPause2) THEN | IF nextPh(isPause2) THEN | ||||
WAV(ustop/p_, 70) | |||||
WAV(ustop/p_, 80) | |||||
ELIF nextPh(@-) THEN | ELIF nextPh(@-) THEN | ||||
WAV(ustop/p_unasp, 60) | |||||
WAV(ustop/p_unasp, 70) | |||||
ELIF nextPh(#l) THEN | ELIF nextPh(#l) THEN | ||||
WAV(ustop/pl, 30) | |||||
WAV(ustop/pl, 40) | |||||
ELIF nextPh(#r) THEN | ELIF nextPh(#r) THEN | ||||
length 40 | length 40 | ||||
WAV(ustop/p_, 60) | |||||
WAV(ustop/p_, 70) | |||||
ENDIF | ENDIF | ||||
WAV(ustop/p_unasp_, 90) | WAV(ustop/p_unasp_, 90) | ||||
endphoneme | endphoneme | ||||
FMT(voc/v) addWav(vocw/v, 60) | FMT(voc/v) addWav(vocw/v, 60) | ||||
endphoneme | endphoneme | ||||
phoneme V // For english words | |||||
vowel starttype #a endtype #@ | |||||
length 140 | |||||
ChangeIfDiminished(@) | |||||
FMT(vowel/V_2) | |||||
endphoneme | |||||
phoneme z | phoneme z | ||||
vcd alv frc sibilant | vcd alv frc sibilant | ||||
endphoneme | 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 | |||||
phoneme A // reduces to [a] if not stressed | phoneme A // reduces to [a] if not stressed | ||||
vowel starttype #a endtype #a | vowel starttype #a endtype #a | ||||
length 250 | length 250 | ||||
ChangeIfNotStressed(a) | |||||
ChangeIfUnstressed(a) | |||||
FMT(vowel/aa_6) | FMT(vowel/aa_6) | ||||
endphoneme | endphoneme | ||||
endphoneme | 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 |
FMT(g2/xg) addWav(ustop/k_asp, 70) | FMT(g2/xg) addWav(ustop/k_asp, 70) | ||||
endphoneme | endphoneme | ||||
//================ | |||||
phoneme #X2 // click, use for indicating combining long vowels | |||||
vls alv frc sibilant | |||||
lengthmod 3 | |||||
WAV(ustop/percus02) | |||||
endphoneme | |||||
phoneme r- | |||||
phoneme r- // syllabic r | |||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
ipa rU+0329 | ipa rU+0329 | ||||
length 220 | length 220 | ||||
FMT(vowelr/r-voc) | FMT(vowelr/r-voc) | ||||
endphoneme | endphoneme | ||||
phoneme r: | |||||
phoneme r: // syllabic r | |||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
ipa rU+0329ː | ipa rU+0329ː | ||||
length 300 | length 300 |
phoneme E- | phoneme E- | ||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
ipa ə | |||||
unstressed | unstressed | ||||
length 140 | length 140 | ||||
FMT(vowel/ee#_2) | FMT(vowel/ee#_2) | ||||
phoneme u- | phoneme u- | ||||
vowel starttype #u endtype #u | vowel starttype #u endtype #u | ||||
ipa ʉ | |||||
length 200 | length 200 | ||||
FMT(vowel/u#_2) | FMT(vowel/u#_2) | ||||
endphoneme | endphoneme |
FMT(vowel/u_6) | FMT(vowel/u_6) | ||||
endphoneme | endphoneme | ||||
phoneme u2 // as [u] but don't reduce | |||||
vowel starttype #u endtype #u | |||||
length 110 | |||||
FMT(vowel/u_6) | |||||
endphoneme | |||||
phoneme U | phoneme U | ||||
vowel starttype #u endtype #u | vowel starttype #u endtype #u | ||||
ipa ʉ | |||||
length 110 | length 110 | ||||
FMT(vowel/u#_3) | FMT(vowel/u#_3) | ||||
endphoneme | endphoneme | ||||
phoneme U: | phoneme U: | ||||
vowel starttype #u endtype #u | vowel starttype #u endtype #u | ||||
ipa ʉ | |||||
length 240 | length 240 | ||||
FMT(vowel/u#_3) | FMT(vowel/u#_3) | ||||
endphoneme | endphoneme |
FMT(vowel/u_2) | FMT(vowel/u_2) | ||||
endphoneme | endphoneme | ||||
phoneme U | phoneme U | ||||
vowel starttype #u endtype #u | vowel starttype #u endtype #u | ||||
length 150 | length 150 | ||||
FMT(vowel/uu_2) | FMT(vowel/uu_2) | ||||
endphoneme | endphoneme | ||||
phoneme @ // previously u# | |||||
phoneme @ | |||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
ipa ɯ | |||||
length 150 | length 150 | ||||
FMT(vowel/u#_7) | FMT(vowel/u#_7) | ||||
endphoneme | endphoneme |
phoneme m- | phoneme m- | ||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
ipa mU+0329 | |||||
length 170 | length 170 | ||||
IF thisPh(isWordStart) THEN | IF thisPh(isWordStart) THEN | ||||
phoneme n- | phoneme n- | ||||
vowel starttype #@ endtype #@ | vowel starttype #@ endtype #@ | ||||
ipa nU+0329 | |||||
length 170 | length 170 | ||||
IF thisPh(isWordStart) THEN | IF thisPh(isWordStart) THEN | ||||
phoneme N- | phoneme N- | ||||
vowel starttype #e endtype #e | vowel starttype #e endtype #e | ||||
ipa ŋU+0329 | |||||
length 190 | length 190 | ||||
FMT(nn/nn-syl) | FMT(nn/nn-syl) | ||||
endphoneme | endphoneme | ||||
phonemetable ht fr | phonemetable ht fr | ||||
include ph_haitian | include ph_haitian | ||||
phonemetable az tr | |||||
include ph_azerbaijani |
{//========================================================== | {//========================================================== | ||||
FILE *in, *out; | FILE *in, *out; | ||||
char buf_4[4]; | char buf_4[4]; | ||||
unsigned int val; | |||||
unsigned short val; | |||||
in = fopen (infile, "rb"); | in = fopen (infile, "rb"); | ||||
if (in == NULL) { | if (in == NULL) { | ||||
void swap_phontab (const char *infile, const char *outfile) | void swap_phontab (const char *infile, const char *outfile) | ||||
{//======================================================== | {//======================================================== | ||||
FILE *in, *out; | FILE *in, *out; | ||||
char buf_4[4]; | |||||
char buf_8[8]; | |||||
int i, n_phoneme_tables; | int i, n_phoneme_tables; | ||||
in = fopen (infile, "rb"); | in = fopen (infile, "rb"); | ||||
exit (1); | 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++) { | for (i = 0; i < n_phoneme_tables; i++) { | ||||
int n_phonemes, j; | int n_phonemes, j; | ||||
char tab_name[N_PHONEME_TAB_NAME]; | 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); | fread (tab_name, N_PHONEME_TAB_NAME, 1, in); | ||||
fwrite (tab_name, N_PHONEME_TAB_NAME, 1, out); | fwrite (tab_name, N_PHONEME_TAB_NAME, 1, out); |
kPROCEDURE, | kPROCEDURE, | ||||
kENDPHONEME, | kENDPHONEME, | ||||
kENDPROCEDURE, | kENDPROCEDURE, | ||||
kEQUIVALENTS, | |||||
kPHONEMENUMBER, | kPHONEMENUMBER, | ||||
kPHONEMETABLE, | kPHONEMETABLE, | ||||
kINCLUDE, | kINCLUDE, | ||||
{"procedure", tSTATEMENT, kPROCEDURE}, | {"procedure", tSTATEMENT, kPROCEDURE}, | ||||
{"endphoneme", tSTATEMENT, kENDPHONEME}, | {"endphoneme", tSTATEMENT, kENDPHONEME}, | ||||
{"endprocedure", tSTATEMENT, kENDPROCEDURE}, | {"endprocedure", tSTATEMENT, kENDPROCEDURE}, | ||||
{"equivalents", tSTATEMENT, kEQUIVALENTS}, | |||||
{"import_phoneme", tSTATEMENT, kIMPORT_PH}, | {"import_phoneme", tSTATEMENT, kIMPORT_PH}, | ||||
{"stress_type",tSTATEMENT, kSTRESSTYPE}, | {"stress_type",tSTATEMENT, kSTRESSTYPE}, | ||||
{"starttype", tSTATEMENT, kSTARTTYPE}, | {"starttype", tSTATEMENT, kSTARTTYPE}, | ||||
static int phoneme_flags; | static int phoneme_flags; | ||||
static int place_articulation; | static int place_articulation; | ||||
static char *p_equivalence; | |||||
static char equivalence_buf[20000]; | |||||
#define N_PROCS 50 | #define N_PROCS 50 | ||||
int n_procs; | int n_procs; | ||||
int proc_addr[N_PROCS]; | int proc_addr[N_PROCS]; | ||||
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) | static PHONEME_TAB *FindPhoneme(const char *string) | ||||
{//================================================ | {//================================================ | ||||
PHONEME_TAB_LIST *phtab = NULL; | PHONEME_TAB_LIST *phtab = NULL; | ||||
char *phname; | char *phname; | ||||
char buf[200]; | 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)) | if((strlen(string) <= 4) && ((ix = LookupPhoneme(string,0)) != -1)) | ||||
{ | { | ||||
return(&phoneme_tab2[ix]); | return(&phoneme_tab2[ix]); | ||||
*phname++ = 0; | *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) | if(phtab == NULL) | ||||
{ | { | ||||
error("Unknown phoneme table: '%s'",buf); | |||||
return(NULL); // phoneme table not found | return(NULL); // phoneme table not found | ||||
} | } | ||||
fputc(phoneme_tab_list2[ix].includes,f_phtab); | fputc(phoneme_tab_list2[ix].includes,f_phtab); | ||||
fputc(0,f_phtab); | fputc(0,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); | fwrite(phoneme_tab_list2[ix].name,1,N_PHONEME_TAB_NAME,f_phtab); | ||||
static void EndPhonemeTable() | static void EndPhonemeTable() | ||||
{//========================== | {//========================== | ||||
int ix; | int ix; | ||||
int *pw; | |||||
int length; | |||||
if(n_phoneme_tabs == 0) | if(n_phoneme_tabs == 0) | ||||
return; | return; | ||||
fprintf(f_errors,"%3d: Phoneme [%s] not declared, referenced at line %d\n",linenum, | fprintf(f_errors,"%3d: Phoneme [%s] not declared, referenced at line %d\n",linenum, | ||||
WordToString(phoneme_tab2[ix].mnemonic),int(phoneme_tab2[ix].program)); | WordToString(phoneme_tab2[ix].mnemonic),int(phoneme_tab2[ix].program)); | ||||
error_count++; | error_count++; | ||||
phoneme_tab2[ix].type = 0; // prevent the error message repeating | |||||
} | } | ||||
} | } | ||||
n_phcodes_list[n_phoneme_tabs-1] = n_phcodes; | 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); | |||||
} | |||||
} | } | ||||
if(gui_flag) | if(gui_flag) | ||||
progress->Update(n_phoneme_tabs); | 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; | 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); | strncpy0(phoneme_tab_list2[n_phoneme_tabs].name, name, N_PHONEME_TAB_NAME); | ||||
n_phcodes = 1; | n_phcodes = 1; | ||||
phoneme_tab_list2[n_phoneme_tabs].includes = 0; | phoneme_tab_list2[n_phoneme_tabs].includes = 0; | ||||
p_equivalence = equivalence_buf; | |||||
if(n_phoneme_tabs > 0) | if(n_phoneme_tabs > 0) | ||||
{ | { | ||||
} // end of StartPhonemeTable | } // 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() | static void CompilePhonemeFiles() | ||||
{//============================== | {//============================== | ||||
int item; | int item; | ||||
item = NextItem(tKEYWORD); | item = NextItem(tKEYWORD); | ||||
if(item == kINCLUDE) | |||||
switch(item) | |||||
{ | { | ||||
case kINCLUDE: | |||||
NextItem(tSTRING); | NextItem(tSTRING); | ||||
sprintf(buf,"%s%s",path_source,item_string); | sprintf(buf,"%s%s",path_source,item_string); | ||||
if((stack_ix < N_STACK) && (f = fopen_log(f_errors,buf,"rb")) != NULL) | if((stack_ix < N_STACK) && (f = fopen_log(f_errors,buf,"rb")) != NULL) | ||||
strncpy0(current_fname,item_string,sizeof(current_fname)); | strncpy0(current_fname,item_string,sizeof(current_fname)); | ||||
linenum = 1; | linenum = 1; | ||||
} | } | ||||
} | |||||
else | |||||
if(item == kPHONEMETABLE) | |||||
{ | |||||
break; | |||||
case kPHONEMETABLE: | |||||
EndPhonemeTable(); | EndPhonemeTable(); | ||||
NextItem(tSTRING); // name of the new phoneme table | NextItem(tSTRING); // name of the new phoneme table | ||||
StartPhonemeTable(item_string); | StartPhonemeTable(item_string); | ||||
} | |||||
else | |||||
if(item == kPHONEMESTART) | |||||
{ | |||||
break; | |||||
case kPHONEMESTART: | |||||
if(n_phoneme_tabs == 0) | if(n_phoneme_tabs == 0) | ||||
{ | { | ||||
Error("phonemetable is missing"); | Error("phonemetable is missing"); | ||||
return; | return; | ||||
} | } | ||||
CompilePhoneme(1); | CompilePhoneme(1); | ||||
} | |||||
else | |||||
if(item == kPROCEDURE) | |||||
{ | |||||
break; | |||||
case kPROCEDURE: | |||||
CompilePhoneme(0); | 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 | phoneme_tab2[n_phcodes+1].mnemonic = 0; // terminator | ||||
} // end of CompilePhonemeFiles | } // end of CompilePhonemeFiles | ||||
"# S - A SPECT_SEQ structure\n" | "# S - A SPECT_SEQ structure\n" | ||||
"# W - A wavefile segment\n" | "# W - A wavefile segment\n" | ||||
"# E - An envelope\n" | "# E - An envelope\n" | ||||
"# Q - Phoneme equivalence tables\n" | |||||
"#\n" | "#\n" | ||||
"# Address is the displacement within phondata of this item\n" | "# Address is the displacement within phondata of this item\n" | ||||
"#\n" | "#\n" |
static char letterGroupsDefined[N_LETTER_GROUPS]; | static char letterGroupsDefined[N_LETTER_GROUPS]; | ||||
MNEM_TAB mnem_rules[] = { | MNEM_TAB mnem_rules[] = { | ||||
{"unpr", 0x01}, | |||||
{"w_alt2", 0x12}, | {"w_alt2", 0x12}, | ||||
{"w_alt3", 0x13}, | {"w_alt3", 0x13}, | ||||
{"w_alt", 0x11}, // note: put longer names before their sub-strings | {"w_alt", 0x11}, // note: put longer names before their sub-strings | ||||
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 */ | /* Convert compiled match template to ascii */ | ||||
unsigned char rb; | unsigned char rb; | ||||
if(rb == RULE_DOLLAR) | 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 = ' '; | c = ' '; | ||||
} | } | ||||
else | else | ||||
if(rb == RULE_ENDING) | 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); | flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f); | ||||
suffix_char = 'S'; | suffix_char = 'S'; | ||||
if(flags & (SUFX_P >> 8)) | if(flags & (SUFX_P >> 8)) |
char dictionary_name[40]; | char dictionary_name[40]; | ||||
extern char *print_dictionary_flags(unsigned int *flags); | 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 | // 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] = {L'ä',L'ë',L'ï',L'ö',L'ü',L'ÿ',0}; | ||||
static const unsigned short diereses_list[7] = {0xe4,0xeb,0xef,0xf6,0xfc,0xff,0}; | static const unsigned short diereses_list[7] = {0xe4,0xeb,0xef,0xf6,0xfc,0xff,0}; | ||||
// convert characters to an approximate 7 bit ascii equivalent | // 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 | '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 | '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 | 'a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i', // 0e0 | ||||
'r','r','r','r','u','u','u','u','s','s','t','t','y','y','h','h', // 210 | '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 | '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 | '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' }; | |||||
} | } | ||||
static int reverse_word_bytes(int word) | |||||
{//============================= | |||||
int Reverse4Bytes(int word) | |||||
{//======================== | |||||
// reverse the order of bytes from little-endian to big-endian | // reverse the order of bytes from little-endian to big-endian | ||||
#ifdef ARCH_BIG | #ifdef ARCH_BIG | ||||
int ix; | int ix; | ||||
pw = (unsigned int *)(tr->langopts.replace_chars); | pw = (unsigned int *)(tr->langopts.replace_chars); | ||||
while(*pw != 0) | while(*pw != 0) | ||||
{ | { | ||||
*pw = reverse_word_bytes(*pw); | |||||
*pw = Reverse4Bytes(*pw); | |||||
pw++; | pw++; | ||||
*pw = reverse_word_bytes(*pw); | |||||
*pw = Reverse4Bytes(*pw); | |||||
pw++; | pw++; | ||||
} | } | ||||
#endif | #endif | ||||
pw = (int *)(tr->data_dictlist); | pw = (int *)(tr->data_dictlist); | ||||
length = reverse_word_bytes(pw[1]); | |||||
length = Reverse4Bytes(pw[1]); | |||||
if(size <= (N_HASH_DICT + sizeof(int)*2)) | if(size <= (N_HASH_DICT + sizeof(int)*2)) | ||||
{ | { | ||||
return(2); | return(2); | ||||
} | } | ||||
if((reverse_word_bytes(pw[0]) != N_HASH_DICT) || | |||||
if((Reverse4Bytes(pw[0]) != N_HASH_DICT) || | |||||
(length <= 0) || (length > 0x8000000)) | (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); | return(2); | ||||
} | } | ||||
tr->data_dictrules = &(tr->data_dictlist[length]); | tr->data_dictrules = &(tr->data_dictlist[length]); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
if((letter >= 0xc0) && (letter <= 0x241)) | |||||
if((letter >= 0xc0) && (letter < N_REMOVE_ACCENT)) | |||||
return(tr->letter_bits[remove_accent[letter-0xc0]] & (1L << group)); | return(tr->letter_bits[remove_accent[letter-0xc0]] & (1L << 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 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) | int Unpronouncable(Translator *tr, char *word) | ||||
{//=========================================== | {//=========================================== | ||||
/* Determines whether a word in 'unpronouncable', i.e. whether it should | /* Determines whether a word in 'unpronouncable', i.e. whether it should | ||||
int index; | int index; | ||||
int count; | int count; | ||||
int apostrophe=0; | 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); | utf8_in(&c,word); | ||||
if((tr->letter_bits_offset > 0) && (c < 0x241)) | if((tr->letter_bits_offset > 0) && (c < 0x241)) | ||||
for(;;) | for(;;) | ||||
{ | { | ||||
index += utf8_in(&c,&word[index]); | index += utf8_in(&c,&word[index]); | ||||
if((c==0) || (c==' ') || (c == '\'')) | |||||
if((c==0) || (c==' ')) | |||||
break; | break; | ||||
if((c=='\'') && (count > 1)) | |||||
break; // "tv'" but not "l'" | |||||
if(count==0) | if(count==0) | ||||
c1 = c; | c1 = c; | ||||
count++; | count++; | ||||
apostrophe = 1; | apostrophe = 1; | ||||
else | else | ||||
if(!iswalpha(c)) | 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]) | if(c1 == tr->langopts.param[LOPT_UNPRONOUNCABLE]) | ||||
vowel_posn--; // disregard this as the initial letter when counting | vowel_posn--; // disregard this as the initial letter when counting | ||||
int match_type; /* left, right, or consume */ | int match_type; /* left, right, or consume */ | ||||
int failed; | int failed; | ||||
int unpron_ignore; | |||||
int consumed; /* number of letters consumed from input */ | int consumed; /* number of letters consumed from input */ | ||||
int count; /* count through rules in the group */ | int count; /* count through rules in the group */ | ||||
int syllable_count; | int syllable_count; | ||||
/* search through dictionary rules */ | /* search through dictionary rules */ | ||||
while(rule[0] != RULE_GROUP_END) | while(rule[0] != RULE_GROUP_END) | ||||
{ | { | ||||
unpron_ignore = word_flags & FLAG_UNPRON_TEST; | |||||
match_type=0; | match_type=0; | ||||
consumed = 0; | consumed = 0; | ||||
letter = 0; | letter = 0; | ||||
/* work through next rule until end, or until no-match proved */ | /* work through next rule until end, or until no-match proved */ | ||||
rule_start = rule; | rule_start = rule; | ||||
failed = 0; | failed = 0; | ||||
while(!failed) | while(!failed) | ||||
{ | { | ||||
break; | break; | ||||
case RULE_PRE: | case RULE_PRE: | ||||
match_type = 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; | break; | ||||
case RULE_POST: | case RULE_POST: | ||||
match_type = RULE_POST; | match_type = RULE_POST; | ||||
case RULE_DOLLAR: | case RULE_DOLLAR: | ||||
command = *rule++; | command = *rule++; | ||||
if(command == 0x01) | |||||
{ | |||||
match.end_type = SUFX_UNPRON; // $unpron | |||||
} | |||||
else | |||||
if((command & 0xf0) == 0x10) | if((command & 0xf0) == 0x10) | ||||
{ | { | ||||
// $w_alt | |||||
if(dict_flags & (1 << (BITNUM_FLAG_ALT + (command & 0xf)))) | if(dict_flags & (1 << (BITNUM_FLAG_ALT + (command & 0xf)))) | ||||
add_points = 23; | add_points = 23; | ||||
else | else | ||||
else | else | ||||
if((command & 0xf0) == 0x20) | if((command & 0xf0) == 0x20) | ||||
{ | { | ||||
// $p_alt | |||||
// make a copy of the word up to the post-match characters | // make a copy of the word up to the post-match characters | ||||
ix = *word - word_start + consumed + group_length + 1; | ix = *word - word_start + consumed + group_length + 1; | ||||
memcpy(word_buf, word_start-1, ix); | memcpy(word_buf, word_start-1, ix); | ||||
break; | break; | ||||
case RULE_DEL_FWD: | 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') | if(*p == 'e') | ||||
{ | { | ||||
match.points += add_points; | match.points += add_points; | ||||
} | } | ||||
if(failed == 2) | |||||
if((failed == 2) && (unpron_ignore == 0)) | |||||
{ | { | ||||
/* matched OK, is this better than the last best match ? */ | /* matched OK, is this better than the last best match ? */ | ||||
if(match.points >= best.points) | if(match.points >= best.points) | ||||
{ | { | ||||
memcpy(&best,&match,sizeof(match)); | memcpy(&best,&match,sizeof(match)); | ||||
if(group_length > 1) | if(group_length > 1) | ||||
pts += 35; // to account for an extra letter matching | pts += 35; // to account for an extra letter matching | ||||
DecodePhonemes(match.phonemes,decoded_phonemes); | 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); | |||||
} | } | ||||
} | } | ||||
wordbuf[ix] = c; | wordbuf[ix] = c; | ||||
} | } | ||||
wordbuf[ix] = 0; | 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; | p = p_start; | ||||
} | } | ||||
// no match, try removing the accent and re-translating the word | // 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 | // within range of the remove_accent table | ||||
if((p[-2] != ' ') || (p[n] != ' ')) | if((p[-2] != ' ') || (p[n] != ' ')) | ||||
strcpy(phonemes,match1.phonemes); | strcpy(phonemes,match1.phonemes); | ||||
return(0); | 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)) | if((match1.end_type != 0) && (end_phonemes != NULL)) | ||||
{ | { | ||||
/* a standard ending has been found, re-translate the word without it */ | /* a standard ending has been found, re-translate the word without it */ | ||||
if((strcmp(ending,"s")==0) || (strcmp(ending,"es")==0)) | if((strcmp(ending,"s")==0) || (strcmp(ending,"es")==0)) | ||||
end_flags |= FLAG_SUFX_S; | 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 | end_flags &= ~FLAG_SUFX; // don't consider 's as an added suffix | ||||
return(end_flags); | return(end_flags); |
EVT_MENU(MENU_LEXICON_DE, MyFrame::OnTools) | EVT_MENU(MENU_LEXICON_DE, MyFrame::OnTools) | ||||
EVT_MENU(MENU_LEXICON_IT, MyFrame::OnTools) | EVT_MENU(MENU_LEXICON_IT, MyFrame::OnTools) | ||||
EVT_MENU(MENU_LEXICON_IT2, 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_TO_UTF8, MyFrame::OnTools) | ||||
EVT_MENU(MENU_COUNT_WORDS, MyFrame::OnTools) | EVT_MENU(MENU_COUNT_WORDS, MyFrame::OnTools) | ||||
EVT_MENU(MENU_TEST, MyFrame::OnTools) | EVT_MENU(MENU_TEST, MyFrame::OnTools) | ||||
case MENU_LEXICON_DE: | case MENU_LEXICON_DE: | ||||
case MENU_LEXICON_IT: | case MENU_LEXICON_IT: | ||||
case MENU_LEXICON_IT2: | case MENU_LEXICON_IT2: | ||||
case MENU_LEXICON_TEST: | |||||
CompareLexicon(event.GetId()); // Compare a lexicon with _rules translation | CompareLexicon(event.GetId()); // Compare a lexicon with _rules translation | ||||
break; | break; | ||||
} | } | ||||
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() | void Lexicon_Bg() | ||||
{//============== | {//============== | ||||
// Bulgarian: compare stress markup in a list of words with lookup using bg_rules | // Bulgarian: compare stress markup in a list of words with lookup using bg_rules | ||||
case MENU_LEXICON_IT2: | case MENU_LEXICON_IT2: | ||||
Lexicon_It(2); | Lexicon_It(2); | ||||
break; | break; | ||||
case MENU_LEXICON_TEST: | |||||
Lexicon_Test(); | |||||
break; | |||||
} | } | ||||
} // end of CompareLexicon | } // end of CompareLexicon | ||||
MENU_LEXICON_DE, | MENU_LEXICON_DE, | ||||
MENU_LEXICON_IT, | MENU_LEXICON_IT, | ||||
MENU_LEXICON_IT2, | MENU_LEXICON_IT2, | ||||
MENU_LEXICON_TEST, | |||||
MENU_TO_UTF8, | MENU_TO_UTF8, | ||||
MENU_COUNT_WORDS, | MENU_COUNT_WORDS, | ||||
MENU_TEST, | MENU_TEST, |
lexicon_menu->Append(MENU_LEXICON_DE, _("German")); | lexicon_menu->Append(MENU_LEXICON_DE, _("German")); | ||||
lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); | lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); | ||||
lexicon_menu->Append(MENU_LEXICON_IT2, _("Italian, pass 2")); | lexicon_menu->Append(MENU_LEXICON_IT2, _("Italian, pass 2")); | ||||
// lexicon_menu->Append(MENU_LEXICON_TEST, _("Test")); | |||||
tools_menu = new wxMenu; | tools_menu = new wxMenu; | ||||
tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); | tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); |
if(word_end[0] == '.') | if(word_end[0] == '.') | ||||
utf8_in(&c2, &word_end[2]); | utf8_in(&c2, &word_end[2]); | ||||
else | 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))) | if((word_end[1] != 0) && ((c2 == 0) || (wtab[0].flags & FLAG_COMMA_AFTER) || IsAlpha(c2))) | ||||
{ | { | ||||
flags[0] = 0; | flags[0] = 0; | ||||
flags[1] = 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; | word_start = word; | ||||
while((c = *word++) != ' ') | while((c = *word++) != ' ') | ||||
prev = value; | prev = value; | ||||
n_digits++; | n_digits++; | ||||
} | } | ||||
if(isdigit(word[0])) | |||||
return(0); // eg. 'xx2' | |||||
acc += prev; | acc += prev; | ||||
if(acc < tr->langopts.min_roman) | if(acc < tr->langopts.min_roman) | ||||
return(0); | return(0); | ||||
if(acc > tr->langopts.max_roman) | if(acc > tr->langopts.max_roman) | ||||
return(0); | return(0); | ||||
Lookup(tr, "_roman",ph_roman); // precede by "roman" if _rom is defined in *_list | Lookup(tr, "_roman",ph_roman); // precede by "roman" if _rom is defined in *_list | ||||
p = &ph_out[0]; | p = &ph_out[0]; | ||||
return(0); | return(0); | ||||
} | } | ||||
} | } | ||||
else | |||||
{ | |||||
wtab[0].flags |= FLAG_ORDINAL; | |||||
} | |||||
} | } | ||||
tr->prev_dict_flags = 0; | tr->prev_dict_flags = 0; | ||||
} | } | ||||
} | } | ||||
sprintf(ph_out,"%s%s",ph_of,ph_thousands); | 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); | return(found_value); | ||||
} | } | ||||
char name[N_PHONEME_TAB_NAME]; | char name[N_PHONEME_TAB_NAME]; | ||||
PHONEME_TAB *phoneme_tab_ptr; | PHONEME_TAB *phoneme_tab_ptr; | ||||
int n_phonemes; | 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; | } PHONEME_TAB_LIST; | ||||
prosodyframe->CreateStatusBar(); | prosodyframe->CreateStatusBar(); | ||||
int width, height; | int width, height; | ||||
wxMDIClientWindow *clientwin = this->GetClientWindow(); | |||||
wxMDIClientWindow *clientwin = (wxMDIClientWindow *)this->GetClientWindow(); | |||||
clientwin->GetClientSize(&width, &height); | clientwin->GetClientSize(&width, &height); | ||||
#ifdef deleted | #ifdef deleted |
{NULL,-1}}; | {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. | /* Find the end of the current clause. | ||||
Write the clause into buf | Write the clause into buf | ||||
tr->clause_lower_count = 0; | tr->clause_lower_count = 0; | ||||
end_of_input = 0; | end_of_input = 0; | ||||
*tone_type = 0; | *tone_type = 0; | ||||
*voice_change = 0; | |||||
f_input = f_in; // for GetC etc | f_input = f_in; // for GetC etc | ||||
if(terminator & CLAUSE_BIT_VOICE) | 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); | return(terminator); | ||||
} | } | ||||
c1 = ' '; | |||||
c2 = GetC(); | c2 = GetC(); | ||||
continue; | continue; | ||||
} | } |
if(hinstDllMBR != NULL) | if(hinstDllMBR != NULL) | ||||
return TRUE; // already loaded | return TRUE; // already loaded | ||||
if (!(hinstDllMBR=LoadLibraryA("mbrola.dll"))) | |||||
if ((hinstDllMBR=LoadLibraryA("mbrola.dll")) == 0) | |||||
return FALSE; | return FALSE; | ||||
init_MBR =(PROCIC) GetProcAddress(hinstDllMBR,"init_MBR"); | init_MBR =(PROCIC) GetProcAddress(hinstDllMBR,"init_MBR"); | ||||
write_MBR =(PROCIC) GetProcAddress(hinstDllMBR,"write_MBR"); | write_MBR =(PROCIC) GetProcAddress(hinstDllMBR,"write_MBR"); |
#include "translate.h" | #include "translate.h" | ||||
#include "wave.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; | int option_device_number = -1; | ||||
FILE *f_logespeak = NULL; | FILE *f_logespeak = NULL; | ||||
unsigned char phoneme_tab_flags[N_PHONEME_TAB]; // bit 0: not inherited | unsigned char phoneme_tab_flags[N_PHONEME_TAB]; // bit 0: not inherited | ||||
USHORT *phoneme_index=NULL; | USHORT *phoneme_index=NULL; | ||||
char *spects_data=NULL; | |||||
char *phondata_ptr=NULL; | |||||
unsigned char *wavefile_data=NULL; | unsigned char *wavefile_data=NULL; | ||||
static unsigned char *phoneme_tab_data = NULL; | static unsigned char *phoneme_tab_data = NULL; | ||||
int result = 1; | int result = 1; | ||||
int length; | int length; | ||||
unsigned char *p; | unsigned char *p; | ||||
int *pw; | |||||
if((phoneme_tab_data = (unsigned char *)ReadPhFile((void *)(phoneme_tab_data),"phontab",NULL)) == NULL) | if((phoneme_tab_data = (unsigned char *)ReadPhFile((void *)(phoneme_tab_data),"phontab",NULL)) == NULL) | ||||
return(-1); | return(-1); | ||||
if((phoneme_index = (USHORT *)ReadPhFile((void *)(phoneme_index),"phonindex",NULL)) == NULL) | if((phoneme_index = (USHORT *)ReadPhFile((void *)(phoneme_index),"phonindex",NULL)) == NULL) | ||||
return(-1); | return(-1); | ||||
if((spects_data = ReadPhFile((void *)(spects_data),"phondata",NULL)) == NULL) | |||||
if((phondata_ptr = ReadPhFile((void *)(phondata_ptr),"phondata",NULL)) == NULL) | |||||
return(-1); | return(-1); | ||||
if((tunes = (TUNE *)ReadPhFile((void *)(tunes),"intonations",&length)) == NULL) | if((tunes = (TUNE *)ReadPhFile((void *)(tunes),"intonations",&length)) == NULL) | ||||
return(-1); | return(-1); | ||||
wavefile_data = (unsigned char *)spects_data; | |||||
wavefile_data = (unsigned char *)phondata_ptr; | |||||
n_tunes = length / sizeof(TUNE); | n_tunes = length / sizeof(TUNE); | ||||
// read the version number from the first 4 bytes of phondata | // read the version number from the first 4 bytes of phondata | ||||
n_phonemes = p[0]; | n_phonemes = p[0]; | ||||
phoneme_tab_list[ix].n_phonemes = p[0]; | phoneme_tab_list[ix].n_phonemes = p[0]; | ||||
phoneme_tab_list[ix].includes = p[1]; | 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); | memcpy(phoneme_tab_list[ix].name,p,N_PHONEME_TAB_NAME); | ||||
p += N_PHONEME_TAB_NAME; | p += N_PHONEME_TAB_NAME; | ||||
phoneme_tab_list[ix].phoneme_tab_ptr = (PHONEME_TAB *)p; | phoneme_tab_list[ix].phoneme_tab_ptr = (PHONEME_TAB *)p; | ||||
{//================== | {//================== | ||||
Free(phoneme_tab_data); | Free(phoneme_tab_data); | ||||
Free(phoneme_index); | Free(phoneme_index); | ||||
Free(spects_data); | |||||
Free(phondata_ptr); | |||||
phoneme_tab_data=NULL; | phoneme_tab_data=NULL; | ||||
phoneme_index=NULL; | phoneme_index=NULL; | ||||
spects_data=NULL; | |||||
phondata_ptr=NULL; | |||||
} | } | ||||
frame_t *frame; | frame_t *frame; | ||||
static frameref_t frames_buf[N_SEQ_FRAMES]; | 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; | seqk = (SPECT_SEQK *)seq; | ||||
nf = seq->n_frames; | nf = seq->n_frames; | ||||
{ | { | ||||
// a secondary reference has been returned, which is not a wavefile | // a secondary reference has been returned, which is not a wavefile | ||||
// add these spectra to the main sequence | // 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; | seqk2 = (SPECT_SEQK *)seq2; | ||||
// first frame of the addition just sets the length of the last frame of the main seq | // first frame of the addition just sets the length of the last frame of the main seq | ||||
fprintf(stderr,"espeak: No envelope\n"); | fprintf(stderr,"espeak: No envelope\n"); | ||||
return(envelope_data[0]); // not found, use a default envelope | return(envelope_data[0]); // not found, use a default envelope | ||||
} | } | ||||
return((unsigned char *)&spects_data[index]); | |||||
return((unsigned char *)&phondata_ptr[index]); | |||||
} | } | ||||
wav_length = (p[1] * 256); | wav_length = (p[1] * 256); | ||||
wav_length += p[0]; // length in bytes | wav_length += p[0]; // length in bytes | ||||
if(wav_length == 0) | |||||
return(0); | |||||
min_length = speed.min_sample_len; | min_length = speed.min_sample_len; | ||||
if(wav_scale==0) | if(wav_scale==0) | ||||
{ | { | ||||
InterpretPhoneme2(p->tone_ph, &phdata_tone); | InterpretPhoneme2(p->tone_ph, &phdata_tone); | ||||
pitch_env = GetEnvelope(phdata_tone.pitch_env); | 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(); | StartSyllable(); |
void Write4Bytes(FILE *f, int value); | void Write4Bytes(FILE *f, int value); | ||||
int Read4Bytes(FILE *f); | int Read4Bytes(FILE *f); | ||||
int Reverse4Bytes(int word); | |||||
int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *err_name,int flags); | int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *err_name,int flags); | ||||
memset(tr->letter_bits,0,sizeof(tr->letter_bits)); | memset(tr->letter_bits,0,sizeof(tr->letter_bits)); | ||||
memset(tr->letter_groups,0,sizeof(tr->letter_groups)); | 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 | // these may be set differently for different languages | ||||
SetLetterBits(tr,0,"aeiou"); // A vowels, except y | SetLetterBits(tr,0,"aeiou"); // A vowels, except y | ||||
SetLetterBits(tr,1,"bcdfgjklmnpqstvxz"); // B hard consonants, excluding h,r,w | SetLetterBits(tr,1,"bcdfgjklmnpqstvxz"); // B hard consonants, excluding h,r,w | ||||
tr->langopts.stress_rule = STRESSPOSN_1L; | tr->langopts.stress_rule = STRESSPOSN_1L; | ||||
SetLetterVowel(tr,'y'); | 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; | break; | ||||
tr->langopts.param[LOPT_LONG_VOWEL_THRESHOLD] = 175/2; | tr->langopts.param[LOPT_LONG_VOWEL_THRESHOLD] = 175/2; | ||||
memcpy(tr->stress_lengths,stress_lengths_de,sizeof(tr->stress_lengths)); | 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'); | SetLetterVowel(tr,'y'); | ||||
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 2; // use de_rules for unpronouncable rules | |||||
} | } | ||||
break; | break; | ||||
tr->langopts.numbers = NUM_HUNDRED_AND | NUM_ROMAN | NUM_1900; | 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.param[LOPT_COMBINE_WORDS] = 2; // allow "mc" to cmbine with the following word | ||||
tr->langopts.suffix_add_e = 'e'; | 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; | break; | ||||
tr->langopts.unstressed_wd2 = 2; | tr->langopts.unstressed_wd2 = 2; | ||||
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | 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')) | if(name2 == L('c','a')) | ||||
{ | { | ||||
{ | { | ||||
tr->langopts.stress_flags = 0x100 | 0x6 | 0x30; // stress last syllable unless word ends with a vowel | 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; | break; | ||||
tr->langopts.param[LOPT_IT_DOUBLING] = 1; | tr->langopts.param[LOPT_IT_DOUBLING] = 1; | ||||
tr->langopts.param[LOPT_ANNOUNCE_PUNCT] = 2; // don't break clause before announcing . ? ! | 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.thousands_sep = ' '; // don't allow dot as thousands separator | ||||
tr->langopts.decimal_sep = ','; | tr->langopts.decimal_sep = ','; | ||||
tr->langopts.max_roman = 899; | tr->langopts.max_roman = 899; | ||||
tr->letter_groups[0] = vowels_cyrillic; | tr->letter_groups[0] = vowels_cyrillic; | ||||
tr->langopts.stress_rule = STRESSPOSN_3R; // antipenultimate | 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 | tr->langopts.numbers2 = 0x8a; // variant numbers before thousands,milliards | ||||
} | } | ||||
break; | break; | ||||
if(name2 == L('t','a')) | if(name2 == L('t','a')) | ||||
{ | { | ||||
tr->letter_bits_offset = OFFSET_TAMIL; | tr->letter_bits_offset = OFFSET_TAMIL; | ||||
tr->langopts.numbers = 0x1; | |||||
tr->langopts.numbers = NUM_OMIT_1_THOUSAND ; | |||||
} | } | ||||
if(name2 == L('m','r')) | if(name2 == L('m','r')) | ||||
{ | { | ||||
case L('t','r'): // Turkish | 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); | SetupTranslator(tr,stress_lengths_tr,stress_amps_tr); | ||||
tr->charset_a0 = charsets[9]; // ISO-8859-9 - Latin5 | tr->charset_a0 = charsets[9]; // ISO-8859-9 - Latin5 | ||||
tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable | 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.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; | tr->langopts.max_initial_consonants = 2; | ||||
} | } | ||||
break; | break; |
} // end of CheckDottedAbbrev | } // 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) | int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab) | ||||
{//=========================================================================== | {//=========================================================================== | ||||
strcpy(word_phonemes,phonemes); | strcpy(word_phonemes,phonemes); | ||||
return(0); | 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) | if(dictionary_flags[0]==0) | ||||
{ | { | ||||
dictionary_flags[0] = dictionary_flags2[0]; | dictionary_flags[0] = dictionary_flags2[0]; | ||||
p[1] = phonSCHWA; | p[1] = phonSCHWA; | ||||
p[2] = 0; | 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)) | if(!(word_flags & FLAG_HYPHEN)) | ||||
short charix[N_TR_SOURCE+4]; | short charix[N_TR_SOURCE+4]; | ||||
WORD_TAB words[N_CLAUSE_WORDS]; | WORD_TAB words[N_CLAUSE_WORDS]; | ||||
static char voice_change_name[40]; | |||||
int word_count=0; // index into words | int word_count=0; // index into words | ||||
char sbuf[N_TR_SOURCE]; | char sbuf[N_TR_SOURCE]; | ||||
for(ix=0; ix<N_TR_SOURCE; ix++) | for(ix=0; ix<N_TR_SOURCE; ix++) | ||||
charix[ix] = 0; | 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)) | if((f_logespeak != NULL) && (logging_type & 4)) | ||||
{ | { | ||||
{ | { | ||||
// return new voice name if an embedded voice change command terminated the clause | // return new voice name if an embedded voice change command terminated the clause | ||||
if(terminator & CLAUSE_BIT_VOICE) | if(terminator & CLAUSE_BIT_VOICE) | ||||
*voice_change = &source[source_index]; | |||||
*voice_change = voice_change_name; | |||||
else | else | ||||
*voice_change = NULL; | *voice_change = NULL; | ||||
} | } |
#define FLAG_SUFFIX_VOWEL 0x08000000 // remember an initial vowel from the suffix | #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_TRACE 0x10000000 // passed to TranslateRules() to suppress dictionary lookup printout | ||||
#define FLAG_NO_PREFIX 0x20000000 | #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 | // 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 | #define SUFX_E 0x0100 // e may have been added | ||||
#define SUFX_B 0x20000 // break, this character breaks the word into stem and suffix (used with SUFX_P) | #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_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_ALLOW_TEXTMODE 0x02 // allow dictionary to translate to text rather than phonemes | ||||
#define FLAG_SUFX 0x04 | #define FLAG_SUFX 0x04 | ||||
typedef const char * constcharptr; | typedef const char * constcharptr; | ||||
typedef struct { | typedef struct { | ||||
int points; | |||||
int points; | |||||
const char *phonemes; | const char *phonemes; | ||||
int end_type; | |||||
int end_type; | |||||
char *del_fwd; | char *del_fwd; | ||||
} MatchRecord; | } MatchRecord; | ||||
#define NUM_AND_HUNDRED 0x40000 | #define NUM_AND_HUNDRED 0x40000 | ||||
#define NUM_THOUSAND_AND 0x80000 | #define NUM_THOUSAND_AND 0x80000 | ||||
#define NUM_VIGESIMAL 0x100000 | #define NUM_VIGESIMAL 0x100000 | ||||
#define NUM_OMIT_1_THOUSAND 0x200000 | |||||
#define NUM_ROMAN 0x1000000 | #define NUM_ROMAN 0x1000000 | ||||
#define NUM_ROMAN_CAPITALS 0x2000000 | #define NUM_ROMAN_CAPITALS 0x2000000 | ||||
// bit18= 'and' before hundreds | // bit18= 'and' before hundreds | ||||
// bit19= 'and' after thousands if there are no hundreds | // bit19= 'and' after thousands if there are no hundreds | ||||
// bit20= vigesimal number, if tens are not found | // bit20= vigesimal number, if tens are not found | ||||
// bit21= omit "one" before "thousand" | |||||
// bit24= recognize roman numbers | // bit24= recognize roman numbers | ||||
// bit25= Roman numbers only if upper case | // bit25= Roman numbers only if upper case | ||||
char phon_out[300]; | char phon_out[300]; | ||||
char phonemes_repeat[20]; | 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[8]; | ||||
unsigned char stress_amps_r[8]; | unsigned char stress_amps_r[8]; | ||||
int TranslateRules(Translator *tr, char *p, char *phonemes, int size, char *end_phonemes, int end_flags, unsigned int *dict_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); | 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); | 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 SetVoiceStack(espeak_VOICE *v); | ||||
void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_DATA *phdata); | void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_DATA *phdata); |
fprintf(stderr,"Unknown phoneme table: '%s'\n",phonemes_name); | fprintf(stderr,"Unknown phoneme table: '%s'\n",phonemes_name); | ||||
} | } | ||||
voice->phoneme_tab_ix = ix; | voice->phoneme_tab_ix = ix; | ||||
new_translator->phoneme_tab_ix = ix; | |||||
error = LoadDictionary(new_translator, new_dictionary, control & 4); | error = LoadDictionary(new_translator, new_dictionary, control & 4); | ||||
if(dictionary_name[0]==0) | if(dictionary_name[0]==0) | ||||
return(NULL); // no dictionary loaded | return(NULL); // no dictionary loaded |
*/ | */ | ||||
extern wxString path_phsource; | extern wxString path_phsource; | ||||
extern char *spects_data; | |||||
extern char *phondata_ptr; | |||||
extern USHORT *phoneme_index; | extern USHORT *phoneme_index; | ||||
extern int n_phoneme_tables; | extern int n_phoneme_tables; | ||||
{ | { | ||||
ix = vowelfmt_addr[vowelfmt_ix]; | ix = vowelfmt_addr[vowelfmt_ix]; | ||||
seq = (SPECT_SEQ *)(&spects_data[ix]); | |||||
seq = (SPECT_SEQ *)(&phondata_ptr[ix]); | |||||
seqk = (SPECT_SEQK *)seq; | seqk = (SPECT_SEQK *)seq; | ||||
if(seq->frame[0].frflags & FRFLAG_KLATT) | if(seq->frame[0].frflags & FRFLAG_KLATT) |