From 3eb5cb58d7cd170084e81eb63247f28b1ddc5dcb Mon Sep 17 00:00:00 2001 From: jonsd Date: Fri, 1 Mar 2013 20:45:05 +0000 Subject: [PATCH] [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 --- dictsource/dict_phonemes | 50 +++-- dictsource/en_list | 4 +- dictsource/en_rules | 14 +- dictsource/hi_list | 68 +++--- dictsource/hi_rules | 436 +++++++++++++++++++-------------------- dictsource/ml_list | 68 ++++-- dictsource/ml_rules | 251 +++++++++++----------- dictsource/pt_list | 7 +- dictsource/pt_rules | 1 + phsource/compile_report | 67 +++--- phsource/ph_hindi | 4 +- phsource/ph_malayalam | 19 +- phsource/ph_pt_brazil | 14 +- phsource/phonemes | 18 +- src/compiledict.cpp | 67 +++--- src/dictionary.cpp | 21 +- src/extras.cpp | 10 +- src/menus.cpp | 4 +- src/numbers.cpp | 34 ++- src/synthdata.cpp | 4 +- src/tr_languages.cpp | 7 + src/translate.cpp | 26 ++- src/translate.h | 40 ++-- src/voices.cpp | 19 +- src/wave_sada.cpp | 2 +- 25 files changed, 687 insertions(+), 568 deletions(-) diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 96d541b0..755edc6a 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -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 diff --git a/dictsource/en_list b/dictsource/en_list index 27531271..208b18bc 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -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 diff --git a/dictsource/en_rules b/dictsource/en_rules index 97f6c7ab..37889166 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -1,6 +1,6 @@ // *************************************************************************** -// * Copyright (C) 2005 to 2010 by Jonathan Duddington * +// * Copyright (C) 2005 to 2013 by Jonathan Duddington * // * email: jonsd@users.sourceforge.net * // * * // * 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 diff --git a/dictsource/hi_list b/dictsource/hi_list index 82eecb20..43663a6e 100755 --- a/dictsource/hi_list +++ b/dictsource/hi_list @@ -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 diff --git a/dictsource/hi_rules b/dictsource/hi_rules index e5cd0291..b8cd8e16 100755 --- a/dictsource/hi_rules +++ b/dictsource/hi_rules @@ -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 + ँ n // candrabindu -.group ं - ं n // anusvara - ं (प m - ं (फ m - ं (ब m - ं (भ m - ं (म m +.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^ + ं (ज 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 diff --git a/dictsource/ml_list b/dictsource/ml_list index 76e8de39..da527242 100644 --- a/dictsource/ml_list +++ b/dictsource/ml_list @@ -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_ + + + + diff --git a/dictsource/ml_rules b/dictsource/ml_rules index c07810dd..ef9e9d87 100644 --- a/dictsource/ml_rules +++ b/dictsource/ml_rules @@ -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 diff --git a/dictsource/pt_list b/dictsource/pt_list index 3f55eae9..36e7edf6 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -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 diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 5a5a3600..e1a5a932 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -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 diff --git a/phsource/compile_report b/phsource/compile_report index 69fdc75a..47626176 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -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 diff --git a/phsource/ph_hindi b/phsource/ph_hindi index 84a70594..0ca2925c 100644 --- a/phsource/ph_hindi +++ b/phsource/ph_hindi @@ -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 diff --git a/phsource/ph_malayalam b/phsource/ph_malayalam index e81a6f1c..562f8f13 100644 --- a/phsource/ph_malayalam +++ b/phsource/ph_malayalam @@ -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 + diff --git a/phsource/ph_pt_brazil b/phsource/ph_pt_brazil index c39d76e3..1803f379 100644 --- a/phsource/ph_pt_brazil +++ b/phsource/ph_pt_brazil @@ -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 diff --git a/phsource/phonemes b/phsource/phonemes index 5f0f61e2..cfc8da01 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -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 diff --git a/src/compiledict.cpp b/src/compiledict.cpp index c8c4f5ef..bb4f7860 100644 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -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); diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 4ed621f6..2c9ffcd7 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -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) diff --git a/src/extras.cpp b/src/extras.cpp index a04e4704..7fb5c348 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -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 diff --git a/src/menus.cpp b/src/menus.cpp index 917f4899..52ac13ab 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -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")); diff --git a/src/numbers.cpp b/src/numbers.cpp index 838fc145..4cc9add3 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -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))) diff --git a/src/synthdata.cpp b/src/synthdata.cpp index eed59bf4..55f6bff4 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -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; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index db1766b8..d903b139 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -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 diff --git a/src/translate.cpp b/src/translate.cpp index 233a1c40..9917f04a 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -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) { diff --git a/src/translate.h b/src/translate.h index 9248d09e..2d7c5aa2 100644 --- a/src/translate.h +++ b/src/translate.h @@ -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 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 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 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); diff --git a/src/voices.cpp b/src/voices.cpp index f2947faf..68dcc5c7 100644 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -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)) diff --git a/src/wave_sada.cpp b/src/wave_sada.cpp index 54295822..f44c30fd 100644 --- a/src/wave_sada.cpp +++ b/src/wave_sada.cpp @@ -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;}