Browse Source

[1.43.63]

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-fd96e6ae7743
master
jonsd 15 years ago
parent
commit
4423576af2
58 changed files with 1644 additions and 731 deletions
  1. 0
    1
      dictsource/ca_list
  2. 6
    3
      dictsource/da_list
  3. 50
    16
      dictsource/da_rules
  4. 48
    40
      dictsource/de_list
  5. 85
    19
      dictsource/de_rules
  6. 47
    36
      dictsource/dict_phonemes
  7. 7
    1
      dictsource/en_list
  8. 118
    30
      dictsource/en_rules
  9. 9
    10
      dictsource/es_list
  10. 33
    14
      dictsource/es_rules
  11. 86
    86
      dictsource/fr_list
  12. 182
    155
      dictsource/fr_rules
  13. 23
    0
      dictsource/hi_list
  14. 58
    12
      dictsource/hu_list
  15. 44
    14
      dictsource/hu_rules
  16. 0
    1
      dictsource/nl_list
  17. 0
    1
      dictsource/pap_list
  18. 15
    2
      dictsource/ta_list
  19. 12
    2
      dictsource/ta_rules
  20. 0
    1
      dictsource/tr_list
  21. 2
    1
      dictsource/tr_rules
  22. 39
    27
      phsource/compile_report
  23. 2
    1
      phsource/intonation
  24. 6
    1
      phsource/ph_afrikaans
  25. 1
    0
      phsource/ph_catalan
  26. 1
    8
      phsource/ph_croatian
  27. 5
    1
      phsource/ph_english
  28. 123
    29
      phsource/ph_french
  29. 79
    1
      phsource/ph_german
  30. 7
    0
      phsource/ph_hindi
  31. 2
    2
      phsource/ph_slovak
  32. 2
    0
      phsource/ph_swedish
  33. 8
    0
      phsource/ph_tamil
  34. 4
    1
      phsource/ph_turkish
  35. 6
    0
      phsource/phonemes
  36. BIN
      phsource/vdiph2/vowelchart.png
  37. BIN
      phsource/vowel/&
  38. 8
    8
      platforms/big_endian/espeak-phoneme-data.c
  39. 171
    27
      src/compiledata.cpp
  40. 12
    7
      src/compiledict.cpp
  41. 77
    128
      src/dictionary.cpp
  42. 2
    0
      src/espeakedit.cpp
  43. 72
    0
      src/extras.cpp
  44. 1
    0
      src/main.h
  45. 1
    0
      src/menus.cpp
  46. 16
    3
      src/numbers.cpp
  47. 2
    1
      src/phoneme.h
  48. 1
    1
      src/prosodydisplay.cpp
  49. 5
    9
      src/readclause.cpp
  50. 1
    1
      src/synth_mbrola.cpp
  51. 14
    11
      src/synthdata.cpp
  52. 5
    1
      src/synthesize.cpp
  53. 1
    0
      src/synthesize.h
  54. 17
    10
      src/tr_languages.cpp
  55. 114
    2
      src/translate.cpp
  56. 11
    4
      src/translate.h
  57. 1
    0
      src/voices.cpp
  58. 2
    2
      src/vowelchart.cpp

+ 0
- 1
dictsource/ca_list View File

_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

+ 6
- 3
dictsource/da_list View File

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

+ 50
- 16
dictsource/da_rules View File

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

+ 48
- 40
dictsource/de_list View File

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

+ 85
- 19
dictsource/de_rules View File

// * <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

+ 47
- 36
dictsource/dict_phonemes View File

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

+ 7
- 1
dictsource/en_list View File

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

+ 118
- 30
dictsource/en_rules View File

// ?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

+ 9
- 10
dictsource/es_list View File

_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

+ 33
- 14
dictsource/es_rules View File

// ?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

+ 86
- 86
dictsource/fr_list View File



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


+ 182
- 155
dictsource/fr_rules View File

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







+ 23
- 0
dictsource/hi_list View File

फ़ 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



+ 58
- 12
dictsource/hu_list View File

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

+ 44
- 14
dictsource/hu_rules View File

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





+ 0
- 1
dictsource/nl_list View File

_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

+ 0
- 1
dictsource/pap_list View File

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



+ 15
- 2
dictsource/ta_list View File



ஏ 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:





+ 12
- 2
dictsource/ta_rules View File

அப) க (ீர்த்தி 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 ட+

+ 0
- 1
dictsource/tr_list View File

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

+ 2
- 1
dictsource/tr_rules View File

.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

+ 39
- 27
phsource/compile_report View File

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

+ 2
- 1
phsource/intonation View File

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


+ 6
- 1
phsource/ph_afrikaans View File



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




+ 1
- 0
phsource/ph_catalan View File



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)

+ 1
- 8
phsource/ph_croatian View File

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

+ 5
- 1
phsource/ph_english View File



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



+ 123
- 29
phsource/ph_french View File

//==================================================== //====================================================
// 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




+ 79
- 1
phsource/ph_german View File

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

+ 7
- 0
phsource/ph_hindi View File

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





+ 2
- 2
phsource/ph_slovak View File







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

+ 2
- 0
phsource/ph_swedish View File



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

+ 8
- 0
phsource/ph_tamil View File

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

+ 4
- 1
phsource/ph_turkish View File

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

+ 6
- 0
phsource/phonemes View File



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

BIN
phsource/vdiph2/vowelchart.png View File


BIN
phsource/vowel/& View File


+ 8
- 8
platforms/big_endian/espeak-phoneme-data.c View File

{//========================================================== {//==========================================================
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);

+ 171
- 27
src/compiledata.cpp View File

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"

+ 12
- 7
src/compiledict.cpp View File

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

+ 77
- 128
src/dictionary.cpp View File

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

+ 2
- 0
src/espeakedit.cpp View File

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;



+ 72
- 0
src/extras.cpp View File

} }




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



+ 1
- 0
src/main.h View File

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,

+ 1
- 0
src/menus.cpp View File

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

+ 16
- 3
src/numbers.cpp View File

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



+ 2
- 1
src/phoneme.h View File

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;





+ 1
- 1
src/prosodydisplay.cpp View File

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

+ 5
- 9
src/readclause.cpp View File

{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;
} }

+ 1
- 1
src/synth_mbrola.cpp View File

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

+ 14
- 11
src/synthdata.cpp View File

#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]);
} }





+ 5
- 1
src/synthesize.cpp View File

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

+ 1
- 0
src/synthesize.h View File



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





+ 17
- 10
src/tr_languages.cpp View File

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;

+ 114
- 2
src/translate.cpp View File

} // 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;
} }

+ 11
- 4
src/translate.h View File

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

+ 1
- 0
src/voices.cpp View File

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

+ 2
- 2
src/vowelchart.cpp View File

*/ */
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)

Loading…
Cancel
Save