Browse Source

[1.47.07b]

Reinstate language "az" (Azerbaijani) as a test voice.
Language changes: ga, hy, pt, sk.
Generate character names for subscript and superscript letters and digits.
 

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

+ 110
- 0
dictsource/az_list View File

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


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


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

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

bu $u+


// conjunctions
və $u+
isə $u+
də $u+
həm $u+
ya $u+
da $u+

// prepositions
aid $u+ // about
ilə $u+ // with, by, in
dair $u+ // about

// postpositions
ci $u
cı $u
cü $u
de $u
dir $u
li $u
in $u
nə $u
ya $u
yə $u

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

* ulduz $text
% faiz $text




+ 137
- 0
dictsource/az_rules View File

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

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

.L02 ı a o u // back vowels
.L03 i e ö ü

.group a
a a
ai (K aI
-) a (_ a

.group b
b b

.group c
c dZ

.group ç
ç tS

.group d
d d

-) dan (_ d%an
-) dən (_ d%&n
-) dək (_ d%&k
.group e
e e

.group ə
ə &
@) ə (_ %&
-) ə (_ %&

.group f
f f

.group g
g J

.group ğ
ğ Q
A) ğ :
a) ğa :
o) ğo :
u) ğu :
ö) ğö :
ü) ğü :
i) ğ j
e) ğ j

.group h
h h

.group x
x x

.group ı
ı @

.group i
i i
@) iya (_ =i;a

.group j
j Z

.group k
k c
k (K C

.group q
q g
q (_ x

.group l
l l
l (L02 L
L02) l (K L

.group m
m m

.group n
n n

.group o
o o

.group ö
ö W

.group p
p p

.group r
r R
A) r (A *
ğ) r (A *
C) r (_ @-r

.group s
s s

.group ş
ş S

.group t
t t
L03) t (L03 ts

.group u
u u

.group ü
ü y

.group v
v v

.group w
w w

.group y
y j

.group z
z z

.group
ä &

+ 4
- 4
dictsource/bn_list View File

@@ -9,15 +9,15 @@ _0 S'unjO
_1 '&k
_2 d'uj
_3 t'in
_4 tS'ar
_4 tSh'ar
_5 p'a~tS
_6 tSh'Oj
_6 tS#'Oj
_7 S'at
_8 'at.#
_9 n'Oj

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


@@ -25,7 +25,7 @@ _10 d'OS
_11 '&garo
_12 b'arO
_13 t'erO
_14 tS'oddO
_14 tSh'oddO
_15 p'OnerO
_16 S'olO
_17 S'OterO

+ 2
- 2
dictsource/bn_rules View File

@@ -176,8 +176,8 @@


.group ছ
ছ tS#V
ছ (B tS#
ছ tShV
ছ (B tSh

.group জ

+ 2
- 0
dictsource/de_list View File

@@ -63,6 +63,8 @@ _#32 l'e:rts'aIC@n
_?? zymb'o:l
_?A b'u:xstA:b@
_cap gr'o:s
_sub 'Unt@R|3_!,IndEks||
_sup 'o:b@R|3_!,IndEks||


// accent names

+ 34
- 22
dictsource/dict_phonemes View File

@@ -36,6 +36,17 @@ Q r R R2 s S t T
t# tS w x


Dictionary az_dict 2013-04-25

& @ @- a aI e E i
o u W y

* : ; b c C d dZ
f g h j J k l L
m n p Q r R s S
t tS ts v w x z Z


Dictionary bg_dict 2013-03-16

@ a e i o u
@@ -47,7 +58,7 @@ s; t t; tS ts v x z
Z z;


Dictionary bn_dict 2013-04-18
Dictionary bn_dict 2013-04-25

& a a~ e e~ i i: i~
l- o O o: O~ o~ r- u
@@ -113,7 +124,7 @@ r R R3 s S t T tS
v w x z Z


Dictionary de_dict 2013-03-10
Dictionary de_dict 2013-04-25

3 @ @- a A A: aI aU
A~ E E2 E: e: EI i I
@@ -137,7 +148,7 @@ p Q r R s s; t T
ts v x z


Dictionary en_dict 2013-04-23
Dictionary en_dict 2013-04-25

0 0# 3 3: @ @- @2 @5
@L a a# A: A@ aa aI aI3
@@ -225,7 +236,7 @@ p2 r r2 s S t t2 t3
tS v z Z z2 z3


Dictionary ga_dict 2013-03-20
Dictionary ga_dict 2013-04-25

0 0# @ a a# A: aI aI#
aU aU# e E E# e: eI i
@@ -288,15 +299,16 @@ S s2 t t2 tS ts v w
z Z


Dictionary hy_dict 2008-12-22
Dictionary hy_dict 2013-04-25

@ a aI e eI i i@ o
u W y

** b c d dZ dz f g
h j k k# l m n p
p# r R r" s S t t#
tS ts ts# v X z Z
* ** b c d dZ dz f
g h j k k# l m n
p p# r R r" R2 s S
t t# tS ts ts# v X z
Z


Dictionary id_dict 2011-02-21
@@ -500,7 +512,7 @@ r r. s S s. t t# t.
t.# v w x z


Dictionary nl_dict 2013-04-23
Dictionary nl_dict 2013-04-25

8 @ @- a A a: A~ e
E e# E2 e: EI eU i I
@@ -536,7 +548,7 @@ R s S t tS v w x
z Z


Dictionary pa_dict 2013-03-17
Dictionary pa_dict 2013-04-24

@ a a~ e E e~ E~ i
I i~ I~ o O o: O~ o~
@@ -545,9 +557,9 @@ r- u U U~ u~ V V~
: ; 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 r.
R2 s S t t# t. t.# v
x z
N n. n^ p p# Q r R
r. R2 s S t t# t. t.#
v x z


Dictionary pl_dict 2013-04-06
@@ -562,7 +574,7 @@ S s; S; t t; tS ts tS;
ts; v w x z Z Z;


Dictionary pt_dict 2013-04-23
Dictionary pt_dict 2013-04-25

& &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU
@@ -616,17 +628,17 @@ n.# n^ n^# p p# r s S
s. t t# t. t.# tS v w


Dictionary sk_dict 2011-08-08
Dictionary sk_dict 2013-04-25

& @- a a: e e: i i:
l- l: o o: oU r- r: u
u:

* ; b d d; dZ dz f
g h j k l l^ m n
N n^ p r R R^ R^/ s
S t t; tS ts v w x
z Z
* ; b c d d; dZ dz
f g h j k l l^ m
n N n^ p r R R^ R^/
s S t t; tS ts v w
x z Z


Dictionary sl_dict 2013-01-30
@@ -701,7 +713,7 @@ s s. S; t t# t. t.# tS
v v# w z


Dictionary tr_dict 2013-04-20
Dictionary tr_dict 2013-04-25

@ a e E i I o O
u U W y Y

+ 7
- 0
dictsource/en_list View File

@@ -106,6 +106,8 @@ _hok h'Uk

// character names
_cap k,ap@-t@L
_sub s,VbskrIpt||
_sup s,u:p3skrIpt||
_?A l,Et3
_?? sImb@L
_braille br'eIl
@@ -2857,6 +2859,7 @@ temperature tEmprI2tS3
?!3 temporary tEmpr@rI
?3 template tEmpl@t
therefore $1
thereof De@r'0v
thermos T3:m@s
thermostable $alt1
thesis Ti:sIs
@@ -3454,6 +3457,7 @@ Ada eId@ $onlys
Andrea $2
Adrian eIdri@n
Agatha aga#T@
Angela andZ@l@
Angelika $2
Aggie agi
Agnes agn@s
@@ -3605,6 +3609,7 @@ Guinevere gwInI#vi@3
Hadrian heIdri:@n
Hamish heImIS
Harriet hari@t
Harvey hA@vi
Heidi haIdi
Hecate hEk@teI
Hekate hEk@teI
@@ -3662,6 +3667,7 @@ Louise lu:w'i:z
Luigi lu:'i:dZi
Luis lu:Is
Lupe lu:peI
Luther lu:T3
Madeleine mad@lI2n
Madeline mad@lI2n
Maeve meIv
@@ -3781,6 +3787,7 @@ Vanessa $alt3
Wallace w0lI#s
Wally w0li
?3 William wIlj@m
Yerevan jEr@v'an
Yves i:v
Yvonne $2
Zoe zoUi

+ 15
- 4
dictsource/ga_list View File

@@ -1,7 +1,9 @@
// Irish Gaeilge dictionary
// written by Ronan McGuirk
// January 2013
// version 2.5
// 2013
// version 2.6.1
// Please send comments and suggestions to [email protected]

// This file is UTF8 encoded

// letters
@@ -47,7 +49,7 @@ _cap m'o:r
// accent names

// names of symbols
ª_. pO#nk
_. pO#nk
_, k0m@
_; semI
_: ko:l0n
@@ -152,22 +154,26 @@ amárach @m'A:r@x
amuigh @mu1'I
amháin @w'A:in
am aUm
an @n
anaithnid '0nah@nIdZ
anois @nIS
anonn @naUn
ann aUn
anseo @nS'O
anuas a#n'u@s
aodh e:
aodha e:
aon e:@n
(ar ais) Er'aS
arís @r'i:S
as 0s
aschurtha '0sxUrh@

atá @t['A: $u
baill bu1'i:l
bhaill vu1'i:l
beidh bEg
bhfuil w'Il
bheas v'e:@s
bhuel w'El
ceithre kEr@
cathair k'0h@r
@@ -176,6 +182,7 @@ clainne kl'InE
chlainne xl'InE
chun xUn $u
crainn kri:n
chrainn xri:n
de dE $u+
des dEs $u

@@ -184,6 +191,7 @@ di dI $u+
do dO# $u
domhnach d[aUn@x
domhnaigh d[aUnig
dúghorm d['u:Q"Or@m
eile 'El@
euro ju:ro:
faic f@ak
@@ -214,6 +222,7 @@ le lE $u
(muigheo) mu1'i:||'o:
mhuigh vu1'i:
(mhaigh eo) vu1'i:||'o:
mhama w'0m@
maith m'0
mhaith w'0
mbeadh m;O#X
@@ -230,8 +239,10 @@ orthu O#rhu
os o:s
rabh raU
raibh rEv
raidió r'adi:o:
réamhrá r'e:@vr,a:
réidh re:
's s
samhain saUIn
san s@n
seo S@_

+ 91
- 44
dictsource/ga_rules View File

@@ -1,8 +1,10 @@

// translation rules for Irish Gaeilge
// This file is UTF-8 encoded
// written by Ronan McGuirk January 2013
// Version 2.5B
// written by Ronan McGuirk 2013
// Version 2.6.1
// Please send comments and suggestions to [email protected]


// Conditional rules
// ?1 allow eclipsis as 2 separate words
@@ -12,7 +14,7 @@
.L03 b bh mb c ch f m mh dh // used for words likemuir or cuid
.L04 b bh mb // for words like beag
.L05 nn nna nnas dh r s ntas nach nas nais dar mar rtha nta mh chas chais cht chta nnach ntach llach d l ll // word endings where @ is to repleace ea or a
.L06 aidh idh aí á eá eadh adh ad imid aimid imis aimis ainn inn idís aidís éin // word endings where f changes to h
.L06 aidh idh aí á eá eadh adh ad adsa imid aimid imis aimis ainn inn idís aidís éin // word endings where f changes to h
.L07 b c g ch bh gh mb
.L08 lc ll nt bhse // for words like cailc
.L09 cl cr chr f
@@ -21,14 +23,14 @@
.L12 á é ó eo ua // when followed by i
.L13 oc omb
.L14 río dún gnío // followed with mh
.L15 c ch f m d dh g gc gh mh // aoi following
.L15 c ch f bhf m d dh g gc gh mh // aoi following
.L16 b c bh ch gr ghr // for inn word ending
.L17 l le li niste nn
.L18 n nt nte neann neadh ntear nim nfear nfinn
.L18 n nt nte neann neadh ntear nim nfear nfinn nfidh nfidis neamar
.L19 na nea ra rea la llea arga // word endings with silent dh
.L20 eo eoir eá eabh io iu iú // slender m
.L21 ll nn ndán nntán
.L22 eadh eag eaga eagán eagáinín eo io iu iú eall eabh ealtaine
.L22 eadh eag eaga eagán eagáinín eo io iu iú eall eabh ealtaine eann
.L23 ea eo i
.L24 b mb bh g gh p ph bp m mh

@@ -40,14 +42,16 @@
abht aU#t[
amhr aUr // words like amhras
K) amhl aUl
abhra aUr@ // words like slabhra
abh (C aU // words like slabhra
aghaidh aIg
t) abhair u:@r
th) abhair u:@r
t) abhar u:@r
th) abhar u:@r
_) an (sL01 @n
_) an (- 0n // an prefix
_) a (nA @
_) an (_ @n
_) an (- '0n // an prefix
é) a @ // words like féach
X) a (nn_ aU#
X) a (ll_ aU#
@@ -77,8 +81,9 @@
_) ao e:
ae e:
amhna (_ aUn@
arraing arIng
_) ath (@@P3 ,0_

.group á
á A:
@) á ,A:
@@ -89,7 +94,7 @@
áinig A:nIg
ái 'A:i

.group ai
ai a#
L04) ai (L17 0#
@@ -99,6 +104,7 @@
m) ai (n 0#
c) ai (th 0#
ch) ai (th 0#
ai (tín 0#
ai (d 0#
p) ai (l 0#
@) ai (L11_ I
@@ -112,8 +118,9 @@
X) aigh 'aI
aigh aI# L04) aill (_ wi:l
aing (_ Ing
ai (llimh '0 // words like Gaillimh


.group b
b b // broad
L01) b b; // slender
@@ -122,7 +129,7 @@
bh (_ vv
bh (L22 vj // slender
L01) bh v
?1 _m_) b (@
?1 _m_) b (@
_) bhf v // urú broad
_) bhf (L22 v; // urú slender
_) bp b // urú broad
@@ -134,8 +141,10 @@
a) bh (a U // for example cabhair
ear) bha u: // words like Cearbhall
bhfaigh v'aI
_) beann (@ ba#n
_) bheann (@ va#n
_) bun (C@P3 b,Un

.group c
c k
c (L01 k; // slender
@@ -143,19 +152,20 @@
ch (L01 C;
ch (é+ C;
ch (ei+ x;
?1 _g_) c (@
?1 _g_) c (L01
?1 _g_) c (@
?1 _g_) c (L01
_) cabhr k'aUr
_) chabhr x'aUr
_) ceann (C@P5 k;,aUn
_) cheann (C@P6 C;,aUn

.group d
d d[ // broad
L01) d dZ // slender
d (L22 dZ // slender
d (L01 d; // slender
i) d (i dZ
?1 _n_) d (@
?1 _n_) d (@
dh Q // broad
dh (ui Q // broad
dh (ao Q // broad
@@ -165,6 +175,11 @@
?1 _) d (_t d[
?1 _) d (_tL01 dZ
_) d' (@P2 d

_) d' d
_) d (_'fh d

d'fh (L01 d
i) dh (_ g
a) dh (_ X
o) dh (_ X
@@ -174,8 +189,9 @@
dheartháir gr@h'A:r
deirfiúr d;r@f'u:r
dheirfiúr g;r@f'u:r
_) do (Ch@@P2 d[,U_
_) dí (@@P2 d,i:

.group e
e E#
eá A:
@@ -184,29 +200,39 @@
r) ei (m aI
eighea aI
eighea aI
s) ei (nn aI
sh) ei (nn aI
eigh aI

eo o:
eogh o:
eoi o:
eogha o:
eoghai o:
d) eo (ch O#
dh) eo (ch O#
_) eo (ch O#
s) eo (_ @

.group é
é 'e:
éi 'e:
éa 'e:
_) éi (rig aI // words like éirigh
_h) éi (rí aI
_) éi (rí aI // words like éirí
_) éireoidh aIro:Ig
éacs e:@ks

.group ea
ea a#
eai a#
X) ea (L21_ aU
ea (ltaine aU
g) ea (ll aU
l) eamh (n aU
dr) ea (m aU
X) ea (ch 0
_L04) ea (g @
_L04) ea (dh_ @
@@ -217,7 +243,7 @@
eanbhean 'an@v,an
eadhb aIb

.group f
f f // broad
f (L22 f; // slender
@@ -225,14 +251,16 @@
fh (éin_ h
fh (L22 ; // slender
@) f (L06_ h
?1 _bh_) f (@
?1 _bh_) f (L22 ;
_) fo (C@@P2 f,U
_) fogh f'aU
?1 _bh_) f (@
?1 _bh_) f (L22 ;


.group g
g g // broad
g (L01 g; // slender
?1 _n_) g (@
?1 _n_) g (@
_) gh Q"
_) gh (L01 Q"j
_) gc g // urú broad
@@ -245,19 +273,24 @@
gh (n X@
gheobh j'o:
gabh gaU
_) gearr (C@P5 g;,aR
_) ghearr (C@P6 Q"j,aR

.group h
h h // silent

.group i
i I
_) i I
ia i@
ia (tha i:
io O#
io (dá I
_) io (nadh u:// words like ionadh
s) io (mb I
sh) io (mb I

_pr) io (n u:
L16) inn (_ i:n
iai i:i
@@ -266,12 +299,18 @@
L12) i i // non syllabic short i after long vowel
iú u:
m) i (d_ i: // verb ending
_) in (@@P2 ,In_
_) ionad (C@@P5 ,Ona#d[

.group í
í 'i:
íomh 'i:v
íochn 'i:xn
í (_ i:
ín (_ i:n
ío i:@


.group l
l l // broad
L01) l l; // slender
@@ -280,8 +319,9 @@
ll (L23 l;
l (g l@
l (b l@
_) lorg (@@P4 l,Or@g
_) lán (C@@P3 l,A:n

.group m
m m // broad
m (L20 m; //slender
@@ -296,8 +336,8 @@
_) mh (n v@
léir) mheas vas
r) m @m // words like gorm
_) mear (@@P4 m,ar

.group n
n n // broad
n (L01 n; // slender
@@ -318,8 +358,8 @@
n (ch n@
c) n @n
ch) n @n
_) nasc (C@@ n,0sk

.group o
o O#
_) o 'O
@@ -342,12 +382,13 @@
odl (a O#l
oí i:

.group ó
ó 'o:
ómhai o:@

ói (p@ 'o:

.group oi
oi O
_L15) oi (+ @'I
@@ -369,15 +410,16 @@
_) oi (leá 'I
oidh aI
oir (_ 'ERR
_sc) oi (r O
oigh (ea aI

.group p
p p // broad
ph f // broad
p (L22 p; // slender
ph (L20 f; // slender
?1 _b_) p (@
?1 _b_) p (@


.group r
@@ -388,13 +430,13 @@
L12i) r (t_ Z
rr R
rg r@g
rgh rQ"
L01) rg R@g // slender
r (bh r@
ríomh ri:@v
s) r (A R
_) ramh raU

.group s
s s // broad
L01) s S // slender
@@ -402,13 +444,14 @@
s (cL01 S
s (CCL01 S // slender
s (pCé s // broad
?1 _t_) s (@
?1 _t_) s (@
sh h
sh (CL01 h
sh (L01 h;
s (lL01 S
_') s (_ s // 's in poems etc
_) sain (@P4 s,an

.group t
t t[ // broad
L01) t c // slender
@@ -418,7 +461,7 @@
?1 _) t (_L01 c
L01C) t tS // slender after consonant
t (CL01 tS // slender with following consonant before vowels
?1 _d_) t (@
?1 _d_) t (@
th h
th (L01 h;
L01C) th h
@@ -432,7 +475,7 @@
thne (_ h@nE
A) th (_ // silent th at word end

.group u
u U#
ua u@
@@ -441,11 +484,14 @@
uai (d ui
uá u:'A:
ui I
ui (s U
ui (sce_ I
uinn (_ 'i:n
uinti U#'i:ntI
_b) uí wi:
_bh) uí wi:
g) uí wi:
gh) uí wi:
umh u:
L03) ui @I
_d) u (l_ O#
@@ -453,8 +499,9 @@
gh) ui (gh_ @i:
uí i:
uachai 'ux@
_) uimhir (C@P6 ,IvIR


.group ú
ú u:
únmh u:nv

+ 57
- 3
dictsource/hy_list View File

@@ -2,6 +2,8 @@
// This file is UTF8 encoded
// Spelling-to-phoneme words for Armenian

// ?1 West Armenian

// names of letters
_ա aIb
բ ben
@@ -20,7 +22,7 @@ _ը '@t#
կ ken
հ ho
ձ dza
ղ r"ad
ղ r"at
ճ ce
մ men
յ hi
@@ -30,15 +32,16 @@ _ը '@t#
չ tSa
պ pe
ջ dZe
ռ **a
ռ R2a
ս se
վ vev
տ tyn
ր re
ց tso
ց ts#o
ւ hyn
փ p#yr
ք k#e
և jev
_օ o
ֆ fe

@@ -52,6 +55,21 @@ d di
e e
f ef

// symbols
$ dolar
% տոկոս $text
* աստղանիշ $text
+ գումարած $text
= հավասար $text


_՝ b'ut#
_՞ harts#ak'an
_՛ S'eSt
_։ verdZak'et // U+0589
_: verdZak'et
_, storak'et
_. midZak'et


// numbers
@@ -82,5 +100,41 @@ _dpt _sto**ak'el_


// function words
ես $u+ // pronouns
դու $u+
եք $u+
Դուք $u+
նա $u+
այն $u+
մենք $u+
նրանք $u+

դուք $u+
ենք $u+
են $u+

այդ $u+
այս $u+
դա $u+
որ $u+
էր $u+

մի $u+
է $u+

հետ $u+ // prepositions

եվ $u+ // and
իսկ $u+ $brk // and, but
կամ $u+ // or
որը $u+ // which
կարող $u+ // can




// exceptions
ով ov
ովքեր ovk#er

+ 11
- 9
dictsource/hy_rules View File

@@ -2,8 +2,10 @@
// (consonants are changed for Armenian-West in the voice file "hy-west")
// This file is UTF-8 encoded

// ?1 West Armenian

.L01 բ գ թ կ պ տ ք
.L02 ու այ իւ իյ ոյ // other vowel sounds
.L02 ու այ իւ իյ ոյ ա ե ը ի ո օ // vowel sounds

// ligature
.replace
@@ -12,7 +14,7 @@

.group ա
ա a
այ aI
այ (K aI
այ (_ a

.group բ
@@ -41,7 +43,7 @@
.group է
է e
էօ W
էյ eI
էյ (K eI

.group ը
ը @
@@ -57,7 +59,7 @@
ի i
իւ y
իւ (_ iv
իյ i@
իյ (K i@

.group լ
լ l
@@ -97,8 +99,9 @@
L02) մ (_ m

.group յ
յ h // ?? [j]
_) յ h // ?? [j]
_) յ (C h@
յ j

.group ն
ն n
@@ -133,8 +136,8 @@
_) ջ (C dZ@

.group ռ
ռ **
_) ռ (C **@
ռ R2
_) ռ (C R2@

.group ս
ս s
@@ -151,6 +154,7 @@

.group ր
ր r
L02) ր (L02 *
_) ր (C r@
C) ր (_ @r
L02) ր (_ r
@@ -178,7 +182,5 @@
ֆ f
_) ֆ (C f@

.group
$ dol@



+ 2
- 0
dictsource/nl_list View File

@@ -36,6 +36,8 @@ _s Es
_t te:

_cap h'o:fdlEt@r
_sub s'8pskrIpt||
_sup s'yp@rskrIpt||
_?A l'Et@r
_?? s'imbo:l


+ 6
- 6
dictsource/pa_rules View File

@@ -371,12 +371,12 @@
ੱ) ਯ (_ j:

.group ਰ
RV
ਰ (B R
@) ਰ (_ R
ੱ) ਰ R:V
ੱ) ਰ (B R:
ੱ) ਰ (_ R:
rV
ਰ (B r
@) ਰ (_ r
ੱ) ਰ r:V
ੱ) ਰ (B r:
ੱ) ਰ (_ r:

.group ਲ
ਲ lV

+ 18
- 9
dictsource/pt_list View File

@@ -69,6 +69,8 @@ v ve // not Roman numbers
x Sis#

_cap maI'uskulU
_sub ||subskR'itU
_sup ||sob*eskR'itU
_?A l'etR&_
_?? s'imbolU_
_#32 esp'asU
@@ -297,10 +299,10 @@ unts $abbrev
usb $abbrev


dr $dot
dra $dot
mr $dot
mrs $dot
dr dowtor $dot
dra dowt'o*& $dot
mr m'ister $dot
mrs m'irsys $dot
prof pR'Of $dot
profº pR,ofes'or
profª pR,ofes'o*&
@@ -642,6 +644,7 @@ jamais $u+ $verbf
abacaxi abakaSy
abordo $alt
aborto $alt $verb
absorta $alt2
acerto $alt2 $noun
acertos $alt2
acocho $alt2 $noun
@@ -847,7 +850,6 @@ enterro $alt2 $noun
entorto $alt
entroso $alt
envelope $alt
envolto $alt2
enxaqueca $alt2
enxerto $alt2 $noun
epopeia $alt
@@ -941,7 +943,6 @@ hoje $alt2
horrores $alt2
humores $alt2
ideia $alt
imberbe $alt
interesse $alt2
interesse $alt $verb
iodo $alt2
@@ -960,6 +961,7 @@ lepra $alt
leste $alt2 $verb
?2 lhe l^y
lingueta $alt2
lisboeta $alt2
lodo $alt2
logro $alt
lopes $alt
@@ -985,7 +987,6 @@ modelo $alt $verb
moeda $alt
moem $alt
mofo $alt $verb
moleta $alt2
molho $alt2 $noun
monera $alt
morcego $alt2
@@ -994,6 +995,7 @@ moreia $alt
mortos $alt
motora $alt2
mui mwi
muleta $alt2
mureta $alt2
mutreta $alt2
namoro $alt2 $noun
@@ -1091,6 +1093,8 @@ risoto $alt2
rock $alt
roem $alt
rola $alt2 $noun
roleta $alt2
rolete $alt2
rolo $alt2 $noun
rota $alt2
rota $alt $noun
@@ -1148,6 +1152,7 @@ transtorno $alt $verb
traqueia $alt
travesso $alt2
tremores $alt2
treta $alt2
trevo $alt2
troco $alt2 $noun
tropa $alt
@@ -1243,6 +1248,7 @@ python p'aIT&~N
?1 readme r'i:dmi:
?1 sapi s,ap'i
?1 scanner sk'En&r
sky sk'ay
shake S'eIk
?1 shift S'ift
?1 scroll sk:r'ol
@@ -1254,13 +1260,16 @@ símbolo s'imbolU
?4 símbolo s'iNbolU
?2 software s'Oftwe@-
?1 space sp'eIsy
?2 space sp'eIs
?1 sporting sp'Ort,ing
tab t'aby
tablet t'ablet
?1 telemóvel t,El,Em'OvEl
?1 telemóveis t,El,Em'OveIs#
?1 up &p
?1 upload &pl'oud
update &pd'eIt
upgrade &pgR'eId
upload &pl'oud
?2 web w'Eb
?1 yahoo 'i,ah'u
?2 yahoo iah'u
@@ -1275,7 +1284,7 @@ louis _^_FR
// foreign product names
?1 access 'aks,Es
?1 adobe &d'Oby
android &ndR'Oid
android &NdR'Oid
apple 'Epow
chrome kR'owmi
debian d'Ebj&~N

+ 18
- 8
dictsource/pt_rules View File

@@ -214,7 +214,7 @@

i) e (r_ E
@s) e (r_ E
u) e (r_ E
qu) e (r_ E

ib) e (rL04_ E
d) e (rL04_ E
@@ -226,11 +226,10 @@
@s) e (rL04_ E

sp) e (rL04_ E

f) e (rL02_ E

e (quL02_ E
e (rbL04_ E
e (rgL04_ E

e (rsL04_ E
@@ -240,6 +239,7 @@
e (ssL04_ E
e (ss_ E // stress and english words
?2 ection (_ 'EkS&~N
?2 ee (n_ i
e (stL04_ E

e (strL04_ E
@@ -372,6 +372,7 @@
tiv) e (L05_ E // es-
viv) e (L05_ e
_com) e (L05_ e
s_colh) e (res_ E
_cos) e (L05_ e
_pud) e (L05_ E
_coub) e (L05_ E
@@ -424,11 +425,13 @@ _corro) e (L07_ e
_interromp) e (L07_ e
_troux) e (L07_ E
_ens) e (bL03_ E
_enver) e (dL03_ E
_amanc) e (bL03_ E
qu) e (brL04_ E
_cel) e (brL04_ E
_boch) e (chL04_ e
_ex) e (crL04_ E
_on) e (rL04_ E
_ex) e (crL04_ E
_enr) e (dL01_ E
_v) e (dL03_ E
_arr) e (dL03_ E
@@ -472,14 +475,14 @@ _adult) e (rL04_ E
_persev) e (rL04_ E
_recup) e (rL04_ E
_refrig) e (rL04_ E
_v) e (rbL03_ E
_ex) e (rcL02_ E
_ex) e (rcL02_ E
_alic) e (rcL02_ E
_p) e (rdL02_ E
_l) e (rdL03_ E
_h) e (rdL04_ E
_des) e (rdL04_ E
_) e (rgL03_ e
_so) e (rgL03_ e
_re) e (rgL03_ e
_bez) e (rrL03_ e
v) e (rtL03_ e // con- re- in-
@@ -837,7 +840,7 @@ _entorp) e (çL03_ e
?1 f) o (rmulá u // eg: formulário, formulários.
?1 v) o (lt O
o (luem_ o
o (CCuem_ o
o (ssuem_ o
êC) o (CA_ o
êCC) o (CA_ o
ôC) o (CA_ o
@@ -852,7 +855,8 @@ _entorp) e (çL03_ e
óCC) o (CA_ o
úC) o (CA_ o
úCC) o (CA_ o

?2 otion (_ 'owS&~N
//sort
_f) o (L05_ o
_pormen) o (L05_ O
@@ -862,6 +866,7 @@ _pormen) o (L05_ O
_esn) o (bL04_ O
_engl) o (bL04_ O
_sal) o (brL03_ o
_env) o (ltL03_ o
_) o (cL03_ o
_m) o (fL01_ O
_m) o (fL02_ O
@@ -1072,6 +1077,8 @@ _remem) o (rL04_ O
u (a u
g) u (a+ w
q) u (a+ w
u (eC u
u (ei u
r) u (_A u
u (L04_ 'u

@@ -1079,6 +1086,8 @@ _remem) o (rL04_ O
ui (_ 'uI
u (iu w
u (iCK u
u (éC u
u (íC u
uy uI
ul (K uw
u (lh+ u
@@ -1091,6 +1100,7 @@ _remem) o (rL04_ O

g) u (Y
_m) ui (tA_ 'wiN
?2 ution (_ 'uS&~N


.group ú

+ 65
- 39
dictsource/sk_list View File

@@ -69,6 +69,8 @@ _tld s_v'l-novkoU

// character names
_cap vel^ke:
_sub d,olni:||indeks||
_sup h,oRni:||indeks||
_?? simbol
_#9 t'ab
_#32 'medzeRa
@@ -76,7 +78,7 @@ _?A znak

* hviezda $max3
+ plus $max3
= Rovna:sa $max3
= Rovna:||sa $max3
@ zavina:tS
& ampeRsand
# kRi:Zik $max3
@@ -88,64 +90,88 @@ _' apostRof
_( za:tvoRka
_) zatvoRit;
_, tSiaRka
_- poml-tSka
__ podtSiaRknutie
_- spojovn^i:k
__ podtSiaRkovn^i:k
_. bodka
_/ lomeno
_/ lomka
_: dvojbodka
_; bodkotSiaRka
_< menSi:
_> vetSSi:
_> v&tSSi:
_? ota:zn^ik
_[ hRanata:||za:tvoRka
_\ opatSne:||lomeno
_\ opatSna:||lomka
_] hRanata:||zatvoRit;
_^ stRieZka
_^ voka:n^
_` aktsent
_{ zloZena:||za:tvoRka
_| zvisla:||tSiaRa
_} zloZena:||zatvoRit;
_~ vl-novka
_ tvr-da:m'edzeRa // U+00A0 no-break-space
obra:t;eni:v'i:kRitSn^i:k
pReRuSena:'tSiaRa
_ª hoRni:indeks'a:
dvojita:lomena:||za:tvoRka
mekka:poml-tSka
_² nadRuhu:
_³ natRetju
_´ dl:Zen^
_· bodka'vpRostRjedku
_¸ tsedila
_¹ napRvu:
_» dvojita:lomena:||zatvoRit;
_¿ obRa:t;eni:'ota:zn^ik
_– dl-ha:'poml-tSka
_‘ l^ava:'u:vodzovka
_’ prava:'u:vodzovka
_“ horne:'u:vodzovki
_” dolne:'u:vodzovki
_‡ dvojiti:kRi:Z
_• odRa:Zka
_‣ tRojuholni:kova:'odRa:Zka
_ tvr-da:||m'edzeRa // U+00A0 no-break-space
obra:t;eni:||v'i:kRitSn^i:k
pReRuSena:||tSiaRa
_¨ pRehla:ska
dvojita:||lomena:||za:tvoRka
Rozd;el^ovn^i:k
_´ dl:Zen^
_· bodka||v||pRostRjedku
_¸ tsedila
_» dvojita:||lomena:||zatvoRit;
_¿ obRa:t;eni:||ota:zn^ik
_– poml-tSka
_‘ hoRne:||jednoduche:||u:vodzovki
_’ odsuvn^i:k
_“ hoRne:||u:vodzovki
_” dvojita:||hoRna:||opatSna:||u:vodzovka
_„ dolne:||u:vodzovki
_‚ dolne:||jednoduche:||u:vodzovki
_‡ dvojkRi:Z
_• odRa:Zka
_‣ odRa:Zka||tRojuholni:k
_⁃ odRa:Zka||v||tvaRe||poml-tSki
‰ pRomile
€ euRo
§ paRagRaf
÷ d;eleno
× kRa:t
° stupn^ou
¢ tsentou
£ libjeR
¤ znatSkameni
¢ tsent
£ libRa
¤ mena
© kopiRajt
® Registrovane:
¥ jen
− mi:nus
± plus'mi:nus
µ mu:
¼ Stvr-tina
± plus||mi:nus
µ mi:
¼ Stvr-t;ina
½ polovitsa
¾ tri_Stvr-tini
¬ logitske:not
æ a'e:
þ poml-tSkanad
¾ tRi_||Stvr-t;ini
¬ logitski:||za:poR
æ otvoRene:||e:
þ soRn
¯ pRuh||nad
ð ed
ƒ floRe:n
_† kRi:Z
_≈ pRibliZn^e||sa||Rovna:
_≠ n^eRovna:||sa
_≤ menSi:||alebo||sa||Rovna:
_≥ v&tSSi:||alebo||sa||Rovna:
_√ dRuha:||odmotsn^ina
_∛ tRet;ia||odmotsn^ina
_∞ n^ekon^etSno
_■ tSieRni||StvoRets
_□ bieli||StvoRets
_◆ tSieRni||diamant
_○ bieli||kRuh
_● tSieRni||kRuh
_◦ odRa:Zka||v||tvaRe||bielej||bodki
_✓ zaSkr-tnutie
_✔ tutSne:||zaSkr-tnutie
_➔ Si:pka||vpravo
_➢ odRa:Zka||v||tvaRe||Si:pki


// Numbers

+ 1
- 1
dictsource/tr_rules View File

@@ -12,7 +12,6 @@
.L01 ç f h k p q s ş t // unvoiced consonants

.L02 ı a o u // back vowels

.L03 i e ö ü î â ô û // not-back vowels

.replace
@@ -218,6 +217,7 @@
.group r
r R
A) r (A *
ğ) r (A *

ra (_S2 %Ra
re (_S2 %Re

+ 6
- 5
phsource/compile_report View File

@@ -857,7 +857,7 @@ ufric/tl# [tl#] is
[tl#] kl
ufric/tlh [K] nso
[K] tn
ufric/x [x] base
ufric/x_ [x] base
ufric/x2 [x2] af
[x] ku
[Q2] ka
@@ -1013,7 +1013,6 @@ ustop/t_dnt [t] base
[t] hr
ustop/t_dnt2 [t] base2
[d] kn
[t] es
ustop/t_hi [t[] base
[t] et
[t^] et
@@ -1595,6 +1594,7 @@ vowel/@_3 [@#] en
[@3] ur
[@] da
[@] am
vowel/&_3 [&] az
vowel/3_2 [3:] en-n
[@] zh
vowel/3_3 [3:] en-rp
@@ -1651,6 +1651,7 @@ vowel/a# [a] base2
[&] sr
[a#] rw
[a/] rw
[a] az
[a] wo
[a] dv
[a:] dv
@@ -1751,7 +1752,6 @@ vowel/aa [a:] et
[A:] no
[aa] zhy
[a] hy
[a] az
vowel/aa# [O] en-us
[0] en-wi
[a2] fi
@@ -1785,6 +1785,7 @@ vowel/aa_9 [a] fi
[a:] hi
[a] ne
[a] pa
[a] az
[a] ak
[a] mt
[A] kk
@@ -2227,12 +2228,12 @@ vowel/o_mid [U@] en-rp
[o] bg
[o] tr
[o] fa
[o] az
[o] dv
[o:] dv
[o] tt
vowel/o_mid2 [O] fr
[O] ht
[o] az
vowel/oo [o] base
[O:] en-sc
[O] en-wi
@@ -2350,6 +2351,7 @@ vowel/u_2 [u1] fi
[u] is
[u] tr
[u] sl
[u] az
[u] am
[u] wo
vowel/u#_2 [u-] sv
@@ -2364,7 +2366,6 @@ vowel/u_5 [U1] et
[u] vi
[u] sw
[u] nso
[u] az
[u] tn
vowel/u#_5 [y] vi
vowel/u_6 [u] ta

+ 62
- 0
phsource/ph_azerbaijani View File

@@ -0,0 +1,62 @@

phoneme i
vowel starttype #i endtype #i
length 180
FMT(vowel/ii_5)
endphoneme

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

phoneme &
vowel starttype #e endtype #e
length 200
IF thisPh(isWordEnd) THEN
FMT(vowel/&_3)
ENDIF
FMT(vowel/&)
endphoneme

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

phoneme W
vowel starttype #@ endtype #@
length 200
FMT(vowel/y#_2)
endphoneme

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

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

phoneme a
vowel starttype #a endtype #a
length 200
IF thisPh(isWordEnd) THEN
FMT(vowel/a#)
ENDIF
FMT(vowel/aa_9)
endphoneme

phoneme @
vowel starttype #@ endtype #@
ipa ɯ
length 180
FMT(vowel/u#_7)
endphoneme


+ 11
- 11
phsource/ph_base2 View File

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

phoneme a
vowel starttype #a endtype #a
length 180
length 190
IF thisPh(isDiminished) THEN
ChangePhoneme(a/)
FMT(vowel/a#)
@@ -18,28 +18,28 @@ endphoneme

phoneme a/
vowel starttype #@ endtype #@
length 180
length 190
FMT(vowel/a#)
endphoneme


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


phoneme E
vowel starttype #e endtype #e
length 170
length 180
FMT(vowel/ee_1)
endphoneme


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

phoneme o
vowel starttype #o endtype #o
length 170
length 180
FMT(vowel/o)
endphoneme


phoneme O
vowel starttype #o endtype #o
length 170
length 180
FMT(vowel/oo_4)
endphoneme


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


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


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


phoneme Y
vowel starttype #@ endtype #@
length 160
length 180
FMT(vowel/y#)
endphoneme


+ 2
- 12
phsource/ph_spanish View File

@@ -111,22 +111,12 @@ phoneme D
ENDIF
endphoneme

phoneme t // dental variant of /t/
vls dnt stop
voicingswitch d[
lengthmod 2
Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16
Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20

IF nextPh(isPause2) THEN
WAV(ustop/t_dnt2, 35)
ENDIF
WAV(ustop/t_dnt2, 70)

phoneme t // dental variant of /t/
import_phoneme base/t[
endphoneme



phoneme s
vls alv frc sibilant
lengthmod 3

+ 2
- 2
phsource/phonemes View File

@@ -634,7 +634,7 @@ endphoneme


phoneme j
liquid palatal
liquid palatal starttype #i
lengthmod 7

IF nextPhW(isVowel) THEN
@@ -1610,7 +1610,7 @@ phoneme x
Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20

IF nextPh(isPause) THEN
WAV(ufric/x, 110)
WAV(ufric/x_, 60)
ENDIF
WAV(ufric/x_hr, 20)
endphoneme

BIN
phsource/ufric/x_.wav View File


+ 2
- 2
src/compiledict.cpp View File

@@ -700,9 +700,9 @@ static int compile_line(char *linebuf, char *dict_line, int *hash)
ix = utf8_in(&c2,p);
if(c2 == 0)
break;
if(iswupper(c2))
if(iswupper2(c2))
{
utf8_out(towlower(c2),p);
utf8_out(towlower2(c2),p);
}
else
{

+ 29
- 18
src/dictionary.cpp View File

@@ -520,7 +520,7 @@ void DecodePhonemes(const char *inptr, char *outptr)
unsigned short ipa1[96] = {
0x20,0x21,0x22,0x2b0,0x24,0x25,0x0e6,0x2c8,0x28,0x27e,0x2a,0x2b,0x2cc,0x2d,0x2e,0x2f,
0x252,0x31,0x32,0x25c,0x34,0x35,0x36,0x37,0x275,0x39,0x2d0,0x2b2,0x3c,0x3d,0x3e,0x294,
0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x29f,0x271,0x14b,0x254,
0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x26b,0x271,0x14b,0x254,
0x3a6,0x263,0x280,0x283,0x3b8,0x28a,0x28c,0x153,0x3c7,0xf8,0x292,0x32a,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x261,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x303,0x7f
@@ -629,10 +629,13 @@ char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int



void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
{//=========================================================================
/* Can be called after a clause has been translated into phonemes, in order
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode)
{//===============================================================================
/* Called after a clause has been translated into phonemes, in order
to display the clause in phoneme mnemonic form.

phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator
bit 4: 0=eSpeak phoneme names, 1=IPA
*/

int ix;
@@ -645,6 +648,8 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
char *buf;
int count;
int flags;
int use_ipa;
int use_tie;
int separate_phonemes = 0;
char phon_buf[30];
char phon_buf2[30];
@@ -653,15 +658,16 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
static const char *stress_chars = "==,,''";
static const int char_tie[] = {0x0361, 0x200d}; // combining-double-inverted-breve, zero-width-joiner

if(use_ipa >= 4)
use_ipa = phoneme_mode & 0x10;
use_tie = phoneme_mode & 0x0f;

if(use_tie >= 3)
{
// separate individual phonemes with underscores
separate_phonemes = '_';
if(use_ipa == 5)
use_ipa = 0;
else
use_ipa = 1;
use_tie = 0;
}

if(phon_out != NULL)
{
for(ix=1; ix<(n_phoneme_list-2); ix++)
@@ -669,13 +675,19 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
buf = phon_buf;

plist = &phoneme_list[ix];

WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags);
if(plist->newword)
*buf++ = ' ';
else
{
if((separate_phonemes != 0) && (ix > 1))
{
*buf++ = separate_phonemes;
utf8_in(&c, phon_buf2);
if((c < 0x2b0) || (c > 0x36f)) // not if the phoneme starts with a superscript letter
{
*buf++ = separate_phonemes;
}
}
}

@@ -707,17 +719,16 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa)
}

flags = 0;
WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags);
count = 0;
for(p=phon_buf2; *p != 0;)
{
p += utf8_in(&c, p);
if(use_ipa > 1)
if(use_tie > 0)
{
// look for non-inital alphabetic character, but not diacritic, superscript etc.
if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha(c))
if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha2(c))
{
buf += utf8_out(char_tie[use_ipa-2], buf);
buf += utf8_out(char_tie[use_tie-1], buf);
}
}
buf += utf8_out(c, buf);
@@ -923,7 +934,7 @@ int Unpronouncable(Translator *tr, char *word, int posn)
break;
}

if((c != '\'') && !iswalpha(c))
if((c != '\'') && !iswalpha2(c))
return(0);
}

@@ -2102,7 +2113,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_
break;

case RULE_NONALPHA:
if(!iswalpha(letter_w))
if(!iswalpha2(letter_w))
{
add_points = (21-distance_right);
post_ptr += letter_xbytes;
@@ -2346,7 +2357,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_
break;

case RULE_NONALPHA:
if(!iswalpha(letter_w))
if(!iswalpha2(letter_w))
{
add_points = (21-distance_right);
pre_ptr -= letter_xbytes;
@@ -2663,7 +2674,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
if(tr->letter_bits_offset > 0)
{
// not a Latin alphabet, switch to the default Latin alphabet language
if((letter <= 0x241) && iswalpha(letter))
if((letter <= 0x241) && iswalpha2(letter))
{
sprintf(phonemes,"%c%s",phonSWITCH,tr->langopts.ascii_language);
return(0);

+ 1
- 1
src/espeakedit.cpp View File

@@ -632,7 +632,7 @@ void OnOptions2(int event_id)

case MENU_PATH0:
string = wxFileSelector(_T("Master phonemes file"),wxFileName(path_phfile).GetPath(),
_T(""),_T(""),_T("*"),wxOPEN);
_T("phonemes"),_T(""),_T("*"),wxOPEN);
if(!string.IsEmpty())
{
path_phfile = string;

+ 22
- 6
src/extras.cpp View File

@@ -1564,8 +1564,8 @@ void CountWordFreq(wxString path, wcount **hashtab)
for(k=0; k<ix; )
{
k += utf8_in(&wc,&buf[k]);
wc = towlower(wc); // convert to lower case
if(iswalpha(wc))
wc = towlower2(wc); // convert to lower case
if(iswalpha2(wc))
{
j += utf8_out(wc,&wbuf[j]);
n_chars++;
@@ -2324,13 +2324,28 @@ void Make_walpha_tab()
}

fprintf(f, "\nstatic const short wchar_tolower[] = {\n");
exceptions[ex] = 0;
exceptions[ex+1] = 0;
for(ix=0; ix<=ex; ix+=2)

for(ix=0; ix<ex; ix+=2)
{
fprintf(f,"\t0x%.3x, 0x%.3x,\n", exceptions[ix], exceptions[ix+1]);
}
fprintf(f, "};\n");
fprintf(f, "\t0,0 };\n");

fprintf(f, "\nstatic const short wchar_toupper[] = {\n");
for(ix=0x80; ix<=MAX_WALPHA; ix++)
{
if(iswlower(ix))
{
c = towupper(ix);
value = ix - c;
if((value != 32) && (value != 1))
{
fprintf(f,"\t0x%.3x, 0x%.3x,\n", ix, c);
}
}
}
fprintf(f, "\t0,0 };\n");

fclose(f);
}

@@ -2351,6 +2366,7 @@ void TestTest(int control)
//CharsetToUnicode("ISO-8859-4");
//CharsetToUnicode("ISCII");


if(control==2)
{
return;

+ 108
- 5
src/numbers.cpp View File

@@ -602,6 +602,77 @@ int NonAsciiNumber(int letter)
return(-1);
}

#define L_SUB 0x4000 // subscript
#define L_SUP 0x8000 // superscript

static const char *modifiers[] = {NULL, "_sub", "_sup", NULL};

// this list must be in ascending order
static unsigned short derived_letters[] = {
0x00aa, 'a'+L_SUP,
0x00b2, '2'+L_SUP,
0x00b3, '3'+L_SUP,
0x00b9, '1'+L_SUP,
0x00ba, 'o'+L_SUP,
0x02b0, 'h'+L_SUP,
0x02b1, 0x266+L_SUP,
0x02b2, 'j'+L_SUP,
0x02b3, 'r'+L_SUP,
0x02b4, 0x279+L_SUP,
0x02b5, 0x27b+L_SUP,
0x02b6, 0x281+L_SUP,
0x02b7, 'w'+L_SUP,
0x02b8, 'y'+L_SUP,
0x02c0, 0x294+L_SUP,
0x02c1, 0x295+L_SUP,
0x02e0, 0x263+L_SUP,
0x02e1, 'l'+L_SUP,
0x02e2, 's'+L_SUP,
0x02e3, 'x'+L_SUP,
0x2070, '0'+L_SUP,
0x2071, 'i'+L_SUP,
0x2074, '4'+L_SUP,
0x2075, '5'+L_SUP,
0x2076, '6'+L_SUP,
0x2077, '7'+L_SUP,
0x2078, '8'+L_SUP,
0x2079, '9'+L_SUP,
0x207a, '+'+L_SUP,
0x207b, '-'+L_SUP,
0x207c, '='+L_SUP,
0x207d, '('+L_SUP,
0x207e, ')'+L_SUP,
0x207f, 'n'+L_SUP,
0x2080, '0'+L_SUB,
0x2081, '1'+L_SUB,
0x2082, '2'+L_SUB,
0x2083, '3'+L_SUB,
0x2084, '4'+L_SUB,
0x2085, '5'+L_SUB,
0x2086, '6'+L_SUB,
0x2087, '7'+L_SUB,
0x2088, '8'+L_SUB,
0x2089, '9'+L_SUB,
0x208a, '+'+L_SUB,
0x208b, '-'+L_SUB,
0x208c, '='+L_SUB,
0x208d, '('+L_SUB,
0x208e, ')'+L_SUB,
0x2090, 'a'+L_SUB,
0x2091, 'e'+L_SUB,
0x2092, 'o'+L_SUB,
0x2093, 'x'+L_SUB,
0x2094, 0x259+L_SUB,
0x2095, 'h'+L_SUB,
0x2096, 'k'+L_SUB,
0x2097, 'l'+L_SUB,
0x2098, 'm'+L_SUB,
0x2099, 'n'+L_SUB,
0x209a, 'p'+L_SUB,
0x209b, 's'+L_SUB,
0x209c, 't'+L_SUB,
0,0};


static const char *hex_letters[] = {"'e:j","b'i:","s'i:","d'i:","'i:","'ef"}; // names, using phonemes available to all languages

@@ -617,8 +688,10 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
int letter;
int len;
int ix;
int c;
char *p2;
char *pbuf;
const char *modifier;
ALPHABET *alphabet;
int al_offset;
int al_flags;
@@ -626,7 +699,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
int number;
int phontab_1;
int speak_letter_number;
char capital[20];
char capital[30];
char ph_buf[80];
char ph_buf2[80];
char ph_alphabet[80];
@@ -648,13 +721,42 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
if(control & 2)
{
// include CAPITAL information
if(iswupper(letter))
if(iswupper2(letter))
{
Lookup(tr, "_cap", capital);
}
}
letter = towlower2(letter);

// is this a subscript or superscript letter ?
for(ix=0; (c = derived_letters[ix]) != 0; ix+=2)
{
if(c > letter)
break;
if(c == letter)
{
c = derived_letters[ix+1];
letter = c & 0x3fff;
if((modifier = modifiers[c >> 14]) != NULL)
{
Lookup(tr, modifier, capital);
if(capital[0] == 0)
{
capital[2] = SetTranslator2("en"); // overwrites previous contents of translator2
Lookup(translator2, modifier, &capital[3]);
if(capital[3] != 0)
{
capital[0] = phonPAUSE;
capital[1] = phonSWITCH;
len = strlen(&capital[3]);
capital[len+3] = phonSWITCH;
capital[len+4] = phontab_1;
capital[len+5] = 0;
}
}
}
}
}
LookupLetter(tr, letter, word[n_bytes], ph_buf, control & 1);

if(ph_buf[0] == phonSWITCH)
@@ -663,6 +765,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
return(0);
}


if((ph_buf[0] == 0) && ((number = NonAsciiNumber(letter)) > 0))
{
// convert a non-ascii number to 0-9
@@ -794,7 +897,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
speak_letter_number = 1;
if(!(al_flags & AL_NO_SYMBOL))
{
if(iswalpha(letter))
if(iswalpha2(letter))
Lookup(translator, "_?A", ph_buf);

if((ph_buf[0]==0) && !iswspace(letter))
@@ -2244,8 +2347,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' '))
utf8_in(&next_char,p);

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


+ 75
- 14
src/readclause.cpp View File

@@ -260,8 +260,25 @@ static const short wchar_tolower[] = {
0x23d, 0x19a,
0x23e, 0x2c66,
0x243, 0x180,
0x000, 0x000,
};
0,0 };

static const short wchar_toupper[] = {
0x0b5, 0x39c,
0x0df, 0x0df,
0x0ff, 0x178,
0x131, 0x049,
0x17f, 0x053,
0x180, 0x243,
0x195, 0x1f6,
0x19a, 0x23d,
0x19e, 0x220,
0x1bf, 0x1f7,
0x1c6, 0x1c4,
0x1c9, 0x1c7,
0x1cc, 0x1ca,
0x1dd, 0x18e,
0x1f3, 0x1f1,
0,0 };


#ifdef NEED_WCHAR_FUNCTIONS
@@ -317,13 +334,17 @@ int towlower(int c)

int towupper(int c)
{
int ix;
// check whether a previous character code is the upper-case equivalent of this character
if(towlower(c-32) == c)
return(c-32); // yes, use it
if(towlower(c-1) == c)
return(c-1);
if(towlower(c-2) == c)
return(c-2);
for(ix=0; wchar_toupper[ix] != 0; ix+=2)
{
if(wchar_toupper[ix] == c)
return(wchar_toupper[ix+1]);
}
return(c); // no
}

@@ -417,6 +438,28 @@ int iswalpha2(int c)
return(walpha_tab[c-0x80]);
}

int iswlower2(int c)
{
if(c < 0x80)
return(islower(c));
if(c > MAX_WALPHA)
return(iswlower(c));
if(walpha_tab[c-0x80] == 0xff)
return(1);
return(0);
}

int iswupper2(int c)
{
int x;
if(c < 0x80)
return(isupper(c));
if(c > MAX_WALPHA)
return(iswupper(c));
if(((x = walpha_tab[c-0x80]) > 0) && (x < 0xfe))
return(1);
return(0);
}

int towlower2(unsigned int c)
{
@@ -426,7 +469,7 @@ int towlower2(unsigned int c)
// check for non-standard upper to lower case conversions
if(c == 'I')
{
if(translator->translator_name == L('t','r'))
if(translator->langopts.dotless_i)
{
c = 0x131; // I -> ı
}
@@ -453,6 +496,24 @@ int towlower2(unsigned int c)
return(c + x); // convert to lower case
}

int towupper2(unsigned int c)
{
int ix;
if(c > MAX_WALPHA)
return(towupper(c));

// check whether a previous character code is the upper-case equivalent of this character
if(towlower2(c-32) == c)
return(c-32); // yes, use it
if(towlower2(c-1) == c)
return(c-1);
for(ix=0; wchar_toupper[ix] != 0; ix+=2)
{
if(wchar_toupper[ix] == c)
return(wchar_toupper[ix+1]);
}
return(c); // no
}

static int IsRomanU(unsigned int c)
{//================================
@@ -2330,7 +2391,7 @@ f_input = f_in; // for GetC etc
c2 = ' ';
}
else
if((c2 == '/') || iswalpha(c2))
if((c2 == '/') || iswalpha2(c2))
{
// check for space in the output buffer for embedded commands produced by the SSML tag
if(ix > (n_buf - 20))
@@ -2513,10 +2574,10 @@ f_input = f_in; // for GetC etc
}
}

if(iswupper(c1))
if(iswupper2(c1))
{
tr->clause_upper_count++;
if((option_capitals == 2) && (sayas_mode == 0) && !iswupper(cprev))
if((option_capitals == 2) && (sayas_mode == 0) && !iswupper2(cprev))
{
char text_buf[40];
char text_buf2[30];
@@ -2533,7 +2594,7 @@ f_input = f_in; // for GetC etc
}
}
else
if(iswalpha(c1))
if(iswalpha2(c1))
tr->clause_lower_count++;

if(option_phoneme_input)
@@ -2602,8 +2663,8 @@ if(option_ssml) parag=1;

if(!iswspace(c1))
{
if(!IsAlpha(c1) || !iswlower(c1))
// if(iswdigit(c1) || (IsAlpha(c1) && !iswlower(c1)))
if(!IsAlpha(c1) || !iswlower2(c1))
// if(iswdigit(c1) || (IsAlpha(c1) && !iswlower2(c1)))
{
UngetC(c2);
ungot_char2 = c1;
@@ -2702,7 +2763,7 @@ if(option_ssml) parag=1;

if(nl_count==0)
{
if((c1 == ',') && (cprev == '.') && (tr->translator_name == L('h','u')) && iswdigit(cprev2) && (iswdigit(c_next) || (iswlower(c_next))))
if((c1 == ',') && (cprev == '.') && (tr->translator_name == L('h','u')) && iswdigit(cprev2) && (iswdigit(c_next) || (iswlower2(c_next))))
{
// lang=hu, fix for ordinal numbers, eg: "december 2., szerda", ignore ',' after ordinal number
c1 = CHAR_COMMA_BREAK;
@@ -2721,7 +2782,7 @@ if(option_ssml) parag=1;
}
else
{
if (iswlower(c_next) || (c_next=='-')) // hyphen is needed for lang-hu (eg. 2.-kal)
if (iswlower2(c_next) || (c_next=='-')) // hyphen is needed for lang-hu (eg. 2.-kal)
is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag)
}
}
@@ -2730,7 +2791,7 @@ if(option_ssml) parag=1;
{
is_end_clause = 0; // eg. u.s.a.'s
}
if(iswlower(c_next))
if(iswlower2(c_next))
{
// next word has no capital letter, this dot is probably from an abbreviation
// c1 = ' ';

+ 11
- 0
src/speak_lib.cpp View File

@@ -1164,6 +1164,17 @@ ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream)
} // end of espeak_SetPhonemes


ESPEAK_API void espeak_TextToPhonemes(const void *text, char *buffer, int size, int textmode, int phonememode)
{//==============================================================================================================
/* phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator
bit 4: 0=eSpeak phoneme names, 1=IPA
*/
option_multibyte = textmode & 7;
TranslateClause(translator, NULL, text, NULL, NULL);
GetTranslatedPhonemeString(buffer, size, phonememode);
}


ESPEAK_API void espeak_CompileDictionary(const char *path, FILE *log, int flags)
{//=============================================================================
ENTER("espeak_CompileDictionary");

+ 1
- 1
src/synthdata.cpp View File

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

const char *version_string = "1.47.07a 23.Apr.13";
const char *version_string = "1.47.07b 25.Apr.13";
const int version_phdata = 0x014701;

int option_device_number = -1;

+ 3
- 9
src/synthesize.cpp View File

@@ -1953,20 +1953,14 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control)

if((option_phonemes > 0) || (phoneme_callback != NULL))
{
int use_ipa = 0;
int phoneme_mode = 0;
if(option_phonemes >= 3)
use_ipa = option_phonemes-2; // 1=ipa, 2=ipa with tie, 3=ipa with ZWJ, 4=ipa with separators
phoneme_mode = 0x10 + option_phonemes-3; // 0x10=ipa, 0x11=ipa with tie, 0x12=ipa with ZWJ, 0x13=ipa with separators

GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa);
GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), phoneme_mode);
if(option_phonemes > 0)
{
fprintf(f_trans,"%s\n",translator->phon_out);

if(!iswalpha(0x010d))
{
// check that c-caron is recognized as an alphabetic character
fprintf(stderr,"Warning: Accented letters are not recognized, eg: U+010D\nSet LC_CTYPE to a UTF-8 locale\n");
}
}
if(phoneme_callback != NULL)
{

+ 3
- 1
src/tr_languages.cpp View File

@@ -972,7 +972,7 @@ SetLengthMods(tr,3); // all equal
SetLetterBits(tr,LETTERGP_VOWEL2,hy_vowels);
SetLetterBits(tr,LETTERGP_C,hy_consonants);
tr->langopts.max_initial_consonants = 6;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED;
// tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
}
break;
@@ -1290,6 +1290,7 @@ SetLengthMods(tr,3); // all equal
ResetLetterBits(tr,0x2);
SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y
tr->langopts.param[LOPT_ALT] = 2; // call ApplySpecialAttributes2() if a word has $alt or $alt2
tr->langopts.accents = 2; // 'capital' after letter name
}
break;

@@ -1521,6 +1522,7 @@ SetLengthMods(tr,3); // all equal

tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable
tr->langopts.stress_flags = S_NO_AUTO_2; //no automatic secondary stress
tr->langopts.dotless_i = 1;
tr->langopts.param[LOPT_SUFFIX] = 1;

if(name2 == L('a','z'))

+ 15
- 15
src/translate.cpp View File

@@ -624,7 +624,7 @@ int IsAllUpper(const char *word)
while((*word != 0) && !isspace2(*word))
{
word += utf8_in(&c, word);
if(!iswupper(c))
if(!iswupper2(c))
return(0);
}
return(1);
@@ -1053,7 +1053,7 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt
}
}

if((wflags & FLAG_ALL_UPPER) && (word_length > 1)&& iswalpha(first_char))
if((wflags & FLAG_ALL_UPPER) && (word_length > 1)&& iswalpha2(first_char))
{
if((option_tone_flags & OPTION_EMPHASIZE_ALLCAPS) && !(dictionary_flags[0] & FLAG_ABBREV))
{
@@ -1632,7 +1632,7 @@ if(end_type & SUFX_UNPRON)
tr->expect_past--;
}

if((word_length == 1) && (tr->translator_name == L('e','n')) && iswalpha(first_char) && (first_char != 'i'))
if((word_length == 1) && (tr->translator_name == L('e','n')) && iswalpha2(first_char) && (first_char != 'i'))
{
// English Specific !!!!
// any single letter before a dot is an abbreviation, except 'I'
@@ -1908,7 +1908,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
while(*p2 != ' ') p2++;

utf8_in(&c_word2, p2+1); // first character of the next word;
if(!iswalpha(c_word2))
if(!iswalpha2(c_word2))
{
ok =0;
}
@@ -2376,9 +2376,9 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in,

// there is a list of character codes to be substituted with alternative codes

if(iswupper(c_lower = c))
if(iswupper2(c_lower = c))
{
c_lower = towlower(c);
c_lower = towlower2(c);
upper_case = 1;
}

@@ -2392,7 +2392,7 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in,
new_c = replace_chars[ix+1];
break;
}
if((word >> 16) == (unsigned int)towlower(next_in))
if((word >> 16) == (unsigned int)towlower2(next_in))
{
new_c = replace_chars[ix+1];
ignore_next = 1;
@@ -2409,14 +2409,14 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in,
// there is a second character to be inserted
// don't convert the case of the second character unless the next letter is also upper case
c2 = new_c >> 16;
if(upper_case && iswupper(next_in))
c2 = towupper(c2);
if(upper_case && iswupper2(next_in))
c2 = towupper2(c2);
*insert = c2;
new_c &= 0xffff;
}

if(upper_case)
new_c = towupper(new_c);
new_c = towupper2(new_c);

*wordflags |= FLAG_CHAR_REPLACED;
return(new_c);
@@ -2480,7 +2480,7 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c,
// look for 'n and replace by a special character (unicode: schwa)


if(!iswalpha(prev_in))
if(!iswalpha2(prev_in))
{
utf8_in(&next2, &ptr[1]);

@@ -2910,7 +2910,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
else
{
if(iswupper(c))
if(iswupper2(c))
word_flags |= FLAG_FIRST_UPPER;

if((prev_out == ' ') && iswdigit(sbuf[ix-2]) && !iswdigit(prev_in))
@@ -2939,7 +2939,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
}

if(iswupper(c))
if(iswupper2(c))
{
c = towlower2(c);

@@ -2954,7 +2954,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
else
{
if((iswlower(prev_in)) && (prev_in != 0xba)) // Windows thinks masc.ordinal (0xba) is lower-case
if(iswlower2(prev_in))
{
// lower case followed by upper case in a word
if(UpperCaseInWord(tr, &sbuf[ix], c) == 1)
@@ -2970,7 +2970,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
// next_word_flags |= FLAG_NOSPACE; // problem: prevents FLAG_HAS_DOT being set
}
}
else if((c != ' ') && iswupper(prev_in) && iswlower(next_in))
else if((c != ' ') && iswupper2(prev_in) && iswlower2(next_in))
{
int next2_in;
utf8_in(&next2_in,&source[source_index + next_in_nbytes]);

+ 5
- 1
src/translate.h View File

@@ -542,6 +542,7 @@ typedef struct {
char tone_numbers;
char ideographs; // treat as separate words
char textmode; // the meaning of FLAG_TEXTMODE is reversed (to save data when *_list file is compiled)
char dotless_i; // uses letter U+0131
int testing; // testing options: bit 1= specify stressed syllable in the form: "outdoor/2"
int listx; // compile *_listx after *list
const unsigned int *replace_chars; // characters to be substitutes
@@ -715,8 +716,11 @@ int IsAlpha(unsigned int c);
int IsVowel(Translator *tr, int c);
int iswalpha2(int c);
int isspace2(unsigned int c);
int iswlower2(int c);
int iswupper2(int c);
int towlower2(unsigned int c);
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa);
int towupper2(unsigned int c);
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode);
const char *WordToString2(unsigned int word);
ALPHABET *AlphabetFromChar(int c);
ALPHABET *AlphabetFromName(const char *name);

+ 1
- 1
src/transldlg.cpp View File

@@ -460,7 +460,7 @@ void TranslDlg::OnCommand(wxCommandEvent& event)
t_phonetic->SetDefaultStyle(style_phonetic_large);

translate_text = 3;
use_ipa = 1;
use_ipa = 0x10;
break;

case T_PROCESS:

+ 1
- 1
src/voices.cpp View File

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

// which directory to look for a named voice. List of voice names, must end in a space.
static const char *voices_asia =
"bn fa fa-pin hi hy hy-west id ka kn ku ml ms ne pa ta te tr vi vi-hue vi-sgn zh zh-yue ";
"az bn fa fa-pin hi hy hy-west id ka kn ku ml ms ne pa ta te tr vi vi-hue vi-sgn zh zh-yue ";
static const char *voices_europe =
"an bg bs ca cs cy da de el en en-us es et fi fr fr-be ga hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv ";


Loading…
Cancel
Save