From ad8798cf221fba48fdec2738ebccad435a8dfffc Mon Sep 17 00:00:00 2001 From: jonsd Date: Fri, 8 Mar 2013 20:40:02 +0000 Subject: [PATCH] [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 --- dictsource/dict_phonemes | 41 ++-- dictsource/en_list | 1 + dictsource/en_rules | 4 +- dictsource/eo_rules | 321 +++++++++++++-------------- dictsource/ga_list | 245 +++++++++++++++++++++ dictsource/ga_rules | 430 +++++++++++++++++++++++++++++++++++++ dictsource/hu_rules | 78 ++++++- dictsource/ka_rules | 16 +- dictsource/pt_list | 4 +- dictsource/pt_rules | 10 +- dictsource/ta_rules | 6 + dictsource/vi_rules | 299 +++++++++++++++++++++----- phsource/compile_report | 54 +++-- phsource/j/je | Bin 1654 -> 1654 bytes phsource/ph_danish | 2 +- phsource/ph_georgian | 45 ++-- phsource/ph_irish | 239 +++++++++++++++++++++ phsource/ph_malayalam | 15 -- phsource/ph_vietnam_hue | 49 +++++ phsource/r/aa | Bin 5632 -> 5632 bytes phsource/ustop/k_asp_a.wav | Bin 0 -> 4394 bytes phsource/ustop/k_asp_e.wav | Bin 0 -> 3822 bytes phsource/ustop/k_asp_u.wav | Bin 0 -> 4224 bytes phsource/ustop/k_ejc.wav | Bin 0 -> 3972 bytes phsource/vwl_en_us/oor | Bin 2481 -> 3169 bytes src/dictionary.cpp | 27 +-- src/numbers.cpp | 59 +++-- src/phonemelist.cpp | 2 +- src/setlengths.cpp | 2 +- src/synthdata.cpp | 2 +- src/tr_languages.cpp | 54 ++--- src/translate.cpp | 73 +++++-- src/translate.h | 47 ++-- src/voices.cpp | 69 +++--- 34 files changed, 1778 insertions(+), 416 deletions(-) create mode 100755 dictsource/ga_list create mode 100755 dictsource/ga_rules create mode 100755 phsource/ph_irish create mode 100644 phsource/ph_vietnam_hue create mode 100755 phsource/ustop/k_asp_a.wav create mode 100755 phsource/ustop/k_asp_e.wav create mode 100755 phsource/ustop/k_asp_u.wav create mode 100644 phsource/ustop/k_ejc.wav diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 02f7fa4a..af156f6d 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -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 diff --git a/dictsource/en_list b/dictsource/en_list index 37a89107..6b276019 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -127,6 +127,7 @@ _, k0m@ _- h,aIf@n ?3 _- daS _. d0t +?3_. pi@rI@d _: koUl@n _; sEmIk'oUl@n _< lEsDan diff --git a/dictsource/en_rules b/dictsource/en_rules index 7e92b8fd..2a40b577 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -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 diff --git a/dictsource/eo_rules b/dictsource/eo_rules index 2b439efa..ea28016d 100644 --- a/dictsource/eo_rules +++ b/dictsource/eo_rules @@ -13,214 +13,215 @@ .group a - _) a(_ a - a a - aj aI - aŭ aU + _) a (_ a + a a + aj aI + aŭ aU .group b - _) b(_ bo - b b - -.group c - _) c(_ tso - _) ch(_ tSo - c ts - ch (K tS // foreign words - K) ch tS // foreign words - - -.group d - _) d(_ do - d d + _) b (_ bo + b b - _) d (-ro dokt'o - _) d (-rino d,okto +.group c + _) c (_ tso + _) ch (_ tSo + c ts + ch (K tS // foreign words + K) ch tS // foreign words + + +.group d + _) d (_ do + d d + + _) d (-ro dokt'o + _) d (-rino d,okto .group e - _) e(_ e - e e - ej eI - eŭ eU - + _) e (_ e + e e + ej eI + eŭ 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 - - ' - + plus_ - _) ++ (_ plusplus + C) ' (_ = // word end in apostrophe, stress the last vowel - . punkto - . (. _: - \.) . +' + + plus_ + _) ++ (_ plusplus + + . 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_: diff --git a/dictsource/ga_list b/dictsource/ga_list new file mode 100755 index 00000000..b888abdf --- /dev/null +++ b/dictsource/ga_list @@ -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 + \ No newline at end of file diff --git a/dictsource/ga_rules b/dictsource/ga_rules new file mode 100755 index 00000000..04b8ddc2 --- /dev/null +++ b/dictsource/ga_rules @@ -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: + + diff --git a/dictsource/hu_rules b/dictsource/hu_rules index 0596e36c..53de3bc1 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -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 diff --git a/dictsource/ka_rules b/dictsource/ka_rules index 729321d4..d1f35a70 100755 --- a/dictsource/ka_rules +++ b/dictsource/ka_rules @@ -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 diff --git a/dictsource/pt_list b/dictsource/pt_list index 792df1d7..2638dd55 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -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 diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 66d631df..b30bdb2c 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -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 diff --git a/dictsource/ta_rules b/dictsource/ta_rules index 09a0695d..fbf38c5c 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -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 diff --git a/dictsource/vi_rules b/dictsource/vi_rules index fa8ef8d3..7c7c4769 100644 --- a/dictsource/vi_rules +++ b/dictsource/vi_rules @@ -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_ . (. _: - \.) . - + \.) . + + diff --git a/phsource/compile_report b/phsource/compile_report index 554907e8..fa7f3990 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -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 diff --git a/phsource/j/je b/phsource/j/je index f746cb1e870d2da95b5307f62723297e576d75a1..83fd3f04760023301cf5ab9efb0bc14f2b2ed2b1 100644 GIT binary patch delta 129 zcmeyy^NnXiG&2+Pht09f+Zl5kxF0ZPFh(*kFn}-vgDI1PpbXOk#wZ{ggc%qfurWyT zFh5}I0kT1ufgyqOfXD;J2aGI?3=AO5z_5a+K?qsIh{K5wWHPdv12PPg8(F^s04mNI A?*IS* delta 129 zcmeyy^NnXiG&2*+iOsRh+Zl6raX(at3luIe}aUCJ|9`18MC6MyP}>(E{{O#1j)B2| X=>a2%2NBUwhKNjjqO@6u?+QBryU8{y diff --git a/phsource/ustop/k_asp_a.wav b/phsource/ustop/k_asp_a.wav new file mode 100755 index 0000000000000000000000000000000000000000..61c483c6c720bc35113b893a0893643f9a908895 GIT binary patch literal 4394 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 YGV|uJK1_I}uI^fH75yWbsppCR1Hi>p(f|Me literal 0 HcmV?d00001 diff --git a/phsource/ustop/k_asp_e.wav b/phsource/ustop/k_asp_e.wav new file mode 100755 index 0000000000000000000000000000000000000000..1fcef3aa03422626d88e00d5b51f535f39859af1 GIT binary patch literal 3822 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 R{A$MQn>x?r@k*Es{|B^0hRy&0 literal 0 HcmV?d00001 diff --git a/phsource/ustop/k_asp_u.wav b/phsource/ustop/k_asp_u.wav new file mode 100755 index 0000000000000000000000000000000000000000..7f12b18b06811861a4826f08b7f6f817c7e4bf01 GIT binary patch literal 4224 zcmWMp33N?Y_uu=Rd*90>hKQ;C2QgO%LJg&~#(ZCCl$g~RA!v-PY7t{-QK_LCv$QBd z#8AXsb1XhX%|l`qQ-lof-Fwd7|Fh0|YrVDZd-v|U_ix%=|I?wv_hkTje%_;f{5KP- znXiE6MD_q^w*^2z8HgJ+VNk5O5R7TC0Ae5-I+#-f&hTPB$EWxP@8W%2%*~-0ybqs4 zPk0x~!DW8U3#nCM+?&ot5yiDR3YS^iLh6JR2OkV97Z4dRSpLt6D$aYmsN_M(nUXpF zNJjgHx0Cm_H!twFz;m7}Fi+1?likMt)y1WKgWa`s8Jc30^~h7+JKD2Emc~N=(YL2w zEqvDO<@T0eJDODyu>}lD{rG^Avlo#l!Z%^U;w?ReGC7YZaJwXidz6z`s zd@U$B@E7khIgszVEBs-;t$6jmgC(QzD>S*{wYqbvs@p*b=Dw{?I~-Yw6o+HIH{Yt{he6nm~Wmh&~2$(@k-1V z1y(K3J*%y3BsRiVP=)rX?JAOj`8H?3UXg6Iwv(+)nIlSz)^LQvb(&hB`s=AWnMy%* ztRX_h1^iY7h*A*FBlRjhR}a-)bwAp}dtnxy#M5FgX5ee6$2RxX7gU7)M?KYNXdV}v zi9f-+*jH>siPi8SKcyJZ29ku#claLmhYl9xRQS zuz?5gGp@>G=>najIXnpxc{3E_ef&-|!mshU*lB9afpxeN6R;1Q;~4l0V=>4eaTp|E zB5dUdxCjqmKAfZ9=@WlRNyWl9Z^DYo7oBjH>1goSl|2;$7Y3~hxa&c?l4u4!^`~xS z_n_*hPmu+=m}a@wB|FtVZfDAukV~EPWz|t7xSy*%dIf(E+hL68Dx<6qt;sS(z7e}c zgqSIgVkUoumo9$sqI}-#7v9$`3Ld?=RdNLTl?n;X z34R_bLl=g$_WY=mR2iDAYWdKgrD|CH1D<&Q3>q2QvGmR0D^@-u-Ex@4h7luDX#w)_F*g1v#0?Qt@~`J!Za@xRxiCMWK)3f z$0cL^L3#_Gm80z^^0jCwf_RC#?h7dHUwo)IspPN|Mmxns@7{o% zz-fUi18WA1@;rutruGn>tyZXfO2BRQQhT4LqPM(vyoY2xjNuUYnLAJ{-PSf{s40DQ!Fr=b_EBBwQz+0rJK4G4O73V zKlHDNfQ2V`?k_<;}eM%|s3>e=);pQbqIVV+xFOyoBdN?YAMPLy-h_q+cG z_p#fK<8Y{`>Y3?jZdbKKWnDbRi}XIXpIV|n)KBRM3=rwoec8m0mI3zrm`G#YY0f!+ zZ8t&vmv3N<=}Ee^Sx%7o_%9q&m(^~kf}8EMQLm`Gm}rl)n%mm?Lqu9FaSi{68qzW~ zP94x^)hsTDyLhnpNYodXL}x4mIS`7ki8zzIw463m7kUS#Ljg81y}kp9_#3R}`*cO` z)>kNzlA!|D5;-zj)V8w4aB1U7@tixs7T(DjTpyP3c8J9ToKICD7CykQA(LnE*JiG{ z^q3ryFo(T798xd|Q}GAf&ZGGRRX3WhRY(0?FXv&0%pB!=L30nFw*TP^an;ea!t;ZPB^RJeW)P4yI#I@hv>(RG7}wXs+6*x9Dj+ zj8AhL^oc_Gj+G`IW2JetRyS5X+-uIaZj4^4SAm16Vx5?c-LRYS%V+9$RZrJaO{pnO z;Bb5eCt(t96ZgbhOn?JaUw`Br@@??-@%MH2sq6HJn~L5tS(KHlMWpnBPq%XGyK~)l zlvmHCxj5CjY_+rRd;ZU}*#22|#?f?McXy|`%hX@SL672XtR#Mu3G$3&`6u>4!9nT^ zH_C17R@5Wuds>Z+WheU!?|#pEd%UO&h5DurqYrc%_2voYzsd5J_zSy>syH7Tz*Wws zcGORYE7Xqx{9Z&{$Pf=hroaDQD zxgMrsRG#tJ5Uzu#(T|^rII%z=wq%!*$TqGwLSHqNEHwTy4kJtr&E;XyUAzlla$Rky zZ*-(yz~^9`nffRhCQf6r2**8;Pb0Y=bs$G4@oKn@O~ocWDk{lXaYyulWjv4CGeSI6 zfonV&>Ou#cfDy(qS3nFm)N830U!nJ?g04?qt_ySFGkMusV_gAlt&UU`O;khFKK`as__%Tkx)-V7kVkit2mBn~5UsOX0zf%{kXsV1bT%80V@CVg3S)ddR;W!wK z{X~rD2HSNd_0TPGGu>EslwL{gU>f`*XIn9LlAU4jDzQ8qqQ%^wc2EYlqeXlX>fkBS z+d3v~IZ*6@1Q-Hc$ROH{_h0bm`HwndTt^+(efcazh_&zHZ@jP;R$e9RFPXv*8}8I9M8$>7ypHl2}Q+4cS^Q6 zGbszY$br_s_8fb&<%&;m0PG;C%c@wlPA78@*o)uDC-NWJN9KvmVy?)8eH5#cbeyh0 zxwz;NK4@$h8i9EQeQI76tMK!`xRe+bDli5ii=EkSS5;a24DWt|5%?`=end}os=DJuJ7t~soJ;-)rPts_FP39(C^7GrMf>?W_>68{ z!&Z0)8;Oa=SqGZyUEm5O=-Rrqe%Iv1=XyAQ2pix8HWZtUYiICt+G{wofYwt0H)eqA za0=r@6_dQf@UD5QhtSvLhY@0&IYqb#L$MdM;l3te+|$QtzTx3(*aDZJIgW)ZyqtFG z2ksh!(tPJvH^;U0V`_+1nsPu2JrsEgah7TLk7 zXs25HHdcPs{RGe0L4TwMU<1b#Y>Z?dy4iV-Rwqvd52M~b-JSN zX}Hjj+e2e)DQ3$|tD!yA_FErW@5}R;0V$kH{U}Xm>2!TZXX}G{lWt}{Q*<=lqph@v z{JKbM-I+$1jwc&T4dC~n4Gs})%YdL6D-LODBLJ zDpI8h2n3}UDPe;M(gGxegaiVanfISPe)E0F%$xWAd+)jDo^z*r$Hc^xNTAoNNgalc znovCofYGaF643q!z(EuS5125Zx9)idz0d*e@o!ATSI9+WCn6*@vTOM?UzZ!%nflW_O$oIVIlSS-}{rYVhd_GTN~|b)`_2;FU~JtJUQlUd>(KxwJ^El^VN4G+D$L9}P?#FEB(^2CL}Z}Sb z?zEv=CDmzFm`jf#U(=T@61_Wa4;;sR7q!SQR@e*ioUly1J)+w z|KfkgGXvWSm*>{w|H||UCNU&DJp2!Dnb7DGKYAP;{ zs~(5>LVP`6TZ*D}dkcRGvg2{zrf(2pOzRx_5{rdtl{po=sH`%#qVmvKb z_34Vo9Rq)r=vsEJH#HDi(1V4}=I}P$UUb!e*7I@%yz%TD80M5Lfv5w%xZ;VA`W8*M z0bhOJMz(banF!}JGfg4s-VE#sb~a~x6PpP?ry9x(wN3YM{NnOWYpz6W@LC*4lA z*tzNr@kU^Qd(kBLMmP`LxBa8tQb_fj@T6h78R?#KTjPQmjMsR`M%warG}G;D#30G~ z>>r3Q>8xb>;IM5<*M7|o&U_PxOt!>p=#Fe$#~Ji9(P(LAndNw$V_B0Uc$8I@&1@5G zk};jbZEyEYmc(q{WfPX}DpJLQF-Doo`3k8+_HgU{3OmzU#^Ptb$gsOyX^uVl&ttALC;?*9;{sF%}G4=!J03{LO^6k#ssFqw5#|EKtr>Ab`>{Dlp0R022y z!}ylEv4*XY$0f|?YW*F9@rZ}Eo_D?K4Up_ zVkQ&t63+7`XK}H*Q%V|ofb-ae>-d0oR8@O^&2gNDQ5c3rEU+uMkVQPr*8GZxc$Hld z3J=P16<-$W#mr_|)e6L-sWQLBEa7pD&2ftZd6EZMTL{LgTRVA;$Mq=!clo2(bd;NP zXAIgQ0h2kA5qJ~h&=31{@)mxi_s_VK8y`R-|l}Ky`ehr{*9I_t+43boV_rQQR-ow=?S19>!soJ|9K{ z{K_=^gk~6tA&NCjSBK&V+o^_W7=tx<%;#{Kjd2Mxl*P-!zd63e8(5(`^O&mqTcZi` zITlsST3v4^ZWrkO8Ca%@`skT6%u=LRbYeg?XQQTglO`p_jA0E`x(6A;=X=I0$HsW7?hRIchfqb>r>isdF#_Mwt9*JW$NTDE zZ~TTv*d$C>FbQK(OV|(9MEf~e%)7#5q@bx_p>ZxQMani8+j8Q$7@< z8>(wNr7`<-)=zv}XPi}rjWvlA6zL#`Fen!EQ`|?26pnRl#5_HDKztma>L0R&PA=jy zE?{+(#mk!NNn+kKVRKv)S)V_!t+HRJ37McwxAR-g@e}URvtMv8FEdKL+@UM`bk;LX zPftb35ywyQBWXtsb)z1hXx_$3xpqhet}0qFo9b#Qe85kXeS*+G&*@yM3g5*-^?kkh zhpEOr!MH%S|Civ0$njY3L{C#^A$Hm>?w&wmaAn}4t?MlF_VBfLC|;el@7aIYV|I~U zhW#eptkIN4NYh?dKSpDrxrog|e~ayB=ej-Y9=nJZADO1kX>(n?*lS<2Z`&AF#8sr3 z4^16&UbEPOomA5!4pBxc#Gjv~rK6O8JMk-ke_{|P*sS0zw>;NjsX1b%n0V74b)+V4rvTAnuoxlnt^7u`24*Pc|p46)134Z-y0%@9hC1pc4njy zt7VRvPUe5`;!mm50Jai8YANz2)4?ppXgm^jnbOVQIa>%e0i`7K)PKKFUMpVL&~z>m z%Gbq@-^H74Qn5N%jd5nYS)!gS6e}pDeiN@_y5@Vbl;U};5>wcno8tTe_g)H4eaj*855 zcLh%bqwOZvHJhCuJqw*7*l72<%iI(<-3?BveVz4^+7hmFjd(hq#b3WC)l{e?iNOMlQF^1diBioCG@~UR0w7D%+Z6@uU z!gwKGU7GCE#7|~jb{9+9XcEq_0zN`TY5Po}S4OH@(ljz7k)f`9XJds~ru&HF(VUOBD>?igoh#Ez*@8(y3_m=!jIiySVnEW+p`r`=|W5 zw|0crZIQdmO|gsdqM2+m%y3hL+KjW~w3YlMm7HcSn@gI&656GzbGW#$SNlh%FpHFa zEn_{^kthr=pqA-u28bDJdC;B_Zz^IxzDK;7U~b_mJ4#RgVjp?!2jWO6IZBLF`;O+K zk@An0b7{+y4=+^@`e>4h_yx|1*&S5lL^!e z$CcS6eV3)4M9GP#sG>z^XJX7)e62}8q#YmhkWu#*sdLvFcMPUUAub$_@jKCYOD<)Fv4 z(GC-C9vtQ{P8I9&rGuejcO`MYoqY42W;H{IU*~P@6lLV?gH`!0IqoXy)DvB6ta)3d zr>86SLt14;Mats;v<;o$eR1rbu-+=asV5Fzl-q;}|7*%^m$WKZcl^B*?dLhEVTQg< zQEoS+Y?=DBP46zr{Wqz$9QjLz{OYE7drbG`D*7>L-3eXI)wk(-w_SZYryb(7Tx^Zv LKIC`0x{dz_>VfxF literal 0 HcmV?d00001 diff --git a/phsource/vwl_en_us/oor b/phsource/vwl_en_us/oor index bb0e81d21cf9e779f094fcab9cb480b58298931c..3d6ca31ed749a85aca4d0dd35127b379c97795e6 100644 GIT binary patch literal 3169 zcmchZ&2Lmy7{;IZxXkU$v@`vhPCGNDbowz>m?}gxKzS5AZ2MU^xPzEgX2xAtiUY(zc0%V{ld z^KRv+GVDpwI@LwX(6dU@?K!1{lIp-p^W4v_agAwGWv%0!5l$?D4ycbeInDg>*79ra zKL*~fLHK8b_(Eu)LIaxxd7zF;pGnD2qZgu06?Q~}fh}z+oQzqDNpxfbO7(Tk;xeta5 z@G=Zno3xuXn{^c3#%ZIVMVOpm?uW$;D|=x$WIqf0-Sl3@ZqO|JcQJROMTVAV*92dh z;Ec6SgA)65e6yc-eVX~RslzWLA<;qnJ4Kuscnxe;(W}vLBRa%%GdfhS(V^kKh^`+)ibsk!Tj~>U$AUv(bZ#QZeEAP}(dRP?@Q>&<3wI24e&Z8}I((>^8 zgnaxz3F~PWA8D;25)zCS3u%-YKuJ4c9eSFgW)Gvppi^iF9WGAB>zx05s;+~#5E{fo z1G9K&=CS{dhnv&k+IW~=bsY}qguc;BaQrb!%)$4BUjbz%zAJdS0j2yc5mEnt6$E$s8azG;fEcxH9c|$xkf%mQR{_ z>CKcn+L5!JYRgL%|4`vn%+@sW(zMU*(2|AhPu+N4xCE$DDm&*@R_kz0t9B5%g==`lRn za{CyH^uoTWVEM;x1XHue-498g(=?yiVq*veD#XEhXAQBt#8<5{u&-H6T>3kVfWZ4{ zBvhg~Hn9iWl&~GO$kK|6sTOHgOfgldn2OPO)T$-xFu0;(n)X*#OjUnn#Z>i!Rjrt| zar4fTlTI_gj}qIdjLc7qaBBB$7IrOT>d#|3A!3{C9c zv{<~37E;-1k-d%<*H*96N-d<-)nYT%&=GyYJ+X_rX-W6N%qYB+;KN$pag>_cBnm-RX1xT|rt7OAkDU6a1-gR(iC+R8HTU?kPHm>7*`|2QP IrRh2PKXGw{Bme*a delta 1009 zcmb`G&npCB9LAq{XW7?oi}E9x^>a$2n301V6cH)J#z79+;xGp;a@d1xDLHM?dvPHL zKT3YABy!NYNiJ@ZG;aF`IOCm}eRrg-xtPPePj6G-&+~kr`KY<5ppz4W15=ZOu`Sx0 zeEiM;up~?32cG#`Bm0gXmw{2@-p_};Z_KdJGvBFFp@F#K=|sJ!HPzLfh+!7TSi=I& zv5#&TP*_yDG_%OiSMo}1f_Z|fFX_u6$jVSYrB6p|p~i@yw8FzVZP52fhKl>f=u1H8 zM12cqcj-0N)htCGlZA)L@E@lC8m3dfVZGe!BJQz)Io#q7Q_!KJiM0i6!zdAk<9Wjl zL#;4e>1){VWneo+XVM-UEmo4txGCNx)qJP?At;;9Z8jZ1Sv03dict_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); + } } } } diff --git a/src/numbers.cpp b/src/numbers.cpp index ecd5d288..e60be3ad 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -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; - } + 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; + 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) diff --git a/src/phonemelist.cpp b/src/phonemelist.cpp index 0449a116..8c33fdd5 100644 --- a/src/phonemelist.cpp +++ b/src/phonemelist.cpp @@ -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 diff --git a/src/setlengths.cpp b/src/setlengths.cpp index 4dffac0e..392faa2b 100644 --- a/src/setlengths.cpp +++ b/src/setlengths.cpp @@ -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; } diff --git a/src/synthdata.cpp b/src/synthdata.cpp index d28bb8de..d9747299 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -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; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 82b1bd82..2819e5d1 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -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 diff --git a/src/translate.cpp b/src/translate.cpp index 16cc4347..9feb592d 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -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)) diff --git a/src/translate.h b/src/translate.h index cae09816..89c9e58e 100644 --- a/src/translate.h +++ b/src/translate.h @@ -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); diff --git a/src/voices.cpp b/src/voices.cpp index eea62a1a..5c5ad948 100644 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -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); + if(n_voices_list >= (N_VOICES_LIST-2)) + break; // voices list is full - ftype = GetFileLength(fname); - - if((ftype == -2) && (FindFileData.cFileName[0] != '.')) + if(FindFileData.cFileName[0] != '.') { - // 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; + sprintf(fname,"%s%c%s",path,PATHSEP,FindFileData.cFileName); + ftype = GetFileLength(fname); - // pass voice file name within the voices directory - voice_data = ReadVoiceFile(f_voice, fname+len_path_voices, FindFileData.cFileName); - fclose(f_voice); + 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; - if(voice_data != NULL) - { - voices_list[n_voices_list++] = voice_data; - } + // 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