Browse Source

Merge branch 'master' into android

Conflicts:
	platforms/windows/make_espeakedit.iss
master
Reece H. Dunn 12 years ago
parent
commit
0451899ff2
95 changed files with 2773 additions and 5022 deletions
  1. 7
    103
      Makefile.am
  2. 0
    113
      dictsource/ak_rules
  3. 329
    57
      dictsource/an_list
  4. 36
    4
      dictsource/an_rules
  5. 0
    80
      dictsource/az_list
  6. 0
    111
      dictsource/az_rules
  7. 155
    167
      dictsource/bn_list
  8. 203
    140
      dictsource/bn_rules
  9. 0
    409
      dictsource/bo_rules
  10. 0
    174
      dictsource/dv_list
  11. 0
    189
      dictsource/dv_rules
  12. 50
    24
      dictsource/en_list
  13. 11
    3
      dictsource/en_rules
  14. 1
    0
      dictsource/es_list
  15. 2
    1
      dictsource/ga_list
  16. 0
    167
      dictsource/ht_list
  17. 0
    104
      dictsource/ht_rules
  18. 24
    1
      dictsource/hu_rules
  19. 0
    68
      dictsource/kk_list
  20. 0
    130
      dictsource/kk_rules
  21. 12
    10
      dictsource/kl_rules
  22. 1
    1
      dictsource/ko_rules
  23. 784
    0
      dictsource/ms_list
  24. 233
    0
      dictsource/ms_rules
  25. 0
    319
      dictsource/mt_list
  26. 0
    205
      dictsource/mt_rules
  27. 4
    0
      dictsource/nl_list
  28. 8
    2
      dictsource/nl_rules
  29. 0
    206
      dictsource/nso_list
  30. 0
    150
      dictsource/nso_rules
  31. 7
    2
      dictsource/pa_list
  32. 3
    3
      dictsource/pa_rules
  33. 0
    69
      dictsource/prs_list
  34. 0
    235
      dictsource/prs_rules
  35. 36
    20
      dictsource/pt_list
  36. 54
    48
      dictsource/pt_rules
  37. 0
    83
      dictsource/rw_list
  38. 0
    105
      dictsource/rw_rules
  39. 11
    11
      dictsource/si_list
  40. 14
    14
      dictsource/si_rules
  41. 1
    1
      dictsource/sw_rules
  42. 0
    171
      dictsource/te_list
  43. 0
    277
      dictsource/te_rules
  44. 0
    149
      dictsource/tn_list
  45. 0
    147
      dictsource/tn_rules
  46. 0
    83
      dictsource/tt_list
  47. 0
    134
      dictsource/tt_rules
  48. 0
    43
      dictsource/wo_list
  49. 0
    128
      dictsource/wo_rules
  50. 1
    1
      dictsource/zhy_rules
  51. 12
    16
      docs/commands.html
  52. 4
    0
      docs/dictionary.html
  53. 1
    1
      docs/docindex.html
  54. 28
    6
      docs/phontab.html
  55. 27
    1
      docs/voices.html
  56. 17
    0
      espeak-data/voices/asia/ms
  57. 1
    1
      espeak-data/voices/asia/pa
  58. 2
    3
      espeak-data/voices/europe/an
  59. 1
    1
      espeak-data/voices/europe/fr-be
  60. 1
    1
      espeak-data/voices/europe/nl
  61. 3
    0
      espeak-data/voices/test/bn
  62. 1
    1
      espeak-data/voices/test/nci
  63. 56
    20
      mkdictlist
  64. 40
    2
      phsource/mbrola/id1
  65. 76
    19
      phsource/ph_bengali
  66. 2
    5
      phsource/ph_english
  67. 2
    2
      phsource/ph_english_sc
  68. 3
    3
      phsource/ph_german
  69. 51
    1
      phsource/ph_indonesian
  70. 34
    30
      phsource/ph_irish
  71. 12
    0
      phsource/ph_portugal
  72. 23
    18
      phsource/ph_sinhala
  73. 42
    40
      phsource/phonemes
  74. BIN
      phsource/vdiph2/i@_3
  75. BIN
      phsource/vowel/a
  76. BIN
      phsource/vowel/oo_5
  77. BIN
      phsource/vwl_fr/trr
  78. 1
    1
      platforms/big_endian/README
  79. 22
    13
      platforms/windows/make_espeak.iss
  80. 58
    57
      platforms/windows/make_espeakedit.iss
  81. 1
    0
      platforms/windows/windows_cmd/src/speech.h
  82. 1
    1
      src/Makefile.am
  83. 15
    5
      src/compiledata.cpp
  84. 5
    5
      src/compiledict.cpp
  85. 12
    9
      src/dictionary.cpp
  86. 15
    4
      src/espeak.cpp
  87. 42
    30
      src/numbers.cpp
  88. 7
    4
      src/phonemelist.cpp
  89. 2
    2
      src/readclause.cpp
  90. 28
    20
      src/speak.cpp
  91. 18
    2
      src/synthdata.cpp
  92. 28
    9
      src/tr_languages.cpp
  93. 7
    6
      src/translate.cpp
  94. 7
    2
      src/translate.h
  95. 78
    19
      src/voices.cpp

+ 7
- 103
Makefile.am View File

@@ -141,17 +141,15 @@ android: android/res/raw/espeakdata.zip android/res/raw/espeakdata_version

dictionaries: src/espeak \
espeak-data/af_dict \
espeak-data/ak_dict \
espeak-data/am_dict \
espeak-data/an_dict \
espeak-data/az_dict \
espeak-data/bg_dict \
espeak-data/bn_dict \
espeak-data/ca_dict \
espeak-data/cs_dict \
espeak-data/cy_dict \
espeak-data/da_dict \
espeak-data/de_dict \
espeak-data/dv_dict \
espeak-data/el_dict \
espeak-data/en_dict \
espeak-data/eo_dict \
@@ -162,9 +160,7 @@ dictionaries: src/espeak \
espeak-data/fr_dict \
espeak-data/ga_dict \
espeak-data/grc_dict \
espeak-data/hbs_dict \
espeak-data/hi_dict \
espeak-data/ht_dict \
espeak-data/hu_dict \
espeak-data/hy_dict \
espeak-data/id_dict \
@@ -172,7 +168,6 @@ dictionaries: src/espeak \
espeak-data/it_dict \
espeak-data/jbo_dict \
espeak-data/ka_dict \
espeak-data/kk_dict \
espeak-data/kl_dict \
espeak-data/kn_dict \
espeak-data/ko_dict \
@@ -182,20 +177,17 @@ dictionaries: src/espeak \
espeak-data/lv_dict \
espeak-data/mk_dict \
espeak-data/ml_dict \
espeak-data/mt_dict \
espeak-data/ms_dict \
espeak-data/nci_dict \
espeak-data/ne_dict \
espeak-data/nl_dict \
espeak-data/no_dict \
espeak-data/nso_dict \
espeak-data/pa_dict \
espeak-data/pap_dict \
espeak-data/pl_dict \
espeak-data/prs_dict \
espeak-data/pt_dict \
espeak-data/ro_dict \
espeak-data/ru_dict \
espeak-data/rw_dict \
espeak-data/si_dict \
espeak-data/sk_dict \
espeak-data/sl_dict \
@@ -203,13 +195,9 @@ dictionaries: src/espeak \
espeak-data/sv_dict \
espeak-data/sw_dict \
espeak-data/ta_dict \
espeak-data/te_dict \
espeak-data/tn_dict \
espeak-data/tr_dict \
espeak-data/tt_dict \
espeak-data/ur_dict \
espeak-data/vi_dict \
espeak-data/wo_dict \
espeak-data/zh_dict \
espeak-data/zhy_dict

@@ -219,12 +207,6 @@ dictsource/af_extra:
espeak-data/af_dict: src/espeak espeak-data/phontab dictsource/af_list dictsource/af_rules dictsource/af_extra
cd dictsource && ../src/espeak --compile=af && cd ..

ak: espeak-data/ak_dict
dictsource/ak_extra:
touch dictsource/ak_extra
espeak-data/ak_dict: src/espeak espeak-data/phontab dictsource/ak_rules dictsource/ak_extra
cd dictsource && ../src/espeak --compile=ak && cd ..

am: espeak-data/am_dict
dictsource/am_extra:
touch dictsource/am_extra
@@ -237,12 +219,6 @@ dictsource/an_extra:
espeak-data/an_dict: src/espeak espeak-data/phontab dictsource/an_list dictsource/an_rules dictsource/an_extra
cd dictsource && ../src/espeak --compile=an && cd ..

az: espeak-data/az_dict
dictsource/az_extra:
touch dictsource/az_extra
espeak-data/az_dict: src/espeak espeak-data/phontab dictsource/az_list dictsource/az_rules dictsource/az_extra
cd dictsource && ../src/espeak --compile=az && cd ..

bg: espeak-data/bg_dict
dictsource/bg_extra:
touch dictsource/bg_extra
@@ -255,12 +231,6 @@ dictsource/bn_extra:
espeak-data/bn_dict: src/espeak espeak-data/phontab dictsource/bn_list dictsource/bn_rules dictsource/bn_extra
cd dictsource && ../src/espeak --compile=bn && cd ..

bo: espeak-data/bo_dict
dictsource/bo_extra:
touch dictsource/bo_extra
espeak-data/bo_dict: src/espeak espeak-data/phontab dictsource/bo_rules dictsource/bo_extra
cd dictsource && ../src/espeak --compile=bo && cd ..

ca: espeak-data/ca_dict
dictsource/ca_extra:
touch dictsource/ca_extra
@@ -291,12 +261,6 @@ dictsource/de_extra:
espeak-data/de_dict: src/espeak espeak-data/phontab dictsource/de_list dictsource/de_rules dictsource/de_extra
cd dictsource && ../src/espeak --compile=de && cd ..

dv: espeak-data/dv_dict
dictsource/dv_extra:
touch dictsource/dv_extra
espeak-data/dv_dict: src/espeak espeak-data/phontab dictsource/dv_list dictsource/dv_rules dictsource/dv_extra
cd dictsource && ../src/espeak --compile=dv && cd ..

el: espeak-data/el_dict
dictsource/el_extra:
touch dictsource/el_extra
@@ -357,24 +321,12 @@ dictsource/grc_extra:
espeak-data/grc_dict: src/espeak espeak-data/phontab dictsource/grc_list dictsource/grc_rules dictsource/grc_extra
cd dictsource && ../src/espeak --compile=grc && cd ..

hbs: espeak-data/hbs_dict
dictsource/hbs_extra:
touch dictsource/hbs_extra
espeak-data/hbs_dict: src/espeak espeak-data/phontab dictsource/hbs_list dictsource/hbs_rules dictsource/hbs_extra
cd dictsource && ../src/espeak --compile=hbs && cd ..

hi: espeak-data/hi_dict
dictsource/hi_extra:
touch dictsource/hi_extra
espeak-data/hi_dict: src/espeak espeak-data/phontab dictsource/hi_list dictsource/hi_rules dictsource/hi_extra
cd dictsource && ../src/espeak --compile=hi && cd ..

ht: espeak-data/ht_dict
dictsource/ht_extra:
touch dictsource/ht_extra
espeak-data/ht_dict: src/espeak espeak-data/phontab dictsource/ht_list dictsource/ht_rules dictsource/ht_extra
cd dictsource && ../src/espeak --compile=ht && cd ..

hu: espeak-data/hu_dict
dictsource/hu_extra:
touch dictsource/hu_extra
@@ -417,12 +369,6 @@ dictsource/ka_extra:
espeak-data/ka_dict: src/espeak espeak-data/phontab dictsource/ka_list dictsource/ka_rules dictsource/ka_extra
cd dictsource && ../src/espeak --compile=ka && cd ..

kk: espeak-data/kk_dict
dictsource/kk_extra:
touch dictsource/kk_extra
espeak-data/kk_dict: src/espeak espeak-data/phontab dictsource/kk_list dictsource/kk_rules dictsource/kk_extra
cd dictsource && ../src/espeak --compile=kk && cd ..

kl: espeak-data/kl_dict
dictsource/kl_extra:
touch dictsource/kl_extra
@@ -477,11 +423,11 @@ dictsource/ml_extra:
espeak-data/ml_dict: src/espeak espeak-data/phontab dictsource/ml_list dictsource/ml_rules dictsource/ml_extra
cd dictsource && ../src/espeak --compile=ml && cd ..

mt: espeak-data/mt_dict
dictsource/mt_extra:
touch dictsource/mt_extra
espeak-data/mt_dict: src/espeak espeak-data/phontab dictsource/mt_list dictsource/mt_rules dictsource/mt_extra
cd dictsource && ../src/espeak --compile=mt && cd ..
ms: espeak-data/ms_dict
dictsource/ms_extra:
touch dictsource/ms_extra
espeak-data/ms_dict: src/espeak espeak-data/phontab dictsource/ms_list dictsource/ms_rules dictsource/ms_extra
cd dictsource && ../src/espeak --compile=ms && cd ..

nci: espeak-data/nci_dict
dictsource/nci_extra:
@@ -507,12 +453,6 @@ dictsource/no_extra:
espeak-data/no_dict: src/espeak espeak-data/phontab dictsource/no_list dictsource/no_rules dictsource/no_extra
cd dictsource && ../src/espeak --compile=no && cd ..

nso: espeak-data/nso_dict
dictsource/nso_extra:
touch dictsource/nso_extra
espeak-data/nso_dict: src/espeak espeak-data/phontab dictsource/nso_list dictsource/nso_rules dictsource/nso_extra
cd dictsource && ../src/espeak --compile=nso && cd ..

pa: espeak-data/pa_dict
dictsource/pa_extra:
touch dictsource/pa_extra
@@ -531,12 +471,6 @@ dictsource/pl_extra:
espeak-data/pl_dict: src/espeak espeak-data/phontab dictsource/pl_list dictsource/pl_rules dictsource/pl_extra
cd dictsource && ../src/espeak --compile=pl && cd ..

prs: espeak-data/prs_dict
dictsource/prs_extra:
touch dictsource/prs_extra
espeak-data/prs_dict: src/espeak espeak-data/phontab dictsource/prs_list dictsource/prs_rules dictsource/prs_extra
cd dictsource && ../src/espeak --compile=prs && cd ..

pt: espeak-data/pt_dict
dictsource/pt_extra:
touch dictsource/pt_extra
@@ -555,12 +489,6 @@ dictsource/ru_extra:
espeak-data/ru_dict: src/espeak espeak-data/phontab dictsource/ru_list dictsource/ru_rules dictsource/ru_extra
cd dictsource && ../src/espeak --compile=ru && cd ..

rw: espeak-data/rw_dict
dictsource/rw_extra:
touch dictsource/rw_extra
espeak-data/rw_dict: src/espeak espeak-data/phontab dictsource/rw_list dictsource/rw_rules dictsource/rw_extra
cd dictsource && ../src/espeak --compile=rw && cd ..

si: espeak-data/si_dict
dictsource/si_extra:
touch dictsource/si_extra
@@ -603,30 +531,12 @@ dictsource/ta_extra:
espeak-data/ta_dict: src/espeak espeak-data/phontab dictsource/ta_list dictsource/ta_rules dictsource/ta_extra
cd dictsource && ../src/espeak --compile=ta && cd ..

te: espeak-data/te_dict
dictsource/te_extra:
touch dictsource/te_extra
espeak-data/te_dict: src/espeak espeak-data/phontab dictsource/te_list dictsource/te_rules dictsource/te_extra
cd dictsource && ../src/espeak --compile=te && cd ..

tn: espeak-data/tn_dict
dictsource/tn_extra:
touch dictsource/tn_extra
espeak-data/tn_dict: src/espeak espeak-data/phontab dictsource/tn_list dictsource/tn_rules dictsource/tn_extra
cd dictsource && ../src/espeak --compile=tn && cd ..

tr: espeak-data/tr_dict
dictsource/tr_extra:
touch dictsource/tr_extra
espeak-data/tr_dict: src/espeak espeak-data/phontab dictsource/tr_list dictsource/tr_rules dictsource/tr_extra
cd dictsource && ../src/espeak --compile=tr && cd ..

tt: espeak-data/tt_dict
dictsource/tt_extra:
touch dictsource/tt_extra
espeak-data/tt_dict: src/espeak espeak-data/phontab dictsource/tt_list dictsource/tt_rules dictsource/tt_extra
cd dictsource && ../src/espeak --compile=tt && cd ..

ur: espeak-data/ur_dict
dictsource/ur_extra:
touch dictsource/ur_extra
@@ -639,12 +549,6 @@ dictsource/vi_extra:
espeak-data/vi_dict: src/espeak espeak-data/phontab dictsource/vi_list dictsource/vi_rules dictsource/vi_extra
cd dictsource && ../src/espeak --compile=vi && cd ..

wo: espeak-data/wo_dict
dictsource/wo_extra:
touch dictsource/wo_extra
espeak-data/wo_dict: src/espeak espeak-data/phontab dictsource/wo_list dictsource/wo_rules dictsource/wo_extra
cd dictsource && ../src/espeak --compile=wo && cd ..

zh: espeak-data/zh_dict
dictsource/zh_extra:
touch dictsource/zh_extra

+ 0
- 113
dictsource/ak_rules View File

@@ -1,113 +0,0 @@
// This file is UTF8 encoded
// Spelling to phoneme rules for Akan (Ghana)


.group a
a a

.group b
b b

.group c
c k
c (e s
c (i s

.group d
d d
dw dZ
dw (i dZ;

.group e
e e

.group f
f f

.group g
g g
gy dz;

.group h
h h
h (i C
hw (i Cw
hy C

.group i
i i

.group j
j dZ

.group k
k k
ky tS;

.group l
l l

.group m
m m

.group n
n n
n (k N
ng N:
ng (i n^
nj n^
nw N:w
nw (i n^
ny (i n^:
nny (i n^:

.group o
o o

.group p
p p

.group ɛ
ɛ E

.group q
q k
qu kw

.group r
r R

.group s
s s

.group t
t t
t (i tC

.group u
u u

.group v
v v

.group w
w w

.group ɔ
ɔ O

.group x
x ks
_) x z

.group y
y j
K) y (K i

.group z
z z

.group
$ dOlaR



+ 329
- 57
dictsource/an_list View File

@@ -14,7 +14,7 @@ _acu akT'ento aQ'uDo
_ac2 d'Ople||aQ'uDo
_brv br'eu
_ced TeD'il^a
_cir Tirkumfl'ekso
_cir Tirkumfl'eSo
_dia djEr'esi
_dac d'Ople||aQ'uDo
_dot p'unto
@@ -30,6 +30,7 @@ _tld t'il^a
// letter names
b be
c Te
ç Te||TetjEl^a
d de
f Efe
g ge
@@ -59,7 +60,7 @@ ll 'El^e
á 'a||akTEntw'aDa
é 'e||akTEntw'aDa
í 'i||akTEntw'aDa
_ó 'o||akTEntw'aDa
ó 'o||akTEntw'aDa
ú 'u||akTEntw'aDa
ü ,uDjEr'Esi

@@ -82,8 +83,8 @@ _12 d'oTe
_13 tr'eTe
_14 kat'orTe
_15 k'inTe
_20 B'inte
_2X B,int
_20 b'inte
_2X b,int
_3X tr'enta
_4X kwar'anta
_5X Tinkw'anta
@@ -101,7 +102,6 @@ _7C sjEteTj'Entos
_8C gwitoTj'Entos
_9C nowTj'Entos
_0M1 m'il
_1M1 m'il
_0M2 mil^'ons
_1M2 un||mil^'on
_0M4 bil^'ons
@@ -112,41 +112,40 @@ _dpt kon


// ordinal numbers
_#º o
_#ª a
//_ord eno
_#º %'eno
_#ª %'ena
_x#º %o // for 1º 2º 3º
_x#ª %a
º orDin'al||maskul'in
ª orDin'al||femen'in

_1ox prim'Er
_2ox seQ'und
_3ox tErT'Er

_1o un'en
_2o dos'en
_3o tres'en
_4o kwatr'en
_5o Tink'en
_6o seIs'en
_7o sEt'en
_8o gwit'en
_9o nU'en
_11o onT'en
_12o DoT'en
_13o tReT'en
_14o katorT'en
_15o kinT'en
_16o sET'en
_10o DET'en
_20o Bint'en
_30o trent'en
_40o kwarant'en
_50o Tinkwant'en
_60o siSant'en
_70o sEtant'en
_80o gwitant'en
_90o noBant'en

_1Xo DeTi
_2Xo Binti
_4o kwatr
_5o Tink
_7o sEt
_8o gwit
_9o nU
_11o onT
_12o doT
_13o tReT
_14o katorT
_15o kinT
_16o sET
_10o dET
_20o bint
_30o trent
_40o kwarant
_50o Tinkwant
_60o siSant
_70o sEtant
_80o gwitant
_90o noBant

_1Xo deTi
_2Xo binti
_3Xo trentaI
_4Xo kwarantaI
_5Xo TinkwantaI
@@ -154,38 +153,63 @@ _6Xo siSantaI
_7Xo sEtantaI
_8Xo gwitantaI
_9Xo noBantaI
_1Co TEnt'en
_2Co dosTEnt'en
_3Co tresTEnt'en
_4Co kw,atroTEnt'en
_5Co T,inkoTEnt'en
_6Co seIsTEnt'en
_7Co sjEtTEnt'en
_8Co gw,eItoTEnt'en
_9Co nweUTEnt'en

_0M1o mil'en
_1M1 mil'en
_0M2o mil^on'en
_1M2o mil^on'en
_0Co Tent
_1Co TEnt
_2Co dosTEnt
_3Co tresTEnt
_6Co seIsTEnt
_7Co sjEtTEnt
_8Co gw,eItoTEnt
_9Co nweUTEnt

_0M1o mil


// characters
$ d'olar
€ eUros
£ liBras
* asterisko
& ampers'an
@ aRRoBa
# sin^'alDenum'ero
% porTj'En
+ mas
= iQwal
/ baRRa
\ kontraBaRRa
| b'aRRaBertik'al

_- gj'on
! TaRR'ar||eksklamaTj'on
_¡ uBr'ir||eksklamaTj'on
_? TaRR'ar||interroQaTj'on
_¿ uBr'ir||interroQaTj'on
_[ uBr'ir||Qaf'et
_] TaRR'ar||Qaf'et
_( uBr'ir||parent'esi
_) TaRR'ar||parent'esi
_{ uBr'ir||kl'aU
_} TaRR'ar||kl'aU


// unstressed words
o $u
o $atend
a $u
a $atend
os $u
os $atend
as $u
as $atend
o $u+
a $u+
os $u+
as $u+

lo $u
la $u
los $u
las $u
ro $u
ra $u
ros $u
ras $u
ne $u
nes $u

me $u
te $u
se $u
@@ -199,7 +223,251 @@ os $u
les $u
lis $u

con $u
de $u
en $u $brk
mi $u
pa $u
por $u $brk
pues $u
pos $u
ta $u $brk
tu $u
sin $u
su $u
ye $u
el $u
es $u
els $u
ers $u
mis $u
tus $u
sus $u
bell $u
bel $u
bella $u
bells $u
bels $u
bellas $u
bellos $u
que $u
qui $u
quien $u
como $u
quan $u
quando $u
on $u
aon $u
porque $u
per $u
pus $u
ni $u
ibi $u
bi $u
i $u+
ie $u
hu $u
sant $u


//abbreviations
abs $abbrev
ac $abbrev
acb $abbrev
acm $abbrev
acs $abbrev
acup $abbrev
adn $abbrev
adsl $abbrev
aea $abbrev
aeci $abbrev
aek $abbrev
aepd $abbrev
afp $abbrev
ai $abbrev
akp $abbrev
amd $abbrev
anb $abbrev
anp $abbrev
anv $abbrev
ap $abbrev
apec $abbrev
aqu $abbrev
atp $abbrev
ats $abbrev
avl $abbrev
avs $abbrev
avt $abbrev
avv $abbrev
bbva $abbrev
bce $abbrev
bme $abbrev
bop $abbrev
bopv $abbrev
ca $abbrev
cav $abbrev
cbuc $abbrev
ccaa $abbrev
ccoo $abbrev
ccuc $abbrev
cee $abbrev
ceoe $abbrev
cepyme $abbrev
cesid $abbrev
cicr $abbrev
cidui $abbrev
ciemat $abbrev
cis $abbrev
cne $abbrev
cni $abbrev
csic $abbrev
csif $abbrev
dgaia $abbrev
dlsi $abbrev
dni $abbrev
dogc $abbrev
dogv $abbrev
dya $abbrev
eads $abbrev
eaed $abbrev
eb $abbrev
ebb $abbrev
eees $abbrev
eei $abbrev
egb $abbrev
eln $abbrev
emt $abbrev
eoc $abbrev
epsv $abbrev
erc $abbrev
ets $abbrev
euia $abbrev
facua $abbrev
fao $abbrev
fapae $abbrev
fbi $abbrev
fci $abbrev
feb $abbrev
fed $abbrev
fib $abbrev
finul $abbrev
fmi $abbrev
fuoc $abbrev
gatt $abbrev
iaaf $abbrev
ibm $abbrev
icaa $abbrev
icde $abbrev
icv $abbrev
iec $abbrev
iee $abbrev
ieo $abbrev
imc $abbrev
ims $abbrev
in3 $abbrev
inc $abbrev
inem $abbrev
ing $abbrev
inm $abbrev
ip $abbrev
ipc $abbrev
ipca $abbrev
iqua $abbrev
isaf $abbrev
itcat $abbrev
itv $abbrev
iu $abbrev
iun $abbrev
ko $abbrev
lotc $abbrev
mibor $abbrev
mit $abbrev
mnac $abbrev
nba $abbrev
nyse $abbrev
ocde $abbrev
ocu $abbrev
oea $abbrev
oiea $abbrev
olp $abbrev
omc $abbrev
omg $abbrev
oms $abbrev
ong $abbrev
op $abbrev
pce $abbrev
pda $abbrev
pde $abbrev
pdi $abbrev
pec $abbrev
pga $abbrev
pge $abbrev
pgou $abbrev
pib $abbrev
pid $abbrev
pse $abbrev
psoe $abbrev
psuc $abbrev
racc $abbrev
raf $abbrev
rba $abbrev
ree $abbrev
rfec $abbrev
rne $abbrev
rsa $abbrev
rtve $abbrev
samu $abbrev
sdat $abbrev
sec $abbrev
smi $abbrev
sod $abbrev
sos $abbrev
summa $abbrev
tor $abbrev
tpi $abbrev
tse $abbrev
tsja $abbrev
tve $abbrev
ua $abbrev
uab $abbrev
uaw $abbrev
udc $abbrev
udg $abbrev
udl $abbrev
ue $abbrev
uem $abbrev
ugt $abbrev
uhf $abbrev
uib $abbrev
uicn $abbrev
uimp $abbrev
uji $abbrev
um $abbrev
umd $abbrev
ump $abbrev
upc $abbrev
upd $abbrev
upf $abbrev
upn $abbrev
ups $abbrev
upv $abbrev
url $abbrev
urss $abbrev
urv $abbrev
usb $abbrev
usfp $abbrev
uss $abbrev
uv $abbrev
uveg $abbrev
uz $abbrev
vih $abbrev
vpo $abbrev
wap $abbrev
witsa $abbrev


// exceptions
barça b'arsa
holio x'olio
jazz dZ'as

@@ -220,6 +488,7 @@ iphone 'aIfon
(i pod) 'aIpod
ipod 'aIpod
hardware x'ardwer
linux $1
live l'aIB
messenger m'esendZer
mozilla moT'ila
@@ -229,5 +498,8 @@ skype esk'aIp
software s'oftwer
thunderbird Tanderb'ird
twitter tw'iter
unix j'uniks
whatsapp was'app
windows w'indows

//mobile _^_EN

+ 36
- 4
dictsource/an_rules View File

@@ -17,6 +17,8 @@
au aU
au (X 'aU

_) a' %a


.group b
b b
@@ -38,6 +40,10 @@
ch tS



.group ç
ç T

.group d
d d
_) d d // phoneme definition may change it to [D]
@@ -52,6 +58,9 @@

n) d (_ = // silent, but stress on last vowel

_) d' (AP2 d
_) de' d%e


.group e
e e
@@ -66,6 +75,9 @@
u) e E
y) e E

_) ent' (AP4 ent
_) enta' ,ent%a


.group f
f f
@@ -92,11 +104,12 @@

.group h
h // silent

hu (e gw
hu (i gw

.group i
i i
i (u i
i (u_ i
i (A j


@@ -116,6 +129,9 @@
.group m
m m

_) m' (AP2 m
_) mo' m%o


.group n
n n
@@ -141,10 +157,15 @@
u) o O
y) o O


.group p
p p
_) ps s

_) p' (AP2 p
_) pa' p%a
_) pe' p%e


.group q
qu (A kw
@@ -174,6 +195,8 @@
s s
&) s (_S1 s

_) s' (AP2 s


.group t
t t
@@ -186,15 +209,20 @@
ui) t (_ t#
s) t (_ = // silent, but stress on last vowel

_) t' (AP2 t
_) ta' t%a
_) to' t%o


.group u
u u
uix uS
u (u u
u (i u
r) uix uS
r) u (A u
u (A w
_) u (A gw
uix uS



.group v // same as 'b'
@@ -228,9 +256,13 @@


.group
'
á ''a
é ''e
í ''i
ó ''o
ú ''u

__) - (_D m'enos
D_) - (_D m'enos

+ 0
- 80
dictsource/az_list View File

@@ -1,80 +0,0 @@
// This file is UTF8 encoded
// Spelling to phoneme rules for Azerbaijani


// Numbers
_0 s@f'@R
_1 b'iR
_2 ic'i
_3 'ytS
_4 d'WRd
_5 b'eS
_6 alt'@
_7 jedd'i
_8 s&Cc'iz
_9 dogg'uz
_1X 'on
_2X ijiRm'i
_3X ot'uz
_4X g'@Rx
_5X &ll'i
_6X altm'@S
_7X jetm'iS
_8X s&Cs'&n
_9X doxs'an
_0C j'yz
_0M1 m'in
_0M2 milj'on
_0M3 milj'aRd
_dpt _viRg,yl_| // ??


// Function words
// personal pronouns
mən $u+
sən $u+
o $u+
biz $u+
siz $u+
onlar $u+

// possessive pronouns
mənim $u+
sənin $u+
onun $u+
bizim $u+
sizin $u+
onların $u+



// Character names
b be
c dZe
ç tSe
d de
f fe
g Je
ğ Qe
h he
x xe
j Ze
k ka
q ge
l el
m em
n en
_o o
p pe
r eR
s se
ş Se
t te
v ve
w dubElv'E
y je
z ze




+ 0
- 111
dictsource/az_rules View File

@@ -1,111 +0,0 @@
// This file is UTF8 encoded
// Spelling to phoneme rules for Azerbaijani

// Stress rule: Right-most vowel, but stop before the vowel which is
// marked as unstressed [%].


.group a
a a

.group b
b b

.group c
c dZ

.group ç
ç tS

.group d
d d

.group e
e e

.group ə
ə &

.group f
f f

.group g
g J

.group ğ
ğ Q

.group h
h h

.group x
x x

.group ı
ı @

.group i
i i

.group j
j Z

.group k
k c
k (K C

.group q
q g

.group l
l l

.group m
m m

.group n
n n

.group o
o o

.group ö
ö W

.group p
p p

.group r
r R
A) r (A *

.group s
s s

.group ş
ş S

.group t
t t

.group u
u u

.group ü
ü y

.group v
v v

.group w
w w

.group y
y j

.group z
z z

.group
ä &

+ 155
- 167
dictsource/bn_list View File

@@ -3,179 +3,166 @@

// Numbers
devanagari numbers are changed to latin characters before translation
_0 S'u:n.nV'o:
_1 a'k
_2 d:UI
_3 t'i:n
_4 c'a:@'r
_5 ,pa~c
_6 c#'O:j
_7 S'a:t
_8 'a:t.#
_9 n'O:j

_10 d'O:S
_11 a'g'a:rO:
_12 b'a:rO:
_13 t'a:rO:
_14 c#:O:d'dO:
_15 p'O:n'e:rO:
_16 S'o:lO:
_17 SO:t'e:rO:
_18 a:t#'e:rO:
_19 U'n'IS

_20 kU:'ri
_21 e:kU'S
_22 b'a:IS
_23 t'e:IS
_24 c'O:b'bIS
_25 pa~O:c'IS
_26 c#'a:'bb'IS
_27 Sa:ta:S
_28 at#'a:S
_29 Unt'rIs
_30 t'i:rIS

_31 e:k't:rIS
_32 bat:'rIS
_33 tE't'rIS
_34 ca~o:u:t'rIS
_35 pa~O:it'rIS
_36 c#a'trIS
_37 Sa~it'rIS
_38 at'tr'IS
_39 U'nO:cO:l'IS

_40 co:l'lIS
_41 e:k'co:l'lIS
_42 bi'al'lIS
_43 te:ta:l'lIS
_44 cu:a:l'lIS
_45 paI'nta:l'lIS
_46 c#e:co:l'lIS
_47 Sat'co:l'lIs
_48 at'co:l'lIS
_49 Uno:pan'ca:S

_50 p@n'ca:s
_51 e:ka:n'no:
_52 ba:h@n'no:
_53 t'Ip'pan'no:
_54 cu:wan'no:
_55 po:n'ca:n'no:
_56 c#h@p:'an'no:
_57 Sa:ta:n'no:
_58 at#'a:n'no:
_59 Uno:s'at#

_60 s'a:t.#
_61 e:k'so:t'tI
_62 ba:so:t'tI
_63 te:so:t'tI
_64 ca~o:u:so:t'tI
_65 pa~I'so:t'tI
_66 c#e:so:t'tI
_67 Sat'so:t'tI
_68 atso:t'ti
_69 ,Uno:Sat'to:r

_70 So:t'to:r
_71 e:kat'to:r
_72 ba:hat'to:r
_73 tIat'to:r
_74 cu:at'to:r
_75 pa~c#at'to:r
_76 c#I'at:to:r
_77 Sa:t@'t:o:r
_78 atat'to:r
_79 ,Uno:a:Si:

_80 a:Si
_81 e:ka:Si:
_82 bI'ra:Si:
_83 tIra:Si:
_84 cu:ra:Si:
_85 pa~ca:Si:
_86 c#Ia:Si:
_87 Sa:ta:Si:
_88 O:sto:a:Si:
_89 Uno:no:b'bo:I

_90 no:b:bo:I
_91 e:ka:no:b'bo:I
_92 bIra:no:b'bo:I
_93 tIr'a:no:b'bo:I
_94 cu:r'a:no:b'bo:I
_95 pa~ca:no:b'bo:I
_96 c#Ia:no:b'bo:I
_97 S@ta:no:b'bo:I
_98 ata:no:b'bo:I
_99 nIra:no:b'bo:I

_0C SO:
_0M1 h@z'a:r
_0M2 l'a:k#
_0M3 ko:tI
_0M4 o:r'bu:d
_dpt d@so:mIk
_0 S'unjO
_1 '&k
_2 duj
_3 t'in
_4 tS'ar
_5 p'a~tS
_6 tS#'Oj
_7 S'at
_8 'at.#
_9 n'Oj

_10 d'OS
_11 '&garo
_12 b'arO
_13 t'erO
_14 tS'owddO
_15 p'OnerO
_16 S'olO
_17 S'OterO
_18 'at.#arO
_19 'uniS

_20 k'uri // or b'iS ??
_21 'ekuS
_22 b'ajS
_23 t'ejS
_24 tS'ObbiS
_25 p'O~tSiS
_26 tSh'ObbiS
_27 S'ataS
_28 'at.#aS
_29 'untriS

_30 t'iriS
_31 'ektriS
_32 b'OtriS
_33 t'etriS
_34 tSowtriS
_35 pO~jtriS
_36 tS#'OtriS
_37 S'a~itriS
_38 'at.riS
_39 'unOtSOlliS

_40 tS'OlliS
_41 'ektSOlliS
_42 b'ialliS
_43 t'etalliS
_44 tS'oalliS
_45 p'O~jtalliS
_46 tS'etSOlliS
_47 S'atSOllis
_48 'atSOlliS
_49 'unOpO~tSaS

// numbers above 50 need to be corrected
_50 p'O~tSaS
_5X p'O~tSaS
_59 'unOsat.

_60 s'at.
_6X s'at.
_69 'unOS'OttOr

_70 S'OttOr
_7X S'OttOr
_79 'unOaSi

_80 'aSi
_8X 'aSi
_89 'unOnObbOj

_90 n'ObbOj
_9X n'ObbOj

_0C S'o
_0M1 h'ajar
_0M2 l'ak#
_0M3 k'ot.i
_0M4 'Orbud
_dpt dOsomik

// Single consonants
ক k@
খ k#@
গ g@
ঘ g#@
ঙ N'g
চ c@
ছ c#@
জ J@
ঝ J#@
ঞ n^@
ট t.@
ঠ t.#@
ড d.@
ঢ d.#@
ণ n.@ // retroflex n.@
ত t@
থ t#@
দ d@
ধ d#@
ন n@
প p@
ফ p#@
ব b@
ভ b#@
ম m@
য় O:j
য J@
র r@
ড় r-@
ঢ় hr@
ল l@
শ S@
ষ s.@ // retroflex [S]
স s@
হ H@
ৎ t@

// Single consonants
ক kO
খ k#O
গ gO
ঘ g#O
ঙ 'uNO
চ tSO
ছ tShO // [h] to distinguish from [tS]
জ JO
ঝ J#O
ঞ 'iNO
ট t.O
ঠ t.#O
ড d.O
ঢ d.#O
ণ m'odd#ennO
ত tO
থ t#O
দ dO
ধ d#O
ন d'ontennO
প pO
ফ fO // or [p#O] ?
ব bO
ভ b#O
ম mO
য় Oj
য ontostedZ'O
র rO
ড় r.O
ড় r.O // (d. + nukta)
ঢ় hr.O
ঢ় hr.O // (d#. + nukta)
ল lO
শ taleboS:O
ষ mud#en:oS:O
স d'onteS:O
হ hO
ৎ kh'Ond.otO

// full vowels
অ O
আ a
ই hrOS:o'i
ঈ dirg#o'i
উ hrOS:o'u
ঊ dirg#o'u
ঋ ri
এ e
ঐ oj
ও o
ঔ ow

// combining vowel signs
ा #X2a:
ि #X1I
ी #X2i:
ূ #X1U
ू #X2u:
ृ #X1rI
ে #X1e:
ৈ #X2E:
ো #X1o:
ৌ #X1O:
ॐ #X1o~m
া 'akar
ি r'oS:ikar
ী d'irg#ikar
ূ r'oS:ukar
ু d'irg#ukar
ৃ r'ikar
ে 'ekar
ৈ 'ojkar
ো 'okar
ৌ 'owkar

// signs
্ h'OSonto
ং 'OnuSSOr
ঃ b'iSOrgo
ঁ tS'Ondrobindu
় b'indu


// Punctuation
। dVn.d.V


// Pronouns
আমি $u // main: I
আমায় $u
@@ -198,7 +185,7 @@ _dpt d@so:mIk
তোর $u

এ $u // he/she/it
একে $u
আপনি $u
এটার $u
এর $u

@@ -264,6 +251,9 @@ _dpt d@so:mIk

// Verbs

হয় $u


ছিল $u // chilo: past aux
ছিলেন $u // chilen

@@ -274,5 +264,3 @@ _dpt d@so:mIk


// Exceptions
ক্রিকেট krIk'Et
সাইবার s'aIb@r

+ 203
- 140
dictsource/bn_rules View File

@@ -7,9 +7,6 @@
// C consonants
// Y vowel letters and vowel signs

// conditional rules
// ?2 use diphthong for "ai"
// ?3 use diphthong for "au"


.replace
@@ -29,289 +26,355 @@


.group অ
অ a
অ V
অঁ O~

.group আ
আ a:
আ a
আঁ a~

.group ই
I
i
ইঁ i~
ইং I'ng

.group ঈ
ঈ i:
ঈ (_ i
ঈ i
ঈঁ i~


.group উ
উ U
উ u
উঁ u~

.group ঊ
ঊ u:
ঊং u~ // + anusvara
ঊঁ u~ // + candrabinbu
ঊ u
ঊঁ u~

.group ঋ
ঋ rI
ঋ ri
ঋঁ ri~

.group এঁ
এঁ E // candra e
.group ঌ
ঌ l-
.group এ
এ &
এঁ &~

.group ঐ
ঐ e
ঐ oj
ঐঁ o~j

.group এ
এ e:
এ e
এঁ e~

.group ঐ
ঐ E: // ?? [aI] [E:] [&:]
ঐং E~
ঐঁ E~
?2 ঐ aI // ?? [aI] [E:] [&:]

.group ও
ও o
ওঁ o~

.group ওঁ
ওঁ O // candra O

.group ঔ
ঔ o
ঔ ow
ঔঁ o~w

.group ও
.group ও //??
ও o:
ওং o~ // +anusvara
ওঁ o~ // +candrabindu

.group ঔ
ঔ O: // ?? [aU] [O:]
ঔঁ O~ // +candrabindu


// Vowel Signs

.group া
া a:
া a
াঁ a~
.group ি
ি I
ি i
িঁ i~
.group ী
ী i:
(_ i
i
ঁ i~

.group ূ
ূ U
ূ u
ূঁ u~

.group ু
ু u:
ু u
ুঁ u~
.group ৃ
ৃ rI
ৃ ri
ৃঁ ri~

.group ে
ে e:
ে e
েঁ e~
েউ ew


.group ৈ
ৈ E: // ?? [aI] [E:] [&:]
ৈ oj
ৈঁ o~j
.group ো
ো o:
ো o
োঁ o~
.group ৌ
ৌ O: // [O:] or [aU] ??
ৌ ow
ৌঁ o~w
.group ॐ
ॐ o~m

// Consonants

.group ক
ক k@
ক kV
ক (B k
ক্য (्য kja:
ক্ষ k#'@

.group খ
খ k#V
খ (B k#@
খ (B k#
.group গ
গ gV
গ (B g@
ঈ)গ (ল g@
গ (B g

.group ঘ
ঘ g#V
ঘ (B g#
ঘ (B g#

.group ঙ
ঙ N'g
ঙ NV
ঙ্ (B N
গা)ঙ (চি Ng@

.group চ
cV
চ (B c
্য) চ্য c'j@
tSV
চ (B tS

.group ছ
c#V
ছ (B c#@
tS#V
ছ (B tS#

.group জ
জ J@
জ (B J@
্) জ zV
জ (B J@
জ JV
জ (B J
জ্ব JV
জ্ব (B J
জ্ঞ ggo~
জ্ঞ (B gg


.group ঝ
ঝ J#@
ঝ (B J#@
ঝ J#V
ঝ (B J#

.group ঞ
ঞ n^V
ঞ্ (B n^
ঞ nV
ঞ্ (B n

.group ট
ট t.V
ট (B t.V
ট (्য় t.j@
ট (B t.

.group ঠ
ঠ t.#V
ঠ (B t.#

.group ড
ড d.V
ড (B d.

ড় r.V // nukta
ড় (B r.

.group ঢ
ঢ d.#V
ঢ (B d.#
ঢ d.#V
ঢ (B d.#

ঢ় hr.V
ঢ় (B hr.
.group ণ
ণ n.V // (temporary) same as dental [n]
ণ (B n.
ণ্ম n.m
ণ nV // should be [n.] if adjacent to t. or d. ?
ণ (B n


.group ত
ত t@
ত (B t@
ত tV
ত (B t

.group থ
থ t#@
থ t#V
থ (B t#
ক) থ (ন t#@

.group দ
দ d@
দ dV
দ (B d
ব) দ (ল d@

.group ধ
ধ d#@
ধ d#V
ধ (B d#
সা) ধ (ন d#@

.group ন
ন n@
ন (B n@
্) ন (্ n@
র্) ন (_ r.n // r +virama অর্ণব


.group ন
ন n: // should this be a long [n] ?
ন nV
ন (B n

.group প
প p@
প pV
প (B p
প্য (्য p:

.group ফ
ফ p#@
ফ (B p#@
ফ p#@
ফ fV // or [p#] ?
ফ (B f

.group ব
ব b@
ব (B b@
ব bV
ব (B b

.group ভ
ভ b#@
ভ (B b#@
ভ b#V
ভ (B b#

.group ম
ম mV
्) ম (_ mV
র্) ম (_ r.m@ // r +virama
ন্) ম (_ n.m // n +virama
ম (B m

.group য়
য় jV
য় (B jV
য় jV
য় (B j

.group য
য J@
য (B J@
्) য (_ ja
য dZV
য (B dZ
য় jV // nukta
য় (B j

.group র
র rV
র (B r
्) র (_ r@


.group ল
l
ল (B l@
ক) ল (ম l@
ল lV
ল (B l


.group শ
শ S@
শ (B S@
শ SV // or [s] ?
শ (B S
শ (্ল s

.group ষ
ষ s
ষ (B s //??
SV
ষ (B S

.group স
স s@
স (B s.

স SV // or [s] ??
স (B S
স (্থ s
স (্ত s
_) স্ব SV // shb
_) স্ব (B S

.group হ
হ H@
হ (B H@
হ্ব v@
.group হ্ব
B) হ্ব (B v@
হ hV
হ (B h

.group হ্ব
হ্ব vV
হ্ব (B v

.group ৎ
ৎ (B t@t
t


.group ড় // can be ড plus nukta
ড় r.V
ড় (B r.

// nukta, modifies a consonant
.group ঢ় // can be ঢ plus nukta
ঢ় hr.V
ঢ় (B hr.

.group ্যা // ja'falaa
্যা a

.group
ँ n // candrabindu
.group ঁ
ঁ O~ // candrabindu, nasalize the previous vowel

.group ং
aN'g // anusvara
N // anusvara/onushshor

.group ः
ः H // visarga
.group ঃ // visarga/bishorgo
ঃ // doubles the following consonant
ঃ (_ H

.group ্ // virama
.group ্ // virama/hoshonto

.group ়
় // nukta, modifies a consonant



.group
// obsolete letters
ঋ r-
ৠ r-
ঌ l-
ৡ l-
ৃ r-
ৄ r-
ৢ l-
ৣ l-


+ 0
- 409
dictsource/bo_rules View File

@@ -1,409 +0,0 @@
// This file is UTF8 encoded
// Spelling-to-phoneme rules for Tibetan

.replace
༠ 0
༡ 1
༢ 2
༣ 3
༤ 4
༥ 5
༦ 6
༧ 7
༨ 8
༩ 9



.group ཀ
ཀ ka
ཀ (B k
@) ཀ (_ k

.group ཁ
ཁ k#a
ཁ (B k#
@) ཁ (_ k#

.group ག
ག ga
ག (B g
@) ག (_ g

.group གྷ
གྷ g#a
གྷ (B g#
@) གྷ (_ g#

.group ང
ང Na
ང (B N
@) ང (_ N

.group ཅ
ཅ ca
ཅ (B c
@) ཅ (_ c

.group ཆ
ཆ c#a
ཆ (B c#
@) ཆ (_ c#

.group ཇ
ཇ Ja
ཇ (B J
@) ཇ (_ J

.group ཉ
ཉ n^a
ཉ (B n^
@) ཉ (_ n^

.group ཊ
ཊ t.a
ཊ (B t.
@) ཊ (_ t.

.group ཋ
ཋ t.#a
ཋ (B t.#
@) ཋ (_ t.#

.group ཌ
ཌ d.a
ཌ (B d.
@) ཌ (_ d.

.group ཌྷ
ཌྷ d.#a
ཌྷ (B d.#
@) ཌྷ (_ d.#

.group ཎ
ཎ n.a
ཎ (B n.
@) ཎ (_ n.

.group ཏ
ཏ ta
ཏ (B t
@) ཏ (_ t

.group ཐ
ཐ t#a
ཐ (B t#
@) ཐ (_ t#

.group ད
ད da
ད (B d
@) ད (_ d

.group དྷ
དྷ d#a
དྷ (B d#
@) དྷ (_ d#

.group ན
ན na
ན (B n
@) ན (_ n

.group པ
པ pa
པ (B p
@) པ (_ p

.group ཕ
ཕ p#a
ཕ (B p#
@) ཕ (_ p#

.group བ
བ ba
བ (B b
@) བ (_ b

.group བྷ
བྷ b#a
བྷ (B b#
@) བྷ (_ b#

.group མ
མ ma
མ (B m
@) མ (_ m

.group ཙ
ཙ tsa
ཙ (B ts
@) ཙ (_ ts

.group ཚ
ཚ ts#a
ཚ (B ts#
@) ཚ (_ ts#

.group ཛ
ཛ dza
ཛ (B dz
@) ཛ (_ dz

.group ཛྷ
ཛྷ dz#a
ཛྷ (B dz#
@) ཛྷ (_ dz#

.group ཝ
ཝ wa
ཝ (B w
@) ཝ (_ w

.group ཞ
ཞ Za
ཞ (B Z
@) ཞ (_ Z

.group ཟ
ཟ za
ཟ (B z
@) ཟ (_ z

.group འ
འ ?a
འ (B ?
@) འ (_ ?

.group ཡ
ཡ ja
ཡ (B j
@) ཡ (_ j

.group ར
ར ra
ར (B r
@) ར (_ r

.group ལ
ལ la
ལ (B l
@) ལ (_ l

.group ཤ
ཤ Sa
ཤ (B S
@) ཤ (_ S

.group ཥ
ཥ s.a
ཥ (B s.
@) ཥ (_ s.

.group ས
ས sa
ས (B s
@) ས (_ s

.group ཧ
ཧ Ha
ཧ (B H
@) ཧ (_ H

.group ཨ
ཨ ?a
ཨ (B ?
@) ཨ (_ ?

.group ཀྵ
ཀྵ ks.a
ཀྵ (B ks.
@) ཀྵ (_ ks.


// vowel signs
// Give the utf8 codes in octal, because these characters don't
// display correctly without a letter to attach to.
.group 0xe0bd
0xe0bdb1 a:
0xe0bdb2 i
0xe0bdb3 i:
0xe0bdb4 u
0xe0bdb5 u:
0xe0bdb6 r-
0xe0bdb7 r-:
0xe0bdb8 l-
0xe0bdb9 l-:
0xe0bdba e
0xe0bdbb e:
0xe0bdbc o
0xe0bdbd o:

// subjoined letters
.group 0xe0be // characters which start with UTF-8 bytes: [e0 be]
ྐ ka
ྐ (B k
@) ྐ (_ k

ྑ k#a
ྑ (B k#
@) ྑ (_ k#

ྒ ga
ྒ (B g
@) ྒ (_ g

ྒྷ g#a
@) ྒྷ (_ g#

ྔ Na
ྔ (B N
@) ྔ (_ N

ྕ ca
ྕ (B c
@) ྕ (_ c

ྖ c#a
ྖ (B c#
@) ྖ (_ c#

ྗ Ja
ྗ (B J
@) ྗ (_ J

ྙ n^a
ྙ (B n^
@) ྙ (_ n^

ྚ t.a
ྚ (B t.
@) ྚ (_ t.

ྛ t.#a
ྛ (B t.#
@) ྛ (_ t.#

ྜ d.a
ྜ (B d.
@) ྜ (_ d.

ྜྷ d.#a
ྜྷ (B d.#
@) ྜྷ (_ d.#

ྞ n.a
ྞ (B n.
@) ྞ (_ n.

ྟ ta
ྟ (B t
@) ྟ (_ t

ྠ t#a
ྠ (B t#
@) ྠ (_ t#

ྡ da
ྡ (B d
@) ྡ (_ d

ྡྷ d#a
ྡྷ (B d#
@) ྡྷ (_ d#

ྣ na
ྣ (B n
@) ྣ (_ n

ྤ pa
ྤ (B p
@) ྤ (_ p

ྥ p#a
ྥ (B p#
@) ྥ (_ p#

ྦ ba
ྦ (B b
@) ྦ (_ b

ྦྷ b#a
ྦྷ (B b#
@) ྦྷ (_ b#

ྨ ma
ྨ (B m
@) ྨ (_ m

ྩ tsa
ྩ (B ts
@) ྩ (_ ts

ྪ ts#a
ྪ (B ts#
@) ྪ (_ ts#

ྫ dza
ྫ (B dz
@) ྫ (_ dz

ྫྷ dz#a
ྫྷ (B dz#
@) ྫྷ (_ dz#

ྭ wa
ྭ (B w
@) ྭ (_ w

ྮ Za
ྮ (B Z
@) ྮ (_ Z

ྯ za
ྯ (B z
@) ྯ (_ z

ྰ ?a
ྰ (B ?
@) ྰ (_ ?

ྱ ja
ྱ (B j
@) ྱ (_ j

ྲ ra
ྲ (B r
@) ྲ (_ r

ླ la
ླ (B l
@) ླ (_ l

ྴ Sa
ྴ (B S
@) ྴ (_ S

ྵ s.a
ྵ (B s.
@) ྵ (_ s.

ྶ sa
ྶ (B s
@) ྶ (_ s

ྷ Ha
ྷ (B H
@) ྷ (_ H

ྸ ?a
ྸ (B ?
@) ྸ (_ ?

ྐྵ ks.a
ྐྵ (B ks.
@) ྐྵ (_ ks.


.group
$ dolar

+ 0
- 174
dictsource/dv_list View File

@@ -1,174 +0,0 @@

// This file is UTF8 encoded
// Spelling-to-phoneme rules for Divehi (Maldives)

// Numbers

_0 s'umeI
_1 e'keI
_2 d'eI
_3 tineI
_4 ha't#a'reI
_5 fa'heI
_6 ha'eI
_7 ha't#eI
_8 a'SeI
_9 n'uaeI
_10 d'ihaeI

_11 e'gj'a:r@1 //egaara
_12 b'ar@2 //baara
_13 t'E:r@2 //theyra
_14 c#'O:d@2 //saada (d like in _2)
_15 p'Vndr@2 //fanara
_16 s'o:l@2 //soalha lh like in ޅ
_17 s'Vt:r@2 //sathaara
_18 Vt.#:'a:r@2 //ashaara
_19 Unn'Is //navaara

_20 b'i:s //vihi (we he)
_21 Ik:'Is //eka wees
_22 b'a:Is //baa wees
_23 t'e:Is //tei wees
_24 c'O:bIs sav wees
_25 p@c:'Is //fansavees
_26 c#@bb'i:rs // sabbees
_27 s@t:'a:Is // sathawees
_28 at#:'a:Is // asha wees
_29 Unt'Is // ona thirees
_30 t'i:s // thirees

_31 Ik@t:'Is // thirees eke --from hence it starts with the 10th digit and follows with the single digit.
_32 bat:'Is // eg. 32 = thirees (30) eke (1)
_33 tE~t'Is // E~ ?
_34 cO~t'Is
_35 pE~t'Is
_36 c#aT'tIs
_37 sE~t'Is
_38 art'Is
_39 Unta:l'Is

_40 ca:l'Is //saalhees
_41 Ikta:l'Is
_42 baIa:l'Is
_43 tE~ta:l'Is
_44 cO:wa:l'Is
_45 paI'nta:l'Is
_46 c#hIja:l'Is
_47 sE~ta:l'Is
_48 arta:l'Is
_49 'Un^ca:s

_50 p@c'a:s //fansaas
_51 Ikj'a:wVn
_52 b'a:wVn
_53 t'IrpVn
_54 c'Ou:wVn
_55 p'ac#pVn
_56 c#h@p:'Vn
_57 sVt:'a:w@n
_58 at#:'a:w@n
_59 Uns'Vt#

_60 s'a:t.# //fas dho (ދ) lhas
_61 'Iks@t.#
_62 b'a:s@t.#
_63 t'Irs@t.#
_64 c'O~s@t.#
_65 paIns@t.#
_66 c#'Ija:s@t.#
_67 s'Vrs@t.#
_68 ars@t.#
_69 Un@h,at:'Vr:

_70 sat:'Vr: // hai dhiha
_71 Ik#at:'Vr:
_72 b@hat:'Vr:
_73 tIhat:'Vr:
_74 cO:hat:'Vr:
_75 pac#,at:'Vr:
_76 c#Ihat:'Vr:
_77 s@t@hat:'Vr:
_78 at#hat:'Vr:
_79 ,Un^Ia:s'i:

_80 ,Vss'i: // addiha
_81 Ikja:s'i:
_82 baIa:s'i:
_83 tIra:s'i:
_84 cO:ra:s'i:
_85 pI'ca:s'i:
_86 c#Ija:s'i:
_87 sVt:a:s'i:
_88 at#:a:s'i:
_89 nVwa:s'i:

_90 nVb:'e: nuvadhiha
_91 Ikj'a:n@we:
_92 b'a:n@we:
_93 tIr'a:n@we:
_94 cO:r'a:m@we:
_95 p@c'a:n@we:
_96 c#Ij'a:n@we:
_97 s@t:'a:n@we:
_98 at#:'a:n@we:
_99 nIn^j'a:n@we:

_0C sa't#eIka //satheyka (th like them)
_0M1 h@z'a:r (haas)
_0M2 l'a:kh // lakka
_0M3 cr'ore //curoadu

// letter names
ހ h'a:
ށ s.'avijani
ނ n'u:nu
ރ R'a:
ބ b'a:
ޅ l.'av,ijani
ކ k'a:fu
އ 'alifu
ވ v'a:vu
މ m'i:mu
ފ f'a:fu
ދ d'a:lu
ތ t'a:
ލ l'a:mu
ގ g'a:fu
ޏ n^'avijani
ސ s'i:nu
ޑ d.'avijani
ޒ z'avijani
ޓ t.'avijani
ޔ j'a:
ޕ p'avijani
ޖ dZ'avijani
ޗ tS'avijani
ޘ T'a:
ޙ hh'a:
ޚ x'a:
ޛ D'a:lu
ޜ z'a:
ޝ S'i:nu
ޞ s'a:du
ޟ d'a:du
ޠ t'o
ޡ z'o
ޢ a'inu
ޣ Qa'inu
ޤ q'a:fu
ޥ w'a:vu
ޱ n'a||vijani
ަ 'aba||f,ili
ާ 'a:ba:||f,ili
ި 'ibi||f,ili
ީ 'i:bi:||f,ili
ު 'ubu||f,ili
ޫ 'u:bu:||f,ili
ެ 'ebe||f,ili
ޭ 'e:be:||f,ili
ޮ 'obo||f,ili
ޯ 'o:bo:||f,ili
ް s'ukun



+ 0
- 189
dictsource/dv_rules View File

@@ -1,189 +0,0 @@

// This file is UTF8 encoded
// Spelling-to-phoneme rules for Divehi (Maldives)

.group ހ
ހ h

.group ށ
ށ s.

.group ނ
ނ n
ން (ނ nn
ން (މ mm
ން (ޏ n^n^

.group ރ
ރ R

.group ބ
ބ b

.group ޅ
ޅ l.

.group ކ
ކ k

.group އ
އ // alifu
އް (_ eh
އް (ހ h
އް (ށ h
އް (ހ s.
އް (ނ n
އް (ރ R
އް (ބ b
އް (ޅ l.
އް (ކ k
އް (ކ v
އް (މ m
އް (ދ d
އް (ތ t
އް (ލ l
އް (ގ g
އް (ޏ N
އް (ސ s
އް (ޑ d.
އް (ޒ z
އް (ޓ t.
އް (ޔ j
އް (ޕ p
އް (ޖ dZ
އް (ޗ tS
އް (ޜ Z

.group ވ
ވ v

.group މ
މ m

.group ފ
ފ f

.group ދ
ދ d

.group ތ
ތ t

.group ލ
ލ l

.group ގ
ގ g

.group ޏ
ޏ n^

.group ސ
ސ s

.group ޑ
ޑ d.

.group ޒ
ޒ z

.group ޓ
ޓ t.

.group ޔ
ޔ j

.group ޕ
ޕ p

.group ޖ
ޖ dZ

.group ޗ
ޗ tS

.group ޘ
ޘ T

.group ޙ
ޙ h

.group ޚ
ޚ x

.group ޛ
ޛ D



.group ޜ
ޜ Z

.group ޝ
ޝ S

.group ޞ
ޞ s

.group ޟ
ޟ d

.group ޠ
ޠ t

.group ޡ
ޡ z

.group ޢ
ޢ ?

.group ޣ
ޣ Q

.group ޤ
ޤ q

.group ޥ
ޥ w


.group ަ
ަ a

.group ާ
ާ a:

.group ި
ި i

.group ީ
ީ i:

.group ު
ު u

.group ޫ
ޫ u:

.group ެ
ެ e

.group ޭ
ޭ e:

.group ޮ
ޮ o

.group ޯ
ޯ o:

.group ް
ް // sukun

.group ޱ
ޱ n.

.group
$ dolaR



+ 50
- 24
dictsource/en_list View File

@@ -61,6 +61,7 @@ a eI $atend
// use the $accent attribute here to force the use of the
// accent table when speaking the name of the character.
à $accent $atend // this can be a word
á $accent $atend
ç $accent
é $accent
ê $accent
@@ -149,12 +150,14 @@ _¨ daIa#r'i:sIs
_ª fEmI2nIn'O@dI2n@L
_« lEft'gIl@mEt
_­ makr0n
² tu:
³ Tri:
_¹ su:p@skrIptw'0n
_² su:p@skrIptt'u:
_³ su:p@skrIptT'ri:
_´ a#kju:taksEnt
_· mId@Ld0t
_¸ sEd'Il@
_¹ su:p@skrIptw'0n
//_º maskjUlIn'O@dI2n@L
_º dI2gr'i:z
_» raIt'gIl@mEt
@@ -510,6 +513,7 @@ agm $abbrev
ai $abbrev
amd $abbrev
aol $abbrev
aph $abbrev
api $abbrev
apr apr@
asap $abbrev
@@ -941,7 +945,7 @@ blancmange bl@m0nZ
blase blA:z'eI
blasé blA:z'eI
bleh blEh
blockade $2
blockade bl0k'eId
blouse blaUz
bluest blu:@st
blurry bl3:rI
@@ -1051,6 +1055,7 @@ caterer keIt3r3
cathedral $alt3
catholic kaTlIk
carotid $alt3
cartel kA@t'El
cavalier $3
caveat kavIat
?3 caveat kavIA:t
@@ -1156,6 +1161,7 @@ colonel k3:n@L
colosseum k0l@s'i@m
comanche k@mantSi
combat k0mbat // combating
?3 combative k@mbatIv
combo k0mboU
comely kVmlI // comeliness
comer kVm3
@@ -1275,6 +1281,7 @@ dais deIIs
dandelion dandI2laI@n
ddu DI $only // Welsh
de d@ $only
(de jure) deIdZ'U@ri
debacle deIb'A:k@L
debrief di:br'i:f
debris dEbri:
@@ -1425,6 +1432,8 @@ ember Emb3
emphasis Emf@sIs $only
empire $1
emu i:mju:
(en masse) 0n||m'as
(en route) 0n||r'u:t
enroute 0nr'u:t
ensemble 0ns'0mb@L
entendre 0nt'0ndr@-
@@ -1625,6 +1634,7 @@ goodday $2
goodnight $2
gorilla g3rIl@
gospel g0sp@L
gossamer g0s@m3
goto goUtu:
gourmand gU@mA:nd
gourmet gU@meI
@@ -1669,6 +1679,7 @@ hello h@loU
henceforth hEnsfo@T
?3 herb 3:b
hercules h3:kjUli:z
?3 hereford h3:f3d
heretical hI2rEtI2k@L
hereto hi@3'tu:
heretofore hi@3t2Ufo@
@@ -1692,6 +1703,7 @@ holme hoUm
holster hoUlst3
homeowner hoUmoUn3
homepage hoUmpeIdZ
homily h0m@li
hominem h0mInEm
?3 hominem h0m@n@m
hooah h'u:'A:
@@ -1780,6 +1792,7 @@ interim $1
intermediate Int3m'i:di@t
intern Int3:n $noun
interrogatory $3
intestine I2ntEstI#n
inventory Inv@ntri
?3 inventory Inv@nto:ri
interface $1
@@ -1796,6 +1809,8 @@ interven Int3v'i:n // for intervening
intray IntreI
intro $1
?3 investigative Inv,EstI2g'eItIv
ipad aIpad
iphone aIfoUn
irate aIr'eIt
iris aIrIs
iron aI3n
@@ -1843,6 +1858,7 @@ laboratory la#b'0r@trI
labor leIb3
labored leIb@d
laborer leIb@r3
laborious $alt3
labyrinth lab3rInT
lager lA:g3
laity leI@ti
@@ -1875,6 +1891,7 @@ lemonade $3
leo li:oU
leona li:'oUn@
leopard lEp3d
leprechaun lEpr@kO:n
lesion li:Z@n
lethal li:T@L
liaison li:'eIz0n
@@ -1970,6 +1987,7 @@ mausoleum mO:s@'li:@m
mayhem meIhEm
meant mEnt
meadow mEdoU
medallion $alt3
mediaeval mEdI'i:v@L
medicine mEds@n
?3 medicine mEd@s@n
@@ -2380,6 +2398,7 @@ pythagoras paIT'ag@r@s
python paIT@n
pyramidal pI2r'amId@L

qaeda kaId@
quadrilateral $3
quash kw0S
quaternary kw@t3:n@rI
@@ -2812,6 +2831,7 @@ tonne tVn
torment $1
torment $2 $verb
tornado tO@n'eIdoU
torrential t@rEnS@L
tortilla tO@t'i:a#
touche tu:SeI $only
toupee tu:peI
@@ -2825,6 +2845,8 @@ trajectory tr@dZEkt@rI
traverse $alt3
travesty trav@sti
treatise tri:tIz
trebuchet trEbUSeI
tremendous $alt3
triage tri:A:Z
tribunal traIb'ju:n@L
triceratops traIs'Er@t0ps
@@ -3007,6 +3029,7 @@ yessir jEss3:
yoghurt j0g3t
?3 yoghurt joUg3t
?3 yogurt joUg3t
?3 youtube ju:t2u:b
yoyo joUjoU

zavala $alt3
@@ -3020,6 +3043,7 @@ Altrincham O:ltrIN@m
Anglesey aNg@Lsi
Argyle A@g'aIl
Argyll A@g;aIl
Armagh A@m'A:
Bacup beIk@p
Berwick bErIk
Betws bEtUs
@@ -3203,6 +3227,7 @@ Korean kOr'i:@n
Kosovo k0s@voU
Kuala kwA:la#
Lagos leIg0s
Lebanon lEb@n0n
Leipzig laIpsIg
Leone li:'oUn
Lesotho l@s'u:tu:
@@ -3323,6 +3348,7 @@ Tokyo toUkIoU
Topeka toUp'i:k@
Toronto t@r0ntoU
Toulouse tu:l'u:z
Trafalgar $alt3
?3 Tunisia tu:n'i:Z@
Tripoli trIp@li
tuareg twA@rEg
@@ -3486,6 +3512,7 @@ Evette I2vEt
Fainne fan;@
Freda fri:d@
Fírinne fi:rIn;@
Gareth gar@T
Gary gari
Geraint gEraInt
Gerhard ge@hA@t
@@ -3658,6 +3685,7 @@ Susanne $2
Suzy su:zi
Tatiana tatI'A:n@
?3 Tatiana tA:tj'A:n@
Terese t@reIz
Theresa t@ri:z@
Therese t@ri:z
Thomas t0m@s
@@ -3748,9 +3776,7 @@ zhivago ZI2vA:goU



(de jure) deIdZ'U@ri
(en masse) ,0n||m'as
(en route) ,0n||r'u:t

(each of) i:tS||@v $pause
(far more) f'A@_m,o@
(few more) f'ju:m,o@
@@ -3761,9 +3787,9 @@ zhivago ZI2vA:goU
(most of) moUst||@v
(such as) sVtS||_a#z $pause

(too few) t'u:||f,ju:
(too many) t'u:||m,Eni
(too much) t'u:||m,VtS
(too few) t'u:||fju:
(too many) t'u:||mEni
(too much) t'u:||mVtS

//*************************************************************************
// COMMON WORDS
@@ -3896,8 +3922,8 @@ would $u+ $verbf $only $strend2
(would have) w%Udh%a#v $pastf
(would have) wUdhav $pastf $atend
(would have to) wUdhavt@5 $u2 $verbf $strend2
(wouldn't have) wUdnt@v $u1 $pastf $strend2
(wouldn't have to) ,wUdntavt@5 $verbf $strend2
(wouldn't have) wUd@-nt@v $u1 $pastf $strend2
(wouldn't have to) ,wUd@-ntavt@5 $verbf $strend2
won't woUnt $u+ $verbf $strend2 $only
wouldst $u+
(won't have) woUnta#v $pastf $u1
@@ -3908,18 +3934,18 @@ must $verbf
(must have) mVsta#v $pastf $1
(must have) mVsthav $pastf $atend
(must have to) m,Vstavt@5 $pastf
mustn't mVsnt $verbf
(mustn't have) mVsntha#v $pastf $u1+
(mustn't have to) m'Vsnthavt@5 $pastf
mustn't mVs@-nt $verbf
(mustn't have) mVs@-ntha#v $pastf $u1+
(mustn't have to) m'Vs@-nthavt@5 $pastf

shall ,Sal $verbf $only $strend2
shalt ,Salt $verbf $only
should ,SUd $verbf $only $strend2
(should have) SUd@v $pastf $u1+
(should have to) SUdhavt@5 $u2 $verbf $strend2
shouldn't ,SUdnt $verbf $strend2 $only
(shouldn't have) SUdnth@v $pastf $u1+
(shouldn't have to) 'SUdntavt@5 $verbf $strend2
shouldn't ,SUd@-nt $verbf $strend2 $only
(shouldn't have) SUd@-nth@v $pastf $u1+
(shouldn't have to) 'SUd@-ntavt@5 $verbf $strend2
shalln't ,SA:nt $verbf $strend2
shan't ,SA:nt $verbf $strend2

@@ -3935,9 +3961,9 @@ could %kUd $verbf $strend2 $only
(could have) ,kUda#v $pastf
(could have) kUdhav $pastf $atend
(could have to) kUdhavt@5 $u2 $verbf $strend2
couldn't ,kUd@nt $verbf $strend2
(couldn't have) kUd@nt@v $pastf $u1+
(couldn't have to) 'kUd@ntavt@5 $verbf $strend2
couldn't ,kUd@-nt $verbf $strend2
(couldn't have) kUd@-nt@v $pastf $u1+
(couldn't have to) 'kUd@-ntavt@5 $verbf $strend2

may meI $verbf $strend2
(may have) meIha#v $pastf $u1+
@@ -3968,9 +3994,9 @@ had ,had $atend
(had it) h,adI2t
(had them) h,adDEm
having ,havIN $strend2 $pastf $only
haven't hav@nt $pastf
hadn't had@nt $pastf
hasn't haz@nt $pastf
haven't hav@-nt $pastf
hadn't had@-nt $pastf
hasn't haz@-nt $pastf

get %gEt $strend2 $pastf $only
getting ,gEtIN $strend2 $pastf $only
@@ -4076,8 +4102,8 @@ his hIz $u $nounf $only $strend2
her h3: $u $nounf $only
hers h3:z $u $strend2
its Its $u $nounf
our aU@ $u $nounf $onlys
?3 our aU3 $u $nounf $onlys
our aU@ $u $nounf $only
?3 our aU3 $u $nounf $only
your jO@ $u $nounf $only
?6 your jU@ $u $nounf $only
their De@ $u $nounf $only

+ 11
- 3
dictsource/en_rules View File

@@ -1190,6 +1190,9 @@
au (_ aU
_) auch %O:x
aud (_ 'O:d
audio O:dI2oU
_) aud (iolo O:d
_) aud (iom O:d
augh O:
l) augh aaf
sl) augh O:
@@ -3824,7 +3827,8 @@
nk Nk
?7 nk nk // ?? Scottish
n (kn n
n't nt
n't @-nt
A) n't nt
E) n (_ @n
B) n (_ @n
g) n (ing+ n
@@ -4311,6 +4315,7 @@
d) or (_ o@
_f) or (@ O@
_f) ore (A O@
_f) ore (kn O@,
f) or (k O@
_f) or (s@ %O@
ch) or (d O@
@@ -4844,7 +4849,7 @@
pro (vid pr@
pro (viden pr0
pro (vis pr@
pro (voc pr@
pro (voc pr%0#
pro (vok pr@
pro (sec pr0
pro (fil proU
@@ -5248,7 +5253,7 @@
te (rrest t2@
r) tga (g gI
@) t (ia S
s) t (l ?
s) t (l
to (morr t@
_) to (nn tV
t (ooth t2
@@ -5403,6 +5408,8 @@
s) uag weIdZ
@g) ua (ge wI
u (al_ ju:
g) u (al_ w
n) u (al_ ju:
g) ua (rA a
g) uar (d A@
uary (_ ju:@ri
@@ -6037,6 +6044,7 @@
χ tS'aI_
ψ ps'aI_
ω 'oUmIg@_
?3 ω oUm'eIg@_
ώ 'oUmIg@_
ό 'oUmIkr0n_


+ 1
- 0
dictsource/es_list View File

@@ -338,6 +338,7 @@ ll 'El^e
é 'e||aTEntw'aDa
í 'i||aTEntw'aDa
_ó 'o||aTEntw'aDa
ó 'o||aTEntw'aDa $atend
ú 'u||aTEntw'aDa
ü ,uDj'ErEsis


+ 2
- 1
dictsource/ga_list View File

@@ -37,11 +37,12 @@ y waI
z zEd
_á eI||f0d[@
_é i:||f0d[@
_í aI||f0d[@
_ó o:||f0d[@
_ú ju:||f0d[@
_#32 spA:s
_cap m'o:r

// accent names


+ 0
- 167
dictsource/ht_list View File

@@ -1,167 +0,0 @@
// Haitian Creole translation rules
// This file is UTF-8 encoded



// numbers
_0 zewo
_1 E~
_2 de
_3 twa
_4 kat
_5 sE~k
_6 sis
_7 sEt
_8 yit
_9 nEf
_10 dis
_11 O~z
_12 duz
_13 trEz
_14 katOz
_15 kE~z
_16 sEz
_17 disEt
_18 dizyit
_19 diznEf
_20 vE~
_21 vE~te;E~
_2X vE~n
_28 vE~tyit
_29 vE~tnEf
_30 trA~t
_31 trA~te;E~
_3X trA~n
_38 trA~tyit
_39 trA~tnEf
_40 karA~t
_41 karA~te;E~
_4X karA~n
_48 karA~tyit
_49 karA~tnEf
_50 sE~kA~t
_51 sE~kA~te;E~
_5X sE~kA~n
_58 sE~kA~tyit
_59 sE~kA~tnEf

_60 swasA~t
_61 swasA~te;E~
_6X swasA~n
_70 swasA~tdis
_71 swasA~te;O~z
_8X katrevE~
_81 katrevE~tE~
_91 katrevE~tO~z

_0C sA~
_0M1 mil
_1M1 mil
_0M2 miljon
_0M3 milja
_0M4 biljon
_dpt _pwE~


// Common function words
//======================

// Articles
on $u
yon $u

la $u
lan $u
a $u
an $u

sa $u


// Pronouns
mwen $u
ou $u
li $u
nou $u
yo $u

ki $u


// Verbs
se $u // to be
vin $u

te $u // tense markers
tap $u
(t ap) tap $u
ap $u
a $u
pral $u
ta $u


// Prepositions
ak $u $brk
nan $u
pou $u


// Conjunctions
epi $u $pause


// Adverbs
kèk $u // some


// Characters
% pusA~ $max3
* asteris $max3
+ plis $max3
= egal $max3
/ slaS $max3
\ A~tislaS $max3
# aSaj $max3

_, vigil
_; pwE~vigil
_. pwE~


// Letter names
// (note: some letters must be distinguished from one-letter words)
_a a
a a $atstart $atend
b bi
c si
d di
e e
è egr'av
f Ef
g ge
h aS
i i
j Zi
k ka
_l el
l el $atend
_m em
m em $atend
_n en
n en $atend
o o
ò ogr'av
p pi
q kju
r ara
s Es
_t ta
t ta $atend
u u
v va
_w dubv'a
w dubv'a $atend
_y ipsil'on
y ipsil'on $atend
z zed

+ 0
- 104
dictsource/ht_rules View File

@@ -1,104 +0,0 @@
// Haitian Creole translation rules
// This file is UTF-8 encoded

.group a
a a
an (K A~

.group à
à a

.group b
b b

.group c
ch S
c k
c (Y s

.group d
d d

.group e
e e
en (K E~

.group è
è E

.group f
f f

.group g
g g

.group h
h // silent ?

.group i
i i

.group j
j Z

.group k
k k

.group l
l l

.group m
m m

.group n
n n
ng N

.group o
o o
on (K O~
ou u

.group ò
ò O

.group p
p p

.group q
q k

.group r
r r

.group s
s s

.group t
t t
tch tS

.group u
u u
ui yi

.group v
v v

.group w
w w

.group x
x ks

.group y
y j
K) y (K i // not next to a vowel

.group z
z z

.group
ç s
$ dola


+ 24
- 1
dictsource/hu_rules View File

@@ -462,6 +462,7 @@ shetlan) d (szige d
vé) d (jeggy d
své) d (zseb d
csalá) d (szer d
szaba) d (sajt d

.group dz
fogó) dz (kod ts
@@ -820,6 +821,12 @@ _megsz) í (vatta i
szabad) ítsz its:
sz) í (vemészt i:
vesz) ítsz i:ts:
progressz) í (ve i:
sz) í (vemel i:
sz) í (vere i:
sz) í (veré i:
sz) í (verő i:
sz) í (vevő i:

.group j
j j
@@ -948,7 +955,6 @@ bagate) ll (iz l
szí) n (ját n
szí) n (józan n
nyj n^n^

_) nem (- nEm // has $combine attribute in hu_list, combine with the next word
me) nny (ország n^
pihe) nj (_S2 n^
@@ -1028,6 +1034,12 @@ szivárvá) ny (játsz n^
haszo) n (jár n
boszorká) ny (jelet n^
káno) n (jog n
legé) ny (jár n^
szé) n (jelek n
teljesítmé) ny (j n^
nem-lts n'Em||_!'Ellt,e:,ES //without this rule Espeak spokening the nem LTS text with one word, because general in hu_list have a $combine attribute the nem word.

n'Em _!'Ellt,e:,ES

.group o
o o
@@ -1172,6 +1184,8 @@ _tetszé) s S
kolbászo) s S
feldolgozá) s S
_ki) s (szín S
kérdé) s S
végzé) s S

.group ss
ssz ss2
@@ -1707,6 +1721,8 @@ szállodá) ssz Ss
visszaélé) ssz Ss
esé) ssz (erű Ss
webe) ssz Ss
beleve) ssz (en s:


.group sz
sz s
@@ -1915,6 +1931,7 @@ szögle) t (szob t
_robo) t (szoftve t
diva) t (cirk t
álla) t (cirk t
szen) t (szob t

.group tj
C) tj c
@@ -2003,6 +2020,8 @@ _tisztele) tj (el tj
szen) tj (akab tj
közérze) tj (aví tj
ké) tj (átszm tj
szavaza) tj (og tj
szavaza) tj (eg tj

.group ts
ts (_S2 tS //general rule with word end of ts letters
@@ -2220,6 +2239,9 @@ felira) ts (áv t|S
_cha) tsz (ob t|s
robo) ts (of t|S
merényle) ts (or t|S
szavaza) ts (o t|S
szige) ts (ej t|S
szige) ts (o t|S


.group tt
@@ -2497,3 +2519,4 @@ csatlako) z (tok s
ç tS
ñ n^
ø Y


+ 0
- 68
dictsource/kk_list View File

@@ -1,68 +0,0 @@

// This file is UTF8 encoded
// Spelling to phoneme rules for Kazakh

б be
в ve
г ge
ғ Ge
д de
ж Ze
з ze
й q8sqA'i
к kA
қ qA
л El
м Em
н En
ң EN
п pe
р Er
с Es
т te
ф Ef
х XA
һ hA
ц tse
ч tSe
ш Sa
щ StSa
ъ Aj8ru
ь ZINISkelIk

//numbers
_0 n'Yl
_1 b'Ir
_2 ek'I
_3 u#S
_4 t'Yrt
_5 b'es
_6 Alt'8
_7 Z'et'I
_8 seg'Iz
_9 toG'8z
_1X 'on
_2X Zi'8rmA
_3X 'ot8z
_4X q'8r8q
_5X 'el;u
_6X 'Alp8s
_7X Z'etpIs
_8X s'eksen
_9X t'oqsAn
_0C Z'u#z
_0M1 m'8N
_0M2 milli'on
_0M3 milli'Ard
_dpt _b,u#tIn

// used after decimal point
_0Z1 'onnAn // tenths
_0Z2 Z'u#zden // hundredths
_0Z3 m'8NnAn
_0Z4 'on||m,8NnAn
_0Z5 Z'u#z||m,8NnAn
_0Z6 milli'onnAn
_0Z7 'on||milli,onnAn
_0Z8 Z'u#z||milli'onnAn
_0Z9 milli'ArdtAn

+ 0
- 130
dictsource/kk_rules View File

@@ -1,130 +0,0 @@

// This file is UTF8 encoded
// Spelling to phoneme rules for Kazakh

.group а
а A
а (й a

.group ә
ә &

.group б
б b

.group в
в v

.group г
г g

.group ғ
ғ G

.group д
д d

.group е
е e

.group ё
ё ;o

.group ж
ж Z

.group з
з z

.group и
и i

.group й
й j

.group к
к k

.group қ
қ q

.group л
л l

.group м
м m

.group н
н n

.group ң
ң N

.group о
о o

.group ө
ө Y

.group п
п p

.group р
р r

.group с
с s

.group т
т t

.group у
у u
A) у w
у (A w

.group ұ
ұ U

.group ү
ү u#

.group ф
ф f

.group х
х X

.group һ
һ h

.group ц
ц ts

.group ч
ч tS

.group ш
ш S

.group щ
щ StS

.group ы
ы 8 // oU ??

.group і
і I

.group э
э E

.group ю
ю ;u

.group я
я ;a

.group
ъ
ь

+ 12
- 10
dictsource/kl_rules View File

@@ -52,8 +52,9 @@


.group g
g j
gg j:
g Q
gg x:
gg (i C:


.group h
@@ -74,8 +75,8 @@


.group k
k g
kk g:
k k
kk k:


.group l
@@ -91,6 +92,7 @@
.group n
n n
na na
naa na:
nn n:
ng N
nng N:
@@ -104,8 +106,8 @@


.group p
p b
p b:
p p
pp p:


.group q
@@ -124,10 +126,10 @@


.group t
t d
ti ti
te te
tt d
t t
t (i ts
i) t (_ tS;
tt t:
tl tl#
ts ts


+ 1
- 1
dictsource/ko_rules View File

@@ -260,7 +260,7 @@
ᇂ (A

.group ᆯ // ㄹ
rr
L
ᆯᄅ l
ᆯ (A *


+ 784
- 0
dictsource/ms_list View File

@@ -0,0 +1,784 @@
// Last updated: 14 October 2010, Jason Ong ([email protected])
// This file is UTF8 encoded
// Spelling-to-phoneme words for Malay

a e:
b bi:
c si:
d di:
e i:
f Ef
g dZi:
h etS
i aI
j dZe
k ke
l El
m Em
n En
o o:
p pi:
q kju:
r ar
s Es
t ti:
u ju:
v vi:
w d'ab@liu:
x Eks
y waI
z zEd


// numeric
_0 k'osoN
_1 s'atu
_2 d'u@
_3 t'ig@
_4 '@mpat
_5 l'im@
_6 '@nam
_7 t'udZ%oh
_8 l'apan
_9 s@mb'ilan
_10 s@p'uluh
_11 s'@b@las
_12 d'u@b@las
_13 t'ig@b@las
_14 '@mpatb@las
_15 l'im@b@las
_16 '@namb@las
_17 t'udZ%ohb@las
_18 l'apanb@las
_19 s@mb'ilanb@las
_2X d'u@puloh
_3X t'ig@puloh
_4X 'Empatpuloh
_5X l'im@puloh
_6X 'Enampuloh
_7X t'udZ%ohpuloh
_8X l'apanpuloh
_9X s@mb'ilanpuloh
_0C R'atus_|
_1C s@*'atus_|
_0M1 R'ibu_
_1M1 s@r'ibu_
_0M2 dZ'ut@_
_1M2 s@dZ'ut@_
_0M3 b'ili@n
_1M3 s@b'ili@n
_dpt _p'@rpul'uhan_


_cap b'EsaR // after the letter
_?? k,odeh'uR2uf

// accented letters
_lig d'aIgRaf
_acu akj'ut
_ac2 dub@lakj'ut
_brv bR2'i:v
_ced s@d'ila
_cir t'opi
_dia 'umlaUt
_dot d'Ot
_grv gR2'av
_hac h'atSEk
_mcn m'akR2On
_ogo 'OgonEk
_rng R2'iNg
_stk stR'ok
_tld t'ild@

// punctuation
_! t,anda||s'ER2u
_" t,andak'utip
£ ponst'E*RliN
% p@*Ratus
^ t,andat'opi
& d'an
_* b'intaN
_( k,uR2uN||b'uk@
_) k,uR2uN||t'utup
__ g,aR2is||b'awah
_- t,andah'ubuN
+ c'ampor
= s,am@||d'@Nan
_{ k,uR2uN||kuR2'awal
_} k,uR2uN||kuR2,awal||t'utup
_[ k,uR2uN||s'iku
_] k,uR2uN||s,iku||t'utup
_: t,iti?||d'u@
_; t,iti?||k'om@
@ a||k'EOng
_' k,utip||t'uNgal
~ t'ilde
# p'agaR
_< k,uR2aN||d'aR2i
_> l,Ebih||d'aR2i
_, k'om@
_. t'iti?
_? t,and@||t'an^@
/ stR2'ok
_\ 'bEkslES





// exceptions
// (use phoneme [E2] for an unstressed 'e' which does not reduce to [@] )

bebek bEbE2?
becek bEtSE2?
//bekas $2
perang $2


// ABBREVIATIONS
//**************
abd 'abdul $dot
agenda ag'enda
bhd b'@Rhad $dot
cimb $abbrev
cm s@ntim'et@r
com d'Ot||kOm
(co ltd) k'amp@ni||lim'it@d
dr d'okt@R $dot
drp daR2ip'ad@
dun d'un
dymm d'uli||jang||mah'a||m'uli@
exco 'Eksko
en 'intSek $dot
felda f'elda
hb h,arib'ulan
hj h'adZi $dot
ir $abbrev $dot
klci $abbrev
km kilom'et@r
kol kol'on@l $dot
ltd lim'it@d $dot
m'sia malaysia $text
md moh'amad $dot
mm milim'et@r
mohd moh'amad $dot
mr m'ist@r $dot
mw m'egawat
pas p'a:s
pibg $abbrev
prof prof'es@r $dot
pte p'raiv@t
rm R'iNget
sdn s@ndiR2'ian $dot
sdr saUd'aR@ $dot
umno 'amno:
upm $abbrev
utk unto?
yab jang||amat||b@rh'ormat
yb jang||b@rh'ormat
ym jang|m'uli@
yg jang


// MAIN WORD DICTIONARY
//*********************

// e(pepet)-a
banteras bant'@Ras
membanteras m@mbant'@Ras
bedah b'@dah
bekas b'@kas
belah b'@lah
perbelanjaan p@Rb,@landZ'a|an
sebelah s@b'@lah
benar b'@nar
sebenar s@b'@nar
benda b'@nd@
kecelaruan k@tS,@laR'uan
berhad b'@Rhad
besar b'@sar
membesar m@mb'@sar
pembesar p@mb'@sar
sebesar s@b'@sar
terbesar t@Rb'@sar
cegah tS'@gah
mencegah m@ntS'@gah
pencegah p@ntS'@gah
cepat tS'@pat
dipercepat dip@RtS'@pat
secepat s@tS'@pat
dekat d'@kat
terdekat t@Rd'@kat
demam d'@mam
denda d'@nd@
didenda did'@nd@
dengan d'@Nan
dengar d'@Nar
didengar did'@Nar
mendengar m@nd'@Nar
depan d'@pan
berdepan b@Rd'@pan
dera d'@R@
pendera p@nd'@R@
deras d'@Ras
desak d'@sak
mendesak m@nd'@sak
terdesak t@Rd'@sak
empat '@mpat
engkau '@NkaU
gelar g'@lar
bergelar b@Rg'@lar
gemar g'@mar
penggemar p@Ng'@mar
gesa g'@s@
menggesa m@Ng'@s@
tergesa t@Rg'@s@
hendak h'@nda?
dikehendaki dik,@h@nd'aki
kehendak k@h'@nda?
kelas k'@las
sekelas s@k'@las
kemas k'@mas
keras k'@Ras
berkeras b@Rk'@Ras
kertas k'@Rtas
kesan k'@san
dikesan dik'@san
lembah l'@mbah
letak l'@tak
diletak dil'@tak
emak '@mak
emas '@mas
enam '@nam
keenam k@'@nam
enggan '@Ngan
gerak g'@ra?
bergerak b@Rg'@ra?
penggerak p@Ng'@ra?
jebak dZ'@bak
terjebak t@RdZ'@bak
jejas dZ'@dZas
terjejas t@RdZ'@dZas
jelas dZ'@las
kejar k'@dZar
dikejar dik'@dZar
kekal k'@kal
kelam k'@lam
mengembalikan m@N,@mbal'ikan
kembang k'@mbaN
mengembang m@N'@mbaN
perkembangannya p@Rk,@mbaN'ann^@
kelak k'@lak
kena k'@n@
kenal k'@nal
dikenal dik'@nal
terkenal t@Rk'@nal
kerap k@Rap
kerja k'@RdZ@
bekerja b@k'@RdZ@
bekerjasama b@k,@RdZ@s'am@
kerjasama k@RdZ@s'am@
pekerja p@k'@RdZ@
sekerja s@k'@RdZ@
kesal k'@sal
menyesal m@n^'@sal
kesan k'@san
berkesan b@Rk'@san
keberkesanan k@b,@Rk@s'anan
kesat k'@sat
mengesat m@N'@sat
lekas l'@kas
lelakinya l@lak'in^@
lekat l'@kat
melekat m@l'@kat
lemah l'@mah
lembaga l@mb'aga
berperlembagaan b@Rp@Rl,@mbag'a|an
lengan l'@Nan
lepas l'@pas
berlepas b@Rl'@pas
terlepas t@Rl'@pas
letak l'@ta?
peletakan p@l@t'akan
terletak t@Rl'@tak
menang m'@naN
pemenang p@m'@naN
mentah m'@ntah
mesra m'@sR@
pecah p'@tSah
berpecah b@Rp'@tSah
peka p'@k@
pegang p'@gaN
dipegang dip'@gaN
memegang m@m'@gaN
pentas p'@ntas
pernah p'@rnah
pesat p'@sat
petang p'@taN
rendah R'@ndah
terendah t@R'@ndah
rentak R'@ntak
berentak b@R'@ntak
retak r'@tak
keretakan k@R@t'akan
rentak r'@ntak
serentak s@r'@ntak
sebak s'@ba?
kesebakan k@s@b'akan
sebentar s@b'@ntar
sedang s'@daN
sedar s'@dar
tersedar t@Rs'@dar
segera s@g'@R@
disegerakan dis@g@R'@kan
menyegerakan m@n^,@g@R'@kan
sejahtera s@dZaht'@R@
kesejahteraan k@s@dZ,aht@R'@an
sejak s'@dZak
sekat s'@kat
menyekat m@n^'@kat
selam s'@lam
penyelam p@n^'@lam
keselamatan k@s,@lam'atan
selaras s@l'aRas
keselarasan k@s@laR'asan
selepas s@l'@pas
kesesuaian k@s@su'aIan
sembah s'@mbah
persembahannya p@Rs,@mbah'ann^@
sempat s'@mpat
berkesempatan b@Rk,@s@mp'atan
sempena s@mp'@n@
beserta b@s'@Rt@
peserta p@s'@Rt@
sertai s@Rt'a|i
serang s'@RaN
diserang dis'@RaN
menyerang m@n^'@raN
penyerang p@n^'@raN
serba s'@Rb@
tegang t'@gaN
bertegang b'@Rt@gaN
tegas t'@gas
tekak t'@kak
menekak m@n'@kak
tekan t'@kan
menekan m@n'@kan
telah t'@lah
teman t'@man
tempa t'@mp@
ditempa dit'@mp@
menempa m@n'@mp@
tempah t'@mpah
menempah m@n'@mpah
tempat t'@mpat
bertempat b@rt'@mpat
tenang t'@naN
bertenang b@Rt'@naN
tengah t'@Nah
menengah m@n'@Nah
sesetengah s@s@t'@Nah
tengkar t'@Nkar
bertengkar b@Rt'@Nkar
tentang t'@ntaN
ditentang dit'@ntaN
menentang m@n'@ntaN
penentang p@n'@ntaN
tepat t'@pat
juruterbang dZuRut'@RbaN
teram t'@Ram
ketenteraman k@t@nt@R'aman
terkam t'@Rkam
diterkam dit'@Rkam
menerkam m@n'@Rkam
tetap t'@tap
bertetap b@Rt'@tap
menetap m@n'@tap

// exceptions
kehebatan k@heb'atan
dibelenggu dib@l'@Ngu
perbendaharaan p@Rb@nd,@haR'a|an
kejayaan k,@dZaj'a|an
galakan gal'akan
setong s@t'oN
aneh 'anE2h
menyelamatkan m@n^,@lam'atkan
//berbaur b@Rb'aUr
gementar g@m'@ntar
hebatnya hEb'atn^@
diedarkan diEd'aRkan
//berkeliaran b@Rk@li'aRan
//bersebelahan b@Rs@b@l'ahan
//sebaik s@b'aIk
cedera tS@d'@R@
kecederaan k@tS,@d@r'a|an
tercedera t@RtS@d'@R@
//ekoran Ek'oRan
kekecewaan k@k,@tSew'a|an
//bermain b@Rm'aIn
//kedai k'@daI
//pekedai p@k'@daI
disertai dis@Rt'ai
persediaan p@Rs,@di'a|an
//bergaul b@Rg'aul
elakkan El'akkan
kebanyakan k@ban^'akan
anda 'anda
//berkepentingan b@Rk,@p@nt'iNan
//berleluasa b@Rl@lu'as@
iaitu ja|'itu
masalah mas'alah
masakan mas'akan
mengelakkan m@NE2l'akkan
menyelesaikan m@n^,@l@s'aIkan
pergolakan p@Rgol'akan
perempuan p@R@mp'uan
perempuannya p@R,@mpu'ann^@
pesta p'esta
berpesta b@Rp'esta
menyalah m@n^'alah
setengah s@t'@Nah
berpengalaman b@Rp@Nal'aman
kesemuanya k@s,@mu'@nn^@
selesema s@l@s'@m@
tindakan tind'akan
pesalah p@s'alah
wanita wan'ita
bersalah b@Rs'alah
//persetujuan p@Rs,@tudZ'uan
//persetujuannya p@Rs@tudZu'ann^@
//keseluruhan k@s,@luR'ohan
memberitahu m@mb,@Rit'ahu
//persekutuan p@Rs,@kut'uan
tema t'Ema
kepercayaan k@p,@RtSaj'a|an
dendangan dEnd'aNan
peperiksaan p@p,@Reks'a|an
kebebasan k@bEb'asan
//cerai tS'@RaI
//berbaik b@Rb'aIk
menyembunyikan m@n^,@mbun^'ikan
bermesyuarat b@Rm,@Su'aRat
//pengetahuan p@N,@tah'uan
mengenai m@N@n'ai
penyelesaian p@n^,@l@s'aIan
diselesaikan dis,@l@s'aIkan
ditanya dit'an^@
prestasi pREst'asi
pembelajaran p@mb,@ladZ'aRan
kepong k'@poN
demikian d@mik'ian
piket p'ikEt
kempennya kEmp'enn^@
jentera dZ@nt'@R@
perlembagaan p@Rl,@mbag'a|an
bersesuaian b@Rs,@su'aIan
bumiputera bumip'ut?Ra
kecemerlangan k@tS,@Rm@l'aNan
merdeka m@Rd'eka
kemerdekaan k@m,@Rdek'a|an
kelewatan k@lew'atan
menyelesaikannya m@n^@l@saIk'ann^@


// english derived words
akta 'akta
album 'Elb@m
aspek 'aspE2k
balada bal'ada
digit di'dZit
digital didZ'it@l
doktor d'okt@r
dolar d'Ol@r
domestik dOm'Estik
entiti Ent'iti
flora fl'ora
frekuensi fRiku'@nsi
imej 'imedZ
indeks 'indEks
insentif ins'E2ntif
jean dZ'in
jeneral dZEn'@R@l
kabinet kEb'in@t
kamera kEm'@R@
kes k'es
komponen komp'on@n
komprehensif kompRih'ensif
koroner koR'on@r
laser l'es@r
majoriti mEdZor'iti
meter m'it@r
muzik m'iuzek
muzium m'iuzi@m
nasional nESh'@n@l
negatif nEg'@tif
nostalgia nost'aldZja
november nov'Emb@r
oktober okt'ob@r
polis p'olis
personaliti p@Rs,@nal'iti
presiden pRE2s'id@n
profesor pRof'E2s@r
produk pR'odak
prospek pR'ospE2k
republik Rip'abli?
saintis s'aIntis
sesi s'esi
subjek s'abdZE2k
surcaj s'@RtSadZ
radio R'edio
realiti Rial'iti
sentimen sEnt'im@n
september sEpt'@mb@r
teater ti'et@r
teknik t'Eknik
teknikal tEkn'ikal
telefon tel'ifon
tenis t'Enis
tiara ti'aRa
unit j'unit
universiti jun,iv@Rs'iti
virus v'aIR@s
zoo zu:

// place names
Australia _^_EN
Arsenal _^_EN
Asia as'ia
Barcelona b'aRs@l'ona
Borneo _^_EN
Britain _^_EN
Brunei b'R2unaI
Cheras tS'@ras
Coast _^_EN
Commonwealth _^_EN
Denmark _^_EN
England _^_EN
Eropah Er'opah
France _^_EN
George _^_EN
Georgetown _^_EN
Indonesia indon'eIsi@
Ireland _^_EN
Jamaica _^_EN
Kingdom _^_EN
Korea _^_EN
Liverpool _^_EN
London _^_EN
New _^_EN
Nigeria _^_EN
Macau _^_EN
Malaysia m@l'esi@
Melbourne _^_EN
Guinea _^_EN
Penang pin'EN
Perak p'erak
Phuket ph'ukEt
Putrajaya putR2@dZ'aj@
Republic _^_EN
Scotland _^_EN
Seputeh s@p'uteh
Seremban s@R'@mban
Setar s?tar
Sydney _^_EN
Temerloh t@m'@Rloh
Tonga t'onga
Town _^_EN
United _^_EN
Valencia vel'@nsia
Zambia z'ambia
Zealand _^_EN

// person names
Azura az'uR2a
Barack _^_EN
David _^_EN
Davidson _^_EN
Douglas _^_EN
Edward _^_EN
Karen _^_EN
Jason _^_EN
Lee _^_EN
Leela l'ila
Linda l'inda
Mahathir mah'ater
Michael _^_EN
Merican m'erikan
Ng '@N
Nora n'oRa
Nurhaliza n,uRhal'iza
Obama ob'ama
Ong ON
Ramlee R'amli
Saleh s'aleh
Seha s'eha
Shafie Saf'i?i
Sidek s'idek
Syed s'aId
Teresa t@R2'isa
Tony _^_EN
Yaacob j'a?kob
Yew jiu
Zakaria zak'aRja
Zaleha zal'eha


// English words
(& co) En||k'amp@ni
american _^_EN
bank b'Enk
banking b'EnkiN
commerce _^_EN
corp _^_EN $dot
city _^_EN
company _^_EN
consortium _^_EN
daily _^_EN
distribution _^_EN
east _^_EN
education _^_EN
engineering _^_EN
euro _^_EN
girl _^_EN
grand gR2End
genre _^_EN
government _^_EN
group _^_EN
hero h'iR2o
idea 'aIdi@
island _^_EN
jazz dZ'E:s
international _^_EN
internet _^_EN
left _^_EN
land lEnd
malayan _^_EN
malaysian m@l'esi@n
media _^_EN
methodist _^_EN
multi _^_EN
north _^_EN
pound _^_EN
right _^_EN
school _^_EN
speaker _^_EN
south _^_EN
the _^_EN
enterprise _^_EN
omnibus 'omnibas
online _^_EN
power _^_EN
punk _^_EN
serius _^_EN
service _^_EN
street _^_EN
technologies _^_EN
tender _^_EN
trading _^_EN
trend _^_EN
unity _^_EN
union _^_EN
wall _^_EN
west _^_EN


// brands
afp $abbrev
(air asia) 'E:_'e:si@_
(air france) _^_EN
airbus _^_EN
boeing _^_EN
eon 'ion
firefly _^_EN
iphone aI||fon
ipod aI||pod
malaysiakini m@l'esi@||k'ini
maybank m'eib'Enk
reuters _^_EN
(sime darby) _^_EN
toyota toj'ota
wikipedia wik,ip'idja



// unstressed words
//suatu $u
dari $u
pada $u
daripada $u
ke k@ $u
di $u
si $u
sang $u
hang $u
yang $u
//dan $u
//atau $u
//untuk $u
ialah $u
adalah $u
sebagai $u
bahwa $u
per p@r $u


// conjunctions
agar $pause
apabila ap@bil@ $pause
apatah ap@t'ah $pause
atau $pause
ataupun $pause
bagi $pause
bahkan $pause
(bukan sahaja) $pause
dan $pause $u
(di mana) $pause
hanya $pause
jika $pause
kalau $pause
kerana $pause
ketika $pause
mahupun $pause
maka $pause
malah $pause
malahan $pause
manakala $pause
meskipun $pause
misalnya $pause
namun $pause
(sama ada) $pause
sambil $pause
sebab s'@bab $pause
sedangkan $pause
sehingga $pause
selain s@l'ain $pause
semasa $pause
serta s'@rt@ $pause
setelah s@t'@lah $pause
seperti $pause
sepertimana s@p,@Rtim'an@ $pause
supaya $pause
tapi $pause
tetapi $pause
walau $pause
walaupun $pause
untuk $pause
//yang $pause $u
(yang mana) $pause


// nuances
anugerah an'ug*Rah
dilaksanakan dil,aksan'@kan
kementerian k@m,@ntR2'ian
sebahagian s@b'ah?gian
mewarnai m@warn'a|i
mulai mul'a|i
meraikan m@Ra|'ikan
sibuk s'ebok
terengganu tR2@Ng'anu
dirasai diRas'a|i
direka diR'ek@
negeri n'@gR2i

+ 233
- 0
dictsource/ms_rules View File

@@ -0,0 +1,233 @@
// Last updated: 14 October 2010, Jason Ong ([email protected])
// This file is UTF8 encoded
// Spelling-to-phoneme rules for Malay

.group a
a a
a) a _|a
A_) a _|a
au) a _|a
ai aI
au aU
_) au o // (automatik)

@) a (_ @ // (pula)
@) a (kah_ '@ // (apakah)
@) a (kan_ '@ // (bukakan)
@) a (lah_ '@ // (mintalah)
@) a (nya_ '@ // (puncanya)
@) a (pun_ '@ // (bagaimanapun)


.group b
b b

_) be (@@ b@

_) ber (@@ b@R // (berdasarkan)
_) ber (CaiX b@R // (bermain)
_) ber (CauX b@R // (bergaul, berbaur)
_) berke (@@ b@Rk@ // (berkeliaran, berkesempatan)
_) berle (@@ b@Rl@ // (berleluasa)
_) berper (@@ b@Rp@R //
_) berse (@@ b@Rs@ // (bersebelahan)
_) bh b // added (kota bharu)

.group c
c tS
//*************
ch tS // (kuching)
//**************

.group d
d d
dj dZ // Dutch

.group e
e E //jason: E changed to E2
e) e _|E
A_) e _|E // *** to check on this ***
e (_ e


// *********************
_) e (Co@ E2 // e-o (ekoran)
e (CaiX '@ // e-ai (kedai, petai, belai, cerai)
e (CiX '@ // e-i (betik, ketil, lebih, kerisik, kesedihan, sering, seri, segi, seni)
e (CCiX '@ // e-i (penting, jentik)
e (CCuX '@ // e-u (dibendung, bentuk)
e (CuX '@ // e-u (belut, telur, perut, ketulan, bertemu)
e (CCuX '@ // e-u (perlu, merdu)
e (CCCuX '@ // e-u (tengku, tengkuk)

e (nyuX '@ // e-u (senyum)
eCC) e (X e // e-e (pendek, benteng)
eC) e (X e // e-e (belek, gelek, leceh, geleng)
e (Ce e // e-e (kelecehan)
oC) e (X e // o-e (oleh, boleh, celoteh, topeng)
oCC) e (X e // o-e (ponteng)
C) e (CCCoCkan_ e // (bengkokkan)
m) e (_ @ // (autisme)

// ******************
.group f
f f
ff f

.group g
g g

.group h
h h

.group i
i i
i) i _|i
A_) i _|i

@) i (CX e // (tekik, masing, masin)
@) i (Cnya_ 'e // (masinnya)
@) i (CCaan_ e // (pemeriksaan)

.group j
j dZ

.group k
k k
k (_ ?
kh x

_) ke (@@ k@
@@) k (annya_ k'
_) kese (@@ k@s@ // keseluruhannya

.group l
l l
ll l

.group m
m m

_) me (@@ m@
_) mempe (@ m@mp@
//*****************
_) mem (@@ m@m
_) mene (@@ m@n@ // (menerajui)
_) menge (@@ m@N@ // (mengenepikan)
_) mempenge (@@ m@mp@N@ // (mempengerusikan)
//****************

.group n
n n
ng N
ny n^
// nj n^

.group o
o o
o) o _|o
A_) o _|o
o (r O
oe u // Dutch spelling

.group p
p p
pp p

_) pe (@@ p@

_) pe (CaiX p@ // (pemain, pesaing)
_) peme (@@ p@m@ // (pemeriksaan)
_) pene (@@ p@n@ // (penerokaan)
_) penge (@@ p@N@ // (pengetahuan)
_) penje (@@ p@ndZ@ // (penjenamaan)
_) perse (@@ p@Rs@ // (persetujuan)


.group q
q k
qu kw

.group r
r R //(jason change: R2 to r)
r (K r //(jason change: R to r)
e) r (K *r //(jason change: *R to r)

r (_ r // jason: added (silent r at the end)

.group s
s s
ss s
sy S // perhaps [S;] ??
sj S

_) se (@@ s@
//*************
_) se (CaiX s@ // (sebaik)
sh S
//***************


.group t
t t
tj tS // Dutch

_) ter (@@ t@*R

//***************
_) ter (@ t'@*R // ter- (terbaik, teruk)
//******************

.group u
u u
u) u _|u
A_) u _|u
@) u (CX o // (puluh, tudung)
@) u (Cnya_ 'o // (bentuknya)
@) u (CCnya_ 'o // (tudungnya)

.group v
v v

.group w
w w

.group x
x ks
_) x z

.group y
y j

.group z
z z

.group
$ dOl@R


__) - (_D n'eg@tif

* b'intaN
*) * (*
**
**) * (_ _::

+ 0
- 319
dictsource/mt_list View File

@@ -1,319 +0,0 @@

// This file in UTF8 encoded

// Letters maltese



a a
b b@
c ka
ċ tS@e
d dee
e e
f effe
g gie
ġ dZe
h akka
ħ h'@
i i
j ie
k k'@
l elle
m emme
n enne
o o
p pe
q '@
r erre
s esse
t te
u u
v ve
w u'@
x eSSe
y y
z tsee
ż z'@






_. punt
_, koma
_! punt ta’ esklamazzjoni
_? mistoqsija
_" kwoUts
_# hash
_$ dollaru:
_% procentuali:
_& u
_' accent
_: koUl@n
_; semIk'oUl@n
€ ewro
_( parentezi tondi
_) parentezi tondi
_[ parentezi kwadri
_] parentezi kwadri
_{ alkua:lto
_} lop:ua:lto
_< iz'@ minn
_> akbar minn
_- haIf@n
__ alavi:va
+ plus $max3
* stil:a $max3
= i:kw@lz $max3
/ kaut:a
\ keno
£ sterlina
@ _at
~ tilde



// numbers maltese



_0 z'e*o
_1 ui:h'@d
_2 nei:n
_3 tli:eta
_4 erba
_5 h'@amsa
_6 si:t:a
_7 seba:
_8 tmi:ni:a
_9 dydin'asa
_10 a'@ra
_11 h'@daSe
_12 tnaSe
_13 tletaSe
_14 erbataSe
_15 h'@mistaSe
_16 sitaSe
_17 sbataSe
_18 tmintaSe
_19 tsetaSe
_2X oSerin
_3X tl'@ti:n
_4X erbai:n
_5X h'@amsi:n
_6X sit:i:n
_7X s'@bei:n
_8X tmeni:n
_9X d,ydin'isei:n
_0C mi:a
_1C mi:au
_0M1 elf
_1M1
_2M1 elfeiun
3000 tlet: elef
4000 erbatelef
_0M2 m'iliun
2000000 z'@euge m'iliuni
_0M3 bi'li'un
_2M3 z'@euge bi'li'uni
_3M3 tlet: bi'li'uni
_4M3 erba bi'li'uni
_5M3 h'@ames bi'li'uni




// articles


// pronouns maltese
jiena iuena $u
inti inti: $u
huwa ua $u
hija i:a $u
aħna ah'@na $u
intom i:ntom $u
huma u:ma $u






// possessives maltese


tiegħi ti:ai: $u
tiegħek ti:ake $u
tiegħu ti:u: $u
tagħha tah'@a $u
tagħna tana: $u
tagħkom takom $u
tagħhom tahom $u


// prepositions
ta ta:
għal al:
lil li:l:
ġo dZeo
mal mal:
mingħajr mi:nai:r
madwar madua:r
il-quddiem il-di:m:'@
qabel a:bel
wara uara
minbarra minba:ra:
bejn bei:n
flimkien flimkin:
viċin vi:S@i:n
minn mi:n
minn fejn mi:n fei:n
isfel isfel
fil-mija fi:l-mi:a
permezz permets
lejn lein:
fuq fu'@
taħt taht
fi fi:
mingħajr mi:nair
madwar madu:ar
kontra contra
quddiem '@udi:m
fost fost
qabel abel
wara uara
taħt taht
lil hinn lil:in:
ħdejn h'@dein
bejn bei:n
flimkien flinki:m
qrib ri:p
minn hemm min:em:







// conjunctions


minkejja minCeia
u u
kif Ci:f
għax aS
darba dar:ba
jew ieu:
iżda i:z'@da
jekk ietSe
minkejja mintSei:a
minflok minflotSe
irrespettivament ir:espetivament
mindu mindu:
b’hekk betSe
għalkemm altSem:
kull darba kul: darba
kull min kul: mi:n
tkun xi tkun tkun Si tkun
waqt ua:t






// negative maltese

ma $u





// auxillary verbs


ikun icu:n:
kien Ci:n
qiegħed ied
huwa u:a
huma uma
ma kienx ma CieS
kienu Cienu
mhux muS
mhumiex umumiS
ma kienux ma CienuS
għamel amel
għandhom andom
ghandu jkollhom andu kolum
ma jridux ikunu mrdS kunu
għandu andu
m'għandux m'anduS
jista ista
ma jistax ma istaS
għandi andi
għandha an:a
kienet ki:net
ikseb i:kseb
mur mu:r
tmur tmur
sejjer sei:er
mort mort
agħmel a:mel
tagħmilx ta:milS
jagħmel ia:mel
għamel a:mel
għamilt amilt
tpoġġi tpodZi:
poġġi odZi:
issir is:ir
saret sa:ret
għamel a:mel






// adverbs

biss bis:
qatt at:
issa is:a
dalwaqt daluat
xorta Sorta
diġa didZa
mhux mu:S
kull cul:
bosta bosta
xi Si:
dan dan
dak dak
dawn dau:n
dawk dau:k
hemm em:
minn min:






// Abbreviations maltese

$textmode
eċċ etSetra
mm milim'etri
cm tSentim'etri
km kilom'etri
ml milil'itri
mg miligr'am:i
kg kilogr'am:i




+ 0
- 205
dictsource/mt_rules View File

@@ -1,205 +0,0 @@
// Maltese translation rules
// This file is UTF-8 encoded


.group a
a a
aa a:
au au
ax aS


.group b
b b
bb b:
be b'@
br br'@
bi bi:
bie bi'@
.group c
c c
.group ċ
ċ tS@
ċa tS@a
ċe tS@e
ċi tS@i
ċw tS@u'@

.group d
d de
dd d:


.group e
e e
eu eu:
ew eu

.group f
f f
ff f:
fo fo

.group g
g g
gg g:
ge gie
gi gi:
għ :
.group ġ
ġ dZ
ġo dZo
.group h
h :
.group ħ

ħ h
ħu h:u:
ħt ht
.group i
i I
iu Iu
ie i:


.group j
j iu
jj i:
jo io
je ie
ja ia

.group k
k ke
ka ka
ke ke
ki ki:
kie ki:e
ku ku:
ko co

.group l
l l

.group m
m m
m (n im
m (p im
m (r im
.group n
n n
nu nu:



.group o
o o

.group p
p p
pp p:

_ole) p (a p:
_ota) p (a p:

kam) p (anj p:

sam) p (oo p:
sham) p (o p:


.group q
q '@
qa a
qe e
qo o
qu


.group r
r r
rie ri:e
ro ro:
ra ra:

.group s
s s
sie si:e
saqq sa
saq sa


.group t
t t
tt t:



.group u
u u
ux uS


.group v
v v


.group w
w u


.group x
x Se
xie Sei:


.group y
y y
yy y:
yi yi
yö yY


.group z
z tse
K) zh Z



.group ż
ż z'@
ża za
że ze
żie zi:e
żgħ za

// default group for "non of the above"

.group
ż z'@
ċ tS@
// non-ascii characters with specified pronunciations




+ 4
- 0
dictsource/nl_list View File

@@ -1544,6 +1544,10 @@ spektakel $2
tegennatuur $4
travestie $3
verderop $3
verre vEr@
verrekijker vEr@kEIk@r
verste vErst@
verte vErt@
volledig $2
vrouwengek $alt3
waarschijnlijk $2

+ 8
- 2
dictsource/nl_rules View File

@@ -254,6 +254,11 @@
@) es (_S2qd 'Es // double the previous vowel
@) es (_$w_alt2S1 s // just remove 's'
KAC) es (_S2e @s
mb) es (_S1 s
nd) es (_S1 s
rd) es (_S1 s
gt) es (_S1 s
wt) es (_S1 s
es (ie_ e:z
@) essen (_S5qd 'Es@n
@) eres (_S4qd @r'Es
@@ -734,8 +739,8 @@ _) inn (@P2 'I // ?? inneren
u (x 8
uu y
ui Wy
uw yU
uw (_ yU
uw (A yw
uw (K yU

_) uit (@P3 'Wyt
uul (_ 'yl // from -ule
@@ -755,6 +760,7 @@ _) inn (@P2 'I // ?? inneren
_) ver (@P3 v@r
_) ver (sie_ vEr
_) verder vErd@r
_) verge (@P5 vErg@
_) verge (le v@rQ'e:
_) voort (@P5 v'O:rt


+ 0
- 206
dictsource/nso_list View File

@@ -1,206 +0,0 @@
// Northern Sotho translation list
// This file is UTF-8 encoded.

// letters (just guesses)
a a
b bi:i:
c si:i:
d di:i:
e i:i:
f e:fu
g x2@
h eitSi
j dZ'ei
k kei
l e:li
m 'emu
n 'eni
o o:o:
p p'i:i:
q kju
r aR3e
s 'e:si
t t'i:i:
u u:u:

v v'i:i:
w dabalju
x ek'ese
y w'ai
z z'e:ti




// numbers
_0 lef'e:la
_1 tee
_2 p'edi
_3 t'a:R3o
_4 'n-ne
_5 l#'a:no
_6 ts'e:la
_7 S'u:pa
_8 sisw'a:i
_9 sen^'ane
_1X les'o:me
_2X mas'o:mepedi
_3X mas'o:met'a:R3o
_4X mas'o:me'n-ne
_5X mas'o:mel#'a:no
_6X mas'o:mets'e:la
_7X mas'o:meS'u:pa
_8X mas'o:mesisw'a:i
_9X mas'o:mesen^'ane
_0C lekX'olo
//_1C m,iam'oJa
_2C _|makX'olopedi
_3C _|makX'olot'a:R3o
_4C _|makX'olo'n-ne
_5C _|makX'olol#'a:no
_6C _|makX'olots'e:la
_7C makX'oloS'u:pa
_8C makX'olosisw'a:i
_9C makX'olosen^'ane
_0M1 's-'ikete
_1M1 _|'s-'ikete
_2M1 dik'etep'edi
_3M1 dik'etet'a:R3o
_4M1 dik'eten-ne
_5M1 dik'etel#'a:no
_6M1 dik'etets'e:la
_7M1 dik'eteSu:pa
_8M1 dik'etesisw'a:i
_9M1 dik'etesen^'ane
_1M2 dik'etetSelekX'o:lo
_2M2 dik'etetSemakX'o:lop'edi
_3M2 dik'etetSemakX'o:lot'a:R3o
_4M2 dik'etetSemakX'o:lon-ne
_5M2 dik'etetSemakX'o:lol#'ano
_6M2 dik'etetSemakX'o:lots'e:la
_7M2 dik'etetSemakX'o:loSu:pa
_8M2 dik'etetSemakX'o:losisw'a:i
_9M2 dik'etetSemakX'o:losen^'ane
_0M3 _|mili'oni // 1,000,000
_0M4 _|bili'oni
_dpt fe:Xelu'a:na


bona $u // they,them
yona $u+ // it
wena $u+ //you

nna $u+ // i
yena $u+ // him, her, it

lena $u+ //ploral to wena
rena $u+ // we,us


//accents
_cir k'efa

// pronouns
mimi $u+
sisi $u+
wewe $u+
nyinyi $u+
yeye $u+
wao $u+

hii $u // this, these
hilo $u+ // this,that (previously menioned)

wake $u+ // his,her,its
yake $u+
zake $u+


// prepositions
wa $u $brk // of
ya $u $brk // of,by they,them
la $u $brk // of
cha $u $brk // of
vya $u $brk // of
za $u $brk // of
pa $u $brk // of
kwa $u $brk // of
mwa $u $brk // of

bi $u $brk // in
fi $u $brk // in,on
pa $u $brk // at

min $u $brk // from
toka $u $brk // from
katika $u $brk // from, out of
kuanzia $brk // from,since
tangu Su $brk // from,between
hata $u $pause // until
baada $u $brk // after
bila $u $pause // without
hadi $u $pause // up to
huko $u $brk // there, as when

kwacho $pause // by means of which
kwalo $pause // by means of which
kwao $pause // by means of which
kwavyo $pause // by means of which
kwaye $pause // by means of which

kwa $u $brk // with
mwenye $u $brk // with
wenye $u $brk // with
yenye $u $brk // with
1enye $u $brk // with
chenye $u $brk // with
vyenye $u $brk // with
zenye $u $brk // with


// conjunctions
na $u $pause // and
ama $u $pause // or
ao $u $pause // or
au $u $pause // or
aidha $pause // and
bali $u $pause // but
ila $pause // but,except
angao $pause // although
badalaya $pause // instead
basi $u+ $pause // so,then
ili $u+ $pause // so that
ilikwamba $pause // so that
ijapo $pause // although, even if
ijapokuwa $pause // although
ingawa $pause // although
iwapo $pause // when
japo $pause
(juu ya) J,u:ja $pause // as for
kama $u+ $pause // if,like
kisha $pause // moreover
kusudi $pause // in order to
kuwa $u $pause // that
(kwa kuwa) kwa||k,uwa $pause // becuse
kwamba $u $pause // that
lakini $pause // however
walakini $pause // however
pamoja $pause // together with
panapo $pause // when it is
pindi $u+ $pause // if,when
taraa $u+ $pause // if
wala $pause // either,neither
yaani $pause // i.e.
//Northern Sotho words
bja vvJ'a

raloka R3%al'U:ka
sekolo sek'U:lU
taba t_'a:ba
thaba t'a:ba







+ 0
- 150
dictsource/nso_rules View File

@@ -1,150 +0,0 @@

// Northern Sotho translation rules
// This file is UTF-8 encoded


.group a
a a
_C) a a
_) a (C a
a (_ a
a (s a:

.group b
b B


.group c
c k
ch tS

.group d
d d
dh D

.group e
e e
ee i;e:
s) e i


.group f
f f

.group g
g X
_k) g x2

gh Q


.group h
h h
hl l#


.group i
i i
ii i:

.group j
j J

.group k
k k
kh x

.group l
l l

.group m
m m
_) m m-
m (A m
K) m (@@ _|m
K) m (C m-
K) m (b@@ _|m
K) m (v@@ _|m
K) m (w@@ _|m

.group n
n n
_) n n-
n (A n
n (@@ n
ny n^
n (ch n^
n (j n^
ng' N
n (k N
_) n (k N-
_) n (k@@ N-
n (g N
_) n (g N-
_) n (g@@ N-
ng N

.group o
o U
oo o:

.group p
p p

.group q
q k

.group r
r R3

.group s
s s
s (e s-
_t) se si:
// sh S

.group t
t t
th th
tsen ts'e:n
tlh K
tl l#


.group u
u u
uu u:
_d) u u:

.group v
v v

.group w
w w

.group x
x ks

.group y
y j

.group z
z z


.group
$ dola
% asilimia

* n^ota
*) * (*
**
**) * (_ _::

š S
_t) š tS
_p) š (h S

ê E
ô o

+ 7
- 2
dictsource/pa_list View File

@@ -110,7 +110,7 @@ _0M3 k'VRoR // 10,000,000
_0M4 'VR@b // 1,000,000,000
_0M5 k#'VR@b // 100,000,000,000
_dpt _dOt# // ??
_dpt _d@s@ml'o:
// character names
@@ -144,9 +144,14 @@ _ਔ 'ERV||kVnOR'a
ੌ kVn'ORa
// Punctuation
_?? 'Vk#:@R
। d.'Vnd.i
+ J'Vuma
= b@R'ab@R
% pR'VtIS@t
* t'aRa
// Pronouns
// ਪੁਰਖਵਾਚੀ ਪੜਨਾਂਵ

+ 3
- 3
dictsource/pa_rules View File

@@ -436,9 +436,9 @@
@) ਜ਼ (_ z

.group ੜ
R2V
ੜ (B R2
@) ੜ (_ R2
r.V
ੜ (B r.
@) ੜ (_ r.

.group ਫ਼
ਫ਼ fV

+ 0
- 69
dictsource/prs_list View File

@@ -1,69 +0,0 @@

// This file in UTF8 encoded
// For persian (Dari) language


//numeric
_0 sE'fEr
_1 j'Ak
_2 d'u:
_3 s'E:h
_4 tS'Ahr
_5 pA'ndZ
_6 SE'S
_7 h'Aft
_8 h'ASt
_9 n'o
// _۱۱ j'AzdAh // what's this ?

_1X d'Ah
_2X b'ist
_3X s'i
_4X tS'Ehl
_5X p'indZAh
_6X S'Ast
_7X h'AftAd
_8X h'AStAd
_9X nAv'Ad


_0C s'Ad

_0and o

//alphabets
ا Al'Ef
ب b'E:
پ p'E:
ت t'E:
ث s'E:
ج dZ'im
چ tS'E:
ح h'E:
خ X'E:
د d'Al
ذ z'Al
ر r'E:
ز z'E:
س s'in
ش S'in
ص s'Ad
ض z'Ad
ط t'A:
ظ z'A:
ع 'eIn
غ R'eIn
ف f'E:
ق R'Af
ک k'Af
گ g'Af
ل l'Am
م m'im
ن n'un
و w'o:w
ه h'E:dotSASm
ء hAmz'E:
ی j'A:




+ 0
- 235
dictsource/prs_rules View File

@@ -1,235 +0,0 @@
// This file is UTF-8 encoded
// Text to phoneme rules for Dari

// replace Arabic character numbers with Latin character numbers
.replace
٠ 0
١ 1
٢ 2
٣ 3
٤ 4
٥ 5
٦ 6
٧ 7
٨ 8
٩ 9


//all vowels
.L01 َ ِ ُ ً ٍ و ا ه ی ة ي

//commonly unwritten vowels
.L02 َ ِ ُ

//list of consonants
.L03 ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی

.group ا
_) ا (L01
ا A
ا (_ A
اً An
اٍ En

.group ب
ب (L01 b
ب bA
ب (_ b
L03) ب (L03 b

.group پ
پ (L01 p
پ pA
پ (_ p
L03) پ (L03 p

.group ة
ة (L01 h
ة hA
ة (_ @

.group ت
ت (L01 t
ت tA
ت (_ t

.group ث
ث (L01 s
ث sA
ث (_ s

.group ج
ج (L01 dZ
ج dZA
ج (_ dZ


.group چ
چ (L01 tS
چ tSA
چ (_ tS

.group ح
ح (L01 h
ح hA
ح (_ h

.group خ
خ (L01 X
خ XA
خ (_ X

.group د
د (L01 d
د dA
د (_ d

.group ذ
ذ (L01 z
ذ zA
ذ (_ z

.group ر
ر (L01 R
ر RA
ر (_ R

.group ز
ز (L01 z
ز zA
ز (_ z

.group ژ
ژ (L01 Z
ژ ZA
ژ (_ Z

.group س
س (L01 s
س sA
س (_ s
L03) س (L03 s
L02) س (L03 s

.group ش
ش (L01 S
ش SA
ش (_ S

.group ص
ص (L01 s
ص sA
ص (_ s

.group ض
ض (L01 z
ض zA
ض (_ z

.group ط
ط (L01 t
ط tA
ط (_ t

.group ظ
ظ (L01 z
ظ zA
ظ (_ z

.group ع
ع (L01
ع A
ع (_ @_:

.group غ
غ (L01 R
غ RA
غ (_ R

.group ـ
ـ

.group ف
ف (L01 f
ف fA
ف (_ f

.group ق
ق (L01 R
ق RA
ق (_ R

.group ک
ک (L01 k
ک kA
L02) ک (L03 k
L03) ک (L03 k
ک (_ k

.group گ
گ (L01 g
گ gA
گ (_ g

.group ل
ل (L01 l
ل lA
ل (_ l

.group م
م (L01 m
م mA
م (_ m

.group ن
ن (L01 n
ن (_ n
L02) ن (L03 n
L03) ن (L03 n
ن nA

.group ه
ه (L01 h
ه hA
ه (_ @

.group و
و (L01 v
و (_ u
L03) و (L03 u
و vA

.group ی
ی i
_) ی jA
.group ي
ي i
_) ي jA

.group
$ dol@

.group ء
ء @
ء (L01

.group ّ
ّ :

.group آ
آ A

//vowels that are not usually written:

.group َ
َ A

.group ِ
ِ E

.group ُ
ُ o




+ 36
- 20
dictsource/pt_list View File

@@ -337,7 +337,7 @@ la $u
lo $u
las $u
los $u
//se $u
se $u

?2 este $u+ $nounf 'estSi // this
?2 estes $u+ $nounf 'estSis // these
@@ -369,7 +369,7 @@ sua $u+ $nounf
?2 nossas $u+ $nounf n'Os&s
dele dely $u1+
dela $u+
deles $u+
deles delys $u1+
delas $u+
nele nely $u1+

@@ -637,7 +637,6 @@ acertos $alt2
acordo $alt $verb
acervo $alt2
adepto $alt
adereço $alt2
adore $alt
adorno $alt $verb
albatrozes $alt
@@ -654,8 +653,8 @@ apego $alt2 $noun
apelo $alt $verb
aposto $alt $verb
aperto $alt2 $noun
apoio $alt $verb
aprovo $alt
apneia $alt
apoio $alt $verb
arredores $alt
arremesso $alt2 $noun
arroz $alt2
@@ -668,6 +667,8 @@ atrozes $alt
autora $alt2
avesso $alt2
axé aSE
azeda $alt $verb
azedo $alt $verb
baqueta $alt2
beco $alt2
belo $alt
@@ -675,7 +676,6 @@ besta $alt2
bilhete $alt2
boca $alt2
bochecha $alt2
boio $alt
bojo $alt2
boleia $alt
bolero $alt
@@ -683,13 +683,14 @@ bolo $alt2
bolo $alt $verb
borboleta $alt2
bordo $alt
bosque $alt
boto $alt2 $noun
bromelha $alt
cabeça $alt2
cabresto $alt2
cacete $alt2
cachorra $alt2
caderneta $alt2
cadete $alt2
camiseta $alt2
cantora $alt2
capacete $alt2
@@ -704,6 +705,7 @@ cateto $alt2
catorze $alt2
cebola $alt2
cefaleia $alt
centopeia $alt
cerca $alt
cerca $alt2 $noun
cerco $alt $verb
@@ -717,7 +719,6 @@ chovesse $alt2
chupeta $alt2
clamores $alt2
clero $alt
crepe $alt
coco $alt2
cofre $alt
cogumelo $alt
@@ -729,9 +730,10 @@ colher $alt $noun
colheres $alt $noun
colmeia $alt
colore $alt
começo $alt2 $noun
começo $alt $verb
comodo $alt2
concerto $alt2 $noun
concertos $alt2
concordo $alt
conforto $alt $verb
congelo $alt
@@ -739,6 +741,7 @@ consolo $alt2 $noun
controle $alt2 $noun
controlo $alt2 $noun
coreia $alt
coreto $alt2
corneta $alt2
cornos $alt
corpos $alt
@@ -748,6 +751,7 @@ corvos $alt
coto $alt2
cratera $alt
crede $alt2
crepe $alt
decore $alt
desapego $alt2 $noun
descabelo $alt
@@ -756,12 +760,14 @@ desemprego $alt2
desemprego $alt $verb
desespero $alt2 $noun
desfecho $alt2
desmantelo $alt $verb
desprezo $alt2 $noun
desse $alt2
desse $alt $verb
deste $alt2
deste $alt $verb
desterro $alt2
destroem $alt
deveras $alt
dez $alt
diarreia $alt
@@ -775,12 +781,13 @@ dueto $alt2
elixir eliSir
elo $alt
emprego $alt2 $noun
empregos $alt2
encosto $alt $verb
endereço $alt2
endereço $alt $verb
enforco $alt
engordo $alt
enredo $alt $verb
enrosco $alt $verb
enterro $alt2 $noun
enumerem $alt
envelope $alt
@@ -793,6 +800,7 @@ erros $alt2
esboço $alt $verb
escopeta $alt2
escova $alt2 $noun
escovas $alt2
escovo $alt
escroto $alt2
esforço $alt $verb
@@ -805,20 +813,23 @@ espiroqueta $alt2
espoleta $alt2
esposa $alt2
esqueleto $alt2
estilete $alt2
estrela $alt2
estrofe $alt
estorno $alt $verb
estorvo $alt $verb
etiqueta $alt2
europa $alt
europeia $alt
exagero $alt $verb
explore $alt
faceta $alt2
fantoche $alt
farelo $alt
farofa $alt
febre $alt
feitora $alt2
fera $alt
feitora $alt2
ferozes $alt
fezes $alt
?1 fixe fiSy
@@ -834,9 +845,7 @@ forca $alt2
força $alt2 $noun
forças $alt2
forço $alt
fossem $alt2
forro $alt $verb
fosse $alt2
frevo $alt2
galera $alt
galileia $alt
@@ -865,11 +874,13 @@ ideia $alt
interesse $alt2 $noun
jogo $alt2 $noun
joguete $alt2
lagosta $alt2
lambreta $alt2
lebre $alt
lembrete $alt2
leste $alt2 $verb
lopes $alt
macete $alt2
maior $alt
maleta $alt2
marcelo $alt
@@ -892,6 +903,7 @@ minueto $alt2
miolo $alt2
miolos $alt
moeda $alt
mofo $alt $verb
molho $alt2 $noun
monera $alt
morcego $alt2
@@ -899,10 +911,10 @@ morda $alt2
moreia $alt
mortos $alt
motora $alt2
mulher $alt
mui mwi
muito mw'iNtU // -s is included as a suffix
muita mw'iNt&
mulher $alt
mulheres $alt
mureta $alt2
mutreta $alt2
@@ -915,11 +927,13 @@ obstetra $alt
odisseia $alt
onu $1
olho $alt2 $noun
onomatopeia $alt
opereta $alt2
ordens $alt
osso $alt2
ossos $alt
ostra $alt2
ovelha $alt2
ovos $alt
pachorra $alt2
paexa paeSa
@@ -935,6 +949,7 @@ pastora $alt2
pedra $alt
pela $alt $verb
pelego $alt2
pela $alt $verb
pelo $alt $verb
peso $alt $verb
piloto $alt2 $noun
@@ -946,32 +961,32 @@ plateia $alt
plebeia $alt
polca $alt
porcos $alt
porrete $alt2
porra $alt2
porrete $alt2
porto $alt2
portos $alt
pose $alt2
povos $alt
poxa p'oS&
primavera $alt
provo $alt
prosopopeia $alt
quarteto $alt2
queda $alt
quede $alt2
quinteto $alt2
recomeço $alt2 $noun
raposa $alt2
recomeço $alt $verb
recordo $alt
recorto $alt
rede $alt2
redor $alt
reembolso $alt $verb
reforços $alt
reforço $alt $verb
reforços $alt
refresco $alt $verb
reitora $alt2
relevo $alt2 $noun
remorso $alt
reprovo $alt
retorno $alt $verb
rixa x'iS&
rocha $alt
@@ -982,7 +997,7 @@ rota $alt2
rota $alt $noun
rumores $alt2
saleta $alt2
sarjeta $alt
sarjeta $alt2
seborreia $alt
seca $alt2 $noun
secas $alt2
@@ -1019,6 +1034,7 @@ topo $alt $verb
torno $alt $verb
torre $alt2 $noun
torres $alt2
torro $alt
tortos $alt
traqueia $alt
travesso $alt2

+ 54
- 48
dictsource/pt_rules View File

@@ -1,3 +1,4 @@
// translation rules Brazilian
// translation rules Brazilian
// translation rules Brazilian
// This file is UTF-8 encoded
@@ -178,8 +179,6 @@
e (co_ E
e (ctA_ E
e (ctAm_ E
e (çA_ E
e (çAm_ E

e (de_ E
e (dem_ E
@@ -353,20 +352,22 @@
tiv) e (L05_ E // es-
_com) e (L05_ e
_pud) e (L05_ E
_tem) e (L05_ e
_coub) e (L05_ E
_exag) e (L05_ E
_houv) e (L05_ E
_perd) e (L05_ e
_quis) e (L05_ E
_soub) e (L05_ E
_trem) e (L05_ e
diss) e (L06_ E // contra-
fend) e (L06_ e // de- o-
tend) e (L06_ e // a- con- en- es-
vend) e (L06_ e // re-
_mord) e (L06_ e
_rend) e (L06_ e
prend) e (L06_ e // a- rea- des- desa-
_arrepend) e (L06_ e
_defend) e (L06_ e
_depend) e (L06_ e
_escond) e (L06_ e
preend) e (L06_ e // com- a- re- sur-
@@ -383,6 +384,7 @@ respond) e (L06_ e // cor-
colh) e (L07_ e // & es-
corr) e (L07_ e // per- con- in- so- dis-
ench) e (L07_ e // pre-
fend) e (L07_ e // de- o-
nasc) e (L07_ e // re-
tend) e (L07_ e // en- con- a- es-
torc) e (L07_ e // con-
@@ -396,6 +398,7 @@ respond) e (L06_ e // cor-
_morr) e (L07_ e
_perd) e (L07_ e
_sofr) e (L07_ e
_trem) e (L07_ e
merec) e (L07_ e // des-
padec) e (L07_ e // com-
parec) e (L07_ e // a- rea- com- desa-
@@ -410,8 +413,8 @@ _amanhec) e (L07_ e
_amolec) e (L07_ e
_anoitec) e (L07_ e
_arrepend) e (L07_ e
_atrev) e (L07_ e
_cresc) e (L07_ e
_defend) e (L07_ e
_depend) e (L07_ e
_desguarnec) e (L07_ e
_emagrec) e (L07_ e
@@ -442,17 +445,22 @@ preend) e (L07_ e // sur- com-
proteg) e (L07_ e // des-
respond) e (L07_ e // cor-
qu) e (brL04_ E
_cel) e (brL04_ E
_enr) e (dL01_ E
_arr) e (dL03_ E
_depr) e (dL03_ E
_hosp) e (dL03_ E
_gr) e (gL03_ e
_gal) e (gL03_ e
_n) e (grL03_ e
_estr) ei (L03_ EI
estr) ei (L04_ EI
_inv) e (jL04_ E
tr) e (pL04_ E // es-
_dec) e (pL04_ E
_in) e (ptL03_ E
_p) e (quL02_ E
_s) e (quL02_ E
ad) e (quL04_ E
l) e (que_ E
_imp) e (rL03_ E
_sev) e (rL03_ E
@@ -468,6 +476,7 @@ respond) e (L07_ e // cor-
_tol) e (rL04_ E
_ven) e (rL04_ E
acel) e (rL04_ E // des-
_apod) e (rL04_ E
_coop) e (rL04_ E
_temp) e (rL04_ E
_recup) e (rL04_ E
@@ -483,13 +492,14 @@ _refrig) e (rL04_ E
_bez) e (rrL03_ e
_inv) e (rtL03_ e
_f) e (rvL03_ e
_p) e (sL01_ E
_refr) e (scL01_ E
_d) e (scL02_ E
_cr) e (scL02_ E
_p) e (scL03_ E
_m) e (sclL04 E
_d) e (spL02_ E
_p) e (squL02_ E
_refr) e (squL02_ E
_l) e (ssL02_ e
_esp) e (ssL03_ e
_c) e (stL03_ e
@@ -510,43 +520,10 @@ _obsol) e (tL03_ e
_despr) e (zL04_ E
_embel) e (zL04_ E
_menospr) e (zL04_ E
_emagr) e (çL03
pr) e (çL03_ e // a-
aqu) e (çL03_ e // re-
mer) e (çL03_ e // des-
pad) e (çL03_ e // com-
par) e (çL03_ e // a- re- com- rea- desa-
_ado) e (çL03_ e
_car) e (çL03_ e
_per) e (çL03_ e_
conh) e (çL03_ e // re-
obed) e (çL03_ e // des-
_esqu) e (çL03_ e
_forn) e (çL03_ e
_ofer) e (çL03_ e
abast) e (çL03_ e // re-
_aborr) e (çL03_ e
_acont) e (çL03_ e
_agrad) e (çL03_ e
_amanh) e (çL03_ e
_amort) e (çL03_ e
_anoit) e (çL03_ e
_arref) e (çL03_ e
_desguarn) e (çL03_ e
_desguarnec) e (çL03_ e
_enfraqu) e (çL03_ e
_enlouqu) e (çL03_ e
_enraiv) e (çL03_ e
_enriqu) e (çL03_ e
_entrist) e (çL03_ e
_envaid) e (çL03_ e
_envelh) e (çL03_ e
_esclar) e (çL03_ e
_espair) e (çL03_ e
_estrem) e (çL03_ e
_fortal) e (çL03_ e
_rejuven) e (çL03_ e
estabel) e (çL03_ e // re-
com) e (çL01_ E
p) e (çL03_ E
_m) e (çL03_ E
_entorp) e (çL03_ e
//endsort


@@ -595,7 +572,12 @@ estabel) e (çL03_ e // re-
?3 g (_C g_
g (Y Z // ge gi
gu (Y g
?1 guen (C gw'eIN // aguenta, etc.
a) gu (ent gw
enxa) gu (e gw
lin) gu (e gw
lin) gu (i gw
san) gu (ín gw
san) gu (in gw
?1 n) gu (A gw // eg: língua, etc.
?1 man) gu (ei g // mangueira
?1 gu (ém_ g // eg: alguém, ninguém, etc...
@@ -837,12 +819,15 @@ estabel) e (çL03_ e // re-
?1 v) o (lt O

//sort
_f) o (L06_ o
_f) o (L05_ o
_f) o (L07_ o
_engl) o (bL01_ O
_s) o (bL02_ O
_esn) o (bL04_ O
br) o (chL04_ O
_deb) o (chL04_ O
_desabr) o (chL04_ O
_m) o (fL01_ O
_m) o (fL02_ O
_s) o (frL02_ O
r) o (gL04_ O // inter-
_j) o (gL04_ O
@@ -850,6 +835,8 @@ _desabr) o (chL04_ O
_adv) o (gL04_ O
_ref) o (gL04_ O
_ap) oi (L01_ OI
_ap) oi (L02_ OI
_b) oi (L04_ OI
_t) o (lL03_ o
c) o (lhL02_ O // es- en- re-
_t) o (lhL02_ O
@@ -864,19 +851,29 @@ _desabr) o (chL04_ O
_ens) o (pL04_ O
_s) o (prL04_ O
_) o (ptL04_ O
_defl) o (rL02_ O
_impl) o (rL02_ O
_inod) o (rL03_ O
_inson) o (rL03_ O
_comem) o (rL04 O
_remem) o (rL04_ O
f) o (rmL03_ O
_enf) o (rquL02_ O
_ext) o (rquL02_ O
c) o (rrL01_ o // escorra, incorra, corra, recorra
_m) o (rrL01_ o
p) o (rtL03_ O // im- trans- de- re- com- a- ex-
t) o (rçL01_ O // con-
_r) o (snL04_ O
_c) o (spL02_ O
_enr) o (squL02_ O
p) ostos (_ Ost=Us# // dispostos etc.
_gar) o (tL03_ o
pr) o (vL03_ O
_g) o (zL04_ O
_esb) o (çL01_ O
_r) o (çL03_ O
tr) o (çL03_ O // des-
_ad) o (çL03_ O
_end) o (çL03_ O
//endsort
@@ -929,8 +926,16 @@ _remem) o (rL04_ O
?1 _) qua kwa // quatro, etc.
?1 _) que ke // quente, etc.
?1 _) quei (C k'eI // queira, queima, etc
?1 C) quen (C kw'eIN // cinquenta, etc.
?1 A) quen (C kw'eIN // frequência, etc.
A) quên (C kw'eIN // frequência, etc.
ade) qu (e kw
e) qu (estr kw
_e) qu (in kw
fre) qu (ent kw
li) qu (id kw
lí) qu (id kw
n) qu (en kw
se) qu (en kw
tran) qu (il kw
?1 quec kes // esquece, etc.
?1 queç kes // esqueça.
?1 A) que (nA_ ke // pequeno, etc.
@@ -1162,5 +1167,6 @@ _remem) o (rL04_ O


__) - (_D m'enUs
D_) - (_D m'enUs
A_) - (_D _
C_) - (_D _

+ 0
- 83
dictsource/rw_list View File

@@ -1,83 +0,0 @@

// This file is UTF8 encoded
// Spelling-to-phoneme words for Kinyarwanda

a a:
b ba:
c ca:
d da:
e e:
f fa:
g ga:
h ha:
i i:
j dZa:
k ka:
l la:
m ma:
n na:
o o:
p pa:
q kwa:
r *a:
s sa:
t ta:
u u:
v va:
w wa:
x eks
y ja:
z za:


// numbers
_0 z'e*u
_1 R'imwe
_2 kaB'i*i
_3 gat'atu
_4 k'ane
_5 gat'anu
_6 gatand'atu
_7 ka*'indwi
_8 umun'ani
_9 ikj'enda

_1X itS'umi
_2X makumjaB'i*i
_3X mi*,oNgwit'atu
_4X mi*,oNgw'ine
_5X mi*,oNgwit'anu
_6X mi*,oNgitand'atu
_7X mi*,oNgwi*'indwi
_8X mi*,oNgwin'ani
_9X mi*,oNgwej'enda

_1C idZ'ana
_2C mag,anaB'i*i
_3C mag,anat'atu
_4C mag,an'ane
_5C mag,anat'anu
_6C mag,anatand'atu
_7C mag,ana*'indwi
_8C mag,anin'ani
_9C mag,anakj'enda

_0M1 iBih'umbi
_1M1 iJih'umbi
_2M1 iBih'umbibiB'i*i
_3M1 iBih'umbibit'atu
_4M1 iBih'umbib'ine
_5M1 iBih'umbibit'anu
_6M1 iBih'umbibitand'atu
_7M1 iBih'umbibi*'indwi

_0M2 milij'oni
_1M2 milij'on'imwe
_2M2 milij'oneBj'i*i
_3M2 milij'oneS'atu
_4M2 m,ilij'on'en^e

_0and na
_dpt _niB'itSe



+ 0
- 105
dictsource/rw_rules View File

@@ -1,105 +0,0 @@

// Kinyarwanda translation rules
// This file is UTF-8 encoded
.group a
a a

.group b
b B
_) b b
m) b b

.group c
c tS
cy kj

.group d
d d

.group e
e e

.group f
f f

.group g
g g
g (e J
g (i J

.group h
h h

.group i
i i

.group j
j dZ
jy Jj

.group k
k k
k (e c
k (i c

.group l
l l

.group m
m m
mp mh

.group n
n n
n (g N
n (ge n^
n (gi n^
nk Nx
nt nh
ny n^

.group o
o o

.group p
p p

.group q
q q

.group r
r * // try **
_) r R

.group s
s s
sh S
shy S;

.group t
t t

.group u
u u

.group v
v c

.group w
w w
b) w g

.group x
x ks
_) x z

.group y
y j

.group z
z z

.group
$ dola*a // just a guess


+ 11
- 11
dictsource/si_list View File

@@ -105,34 +105,34 @@ _dpt d'aS@m#@
// Consonants
ක k@
ඛ kh@
ඛ k#@
ග g@
ඝ gh@
ඝ g#@
ඞ N@
ඟ N#g@
ච tS@
ඡ tSh@
ඡ tS#@
ජ dZ@
ඣ dZh@
ඣ dZ#@
ඤ n^@
ඥ gn@
ඦ n^#dZ@
ට t.@
ඨ t.h@
ඨ t.#@
ඩ d.@
ඪ d.h@
ඪ d.#@
ණ n.@
ඬ n.#d.@
ත t@
ථ th@
ථ t#@
ද d@
ධ dh@
ධ d#@
න n@
ඳ n#d@
ප p@
ඵ ph@
ඵ p#@
බ b@
භ bh@
භ b#@
ම m@
ඹ m#b@
ය j@
@@ -153,7 +153,7 @@ _, k'oma:v@
? pr'a:Sna:rt,@j@
! v'iSm#@j,a:rt@j@
_“ 'udrut,@pa:t.,@a:r,@mb@j@
_” 'udhrut,@pa:t.h,@@w,@s.a:n,@j@
_” 'ud#rut,@pa:t.#,@@w,@s.a:n,@j@
_: t'itkom,a:v@
_; d'etit@
$ do:l.ar $max3

+ 14
- 14
dictsource/si_rules View File

@@ -19,16 +19,16 @@
ක (B k
.group ඛ
ඛ kha
ඛ (B kh
ඛ k#a
ඛ (B k#
.group ග
ග ga
ග (B g
.group ඝ
ඝ gha
ඝ (B gh
ඝ g#a
ඝ (B g#
.group ඞ
ඞ Na
@@ -71,8 +71,8 @@
ට (B t.
.group ඨ
ඨ t.ha
ඨ (B t.h
ඨ t.#a
ඨ (B t.#
.group ඩ
ඩ d.a
@@ -95,16 +95,16 @@
ත (B t
.group ථ
ථ tha
ථ (B th
ථ t#a
ථ (B t#
.group ද
ද da
ද (B d
.group ධ
ධ dha
ධ (B dh
ධ d#a
ධ (B d#
.group න
න na
@@ -119,16 +119,16 @@
ප (B p
.group ඵ
ඵ pha
ඵ (B ph
ඵ p#a
ඵ (B p#
.group බ
බ ba
බ (B b
.group භ
භ bha
භ (B bh
භ b#a
භ (B b#
.group ම
ම ma

+ 1
- 1
dictsource/sw_rules View File

@@ -70,7 +70,7 @@
_) n (k N-
_) n (k@@ N-
n (g N
_) n (g N-
K) n (g N-
_) n (g@@ N-

.group o

+ 0
- 171
dictsource/te_list View File

@@ -1,171 +0,0 @@
// This file is UTF8 encoded
// Spelling to phoneme rules for Telugu



// speak Latin letters as English
a e:j
b bi:
c si:
d di:
e i:
f Ef
g dZi:
h e:tS
i a:j
j dZe:j
k ke:j
l El
m Em
n En
o o:
p pi:
q kju:
r a:r
s Es
t t#i:
u ju:
v vi:
w dVbVlju:
x Eks
y wa:j
z zEd



// numbers
_0 sunna
_1 okat.i
_1a oka
_2 rend.u
_3 mu:d.u
_4 na:lgu
_5 aIdu
_6 a:ru
_7 e:d.u
_8 ;enimidi
_9 tommidi
_1X padi
_11 padakond.u
_12 pannemd.u
_13 padamu:d.u:
_14 pad#na:lugu
_15 padihe:nu
_16 padaha:ru
_17 padihe:d.u
_18 padd#enimidi
_19 pamdommadi
_2X iravaI
_3X muppaI
_4X nalub#aI
_5X ja:b#aI
_6X aravaI
_7X d.eb#baI
_8X jenab#aI
_9X tomb#aI
_0C vandala
_0C0 vandalu
_1C okavanda
_0M1 vela
_0M1x velu
_1M1 okavejji
_0M2 laks.ala
_0M2x laks.alu
_1M2 laks.a
_0M3 kotla
_0M3x kotlu
_1M3 koti
_dpt _d,aS;a:mkam


// symbols
_?? aks.aram // 'unknown character'
% S;a:tam
+ ku:d.ika
* naks.atra
\ bja:kasla:s.
/ sla:s.
© ka:pi:raIt.
¶ ve:ra:

_, ka:ma:
_; semi:ko:lan
_: ko:lan
_! a:S;carja:rt#aka
_? praS;na:rt#aka
_- haIfan
__ amd.ar||sko:r


// unstressed function words
// articles
ద $u
అ $u+
ఆ $u+
ఒక $u


// letter names
U+c01 am
U+c02 an
U+c03 ah
U+c4d vottu

// consonants with virama
క్ ik
ఖ్ ik#
గ్ ig
ఘ్ ig#
ఙ్ iN
చ్ ic
ఛ్ ic#
జ్ iJ
ఝ్ iJ#
ఞ్ in^
ట్ it.
ఠ్ it.#
డ్ id.
ఢ్ id.#
ణ్ in.
త్ it
థ్ it#
ద్ id
ధ్ id#
న్ in
ప్ ip
ఫ్ ip#
బ్ ib
భ్ ib#
మ్ im
య్ ij
ర్ ir
ఱ్ ir
ల్ il
ళ్ il.
వ్ iv
శ్ iS;
ష్ is.
స్ is
హ్ ih
ౘ్ its
ౙ్ idz


// combining vowels, precede by a click so they
// can be distinguished from stand-alone vowels
ా #X2a::
ి #X1i
ీ #X2i::
ు #X1u
ూ #X2u::
ృ #X1ru
ౄ #X2ru:
ె #X1e
ే #X2e::
ై #X2aI
ొ #X1o
ో #X2o::
ౌ #X2aU



+ 0
- 277
dictsource/te_rules View File

@@ -1,277 +0,0 @@

// This file is UTF8 encoded
// Spelling to phoneme rules for Telugu

// A means vowel letters (not vowel signs)
// B means a combining vowel sign or a virama


.replace
౦ 0 // Convert Telugu numbers
౧ 1
౨ 2
౩ 3
౪ 4
౫ 5
౬ 6
౭ 7
౮ 8
౯ 9


.group క
క ka
క (B k

.group ఖ
ఖ k#a
ఖ (B k#

.group గ
గ ga
గ (B g

.group ఘ
ఘ g#a
ఘ (B g#

.group ఙ
ఙ Na
ఙ (B N

.group చ
చ ca
చ (B c

.group ఛ
ఛ c#a
ఛ (B c#

.group జ
జ Ja
జ (B J

.group ఝ
ఝ J#a
ఝ (B J#

.group ఞ
ఞ n^a
ఞ (B n^

.group ట
ట t.a
ట (B t.

.group ఠ
ఠ t.#a
ఠ (B t.#

.group డ
డ d.a
డ (B d.

.group ఢ
ఢ d.#a
ఢ (B d.#

.group ణ
ణ n.a
ణ (B n.

.group త
త ta
త (B t

.group థ
థ t#a
థ (B t#

.group ద
ద da
ద (B d

.group ధ
ధ d#a
ధ (B d#

.group న
న na
న (B n

.group ప
ప pa
ప (B p

.group ఫ
ఫ p#a
ఫ (B p#

.group బ
బ ba
బ (B b

.group భ
భ b#a
భ (B b#

.group మ
మ ma
మ (B m

.group య
య ja
య (B j

.group ర
ర ra
ర (B r

.group ఱ
ఱ ra
ఱ (B r

.group ల
ల la
ల (B l

.group ళ
ళ l.a
ళ (B l.

.group వ
వ va
వ (B v

.group శ
శ S;a
శ (B S;

.group ష
ష s.a
ష (B s.

.group స
స sa
స (B s

.group హ
హ ha
హ (B h

.group ౘ
ౘ tsa
ౘ (B ts

.group ౙ
ౙ dza
ౙ (B dz

.group ౠ
ౠ ru

.group ౡ
ౡ l-


// Stand-alone vowels
.group అ
అ a

.group ఆ
ఆ a:

.group ఇ
ఇ i

.group ఈ
ఈ i:

.group ఉ
ఉ u

.group ఊ
ఊ u:

.group ఋ
ఋ ru

.group ఌ
ఌ l-

.group ఎ
ఎ e
_) ఎ ;e

.group ఏ
ఏ e:

.group ఐ
ఐ aI

.group ఒ
ఒ o

.group ఓ
ఓ o:

.group ఔ
ఔ aU



.group 0xe0b0 // characters which start with UTF-8 bytes: [e0 b0]

. ఁ n // candrabindu

ం m // anusvara (this should nasalize the vowel)

ః h // visarga

// combining vowel signs

ా a:

ి i


.group 0xe0b1 // characters which start with UTF-8 bytes: [e0 b1]

ీ i:

ు u

ూ u:

ృ ru

ౄ r-:

ె e

ే e:

ై aI

ొ o

ో o:

ౌ aU

్ // virama

ౕ : // length mark ??
ౖ : // ai length mark ??


.group 0xe0a4 // devanagari
0xe0a4 _^_HI // switch to hindi voice for devanagari characters
.group 0xe0a5 // devanagari
0xe0a5 _^_HI


.group
$ d.a:lar



+ 0
- 149
dictsource/tn_list View File

@@ -1,149 +0,0 @@
// maintainer: Sternly K Simon
// email:[email protected]
// setswana translation list
// This file is UTF-8 encoded.
// letters (just guesses)
a a
b bi:i:
c si:i:
d di:i:
e i:i:
f e:fo
g gi:i
h eitSi
j dZ'ei
k kei
l e:li
m 'emu
n 'eni
o o:o:
p p'i:i:
q kju
r aR3e
s 'e:si
t t'i:i:
u u:u:
v v'i:i:
x ek'ese
w dabolju
y w'ai
z z'e:ti
// numbers
_0 lef'e:la
_1 n'ngwe:
_2 p'edi
_3 t'a:R3o
_4 'n-ne
_5 l#'a:no
_6 th'ataro
_7 s'u:pa
_8 roba'bobedi
_9 roba'n'ngwe
_1X les'o:me
_2X mas'o:mepedi
_3X mas'o:me'ama:R3o
_4X mas'o:me'ama:ne
_5X mas'o:me'amal#'a:no
_6X mas'o:me'ath'ataro
_7X mas'o:me'a'S'u:pa
_8X mas'o:me'abo'roba'bedi:
_9X mas'o:me'a'roba'bo'ngwe
//number plurals
//numbers money wise
_0C lekX'olo
_1C0 lekX'olo
_2C _|makX'olopedi
_3C _|makX'olot'a:R3o
_4C _|makX'olo'n-ne
_5C _|makX'olol#'a:no
_6C _|makX'olo'th'ataro
_7C makX'oloS'u:pa
_8C makX'olo'a'ma'roba'bobedi:
_9C makX'olo'a'ma'roba'bo'n'ngwe
_0M1 's-'ikete
_1M1 _|'s-'ikete
_2M1 dik'etep'edi
_3M1 dik'etet'a:R3o
_4M1 dik'eten-ne
_5M1 dik'etel#'a:no
_6M1 dik'etets'e'th'ataro
_7M1 dik'eteSu:pa
_8M1 dik'ete'tse'bo'roba'bobedi
_9M1 dik'ete'tse'bo'roba'bo'ngwe
_1M2 dik'etetSelekX'o:lo
_2M2 dik'etetSemakX'o:lop'edi
_3M2 dik'etetSemakX'o:lot'a:R3o
_4M2 dik'etetSemakX'o:lon-ne
_5M2 dik'etetSemakX'o:lol#'ano
_6M2 dik'etetSemakX'o:lo'th'a'taro
_7M2 dik'etetSemakX'o:loSu:pa
_8M2 dik'etetSemakX'o:lo'bo'roba'bobedi:
_9M2 dik'etetSemakX'o:lo'bo'roba'bo'ngwe
_0M3 _|mili'oni // 1,000,000
_0M4 _|bili'oni
_dpt fe:Xelu'a:na
_0and _|na
bona $u $brk // they,them
yona $u+ $brk // it
wena $u+ $brk //you
nna $u+ $brk // i
yona $u+ $brk // him, her, it
ene $u+ $brk // him, her
lona $u+ //ploral to wena
rona $u+ // we,us
//number of chances/probabilities
//Days
//accents
_cir k'efa
lenna $u+ // and me
waka $u+ // mine or lying
gaka $u+ // mine
tshaka $u+ // plural of mine
dilo $u+ // things
mole $u+ // that
naya $u+ // give
//nouns
// prepositions
wa $u $brk // of
ya $u $brk // of,by they,them
la $u $brk // of
fa $u $brk // of
kwa $u $brk // at
mo $u $brk // in
fa $u $brk // in,on
kgolo $u $pause // dig
konte $u $pause // without
kwala $pause // by means of which
kwa $u $brk // with
// conjunctions
le $u $pause // and
kana $u $pause // or
ao $u $pause // or
mme $u $pause // but
ntswa $u $pause // although
kuwa $u $pause // shout

+ 0
- 147
dictsource/tn_rules View File

@@ -1,147 +0,0 @@
// maintainer: Sternly K Simon
// email:[email protected]
// setswana translation rules
// with support from Jonathan Duddington
//2-letter groupds that represent classes of setswana nouns
// mo, ba, mo, me, le, ma, se, di, lo, bo, go, fa, ko, mo
.group a
a a
_C) a a
_) a (C a
a (_ a
a (s a:
aa a:
.group b
b b
b B
.group c
c k
ch tS
.group d
d d
dh D
.group e
e e
ee e:
s) e i
.group f
f f
.group g
g g
_k) g g x2
gh Q
.group h
h h
hl l#
.group i
i i
ii i:
.group j
j J
.group k
k k
kh x
.group l
l l
.group m
m m
_) m m-
m (A m
K) m (@@ _|m
K) m (C m-
K) m (b@@ _|m
K) m (v@@ _|m
K) m (w@@ _|m
.group n
n n
_) n n-
n (A n
n (@@ n
ny n^
n (ch n^
n (j n^
ng' N
n (k N
_) n (k N-
_) n (k@@ N-
n (g N
_) n (g N-
_) n (g@@ N-
.group o
o o
oo o:
.group p
p p
.group q
q k
.group r
r r
r R
r R3
A) r (A R
C) r (A @-*
rr RR
.group s
s s
sh S
s (e s-
_t) se si:
.group t
t t
th T
tsen ts'e:n
tlh K
tl l#
.group u
u u
uu u:
_d) u u:
.group v
v v
.group w
w w
.group x
x ks
.group y
y j
.group z
z z
.group
$ dola
% asilimia
* n^ota
*) * (*
**
**) * (_ _::

+ 0
- 83
dictsource/tt_list View File

@@ -1,83 +0,0 @@
// This file is UTF8 encoded
// Spelling-to-phoneme rules for Tatar


// Letters
б be
в we
г ge
д de
е je
ё jo
ж Ze
җ Z;e
з ze
и i
й kVsk,A'i
к kA
л el
м em
н en
ң eN
о o:
ө W:
п pe
р er
с es
т te
у u
ү y
ф ef
х xA
һ he
ц tse
ч S;e
ш SA
щ SS;A
ъ kAlVnl,Vqbilges'e
ы V:
ь neS;k&l,ekbilges'e
э e|:
ю ju
я jA


// Numbers
_0 n'ul?
_1 b'er
_2 ik'e
_3 'WS;
_4 d'yrt
_5 b'iS
_6 Alt'V
_7 Z;id'e
_8 sig'ez
_9 tug'Vz
_10 'un
_11 unb'er
_12 unik'e
_13 un'WS;
_14 und'yrt
_15 unb'iS
_16 unAlt'V
_17 unZ;id'e
_18 unsig'ez
_19 untug'Vz
_2X egerm'e
_3X ut'Vz
_4X kVr'Vk
_5X ill'e
_6X Altm'VS
_7X Z;itm'eS
_8X siks'&n
_9X tuks'An
_0C j'Wz
_0M1 m'eN
_0M2 milli'on
_1M2 milli'on
_0M3 milli'Ard
_1M3 milli'Ard
_0M4 billi'on
_1M4 billi'on

_dpt _bWt,en

+ 0
- 134
dictsource/tt_rules View File

@@ -1,134 +0,0 @@
// This file is UTF8 encoded
// Spelling-to-phoneme rules for Tatar


.group а
а A

.group ә
ә &
әе e: // 'әнкәен'

.group б
б b

.group в
в w // [v] in Russian words

.group г
г g // changes to [Q] or [Q"]

.group д
д d

.group е
_) е je2 // changes to [je] or [jV]
е e

.group ё
ё jo

.group ж
ж Z

.group җ
җ Z;

.group з
з z

.group и
и i
A) и j

.group й
й j
K) й (K I // not next to a vowel

.group к
к k

.group л
л l

.group м
м m

.group н
н n
// н (к N
н (г N
н (х N

.group ң
ң N

.group о
о o

.group ө
ө W

.group п
п p

.group р
р r

.group с
с s

.group т
т t

.group у
у u // or w
A) у w

.group ү
ү y // or w
A) ү w

.group ф
ф f

.group х
х x

.group һ
һ h

.group ц
ц ts

.group ч
ч S;

.group ш
ш S

.group щ
щ SS;

.group ъ
ъ ?

.group ы
ы V
ый Vj // need a diphthong phoneme ??

.group ь
ь ?

.group э
э e

.group ю
ю ju2 // changes to ju or jy

.group я
я ja // changes to jA or j&

.group
$ dolAR


+ 0
- 43
dictsource/wo_list View File

@@ -1,43 +0,0 @@
// Spelling-to-phoneme rules for Wolof (Senegal, Gambia)
// This file is UTF-8 encoded

// Numbers
_0 t'us
_1 b'En:
_2 n^'a:R2
_3 n^'Et:
_4 n^'E:nt
_5 J'uR2o:m
_6 J'uR2o:mbEn:
_7 J'uR2o:mn^a:R2
_8 J'uR2o:mn^Et:
_9 J'uR2o:mn^E:nt
_1X f'uk:
_2X n^'a:R2fuk:
_3X n^'Et:fuk:
_4X n^'E:ntfuk:
_5X J'uR2o:mfuk:
_6X J'uR2o:mbEn:fuk:
_7X J'uR2o:mn^a:R2fuk:
_8X J'uR2o:mn^Et:fuk:
_9X J'uR2o:mn^E:ntfuk:
_0C t'e:me:R2
_1C t'e:me:R2
_0M1 J'un:i
_0M2 t'amndaR2E:t
_0and %ak

// Letter names


// Symbols


// Unstressed words


// Exceptions




+ 0
- 128
dictsource/wo_rules View File

@@ -1,128 +0,0 @@
// Spelling-to-phoneme rules for Wolof (Senegal, Gambia)
// This file is UTF-8 encoded

.group a
a a
aa a:

.group b
b b
bb b:

.group c
c c
cc c:

.group d
d d
dd d:

.group e
e E
ee E:

.group é
é e
ée e:
éé e:

.group ë
ë @
ëe @:
ëë @:

.group f
f f

.group g
g g
gg g:

.group h
h h

.group i
i i
ii i:

.group j
j J
j J:

.group k
k k
kk k:

.group l
l l

.group m
m m
mm m:
K) m (K m-

.group n
n n
nn n:
K) n (K n-

.group ŋ
ŋ N
ŋŋ N:
K) ŋ (K N-

.group ñ
ñ n^

.group o
o O
oo O:

.group ó
ó o
óo o:
óó o:

.group p
p p
pp p:

.group q
q q
qq q:

.group r
r R2
r (r R

.group s
s s
ss ss2

.group t
t t
tt t:

.group u
u u
uu u:

.group v
v v

.group w
w w

.group x
x x

.group y
y j

.group z
z z


.group
$ dOlaR2

+ 1
- 1
dictsource/zhy_rules View File

@@ -3,7 +3,7 @@
// condition ?1 Speak English letters as English words
// condition ?2 Speak English letter as jyutping romanisation

//voice=zh-yue // to find the voice for this dictionary

.group a
?1 a _^_EN

+ 12
- 16
docs/commands.html View File

@@ -29,22 +29,12 @@ Some Linux distrubitions (eg. SuSe 10) have version 19 of PortAudio which has a
The speak program may be compiled without using PortAudio, by removing the line<pre> #define USE_PORTAUDIO
</pre>in the file speech.h.
<p>&nbsp;<hr>
<h3>2.1.2 Use with KDE Text-to-Speech (KTTS)</h3>
To add to KDE-Text-to-Speech Manager (KTTSMgr), use it as a "Command" talker
with "command for speaking texts" set to:<br>
<strong>cat %f | espeak --stdin -w %w -v en -s190</strong>
<p>
In this example, "en" is the voice name, "190" is the speed.
<p>
Note:
<ul>
<li>When used by the KTTS system, I noticed a slight background hiss with the speech, which is not present when I use <strong>espeak</strong> directly from the command line. This was because KDE sound default was set to "8 bits" rather than 16 bits.<p>
<li>KTTSMgr breaks the text into sentences to pass to the speech engine, but it mistakenly assumes sentence breaks when dots follow abbreviations and therefore pauses after the dots in "eg. Mr. John B. Smith etc." Speaking a text file directly with <strong>espeak</strong> gives better results in this respect.

</ul>
<p>&nbsp;<hr>
<h3>2.1.3 Windows</h3>
The installer: <strong>setup_espeak.exe</strong> installs the SAPI5 version of eSpeak. It also installs a command line program <strong>espeak</strong> in the espeak directory.
<h3>2.1.2 Windows</h3>
The installer: <strong>setup_espeak.exe</strong> installs the SAPI5 version of eSpeak.
During installation you need to specify which voices you want to appear in SAPI5 voice menus.
<p>
It also installs a command line program <strong>espeak</strong> in the espeak program directory.

<p>&nbsp;<hr>
<h2>2.2 COMMAND OPTIONS</h2>
@@ -176,7 +166,13 @@ The same as <strong>--compile</strong>, but source line numbers from the *_rules
<p>
<dt><strong>--ipa</strong><br>
<dd>
Writes phonemes to stdout, using the International Phonetic Alphabet (IPA).
Writes phonemes to stdout, using the International Phonetic Alphabet (IPA).<br>
If a phoneme name contains more than one letter (eg. [tS]) an optional parameter can be used to distinguish
this from separate phonemes.
<br>
<code>--pho=1 </code> Use a tie character (U+0361) before subsequence letters.
<br>
<code>--pho=2 </code> Use a zero-width-joiner (U+200D) before subsequent letters.
<p>
<dt><strong>--path [="&lt;directory path&gt;"]</strong><br>
<dd>

+ 4
- 0
docs/dictionary.html View File

@@ -311,6 +311,10 @@ S&lt;number&gt; may be followed by additonal letters (eg. S2ei ). Some of these
<td><strong>f</strong></td>
<td>the suffix means the next word is likely to be a verb.</td>
</tr>
<tr>
<td><strong>m</strong></td>
<td>after this suffix has been removed, additional suffixes may be removed.</td>
</tr>
</tbody>
</table>
</ul>

+ 1
- 1
docs/docindex.html View File

@@ -46,7 +46,7 @@ The list of phoneme mnemonics for English, for use in the Pronunciation Dictiona
The tables of the phonemes used by each language, with their properties and sound production.
<h3><A href="intonation.html">Intonation</A></h3>
Different intonation "tunes" may be defined for different languages for clauses which end in full-stop, comma, question-mark, and exclamation-mark.
<h3><A href="speak_lib.h">eSpeak Libary API</A></h3>
<h3><A href="speak_lib.h">eSpeak Library API</A></h3>
API definition and header file for a shared library version of eSpeak.
<h3><A href="ssml.html">Markup tags</A></h3>
SSML (Speech Synthesis Markup Language) and HTML tags recognized by eSpeak.

+ 28
- 6
docs/phontab.html View File

@@ -228,31 +228,50 @@ where the <code>ELSE</code> and multiple <code>ELSE</code> parts are optional.
<p>
Multiple conditions may be joined with <code>AND</code> or <code>OR</code>, but not a mixture of <code>AND</code>s and <code>OR</code>s.
<p>
A condition may be preceded by <code>NOT</code>. For example:
<pre>
IF &lt;condition&gt; AND NOT &lt;condition&gt; THEN
&lt;statements&gt;
ENDIF
</pre>
<p>
<strong>Condition</strong>
Can be:
<ul>
<dl>
<dt>thisPh(&lt;attribute&gt;)
<dd>Test this current phoneme
<p>
<dt>prevPh(&lt;attribute&gt;)
<dd>Test the previous phoneme
<p>
<dt>prevPhW(&lt;attribute&gt;)
<dd>Test the previous phoneme, but only within the same word. Returns false if there is no previous phoneme in the word.
<p>
<dt>thisPh(&lt;attribute&gt;)
<dd>Test this current phoneme
<dt>prev2PhW(&lt;attribute&gt;)
<dd>Test the phoneme before the previous phoneme, but only within the same word. Returns false if it is not in this word.
<p>
<dt>nextPh(&lt;attribute&gt;)
<dd>Test the following phoneme
<p>
<dt>nextPhW(&lt;attribute&gt;)
<dd>Test the following phoneme, but only within the same word. Returns false if there is no following phoneme in the word.
<p>
<dt>next2Ph(&lt;attribute&gt;)
<dd>Test the phoneme after the next phoneme.
<p>
<dt>nextPhW(&lt;attribute&gt;)
<dd>Test the next phoneme, but only within the same word. Returns false if there is no following phoneme in the word.
<p>
<dt>next2PhW(&lt;attribute&gt;)
<dd>Test the phoneme after the next phoneme, but only within the same word. Returns false if not found before the word end.
<p>
<dt>next3PhW(&lt;attribute&gt;)
<dd>Test the third phoneme after the current phoneme, but only within the same word. Returns false if not found before the word end.
<p>
<dt>nextVowel(&lt;attribute&gt;)
<dd>Test the next vowel after the current phoneme, but only within the same word. Returns false if there is none.
<p>
<dt>prevVowel(&lt;attribute&gt;)
<dd>Test the previous vowel before the current phoneme, but only within the same word. Returns false if there is none.
<p>
<dt>PreVoicing()
<dd>This is used as part of the instructions for voiced stop consonants (eg. [d] [g]). If true then produce a voiced murmur before the stop.
<p>
@@ -263,6 +282,7 @@ Can be:
<strong>Attributes</strong>
<ul>
Note: Additional attributes could be added to eSpeak if needed.
<p>
<dl>
<dt>&lt;phoneme name&gt;
<dd>True if the phoneme has this phoneme name.
@@ -294,8 +314,10 @@ Note: Additional attributes could be added to eSpeak if needed.
<dt>isWordEnd
<dd>True if this is the final phoneme in a word.
<p>
<dt>isFirstVowel
<dt>isSecondVowel
<dt>isFinalVowel
<dd>True if this is the last vowel in a word.
<dd>True if this is the First, Second, or Last vowel in a word.
<p>
<dt>isAfterStress
<dd>True if this phoneme is after the stressed vowel in a word.

+ 27
- 1
docs/voices.html View File

@@ -17,6 +17,11 @@ The available voice files can be listed by:<pre>
espeak --voices
or
espeak --voices=&lt;language&gt;</pre>
also
<pre> espeak --voices=&lt;variant&gt;</pre>
Lists voice variants which can be applied to eSpeak voices.
<pre> espeak --voices=&lt;mbrola&gt;</pre>
Lists the Mbrola voices.
<hr>
<h3>5.2 Contents of Voice Files</h3>
The <strong>language</strong> attribute is mandatory. All the other attributes are optional.
@@ -141,6 +146,11 @@ don't have their own <strong>tone</strong> statement.
<dd>
These values give bandwidths of the noise peaks of the <strong>breath</strong> attribute. If <strong>breathw</strong> values are not given, then suitable default values will be used.
<p>
<dt>
<strong>speed &nbsp;&lt;value&gt;</strong><br>
<dd> Default value 100.<br>
Adjusts the speaking speed by a percentage of the default rate. This can be used if a language voice seems faster or slower compared to other voices.
<p>
</dl>
</ul>
<h4>Language Attributes</h4>
@@ -229,6 +239,22 @@ See <a href="dictionary.html">dictionary.html</a>.
The ISO 8859 character set number. (not all are implemented).
</dd>
<p>
<dt>
<strong>dictmin &nbsp;&lt;value&gt;</strong><br>
<dd>
Used for some languages to detect if additional language data is installed.
If the size of the compiled dictionary data for the language (the file <code>espeak-data/*_dict</code>) is less than
this size then a warning is given.
<p>
<dt>
<strong>alphabet2 &nbsp;&lt;alphabet&gt; &lt;language&gt;</strong><br>
<dd>
Used to specify a language to be used to speak words which are written in a non-native alphabet. eg:
<pre> alphabet2 cyr ru
</pre>
Alphabets names include: latin, cyr (cyrillic), ar (arabic). The default language for latin alphabet is English.
</dd>
<p>
Additional attributes are available to set various internal options which control how language is processed. These would normally be set in the program code rather than in a voice file.
</ul>
<hr>
@@ -240,7 +266,7 @@ speak command.
<dl>
<dt>
<strong>default</strong><br>
<dd> This voice is used if none is specified in the speak command. Copy your preferred voice to "default" so you can use the speak command without the need to specify a voice.</dd>
<dd> This voice is used if none is specified in the speak command. You can copy your preferred voice to "default" so you can use the speak command without the need to specify a voice.</dd>
</dl>
For a list of voices provided for English and other languages see <a href="languages.html">Languages</a>.


+ 17
- 0
espeak-data/voices/asia/ms View File

@@ -0,0 +1,17 @@
// Last updated: 14 October 2010, Jason Ong ([email protected])
name malay
language ms
gender male
phonemes id

translator id

stressLength 160 200 180 180 0 0 220 240
stressAmp 16 18 18 18 0 0 22 21
intonation 3 // Less intonation, and comma does not raise the pitch.

// Nuance - Peninsula Malaysia
// replace 3 a @ // change 'saya' to 'saye'
// (only the last phoneme of a word, only in unstressed syllables)
consonants 80 80

+ 1
- 1
espeak-data/voices/asia/pa View File

@@ -1,2 +1,2 @@
name punjabi-test
name punjabi
language pa

+ 2
- 3
espeak-data/voices/europe/an View File

@@ -1,4 +1,3 @@
name aragon
name aragonese
language an


gender male

+ 1
- 1
espeak-data/voices/europe/fr-be View File

@@ -1,4 +1,4 @@
name french (Belgium)
name french-Belgium
language fr-be
language fr 8
gender male

+ 1
- 1
espeak-data/voices/europe/nl View File

@@ -1,3 +1,3 @@
language nl
name dutch-test
name dutch
gender male

+ 3
- 0
espeak-data/voices/test/bn View File

@@ -0,0 +1,3 @@
name bengali
language bn
gender male

+ 1
- 1
espeak-data/voices/test/nci View File

@@ -1,4 +1,4 @@
name nahuatl - classical
name nahuatl-classical
language nci
gender male


+ 56
- 20
mkdictlist View File

@@ -8,28 +8,64 @@
import sys
import os

voices = set()
dictionaries = {}

# Map voice names to dictionaries when these do not match.
special_voices = {
'zh-yue': 'zhy',
}

def find_voices(path):
for filename in os.listdir(path):
voice_path = os.path.join(path, filename)
if os.path.isdir(voice_path):
if not filename in ['!v', 'mb']:
find_voices(voice_path)
else:
if filename in special_voices.keys():
voices.add(special_voices[filename])
else:
voices.add(filename)

find_voices('espeak-data/voices')

for filename in os.listdir('dictsource'):
if filename.endswith('_rules') or filename.endswith('_list') or filename.endswith('_listx'):
dic, cat = filename.split('_')
if not dic in dictionaries.keys():
dictionaries[dic] = []
dictionaries[dic].append('dictsource/%s' % filename)

print '##### dictionaries:'
print
print 'dictionaries: \\'
for n, name in enumerate(sorted(dictionaries.keys())):
if not name in ['bo']: # espeak fails to read these voices
if n == len(dictionaries.keys()) - 1:
print '\tespeak-data/%s_dict' % name
else:
print '\tespeak-data/%s_dict \\' % name
for name, files in sorted(dictionaries.items()):
print
print '%s: espeak-data/%s_dict' % (name, name)
print 'dictsource/%s_extra:' % name
print '\ttouch dictsource/%s_extra' % name
print 'espeak-data/%s_dict: src/espeak espeak-data/phontab %s dictsource/%s_extra' % (name, ' '.join(sorted(files)), name)
print '\tcd dictsource && ../src/espeak --compile=%s && cd ..' % name
if dic in voices:
if not dic in dictionaries.keys():
dictionaries[dic] = []
dictionaries[dic].append('dictsource/%s' % filename)

def write_dictionary_make_rules(f):
f.write('##### dictionaries:\n')
f.write('\n')
f.write('dictionaries: \\\n')
for n, name in enumerate(sorted(dictionaries.keys())):
if not name in ['bo']: # espeak fails to read these voices
if n == len(dictionaries.keys()) - 1:
f.write('\tespeak-data/%s_dict\n' % name)
else:
f.write('\tespeak-data/%s_dict \\\n' % name)
for name, files in sorted(dictionaries.items()):
f.write('\n')
f.write('%s: espeak-data/%s_dict\n' % (name, name))
f.write('dictsource/%s_extra:\n' % name)
f.write('\ttouch dictsource/%s_extra\n' % name)
f.write('espeak-data/%s_dict: src/espeak espeak-data/phontab %s dictsource/%s_extra\n' % (name, ' '.join(sorted(files)), name))
f.write('\tcd dictsource && ../src/espeak --compile=%s && cd ..\n' % name)

try:
filename = sys.argv[1]
except:
filename = None

if filename:
with open(filename, 'r') as f:
prelude = f.read().split('##### dictionaries:\n')[0]
with open(filename, 'w') as f:
f.write(prelude)
write_dictionary_make_rules(f)
else:
write_dictionary_make_rules(sys.stdout)

+ 40
- 2
phsource/mbrola/id1 View File

@@ -1,6 +1,5 @@

// CR1 doesn't like same phonemes twice
0 e E 5 e _
// ID1 and MS1 don't like same phonemes twice
0 s s 5 s _
0 ? k 5 k _
0 t t 5 t _
@@ -8,6 +7,10 @@
0 n n 5 n _
0 p p 5 p _
0 l/ l 5 l _
0 h h 5 h _
0 k k 5 k _
0 z z 5 z _
0 D D 5 z _

0 l/2 NULL 0 l
0 l/ NULL 0 l
@@ -28,10 +31,13 @@

0 a NULL 0 V
0 E NULL 0 e
0 E2 NULL 0 e
0 i NULL 0 I
0 o NULL 0 Q
0 O NULL 0 Q
0 u NULL 0 U
// 'id1' has phonemes OI aI aU


0 n^ NULL 0 nY
0 ? NULL 0 k
@@ -40,3 +46,35 @@
0 R NULL 0 r
0 x NULL 0 h

// some English phonemes
0 A: NULL 60 V r
0 A@ NULL 60 V r
0 eI NULL 0 e
0 oU NULL 60 Q U
0 u: NULL 0 U
0 i: NULL 0 I
0 I2 NULL 0 I
0 I# NULL 0 I
0 3 NULL 0 @
0 3: NULL 0 @
0 e@ NULL 0 e
0 i@ NULL 60 I @
0 i@3 NULL 60 I r
0 o@ NULL 60 Q @
0 O@ NULL 60 Q @
0 O: NULL 80 Q @
0 U@ NULL 60 U @
0 0 NULL 0 Q
0 a# NULL 0 @
0 aa NULL 0 V
0 @L NULL 50 @ l
0 aI @ 5 aI _
0 aI 3 5 aI _
0 aU @ 5 aU _
0 aI@ NULL 75 V @
0 aI3 NULL 75 V r
0 aU@ NULL 75 V @

0 Z NULL 60 z j
0 T NULL 0 t
0 D NULL 0 z

+ 76
- 19
phsource/ph_bengali View File

@@ -3,35 +3,92 @@
// Bengali, inherits from Hindi
//====================================================

phoneme @
vowel flag1 starttype #@ endtype #@
length 65

ChangeIfDiminished(@-)
IF nextPh(H) THEN
FMT(vowel/@_low)
phoneme V // inherent vowel, can be [O] or [o]
vowel flag1 starttype #o endtype #o
length 200

IF thisPh(isWordEnd) AND prevPhW(isNotVowel) AND prev2PhW(isVowel) THEN
ChangePhoneme(NULL)
ENDIF
FMT(vowel/@_bck)
endphoneme

IF thisPh(isFirstVowel) THEN
IF nextVowel(i) OR nextVowel(u) THEN
ChangePhoneme(o)
ENDIF
IF prevPhW(r) THEN
ChangePhoneme(o)
ENDIF
ENDIF

phoneme V
vowel flag1 starttype #@ endtype #@
length 180
CALL hi/V
ChangePhoneme(O)
endphoneme


phoneme a:
vowel long starttype #a endtype #a
length 230
phoneme a
vowel starttype #a endtype #a
length 225
FMT(vowel/aa_9)
endphoneme


phoneme o:
vowel long starttype #o endtype #o
length 220
FMT(vowel/o_2)
phoneme i
vowel starttype #i endtype #i
length 200
FMT(vowel/i_6)
endphoneme


phoneme u
vowel starttype #u endtype #u
length 200
FMT(vowel/u)
endphoneme


phoneme e
vowel starttype #e endtype #e
length 200
FMT(vowel/e)
endphoneme


phoneme &
vowel starttype #a endtype #a
length 200
FMT(vowel/&_2)
endphoneme


phoneme o
vowel starttype #o endtype #o
length 200
IF nextPhW(w) THEN
length 160
ENDIF
FMT(vowel/o)
endphoneme


phoneme O
vowel starttype #o endtype #o
length 200
FMT(vowel/oo_5)
endphoneme


phoneme tS
import_phoneme base/tS
endphoneme


phoneme tS#
import_phoneme base/tS
endphoneme


phoneme ~
virtual
endphoneme


+ 2
- 5
phsource/ph_english View File

@@ -145,10 +145,7 @@ phoneme @2 // Schwa, changes to I before a vowel
IF nextPh(isVowel) THEN
ChangePhoneme(I2)
ENDIF
IF nextPh(isVowel) THEN
FMT(vowel/ii_4)
ENDIF
FMT(vowel/@)
ChangePhoneme(@)
endphoneme


@@ -159,7 +156,7 @@ phoneme @5 // Schwa, changes to U before a vowel
IF nextPh(isVowel) OR nextPh(isPause) THEN
ChangePhoneme(U)
ENDIF
FMT(vowel/@)
ChangePhoneme(@)
endphoneme



+ 2
- 2
phsource/ph_english_sc View File

@@ -36,7 +36,7 @@ phoneme @2 // Schwa, changes to I before a vowel
IF nextPh(isVowel) THEN
ChangePhoneme(I2)
ENDIF
FMT(vowel/@_3)
ChangePhoneme(@)
endphoneme


@@ -47,7 +47,7 @@ phoneme @5 // Schwa, changes to U before a vowel
IF nextPh(isVowel) OR nextPh(isPause) THEN
ChangePhoneme(U)
ENDIF
FMT(vowel/@_3)
ChangePhoneme(@)
endphoneme



+ 3
- 3
phsource/ph_german View File

@@ -342,12 +342,12 @@ endphoneme



phoneme iR
phoneme iR // TEST "vier" = [f'iR] not successful
vowel starttype #i endtype #@
ipa iɐ
flag1
length 180
FMT(vdiph2/i@_2)
length 230
FMT(vdiph2/i@_3)
endphoneme



+ 51
- 1
phsource/ph_indonesian View File

@@ -3,6 +3,9 @@ phoneme @
vowel starttype #@ endtype #@
unstressed
length 140
IF prevPh(@) THEN
InsertPhoneme(_|)
ENDIF
FMT(vowel/@_low)
endphoneme

@@ -11,6 +14,9 @@ endphoneme
phoneme a
vowel starttype #a endtype #a
length 180
IF prevPh(a) THEN
InsertPhoneme(_|)
ENDIF
ChangeIfUnstressed(a/)
FMT(vowel/a)
endphoneme
@@ -19,6 +25,9 @@ endphoneme
phoneme E
vowel starttype #e endtype #e
length 180
IF prevPh(#e) THEN
InsertPhoneme(_|)
ENDIF
ChangeIfUnstressed(@)
FMT(vowel/e_mid)
endphoneme
@@ -26,6 +35,9 @@ endphoneme
phoneme E2 // as [E] but don't reduce to [@]
vowel starttype #e endtype #e
length 180
IF prevPh(#e) THEN
InsertPhoneme(_|)
ENDIF
FMT(vowel/e_mid)
endphoneme

@@ -33,6 +45,9 @@ endphoneme
phoneme e
vowel starttype #e endtype #e
length 180
IF prevPh(#e) THEN
InsertPhoneme(_|)
ENDIF
FMT(vowel/e)
endphoneme

@@ -40,7 +55,9 @@ endphoneme
phoneme i
vowel starttype #i endtype #i
length 180
IfNextVowelAppend(;)
IF prevPh(i) THEN
InsertPhoneme(_|)
ENDIF
FMT(vowel/i_6)
endphoneme

@@ -48,6 +65,9 @@ endphoneme
phoneme O
vowel starttype #o endtype #o
length 180
IF prevPh(#o) THEN
InsertPhoneme(_|)
ENDIF
FMT(vowel/oo)
endphoneme

@@ -55,6 +75,9 @@ endphoneme
phoneme o
vowel starttype #o endtype #o
length 180
IF prevPh(#o) THEN
InsertPhoneme(_|)
ENDIF
FMT(vowel/o)
endphoneme

@@ -62,6 +85,9 @@ endphoneme
phoneme u
vowel starttype #u endtype #u
length 180
IF prevPh(u) THEN
InsertPhoneme(_|)
ENDIF
FMT(vowel/u)
endphoneme

@@ -69,6 +95,12 @@ endphoneme
phoneme aI
vowel starttype #a endtype #i
length 240
IF prevPh(isVowel) THEN
InsertPhoneme(_|)
ENDIF
IF nextPh(isVowel) THEN
AppendPhoneme(_|)
ENDIF
FMT(vdiph/ai)
endphoneme

@@ -78,9 +110,27 @@ phoneme eI
FMT(vdiph/eei_2)
endphoneme

phoneme OI
vowel starttype #o endtype #i
length 240
IF prevPh(isVowel) THEN
InsertPhoneme(_|)
ENDIF
IF nextPh(isVowel) THEN
AppendPhoneme(_|)
ENDIF
FMT(vdiph/ooi)
endphoneme

phoneme aU
vowel starttype #a endtype #u
length 240
IF prevPh(isVowel) THEN
InsertPhoneme(_|)
ENDIF
IF nextPh(isVowel) THEN
AppendPhoneme(_|)
ENDIF
FMT(vdiph/au_4)
endphoneme


+ 34
- 30
phsource/ph_irish View File

@@ -6,17 +6,17 @@
phoneme @ // Schwa, but always unstressed
vowel starttype #@ endtype #@
unstressed
length 100
length 110
IF nextPh(i:) THEN
Length 70
Length 80
FMT(vwl_af/r@)
ENDIF
IF nextPh(I) THEN
Length 70
Length 80
FMT(vwl_af/r@)
ENDIF
IF nextPh(e:) THEN
Length 70
Length 80
FMT(vwl_af/r@)
ENDIF
FMT(vwl_af/@)
@@ -25,14 +25,14 @@ endphoneme

phoneme @/
vowel starttype #@ endtype #@
length 120
length 130
FMT(vowel/@)
endphoneme


phoneme a
vowel starttype #a endtype #a
length 150
length 165
FMT(vowel/a_4)
endphoneme

@@ -40,7 +40,7 @@ endphoneme
phoneme a#
vowel starttype #@ endtype #@
ipa ɐ
length 120
length 130
ChangeIfStressed(a)
FMT(vowel/a#_3)
endphoneme
@@ -48,13 +48,13 @@ endphoneme

phoneme E
vowel starttype #e endtype #e
length 140
length 155
FMT(vowel/e_mid)
endphoneme

phoneme E#
vowel starttype #@ endtype #@
length 120
length 130
ChangeIfStressed(E)
ChangePhoneme(@/)
endphoneme
@@ -62,27 +62,27 @@ endphoneme

phoneme I
vowel starttype #i endtype #i
length 120
length 130
FMT(vowel/ii_2)
endphoneme

phoneme i // non syllabic i for end of words
vowel starttype #i endtype #i
ipa iU+032F
length 40
length 45
FMT(vowel/ii_7)
endphoneme


phoneme O
vowel starttype #a endtype #@
length 140
length 155
FMT(vowel/V_4)
endphoneme

phoneme O#
vowel starttype #@ endtype #@
length 120
length 130
ChangeIfStressed(O)
ChangePhoneme(a#)
endphoneme
@@ -90,13 +90,13 @@ endphoneme

phoneme U
vowel starttype #u endtype #u
length 140
length 155
FMT(vowel/uu)
endphoneme

phoneme U#
vowel starttype #@ endtype #@
length 120
length 130
ChangeIfStressed(U)
ChangePhoneme(@/)
endphoneme
@@ -104,20 +104,20 @@ endphoneme
phoneme u1
vowel starttype #u endtype #u
ipa uU+0306
length 50
length 55
FMT(vowel/u)
endphoneme

phoneme 0
vowel starttype #a endtype #a
length 180
length 195
ipa A
FMT(vowel/aa_8)
endphoneme

phoneme 0#
vowel starttype #@ endtype #@
length 120
length 130
ChangeIfStressed(0)
ChangePhoneme(a#)
endphoneme
@@ -125,7 +125,7 @@ endphoneme
phoneme o:
vowel starttype #o endtype #o
length 190
length 210
FMT(vowel/o)
endphoneme

@@ -134,21 +134,21 @@ endphoneme

phoneme A:
vowel starttype #a endtype #a
length 200
length 220
FMT(vowel/aa_2)
endphoneme


phoneme e:
vowel starttype #e endtype #e
length 210
length 230
FMT(vowel/e)
endphoneme


phoneme i:
vowel starttype #i endtype #i
length 210
length 230
FMT(vowel/i)
endphoneme

@@ -157,7 +157,7 @@ endphoneme

phoneme u:
vowel starttype #u endtype #u
length 210
length 230
FMT(vowel/u_bck)
endphoneme

@@ -167,44 +167,44 @@ endphoneme

phoneme @U
vowel starttype #@ endtype #u
length 240
length 260
FMT(vdiph/@u_3)
endphoneme

phoneme i@
vowel starttype #i endtype #@
length 240
length 260
FMT(vdiph2/i@)
endphoneme

phoneme u@
vowel starttype #u endtype #@
length 240
length 260
FMT(vdiph2/u@)
endphoneme

phoneme aI
vowel starttype #a endtype #i
length 250
length 275
FMT(vdiph/ai)
endphoneme

phoneme aI#
vowel starttype #@ endtype #@
length 120
length 130
ChangeIfStressed(aI)
ChangePhoneme(a#)
endphoneme

phoneme aU
vowel starttype #a endtype #u
length 270
length 300
FMT(vdiph/au_4)
endphoneme

phoneme aU#
vowel starttype #@ endtype #@
length 120
length 130
ChangeIfStressed(aU)
FMT(vdiph/au_4)
endphoneme
@@ -237,3 +237,7 @@ phoneme ; // linking j, used between (i) vowels and a following vowel
ENDIF
endphoneme


phoneme eI
import_phoneme en/eI
endphoneme

+ 12
- 0
phsource/ph_portugal View File

@@ -133,6 +133,18 @@ phoneme w
endphoneme


phoneme x // [r] for Portugal
liquid
trill
ipa ʁ
lengthmod 7
Vowelin f1=0 f2=1500 -400 400 f3=-400 80
IF nextPh(isNotVowel) THEN
ChangePhoneme(r/)
ENDIF
FMT(vwl_fr/@R) addWav(r3/rx, 120)
endphoneme


phoneme R // for Portugal this is same the as [r]
import_phoneme pt/r

+ 23
- 18
phsource/ph_sinhala View File

@@ -6,7 +6,7 @@

phoneme @
vowel starttype #a endtype #a
length 130
length 150
FMT(vowel/@_low)
endphoneme

@@ -14,7 +14,7 @@ endphoneme
phoneme a
vowel long starttype #a endtype #a
ipa ɐ
length 130
length 150
ChangeIfNotStressed(@)
FMT(vowel/a#_2)
endphoneme
@@ -29,42 +29,42 @@ endphoneme

phoneme &
vowel starttype #e endtype #e
length 130
length 150
FMT(vowel/ee_6)
endphoneme


phoneme &:
vowel starttype #e endtype #e
length 270
length 300
FMT(vowel/ee_6)
endphoneme


phoneme e
vowel starttype #e endtype #e
length 130
length 150
FMT(vowel/e_mid)
endphoneme


phoneme e:
vowel starttype #e endtype #e
length 270
length 300
FMT(vowel/e_mid2)
endphoneme


phoneme i
vowel starttype #i endtype #i
length 130
length 150
FMT(vowel/i_6)
endphoneme


phoneme i:
vowel starttype #i endtype #i
length 270
length 300
FMT(vowel/i)
endphoneme

@@ -72,7 +72,7 @@ endphoneme

phoneme o
vowel starttype #o endtype #o
length 130
length 150
FMT(vowel/oo_1)
endphoneme

@@ -86,13 +86,13 @@ endphoneme

phoneme u
vowel starttype #u endtype #u
length 110
length 130
FMT(vowel/u_6)
endphoneme

phoneme u:
vowel starttype #u endtype #u
length 280
length 300
FMT(vowel/u_6)
endphoneme

@@ -100,13 +100,13 @@ endphoneme

phoneme aI
vowel long starttype #a endtype #i
length 280
length 300
FMT(vdiph/ai_8)
endphoneme

phoneme aU
vowel long starttype #a endtype #u
length 270
length 300
FMT(vdiph/au)
endphoneme

@@ -130,21 +130,26 @@ endphoneme
// temporary, map [n#] etc. to [n] etc.

phoneme m#
import_phoneme base/m
ipa U+1D50
CALL base/m
endphoneme

phoneme n#
import_phoneme base/n
ipa U+207F
CALL base/n
endphoneme

phoneme n.#
import_phoneme base/n.
ipa U+1DAF
CALL base/n.
endphoneme

phoneme n^#
import_phoneme base/n^
ipa U+1DAE
CALL base/n^
endphoneme

phoneme N#
import_phoneme base/N
ipa U+1D51
CALL base/N
endphoneme

+ 42
- 40
phsource/phonemes View File

@@ -1864,6 +1864,20 @@ include ph_georgian
phonemetable fa base
include ph_farsi

// experimental

phonemetable ko base
include ph_korean

phonemetable kl base
include ph_greenlandic

phonemetable am base
include ph_amhari

phonemetable si hi
include ph_sinhala


//**************************************************************************************
// The following lines are experimental, for future additions.
@@ -1882,61 +1896,49 @@ include ph_kinyarwanda
//phonemetable mn base
//include ph_mongolian

phonemetable prs base
include ph_dari
//phonemetable prs base
//include ph_dari

phonemetable sl sk
include ph_slovenian

phonemetable gd base
include ph_s_gaelic
//phonemetable gd base
//include ph_s_gaelic

phonemetable nso base
include ph_northern-sotho
//phonemetable nso base
//include ph_northern-sotho

phonemetable ht fr
include ph_haitian
//phonemetable ht fr
//include ph_haitian

phonemetable az tr
include ph_azerbaijani
//phonemetable az tr
//include ph_azerbaijani

phonemetable ak base
include ph_akan
//phonemetable ak base
//include ph_akan

phonemetable am base
include ph_amhari

phonemetable wo base
include ph_wolof

phonemetable dv hi
include ph_divehi

phonemetable te hi
include ph_telugu

phonemetable si hi
include ph_sinhala
//phonemetable wo base
//include ph_wolof

phonemetable tn base
include ph_setswana
//phonemetable dv hi
//include ph_divehi

//phonemetable te hi
//include ph_telugu

phonemetable mt base
include ph_maltese
//phonemetable tn base
//include ph_setswana

phonemetable bo hi
include ph_tibetan

phonemetable kk base
include ph_kazakh
//phonemetable mt base
//include ph_maltese

phonemetable tt base
include ph_tatar
//phonemetable bo hi
//include ph_tibetan

phonemetable ko base
include ph_korean
//phonemetable kk base
//include ph_kazakh

phonemetable kl base
include ph_greenlandic
//phonemetable tt base
//include ph_tatar


BIN
phsource/vdiph2/i@_3 View File


BIN
phsource/vowel/a View File


BIN
phsource/vowel/oo_5 View File


BIN
phsource/vwl_fr/trr View File


+ 1
- 1
platforms/big_endian/README View File

@@ -14,5 +14,5 @@ The 'phondata-manifest' file is produced by espeakedit when it compiles
the phoneme data. If it is not present here, find it in the espeak-data directory.

NOTE:
The format of espeak-data/phondata changed in eSpeak version 1.43. The utility
The format of espeak-data/phondata changed in eSpeak version 1.47. The utility
has been modified for this. [jonsd]

+ 22
- 13
platforms/windows/make_espeak.iss View File

@@ -1,8 +1,8 @@
; This is the script for "Inno Setup 5" to create the setup_espeak.exe installer for Windows
; This is the script for "Inno Setup 5" to create the setup_espeak.exe installer for Windows
[Setup]
AppName=eSpeak
AppVerName=eSpeak version 1.46.47
AppVerName=eSpeak version 1.47.01
AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details).
WindowVisible=yes
@@ -48,18 +48,24 @@ Root: HKLM; Subkey: "Software\Microsoft\Speech\PhoneConverters\Tokens\eSpeak"; F
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "af"; MessagesFile: "compiler:Languages\Afrikaans.isl"
Name: "bg"; MessagesFile: "compiler:Languages\Bulgarian.isl"
Name: "bs"; MessagesFile: "compiler:Languages\Bosnian.isl"
Name: "cs"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "da"; MessagesFile: "compiler:Languages\Danish.isl"
Name: "de"; MessagesFile: "compiler:Languages\German.isl"
Name: "el"; MessagesFile: "compiler:Languages\Greek.isl"
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "fa"; MessagesFile: "compiler:Languages\Farsi.isl"
Name: "fi"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "fr"; MessagesFile: "compiler:Languages\French.isl"
Name: "hi"; MessagesFile: "compiler:Languages\Hindi.islu"
Name: "hr"; MessagesFile: "compiler:Languages\Croatian.isl"
Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl"
Name: "id"; MessagesFile: "compiler:Languages\Indonesian-5.1.11.isl"
Name: "it"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "lv"; MessagesFile: "compiler:Languages\Latvian-1-5.1.11.isl"
Name: "ka"; MessagesFile: "compiler:Languages\Georgian.islu"
Name: "lv"; MessagesFile: "compiler:Languages\Latvian.isl"
Name: "ne"; MessagesFile: "compiler:Languages\Nepali.islu"
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "no"; MessagesFile: "compiler:Languages\Norwegian.isl"
Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl"
@@ -67,9 +73,9 @@ Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "ro"; MessagesFile: "compiler:Languages\Romanian.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "sk"; MessagesFile: "compiler:Languages\Slovak.isl"
Name: "sq"; MessagesFile: "compiler:Languages\Albanian-2-5.1.11.isl"
Name: "sr"; MessagesFile: "compiler:Languages\Serbian.isl"
Name: "tr"; MessagesFile: "compiler:Languages\Turkish.isl"
Name: "vi"; MessagesFile: "compiler:Languages\Vietnamese.isl"
Name: "zh"; MessagesFile: "compiler:Languages\ChineseSimp-12-5.1.11.isl"
[CustomMessages]
@@ -77,26 +83,29 @@ v1=Select which voices to install
v2=or press Enter to accept defaults
v3=Enter voice names, eg: (for Portuguese) pt, or with a variant, eg: pt+f3
bs.v1=Odaberite jezik kojeg želite instalirati
bs.v1=Odaberite jezik kojeg želite instalirati
bs.v2=ili pritisnite Enter za prihvat zadanih.
bs.v3=Upišite, npr. bs (za Bosanski) ili s varjantom: bs+f3
bs.v3=Upišite, npr. bs (za Bosanski) ili s varjantom: bs+f3
fr.v1=Sélectionnez les voix à installer
fr.v2=ou appuyez sur Entrée pour accepter les valeurs par défaut.
fr.v3=Entrez le nom des voix, ex : (pour le Français) fr, ou avec une variante ex : fr+f3
fr.v1=Sélectionnez les voix à installer
fr.v2=ou appuyez sur Entrée pour accepter les valeurs par défaut.
fr.v3=Entrez le nom des voix, ex : (pour le Français) fr, ou avec une variante ex : fr+f3
hr.v1=Odaberite jezik kojeg želite instalirati
hr.v1=Odaberite jezik kojeg želite instalirati
hr.v2=ili pritisnite Enter za prihvat zadanih.
hr.v3=Upišite, npr. hr (za Hrvatski) ili s varjantom: hr+f3
hr.v3=Upišite, npr. hr (za Hrvatski) ili s varjantom: hr+f3
pt.v1=Seleccione as vozes que pretende instalar
pt.v2=ou precione enter para aceitar as predefinidas.
pt.v3=Introduza os nomes das vozes, ex: (Brazil) pt (ou Portugal) pt-pt, ou com outras caracter?sticas, ex: pt+f3
sr.v1=Molimo vas da odaberete glasove, koje želite da instalirate
sr.v1=Molimo vas da odaberete glasove, koje želite da instalirate
sr.v2=ili pritisnite Enter za instalaciju podrazumevanih glasova.
sr.v3=Da odaberete glas, unesite ime glasa kojeg želite instalirati, na primer sr, ili sr+f3
sr.v3=Da odaberete glas, unesite ime glasa kojeg želite instalirati, na primer sr, ili sr+f3
ne.v1=भित�र�याउन चाहेको आवाजको चयन गर�न� होस� ।
ne.v2=अथवा यसमा निर�धारण गरि�को आवाजलाई नै चयन गर�ने हो भने ईन�टर क�ञ�जीलाई दबाउन� होस� ।
ne.v3=आवाजको नाम प�रविष�टी गर�न� होस� , जस�तै: नेपालीका लागि ne, अथवा स�वरको पनि चयन गर�ने हो भने ne+f3
[Code]
var

+ 58
- 57
platforms/windows/make_espeakedit.iss View File

@@ -1,57 +1,58 @@
[Setup]
AppName=eSpeakEdit
AppVerName=eSpeakEdit version 1.46.02
DefaultDirName={pf}\eSpeak
DefaultGroupName=eSpeak
OutputBaseFilename=setup_espeakedit
Compression=lzma
SolidCompression=yes
DirExistsWarning=no
ShowLanguageDialog=auto
[Icons]
Name: "{group}\espeakedit"; Filename: "{app}\espeakedit.exe"; WorkingDir: "{app}"; Flags: runmaximized
Name: "{group}\Uninstall espeakedit"; Filename: "{uninstallexe}"
[InstallDelete]
Type: filesandordirs; Name: "{app}\phsource\vowelcharts"
[Files]
Source: "espeakedit.exe"; DestDir: "{app}"
;Source: "dictsource\*"; DestDir: "{app}\dictsource"; Flags: recursesubdirs
Source: "espeakedit\*"; DestDir: "{app}\espeakedit"; Flags: recursesubdirs
Source: "phsource\*"; DestDir: "{app}\phsource"; Flags: recursesubdirs
Source: "docs\*"; DestDir: "{app}\docs"; Flags: recursesubdirs
Source: "License.txt"; DestDir: "{app}";
;Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "af"; MessagesFile: "compiler:Languages\Afrikaans.isl"
Name: "bs"; MessagesFile: "compiler:Languages\Bosnian.isl"
Name: "cs"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "de"; MessagesFile: "compiler:Languages\German.isl"
Name: "el"; MessagesFile: "compiler:Languages\Greek.isl"
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "fi"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "fr"; MessagesFile: "compiler:Languages\French.isl"
Name: "hr"; MessagesFile: "compiler:Languages\Croatian.isl"
Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl"
Name: "id"; MessagesFile: "compiler:Languages\Indonesian-5.1.11.isl"
Name: "it"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "lv"; MessagesFile: "compiler:Languages\Latvian-1-5.1.11.isl"
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "no"; MessagesFile: "compiler:Languages\Norwegian.isl"
Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl"
Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "ro"; MessagesFile: "compiler:Languages\Romanian.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "sk"; MessagesFile: "compiler:Languages\Slovak.isl"
;Name: "sq"; MessagesFile: "compiler:Languages\Albanian-2-5.1.11.isl"
Name: "sr"; MessagesFile: "compiler:Languages\Serbian.isl"
Name: "tr"; MessagesFile: "compiler:Languages\Turkish.isl"
Name: "zh"; MessagesFile: "compiler:Languages\ChineseSimp-12-5.1.11.isl"

[Setup]
AppName=eSpeakEdit
AppVerName=eSpeakEdit version 1.47.01
DefaultDirName={pf}\eSpeak
DefaultGroupName=eSpeak
OutputBaseFilename=setup_espeakedit
Compression=lzma
SolidCompression=yes
DirExistsWarning=no
ShowLanguageDialog=auto

[Icons]
Name: "{group}\espeakedit"; Filename: "{app}\espeakedit.exe"; WorkingDir: "{app}"; Flags: runmaximized
Name: "{group}\Uninstall espeakedit"; Filename: "{uninstallexe}"

[InstallDelete]
Type: filesandordirs; Name: "{app}\phsource\vowelcharts"
Type: filesandordirs; Name: "{app}\espeakedit"


[Files]
Source: "espeakedit.exe"; DestDir: "{app}"
;Source: "dictsource\*"; DestDir: "{app}\dictsource"; Flags: recursesubdirs
Source: "espeakedit\*"; DestDir: "{app}\espeakedit"; Flags: recursesubdirs
Source: "phsource\*"; DestDir: "{app}\phsource"; Flags: recursesubdirs
Source: "docs\*"; DestDir: "{app}\docs"; Flags: recursesubdirs
Source: "License.txt"; DestDir: "{app}";
;Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme


[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "af"; MessagesFile: "compiler:Languages\Afrikaans.isl"
Name: "bs"; MessagesFile: "compiler:Languages\Bosnian.isl"
Name: "cs"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "de"; MessagesFile: "compiler:Languages\German.isl"
Name: "el"; MessagesFile: "compiler:Languages\Greek.isl"
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "fi"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "fr"; MessagesFile: "compiler:Languages\French.isl"
Name: "hr"; MessagesFile: "compiler:Languages\Croatian.isl"
Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl"
Name: "id"; MessagesFile: "compiler:Languages\Indonesian-5.1.11.isl"
Name: "it"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "lv"; MessagesFile: "compiler:Languages\Latvian-1-5.1.11.isl"
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "no"; MessagesFile: "compiler:Languages\Norwegian.isl"
Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl"
Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "ro"; MessagesFile: "compiler:Languages\Romanian.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "sk"; MessagesFile: "compiler:Languages\Slovak.isl"
;Name: "sq"; MessagesFile: "compiler:Languages\Albanian-2-5.1.11.isl"
Name: "sr"; MessagesFile: "compiler:Languages\Serbian.isl"
Name: "tr"; MessagesFile: "compiler:Languages\Turkish.isl"
Name: "zh"; MessagesFile: "compiler:Languages\ChineseSimp-12-5.1.11.isl"


+ 1
- 0
platforms/windows/windows_cmd/src/speech.h View File

@@ -30,6 +30,7 @@
#define __WIN32__
#define NEED_WCSTOF
#define NEED_GETOPT
#define USE_MBROLA_LIB
#define PATHSEP '\\'
#define USE_PORTAUDIO

+ 1
- 1
src/Makefile.am View File

@@ -6,7 +6,7 @@ DATADIR=${PREFIX}/share/espeak-data

# remove -fno-exceptions if it causes problems with stdio library on some platforms (ARM)

RELEASE = 1.46
RELEASE = 1.47
SPEAK = speak
ESPEAK = espeak
ESPEAKEDIT = espeakedit

+ 15
- 5
src/compiledata.cpp View File

@@ -104,9 +104,8 @@ static keywtab_t k_conditions[] = {
{"next2PhW", tWHICH_PHONEME, 6},
{"nextVowel",tWHICH_PHONEME, 7},
{"prevVowel",tWHICH_PHONEME, 8},
// {"next2PhW", tWHICH_PHONEME, 0x800},

// {"numVowels", tTEST, 0x000},
{"next3PhW", tWHICH_PHONEME, 9},
{"prev2PhW", tWHICH_PHONEME, 10},

{"PreVoicing", tTEST, 0xf01},
{"KlattSynth", tTEST, 0xf02},
@@ -1051,8 +1050,13 @@ static wxString CompileAllDictionaries()
fclose(f_in);
}

LoadVoice(voicename,0);

if(LoadVoice(voicename,1) == NULL)
{
wxLogError(wxString::Format(_T("Can't find voice '%s' for dictionary '%s'"), wxString(voicename, wxConvLocal).c_str(), dictstr.c_str()));
report = report + dictstr + _T(" No Voice, ");
errors ++;
}
else
if((err = CompileDictionary(path_dsource, dictname,log,NULL,0)) > 0)
{
report = report + dictstr + wxString::Format(_T(" %d, "),err);
@@ -2742,6 +2746,7 @@ int CompilePhoneme(int compile_phoneme)
int count;
int c;
char *p;
int vowel_length_factor = 100; // for testing
char number_buf[12];
char ipa_buf[N_ITEM_STRING+1];
PHONEME_TAB phoneme_out2;
@@ -2844,6 +2849,11 @@ int CompilePhoneme(int compile_phoneme)

case i_SET_LENGTH:
value = NextItemMax(511);
if(phoneme_out->type == phVOWEL)
{
value = (value * vowel_length_factor)/100;
}

if(after_if == 0)
{
phoneme_out->std_length = value/2;

+ 5
- 5
src/compiledict.cpp View File

@@ -470,12 +470,12 @@ static int compile_line(char *linebuf, char *dict_line, int *hash)
}

ix = 0;
if(isdigit(*p))
if(IsDigit09(*p))
{
ix += (*p-'0');
p++;
}
if(isdigit(*p))
if(IsDigit09(*p))
{
ix = ix*10 + (*p-'0');
p++;
@@ -542,7 +542,7 @@ static int compile_line(char *linebuf, char *dict_line, int *hash)
case 1:
if((c == '-') && multiple_words)
{
if(isdigit(word[0]))
if(IsDigit09(word[0]))
{
multiple_numeric_hyphen = 1;
}
@@ -1156,7 +1156,7 @@ static void copy_rule_string(char *string, int &state)
sxflags |= SUFX_M;
break;
default:
if(isdigit(c))
if(IsDigit09(c))
value = (value*10) + (c - '0');
break;
}
@@ -1575,7 +1575,7 @@ static int compile_lettergroup(char *input, FILE *f_out)
char item_length[N_LETTERGP_ITEMS];

p = input;
if(!isdigit(p[0]) || !isdigit(p[1]))
if(!IsDigit09(p[0]) || !IsDigit09(p[1]))
{
fprintf(f_log,"%5d: Expected 2 digits after '.L'\n",linenum);
error_count++;

+ 12
- 9
src/dictionary.cpp View File

@@ -611,7 +611,7 @@ char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int
break; // # is subscript-h, but only for consonants

// ignore digits after the first character
if(!first && isdigit(c))
if(!first && IsDigit09(c))
continue;

if((c >= 0x20) && (c < 128))
@@ -1499,8 +1499,8 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,
else
{
// no long vowels or consonant clusters
if(vowel_count > 4)
stressed_syllable = vowel_count - 3;
if(vowel_count > 5)
stressed_syllable = vowel_count - 3; // more than 4 syllables
else
stressed_syllable = vowel_count - 1;
}
@@ -2698,7 +2698,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
{
if(tr->langopts.alt_alphabet == alphabet->offset)
{
sprintf(phonemes,"%c%s",phonSWITCH, tr->langopts.alt_alphabet_lang);
sprintf(phonemes,"%c%s",phonSWITCH, WordToString2(tr->langopts.alt_alphabet_lang));
return(0);
}
if(alphabet->flags & AL_WORDS)
@@ -2988,6 +2988,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
const char *word_end;
const char *word1;
int wflags = 0;
int lookup_symbol;
char word_buf[N_WORD_BYTES+1];
char dict_flags_buf[80];

@@ -2996,6 +2997,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
wflags = wtab->flags;
}

lookup_symbol = flags[1] & FLAG_LOOKUP_SYMBOL;
word1 = word;
if(tr->transpose_min > 0)
{
@@ -3182,9 +3184,9 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
continue;
}

if((dictionary_flags2 & FLAG_ATEND) && (word_end < translator->clause_end))
if((dictionary_flags2 & FLAG_ATEND) && (word_end < translator->clause_end) && (lookup_symbol==0))
{
// only use this pronunciation if it's the last word of the clause
// only use this pronunciation if it's the last word of the clause, or called from Lookup()
continue;
}

@@ -3196,7 +3198,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor

if((dictionary_flags2 & FLAG_SENTENCE) && !(translator->clause_terminator & CLAUSE_BIT_SENTENCE))
{
// only uis this clause is a sentence , i.e. terminator is {. ? !} not {, : :}
// only if this clause is a sentence , i.e. terminator is {. ? !} not {, : :}
continue;
}

@@ -3364,7 +3366,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f
if(((c = *word1++)==0) || (c == ' '))
break;

if((c=='.') && (length > 0) && (isdigit(word[length-1])))
if((c=='.') && (length > 0) && (IsDigit09(word[length-1])))
break; // needed for lang=hu, eg. "december 2.-ig"

word[length] = c;
@@ -3475,7 +3477,8 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f
int Lookup(Translator *tr, const char *word, char *ph_out)
{//===================================================
unsigned int flags[2];
flags[0] = flags[1] = 0;
flags[0] = 0;
flags[1] = FLAG_LOOKUP_SYMBOL;
char *word1 = (char *)word;
return(LookupDictList(tr, &word1, ph_out, flags, 0, NULL));
}

+ 15
- 4
src/espeak.cpp View File

@@ -128,13 +128,16 @@ void DisplayVoices(FILE *f_out, char *language)
const char *p;
int len;
int count;
int c;
int j;
const espeak_VOICE *v;
const char *lang_name;
char age_buf[12];
char buf[80];
const espeak_VOICE **voices;
espeak_VOICE voice_select;

static char genders[4] = {' ','M','F',' '};
static char genders[4] = {'-','M','F','-'};

if((language != NULL) && (language[0] != 0))
{
@@ -150,7 +153,7 @@ void DisplayVoices(FILE *f_out, char *language)
voices = espeak_ListVoices(NULL);
}

fprintf(f_out,"Pty Language Age/Gender VoiceName File Other Langs\n");
fprintf(f_out,"Pty Language Age/Gender VoiceName File Other Languages\n");

for(ix=0; (v = voices[ix]) != NULL; ix++)
{
@@ -168,8 +171,16 @@ void DisplayVoices(FILE *f_out, char *language)

if(count==0)
{
fprintf(f_out,"%2d %-12s%s%c %-17s %-11s ",
p[0],lang_name,age_buf,genders[v->gender],v->name,v->identifier);
for(j=0; j < sizeof(buf); j++)
{
// replace spaces in the name
if((c = v->name[j]) == ' ')
c = '_';
if((buf[j] = c) == 0)
break;
}
fprintf(f_out,"%2d %-12s%s%c %-20s %-13s ",
p[0],lang_name,age_buf,genders[v->gender],buf,v->identifier);
}
else
{

+ 42
- 30
src/numbers.cpp View File

@@ -608,7 +608,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
char ph_buf[80];
char ph_buf2[80];
char ph_alphabet[80];
char hexbuf[6];
char hexbuf[12];
static char pause_string[] = {phonPAUSE, 0};

ph_buf[0] = 0;
@@ -695,6 +695,9 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)

if(ph_buf[0] == 0)
{
if((al_offset != 0) && (al_offset == translator->langopts.alt_alphabet))
language = translator->langopts.alt_alphabet_lang;
else
if((alphabet != NULL) && (alphabet->language != 0) && !(al_flags & AL_NOT_LETTERS))
language = alphabet->language;
else
@@ -797,7 +800,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)

len = strlen(phonemes);

if(tr->langopts.accents & 2)
if(tr->langopts.accents & 2) // 'capital' before or after the word ?
sprintf(ph_buf2,"%c%s%s%s",0xff,ph_alphabet,ph_buf,capital);
else
sprintf(ph_buf2,"%c%s%s%s",0xff,ph_alphabet,capital,ph_buf); // the 0xff marker will be removed or replaced in SetSpellingStress()
@@ -877,6 +880,7 @@ void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars)
// Numbers

static char ph_ordinal2[12];
static char ph_ordinal2x[12];


static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB *wtab, int roman)
@@ -981,7 +985,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab)
flags[0] = 0;
flags[1] = 0;

if(((tr->langopts.numbers & NUM_ROMAN_CAPITALS) && !(wtab[0].flags & FLAG_ALL_UPPER)) || isdigit(word[-2]))
if(((tr->langopts.numbers & NUM_ROMAN_CAPITALS) && !(wtab[0].flags & FLAG_ALL_UPPER)) || IsDigit09(word[-2]))
return(0); // not '2xx'

word_start = word;
@@ -1020,7 +1024,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab)
n_digits++;
}

if(isdigit(word[0]))
if(IsDigit09(word[0]))
return(0); // eg. 'xx2'

acc += prev;
@@ -1303,7 +1307,11 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
if(control & 4)
{
sprintf(string,"_%d%cx",value,ord_type); // LANG=hu, special word for 1. 2. when there are no higher digits
found = Lookup(tr, string, ph_digits);
if((found = Lookup(tr, string, ph_digits)) != 0)
{
if(ph_ordinal2x[0] != 0)
strcpy(ph_ordinal, ph_ordinal2x); // alternate pronunciation (lang=an)
}
}
if(found == 0)
{
@@ -1363,8 +1371,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
else
{

if((is_ordinal) &&
((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)))
if(is_ordinal)
{
sprintf(string,"_%dX%c", tens, ord_type);
if(Lookup(tr, string, ph_tens) != 0)
@@ -1458,7 +1465,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out
{
Lookup(tr, "_0and", ph_and);

if((is_ordinal) && (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL))
if((is_ordinal) && (tr->langopts.numbers2 & NUM2_ORDINAL_NO_AND))
ph_and[0] = 0;

if(tr->langopts.numbers & NUM_SWAP_TENS)
@@ -1607,9 +1614,9 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null
}

if(tr->langopts.numbers2 & 0x200)
sprintf(ph_thousands,"%s%s",ph_10T,ph_digits); // say "thousands" before its number, not after
sprintf(ph_thousands,"%s%c%s%c",ph_10T,phonEND_WORD,ph_digits,phonEND_WORD); // say "thousands" before its number, not after
else
sprintf(ph_thousands,"%s%s",ph_digits,ph_10T);
sprintf(ph_thousands,"%s%c%s%c",ph_digits,phonEND_WORD,ph_10T,phonEND_WORD);

hundreds %= 10;
if((hundreds == 0) && (say_zero_hundred == 0))
@@ -1742,7 +1749,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null
}
}

sprintf(ph_out,"%s%s%s",buf1,ph_hundred_and,buf2);
sprintf(ph_out,"%s%s%c%s",buf1,ph_hundred_and,phonEND_WORD,buf2);

return(0);
} // end of LookupNum3
@@ -1753,12 +1760,12 @@ bool CheckThousandsGroup(char *word, int group_len)
// Is this a group of 3 digits which looks like a thousands group?
int ix;

if(isdigit(word[group_len]) || isdigit(-1))
if(IsDigit09(word[group_len]) || IsDigit09(-1))
return(false);

for(ix=0; ix < group_len; ix++)
{
if(!isdigit(word[ix]))
if(!IsDigit09(word[ix]))
return(false);
}
return(true);
@@ -1790,6 +1797,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
int suffix_ix;
int skipwords = 0;
int group_len;
int len;
char *p;
char string[32]; // for looking up entries in **_list
char buf1[100];
@@ -1808,7 +1816,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
digit_lookup = buf_digit_lookup;
number_control = control;

for(ix=0; isdigit(word[ix]); ix++) ;
for(ix=0; IsDigit09(word[ix]); ix++) ;
n_digits = ix;
value = this_value = atoi(word);

@@ -1817,14 +1825,14 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
group_len = 4;

// is there a previous thousands part (as a previous "word") ?
if((n_digits == group_len) && (word[-2] == tr->langopts.thousands_sep) && isdigit(word[-3]))
if((n_digits == group_len) && (word[-2] == tr->langopts.thousands_sep) && IsDigit09(word[-3]))
{
prev_thousands = 1;
}
else if((tr->langopts.thousands_sep == ' ') || (tr->langopts.numbers & NUM_ALLOW_SPACE))
{
// thousands groups can be separated by spaces
if((n_digits == 3) && !(wtab->flags & FLAG_MULTIPLE_SPACES) && isdigit(word[-2]))
if((n_digits == 3) && !(wtab->flags & FLAG_MULTIPLE_SPACES) && IsDigit09(word[-2]))
{
prev_thousands = 1;
}
@@ -1846,7 +1854,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
}
}

if((word[ix] == '.') && !isdigit(word[ix+1]) && !isdigit(word[ix+2]) && !(wtab[1].flags & FLAG_NOSPACE))
if((word[ix] == '.') && !IsDigit09(word[ix+1]) && !IsDigit09(word[ix+2]) && !(wtab[1].flags & FLAG_NOSPACE))
{
// remove dot unless followed by another number
word[ix] = 0;
@@ -1875,7 +1883,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
{
ordinal = 2;
}
else if(!isdigit(suffix[0])) // not _#9 (tab)
else if(!IsDigit09(suffix[0])) // not _#9 (tab)
{
sprintf(string,"_#%s",suffix);
if(Lookup(tr, string, ph_ordinal2))
@@ -1884,6 +1892,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
ordinal = 2;
flags[0] |= FLAG_SKIPWORDS;
skipwords = 1;
sprintf(string,"_x#%s",suffix);
Lookup(tr, string, ph_ordinal2x); // is there an alternate pronunciation?
}
}
}
@@ -1898,7 +1908,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned

if((word[0] == '0') && (prev_thousands == 0) && (word[1] != ' ') && (word[1] != tr->langopts.decimal_sep))
{
if((n_digits == 2) && (word[3] == ':') && isdigit(word[5]) && isspace(word[7]))
if((n_digits == 2) && (word[3] == ':') && IsDigit09(word[5]) && isspace(word[7]))
{
// looks like a time 02:30, omit the leading zero
}
@@ -1967,7 +1977,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
}
}

if((word[n_digits] == tr->langopts.decimal_sep) && isdigit(word[n_digits+1]))
if((word[n_digits] == tr->langopts.decimal_sep) && IsDigit09(word[n_digits+1]))
{
// this "word" ends with a decimal point
Lookup(tr, "_dpt", ph_append);
@@ -2012,8 +2022,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
char *p2;
// look for combinations of the number with the next word
p = word;
while(isdigit(p[1])) p++; // just use the last digit
if(isdigit(p[-1]))
while(IsDigit09(p[1])) p++; // just use the last digit
if(IsDigit09(p[-1]))
{
p2 = p - 1;
if(LookupDictList(tr, &p2, buf_digit_lookup, flags, FLAG_SUFX, wtab)) // lookup 2 digits
@@ -2066,9 +2076,9 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned

LookupNum3(tr, value, ph_buf, suppress_null, thousandplex, prev_thousands | ordinal | decimal_point);
if((thousandplex > 0) && (tr->langopts.numbers2 & 0x200))
sprintf(ph_out,"%s%s%s%s",ph_zeros,ph_append,ph_buf2,ph_buf); // say "thousands" before its number
sprintf(ph_out,"%s%s%c%s%s",ph_zeros,ph_append,phonEND_WORD,ph_buf2,ph_buf); // say "thousands" before its number
else
sprintf(ph_out,"%s%s%s%s",ph_zeros,ph_buf2,ph_buf,ph_append);
sprintf(ph_out,"%s%s%s%c%s",ph_zeros,ph_buf2,ph_buf,phonEND_WORD,ph_append);


while(decimal_point)
@@ -2076,7 +2086,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
n_digits++;

decimal_count = 0;
while(isdigit(word[n_digits+decimal_count]))
while(IsDigit09(word[n_digits+decimal_count]))
decimal_count++;

// if(decimal_count > 1)
@@ -2095,7 +2105,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
decimal_count--;
n_digits++;
}
if((decimal_count <= max_decimal_count) && isdigit(word[n_digits]))
if((decimal_count <= max_decimal_count) && IsDigit09(word[n_digits]))
{
LookupNum3(tr, atoi(&word[n_digits]), buf1, 0,0,0);
strcat(ph_out,buf1);
@@ -2146,19 +2156,20 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
}
}

while(isdigit(c = word[n_digits]) && (strlen(ph_out) < (N_WORD_PHONEMES - 10)))
while(IsDigit09(c = word[n_digits]) && (strlen(ph_out) < (N_WORD_PHONEMES - 10)))
{
// speak any remaining decimal fraction digits individually
value = word[n_digits++] - '0';
LookupNum2(tr, value, 2, buf1);
strcat(ph_out,buf1);
len = strlen(ph_out);
sprintf(&ph_out[len],"%c%s", phonEND_WORD, buf1);
}

// something after the decimal part ?
if(Lookup(tr, "_dpt2", buf1))
strcat(ph_out,buf1);

if((c == tr->langopts.decimal_sep) && isdigit(word[n_digits+1]))
if((c == tr->langopts.decimal_sep) && IsDigit09(word[n_digits+1]))
{
Lookup(tr, "_dpt", buf1);
strcat(ph_out,buf1);
@@ -2178,7 +2189,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' '))
utf8_in(&next_char,p);

if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0)))
if(!iswalpha(next_char) && (thousands_exact==0))
// if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0)))
strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc.
}


+ 7
- 4
src/phonemelist.cpp View File

@@ -124,6 +124,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
int alternative;
int delete_count;
int word_start;
int inserted;
PHONEME_DATA phdata;

int n_ph_list3;
@@ -341,9 +342,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
{
plist3 = &ph_list3[j];

if(plist3->sourceix != 0)
word_start = j;

inserted = 0;
if(insert_ph != 0)
{
// we have a (linking) phoneme which we need to insert here
@@ -374,10 +373,14 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
ph = phoneme_tab[insert_ph];
plist3->ph = ph;
insert_ph = 0;
inserted = 1; // don't insert the same phoneme repeatedly
}
else
{
// otherwise get the next phoneme from the list
if(plist3->sourceix != 0)
word_start = j;

ph = phoneme_tab[plist3->phcode];
plist3[0].ph = ph;

@@ -394,7 +397,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)

InterpretPhoneme(tr, 0x100, plist3, &phdata, &worddata);

if((alternative = phdata.pd_param[pd_INSERTPHONEME]) > 0)
if(((alternative = phdata.pd_param[pd_INSERTPHONEME]) > 0) && (inserted == 0))
{
// PROBLEM: if we insert a phoneme before a vowel then we loose the stress.
PHONEME_TAB *ph2;

+ 2
- 2
src/readclause.cpp View File

@@ -1292,10 +1292,10 @@ static int attrnumber(const wchar_t *pw, int default_value, int type)
{//==================================================================
int value = 0;

if((pw == NULL) || !isdigit(*pw))
if((pw == NULL) || !IsDigit09(*pw))
return(default_value);

while(isdigit(*pw))
while(IsDigit09(*pw))
{
value = value*10 + *pw++ - '0';
}

+ 28
- 20
src/speak.cpp View File

@@ -160,13 +160,16 @@ void DisplayVoices(FILE *f_out, char *language)
const char *p;
int len;
int count;
int c;
int j;
const espeak_VOICE *v;
const char *lang_name;
char age_buf[12];
char buf[80];
const espeak_VOICE **voices;
espeak_VOICE voice_select;

static char genders[4] = {' ','M','F',' '};
static char genders[4] = {'-','M','F','-'};

if((language != NULL) && (language[0] != 0))
{
@@ -182,7 +185,7 @@ void DisplayVoices(FILE *f_out, char *language)
voices = espeak_ListVoices(NULL);
}

fprintf(f_out,"Pty Language Age/Gender VoiceName File Other Langs\n");
fprintf(f_out,"Pty Language Age/Gender VoiceName File Other Languages\n");

for(ix=0; (v = voices[ix]) != NULL; ix++)
{
@@ -200,8 +203,16 @@ void DisplayVoices(FILE *f_out, char *language)

if(count==0)
{
fprintf(f_out,"%2d %-12s%s%c %-17s %-11s ",
p[0],lang_name,age_buf,genders[v->gender],v->name,v->identifier);
for(j=0; j < sizeof(buf); j++)
{
// replace spaces in the name
if((c = v->name[j]) == ' ')
c = '_';
if((buf[j] = c) == 0)
break;
}
fprintf(f_out,"%2d %-12s%s%c %-20s %-13s ",
p[0],lang_name,age_buf,genders[v->gender],buf,v->identifier);
}
else
{
@@ -750,11 +761,22 @@ int main (int argc, char **argv)
init_path(argv[0],data_path);
initialise();

if(voicename[0] == 0)
strcpy(voicename,"default");

if(flag_compile)
if(SetVoiceByName(voicename) != EE_OK)
{
LoadVoice(voicename,5);
memset(&voice_select,0,sizeof(voice_select));
voice_select.languages = voicename;
if(SetVoiceByProperties(&voice_select) != EE_OK)
{
fprintf(stderr,"%svoice '%s'\n",err_load,voicename);
exit(2);
}
}

if(flag_compile)
{
#ifdef PLATFORM_DOS
char path_dsource[sizeof(path_home)+20];
strcpy(path_dsource,path_home);
@@ -776,20 +798,6 @@ int main (int argc, char **argv)
}


if(voicename[0] == 0)
strcpy(voicename,"default");

if(SetVoiceByName(voicename) != EE_OK)
{
memset(&voice_select,0,sizeof(voice_select));
voice_select.languages = voicename;
if(SetVoiceByProperties(&voice_select) != EE_OK)
{
fprintf(stderr,"%svoice '%s'\n",err_load,voicename);
exit(2);
}
}

SetParameter(espeakRATE,speed,0);
SetParameter(espeakVOLUME,amp,0);
SetParameter(espeakCAPITALS,option_capitals,0);

+ 18
- 2
src/synthdata.cpp View File

@@ -35,8 +35,8 @@
#include "translate.h"
#include "wave.h"

const char *version_string = "1.46.53 16.Mar.13";
const int version_phdata = 0x014640;
const char *version_string = "1.47.03c 23.Mar.13";
const int version_phdata = 0x014701;

int option_device_number = -1;
FILE *f_logespeak = NULL;
@@ -615,6 +615,7 @@ static int CountVowelPosition(PHONEME_LIST *plist)
static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist, USHORT *p_prog, WORD_PH_DATA *worddata)
{//========================================================================================================================
int which;
int ix;
unsigned int data;
int instn;
int instn2;
@@ -705,6 +706,21 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
return(false); // no previous vowel
plist = &(worddata->prev_vowel);
break;

case 9: // next3PhW
for(ix=1; ix<=3; ix++)
{
if(plist[ix].sourceix)
return(false);
}
plist = &plist[3];
break;

case 10: // prev2PhW
if((plist[0].sourceix) || (plist[-1].sourceix))
return(false);
plist-=2;
break;
}

if((which == 0) || (which == 5))

+ 28
- 9
src/tr_languages.cpp View File

@@ -103,6 +103,19 @@ ALPHABET alphabets [] = {
};


ALPHABET *AlphabetFromName(const char *name)
{//==========================================
ALPHABET *alphabet;

for(alphabet=alphabets; alphabet->name != NULL; alphabet++)
{
if(strcmp(name, &alphabet->name[1]) == 0)
return(alphabet);
}
return(NULL);
}


ALPHABET *AlphabetFromChar(int c)
{//===============================
// Find the alphabet from a character.
@@ -276,8 +289,8 @@ static const char transpose_map_latin[] = {
tr->langopts.param2[LOPT_BRACKET_PAUSE] = 2; // pauses when announcing bracket names
tr->langopts.max_initial_consonants = 3;
tr->langopts.replace_chars = NULL;
tr->langopts.ascii_language = ""; // Non-Latin alphabet languages, use this language to speak Latin words, default is English
tr->langopts.ascii_language[0] = 0; // Non-Latin alphabet languages, use this language to speak Latin words, default is English
tr->langopts.alt_alphabet_lang = L('e','n');

SetLengthMods(tr,201);
// tr->langopts.length_mods = length_mods_en;
@@ -526,9 +539,10 @@ Translator *SelectTranslator(const char *name)
tr->langopts.stress_flags = S_MID_DIM | S_FINAL_DIM; // use 'diminished' for unstressed final syllable
tr->letter_bits_offset = OFFSET_BENGALI;
SetIndicLetters(tr); // call this after setting OFFSET_BENGALI
SetLetterBitsRange(tr,LETTERGP_B,0x01,0x01); // candranindu
SetLetterBitsRange(tr,LETTERGP_F,0x3e,0x4c); // vowel signs, but not virama

tr->langopts.numbers = 0x1;
tr->langopts.numbers = NUM_SWAP_TENS;
tr->langopts.break_numbers = 0x24924aa8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi
}
break;
@@ -666,7 +680,7 @@ Translator *SelectTranslator(const char *name)
tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels

tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA;
tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL; // variant form of numbers before thousands
tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; // variant form of numbers before thousands

if(name2 == L_grc)
{
@@ -720,7 +734,7 @@ Translator *SelectTranslator(const char *name)
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_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_AFTER;
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL;
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND;

if(name2 == L('c','a'))
{
@@ -732,7 +746,7 @@ Translator *SelectTranslator(const char *name)
if(name2 == L('a','n'))
{
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.numbers2 = 0;
tr->langopts.numbers2 = NUM2_ORDINAL_NO_AND;
}
else
if(name2 == L_pap)
@@ -828,6 +842,7 @@ Translator *SelectTranslator(const char *name)
{
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.numbers = 1;
tr->langopts.accents = 2; // 'capital' after letter name
}
break;

@@ -960,6 +975,7 @@ SetLengthMods(tr,3); // all equal
break;

case L('i','d'): // Indonesian
case L('m','s'): // Malay
{
static const short stress_lengths_id[8] = {160, 200, 180, 180, 0, 0, 220, 240};
static const unsigned char stress_amps_id[8] = {16,18, 18,18, 20,22, 22,21 };
@@ -1054,7 +1070,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.numbers = NUM_VIGESIMAL | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED |NUM_OMIT_1_THOUSAND | NUM_DFRACTION_5 | NUM_ROMAN;

tr->langopts.alt_alphabet = OFFSET_CYRILLIC;
tr->langopts.alt_alphabet_lang = "ru";
tr->langopts.alt_alphabet_lang = L('r','u');
}
break;

@@ -1084,6 +1100,7 @@ SetLengthMods(tr,3); // all equal

case L('k','l'): // Greenlandic
{
SetupTranslator(tr,stress_lengths_equal,stress_amps_equal);
tr->langopts.stress_rule = 12;
tr->langopts.stress_flags = S_NO_AUTO_2;
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;
@@ -1263,7 +1280,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_INITIAL_2 | S_PRIORITY_STRESS;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_DFRACTION_2 | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_ROMAN;
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS;
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS | NUM2_ORDINAL_NO_AND;
SetLetterVowel(tr,'y');
ResetLetterBits(tr,0x2);
SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y
@@ -1296,7 +1313,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words. Need to allow "bw'" prefix
tr->langopts.numbers = NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_DFRACTION_2 | NUM_AND_HUNDRED;
tr->langopts.numbers2 = 0x200; // say "thousands" before its number
}
@@ -1413,6 +1430,8 @@ SetLengthMods(tr,3); // all equal
tr->langopts.vowel_pause = 1;
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.max_initial_consonants = 4; // for example: mwngi


tr->langopts.numbers = NUM_AND_UNITS | NUM_HUNDRED_AND | NUM_SINGLE_AND | NUM_OMIT_1_HUNDRED;
tr->langopts.break_numbers = 0x49249268; // for languages which have numbers for 100,000 and 1,000,000

+ 7
- 6
src/translate.cpp View File

@@ -378,6 +378,7 @@ void SetLengthMods(Translator *tr, int value)
}



int IsAlpha(unsigned int c)
{//========================
// Replacement for iswalph() which also checks for some in-word symbols
@@ -433,8 +434,8 @@ int IsAlpha(unsigned int c)
return(0);
}

static int IsDigit09(unsigned int c)
{//=========================
int IsDigit09(unsigned int c)
{//============================
if((c >= '0') && (c <= '9'))
return(1);
return(0);
@@ -971,7 +972,7 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt
}
}
}
else if((found==0) && (dictionary_flags[0] & FLAG_SKIPWORDS))
else if((found==0) && (dictionary_flags[0] & FLAG_SKIPWORDS) && !(dictionary_flags[0] & FLAG_ABBREV))
{
// grouped words, but no translation. Join the words with hyphens.
wordx = word1;
@@ -2315,10 +2316,10 @@ static int EmbeddedCommand(unsigned int &source_index)
source_index++;
}

if(isdigit(source[source_index]))
if(IsDigit09(source[source_index]))
{
value = atoi(&source[source_index]);
while(isdigit(source[source_index]))
while(IsDigit09(source[source_index]))
source_index++;
}

@@ -3335,7 +3336,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre

while(pn < &number_buf[sizeof(number_buf)-20])
{
if(!isdigit(c = *pw++) && (c != tr->langopts.decimal_sep))
if(!IsDigit09(c = *pw++) && (c != tr->langopts.decimal_sep))
break;

*pn++ = c;

+ 7
- 2
src/translate.h View File

@@ -83,6 +83,7 @@
#define FLAG_STEM 0x10000 // must have a suffix
#define FLAG_ATEND 0x20000 /* use this pronunciation if at end of clause */
#define FLAG_ATSTART 0x40000 // use this pronunciation if at start of clause
#define FLAG_LOOKUP_SYMBOL 0x40000000 // to indicate called from Lookup()

#define BITNUM_FLAG_ALLCAPS 0x2a
#define BITNUM_FLAG_HYPHENATED 0x2c
@@ -502,6 +503,7 @@ typedef struct {
#define NUM2_THOUSANDS_VAR4 0x100
#define NUM2_THOUSANDS_VAR5 0x140

#define NUM2_ORDINAL_NO_AND 0x800
#define NUM2_MULTIPLE_ORDINAL 0x1000
#define NUM2_NO_TEEN_ORDINALS 0x2000
#define NUM2_MYRIADS 0x4000
@@ -510,6 +512,7 @@ typedef struct {
// bits 1-4 use variant form of numbers before thousands,millions,etc.
// bits 6-8 use different forms of thousand, million, etc (M MA MB)
// bit9=(LANG=rw) say "thousand" and "million" before its number, not after
// bit11=(LANG=es,an) don't say 'and' between tens and units for ordinal numbers
// bit12=(LANG=el,es) use ordinal form of hundreds and tens as well as units
// bit13=(LANG=pt) don't use 11-19 numbers to make ordinals
// bit14=(LANG=ko) use myriads (groups of 4 digits) not thousands (groups of 3)
@@ -542,9 +545,9 @@ typedef struct {
int testing; // testing options: bit 1= specify stressed syllable in the form: "outdoor/2"
int listx; // compile *_listx after *list
const unsigned int *replace_chars; // characters to be substitutes
const char *ascii_language; // switch to this language for Latin characters
char ascii_language[8]; // switch to this language for Latin characters
int alt_alphabet; // offset for another language to recognize
const char *alt_alphabet_lang; // language for the alt_alphabet
int alt_alphabet_lang; // language for the alt_alphabet
int max_lengthmod;
int lengthen_tonic; // lengthen the tonic syllable
int suffix_add_e; // replace a suffix (which has the SUFX_E flag) with this character
@@ -706,6 +709,7 @@ void InitNamedata(void);
void InitText(int flags);
void InitText2(void);
int IsDigit(unsigned int c);
int IsDigit09(unsigned int c);
int IsAlpha(unsigned int c);
int IsVowel(Translator *tr, int c);
int isspace2(unsigned int c);
@@ -713,6 +717,7 @@ int towlower2(unsigned int c);
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa);
const char *WordToString2(unsigned int word);
ALPHABET *AlphabetFromChar(int c);
ALPHABET *AlphabetFromName(const char *name);

Translator *SelectTranslator(const char *name);
int SetTranslator2(const char *name);

+ 78
- 19
src/voices.cpp View File

@@ -110,6 +110,7 @@ enum {
V_FAST,
V_SPEED,
V_DICTMIN,
V_ALPHABET2,

// these need a phoneme table to have been specified
V_REPLACE,
@@ -161,6 +162,7 @@ static MNEM_TAB keyword_tab[] = {
{"fast_test2", V_FAST},
{"speed", V_SPEED},
{"dict_min", V_DICTMIN},
{"alphabet2", V_ALPHABET2},

// these just set a value in langopts.param[]
{"l_dieresis", 0x100+LOPT_DIERESES},
@@ -396,10 +398,10 @@ void VoiceReset(int tone_only)
// Set voice to the default values

int pk;
// static unsigned char default_heights[N_PEAKS] = {140,128,120,110,90,90,128,128,128}; // changed for v.1.47
// static unsigned char default_widths[N_PEAKS] = {128,128,128,160,171,171,128,128,128};
static unsigned char default_heights[N_PEAKS] = {128,128,120,120,110,110,128,128,128}; // previous version
static unsigned char default_heights[N_PEAKS] = {130,128,120,116,100,100,128,128,128}; // changed for v.1.47
static unsigned char default_widths[N_PEAKS] = {140,128,128,160,171,171,128,128,128};
// static unsigned char default_heights[N_PEAKS] = {128,128,120,120,110,110,128,128,128}; // previous version
// static unsigned char default_widths[N_PEAKS] = {128,128,128,160,171,171,128,128,128};

static int breath_widths[N_PEAKS] = {0,200,200,400,400,400,600,600,600};

@@ -420,7 +422,7 @@ void VoiceReset(int tone_only)
voice->n_harmonic_peaks = 5;
voice->peak_shape = 0;
voice->voicing = 64;
voice->consonant_amp = 85; // change to 85 for v.1.47 was 100
voice->consonant_amp = 90; // change to 85 for v.1.47 was 100
voice->consonant_ampv = 100;
voice->samplerate = samplerate_native;
memset(voice->klattv,0,sizeof(voice->klattv));
@@ -448,7 +450,6 @@ void VoiceReset(int tone_only)
// adjust formant smoothing depending on sample rate
formant_rate[pk] = (formant_rate_22050[pk] * 22050)/samplerate;
}
voice->height[2] = 240; // reduce F2 slightly

// This table provides the opportunity for tone control.
// Adjustment of harmonic amplitudes, steps of 8Hz
@@ -532,6 +533,21 @@ static int Read8Numbers(char *data_in,int *data)
}


static unsigned int StringToWord2(const char *string)
{//======================================================
// Convert a language name string to a word such as L('e','n')
int ix;
int c;
unsigned int value = 0;

for(ix=0; (ix<4) & ((c = string[ix]) != 0); ix++)
{
value = (value << 8) | (c & 0xff);
}
return(value);
}


voice_t *LoadVoice(const char *vname, int control)
{//===============================================
// control, bit 0 1= no_default
@@ -573,6 +589,7 @@ voice_t *LoadVoice(const char *vname, int control)
int stress_lengths[8];
int stress_add[8];
char names[8][40];
char name1[40];
char name2[80];
const char *voice_dir;

@@ -583,11 +600,11 @@ voice_t *LoadVoice(const char *vname, int control)
static char voice_name[40]; // voice name for current_voice_selected
static char voice_languages[100]; // list of languages and priorities for current_voice_selected

// which directory to look for a named voice
// which directory to look for a named voice. List of voice names, must end in a space.
static const char *voices_asia =
"fa fa-pin hi hy hy-west id ka kn ku ml ne pa ta tr vi vi-hue zh zh-yue ";
"fa fa-pin hi hy hy-west id ka kn ku ml ms ne pa ta tr vi vi-hue zh zh-yue ";
static const char *voices_europe =
"an bg bs ca cs cy da el es et fi fr-be hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv ";
"an bg bs ca cs cy da de el en en-us es et fi fr fr-be ga hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv ";


strncpy0(voicename, vname, sizeof(voicename));
@@ -962,12 +979,10 @@ voice_t *LoadVoice(const char *vname, int control)
case V_MBROLA:
{
int srate = 16000;
char name[40];
char phtrans[40];

phtrans[0] = 0;
sscanf(p,"%s %s %d",name,phtrans,&srate);
if(LoadMbrolaTable(name,phtrans,srate) != EE_OK)
name2[0] = 0;
sscanf(p,"%s %s %d",name1,name2,&srate);
if(LoadMbrolaTable(name1,name2,srate) != EE_OK)
{
fprintf(stderr,"mbrola voice not found\n");
}
@@ -990,6 +1005,28 @@ voice_t *LoadVoice(const char *vname, int control)
sscanf(p,"%d",&dict_min);
break;

case V_ALPHABET2:
{
ALPHABET *alphabet;
name1[0] = name2[0] = 0;
sscanf(p, "%s %s", name1, name2);

if(strcmp(name1, "latin") == 0)
{
strncpy0(langopts->ascii_language,name2,sizeof(langopts->ascii_language));
}
else if((alphabet = AlphabetFromName(name1)) != 0)
{
langopts->alt_alphabet = alphabet->offset;
langopts->alt_alphabet_lang = StringToWord2(name2);
}
else
{
fprintf(stderr,"alphabet name '%s' not found\n", name1);
}
}
break;

default:
if((key & 0xff00) == 0x100)
{
@@ -1098,7 +1135,7 @@ static char *ExtractVoiceVariantName(char *vname, int variant_num, int add_dir)
// The voice name has a +variant suffix
variant_num = 0;
*p++ = 0; // delete the suffix from the voice name
if(isdigit(*p))
if(IsDigit09(*p))
{
variant_num = atoi(p); // variant number
}
@@ -1191,10 +1228,10 @@ static int ScoreVoice(espeak_VOICE *voice_spec, const char *spec_language, int s

p = voice->languages; // list of languages+dialects for which this voice is suitable

if(strcmp(spec_language,"mbrola")==0)
if(spec_n_parts < 0)
{
// only list mbrola voices
if(memcmp(voice->identifier,"mb/",3) == 0)
// match on the subdirectory
if(memcmp(voice->identifier, spec_language, spec_lang_len) == 0)
return(100);
return(0);
}
@@ -1327,6 +1364,7 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int
int lang_len=0;
espeak_VOICE *vp;
char language[80];
char buf[sizeof(path_home)+80];

// count number of parts in the specified language
if((voice_select->languages != NULL) && (voice_select->languages[0] != 0))
@@ -1339,6 +1377,26 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int
n_parts++;
}
}

if((n_parts == 1) && (control & 1))
{
if(strcmp(language, "mbrola") == 0)
{
language[2] = 0; // truncate to "mb"
lang_len = 2;
}

sprintf(buf, "%s/voices/%s", path_home, language);
if(GetFileLength(buf) == -2)
{
// A subdirectory name has been specified. List all the voices in that subdirectory
language[lang_len++] = PATHSEP;
language[lang_len] = 0;
n_parts = -1;
}

}

// select those voices which match the specified language
nv = 0;
for(ix=0; ix<n_voices_list; ix++)
@@ -1866,11 +1924,12 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
}
else
{
// list all: omit variant voices and mbrola voices
// list all: omit variant voices and mbrola voices and test voices
j = 0;
for(ix=0; (v = voices_list[ix]) != NULL; ix++)
{
if((v->languages[0] != 0) && (strcmp(&v->languages[1],"variant") != 0) && (memcmp(v->identifier,"mb/",3) != 0))
if((v->languages[0] != 0) && (strcmp(&v->languages[1],"variant") != 0)
&& (memcmp(v->identifier,"mb/",3) != 0) && (memcmp(v->identifier,"test/",5) != 0))
{
voices[j++] = v;
}

Loading…
Cancel
Save