Browse Source

Merge branch 'master' into android

Conflicts:
	platforms/windows/make_espeakedit.iss
master
Reece H. Dunn 12 years ago
parent
commit
1765ebc864
79 changed files with 3077 additions and 1541 deletions
  1. 7
    0
      Makefile.am
  2. 6
    1
      dictsource/an_list
  3. 119
    62
      dictsource/bn_list
  4. 10
    2
      dictsource/bn_rules
  5. 106
    99
      dictsource/da_list
  6. 748
    528
      dictsource/da_rules
  7. 60
    24
      dictsource/en_list
  8. 99
    75
      dictsource/en_rules
  9. 4
    0
      dictsource/es_list
  10. 49
    1
      dictsource/hbs_list
  11. 6
    1
      dictsource/hbs_rules
  12. 15
    4
      dictsource/hi_list
  13. 2
    7
      dictsource/hi_rules
  14. 2
    1
      dictsource/it_list
  15. 3
    3
      dictsource/ko_list
  16. 3
    3
      dictsource/ko_rules
  17. 0
    7
      dictsource/ml_rules
  18. 8
    4
      dictsource/nl_list
  19. 12
    5
      dictsource/nl_rules
  20. 106
    72
      dictsource/pt_list
  21. 67
    27
      dictsource/pt_rules
  22. 5
    5
      dictsource/ru_list
  23. 171
    0
      dictsource/te_list
  24. 271
    0
      dictsource/te_rules
  25. 187
    12
      dictsource/ur_list
  26. 122
    9
      dictsource/ur_rules
  27. 1
    1
      espeak-data/voices/en
  28. 1
    1
      espeak-data/voices/en-us
  29. 1
    1
      espeak-data/voices/es-la
  30. 0
    4
      espeak-data/voices/test/ak
  31. 0
    3
      espeak-data/voices/test/az
  32. 1
    1
      espeak-data/voices/test/bn
  33. 0
    3
      espeak-data/voices/test/dv
  34. 0
    3
      espeak-data/voices/test/ht
  35. 0
    3
      espeak-data/voices/test/kk
  36. 1
    1
      espeak-data/voices/test/ko
  37. 0
    3
      espeak-data/voices/test/mt
  38. 0
    3
      espeak-data/voices/test/nso
  39. 0
    5
      espeak-data/voices/test/prs
  40. 0
    4
      espeak-data/voices/test/rw
  41. 1
    1
      espeak-data/voices/test/si
  42. 1
    1
      espeak-data/voices/test/te
  43. 0
    3
      espeak-data/voices/test/tn
  44. 0
    5
      espeak-data/voices/test/tt
  45. 0
    4
      espeak-data/voices/test/wo
  46. BIN
      phsource/d/xd
  47. BIN
      phsource/envelopes.png
  48. 7
    7
      phsource/ph_bengali
  49. 263
    307
      phsource/ph_danish
  50. 27
    0
      phsource/ph_english
  51. 8
    7
      phsource/ph_english_us
  52. 1
    1
      phsource/ph_hindi
  53. 20
    0
      phsource/ph_korean
  54. 119
    1
      phsource/ph_malayalam
  55. 10
    10
      phsource/ph_portugal
  56. 4
    0
      phsource/ph_tamil
  57. 11
    12
      phsource/phonemes
  58. BIN
      phsource/r/V_
  59. BIN
      phsource/r/V_2_
  60. BIN
      phsource/voc/murmur1
  61. BIN
      phsource/vwl_en_us/ai3
  62. BIN
      phsource/vwl_en_us/er
  63. BIN
      phsource/vwl_en_us/oor
  64. 3
    2
      platforms/riscos/Makefile
  65. 111
    25
      platforms/riscos/cpp/speak_riscos
  66. 5
    3
      platforms/windows/make_espeak.iss
  67. 64
    58
      platforms/windows/make_espeakedit.iss
  68. 3
    2
      src/compiledata.cpp
  69. 20
    2
      src/dictionary.cpp
  70. 30
    3
      src/numbers.cpp
  71. 59
    50
      src/phonemelist.cpp
  72. 2
    0
      src/readclause.cpp
  73. 24
    4
      src/setlengths.cpp
  74. 11
    1
      src/synthdata.cpp
  75. 19
    1
      src/synthesize.cpp
  76. 12
    7
      src/tr_languages.cpp
  77. 33
    32
      src/translate.cpp
  78. 1
    0
      src/translate.h
  79. 15
    4
      src/voices.cpp

+ 7
- 0
Makefile.am View File

@@ -195,6 +195,7 @@ dictionaries: src/espeak \
espeak-data/sv_dict \
espeak-data/sw_dict \
espeak-data/ta_dict \
espeak-data/te_dict \
espeak-data/tr_dict \
espeak-data/ur_dict \
espeak-data/vi_dict \
@@ -531,6 +532,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 ..

tr: espeak-data/tr_dict
dictsource/tr_extra:
touch dictsource/tr_extra

+ 6
- 1
dictsource/an_list View File

@@ -1,4 +1,4 @@
// Aragon translation rules
// Aragon translation rules
// This file is UTF-8 encoded

// letters
@@ -118,6 +118,9 @@ _x#º %o // for 1º 2º 3º
_x#ª %a
º orDin'al||maskul'in
ª orDin'al||femen'in
ºc gr'aUs||T'e
ºf gr'aUs||'Efe
ºk gr'aUs||k'a

_1ox prim'Er
_2ox seQ'und
@@ -179,6 +182,7 @@ $ d'olar
/ baRRa
\ kontraBaRRa
| b'aRRaBertik'al
° graUs

_- gj'on
! TaRR'ar||eksklamaTj'on
@@ -483,6 +487,7 @@ espeak isp'ik
facebook f'eIsbuk
firefox f'aIrfoks
google g'ugEl
hotmail xotm'eIl
(i phone) 'aIfon
iphone 'aIfon
(i pod) 'aIpod

+ 119
- 62
dictsource/bn_list View File

@@ -1,11 +1,11 @@
// Translation rules for Bengali
// Translation rules for Bengali
// This file is UTF8 encoded

// Numbers
devanagari numbers are changed to latin characters before translation
// Bengali numbers are changed to latin characters before translation
_0 S'unjO
_1 '&k
_2 duj
_2 d'uj
_3 t'in
_4 tS'ar
_5 p'a~tS
@@ -14,11 +14,16 @@ _7 S'at
_8 'at.#
_9 n'Oj

_2a d'u // with hundreds etc.
_6a tS#'a
_9a n'O


_10 d'OS
_11 '&garo
_12 b'arO
_13 t'erO
_14 tS'owddO
_14 tS'oddO
_15 p'OnerO
_16 S'olO
_17 S'OterO
@@ -26,64 +31,101 @@ _18 'at.#arO
_19 'uniS

_20 k'uri // or b'iS ??
_21 'ekuS
_21 ek'uS
_22 b'ajS
_23 t'ejS
_24 tS'ObbiS
_25 p'O~tSiS
_26 tSh'ObbiS
_27 S'ataS
_26 tSh'abbiS
_27 Sat'aS
_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
_29 unOtr'iS

_30 tr'iS
_31 ekOtr'iS
_32 bOtr'iS
_33 tetr'iS
_34 tSowtr'iS
_35 pO~jtr'iS
_36 tS#'Otr'iS
_37 Sa~itr'iS
_38 at.tr'iS
_39 'unOtSOll'iS

_40 tSOll'iS
_41 ektSOll'iS
_42 biall'iS
_43 tetall'iS
_44 tSoall'iS
_45 pO~jtall'iS
_46 tSetSOll'iS
_47 SatSOll'is
_48 atSOll'iS
_49 unOpO~tSaS

_50 pO~tS'aS
_51 &kann'o
_52 bajann'o
_53 tepann'o
_54 tSujann'o
_55 pontSann'o
_56 tS#apann'o
_57 Satann'o
_58 at.ann'o
_59 unOS'at.

_80 'aSi
_8X 'aSi
_89 'unOnObbOj

_90 n'ObbOj
_9X n'ObbOj
_60 s'at.
_61 ekSOt.t.'i
_62 baSOt.t.'i
_63 teSOt.t.'i
_64 tSowSOt.t.'i
_65 pojSOt.t.'i
_66 SeSOt.t.'i
_67 SatSOt.t.'i
_68 at.SOt.t.'i
_6X sat.t.'i
_69 unOSOtt'ur

_70 SOtt'Or
_71 ekatt'Or
_72 bahatt'Or
_73 tehatt'Or
_74 tSuhatt'Or
_75 pOtSatt'Or
_76 tS#ijatt'Or
_77 Satatt'Or
_78 at.att'Or
_79 unOaS'i

_80 aS'i
_81 &kaS'i
_82 beraS'i
_83 teraS'i
_84 tSuraS'i
_85 po~tSaS'i
_86 tS#ijaS'i
_87 SataS'i
_88 at.aS'i
_89 ,unOnObb'oj

_90 nObb'oj
_91 &kanObb'oj
_92 beranObb'oj
_93 teranObb'oj
_94 tSuranObb'oj
_95 pOtSanObb'oj
_96 tS#ijanObb'oj
_97 SatanObb'oj
_98 at.anObb'oj
_99 niranObb'oj

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


// Single consonants
@@ -91,40 +133,42 @@ _dpt dOsomik
খ k#O
গ gO
ঘ g#O
ঙ 'uNO
ঙ 'uNO~
চ tSO
ছ tShO // [h] to distinguish from [tS]
জ JO
ঝ J#O
ঞ 'iNO
ঞ 'iNO~
ট t.O
ঠ t.#O
ড d.O
ঢ d.#O
ণ m'odd#ennO
ণ m,odd#en.n.'O
ত tO
থ t#O
দ dO
ধ d#O
ন d'ontennO
ন d,ontenn'O
প pO
ফ fO // or [p#O] ?
ব bO
ভ b#O
ম mO
য় Oj
য ontostedZ'O
,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
শ t,aleboS:'O
ষ m,ud#en:oS:'O
স d,onteS:'O
হ hO
ৎ kh'Ond.otO
ৎ kh,Ond.ot'O
ক্ষ k,ojmud#en:oS:'O


// full vowels
অ O
@@ -134,11 +178,16 @@ _dpt dOsomik
উ hrOS:o'u
ঊ dirg#o'u
ঋ ri
এ e
ঐ oj
ও o
ঔ ow

এ e $u+ // word 'it'
ঐ oj $u+ // word 'that'
ও o $u+ $brk // 'and'
_এ e
_ঐ oj
_ও o


// combining vowel signs
া 'akar
ি r'oS:ikar
@@ -158,10 +207,17 @@ _dpt dOsomik
ঁ tS'Ondrobindu
় b'indu

$ d.Olar
% SOtk'Ora
+ jOg
= SOman



// Punctuation
। dVn.d.V

_, koma
_? pr'oSnOtSihnO

// Pronouns
আমি $u // main: I
@@ -264,3 +320,4 @@ _dpt dOsomik


// Exceptions
এত &to

+ 10
- 2
dictsource/bn_rules View File

@@ -1,4 +1,4 @@

// This file is UTF8 encoded

// letter groups:
@@ -28,6 +28,7 @@
.group অ
অ V
অঁ O~
অ্যা & // V,ja in [æmiba]

.group আ
@@ -74,6 +75,8 @@
.group এ
এ e
এঁ e~
এ্যা & // e,ja [ækademi]


.group ও
@@ -288,7 +291,10 @@
য় jV // nukta
য় (B j

্) য (C & // ব্যস্ত [bæsto]
্) যা & // ব্যাকরণ [bækɔron]


.group র
র rV
র (B r
@@ -378,3 +384,5 @@
ৢ l-
ৣ l-

__) - (_D bij'og
D_) - (_D bij'og

+ 106
- 99
dictsource/da_list View File

@@ -54,38 +54,38 @@ _?? symbol
_#9 tab
_#32 blank

* 'asd&r,isg $max3
% pRos'end $max3
@ sn,&:bel'&:
/ sgRVsdrai $max3
\ 'Vmvendsgr,VsdRai $max3
* '&sd@-r,isg $max3
% pRos'End $max3
@ sn,&b@-l'&:
/ sgRVsdrAj $max3
\ 'VmvEndsgr,VsdRai $max3
_, k'oma:
_; se:mi:ko:lVn
_; semiko:lVn
_: k'o:lVn
_. pONtOm // PN u => O
_? spWrgsmVlstajn
_! udRVbstejn
_- binnesdrai
__ b'Onsdrai
_? spWrsmOlstAjn
_! udRVbstAjn
_- bin@-sdrAi
__ b'OnsdrAi
& _Vw
£ pun?
€ euro
© kVpirajt
÷ divid'eReD||meD
© kVpirAjt
÷ divid'eRVD||mED
= l'imeD
# n'OmV
§ paragr'af
× g'aNe
ª feminin||Wdin'al
º m'askulin||Wdin'al
® registr'Er@D||v'ar@mErk3
¼ en||kvart
¾ trEkv'art
® registr'ErVD||v'Ar@-mErk@-
¼ en||kvArt
¾ trEkv'Art
¢ s'ent
¥ j'en:
µ my
' apostr'Vf
½ en'hal
½ en'h&l
+ plus
// numbers
@@ -102,19 +102,19 @@ _9 n'i
_10 t'i
_11 'Elv@
_12 t'Vl
_13 tR'?&#d@-n
_13 t*'?&#d@-n
_14 fj'ord@-n
_15 f'Emd@-n
_16 s'ajsd@-n
_17 s'Wd@-n
_16 s'Ajsd@-n
_17 s'?Wd@-n
_18 '?&d@-n
_19 n'ed@-n
_19 n'?ed@-n
_2X t'y:?u
_3X tR'&#Dv@
_3X t*'&#Dv@
_4X f'?W:_|V
_5X h&l't*Es
_6X t*'Es
_7X h&lfj'&rs
_7X h&lfj'Ers
_8X f'irs
_9X h&lf'Ems // PB a changed to &
_0C h'unRVD
@@ -131,32 +131,32 @@ _0M4 bilij'o:n3
_0and V
_dpt _k,Vm&:

// PB a number followed by dot
// A number followed by dot
// ordinals are followed by a dot in Danish
_ord 3 // 13. (trettende)
_ord @- // 13. (trettende)

// exceptions for ordinals
_1o fWrsd3 // 1. første
_1o fWrsd@- // 1. første
_2o &n@n // 2. anden
_3o trEdj3 // 3. tredje
_3o trEdj@- // 3. tredje
_4o fjeV // 4. fjerde
_5o fEmt3 // 5. femte
_6o sjEd3 // 6. sjette
_7o syvn3 // 7. syvende
_8o Vtn3 // 8. ottende
_9o ni@n3 // 9. niende
_10o ti@n3 // 10. tiende
_11o Elfd3 // 11. elvte/ellevete
_12o tVlfd3 // 12. tolvte
_5o fEmt@- // 5. femte
_6o sjEd@- // 6. sjette
_7o syvn@- // 7. syvende
_8o Vtn@- // 8. ottende
_9o ni@-n@- // 9. niende
_10o ti@-n@- // 10. tiende
_11o Elfd@- // 11. elvte/ellevete
_12o tVlfd@- // 12. tolvte

_2Xo t'yv@n@ // 25.
_3Xo tr'&#ft@ //36.
_4Xo fWV'tyv@n@ // 42.
_5Xo h&lt*'Esenstyv@n@ // 52.
_6Xo tr'Esenstyv@n@ // 62.
_7Xo h&lfj'&rsenstyv@n@ // 72.
_8Xo firsenstyv@n@ // 82.
_9Xo h&lf'Emsenstyv@n@ // 95.
_2Xo t'yv@n@- // 25.
_3Xo tr'&#ft@- //36.
_4Xo fWV'tyv@-n@- // 42.
_5Xo h&lt*'Esenstyv@-n@- // 52.
_6Xo tr'Esenstyv@-n@- // 62.
_7Xo h&lfj'&rsenstyv@-n@- // 72.
_8Xo firsenstyv@-n@- // 82.
_9Xo h&lf'Emsenstyv@-n@- // 95.

// function words

@@ -187,10 +187,10 @@ fra $u+ // from
ved $u+ // at
om $u+ $brk // about, within
med $u+ // with
af &
ad &
af &_!
ad &_!
ad &D $atend $sentence // "Det må ikke skille os ad."
at & $u
at &_! $u
hos
som sVm $u // which / that

@@ -203,7 +203,7 @@ hun $u
det de $u
dét de
vi vi $u
i _i $u+
i _i_! $u+
mig mAj $u // me
dig dAj $u+
dem $u
@@ -220,10 +220,10 @@ hvis ves $u+ // PB - whose
// possessive pronouns
min min $u
mit mit $u
mine m'in3
mine m'in@-
din d'in $u+
dit d'it $u
dine d'in3
dine d'in@-
deres dE:Vs $u
hans $u+
hendes $u+
@@ -1448,7 +1448,6 @@ elegance $alt
eminence $alt
excellence $alt
fajance $alt
hospice $alt
ignorance $alt
inspektrice $alt
intolerance $alt
@@ -1846,6 +1845,7 @@ afrikan $alt
afrikaan $alt
aleksandrin $alt
amerikan $alt
austral $alt
andorran $alt
anglikan $alt
angolan $alt
@@ -5968,6 +5968,7 @@ dediker $alt
deducer $alt
defiler $alt
definer $alt
omdefiner $alt
deflorer $alt
deformer $alt
degrader $alt
@@ -6547,6 +6548,7 @@ konstater $alt
konstituer $alt
konstringer $alt
konstruer $alt
rekonstruer $alt
konsulere $alt
konsulter $alt
konsumer $alt
@@ -11121,7 +11123,7 @@ sinecure $alt
tournure $alt

// exceptions
alene &l'en@ // alone
alene &l'en@- // alone
egen _|aj@-n
mc mak' $capital // PB McDonald
egne ajn@-
@@ -11130,7 +11132,7 @@ ide id'e // idea
idé id'e // idea
tune tun3 $capital // PB Tune lufthavn - not "tune a car" [tjune]
ny ny // new
også Vs@- // also
også ?Vs@- // also
idet id'e // in so far as
(rub og stub) R'Ob||V||sd'Ob
tre tr'E // the number 3
@@ -11138,8 +11140,8 @@ rejicere rejis'eV // PB should not be pronounced [raje]
rejicerer rejis'eV // PB
rejiceres rejis'eVs // PB
rejicering rejis'eRiN // PB
nogle n'o:@-n // PB English: 'some' - must be pronounced like the Danish word 'nogen'
nogen n'o:@-n // PB
nogle n'o@-n // PB English: 'some' - must be pronounced like the Danish word 'nogen'
nogen n'o@-n // PB
ligesom l?isVm // PB
bliver blir // PB
konfirmand kVnferm'&nd // PB
@@ -11150,48 +11152,48 @@ giv g'i // PB the v shouldn't be pronounced
giver gir // PB the v shouldn't be pronounced
opgiver Vpgir // PB
jaloux sj&'lu // PB jaloux
aficionado afisjo'na:do // PB
breakdance brEig'da:ns // PB breakdance
breakdancen brEig'da:ns@-n // PB breakdancen
breakdancer brEig'da:nsV // PB breakdancer
breakdancere brEig'da:nsV3 // PB breakdancere
breakdancerne brEig'da:nsV-n@ // PB breakdancerne
breakdancernes brEig'da:nsV-n@s // PB breakdancernes
squaredance skw'e@da:ns // PB squaredance
squaredancer skw'e@da:nsV // PB squaredancer
squaredancere skw'e@da:nsV3 // PB squaredancere
squaredancen skw'e@da:ns@-n // PB squaredancen
squaredancerne skw'e@da:nsV-n@ // PB squaredancerne
squaredancernes skw'e@da:nsV-n@s // PB squaredancernes
baguette b%a'get // French word used in Danish
jambore djamboR'E // PB English? word used in Danish - stressed e
shampu Sjambo // PB Danish pronunciation - oo has been replaced by u
(en face) aN||f'as // PB 'en face' - French used in Danish
(en bloc) aN||'blVk // PB 'en bloc' - French used in Danish
aficionado afisjo'nA:do // PB
breakdance brEig'd&:ns // PB breakdance
breakdancen brEig'd&:ns@-n // PB breakdancen
breakdancer brEig'd&:nsV // PB breakdancer
breakdancere brEig'd&:nsV3 // PB breakdancere
breakdancerne brEig'd&:nsV-n@ // PB breakdancerne
breakdancernes brEig'd&:nsV-n@s // PB breakdancernes
squaredance skw'EVd&:ns // PB squaredance
squaredancer skw'EVd&:nsV // PB squaredancer
squaredancere skw'EVd&:nsV3 // PB squaredancere
squaredancen skw'EVd&:ns@-n // PB squaredancen
squaredancerne skw'EVd&:nsV-n@ // PB squaredancerne
squaredancernes skw'EVd&:nsV-n@s // PB squaredancernes
baguette b?&'gEt // French word used in Danish
jambore djAmboR'E // PB English? word used in Danish - stressed e
shampu SjAmbo // PB Danish pronunciation - oo has been replaced by u
(en face) AN||f'as // PB 'en face' - French used in Danish
(en bloc) AN||'blVk // PB 'en bloc' - French used in Danish
(haute couture) %o:tku'ty:r // PB - french word
(par excellence) pa:egs@'la:Ns // PB - french word
(public service) pVblek||s@:vis // PB
(public servicen) pVblek||s@:vis@-n // PB
(par excellence) pA:Egs@'la:Ns // PB - french word
(public service) pVblek||sW:vis // PB
(public servicen) pVblek||sW:vis@-n // PB
(tour de force) tu:@d@||'fV:s // PB
(al qaeda) al||k'ajda // PB
(force majeure) fVrs||,ma'sjW:r // PB
(diner transportable) din'e|trANspVt'abl@ // PB
(diner transportable) din'e|trANspVt'abl@- // PB
(quiche lorraine) kiS||lor'E:n:
(fait accompli) fEtakVmpl'i // PB
(fait accompli) fEt&kVmpl'i // PB
(salt lake city) s'Vlt||lEjk||s'iti
wien v'i:n // PB Wien - the town of Vienna
calais kal'E // PB Calais - town in France
date dejt // PB date - stævnemøde
calais k&l'E // PB Calais - town in France
date dEjt // PB date - stævnemøde
//siger sir // PB silent d
(tids nok) tis||n'Vk // PB silent d
skateboardet sk'eitbo@d3D // PB
skateboardet sk'EitbO:d@-D // PB
(hole in one) h'oulinw,0n // PB English golf expression used in Danish
(en passant) AN||p&s'AN
(coney island) 'kouni||'ajl3nd // PB
(union station) junj3n||steisj@n // PB
(secret service) sigred||s'Wvis
(happy hour) h&pi||'AuV
chevrolet sjEvrol'e
chevrolet sjEvrol'E
saigon sAjgVn // PB Saigon
managua m&n'&:gw&
(deja-vu) deSja||'vy
@@ -11246,32 +11248,37 @@ ikes ajks // PB
// Try to catch errors

(et kvarter) et||kvA'ter // PB
(mit kvarter) mit||kvA'ter // PB
(vores kvarter) vV:s||kvA'ter // PB
(deres kvarter) dE:Vs||kvA'ter // PB
(det kvarter) de||kvA'ter // PB
(mit kvarter) mit||kvA'ter
(vores kvarter) vV:s||kvA'ter
(deres kvarter) dE:Vs||kvA'ter
(det kvarter) de||kvA'ter
(i kvarter) i||kv'A:dV
(at have) &||h& // PB the verb 'have', not the noun 'have' = garden
(vil have) vel||h'& // PB
(ville have) v?il3||h'& // PB
(du have) du||h& // PB
(må have) mO:||h& // PB
(skal have) sk?&||h& // PB
// the verb 'have', not the noun 'have' = garden/oceans
(at have) &||h&
(vil have) vel||h'&
(ville have) v?il3||h'&
(du have) du||h&_!
(må have) mO:||h&
(skal have) sk?&||h&
(helst have) h'Elst||h&
(gerne have) g'Ern3||h&
(kan have) k?&n||h& // PB
(ikke have) ege||h& // PB
(kan have) k?&n||h&
(ikke have) eg@-||h&
(have ret) h&||R'&#d
(måtte have) m'?Vt@-||h&
(have været) h&||v'?E3-VD
(have gjort) h&||gj'Ort
// PB 'hav' = ocean - 'hav' = have (a nice day)
(et hav) ed||hAu
(stort hav) stord||hAu
hav hAu $atend
(et for) ed||'for // PB for i jakke - lining
(et for) ed||'for // for i jakke - lining
(et for dig) ed||fV||dAj // vælge et for dig
// PB problem with 'sig' [si] = "say" and 'sig' = "himself/herself" [saj]
//(sig mig) si||maj // PB sig mig engang
(sig hvad) si||v& // PB sig hvad du mener
sig $atend $sentence saj // end of a sentence - han vaskede sig.
(gør sig til) g,Wr||saj||t'el // PB
(gav sig til) g&||saj||tel // PB han gav sig til at ...
(sig hvad) si||v& // sig hvad du mener
sig $atend $sentence sAj // end of a sentence - han vaskede sig.
(gør sig til) g,Wr||sAj||t'el
(gav sig til) g&||sAj||tel // han gav sig til at ...
// PB avoid [staj] as in "flæskesteg"
(han steg) h&n||st'e
(hun steg) hOn||st'e
@@ -11280,7 +11287,7 @@ sig $atend $sentence saj // end of a sentence - han vaskede sig.
(alle steg) &l3||st'e
(vandet steg) v&n@D||st'e
steg sdaj $atend $sentence
steget ste@d
//steget ste@d
// PB problem with noun "hav" = ocean and verb "hav(e)" = to have [hAu]/[h&v]
(et hav) ed||h'Au // PB "et hav" = an ocean - not "hav en god dag" - have a nice day
// PB legende = legend/myth and = playing

+ 748
- 528
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 60
- 24
dictsource/en_list View File

@@ -1,4 +1,4 @@

// You can use the en_extra file, rather than this one
// to add your own pronunciation definitions.

@@ -70,6 +70,7 @@ a eI $atend
ï $accent
ö $accent
ü $accent
û $accent
č $accent
š $accent
ş $accent
@@ -324,37 +325,54 @@ _zh tS'aIni:z
// Arabic letters

ء h'amza
آ 'Elifm,adda#
أ 'Elifh,amza
ا 'Elif
ب bE?
آ al'if_mamd'uda#
أ h'amza_taht_al'if
ؤ h'amza_?la_waw
إ al'if_taht_h'amza
ئ h'amza_?la_jE?
ا al'if
ب ba
ة t'E?maR2b'uta#
ت tE?
ت ta
ث TE?
ج ZIm
ج dZi:m
ح hE?
خ xE?
د dEl/1
ذ DEl/1
د dal/1
ذ Dal/1
ر R2A:?
ز zEjn
س si:n
ش Si:n
ص sO:d@-
ض dO:d@-
ص sa:d@-
ض da:d@-
ط thA:?
ظ DA:?
ع ?ajn
غ Q"ajn
ف fE?
ق qO:f
ك kEf
ل lEm
ع '?Ein
غ 'Q"Ein
ف fa
ق qa:f
ك kaf
ل lam
م mi:m
ن nu|:n
ه hE?
و wO:w
ه ha
و waw
ى al'if_maks'ura
ي jE?
// Farsi
پ pa
چ tSa
ژ Za
گ ga:f
ی f'A@si||j'e
ک k'a:f
// Urdu
ٹ te
ڈ de
ڑ z.e
ے barij'e
ھ h'@

َ a
ِ i
@@ -724,6 +742,7 @@ aka aka#
alas a#l'as
albeit O:lb'i:It
alfalfa alf'alf@
algebra aldZI2br@
alias eIli@s
alibi al@baI
alibis al@baIz
@@ -754,6 +773,7 @@ ambassador a#mbas@d3
ambidextrous $3
amen ,A:m'En $onlys
?3 amen ,eIm'En
?3 amo amoU
amok a#m0k
amoral eIm'0r@L
amount a#maUnt
@@ -767,8 +787,6 @@ analyses an@laIzI#z $verb
analysis a#nal@sIs
anemone a#nEm@ni
angel eIndZ@L
anecdote anIkdoUt
anecdotal anIkd'oUt@L
anemometer anIm'0mI2t3
anew a#nju:
?3 anew a#nu:
@@ -829,7 +847,7 @@ arena a#ri:n@
argon A@g0n
argue A@gju:
aries e@ri:z
arithmetic a#rITm@tIk
arithmetic a#rITm@tIk $onlys
arise a#raIz
arisen @rIz@n
armslength ,A@mzl'ENT
@@ -877,6 +895,7 @@ average av@-rI2dZ
aviary eIvi@ri
awry a#raI
axes aksI#z
axon aks0n

backend bak'End
backstory baksto@ri
@@ -1115,6 +1134,7 @@ circumference $2
circumvent s3:k@mvEnt
?5 circumvent sIRk@mvEnt
citadel sIt@dEl
clandestine $2
clarinet klar@n'Et
cleanliness klEnlIn@s
cleanse klEnz
@@ -1236,6 +1256,7 @@ coordinate koU'O:dI2neIt $verb
copier k0pi@3
copilot koUpaIl@t
coral k0r@L
?3 cordial kO@dZ@L
coronet k0r@nEt
corollary $2
corporal kO@pr@L
@@ -1291,6 +1312,7 @@ debut deIbju:
?3 debut deIb'ju:
decade dEkeId
decent di:s@nt
decibel dEsI#b@L
declaration dEkl@'reIS@n
decolletage deIk0lt'A:Z
decor deIkO@
@@ -1380,6 +1402,7 @@ doctrine d0ktrI2n
doctrinal $alt1
doer du:3
dogged d0gI#d
dogmatic d0gm'atIk
doin du:In
domino $1
donor doUn3
@@ -1626,6 +1649,7 @@ gigantic dZaIg'antIk
gilead g'IlIad
gimme gImi
giraffe dZI2raaf
github gIthVb
glacier gleIS3
goin ,goUI2n $only // for goin'
gonna g,@n@
@@ -1796,6 +1820,7 @@ intestine I2ntEstI#n
inventory Inv@ntri
?3 inventory Inv@nto:ri
interface $1
interlude $1
intermin Int'3:mIn // interminable
intern $1 $onlys
internee Int'3:ni:
@@ -2056,6 +2081,7 @@ molybdenum $2
momentary moUm@nt@ri
?3 momentary moUm@nt2e@ri
momentum $2
monarchic m@nA@kIk
monday mVndeI
monotone m0n@toUn
monsieur m@sj3:
@@ -2251,6 +2277,7 @@ pear pe@
pecan pi:k@n
peculiar pI2kju:lI3
pedalo pEd@loU
pedestal pEdI2st@L
pedestrian $alt3
pegasus pEg@s@s
pejorative p@dZ0r@tIv
@@ -2545,6 +2572,7 @@ ruby ru:bi
rugged rVgI#d
ruin ru:I2n // for ruining

sabbatic $alt3
sabotage sab@tA:Z
saboteur sab@t'3:
?5 saboteur sab@t'VR
@@ -2552,6 +2580,7 @@ sabre seIb3
sachet saSeI
sacred seIkr@d
sacrifice sakrI2faIs
sadistic $alt3
safety seIfti
saga sA:g@
sahara $alt3
@@ -2566,6 +2595,7 @@ saloon $alt3
san ,san $only
sardine $2
satanic $alt3
satiric $alt3
saucepan sO:sp@n
saudi saUdi
saute sO:teI
@@ -2706,6 +2736,7 @@ stagnate $2
stampede $2
starboard stA@b3d
starry stA:rI
statistic $alt3
stiletto stI2lEtoU
strychnine str'Ikni:n
sterile stEraIl
@@ -2780,7 +2811,6 @@ tear te@ $verb
(tear apart) t,e@||a#pA@t
(tear off) t'e@||'0f
teargas ti@3gas
techy tEki
teddybear t'EdIb,e@
telemetry t@lEm@tri
telepathy t@lEp@Ti
@@ -2882,6 +2912,7 @@ unaware Vn@w'e@
uncle VNk@L
undeny VndIn'aI
underling $1
underlings Vnd3lINz
underworld $1
undies Vndiz
undo Vnd'u:
@@ -3241,8 +3272,9 @@ Lvov l@-v0v
?5 Luxembourg lVks@mbVRg
Madagascar mad@g'ask3
Madras m@draas
Madrid m@drId
Madrid m@drId
Malawi $alt3
Malayalam maleI'A:l@m
Maldives mO:ld'i:v
Mali mA:li
Mandalay $3
@@ -3283,6 +3315,7 @@ Noumea nu:m'eI@
Oahu oU'A:hu:
Oklahoma oUkla#h'oUm@
Ohio oUh'aIoU
Ohioan oUh'aIoU@n
Omagh oUmA:
Omaha oUma#hA:
Oman oUm'an
@@ -3369,6 +3402,7 @@ Wisconsin wI2sk'0nsI2n
Wyoming waI'oUmIN
Xhosa kO:s@
Yemen $alt2
Yosemite joUs'Em@ti
zaire zaI'i@3
zimbabwe zI2mbA:bwi
zimbabwean zI2mbA:bwI@n
@@ -3648,6 +3682,7 @@ Phoebe fi:bi:
Rachael reItS@L
Rachel reItS@L
Rafael rA:faI'El
Rashid rA:S'i:d
Raul raU'u:l
Rees ri:s
Reese ri:s
@@ -3672,6 +3707,7 @@ Sebastian $alt3
Sheila Si:l@
Simon saIm@n
Sinead SI2neId
Sinéad SI2neId
Siobhan S@vO:n
Siobhán S@vO:n
Sonia s0nj@

+ 99
- 75
dictsource/en_rules View File

@@ -504,6 +504,7 @@
portr) ai (t I#

.group al
@ic) al (_S2 @L
_) al (@ a#l
gonz) al 'A:l
_) alaba al@b'a
@@ -720,6 +721,7 @@
p) an (c an
@m) an (d aan
sl) an (d aan
_) anecdo anIkdoU
C) an (t aan
an (ath a#n
ann (eal a#n
@@ -1066,8 +1068,8 @@
as (thm as
as (tral as
as (tro as
as (trolog a#s
as (trono a#s
_) as (trolog a#s
_) as (trono a#s
&) as (ty_ a#s
ass (ym as
purch) as (e Is
@@ -1093,11 +1095,12 @@
_s) ata (n eIt@
_g) ator eIt3
&) ate (_$w_alt2 @t
der) ated (_ eItI#d
pal) ate (_ @t
consul) ate (_ @t
macul) ate (_ @t
tim) ate (_ @t
tim) ated (_ eItI2d
tim) ated (_ eItI#d
tim) ating (_ eItIN
din) ate (_ @t
ion) ate (_ @t
@@ -1128,7 +1131,6 @@
at (io_ eIS
ati (aX 'eIS
&) atism @tIz@m
st) at (ist @t
w) at (t 0t
@) ath (An_ @T
athed (_ eIDd
@@ -1334,6 +1336,7 @@
bi (nm bI
bi (noc bI2
_) bio (@P3 b,aIoU
bi (ol baI
bi (otic baI
@) bi (osA baI
bi (oC_ bI
@@ -1461,6 +1464,7 @@
a) ch (il k
bra) ch k
te) ch (K k
_te) ch k
ch (isC k
ch (ic_ k
@@Car) ch (_ k
@@ -1685,6 +1689,7 @@
de (ft dE
_) de (g@ dI2
_) de (hyd ,di:
_) de (ist deI
_) de (j dI2
_) de (l@ dI2
de (law dE
@@ -1865,6 +1870,7 @@
sp) e (cies i:
depr) ec (L02 i:S
_) e (cl %I
_) eccles (i I2kli:z
econo (m Ik'0n@
econo (mic i:k@n'0
_) eco (s i:koU
@@ -1927,23 +1933,6 @@
h) e (sion_ 'i:
@) e (tio i:
discr) e (tion E
eu ju:
?3 n) eu u:
?3 n) eu (r U@
r) eu (d OI
eu (m_ 'i:@
s) eu (m_ 'i@
l) eur 3:
?5 eur VR
eur (_ '3:
?3 eur (_ 'U@
?5 eur (_ 'VR
_) euro jU@roU
_) euro (pe jU@r-@
&) eus (_ =I2@s
@) euse (_ '3:z
?3 @) euse (_ 'u:z
d) eu (ts OI
ew ju:
_s) ew u:
?3 d) ew u:
@@ -2458,6 +2447,7 @@
er (nal_ '3:
&) er (n_ 3
c) er (n_ 3:
_g) er (on Er
&) er (oCe_ =@r
er (se 3:
v) er (sal '3:
@@ -2531,7 +2521,7 @@
pr) es (ent Ez
es (iA i:z
es (ian_ 'i:z
es (ic 'i:z
@) es (ic 'i:z
esis (_ 'i:sIs
th) eses (_ @si:z
th) esis (_ @sIs
@@ -2599,6 +2589,27 @@
m) etry (_ =@tr%I
&) ett (_ I2t


.group eu
eu ju:
?3 n) eu u:
?3 n) eu (r U@
r) eu (d OI
eu (m_ 'i:@
s) eu (m_ 'i@
l) eur 3:
?5 eur VR
eur (_ '3:
?3 eur (_ 'U@
?5 eur (_ 'VR
_) euro jU@roU
_) euro (pe jU@r-@
&) eus (_ =I2@s
@) euse (_ '3:z
?3 @) euse (_ 'u:z
d) eu (ts OI


.group ev
_) ev I2v
_) eva (ne Ev@
@@ -2915,40 +2926,10 @@
n) ihi aI|@
_) i (h aI
ii (_ IaI
ij (C eI // Dutch
f) i (j i:
h) i (j aI
@b) il (_ @L
@Cc) il (_ @L
@p) il (_ @L
@r) il (_ @L
@s) il (_ @L
nt) il (_ @L
@v) il (_ @L
@) ila (_ 'Il@
?3 &) ile (_$w_alt2 @L
_C) i (lage aI
_d) i (lat %aI
l) il (ah_ aIl
_m) i (ld aI
_w) i (ld aI
ch) i (ld aI
w) i (lderC I
ch) i (ldr I
sacr) ile IlI
i (leA I
&) ile (ge @lI
il (ise @l
il (ize @l
s) i (len aI
C) i (ler aI
_) il (l@ %Il
@) illa (_ 'Il@
&) illard (_ i:A:
_) il (ln Il
@) i (less I
_) il (lust Il
_C) i (lo aI
&) ily (_S2i l%I
@) i (ness I
i (o I2
_) i (o aI
@@ -2971,7 +2952,7 @@
ize (_ aIz
ial) ize (_S3 aIz
ize (d_ aIz
i (zen I2
i (zen I
iz (er_ aIz
i (zon_ 'aI
_p) izz i:t|s
@@ -3055,6 +3036,7 @@
&n) iel (_ j@L
&r) iel (_ =i:@L
ie (n i@
&) ie (n_ =i@n
d) iene (_ 'aIi:n
ie (ntal I'E
g) ie (n i:
@@ -3135,6 +3117,40 @@
igu (e 'i:g
igu (_ 'i:g

.group il
@b) il (_ @L
@Cc) il (_ @L
@p) il (_ @L
@r) il (_ @L
@s) il (_ @L
nt) il (_ @L
@v) il (_ @L
@) ila (_ 'Il@
?3 &) ile (_$w_alt2 @L
_C) il (age aIl
_d) il (at %aIl
l) il (ah_ aIl
_m) il (d aIl
_w) il (d aIl
ch) il (d aIl
w) il (derC Il
ch) il (dr Il
sacr) ile IlI
il (eA Il
&) ile (ge @lI
il (ise @l
il (ize @l
s) il (en aIl
C) il (er aIl
_) il (l@ %Il
@) illa (_ 'Il@
&) illard (_ i:A:
_) il (ln Il
_) il (lust Il
_C) il (o aIl
&) ily (_S2i l%I


.group im
&) im (_ I#m
cl) im aIm
@@ -3161,6 +3177,7 @@
imm (in Im
immo (bi Im'oU
imm (unis Im
_) immu (no I2mju:
@) imous (_ =Im@s
im (pac Im
im (pecu ,Im
@@ -3241,6 +3258,7 @@
in (ga_ 'IN
in (got IN
_) in (gro IN
_) in (im I2n
_) in (jur In
_) in (k IN
_) in (l In
@@ -3493,7 +3511,7 @@
@) istan (_ =Istan
@) istani (_ Ist'A:nI
@) iste (_ 'i:st
@) is (tic 'Is
@) is (tic_ 'Is
r) is (y_ =@s


@@ -4074,7 +4092,6 @@
betr) oth oUD
?3 cl) o (th O
cl) othe oUD
tr) othe oUD
b) o (ther 0
_r) o (ther 0
o (ther+ V
@@ -4212,7 +4229,7 @@
dr) on (_ @n
or) on (_ 0n
cr) on (_ 0n
x) on (_+ 0n
@x) on (_ @n
phot) on @n
pers) on @n
pers) on (i '0n
@@ -4295,6 +4312,7 @@
.group or
or o@
_) or O@
_) organo (@P6 O@g,anoU
or (ch_ O@
or (m_ O@
st) or (m o@
@@ -5221,6 +5239,7 @@
?5 _) sur sVR
_) sure SU@
sur (anc SU@
sur (g+ s3:
sur (m s3
sur (pa s3
sur (pr s3
@@ -5253,6 +5272,7 @@
te (rrest t2@
r) tga (g gI
@) t (ia S
_pi) t (ia t
s) t (l
to (morr t@
_) to (nn tV
@@ -5265,6 +5285,7 @@
tribe traIb
_) tri (bu trI
_) tri (g trI
_) tri (gonA trI
_) tri (ni trI
_) tri (vi trI
_) tri (xA trI
@@ -5274,23 +5295,6 @@
_) tsu tsu:
_) two tu:
ttu (r t@
@) tu (al tSu:
@) tu (at tSu:
_sta) tu tSu:
?3 _sta) tu (to tS@
c) tu (al_ =tSu:
r) tue (_ tSu:
?3 tu (la_ tS@
@) tu (lat =tSU
?3 tu (Ant tSu:
?3 tu (Ancy tSu:

tu (ous tSu:
@) tur (A tS@r
@) tur (al_ tS=@r
&) tur (y tS@r
&) tur (_ tS3
&) ture (_ tS3
tz ts
tze (_ tsi

@@ -5367,7 +5371,26 @@
&) tious S=@s
AC) tive (_ =tIv


.group tu
@) tu (al tSu:
@) tu (at tSu:
_sta) tu tSu:
?3 _sta) tu (to tS@
c) tu (al_ =tSu:
r) tue (_ tSu:
?3 tu (la_ tS@
@) tu (lat =tSU
?3 tu (Ant tSu:
?3 tu (Ancy tSu:
tu (ous tSu:
@) tur (A tS@r
@) tur (al_ tS=@r
&) tur (y tS@r
&) tur (_ tS3
&) ture (_ tS3

.group u
u V
man) u ju:
@@ -6069,6 +6092,7 @@
ö 3:
ör 3:
ü u:
û u:
ç s
ß s
č tS

+ 4
- 0
dictsource/es_list View File

@@ -29,6 +29,7 @@ _tld t'ilde
// names of symbols
ª a
º o
° grados
_. punto
_, koma
_; p,untoik'oma
@@ -123,6 +124,9 @@ _dpt koma
_#º o
_#ª a
_ord o
ºc gr'ados||T'e
ºf gr'ados||'Efe
ºk gr'ados||k'a

_1o prim'Er
_2o seQ'und

+ 49
- 1
dictsource/hbs_list View File

@@ -1,4 +1,4 @@

// "hbs" is the ISO 639-3 code for Serbian/Croatian/Bosnian macrolanguage
// This file is UTF-8 encoded

@@ -40,6 +40,50 @@
y ipsilon
z z@
ž Z@
а a
б b@
ц ts@
ћ tS;@2
ч tS@
џ dZ@
ѕ dz@
д d@
ђ dZ;@2
е E
ф f@
г g@
х x@
и i
ј j@2
к k@
љ l^@
л l@
м m@
њ n^@
н n@
о o
п p@
р R@
_с s@
ш S@
т t@
у u
в v@
з z@
ж Z@
ѓ dZ;@2
ќ tS;@2

ё jo
й kr,atko||'i
щ StS;@2
ъ tvR2d'i||zn,ak
ы jeri
ь m'eki||z,nak
э e
ю ju
я ja

_á $accent
_é $accent
@@ -47,6 +91,10 @@ _í $accent
_ó $accent
_ú $accent

_ar 'Arapsko
_cyr tS;'iRilitsa


// accent names
_lig l'ig&t,UR&
_acu 'akUt

+ 6
- 1
dictsource/hbs_rules View File

@@ -1,4 +1,4 @@

// "hbs" is the ISO 639-3 code for Serbian/Croatian/Bosnian macrolanguage
// This file is UTF-8 encoded

@@ -31,7 +31,9 @@
.group d
d d
dz dz
_) dz (_ dz@
dž dZ
_) dž (_ dZ@

.group đ
đ dZ;
@@ -67,6 +69,8 @@
.group l
l l
K) l (K l-
_) lj (_ l^@
lj (+ l^
v) lj lj

@@ -79,6 +83,7 @@
n (k N

nj n^
_) nj (_ n^@

.group o
o o

+ 15
- 4
dictsource/hi_list View File

@@ -162,7 +162,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?
श S@
ष s.@ // retroflex [S]
स s@
ह H@-
ह H@
क़ q@
ख़ x@
ग़ Q@
@@ -196,10 +196,21 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?

_?? Vks.@r

// Alphabet names
_ar 'Vrbi
_cyr sIrIk'Ik
_zh c'i@ni

// Punctuation
। dVn.d.V

$ dOl@r
% pVt'IS@t
+ plVs
= bVr'a:b@r
* ta:r'a:Nk@n
*

// Pronouns
मैं $u // main: IrI
मुझे $u
@@ -262,7 +273,7 @@ _?? Vks.@r
को $u // ko: to
तक $u // tak: until, for(time)
बिना $u $pause // without (preposition)
में $u // me: in
में me~: $u+ // me: in
से $u // se: from, with, by


@@ -272,7 +283,7 @@ _?? Vks.@r

// Conjunctions

और $u $pause // aur: and
और $u $brk // aur: and
य j@ $u $pause // ja: or
अगर $u $pause // agar: if
यदि $u $pause // yadi: if, whether
@@ -299,5 +310,5 @@ _?? Vks.@r


// Exceptions
क्रिकेट krIk'Et
क्रिकेट kr'IkIt
सायबर s'aIb@r

+ 2
- 7
dictsource/hi_rules View File

@@ -390,7 +390,7 @@
ः H // visarga

.group ् // virama

// Extra consonants

@@ -410,7 +410,7 @@
ज़ zV
ज़ (B z

.group ड़ // dddha (should retroflex flap)
.group ड़ // dddha (should retroflex flap ?)
ड़ r.V
ड़ (B r.

@@ -443,8 +443,3 @@



.group
$ dOlV
% pVsEnt



+ 2
- 1
dictsource/it_list View File

@@ -1,4 +1,4 @@
// This file is UTF-8 encoded
// This file is UTF-8 encoded


// $alt change [e] or [o] in the stressed syllable to [E] or [O]
@@ -82,6 +82,7 @@ _tld t'ilde
# kantSellet:o
@ ki'otS:ola
~ tilde
° g@-*'a:di
: d,uep'unti

_! p,untoesklamat'ivo

+ 3
- 3
dictsource/ko_list View File

@@ -24,8 +24,8 @@ _9X g'u_!||s'ip_!
_0C p'Eq_!

// Larger numbers
_0M0 tS'h-@n // 10^3
_1M0 tS'h-@n
_0M0 tS'h@n // 10^3
_1M0 tS'h@n
_0M1 m'an // 10^4
_1M1 m'an
_0M2 '@q // 10^8
@@ -50,7 +50,7 @@ _1M4 gj'@N
ᄋ i;'u-N
ᄌ tS;i;'u-t
ᄍ 's-aNdZ;,i;u-t
ᄎ tSh-'i;u-t
ᄎ tSh'i;u-t
ᄏ khi;'u-k
ᄐ thi;'u-t-
ᄑ phi;'u-p

+ 3
- 3
dictsource/ko_rules View File

@@ -83,7 +83,7 @@
ᄍ 'tS;- // TODO: phoneme

.group ᄎ // ㅊ
ᄎ tSh- // TODO: phoneme
ᄎ tSh // TODO: phoneme

.group ᄂ // ㄴ
ᄂ ;n
@@ -198,7 +198,7 @@
ᇀᄂ nn
ᇀᄆ mm
ᇀ (A th
ᇀ (L02 tSh;
ᇀ (L02 tS;h

.group ᆸ // ㅂ
ᆸ p
@@ -236,7 +236,7 @@
ᆾ t
ᆾᄂ nn
ᆾᄆ mm
ᆾ (A tSh;
ᆾ (A tS;h

.group ᆫ // ㄴ
ᆫ n

+ 0
- 7
dictsource/ml_rules View File

@@ -295,12 +295,5 @@



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

.group 0xe0a5 // devanagari
0xe0a5 _^_HI


.group
$ do:l.ar

+ 8
- 4
dictsource/nl_list View File

@@ -1,4 +1,4 @@

// This file in UTF8 encoded

// $alt2, remove s from plural, remove en from plural
@@ -58,7 +58,7 @@ _tld t'Ild@


// punctuation
. p8nt $max3
. p8nt
_, k'Oma:
_: d'8b@l@p,8nt
_; p'8ntkOm,a:
@@ -75,10 +75,12 @@ _) h'a:kj@sl'Wyt@n
_{ v'irkAnt@h,a:k
_} v'irkAnt@h,a:ksl'Wyt@n
_- k'OpElt,e:k@n
+ pl'8s $max3
* st'E*rEt;@ $max3
+ pl'8s
* st'E*rEt;@
= Q@l'EIkte:k@n
__ l'IgEntst@-*'e:pj@
€ 'Y:*o:t,e:k@n
° Qra:d@n


// numbers
@@ -133,6 +135,7 @@ _0Co h'OndErtst@

// abbreviations
be $abbrev // used as domain abbrev for Belgium and in a lot of other names
ca ka: $hasdot
enz Enzo:vo:rt
bvb bEIv'o:rbe:lt
eu e:_y: $abbrev
@@ -379,6 +382,7 @@ reken $alt
schepen $alt
steven $alt
teken $alt
volwassen $alt
wapen $alt
zegen $alt
trokken $alt

+ 12
- 5
dictsource/nl_rules View File

@@ -4,7 +4,7 @@
// Suffix rule: SUFX_E eg. S2e means double the vowel before the final consonant

.L01 g k
.L02 _ t_ d_ de_ den_ // verb endings
.L02 _ t_ d_ de_ den_ nen_ // verb endings ('nen' for 'scannen')


.group a
@@ -330,13 +330,20 @@
g Q // ph_dutch changes to [x] before unvoiced, NULL after [x]
gg Q
s) g x
@) gi (eus Z
@) gi (euz Z
reli) gi (eu Qij

.group ge
_) ge (@P2 Q@
ge (bied Q@
_) gee Qe:
_) gei QEI
gener (aal Q,e:n@r
_) gelijk Q@lEIk
_) ge (lC QE
_) ge (rC QE
_) geu QY:
_) ge (ven Qe:
@@ -346,10 +353,8 @@

ge (sprek Q@ // in compounds

@) gi (eus Z
@) gi (euz Z
reli) gi (eu Qij


.group h
h h
@@ -360,6 +365,7 @@
_) herinn h%ErIn // herinneren
_) hersen h'Ers@n
&) heid (_S4 hEIt
_) hulp (@@P4 h'8lp


.group i
@@ -546,13 +552,14 @@ _) inn (@P2 'I // ?? inneren
pl) oi (t v#A
c) oi (ffu v#A
pr) o (gram o:
omgeving OmQ'e:vIN
oo (X 'o:
oon 'o:n // in compounds, eg. telefoongesprek
oo (C_ 'o:
_) oost (@P4 o:st
_) op (@@P2 'Op
_) open (@P4 'o:p@n
_) op (enen 'o:p
_) op (enen+ 'o:p
_) openings (P8 'o:p@nINs
_) op (era 'o:p
_) op (tion Op

+ 106
- 72
dictsource/pt_list View File

@@ -329,8 +329,7 @@ vocês $u2+ $verbf
eles $u+ $verbf
elas $u+ $verbf

me $u // reflexive
me $u $verbf
me $u $verbf // reflexive
te $u $verbf
nos $u $nounf
la $u
@@ -345,7 +344,7 @@ se $u
?2 nesta $u+ $nounf
?2 neste $u+ $nounf n'estSi //in this
?2 esse $u+ $nounf 'esi // that
essa 'Es& $u+
essa 'Es& $u+ $noun
desse $u+ $nounf
desta $nounf
nesse n'esy $u+ $nounf
@@ -384,7 +383,7 @@ duma $u $nounf
duns $u $nounf
dumas $u $nounf

em $u // in,on,at
em $u $noun // in,on,at
no nu $u $nounf
na $u $nounf
num $u $nounf
@@ -427,7 +426,7 @@ com $u // with
// conjunctions
?1 e i $u // and
?2 e i $u // and
se $u // if
se $u+ $verbf // if


?2 mas $u // but
@@ -522,7 +521,7 @@ estão $u

estava $u
estávamos $u
astavam $u
estavam $u

estive $u
?2 esteve estevy $u2
@@ -619,9 +618,14 @@ o O $atend


// some common adjectives and adverbs
alguns $u // some
algumas $u // some
não n,&U~ $strend // not
alguns $u $noun // some
algumas $u $noun // some
não n,&U~ $verbf $strend // not
nunca $u+ $verbf
sempre $u+ $verbf
qualquer $u $nounf
quaisquer $u $nounf
jamais $u+ $verbf


// MAIN WORD DICTIONARY
@@ -639,18 +643,19 @@ acervo $alt2
adepto $alt
adore $alt
adorno $alt $verb
aeroporto $alt2
aeroportos $alt
albatrozes $alt
alcateia $alt
alcova $alt2
alferes $alt
algozes $alt
alicerce $alt
almoço $alt $verb
amarelo $alt
ameba $alt
amores $alt2
antonieta $alt2
apego $alt2 $noun
apelo $alt $verb
apelo $alt2 $noun
aposto $alt $verb
aperto $alt2 $noun
apneia $alt
@@ -660,8 +665,8 @@ arremesso $alt2 $noun
arroz $alt2
assembleia $alt
ateia $alt
aterro $alt2 $noun
aterros $alt2
aterro $alt2
aterro $alt $verb
atmosfera $alt
atrozes $alt
autora $alt2
@@ -671,10 +676,10 @@ azeda $alt $verb
azedo $alt $verb
baqueta $alt2
beco $alt2
belo $alt
besta $alt2
bilhete $alt2
boca $alt2
boceta $alt2
bochecha $alt2
bojo $alt2
boleia $alt
@@ -683,37 +688,41 @@ bolo $alt2
bolo $alt $verb
borboleta $alt2
bordo $alt
borra $alt2 $noun
bosque $alt
boto $alt2 $noun
boxe $alt
brejo $alt
bromelha $alt
cabelo $alt2
cabresto $alt2
cacete $alt2
cachorra $alt2
caderneta $alt2
cadete $alt2
camelha $alt
camelo $alt2
caminhonete $alt
camiseta $alt2
cantora $alt2
capacete $alt2
caractere $alt
caramelo $alt
carbureto $alt2
careta $alt2
carreta $alt2
carroça $alt
casebre $alt
castelo $alt
cateto $alt2
catorze $alt2
cebola $alt2
cefaleia $alt
centopeia $alt
centopeia $alt
cerca $alt
cerca $alt2 $noun
cerco $alt $verb
chamego $alt2
chefe $alt
checam $alt
cheque $alt
chinelo $alt
choro $alt2 $noun
chovesse $alt2
chupeta $alt2
@@ -721,7 +730,6 @@ clamores $alt2
clero $alt
coco $alt2
cofre $alt
cogumelo $alt
coice $alt2
colabore $alt
colete $alt2
@@ -736,9 +744,11 @@ concerto $alt2 $noun
concertos $alt2
concordo $alt
conforto $alt $verb
congelo $alt
console $alt2 $noun
consolo $alt2 $noun
controle $alt2 $noun
controles $alt2
controles $alt $verb
controlo $alt2 $noun
coreia $alt
coreto $alt2
@@ -749,37 +759,39 @@ corto $alt
corveta $alt2
corvos $alt
coto $alt2
cotovelo $alt2
cratera $alt
crede $alt2
crepe $alt
decore $alt
degelo $alt2
desapego $alt2 $noun
descabelo $alt
descordo $alt
desemprego $alt2
desemprego $alt $verb
desespero $alt2 $noun
desfecho $alt2
desmantelo $alt $verb
desmantelo $alt2 $noun
desporto $alt2
desportos $alt
desprezo $alt2 $noun
desse $alt2
desse $alt $verb
deste $alt2
deste $alt $verb
desterro $alt2
destroem $alt
destroem $alt
deveras $alt
dez $alt
diarreia $alt
diego $alt2
discordo $alt
dobro $alt2 $noun
doce $alt2
doutora $alt2
droga $alt
duelo $alt
dueto $alt2
elixir eliSir
elo $alt
emprego $alt2 $noun
empregos $alt2
encosto $alt $verb
@@ -787,73 +799,77 @@ endereço $alt $verb
enforco $alt
engordo $alt
enredo $alt $verb
enrosco $alt $verb
enrosco $alt $verb
enterro $alt2 $noun
enumerem $alt
envelope $alt
envolto $alt2
enxaqueca $alt2
enxerto $alt2 $noun
epopeia $alt
eritreia $alt
erro $alt2 $noun
erros $alt2
erro $alt2
erro $alt $verb
esboço $alt $verb
escopeta $alt2
escova $alt2 $noun
escovas $alt2
escovas $alt2
escovo $alt
escroto $alt2
esforço $alt $verb
esforços $alt
esgoto $alt2 $noun
esgotos $alt2
esgoto $alt2
esgoto $alt $verb
esperma $alt
espeto $alt2 $noun
espiroqueta $alt2
espoleta $alt2
esposa $alt2
esqueleto $alt2
estilete $alt2
estilete $alt2
estrela $alt2
estrofe $alt
estorno $alt $verb
estorvo $alt $verb
etiqueta $alt2
europa $alt
europeia $alt
europeia $alt
exagero $alt $verb
explore $alt
faceta $alt2
fantoche $alt
farelo $alt
fantoche $alt
farofa $alt
farolete $alt2
febre $alt
fera $alt
feitora $alt2
ferozes $alt
fezes $alt
filete $alt2
?1 fixe fiSy
foda $alt2 $verb
folheto $alt2
folga $alt
fogos $alt
foguete $alt2
foice $alt2
folheto $alt2
fora $alt
fora $alt2 $verb
forca $alt2
força $alt2 $noun
forças $alt2
forço $alt
formos $alt2
forro $alt $verb
frevo $alt2
fulgores $alt2
galera $alt
galileia $alt
gameta $alt2
garçonete $alt2
geleia $alt
gelo $alt2
gelo $alt $verb
genebra $alt
germe $alt
gesso $alt2
golpe $alt
gonorreia $alt
@@ -871,28 +887,30 @@ hemorroida $alt
hoje $alt2
horrores $alt2
ideia $alt
interesse $alt2 $noun
imberbe $alt
interesse $alt2
interesse $alt $verb
jogo $alt2 $noun
joguete $alt2
lagosta $alt2
lambreta $alt2
lanchonete $alt
lebre $alt
lembrete $alt2
lepra $alt
leste $alt2 $verb
lingueta $alt2
lopes $alt
macete $alt2
maior $alt
maleta $alt2
marcelo $alt
marmelo $alt
marionete $alt
marreta $alt2
martelo $alt
megera $alt
melhor $alt
menor $alt
merda $alt
megera $alt
melo $alt
mentora $alt2
merda $alt
meta $alt $noun
meteoro $alt
metro $alt
@@ -902,8 +920,11 @@ mexo m'eSU
minueto $alt2
miolo $alt2
miolos $alt
modelo $alt2
modelo $alt $verb
moeda $alt
mofo $alt $verb
moem $alt
mofo $alt $verb
molho $alt2 $noun
monera $alt
morcego $alt2
@@ -922,12 +943,15 @@ namoro $alt2 $noun
naquela $nounf
naquele $alt2 $nounf
nervo $alt2
nojo $alt2
novelo $alt2
novos $alt
obstetra $alt
odisseia $alt
onu $1
olho $alt2 $noun
onomatopeia $alt
olho $alt2 $noun
olhos $alt
onomatopeia $alt
opereta $alt2
ordens $alt
osso $alt2
@@ -941,16 +965,14 @@ palacete $alt2
palheta $alt2
panfleto $alt2
pangeia $alt
panqueca p,&~Nk'Ek&
pantera $alt
paralelo $alt
parede $alt2
pastora $alt2
patinete $alt
pedra $alt
pela $alt $verb
pelego $alt2
pela $alt $verb
pelo $alt $verb
pelo $alt2
pelo $alt $verb
peso $alt $verb
piloto $alt2 $noun
pintora $alt2
@@ -969,7 +991,7 @@ pose $alt2
povos $alt
poxa p'oS&
primavera $alt
prosopopeia $alt
prosopopeia $alt
quarteto $alt2
queda $alt
quede $alt2
@@ -985,12 +1007,17 @@ reforço $alt $verb
reforços $alt
refresco $alt $verb
reitora $alt2
rejo $alt
relevo $alt2 $noun
remorso $alt
renovo $alt $verb
retorno $alt $verb
reuva x'EUv&
rigores $alt2
rixa x'iS&
rocha $alt
rock $alt
roem $alt
rola $alt2 $noun
rolo $alt2 $noun
rota $alt2
@@ -1003,12 +1030,12 @@ seca $alt2 $noun
secas $alt2
seco $alt2
seco $alt $verb
selo $alt $verb
selo $alt2
selo $alt $verb
selvagem seUv'aZeIN
sexteto $alt2
?1 senhora $alt2
senhores $alt2
singelo $alt
sinopse $alt
soco $alt2
soco $alt $verb
@@ -1025,6 +1052,7 @@ suor swOr
tapete $alt2
temores $alt2
tempero $alt2 $noun
tenores $alt2
terrores $alt2
teta $alt2
tetra $alt
@@ -1032,9 +1060,10 @@ tocha $alt
toga $alt
topo $alt $verb
torno $alt $verb
tornozelo $alt2
torre $alt2 $noun
torres $alt2
torro $alt
torro $alt
tortos $alt
traqueia $alt
travesso $alt2
@@ -1047,17 +1076,14 @@ trombeta $alt2
tumores $alt2
valeta $alt2
vanessa $alt2
velo $alt
velozes $alt
verme $alt
verbete $alt2
violeta $alt2
violoncelo $alt
voga $alt
vozes $alt
xarope $alt
xeque $alt
zelo $alt $verb
zero $alt
zelo $alt2 $noun
zorra $alt2


@@ -1067,7 +1093,8 @@ zorra $alt2
?1 back b'Ek
?2 backup bEk'&p
?2 backups bEk'&ps
?1 blind bl'aind
blind bl'aind
book buk
?1 braille b:r'aily
?2 Braille bR'aili
?1 cancel k'&ns'El
@@ -1083,8 +1110,10 @@ zorra $alt2
?1 download d'a,wnl'oud
?2 download daUNl'owd
?3 download dau~Nl'owd
drive dR'aivy
driver dR'aiver
drivers dR'aiveRs
?1 end 'end
?1 escape Sk'eIpy
?2 esc 'Esk
?3 esc 'EskI
?1 explorer ,ekspl'O:*&r-
@@ -1107,6 +1136,7 @@ zorra $alt2
?2 Intranet iNtRan'Et
?1 kernel k'Ern,El
?2 kernel k'Ern@l
laptop lEptOp
?1 line l'ain
layout l'eI,aUt
?2 logo l'OgU
@@ -1123,6 +1153,7 @@ zorra $alt2
?1 ovo 'ovu
?1 pause p'au:z
page p'eIdZ
pizza p'its&
python p'aIT&~N
?1 readme r'i:dmi:
?1 sapi s,ap'i
@@ -1137,14 +1168,13 @@ símbolo s'imbolU
?2 software s'Oftwe@-
?1 space sp'eIsy
?1 sporting sp'Ort,ing
?1 tab t'ab
tab t'aby
tablet t'ablet
?1 telemóvel t,El,Em'OvEl
?1 telemóveis t,El,Em'OveIs#
?1 up &p
?1 upload &pl'oud
?2 web w'Eb
?2 verbete verb'etSi
?2 verbetes verb'etSis
?1 yahoo 'i,ah'u
?2 yahoo iah'u
?1 yes j'Es
@@ -1158,14 +1188,16 @@ louis _^_FR
// foreign product names
?1 access 'aks,Es
?1 adobe &d'Oby
apple 'Epow
chrome kR'owmi
debian d'Ebj&~N
?1 excel ,Eks'El
?1 express ,Ekspr'Es
espeak isp'i:k
?1 espeakedit isp'i:kEd,it
facebook feisybuk
?1 fedora _^_EN
?1 firefox f'ai&rfOks
?2 firefox f'ai@fOks
firefox f'ai@fOks
?1 front fr'ont
?1 jaws dZ'au:z
?1 linux l,in'uks
@@ -1178,7 +1210,8 @@ louis _^_FR
?2 microsoft m'aIkRows'Oft
?1 movie m'uvi
?1 nero n'Eru
?1 office 'Of,is
/1 office 'Of,is
?2 office 'Ofsy
openoffice 'opeIN|'Ofis
?1 outlook 'autl'uk
?2 Outlook ,aUtl'uk
@@ -1200,6 +1233,7 @@ playstation _^_EN
suse z'u:ts@
?1 start st'art // nero StartSmart
?1 time t'aImy // nero show time
twitter tw'iter
ubuntu ub'untu
?1 unix ,u:n'iks
?2 unix j'uniks

+ 67
- 27
dictsource/pt_rules View File

@@ -47,7 +47,6 @@
?1 a (lK ,A // Algarve, Almerinda, etc...
?2 al (K aU
a (lh+ a

a (m &~
a (mAr_ &
a (mA@ &
@@ -100,6 +99,7 @@
ái (s ''aI
á (iCK ''a
áy ''aI
ál (C ''aU
áu ''aU
áu (s ''aU
?1 ál ''Al
@@ -198,7 +198,7 @@
e (guem_ E

e (lA_ E
e (lo_ e
e (lo_ E
e (lAm_ E

i) e (r_ E
@@ -220,9 +220,15 @@
f) e (re_ E
f) e (rem_ E

e (que_ E
e (quem_ E

e (rgA_ E
e (rgAm_ E

e (rgue_ E
e (rguem_ E

e (rsA_ E
e (rsAm_ E

@@ -236,6 +242,8 @@
e (stAm_ E
e (strA_ E

e (rme_ E

e (rnA_ E
e (rnAm_ E

@@ -265,7 +273,6 @@
e (xA_ E
e (xAm_ E
?2 _n) e (t E

em (C eIm
en (K eIN
enh en^
@@ -359,6 +366,7 @@
_perd) e (L05_ e
_quis) e (L05_ E
_soub) e (L05_ E
_talh) e (L05_ E
_trem) e (L05_ e
diss) e (L06_ E // contra-
fend) e (L06_ e // de- o-
@@ -452,25 +460,26 @@ respond) e (L07_ e // cor-
_hosp) e (dL03_ E
_gr) e (gL03_ e
_gal) e (gL03_ e
_pel) e (gL03_ e
_n) e (grL03_ e
_ch) e (guL02_ e
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
_reit) e (rL03_ E
_sinc) e (rL03_ E
_g) e (rL04_ E
_z) e (rL04_ E
qu) e (rL04_ E // re-
_op) e (rL04_ E
gen) e (rL04_ E // de- re-
_alt) e (rL04_ E
_enc) e (rL04_ E
_sug) e (rL04_ E
_sup) e (rL04_ E
_tol) e (rL04_ E
@@ -482,16 +491,16 @@ respond) e (L07_ e // cor-
_recup) e (rL04_ E
_refrig) e (rL04_ E
_v) e (rbL03_ E
_alic) e (rcL02_ E
_p) e (rdL02_ E
_l) e (rdL03_ E
_h) e (rdL04_ E
_) e (rgL03_ e
_) e (rguL02_ E
_alb) e (rguL02_ E
_enx) e (rguL02_ E
_bez) e (rrL03_ e
_inv) e (rtL03_ e
_f) e (rvL03_ e
_alic) e (rçL03_ E
_p) e (sL01_ E
_l) e (sL03_ E
_refr) e (scL01_ E
_d) e (scL02_ E
_cr) e (scL02_ E
@@ -517,6 +526,7 @@ _obsol) e (tL03_ e
_atr) e (vL03_ e
_r) e (zL04_ E
_pr) e (zL04_ E
_rev) e (zL04_ E
_despr) e (zL04_ E
_embel) e (zL04_ E
_menospr) e (zL04_ E
@@ -534,6 +544,7 @@ _entorp) e (çL03_ e
éi (s ''EI
é (iCK ''E
éy ''eI
él (C ''EU
éu ''EU
éu (s ''EU
é (uCK ''E
@@ -573,11 +584,19 @@ _entorp) e (çL03_ e
g (Y Z // ge gi
gu (Y g
a) gu (ent gw
_ar) gu (i gw
averi) gu (e gw
enxa) gu (e gw
i) gu (idade gw
lin) gu (e gw
lin) gu (i gw
_min) gu (e gw
_pin) gu (im_ gw
_pin) gu (ins_ gw
_sa) gu (i gw
san) gu (ín gw
san) gu (in gw
tin) gu (i 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...
@@ -610,6 +629,8 @@ _entorp) e (çL03_ e

i (A_ 'i
i (am_ 'i
i (em_ 'i

io (_ iU
io (s_ iU
i (oCK i
@@ -647,6 +668,7 @@ _entorp) e (çL03_ e
ím (C ''im
ín (K ''iN
ính ''in^
íl (C ''IU


.group j
@@ -673,9 +695,9 @@ _entorp) e (çL03_ e
_) l (_ 'Ele
l l
l) l
lh l^
lh lj
A) lh lj
?1 A) lh l^
A) lh l^
?4 A) lh l^


@@ -741,9 +763,15 @@ _entorp) e (çL03_ e
o (lA_ O
o (lAm_ O

o (lhe_ O
o (lhem_ O

o (ltA_ O
o (ltAm_ O

o (lve_ O
o (lvem_ O

o (sA_ O
o (so_N o // not for osos_
o (sAm_ O
@@ -760,9 +788,7 @@ _entorp) e (çL03_ e

?1 o (l_ 'O
?2 ol (_ Ow
o (lh o
?2 _) o (lhA_ O
?2 _) o (lhAm_ O

om (_ oN
o (ma_ o

@@ -820,10 +846,12 @@ _entorp) e (çL03_ e

//sort
_f) o (L05_ o
_pormen) o (L05_ O
_f) o (L07_ o
_engl) o (bL01_ O
_s) o (bL02_ O
_af) o (bL04_ O
_esn) o (bL04_ O
_engl) o (bL04_ O
br) o (chL04_ O
_deb) o (chL04_ O
_m) o (fL01_ O
@@ -838,19 +866,17 @@ _entorp) e (çL03_ e
_ap) oi (L02_ OI
_b) oi (L04_ OI
_t) o (lL03_ o
c) o (lhL02_ O // es- en- re-
_t) o (lhL02_ O
_m) o (lhL04_ O
env) o (lvL02_ O // des-
_abs) o (lvL02_ O
_dev) o (lvL02_ O
_res) o (lvL02_ O
_rev) o (lvL02_ O
_ent) o (pL02_ O
_f) o (lgL04_ O
_emp) o (lgL04_ O
_) o (lhL04_ O
m) o (lhL04_ O
ent) o (pL02_ O
_c) o (pL03_ O
_ens) o (pL04_ O
_s) o (prL04_ O
_) o (ptL04_ O
p) o (rL02_ o
_dev) o (rL02_ O
_defl) o (rL02_ O
_impl) o (rL02_ O
_inod) o (rL03_ O
@@ -926,17 +952,21 @@ _remem) o (rL04_ O
?1 _) qua kwa // quatro, etc.
?1 _) que ke // quente, etc.
?1 _) quei (C k'eI // queira, queima, etc
A) quên (C kw'eIN // frequência, etc.
quên kw'eN // quinquênio, etc.
ade) qu (e kw
_a) qu (idade_ kw
_a) qu (ífero_ kw
e) qu (estr kw
ese) qu (ív kw
_e) qu (in kw
fre) qu (ent kw
_ini) qu (idade_ kw
li) qu (id kw
lí) qu (id kw
n) qu (en kw
_) qu (inqu 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.
?1 C) quê (_ ke // porquê, etc.
@@ -994,6 +1024,14 @@ _remem) o (rL04_ O
?1 A) s (G+ Z
?1 A) s (_KS1 s#
?1 A) s (_G+S1 Z
s (b z
s (d z
s (g z
s (l z
s (m z
s (n z
sr zx
s (v z

_) sobre (@P5 sob*e

@@ -1027,6 +1065,8 @@ _remem) o (rL04_ O
u (iu w
u (iCK u
uy uI
ul (K uw
u (lh+ u

um (_ u~N
um (C u~m

+ 5
- 5
dictsource/ru_list View File

@@ -28,7 +28,7 @@ _10 d;'es;It;
_11 Od;'innVttsVt;
_12 dv;In'AttsVt;
_13 tR;In'AttsVt;
_14 ts;It'y@-*nVttsVt;
_14 tS;It'y@-*nVttsVt;
_15 p;Itn'AttsVt;
_16 SE#stn'AttsVt;
_17 s;Imn'AttsVt;
@@ -45,15 +45,15 @@ _9X d;E2v;In'ostO
_0C st'o
_2C dv;'es;t;I
_3C tr;'ista
_4C ts;It'yr;E2sta
_4C tS;It'yr;E2sta
_5C p;,It;s'ot
_6C S,E#s;t;s'ot
_7C s;,Ims'ot
_8C vOs;Ims'ot
_9C dev;Vts'ot
_1MA1 t'ys;Its;V // no '1' before thousand
_0MA1 t'ys;Its;i
_0M1 t'ys;Vts;
_1MA1 t'ys;ItS;V // no '1' before thousand
_0MA1 t'ys;ItS;i
_0M1 t'ys;VtS;
_1MA2 m;,IlI;'on
_0MA2 m;,IlI;'ona
_0M2 m;,IlI;'onof

+ 171
- 0
dictsource/te_list View File

@@ -0,0 +1,171 @@
// 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:rp
s Es
t t#i:
u ju:
v vi:
w dabalju:
x Eks
y wa:j
z zEd



// numbers
_0 sunna
_1 okat.i
_1a oka
_2 rend.u
_3 mu:d.u
_4 na:lugu
_5 aIdu
_6 a:ru
_7 ;e:d.u
_8 ;enimidi
_9 tommidi
_1X padi
_11 padakond.u
_12 pannend.u
_13 padammu:d.u:
_14 pad#na:lugu
_15 padihe:nu
_16 padaha:ru
_17 padihe:d.u
_18 padd#enimidi
_19 pandommidi
_2X irav#aI
_3X muppaI
_4X nalub#aI
_5X ja:b#aI
_6X arav#aI
_7X d.#eb#baI
_8X jenab#aI
_9X tomb#aI
_0C v#andala
_0C0 v#andalu
_1C okav#anda
_0M1 v#ela
_0M1x v#elu
_1M1 okav#ejji
_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.
/ kudiva:lugi:ta
© ka:pi:raIt.
¶ v#e: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 v#ottu

// 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#
మ్ imu:
య్ 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



+ 271
- 0
dictsource/te_rules View File

@@ -0,0 +1,271 @@

// 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 వ
వ v#a
వ (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

ం n // 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:

ృ r-

ౄ r-:

ె e

ే e:

ై aI

ొ o

ో o:

ౌ aU

్ // virama

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


.group
$ d.a:lar



+ 187
- 12
dictsource/ur_list View File

@@ -36,7 +36,7 @@
ل la:m
م mi:m
ن nu:n
و va:O
_و va:O
ہ He:
ں g#Unna
ﮨ c#o:ti:||He:
@@ -45,10 +45,13 @@
ی c#o:t.i:||je:
ے bar.i:||je:
ئ h'amza
ۂ He:h'amza
_ؤ va:Oh'amza

َ z@b@R
ِ ze:R
ُ pe:S
ٰ ,alIfmaqs'u:R,a
ّ t,aSd'i:d
ً d'o:zab'aR

@@ -166,8 +169,7 @@ _dpt _ISaRI'Ia_


// pronouns
یہ jE $u
کہ kE $u
یہ j'e:H $u
وہ wo: $u
آپ $u
تم tUm $u
@@ -186,8 +188,8 @@ _dpt _ISaRI'Ia_
تجھے t'UJ#e:
جن J'In
جنھیں J,InH'e:n
انھوں ,UnH'o:n
انھیں ,InH'e:n
انہوں ,UnH'o:n
انہیں ,UnH'e:n

// unstressed prepositions
کا $u
@@ -196,6 +198,7 @@ _dpt _ISaRI'Ia_
سے $u

اور OR $u $brk
کہ k'e:H $u

// unstressed verbs
ہے $u
@@ -206,7 +209,6 @@ _dpt _ISaRI'Ia_

// Pronunciation exceptions
پاکستان p'a:k'i:st'a:n
سندھ s'Ind#
کچھ k'Uc#
لنکس l'Ink,s
لفظ l'afz.
@@ -218,7 +220,6 @@ _dpt _ISaRI'Ia_
مسلح m,Usal'aH
متفق mUt'afIq
سابق s'a:bIq
برسر b,aRs'aR
اعلان e:l'a:n
سنئیے sUn'i:;e:
کلنگ k'IlIn,g
@@ -226,7 +227,6 @@ _dpt _ISaRI'Ia_
جسٹس J'ast.,Is
شکایت S,Ika:j'at
شکست SIk'ast
منزل m'anz,Il
شعر S'e:R
فعل f'e:l
خصوصی xUs.'u:s.i:
@@ -256,7 +256,6 @@ _dpt _ISaRI'Ia_
باہر ba:H'aR
دیا d'i:;a:
انڈیا ,Ind.'i:;a:
مظاہرین m,Uz.a:HIR'i:n
فائرنگ f'a:jIR,Ing
ڈائریکٹر d.,a:jIR,e:kt.'aR
فرقہ f'IRqa
@@ -303,7 +302,6 @@ _dpt _ISaRI'Ia_
بغیر baQ'e:R
ممکن m'Umk,In
ممکنہ m'Unk,In,a
طرح taR'aH
الیکشن ,Ile:kS'an
ووٹنگ vo:t.'Ing
شواہد Sav'a:HId
@@ -348,11 +346,188 @@ _dpt _ISaRI'Ia_
تعین t'a:jUn
باعث b'a:jIs
کتب k'UtUb
سلسلہ s'Ils,Il,a
سلسلے s'Ils,Ile:
بحث be:He:s
قسمت q,Ism'at
آور a:v'aR
بظاہر baz.'a:HIR
ظاہر z.'a:HIR
حکم H'Ukm
کورٹ k'o:Rt.
برطرف b,aRtaR'af
برطرفی b,aRt'aRf,i:
لئے l'i:;e:
نامزد n,a:mz'ad
نامزدگی n,a:mz'adg,i:
معطل m,Oat'al
معطلی m,Oat'ali:
تین t'i:n
تینوں ti:n'o:n
ڈاکٹر d.,a:kt.'aR
اقبال ,Iqb'a:l
جرم J'URm
اقتدار ,IqtId'a:R
عشرت ,ISR'at
نگران n,IgR'a:n
نگرانی n,IgR'a:ni:
مستقل m,Ust'aqIl
مستقبل m,Ust'aqb,Il
میر m'i:R
چھ c#'eh_!
خفیہ xUf'i:;a
اٹھانا Ut.#'a:na:
اٹھانی Ut.#'a:ni:
اٹھانے Ut.#'a:ne:
اٹھا 'Ut.#a:
اٹھی 'Ut.#i:
اٹھے 'Ut.#e:
قوت qu:v'at
اٹھایا Ut.#'a:ja:
اٹھائی Ut.#'a:ji:
اٹھائے Ut.#'a:je:
مدافعت m,Uda:fI;'at
خطرہ x'atRa
مظفر m,Uz.af'aR
کرکٹ kRIk,It.
انگلینڈ ,Ingl'e:nd.
رنز R'anz
انسداد ,InsId'a:d
نہیں naH'i:n
صحتِ s.e:H'ate:
متفقہ mUt'afIqa
تعلق t'a:lUq
متعلق mUt'a:lIq
متعلقہ mUt'a:lIqa
مسترد m,UstaR'ad
مثبت m,Usb'at
تاہم ta:H'am
پیشرفت p,e:SR'aft
تعطل t'a:tUl
متعدد mUt'a:dId
گیا g'aja:
(کیا گیا) k'i:;a:||g'aja:
(ہوا تھا) H'u:a||t#a:
(کیا ہوا) kj'a:||H'u:a:
اتحاد ,ItaH'a:d
اننگز In'Ingz
بیٹنگ be:t.'Ing
منٹ m'InIt.
ناممکن n'a:mUmkIn
(کیا جائے) k'i:;a:||J'a:je:
جمعرات J,Ume:R'a:t
جمعہ J'Uma:
برسرِ b,aRs'aRe:
درجنوں d,aRJan'o:n
درجن d,aRJ'an
خلاف xIl'a:f
برخلاف b,aRxIl'a:f
کرکٹر kRIkIt.'aR
ذمہ D'Im,a
دستخط d,astx'at
اجاگر ,UJa:g'aR
فطرت f,ItR'at
فطرتاً f,ItRat'an
طاقتور ta:q'atvaR
دفتر d,aft'aR
مشرف m,USaR'af
سنگھ s'Ing#
کمپلیکس k,ampl'e:ks
مرتبہ m,aRt'ab,a
واقع v'a:qe:
یہیں jaH'i:n
کیونکہ kj,u:nk'e:H
گفتگو g'Uft,Ugu:
جستجو J'Ust,UJu:
بھانت b#'a:nt
چکے c'Uke:
مفت m'Uft
(تو نے) t'u||n'e:
پرسکون p,URsUk'u:n
منحصر m,UnH'as.IR
سکون sUk'u:n
گشت g'aSt
گذار gUD'a:R
پرور p'aRvaR
قصے q'Is.e:
قصہ q'Is.,a
قصوں qIs.'o:n
محفوظ m,e:Hf'u:z.
مقدس m,Uqad'as
و o:
انحراف ,InHIR'a:f
مبینہ m,Ubai:;'an,a
متبادل m,Utab'a:dIl
گنا g'Una:
ملک m'Ulk
ملکی m'Ulk,i:
ملکوں m,Ulk'o:n
ممالک mUm'a:lIk
سنیچر s,ani:c'aR
اختر ,axt'aR
ملا m'Ila:
سٹیڈیم st.e:d.i:;'am
مدت mUd'at
باکس b'a:ks
آفس 'a:fIs
اشاعت ,ISa:'a:t
اظہار ,Iz.H'a:R
برقرار b,aRqaR'a:R
گھریلو g#aR'e:lu:
ٹھیک t.#'i:k
مشتمل m,USt'amIl
متلاشی m,Utal'a:Si:
ذکر D'IkR
محسوس m,e:Hs'u:s
برعکس b,aR'aks
بت b'Ut
بتوں bUt'o:n
سسٹم sIst.'am
معمر m,Oam'aR
حلیے H'Ulje:
ہلا H'Ila:
گذشتہ gUD'aSta
خطوط xUt'u:t
ہفتہ H'afta
مکرر m,UkaR'aR
چینی c'i:ni:
خیرمقدم x,e:Rm,aqd'am
محترمہ m,UHt'aRma
محترم m,UHtaR'am
ورزش v'aRz,IS
شروع S'URu:
انٹرنیٹ ,Int.,aRn'e:t.
سروس s'aRvIs
سروسز s'aRvIs,Iz
لطف l'Utf
سامع s'a:me:
ہوائیں H,ava:j'e:n
سرے s'IRe:
طبیعت t,abi:;'at
سخن sUx'an
گہر go:H'aR
سست s'Ust
لیکن l'e:kIn
سیاست sja:s'at
ریاست Rja:s'at
منسلک mUns'alIk
داخل d'a:xIl
نجی n'IJi:
منہدم m,UnH'adIm
گم g'Um
محدود m,e:Hd'u:d
متحارب m,UtaH'a:RIb
جنت Jan'at
سفر saf'aR
(فیس بک) f'e:s||b'Uk
بینک b'e:nk
حقوق HUq'u:q
آئندہ a:'Ind,a
اہتمام 'e:HtIm,a:m
قلت qIl'at
استحکام ,Iste:Hk'a:m
حصول HUs.'u:l
منقطع m,Unq'ata:
مرتکب m,URt'akIb
منہ m'u:n
فتنہ f'Itna
ذرائع DaR'a:e:
مریم m,aRi:;'am

+ 122
- 9
dictsource/ur_rules View File

@@ -16,7 +16,7 @@
٨ 8
٩ 9
ي ی
یٰ ا


// vowel signs, alif acts as consonants at start of word if these follow
@@ -81,6 +81,26 @@ _) ای e:
_) ایمان i:m'a:n
_) اعت 'e:tI
_) اضاف Iz'a:f
_) اختلاف ,IxtIl'a:f
_) اسمبلی as'ambli:
_) اٹھت 'Ut.#t
_) اٹھن 'Ut.#n
_) اٹھات Ut.#'a:t
اقلیت ,aqali:;'at
استثن ,Ist'asn
اندھیر 'and#e:R
انتالیس ,Unta:l'i:s
انتیس ,Unt'i:s
اکثر ,aks'aR
ایران i:R'a:n
اجتماع ,IJtIm'a:
استحصال ,Ist,e:Hs.'a:l
_) امنگ Um'ang
انعام In'a:m
امتحان ,ImtIH'a:n
الزام ,Ilz'a:m
اشتہار ,IStIH'a:R
اصول Us.'u:l

.group آ
آ a:
@@ -91,7 +111,8 @@ _) ای e:
عا a:
_) ع a
_) عیس 'i:s

_) عید 'i:d
عنوان Unv'a:n

.group و
و o:
@@ -117,6 +138,9 @@ _) ای e:
.group ے // yeh barree
ے e:

.group ۂ
ۂ 'ae:

// with hamza
.group ئ
ئ
@@ -148,7 +172,14 @@ _) ای e:
بھیک bh'i:k
بھیگ bh'i:g
بھول bh'u:l

_) بیان baj'a:n
_) بٹھا b'It.#a:
بئی b'ai:
بیوی b'i:vi:
_) بیوا b'e:va:
برسر b,aRs'aR
بگاڑ bIg'a:r.
بغاوت b,aQa:v'at

.group پ
پ pV
@@ -160,7 +191,8 @@ _) ای e:
_) پھر ph'IR
پھول ph'u:l
_) پہل (L01 p'e:Hl

پہنچ paH'Unc
پوچھ p'u:c#

.group ت
ت tV
@@ -169,6 +201,9 @@ _) ای e:
تھ (L01 t#
تّ ttV
تّ (L01 tt
_) تمہ t'UmH
تحقیق t,e:Hq'i:q
_) ترجم t'aRJ,Um


.group ٹ
@@ -178,6 +213,8 @@ _) ای e:
ٹھ (L01 t.#
ٹّ t.t.V
ٹّ (L01 t.t.
ٹریفک t.R'e:fIk
_) ٹکڑ t.'Ukr.


.group ث
@@ -196,7 +233,10 @@ _) ای e:
جّ (L01 JJ
_) جیت J'i:t
_) جوا J'ava:

جانب J'a:nIb
_) جنس J'Ins
جھوٹ J#'u:t.
_) جمل J'Uml

.group چ
چ cV
@@ -205,12 +245,19 @@ _) ای e:
چھ (L01 c#
چّ ccV
چّ (L01 cc
_) چکا c'Uka:


.group ح
ح HV
ح (L01 H
ح (_ H
ح (_ 'aH
L01) ح (_ H
حکومت H,Uku:m'at
حکمران H,UkmaR'a:n
_) حوال Hav'a:l


حّ HHV
حّ (L01 HH

@@ -218,7 +265,7 @@ _) ای e:
.group خ
خ xV
خ (L01 x
خت(_ xt
@) خ (ت x
خّ xxV
خّ (L01 xx
_) خوش x'US
@@ -233,7 +280,12 @@ _) ای e:
دھ (L01 d#
دّ ddV
دّ (L01 dd

درخواست d,aRxv'a:st
دیا(_ d'i:;a:
درج d'aRJ
دیوا d'i:va:
_) دوسر d'u:sR
دفاع d'Ifa:

.group ڈ
ڈ d.V
@@ -242,6 +294,7 @@ _) ای e:
ڈھ (L01 d.#
ڈّ d.d.V
ڈّ (L01 d.d.
ڈھونڈ d.#'u:nd.

.group ذ
ذ DV
@@ -254,6 +307,11 @@ _) ای e:
ر (L01 R
رّ RRV
رّ (l01 RR
@) ر (ٹ R
@) ر (ڈ R
_) رہت R'e:Ht
@) ر (د R
@) ر (چ R

.group ڑ
ڑ r.V
@@ -268,6 +326,7 @@ _) ای e:
ز (L01 z
زّ zzV
زّ (L01 zz
_) زند z'Ind

.group ژ
ژ ZV
@@ -284,18 +343,32 @@ _) ای e:
_) سلجھ (L01 sUlJh
_) سدھر sUdh'aR
_) سدھر (L01 sUdhR
_) سلسل s'Ils,Il
_) ستار sIt'a:R
@) س (ٹ s
سندھ s'Ind#
سیکھ s'i:k#
@) س (ت s
_) سپرد sUp'URd

.group ش
ش SV
ش (L01 S
شّ SSV
شّ (L01 SS
_) شعب S'Ob
شاعر Sa:'a:IR
_) شعرا S'ORa:
_) شعل S'Ol
@) ش (ت S
_) شخص S'axs.

.group ص
ص s.V
ص (L01 s.
صّ ssV
صّ (L01 ss
صوب s.'u:b

.group ض
ض zV
@@ -306,7 +379,7 @@ _) ای e:
.group ط
ط tV
طھ t#V
ط (L01 t
ط (L01 t
طھ (L01 t#
طّ ttV
طّ (L01 tt
@@ -328,12 +401,14 @@ _) ای e:
ف (L01 f
فّ ffV
فّ (L01 ff
_) فکر f'IkR

.group ق
ق qV
ق (L01 q
قّ qqV
قّ (L01 qq
قاعد q'a:jd

.group ک
ک kV
@@ -343,6 +418,9 @@ _) ای e:
کّ kkV
کّ (L01 kk
_) کتن k'Itn
کوئل k'o:Il
کتاب kIt'a:b
کوشش k'o:SIS

.group گ
گ gV
@@ -354,6 +432,10 @@ _) ای e:
_) گرفت g'IRIft
_) گزر gUz'aR
_) گزر (L01 gUzR
گئے g'ae:
گئی g'ai:
گمشد g'UmS,Ud
_) گھما g#'Uma:

.group ل
ل lV
@@ -368,6 +450,29 @@ _) ای e:
مّ mmV
مّ (L01 mm
_) مشکل m'USk,Il
محکم me:He:km
مظاہر mUz.'a:HIR
_) ملن (L01 m'Iln
مسجد m'asJ,Id
مشرق m'aSR,Iq
مقدم mUq'adm
مسلم m'Usl,Im
مسلما mUs'alm,a:
@) م (پ m
موجود mo:J'u:d
منزل m'anz,Il
@) م (ب m
محقق mUH'aqIq
منظر m,anz.'aR
محفل m'e:Hf,Il
مسکرا m'Usk,URa:
مسکراہٹ m,Usk,URa:H'at.
محسن m'o:Hs,In
مجرم m'UJR,Im
منظور m,anz.'u:R
ملزم m'Ulz,Im
مغرب m'aQR,Ib
منسوخ m'ansu:x

.group ن
ن nV
@@ -383,6 +488,14 @@ _) ای e:
@) ن (چ n
_) نکال nIk'a:l
_) نگاہ nIg'a:H
_) نمٹ nIm'at.
_) نمٹ (L01 nImt.
@) ن (پ n
@) نچل n'Icl
نشان nIS'a:n
@) ن (ڈ n
_) نظر naz.'aR
_) نظام nIz.'a:m

.group ں
ں n // this should nasalize the vowel

+ 1
- 1
espeak-data/voices/en View File

@@ -1,6 +1,6 @@
name english
language en-uk 2
language en-gb 2
language en-uk 2
language en 2
gender male


+ 1
- 1
espeak-data/voices/en-us View File

@@ -9,7 +9,7 @@ phonemes en-us
dictrules 3 6
option reduce_t 1

stressLength 145 125 190 170 0 0 260 300
stressLength 140 120 190 170 0 0 255 290
stressAmp 17 16 19 19 19 19 21 19

replace 03 I i

+ 1
- 1
espeak-data/voices/es-la View File

@@ -1,4 +1,4 @@
name spanish-latin-american
name spanish-latin-am
language es-la
language es-mx 6
language es 6

+ 0
- 4
espeak-data/voices/test/ak View File

@@ -1,4 +0,0 @@
name akan-test
language ak
translator sw

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

@@ -1,3 +0,0 @@
name azerbaijani-test
language az


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

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

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

@@ -1,3 +0,0 @@
name divehi-test
language dv


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

@@ -1,3 +0,0 @@
name haitian
language ht

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

@@ -1,3 +0,0 @@
name kazakh
language kk

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

@@ -1,4 +1,4 @@
name Korean
name korean-test
language ko
gender male
pitch 80 118

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

@@ -1,3 +0,0 @@
name maltese-test
language mt

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

@@ -1,3 +0,0 @@
name northern-sotho
language nso
translator sw

+ 0
- 5
espeak-data/voices/test/prs View File

@@ -1,5 +0,0 @@
name dari-test
language prs

translator fa
stressrule 10

+ 0
- 4
espeak-data/voices/test/rw View File

@@ -1,4 +0,0 @@
name kinyarwanda-test
language rw
gender male

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

@@ -1,4 +1,4 @@
name sinhala
name sinhala-test
language si

intonation 2

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

@@ -1,4 +1,4 @@
name telugu
name telugu-test
language te

intonation 2

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

@@ -1,3 +0,0 @@
name setswana-test
language tn

+ 0
- 5
espeak-data/voices/test/tt View File

@@ -1,5 +0,0 @@
name tatar-test
language tt

tunes s3 c3 q3 e3


+ 0
- 4
espeak-data/voices/test/wo View File

@@ -1,4 +0,0 @@
name wolof-test
language wo


BIN
phsource/d/xd View File


BIN
phsource/envelopes.png View File


+ 7
- 7
phsource/ph_bengali View File

@@ -29,43 +29,43 @@ endphoneme
phoneme a
vowel starttype #a endtype #a
length 225
FMT(vowel/aa_9)
FMT(vowel/a_3)
endphoneme


phoneme i
vowel starttype #i endtype #i
length 200
length 210
FMT(vowel/i_6)
endphoneme


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


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


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


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

+ 263
- 307
phsource/ph_danish View File

@@ -1,13 +1,123 @@
// PB General rules for vowels:
// Short vowels
// ACC: Short "pille" [p?el@-]
// AC[V]: Short "piler" [p?ilV]
// ACC: Short "pille" [p?el@-], "andre" [AndRV]
// AC[V]: Short "piler" [p?ilV] - verbs, not nouns, which is a problem
// A[N]: Short "bange" [b?AN@-]
// Long vowels
// A + group #@ OR group #e: Long "ae" "aer" [&:@-]
// AC + group #@ OR group #e: Long "pile" [pi:l@-]
// A + @- OR V: Long "ae" "aer" [&:@-]
// AC + @- OR V: Long "pile" [pi:l@-]
// AC[i]: Long "smidig" [smi:Di]

// Change the length of short vowels (?+vowel)
procedure ShortVowelLength
// "endelig" - Short initial vowel sounds too short
IF thisPh(isWordStart) THEN
length 160
RETURN
ENDIF
// "slutte" t/d + @- makes the u too long
IF next2PhW(@-) THEN
IF nextPhW(t) OR nextPhW(d) THEN
//length 100
LengthAdd -50
// Don't shorten it further if it comes after an "r" sound
// Exit the procedure
RETURN
ENDIF
ENDIF
// "bygget" - consonant + [@-D] makes the vowel too long
IF next2PhW(@-) THEN
IF next3PhW(t) OR next3PhW(d) OR next3PhW(D) THEN
LengthAdd -50
// Don't shorten it further if it comes after an "r" sound ("brygget")
// Exit the procedure
RETURN
ENDIF
ENDIF
// "bygger" - consonant + [V] makes the vowel too long
IF nextPhW(isNotVowel) AND next2PhW(V) THEN
LengthAdd -50
// Don't shorten it further if it comes after an "r" sound ("brygger")
// Exit the procedure
RETURN
ENDIF
// "rigtigt", "fred", "frem", "centralen" - R makes the vowel too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
// length 100
LengthAdd -50
ENDIF
// "ring", "ringe", "fængsel"
IF nextPhW(N) THEN
// length 100
LengthAdd -10
ENDIF
// "sigte" t/d + @- makes the vowel too long
IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) THEN
IF next3PhW(@-) THEN
// length 100
LengthAdd -50
ENDIF
ENDIF
endprocedure

// Change the length of normal vowels (without ? in front of them)
procedure LongVowelLength
// "alene" - Short initial vowel sounds too short at length 140
IF thisPh(isWordStart) THEN
length 160
RETURN
ENDIF
// "forlade" - [D@-] makes the vowel too long
IF nextPhW(D) AND next2PhW(@-) THEN
length 180
RETURN
ENDIF
// PB long vowel followed by [@-] or [V](vowel+vowel) - "pigen" [p'i@-n]
IF nextPhW(@-) OR nextPhW(V) THEN
length 225
ENDIF
// PB "enig", "enige", "evig", "stædig" - vowel+consolant+[i]
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 225
ENDIF
// "ræve", "dele", "mene", "røve", "møve"
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(3) OR next3PhW(@-) THEN
length 225
ENDIF
// "vilje", "nedladende" [n'eDl&D@-n@-], "delte" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
// Don't make "møve" [m'Ww_!@-_!] short
IF NOT next2PhW(_!) THEN
length 140
ENDIF
ENDIF
// "bryde", "bryder", "strålen", "henrivende" R makes the vowel too long
IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN
IF next2PhW(@-) OR next2PhW(V) THEN
// length 180
LengthAdd -70
ENDIF
ENDIF
// "syste", "sylte" t/d/D + @- makes the vowel too long
// "international", - added [V] TEST
IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) OR next2PhW(D) THEN
IF next3PhW(@-) OR next3PhW(V) THEN
length 110
ENDIF
ENDIF
// "glimrende" [l/3] makes the following vowel too long
// LengthAdd doesn't work here. The length could be 225 or 140 - 30
IF prevPhW(l/3) THEN
// LengthAdd -30
length 110
ENDIF
// "længe" - short - 2 consonants => 1 consonant (ng => [N])
IF nextPhW(N) THEN
length 140
ENDIF
endprocedure

// A bit longer than [@-]
phoneme @
vowel starttype #@ endtype #@
unstressed
@@ -22,7 +132,18 @@ phoneme @- // very short schwa
IF nextPhW(*) OR nextPhW(r) THEN
ipa NULL // @-* is used to make 'r'
ENDIF
length 40
length 50
// "femten", "manden" - only a short "n" sound
IF nextPhW(n) THEN
length 15
ENDIF
IF prevPhW(isNotVowel) AND thisPh(isWordEnd) THEN
length 15
ENDIF
// "lige" [li@-]
IF prevPhW(i) AND thisPh(isWordEnd) THEN
length 15
ENDIF
FMT(vowel/@-)
endphoneme

@@ -45,38 +166,24 @@ endphoneme

phoneme i
vowel starttype #i endtype #i
length 95 //150
// PB long vowel followed by consonant and certain vowels "gide"
IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(V) THEN
length 150
length 140
// Long vowel followed by consonant and @- "gide", "pile"
IF nextPhW(isNotVowel) AND next2PhW(@-) THEN
// length 225
ENDIF
// "gider", vrider"
IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN
length 95
ENDIF
// PB long vowel followed by certain vowels - "pigen" [p'i@-n]
IF nextPhW(#@) OR nextPhW(#e) THEN
length 150
ENDIF
// Only this vowel (in this case [i])
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) AND thisPh(isWordStart) OR prevPhW(_) THEN
length 150
ENDIF
// This vowel is word end - longer because it sounds too short
// "sig", "si"
IF thisPh(isWordEnd) THEN
length 120
length 140
ENDIF
// "vilje" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 95
//"skider" short
IF nextPhW(D) AND next2PhW(V) THEN
length 140
ENDIF
// PB "tie", "stige", "krige" vowel + vowel: extra length
// What is causing this very short [i] in words with final [@-]?
// NOT "galleriet" [g,?&lVR'i@-D] NOT "krigen" [kR'i@-n]
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) AND NOT next2PhW(D) AND NOT next2PhW(n) THEN
length 240
//"skideren" long
IF nextPhW(D) AND next2PhW(V) AND next3PhW(V) THEN
length 225
ENDIF
CALL LongVowelLength
FMT(vowel/i_4)
endphoneme

@@ -84,7 +191,8 @@ endphoneme
// sviret vs. svirret
phoneme ?i
vowel starttype #i endtype #i
length 90
length 140
CALL ShortVowelLength
IfNextVowelAppend(;)
FMT(vowel/i_4)
endphoneme
@@ -99,27 +207,9 @@ endphoneme

phoneme e
vowel starttype #e endtype #e
length 95 //150
// "delte", "mente"
IF nextPhW(@-) OR nextPhW(V) OR next2PhW(@-) OR next2PhW(V) THEN
length 150
ENDIF
// PB "ring", "ringe"
IF nextPhW(N) THEN
length 95
ENDIF
// PB "enig", "enige", "evig"
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 150
ENDIF
// Only "e"
IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
length 150
ENDIF
// "nedladende" [n'eDl&D@-n@-] - before 2 consonants: short
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 95
ENDIF
length 140
CALL LongVowelLength
CALL ShortVowelLength
FMT(vowel/e)
endphoneme

@@ -127,44 +217,30 @@ endphoneme
// "skille" vs. "skele", "pille" vs. "pile"
phoneme ?e
vowel starttype #e endtype #e
length 90
length 140
CALL ShortVowelLength
FMT(vowel/e)
endphoneme

phoneme E
vowel starttype #e endtype #e
length 100 //150
// "værelse", "breve"
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(@-) THEN
// length 150
ENDIF
// "ræve"
IF nextVowel(#@) OR nextVowel(#e) THEN
length 160
length 140
// no link with next vowel
IF thisPh(isWordEnd) THEN
IfNextVowelAppend(_!)
ENDIF
// "ære", "kærester", "ærefrygt" - longer E
// "ære", "kærester", "ærefrygt" - vowel + vowel
IF nextPhW(V) THEN
length 180
ENDIF
// Only the letter "æ" - long
IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
length 160
length 225
ENDIF
// "stædig" [st'EDi] long
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 160
ENDIF
// "længe" - short - 2 consonants => 1 consonant
IF nextPhW(N) THEN
length 120
// "dræber" TEST shortened by -70 in procedure because of the "r" sound
IF prevPhW(R) OR prevPhW(r) OR prevPhW(3-) AND next2PhW(V) THEN
length 225
ENDIF
CALL LongVowelLength
// "værelse" [v'E3-Vls@_!]
IF nextPhW(3-) AND next2PhW(V) THEN
length 120
ENDIF
// "mælkebøtte" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 120
length 100
ENDIF
FMT(vowel/e_mid2)
endphoneme
@@ -174,64 +250,47 @@ endphoneme
phoneme ?E
vowel starttype #e endtype #e
ipa ε
length 100
length 140
CALL ShortVowelLength
FMT(vowel/e_mid2)
endphoneme

phoneme &
vowel starttype #e endtype #e
ipa a
length 90 //150
// "same", "sale", "bade" - consonant + gooup #e or group #@: long
IF next2PhW(#@) OR next2PhW(#e) THEN
length 150
ipa æ
length 140
// "same", "sale", "bade" - consonant + @-: long
// but NOT "hinanden"
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(@) THEN
IF NOT next3PhW(n) THEN
length 225
ENDIF
ENDIF
// ThisPh + gooup #e or group #@
// ThisPh + V or @-
// "ae", "aer" vowel + vowel: extra length
IF nextPhW(#@) OR nextPhW(#e) THEN
length 220
ENDIF
// This vowel is word end - longer because it sounds too short
// "ja", "Omaha"
IF thisPh(isWordEnd) THEN
length 120
ENDIF
// Only this vowel (in this case [&])
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) AND thisPh(isWordStart) OR prevPhW(_) THEN
length 150
ENDIF
// "stadig" [st&Di], "stadigt" [st&Dit]
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 180
ENDIF
// "Alfie", "alfer" - short before 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
length 90
IF nextPhW(@-) OR nextPhW(V) THEN
length 260
ENDIF
CALL LongVowelLength
FMT(vowel/ee_2)
endphoneme

// PB Short &
// Short &
// e.g. the last a in "staldkarl"
// "sale" vs. "sal"
phoneme ?&
ipa a
vowel starttype #e endtype #e
length 90
FMT(vowel/ee_2)
length 140
FMT(vowel/ee_2)
endphoneme

// PB added for the æ in "dræbt"
// Added for the æ in "dræbt"
phoneme &#
vowel starttype #e endtype #e
length 120
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
glstop
length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
length 150
ENDIF
length 140
ipa a
CALL LongVowelLength
// CALL ShortVowelLength
FMT(vowel/&)
endphoneme

@@ -239,102 +298,63 @@ endphoneme
// "revl" vs. "tremme"
phoneme ?&#
vowel starttype #e endtype #e
length 90
length 140
CALL ShortVowelLength
FMT(vowel/&)
endphoneme

//phoneme a
// vowel starttype #a endtype #a
// length 90 //150
//IF nextPhW(#@) OR nextPhW(#e) THEN
// length 150
//ENDIF
// FMT(vowel/a_2)
//endphoneme

// PB short (glottal) a
// "bragt"
//phoneme ?a
// vowel starttype #a endtype #a
// length 90
// FMT(vowel/a_2)
//endphoneme

phoneme A // PB changed to a_8
vowel starttype #a endtype #a
length 90 //150
// PB long vowel followed by consonant and certain vowels - "drabelig"
IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(#e) THEN
length 150
ENDIF
// "far", "bastard" - a bit longer followed by [r]
IF nextPhW(r) AND nextPhW(isWordEnd) THEN
length 120
ENDIF
// "bange" [bAN@-] - [N] = 2 consonants (ng) => short
IF nextPhW(N) THEN
length 90
ENDIF
length 140
CALL LongVowelLength
// "fare" [f'A:A]
IF nextPhW(A) THEN
length 150
length 225
ENDIF
FMT(vowel/a_8)
endphoneme

// PB short A
// "drab" vs. "drabelig"
// "krabbe" vs. "drabelig"
phoneme ?A
vowel starttype #a endtype #a
length 90
// "straffeattest", "straffe", "rapid" - a bit longer after R
IF prevPhW(R) AND nextPhW(isNotVowel) AND next2PhW(isVowel) THEN
length 110
ENDIF
length 140
CALL ShortVowelLength
FMT(vowel/a_8)
endphoneme

phoneme u
vowel starttype #u endtype #u
length 90 //150
length 140
// "suge", "uge", "bluse", "julegave"
IF nextPhW(#e) OR nextPhW(#@) OR next2PhW(#e) OR next2PhW(#@)THEN
length 150
ENDIF
// "umulig" [u:m'uli]
IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN
length 180
ENDIF
// Only "u"
IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
length 150
ENDIF
// "fugl" [ful] - a bit longer
IF nextPhW(isWordEnd) THEN
length 120
IF nextPhW(@-) OR nextPhW(V) OR next2PhW(@-) OR next2PhW(V)THEN
length 225
ENDIF
CALL LongVowelLength
FMT(vowel/u_bck)
endphoneme

// PB glottal u
// Short u
// "tude" vs. "tuden" - [tuD3] [t?uD@n]
phoneme ?u
vowel starttype #u endtype #u
length 90
length 140
CALL ShortVowelLength
FMT(vowel/u_bck)
endphoneme

phoneme o
vowel starttype #o endtype #o
length 90 //150
// "bore", "borer"
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@-) THEN
length 150
length 140
// "bore", "borer" [boV] o + V
IF nextPhW(V) OR nextPhW(@-) THEN
length 225
ENDIF
// "modig" - long vowel after consonant + [i]
IF nextPhW(D) AND next2PhW(i) THEN
length 150
// "kone", "koner" o + consonant + V or @-
IF next2PhW(V) OR next2PhW(@-) THEN
length 225
ENDIF
CALL LongVowelLength
FMT(vowel/o_2)
endphoneme

@@ -342,25 +362,27 @@ endphoneme
// "patron" vs. "kone"
phoneme ?o
vowel starttype #o endtype #o
length 95
length 140
FMT(vowel/o_2)
endphoneme

phoneme O
vowel starttype #o endtype #o
length 90 // 150
// "sove", "sover" - consonant + #e or #@: long
IF next2PhW(#@) OR next2PhW(#e) THEN
length 150
length 140
ipa ɒ // changed from ɔ - Den Danske Ordbog: ɒ
// "sove", "sover" - consonant + @ or V: long
IF next2PhW(@-) OR next2PhW(V) THEN
length 225
ENDIF
// PB "gået" - ThisPh + #e or #@
IF nextPhW(#e) OR nextPhW(#@) THEN
length 150
// PB "gået" - ThisPh + V or @-
IF nextPhW(V) OR nextPhW(@-) THEN
length 225
ENDIF
// "rådig"
IF nextVowel(i) AND nextVowel(isFinalVowel) THEN
length 180
// "såre", "sårede" [s'O:?OD@-]
IF nextPhW(O) OR nextPhW(?O) THEN
length 225
ENDIF
CALL LongVowelLength
FMT(vowel/o_5)
endphoneme

@@ -368,95 +390,60 @@ endphoneme
// "toget" vs. "tåget"
phoneme ?O
vowel starttype #o endtype #o
length 90
length 140
FMT(vowel/o_5)
endphoneme

phoneme V
vowel starttype #@ endtype #@
length 150
// "sport" [spV:t]
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
glstop
length 90
ENDIF
IF nextPh(3) OR nextPh(V) OR nextPh(@) THEN
length 150
ENDIF
// PB short V in "holder", "solder"
IF nextPhW(isNotVowel) AND next2Ph(V) THEN
length 90
ENDIF
// "snorke", "snorker", årlig
IF next2PhW(3) OR next2PhW(V) OR next2PhW(@) OR next2PhW(i) THEN
length 180
ENDIF
// "sove" [sVw3] - longer followed by w + 3
IF nextPhW(w) AND next2PhW(3) THEN
length 220
ENDIF
// PB "konge"
IF nextPhW(N) THEN
length 95
ENDIF
length 140
CALL LongVowelLength
FMT(vowel/V_4)
endphoneme

// PB Short å
// PB Short V
// "forstår" vs. "kåre"
phoneme ?V
vowel starttype #@ endtype #@
length 90
length 140
FMT(vowel/V_4)
endphoneme

phoneme 0
vowel starttype #o endtype #o
length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
glstop
length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
length 150
ENDIF
length 140
ipa ɔ
FMT(vowel/oo_2)
endphoneme

// Short 0 "sukker"
phoneme ?0
vowel starttype #o endtype #o
length 90
length 140
ipa ɔ
FMT(vowel/oo_2)
endphoneme

phoneme y
vowel starttype #i endtype #i
// Length changed to short since most vowels are short.
// It's probably easier only to make rules for long vowels.
length 90 //150

length 140
// PB long vowel followed by consonant and certain vowels
// "lyde", "lyder"
IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(#e) THEN
length 150
ENDIF
// Only this vowel (in this case [y])
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) AND thisPh(isWordStart) THEN
length 150
ENDIF
// "dydig" [dyDi]
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
length 150
// "gyde", "gyder"
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(V) THEN
// not "gebyret" TEST
IF NOT nextPhW(3-) AND NOT nextPhW(R) AND NOT nextPhW(r) THEN
length 225
ENDIF
ENDIF
// "syge" [sy3] vowel + vowel: extra length, but NOT "fyret" [fyVD]
IF nextPhW(#e) OR nextPhW(#@) AND NOT next2PhW(D) THEN
length 200
// "syge" [sy@-] vowel + vowel: extra length, but NOT "fyret" [fyVD]
IF nextPhW(@-) OR nextPhW(3) AND NOT next2PhW(D) THEN
length 225
ENDIF
// "tyve"
IF nextPhW(?u) AND next2PhW(@-) THEN
length 150
IF nextPhW(w) AND next2PhW(@-) THEN
length 225
ENDIF
CALL LongVowelLength
FMT(vowel/y)
endphoneme

@@ -464,50 +451,32 @@ endphoneme
// "kylling" vs. "kyle", "krybbe" vs. "krybe"
phoneme ?y
vowel starttype #i endtype #i
length 90
length 140
CALL ShortVowelLength
FMT(vowel/y)
endphoneme

phoneme Y
vowel starttype #i endtype #i
length 150
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
glstop
length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
length 150
length 140
IF nextPhW(V) OR nextPhW(@-) THEN
length 225
ENDIF
FMT(vowel/yy)
endphoneme

phoneme W
vowel starttype #@ endtype #@
length 90 //160
// "kløe" vowel + vowel: extra length
IF nextPhW(#@) OR nextPhW(#e) THEN
length 220
ENDIF
// røde" W + 1 consonant + 3 or W or @
IF next2PhW(#@) OR next2PhW(#e) THEN
length 160
ENDIF
// "røveri" but NOT "surfer" [sWf?V] TEST
length 140
// "røveri" but NOT "surfer" [sWfV] TEST
IF next2PhW(V) OR next2PhW(?V) AND NOT next2PhW(isFinalVowel) THEN
length 90
ENDIF
// PB "nødig", "nødigt", "kølige"
IF nextVowel(i) THEN
length 160
ENDIF
// "møve" [mWw@-]
IF nextPhW(w) AND nextVowel(@-) THEN
length 160
length 140
ENDIF
// "børnebog"
IF nextPhW(r) AND next2PhW(n) AND nextVowel(@-) THEN
length 150
// "børnebog" - short
IF nextPhW(r) AND next2PhW(n) AND next3PhW(@-) THEN
length 140
ENDIF
CALL LongVowelLength
FMT(vowel/oe)
endphoneme

@@ -515,21 +484,18 @@ endphoneme
// "prøv" vs. "prøve"
phoneme ?W
vowel starttype #@ endtype #@
length 95
length 140
CALL ShortVowelLength
FMT(vowel/oe)
endphoneme

// Added for the ø in "røv", "røg", "øje" instead of [V3]
phoneme W#
vowel starttype #@ endtype #@
length 90 //150
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
glstop
// length 90
ENDIF
length 140 //225
// PB long vowel followed by consonant and certain vowels
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(@) OR next2PhW(3) OR next2PhW(V) OR next2PhW(?V) THEN
length 150
length 225
ENDIF
FMT(vowel/V)
endphoneme
@@ -538,7 +504,8 @@ endphoneme
// "rømme"
phoneme ?W#
vowel starttype #@ endtype #@
length 90
length 140
CALL ShortVowelLength
FMT(vowel/V)
endphoneme

@@ -547,7 +514,7 @@ phoneme aI
length 300
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2Ph(@-) AND nextPhW(isNotVowel) THEN
glstop
length 150
length 225
ENDIF
// "dreje" [dR'aI@-_!]
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
@@ -571,6 +538,10 @@ endphoneme
phoneme l
liquid
lengthmod 7
// [ll] => [-l] - avoid double l
IF nextPhW(l) THEN
// ChangePhoneme(-)
ENDIF
ChangePhoneme(l/3)
// CALL base/l
endphoneme
@@ -578,24 +549,6 @@ endphoneme
phoneme l/3 // Replacement for [l/]
liquid
lengthmod 7

IF nextPh(isVowel) THEN
// ChangePhoneme(l)
ENDIF

PrevVowelEndings
VowelEnding(l/l_@)
VowelEnding(l/l_a,-70) // kvalt, kapital
VowelEnding(l/l_e, -40)
VowelEnding(l/l_i, -70)
VowelEnding(l/l_o,-70) // stole, skole, pistol
VowelEnding(l/l_u, -70)
EndSwitch

// IF nextPh(isLiquid) THEN
// FMT(l/_l)
// ENDIF

FMT(l/l_)
endphoneme

@@ -678,7 +631,10 @@ endphoneme
phoneme j
liquid palatal
lengthmod 7

// no link with next vowel
IF thisPh(isWordEnd) THEN
IfNextVowelAppend(_!)
ENDIF
IF nextPhW(isVowel) THEN
NextVowelStarts
VowelStart(j/j@)

+ 27
- 0
phsource/ph_english View File

@@ -194,6 +194,11 @@ phoneme aa // 'bath' etc.
vowel starttype #a endtype #a
ipa a
length 185
IF MbrolaSynth THEN
ChangePhoneme(A:)
ENDIF

IfNextVowelAppend(r-)
FMT(vowel/a)
endphoneme
@@ -219,18 +224,30 @@ phoneme I2
vowel starttype #i endtype #i
unstressed
length 130
IF MbrolaSynth THEN
ChangePhoneme(I)
ENDIF

IfNextVowelAppend(;)
FMT(vowel/ii_4)
endphoneme


phoneme I# // used for [I] which may be [@] in some accents
vowel starttype #i endtype #i
unstressed
length 130
IF MbrolaSynth THEN
ChangePhoneme(I)
ENDIF

IfNextVowelAppend(;)
ChangePhoneme(I2)
endphoneme


phoneme i // optional variant of [I] for end of words
vowel starttype #i endtype #i
ipa ɪ
@@ -342,6 +359,11 @@ phoneme o@
vowel starttype #o endtype #o
ipa ɔː
length 250
IF MbrolaSynth THEN
ChangePhoneme(O@)
ENDIF

IfNextVowelAppend(r-)
FMT(vowel/oo_en)
endphoneme
@@ -418,6 +440,11 @@ endphoneme
phoneme i@3
vowel starttype #i endtype #@
length 250
IF MbrolaSynth THEN
ChangePhoneme(i@)
ENDIF

IfNextVowelAppend(r-)
FMT(vdiph2/ii@)
endphoneme

+ 8
- 7
phsource/ph_english_us View File

@@ -69,7 +69,7 @@ endphoneme

phoneme E
vowel starttype #e endtype #e
length 195
length 190
ChangeIfDiminished(I2)
FMT(vwl_en_us/ee)
endphoneme
@@ -181,7 +181,7 @@ endphoneme

phoneme O:
vowel starttype #o endtype #o
length 210
length 200
ChangeIfDiminished(@)
IF nextPh(r) THEN
FMT(vwl_en_us/oor)
@@ -245,7 +245,7 @@ endphoneme

phoneme aI
vowel starttype #a endtype #i
length 250
length 240
IF nextPh(#a) OR nextPh(#o) THEN
AppendPhoneme(;)
ENDIF
@@ -255,14 +255,15 @@ endphoneme

phoneme eI
vowel starttype #e endtype #i
length 230
FMT(vdiph/eei_5)
length 220
FMT(vdiph2/ei_4)
// FMT(vdiph/eei_5)
endphoneme


phoneme OI
vowel starttype #o endtype #i
length 285
length 280
FMT(vdiph/ooi_4)
endphoneme

@@ -321,7 +322,7 @@ endphoneme

phoneme aI3
vowel starttype #a endtype #@
length 300
length 310
ipa aɪɚ
IfNextVowelAppend(r-)
FMT(vwl_en_us/ai3)

+ 1
- 1
phsource/ph_hindi View File

@@ -439,7 +439,7 @@ endphoneme

phoneme c#
CALL base/tS;
ipa ch
ipa cU+02B0
endphoneme



+ 20
- 0
phsource/ph_korean View File

@@ -95,6 +95,26 @@ phoneme dZ; // voiced /ㅈ/
FMT(dzh/dzh) addWav(x/dz_pzd)
endphoneme

phoneme s-
import_phoneme base/s // temporary
endphoneme

phoneme q-
import_phoneme base/q // temporary
endphoneme

phoneme tS;-
import_phoneme base/tS; // temporary
endphoneme

phoneme d-
import_phoneme base/d
endphoneme

// phoneme tSh; ?? changed to [tS;h] in ko_rules
// phoneme h- in ko_list (for 10^3) ?? changed to [h]
// phoneme tSh- changed to tSh

phoneme * // r(ㄹ) at initial, medial
vcd alv flp rhotic
ipa ɾ

+ 119
- 1
phsource/ph_malayalam View File

@@ -25,7 +25,7 @@ phoneme a
length 130

IF thisPh(isStressed) OR thisPh(isFirstVowel) OR thisPh(isWordEnd) THEN
FMT(vowel/a#_2)
FMT(vowel/a#_4)
ELSE
ChangeIfUnstressed(@)

@@ -144,3 +144,121 @@ phoneme d2 // 'rr' sounds like English 'd'
endphoneme


// Aspirated voice stops, sound like aspirated unvoiced stops ?

phoneme b#
vls blb stop prevoice
lengthmod 2
voicingswitch b
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30
IF PreVoicing THEN
IF prevPhW(isVowel) THEN
FMT(b/xb)
ELSE
FMT(voc/murmur1)
ENDIF
ENDIF

IF nextPh(isPause2) THEN
WAV(ustop/p_)
ENDIF
IF nextPh(l) THEN
WAV(ustop/pl)
ENDIF
WAV(ustop/p_asp)
endphoneme


phoneme d#
vls dnt stop prevoice
lengthmod 2
voicingswitch d
Vowelin f1=0 f2=1500 -300 300 f3=-100 80 amp=16
Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20

IF PreVoicing THEN
IF prevPhW(isVowel) THEN
FMT(d/xd)
ELSE
FMT(voc/murmur1)
ENDIF
ENDIF

IF nextPh(isPause2) THEN
WAV(ustop/t_dnt, 35)
ENDIF
WAV(ustop/t_dnt, 50)
endphoneme


phoneme d.#
vls rfx stop prevoice
lengthmod 2
ipa ʈU+02B0
Vowelin f1=0 f2=1800 -300 300 f3=-400 80
Vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2

IF PreVoicing THEN
IF prevPhW(isVowel) THEN
FMT(d/xdr)
ELSE
FMT(voc/murmur1)
ENDIF
ENDIF

voicingswitch d.#
WAV(ustop/t)
endphoneme


phoneme J#
vls pal afr sibilant palatal prevoice
voicingswitch c#
lengthmod 2
Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70

IF PreVoicing THEN
IF prevPhW(isVowel) THEN
FMT(dzh/xdz_pzd)
ELSE
FMT(voc/murmur1)
ENDIF
ENDIF

IF nextPh(isPause2) THEN
WAV(ustop/ts_pzd)
ENDIF
WAV(ustop/ts_pzd)
endphoneme


phoneme g#
vls vel stop prevoice
lengthmod 2
Vowelin f1=1 f2=1400 -100 100 f3=-150 80
Vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20

IF PreVoicing THEN
IF prevPhW(isVowel) THEN
FMT(g/xg)
ELSE
FMT(voc/murmur1)
ENDIF
ENDIF

IF nextPh(isPause2) THEN
WAV(ustop/k_asp, 40)
ENDIF
IF nextPhW(#e) OR nextPhW(#i) THEN
WAV(ustop/k_asp_e, 40)
ELIF nextPhW(#o) OR nextPhW(#u) THEN
WAV(ustop/k_asp_a, 25)
ELSE
WAV(ustop/k_asp_a, 30)
ENDIF
endphoneme



+ 10
- 10
phsource/ph_portugal View File

@@ -48,21 +48,21 @@ endphoneme

phoneme E
vowel starttype #e endtype #e
length 170
length 180
ChangeIfUnstressed(y)
FMT(vowel/e_mid)
endphoneme

phoneme e
vowel starttype #e endtype #e
length 160
length 180
ChangeIfUnstressed(y)
FMT(vowel/e)
endphoneme

phoneme y
vowel starttype #@ endtype #@
length 110
length 130
ipa ɨ
FMT(vowel/i#_5)
endphoneme
@@ -70,7 +70,7 @@ endphoneme

phoneme i
vowel starttype #i endtype #i
length 150
length 170
IfNextVowelAppend(;)
FMT(vowel/i)
endphoneme
@@ -78,7 +78,7 @@ endphoneme

phoneme i/ // changes to NULL before a vowel
vowel starttype #i endtype #i
length 100
length 130
ipa ɨ
IF nextPh(isVowel) THEN
ChangePhoneme(NULL)
@@ -90,7 +90,7 @@ endphoneme

phoneme O
vowel starttype #o endtype #o
length 170
length 180
// ChangeIfNotStressed(o)
FMT(vowel/0_2)
endphoneme
@@ -98,7 +98,7 @@ endphoneme

phoneme o
vowel starttype #o endtype #o
length 170
length 180
ChangeIfNotStressed(u)
FMT(vowel/o)
endphoneme
@@ -106,13 +106,13 @@ endphoneme

phoneme u
vowel starttype #u endtype #u
length 160
length 180
FMT(vowel/u_6)
endphoneme

phoneme U
vowel starttype #u endtype #u
length 110
length 130
IF nextPh(isVowel) THEN
ChangePhoneme(w)
ENDIF
@@ -122,7 +122,7 @@ endphoneme

phoneme EU
vowel starttype #e endtype #u
length 220
length 230
FMT(vdiph/eeu_2)
endphoneme


+ 4
- 0
phsource/ph_tamil View File

@@ -159,3 +159,7 @@ phoneme # // a NULL phoneme for 'virama'
ChangePhoneme(NULL)
endphoneme

phoneme z.
CALL base/z.
ipa U+027B
endphoneme

+ 11
- 12
phsource/phonemes View File

@@ -1745,6 +1745,9 @@ include ph_kannada
phonemetable ml hi
include ph_malayalam

phonemetable te hi
include ph_telugu



phonemetable hu base
@@ -1875,17 +1878,20 @@ include ph_greenlandic
phonemetable am base
include ph_amhari

phonemetable si hi
include ph_sinhala


//**************************************************************************************
// The following lines are experimental, for future additions.
// These langauges are not in a usable state.
// These lines can be deleted.

phonemetable rw base2
include ph_kinyarwanda
phonemetable si hi
include ph_sinhala

phonemetable sl sk
include ph_slovenian

//phonemetable rw base2
//include ph_kinyarwanda

//phonemetable mr hi
//include ph_marathi
@@ -1899,9 +1905,6 @@ include ph_kinyarwanda
//phonemetable prs base
//include ph_dari

phonemetable sl sk
include ph_slovenian

//phonemetable gd base
//include ph_s_gaelic

@@ -1923,13 +1926,9 @@ include ph_slovenian
//phonemetable dv hi
//include ph_divehi

//phonemetable te hi
//include ph_telugu

//phonemetable tn base
//include ph_setswana


//phonemetable mt base
//include ph_maltese


BIN
phsource/r/V_ View File


BIN
phsource/r/V_2_ View File


BIN
phsource/voc/murmur1 View File


BIN
phsource/vwl_en_us/ai3 View File


BIN
phsource/vwl_en_us/er View File


BIN
phsource/vwl_en_us/oor View File


+ 3
- 2
platforms/riscos/Makefile View File

@@ -2,8 +2,8 @@


# Toolflags:
CCflags = -c -C90 -depend !Depend -IC: -throwback -zM
C++flags = -c -depend !Depend -IC: -throwback -zM
CCflags = -c -C90 -depend !Depend -IC: -throwback -memaccess -zM -L22-S22-L41
C++flags = -c -depend !Depend -IC: -throwback -zM -L22-S22-L41
Linkflags = -rmf -c++ -o $@
ObjAsmflags = -throwback -NoCache -depend !Depend
CMHGflags =
@@ -61,3 +61,4 @@ Squeezeflags = -o $@
objasm $(objasmflags) -from @.s.assemb -to @.o.assemb

# Dynamic dependencies:


+ 111
- 25
platforms/riscos/cpp/speak_riscos View File

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

/***************************************************************************
* Copyright (C) 2005 to 2007 by Jonathan Duddington *
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
* email: [email protected] *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -26,6 +26,7 @@
#include <ctype.h>
#include <locale.h>
#include "kernel.h"
#include <math.h>

#include "speech.h"
#include "speak_lib.h"
@@ -221,6 +222,7 @@ void ReadVoiceNames2(char *directory)
voice_variant_names[n_voice_variant_files++] = p;
}
else
if(strcmp(p, "default") != 0)
{
if(n_voice_files >= (N_VOICE_NAMES-1))
continue;
@@ -233,11 +235,17 @@ void ReadVoiceNames2(char *directory)

void ReadVoiceNames()
{//===================
char directory[sizeof(path_home)+10];
char directory[sizeof(path_home)+20];

n_voice_files = 0;
n_voice_variant_files = 0;

sprintf(directory,"%s.voices.default", path_home);
if(GetFileLength(directory) > 0)
{
// put the 'default' voice at the start of the list
voice_names[n_voice_files++] = "default";
}
sprintf(directory,"%s.voices",path_home);

ReadVoiceNames2(directory);
@@ -400,11 +408,27 @@ void FillSoundBuf(int size)

int initialise(void)
{//=================
sprintf(path_home,"%s.espeak-data","<eSpeak$Dir>");
char buf[N_PATH_HOME];

_kernel_swi_regs regs;
_kernel_oserror *error;

buf[0] = 0;
regs.r[0] = (int)"eSpeak$Dir";
regs.r[1] = (int)buf;
regs.r[2] = sizeof(buf);
regs.r[3] = 0;
regs.r[4] = 0;
regs.r[5] = 0;

error = _kernel_swi(0x20023,&regs,&regs); // OS_ReadVarVal
buf[regs.r[2]] = 0;

sprintf(path_home,"%s.espeak-data",buf);
if(GetFileLength(path_home) != -2)
{
// not found, try the 10 character version of the directory name
sprintf(path_home,"%s.espeak-dat","<eSpeak$Dir>");
sprintf(path_home,"%s.espeak-dat",buf);
}
if(GetFileLength(path_home) != -2)
{
@@ -414,7 +438,7 @@ int initialise(void)
}

WavegenInit(22050,0);
LoadPhData();
LoadPhData(NULL);
SetVoiceStack(NULL, "");
SynthesizeInit();
return(0);
@@ -453,7 +477,7 @@ void speak_text_string(char *data, int terminator, int len, int wait, int voice_
static_length = 0;
else
{
strcat(&static_buf[static_length]," : ");
strcat(&static_buf[static_length]," \n ");
static_length+=3;
}

@@ -578,13 +602,14 @@ void set_say_options(int reg2, int reg3)
void jsd_swi_functions(int *r)
/****************************/
{
int use_ipa;
espeak_VOICE voice_select;

switch(r[0])
{
case 0: /* major version */
r[0] = 4;
r[1] = 331;
r[1] = 347;
break;

case 1: /* register user */
@@ -594,7 +619,13 @@ void jsd_swi_functions(int *r)
break;

case 3:
// r[0] = (int)speech_to_phonemes((char *)r[1]);
// translate into phonemes
use_ipa = 0;
if((r[2] >= 1) && (use_ipa <= 3))
use_ipa = r[2];
TranslateClause(translator,NULL,(char *)r[1],NULL,NULL);
GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa);
r[0] = (int)translator->phon_out;
break;

case 4:
@@ -642,6 +673,7 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw)
/*********************************************************/
{
int value;
int value2;
int q_length;
value = r[0];

@@ -650,21 +682,23 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw)

case 0: // ready ?
// returns the index into the source text of the currently speaking word
if(current_source_index > 0)
r[1] = current_source_index-1;
else
r[1] = current_source_index; /* source index */
if(current_source_index > 0)
r[1] = current_source_index-1;
else
r[1] = current_source_index; /* source index */
r[2] = 0; /* source tag */
r[3] = 0; /* for future expansion */
r[4] = 0;
r[5] = 0;

if(wcmdq_head == wcmdq_tail)
if(WcmdqUsed() < 5)
{
r[0] = -1; /* ready, or nearly */
}
else
{
r[0] = 0;
}
break;

case 1: /* restore old sound channel. DO NOTHING */
@@ -692,19 +726,32 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw)
break;

case 7: /* pitch */
// not implemented
value = (value * 50)/128;
SetParameter(espeakPITCH, value, 0);
break;

case 8: /* speed */
SetParameter(espeakRATE,value,0);
case 8: // speed, convert to range 80 to 400, mid-value=180
if(value < 128)
value2 = 80 + (value*100)/128; // linear range for 0-127 -> 80-179
else
value2 = 80 + pow((float)value/128.0, 1.75)*100;

SetParameter(espeakRATE,value2,0);
break;

case 9: /* word_gap */
if(value >= 128)
value = value - 128;

if(value > 1)
value = (value-1) * 5;

SetParameter(espeakWORDGAP,value,0);
break;

case 10: /* pitch_range */
// not implemented
value = (value * 50)/128;
SetParameter(espeakRANGE, value, 0);
break;

case 12: /* reset */
@@ -712,7 +759,22 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw)
break;

case 13: /* volume */
SetParameter(espeakVOLUME,value,0);
// convert to range 6-255 to 10-400, mid-value=100
if(value < 6)
value2 = value + 4;
else
if(value < 128)
{
value2 = pow((float)(value+40)/168.0, 1.75)*100;
}
else
value2 = pow((float)value/128.0, 2.0)*100;
SetParameter(espeakVOLUME,value2,0);
WavegenSetVoice(voice);
break;

case 14: // set voice by name
SetVoiceByName((char *)r[0]);
WavegenSetVoice(voice);
break;
}
@@ -835,6 +897,13 @@ int param_number(char **argp)
return(value);
}

void PrintVersion()
{//================
char buf[120];
printf("\nspeak text-to-speech: %s Data at: %s\n", version_string, path_home);
}


void command_line(char *arg_string, int wait)
{//==========================================

@@ -854,6 +923,7 @@ void command_line(char *arg_string, int wait)
char command[80];
char *p;
int ix;
int quiet;

voicename[0] = 0;
wavefile[0] = 0;
@@ -861,7 +931,7 @@ void command_line(char *arg_string, int wait)
option_linelength = 0;
option_phonemes = 0;
option_waveout = 0;
option_quiet = 0;
quiet = 0;
option_multibyte = 0; // auto
option_capitals = 0;
option_punctuation = 0;
@@ -887,7 +957,8 @@ void command_line(char *arg_string, int wait)
break;

case 'h':
printf("\nspeak text-to-speech: %s\n%s",version_string,help_text);
PrintVersion();
printf("\n%s",help_text);
return;

case 'k':
@@ -912,7 +983,7 @@ void command_line(char *arg_string, int wait)
break;

case 'q':
option_quiet = 1;
quiet = 1;
break;

case 'f':
@@ -963,7 +1034,8 @@ void command_line(char *arg_string, int wait)
else
if(strcmp(command,"help")==0)
{
printf("\nspeak text-to-speech: %s\n%s",version_string,help_text);
PrintVersion();
printf("\n%s",help_text);
return;
}
else
@@ -980,6 +1052,17 @@ void command_line(char *arg_string, int wait)
SetParameter(espeakPUNCTUATION,option_punctuation,0);
}
else
if(memcmp(command,"version",7)==0)
{
PrintVersion();
return;
}
else
if(memcmp(command,"ipa",3)==0)
{
option_phonemes = 3;
}
else
{
printf("Command not recognised\n");
}
@@ -997,22 +1080,25 @@ void command_line(char *arg_string, int wait)
}
}

if((option_phonemes > 1) && !option_waveout)
quiet = 1; // can't call sprintf() during callback

SetVoiceByName(voicename);

if((filename[0]==0) && (p[0]=='\r'))
{
// nothing to speak
if(option_quiet)
if(quiet)
{
SpeakNextClause(NULL,NULL,2); // stop speaking
more_text = 0;
}
}

if(option_waveout || option_quiet)
if(option_waveout || quiet)
{
// write speech to a WAV file
if(option_quiet)
if(quiet)
{
OpenWaveFile(NULL,samplerate);
option_waveout = 2;

+ 5
- 3
platforms/windows/make_espeak.iss View File

@@ -2,7 +2,7 @@
[Setup]
AppName=eSpeak
AppVerName=eSpeak version 1.47.01
AppVerName=eSpeak version 1.47.04
AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details).
WindowVisible=yes
@@ -146,7 +146,7 @@ begin
$0e: Result := 'hu';
$0f: Result := 'is';
$10: Result := 'it';
//$12: Result := 'ko';
$12: Result := 'ko';
$13: Result := 'nl';
$14: Result := 'no';
$15: Result := 'pl';
@@ -158,7 +158,7 @@ begin
$1c: Result := 'sq';
$1d: Result := 'sv';
$1f: Result := 'tr';
//$20: Result := 'ur';
$20: Result := 'ur';
$21: Result := 'id';
$25: Result := 'et';
$26: Result := 'lv';
@@ -174,6 +174,7 @@ begin
$39: Result := 'hi';
//$3a: Result := 'mt';
$3c: Result := 'ga';
$3e: Result := 'ms';
//$3f: Result := 'kk';
$41: Result := 'sw';
//$44: Result := 'tt';
@@ -263,6 +264,7 @@ begin
'mk': value := $42f;
'ml': value := $44c;
'mn': value := $450;
'ms': value := $43e;
'mt': value := $43a;
'my': value := $455;
'ne': value := $461;

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

@@ -1,58 +1,64 @@

[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"

[Setup]
AppName=eSpeakEdit
AppVerName=eSpeakEdit version 1.47.04
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: "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: "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"
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: "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"

+ 3
- 2
src/compiledata.cpp View File

@@ -2866,8 +2866,8 @@ int CompilePhoneme(int compile_phoneme)
break;

case i_ADD_LENGTH:
value = NextItem(tSIGNEDNUMBER);
*prog_out++ = (i_ADD_LENGTH << 8) + value/2;
value = NextItem(tSIGNEDNUMBER) / 2;
*prog_out++ = (i_ADD_LENGTH << 8) + (value & 0xff);
DecThenCount();
break;

@@ -3059,6 +3059,7 @@ int CompilePhoneme(int compile_phoneme)

case kRETURN:
*prog_out++ = i_RETURN;
DecThenCount();
break;

case kINCLUDE:

+ 20
- 2
src/dictionary.cpp View File

@@ -3473,16 +3473,34 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f
} // end of LookupDictList


extern char word_phonemes[N_WORD_PHONEMES]; // a word translated into phoneme codes

int Lookup(Translator *tr, const char *word, char *ph_out)
{//===================================================
int found;
unsigned int flags[2];
int say_as;
char *word1 = (char *)word;
char text[80];

flags[0] = 0;
flags[1] = FLAG_LOOKUP_SYMBOL;
char *word1 = (char *)word;
return(LookupDictList(tr, &word1, ph_out, flags, 0, NULL));
found = LookupDictList(tr, &word1, ph_out, flags, FLAG_ALLOW_TEXTMODE, NULL);

if(flags[0] & FLAG_TEXTMODE)
{
say_as = option_sayas;
option_sayas = 0; // don't speak replacement word as letter names
text[0] = 0;
strncpy0(&text[1], word1, sizeof(text));
found = TranslateWord(tr, &text[1], 0, NULL, NULL);
strcpy(ph_out, word_phonemes);
option_sayas = say_as;
}
return(found);
}


int LookupFlags(Translator *tr, const char *word)
{//==============================================
char buf[100];

+ 30
- 3
src/numbers.cpp View File

@@ -655,7 +655,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
current_alphabet = alphabet;
if((alphabet != NULL) && !(al_flags & AL_DONT_NAME) && (al_offset != translator->letter_bits_offset))
{
if((al_flags & AL_DONT_NAME) || (al_offset == translator->langopts.alt_alphabet))
if((al_flags & AL_DONT_NAME) || (al_offset == translator->langopts.alt_alphabet) || (al_offset == translator->langopts.our_alphabet))
{
// don't say the alphabet name
}
@@ -703,11 +703,38 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
else
language = L('e','n');

if(language != tr->translator_name)
if((language != tr->translator_name) || (language == L('k','o')))
{
char *p3;
int initial, code;
char hangul_buf[12];

// speak in the language for this alphabet (or English)
ph_buf[2] = SetTranslator2(WordToString2(language));
LookupLetter(translator2, letter, word[n_bytes], &ph_buf[3], control & 1);

if(((code = letter - 0xac00) >= 0) && (letter <= 0xd7af))
{
// Special case for Korean letters.
// break a syllable hangul into 2 or 3 individual jamo

hangul_buf[0] = ' ';
p3 = &hangul_buf[1];
if((initial = (code/28)/21) != 11)
{
p3 += utf8_out(initial + 0x1100, p3);
}
utf8_out(((code/28) % 21) + 0x1161, p3); // medial
utf8_out((code % 28) + 0x11a7, &p3[3]); // final
p3[6] = ' ';
p3[7] = 0;
ph_buf[3] = 0;
TranslateRules(translator2, &hangul_buf[1], &ph_buf[3], sizeof(ph_buf)-3, NULL, 0, NULL);
SetWordStress(translator2, &ph_buf[3], NULL, -1, 0);
}
else
{
LookupLetter(translator2, letter, word[n_bytes], &ph_buf[3], control & 1);
}

if(ph_buf[3] == phonSWITCH)
{

+ 59
- 50
src/phonemelist.cpp View File

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

int n_ph_list3;
@@ -343,6 +344,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
plist3 = &ph_list3[j];

inserted = 0;
deleted = 0;
if(insert_ph != 0)
{
// we have a (linking) phoneme which we need to insert here
@@ -431,23 +433,27 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
plist3->phcode = alternative;

if(alternative == 1)
continue; // NULL phoneme, discard

if(ph->type == phVOWEL)
{
plist3->synthflags |= SFLAG_SYLLABLE;
if(ph2->type != phVOWEL)
plist3->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed
deleted = 1; // NULL phoneme, discard
}
else
plist3->synthflags &= ~SFLAG_SYLLABLE;
{
if(ph->type == phVOWEL)
{
plist3->synthflags |= SFLAG_SYLLABLE;
if(ph2->type != phVOWEL)
plist3->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed
}
else
plist3->synthflags &= ~SFLAG_SYLLABLE;

// re-interpret the changed phoneme
// But it doesn't obey a second ChangePhoneme()
InterpretPhoneme(tr, 0x100, plist3, &phdata, &worddata);
// re-interpret the changed phoneme
// But it doesn't obey a second ChangePhoneme()
InterpretPhoneme(tr, 0x100, plist3, &phdata, &worddata);
}
}

if(ph->type == phVOWEL)
if((ph->type == phVOWEL) && (deleted == 0))
{
PHONEME_LIST *p;

@@ -552,7 +558,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
}
}

if(plist3 != plist3_inserted)
if((plist3 != plist3_inserted) && (ix > 0))
{
if((x = (tr->langopts.word_gap & 0x7)) != 0)
{
@@ -585,51 +591,54 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
// not yet implemented
}

phlist[ix].ph = ph;
phlist[ix].type = ph->type;
phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module
phlist[ix].synthflags = plist3->synthflags;
phlist[ix].stresslevel = plist3->stresslevel & 0xf;
phlist[ix].wordstress = plist3->wordstress;
phlist[ix].tone_ph = plist3->tone_ph;
phlist[ix].sourceix = 0;
phlist[ix].phcode = ph->code;

if(plist3->sourceix != 0)
if(deleted == 0)
{
phlist[ix].sourceix = plist3->sourceix;
phlist[ix].newword = 1; // this phoneme is the start of a word
phlist[ix].ph = ph;
phlist[ix].type = ph->type;
phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module
phlist[ix].synthflags = plist3->synthflags;
phlist[ix].stresslevel = plist3->stresslevel & 0xf;
phlist[ix].wordstress = plist3->wordstress;
phlist[ix].tone_ph = plist3->tone_ph;
phlist[ix].sourceix = 0;
phlist[ix].phcode = ph->code;

if(plist3->sourceix != 0)
{
phlist[ix].sourceix = plist3->sourceix;
phlist[ix].newword = 1; // this phoneme is the start of a word

if(start_sentence)
if(start_sentence)
{
phlist[ix].newword = 5; // start of sentence + start of word
start_sentence = 0;
}
}
else
{
phlist[ix].newword = 5; // start of sentence + start of word
start_sentence = 0;
phlist[ix].newword = 0;
}
}
else
{
phlist[ix].newword = 0;
}

// phlist[ix].length = ph->std_length;
phlist[ix].length = phdata.pd_param[i_SET_LENGTH]*2;
if((ph->code == phonPAUSE_LONG) && (option_wordgap > 0))
{
phlist[ix].ph = phoneme_tab[phonPAUSE_SHORT];
phlist[ix].length = option_wordgap*14; // 10mS per unit at the default speed
}
// phlist[ix].length = ph->std_length;
phlist[ix].length = phdata.pd_param[i_SET_LENGTH]*2;
if((ph->code == phonPAUSE_LONG) && (option_wordgap > 0) && (plist3[1].sourceix != 0))
{
phlist[ix].ph = phoneme_tab[phonPAUSE_SHORT];
phlist[ix].length = option_wordgap*14; // 10mS per unit at the default speed
}

if(ph->type==phVOWEL || ph->type==phLIQUID || ph->type==phNASAL || ph->type==phVSTOP || ph->type==phVFRICATIVE)
{
phlist[ix].length = 128; // length_mod
phlist[ix].env = PITCHfall;
}
if(ph->type==phVOWEL || ph->type==phLIQUID || ph->type==phNASAL || ph->type==phVSTOP || ph->type==phVFRICATIVE || (ph->phflags & phPREVOICE))
{
phlist[ix].length = 128; // length_mod
phlist[ix].env = PITCHfall;
}

phlist[ix].prepause = 0;
phlist[ix].amp = 20; // default, will be changed later
phlist[ix].pitch1 = 255;
phlist[ix].pitch2 = 255;
ix++;
phlist[ix].prepause = 0;
phlist[ix].amp = 20; // default, will be changed later
phlist[ix].pitch1 = 255;
phlist[ix].pitch2 = 255;
ix++;
}
}
phlist[ix].newword = 2; // end of clause


+ 2
- 0
src/readclause.cpp View File

@@ -90,6 +90,7 @@ static const unsigned short punct_chars[] = {',','.','?','!',':',';',
0x055e, // Armenian question
0x055b, // Armenian emphasis mark

0x060c, // Arabic ,
0x061b, // Arabic ;
0x061f, // Arabic ?
0x06d4, // Arabic .
@@ -137,6 +138,7 @@ static const unsigned int punct_attributes [] = { 0,
CLAUSE_QUESTION | PUNCT_IN_WORD, // Armenian question
CLAUSE_PERIOD | PUNCT_IN_WORD, // Armenian emphasis mark

CLAUSE_COMMA, // Arabic ,
CLAUSE_SEMICOLON, // Arabic ;
CLAUSE_QUESTION, // Arabic question mark
CLAUSE_PERIOD, // Arabic full stop

+ 24
- 4
src/setlengths.cpp View File

@@ -575,6 +575,7 @@ void CalcLengths(Translator *tr)
int last_pitch = 0;
int pitch_start;
int length_mod;
int next2type;
int len;
int env2;
int end_of_clause;
@@ -689,8 +690,19 @@ void CalcLengths(Translator *tr)

p->prepause = 40;

if((prev->type == phPAUSE) || (prev->type == phVOWEL)) // || (prev->ph->mnemonic == ('/'*256+'r')))
p->prepause = 0;
if(prev->type == phVOWEL)
{
p->prepause = 0; // use murmur instead to link from the preceding vowel
}
else
if(prev->type == phPAUSE)
{
// reduce by the length of the preceding pause
if(prev->length < p->prepause)
p->prepause -= prev->length;
else
p->prepause = 0;
}
else
if(p->newword==0)
{
@@ -827,9 +839,17 @@ if(stress <= 1)
next3 = &phoneme_list[ix+4];
}

next2type = next2->ph->length_mod;
if(more_syllables==0)
{
len = tr->langopts.length_mods0[next2->ph->length_mod *10+ next->ph->length_mod];
if(next->newword || next2->newword)
{
// don't use 2nd phoneme over a word boundary, unless it's a pause
if(next2type != 1)
next2type = 0;
}

len = tr->langopts.length_mods0[next2type *10+ next->ph->length_mod];

if((next->newword) && (tr->langopts.word_gap & 0x20))
{
@@ -841,7 +861,7 @@ if(stress <= 1)
}
else
{
length_mod = tr->langopts.length_mods[next2->ph->length_mod *10+ next->ph->length_mod];
length_mod = tr->langopts.length_mods[next2type *10+ next->ph->length_mod];

if((next->type == phNASAL) && (next2->type == phSTOP || next2->type == phVSTOP) && (next3->ph->phflags & phFORTIS))
length_mod -= 15;

+ 11
- 1
src/synthdata.cpp View File

@@ -35,7 +35,7 @@
#include "translate.h"
#include "wave.h"

const char *version_string = "1.47.03c 23.Mar.13";
const char *version_string = "1.47.04 02.Apr.13";
const int version_phdata = 0x014701;

int option_device_number = -1;
@@ -1032,6 +1032,16 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_
phdata->pd_param[i_APPEND_PHONEME] = data;
}
else
if(instn2 == i_ADD_LENGTH)
{
if(data & 0x80)
{
// a negative value, do sign extension
data = -(0x100 - data);
}
phdata->pd_param[i_SET_LENGTH] += data;
}
else
if(instn2 == i_IPA_NAME)
{
// followed by utf-8 characters, 2 per instn word

+ 19
- 1
src/synthesize.cpp View File

@@ -1426,7 +1426,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)

EndAmplitude();

if(p->prepause > 0)
if((p->prepause > 0) && !(p->ph->phflags & phPREVOICE))
DoPause(p->prepause,1);

done_phoneme_marker = 0;
@@ -1455,6 +1455,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)

case phSTOP:
released = 0;
ph = p->ph;
if(next->type==phVOWEL)
{
released = 1;
@@ -1468,6 +1469,23 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
if(released == 0)
p->synthflags |= SFLAG_NEXT_PAUSE;

if(ph->phflags & phPREVOICE)
{
// a period of voicing before the release
memset(&fmtp, 0, sizeof(fmtp));
InterpretPhoneme(NULL, 0x01, p, &phdata, &worddata);
fmtp.fmt_addr = phdata.sound_addr[pd_FMT];
fmtp.fmt_amp = phdata.sound_param[pd_FMT];

if(last_pitch_cmd < 0)
{
DoAmplitude(next->amp,NULL);
DoPitch(envelope_data[p->env],next->pitch1,next->pitch2);
}

DoSpect2(ph, 0, &fmtp, p, 0);
}

InterpretPhoneme(NULL, 0, p, &phdata, &worddata);
phdata.pd_control |= pd_DONTLENGTHEN;
DoSample3(&phdata, 0, 0);

+ 12
- 7
src/tr_languages.cpp View File

@@ -79,7 +79,7 @@ ALPHABET alphabets [] = {
{"_ar", OFFSET_ARABIC, 0x600, 0x6ff, 0, 0},
{"_dv", OFFSET_THAANA, 0x780, 0x7bf, 0, 0},
{"_hi", OFFSET_DEVANAGARI, 0x900, 0x97f,L('h','i'), AL_WORDS},
{"_bn", OFFSET_BENGALI, 0x0980, 0x9ff, 0, 0},
{"_bn", OFFSET_BENGALI, 0x0980, 0x9ff, L('b','n'), 0},
{"_gur", OFFSET_GURMUKHI, 0xa00, 0xa7f, L('p','a'), AL_WORDS},
{"_gu", OFFSET_GUJARATI, 0xa80, 0xaff, 0, 0},
{"_or", OFFSET_ORIYA, 0xb00, 0xb7f, 0, 0},
@@ -93,12 +93,12 @@ ALPHABET alphabets [] = {
{"_ti", OFFSET_TIBET, 0xf00, 0xfff, 0, 0},
{"_my", OFFSET_MYANMAR, 0x1000,0x109f, 0, 0},
{"_ka", OFFSET_GEORGIAN, 0x10a0,0x10ff, L('k','a'), AL_WORDS},
{"_ko", OFFSET_KOREAN, 0x1100,0x11ff, 0, 0},
{"_ko", OFFSET_KOREAN, 0x1100,0x11ff, L('k','o'), AL_WORDS},
{"_eth", OFFSET_ETHIOPIC, 0x1200,0x139f, 0, 0},
{"_braille", 0x2800, 0x2800,0x28ff, 0, AL_NO_SYMBOL},
{"_ja", 0x3040, 0x3040,0x30ff, 0, AL_NOT_CODE},
{"_zh", 0x3100, 0x3100,0x9fff, 0, AL_NOT_CODE},
{"_ko", 0xa700, 0xa700,0xd7ff, 0, AL_NOT_CODE},
{"_ko", 0xa700, 0xa700,0xd7ff, L('k','o'), AL_NOT_CODE | AL_WORDS},
{NULL, 0, 0, 0, 0, 0}
};

@@ -518,6 +518,7 @@ Translator *SelectTranslator(const char *name)
{
SetCyrillicLetters(tr);
SetLetterVowel(tr,0x2a);
tr->charset_a0 = charsets[5]; // ISO-8859-5
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x107; // devoice at end of word, and change voicing to match a following consonant (except v)
tr->langopts.param[LOPT_REDUCE] = 2;
@@ -654,10 +655,10 @@ Translator *SelectTranslator(const char *name)

// character codes offset by 0x380
static const char el_vowels[] = {0x10,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x35,0x37,0x39,0x3f,0x45,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0};
static const char el_fvowels[] = {0x2d,0x2e,0x2f,0x35,0x37,0x39,0x45,0x4d,0}; // ε η ι υ έ ή ί ύ
static const char el_voiceless[]= {0x38,0x3a,0x3e,0x40,0x42,0x43,0x44,0x46,0x47,0}; // θ κ ξ π ς σ τ φ χ
static const char el_fvowels[] = {0x2d,0x2e,0x2f,0x35,0x37,0x39,0x45,0x4d,0}; // ε η ι υ έ ή ί ύ _
static const char el_voiceless[]= {0x38,0x3a,0x3e,0x40,0x42,0x43,0x44,0x46,0x47,0}; // θ κ ξ π ς σ τ φ χ _
static const char el_consonants[]={0x32,0x33,0x34,0x36,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x40,0x41,0x42,0x43,0x44,0x46,0x47,0x48,0};
static const wchar_t el_char_apostrophe[] = {0x3c3,0}; // σ
static const wchar_t el_char_apostrophe[] = {0x3c3,0}; // σ _

SetupTranslator(tr,stress_lengths_el,stress_amps_el);

@@ -670,7 +671,7 @@ Translator *SelectTranslator(const char *name)
SetLetterBits(tr,LETTERGP_VOWEL2,el_vowels);
SetLetterBits(tr,LETTERGP_B,el_voiceless);
SetLetterBits(tr,LETTERGP_C,el_consonants);
SetLetterBits(tr,LETTERGP_Y,el_fvowels); // front vowels: ε η ι υ
SetLetterBits(tr,LETTERGP_Y,el_fvowels); // front vowels: ε η ι υ _

tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.stress_rule = STRESSPOSN_2R;
@@ -912,6 +913,7 @@ SetupTranslator(tr,stress_lengths_equal,stress_amps_equal);
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_DECIMAL_COMMA | NUM_THOUS_SPACE | NUM_DFRACTION_2 | NUM_ROMAN_CAPITALS;
tr->langopts.numbers2 = 0xa + NUM2_THOUSANDS_VAR5; // variant numbers before thousands,milliards
tr->langopts.replace_chars = replace_cyrillic_latin;
tr->langopts.our_alphabet = OFFSET_CYRILLIC; // don't say "cyrillic" before letter names

SetLetterVowel(tr,'y');
SetLetterVowel(tr,'r');
@@ -1113,6 +1115,7 @@ SetLengthMods(tr,3); // all equal
static const unsigned char ko_voiced[] = {0x02,0x05,0x06,0xab,0xaf,0xb7,0xbc,0}; // voiced consonants, l,m,n,N

tr->letter_bits_offset = OFFSET_KOREAN;
tr->langopts.our_alphabet = 0xa700;
memset(tr->letter_bits,0,sizeof(tr->letter_bits));
SetLetterBitsRange(tr,LETTERGP_A,0x61,0x75);
SetLetterBits(tr,LETTERGP_Y,ko_ivowels);
@@ -1194,6 +1197,7 @@ SetLengthMods(tr,3); // all equal
SetupTranslator(tr,stress_lengths_mk,stress_amps_mk);
tr->charset_a0 = charsets[5]; // ISO-8859-5
tr->letter_groups[0] = tr->letter_groups[7] = vowels_cyrillic;
tr->letter_bits_offset = OFFSET_CYRILLIC;

tr->langopts.stress_rule = STRESSPOSN_3R; // antipenultimate
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_2;
@@ -1608,6 +1612,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.tone_numbers = 1; // a number after letters indicates a tone number (eg. pinyin or jyutping)
tr->langopts.ideographs = 1;
tr->langopts.our_alphabet = 0x3100;
tr->langopts.word_gap = 0x21; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word
if(name2 == L('z','h'))
{

+ 33
- 32
src/translate.cpp View File

@@ -1736,6 +1736,7 @@ int SetTranslator2(const char *new_language)
translator2->phoneme_tab_ix = new_phoneme_tab;
}
}
translator2->phonemes_repeat[0] = 0;
return(new_phoneme_tab);
} // end of SetTranslator2

@@ -2444,6 +2445,35 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c,
0x72,0x73,0x74,0x75
};

// check for Korean Hangul letters
if(((code = c - 0xac00) >= 0) && (c <= 0xd7af))
{
// break a syllable hangul into 2 or 3 individual jamo
initial = (code/28)/21;
medial = (code/28) % 21;
final = code % 28;

if(initial == 11)
{
// null initial
c = medial + 0x1161;
if(final > 0)
*insert = final + 0x11a7;
}
else
{
// extact the initial and insert the remainder with a null initial
c = initial + 0x1100;
*insert = (11*28*21) + (medial*28) + final + 0xac00;
}
return(c);
}
else if(((code = c - 0x3130) >= 0) && (code < 0x34))
{
// Hangul compatibility jamo
return(hangul_compatibility[code] + 0x1100);
}

switch(tr->translator_name)
{
case L('a','f'):
@@ -2471,36 +2501,6 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c,
}
}
break;

case L('k','o'):
if(((code = c - 0xac00) >= 0) && (c <= 0xd7af))
{
// break a syllable hangul into 2 or 3 individual jamo
initial = (code/28)/21;
medial = (code/28) % 21;
final = code % 28;

if(initial == 11)
{
// null initial
c = medial + 0x1161;
if(final > 0)
*insert = final + 0x11a7;
}
else
{
// extact the initial and insert the remainder with a null initial
c = initial + 0x1100;
*insert = (11*28*21) + (medial*28) + final + 0xac00;
}
return(c);
}
else if(((code = c - 0x3130) >= 0) && (code < 0x34))
{
// Hangul compatibility jamo
return(hangul_compatibility[code] + 0x1100);
}
break;
}
return(SubstituteChar(tr, c, next_in, insert, wordflags));
}
@@ -2955,7 +2955,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
else
{
if(iswlower(prev_in))
if((iswlower(prev_in)) && (prev_in != 0xba)) // Windows thinks masc.ordinal (0xba) is lower-case
{
// lower case followed by upper case in a word
if(UpperCaseInWord(tr, &sbuf[ix], c) == 1)
@@ -3473,7 +3473,8 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre

prev_clause_pause = clause_pause;

*tone_out = tone;
if(tone_out != NULL)
*tone_out = tone;

new_sentence = 0;
if(terminator & CLAUSE_BIT_SENTENCE)

+ 1
- 0
src/translate.h View File

@@ -546,6 +546,7 @@ typedef struct {
int listx; // compile *_listx after *list
const unsigned int *replace_chars; // characters to be substitutes
char ascii_language[8]; // switch to this language for Latin characters
int our_alphabet; // offset for main alphabet (if not set in letter_bits_offset)
int alt_alphabet; // offset for another language to recognize
int alt_alphabet_lang; // language for the alt_alphabet
int max_lengthmod;

+ 15
- 4
src/voices.cpp View File

@@ -602,7 +602,7 @@ voice_t *LoadVoice(const char *vname, int control)

// 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 ms ne pa ta tr vi vi-hue zh zh-yue ";
"bn fa fa-pin hi hy hy-west id ka kn ku ml ms ne pa ta te tr vi vi-hue zh zh-yue ";
static const char *voices_europe =
"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 ";

@@ -1894,12 +1894,24 @@ void FreeVoiceList()

ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
{//========================================================================
#ifndef PLATFORM_RISCOS
char path_voices[sizeof(path_home)+12];
#ifdef PLATFORM_RISCOS
if(n_voices_list == 0)
{
sprintf(path_voices,"%s%cvoices",path_home,PATHSEP);
len_path_voices = strlen(path_voices)+1;
GetVoices(path_voices);
voices_list[n_voices_list] = NULL; // voices list terminator
}
return((const espeak_VOICE **)voices_list);

#else
int ix;
int j;
espeak_VOICE *v;
static espeak_VOICE **voices = NULL;
char path_voices[sizeof(path_home)+12];

// free previous voice list data
FreeVoiceList();
@@ -1938,7 +1950,6 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec)
}
return((const espeak_VOICE **)voices);
#endif
return((const espeak_VOICE **)voices_list);
} // end of espeak_ListVoices



Loading…
Cancel
Save