Browse Source

[1.46.39]

Fixes to speaking characters from foreign alphabets.
Allow $textmode and $text to translate between words in different alphabets.


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

+ 32
- 18
dictsource/dict_phonemes View File

@@ -103,7 +103,7 @@ p Q r R s s; t T
ts v x z


Dictionary en_dict 2013-02-27
Dictionary en_dict 2013-03-01

0 0# 3 3: @ @- @2 @5
@L a a# A: A@ aa aI aI3
@@ -190,12 +190,12 @@ N n^ p r R R2 s S
t tS ts tS; v x z Z


Dictionary hi_dict 2012-04-12
Dictionary hi_dict 2013-03-01

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

#X1 #X2 - : b bh c ch
d d. dh dh. f g gh h
@@ -378,7 +378,7 @@ S s; S; t t; tS ts tS;
ts; v w x z Z Z;


Dictionary pt_dict 2013-02-25
Dictionary pt_dict 2013-02-27

& &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU
@@ -539,7 +539,7 @@ n^ p p` r s S t t`
tS tS` v w x z Z


Dictionary ml_dict 2011-12-05
Dictionary ml_dict 2013-02-28

@ a a# a: aI aU e E
e: i I i: o o: r- u
@@ -569,18 +569,18 @@ r r. s S s. t t. th
th. v w x z


Dictionary pa_dict 2012-05-04
Dictionary pa_dict 2013-03-01

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

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


Dictionary prs_dict 2009-12-01
@@ -602,7 +602,7 @@ N n^ p q R s S S;
t tS v w x z


Dictionary ur_dict 2013-02-08
Dictionary ur_dict 2013-03-01

@ a a: aI aU e E e:
i I i: O o: U u: V
@@ -869,3 +869,17 @@ b B d D f g j k
l l^ m n n^ p Q r
R R2 s S t T t# tS
w x


Dictionary bn_dict 2013-02-28

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

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

+ 3
- 1
dictsource/en_list View File

@@ -187,7 +187,7 @@ _‴ trIp@LpraIm
_‼ Ekskla#m'eIS@nz
_₠ jU@roU

+ plVs $max3
+ plVs
# haS $max3
@ _at_ $u+
& _and $u+
@@ -1196,6 +1196,7 @@ convent k0nv@nt
converse $1 $only
converse $verb
convert $1 $noun
convict $1
convict $2 $verb
convolute k0nv@l'u:t
coop ku:p
@@ -1961,6 +1962,7 @@ mercedes m3:s'eIdi:z
//mercenary m3:s@n@rI
merest mi@r@st
meringue m@raN
meson mi:z0n
metabolic mEt@b'0lIk
metaphor mEt@fO@
metastable $alt1

+ 8
- 6
dictsource/en_rules View File

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

// ***************************************************************************
// * Copyright (C) 2005 to 2010 by Jonathan Duddington *
// * Copyright (C) 2005 to 2013 by Jonathan Duddington *
// * email: [email protected] *
// * *
// * This program is free software; you can redistribute it and/or modify *
@@ -1601,7 +1601,7 @@
co (ntrol+ k@
conva (l k0nv@
_) co (nvenA k@
_) co (nvi k0#
_) con (vi k%0#n
_) co (nvoy k0
_) co (nw k0
_) copy k0pI
@@ -1734,7 +1734,7 @@
_) des (k dEs
des (ol dEs
des (pot dEs
_) dess dI2z
_) dess (er dI2z
desta (b d%i:steI
desti dEstI
des (ul d%i:s
@@ -2547,7 +2547,7 @@
v) es (t+ Es
harv) es (t Is
esti (m EstI#
es (ty @s
&) es (ty @s

.group et
_) et (on i:t
@@ -2994,6 +2994,7 @@
iah (_ 'aI@
ia (m i@
&) ia (n i@
@) ia (nd I'a
@) ia (nic I'a
@) ia (nit I'a
@) ia (na_ i:'a
@@ -3394,8 +3395,8 @@
iority I'0rI2t%I
iou (rA j@
iour (K j3
@) ious (_ =I2@s
g) ious (_ =@s
@) ious =I2@s
g) ious =@s
ioux u:
_r) io (t aI@
io (t_ I|@
@@ -5881,6 +5882,7 @@
&d) Ed (_S2vei I#d
&ch) Ed (_S2vei t
&k) Ed (_S2vei t
ril) Ed (_S2 d
&@@om) Ed (_S2v d
&p) Ed (_S2vei t
&t) Ed (_S2vei I#d

+ 34
- 34
dictsource/hi_list View File

@@ -2,12 +2,12 @@

// Numbers
// devanagari numbers are changed to latin characters before translation
_0 S'u:n.jV
_0 s'u:n.jV
_1 'e:k
_2 d'o:
_3 t'i:n
_4 c'a:r:
_5 p'a:nc
_4 c:'a:r:
_5 'pa~c
_6 ch'@2
_7 s'a:t
_8 'a:th.
@@ -15,30 +15,30 @@ _9 n'O:
?3 _9 n'aU

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

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

_31 Ik@t:'Is
_32 bat:'Is
_32 b'at:'I'S
_33 tE~t'Is // E~ ?
_34 cO~t'Is
_35 pE~t'Is
@@ -65,16 +65,16 @@ _53 t'IrpVn
_54 c'Ou:wVn
_55 p'achpVn
_56 chh@p:'Vn
_57 sVt:'a:w@n
_58 ath:'a:w@n
_57 santa:'w@n
_58 ath:a:'w@n
_59 Uns'Vth

_60 s'a:th.
_61 'Iks@th.
_62 b'a:s@th.
_63 t'Irs@th.
_64 c'O~s@th.
_65 paIns@th.
_64 cO:'s@th.
_65 paI's@th.
_66 ch'Ija:s@th.
_67 s'Vrs@th.
_68 ars@th.
@@ -92,15 +92,15 @@ _78 athhat:'Vr:
_79 ,Un^Ia:s'i:

_80 ,Vss'i:
_81 Ikja:s'i:
_82 baIa:s'i:
_83 tIra:s'i:
_84 cO:ra:s'i:
_85 pI'ca:s'i:
_86 chIja:s'i:
_87 sVt:a:s'i:
_88 ath:a:s'i:
_89 nVwa:s'i:
_81 Ikja:s'i
_82 baIa:s'i
_83 tIra:s'i
_84 cO:ra:s'i
_85 pI'ca:s'i
_86 chIja:s'i
_87 sVt:a:s'i
_88 ath:a:s'i
_89 nVwa:s'i

_90 nVb:'e:
_91 Ikj'a:n@we:
@@ -114,9 +114,9 @@ _98 ath:'a:n@we:
_99 nIn^j'a:n@we:

_0C s'O:
_0M1 h@z'a:r
_0M1 h@J,a:r
_0M2 l'a:kh
_0M3 cr'ore
_0M3 k@ro:r.V
_0M4 'Vr@b
_0M5 kh'Vr@b
_dpt _d@s@ml'o:_ // ?? what is Hi for "." ?
@@ -162,7 +162,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?
श S@
ष s.@ // retroflex [S]
स s@
ह H@
ह H@-
क़ q@
ख़ x@
ग़ Q@
@@ -199,14 +199,14 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?
। dVn.d.V

// Pronouns
मैं $u // main: I
मैं $u // main: IrI
मुझे $u
मेरा $u
मेरी $u
मेरे $u

हम $u // we
हमे $u
हमे $u
हमारा $u
हमारी $u
हमारे $u
@@ -234,7 +234,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?
इसका $u

ये $u // they
इन्हें $u
इन्हें $u
इनका $u

वह $u // he/she/it
@@ -246,7 +246,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ?

वे $u // they
वो $u
उन्हे $u // unheṃ: them
उन्हे $u // unheṃ: them
उनका $u
उनकी $u
उनके $u

+ 222
- 222
dictsource/hi_rules View File

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

// This file is UTF8 encoded
// This file is UTF8 encoded

// letter groups:
// A vowel letters and vowel signs
@@ -28,423 +28,423 @@
// Vowels

.group अ
अ V
अ (ह E // (h
अह) अ E
V
अ (ह E // (h
अह) अ E

.group आ
आ a:
a:

.group इ
इ I
I
// इँ i~
// इं i~

.group ई
ई i:
ई (_ i
i:
ई (_ i

.group उ
उ U
U

.group ऊ
ऊ u:
ऊं u~ // + anusvara
ऊँ u~ // + candrabinbu
u
ऊं u~ // + anusvara
ऊँ u~ // + candrabinbu

.group ऋ
ऋ rI
rI

.group ऌ
ऌ l- // vocalic l
l- // vocalic l

.group ऍ
ऍ E // candra e
E // candra e

.group ऎ
ऎ e
e

.group ए
ए e:
e:

.group ऐ
ऐ E: // ?? [aI] [E:] [&:]
ऐं E~
ऐँ E~
?2 ऐ aI // ?? [aI] [E:] [&:]
E: // ?? [aI] [E:] [&:]
ऐं E~
ऐँ E~
?2 ऐ aI // ?? [aI] [E:] [&:]


.group ऑ
ऑ O // candra O
O // candra O

.group ऒ
ऒ o
o

.group ओ
ओ o:
ओं o~ // +anusvara
ओँ o~ // +candrabindu
o:
ओं o~ // +anusvara
ओँ o~ // +candrabindu

.group औ
औ O: // ?? [aU] [O:]
औं O~ // +anusvara
औँ O~ // +candrabindu
?3 औ aU // ?? [aU] [O:]
O: // ?? [aU] [O:]
औं O~ // +anusvara
औँ O~ // +candrabindu
?3 औ aU // ?? [aU] [O:]


// Vowel Signs

.group ा
ा a:
ाव aU
ाव aU

.group ि
ि I
ि I
// िँ i~
// िं i~

.group ी
ी i:
ी (_ i
i:
ी (_ i

.group ु
U
u

.group ू
ू u:
ूं u~ // or O~ ??
ूँ u~
u:
ूं u~ // or O~ ??
ूँ u~

.group ृ
ृ rI
rI

.group ॄ
ॄ rI
rI

.group ॅ
ॅ E
E

.group ॆ
ॆ e
e

.group े
े e:
e:

.group ै
ै E: // ?? [aI] [E:] [&:]
ैं E~
ैँ E~
?2 ै aI // ?? [aI] [E:] [&:]
E: // ?? [aI] [E:] [&:]
ैं E~
ैँ E~
?2 ै aI // ?? [aI] [E:] [&:]

.group ॉ
ॉ O
O

.group ॊ
ॊ o
o

.group ो
ो o:
ों o~
ोँ o~
o:
ों o~
ोँ o~

.group ौ
ौ O: // [O:] or [aU] ??
ौं O~
ौँ O~
?3 ौ aU // [O:] or [aU] ??
O: // [O:] or [aU] ??
ौं O~
ौँ O~
?3 ौ aU // [O:] or [aU] ??

.group ॢ // vowel sign l
ॢ l-
l-

.group ॣ // vowel sign ll
ॣ l-:
l-:

.group ॐ
ॐ o~m
o~m

// Consonants

.group क
क kV
क (B k
क (्य k:
क़ qV
क़ (B q
kV
क (B k
क (्य k:
क़ qV
क़ (B q

.group ख
ख khV
ख (B kh
ख़ xV
ख़ (B x
khV
ख (B kh
ख़ xV
ख़ (B x

.group ग
ग gV
ग (B g
ग़ QV
ग़ (B Q
gV
ग (B g
ग़ QV
ग़ (B Q

.group घ
घ ghV
घ (B gh
ghV
घ (B gh

.group ङ
ङ NV
ङ (B N
्) ङ (_ N@
NV
ङ (B N
्) ङ (_ N@

.group च
च cV
च (B c
च (्य c:
cV
च (B c
च (्य c:

.group छ
छ chV
छ (B ch
chV
छ (B ch

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

.group झ
झ JhV
झ (B Jh
JhV
झ (B Jh

.group ञ
ञ n^V
ञ (B n^
्) ञ (_ n^
n^V
ञ (B n^
्) ञ (_ n^

.group ट
ट t.V
ट (B t.
ट (्य t.:
t.V
ट (B t.
ट (्य t.:

.group ठ
ठ th.V
ठ (B th.
th.V
ठ (B th.

.group ड
ड d.V
ड (B d.
d.V
ड (B d.

ड़ r.V
ड़ (B r.
ड़ r.V
ड़ (B r.

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

.group ण
ण n.V // (temporary) same as dental [n]
ण (B n.
्) ण (_ n.@
n.V // (temporary) same as dental [n]
ण (B n.
्) ण (_ n.@

.group त
त tV
त (B t
त (्य t:
tV
त (B t
त (्य t:

.group थ
थ thV
थ (B th
thV
थ (B th

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

.group ध
ध dhV
ध (B dh
dhV
ध (B dh

.group न
न nV
न (B n
्) न (_ n@
र्) न (_ n // r +virama
nV
न (B n
्) न (_ n@
र्) न (_ n // r +virama


.group ऩ
ऩ n: // should this be a long [n] ?
n: // should this be a long [n] ?

.group प
प pV
प (B p
प (्य p:
pV
प (B p
प (्य p:

.group फ
फ phV
फ (B ph
फ़ fV
फ़ (B f
phV
फ (B ph
फ़ fV
फ़ (B f

.group ब
ब bV
ब (B b
bV
ब (B b

.group भ
भ bhV
भ (B bh
bhV
भ (B bh

.group म
म mV
म (B m
्) म (_ m@
र्) म (_ m // r +virama
न्) म (_ m // n +virama
mV
म (B m
्) म (_ m@
र्) म (_ m // r +virama
न्) म (_ m // n +virama

.group य
jV
य (B j
्) य (_ j@
j@
य (B j
्) य (_ j@

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

.group ऱ // rra
ऱ rV // (temporary) same as [r]
ऱ (B r
्) ऱ (_ r@
rV // (temporary) same as [r]
ऱ (B r
्) ऱ (_ r@

.group ल
ल lV
ल (B l
्) ल (_ l@
lV
ल (B l
्) ल (_ l@

.group ळ
ळ l.V
ळ (B l.
्) ळ (_ l.@
l.V
ळ (B l.
्) ळ (_ l.@

.group ऴ
ऴ l.V // (temporary) same as [l.]
ऴ (B l.
्) ऴ (_ l.@
l.V // (temporary) same as [l.]
ऴ (B l.
्) ऴ (_ l.@

.group व
व vV
व (B v
_) व wV
_) व (B w
_) व (् v // +virma
vV
व (B v
_) व wV
_) व (B w
_) व (् v // +virma

.group श
श SV
श (B S
SV
श (B S

.group ष
ष s.V //?? or retroflex [S]
ष (B s. //??
s.V //?? or retroflex [S]
ष (B s. //??

.group स
स sV
स (B s
sV
स (B s

.group ह
ह HV
ह (B H
H
ह (B H


// nukta, modifies a consonant

.group ऽ // avagraha, lengthens a vowel ??
ऽ :
:

.group ँ
ँ n // candrabindu
.group ं
ं n // anusvara
(प m
(फ m
(ब m
(भ m
(म m
(ट n.
(ठ n.
(ड n.
(ढ n.
(ण n.
(च n^
(छ n^
(ज n^
(झ n^
(ञ n^
(य n^
(क N
(ख N
(ग N
(घ N
(ङ N
ं (ह N
ँ n // candrabindu
.group ं
n // anusvara
ं (प m
ं (फ m
ं (ब m
ं (भ m
ं (म m
ं (ट n.
ं (ठ n.
ं (ड n.
ं (ढ n.
ं (ण n.
ं (च n^
ं (छ n^
ं (ज n^
ं (झ n^
ं (ञ n^
ं (य n^
ं (क N
ं (ख N
ं (ग N
ं (घ N
ं (ङ N

.group ः
ः H // visarga
H // visarga

.group ् // virama

// Extra consonants

.group क़ // qa
क़ qV
क़ (B q
qV
क़ (B q

.group ख़ // khha
ख़ xV
ख़ (B x
xV
ख़ (B x

.group ग़ // ghha
ग़ QV
ग़ (B Q
QV
ग़ (B Q

.group ज़ // za
ज़ zV
ज़ (B z
zV
ज़ (B z

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

.group ढ़ // rha (aspirated version of dddha)
ढ़ r.hV
ढ़ (B r.h
r.hV
ढ़ (B r.h

.group फ़ // fa
फ़ fV
फ़ (B f
fV
फ़ (B f

.group य़ // yya
य़ jV
य़ (B j
jV
य़ (B j

.group ॠ // rr
ॠ V-rr
V-rr

.group ॡ // ll
ॡ l-: // long syllabic l
l-: // long syllabic l


// If we find a Latin letter a-z, then translate as English
// (This is now done automatically by the eSpeak program)

.group o
o _^_EN
D__) of (__D    me
o _^_EN
D__) of (__D    me




.group
$ dOlV
% pVsEnt
$ dOlV
% pVsEnt



+ 50
- 18
dictsource/ml_list View File

@@ -87,33 +87,65 @@ _! a:S;c@rjacihn@m
// numbers
_0 p'u:Jj@m
_1 'onny
_2 r'an.t.y
_3 m'unny
_2 r@n.d#y
_3 m'u:nny
_4 n'a:ly
_5 'an^cy
_6 'aR2y
_6 'a:R2y
_7 'e:r.y
_8 'et.t.y
_9 'onpaty
_1X p'ati
_10 p'atty
_1X p'ati

_11 p'atinonny
_12 p'antran.t.y
_15 p'atinan^cy
_16 p'atinaR2y
_17 p'atine:R2y
_18 p'atine:t.t.y
_19 p'attompatu
_2X 'irupat
_3X m'uppat
_4X n'a:lppat
_5X 'anpat
_6X 'aR2upat
_7X 'er.upat
_8X 'en.pat
_9X t'on.n.u:R2
_20 'irup'aty
_2X 'irupatti
_30 m'uppaty
_3X m'uppatti':
_40 n'a:lppaty
_4X n'a:lppatti
_50 'anpaty
_5X 'anpatti
_60 'aR2upaty
_6X 'aR2upatti
_70 'er.'upaty
_7X 'er.'upatti
_80 'en.paty
_8X 'en.patti
_90 t'on.n.u:r:
_9X t'on.n.u:t.t.i

_0C n'u:R
_0M1 'a:jiRam
_0M2 l'aks.am
_1C0 n'u:r:
_1C n'u:t.t.i
_2C0 irunn'u:r
_2C irunn'u:t.t.i
_3C0 munn'u:r
_3C munn'u:t.t.i
_4C0 na:nnu:r
_4C na:nnu:t.t.i
_5C0 'an^cu:r
_5C 'an^cu:t.t.i
_6C0 aR2unu:r
_6C aR2unu:t.t.i
_7C0 'er.'unu:r
_7C 'er.'unu:t.t.i
_8C0 'en.n.u:r
_8C 'en.n.u:t.t.i
_9C0 tol.l.'a:jiRam
_9C tol.l.'a:jiRatti

_0M1x 'a:jiRam
_0M1 'a:jiRat.t.i
_0M2x l'aks.am
_0M2 l'aks.at.t.i
_0M3 k'o:t.i

_dpt _d'aS;a:mS;@m_





+ 126
- 125
dictsource/ml_rules View File

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

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

// A means vowel letters (not vowel signs)
@@ -17,266 +17,267 @@
൭ 7
൮ 8
൯ 9
ോ ോ
ോ ോ
ൊ ൊ
ൌ ൌ



.group ക
ka
ക (B k
ka
ക (B k

.group ഖ
kha
ഖ (B kh
kha
ഖ (B kh

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

.group ഘ
gha
ഘ (B gh
gha
ഘ (B gh

.group ങ
Na
ങ (B N
Na
ങ (B N

.group ച
ca
ച (B c
ca
ച (B c

.group ഛ
cha
ഛ (B ch
cha
ഛ (B ch

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

.group ഝ
Jha
ഝ (B Jh
Jha
ഝ (B Jh

.group ഞ
n^a
ഞ (B n^
n^a
ഞ (B n^

.group ട
t.a
ട (B t.
t.a
ട (B t.

.group ഠ
th.a
ഠ (B th.
th.a
ഠ (B th.

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

.group ഢ
dh.a
ഢ (B dh.
dh.a
ഢ (B dh.

.group ണ
n.a
ണ (B n.
n.a
ണ (B n.

.group ത
ta
ത (B t
ta
ത (B t

.group ഥ
tha
ഥ (B th
tha
ഥ (B th

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

.group ധ
dha
ധ (B dh
dha
ധ (B dh

.group ന
na
ന (B n
na
ന (B n

.group പ
pa
പ (B p
pa
പ (B p

.group ഫ
pha
ഫ (B p
pha
ഫ (B p

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


.group ബ
ba
ബ (B b
ba
ബ (B b

.group ഭ
bha
ഭ (B bh
bha
ഭ (B bh

.group മ
ma
മ (B m
ma
മ (B m

.group യ
ja
യ (B j
ja
യ (B j

.group ര
ra
ര (B r
ra
ര (B r

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

.group ല
la
ല (B l
la
ല (B l

.group ള
l.a
ള (B l.
l.a
ള (B l.

.group ഴ // retroflex [r.] ?
r.a
ഴ (B r.
r.a
ഴ (B r.

.group വ
va
വ (B v
va
വ (B v

.group ശ
S;a
ശ (B S;
S;a
ശ (B S;

.group ഷ
s.a
ഷ (B s.
s.a
ഷ (B s.

.group സ
sa
സ (B s
sa
സ (B s

.group ഹ
ha
ഹ (B h
ha
ഹ (B h


// chillu consonants
.group ൺ
n.
n.

.group ൻ
n
n

.group ർ
r
r

.group ൽ
l
l

.group ൾ
l.
l.

.group ൿ
ൿ k
ൿ k


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

// avagraha
// avagraha

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

ഃ h // visarga
ഃ h // visarga

a
a

a:
a:

i
i

i:
i:

u
u

u:
u:

Ry
Ry

e
_) എ ;e
e
_) എ ;e

e:
_) ഏ ;e:
e:
_) ഏ ;e:

aI
aI

o
o

o:
o:

aU
aU

// combining vowel signs

a:
a:

ി i
ി (ല്K I
ി i
ി (ല്K I

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

i:
i:

u
u

u:
u:

r-
r-

r-:
r-:

e
e

e:
e:

aI
aI

o
o

o:
o:

aU
ൗ aU // au length mark, treat at [aU] ?
aU
ൗ aU // au length mark, treat at [aU] ?

// virama
// chillu-virama (unofficial)
്് // espeak uses double-virama for "virama + U+200d" (zero-width joiner), to indicate a chillu character
് (_ y // epenthetic vowel at end of word
// virama
// chillu-virama (unofficial)
്് // espeak uses double-virama for "virama + U+200d" (zero-width joiner), to indicate a chillu character
് (_ y // epenthetic vowel at end of word

Ry:
Ry:

ly:
ly:



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

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


.group
$ do:l.ar
$ do:l.ar

+ 4
- 3
dictsource/pt_list View File

@@ -647,6 +647,7 @@ almoço $alt $verb
amarelo $alt
ameba $alt
amores $alt2
antonieta $alt2
apego $alt2 $noun
apelo $alt $verb
aposto $alt $verb
@@ -723,7 +724,7 @@ coice $alt2
colabore $alt
colete $alt2
colchete $alt2
colher $alt $verb
colher $alt $noun
colheres $alt $noun
colmeia $alt
colore $alt
@@ -762,8 +763,6 @@ descordo $alt
desespero $alt2 $noun
desfecho $alt2
desprezo $alt $verb
deva $alt2
devo $alt2
deveras $alt
dez $alt
diarreia $alt
@@ -839,6 +838,8 @@ fogos $alt
foguete $alt2
foice $alt2
forca $alt2
força $alt2 $noun
forço $alt
forças $alt2
fordes $alt2
fores $alt2

+ 1
- 0
dictsource/pt_rules View File

@@ -407,6 +407,7 @@ respond) e (L07_ e // cor-
viv) e (L07_ e // re-
qu) e (brL04_ E
_hosp) e (dL03_ E
_d) e (vL03_ e
_gr) e (gL03_ e
_n) e (grL03_ e
_estr) ei (L03_ EI

+ 36
- 31
phsource/compile_report View File

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

87 phoneme tables
88 phoneme tables
new total
base 109 109
consonants 10 118
@@ -22,10 +22,12 @@ consonants 10 118
fr 64 146
fr-ca 11 146
hi 57 150
bn 5 150
ne 18 158
ur 6 150
ta 23 154
kn 17 150
ml 21 153
ur 6 150
ml 22 154
hu 25 124
lt 44 139
lv 29 127
@@ -65,7 +67,6 @@ consonants 10 118
da 36 131
ka 20 114
rw 15 132
ne 18 158
pa 15 152
prs 8 113
sl 10 137
@@ -432,7 +433,7 @@ l/l_ [l] base
[l/] fr
l/l_@ [l/3] base
[l/] fr
l/l@ [h6r] base
l/l@ [] base
[l#] base
[l] fr
[l/2] fr
@@ -466,7 +467,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 [h6r] base
l/la [] base
[l#] base
[l] fr
[l/2] fr
@@ -474,7 +475,7 @@ l/la [h6r] base
[K] tn
l/l_a [l/3] base
[l/] fr
l/le [h6r] base
l/le [] base
[l#] base
[l] fr
[l/2] fr
@@ -486,7 +487,7 @@ l/L_eL_af [&] af
[&:] af
l/l_front [L] sq
l/l_front_ [l/4] sq
l/li [h6r] base
l/li [] base
[l#] base
[l] fr
[l/2] fr
@@ -500,7 +501,7 @@ ll/ll [L] base
ll/_ll [L] base
l/l_long [l] base
[l] fr
l/lo [h6r] base
l/lo [] base
[l#] base
[l/2] fr
[K] nso
@@ -511,7 +512,7 @@ l^/l_rfx [l.] base
[l;] lt
[l] ru
[l^] ru
l/lu [h6r] base
l/lu [] base
[l#] base
[l] fr
[l/2] fr
@@ -673,7 +674,6 @@ r3/r_trill [R2] base
[R] pl
[r*] sr
[r] ru
[x] pt
[r] tn
r3/r_trill2 [R] base
[r] cy
@@ -690,7 +690,6 @@ r3/r_trill.wav [R2] base
[R] pl
[r*] sr
[r] ru
[x] pt
r3/r_uvl [r"] base
[r2] de
r3/r_uvl.wav [r"] base
@@ -854,7 +853,8 @@ ustop/k_asp [kh] consonants
[gh] hi
[kh] zh
[kh] tn
ustop/k_asp2 [k#] ka
ustop/k_asp2 [kh2] ml
[k#] ka
ustop/k_ejc [k`] am
ustop/ki [k] base
[k] base2
@@ -873,6 +873,7 @@ ustop/kl [k] base
[k] base2
[k] et
[k] fr
[kh2] ml
[k] lv
[k] el
[k] zhy
@@ -1124,11 +1125,11 @@ vdiph2/y-y# [yY] fi
vdiph/8u [oU] en-us
[ou] zh
vdiph/aae [aI] en-us
vdiph/aai [ai] lt
vdiph/aai [aI] ne
[ai] lt
[ai] lv
[aai] zhy
[aI] sq
[aI] ne
vdiph/aai_2 [AI] af
[AY] cy
vdiph/aai_3 [ai] fi
@@ -1144,9 +1145,9 @@ vdiph/aau_2 [aU] en-wi
[aU] la
[aau] zhy
vdiph/aau_3 [aU] hi
[aU] ne
[aU] kn
[aU] ml
[aU] ne
[aU] te
vdiph/aau_4 [aU] vi
vdiph/aau_6 [aU] de
@@ -1206,10 +1207,10 @@ vdiph/ee-e [E:] hi
vdiph/eei [EI] base2
[eI] en
[EI] de
[eI] ne
[EI] nl
[EI] vi
[eI] hy
[eI] ne
[eI] prs
vdiph/eei_2 [eI] eo
[ei] fi
@@ -1244,12 +1245,12 @@ vdiph/ei [eI] base2
vdiph/eu [eU] base2
[eU] cy
[eU] eo
[eU] ne
[eU] lt
[eU] nl
[eU] sk
[eU] pt
[eU] vi
[eU] ne
vdiph/eu_2 [eu] fi
[eu] mt
vdiph/@i [Yi] et
@@ -1274,11 +1275,11 @@ vdiph/i#i [yI] ro
vdiph/oi [oI] base2
[OI] en-wm
[OY] de
[oI] ne
[oI] it
[OI] la
[OI] is
[oI] vi
[oI] ne
vdiph/oi_2 [oI] af
vdiph/ooi [OI] en
[OI] en-n
@@ -1299,8 +1300,8 @@ vdiph/ooi_4 [OI] en-us
vdiph/oou [oU] cs
[OU] grc
vdiph/ou [ou] fi
[ou] zhy
[oU] ne
[ou] zhy
[ou] mt
vdiph/ou_2 [oU] lt
[oU] sk
@@ -1319,11 +1320,11 @@ vdiph/@u_en [oU] en
[@U] id
vdiph/ui [uI] base2
[uI] eo
[uI] ne
[ui] lt
[ui] lv
[uI] vi
[ui] zhy
[uI] ne
vdiph/u-i [yI] vi
vdiph/ui_2 [uI] af
vdiph/ui_3 [uI] cy
@@ -1535,9 +1536,9 @@ vowel/@_3 [@#] en
[@2] en-sc
[@5] en-sc
[@3] hi
[@3] ne
[@3] ur
[@] da
[@3] ne
[@] am
vowel/3_2 [3:] en-n
[@] zh
@@ -1723,17 +1724,19 @@ vowel/aa_8 [0] en-us
vowel/aa_9 [a] fi
[a] et
[a:] hi
[a:] bn
[a] ne
[a] pa
[a] ak
[a] mt
[A] kk
vowel/@_bck [@] hi
[@] bn
[V] ne
[@/] ne
[@] ur
[@] bg
[@] zh
[V] ne
[@/] ne
[@] pa
vowel/e [e] base
[e] base2
@@ -1744,6 +1747,7 @@ vowel/e [e] base
[eI] en-wi
[e:] af
[e:] cy
[e] ne
[e] ta
[e:] ta
[e] kn
@@ -1764,7 +1768,6 @@ vowel/e [e] base
[?e] da
[e] rw
[e#] rw
[e] ne
[e] wo
[e:] wo
[e] dv
@@ -1918,6 +1921,7 @@ vowel/i [i] base
[i] en-wi
[i:] cy
[i] eo
[i] ne
[i:] ta
[i:] kn
[i:] ml
@@ -1935,7 +1939,6 @@ vowel/i [i] base
[i] ka
[i] rw
[i#] rw
[i] ne
[i] prs
[i] nso
[i] ak
@@ -2074,14 +2077,15 @@ vowel/@_low [@] en-rp
[@] hi
[V] hi
[@2] hi
[@] ml
[@] bn
[V] ne
[@/] ne
[@] ur
[@2] ur
[@] ml
[@] ro
[a#] no
[@] id
[V] ne
[@/] ne
[@] pa
[V] pa
[@] si
@@ -2123,6 +2127,7 @@ vowel/o [o] base2
[o] kl
vowel/o_2 [o:] cy
[o:] hi
[o:] bn
[o:] hu
[o:] la
[o:] no
@@ -2155,10 +2160,10 @@ vowel/oe_4 [W] sv
vowel/o_mid [U@] en-rp
[o] et
[O] fr
[o] ne
[o] hu
[o] bg
[o] tr
[o] ne
[o] az
[o] dv
[o:] dv
@@ -2313,6 +2318,7 @@ vowel/u_bck [u] base2
[u] fi
[u] fr-ca
[u:] hi
[u] ne
[u:] hu
[u:] lt
[u] nl
@@ -2337,7 +2343,6 @@ vowel/u_bck [u] base2
[u] ka
[u] rw
[u#] rw
[u] ne
[u] pa
[u] mt
[u:] ga

+ 2
- 2
phsource/ph_hindi View File

@@ -136,7 +136,7 @@ endphoneme

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

@@ -149,7 +149,7 @@ endphoneme

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


+ 18
- 1
phsource/ph_malayalam View File

@@ -132,7 +132,7 @@ phoneme v
endphoneme

phoneme r
import_phoneme base/*
import_phoneme base/**
endphoneme

phoneme R
@@ -142,3 +142,20 @@ endphoneme
phoneme d# // 'rr' sounds like English 'd'
import_phoneme base/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


+ 2
- 12
phsource/ph_pt_brazil View File

@@ -189,18 +189,8 @@ phoneme l
endphoneme


phoneme x // this is [R] from Slovak/Czech
liquid
trill
ipa ʁ
lengthmod 6
IF thisPh(isWordStart) THEN
ChangePhoneme(h) // Change by Cleverson 22.09.2012
ENDIF

Vowelin f1=0 f2=1700 -300 300 f3=-300 80
Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk
FMT(r3/r_trill) addWav(r3/r_trill.wav, 50)
phoneme x // (previously [R] from Slovak/Czech)
import_phoneme base/h
endphoneme



+ 9
- 9
phsource/phonemes View File

@@ -1718,6 +1718,15 @@ include ph_french_ca
phonemetable hi base
include ph_hindi

phonemetable bn hi
include ph_bengali

phonemetable ne hi
include ph_nepali

phonemetable ur hi
include ph_urdu

phonemetable ta hi
include ph_tamil

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

phonemetable ur hi
include ph_urdu


phonemetable hu base
include ph_hungarian
@@ -1857,12 +1863,6 @@ include ph_georgian
phonemetable rw base2
include ph_kinyarwanda

//phonemetable bn hi
//include ph_bengali

phonemetable ne hi
include ph_nepali

//phonemetable mr hi
//include ph_marathi


+ 38
- 29
src/compiledict.cpp View File

@@ -51,15 +51,21 @@ static char letterGroupsDefined[N_LETTER_GROUPS];

MNEM_TAB mnem_rules[] = {
{"unpr", 0x01},

{"w_alt1", 0x11},
{"w_alt2", 0x12},
{"w_alt3", 0x13},
// {"w_alt4", 0x14},
{"w_alt4", 0x14},
{"w_alt5", 0x15},
{"w_alt6", 0x16},
{"w_alt", 0x11}, // note: put longer names before their sub-strings

{"p_alt1", 0x21},
{"p_alt2", 0x22},
{"p_alt3", 0x23},
// {"p_alt4", 0x24},
{"p_alt4", 0x24},
{"p_alt5", 0x25},
{"p_alt6", 0x26},
{"p_alt", 0x21},
{NULL, -1} };

@@ -83,24 +89,22 @@ MNEM_TAB mnem_flags[] = {


// these set the corresponding numbered bit if dictionary_flags
{"$pause", 8}, /* ensure pause before this word */
{"$only", 9}, /* only match on this word without suffix */
{"$onlys", 10}, /* only match with none, or with 's' suffix */
{"$strend", 11}, /* full stress if at end of clause */
{"$strend2", 12}, /* full stress if at end of clause, or only followed by unstressed */
{"$unstressend",13}, /* reduce stress at end of clause */
{"$atend", 14}, /* use this pronunciation if at end of clause */
{"$atstart", 15}, // use this pronunciation at start of clause

{"$abbrev", 17}, /* use this pronuciation rather than split into letters */
{"$stem", 18}, // must have a suffix
{"$pause", 8}, // ensure pause before this word
{"$strend", 9}, // full stress if at end of clause
{"$strend2", 10}, // full stress if at end of clause, or only followed by unstressed
{"$unstressend",11}, // reduce stress at end of clause
{"$abbrev", 13}, // use this pronuciation rather than split into letters

// language specific
{"$double", 19}, // IT double the initial consonant of next word
{"$alt", 20}, // use alternative pronunciation
{"$alt1", 20}, // synonym for $alt
{"$alt2", 21},
{"$alt3", 22},
{"$double", 14}, // IT double the initial consonant of next word
{"$alt", 15}, // use alternative pronunciation
{"$alt1", 15}, // synonym for $alt
{"$alt2", 16},
{"$alt3", 17},
{"$alt4", 18},
{"$alt5", 19},
{"$alt6", 20},

{"$combine", 23}, // Combine with the next word

{"$dot", 24}, // ignore '.' after this word (abbreviation)
@@ -111,18 +115,23 @@ MNEM_TAB mnem_flags[] = {
{"$text", 29}, // word translates to replcement text, not phonemes

// flags in dictionary word 2
{"$verbf", 0x20}, /* verb follows */
{"$verbsf", 0x21}, /* verb follows, allow -s suffix */
{"$nounf", 0x22}, /* noun follows */
{"$pastf", 0x23}, /* past tense follows */
{"$verb", 0x24}, /* use this pronunciation when its a verb */
{"$noun", 0x25}, /* use this pronunciation when its a noun */
{"$past", 0x26}, /* use this pronunciation when its past tense */
{"$verbextend",0x28}, /* extend influence of 'verb follows' */
{"$capital", 0x29}, /* use this pronunciation if initial letter is upper case */
{"$allcaps", 0x2a}, /* use this pronunciation if initial letter is upper case */
{"$verbf", 0x20}, // verb follows
{"$verbsf", 0x21}, // verb follows, allow -s suffix
{"$nounf", 0x22}, // noun follows
{"$pastf", 0x23}, // past tense follows
{"$verb", 0x24}, // use this pronunciation when its a verb
{"$noun", 0x25}, // use this pronunciation when its a noun
{"$past", 0x26}, // use this pronunciation when its past tense
{"$verbextend",0x28}, // extend influence of 'verb follows'
{"$capital", 0x29}, // use this pronunciation if initial letter is upper case
{"$allcaps", 0x2a}, // use this pronunciation if initial letter is upper case
{"$accent", 0x2b}, // character name is base-character name + accent name
{"$sentence",0x2d}, // only if this clause is a sentence (i.e. terminator is {. ? !} not {, ; :}
{"$only", 0x2e}, // only match on this word without suffix
{"$onlys", 0x2f}, // only match with none, or with 's' suffix
{"$stem", 0x30}, // must have a suffix
{"$atend", 0x31}, // use this pronunciation if at end of clause
{"$atstart", 0x32}, // use this pronunciation at start of clause

// doesn't set dictionary_flags
{"$?", 100}, // conditional rule, followed by byte giving the condition number
@@ -611,7 +620,7 @@ static char nullstring[] = {0};

// PROBLEM vowel reductions are not applied to the translated phonemes
// condition rules are not applied
TranslateWord(translator,phonetic,0,NULL);
TranslateWord(translator,phonetic,0,NULL,NULL);
text_not_phonemes = 0;
strncpy0(encoded_ph, word_phonemes, N_WORD_BYTES-4);


+ 14
- 7
src/dictionary.cpp View File

@@ -3012,10 +3012,10 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
int no_phonemes;
int skipwords;
int ix;
int c;
const char *word_end;
const char *word1;
int wflags = 0;
// int wflags2;
char word_buf[N_WORD_BYTES+1];

if(wtab != NULL)
@@ -3165,20 +3165,20 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
if((end_flags & FLAG_SUFX)==0)
{
// no suffix has been removed
if(dictionary_flags & FLAG_STEM)
if(dictionary_flags2 & FLAG_STEM)
continue; // this word must have a suffix
}

if((end_flags & SUFX_P) && (dictionary_flags & (FLAG_ONLY | FLAG_ONLY_S)))
if((end_flags & SUFX_P) && (dictionary_flags2 & (FLAG_ONLY | FLAG_ONLY_S)))
continue; // $only or $onlys, don't match if a prefix has been removed

if(end_flags & FLAG_SUFX)
{
// a suffix was removed from the word
if(dictionary_flags & FLAG_ONLY)
if(dictionary_flags2 & FLAG_ONLY)
continue; // no match if any suffix

if((dictionary_flags & FLAG_ONLY_S) && ((end_flags & FLAG_SUFX_S)==0))
if((dictionary_flags2 & FLAG_ONLY_S) && ((end_flags & FLAG_SUFX_S)==0))
{
// only a 's' suffix allowed, but the suffix wasn't 's'
continue;
@@ -3212,13 +3212,13 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
continue;
}

if((dictionary_flags & FLAG_ATEND) && (word_end < tr->clause_end))
if((dictionary_flags2 & FLAG_ATEND) && (word_end < tr->clause_end))
{
// only use this pronunciation if it's the last word of the clause
continue;
}

if((dictionary_flags & FLAG_ATSTART) && !(wtab->flags & FLAG_FIRST_WORD))
if((dictionary_flags2 & FLAG_ATSTART) && !(wtab->flags & FLAG_FIRST_WORD))
{
// only use this pronunciation if it's the first word of a clause
continue;
@@ -3318,6 +3318,12 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
fprintf(f_trans,"' [%s] %s\n",ph_decoded,print_dictionary_flags(flags));
}
}

ix = utf8_in(&c, word);
if((word[ix] == 0) && !IsAlpha(c))
{
flags[0] |= FLAG_MAX3;
}
return(word_end);

}
@@ -3390,6 +3396,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f

found = LookupDict2(tr, word, word1, ph_out, flags, end_flags, wtab);


if(flags[0] & FLAG_MAX3)
{
if(strcmp(ph_out, tr->phonemes_repeat) == 0)

+ 5
- 5
src/extras.cpp View File

@@ -464,7 +464,7 @@ void Lexicon_It(int pass)
}

// translate
TranslateWord(translator,&word1[1],0, NULL);
TranslateWord(translator,&word1[1],0, NULL, NULL);
DecodePhonemes(word_phonemes,phonemes);

stress_posn1 = 0;
@@ -487,7 +487,7 @@ void Lexicon_It(int pass)
vowel_ix++;
}

TranslateWord(translator,&word2[1],0, NULL);
TranslateWord(translator,&word2[1],0, NULL, NULL);
DecodePhonemes(word_phonemes,phonemes2);

vowel_ix = 1;
@@ -802,7 +802,7 @@ void Lexicon_De()
}

// translate
TranslateWord(translator,&word2[1],0, NULL);
TranslateWord(translator,&word2[1],0, NULL, NULL);

DecodePhonemes2(word_phonemes,phonemes); // also need to change some phoneme names

@@ -1042,7 +1042,7 @@ void Lexicon_Bg()
*pw1 = 0;

// translate
TranslateWord(translator, &word[2],0, NULL);
TranslateWord(translator, &word[2],0, NULL, NULL);
DecodePhonemes(word_phonemes,phonemes);

// find the stress position in the translation
@@ -1300,7 +1300,7 @@ void Lexicon_Ru()
}

// translate
TranslateWord(translator, &word2[1],0, NULL);
TranslateWord(translator, &word2[1],0, NULL, NULL);
DecodePhonemes(word_phonemes,phonemes);

// find the stress position in the translation

+ 2
- 2
src/menus.cpp View File

@@ -89,10 +89,10 @@ wxMenuBar *MakeMenu(int type, const char *dict_name)

// DATA MENU
data_menu = new wxMenu;
data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data"));
data_menu->Append(MENU_COMPILE_PH2, _("Change sample &rate"));
data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary"));
data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)"));
data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data"));
data_menu->Append(MENU_COMPILE_PH2, _("Change sample &rate"));
data_menu->AppendSeparator();
data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list..."));
data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data"));

+ 23
- 11
src/numbers.cpp View File

@@ -656,20 +656,32 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control)
current_alphabet = alphabet;
if((alphabet != NULL) && !(alphabet->flags & AL_DONT_NAME))
{
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
{
// Can't find the local name for this alphabet, use the English name
phontab_1 = tr->phoneme_tab_ix;
ph_alphabet[2] = SetTranslator2("en"); // overwrites previous contents of translator2
if(Lookup(translator2, alphabet->name, &ph_alphabet[3]) != 0)
{
ph_alphabet[0] = phonPAUSE;
ph_alphabet[1] = phonSWITCH;
len = strlen(&ph_alphabet[3]) + 3;
ph_alphabet[len] = phonSWITCH; // switch back
ph_alphabet[len+1] = phontab_1;
ph_alphabet[len+2] = 0;
}
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;
}
}
}
@@ -876,7 +888,7 @@ static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB
nextflags = 0;
if(IsAlpha(c2))
{
nextflags = TranslateWord(tr, &word_end[2], 0, NULL);
nextflags = TranslateWord(tr, &word_end[2], 0, NULL, NULL);
}

if((tr->prev_dict_flags & FLAG_ALT_TRANS) && ((c2 == 0) || (wtab[0].flags & FLAG_COMMA_AFTER) || iswdigit(c2)))

+ 2
- 2
src/synthdata.cpp View File

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

const char *version_string = "1.46.38 27.Feb.13";
const int version_phdata = 0x014636;
const char *version_string = "1.46.39 01.Mar.13";
const int version_phdata = 0x014639;

int option_device_number = -1;
FILE *f_logespeak = NULL;

+ 7
- 0
src/tr_languages.cpp View File

@@ -808,6 +808,13 @@ Translator *SelectTranslator(const char *name)
}
break;

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

case L('h','i'): // Hindi
case L('n','e'): // Nepali
case L('p','a'): // Punjabi

+ 19
- 7
src/translate.cpp View File

@@ -807,8 +807,8 @@ int ChangeEquivalentPhonemes(Translator *tr, int lang2, char *phonemes)



int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wtab)
{//===========================================================================
int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wtab, char *word_out)
{//==================================================================================================
// word1 is terminated by space (0x20) character

char *word1;
@@ -943,6 +943,9 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt

if(dictionary_flags[0] & FLAG_TEXTMODE)
{
if(word_out != NULL)
strcpy(word_out, word1);

first_char = word1[0];
stress_bits = dictionary_flags[0] & 0x7f;
found = LookupDictList(tr, &word1, phonemes, dictionary_flags2, 0, wtab); // the text replacement
@@ -1760,6 +1763,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
int word_flags;
int word_copy_len;
char word_copy[N_WORD_BYTES+1];
char word_replaced[N_WORD_BYTES+1];
char old_dictionary_name[40];

if((f_logespeak != NULL) && (logging_type & 8))
@@ -1871,7 +1875,8 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
while(((c2 = word_copy[ix] = word[ix]) != ' ') && (c2 != 0) && (ix < N_WORD_BYTES)) ix++;
word_copy_len = ix;

flags = TranslateWord(translator, word, next_pause, wtab);
word_replaced[2] = 0;
flags = TranslateWord(translator, word, next_pause, wtab, &word_replaced[2]);

if(flags & FLAG_SPELLWORD)
{
@@ -1906,7 +1911,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
{
strcpy(ph_buf,word_phonemes);

flags2[0] = TranslateWord(translator, p2+1, 0, wtab+1);
flags2[0] = TranslateWord(translator, p2+1, 0, wtab+1, NULL);
if((flags2[0] & FLAG_WAS_UNPRONOUNCABLE) || (word_phonemes[0] == phonSWITCH))
ok = 0;

@@ -1934,12 +1939,12 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
if(ok)
{
*p2 = '-'; // replace next space by hyphen
flags = TranslateWord(translator, word, next_pause, wtab); // translate the combined word
flags = TranslateWord(translator, word, next_pause, wtab, NULL); // translate the combined word
if((sylimit > 0) && (CountSyllables(p) > (sylimit & 0x1f)))
{
// revert to separate words
*p2 = ' ';
flags = TranslateWord(translator, word, next_pause, wtab);
flags = TranslateWord(translator, word, next_pause, wtab, NULL);
}
else
{
@@ -1967,7 +1972,14 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
{
// re-translate the word using the new translator
wtab[0].flags |= FLAG_TRANSLATOR2;
flags = TranslateWord(translator2, word, next_pause, wtab);
if(word_replaced[2] != 0)
{
word_replaced[0] = 0; // byte before the start of the word
word_replaced[1] = ' ';
flags = TranslateWord(translator2, &word_replaced[1], next_pause, wtab, NULL);
}
else
flags = TranslateWord(translator2, word, next_pause, wtab, NULL);
// strcpy((char *)p,translator2->word_phonemes);
if(p[0] == phonSWITCH)
{

+ 21
- 21
src/translate.h View File

@@ -37,26 +37,18 @@
#define FLAG_SKIPWORDS 0x80
#define FLAG_PREPAUSE 0x100

#define FLAG_ONLY 0x200
#define FLAG_ONLY_S 0x400
#define BITNUM_FLAG_ONLY 9 // bit 9 is set
#define BITNUM_FLAG_ONLY_S 10 // bit 10 is set

#define FLAG_STRESS_END 0x800 /* full stress if at end of clause */
#define FLAG_STRESS_END2 0x1000 /* full stress if at end of clause, or only followed by unstressed */
#define FLAG_UNSTRESS_END 0x2000 /* reduce stress at end of clause */
#define FLAG_ATEND 0x4000 /* use this pronunciation if at end of clause */
#define FLAG_ATSTART 0x8000 // use this pronunciation if at start of clause
#define FLAG_SPELLWORD 0x10000 // re-translate the word as individual letters, separated by spaces
#define FLAG_ABBREV 0x20000 // spell as letters, even with a vowel, OR use specified pronunciation rather than split into letters
#define FLAG_STEM 0x40000 // must have a suffix

#define FLAG_DOUBLING 0x80000 // doubles the following consonant
#define BITNUM_FLAG_ALT 19 // bit number of FLAG_ALT_TRANS - 1
#define FLAG_ALT_TRANS 0x100000 // language specific
#define FLAG_ALT2_TRANS 0x200000 // language specific
#define FLAG_ALT3_TRANS 0x400000 // language specific
#define FLAG_COMBINE 0x800000 // combine with the next word
#define FLAG_STRESS_END 0x200 // full stress if at end of clause
#define FLAG_STRESS_END2 0x400 // full stress if at end of clause, or only followed by unstressed
#define FLAG_UNSTRESS_END 0x800 // reduce stress at end of clause
#define FLAG_SPELLWORD 0x1000 // re-translate the word as individual letters, separated by spaces
#define FLAG_ABBREV 0x2000 // spell as letters, even with a vowel, OR use specified pronunciation rather than split into letters
#define FLAG_DOUBLING 0x4000 // doubles the following consonant

#define BITNUM_FLAG_ALT 14 // bit number of FLAG_ALT_TRANS - 1
#define FLAG_ALT_TRANS 0x8000 // language specific
#define FLAG_ALT2_TRANS 0x10000 // language specific
#define FLAG_ALT3_TRANS 0x20000 // language specific
#define FLAG_COMBINE 0x40000 // combine with the next word

#define FLAG_ALLOW_DOT 0x01000000 // ignore '.' after word (abbreviation)
#define FLAG_NEEDS_DOT 0x02000000 // only if the word is followed by a dot
@@ -83,8 +75,16 @@
#define FLAG_ACCENT 0x800 // character name is base-character name + accent name
#define FLAG_HYPHENATED 0x1000 // multiple-words, but needs hyphen between parts 1 and 2
#define FLAG_SENTENCE 0x2000 // only if the clause is a sentence
#define FLAG_ONLY 0x4000
#define FLAG_ONLY_S 0x8000
#define FLAG_STEM 0x10000 // must have a suffix
#define FLAG_ATEND 0x20000 /* use this pronunciation if at end of clause */
#define FLAG_ATSTART 0x30000 // use this pronunciation if at start of clause

#define BITNUM_FLAG_ALLCAPS 0x2a
#define BITNUM_FLAG_HYPHENATED 0x2c
#define BITNUM_FLAG_ONLY 0x2e
#define BITNUM_FLAG_ONLY_S 0x2f


// wordflags, flags in source word
@@ -714,7 +714,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy);
int Unpronouncable(Translator *tr, char *word, int posn);
void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int tonic, int prev_stress);
int TranslateRules(Translator *tr, char *p, char *phonemes, int size, char *end_phonemes, int end_flags, unsigned int *dict_flags);
int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab);
int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab, char *word_out);
void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *tone, char **voice_change);
int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix_top, int n_buf, int *tone_type, char *voice_change);


+ 13
- 6
src/voices.cpp View File

@@ -798,14 +798,25 @@ voice_t *LoadVoice(const char *vname, int control)
break;

case V_DICTRULES: // conditional dictionary rules and list entries
case V_NUMBERS:
// expect a list of numbers
while(*p != 0)
{
while(isspace(*p)) p++;
n = -1;
if(((n = atoi(p)) > 0) && (n < 32))
if((n = atoi(p)) > 0)
{
p++;
conditional_rules |= (1 << n);
if((key==V_DICTRULES) && (n < 32))
conditional_rules |= (1 << n);
else
if((key==V_NUMBERS) && (n < 32))
langopts->numbers |= (1 << n);
else
if((key==V_NUMBERS) && (n < 64))
langopts->numbers |= (1 << (n-32));
else
fprintf(stderr,"Bad option number %d\n", n);
}
while(isalnum(*p)) p++;
}
@@ -837,10 +848,6 @@ voice_t *LoadVoice(const char *vname, int control)
new_translator->charset_a0 = charsets[value];
break;

case V_NUMBERS:
sscanf(p,"%d %d",&langopts->numbers,&langopts->numbers2);
break;

case V_OPTION:
value2 = 0;
if((sscanf(p,"%s %d %d",option_name,&value,&value2) >= 2) && ((ix = LookupMnem(options_tab, option_name)) >= 0))

+ 1
- 1
src/wave_sada.cpp View File

@@ -535,7 +535,7 @@ int wave_get_remaining_time(uint32_t sample, uint32_t* time)
#else
// notdef USE_SADA

void wave_init() {}
init wave_init() {}
void* wave_open(const char* the_api) {return (void *)1;}
size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize) {return theSize;}
int wave_close(void* theHandler) {return 0;}

Loading…
Cancel
Save