Browse Source

[1.46.45]

Indian languages, rename aspirated phonemes with # instead of h (eg. [t#] not [th]).


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@311 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 12 years ago
parent
commit
6691b67f02

+ 1
- 0
dictsource/de_list View File

_ar aR'AbIS _ar aR'AbIS
_cyr ky:R'IlIS _cyr ky:R'IlIS
_he hEbr'E:IS _he hEbr'E:IS
_zh Ci:n'e:zIS




// Numbers // Numbers

+ 69
- 70
dictsource/dict_phonemes View File

v w x z Z v w x z Z




Dictionary hu_dict 2013-03-08
Dictionary hu_dict 2013-03-10


a A a: e E e: i i: a A a: e E e: i i:
o o: u u: Y y y: Y: o o: u u: Y y y: Y:
z Z z Z




Dictionary de_dict 2013-02-25
Dictionary de_dict 2013-03-10


3 @ @- a A A: aI aU 3 @ @- a A A: aI aU
A~ E E2 E: e: EI i I A~ E E2 E: e: EI i I
ts v x z ts v x z




Dictionary en_dict 2013-03-08
Dictionary en_dict 2013-03-10


0 0# 3 3: @ @- @2 @5 0 0# 3 3: @ @- @2 @5
@L a a# A: A@ aa aI aI3 @L a a# A: A@ aa aI aI3
t tS ts tS; v x z Z t tS ts tS; v x z Z




Dictionary hi_dict 2013-03-01
Dictionary hi_dict 2013-03-09


@ @- @2 a a: aI aU a~ @ @- @2 a a: aI aU a~
e E e: E: E~ i I i: e E e: E: E~ i I i:
l- o O o: O: O~ o~ r- l- o O o: O: O~ o~ r-
u U u: u~ V u U u: u~ V


#X1 #X2 - : b bh c ch
d d. dh dh. f g gh h
H j J Jh k kh l l.
m n N n. n^ p ph Q
#X1 #X2 - : b b# c c#
d d# d. d.# f g g# h
H j J J# k k# l l.
m n N n. n^ p p# Q
q r r. s S s. t T q r r. s S s. t T
t. th th. v w x z
t# t. t.# v w x z




Dictionary ta_dict 2013-03-08
Dictionary ta_dict 2013-03-10


a a: aI aU e E e: i a a: aI aU e E e: i
I i: o o: u U u2 u: I i: o o: u U u2 u:
d. dZ f g h H j k d. dZ f g h H j k
l l. m n N n. n^ p l l. m n N n. n^ p
Q r R s S s. t T Q r R s S s. t T
t. th tS v w z z.
t. tS v w z z.




Dictionary hy_dict 2008-12-22 Dictionary hy_dict 2008-12-22
ts; v w x z Z Z; ts; v w x z Z Z;




Dictionary pt_dict 2013-03-08
Dictionary pt_dict 2013-03-10


& &/ &U~ &~ @ @- a A & &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU aI aU e E eI EI eU EU
tS tS` v w x z Z tS tS` v w x z Z




Dictionary ml_dict 2013-03-06
Dictionary ml_dict 2013-03-10


@ a a# a: aI aU e E @ a a# a: aI aU e E
e: i I i: o o: r- u e: i I i: o o: r- u
u: V y u: V y


#X1 #X2 : ; b bh c ch
d d# d. dh dh. dZ f g
gh h j J Jh k kh l
l. m n N n. n^ p ph
#X1 #X2 : ; b b# c c#
d d# d. d.# d2 dZ f g
g# h j J J# k k# l
l. m n N n. n^ p p#
r R r. R2 s s. S; t r R r. R2 s s. S; t
t. th th. tS v w z
t# t. t.# tS v w z




Dictionary ne_dict 2013-01-10
Dictionary ne_dict 2013-03-09


@ @/ @2 @3 a a: aI aU @ @/ @2 @3 a a: aI aU
a~ e E e: E: eI e~ E~ a~ e E e: E: eI e~ E~
O~ o~ u U u: u~ V VI O~ o~ u U u: u~ V VI
VU V~ VU V~


- : ; b bh c ch d
d. dh dh. f g gh h H
j J Jh k kh l l. m
n N n. n^ p ph Q q
r r. s S s. t t. th
th. v w x z
- : ; b b# c c# d
d# d. d.# f g g# h H
j J J# k k# l l. m
n N n. n^ p p# Q q
r r. s S s. t t# t.
t.# v w x z




Dictionary pa_dict 2013-03-01
Dictionary pa_dict 2013-03-09


@ a a~ e E e~ E~ i @ a a~ e E e~ E~ i
I i~ I~ o O O~ o~ r- I i~ I~ o O O~ o~ r-
u U U~ u~ V V~ u U U~ u~ V V~


: ; b bh c ch d d.
dh dh. f g gh h H j
J Jh k kh l l. m n
N n. n^ p ph Q R R2
s S t t. th th. v x
: ; b b# c c# d d#
d. d.# f g g# h H j
J J# k k# l l. m n
N n. n^ p p# Q R R2
s S t t# t. t.# v x
z z




t tS v w x z t tS v w x z




Dictionary ur_dict 2013-03-08
Dictionary ur_dict 2013-03-09


@ a a: aI aU e E e: @ a a: aI aU e E e:
i I i: O o: U u: V i I i: O o: U u: V


: ; b bh c ch d D
d. dh dh. f g gh h H
j J Jh k kh l m n
N p ph Q q r R r.
s S s. t T t. th th.
: ; b b# c c# d D
d# d. d.# f g g# h H
j J J# k k# l m n
N p p# Q q r R r.
s S s. t T t# t. t.#
v w x z Z z. v w x z Z z.




x z x z




Dictionary dv_dict 2011-01-08
Dictionary dv_dict 2013-03-09


@ @2 a a: aI e e: E: @ @2 a a: aI e e: E:
E~ i I i: o O o: O: E~ i I i: o O o: O:
O~ u U u: V O~ u U u: V


: ? b c ch d D d.
dZ f g h j k kh l
: ? b c c# d D d.
dZ f g h j k k# l
l. m n N n. n^ p Q l. m n N n. n^ p Q
q r R s S s. t T q r R s S s. t T
t. th th. tS v w x z
t# t. t.# tS v w x z
Z Z




Dictionary kn_dict 2011-12-05
Dictionary kn_dict 2013-03-09


a a: aI aU e E e: i a a: aI aU e E e: i
I i: o o: r- u u: I i: o o: r- u u:


#X1 #X2 : b bh c ch d
d. dh dh. dZ f g gh h
j J Jh k kh l l. m
n N n. n^ p ph r s
S s. S; t t. th th. tS
#X1 #X2 : b b# c c# d
d# d. d.# dZ f g g# h
j J J# k k# l l. m
n N n. n^ p p# r s
S s. S; t t# t. t.# tS
v w z v w z




v w x X z v w x X z




Dictionary te_dict 2011-12-05
Dictionary te_dict 2013-03-09


a a: aI aU e E e: i a a: aI aU e E e: i
i: l- o o: r- u u: V i: l- o o: r- u u: V


#X1 #X2 : ; b bh c ch
d d. dh dh. dZ f g gh
h j J Jh k kh l l.
m n N n. n^ p ph r
s s. S; t t. th th. tS
#X1 #X2 : ; b b# c c#
d d# d. d.# dZ f g g#
h j J J# k k# l l.
m n N n. n^ p p# r
s s. S; t t# t. t.# tS
v w z v w z




& &: @ a a: aI aU e & &: @ a a: aI aU e
e: i i: o o: u u: e: i i: o o: u u:


b bh d d. dh dZ f g
gh h j k kh l l. m
m# n N n# N# n. n.# n^
n^# p ph r s S s. t
t. th tS v w
b d d. dZ f g h j
k l l. m m# n N n#
N# n. n.# n^ n^# p r s
S s. t t. tS v w




Dictionary et_dict 2012-06-12 Dictionary et_dict 2012-06-12
x z Z x z Z




Dictionary bo_dict 2011-12-05
Dictionary bo_dict 2013-03-09


a a: e e: i i: l- o a a: e e: i i: l- o
o: r- u u: o: r- u u:


: ? b bh c ch d d.
dh dh. dz dzh g gh H j
J k kh l m n N n.
n^ p ph r s S s. t
t. th th. ts tsh w z Z
: ? b b# c c# d d#
d. d.# dz dz# g g# H j
J k k# l m n N n.
n^ p p# r s S s. t
t# t. t.# ts ts# w z Z




Dictionary kk_dict 2011-12-07 Dictionary kk_dict 2011-12-07
w x w x




Dictionary bn_dict 2013-02-28
Dictionary bn_dict 2013-03-09


@ a a: aI a~ e E e: @ a a: aI a~ e E e:
E: E~ i I i: i~ o O E: E~ i I i: i~ o O
o: O: O~ o~ r- u U u: o: O: O~ o~ r- u U u:
u~ V u~ V


#X1 #X2 : b bh c ch d
d. dh dh. g gh h H j
J Jh k kh l m n N
n. n^ p ph r r. s S
s. t t. th th. v w z
#X1 #X2 : b b# c c# d
d# d. d.# g g# h H j
J J# k k# l m n N
n. n^ p p# r r. s S
s. t t# t. t.# v w z




Dictionary ga_dict 2013-03-08 Dictionary ga_dict 2013-03-08

+ 30
- 14
dictsource/en_list View File

_- h,aIf@n _- h,aIf@n
?3 _- daS ?3 _- daS
_. d0t _. d0t
?3_. pi@rI@d
?3_.p pi@rI@d
_: koUl@n _: koUl@n
_; sEmIk'oUl@n _; sEmIk'oUl@n
_< lEsDan _< lEsDan
_ka dZ'O@dZ@n _ka dZ'O@dZ@n
_ko k3r'i@n _ko k3r'i@n
_eth i:TI'0pIk _eth i:TI'0pIk

_ja dZ'ap@ni:z
_zh tS'aIni:z


// Cyrillic letters // Cyrillic letters
а a а a
ר ReS_ ר ReS_
ש Sin_ ש Sin_
ת tav_ ת tav_
ְ SvA:
ֱ E
ֲ a
ֳ o
ִ i:
ֵ E
ֶ E
ַ a
ָ a
ֹ o
ֻ u
ּ d'agES




// phonetic modifiers // phonetic modifiers




// General American // General American
?3 agile adZ@L
?3 docile doUs@L
?3 facile fas@L
?3 fertile f3:t@L
?3 fragile fradZ@L
?3 futile fju:t@L
?3 hostile h0st@L
?3 mobile moUb@L
agile $alt2
docile $alt2
ductile $alt2
facile $alt2
fertile $alt2
fragile $alt2
futile $alt2
hostile $alt2
mobile $alt2
?3 missile mIs@L ?3 missile mIs@L
?3 projectile pr@dZEkt@L
?3 puerile pjU@r@L
?3 sterile stEr@L
?3 virile vIr@L
projectile $alt2
puerile $alt2
senile $alt2
sterile $alt2
tensile $alt2
virile $alt2
?3 volatile v0la#t@L ?3 volatile v0la#t@L





+ 4
- 2
dictsource/en_rules View File

_) be (gg bE _) be (gg bE
_) belarus bEl@r'u:s _) belarus bEl@r'u:s
_) be (lC bE _) be (lC bE
_) be (lli bI2
_) be (llig bI2
_) be (sC bI2 _) be (sC bI2
_) be (stia bE _) be (stia bE
_) be (tB bE _) be (tB bE
for (see f%O@ for (see f%O@
for (ward f'o@ // straightforward for (ward f'o@ // straightforward
ft (en f ft (en f
&) ful (_S3 f@L
&) ful (_S3i f@L
&) fully (_S5 f@li &) fully (_S5 f@li
&) fulness (_S7 f@Ln@s &) fulness (_S7 f@Ln@s


nt) il (_ @L nt) il (_ @L
@v) il (_ @L @v) il (_ @L
@) ila (_ 'Il@ @) ila (_ 'Il@
?3 &) ile (_$w_alt2 @L
_C) i (lage aI _C) i (lage aI
_d) i (lat %aI _d) i (lat %aI
l) il (ah_ aIl l) il (ah_ aIl
os (al_ 'oUz os (al_ 'oUz
_l) os (e u:z _l) os (e u:z
ose (_ oUz ose (_ oUz
c) ose (_ oUs
purp) ose @s purp) ose @s
_r) os (e# oUz _r) os (e# oUz
c) os (ec oUs c) os (ec oUs

+ 49
- 42
dictsource/hi_list View File

_3 t'i:n _3 t'i:n
_4 c:'a:r: _4 c:'a:r:
_5 'pa~c _5 'pa~c
_6 ch'@2
_6 c#'@2
_7 s'a:t _7 s'a:t
_8 'a:th.
_8 'a:t.#
_9 n'O: _9 n'O:
?3 _9 n'aU ?3 _9 n'aU


_11 gj'a:r-ah _11 gj'a:r-ah
_12 b'a:rah _12 b'a:rah
_13 t'e:r@2h _13 t'e:r@2h
_14 ch'O:d@2h
_14 c#'O:d@2h
_15 p'Vndr@2h _15 p'Vndr@2h
_16 s'o:l@2h _16 s'o:l@2h
_17 sVtr@2h _17 sVtr@2h
_18 a:th:arah
_18 a:t#:arah
_19 Unn'Is _19 Unn'Is


_20 b'i:s _20 b'i:s
_23 t'ue:Is _23 t'ue:Is
_24 c'O:bIs _24 c'O:bIs
_25 p@c:'Is _25 p@c:'Is
_26 ch@bb'i:rs
_26 c#@bb'i:rs
_27 s@t:'a:Is _27 s@t:'a:Is
_28 ath:'a:Is
_28 at#:'a:Is
_29 ,Unt'Is _29 ,Unt'Is
_30 t'i:s _30 t'i:s


_33 tE~t'Is // E~ ? _33 tE~t'Is // E~ ?
_34 cO~t'Is _34 cO~t'Is
_35 pE~t'Is _35 pE~t'Is
_36 chaT'tIs
_36 c#aT'tIs
_37 sE~t'Is _37 sE~t'Is
_38 art'Is _38 art'Is
_39 Unta:l'Is _39 Unta:l'Is
_43 tE~ta:l'Is _43 tE~ta:l'Is
_44 cO:wa:l'Is _44 cO:wa:l'Is
_45 paI'nta:l'Is _45 paI'nta:l'Is
_46 chhIja:l'Is
_46 c#hIja:l'Is
_47 sE~ta:l'Is _47 sE~ta:l'Is
_48 arta:l'Is _48 arta:l'Is
_49 'Un^ca:s _49 'Un^ca:s
_52 b'a:wVn _52 b'a:wVn
_53 t'IrpVn _53 t'IrpVn
_54 c'Ou:wVn _54 c'Ou:wVn
_55 p'achpVn
_56 chh@p:'Vn
_55 p'ac#pVn
_56 c#h@p:'Vn
_57 santa:'w@n _57 santa:'w@n
_58 ath:a:'w@n
_59 Uns'Vth
_60 s'a:th.
_61 'Iks@th.
_62 b'a:s@th.
_63 t'Irs@th.
_64 cO:'s@th.
_65 paI's@th.
_66 ch'Ija:s@th.
_67 s'Vrs@th.
_68 ars@th.
_58 at#:a:'w@n
_59 Uns'Vt#
_60 s'a:t.#
_61 'Iks@t.#
_62 b'a:s@t.#
_63 t'Irs@t.#
_64 cO:'s@t.#
_65 paI's@t.#
_66 c#'Ija:s@t.#
_67 s'Vrs@t.#
_68 ars@t.#
_69 Un@h,at:'Vr: _69 Un@h,at:'Vr:


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


_80 ,Vss'i: _80 ,Vss'i:
_83 tIra:s'i _83 tIra:s'i
_84 cO:ra:s'i _84 cO:ra:s'i
_85 pI'ca:s'i _85 pI'ca:s'i
_86 chIja:s'i
_86 c#Ija:s'i
_87 sVt:a:s'i _87 sVt:a:s'i
_88 ath:a:s'i
_88 at#:a:s'i
_89 nVwa:s'i _89 nVwa:s'i


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


_0C s'O: _0C s'O:
_0M1 h@J,a:r _0M1 h@J,a:r
_0M2 l'a:kh
_0M2 l'a:k#
_0M3 k@ro:r.V _0M3 k@ro:r.V
_0M4 'Vr@b _0M4 'Vr@b
_0M5 kh'Vr@b
_0M5 k#'Vr@b
_dpt _d@s@ml'o:_ // ?? what is Hi for "." ? _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?


// Single consonants // Single consonants
क k@ क k@
क़ q@ क़ q@
ख kh@
ख k#@
ख़ x@ ख़ x@
ग g@ ग g@
ग़ Q@ ग़ Q@
घ gh@
घ g#@
ङ N@ ङ N@
च c@ च c@
छ ch@
छ c#@
ज J@ ज J@
ज़ z@ ज़ z@
झ Jh@
झ J#@
ञ n^@ ञ n^@
ट t.@ ट t.@
ठ th.@
ठ t.#@
ड d.@ ड d.@
ड़ r.@ ड़ r.@
ढ dh.@
ढ d.#@
ण n.@ // retroflex n.@ ण n.@ // retroflex n.@
त t@ त t@
थ th@
थ t#@
द d@ द d@
ध dh@
ध d#@
न n@ न n@
प p@ प p@
फ ph@
फ p#@
फ़ f@ फ़ f@
ब b@ ब b@
भ bh@
भ b#@
म m@ म m@
य j@ य j@
र r@ र r@
ॣ #X2l-: ॣ #X2l-:
ॐ #X1o~m ॐ #X1o~m


_?? Vks.@r
_a ej
_b bi:
_c si:
_d di:
_e i:
_f Ef


// Punctuation // Punctuation
। dVn.d.V । dVn.d.V

+ 20
- 20
dictsource/hi_rules View File

क़ (B q क़ (B q


.group ख .group ख
ख khV
ख (B kh
ख k#V
ख (B k#
ख़ xV ख़ xV
ख़ (B x ख़ (B x


ग़ (B Q ग़ (B Q


.group घ .group घ
घ ghV
घ (B gh
घ g#V
घ (B g#


.group ङ .group ङ
ङ NV ङ NV
च (्य c: च (्य c:


.group छ .group छ
छ chV
छ (B ch
छ c#V
छ (B c#


.group ज .group ज
ज JV ज JV
ज़ (B z ज़ (B z


.group झ .group झ
झ JhV
झ (B Jh
झ J#V
झ (B J#


.group ञ .group ञ
ञ n^V ञ n^V
ट (्य t.: ट (्य t.:


.group ठ .group ठ
ठ th.V
ठ (B th.
ठ t.#V
ठ (B t.#


.group ड .group ड
ड d.V ड d.V
ड़ (B r. ड़ (B r.


.group ढ .group ढ
ढ dh.V
ढ (B dh.
ढ d.#V
ढ (B d.#
ढ़ r.hV // nukta (should retroflex flap) ढ़ r.hV // nukta (should retroflex flap)
ढ़ (B r.h // nukta ढ़ (B r.h // nukta


त (्य t: त (्य t:


.group थ .group थ
थ thV
थ (B th
थ t#V
थ (B t#


.group द .group द
द dV द dV
द (B d द (B d


.group ध .group ध
ध dhV
ध (B dh
ध d#V
ध (B d#


.group न .group न
न nV न nV
प (्य p: प (्य p:


.group फ .group फ
फ phV
फ (B ph
फ p#V
फ (B p#
फ़ fV फ़ fV
फ़ (B f फ़ (B f


ब (B b ब (B b


.group भ .group भ
भ bhV
भ (B bh
भ b#V
भ (B b#


.group म .group म
म mV म mV

+ 4
- 3
dictsource/hu_list View File



// characters // characters
_#9 tAb _#9 tAb
_#32 so:kYz
_#32 s'o:kYz
_cap n'AJ_| _cap n'AJ_|
_?? kAR2AktEr||ko:d // unknown characters (change this) _?? kAR2AktEr||ko:d // unknown characters (change this)


® bEjEJzEt: ® bEjEJzEt:
™ ve:djEJ ™ ve:djEJ
_` tompA _` tompA
_  so:kYz
_  s'o:kYz
_« bElSY:|bAl|ide:zY:jEl _« bElSY:|bAl|ide:zY:jEl
_» bElSY:|jobb|ide:zY:jEl _» bElSY:|jobb|ide:zY:jEl
_­ la:JkYtY:jEl _­ la:JkYtY:jEl


// Alphabets // Alphabets
_ar 'AR2Ab _ar 'AR2Ab
_cry ts'iR2ill
_cyr ts'iR2ill
_he h'e:bER2 _he h'e:bER2
_zh k'i:nAi




// Main Exceptions List // Main Exceptions List

+ 8
- 0
dictsource/hu_rules View File

szaba) d (szem d szaba) d (szem d
_tren) dsz (e d|s _tren) dsz (e d|s
vakon) d (sz d vakon) d (sz d
vé) d (jeggy d


.group dz .group dz
fogó) dz (kod ts fogó) dz (kod ts
_elle) n (jav n _elle) n (jav n
vagyo) n (jog n vagyo) n (jog n
nny (elv n|n^ nny (elv n|n^
haszo) n (jár n
boszorká) ny (jelet n^


.group o .group o
o o o o
ki) s (szőlő S ki) s (szőlő S
körö) s (szeg S körö) s (szeg S
kolbászo) s S kolbászo) s S
feldolgozá) s S


.group ss .group ss
ssz ss2 ssz ss2
pénze) sz (k s pénze) sz (k s
ellenállá) sz (ón Sz ellenállá) sz (ón Sz
ré) sz (árás Sz ré) sz (árás Sz
_te) szts (or st|S


.group t .group t
t t t t
zené) tj (átsz tj zené) tj (átsz tj
szen) tj (akab tj szen) tj (akab tj
közérze) tj (aví tj közérze) tj (aví tj
ké) tj (átszm tj


.group ts .group ts
ts (_S2 tS //general rule with word end of ts letters ts (_S2 tS //general rule with word end of ts letters
leme) tsz (vén ts leme) tsz (vén ts
_cha) tsz (ob t|s _cha) tsz (ob t|s
robo) ts (of t|S robo) ts (of t|S
merényle) ts (or t|S



.group tt .group tt
tt t: tt t:

+ 97
- 97
dictsource/kn_list View File

// letter names // letter names
ಕ್ ik ಕ್ ik
ಖ್ ikh
ಖ್ ik#
ಗ್ ig ಗ್ ig
ಘ್ igh
ಘ್ ig#
ಙ್ iN ಙ್ iN
ಚ್ ic ಚ್ ic
ಛ್ ich
ಛ್ ic#
ಜ್ iJ ಜ್ iJ
ಝ್ iJh
ಝ್ iJ#
ಞ್ in^ ಞ್ in^
ಟ್ it. ಟ್ it.
ಠ್ ith.
ಠ್ it.#
ಡ್ id. ಡ್ id.
ಢ್ idh.
ಢ್ id.#
ಣ್ in. ಣ್ in.
ತ್ it ತ್ it
ಥ್ ith
ಥ್ it#
ದ್ id ದ್ id
ಧ್ id.
ಧ್ id#
ನ್ in ನ್ in
ಪ್ ip ಪ್ ip
ಫ್ iph
ಫ್ ip#
ಬ್ ib ಬ್ ib
ಭ್ ibh
ಭ್ ib#
ಮ್ im ಮ್ im
ಯ್ ij ಯ್ ij
ರ್ ir ರ್ ir
// symbols // symbols
% pratis.ata % pratis.ata
! a:scharjachinhe
! a:sc#arjac#inhe
_? aks.ara _? aks.ara
. pu:rn.avira:ma . pu:rn.avira:ma
, alpavira:ma , alpavira:ma
¼ ka:lu ¼ ka:lu
½ ardha
½ ard#a
¾ mukka:lu ¾ mukka:lu
(1 / 2) ardha
(1 / 2) ard#a
(1 / 4) ka:lu (1 / 4) ka:lu
(3 / 4) mukka:lu (3 / 4) mukka:lu
÷ bha:ga:ka:ra
÷ b#a:ga:ka:ra
& mattu & mattu
_6 'a:ru _6 'a:ru
_7 'e:l.u _7 'e:l.u
_8 'ent.u _8 'ent.u
_9 'ombath:u
_1X h'ath:u
_9 'ombat#:u
_1X h'at#:u
_11 hann'ondu _11 hann'ondu
_12 han:erad.u _12 han:erad.u
_13 hadim'u:ru _13 hadim'u:ru
_16 hadina:ru _16 hadina:ru
_17 hadin'e:l.u _17 hadin'e:l.u
_18 hadin'ent.u _18 hadin'ent.u
_19 ha'th:'ombath:u
_19 ha't#:'ombat#:u
_2X Ip:ath:u
_21 'Ip:a'th:ondu
_22 Ip:a'th:erad.u
_23 Ip:a'th:m'u:ru
_24 Ip:a'th:n'a:lku
_25 Ip:a'th:'aIdu
_26 Ip:a'th:a:ru
_27 Ip:a'th:e:l.u
_28 Ip:a'th:ent.u
_29 Ip:a'th:ombath:u
_2X Ip:at#:u
_21 'Ip:a't#:ondu
_22 Ip:a't#:erad.u
_23 Ip:a't#:m'u:ru
_24 Ip:a't#:n'a:lku
_25 Ip:a't#:'aIdu
_26 Ip:a't#:a:ru
_27 Ip:a't#:e:l.u
_28 Ip:a't#:ent.u
_29 Ip:a't#:ombat#:u
_3X m'ovath:u
_31 m'ovath:ondu
_32 m'ovatherad.u
_33 m'ovathm'u:ru
_34 m'ovathn'a:lku
_35 m'ovath'aIdu
_36 m'ovatha:ru
_37 m'ovathe:l.u
_38 m'ovathent.u
_39 m'ovathombath:u
_3X m'ovat#:u
_31 m'ovat#:ondu
_32 m'ovat#erad.u
_33 m'ovat#m'u:ru
_34 m'ovat#n'a:lku
_35 m'ovat#'aIdu
_36 m'ovat#a:ru
_37 m'ovat#e:l.u
_38 m'ovat#ent.u
_39 m'ovat#ombat#:u
_4X n'alavath:u
_41 n'alavath:ondu
_42 n'alavatherad.u
_43 n'alavathm'u:ru
_44 n'alavathn'a:lku
_45 n'alavathaIdu
_46 n'alavatha:ru
_47 n'alavathe:l.u
_48 n'alavathent.u
_49 n'alavathombath:u
_4X n'alavat#:u
_41 n'alavat#:ondu
_42 n'alavat#erad.u
_43 n'alavat#m'u:ru
_44 n'alavat#n'a:lku
_45 n'alavat#aIdu
_46 n'alavat#a:ru
_47 n'alavat#e:l.u
_48 n'alavat#ent.u
_49 n'alavat#ombat#:u
_5X 'aIvath:u
_51 aIvath:ondu
_52 aIvatherad.u
_53 aIvathm'u:ru
_54 aIvathn'a:lku
_55 aIvath'aIdu
_56 aIvatha:ru
_57 aIvathe:l.u
_58 aIvathent.u
_59 aIvathombath:u
_6X 'aravath:u
_61 aravath:ondu
_62 aravatherad.u
_63 aravathm'u:ru
_64 aravathn'a:lku
_65 aravathaIdu
_66 aravatha:ru
_67 aravathe:l.u
_68 aravathent.u
_69 aravathombath:u
_5X 'aIvat#:u
_51 aIvat#:ondu
_52 aIvat#erad.u
_53 aIvat#m'u:ru
_54 aIvat#n'a:lku
_55 aIvat#'aIdu
_56 aIvat#a:ru
_57 aIvat#e:l.u
_58 aIvat#ent.u
_59 aIvat#ombat#:u
_6X 'aravat#:u
_61 aravat#:ondu
_62 aravat#erad.u
_63 aravat#m'u:ru
_64 aravat#n'a:lku
_65 aravat#aIdu
_66 aravat#a:ru
_67 aravat#e:l.u
_68 aravat#ent.u
_69 aravat#ombat#:u
_7X 'Ep:ath:u
_71 Ep:ath:ondu
_72 Ep:atherad.u
_73 Ep:athm'u:ru
_74 Ep:athn'a:lku
_75 Ep:athaIdu
_76 Ep:atha:ru
_77 Ep:athe:l.u
_78 Ep:athent.u
_79 Ep:athombath:u
_8X 'Embath:u
_81 Embath:ondu
_82 Embatherad.u
_83 Embathm'u:ru
_84 Embathn'a:lku
_85 EmbathaIdu
_86 Embatha:ru
_87 Embathe:l.u
_88 Embathent.u
_89 Embathombath:u
_7X 'Ep:at#:u
_71 Ep:at#:ondu
_72 Ep:at#erad.u
_73 Ep:at#m'u:ru
_74 Ep:at#n'a:lku
_75 Ep:at#aIdu
_76 Ep:at#a:ru
_77 Ep:at#e:l.u
_78 Ep:at#ent.u
_79 Ep:at#ombat#:u
_8X 'Embat#:u
_81 Embat#:ondu
_82 Embat#erad.u
_83 Embat#m'u:ru
_84 Embat#n'a:lku
_85 Embat#aIdu
_86 Embat#a:ru
_87 Embat#e:l.u
_88 Embat#ent.u
_89 Embat#ombat#:u
_9X th'ombath:u
_91 th'ombath:ondu
_92 th'ombath:erad.u
_93 th'ombathm'u:ru
_94 th'ombathn'a:lku
_95 th'ombathaIdu
_96 th'ombatha:ru
_97 th'ombathe:l.u
_98 th'ombathent.u
_99 th'ombathombath:u
_9X t#'ombat#:u
_91 t#'ombat#:ondu
_92 t#'ombat#:erad.u
_93 t#'ombat#m'u:ru
_94 t#'ombat#n'a:lku
_95 t#'ombat#aIdu
_96 t#'ombat#a:ru
_97 t#'ombat#e:l.u
_98 t#'ombat#ent.u
_99 t#'ombat#ombat#:u
_0C0 n'u:ru _0C0 n'u:ru
_1C0 nu:ru _1C0 nu:ru

+ 20
- 20
dictsource/kn_rules View File

ಕ (B k ಕ (B k


.group ಖ .group ಖ
ಖ kha
ಖ (B kh
ಖ k#a
ಖ (B k#


.group ಗ .group ಗ
ಗ ga ಗ ga
ಗ (B g ಗ (B g


.group ಘ .group ಘ
ಘ gha
ಘ (B gh
ಘ g#a
ಘ (B g#


.group ಙ .group ಙ
ಙ Na ಙ Na
ಚ (B c ಚ (B c


.group ಛ .group ಛ
ಛ cha
ಛ (B ch
ಛ c#a
ಛ (B c#


.group ಜ .group ಜ
ಜ Ja ಜ Ja
ಜ಼ (B z ಜ಼ (B z


.group ಝ .group ಝ
ಝ Jha
ಝ (B Jh
ಝ J#a
ಝ (B J#


.group ಞ .group ಞ
ಞ n^a ಞ n^a
ಟ (B t. ಟ (B t.


.group ಠ .group ಠ
ಠ th.a
ಠ (B th.
ಠ t.#a
ಠ (B t.#


.group ಡ .group ಡ
ಡ d.a ಡ d.a
ಡ (B d. ಡ (B d.


.group ಢ .group ಢ
ಢ dh.a
ಢ (B dh.
ಢ d.#a
ಢ (B d.#


.group ಣ .group ಣ
ಣ n.a ಣ n.a
ತ (B t ತ (B t


.group ಥ .group ಥ
ಥ tha
ಥ (B th
ಥ t#a
ಥ (B t#


.group ದ .group ದ
ದ da ದ da
ದ (B d ದ (B d


.group ಧ .group ಧ
ಧ dha
ಧ (B dh
ಧ d#a
ಧ (B d#


.group ನ .group ನ
ನ na ನ na
ಪ (B p ಪ (B p


.group ಫ .group ಫ
ಫ pha
ಫ (B ph
ಫ p#a
ಫ (B p#
ಫ಼ fa // nukta ಫ಼ fa // nukta
ಫ಼ (B f ಫ಼ (B f


ಬ (B b ಬ (B b


.group ಭ .group ಭ
ಭ bha
ಭ (B bh
ಭ b#a
ಭ (B b#


.group ಮ .group ಮ
ಮ ma ಮ ma

+ 3
- 3
dictsource/ml_list View File

U+d02 'a#m U+d02 'a#m
U+d03 visarg@m U+d03 visarg@m
U+d3d avagraha U+d3d avagraha
U+d4d chandraka:r@m
U+d4e chil.acharam // ??
U+d4d c#andraka:r@m
U+d4e c#il.ac#aram // ??


ൺ _'yn. // chillu consonants ൺ _'yn. // chillu consonants
ൻ _in ൻ _in
& samuccaj@m & samuccaj@m
_. bindu _. bindu
_, aNkuS;@m _, aNkuS;@m
_; ro:dhini
_; ro:d#ini
_? co:dj@cihn@m _? co:dj@cihn@m
_! a:S;c@rjacihn@m _! a:S;c@rjacihn@m



+ 21
- 21
dictsource/ml_rules View File

ക്ക (B k: ക്ക (B k:


.group ഖ .group ഖ
ഖ kha
ഖ (B kh
ഖ k#a
ഖ (B k#


.group ഗ .group ഗ
ഗ ga ഗ ga
ഗ (B g ഗ (B g


.group ഘ .group ഘ
ഘ gha
ഘ (B gh
ഘ g#a
ഘ (B g#


.group ങ .group ങ
ങ Na ങ Na
ച (B c ച (B c


.group ഛ .group ഛ
ഛ cha
ഛ (B ch
ഛ c#a
ഛ (B c#


.group ജ .group ജ
ജ Ja ജ Ja
ജ (B J ജ (B J


.group ഝ .group ഝ
ഝ Jha
ഝ (B Jh
ഝ J#a
ഝ (B J#


.group ഞ .group ഞ
ഞ n^a ഞ n^a
ട്ട (B t.: ട്ട (B t.:


.group ഠ .group ഠ
ഠ th.a
ഠ (B th.
ഠ t.#a
ഠ (B t.#


.group ഡ .group ഡ
ഡ d.a ഡ d.a
ഡ (B d. ഡ (B d.


.group ഢ .group ഢ
ഢ dh.a
ഢ (B dh.
ഢ d.#a
ഢ (B d.#


.group ണ .group ണ
ണ n.a ണ n.a
ത്ത (B t: ത്ത (B t:


.group ഥ .group ഥ
ഥ tha
ഥ (B th
ഥ t#a
ഥ (B t#


.group ദ .group ദ
ദ da ദ da
ദ (B d ദ (B d


.group ധ .group ധ
ധ dha
ധ (B dh
ധ d#a
ധ (B d#


.group ന .group ന
ന na ന na
പ്പ (B p: പ്പ (B p:


.group ഫ .group ഫ
ഫ pha
ഫ (B p
ഫ p#a
ഫ (B p#


_പ്രൊ) ഫ (സര് fa _പ്രൊ) ഫ (സര് fa


ബ (B b ബ (B b


.group ഭ .group ഭ
ഭ bha
ഭ (B bh
ഭ b#a
ഭ (B b#


.group മ .group മ
മ ma മ ma
.group റ .group റ
റ R2a റ R2a
റ (B R2 റ (B R2
ന്) റ d#
ന്) റ d2
റ്റ t.t. // ?? R2R2 = t.t. റ്റ t.t. // ?? R2R2 = t.t.


.group ല .group ല

+ 51
- 51
dictsource/ne_list View File

_3 t'i:n _3 t'i:n
_4 c'a:r: _4 c'a:r:
_5 p'a:nc _5 p'a:nc
_6 ch'@2
_6 c#'@2
_7 s'a:t _7 s'a:t
_8 'a:th.
_8 'a:t.#
_9 n'V'u: _9 n'V'u:
_10 d'Vs _10 d'Vs
_11 e:'gh'a:r'V
_11 e:'g#'a:r'V
_12 b'a:r@2 _12 b'a:r@2
_13 t'e:hr@ _13 t'e:hr@
_14 ch'O:d@2
_14 c#'O:d@2
_15 p'Vndr@2 _15 p'Vndr@2
_16 s'o:r@2 _16 s'o:r@2
_17 s'Vtr@2 _17 s'Vtr@2
_18 a'th.'a:r@2
_18 a't.#'a:r@2
_19 U:nn'a:i's _19 U:nn'a:i's
_20 b'i:s _20 b'i:s
_23 t'e:Is _23 t'e:Is
_24 c'O:b'Is _24 c'O:b'Is
_25 p@c:'Is _25 p@c:'Is
_26 ch@b'b'i:s
_26 c#@b'b'i:s
_27 s@t:'a:Is _27 s@t:'a:Is
_28 ath:'a:Is
_28 at#:'a:Is
_29 U:n'Vnt'Is _29 U:n'Vnt'Is
_30 t'i:s _30 t'i:s
_33 t'e:t't'i:s _33 t'e:t't'i:s
_34 cO~,t'I:s _34 cO~,t'I:s
_35 pE~t'Is _35 pE~t'Is
_36 ch@:t't'I:s
_36 c#@:t't'I:s
_37 sE~t'Is _37 sE~t'Is
_38 art'Is _38 art'Is
_39 U:n'an'c'a:l'i:s _39 U:n'an'c'a:l'i:s
_43 t'ri:c'a:l'i:s _43 t'ri:c'a:l'i:s
_44 cO:wa:l'Is _44 cO:wa:l'Is
_45 paI'nta:l'Is _45 paI'nta:l'Is
_46 chhIja:l'Is
_46 c#hIja:l'Is
_47 s@'d.cta:l'Is _47 s@'d.cta:l'Is
_48 a'th.'c'a:l'Is
_48 a't.#'c'a:l'Is
_49 U'n'an'c'a:s _49 U'n'an'c'a:s
: :
_50 p@c'a:s _50 p@c'a:s
_53 t'rI:p'an'nV _53 t'rI:p'an'nV
_54 c'Ou:wVn'nV _54 c'Ou:wVn'nV
_55 p'ac'pVn'nV _55 p'ac'pVn'nV
_56 chh@p:'Vn'nV
_56 c#h@p:'Vn'nV
_57 s'Vn't:'a:w@n'n':V _57 s'Vn't:'a:w@n'n':V
_58 a'nth:'a:w@n'n':V
_59 U'n'Vn's'a:th.i:
_60 s'a:th.i:
_61 e:k'as@th.'th.i:
_62 b'E:s@th.':th.'i:
_63 t'r'i:,s@th.'th.'i:
_64 c'O:s@th.'th.'i:
_65 p'E~'s@th.'th.'i:
_66 ch'E's@th.'th.'i:
_67 s'Vt's@th.'th.'i:
_68 a'th.,s@th.'th.'i:
_58 a'nt#:'a:w@n'n':V
_59 U'n'Vn's'a:t.#i:
_60 s'a:t.#i:
_61 e:k'as@t.#'t.#i:
_62 b'E:s@t.#':t.#'i:
_63 t'r'i:,s@t.#'t.#'i:
_64 c'O:s@t.#'t.#'i:
_65 p'E~'s@t.#'t.#'i:
_66 c#'E's@t.#'t.#'i:
_67 s'Vt's@t.#'t.#'i:
_68 a't.#,s@t.#'t.#'i:
_69 U:n'an's'Vtt'ar'i: _69 U:n'an's'Vtt'ar'i:
_70 s'at't@r'i:: _70 s'at't@r'i::
_72 b@h'att'Vr: _72 b@h'att'Vr:
_73 tIjatt:'Vr: _73 tIjatt:'Vr:
_74 cO:hat:'Vr: _74 cO:hat:'Vr:
_75 pach,at:'Vr:
_76 ch@'j'ah'at't'Vr:
_75 pac#,at:'Vr:
_76 c#@'j'ah'at't'Vr:
_77 s@t@hatt:'Vr: _77 s@t@hatt:'Vr:
_78 athhatt:'Vr:
_78 at#hatt:'Vr:
_79 U'n'a:s'i: _79 U'n'a:s'i:
_80 a's's'i: _80 a's's'i:
_83 trIj'a:s'i: _83 trIj'a:s'i:
_84 cO:ra:s'i: _84 cO:ra:s'i:
_85 p'ac'a:s'i: _85 p'ac'a:s'i:
_86 ch@j'a:s'i:
_86 c#@j'a:s'i:
_87 s'V:t'a:s'i: _87 s'V:t'a:s'i:
_88 a'th.:a:s'i:
_88 a't.#:a:s'i:
_89 u:n'a:n'ab'b'e: _89 u:n'a:n'ab'b'e:
_90 n@b'b'e: _90 n@b'b'e:
_93 trIj'a:n@b'b'e: _93 trIj'a:n@b'b'e:
_94 cO:r'a:n@b'b'e: _94 cO:r'a:n@b'b'e:
_95 p@n'c'a:n@b'b'e: _95 p@n'c'a:n@b'b'e:
_96 ch@j'a:n@b'b'e:
_96 c#@j'a:n@b'b'e:
_97 s@n't:'a:n@b'b'e: _97 s@n't:'a:n@b'b'e:
_98 a'n'th.'a:n@b'b'e:
_98 a'n't.#'a:n@b'b'e:
_99 U:n'n'a:nsh@je: _99 U:n'n'a:nsh@je:
_0C s'aj@ _0C s'aj@
_0M1 h@z'a:r@ _0M1 h@z'a:r@
_0M2 l'a:kh@
_0M2 l'a:k#@
_0M3 k'a'ro:d.@ _0M3 k'a'ro:d.@
_0M4 'Vr@b _0M4 'Vr@b
_0M5 kh'Vr@b'V
_0M5 k#'Vr@b'V
_0M6 n'i:l' _0M6 n'i:l'
_0M7 p'Vd'm@ _0M7 p'Vd'm@
_0M8 sh'an,kh@
_0M9 m'ah'a:,sh'ankh@
_0M10 p@r'a:rrd:dh@
_0M8 sh'an,k#@
_0M9 m'ah'a:,sh'ank#@
_0M10 p@r'a:rrd:d#@
_dpt _th'o:plo_
_dpt _t#'o:plo_
// Symbols in Nepali // Symbols in Nepali
// Single consonants // Single consonants
क k@ क k@
क़ q@ क़ q@
ख kh@
ख k#@
ख़ x@ ख़ x@
ग g@ ग g@
ग़ Q@ ग़ Q@
घ gh@
घ g#@
ङ N@ ङ N@
च c@ च c@
छ ch@
छ c#@
ज J@ ज J@
ज़ z@ ज़ z@
झ Jh@
झ J#@
ञ n^@ ञ n^@
ट t.@ ट t.@
ठ th.@
ठ t.#@
ड d.@ ड d.@
ड़ r.@ ड़ r.@
ढ dh.@
ढ d.#@
ण n.@ // retroflex n.@ ण n.@ // retroflex n.@
त t@ त t@
थ th@
थ t#@
द d@ द d@
ध dh@
ध d#@
न n@ न n@
प p@ प p@
फ ph@
फ p#@
फ़ f@ फ़ f@
ब b@ ब b@
भ bh@
भ b#@
म m@ म m@
य j@ य j@
र r@ र r@
पो $u $pause पो $u $pause
हो $u $brk हो $u $brk
के k'e,: $brk के k'e,: $brk
दुःख d'u,,kh@
सुख s'u=kh@
दुःख d'u,,k#@
सुख s'u=k#@
जव J'Vv@ जव J'Vv@
राष्ट्रिय r'a:S,t.rI:j@2 $2 राष्ट्रिय r'a:S,t.rI:j@2 $2
सित s'it@ सित s'it@
होइन h'oi:n@2 होइन h'oi:n@2
भएन bh'Vj'en@2
भएन b#'Vj'en@2
गएन g'Vj'en@2 गएन g'Vj'en@2
खाएन khaj'en@2
खाएन k#aj'en@2
दिएन d'ij'en@2 दिएन d'ij'en@2
छुन ch'un'@
छुन c#'un'@
बाट b'a:t.@ बाट b'a:t.@
अथवा $pause अथवा $pause
वा $pause वा $pause

+ 119
- 119
dictsource/ne_rules View File

.group ख .group ख
ख khV
ख (B kh
?1 ख (_ kh
्) ख (_ kh@/
ख (्ख kh,
खँ khV~'
खॅ khV~'
ख k#V
ख (B k#
?1 ख (_ k#
्) ख (_ k#@/
ख (्ख k#,
खँ k#V~'
खॅ k#V~'
.group ग .group ग
ग gV ग gV
गॅ gV~' गॅ gV~'
.group घ .group घ
घ ghV
घ (B gh
?1 घ (_ gh
घ (्घ gh,
्) घ (_ gh@/
घँ ghV~'
घॅ ghV~'
घ g#V
घ (B g#
?1 घ (_ g#
घ (्घ g#,
्) घ (_ g#@/
घँ g#V~'
घॅ g#V~'
.group ङ // Phoneme adjustment suggested .group ङ // Phoneme adjustment suggested
चॅ cV~' चॅ cV~'
.group छ .group छ
छ chV
छ (B ch
्) छ (C ch@
छ (_ ch@
छँ chV~'
छॅ chV~'
छ c#V
छ (B c#
्) छ (C c#@
छ (_ c#@
छँ c#V~'
छॅ c#V~'
.group ज .group ज
ज JV ज JV
्) ज (_ J@/ ्) ज (_ J@/
.group झ // Phoneme adjustment suggested. .group झ // Phoneme adjustment suggested.
झ JhV
झ (B Jh
झँ JhV~'
झॅ JhV~'
झ J#V
झ (B J#
झँ J#V~'
झॅ J#V~'
झ (्झ J, झ (्झ J,
झ (_ Jh
झ (_ J#
.group ञ // Phoneme adjustment suggested .group ञ // Phoneme adjustment suggested
ञ n^V ञ n^V
ट (्य t.: ट (्य t.:
.group ठ .group ठ
ठ th.V
ठ (B th.
ठँ t.hV~'
ठॅ t.hV~'
ठ (्ठ th.,
्) ठ (_ th.@/
?1 ठ (_ t.h
ठ t.#V
ठ (B t.#
ठँ t.#V~'
ठॅ t.#V~'
ठ (्ठ t.#,
्) ठ (_ t.#@/
?1 ठ (_ t.#
.group ड .group ड
ड d.V ड d.V
ड़ॅ d.:V~' ड़ॅ d.:V~'
.group ढ .group ढ
ढ dh.V
ढ (B dh.
ढँ d.hV~'
ढॅ d.hV~'
्) ढ (_ dh.@/
?1 ढ (_ d.h
ढ़ d.hV: // nukta
ढ़ (B d.h // nukta
ढ d.#V
ढ (B d.#
ढँ d.#V~'
ढॅ d.#V~'
्) ढ (_ d.#@/
?1 ढ (_ d.#
ढ़ d.#V: // nukta
ढ़ (B d.# // nukta
.group ण .group ण
ण n.V // Phoneme adjustment suggested ण n.V // Phoneme adjustment suggested
?1 त (_ t, ?1 त (_ t,
.group थ .group थ
थ thV
थँ thV~'
थॅ thV~'
थ (B th
्) थ (_ th@/
थ (्य th,
?1 थ (_ th
थ t#V
थँ t#V~'
थॅ t#V~'
थ (B t#
्) थ (_ t#@/
थ (्य t#,
?1 थ (_ t#
.group द .group द
द dV द dV
्) द (_ d@/ ्) द (_ d@/
.group ध .group ध
ध dhV
धँ dhV~'
धॅ dhV~'
ध (B dh
?1 ध (_ dh
्) ध (_ dh@/
ध d#V
धँ d#V~'
धॅ d#V~'
ध (B d#
?1 ध (_ d#
्) ध (_ d#@/
.group न .group न
न nV न nV
्) प (_ p@/ ्) प (_ p@/
.group फ .group फ
फ phV
फँ phV~'
फॅ phV~'
फ (B ph
फ (्न ph:
?1 फ (_ ph
्) फ (_ ph@/
फ p#V
फँ p#V~'
फॅ p#V~'
फ (B p#
फ (्न p#:
?1 फ (_ p#
्) फ (_ p#@/
.group ब .group ब
ब bV ब bV
्) ब (_ b@/ ्) ब (_ b@/
.group भ .group भ
भ bhV
भँ bhV~'
भॅ bhV~'
भ (B bh
?1 भ (_ bh
भ (्य bh,
भ b#V
भँ b#V~'
भॅ b#V~'
भ (B b#
?1 भ (_ b#
भ (्य b#,
्) भ (_ bh@/ ्) भ (_ bh@/
.group म .group म
.group [ .group [
[ l'eftbr'ak'et [ l'eftbr'ak'et
[ (_A th'ul'ok'osht.@2suru
[ (_C th'ul'ok'osht.@2suru
[ (_० th'ul'ok'osht.@2suru
[ (_१ th'ul'ok'osht.@2suru
[ (_२ th'ul'ok'osht.@2suru
[ (_३ th'ul'ok'osht.@2suru
[ (_४ th'ul'ok'osht.@2suru
[ (_५ th'ul'ok'osht.@2suru
[ (_६ th'ul'ok'osht.@2suru
[ (_७ th'ul'ok'osht.@2suru
[ (_८ th'ul'ok'osht.@2suru
[ (_९ th'ul'ok'osht.@2suru
[ (_A t#'ul'ok'osht.@2suru
[ (_C t#'ul'ok'osht.@2suru
[ (_० t#'ul'ok'osht.@2suru
[ (_१ t#'ul'ok'osht.@2suru
[ (_२ t#'ul'ok'osht.@2suru
[ (_३ t#'ul'ok'osht.@2suru
[ (_४ t#'ul'ok'osht.@2suru
[ (_५ t#'ul'ok'osht.@2suru
[ (_६ t#'ul'ok'osht.@2suru
[ (_७ t#'ul'ok'osht.@2suru
[ (_८ t#'ul'ok'osht.@2suru
[ (_९ t#'ul'ok'osht.@2suru
.group ] .group ]
] r'aitbr'ak'et ] r'aitbr'ak'et
A_) ] th'ul'ok'osht.@2b'Vnd@2
C_) ] th'ul'ok'osht.@2b'Vnd@2
०_) ] th'ul'ok'osht.@2b'Vnd@2
१_) ] th'ul'ok'osht.@2b'Vnd@2
२_) ] th'ul'ok'osht.@2b'Vnd@2
३_) ] th'ul'ok'osht.@2b'Vnd@2
४_) ] th'ul'ok'osht.@2b'Vnd@2
५_) ] th'ul'ok'osht.@2b'Vnd@2
६_) ] th'ul'ok'osht.@2b'Vnd@2
७_) ] th'ul'ok'osht.@2b'Vnd@2
८_) ] th'ul'ok'osht.@2b'Vnd@2
९_) ] th'ul'ok'osht.@2b'Vnd@2
A_) ] t#'ul'ok'osht.@2b'Vnd@2
C_) ] t#'ul'ok'osht.@2b'Vnd@2
०_) ] t#'ul'ok'osht.@2b'Vnd@2
१_) ] t#'ul'ok'osht.@2b'Vnd@2
२_) ] t#'ul'ok'osht.@2b'Vnd@2
३_) ] t#'ul'ok'osht.@2b'Vnd@2
४_) ] t#'ul'ok'osht.@2b'Vnd@2
५_) ] t#'ul'ok'osht.@2b'Vnd@2
६_) ] t#'ul'ok'osht.@2b'Vnd@2
७_) ] t#'ul'ok'osht.@2b'Vnd@2
८_) ] t#'ul'ok'osht.@2b'Vnd@2
९_) ] t#'ul'ok'osht.@2b'Vnd@2
.group { .group {
{ l'eftbr'eIs { l'eftbr'eIs
{ (_A b'a:Ng'ek'oshth.@2suru
{ (_C b'a:Ng'ek'oshth.@2suru
{ (_० b'a:Ng'ek'oshth.@2suru
{ (_१ b'a:Ng'ek'oshth.@2suru
{ (_२ b'a:Ng'ek'oshth.@2suru
{ (_३ b'a:Ng'ek'oshth.@2suru
{ (_४ b'a:Ng'ek'oshth.@2suru
{ (_५ b'a:Ng'ek'oshth.@2suru
{ (_६ b'a:Ng'ek'oshth.@2suru
{ (_७ b'a:Ng'ek'oshth.@2suru
{ (_८ b'a:Ng'ek'oshth.@2suru
{ (_९ b'a:Ng'ek'oshth.@2suru
{ (_A b'a:Ng'ek'osht.#@2suru
{ (_C b'a:Ng'ek'osht.#@2suru
{ (_० b'a:Ng'ek'osht.#@2suru
{ (_१ b'a:Ng'ek'osht.#@2suru
{ (_२ b'a:Ng'ek'osht.#@2suru
{ (_३ b'a:Ng'ek'osht.#@2suru
{ (_४ b'a:Ng'ek'osht.#@2suru
{ (_५ b'a:Ng'ek'osht.#@2suru
{ (_६ b'a:Ng'ek'osht.#@2suru
{ (_७ b'a:Ng'ek'osht.#@2suru
{ (_८ b'a:Ng'ek'osht.#@2suru
{ (_९ b'a:Ng'ek'osht.#@2suru
.group } .group }
} r'aItbr'eIs } r'aItbr'eIs
A_) } b'a:Ng'ek'oshth.@2b'Vnd@2
C_) } b'a:Ng'ek'oshth.@2b'Vnd@2
०_) } b'a:Ng'ek'oshth.@2b'Vnd@2
१_) } b'a:Ng'ek'oshth.@2b'Vnd@2
२_) } b'a:Ng'ek'oshth.@2b'Vnd@2
३_) } b'a:Ng'ek'oshth.@2b'Vnd@2
४_) } b'a:Ng'ek'oshth.@2b'Vnd@2
५_) } b'a:Ng'ek'oshth.@2b'Vnd@2
६_) } b'a:Ng'ek'oshth.@2b'Vnd@2
७_) } b'a:Ng'ek'oshth.@2b'Vnd@2
८_) } b'a:Ng'ek'oshth.@2b'Vnd@2
९_) } b'a:Ng'ek'oshth.@2b'Vnd@2
A_) } b'a:Ng'ek'osht.#@2b'Vnd@2
C_) } b'a:Ng'ek'osht.#@2b'Vnd@2
०_) } b'a:Ng'ek'osht.#@2b'Vnd@2
१_) } b'a:Ng'ek'osht.#@2b'Vnd@2
२_) } b'a:Ng'ek'osht.#@2b'Vnd@2
३_) } b'a:Ng'ek'osht.#@2b'Vnd@2
४_) } b'a:Ng'ek'osht.#@2b'Vnd@2
५_) } b'a:Ng'ek'osht.#@2b'Vnd@2
६_) } b'a:Ng'ek'osht.#@2b'Vnd@2
७_) } b'a:Ng'ek'osht.#@2b'Vnd@2
८_) } b'a:Ng'ek'osht.#@2b'Vnd@2
९_) } b'a:Ng'ek'osht.#@2b'Vnd@2
// Special Symbols with special meanings // Special Symbols with special meanings
.group .group
। pur',n.@,w'ir'a:m // Fullstop of Devanagari । pur',n.@,w'ir'a:m // Fullstop of Devanagari
॥ d'i:rgh@,w'ir'a:m // Double Fullstop - means Read sentence twice.
॥ d'i:rg#@,w'ir'a:m // Double Fullstop - means Read sentence twice.
ॱ dVS@mal@w@2 // Decimal of devanagari (dot [.] is mostly used!). ॱ dVS@mal@w@2 // Decimal of devanagari (dot [.] is mostly used!).
॰ saNks.e:p@s'u:c@k@ ॰ saNks.e:p@s'u:c@k@
$ dOlV
$ dOlV
% prVtish'vt % prVtish'vt
// Rarely used Special symbols. Written after Indepedent Vowel or between a Consonants and Symbolic Vowels! // Rarely used Special symbols. Written after Indepedent Vowel or between a Consonants and Symbolic Vowels!
़ n'u'k't'a: // Name of symbol. ़ n'u'k't'a: // Name of symbol.
॑ Ud'Vtt,@ ॑ Ud'Vtt,@
॓ Ud:dh@r,@n.@a:r'Vmbh@
॔ ,Ud:dh@r,@n.@'Vnt@
ॽ k,@n.th.@w'Ira:m
॓ Ud:d#@r,@n.@a:r'Vmb#@
॔ ,Ud:d#@r,@n.@'Vnt@
ॽ k,@n.t.#@w'Ira:m
॒ a'n'ud'Vtt,@ ॒ a'n'ud'Vtt,@

+ 2
- 0
dictsource/pt_list View File

_ar 'a*aby _ar 'a*aby
_cyr si*'ilikU _cyr si*'ilikU
_he eb*'aIkU _he eb*'aIkU
_zh Sin'es




// character names // character names
gameta $alt2 gameta $alt2
geleia $alt geleia $alt
gelo $alt $verb gelo $alt $verb
genebra $alt
germe $alt germe $alt
gesso $alt2 gesso $alt2
golpe $alt golpe $alt

+ 11
- 6
dictsource/pt_rules View File

_soub) e (L05_ E _soub) e (L05_ E
_rend) e (L06_ e _rend) e (L06_ e
_vend) e (L06_ e _vend) e (L06_ e
_atend) e (L06_ e
tend) e (L06_ e / a- con- en- es-
_compreend) e (L06_ e _compreend) e (L06_ e
_entend) e (L06_ e
_estend) e (L06_ e
respond) e (L06_ e // cor- respond) e (L06_ e // cor-
_enraivec) e (L07_ e _enraivec) e (L07_ e
_espairec) e (L07_ e _espairec) e (L07_ e
vert) e (L07_ e // in- re- con- vert) e (L07_ e // in- re- con-
_eleg) e (L07_ e _eleg) e (L07_ e
_ergu) e (L07_ e _ergu) e (L07_ e
_escond) e (L06_ e
_mord) e (L06_ e
_mord) e (L07_ e _mord) e (L07_ e
_morr) e (L07_ e _morr) e (L07_ e
_perd) e (L07_ e _perd) e (L07_ e
_agradec) e (L07_ e _agradec) e (L07_ e
_amanhec) e (L07_ e _amanhec) e (L07_ e
_anoitec) e (L07_ e _anoitec) e (L07_ e
_arrepend) e (L06_ e
_arrepend) e (L07_ e _arrepend) e (L07_ e
_cresc) e (L07_ e _cresc) e (L07_ e
_defend) e (L06_ e
_defend) e (L07_ e _defend) e (L07_ e
_depend) e (L06_ e
_depend) e (L07_ e _depend) e (L07_ e
_emagrec) e (L07_ e _emagrec) e (L07_ e
_enlouquec) e (L07_ e _enlouquec) e (L07_ e
_escurec) e (L07_ e _escurec) e (L07_ e
_esquec) e (L07_ e _esquec) e (L07_ e
_interromp) e (L07_ e _interromp) e (L07_ e
_obedec) e (L07_ e
obedec) e (L07_ e / des-
_suspend) e (L07_ e
_perec) e (L07_ e _perec) e (L07_ e
_rejuvenec) e (L07_ e _rejuvenec) e (L07_ e
aprend) e (L07_ e // re- aprend) e (L07_ e // re-
conhec) e (L07_ e // & re- des- conhec) e (L07_ e // & re- des-
entend) e (L07_ e
tend) e (L07_ e / en- con- a- es-
preend) e (L07_ e // sur- com- preend) e (L07_ e // sur- com-
respond) e (L07_ e // cor- respond) e (L07_ e // cor-
qu) e (brL04_ E qu) e (brL04_ E
acel) e (rL04_ E / des- acel) e (rL04_ E / des-
_hosp) e (dL03_ E _hosp) e (dL03_ E
_amort) e (çL03_ e
_in) e (ptL03_ E _in) e (ptL03_ E
_gr) e (gL03_ e _gr) e (gL03_ e
_n) e (grL03_ e _n) e (grL03_ e
_aqu) e (çL03_ e _aqu) e (çL03_ e
_car) e (çL03_ e _car) e (çL03_ e
_mer) e (çL03_ e _mer) e (çL03_ e
_pad) e (çL03_ e // com-
pad) e (çL03_ e // com-
_per) e (çL03_ e _per) e (çL03_ e
conh) e (çL03_ e // re- conh) e (çL03_ e // re-
_esqu) e (çL03_ e _esqu) e (çL03_ e

+ 1
- 0
dictsource/ta_list View File

_ar arVbU _ar arVbU
_cyr sirillik _cyr sirillik
_he ;ebire:jVm _he ;ebire:jVm
_zh tS'i:nV




// abbreviations // abbreviations

+ 19
- 19
dictsource/te_list View File

_11 padakond.u _11 padakond.u
_12 pannemd.u _12 pannemd.u
_13 padamu:d.u: _13 padamu:d.u:
_14 padhna:lugu
_14 pad#na:lugu
_15 padihe:nu _15 padihe:nu
_16 padaha:ru _16 padaha:ru
_17 padihe:d.u _17 padihe:d.u
_18 paddhenimidi
_18 padd#enimidi
_19 pamdommadi _19 pamdommadi
_2X iravaI _2X iravaI
_3X muppaI _3X muppaI
_4X nalubhaI
_5X ja:bhaI
_4X nalub#aI
_5X ja:b#aI
_6X aravaI _6X aravaI
_7X d.ebhbaI
_8X jenabhaI
_9X tombhaI
_7X d.eb#baI
_8X jenab#aI
_9X tomb#aI
_0C vandala _0C vandala
_0C0 vandalu _0C0 vandalu
_1C okavanda _1C okavanda
_, ka:ma: _, ka:ma:
_; semi:ko:lan _; semi:ko:lan
_: ko:lan _: ko:lan
_! a:S;carja:rthaka
_? praS;na:rthaka
_! a:S;carja:rt#aka
_? praS;na:rt#aka
_- haIfan _- haIfan
__ amd.ar||sko:r __ amd.ar||sko:r




// consonants with virama // consonants with virama
క్ ik క్ ik
ఖ్ ikh
ఖ్ ik#
గ్ ig గ్ ig
ఘ్ igh
ఘ్ ig#
ఙ్ iN ఙ్ iN
చ్ ic చ్ ic
ఛ్ ich
ఛ్ ic#
జ్ iJ జ్ iJ
ఝ్ iJh
ఝ్ iJ#
ఞ్ in^ ఞ్ in^
ట్ it. ట్ it.
ఠ్ ith.
ఠ్ it.#
డ్ id. డ్ id.
ఢ్ idh.
ఢ్ id.#
ణ్ in. ణ్ in.
త్ it త్ it
థ్ ith
థ్ it#
ద్ id ద్ id
ధ్ idh
ధ్ id#
న్ in న్ in
ప్ ip ప్ ip
ఫ్ iph
ఫ్ ip#
బ్ ib బ్ ib
భ్ ibh
భ్ ib#
మ్ im మ్ im
య్ ij య్ ij
ర్ ir ర్ ir

+ 20
- 20
dictsource/te_rules View File

క (B k క (B k


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


.group గ .group గ
గ ga గ ga
గ (B g గ (B g


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


.group ఙ .group ఙ
ఙ Na ఙ Na
చ (B c చ (B c


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


.group జ .group జ
జ Ja జ Ja
జ (B J జ (B J


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


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


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


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


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


.group ణ .group ణ
ణ n.a ణ n.a
త (B t త (B t


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


.group ద .group ద
ద da ద da
ద (B d ద (B d


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


.group న .group న
న na న na
ప (B p ప (B p


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


.group బ .group బ
బ ba బ ba
బ (B b బ (B b


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


.group మ .group మ
మ ma మ ma

+ 98
- 100
phsource/compile_report View File

en-wi 30 156 en-wi 30 156
af 39 138 af 39 138
cy 29 134 cy 29 134
ga 29 133
de 41 141 de 41 141
eo 13 116 eo 13 116
jbo 2 116 jbo 2 116
et 40 135 et 40 135
fr 64 146 fr 64 146
fr-ca 11 146 fr-ca 11 146
hi 57 150
bn 5 150
ne 18 158
ur 6 150
ta 23 154
kn 17 150
ml 22 154
nl 35 130
hi 57 149
bn 5 149
ne 18 157
ur 6 149
pa 15 151
ta 23 153
kn 17 149
ml 21 152
hu 25 124 hu 25 124
lt 44 139 lt 44 139
lv 29 127 lv 29 127
nl 35 130
pl 22 122 pl 22 122
sk 28 137 sk 28 137
cs 7 137 cs 7 137
hy 23 119 hy 23 119
da 46 139 da 46 139
ka 20 115 ka 20 115
fa 9 112
rw 15 132 rw 15 132
pa 15 152
prs 8 113 prs 8 113
sl 10 137 sl 10 137
gd 6 109 gd 6 109
ak 8 111 ak 8 111
am 15 114 am 15 114
wo 18 120 wo 18 120
dv 14 150
te 16 150
si 24 156
dv 14 149
te 16 149
si 24 155
tn 27 121 tn 27 121
mt 32 129 mt 32 129
bo 10 154
bo 10 153
kk 20 118 kk 20 118
fa 9 112
ga 29 133
tt 23 120 tt 23 120
ko 15 116 ko 15 116
kl 18 119 kl 18 119
[b] fr [b] fr
b/b@ [b] base b/b@ [b] base
b/b@2 [b] base b/b@2 [b] base
[bh] hi
[b#] hi
b/ba [b] base b/ba [b] base
b/be [b] base b/be [b] base
b/bi [b] base b/bi [b] base
b/bu [b] base b/bu [b] base
b/xb [b] base b/xb [b] base
[b] fr [b] fr
[bh] hi
[b#] hi
b/xbr [b] fr b/xbr [b] fr
d/d [d] base d/d [d] base
[d[] base [d[] base
[d^] et [d^] et
[d] fr [d] fr
[d.] hi [d.] hi
[dh.] hi
[d.#] hi
[d] kn [d] kn
[d] hu [d] hu
[d] lt [d] lt
[d] et [d] et
[d] fr [d] fr
[z] fr [z] fr
[dh] hi
[d#] hi
[d] kn [d] kn
[d] hu [d] hu
[d] lt [d] lt
[d] sq [d] sq
[d] mt [d] mt
[dz] bo [dz] bo
[dzh] bo
d/xd3 [dh] hi
[dz#] bo
d/xd3 [d#] hi
d/xd_pzd [d^] et d/xd_pzd [d^] et
[d;] lt [d;] lt
[d;] pl [d;] pl
d/xdr [d] fr d/xdr [d] fr
[d.] hi [d.] hi
[dh.] hi
[d.#] hi
d/xdz [dz] consonants d/xdz [dz] consonants
[dz] bo [dz] bo
[dzh] bo
[dz#] bo
d/x_tap [t#] en d/x_tap [t#] en
[*] pt [*] pt
dzh/dzh [dZ] base dzh/dzh [dZ] base
[dZ;] ru [dZ;] ru
[dZ;] sq [dZ;] sq
dzh/xdz_pzd [J] base dzh/xdz_pzd [J] base
[Jh] hi
[J#] hi
[J] tr [J] tr
[J] ku [J] ku
envelope/i_risefall [11] zh envelope/i_risefall [11] zh
envelope/p_214 [5] vi envelope/p_214 [5] vi
[5] vi-hue [5] vi-hue
[214] zh [214] zh
envelope/p_512 [6] vi
envelope/p_512 [+] pa
[6] vi
[4] vi-hue [4] vi-hue
[6] vi-hue [6] vi-hue
[+] pa
envelope/p_fall [2] vi envelope/p_fall [2] vi
[7] vi [7] vi
[2] vi-hue [2] vi-hue
envelope/vi_6amp [6] vi envelope/vi_6amp [6] vi
[2] vi-hue [2] vi-hue
[6] vi-hue [6] vi-hue
g2/xg [gh] hi
g2/xg [g#] hi
g/g [g] base g/g [g] base
[g-] en [g-] en
[g] cy [g] cy
[l/] fr [l/] fr
l/l_@ [l/3] base l/l_@ [l/3] base
[l/] fr [l/] fr
l/l@ [¨\7] base
l/l@ [¨\0] base
[l#] base [l#] base
[l] fr [l] fr
[l/2] fr [l/2] fr
l/L2_uL [l/2] base l/L2_uL [l/2] base
l/l_3 [l/] de l/l_3 [l/] de
l/l_4 [ll] sq l/l_4 [ll] sq
l/la [¨\7] base
l/la [¨\0] base
[l#] base [l#] base
[l] fr [l] fr
[l/2] fr [l/2] fr
[K] tn [K] tn
l/l_a [l/3] base l/l_a [l/3] base
[l/] fr [l/] fr
l/le [¨\7] base
l/le [¨\0] base
[l#] base [l#] base
[l] fr [l] fr
[l/2] fr [l/2] fr
[&:] af [&:] af
l/l_front [L] sq l/l_front [L] sq
l/l_front_ [l/4] sq l/l_front_ [l/4] sq
l/li [¨\7] base
l/li [¨\0] base
[l#] base [l#] base
[l] fr [l] fr
[l/2] fr [l/2] fr
ll/_ll [L] base ll/_ll [L] base
l/l_long [l] base l/l_long [l] base
[l] fr [l] fr
l/lo [¨\7] base
l/lo [¨\0] base
[l#] base [l#] base
[l/2] fr [l/2] fr
[K] nso [K] nso
[l;] lt [l;] lt
[l] ru [l] ru
[l^] ru [l^] ru
l/lu [¨\7] base
l/lu [¨\0] base
[l#] base [l#] base
[l] fr [l] fr
[l/2] fr [l/2] fr
[k] el [k] el
[k] sq [k] sq
ustop/k_asp [kh] consonants ustop/k_asp [kh] consonants
[gh] hi
[g#] hi
[kh] zh [kh] zh
[k#] ka [k#] ka
[kh] tn [kh] tn
ustop/k_asp2 [kh2] ml
ustop/k_asp_a [k#] ka ustop/k_asp_a [k#] ka
ustop/k_asp_e [k#] ka ustop/k_asp_e [k#] ka
ustop/k_asp_u [k#] ka ustop/k_asp_u [k#] ka
[k] base2 [k] base2
[k] et [k] et
[k] fr [k] fr
[kh2] ml
[k] lv [k] lv
[k] el [k] el
[k] zhy [k] zhy
[p] fr [p] fr
[ph] tn [ph] tn
ustop/p_asp [ph] consonants ustop/p_asp [ph] consonants
[bh] hi
[b#] hi
[ph] zh [ph] zh
[ph] tn [ph] tn
ustop/percus02 [#X2] hi ustop/percus02 [#X2] hi
ustop/q_u [q] base ustop/q_u [q] base
ustop/t [t] base ustop/t [t] base
[t] en-us [t] en-us
[dh.] hi
[th.] hi
[d.#] hi
[t.#] hi
[t] zhy [t] zhy
[t] da [t] da
ustop/t_ [t] base ustop/t_ [t] base
[t] base2 [t] base2
[t] en-us [t] en-us
[t] et [t] et
[dh] hi
[th] hi
[d#] hi
[t#] hi
[t] hu [t] hu
[t] lt [t] lt
[t] pl [t] pl
[z] zhy [z] zhy
[tsh] zh [tsh] zh
[ts] tn [ts] tn
[tsh] bo
[dzh] bo
[ts#] bo
[dz#] bo
ustop/ts_ [ts] consonants ustop/ts_ [ts] consonants
[dz] consonants [dz] consonants
[ts] lv [ts] lv
[ts] tn [ts] tn
[tsh] bo
[dzh] bo
[ts#] bo
[dz#] bo
ustop/ts2 [ts] lv ustop/ts2 [ts] lv
[ts] hy [ts] hy
[ts] ka [ts] ka
ustop/tsh_sr [tS] sr ustop/tsh_sr [tS] sr
ustop/tsh_unasp [tS`] am ustop/tsh_unasp [tS`] am
ustop/ts_pzd [tS;] base ustop/ts_pzd [tS;] base
[Jh] hi
[J#] hi
[tS;] lt [tS;] lt
[tS;] ru [tS;] ru
[dZ;] sq [dZ;] sq
vdiph2/eo [eo] ro vdiph2/eo [eo] ro
vdiph2/e_u [e[u] ro vdiph2/e_u [e[u] ro
vdiph2/i@ [i@] en-n vdiph2/i@ [i@] en-n
[i@] hy
[i@] ga [i@] ga
[i@] hy
vdiph2/i@_2 [i@] en-wm vdiph2/i@_2 [i@] en-wm
vdiph2/ie [i@] en-wi vdiph2/ie [i@] en-wi
[ie] fi [ie] fi
vdiph/ae_2 [aI] en-n vdiph/ae_2 [aI] en-n
vdiph/ai [aI] base2 vdiph/ai [aI] base2
[aI] en-wi [aI] en-wi
[aI] ga
[aI] eo [aI] eo
[aI] kn [aI] kn
[aI] ml [aI] ml
[aI] hy [aI] hy
[aI] da [aI] da
[aI] te [aI] te
[aI] ga
[aI] kl [aI] kl
vdiph/ai_2 [aI] en vdiph/ai_2 [aI] en
[aI] cy [aI] cy
vdiph/au_3 [aU] en-rp vdiph/au_3 [aU] en-rp
vdiph/au_4 [aU] base2 vdiph/au_4 [aU] base2
[aU] cy [aU] cy
[aU] ga
[aU#] ga
[aU] eo [aU] eo
[aU] lt [aU] lt
[aU] sk [aU] sk
[aU] id [aU] id
[aU] ga
[aU#] ga
vdiph/ee-e [E:] hi vdiph/ee-e [E:] hi
vdiph/eei [EI] base2 vdiph/eei [EI] base2
[eI] en [eI] en
[EI] de [EI] de
[eI] ne
[EI] nl [EI] nl
[eI] ne
[EI] vi [EI] vi
[eI] hy [eI] hy
[eI] prs [eI] prs
[ei] lt [ei] lt
[ei] lv [ei] lv
[eI] id [eI] id
[ei] mt
[eI] fa [eI] fa
[ei] mt
vdiph/eei_3 [eI] lt vdiph/eei_3 [eI] lt
[eI] sk [eI] sk
[eI] ku [eI] ku
vdiph/eu [eU] base2 vdiph/eu [eU] base2
[eU] cy [eU] cy
[eU] eo [eU] eo
[eU] nl
[eU] ne [eU] ne
[eU] lt [eU] lt
[eU] nl
[eU] sk [eU] sk
[eU] pt [eU] pt
[eU] vi [eU] vi
vdiph/@u [u:] en-wm vdiph/@u [u:] en-wm
[@:U] vi [@:U] vi
vdiph/@u_2 [oU] en-rp vdiph/@u_2 [oU] en-rp
vdiph/@u_3 [@U] ro
vdiph/@u_3 [@U] ga
[@U] ro
[@U] vi [@U] vi
[@U] ga
vdiph/@u_en [oU] en vdiph/@u_en [oU] en
[@U] id [@U] id
vdiph/ui [uI] base2 vdiph/ui [uI] base2
vnasal/o_n2 [o~] af vnasal/o_n2 [o~] af
vnasal/o_n4 [O~] fr vnasal/o_n4 [O~] fr
vnasal/oo_n2 [O~] en vnasal/oo_n2 [O~] en
[O~] hi
[O~] nl [O~] nl
[O~] hi
[o] zh [o] zh
vnasal/oo_n3 [O~] pl vnasal/oo_n3 [O~] pl
vnasal/&u_n [O#] vi vnasal/&u_n [O#] vi
[z;] ro [z;] ro
[z] sq [z] sq
[dz] bo [dz] bo
[dzh] bo
[dz#] bo
voc/zh [Z] base voc/zh [Z] base
[z.] base [z.] base
[R^] sk [R^] sk
[@5] en [@5] en
[@] en-rp [@] en-rp
[V] cy [V] cy
[@/] ga
[@] kn [@] kn
[@] hy [@] hy
[@] ka [@] ka
[@] wo [@] wo
[@:] wo [@:] wo
[@] te [@] te
[@/] ga
vowel/@- [@-] base vowel/@- [@-] base
[r*] hr [r*] hr
[@-] da [@-] da
[&] sv [&] sv
[&#] da [&#] da
[?&#] da [?&#] da
[&] az
[a] fa [a] fa
[&] az
vowel/0 [0] en vowel/0 [0] en
[O] hi [O] hi
[O] pt [O] pt
[aa] en-wm [aa] en-wm
[a] cy [a] cy
[a] de [a] de
[a:] nl
[a] ta [a] ta
[a:] hu [a:] hu
[a:] nl
[a] pl [a] pl
[a] sk [a] sk
[a:] sk [a:] sk
[a] da [a] da
[?a] da [?a] da
[a] rw [a] rw
vowel/a#_2 [a] kn
[a] ml
[A] nl
vowel/a#_2 [A] nl
[a:] nl [a:] nl
[a] kn
[a] ml
[a#] pl [a#] pl
[&] hr [&] hr
[a] sv [a] sv
[a#] en-n [a#] en-n
[a#] en-us [a#] en-us
[a#] en-wm [a#] en-wm
[a#] ga
[3] de [3] de
[a] hi [a] hi
[a] ml [a] ml
[a] sq [a] sq
[a/] sq [a/] sq
[3] da [3] da
[a#] ga
vowel/a_4 [a] es
vowel/a_4 [a] ga
[a] es
[a] el [a] el
[a] ga
vowel/a#_4 [a:] nl vowel/a#_4 [a:] nl
[a] bg [a] bg
[a/] it [a/] it
vowel/aa_2 [A:] en vowel/aa_2 [A:] en
[A@] en [A@] en
[A:] cy [A:] cy
[A:] ga
[A] zh [A] zh
[A@] tn [A@] tn
[A:] ga
vowel/aa_3 [A:] af vowel/aa_3 [A:] af
[A] sq [A] sq
[A] prs [A] prs
[A:] de [A:] de
vowel/aa_8 [0] en-us vowel/aa_8 [0] en-us
[A:] en-us [A:] en-us
[0] ga
[A1] et [A1] et
[A] nl [A] nl
[a:] is [a:] is
[0] ga
[A] tt [A] tt
[a] ko [a] ko
vowel/aa_9 [a] fi vowel/aa_9 [a] fi
[V] ne [V] ne
[@/] ne [@/] ne
[@] ur [@] ur
[@] pa
[@] bg [@] bg
[@] zh [@] zh
[@] pa
vowel/e [e] base vowel/e [e] base
[e] base2 [e] base2
[e:] en [e:] en
[eI] en-wi [eI] en-wi
[e:] af [e:] af
[e:] cy [e:] cy
[e:] ga
[e] ne [e] ne
[e] ta [e] ta
[e:] ta [e:] ta
[e] dv [e] dv
[e:] dv [e:] dv
[e:] te [e:] te
[e:] ga
[E] kl [E] kl
vowel/e# [I] en-sc vowel/e# [I] en-sc
[e] et [e] et
[E] kl [E] kl
vowel/e_2 [eI] en-sc
vowel/e_2 [i] en-n
[eI] en-sc
[e:] de [e:] de
[e] hi [e] hi
[e:] hi [e:] hi
[e] pa
[e] it [e] it
[e:] sv [e:] sv
[e:] no [e:] no
[e] pa
[e] sl [e] sl
vowel/e_3 [i] en-n
[e:] hu
vowel/e_3 [e:] hu
[e] ku [e] ku
vowel/e_5 [i] en-sc vowel/e_5 [i] en-sc
vowel/e_6 [e] ht vowel/e_6 [e] ht
[e] zhy [e] zhy
vowel/ee_2 [E] cy vowel/ee_2 [E] cy
[E2] nl [E2] nl
[E] pa
[E] zh [E] zh
[E#] ku [E#] ku
[&] da [&] da
[?&] da [?&] da
[E] pa
[&] kk [&] kk
vowel/ee#_2 [E1] et vowel/ee#_2 [E1] et
[E-] sv [E-] sv
[&] si [&] si
[&:] si [&:] si
vowel/e_mid [E] en-rp vowel/e_mid [E] en-rp
[E] ga
[E] fr [E] fr
[E-] fr [E-] fr
[E~] fr [E~] fr
[E] sl [E] sl
[E] ht [E] ht
[e] si [e] si
[E] ga
vowel/e_mid2 [E] af vowel/e_mid2 [E] af
[E] de [E] de
[E2] de [E2] de
[e] sq [e] sq
[E] da [E] da
[?E] da [?E] da
[e] fa
[e] nso [e] nso
[e] az [e] az
[e] am [e] am
[e:] si [e:] si
[e] mt [e] mt
[e] bo [e] bo
[e] fa
vowel/@_fnt [@] en-wi vowel/@_fnt [@] en-wi
[@2] en-wi [@2] en-wi
[@2] hr [@2] hr
[i] en-wm [i] en-wm
[i] en-wi [i] en-wi
[i:] cy [i:] cy
[i:] ga
[i] eo [i] eo
[i] ne [i] ne
[i:] ta [i:] ta
[i] sw [i] sw
[i] hy [i] hy
[i] ka [i] ka
[i] fa
[i] rw [i] rw
[i#] rw [i#] rw
[i] prs [i] prs
[i:] te [i:] te
[i:] si [i:] si
[i] bo [i] bo
[i] fa
[i:] ga
[i] tt [i] tt
[i] kl [i] kl
vowel/i# [y:] cy vowel/i# [y:] cy
[I] de [I] de
[I:] de [I:] de
[I] fr-ca [I] fr-ca
[I] ml
[I] nl [I] nl
[I] ml
[I] is [I] is
[I:] is [I:] is
[i] zhy [i] zhy
[I] kk [I] kk
[e] tt [e] tt
vowel/ii_2 [I] en vowel/ii_2 [I] en
[I] ga
[i] zh [i] zh
[I] da [I] da
[I] mt [I] mt
[I] ga
vowel/ii#_2 [y] pl vowel/ii#_2 [y] pl
[y] am [y] am
vowel/ii_3 [I] cy vowel/ii_3 [I] cy
[I] fi [I] fi
[I1] et [I1] et
[I] hi [I] hi
[I] pa
[i] sk [i] sk
[I] hr [I] hr
[I] sv [I] sv
[I] no [I] no
[I] pa
[i] sl [i] sl
vowel/ii#_3 [I2] en-us vowel/ii#_3 [I2] en-us
vowel/ii_4 [I2] en vowel/ii_4 [I2] en
[I] sq [I] sq
[i] wo [i] wo
vowel/ii_7 [i] en vowel/ii_7 [i] en
[i] sq
[i] ga [i] ga
[i] sq
vowel/ii_8 [i] kk vowel/ii_8 [i] kk
vowel/ii_final [i] en-us vowel/ii_final [i] en-us
[i] en-rp [i] en-rp
[@/] ne [@/] ne
[@] ur [@] ur
[@2] ur [@2] ur
[@] pa
[V] pa
[@] ml [@] ml
[@] ro [@] ro
[a#] no [a#] no
[@] id [@] id
[@] pa
[V] pa
[@] si [@] si
vowel/@_low2 [@2] en-us vowel/@_low2 [@2] en-us
vowel/o [o] base2 vowel/o [o] base2
[o:] en [o:] en
[oU] en-n [oU] en-n
[oU] en-wi [oU] en-wi
[o:] ga
[o:] de [o:] de
[o] eo [o] eo
[o:] et [o:] et
[o] fr [o] fr
[o] hi [o] hi
[o:] pa
[o] ta [o] ta
[o:] ta [o:] ta
[o] kn [o] kn
[o] hy [o] hy
[o] rw [o] rw
[o#] rw [o#] rw
[o:] pa
[o] ak [o] ak
[o] wo [o] wo
[o:] wo [o:] wo
[o] te [o] te
[o:] te [o:] te
[o] bo [o] bo
[o:] ga
[o] kl [o] kl
vowel/o_2 [o:] cy vowel/o_2 [o:] cy
[o:] hi [o:] hi
[o] hu [o] hu
[o] bg [o] bg
[o] tr [o] tr
[o] fa
[o] az [o] az
[o] dv [o] dv
[o:] dv [o:] dv
[o] fa
[o] tt [o] tt
vowel/o_mid2 [O] fr vowel/o_mid2 [O] fr
[O] ht [O] ht
[3:] en-wi [3:] en-wi
[O1] et [O1] et
[O:] hi [O:] hi
[O] pa
[O] it [O] it
[O] an [O] an
[O] pa
vowel/oo_5 [O] pl vowel/oo_5 [O] pl
[O] is [O] is
[O] sq [O] sq
vowel/u [u] base vowel/u [u] base
[u:] en-wi [u:] en-wi
[u:] cy [u:] cy
[u1] ga
[u:] de [u:] de
[u] eo [u] eo
[u] ml [u] ml
[u] ak [u] ak
[u:] wo [u:] wo
[u] bo [u] bo
[u1] ga
[u] tt [u] tt
vowel/u# [u:] en-sc vowel/u# [u:] en-sc
[Y] tr [Y] tr
[@] az [@] az
vowel/u_bck [u] base2 vowel/u_bck [u] base2
[U] cy [U] cy
[u:] ga
[u] fi [u] fi
[u] fr-ca [u] fr-ca
[u] nl
[u:] hi [u:] hi
[u] ne [u] ne
[u] pa
[u:] hu [u:] hu
[u:] lt [u:] lt
[u] nl
[u] pl [u] pl
[u:] sk [u:] sk
[u] hr [u] hr
[u] ka [u] ka
[u] rw [u] rw
[u#] rw [u#] rw
[u] pa
[u] mt [u] mt
[u:] ga
[u] ko [u] ko
vowel/u_bck2 [u] et vowel/u_bck2 [u] et
[u] fr [u] fr
[u:] fr [u:] fr
[u:] la [u:] la
[u] es [u] es
[u] ht
[u] fa [u] fa
[u] ht
[u] kl [u] kl
vowel/u_bck3 [u:] et vowel/u_bck3 [u:] et
[u] kk [u] kk
vowel/uu [U] en vowel/uu [U] en
[U] en-n [U] en-n
[U] en-wm [U] en-wm
[U] tn
[U] ga [U] ga
[U] tn
vowel/uu# [U] ku vowel/uu# [U] ku
vowel/uu_2 [U] base2 vowel/uu_2 [U] base2
[U] de [U] de
vowel/uu_bck [U] en-wi vowel/uu_bck [U] en-wi
[U] fr-ca [U] fr-ca
[U] hi [U] hi
[U] pa
[u] kn [u] kn
[u:] kn [u:] kn
[u] hu [u] hu
[U] pt [U] pt
[U] no [U] no
[u] zhy [u] zhy
[U] pa
vowel/V [3] en-sc vowel/V [3] en-sc
[@] bg [@] bg
[@] vi [@] vi
[V] ku [V] ku
vowel/V_3 [V] en-rp vowel/V_3 [V] en-rp
[V] hi [V] hi
[V] pa
[V] ta [V] ta
[a] bg [a] bg
[V] pa
vowel/V_4 [V] en-sc vowel/V_4 [V] en-sc
[O] ga
[V] da [V] da
[?V] da [?V] da
[O] ga
vowel/V_6 [V] en-us vowel/V_6 [V] en-us
[a#] lv [a#] lv
vowel/y [y] base2 vowel/y [y] base2
[y:] et [y:] et
[y] fr [y] fr
[y-] fr [y-] fr
[y:] hu
[y] nl [y] nl
[y:] hu
[y] la [y] la
[yu] zhy [yu] zhy
[y] sq [y] sq
[Y] et [Y] et
[Y:] et [Y:] et
[Y] fr [Y] fr
[Y:] hu
[8] nl [8] nl
[Y:] hu
[Y] ro [Y] ro
[oe] zhy [oe] zhy
[W] tr [W] tr

+ 1
- 2
phsource/ph_english_n View File

phoneme i // optional variant of [I] for end of words phoneme i // optional variant of [I] for end of words
vowel starttype #i endtype #i vowel starttype #i endtype #i
length 150 length 150
IfNextVowelAppend(;)
FMT(vowel/e_3)
FMT(vowel/e_2)
endphoneme endphoneme





+ 1
- 0
phsource/ph_english_us View File

vowel starttype #i endtype #i vowel starttype #i endtype #i
unstressed unstressed
length 160 length 160
ipa ᵻ
// FMT(vowel/@_fnt) // FMT(vowel/@_fnt)
FMT(vowel/ii#) FMT(vowel/ii#)
endphoneme endphoneme

+ 19
- 19
phsource/ph_hindi View File

endphoneme endphoneme




phoneme ph
phoneme p#
import_phoneme consonants/ph import_phoneme consonants/ph
endphoneme endphoneme


endphoneme endphoneme




phoneme bh
phoneme b#
vcd blb stop vcd blb stop
lengthmod 5 lengthmod 5
voicingswitch ph
voicingswitch p#
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 Vowelin f1=0 f2=1000 -50 -100 f3=-200 80
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30


endphoneme endphoneme




phoneme th // dental variant of /t/
phoneme t# // dental variant of /t/
vls dnt stop vls dnt stop
lengthmod 2 lengthmod 2
voicingswitch d voicingswitch d
endphoneme endphoneme




phoneme dh
phoneme d#
vcd dnt stop vcd dnt stop
lengthmod 5 lengthmod 5
voicingswitch th
voicingswitch t#
Vowelin f1=0 f2=1500 -300 300 f3=-100 80 Vowelin f1=0 f2=1500 -300 300 f3=-100 80
Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20


WAV(ustop/t_short) WAV(ustop/t_short)
endphoneme endphoneme


phoneme th.
phoneme t.#
vls rfx stop vls rfx stop
lengthmod 2 lengthmod 2
ipa ʈh
voicingswitch dh.
ipa ʈU+02B0
voicingswitch d.#
Vowelin f1=0 f2=1800 -300 300 f3=-400 80 Vowelin f1=0 f2=1800 -300 300 f3=-400 80
Vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2 Vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2
// WAV(ustop/th_rfx) // WAV(ustop/th_rfx)
endphoneme endphoneme




phoneme dh.
phoneme d.#
vcd rfx stop vcd rfx stop
lengthmod 5 lengthmod 5
ipa ɖh
voicingswitch th.
ipa ɖU+02B0
voicingswitch t.#
Vowelin f1=1 f2=1800 -300 300 f3=-400 80 Vowelin f1=1 f2=1800 -300 300 f3=-400 80
Vowelout f1=1 f2=1800 -300 300 f3=-400 80 colr=2 Vowelout f1=1 f2=1800 -300 300 f3=-400 80 colr=2


endphoneme endphoneme




phoneme ch
phoneme c#
CALL base/tS; CALL base/tS;
ipa ch ipa ch
endphoneme endphoneme
endphoneme endphoneme




phoneme Jh
phoneme J#
vcd pal afr sibilant vcd pal afr sibilant
lengthmod 5 lengthmod 5
voicingswitch ch
voicingswitch c#
Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70
Vowelout f1=0 f2=2700 400 600 f3=300 80 colr=1 Vowelout f1=0 f2=2700 400 600 f3=300 80 colr=1


voicingswitch g voicingswitch g
endphoneme endphoneme


phoneme kh
phoneme k#
import_phoneme consonants/kh import_phoneme consonants/kh
voicingswitch gh
voicingswitch g#
endphoneme endphoneme




endphoneme endphoneme




phoneme gh
phoneme g#
vcd dnt stop vcd dnt stop
lengthmod 5 lengthmod 5
voicingswitch kh
voicingswitch k#
Vowelin f1=1 f2=2300 200 300 f3=-150 80 rms=20 Vowelin f1=1 f2=2300 200 300 f3=-150 80 rms=20
Vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20 Vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20



+ 1
- 1
phsource/ph_malayalam View File

import_phoneme base/R2 import_phoneme base/R2
endphoneme endphoneme


phoneme d# // 'rr' sounds like English 'd'
phoneme d2 // 'rr' sounds like English 'd'
import_phoneme base/d import_phoneme base/d
endphoneme endphoneme



+ 14
- 12
phsource/phonemes View File

phonemetable cy base phonemetable cy base
include ph_welsh include ph_welsh


phonemetable ga base
include ph_irish

phonemetable de base phonemetable de base
include ph_german include ph_german


phonemetable fr-ca fr phonemetable fr-ca fr
include ph_french_ca include ph_french_ca


phonemetable nl base
include ph_dutch



phonemetable hi base phonemetable hi base
include ph_hindi include ph_hindi
phonemetable ur hi phonemetable ur hi
include ph_urdu include ph_urdu


phonemetable pa hi
include ph_punjabi

phonemetable ta hi phonemetable ta hi
include ph_tamil include ph_tamil


include ph_malayalam include ph_malayalam





phonemetable hu base phonemetable hu base
include ph_hungarian include ph_hungarian


phonemetable lv base phonemetable lv base
include ph_latvian include ph_latvian


phonemetable nl base
include ph_dutch

phonemetable pl base phonemetable pl base
include ph_polish include ph_polish


phonemetable ka base phonemetable ka base
include ph_georgian include ph_georgian


phonemetable fa base
include ph_farsi



//************************************************************************************** //**************************************************************************************
// The following lines are experimental, for future additions. // The following lines are experimental, for future additions.
//phonemetable mn base //phonemetable mn base
//include ph_mongolian //include ph_mongolian


phonemetable pa hi
include ph_punjabi

phonemetable prs base phonemetable prs base
include ph_dari include ph_dari


phonemetable kk base phonemetable kk base
include ph_kazakh include ph_kazakh


phonemetable fa base
include ph_farsi

phonemetable ga base
include ph_irish

phonemetable tt base phonemetable tt base
include ph_tatar include ph_tatar


phonemetable kl base phonemetable kl base
include ph_greenlandic include ph_greenlandic




+ 96
- 106
src/compiledict.cpp View File

{"p_alt5", 0x25}, {"p_alt5", 0x25},
{"p_alt6", 0x26}, {"p_alt6", 0x26},
{"p_alt", 0x21}, {"p_alt", 0x21},
{NULL, -1} };
{NULL, -1}
};


MNEM_TAB mnem_flags[] = { MNEM_TAB mnem_flags[] = {
// these in the first group put a value in bits0-3 of dictionary_flags // these in the first group put a value in bits0-3 of dictionary_flags
//========================================================== //==========================================================
/* Lookup a mnemonic string in a table, return its name */ /* Lookup a mnemonic string in a table, return its name */
{ {
while(table->mnem != NULL)
{
if(table->value==value)
return(table->mnem);
table++;
}
return(""); /* not found */
while(table->mnem != NULL)
{
if(table->value==value)
return(table->mnem);
table++;
}
return(""); /* not found */
} /* end of LookupMnemValue */ } /* end of LookupMnemValue */




int len; int len;
int total = 0; int total = 0;


buf[0] = 0;
buf[0] = 0;
if((stress = flags[0] & 0xf) != 0) if((stress = flags[0] & 0xf) != 0)
{ {
sprintf(buf, "%s", LookupMnemName(mnem_flags, stress + 0x40));
total = strlen(buf);
buf += total;
sprintf(buf, "%s", LookupMnemName(mnem_flags, stress + 0x40));
total = strlen(buf);
buf += total;
} }


for(ix=8; ix<64; ix++)
{
if(((ix < 30) && (flags[0] & (1 << ix))) || ((ix >= 0x20) && (flags[1] & (1 << (ix-0x20)))))
{
name = LookupMnemName(mnem_flags, ix);
len = strlen(name) + 1;
total += len;
if(total >= buf_len)
continue;
sprintf(buf, " %s", name);
buf += len;
}
}
for(ix=8; ix<64; ix++)
{
if(((ix < 30) && (flags[0] & (1 << ix))) || ((ix >= 0x20) && (flags[1] & (1 << (ix-0x20)))))
{
name = LookupMnemName(mnem_flags, ix);
len = strlen(name) + 1;
total += len;
if(total >= buf_len)
continue;
sprintf(buf, " %s", name);
buf += len;
}
}
} }






char *DecodeRule(const char *group_chars, int group_length, char *rule, int control) char *DecodeRule(const char *group_chars, int group_length, char *rule, int control)
{//================================================================================= {//=================================================================================
/* Convert compiled match template to ascii */
/* Convert compiled match template to ascii */


unsigned char rb;
unsigned char rb;
unsigned char c; unsigned char c;
char *p; char *p;
int ix;
int ix;
int match_type; int match_type;
int finished=0; int finished=0;
int value; int value;
int condition_num=0; int condition_num=0;
int at_start = 0; int at_start = 0;
const char *name; const char *name;
char buf[60];
char buf_pre[60];
char buf[60];
char buf_pre[60];
char suffix[20]; char suffix[20];
static char output[60]; static char output[60];


static char symbols[] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
'&','%','+','#','S','D','Z','A','L','!',' ','@','?','J','N','K','V','?','T','X','?','W'};
static char symbols[] =
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
'&','%','+','#','S','D','Z','A','L','!',' ','@','?','J','N','K','V','?','T','X','?','W'
};


static char symbols_lg[] = {'A','B','C','H','F','G','Y'}; static char symbols_lg[] = {'A','B','C','H','F','G','Y'};


match_type = 0; match_type = 0;
buf_pre[0] = 0;
buf_pre[0] = 0;


for(ix=0; ix<group_length; ix++) for(ix=0; ix<group_length; ix++)
{ {
buf[ix] = 0; buf[ix] = 0;


p = &buf[strlen(buf)]; p = &buf[strlen(buf)];
while(!finished)
{
while(!finished)
{
rb = *rule++; rb = *rule++;


if(rb <= RULE_LINENUM) if(rb <= RULE_LINENUM)
} }
c = ' '; c = ' ';
} }
else
if(rb == RULE_ENDING)
else if(rb == RULE_ENDING)
{ {
static const char *flag_chars = "eipvdfq tba "; static const char *flag_chars = "eipvdfq tba ";
flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f); flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f);
suffix_char = 'P'; suffix_char = 'P';
sprintf(suffix,"%c%d",suffix_char,rule[2] & 0x7f); sprintf(suffix,"%c%d",suffix_char,rule[2] & 0x7f);
rule += 3; rule += 3;
for(ix=0;ix<9;ix++)
for(ix=0; ix<9; ix++)
{ {
if(flags & 1) if(flags & 1)
sprintf(&suffix[strlen(suffix)],"%c",flag_chars[ix]); sprintf(&suffix[strlen(suffix)],"%c",flag_chars[ix]);
p += strlen(suffix); p += strlen(suffix);
c = ' '; c = ' ';
} }
else
if(rb == RULE_LETTERGP)
else if(rb == RULE_LETTERGP)
{ {
c = symbols_lg[*rule++ - 'A']; c = symbols_lg[*rule++ - 'A'];
} }
else
if(rb == RULE_LETTERGP2)
else if(rb == RULE_LETTERGP2)
{ {
value = *rule++ - 'A'; value = *rule++ - 'A';
p[0] = 'L'; p[0] = 'L';
} }
p+=2; p+=2;
} }
else
if(rb <= RULE_LAST_RULE)
else if(rb <= RULE_LAST_RULE)
c = symbols[rb]; c = symbols[rb];
else
if(rb == RULE_SPACE)
else if(rb == RULE_SPACE)
c = '_'; c = '_';
else else
c = rb; c = rb;
while(ix < 8) while(ix < 8)
output[ix++]=' '; output[ix++]=' ';
output[ix]=0; output[ix]=0;
return(output);
return(output);
} /* end of DecodeRule */ } /* end of DecodeRule */




unsigned char flag_codes[100]; unsigned char flag_codes[100];
char encoded_ph[200]; char encoded_ph[200];
unsigned char bad_phoneme[4]; unsigned char bad_phoneme[4];
static char nullstring[] = {0};
static char nullstring[] = {0};


text_not_phonemes = 0; text_not_phonemes = 0;
phonetic = word = nullstring; phonetic = word = nullstring;
{ {
text_mode = 1; text_mode = 1;
} }
else
if(flagnum == 201)
else if(flagnum == 201)
{ {
text_mode = 0; text_mode = 0;
} }
else
if(flagnum == BITNUM_FLAG_TEXTMODE)
else if(flagnum == BITNUM_FLAG_TEXTMODE)
{ {
text_not_phonemes = 1; text_not_phonemes = 1;
} }
word = p+1; word = p+1;
step = 1; step = 1;
} }
else
if(!isspace2(c))
else if(!isspace2(c))
{ {
word = p; word = p;
step = 1; step = 1;
step = 3; step = 3;
} }
} }
else
if(c == ')')
else if(c == ')')
{ {
if(multiple_words) if(multiple_words)
{ {
multiple_words = 0; multiple_words = 0;
step = 3; step = 3;
} }
else
if(word[0] != '_')
else if(word[0] != '_')
{ {
fprintf(f_log, "%5d: Missing '('\n", linenum); fprintf(f_log, "%5d: Missing '('\n", linenum);
error_count++; error_count++;
{ {
multiple_words++; multiple_words++;
} }
else
if(c == ')')
else if(c == ')')
{ {
p[0] = ' '; // terminate extra string p[0] = ' '; // terminate extra string
multiple_string_end = p+1; multiple_string_end = p+1;
// This is a special word, used by eSpeak. Translate this into phonemes now // This is a special word, used by eSpeak. Translate this into phonemes now
strcat(phonetic, " "); // need a space to indicate word-boundary strcat(phonetic, " "); // need a space to indicate word-boundary


// PROBLEM vowel reductions are not applied to the translated phonemes
// condition rules are not applied
// PROBLEM vowel reductions are not applied to the translated phonemes
// condition rules are not applied
TranslateWord(translator,phonetic,0,NULL,NULL); TranslateWord(translator,phonetic,0,NULL,NULL);
text_not_phonemes = 0; text_not_phonemes = 0;
strncpy0(encoded_ph, word_phonemes, N_WORD_BYTES-4); strncpy0(encoded_ph, word_phonemes, N_WORD_BYTES-4);
error_need_dictionary++; error_need_dictionary++;
fprintf(f_log,"%5d: Need to compile dictionary again\n",linenum); fprintf(f_log,"%5d: Need to compile dictionary again\n",linenum);
} }
{
{
//char decoded_phonemes[128]; //char decoded_phonemes[128];
//DecodePhonemes(word_phonemes,decoded_phonemes); //DecodePhonemes(word_phonemes,decoded_phonemes);
//printf("Translator %x %s [%s] [%s]\n",translator->translator_name,word,phonetic,decoded_phonemes); //printf("Translator %x %s [%s] [%s]\n",translator->translator_name,word,phonetic,decoded_phonemes);
}
}
} }
else else
{ {
ix = utf8_out(wc, word); ix = utf8_out(wc, word);
word[ix] = 0; word[ix] = 0;
} }
else
if(word[0] != '_')
else if(word[0] != '_')
{ {
// convert to lower case, and note if the word is all-capitals // convert to lower case, and note if the word is all-capitals
int c2; int c2;
fprintf(f_log,"%5d: Expected 2 digits after 'L'\n",linenum); fprintf(f_log,"%5d: Expected 2 digits after 'L'\n",linenum);
error_count++; error_count++;
} }
else
if((c <= 0) || (c >= N_LETTER_GROUPS) || (letterGroupsDefined[(int)c] == 0))
else if((c <= 0) || (c >= N_LETTER_GROUPS) || (letterGroupsDefined[(int)c] == 0))
{ {
fprintf(f_log,"%5d: Letter group L%.2d not defined\n",linenum,c); fprintf(f_log,"%5d: Letter group L%.2d not defined\n",linenum,c);
error_count++; error_count++;
case 'a': case 'a':
sxflags |= SUFX_A; sxflags |= SUFX_A;
break; break;
case 'm':
sxflags |= SUFX_M;
break;
case 'm':
sxflags |= SUFX_M;
break;
default: default:
if(isdigit(c)) if(isdigit(c))
value = (value*10) + (c - '0'); value = (value*10) + (c - '0');
char *pa, *pb; char *pa, *pb;
int ix; int ix;


if((ix = strcmp(pa = *a,pb = *b)) != 0)
return(ix);
if((ix = strcmp(pa = *a,pb = *b)) != 0)
return(ix);
pa += (strlen(pa)+1); pa += (strlen(pa)+1);
pb += (strlen(pb)+1); pb += (strlen(pb)+1);
return(strcmp(pa,pb));
return(strcmp(pa,pb));
} /* end of string_sorter */ } /* end of string_sorter */




if(rule_pre[0] != 0) if(rule_pre[0] != 0)
{ {
p = buf; p = buf;
for(ix=strlen(rule_pre)-1;ix>=0;ix--)
for(ix=strlen(rule_pre)-1; ix>=0; ix--)
*p++ = rule_pre[ix]; *p++ = rule_pre[ix];
sprintf(p,") "); sprintf(p,") ");
spaces -= strlen(buf); spaces -= strlen(buf);
for(ix=0; ix<spaces; ix++) for(ix=0; ix<spaces; ix++)
fputc(' ',f_out);
fputc(' ',f_out);
fprintf(f_out,"%s",buf); fprintf(f_out,"%s",buf);
spaces = 0; spaces = 0;
} }
int length; int length;
int max_length = 0; int max_length = 0;


#define N_LETTERGP_ITEMS 200
#define N_LETTERGP_ITEMS 200
char *items[N_LETTERGP_ITEMS]; char *items[N_LETTERGP_ITEMS];
char item_length[N_LETTERGP_ITEMS]; char item_length[N_LETTERGP_ITEMS];


break; break;


case 2: // .replace case 2: // .replace
{
int replace1;
int replace2;
char *p;

p = buf;
replace1 = 0;
replace2 = 0;
while(isspace2(*p)) p++;
ix = 0;
while((unsigned char)(*p) > 0x20) // not space or zero-byte
{ {
int replace1;
int replace2;
char *p;

p = buf;
replace1 = 0;
replace2 = 0;
while(isspace2(*p)) p++;
ix = 0;
while((unsigned char)(*p) > 0x20) // not space or zero-byte
{
p += utf8_in(&c,p);
replace1 += (c << ix);
ix += 16;
}
while(isspace2(*p)) p++;
ix = 0;
while((unsigned char)(*p) > 0x20)
{
p += utf8_in(&c,p);
replace2 += (c << ix);
ix += 16;
}
if(replace1 != 0)
{
Write4Bytes(f_out,replace1); // write as little-endian
Write4Bytes(f_out,replace2); // if big-endian, reverse the bytes in LoadDictionary()
}
p += utf8_in(&c,p);
replace1 += (c << ix);
ix += 16;
} }
break;
while(isspace2(*p)) p++;
ix = 0;
while((unsigned char)(*p) > 0x20)
{
p += utf8_in(&c,p);
replace2 += (c << ix);
ix += 16;
}
if(replace1 != 0)
{
Write4Bytes(f_out,replace1); // write as little-endian
Write4Bytes(f_out,replace2); // if big-endian, reverse the bytes in LoadDictionary()
}
}
break;
} }
} }
fclose(f_temp); fclose(f_temp);

+ 272
- 301
src/dictionary.cpp
File diff suppressed because it is too large
View File


+ 410
- 412
src/numbers.cpp
File diff suppressed because it is too large
View File


+ 13
- 13
src/phonemelist.cpp View File

/*************************************************************************** /***************************************************************************
* Copyright (C) 2005 to 2011 by Jonathan Duddington *
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
* email: [email protected] * * email: [email protected] *
* * * *
* This program is free software; you can redistribute it and/or modify * * This program is free software; you can redistribute it and/or modify *
PHONEME_LIST2 *plist2; PHONEME_LIST2 *plist2;
WORD_PH_DATA worddata; WORD_PH_DATA worddata;


memset(&worddata, 0, sizeof(worddata));
memset(&worddata, 0, sizeof(worddata));
plist2 = ph_list2; plist2 = ph_list2;
phlist = phoneme_list; phlist = phoneme_list;
end_sourceix = plist2[n_ph_list2-1].sourceix; end_sourceix = plist2[n_ph_list2-1].sourceix;
max_stress = 0; max_stress = 0;
for(j = n_ph_list2-3; j>=0; j--) for(j = n_ph_list2-3; j>=0; j--)
{ {
// start with the last phoneme (before the terminating pauses) and move forwards
// start with the last phoneme (before the terminating pauses) and move backwards
if((plist2[j].stresslevel & 0x7f) > max_stress) if((plist2[j].stresslevel & 0x7f) > max_stress)
max_stress = plist2[j].stresslevel & 0x7f; max_stress = plist2[j].stresslevel & 0x7f;
if(plist2[j].sourceix != 0) if(plist2[j].sourceix != 0)
{ {
voicing = 1; voicing = 1;
} }
else
if((voicing==2) && (ph->end_type != 0)) // use end_type field for voicing_switch for consonants
else if((voicing==2) && (ph->end_type != 0)) // use end_type field for voicing_switch for consonants
{ {
plist2[j].phcode = ph->end_type; // change to voiced equivalent plist2[j].phcode = ph->end_type; // change to voiced equivalent
} }
} }
else
if((type==phVSTOP) || type==(phVFRICATIVE))
else if((type==phVSTOP) || type==(phVFRICATIVE))
{ {
if((voicing==0) && (regression & 0xf)) if((voicing==0) && (regression & 0xf))
{ {
voicing = 2; voicing = 2;
} }
else
if((voicing==1) && (ph->end_type != 0))
else if((voicing==1) && (ph->end_type != 0))
{ {
plist2[j].phcode = ph->end_type; // change to unvoiced equivalent plist2[j].phcode = ph->end_type; // change to unvoiced equivalent
} }


if(plist3->phcode == phonSWITCH) if(plist3->phcode == phonSWITCH)
{ {
if((plist3[1].phcode == phonSWITCH) || ((plist3[1].type == phPAUSE) && (plist3[2].phcode == phonSWITCH)))
continue; // next phoneme is also a phonSWITCH, so ignore

// change phoneme table // change phoneme table
SelectPhonemeTable(plist3->tone_ph); SelectPhonemeTable(plist3->tone_ph);
switched_language ^= SFLAG_SWITCHED_LANG; switched_language ^= SFLAG_SWITCHED_LANG;
phlist[ix].newword = 2; // end of clause phlist[ix].newword = 2; // end of clause


phlist[ix].phcode = phonPAUSE; phlist[ix].phcode = phonPAUSE;
phlist[ix].type = phPAUSE; // terminate with 2 Pause phonemes
phlist[ix].type = phPAUSE; // terminate with 2 Pause phonemes
phlist[ix].length = post_pause; // length of the pause, depends on the punctuation phlist[ix].length = post_pause; // length of the pause, depends on the punctuation
phlist[ix].sourceix = end_sourceix; phlist[ix].sourceix = end_sourceix;
phlist[ix].synthflags = 0; phlist[ix].synthflags = 0;
phlist[ix++].ph = phoneme_tab[phonPAUSE];
phlist[ix++].ph = phoneme_tab[phonPAUSE];


phlist[ix].phcode = phonPAUSE; phlist[ix].phcode = phonPAUSE;
phlist[ix].type = phPAUSE;
phlist[ix].type = phPAUSE;
phlist[ix].length = 0; phlist[ix].length = 0;
phlist[ix].sourceix=0; phlist[ix].sourceix=0;
phlist[ix].synthflags = 0; phlist[ix].synthflags = 0;
phlist[ix++].ph = phoneme_tab[phonPAUSE_SHORT];
phlist[ix++].ph = phoneme_tab[phonPAUSE_SHORT];


n_phoneme_list = ix; n_phoneme_list = ix;
} // end of MakePhonemeList } // end of MakePhonemeList

+ 18
- 9
src/readclause.cpp View File





static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output, int *bufix, int end_clause) static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output, int *bufix, int end_clause)
{//==========================================================================================================
{//=============================================================================================================
// announce punctuation names // announce punctuation names
// c1: the punctuation character // c1: the punctuation character
// c2: the following character // c2: the following character


int punct_count; int punct_count;
const char *punctname;
int found = 0;
const char *punctname = NULL;
int soundicon; int soundicon;
int attributes; int attributes;
int short_pause; int short_pause;
int bufix1; int bufix1;
char buf[200]; char buf[200];
char buf2[80]; char buf2[80];
char ph_buf[30];


c2 = *c2_ptr; c2 = *c2_ptr;
buf[0] = 0; buf[0] = 0;
// add an embedded command to play the soundicon // add an embedded command to play the soundicon
sprintf(buf,"\001%dI ",soundicon); sprintf(buf,"\001%dI ",soundicon);
UngetC(c2); UngetC(c2);
found = 1;
} }
else else
if((punctname = LookupCharName(tr, c1, 0)) != NULL)
{ {
found = 1;
if((c1 == '.') && (end_clause) && (c2 != '.'))
{
if(LookupSpecial(tr, "_.p", ph_buf))
{
punctname = ph_buf; // use word for 'period' instead of 'dot'
}
}
if(punctname == NULL)
{
punctname = LookupCharName(tr, c1, 0);
}

if(punctname == NULL)
return(-1);

if((*bufix==0) || (end_clause ==0) || (tr->langopts.param[LOPT_ANNOUNCE_PUNCT] & 2)) if((*bufix==0) || (end_clause ==0) || (tr->langopts.param[LOPT_ANNOUNCE_PUNCT] & 2))
{ {
punct_count=1; punct_count=1;
} }
} }


if(found == 0)
return(-1);

bufix1 = *bufix; bufix1 = *bufix;
len = strlen(buf); len = strlen(buf);
strcpy(&output[*bufix],buf); strcpy(&output[*bufix],buf);

+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.h" #include "wave.h"


const char *version_string = "1.46.44 08.Mar.13";
const char *version_string = "1.46.45 10.Mar.13";
const int version_phdata = 0x014640; const int version_phdata = 0x014640;


int option_device_number = -1; int option_device_number = -1;

+ 48
- 41
src/tr_languages.cpp View File

{"_dv", OFFSET_THAANA, 0x780, 0x7bf, 0, 0}, {"_dv", OFFSET_THAANA, 0x780, 0x7bf, 0, 0},
{"_hi", OFFSET_DEVANAGARI, 0x900, 0x97f,L('h','i'), AL_WORDS}, {"_hi", OFFSET_DEVANAGARI, 0x900, 0x97f,L('h','i'), AL_WORDS},
{"_bn", OFFSET_BENGALI, 0x0980, 0x9ff, 0, 0}, {"_bn", OFFSET_BENGALI, 0x0980, 0x9ff, 0, 0},
{"_gur", OFFSET_GURMUKHI, 0xa00, 0xa7f, 0, 0},
{"_gur", OFFSET_GURMUKHI, 0xa00, 0xa7f, L('p','a'), AL_WORDS},
{"_gu", OFFSET_GUJARATI, 0xa80, 0xaff, 0, 0}, {"_gu", OFFSET_GUJARATI, 0xa80, 0xaff, 0, 0},
{"_or", OFFSET_ORIYA, 0xb00, 0xb7f, 0, 0}, {"_or", OFFSET_ORIYA, 0xb00, 0xb7f, 0, 0},
{"_ta", OFFSET_TAMIL, 0xb80, 0xbff, L('t','a'), AL_WORDS}, {"_ta", OFFSET_TAMIL, 0xb80, 0xbff, L('t','a'), AL_WORDS},
{"_ka", OFFSET_GEORGIAN, 0x10a0,0x10ff, L('k','a'), AL_WORDS}, {"_ka", OFFSET_GEORGIAN, 0x10a0,0x10ff, L('k','a'), AL_WORDS},
{"_ko", OFFSET_KOREAN, 0x1100,0x11ff, 0, 0}, {"_ko", OFFSET_KOREAN, 0x1100,0x11ff, 0, 0},
{"_eth", OFFSET_ETHIOPIC, 0x1200,0x139f, 0, 0}, {"_eth", OFFSET_ETHIOPIC, 0x1200,0x139f, 0, 0},
{"_ja", 0x3040, 0x3040,0x30ff, 0, AL_NOT_CODE},
{"_zh", 0x3100, 0x3100,0x9fff, 0, AL_NOT_CODE},
{NULL, 0, 0, 0, 0, 0} {NULL, 0, 0, 0, 0, 0}
}; };




ALPHABET *AlphabetFromChar(int c) ALPHABET *AlphabetFromChar(int c)
{//=============================== {//===============================
// Find the alphabet from a character.
ALPHABET *alphabet = alphabets;
while(alphabet->name != NULL)
{
if((c >= alphabet->range_min) && (c <= alphabet->range_max))
{
return(alphabet);
}
alphabet++;
}
return(NULL);
// Find the alphabet from a character.
ALPHABET *alphabet = alphabets;
while(alphabet->name != NULL)
{
if((c >= alphabet->range_min) && (c <= alphabet->range_max))
{
return(alphabet);
}
alphabet++;
}
return(NULL);
} }




tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = STRESSPOSN_1L; tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable
tr->langopts.stress_flags = S_MID_DIM | S_FINAL_DIM; // use 'diminished' for unstressed final syllable
tr->letter_bits_offset = OFFSET_BENGALI; tr->letter_bits_offset = OFFSET_BENGALI;
SetIndicLetters(tr); // call this after setting OFFSET_BENGALI SetIndicLetters(tr); // call this after setting OFFSET_BENGALI
SetLetterBitsRange(tr,LETTERGP_F,0x3e,0x4c); // vowel signs, but not virama SetLetterBitsRange(tr,LETTERGP_F,0x3e,0x4c); // vowel signs, but not virama
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->letter_bits_offset = OFFSET_THAANA; tr->letter_bits_offset = OFFSET_THAANA;
tr->langopts.stress_rule = STRESSPOSN_1L; tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable
tr->langopts.stress_flags = S_MID_DIM | S_FINAL_DIM; // use 'diminished' for unstressed final syllable
SetLetterBitsRange(tr,LETTERGP_B,0x26,0x30); // vowel signs, and virama SetLetterBitsRange(tr,LETTERGP_B,0x26,0x30); // vowel signs, and virama
tr->langopts.break_numbers = 0x14a8; // 1000, 100,000 10,000,000 tr->langopts.break_numbers = 0x14a8; // 1000, 100,000 10,000,000
tr->langopts.numbers = 1; tr->langopts.numbers = 1;


// stress last syllable if it doesn't end in vowel or "s" or "n" // stress last syllable if it doesn't end in vowel or "s" or "n"
// 'diminished' is an unstressed final syllable // 'diminished' is an unstressed final syllable
tr->langopts.stress_flags = 0x200 | 0x6 | 0x10;
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.unstressed_wd1 = 0; tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2; tr->langopts.unstressed_wd2 = 2;
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels


if(name2 == L('c','a')) if(name2 == L('c','a'))
{ {
// stress last syllable unless word ends with a vowel
tr->punct_within_word = ca_punct_within_word; tr->punct_within_word = ca_punct_within_word;
tr->langopts.stress_flags = 0x200 | 0x6 | 0x30; // stress last syllable unless word ends with a vowel
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2;
} }
else else
if(name2 == L('a','n')) if(name2 == L('a','n'))
{ {
tr->langopts.stress_flags = 0x200 | 0x6 | 0x10;
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2;
} }
else else
if(name2 == L_pap) if(name2 == L_pap)
{ {
tr->langopts.stress_flags = 0x100 | 0x6 | 0x30; // stress last syllable unless word ends with a vowel
// stress last syllable unless word ends with a vowel
tr->langopts.stress_flags = S_FINAL_STRESS_C | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2;
} }
else else
{ {
SetupTranslator(tr,stress_lengths_fi,stress_amps_fi); SetupTranslator(tr,stress_lengths_fi,stress_amps_fi);


tr->langopts.stress_rule = STRESSPOSN_1L; tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x56; // move secondary stress from light to a following heavy syllable
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_2_TO_HEAVY; // move secondary stress from light to a following heavy syllable
tr->langopts.param[LOPT_IT_DOUBLING] = 1; tr->langopts.param[LOPT_IT_DOUBLING] = 1;
tr->langopts.long_stop = 130; tr->langopts.long_stop = 130;


{ {
SetupTranslator(tr,stress_lengths_fr,stress_amps_fr); SetupTranslator(tr,stress_lengths_fr,stress_amps_fr);
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = 0x0024; // don't use secondary stress
tr->langopts.stress_flags = S_NO_AUTO_2 | S_FINAL_DIM; // don't use secondary stress
tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.accents = 2; // Say "Capital" after the letter. tr->langopts.accents = 2; // Say "Capital" after the letter.
} }
break; break;


case L('g','a'): // irish
{
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.numbers = 1;
}
break;
case L('g','a'): // irish
{
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.numbers = 1;
}
break;


case L('h','i'): // Hindi case L('h','i'): // Hindi
case L('n','e'): // Nepali case L('n','e'): // Nepali
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = 6; // stress on last heaviest syllable, excluding final syllable tr->langopts.stress_rule = 6; // stress on last heaviest syllable, excluding final syllable
tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable
tr->langopts.stress_flags = S_MID_DIM | S_FINAL_DIM; // use 'diminished' for unstressed final syllable
tr->langopts.numbers = NUM_SWAP_TENS; tr->langopts.numbers = NUM_SWAP_TENS;
tr->langopts.break_numbers = 0x14aa8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi tr->langopts.break_numbers = 0x14aa8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi
tr->letter_bits_offset = OFFSET_DEVANAGARI; tr->letter_bits_offset = OFFSET_DEVANAGARI;
tr->charset_a0 = charsets[2]; // ISO-8859-2 tr->charset_a0 = charsets[2]; // ISO-8859-2


tr->langopts.stress_rule = STRESSPOSN_1L; tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x10;
tr->langopts.stress_flags = S_FINAL_NO_2;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x3; tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x3;
tr->langopts.max_initial_consonants = 5; tr->langopts.max_initial_consonants = 5;
tr->langopts.spelling_stress = 1; tr->langopts.spelling_stress = 1;
case L('h','t'): // Haitian Creole case L('h','t'): // Haitian Creole
// memcpy(tr->stress_lengths,stress_lengths_fr,sizeof(tr->stress_lengths)); // memcpy(tr->stress_lengths,stress_lengths_fr,sizeof(tr->stress_lengths));
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = 0x0024; // don't use secondary stress
tr->langopts.stress_flags = S_NO_AUTO_2 | S_FINAL_DIM; // don't use secondary stress
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_OMIT_1_HUNDRED | NUM_NOPAUSE | NUM_ROMAN | NUM_VIGESIMAL | NUM_DFRACTION_4; tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_OMIT_1_HUNDRED | NUM_NOPAUSE | NUM_ROMAN | NUM_VIGESIMAL | NUM_DFRACTION_4;
break; break;




tr->langopts.vowel_pause = 0x20; tr->langopts.vowel_pause = 0x20;
tr->langopts.stress_rule = STRESSPOSN_1L; tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x8036 | S_HYPEN_UNSTRESS;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2 | 0x8000 | S_HYPEN_UNSTRESS;
tr->langopts.unstressed_wd1 = 2; tr->langopts.unstressed_wd1 = 2;
tr->langopts.param[LOPT_IT_DOUBLING] = 1; tr->langopts.param[LOPT_IT_DOUBLING] = 1;
tr->langopts.param[LOPT_ANNOUNCE_PUNCT] = 2; // don't break clause before announcing . ? ! tr->langopts.param[LOPT_ANNOUNCE_PUNCT] = 2; // don't break clause before announcing . ? !
SetLetterBits(tr,LETTERGP_C,hy_consonants); SetLetterBits(tr,LETTERGP_C,hy_consonants);
tr->langopts.max_initial_consonants = 6; tr->langopts.max_initial_consonants = 6;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED;
// tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
// tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
} }
break; break;


SetupTranslator(tr,stress_lengths_id,stress_amps_id); SetupTranslator(tr,stress_lengths_id,stress_amps_id);
tr->langopts.stress_rule = STRESSPOSN_2R; tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_ROMAN; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_ROMAN;
tr->langopts.stress_flags = 0x6 | 0x10;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.accents = 2; // "capital" after letter name tr->langopts.accents = 2; // "capital" after letter name
} }
break; break;


SetupTranslator(tr,stress_lengths_is,NULL); SetupTranslator(tr,stress_lengths_is,NULL);
tr->langopts.stress_rule = STRESSPOSN_1L; tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x10;
tr->langopts.stress_flags = S_FINAL_NO_2;
tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels
tr->langopts.param[LOPT_REDUCE] = 2; tr->langopts.param[LOPT_REDUCE] = 2;




tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.stress_rule = STRESSPOSN_2R; tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x10 | S_PRIORITY_STRESS;
tr->langopts.stress_flags = S_FINAL_NO_2 | S_PRIORITY_STRESS;
tr->langopts.vowel_pause = 1; tr->langopts.vowel_pause = 1;
tr->langopts.unstressed_wd1 = 2; tr->langopts.unstressed_wd1 = 2;
tr->langopts.unstressed_wd2 = 2; tr->langopts.unstressed_wd2 = 2;
{ {
// character codes offset by 0x1080 // character codes offset by 0x1080
static const char ka_vowels[] = {0x30,0x34,0x38,0x3d,0x43,0x55,0x57,0}; static const char ka_vowels[] = {0x30,0x34,0x38,0x3d,0x43,0x55,0x57,0};
static const char ka_consonants[] = {0x31,0x32,0x33,0x35,0x36,0x37,0x39,0x3a,0x3b,0x3c,0x3e,0x3f,
0x40,0x41,0x42,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x56,0};
static const char ka_consonants[] =
{0x31,0x32,0x33,0x35,0x36,0x37,0x39,0x3a,0x3b,0x3c,0x3e,0x3f,0x40,0x41,0x42,0x44,
0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x56,0};
SetupTranslator(tr,stress_lengths_ta,stress_amps_ta); SetupTranslator(tr,stress_lengths_ta,stress_amps_ta);
memset(tr->letter_bits,0,sizeof(tr->letter_bits)); memset(tr->letter_bits,0,sizeof(tr->letter_bits));
SetLetterBits(tr,LETTERGP_A,ka_vowels); SetLetterBits(tr,LETTERGP_A,ka_vowels);
tr->langopts.spelling_stress = 1; tr->langopts.spelling_stress = 1;
tr->charset_a0 = charsets[4]; // ISO-8859-4 tr->charset_a0 = charsets[4]; // ISO-8859-4
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_4 | NUM_ORDINAL_DOT; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_4 | NUM_ORDINAL_DOT;
tr->langopts.stress_flags = 0x16 + 0x40000;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_EO_CLAUSE1;
} }
break; break;


break; break;


case L('t','t'): // Tatar case L('t','t'): // Tatar
{
{
SetCyrillicLetters(tr); SetCyrillicLetters(tr);
SetupTranslator(tr,stress_lengths_fr,stress_amps_fr); SetupTranslator(tr,stress_lengths_fr,stress_amps_fr);
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = S_NO_AUTO_2; //no automatic secondary stress tr->langopts.stress_flags = S_NO_AUTO_2; //no automatic secondary stress
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_4; tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_4;
}
break;
}
break;


case L('u','k'): // Ukrainian case L('u','k'): // Ukrainian
{ {
break; break;


case L('u','r'): // Urdu case L('u','r'): // Urdu
{
tr->letter_bits_offset = OFFSET_ARABIC; tr->letter_bits_offset = OFFSET_ARABIC;
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
tr->langopts.numbers = NUM_SWAP_TENS; tr->langopts.numbers = NUM_SWAP_TENS;
tr->langopts.break_numbers = 0x52a8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi tr->langopts.break_numbers = 0x52a8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi
}
break; break;


case L('v','i'): // Vietnamese case L('v','i'): // Vietnamese

+ 456
- 480
src/translate.cpp
File diff suppressed because it is too large
View File


+ 9
- 3
src/translate.h View File

// alphabet flags // alphabet flags
#define AL_DONT_NAME 0x01 // don't speak the alphabet name #define AL_DONT_NAME 0x01 // don't speak the alphabet name
#define AL_NOT_LETTERS 0x02 // don't use the language for speaking letters #define AL_NOT_LETTERS 0x02 // don't use the language for speaking letters
#define AL_WORDS 0x04 // use the language to speak words
#define AL_WORDS 0x04 // use the language to speak words
#define AL_NOT_CODE 0x08 // don't speak the character code




#define N_LOPTS 21 #define N_LOPTS 21
#define S_INITIAL_2 0x2000 #define S_INITIAL_2 0x2000
// bit13= If there is only one syllable before the primary stress, give it a secondary stress // bit13= If there is only one syllable before the primary stress, give it a secondary stress


#define S_MID_DIM 0x10000
// bit 16= Set (not first or last) syllables to diminished stress

#define S_PRIORITY_STRESS 0x20000 #define S_PRIORITY_STRESS 0x20000
// bit17= "priority" stress reduces other primary stress to "unstressed" not "secondary" // bit17= "priority" stress reduces other primary stress to "unstressed" not "secondary"


#define S_EO_CLAUSE1 0x40000 #define S_EO_CLAUSE1 0x40000
// bit18= don't lengthen short vowels more than long vowels at end-of-clause // bit18= don't lengthen short vowels more than long vowels at end-of-clause


#define S_FINAL_LONG 0x80000
// bit19=stress on final syllable if it has a long vowel, but previous syllable has a short vowel



#define S_HYPEN_UNSTRESS 0x100000 #define S_HYPEN_UNSTRESS 0x100000
// bit20= hyphenated words, 2nd part is unstressed // bit20= hyphenated words, 2nd part is unstressed
// bit21= don't lengthen vowels at end-of-clause // bit21= don't lengthen vowels at end-of-clause


// bit15= Give stress to the first unstressed syllable // bit15= Give stress to the first unstressed syllable
// bit19=stress on final syllable if it has a long vowel, but previous syllable has a short vowel




int stress_flags; int stress_flags;
const char *transpose_map; const char *transpose_map;
char dictionary_name[40]; char dictionary_name[40];


char phon_out[400];
char phon_out[500];
char phonemes_repeat[20]; char phonemes_repeat[20];
int phonemes_repeat_count; int phonemes_repeat_count;
int phoneme_tab_ix; int phoneme_tab_ix;

+ 185
- 182
src/voices.cpp View File

/*************************************************************************** /***************************************************************************
* Copyright (C) 2005 to 2010 by Jonathan Duddington *
* Copyright (C) 2005 to 2013 by Jonathan Duddington *
* email: [email protected] * * email: [email protected] *
* * * *
* This program is free software; you can redistribute it and/or modify * * This program is free software; you can redistribute it and/or modify *
{"unknown", 0}, {"unknown", 0},
{"male", 1}, {"male", 1},
{"female", 2}, {"female", 2},
{NULL, 0 }};
{NULL, 0 }
};


int tone_points[12] = {600,170, 1200,135, 2000,110, 3000,110, -1,0}; int tone_points[12] = {600,170, 1200,135, 2000,110, 3000,110, -1,0};
//int tone_points[12] = {250,200, 400,170, 600,170, 1200,135, 2000,110, -1,0}; //int tone_points[12] = {250,200, 400,170, 600,170, 1200,135, 2000,110, -1,0};
V_STRESSADD, V_STRESSADD,
V_DICTRULES, V_DICTRULES,
V_STRESSRULE, V_STRESSRULE,
V_STRESSOPT,
V_CHARSET, V_CHARSET,
V_NUMBERS, V_NUMBERS,
V_OPTION, V_OPTION,
static MNEM_TAB options_tab[] = { static MNEM_TAB options_tab[] = {
{"reduce_t", LOPT_REDUCE_T}, {"reduce_t", LOPT_REDUCE_T},
{"bracket", LOPT_BRACKET_PAUSE}, {"bracket", LOPT_BRACKET_PAUSE},
{NULL, -1} };
{NULL, -1}
};


static MNEM_TAB keyword_tab[] = { static MNEM_TAB keyword_tab[] = {
{"name", V_NAME}, {"name", V_NAME},
{"formant", V_FORMANT}, {"formant", V_FORMANT},
{"pitch", V_PITCH}, {"pitch", V_PITCH},
{"phonemes", V_PHONEMES}, {"phonemes", V_PHONEMES},
{"translator", V_TRANSLATOR},
{"translator", V_TRANSLATOR},
{"dictionary", V_DICTIONARY}, {"dictionary", V_DICTIONARY},
{"stressLength", V_STRESSLENGTH}, {"stressLength", V_STRESSLENGTH},
{"stressAmp", V_STRESSAMP}, {"stressAmp", V_STRESSAMP},
{"tunes", V_TUNES}, {"tunes", V_TUNES},
{"dictrules", V_DICTRULES}, {"dictrules", V_DICTRULES},
{"stressrule", V_STRESSRULE}, {"stressrule", V_STRESSRULE},
{"stressopt", V_STRESSOPT},
{"charset", V_CHARSET}, {"charset", V_CHARSET},
{"replace", V_REPLACE}, {"replace", V_REPLACE},
{"words", V_WORDGAP}, {"words", V_WORDGAP},
{"l_sonorant_min", 0x100+LOPT_SONORANT_MIN}, {"l_sonorant_min", 0x100+LOPT_SONORANT_MIN},
{"l_length_mods", 0x100+LOPT_LENGTH_MODS}, {"l_length_mods", 0x100+LOPT_LENGTH_MODS},
{"apostrophe", 0x100+LOPT_APOSTROPHE}, {"apostrophe", 0x100+LOPT_APOSTROPHE},
{NULL, 0} };
{NULL, 0}
};


#define N_VOICE_VARIANTS 12 #define N_VOICE_VARIANTS 12
const char variants_either[N_VOICE_VARIANTS] = {1,2,12,3,13,4,14,5,11,0}; const char variants_either[N_VOICE_VARIANTS] = {1,2,12,3,13,4,14,5,11,0};
tone_pts[ix] = -1; tone_pts[ix] = -1;


sscanf(string,"%d %d %d %d %d %d %d %d %d %d", sscanf(string,"%d %d %d %d %d %d %d %d %d %d",
&tone_pts[0],&tone_pts[1],&tone_pts[2],&tone_pts[3],
&tone_pts[4],&tone_pts[5],&tone_pts[6],&tone_pts[7],
&tone_pts[8],&tone_pts[9]);
&tone_pts[0],&tone_pts[1],&tone_pts[2],&tone_pts[3],
&tone_pts[4],&tone_pts[5],&tone_pts[6],&tone_pts[7],
&tone_pts[8],&tone_pts[9]);
} }




while(isspace(*p)) p++; while(isspace(*p)) p++;
strncpy0(vname,p,sizeof(vname)); strncpy0(vname,p,sizeof(vname));
} }
else
if(memcmp(linebuf,"language",8)==0)
else if(memcmp(linebuf,"language",8)==0)
{ {
priority = DEFAULT_LANGUAGE_PRIORITY; priority = DEFAULT_LANGUAGE_PRIORITY;
vlanguage[0] = 0; vlanguage[0] = 0;
n_languages++; n_languages++;
} }
} }
else
if(memcmp(linebuf,"gender",6)==0)
else if(memcmp(linebuf,"gender",6)==0)
{ {
sscanf(&linebuf[6],"%s %d",vgender,&age); sscanf(&linebuf[6],"%s %d",vgender,&age);
} }
else
if(memcmp(linebuf,"variants",8)==0)
else if(memcmp(linebuf,"variants",8)==0)
{ {
sscanf(&linebuf[8],"%d",&n_variants); sscanf(&linebuf[8],"%d",&n_variants);
} }
// Adjustment of harmonic amplitudes, steps of 8Hz // Adjustment of harmonic amplitudes, steps of 8Hz
// value of 128 means no change // value of 128 means no change
// memset(voice->tone_adjust,128,sizeof(voice->tone_adjust)); // memset(voice->tone_adjust,128,sizeof(voice->tone_adjust));
SetToneAdjust(voice,tone_points);
SetToneAdjust(voice,tone_points);


// default values of speed factors // default values of speed factors
voice->speedf1 = 256; voice->speedf1 = 256;
// Read 8 integer numbers // Read 8 integer numbers
memset(data, 0, 8+sizeof(int)); memset(data, 0, 8+sizeof(int));
return(sscanf(data_in,"%d %d %d %d %d %d %d %d", return(sscanf(data_in,"%d %d %d %d %d %d %d %d",
&data[0],&data[1],&data[2],&data[3],&data[4],&data[5],&data[6],&data[7]));
&data[0],&data[1],&data[2],&data[3],&data[4],&data[5],&data[6],&data[7]));
} }




char buf[sizeof(path_home)+30]; char buf[sizeof(path_home)+30];
char path_voices[sizeof(path_home)+12]; char path_voices[sizeof(path_home)+12];


int dict_min = 0;
int dict_min = 0;
int stress_amps[8]; int stress_amps[8];
int stress_lengths[8]; int stress_lengths[8];
int stress_add[8]; int stress_add[8];
static char voice_name[40]; // voice name for current_voice_selected static char voice_name[40]; // voice name for current_voice_selected
static char voice_languages[100]; // list of languages and priorities for current_voice_selected static char voice_languages[100]; // list of languages and priorities for current_voice_selected


// which directory to look for a named voice
static const char *voices_asia =
"fa fa-pin hi hy hy-west id ka kn ku ml ne pa ta tr vi vi-hue zh zh-yue ";
static const char *voices_europe =
"bg bs ca cs cy da el es et fi fr-be hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv ";
// which directory to look for a named voice
static const char *voices_asia =
"fa fa-pin hi hy hy-west id ka kn ku ml ne pa ta tr vi vi-hue zh zh-yue ";
static const char *voices_europe =
"bg bs ca cs cy da el es et fi fr-be hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv ";




strncpy0(voicename, vname, sizeof(voicename)); strncpy0(voicename, vname, sizeof(voicename));
} }
else else
{ {
if(voicename[0]==0)
strcpy(voicename,"default");
if(voicename[0]==0)
strcpy(voicename,"default");


sprintf(path_voices,"%s%cvoices%c",path_home,PATHSEP,PATHSEP); sprintf(path_voices,"%s%cvoices%c",path_home,PATHSEP,PATHSEP);
sprintf(buf,"%s%s",path_voices,voicename); // first, look in the main voices directory sprintf(buf,"%s%s",path_voices,voicename); // first, look in the main voices directory


if(GetFileLength(buf) <= 0) if(GetFileLength(buf) <= 0)
{ {
// then look in the appropriate subdirectory
if((voicename[0]=='m') && (voicename[1]=='b'))
{
voice_dir = "mb"; // mbrola voices
}
else
{
sprintf(name2, "%s ", voicename);
if(strstr(voices_europe, voicename) != NULL)
voice_dir = "europe";
else
if(strstr(voices_asia, voicename) != NULL)
voice_dir = "asia";
else
voice_dir = "other";

sprintf(buf,"%s%s%c%s", path_voices,voice_dir,PATHSEP,voicename);

if(GetFileLength(buf) <= 0)
{
// if not found, look in "test" sub-directory
sprintf(buf,"%stest%c%s",path_voices,PATHSEP,voicename);
}
}
// then look in the appropriate subdirectory
if((voicename[0]=='m') && (voicename[1]=='b'))
{
voice_dir = "mb"; // mbrola voices
}
else
{
sprintf(name2, "%s ", voicename);
if(strstr(voices_europe, voicename) != NULL)
voice_dir = "europe";
else if(strstr(voices_asia, voicename) != NULL)
voice_dir = "asia";
else
voice_dir = "other";

sprintf(buf,"%s%s%c%s", path_voices,voice_dir,PATHSEP,voicename);

if(GetFileLength(buf) <= 0)
{
// if not found, look in "test" sub-directory
sprintf(buf,"%stest%c%s",path_voices,PATHSEP,voicename);
}
}
} }
} }


switch(key) switch(key)
{ {
case V_LANGUAGE: case V_LANGUAGE:
{
unsigned int len;
int priority;
{
unsigned int len;
int priority;


if(tone_only)
break;
if(tone_only)
break;

priority = DEFAULT_LANGUAGE_PRIORITY;
language_name[0] = 0;


priority = DEFAULT_LANGUAGE_PRIORITY;
language_name[0] = 0;
sscanf(p,"%s %d",language_name,&priority);
if(strcmp(language_name,"variant") == 0)
break;


sscanf(p,"%s %d",language_name,&priority);
if(strcmp(language_name,"variant") == 0)
break;
len = strlen(language_name) + 2;
// check for space in languages[]
if(len < (sizeof(voice_languages)-langix-1))
{
voice_languages[langix] = priority;


len = strlen(language_name) + 2;
// check for space in languages[]
if(len < (sizeof(voice_languages)-langix-1))
{
voice_languages[langix] = priority;
strcpy(&voice_languages[langix+1],language_name);
langix += len;
}


strcpy(&voice_languages[langix+1],language_name);
langix += len;
}
// only act on the first language line
if(language_set == 0)
{
language_type = strtok(language_name,"-");
language_set = 1;
strcpy(translator_name,language_type);
strcpy(new_dictionary,language_type);
strcpy(phonemes_name,language_type);
SelectPhonemeTableName(phonemes_name);


// only act on the first language line
if(language_set == 0)
{
language_type = strtok(language_name,"-");
language_set = 1;
strcpy(translator_name,language_type);
strcpy(new_dictionary,language_type);
strcpy(phonemes_name,language_type);
SelectPhonemeTableName(phonemes_name);

if(new_translator != NULL)
DeleteTranslator(new_translator);

new_translator = SelectTranslator(translator_name);
langopts = &new_translator->langopts;
}
if(new_translator != NULL)
DeleteTranslator(new_translator);

new_translator = SelectTranslator(translator_name);
langopts = &new_translator->langopts;
} }
break;
}
break;


case V_NAME: case V_NAME:
if(tone_only == 0) if(tone_only == 0)
break; break;


case V_GENDER: case V_GENDER:
{
int age = 0;
char vgender[80];
sscanf(p,"%s %d",vgender,&age);
current_voice_selected.gender = LookupMnem(genders,vgender);
current_voice_selected.age = age;
}
break;
{
int age = 0;
char vgender[80];
sscanf(p,"%s %d",vgender,&age);
current_voice_selected.gender = LookupMnem(genders,vgender);
current_voice_selected.age = age;
}
break;


case V_TRANSLATOR: case V_TRANSLATOR:
if(tone_only) break; if(tone_only) break;
sscanf(p,"%s",translator_name); sscanf(p,"%s",translator_name);


if(new_translator != NULL) if(new_translator != NULL)
DeleteTranslator(new_translator);
DeleteTranslator(new_translator);


new_translator = SelectTranslator(translator_name); new_translator = SelectTranslator(translator_name);
langopts = &new_translator->langopts; langopts = &new_translator->langopts;
break; break;


case V_PITCH: case V_PITCH:
{
double factor;
// default is pitch 82 118
n = sscanf(p,"%d %d",&pitch1,&pitch2);
voice->pitch_base = (pitch1 - 9) << 12;
voice->pitch_range = (pitch2 - pitch1) * 108;
factor = double(pitch1 - 82)/82;
voice->formant_factor = (int)((1+factor/4) * 256); // nominal formant shift for a different voice pitch
}
break;
{
double factor;
// default is pitch 82 118
n = sscanf(p,"%d %d",&pitch1,&pitch2);
voice->pitch_base = (pitch1 - 9) << 12;
voice->pitch_range = (pitch2 - pitch1) * 108;
factor = double(pitch1 - 82)/82;
voice->formant_factor = (int)((1+factor/4) * 256); // nominal formant shift for a different voice pitch
}
break;


case V_STRESSLENGTH: // stressLength case V_STRESSLENGTH: // stressLength
stress_lengths_set = Read8Numbers(p,stress_lengths); stress_lengths_set = Read8Numbers(p,stress_lengths);


case V_DICTRULES: // conditional dictionary rules and list entries case V_DICTRULES: // conditional dictionary rules and list entries
case V_NUMBERS: case V_NUMBERS:
// expect a list of numbers
case V_STRESSOPT:
// expect a list of numbers
while(*p != 0) while(*p != 0)
{ {
while(isspace(*p)) p++; while(isspace(*p)) p++;
if((n = atoi(p)) > 0) if((n = atoi(p)) > 0)
{ {
p++; p++;
if((key==V_DICTRULES) && (n < 32))
conditional_rules |= (1 << n);
if(n < 32)
{
if(key==V_DICTRULES)
conditional_rules |= (1 << n);
else if(key==V_NUMBERS)
langopts->numbers |= (1 << n);
else if(key==V_STRESSOPT)
langopts->stress_flags |= (1 << n);
}
else else
if((key==V_NUMBERS) && (n < 32))
langopts->numbers |= (1 << n);
else
if((key==V_NUMBERS) && (n < 64))
langopts->numbers |= (1 << (n-32));
else
fprintf(stderr,"Bad option number %d\n", n);
{
if((key==V_NUMBERS) && (n < 64))
langopts->numbers |= (1 << (n-32));
else
fprintf(stderr,"Bad option number %d\n", n);
}
} }
while(isalnum(*p)) p++; while(isalnum(*p)) p++;
} }


case V_STRESSRULE: case V_STRESSRULE:
sscanf(p,"%d %d %d %d",&langopts->stress_rule, sscanf(p,"%d %d %d %d",&langopts->stress_rule,
&langopts->stress_flags,
&langopts->unstressed_wd1,
&langopts->unstressed_wd2);
&langopts->stress_flags,
&langopts->unstressed_wd1,
&langopts->unstressed_wd2);
break; break;


case V_CHARSET: case V_CHARSET:
break; break;


case V_TONE: case V_TONE:
{
int tone_data[12];
ReadTonePoints(p,tone_data);
SetToneAdjust(voice,tone_data);
}
break;
{
int tone_data[12];
ReadTonePoints(p,tone_data);
SetToneAdjust(voice,tone_data);
}
break;


case V_VOICING: case V_VOICING:
if(sscanf(p,"%d",&value)==1) if(sscanf(p,"%d",&value)==1)
break; break;


case V_BREATH: case V_BREATH:
voice->breath[0] = Read8Numbers(p,&voice->breath[1]);
for(ix=1; ix<8; ix++)
{
if(ix % 2)
voice->breath[ix] = -voice->breath[ix];
}
voice->breath[0] = Read8Numbers(p,&voice->breath[1]);
for(ix=1; ix<8; ix++)
{
if(ix % 2)
voice->breath[ix] = -voice->breath[ix];
}
break; break;


case V_BREATHW: case V_BREATHW:
voice->breathw[0] = Read8Numbers(p,&voice->breathw[1]);
voice->breathw[0] = Read8Numbers(p,&voice->breathw[1]);
break; break;


case V_CONSONANTS: case V_CONSONANTS:
break; break;


case V_MBROLA: case V_MBROLA:
{
int srate = 16000;
char name[40];
char phtrans[40];
{
int srate = 16000;
char name[40];
char phtrans[40];


phtrans[0] = 0;
sscanf(p,"%s %s %d",name,phtrans,&srate);
if(LoadMbrolaTable(name,phtrans,srate) != EE_OK)
{
fprintf(stderr,"mbrola voice not found\n");
}
voice->samplerate = srate;
phtrans[0] = 0;
sscanf(p,"%s %s %d",name,phtrans,&srate);
if(LoadMbrolaTable(name,phtrans,srate) != EE_OK)
{
fprintf(stderr,"mbrola voice not found\n");
} }
break;
voice->samplerate = srate;
}
break;


case V_KLATT: case V_KLATT:
voice->klattv[0] = 1; // default source: IMPULSIVE voice->klattv[0] = 1; // default source: IMPULSIVE
SetSpeed(3); SetSpeed(3);
break; break;


case V_DICTMIN:
case V_DICTMIN:
sscanf(p,"%d",&dict_min); sscanf(p,"%d",&dict_min);
break;
break;


default: default:
if((key & 0xff00) == 0x100) if((key & 0xff00) == 0x100)
} }
voice->phoneme_tab_ix = ix; voice->phoneme_tab_ix = ix;
new_translator->phoneme_tab_ix = ix; new_translator->phoneme_tab_ix = ix;
new_translator->dict_min_size = dict_min;
new_translator->dict_min_size = dict_min;
LoadDictionary(new_translator, new_dictionary, control & 4); LoadDictionary(new_translator, new_dictionary, control & 4);
if(dictionary_name[0]==0) if(dictionary_name[0]==0)
return(NULL); // no dictionary loaded return(NULL); // no dictionary loaded
// match on voice name // match on voice name
score += 500; score += 500;
} }
else
if(strcmp(voice_spec->name,voice->identifier)==0)
else if(strcmp(voice_spec->name,voice->identifier)==0)
{ {
score += 400; score += 400;
} }
} }


if(((voice_spec->gender == 1) || (voice_spec->gender == 2)) && if(((voice_spec->gender == 1) || (voice_spec->gender == 2)) &&
((voice->gender == 1) || (voice->gender == 2)))
((voice->gender == 1) || (voice->gender == 2)))
{ {
if(voice_spec->gender == voice->gender) if(voice_spec->gender == voice->gender)
score += 50; score += 50;
{ {
match_fname = ix; // matching identifier, use this if no matching name match_fname = ix; // matching identifier, use this if no matching name
} }
else
if(strcmp(last_part,&id[strlen(id)-last_part_len])==0)
else if(strcmp(last_part,&id[strlen(id)-last_part_len])==0)
{ {
match_fname2 = ix; match_fname2 = ix;
} }
gender = 0; gender = 0;
if((voice_select2.gender == 2) || ((voice_select2.age > 0) && (voice_select2.age < 13))) if((voice_select2.gender == 2) || ((voice_select2.age > 0) && (voice_select2.age < 13)))
gender = 2; gender = 2;
else
if(voice_select2.gender == 1)
else if(voice_select2.gender == 1)
gender = 1; gender = 1;


#define AGE_OLD 60 #define AGE_OLD 60
} }
#else #else
#ifdef PLATFORM_WINDOWS #ifdef PLATFORM_WINDOWS
WIN32_FIND_DATAA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATAA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;


#undef UNICODE // we need FindFirstFileA() which takes an 8-bit c-string #undef UNICODE // we need FindFirstFileA() which takes an 8-bit c-string
sprintf(fname,"%s\\*",path); sprintf(fname,"%s\\*",path);


if(FindFileData.cFileName[0] != '.') if(FindFileData.cFileName[0] != '.')
{ {
sprintf(fname,"%s%c%s",path,PATHSEP,FindFileData.cFileName);
ftype = GetFileLength(fname);

if(ftype == -2)
{
// a sub-sirectory
GetVoices(fname);
}
else
if(ftype > 0)
{
// a regular line, add it to the voices list
if((f_voice = fopen(fname,"r")) == NULL)
continue;

// pass voice file name within the voices directory
voice_data = ReadVoiceFile(f_voice, fname+len_path_voices, FindFileData.cFileName);
fclose(f_voice);

if(voice_data != NULL)
{
voices_list[n_voices_list++] = voice_data;
}
}
sprintf(fname,"%s%c%s",path,PATHSEP,FindFileData.cFileName);
ftype = GetFileLength(fname);

if(ftype == -2)
{
// a sub-sirectory
GetVoices(fname);
}
else if(ftype > 0)
{
// a regular line, add it to the voices list
if((f_voice = fopen(fname,"r")) == NULL)
continue;

// pass voice file name within the voices directory
voice_data = ReadVoiceFile(f_voice, fname+len_path_voices, FindFileData.cFileName);
fclose(f_voice);

if(voice_data != NULL)
{
voices_list[n_voices_list++] = voice_data;
}
}
} }
} while(FindNextFileA(hFind, &FindFileData) != 0); } while(FindNextFileA(hFind, &FindFileData) != 0);
FindClose(hFind); FindClose(hFind);
if(n_voices_list >= (N_VOICES_LIST-2)) if(n_voices_list >= (N_VOICES_LIST-2))
break; // voices list is full break; // voices list is full


if(ent->d_name[0] == '.')
continue;
if(ent->d_name[0] == '.')
continue;


sprintf(fname,"%s%c%s",path,PATHSEP,ent->d_name); sprintf(fname,"%s%c%s",path,PATHSEP,ent->d_name);


// a sub-sirectory // a sub-sirectory
GetVoices(fname); GetVoices(fname);
} }
else
if(ftype > 0)
else if(ftype > 0)
{ {
// a regular line, add it to the voices list // a regular line, add it to the voices list
if((f_voice = fopen(fname,"r")) == NULL) if((f_voice = fopen(fname,"r")) == NULL)


variant_name = ExtractVoiceVariantName(buf, 0, 1); variant_name = ExtractVoiceVariantName(buf, 0, 1);


for(ix=0; ;ix++)
for(ix=0; ; ix++)
{ {
// convert voice name to lower case (ascii) // convert voice name to lower case (ascii)
if((buf[ix] = tolower(buf[ix])) == 0) if((buf[ix] = tolower(buf[ix])) == 0)


// sort the voices list // sort the voices list
qsort(voices_list,n_voices_list,sizeof(espeak_VOICE *), qsort(voices_list,n_voices_list,sizeof(espeak_VOICE *),
(int (__cdecl *)(const void *,const void *))VoiceNameSorter);
(int (__cdecl *)(const void *,const void *))VoiceNameSorter);




if(voice_spec) if(voice_spec)

Loading…
Cancel
Save