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 f746cb1e..83fd3f04 100644 Binary files a/phsource/j/je and b/phsource/j/je differ diff --git a/phsource/ph_danish b/phsource/ph_danish index 42217af9..5e9651b0 100644 --- a/phsource/ph_danish +++ b/phsource/ph_danish @@ -674,7 +674,7 @@ phoneme j NextVowelStarts VowelStart(j/j@) VowelStart(j/ja) - VowelStart(j/je,-60) + VowelStart(j/je,-40) VowelStart(j/ji) VowelStart(j/jo) VowelStart(j/ju) diff --git a/phsource/ph_georgian b/phsource/ph_georgian index 7d2675fd..e9719c79 100755 --- a/phsource/ph_georgian +++ b/phsource/ph_georgian @@ -28,7 +28,10 @@ endphoneme phoneme a vowel starttype #a endtype #a length 180 - FMT(vowel/a#_2) + IF thisPh(isUnstressed) THEN + FMT(vowel/a#_2) + ENDIF + FMT(vowel/a_3) endphoneme @@ -69,12 +72,15 @@ phoneme k# Vowelin f1=1 f2=1400 -100 100 f3=-150 80 Vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20 IF nextPh(isPause2) THEN - WAV(ustop/k_asp2, 40) + WAV(ustop/k_asp, 40) ENDIF - IF nextPh(l) THEN - WAV(ustop/kl) + IF nextPhW(#e) OR nextPhW(#i) THEN + WAV(ustop/k_asp_e, 40) + ELIF nextPhW(#o) OR nextPhW(#u) THEN + WAV(ustop/k_asp_u, 50) + ELSE + WAV(ustop/k_asp_a, 45) ENDIF - WAV(ustop/k_asp2, 60) endphoneme @@ -113,24 +119,27 @@ phoneme k import_phoneme consonants/k- endphoneme -phoneme q - vls uvl stop - lengthmod 2 - Vowelin f1=1 f2=1700 0 200 f3=-300 80 gpaus f4 rms=30 - Vowelout f1=1 f2=1700 -100 200 f3=-300 80 f4 rms=35 - - IF nextPh(#i) THEN - WAV(ustop/q2_i, 40) - ENDIF - WAV(ustop/q2, 48) -endphoneme - phoneme Q - import_phoneme base/r" + vcd vel frc + voicingswitch x + lengthmod 6 + Vowelin f1=2 f2=2300 200 400 f3=-100 80 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + FMT(voc/Q) addWav(ufric/xx, 100) endphoneme +phoneme Q2 + vcd vel frc + voicingswitch x + lengthmod 6 + Vowelin f1=2 f2=2300 200 400 f3=-100 80 + Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + FMT(voc/Q) addWav(ufric/x2, 50) +endphoneme + + phoneme r import_phoneme base/R endphoneme diff --git a/phsource/ph_irish b/phsource/ph_irish new file mode 100755 index 00000000..f1fcca86 --- /dev/null +++ b/phsource/ph_irish @@ -0,0 +1,239 @@ +// Version 2.4 January 2013 + +// short vowels + + +phoneme @ // Schwa, but always unstressed + vowel starttype #@ endtype #@ + unstressed + length 100 + IF nextPh(i:) THEN + Length 70 + FMT(vwl_af/r@) + ENDIF + IF nextPh(I) THEN + Length 70 + FMT(vwl_af/r@) + ENDIF + IF nextPh(e:) THEN + Length 70 + FMT(vwl_af/r@) + ENDIF + FMT(vwl_af/@) +endphoneme + + +phoneme @/ + vowel starttype #@ endtype #@ + length 120 + FMT(vowel/@) +endphoneme + + +phoneme a + vowel starttype #a endtype #a + length 150 + FMT(vowel/a_4) +endphoneme + + +phoneme a# + vowel starttype #@ endtype #@ + ipa ɐ + length 120 + ChangeIfStressed(a) + FMT(vowel/a#_3) +endphoneme + + +phoneme E + vowel starttype #e endtype #e + length 140 + FMT(vowel/e_mid) +endphoneme + +phoneme E# + vowel starttype #@ endtype #@ + length 120 + ChangeIfStressed(E) + ChangePhoneme(@/) +endphoneme + + +phoneme I + vowel starttype #i endtype #i + length 120 + FMT(vowel/ii_2) +endphoneme + +phoneme i // non syllabic i for end of words + vowel starttype #i endtype #i + ipa iU+032F + length 40 + FMT(vowel/ii_7) +endphoneme + + +phoneme O + vowel starttype #a endtype #@ + length 140 + FMT(vowel/V_4) +endphoneme + +phoneme O# + vowel starttype #@ endtype #@ + length 120 + ChangeIfStressed(O) + ChangePhoneme(a#) +endphoneme + + +phoneme U + vowel starttype #u endtype #u + length 140 + FMT(vowel/uu) +endphoneme + +phoneme U# + vowel starttype #@ endtype #@ + length 120 + ChangeIfStressed(U) + ChangePhoneme(@/) +endphoneme + +phoneme u1 + vowel starttype #u endtype #u + ipa uU+0306 + length 50 + FMT(vowel/u) +endphoneme + +phoneme 0 + vowel starttype #a endtype #a + length 180 + ipa A + FMT(vowel/aa_8) +endphoneme + +phoneme 0# + vowel starttype #@ endtype #@ + length 120 + ChangeIfStressed(0) + ChangePhoneme(a#) +endphoneme + + +phoneme o: + vowel starttype #o endtype #o + length 190 + FMT(vowel/o) +endphoneme + + +// long vowels + +phoneme A: + vowel starttype #a endtype #a + length 200 + FMT(vowel/aa_2) +endphoneme + + +phoneme e: + vowel starttype #e endtype #e + length 210 + FMT(vowel/e) +endphoneme + + +phoneme i: + vowel starttype #i endtype #i + length 210 + FMT(vowel/i) +endphoneme + + + + +phoneme u: + vowel starttype #u endtype #u + length 210 + FMT(vowel/u_bck) +endphoneme + + +// Diphthongs + + +phoneme @U + vowel starttype #@ endtype #u + length 240 + FMT(vdiph/@u_3) +endphoneme + +phoneme i@ + vowel starttype #i endtype #@ + length 240 + FMT(vdiph2/i@) +endphoneme + +phoneme u@ + vowel starttype #u endtype #@ + length 240 + FMT(vdiph2/u@) +endphoneme + +phoneme aI + vowel starttype #a endtype #i + length 250 + FMT(vdiph/ai) +endphoneme + +phoneme aI# + vowel starttype #@ endtype #@ + length 120 + ChangeIfStressed(aI) + ChangePhoneme(a#) +endphoneme + +phoneme aU + vowel starttype #a endtype #u + length 270 + FMT(vdiph/au_4) +endphoneme + +phoneme aU# + vowel starttype #@ endtype #@ + length 120 + ChangeIfStressed(aU) + FMT(vdiph/au_4) +endphoneme + + +phoneme ; // linking j, used between (i) vowels and a following vowel + // also to palatalize consonants + liquid palatal + lengthmod 0 + + IF prevPh(#i) THEN + ipa NULL // linking after i vowel, don't show in ipa + ENDIF + + NextVowelStarts + VowelStart(j2/j2@) + VowelStart(j2/j2a) + VowelStart(j2/j2e) + VowelStart(j2/j2i) + VowelStart(j2/j2o) + VowelStart(j2/j2u) + EndSwitch + + IF prevPh(#i) THEN + VowelEnding(j2/xj2, -40) + ENDIF + + IF prevPh(isPause) THEN + FMT(j2/_j2) + ENDIF +endphoneme + diff --git a/phsource/ph_malayalam b/phsource/ph_malayalam index 562f8f13..bfcc104d 100644 --- a/phsource/ph_malayalam +++ b/phsource/ph_malayalam @@ -144,18 +144,3 @@ phoneme d# // 'rr' sounds like English 'd' endphoneme -phoneme kh2 - vls vel stop - lengthmod 2 - voicingswitch g - Vowelin f1=0 f2=2300 200 300 f3=-150 80 - Vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20 - IF nextPh(isPause2) THEN - WAV(ustop/k_asp2, 50) - ENDIF - IF nextPh(l) THEN - WAV(ustop/kl) - ENDIF - WAV(ustop/k_asp2, 90) -endphoneme - diff --git a/phsource/ph_vietnam_hue b/phsource/ph_vietnam_hue new file mode 100644 index 00000000..373364b0 --- /dev/null +++ b/phsource/ph_vietnam_hue @@ -0,0 +1,49 @@ + +//==================================================== +// Vietnamese Phonemes - Make Huế Dialect +//==================================================== + + +phoneme 1 // ngang tone: level + stress + Tone(30, 2, envelope/p_level, NULL) // similar Hue dialect tone +endphoneme + + +phoneme 2 // huyền tone: low falling + stress + Tone(20, 25, envelope/p_fall,envelope/vi_6amp) // NULL) //20 8 +endphoneme + + +phoneme 3 // sắc Tone(rising + stress + Tone(2, 10, envelope/p_rise, NULL) // 25 50 45 75 +endphoneme + + +phoneme 4 // hỏi Tone(curve (dipping rising) + stress + Tone(20, 5, envelope/p_512,NULL) //Tone(55, 5, envelope/p_fallrise, NULL) //30 5 m 55 5 +endphoneme + + +phoneme 5 // ngã tone: broken (creaking rising) + stress + Tone(50,2, envelope/p_214, envelope/vi_5amp) // 28,58 m20 85 +endphoneme + + +phoneme 6 // nặng Tone(drop (constricted) + stress + //length 150 // ignore because it make too short sound 75 // reduce the length of the vowel + Tone(25, 10, envelope/p_512, envelope/vi_6amp) // 40 20 +endphoneme + + +phoneme 7 // Tone(1 (ngang) at end of clause + stress + Tone(5, 40, envelope/p_level, NULL) //Tone(99, 50, envelope/p_fall, NULL) // 40 20 +endphoneme + + diff --git a/phsource/r/aa b/phsource/r/aa index b183fbfa..b5e1193a 100644 Binary files a/phsource/r/aa and b/phsource/r/aa differ diff --git a/phsource/ustop/k_asp_a.wav b/phsource/ustop/k_asp_a.wav new file mode 100755 index 00000000..61c483c6 Binary files /dev/null and b/phsource/ustop/k_asp_a.wav differ diff --git a/phsource/ustop/k_asp_e.wav b/phsource/ustop/k_asp_e.wav new file mode 100755 index 00000000..1fcef3aa Binary files /dev/null and b/phsource/ustop/k_asp_e.wav differ diff --git a/phsource/ustop/k_asp_u.wav b/phsource/ustop/k_asp_u.wav new file mode 100755 index 00000000..7f12b18b Binary files /dev/null and b/phsource/ustop/k_asp_u.wav differ diff --git a/phsource/ustop/k_ejc.wav b/phsource/ustop/k_ejc.wav new file mode 100644 index 00000000..00232a77 Binary files /dev/null and b/phsource/ustop/k_ejc.wav differ diff --git a/phsource/vwl_en_us/oor b/phsource/vwl_en_us/oor index bb0e81d2..3d6ca31e 100644 Binary files a/phsource/vwl_en_us/oor and b/phsource/vwl_en_us/oor differ diff --git a/src/dictionary.cpp b/src/dictionary.cpp index ef80088d..2f54247f 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -310,7 +310,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) p++; // skip over the zero which terminates the list for this hash value } - if((tr->dict_min_size > 0) && (size < tr->dict_min_size)) + if((tr->dict_min_size > 0) && (size < (unsigned int)tr->dict_min_size)) { fprintf(stderr, "Full dictionary is not installed for '%s'\n", name); } @@ -1040,7 +1040,7 @@ static int GetVowelStress(Translator *tr, unsigned char *phonemes, signed char * { if(vowel_stress[ix] == 4) { - if(tr->langopts.stress_flags & 0x20000) + if(tr->langopts.stress_flags & S_PRIORITY_STRESS) vowel_stress[ix] = 1; else vowel_stress[ix] = 3; @@ -1208,12 +1208,6 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, max_stress = GetVowelStress(tr, phonetic, vowel_stress, vowel_count, stressed_syllable, 1); if((max_stress < 0) && dictionary_flags) { - if((tr->langopts.stress_flags & 1) && (vowel_count == 2)) - { - // lang=fr: don't stress monosyllables except at end-of-clause - vowel_stress[1] = 0; - dictionary_flags[0] |= FLAG_STRESS_END2; - } max_stress = 0; } @@ -2652,6 +2646,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c if((match1.points == 0) && ((option_sayas & 0x10) == 0)) { n = utf8_in(&letter,p-1)-1; + if(tr->letter_bits_offset > 0) { // not a Latin alphabet, switch to the default Latin alphabet language @@ -2720,11 +2715,19 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c p += (wc_bytes-1); } - if(((alphabet = AlphabetFromChar(letter)) != NULL) && (alphabet->flags & AL_WORDS) && (alphabet->offset != tr->letter_bits_offset)) + if(((alphabet = AlphabetFromChar(letter)) != NULL) && (alphabet->offset != tr->letter_bits_offset)) { - // switch to the nominated language for this alphabet - sprintf(phonemes,"%c%s",phonSWITCH, WordToString2(alphabet->language)); - return(0); + if(tr->langopts.alt_alphabet == alphabet->offset) + { + sprintf(phonemes,"%c%s",phonSWITCH, tr->langopts.alt_alphabet_lang); + return(0); + } + if(alphabet->flags & AL_WORDS) + { + // switch to the nominated language for this alphabet + sprintf(phonemes,"%c%s",phonSWITCH, WordToString2(alphabet->language)); + return(0); + } } } } 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