Browse Source

[1.46.44]

Added language: ga (Irish).
Languages changes: en-us, eo, hu, pt, ta, vi


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

+ 27
- 14
dictsource/dict_phonemes View File

@@ -68,7 +68,7 @@ r R R3 s S t T tS
v w x z Z


Dictionary hu_dict 2013-02-25
Dictionary hu_dict 2013-03-08

a A a: e E e: i i:
o o: u u: Y y y: Y:
@@ -104,7 +104,7 @@ p Q r R s s; t T
ts v x z


Dictionary en_dict 2013-03-06
Dictionary en_dict 2013-03-08

0 0# 3 3: @ @- @2 @5
@L a a# A: A@ aa aI aI3
@@ -121,7 +121,7 @@ t T t2 tS v w x z
Z z#


Dictionary eo_dict 2013-01-24
Dictionary eo_dict 2013-03-08

@- a aI aU e eI eU i
o oI u uI
@@ -206,7 +206,7 @@ q r r. s S s. t T
t. th th. v w x z


Dictionary ta_dict 2013-03-05
Dictionary ta_dict 2013-03-08

a a: aI aU e E e: i
I i: o o: u U u2 u:
@@ -379,7 +379,7 @@ S s; S; t t; tS ts tS;
ts; v w x z Z Z;


Dictionary pt_dict 2013-03-07
Dictionary pt_dict 2013-03-08

& &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU
@@ -491,7 +491,7 @@ p Q r R s S t tS
v w z Z


Dictionary vi_dict 2013-02-16
Dictionary vi_dict 2013-03-08

@ @: @:I @:U @I @U a a:
a:I a:U aI aU e E eU EU
@@ -603,17 +603,17 @@ N n^ p q R s S S;
t tS v w x z


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

@ a a: aI aU e E e:
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. v
w x z Z z.
: ; 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.
v w x z Z z.


Dictionary bg_dict 2012-07-15
@@ -734,7 +734,7 @@ s s. S; t t. th th. tS
v w z


Dictionary ka_dict 2013-02-01
Dictionary ka_dict 2013-03-08

@ @- a e i o u

@@ -884,3 +884,16 @@ 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


Dictionary ga_dict 2013-03-08

0 0# @ a a# A: aI aI#
aU aU# e E E# e: i I
i: i@ o O O# o: u U
U# u1 u: u@

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

+ 1
- 0
dictsource/en_list View File

@@ -127,6 +127,7 @@ _, k0m@
_- h,aIf@n
?3 _- daS
_. d0t
?3_. pi@rI@d
_: koUl@n
_; sEmIk'oUl@n
_< lEsDan

+ 2
- 2
dictsource/en_rules View File

@@ -3679,8 +3679,8 @@
legged lEgId
// Ab) le @L
C) le (ton_ @L
Ab) ler (_ l@
Ab) le (C_ l@
Ab) ler (_ l3
Ab) le (B_ l@
Ab) led (_ @Ld
&) lem (ent @Lm
&p) lem (ent lIm

+ 159
- 158
dictsource/eo_rules View File

@@ -13,214 +13,215 @@


.group a
_) a(_ a
a a
aj aI
aU
_) a (_ a
a a
aj aI
aU


.group b
_) b(_ bo
b b
_) b (_ bo
b b
.group c
_) c(_ tso
_) ch(_ tSo
c ts
ch (K tS // foreign words
K) ch tS // foreign words
_) c (_ tso
_) ch (_ tSo
c ts
ch (K tS // foreign words
K) ch tS // foreign words
.group d
_) d(_ do
d d
_) d (_ do
d d

_) d (-ro dokt'o
_) d (-rino d,okto
_) d (-ro dokt'o
_) d (-rino d,okto

.group e
_) e(_ e
e e
ej eI
eU
_) e (_ e
e e
ej eI
eU
.group f
_) f(_ fo
f f
_) f (_ fo
f f

_) f (-ino fR%aUl
_) f (-lo fRaU

_) f (-ino fR%aUl
_) f (-lo fRaU
.group g
_) g(_ go
g g
gh (K dZ
_) g (_ go
g g
gh (K dZ
.group h
_) h(_ ho
h h
hh x
_) h (_ ho
h h
hh x
.group i
_) i(_ i
i i
_) i (_ i
i i


.group j
_) j(_ jo
j j
jh (C Z
_) j (_ jo
j j
jh (C Z
.group k
_) k(_ ko
k k
_) k (_ ko
k k

_) k (-do kamaR'a
_) k (-dino k'amaRa
_) k (-ino k'amaRad

_) k (-do kamaR'a
_) k (-dino k'amaRa
_) k (-ino k'amaRad

.group l
_) l(_ lo
l l
ll (_ l
_) l (_ lo
l l
ll (_ l


.group m
_) m(_ mo
m m
_) m (_ mo
m m
.group n
_) n(_ no
n n
n (_S1 n
_) n (_ no
n n
n (_S1 n

_) n (-ro num'e

_) n (-ro num'e

.group o
_) o(_ o
o o
oj oI
-) o (_ %o
-) oj (_ %oI
-) on (_ %on
-X) o (_ %o // d-ro etc
-X) oj (_ %oI
-X) on (_ %on
_) o (_ o
o o
oj oI
-) o (_ %o
-) oj (_ %oI
-) on (_ %on
-X) o (_ %o // d-ro etc
-X) oj (_ %oI
-X) on (_ %on
.group p
_) p(_ po
p p
ph (K f // foreign words
K) ph f // foreign words
_) p (_ po
p p
ph (K f // foreign words
K) ph f // foreign words
.group q
_) q(_ kwo
q k
qu kv
_) q (_ kwo
q k
qu kv
.group r
_) r(_ Ro
r R
A) r (A R
K) r (A @-*
rr RR
_) r (_ Ro
r R
A) r (A R
K) r (A @-*
rr RR

.group s
_) s(_ so
_) sh(_ So
s s
sh (K S // foreign words
K) sh S // foreign words
_) s (_ so
_) sh (_ So
s s
sh (K S // foreign words
K) sh S // foreign words

_) s (-ino s,injoR
_) s (-ro sinj'o

_) s (-ino s,injoR
_) s (-ro sinj'o
_) s (-ano s'am,ide
_) s (-anino s'am,ide

_) s (-ta_ s'ank

_) s (-ano s'am,ide
_) s (-anino s'am,ide

_) s (-ta_ s'ank
.group t
_) t(_ to
t t
th (K T // foreign words
K) th T // foreign words
_) t (_ to
t t
th (K T // foreign words
K) th T // foreign words

-) ta (_ t%a // s-ta = sankta

-) ta (_ t%a // s-ta = sankta
.group u
_) u(_ u
u u
uj uI
_) u (_ u
u u
uj uI
.group v
_) v(_ vo
v v
_) v (_ vo
v v
.group w
_) w(_ du'oblav,o
w w
K) wh w // foreign words
_) w (_ du'oblav,o
w w
K) wh w // foreign words
.group x
_) x(_ ikso
x ks
_) x z // foreign words
_) x (_ ikso
x ks
_) x z // foreign words
.group y
_) y(_ ipsilono
y j
K) y (K i
_) y (_ ipsilono
y j
K) y (K i
.group z
_) z(_ zo
z z
_) z (_ zo
z z
.group
_) ĉ (_ tSo
ĉ tS
_) ĉ (_ tSo
ĉ tS

_) ĝ (_ dZo
ĝ dZ

_) ĝ (_ dZo
ĝ dZ
_) ĥ (_ xo
ĥ x

_) ĥ (_ xo
ĥ x
_) ĵ (_ Zo
ĵ Z

_) ĵ (_ Zo
ĵ Z
_) ŝ (_ So
ŝ S

_) ŝ (_ So
ŝ S
_) ŭ (_ wo
ŭ w

_) ŭ (_ wo
ŭ w
C) ' (_ = // word end in apostrophe, stress the last vowel

'
+ plus_
_) ++ (_ plusplus
'
+ plus_
_) ++ (_ plusplus

. punkto
. (. _:
\.) .
. punkto
. (. _:
\.) .


£ pundo
£ (_D _pundoI_:
__) - (_D minus_
D_) - (_D st@-*ek'eto_
A_) - (_D _
C_) - (_D _
--) -
- minus_
- (_a
$ dolaRo
$ (_D _dolaRoI_:
£ pundo
£ (_D _pundoI_:
__) - (_D minus_
D_) - (_D st@-*ek'eto_
A_) - (_D _
C_) - (_D _
--) -
- minus_
- (_a
$ dolaRo
$ (_D _dolaRoI_:


+ 245
- 0
dictsource/ga_list View File

@@ -0,0 +1,245 @@
// Irish Gaeilge dictionary
// written by Ronan McGuirk
// January 2013
// version 2.5
// This file is UTF8 encoded

// letters
// letter names, as they are spoken as a single character in text
// precede by _ to distinguish from pronunciation as a language word

_a eI
b bi:
c si:
d di:
e i:
f Ef
g dZi:
h eItS
_i aI
j dZeI
k keI
l El
m Em
n En
_o oU
p pi:
q kju:
r ar
s Es
t ti:
u ju:
v vi:
w d'O#b@lju:
x Eks
y waI
z zEd
_á eI||f0d[@
_é i:||f0d[@
_ó o:||f0d[@
_ú ju:||f0d[@
_#32 spA:s


// accent names

// names of symbols
ª_. pO#nk
_, k0m@
_; semI
_: ko:l0n
_! Skre:@x
_? kESt
_' u:sx0m@
. pO#nk
% f@i:nge:@d[


// numbers
_0 @nA:idZ
_1 @h'e:n
_2 @d['o:
_3 @tSR'i:
_4 @k'ah@r
_5 @ku:Ig
_6 @S'e:
_7 @S0xt[
_8 @h'0xt[
_9 @n@@'i:
_1X @dZ'E
_11 e:@nde:@g
_12 d[o:je:@g
_13 tr'i:de:@g
_14 kah@rde:@g
_15 ku:igde:@g
_16 Se:de:@g
_17 S0xtde:@g
_18 O#xtde:@g
_19 ni:de:@g
_20 fICe
_2X fiCE
_3X trO#x@
_31 trO#x@he:@n
_40 d[0C@d
_4X d[0C@d@
_41 d[0C@dahe:@n
_5X k@e:@g@
_51 k@e:@g@he:@n
_6X Sask@
_61 Sask@he:@n
_7X S0xto:
_71 S0xt[o:he:@n
_8X O#Xto:
_81 O#xt[o:he:@n
_9X no:x@
_91 no:x@he:@n
_0C ke:@d[
_1C0 ke:@d[ // exactly one hundred
_1C ke:@d[
_101 ke:@d[@he:@n
_2C ga:Ce:@d[
_3C tri:Ce:@d[
_4C kEr@ke:@d[
_5C ku:igce:@d[
_6C Se:ke:@d[
_7C S0xtge:@d[
_8C O#xtg'e:@d[
_9C ni:ge:@d[
_0M1 mi:lE
_1M1 m'i:lE
_2M1 gA:vi:lE
_2001 gA:vi:lEs@he:@n
_2002 gA:vi:lEs@d['o:
_2003 gA:vi:lEs@tr'i:
_2004 gA:vi:lEs@kah@r
_2005 gA:vi:lEs@ku:ig
_0M2 mIlu:n
_1M2 'milu:n
_2M2 d[A:vIlu:n
_3M2 tri:vilu:n
_4M2 kEr@milu:n
_0M4 _bilu:n
_1M4 'bilu:n
_2M4 gA:vilu:n
_3M4 tri:vilu:n
_4M4 kEr@vilu:n

_0and Is
_dpt pO#nk
//_roman Rom'ano

//delete


// words
a @
abhaile @w'0l;E
ach 0x $u
ag Eg $verbf $u
anall @n'aUl
aige @g'E
air Er
acu 0k'U
ar Er $u
arsa @rs@
agaibh 0g@Iv
agus 0g@s
amach @m'0x
amárach @m'A:r@x
amuigh @mu1'I
amháin @w'A:in
am aUm
an @n
anois @nIS
anonn @naUn
ann aUn
anseo @nS'O
aodh e:
aodha e:
aon e:@n
(ar ais) Er'aS
arís @r'i:S
as 0s
atá @t['A: $u
baill bu1'i:l
bhaill vu1'i:l
beidh bEg
bhfuil w'Il
bhuel w'El
ceithre kEr@
cathair k'0h@r
chathair x'0h@r
clainne kl'InE
chlainne xl'InE
chun xUn $u
crainn kri:n
de dE $u+
des dEs $u

dhaoibh ji:v
di dI $u+
do dO# $u
domhnach d[aUn@x
domhnaigh d[aUnig
eile 'El@
euro ju:ro:
faic f@ak
faide f@Id[E
faigh faIg
feadh fag
fear f'ar
gcathair g0h@r
gan g0n $u
gheall jaUl
(go raibh maith) g@r@m0h
(go raibh míle) g@r@mi:l@
gur gUr $u
i I $u
in In $u
ina In@ $u
ins Ins $u
inniu Inj'u:v
irish _^_EN
is 'Is $u
(is ea) IS'a
isteach IstS'0x
iúl ju:l
laoghaire li:@r@
le lE $u
leí le:i:
(maigh eo) mu1'i:||'o:
(muigheo) mu1'i:||'o:
mhuigh vu1'i:
(mhaigh eo) vu1'i:||'o:
maith m'0
mhaith w'0
mbeadh m;O#X
mo mO# $u
mura mUr@ $u
ná nA: $u
nigh ni:
níorbh ni:rv
nó nu: $u
nollag n@l@g
nolaig nO#lig
Oirghiall 'Err@X@l
orthu O#rhu
os o:s
rabh raU
raibh rEv
réamhrá r'e:@vr,a:
réidh re:
samhain saUIn
san s@n
seo S@_
tabhair t'u:@r
(tiocfaidh ár lá) tSO#ki:|'A:r|l'A:
// temporary fix for NO#DA punctuation
dot pO#nk
comma k0m@
dash flESki:n
tick u:@sx0m@
space spA:s

+ 430
- 0
dictsource/ga_rules View File

@@ -0,0 +1,430 @@
// translation rules for Irish Gaeilge
// This file is UTF-8 encoded
// written by Ronan McGuirk January 2013
// Version 2.5B



.L01 e i é í // slender vowels
.L02 c ch d g gh n s // following ea gets ; sounds
.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
.L07 b c g ch bh gh mb
.L08 lc ll nt bhse // for words like cailc
.L09 cl cr chr f
.L10 c ch p ph gl ghl
.L11 c dh gh the s nn nne nt tiúil tiúla tíochta theoir theora ste steach ll llí llín g gí mse // word endings preceded by ai
.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
.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
.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
.L23 ea eo i
.L24 b mb bh g gh p ph bp m mh
.group a
a 0#
a (_ @
adh (a aI // words like radharc
adh (C aI
abht aU#t[
amhr aUr // words like amhras
K) amhl aUl
abhra aUr@ // 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 @ // words like féach
X) a (nn_ aU#
X) a (ll_ aU#
abha aU@
am (pla aUm
ama(_ aU#m@
athair 'ah@r
_) amh aU
agha aI@
agh (d aI
agh (s aI
_) ath 0h

ai (m_ @
aí i:
aoi @i:
_) aoi i:
ath) aoi (r 'i:@
r) aoi (nín 'e:@
aoicht (_ 'i:@xt[
C) ao (C @e:@
_L24) ao (C w'e:@
C) ao (th_ @e:
b) ao (++ we:@
b) ao (th_++ we:
ao @e
_) ao e:
ae e:
amhna (_ aUn@

.group á
á A:
@) á ,A:
ádh A:
áthair (_ A:h@r
áthar A:h@r
ái (p A:
áinig A:nIg
ái 'A:i
.group ai
ai a#
L04) ai (L17 0#
aile (_ '0l;E // words like baile
Xc) ai (l '0#
ch) ai (l '0#
m) ai (n 0#
c) ai (th 0#
ch) ai (th 0#
ai (d 0#
p) ai (l 0#
@) ai (L11_ I
ai (L08+ aI#
c) ai (l_ I
ai (msi 'aI // words like aimsir
_L04) ai (L18_++ u1'I//words like bain
c) ai (t_ u1'I
s) ai (bh E
aighre aIr@
X) aigh 'aI
aigh aI# L04) aill (_ wi:l
aing (_ Ing
.group b
b b // broad
L01) b b; // slender
b (L22 bj //slender
bh v // broad
bh (_ vv
bh (L22 vj // slender
L01) bh v
_) bhf v /urú broad
_) bhf (L22 v; // urú slender
_) bp b //urú broad
_) bp (L01 b; // urú slender
a) bh (a U// for example cabhair
ear) bha u: // words like Cearbhall
bhfaigh v'aI

.group c
c k
c (L01 k; // slender
ch x
ch (L01 C;
ch (é+ C;
ch (ei+ x;
_) cabhr k'aUr
_) chabhr x'aUr

.group d
d d[ // broad
L01) d dZ // slender
d (L22 dZ //slender
d (L01 d; //slender
i) d (i dZ
dh Q // broad
dh (ui Q //broad
dh (ao Q //broad
dh (L01 j // slender
_) dt d[ //broad urú
_) dt (L01 dZ // slender urú
_) d' (@P2 d
i) dh (_ g
a) dh (_ X
o) dh (_ X
L19) dh (_ // silent dh at wrd end
Va) dh (_+
deartháir dr@h'A:r
dheartháir gr@h'A:r
deirfiúr d;r@f'u:r
dheirfiúr g;r@f'u:r

.group e
e E#
eá A:
ei E
eidh (C aI
r) ei (m aI
eighea aI
eighea aI
eigh aI
eo o:
eogh o:
d) eo (ch O#
_) eo (ch O#
s) eo (_ @

.group é
é 'e:
éi 'e:
_) éi (rig aI // words like éirigh
_) éi (rí aI // words like éirí
_) éireoidh aIro:Ig
éacs e:@ks
.group ea
ea a#
X) ea (L21_ aU
ea (ltaine aU
g) ea (ll aU
X) ea (ch 0
_L04) ea (g @
_L04) ea (dh_ @
_L04) eagn @gn
L04) eaga (_ @g@
eaghl aIl
eabhra aUr@ // words like Feabhra
eanbhean 'an@v,an
eadhb aIb

.group f
f f // broad
f (L22 f; // slender
fh //silent
fh (éin_ h
fh (L22 ; //slender
@) f (L06_ h

.group g
g g // broad
g (L01 g; // slender
_) gh Q"
_) gh (L01 Q"j
_) gc g // urú broad
_) gc (L01 g; // urú slender
i) gh (_ g
@C) gh (@ X
_) gn g@n
gh(n X@
gheobh j'o:
gabh gaU
.group h
h h // silent

.group i
i I
_) i I
ia i@
ia (tha i:
io O#
_) io (nadh u:// words like ionadh
_pr) io (n u:
L16) inn (_ i:n
iai i:i
impeall i:mp@l
io (s I //words like fios and liosta
L12) i i // non syllabic short i after long vowel
iú u:
m) i (d_ i: // verb ending
.group k
k k

.group l
l l // broad
L01) l ( l; // slender
l (L23 l; //slender
ll l
ll (L23 l;
l (g l@
l (b l@
.group m
m m // broad
m (L20 m; //slender
mh v
mh (L20 v; // slender
_) mb m //urú
_) mb (L22 m; // urú slender
_) m (n m@// words like mná
L14) mh v
_) mh (n v@
léir) mheas vas
r) m @m // words like gorm

.group n
n n // broad
n (L01 n; // slender
_) nd n // urú
_) nd (L01 n; // urú slender
nn n
nn (L01 n; // slender
n (b n@
n (m n@
n (bh n@ n(ch n@
c) n @n
ch) n @n
.group o
o O#
_) o 'O
C) o (cht_ 'O
orn (_ 'Or@n

_C) omh o:
_CC) omh o:
omha o:@
omhai o:@
o (ll_ aU
C) o (nn_ aU
r) o (nn_ O#
C) ogh aU
omhan(_ aU@n
omhain (_ aUIn
odha aU
opaic @pIk
C) odh (_ o:
odl (a O#l
oí i:

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

.group oi
oi O
_L15) oi (+ @'I
_) oi (b I
oi (de I
h) oi (b I
_) oi (r I
r) oi I
l) oi (n I
f) oi (lC aI
l) oi (g I
fh) oi (lC aI
s) oi (ls aI#
c) oi (c aI#
oi (nnío @
oi (mis @
ois (++ O#S
oill w'i:l
_) oi (leá 'I
oidh aI
oir (_ 'ERR
oigh (ea aI
.group p
p p // broad
ph f //broad
p (L22 p; //slender
ph (L20 f; // slender

.group q
q k
qu k

.group r
r r // broad
L01) r R // slender
_) r (L01 R
L12i) r (e_ Z
L12i) r (t_ Z
rr R
rg r@g
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
s (L01 S // slender
s (cL01 S
s (CCL01 S // slender
s (pCé s // broad
sh h
sh (CL01 h
sh (L01 h;
s (lL01 S

.group t
t t[ // broad
L01) t c // slender
t (í++n tS //slender
t (eo++ tS
t (L01 c // slender
L01C) t tS //slender after consonant
t (CL01 tS // slender with following consonant before vowels
th h
th (L01 h;
L01C) th h
_) ts t[ //eclipsis broad
_) ts (L01 t; // eclipsis slender
L01) th h
taine (_ t[In%E
ao) th (_
thne (_ h@nE
A) th (_ // silent th at word end

.group u
u U#
ua u@
uai u@
uai (g ui
uai (d ui
uá u:'A:
ui I
uinn (_ 'i:n
uinti U#'i:ntI
_b) uí wi:
_bh) uí wi:
g) uí wi:
umh u:
L03) ui @I
_d) u (l_ O#
g) ui (gh_ @i:
gh) ui (gh_ @i:
uí i:
uachai 'ux@
.group ú
ú u:
únmh u:nv

úi (r u:
.group j
j dZ
.group q
q k
qu (A kw

.group v
v v
.group w
w w
.group x
x ks
_) x z
.group y
y (A j
_A) y j
y i
.group z
z z

.group
í 'i:


+ 69
- 9
dictsource/hu_rules View File

@@ -173,6 +173,8 @@ nyargon) c (cs ts
udvaron) c (ser ts
pere) c (cs ts
licen) ccs ts|tS
nyol) c (csat ts
pokró) c (sá ts

.group ch
anar) ch (i h
@@ -452,6 +454,11 @@ szomszé) d (sor d
herná) d (sz d
szaba) d (szent d
for) d (jános d
egye) d (szám d
shetlan) d (szige d
szaba) d (szem d
_tren) dsz (e d|s
vakon) d (sz d

.group dz
fogó) dz (kod ts
@@ -502,6 +509,7 @@ kapáló) dz z
gyűrű) dz (ik z
burkoló) dz z


.group e
e E
000_-) el (_ REl // double R for 1000-el
@@ -630,6 +638,12 @@ szentsé) g (gy g
világossá) g (gy g
vilá) g (gy g
virá) g (gy g
csilla) g (gy g
édessé) g (gy g
ge) g (gyár g
han) g (gy g
hazugsá) g (gy g
tőze) g (gy g

.group gy
gy J
@@ -1005,7 +1019,8 @@ szivárvá) ny (játsz n^
utá) n (nyom n
verse) ny (játék n^
_elle) n (jav n
vagyo) n (jog n
vagyo) n (jog n
nny (elv n|n^

.group o
o o
@@ -1064,7 +1079,7 @@ vagyo) n (jog n
s S
s (-sz s: //if have the - character the next word part beginning with sz, always need spokening s: phoneme
s-) sz //but not need spokening second sz phoneme
dns-) sz s
dns-) sz s
föld) s (ánc S
?1 hel) s (inki z
ki) s (ebb SS
@@ -1146,6 +1161,7 @@ _tetszé) s S
ki) s (sziget S
ki) s (szőlő S
körö) s (szeg S
kolbászo) s S

.group ss
ssz ss2
@@ -1640,9 +1656,47 @@ _kemene) ssz Ss
_szamo) ssz Ss
_szilvá) ssz Ss
_vámo) ssz Ss
keresé) ssz Ss
cipő) ssz Ss
szorongá) ssz Ss
keresé) ssz Ss
cipő) ssz Ss
szorongá) ssz Ss
alkalmazá) ssz Ss
kezdé) ssz Ss
edzé) ssz Ss
egye) ssz (ám Ss
felsorolá) ssz Ss
ssz (ürk Ss
ssz (őke Ss
formán) ssz (int Ss
hami) ssz (ín Ss
mászá) ssz (erű Ss
hárma) ssz Ss
hívá) ssz Ss
hivatkozá) ssz Ss
leve) ssz Ss
_hú) ssz (öv Ss
ismétlé) ssz Ss
járá) ssz Ss
kattintá) ssz Ss
_ki) ssz (öv Ss
közlekedé) ssz Ss
laká) ssz Ss
légzé) ssz Ss
_le) ssz (ab Ss
meglepeté) ssz Ss
nyila) ssz Ss
pszichológu) ssz Ss
ráko) ssz Ss
ritmu) ssz Ss
rúzso) ssz Ss
stílu) ssz Ss
víru) ssz Ss
szállodá) ssz Ss
taxi) ssz Ss
ugrá) ssz Ss
üstökö) ssz Ss
visszaélé) ssz Ss
esé) ssz (erű Ss
webe) ssz Ss

.group sz
sz s
@@ -1699,6 +1753,10 @@ fáklyá) sz (ene Sz
para) szts (üte st|S
para) sztsz (ag st|s
para) szts (uhan st|S
sz (avar S|z
pénze) sz (k s
ellenállá) sz (ón Sz
ré) sz (árás Sz

.group t
t t
@@ -1842,7 +1900,7 @@ szögle) t (szob t
vizi) t (szob t
zár) t (szék t
szé) t (szortír t
_robo) t (szoftve t
_robo) t (szoftve t

.group tj
C) tj c
@@ -1929,7 +1987,7 @@ természe) tj (og tj
_tisztele) tj (el tj
zené) tj (átsz tj
szen) tj (akab tj
közérze) tj (aví tj
közérze) tj (aví tj

.group ts
ts (_S2 tS //general rule with word end of ts letters
@@ -2144,8 +2202,8 @@ felira) ts (áv t|S
pö) tsz (en ts:
_á) tsz (orult t|s
leme) tsz (vén ts
_cha) tsz (ob t|s
robo) ts (of t|S
_cha) tsz (ob t|s
robo) ts (of t|S

.group tt
tt t:
@@ -2411,6 +2469,8 @@ csatlako) z (tok s
tí) z (sáv z
_tí) z (shill z
topá) z z
dör) zsz (ör Z|z
raj) z (sabl z

.group
$ dolla:R2

+ 8
- 8
dictsource/ka_rules View File

@@ -139,14 +139,14 @@

// For cyrillic characters (U+0400 to U+04FF) use Russian voice
.group 0xd0
0xd0 _^_RU
.group 0xd1
0xd1 _^_RU
.group 0xd2
0xd2 _^_RU
.group 0xd3
0xd3 _^_RU
//.group 0xd0
// 0xd0 _^_RU
//.group 0xd1
// 0xd1 _^_RU
//.group 0xd2
// 0xd2 _^_RU
//.group 0xd3
// 0xd3 _^_RU

.group
$ dolari

+ 2
- 2
dictsource/pt_list View File

@@ -651,7 +651,6 @@ antonieta $alt2
apego $alt2 $noun
apelo $alt $verb
aposto $alt $verb
apreço $alt2
aperto $alt2 $noun
apoio $alt $verb
aprovo $alt
@@ -713,6 +712,7 @@ choro $alt2 $noun
chovesse $alt2
chupeta $alt2
clamores $alt2
clero $alt
coco $alt2
cofre $alt
cogumelo $alt
@@ -910,6 +910,7 @@ palacete $alt2
palheta $alt2
panfleto $alt2
pangeia $alt
panqueca p,&~Nk'Ek&
pantera $alt
paralelo $alt
parede $alt2
@@ -932,7 +933,6 @@ portos $alt
pose $alt2
povos $alt
poxa p'oS&
preço $alt2
primavera $alt
provo $alt
quarteto $alt2

+ 9
- 1
dictsource/pt_rules View File

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

// Options
@@ -365,6 +366,8 @@ _compreend) e (L06_ e
_entend) e (L06_ e
_estend) e (L06_ e
respond) e (L06_ e // cor-
_enraivec) e (L07_ e
_espairec) e (L07_ e
bat) e (L07_ e // re- com-
ced) e (L07_ e // pro- con- su-
met) e (L07_ e // co- pro- arre- re- intro- compro- sub-
@@ -416,7 +419,9 @@ entend) e (L07_ e
preend) e (L07_ e // sur- com-
respond) e (L07_ e // cor-
qu) e (brL04_ E
acel) e (rL04_ E / des-
_hosp) e (dL03_ E
_in) e (ptL03_ E
_gr) e (gL03_ e
_n) e (grL03_ e
_estr) ei (L03_ EI
@@ -449,6 +454,7 @@ respond) e (L07_ e // cor-
_bez) e (rrL03_ e
_inv) e (rtL03_ e
_f) e (rvL03_ e
_enraiv) e (çL03_ e
_p) e (sL01_ E
_d) e (scL02_ E
_cr) e (scL02_ E
@@ -485,8 +491,10 @@ _emagr) e (çL03
conh) e (çL03_ e // re-
_esqu) e (çL03_ e
_forn) e (çL03_ e
_obed) e (çL03_ e
obed) e (çL03_ e / des-
_ofer) e (çL03_ e
pr) e (çL03_ e / a-
_espair) e (çL03_ e
abast) e (çL03_ e // re-
_aborr) e (çL03_ e
_agrad) e (çL03_ e

+ 6
- 0
dictsource/ta_rules View File

@@ -1015,6 +1015,7 @@ _தணிகா) ச (ல tSV
_) ச (வான tSV
_) ச (ாக்கட்டி tS
_) சாக்ப (ீL04 tSa:kp
_) சாக்லெட் tSa:klet.
_) சாக்லேட் tSa:kle:t.
_) சா (ட்டர்ஜி tSe:
_) ச (ாணக்கிய tS
@@ -1048,12 +1049,14 @@ _தணிகா) ச (ல tSV
ஆ) ச (ாரங்கள tS
ஆ) ச (ாரத் tS
ஆ) ச (ாரம tS
_சிவா) ச (ாரி tS
_ரங்கா) ச (ாரி tS
_வரதா) ச (ாரி tS
_வேதா) ச (ாரி tS
_கிருஷ்ணமா) ச (ாரி tS
_தேசிகா) ச (ாரி tS
_பட்டா) ச (ாரி tS
_மத்வா) ச (ாரி tS
அனந்தா) ச (ாரி tS
அன்னமா) ச (ாரி tS
ஆ) ச (ாரிய_ tS
@@ -2406,6 +2409,7 @@ _சி) த்ரலேக (ா trVle:k
_) ப (ட்டக்ஸ bV
_) ப (ட்டன bV
_) ப (ட்டன_ pV
_) ப (ட்டாசாரி bV
_) ப (தில bV
_) பத்த (ிரகாளி bVdd
_) பத்திரப் (_ bVttirVp
@@ -2814,6 +2818,7 @@ _விளையாடு_) ப (ாம்பே p
_) ப (ிடில f
_) ப (ிட்சு b
_) ப (ிட்டடி b
_) பிந்தி (ரன்வாலே bind
_) ப (ினாமி b
_) ப (ினிஷ f
_) ப (ின்_லேடன b
@@ -3744,6 +3749,7 @@ _ஞானப்) பிரக (ா prVk
_மL06ாப்) பி (ரப p
வீண்) பி (ரமை b
துஷ்) பி (ரயோக p
_சொற்) பி (ரயோக p
L03ந்தப்) பி (ரளய p
_சொற்) பி (ரவாக p
எக்ஸ்) பிர (ஸ pre

+ 243
- 56
dictsource/vi_rules View File

@@ -77,28 +77,42 @@ ỵ ỵ
//================================
// Consonants
//================================
.L01 t c ne nd k x s nt ch th me te le ce ny ry e o u re nch de p pe ph sh v ve
.L02 n
.group b
b b
_) b _b
//b($w_alt2 _^_EN
.group c
c g //k
c (_ kh
ch c // try [tS;] [tS] [c]
ce (_ _^_EN
_) cl _^_EN
.group d
d J^ // try [z] [J] [dZ] [dZ;] [J^]
d (_ _^_EN
.group đ
đ d
_) đ _d
.group f
f f
//f f
_) f _^_EN
f (_ _^_EN
.group g
g Q // try [g] [Q]
gh Q // or [g] [Q]
@@ -107,7 +121,7 @@ ỵ ỵ
//g (í J^
//g (ỉ J^
//g (ĩ J^
//g (ị J^
//g (ị J^
gi J^
?1 giết J^'iE3g
giết J^'iE3t[
@@ -115,25 +129,35 @@ ỵ ỵ
?1 giệt J^'iE6g
giệt J^'iE6t[
giệc J^'iE6kh
_) gol _^_EN
_) gat _^_EN
ght (_ _^_EN
.group h
h h
.group j
j Z
.group k
k k
k (_ kh
//k (_ kh
kh x
k (_ _^_EN
.group l
l l
l (_ _^_EN
le (_ _^_EN
.group m
m m
.group n
n n
@@ -141,49 +165,75 @@ ỵ ỵ
ng N
ngh N
nh n^
nd (_ _^_EN
.group ñ
ñ n^
.group p
p p
ph f
.group q
q k
q (_ kh
qu w //kw
.group r
r z. // try [z] [z.] [r] [z;]
r (_ _^_EN
rm (_ _^_EN
.group s
s s. // try [s.] [s] [S]
_) sh _^_EN
s (_ _^_EN
st (_ _^_EN
se (_ _^_EN
.group t
t t[
?1 t (_ g
th t
tr cr // try [cr] [tr] [tS;] [tS] [c] [dZ] [dz;]
ts (_ _^_EN
te (_ _^_EN
th (_ _^_EN
tt (_ _^_EN
.group v
v v
ve (_ _^_EN
.group w
w w
_) w _^_EN
w (_ _^_EN
.group x
x s
x (_ _^_EN
.group z
z z
z (_ _^_EN
//================================
// Vowels
//================================
.group a
a a:
@@ -211,92 +261,122 @@ ỵ ỵ
aủ aU4
aũ aU5
aụ aU6
a (L01 _^_EN
ai (L02 _^_EN
.group à
à a:2
ài a:I2
ày aI2
ào a:U2
àu aU2
.group á
á a:3
ái a:I3
áy aI3
áo a:U3
áu aU3
.group ả
ả a:4
ải a:I4
ảy aI4
ảo a:U4
ảu aU4
.group ã
ã a:5
ãi a:I5
ãy aI5
ão a:U5
ãu aU5
.group ạ
ạ a:6
ại a:I6
ạy aI6
ạo a:U6
ạu aU6
//================================
.group ă
ă a
.group ằ
ằ a2
.group ắ
ắ a3
.group ẳ
ẳ a4
.group ẵ
ẵ a5
.group ặ
ặ a6
//=================================
.group â
â @
ây @I
âu @U1
âu @U1
.group ầ
ầ @2
ầy @I2
ầu @U2
.group ấ
ấ @3
ấy @I3
ấu @U3
.group ẩ
ẩ @4
ẩy @I4
ẩu @U4
.group ẫ
ẫ @5
ẫy @I5
ẫu @U5
.group ậ
ậ @6
ậy @I6
ậu @U6
//===========================
.group e
e E
@@ -306,56 +386,78 @@ ỵ ỵ
eỏ EU4
eỗ EU5
eọ EU6
e (L01 _^_EN
ey (_ _^_EN
.group è
è E2
èo EU2
.group é
é E3
éo EU3
.group ẻ
ẻ E4
ẻo EU4
.group ẽ
ẽ E5
ẽo EU5
.group ẹ
ẹ E6
ẹo EU6
//============================
.group ê
ê e
êu eU1
.group ề
ề e2
ều eU2
.group ế
ế e3
ếu eU3
.group ể
ể e4
ểu eU4
.group ễ
ễ e5
ễu eU5
.group ệ
ệ e6
ệu eU6
//============================
.group i
i i
i (A j
@@ -383,40 +485,46 @@ ỵ ỵ
iểu iU4
iễu iU5
iệu iU6
i (L01 _^_EN
.group ì
ì i2
ì (A j2
ìa i@2
ìu iU2
.group í
í i3
í (A j3
ía i@3
íu iU3
.group ỉ
ỉ i4
ỉ (A j4
ỉa i@4
ỉu iU4
.group ĩ
ĩ i5
ĩ (A j5
ĩa i@5
ĩu iU5
.group ị
ị i6
ị (A j6
ịa i@6
ịu iU6
//=========================
.group o
o O
oa o@ // modify oa sound example: hoa,khoa // o (A w
@@ -428,13 +536,17 @@ ỵ ỵ
oị OI6
ong O#
oe o& // Adding oe sound example: lóe sáng,toét mắt
o (L01 _^_EN
.group ò
ò O2
òi OI2
òa o@2 //ò (A w2
òng O#2
òe o&2
.group ó
ó O3
@@ -442,6 +554,8 @@ ỵ ỵ
óa o@3 //ó (A w3
óng O#3
óe o&3
.group ỏ
ỏ O4
@@ -449,6 +563,8 @@ ỵ ỵ
ỏa o@4 //ỏ (A w4
ỏng O#4
ỏe o&4
.group õ
õ O5
@@ -456,6 +572,8 @@ ỵ ỵ
õa o@5 //õ (A w5
õng O#5
õe o&5
.group ọ
ọ O6
@@ -463,75 +581,98 @@ ỵ ỵ
ọa o@6 //ọ (A w6
ọng O#6
ọe o&6
//=============================
.group ô
ô o
ôi oI
ông o# // ông sound
.group ồ
ồ o2
ồi oI2
ồng o#2
.group ố
ố o3
ối oI3
ống o#3
.group ổ
ổ o4
ổi oI4
ổng o#4
.group ỗ
ỗ o5
ỗi oI5
ỗng o#5
.group ộ
ộ o6
ội oI6
ộng o#6
//=============================
.group ơ
ơ @:
ơi @:I
ơu @:U
.group ờ
ờ @:2
ời @:I2
ờu @:U2
.group ớ
ớ @:3
ới @:I3
ớu @:U3
.group ở
ở @:4
ởi @:I4
ởu @:U4
.group ỡ
ỡ @:5
ỡi @:I5
ỡu @:U5
.group ợ
ợ @:6
ợi @:I6
ợu @:U6
//=============================
.group u
u u
u (A w
@@ -561,12 +702,19 @@ ỵ ỵ
uỗi u@j5
uội u@j6
//ung u#
u (L01 _^_EN
ui (L01 _^_EN
ua (L01 _^_EN
.group ù
ù u2
ù (A w2
ùi uI2
ùa u@2
//ùng u#2
.group ú
ú u3
@@ -574,6 +722,8 @@ ỵ ỵ
úi uI3
úa u@3
//úng u#3
.group ủ
ủ u4
@@ -581,6 +731,8 @@ ỵ ỵ
ủi uI4
ủa u@4
//ủng u#4
.group ũ
ũ u5
@@ -588,6 +740,8 @@ ỵ ỵ
ũi uI5
ũa u@5
//ũng u#5
.group ụ
ụ u6
@@ -595,8 +749,10 @@ ỵ ỵ
ụi uI6
ụa u@6
//ụng u#6
//=============================
.group ư
ư y
ưi yI
@@ -620,38 +776,49 @@ ỵ ỵ
ưởu y@w4
ưỡu y@w5
ượu y@w6
.group ừ
ừ y2
ừi yI2
ừa y@2
ừu yw2
.group ứ
ứ y3
ứi yI3
ứa y@3
ứu yw3
.group ử
ử y4
ửi yI4
ửa y@4
ửu yw4
.group ữ
ữ y5
ữi yI5
ữa y@5
ữu yw5
.group ự
ự y6
ựi yI6
ựa y@6
ựu yw6
//=============================
.group y
y i
@@ -669,35 +836,49 @@ ỵ ỵ
yễ i@5
yệ i@6
// yêu i@U
.group ỳ
ỳ i2
ỳ (A j2
ỳa i@2
.group ý
ý i3
ý (A j3
ýa i@3
.group ỷ
ỷ i4
ỷ (A j4
ỷa i@4
.group ỹ
ỹ i5
ỹ (A j5
ỹa i@5
.group ỵ
ỵ i6
ỵ (A j6
ỵa i@6
//=============================
.group 0xce // Greek letters
// 0xce is the first byte of the utf-8 code for these characters
α a:1n_|f'a:1
ά a:1n_|f'a:1
β b'e1_|t['a:1
@@ -717,9 +898,12 @@ ỵ ỵ
ν nw'i1
ξ s'i7
ο o1_|m'i1_|kz.'O7n
.group 0xcf // Greek letters
π p'i1
ρ z.'o1
σ s'i3c_|m'a:1
@@ -733,26 +917,29 @@ ỵ ỵ
ω o1_|m'e1_|Q'a:7
ώ o1_|m'e1_|Q'a:7
ό o1_|m'i1_|kz.'O7n
.group
% f'@2n||cr'am
! _:c'@3m_|t'a:7n_:
! (\!
! (\!
// : koUl@n
D_) h (_DD_ D'@:2 // omit colon in time, eg: 2:30
$ d'o||l'a
!= x'o#_|_b'a2N_
>= l'@:3n_|h'@:1n_|hw,a6kh_b'a2N
<= n^'O4_|h'@:1n_|hw,a6kh_b'a2N
__) - (_D cr'y2
A_) - (_D _
C_) - (_D _
. c'@3m_
. (. _:
\.) .
\.) .

+ 35
- 19
phsource/compile_report View File

@@ -65,7 +65,7 @@ consonants 10 118
sq 33 127
hy 23 119
da 46 139
ka 20 114
ka 20 115
rw 15 132
pa 15 152
prs 8 113
@@ -85,7 +85,7 @@ consonants 10 118
bo 10 154
kk 20 118
fa 9 112
ga 21 127
ga 29 133
tt 23 120
ko 15 116
kl 18 119
@@ -332,13 +332,21 @@ h/hu [h] base
h/hu_fi [h] fi
[h] mt
j2/_j2 [;] base
[;] ga
j2/j2@ [;] base
[;] ga
j2/j2a [;] base
[;] ga
j2/j2e [;] base
[;] ga
j2/j2i [;] base
[;] ga
j2/j2o [;] base
[;] ga
j2/j2u [;] base
[;] ga
j2/xj2 [;] base
[;] ga
j/_j [j] base
[j] zh
[j] da
@@ -442,7 +450,7 @@ l/l_ [l] base
[l/] fr
l/l_@ [l/3] base
[l/] fr
l/l@ [¨-] base
l/l@ [¨\7] base
[l#] base
[l] fr
[l/2] fr
@@ -476,7 +484,7 @@ l/L2_oL [l/2] base
l/L2_uL [l/2] base
l/l_3 [l/] de
l/l_4 [ll] sq
l/la [¨-] base
l/la [¨\7] base
[l#] base
[l] fr
[l/2] fr
@@ -484,7 +492,7 @@ l/la [
[K] tn
l/l_a [l/3] base
[l/] fr
l/le [¨-] base
l/le [¨\7] base
[l#] base
[l] fr
[l/2] fr
@@ -496,7 +504,7 @@ l/L_eL_af [&] af
[&:] af
l/l_front [L] sq
l/l_front_ [l/4] sq
l/li [¨-] base
l/li [¨\7] base
[l#] base
[l] fr
[l/2] fr
@@ -510,7 +518,7 @@ ll/ll [L] base
ll/_ll [L] base
l/l_long [l] base
[l] fr
l/lo [¨-] base
l/lo [¨\7] base
[l#] base
[l/2] fr
[K] nso
@@ -521,7 +529,7 @@ l^/l_rfx [l.] base
[l;] lt
[l] ru
[l^] ru
l/lu [¨-] base
l/lu [¨\7] base
[l#] base
[l] fr
[l/2] fr
@@ -841,6 +849,7 @@ ufric/tlh [K] nso
ufric/x [x] base
ufric/x2 [x2] af
[x] ku
[Q2] ka
[X] kk
ufric/x_hr [x] base
[x] hr
@@ -849,6 +858,7 @@ ufric/x_sr [h#] sr
[x#] sr
ufric/xx [X] base
[Q"] base
[Q] ka
ustop/c [c] base
ustop/k [k] base
[k] fr
@@ -862,9 +872,12 @@ ustop/k_ [k] base
ustop/k_asp [kh] consonants
[gh] hi
[kh] zh
[k#] ka
[kh] tn
ustop/k_asp2 [kh2] ml
[k#] ka
ustop/k_asp_a [k#] ka
ustop/k_asp_e [k#] ka
ustop/k_asp_u [k#] ka
ustop/k_ejc [k`] am
ustop/ki [k] base
[k] base2
@@ -887,7 +900,6 @@ ustop/kl [k] base
[k] lv
[k] el
[k] zhy
[k#] ka
[kh] tn
ustop/kr [k] base
[k] base2
@@ -953,8 +965,6 @@ ustop/p_unasp_ [p-] consonants
[p] vi
[p] sq
ustop/q [q] base
ustop/q2 [q] ka
ustop/q2_i [q] ka
ustop/q_u [q] base
ustop/t [t] base
[t] en-us
@@ -1179,6 +1189,7 @@ vdiph/ai [aI] base2
[aI] hy
[aI] da
[aI] te
[aI] ga
[aI] kl
vdiph/ai_2 [aI] en
[aI] cy
@@ -1213,6 +1224,8 @@ vdiph/au_4 [aU] base2
[aU] lt
[aU] sk
[aU] id
[aU] ga
[aU#] ga
vdiph/ee-e [E:] hi
vdiph/eei [EI] base2
[eI] en
@@ -1266,7 +1279,6 @@ vdiph/eu_2 [eu] fi
vdiph/@i [Yi] et
[@I] vi
[@:I] vi
[@I] ga
vdiph/&i [&i] fi
[&i] et
[aI] hi
@@ -1422,6 +1434,8 @@ voc/dh_ [D] base
voc/j [J^] base
voc/Q [Q] base
[Q^] base
[Q] ka
[Q2] ka
voc/Q_ [Q] base
[Q^] base
[Q] nl
@@ -1500,11 +1514,7 @@ vowel/@ [@] base
[@] wo
[@:] wo
[@] te
[@] ga
[E#] ga
[I#] ga
[O#] ga
[U#] ga
[@/] ga
vowel/@- [@-] base
[r*] hr
[@-] da
@@ -1654,6 +1664,7 @@ vowel/a_3 [a] en-sc
[a] sq
[A] da
[?A] da
[a] ka
[a:] si
vowel/a#_3 [a#] en
[a#] en-n
@@ -1733,6 +1744,7 @@ vowel/aa_8 [0] en-us
[A1] et
[A] nl
[a:] is
[0] ga
[A] tt
[a] ko
vowel/aa_9 [a] fi
@@ -2081,6 +2093,7 @@ vowel/ii_6 [I] en-wm
[i] wo
vowel/ii_7 [i] en
[i] sq
[i] ga
vowel/ii_8 [i] kk
vowel/ii_final [i] en-us
[i] en-rp
@@ -2246,7 +2259,6 @@ vowel/oo_4 [O] base2
[O] it
[O] an
[O] pa
[O] ga
vowel/oo_5 [O] pl
[O] is
[O] sq
@@ -2290,6 +2302,7 @@ vowel/u [u] base
[u] ak
[u:] wo
[u] bo
[u1] ga
[u] tt
vowel/u# [u:] en-sc
[Y] tr
@@ -2420,6 +2433,7 @@ vowel/V_3 [V] en-rp
vowel/V_4 [V] en-sc
[V] da
[?V] da
[O] ga
vowel/V_6 [V] en-us
[a#] lv
vowel/y [y] base2
@@ -2477,9 +2491,11 @@ vowel/yy_4 [y] de
[yI] is
[y] hy
vwl_af/@ [@] af
[@] ga
vwl_af/I [I] af
vwl_af/r@ [@] af
[I] af
[@] ga
vwl_de/uu_@ [UR] de
vwl_en/aI@ [aI@] en
[aI@] en-n

BIN
phsource/j/je View File


+ 1
- 1
phsource/ph_danish View File

@@ -674,7 +674,7 @@ phoneme j
NextVowelStarts
VowelStart(j/j@)
VowelStart(j/ja)
VowelStart(j/je,-60)
VowelStart(j/je,-40)
VowelStart(j/ji)
VowelStart(j/jo)
VowelStart(j/ju)

+ 27
- 18
phsource/ph_georgian View File

@@ -28,7 +28,10 @@ endphoneme
phoneme a
vowel starttype #a endtype #a
length 180
FMT(vowel/a#_2)
IF thisPh(isUnstressed) THEN
FMT(vowel/a#_2)
ENDIF
FMT(vowel/a_3)
endphoneme


@@ -69,12 +72,15 @@ phoneme k#
Vowelin f1=1 f2=1400 -100 100 f3=-150 80
Vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/k_asp2, 40)
WAV(ustop/k_asp, 40)
ENDIF
IF nextPh(l) THEN
WAV(ustop/kl)
IF nextPhW(#e) OR nextPhW(#i) THEN
WAV(ustop/k_asp_e, 40)
ELIF nextPhW(#o) OR nextPhW(#u) THEN
WAV(ustop/k_asp_u, 50)
ELSE
WAV(ustop/k_asp_a, 45)
ENDIF
WAV(ustop/k_asp2, 60)
endphoneme


@@ -113,24 +119,27 @@ phoneme k
import_phoneme consonants/k-
endphoneme

phoneme q
vls uvl stop
lengthmod 2
Vowelin f1=1 f2=1700 0 200 f3=-300 80 gpaus f4 rms=30
Vowelout f1=1 f2=1700 -100 200 f3=-300 80 f4 rms=35

IF nextPh(#i) THEN
WAV(ustop/q2_i, 40)
ENDIF
WAV(ustop/q2, 48)
endphoneme



phoneme Q
import_phoneme base/r"
vcd vel frc
voicingswitch x
lengthmod 6
Vowelin f1=2 f2=2300 200 400 f3=-100 80
Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
FMT(voc/Q) addWav(ufric/xx, 100)
endphoneme

phoneme Q2
vcd vel frc
voicingswitch x
lengthmod 6
Vowelin f1=2 f2=2300 200 400 f3=-100 80
Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
FMT(voc/Q) addWav(ufric/x2, 50)
endphoneme


phoneme r
import_phoneme base/R
endphoneme

+ 239
- 0
phsource/ph_irish View File

@@ -0,0 +1,239 @@
// Version 2.4 January 2013

// short vowels


phoneme @ // Schwa, but always unstressed
vowel starttype #@ endtype #@
unstressed
length 100
IF nextPh(i:) THEN
Length 70
FMT(vwl_af/r@)
ENDIF
IF nextPh(I) THEN
Length 70
FMT(vwl_af/r@)
ENDIF
IF nextPh(e:) THEN
Length 70
FMT(vwl_af/r@)
ENDIF
FMT(vwl_af/@)
endphoneme


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


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


phoneme a#
vowel starttype #@ endtype #@
ipa ɐ
length 120
ChangeIfStressed(a)
FMT(vowel/a#_3)
endphoneme


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

phoneme E#
vowel starttype #@ endtype #@
length 120
ChangeIfStressed(E)
ChangePhoneme(@/)
endphoneme


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

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


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

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


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

phoneme U#
vowel starttype #@ endtype #@
length 120
ChangeIfStressed(U)
ChangePhoneme(@/)
endphoneme

phoneme u1
vowel starttype #u endtype #u
ipa uU+0306
length 50
FMT(vowel/u)
endphoneme

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

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

phoneme o:
vowel starttype #o endtype #o
length 190
FMT(vowel/o)
endphoneme


// long vowels

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


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


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




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


// Diphthongs


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

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

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

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

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

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

phoneme aU#
vowel starttype #@ endtype #@
length 120
ChangeIfStressed(aU)
FMT(vdiph/au_4)
endphoneme


phoneme ; // linking j, used between (i) vowels and a following vowel
// also to palatalize consonants
liquid palatal
lengthmod 0

IF prevPh(#i) THEN
ipa NULL // linking after i vowel, don't show in ipa
ENDIF

NextVowelStarts
VowelStart(j2/j2@)
VowelStart(j2/j2a)
VowelStart(j2/j2e)
VowelStart(j2/j2i)
VowelStart(j2/j2o)
VowelStart(j2/j2u)
EndSwitch

IF prevPh(#i) THEN
VowelEnding(j2/xj2, -40)
ENDIF

IF prevPh(isPause) THEN
FMT(j2/_j2)
ENDIF
endphoneme


+ 0
- 15
phsource/ph_malayalam View File

@@ -144,18 +144,3 @@ phoneme d# // 'rr' sounds like English 'd'
endphoneme


phoneme kh2
vls vel stop
lengthmod 2
voicingswitch g
Vowelin f1=0 f2=2300 200 300 f3=-150 80
Vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/k_asp2, 50)
ENDIF
IF nextPh(l) THEN
WAV(ustop/kl)
ENDIF
WAV(ustop/k_asp2, 90)
endphoneme


+ 49
- 0
phsource/ph_vietnam_hue View File

@@ -0,0 +1,49 @@
//====================================================
// Vietnamese Phonemes - Make Huế Dialect
//====================================================


phoneme 1 // ngang tone: level
stress
Tone(30, 2, envelope/p_level, NULL) // similar Hue dialect tone
endphoneme


phoneme 2 // huyền tone: low falling
stress
Tone(20, 25, envelope/p_fall,envelope/vi_6amp) // NULL) //20 8
endphoneme


phoneme 3 // sắc Tone(rising
stress
Tone(2, 10, envelope/p_rise, NULL) // 25 50 45 75
endphoneme


phoneme 4 // hỏi Tone(curve (dipping rising)
stress
Tone(20, 5, envelope/p_512,NULL) //Tone(55, 5, envelope/p_fallrise, NULL) //30 5 m 55 5
endphoneme


phoneme 5 // ngã tone: broken (creaking rising)
stress
Tone(50,2, envelope/p_214, envelope/vi_5amp) // 28,58 m20 85
endphoneme


phoneme 6 // nặng Tone(drop (constricted)
stress
//length 150 // ignore because it make too short sound 75 // reduce the length of the vowel
Tone(25, 10, envelope/p_512, envelope/vi_6amp) // 40 20
endphoneme


phoneme 7 // Tone(1 (ngang) at end of clause
stress
Tone(5, 40, envelope/p_level, NULL) //Tone(99, 50, envelope/p_fall, NULL) // 40 20
endphoneme



BIN
phsource/r/aa View File


BIN
phsource/ustop/k_asp_a.wav View File


BIN
phsource/ustop/k_asp_e.wav View File


BIN
phsource/ustop/k_asp_u.wav View File


BIN
phsource/ustop/k_ejc.wav View File


BIN
phsource/vwl_en_us/oor View File


+ 15
- 12
src/dictionary.cpp View File

@@ -310,7 +310,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error)
p++; // skip over the zero which terminates the list for this hash value
}

if((tr->dict_min_size > 0) && (size < tr->dict_min_size))
if((tr->dict_min_size > 0) && (size < (unsigned int)tr->dict_min_size))
{
fprintf(stderr, "Full dictionary is not installed for '%s'\n", name);
}
@@ -1040,7 +1040,7 @@ static int GetVowelStress(Translator *tr, unsigned char *phonemes, signed char *
{
if(vowel_stress[ix] == 4)
{
if(tr->langopts.stress_flags & 0x20000)
if(tr->langopts.stress_flags & S_PRIORITY_STRESS)
vowel_stress[ix] = 1;
else
vowel_stress[ix] = 3;
@@ -1208,12 +1208,6 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,
max_stress = GetVowelStress(tr, phonetic, vowel_stress, vowel_count, stressed_syllable, 1);
if((max_stress < 0) && dictionary_flags)
{
if((tr->langopts.stress_flags & 1) && (vowel_count == 2))
{
// lang=fr: don't stress monosyllables except at end-of-clause
vowel_stress[1] = 0;
dictionary_flags[0] |= FLAG_STRESS_END2;
}
max_stress = 0;
}

@@ -2652,6 +2646,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
if((match1.points == 0) && ((option_sayas & 0x10) == 0))
{
n = utf8_in(&letter,p-1)-1;

if(tr->letter_bits_offset > 0)
{
// not a Latin alphabet, switch to the default Latin alphabet language
@@ -2720,11 +2715,19 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
p += (wc_bytes-1);
}

if(((alphabet = AlphabetFromChar(letter)) != NULL) && (alphabet->flags & AL_WORDS) && (alphabet->offset != tr->letter_bits_offset))
if(((alphabet = AlphabetFromChar(letter)) != NULL) && (alphabet->offset != tr->letter_bits_offset))
{
// switch to the nominated language for this alphabet
sprintf(phonemes,"%c%s",phonSWITCH, WordToString2(alphabet->language));
return(0);
if(tr->langopts.alt_alphabet == alphabet->offset)
{
sprintf(phonemes,"%c%s",phonSWITCH, tr->langopts.alt_alphabet_lang);
return(0);
}
if(alphabet->flags & AL_WORDS)
{
// switch to the nominated language for this alphabet
sprintf(phonemes,"%c%s",phonSWITCH, WordToString2(alphabet->language));
return(0);
}
}
}
}

+ 40
- 21
src/numbers.cpp View File

@@ -596,6 +596,8 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
ALPHABET *alphabet;
int language;
int phontab_1;
int alphabet_name_switch;
char *ph_alphabet_end;
char capital[20];
char ph_buf[80];
char ph_buf2[80];
@@ -631,6 +633,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
return(0);
}

alphabet_name_switch = 0;
alphabet = AlphabetFromChar(letter);
if(alphabet != current_alphabet)
{
@@ -638,38 +641,49 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
current_alphabet = alphabet;
if((alphabet != NULL) && !(alphabet->flags & AL_DONT_NAME) && (alphabet->offset != translator->letter_bits_offset))
{
phontab_1 = tr->phoneme_tab_ix;
ph_buf2[0] = 0;
if(Lookup(translator, alphabet->name, ph_alphabet) == 0) // the original language for the current voice
if((alphabet->flags & AL_DONT_NAME) || (alphabet->offset == translator->langopts.alt_alphabet))
{
// Can't find the local name for this alphabet, use the English name
ph_alphabet[2] = SetTranslator2("en"); // overwrites previous contents of translator2
Lookup(translator2, alphabet->name, ph_buf2);
// don't say the alphabet name
}
else
if(translator != tr)
{
phontab_1 = tr->phoneme_tab_ix;
strcpy(ph_buf2, ph_alphabet);
ph_alphabet[2] = translator->phoneme_tab_ix;
}

if(ph_buf2[0] != 0)
{
// we used a different language for the alphabet name (now in ph_buf2)
ph_alphabet[0] = phonPAUSE;
ph_alphabet[1] = phonSWITCH;
strcpy(&ph_alphabet[3], ph_buf2);
len = strlen(ph_buf2) + 3;
ph_alphabet[len] = phonSWITCH;
ph_alphabet[len+1] = phontab_1;
ph_alphabet[len+2] = 0;
ph_buf2[0] = 0;
if(Lookup(translator, alphabet->name, ph_alphabet) == 0) // the original language for the current voice
{
// Can't find the local name for this alphabet, use the English name
ph_alphabet[2] = SetTranslator2("en"); // overwrites previous contents of translator2
Lookup(translator2, alphabet->name, ph_buf2);
}
else
if(translator != tr)
{
phontab_1 = tr->phoneme_tab_ix;
strcpy(ph_buf2, ph_alphabet);
ph_alphabet[2] = translator->phoneme_tab_ix;
}

if(ph_buf2[0] != 0)
{
// we used a different language for the alphabet name (now in ph_buf2)
ph_alphabet[0] = phonPAUSE;
ph_alphabet[1] = phonSWITCH;
strcpy(&ph_alphabet[3], ph_buf2);
len = strlen(ph_buf2) + 3;
ph_alphabet[len] = phonSWITCH;
ph_alphabet[len+1] = phontab_1;
ph_alphabet[len+2] = 0;

ph_alphabet_end = &ph_alphabet[len];
alphabet_name_switch = ph_alphabet[2];
}
}
}
}


// caution: SetWordStress() etc don't expect phonSWITCH + phoneme table number

if(ph_buf[0] == 0)
{
if((alphabet != NULL) && (alphabet->language != 0) && !(alphabet->flags & AL_NOT_LETTERS))
@@ -702,6 +716,11 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
ph_buf[len+2] = 0;
}
}

if((ph_buf[2] == alphabet_name_switch) && (capital[0] == 0))
{
ph_alphabet_end[0]= 0;
}
}

if(ph_buf[0] == 0)

+ 1
- 1
src/phonemelist.cpp View File

@@ -428,7 +428,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
{
// in a sequence of unstressed syllables, reduce alternate syllables to 'diminished'
// stress. But not for the last phoneme of a stressed word
if((tr->langopts.stress_flags & 0x2) || ((word_stress > 3) && ((plist3+1)->sourceix!=0)))
if((tr->langopts.stress_flags & S_NO_DIM) || ((word_stress > 3) && ((plist3+1)->sourceix!=0)))
{
// An unstressed final vowel of a stressed word
unstress_count=1; // try again for next syllable

+ 1
- 1
src/setlengths.cpp View File

@@ -892,7 +892,7 @@ if(stress <= 1)
{
// this is the last syllable in the clause, lengthen it - more for short vowels
len = (p->ph->std_length * 2);
if(tr->langopts.stress_flags & 0x40000)
if(tr->langopts.stress_flags & S_EO_CLAUSE1)
len=200; // don't lengthen short vowels more than long vowels at end-of-clause
length_mod = length_mod * (256 + (280 - len)/3)/256;
}

+ 1
- 1
src/synthdata.cpp View File

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

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

int option_device_number = -1;

+ 29
- 25
src/tr_languages.cpp View File

@@ -478,7 +478,7 @@ Translator *SelectTranslator(const char *name)
SetupTranslator(tr,stress_lengths_fr,stress_amps_fr);
tr->letter_bits_offset = OFFSET_ETHIOPIC;
tr->langopts.stress_rule = STRESSPOSN_1L;
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.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
tr->langopts.numbers = NUM_OMIT_1_HUNDRED;
@@ -550,7 +550,7 @@ Translator *SelectTranslator(const char *name)
// tr->langopts.intonation_group = 4;

// 'diminished' is an unstressed final syllable
tr->langopts.stress_flags = 0x6 | 0x10;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2;
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels
@@ -651,7 +651,7 @@ Translator *SelectTranslator(const char *name)

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_flags = 0x6; // mark unstressed final syllables as diminished
tr->langopts.stress_flags = S_FINAL_DIM_ONLY; // mark unstressed final syllables as diminished
tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2;
tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels
@@ -681,7 +681,7 @@ Translator *SelectTranslator(const char *name)
// tr->langopts.word_gap = 1;
tr->langopts.vowel_pause = 2;
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x6 | 0x10;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
// tr->langopts.unstressed_wd1 = 3;
tr->langopts.unstressed_wd2 = 2;

@@ -989,7 +989,7 @@ SetLengthMods(tr,3); // all equal

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_flags = 0x10 | 0x20000;
tr->langopts.stress_flags = 0x10 | S_PRIORITY_STRESS;
tr->langopts.vowel_pause = 1;
tr->langopts.unstressed_wd1 = 2;
tr->langopts.unstressed_wd2 = 2;
@@ -1023,8 +1023,9 @@ SetLengthMods(tr,3); // all equal
case L('k','a'): // Georgian
{
// character codes offset by 0x1080
static const char ka_vowels[] = {0x50,0x54,0x58,0x5d,0x63,0x75,0x77,0};
static const char ka_consonants[] = {0x51,0x52,0x53,0x55,0x56,0x57,0x59,0x5a,0x5b,0x5c,0x5e,0x5f,0x60,0x61,0x62,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x76,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};
SetupTranslator(tr,stress_lengths_ta,stress_amps_ta);
memset(tr->letter_bits,0,sizeof(tr->letter_bits));
SetLetterBits(tr,LETTERGP_A,ka_vowels);
@@ -1037,6 +1038,9 @@ SetLengthMods(tr,3); // all equal
// tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
tr->langopts.max_initial_consonants = 7;
tr->langopts.numbers = NUM_VIGESIMAL | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED |NUM_OMIT_1_THOUSAND | NUM_DFRACTION_5 | NUM_ROMAN;

tr->langopts.alt_alphabet = OFFSET_CYRILLIC;
tr->langopts.alt_alphabet_lang = "ru";
}
break;

@@ -1111,7 +1115,7 @@ SetLengthMods(tr,3); // all equal
{
tr->charset_a0 = charsets[4]; // ISO-8859-4, includes a,e,i,o,u-macron
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x20;
tr->langopts.stress_flags = S_NO_AUTO_2;
tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2;
tr->langopts.param[LOPT_DIERESES] = 1;
@@ -1124,7 +1128,7 @@ SetLengthMods(tr,3); // all equal
{
tr->charset_a0 = charsets[4]; // ISO-8859-4
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x20;
tr->langopts.stress_flags = S_NO_AUTO_2;
tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2;
tr->langopts.param[LOPT_DIERESES] = 1;
@@ -1211,7 +1215,7 @@ SetLengthMods(tr,3); // all equal

SetupTranslator(tr,stress_lengths_om,stress_amps_om);
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x16 + 0x80000;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | 0x80000;
}
break;

@@ -1224,7 +1228,7 @@ SetLengthMods(tr,3); // all equal

tr->charset_a0 = charsets[2]; // ISO-8859-2
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x6; // mark unstressed final syllables as diminished
tr->langopts.stress_flags = S_FINAL_DIM_ONLY; // mark unstressed final syllables as diminished
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x9;
tr->langopts.max_initial_consonants = 7; // for example: wchrzczony :)
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_2;
@@ -1243,7 +1247,7 @@ SetLengthMods(tr,3); // all equal
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable

tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = 0x6 | 0x10 | 0x2000 | 0x20000;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_INITIAL_2 | S_PRIORITY_STRESS;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_DFRACTION_2 | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_ROMAN;
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS;
SetLetterVowel(tr,'y');
@@ -1261,7 +1265,7 @@ SetLengthMods(tr,3); // all equal
SetupTranslator(tr,stress_lengths_ro,stress_amps_ro);

tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x100 + 0x6;
tr->langopts.stress_flags = S_FINAL_STRESS_C + S_FINAL_DIM_ONLY;

tr->charset_a0 = charsets[2]; // ISO-8859-2
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_3 | NUM_AND_UNITS | NUM_ROMAN;
@@ -1276,7 +1280,7 @@ SetLengthMods(tr,3); // all equal
case L('r','w'): // Kiryarwanda
{
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x16;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable

tr->langopts.numbers = NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_DFRACTION_2 | NUM_AND_HUNDRED;
@@ -1293,7 +1297,7 @@ SetLengthMods(tr,3); // all equal
tr->charset_a0 = charsets[2]; // ISO-8859-2

tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x16;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x3;
tr->langopts.max_initial_consonants = 5;
tr->langopts.spelling_stress = 1;
@@ -1322,7 +1326,7 @@ SetLengthMods(tr,3); // all equal
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_flags = S_FINAL_DIM | S_NO_AUTO_DIM | S_FINAL_NO_2;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.spelling_stress = 1;

tr->letter_bits_offset = OFFSET_SINHALA;
@@ -1345,7 +1349,7 @@ SetLengthMods(tr,3); // all equal
case L('s','l'): // Slovenian
tr->charset_a0 = charsets[2]; // ISO-8859-2
tr->langopts.stress_rule = STRESSPOSN_2R; // Temporary
tr->langopts.stress_flags = 0x20;
tr->langopts.stress_flags = S_NO_AUTO_2;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x103;
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x76; // [v] don't count this character at start of word
tr->letter_bits['r'] |= 0x80; // add 'r' to letter group 7, vowels for Unpronouncable test
@@ -1362,7 +1366,7 @@ SetLengthMods(tr,3); // all equal
SetupTranslator(tr,stress_lengths_sq,stress_amps_sq);

tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x16 + 0x100;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_FINAL_STRESS_C;
SetLetterVowel(tr,'y');
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_DFRACTION_4;
tr->langopts.accents = 2; // "capital" after letter name
@@ -1394,7 +1398,7 @@ SetLengthMods(tr,3); // all equal

tr->langopts.vowel_pause = 1;
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = 0x6 | 0x10;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;

tr->langopts.numbers = NUM_AND_UNITS | NUM_HUNDRED_AND | NUM_SINGLE_AND | NUM_OMIT_1_HUNDRED;
tr->langopts.break_numbers = 0x49249268; // for languages which have numbers for 100,000 and 1,000,000
@@ -1411,7 +1415,7 @@ SetLengthMods(tr,3); // all equal
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_flags = 0x10004; // use 'diminished' for unstressed final syllable
tr->langopts.stress_flags = S_FINAL_DIM_ONLY; // use 'diminished' for unstressed final syllable
tr->langopts.spelling_stress = 1;
tr->langopts.break_numbers = 0x14a8; // 1000, 100,000 10,000,000

@@ -1457,7 +1461,7 @@ SetLengthMods(tr,3); // all equal
SetupTranslator(tr,stress_lengths_th,stress_amps_th);

tr->langopts.stress_rule = 0; // stress on final syllable of a "word"
tr->langopts.stress_flags = 2; // don't automatically set diminished stress (may be set in the intonation module)
tr->langopts.stress_flags = S_NO_DIM; // don't automatically set diminished stress (may be set in the intonation module)
tr->langopts.tone_language = 1; // Tone language, use CalcPitches_Tone() rather than CalcPitches()
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
// tr->langopts.tone_numbers = 1; // a number after letters indicates a tone number (eg. pinyin or jyutping)
@@ -1476,7 +1480,7 @@ SetLengthMods(tr,3); // all equal
tr->charset_a0 = charsets[9]; // ISO-8859-9 - Latin5

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

if(name2 == L('a','z'))
@@ -1496,7 +1500,7 @@ SetLengthMods(tr,3); // all equal
SetCyrillicLetters(tr);
SetupTranslator(tr,stress_lengths_fr,stress_amps_fr);
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = 0x20; //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;
}
break;
@@ -1561,7 +1565,7 @@ SetLengthMods(tr,3); // all equal
SetupTranslator(tr,stress_lengths_zh,stress_amps_zh);

tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable of a "word"
tr->langopts.stress_flags = 2; // don't automatically set diminished stress (may be set in the intonation module)
tr->langopts.stress_flags = S_NO_DIM; // don't automatically set diminished stress (may be set in the intonation module)
tr->langopts.vowel_pause = 0;
tr->langopts.tone_language = 1; // Tone language, use CalcPitches_Tone() rather than CalcPitches()
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
@@ -1618,7 +1622,7 @@ static void Translator_Russian(Translator *tr)
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 1;
tr->langopts.param[LOPT_REDUCE] = 2;
tr->langopts.stress_rule = 5;
tr->langopts.stress_flags = 0x0020; // waas 0x1010
tr->langopts.stress_flags = S_NO_AUTO_2;

tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED;
tr->langopts.numbers2 = 0x2 + NUM2_THOUSANDS_VAR1; // variant numbers before thousands

+ 61
- 12
src/translate.cpp View File

@@ -2074,17 +2074,29 @@ return(FLAG_SPELLWORD);

if(switch_phonemes >= 0)
{
// this word uses a different phoneme table
if(ph_list2[n_ph_list2-1].phcode == phonSWITCH)
{
//previous phoneme is also a phonSWITCH, just change its phoneme table number
n_ph_list2--;
}
if((p[0] == phonPAUSE) && (p[1] == phonSWITCH))
{
// the new word starts with a phoneme table switch, so there's no need to switch before it.
if(ph_list2[n_ph_list2-1].phcode == phonSWITCH)
{
//previous phoneme is also a phonSWITCH, delete it
n_ph_list2--;
}
}
else
{
SetPlist2(&ph_list2[n_ph_list2],phonSWITCH);
// this word uses a different phoneme table
if(ph_list2[n_ph_list2-1].phcode == phonSWITCH)
{
//previous phoneme is also a phonSWITCH, just change its phoneme table number
n_ph_list2--;
}
else
{
SetPlist2(&ph_list2[n_ph_list2],phonSWITCH);
}
ph_list2[n_ph_list2++].tone_ph = switch_phonemes; // temporary phoneme table number
}
ph_list2[n_ph_list2++].tone_ph = switch_phonemes; // temporary phoneme table number
}

// remove initial pause from a word if it follows a hyphen
@@ -2484,6 +2496,34 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c,
}


static const char *UCase_ga[] = {"bp","bhf","dt","gc","hA","mb","ng","ts","tA","nA",NULL};

int UpperCaseInWord(Translator *tr, char *word, int c)
{//=====================================================
int ix;
int len;
const char *p;

if(tr->translator_name == L('g','a'))
{
// Irish
for(ix=0; ; ix++)
{
if((p = UCase_ga[ix]) == NULL)
break;

len = strlen(p);
if((word[-len]==' ') && (memcmp(&word[-len+1], p, len-1) == 0))
{
if((c == p[len-1]) || ((p[len-1]=='A') && IsVowel(tr, c)))
return(1);
}
}
}
return(0);
}


void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *tone_out, char **voice_change)
{//==========================================================================================================
int ix;
@@ -2910,10 +2950,19 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
{
if(iswlower(prev_in))
{
c = ' '; // lower case followed by upper case, treat as new word
space_inserted = 1;
prev_in_save = c;
// next_word_flags |= FLAG_NOSPACE; // problem: prevents FLAG_HAS_DOT being set
// lower case followed by upper case in a word
if(UpperCaseInWord(tr, &sbuf[ix], c) == 1)
{
// convert to lower case and continue
c = towlower(c);
}
else
{
c = ' '; // lower case followed by upper case, treat as new word
space_inserted = 1;
prev_in_save = c;
// next_word_flags |= FLAG_NOSPACE; // problem: prevents FLAG_HAS_DOT being set
}
}
else
if((c != ' ') && iswupper(prev_in) && iswlower(next_in))

+ 34
- 13
src/translate.h View File

@@ -372,35 +372,53 @@ typedef struct {

#define S_NO_DIM 0x02
#define S_FINAL_DIM 0x04
#define S_FINAL_NO_2 0x10
#define S_NO_AUTO_2 0x20
#define S_2_TO_HEAVY 0x40
#define S_FIRST_PRIMARY 0x80
#define S_2_SYL_2 0x1000
#define S_INITIAL_2 0x2000
#define S_NO_AUTO_DIM 0x10000
#define S_HYPEN_UNSTRESS 0x100000
#define S_NO_EOC_LENGTHEN 0x200000
// bit0=don't stress monosyllables, except at end of clause
#define S_FINAL_DIM_ONLY 0x06
// bit1=don't set diminished stress,
// bit2=mark unstressed final syllables as diminished

// bit3=set consecutive unstressed syllables in unstressed words to diminished, but not in stressed words

#define S_FINAL_NO_2 0x10
// bit4=don't allow secondary stress on last syllable

#define S_NO_AUTO_2 0x20
// bit5-don't use automatic secondary stress

#define S_2_TO_HEAVY 0x40
// bit6=light syllable followed by heavy, move secondary stress to the heavy syllable. LANG=Finnish

#define S_FIRST_PRIMARY 0x80
// bit7=if more than one primary stress, make the subsequent primaries to secondary stress

#define S_FINAL_STRESS_C 0x100
// bit8=stress last syllable if it doesn't end in a vowel

#define S_FINAL_SPANISH 0x200
// bit9=stress last syllable if it doesn't end in vowel or "s" or "n" LANG=Spanish

#define S_2_SYL_2 0x1000
// bit12= In a 2-syllable word, if one has primary stress then give the other secondary stress

#define S_INITIAL_2 0x2000
// bit13= If there is only one syllable before the primary stress, give it a secondary stress
// bit15= Give stress to the first unstressed syllable
// bit16= Don't diminish consecutive syllables within a word.
#define S_PRIORITY_STRESS 0x20000
// bit17= "priority" stress reduces other primary stress to "unstressed" not "secondary"

#define S_EO_CLAUSE1 0x40000
// bit18= don't lengthen short vowels more than long vowels at end-of-clause
// bit19=stress on final syllable if it has a long vowel, but previous syllable has a short vowel


#define S_HYPEN_UNSTRESS 0x100000
// bit20= hyphenated words, 2nd part is unstressed

#define S_NO_EOC_LENGTHEN 0x200000
// bit21= don't lengthen vowels at end-of-clause

// 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 unstressed_wd1; // stress for $u word of 1 syllable
int unstressed_wd2; // stress for $u word of >1 syllable
@@ -518,6 +536,8 @@ typedef struct {
int listx; // compile *_listx after *list
const unsigned int *replace_chars; // characters to be substitutes
const char *ascii_language; // switch to this language for Latin characters
int alt_alphabet; // offset for another language to recognize
const char *alt_alphabet_lang; // language for the alt_alphabet
int max_lengthmod;
int lengthen_tonic; // lengthen the tonic syllable
int suffix_add_e; // replace a suffix (which has the SUFX_E flag) with this character
@@ -680,6 +700,7 @@ void InitText(int flags);
void InitText2(void);
int IsDigit(unsigned int c);
int IsAlpha(unsigned int c);
int IsVowel(Translator *tr, int c);
int isspace2(unsigned int c);
int towlower2(unsigned int c);
void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa);

+ 45
- 28
src/voices.cpp View File

@@ -61,7 +61,7 @@ int formant_rate[9]; // values adjusted for actual sample rate


#define DEFAULT_LANGUAGE_PRIORITY 5
#define N_VOICES_LIST 200
#define N_VOICES_LIST 250
static int n_voices_list = 0;
static espeak_VOICE *voices_list[N_VOICES_LIST];
static int len_path_voices;
@@ -578,10 +578,8 @@ voice_t *LoadVoice(const char *vname, int control)
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 ";

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

strncpy0(voicename, vname, sizeof(voicename));
if(control & 0x10)
{
strcpy(buf,vname);
@@ -590,6 +588,9 @@ voice_t *LoadVoice(const char *vname, int control)
}
else
{
if(voicename[0]==0)
strcpy(voicename,"default");

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

@@ -1634,30 +1635,35 @@ static void GetVoices(const char *path)
return;

do {
sprintf(fname,"%s%c%s",path,PATHSEP,FindFileData.cFileName);

ftype = GetFileLength(fname);
if(n_voices_list >= (N_VOICES_LIST-2))
break; // voices list is full

if((ftype == -2) && (FindFileData.cFileName[0] != '.'))
{
// a sub-sirectory
GetVoices(fname);
}
else
if(ftype > 0)
if(FindFileData.cFileName[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);
FindClose(hFind);
@@ -1674,11 +1680,14 @@ static void GetVoices(const char *path)
if(n_voices_list >= (N_VOICES_LIST-2))
break; // voices list is full

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

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

ftype = GetFileLength(fname);

if((ftype == -2) && (ent->d_name[0] != '.'))
if(ftype == -2)
{
// a sub-sirectory
GetVoices(fname);
@@ -1710,15 +1719,23 @@ static void GetVoices(const char *path)
espeak_ERROR SetVoiceByName(const char *name)
{//=========================================
espeak_VOICE *v;
int ix;
espeak_VOICE voice_selector;
char *variant_name;
static char buf[60];

strncpy0(buf,name,sizeof(buf));

variant_name = ExtractVoiceVariantName(buf, 0, 1);

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

memset(&voice_selector,0,sizeof(voice_selector));
// voice_selector.name = buf;
voice_selector.name = (char *)name; // include variant name in voice stack ??

// first check for a voice with this filename

Loading…
Cancel
Save