diff --git a/dictsource/az_list b/dictsource/az_list new file mode 100755 index 00000000..cd4b0495 --- /dev/null +++ b/dictsource/az_list @@ -0,0 +1,110 @@ + +// This file is UTF8 encoded +// Spelling to phoneme rules for Azerbaijani + + +// Numbers +_0 s@f'@R +_1 b'iR +_2 ic'i +_3 'ytS +_4 d'WRd +_5 b'eS +_6 alt'@ +_7 jedd'i +_8 s&Cc'iz +_9 dogg'uz +_1X 'on +_2X ijiRm'i +_3X ot'uz +_4X g'@Rx +_5X &ll'i +_6X altm'@S +_7X jetm'iS +_8X s&Cs'&n +_9X doxs'an +_0C j'yz +_0M1 m'in +_0M2 milj'on +_0M3 milj'aRd +_dpt _t,am_| // ?? + + +// Function words + // personal pronouns +mən $u+ +sən $u+ +o $u+ +biz $u+ +siz $u+ +onlar $u+ + + // possessive pronouns +mənim $u+ +sənin $u+ +onun $u+ +bizim $u+ +sizin $u+ +onların $u+ + +bu $u+ + + +// conjunctions +və $u+ +isə $u+ +də $u+ +həm $u+ +ya $u+ +da $u+ + +// prepositions +aid $u+ // about +ilə $u+ // with, by, in +dair $u+ // about + +// postpositions +ci $u +cı $u +cü $u +de $u +dir $u +li $u +in $u +nə $u +ya $u +yə $u + +// Character names +b be +c dZe +ç tSe +_ə & +d de +f fe +g Je +ğ Qe +h he +x xe +j Ze +k ka +q ge +l el +m em +n en +_o o +p pe +r eR +s se +ş Se +t te +v ve +w dubElv'E +y je +z ze + +* ulduz $text +% faiz $text + + + diff --git a/dictsource/az_rules b/dictsource/az_rules new file mode 100755 index 00000000..695d6171 --- /dev/null +++ b/dictsource/az_rules @@ -0,0 +1,137 @@ + +// This file is UTF8 encoded +// Spelling to phoneme rules for Azerbaijani + +// Stress rule: Right-most vowel, but stop before the vowel which is +// marked as unstressed [%]. + +.L02 ı a o u // back vowels +.L03 i e ö ü + +.group a + a a + ai (K aI + -) a (_ a + +.group b + b b + +.group c + c dZ + +.group ç + ç tS + +.group d + d d + + -) dan (_ d%an + -) dən (_ d%&n + -) dək (_ d%&k + +.group e + e e + +.group ə + ə & + @) ə (_ %& + -) ə (_ %& + +.group f + f f + +.group g + g J + +.group ğ + ğ Q + A) ğ : + a) ğa : + o) ğo : + u) ğu : + ö) ğö : + ü) ğü : + i) ğ j + e) ğ j + +.group h + h h + +.group x + x x + +.group ı + ı @ + +.group i + i i + + @) iya (_ =i;a + +.group j + j Z + +.group k + k c + k (K C + +.group q + q g + q (_ x + +.group l + l l + l (L02 L + L02) l (K L + +.group m + m m + +.group n + n n + +.group o + o o + +.group ö + ö W + +.group p + p p + +.group r + r R + A) r (A * + ğ) r (A * + C) r (_ @-r + +.group s + s s + +.group ş + ş S + +.group t + t t + L03) t (L03 ts + +.group u + u u + +.group ü + ü y + +.group v + v v + +.group w + w w + +.group y + y j + +.group z + z z + +.group + ä & diff --git a/dictsource/bn_list b/dictsource/bn_list index 3bb9fdc4..e2ab79c7 100755 --- a/dictsource/bn_list +++ b/dictsource/bn_list @@ -9,15 +9,15 @@ _0 S'unjO _1 '&k _2 d'uj _3 t'in -_4 tS'ar +_4 tSh'ar _5 p'a~tS -_6 tSh'Oj +_6 tS#'Oj _7 S'at _8 'at.# _9 n'Oj _2a d'u // with hundreds etc. -_6a tSh'O +_6a tS#'O _9a n'O @@ -25,7 +25,7 @@ _10 d'OS _11 '&garo _12 b'arO _13 t'erO -_14 tS'oddO +_14 tSh'oddO _15 p'OnerO _16 S'olO _17 S'OterO diff --git a/dictsource/bn_rules b/dictsource/bn_rules index d16f18fd..c3077287 100755 --- a/dictsource/bn_rules +++ b/dictsource/bn_rules @@ -176,8 +176,8 @@ .group ছ - ছ tS#V - ছ (B tS# + ছ tShV + ছ (B tSh .group জ diff --git a/dictsource/de_list b/dictsource/de_list index 56d91fe4..071a62a7 100644 --- a/dictsource/de_list +++ b/dictsource/de_list @@ -63,6 +63,8 @@ _#32 l'e:rts'aIC@n _?? zymb'o:l _?A b'u:xstA:b@ _cap gr'o:s +_sub 'Unt@R|3_!,IndEks|| +_sup 'o:b@R|3_!,IndEks|| // accent names diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 82f5339d..036cfa02 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -36,6 +36,17 @@ Q r R R2 s S t T t# tS w x +Dictionary az_dict 2013-04-25 + +& @ @- a aI e E i +o u W y + +* : ; b c C d dZ +f g h j J k l L +m n p Q r R s S +t tS ts v w x z Z + + Dictionary bg_dict 2013-03-16 @ a e i o u @@ -47,7 +58,7 @@ s; t t; tS ts v x z Z z; -Dictionary bn_dict 2013-04-18 +Dictionary bn_dict 2013-04-25 & a a~ e e~ i i: i~ l- o O o: O~ o~ r- u @@ -113,7 +124,7 @@ r R R3 s S t T tS v w x z Z -Dictionary de_dict 2013-03-10 +Dictionary de_dict 2013-04-25 3 @ @- a A A: aI aU A~ E E2 E: e: EI i I @@ -137,7 +148,7 @@ p Q r R s s; t T ts v x z -Dictionary en_dict 2013-04-23 +Dictionary en_dict 2013-04-25 0 0# 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI3 @@ -225,7 +236,7 @@ p2 r r2 s S t t2 t3 tS v z Z z2 z3 -Dictionary ga_dict 2013-03-20 +Dictionary ga_dict 2013-04-25 0 0# @ a a# A: aI aI# aU aU# e E E# e: eI i @@ -288,15 +299,16 @@ S s2 t t2 tS ts v w z Z -Dictionary hy_dict 2008-12-22 +Dictionary hy_dict 2013-04-25 @ a aI e eI i i@ o u W y -** b c d dZ dz f g -h j k k# l m n p -p# r R r" s S t t# -tS ts ts# v X z Z +* ** b c d dZ dz f +g h j k k# l m n +p p# r R r" R2 s S +t t# tS ts ts# v X z +Z Dictionary id_dict 2011-02-21 @@ -500,7 +512,7 @@ r r. s S s. t t# t. t.# v w x z -Dictionary nl_dict 2013-04-23 +Dictionary nl_dict 2013-04-25 8 @ @- a A a: A~ e E e# E2 e: EI eU i I @@ -536,7 +548,7 @@ R s S t tS v w x z Z -Dictionary pa_dict 2013-03-17 +Dictionary pa_dict 2013-04-24 @ a a~ e E e~ E~ i I i~ I~ o O o: O~ o~ @@ -545,9 +557,9 @@ r- u U U~ u~ V V~ : ; b b# c c# d d# d. d.# f g g# h H j J J# k k# l l. m n -N n. n^ p p# Q R r. -R2 s S t t# t. t.# v -x z +N n. n^ p p# Q r R +r. R2 s S t t# t. t.# +v x z Dictionary pl_dict 2013-04-06 @@ -562,7 +574,7 @@ S s; S; t t; tS ts tS; ts; v w x z Z Z; -Dictionary pt_dict 2013-04-23 +Dictionary pt_dict 2013-04-25 & &/ &U~ &~ @ @- a A aI aU e E eI EI eU EU @@ -616,17 +628,17 @@ n.# n^ n^# p p# r s S s. t t# t. t.# tS v w -Dictionary sk_dict 2011-08-08 +Dictionary sk_dict 2013-04-25 & @- a a: e e: i i: l- l: o o: oU r- r: u u: -* ; b d d; dZ dz f -g h j k l l^ m n -N n^ p r R R^ R^/ s -S t t; tS ts v w x -z Z +* ; b c d d; dZ dz +f g h j k l l^ m +n N n^ p r R R^ R^/ +s S t t; tS ts v w +x z Z Dictionary sl_dict 2013-01-30 @@ -701,7 +713,7 @@ s s. S; t t# t. t.# tS v v# w z -Dictionary tr_dict 2013-04-20 +Dictionary tr_dict 2013-04-25 @ a e E i I o O u U W y Y diff --git a/dictsource/en_list b/dictsource/en_list index 88d26775..6380e295 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -106,6 +106,8 @@ _hok h'Uk // character names _cap k,ap@-t@L +_sub s,VbskrIpt|| +_sup s,u:p3skrIpt|| _?A l,Et3 _?? sImb@L _braille br'eIl @@ -2857,6 +2859,7 @@ temperature tEmprI2tS3 ?!3 temporary tEmpr@rI ?3 template tEmpl@t therefore $1 +thereof De@r'0v thermos T3:m@s thermostable $alt1 thesis Ti:sIs @@ -3454,6 +3457,7 @@ Ada eId@ $onlys Andrea $2 Adrian eIdri@n Agatha aga#T@ +Angela andZ@l@ Angelika $2 Aggie agi Agnes agn@s @@ -3605,6 +3609,7 @@ Guinevere gwInI#vi@3 Hadrian heIdri:@n Hamish heImIS Harriet hari@t +Harvey hA@vi Heidi haIdi Hecate hEk@teI Hekate hEk@teI @@ -3662,6 +3667,7 @@ Louise lu:w'i:z Luigi lu:'i:dZi Luis lu:Is Lupe lu:peI +Luther lu:T3 Madeleine mad@lI2n Madeline mad@lI2n Maeve meIv @@ -3781,6 +3787,7 @@ Vanessa $alt3 Wallace w0lI#s Wally w0li ?3 William wIlj@m +Yerevan jEr@v'an Yves i:v Yvonne $2 Zoe zoUi diff --git a/dictsource/ga_list b/dictsource/ga_list index e67f39c9..d2ea684d 100755 --- a/dictsource/ga_list +++ b/dictsource/ga_list @@ -1,7 +1,9 @@ // Irish Gaeilge dictionary // written by Ronan McGuirk -// January 2013 -// version 2.5 +// 2013 +// version 2.6.1 +// Please send comments and suggestions to espeak.gaeilge@gmail.com + // This file is UTF8 encoded // letters @@ -47,7 +49,7 @@ _cap m'o:r // accent names // names of symbols -ª_. pO#nk +_. pO#nk _, k0m@ _; semI _: ko:l0n @@ -152,22 +154,26 @@ amárach @m'A:r@x amuigh @mu1'I amháin @w'A:in am aUm -an @n +anaithnid '0nah@nIdZ anois @nIS anonn @naUn ann aUn anseo @nS'O +anuas a#n'u@s aodh e: aodha e: aon e:@n (ar ais) Er'aS arís @r'i:S as 0s +aschurtha '0sxUrh@ + atá @t['A: $u baill bu1'i:l bhaill vu1'i:l beidh bEg bhfuil w'Il +bheas v'e:@s bhuel w'El ceithre kEr@ cathair k'0h@r @@ -176,6 +182,7 @@ clainne kl'InE chlainne xl'InE chun xUn $u crainn kri:n +chrainn xri:n de dE $u+ des dEs $u @@ -184,6 +191,7 @@ di dI $u+ do dO# $u domhnach d[aUn@x domhnaigh d[aUnig +dúghorm d['u:Q"Or@m eile 'El@ euro ju:ro: faic f@ak @@ -214,6 +222,7 @@ le lE $u (muigheo) mu1'i:||'o: mhuigh vu1'i: (mhaigh eo) vu1'i:||'o: +mhama w'0m@ maith m'0 mhaith w'0 mbeadh m;O#X @@ -230,8 +239,10 @@ orthu O#rhu os o:s rabh raU raibh rEv +raidió r'adi:o: réamhrá r'e:@vr,a: réidh re: +'s s samhain saUIn san s@n seo S@_ diff --git a/dictsource/ga_rules b/dictsource/ga_rules index af166ccb..cef882c0 100755 --- a/dictsource/ga_rules +++ b/dictsource/ga_rules @@ -1,8 +1,10 @@ // translation rules for Irish Gaeilge // This file is UTF-8 encoded -// written by Ronan McGuirk January 2013 -// Version 2.5B +// written by Ronan McGuirk 2013 +// Version 2.6.1 +// Please send comments and suggestions to espeak.gaeilge@gmail.com + // Conditional rules // ?1 allow eclipsis as 2 separate words @@ -12,7 +14,7 @@ .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 +.L06 aidh idh aí á eá eadh adh ad adsa 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 @@ -21,14 +23,14 @@ .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 +.L15 c ch f bhf 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 +.L18 n nt nte neann neadh ntear nim nfear nfinn nfidh nfidis neamar .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 +.L22 eadh eag eaga eagán eagáinín eo io iu iú eall eabh ealtaine eann .L23 ea eo i .L24 b mb bh g gh p ph bp m mh @@ -40,14 +42,16 @@ abht aU#t[ amhr aUr // words like amhras K) amhl aUl - abhra aUr@ // words like slabhra + abh (C aU // 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 (nA @ + _) an (_ @n + _) an (- '0n // an prefix é) a @ // words like féach X) a (nn_ aU# X) a (ll_ aU# @@ -77,8 +81,9 @@ _) ao e: ae e: amhna (_ aUn@ + arraing arIng + _) ath (@@P3 ,0_ - .group á á A: @) á ,A: @@ -89,7 +94,7 @@ áinig A:nIg ái 'A:i - + .group ai ai a# L04) ai (L17 0# @@ -99,6 +104,7 @@ m) ai (n 0# c) ai (th 0# ch) ai (th 0# + ai (tín 0# ai (d 0# p) ai (l 0# @) ai (L11_ I @@ -112,8 +118,9 @@ X) aigh 'aI aigh aI# L04) aill (_ wi:l aing (_ Ing + ai (llimh '0 // words like Gaillimh + - .group b b b // broad L01) b b; // slender @@ -122,7 +129,7 @@ bh (_ vv bh (L22 vj // slender L01) bh v -?1 _m_) b (@ +?1 _m_) b (@ _) bhf v // urú broad _) bhf (L22 v; // urú slender _) bp b // urú broad @@ -134,8 +141,10 @@ a) bh (a U // for example cabhair ear) bha u: // words like Cearbhall bhfaigh v'aI + _) beann (@ ba#n + _) bheann (@ va#n + _) bun (C@P3 b,Un - .group c c k c (L01 k; // slender @@ -143,19 +152,20 @@ ch (L01 C; ch (é+ C; ch (ei+ x; -?1 _g_) c (@ -?1 _g_) c (L01 +?1 _g_) c (@ +?1 _g_) c (L01 _) cabhr k'aUr _) chabhr x'aUr + _) ceann (C@P5 k;,aUn + _) cheann (C@P6 C;,aUn - .group d d d[ // broad L01) d dZ // slender d (L22 dZ // slender d (L01 d; // slender i) d (i dZ -?1 _n_) d (@ +?1 _n_) d (@ dh Q // broad dh (ui Q // broad dh (ao Q // broad @@ -165,6 +175,11 @@ ?1 _) d (_t d[ ?1 _) d (_tL01 dZ _) d' (@P2 d + + _) d' d + _) d (_'fh d + + d'fh (L01 d i) dh (_ g a) dh (_ X o) dh (_ X @@ -174,8 +189,9 @@ dheartháir gr@h'A:r deirfiúr d;r@f'u:r dheirfiúr g;r@f'u:r + _) do (Ch@@P2 d[,U_ + _) dí (@@P2 d,i: - .group e e E# eá A: @@ -184,29 +200,39 @@ r) ei (m aI eighea aI eighea aI + s) ei (nn aI + sh) ei (nn aI eigh aI eo o: - eogh o: + eoi o: + eogha o: + eoghai o: d) eo (ch O# + dh) eo (ch O# _) eo (ch O# s) eo (_ @ - + .group é é 'e: éi 'e: + éa 'e: _) éi (rig aI // words like éirigh + _h) éi (rí aI _) éi (rí aI // words like éirí _) éireoidh aIro:Ig éacs e:@ks - + .group ea ea a# + eai a# X) ea (L21_ aU ea (ltaine aU g) ea (ll aU + l) eamh (n aU + dr) ea (m aU X) ea (ch 0 _L04) ea (g @ _L04) ea (dh_ @ @@ -217,7 +243,7 @@ eanbhean 'an@v,an eadhb aIb - + .group f f f // broad f (L22 f; // slender @@ -225,14 +251,16 @@ fh (éin_ h fh (L22 ; // slender @) f (L06_ h -?1 _bh_) f (@ -?1 _bh_) f (L22 ; + _) fo (C@@P2 f,U + _) fogh f'aU +?1 _bh_) f (@ +?1 _bh_) f (L22 ; + - .group g g g // broad g (L01 g; // slender -?1 _n_) g (@ +?1 _n_) g (@ _) gh Q" _) gh (L01 Q"j _) gc g // urú broad @@ -245,19 +273,24 @@ gh (n X@ gheobh j'o: gabh gaU + _) gearr (C@P5 g;,aR + _) ghearr (C@P6 Q"j,aR - .group h h h // silent - + .group i i I _) i I ia i@ ia (tha i: io O# + io (dá I _) io (nadh u:// words like ionadh + s) io (mb I + sh) io (mb I + _pr) io (n u: L16) inn (_ i:n iai i:i @@ -266,12 +299,18 @@ L12) i i // non syllabic short i after long vowel iú u: m) i (d_ i: // verb ending + _) in (@@P2 ,In_ + _) ionad (C@@P5 ,Ona#d[ - .group í í 'i: + íomh 'i:v + íochn 'i:xn + í (_ i: + ín (_ i:n + ío i:@ + - .group l l l // broad L01) l l; // slender @@ -280,8 +319,9 @@ ll (L23 l; l (g l@ l (b l@ + _) lorg (@@P4 l,Or@g + _) lán (C@@P3 l,A:n - .group m m m // broad m (L20 m; //slender @@ -296,8 +336,8 @@ _) mh (n v@ léir) mheas vas r) m @m // words like gorm + _) mear (@@P4 m,ar - .group n n n // broad n (L01 n; // slender @@ -318,8 +358,8 @@ n (ch n@ c) n @n ch) n @n + _) nasc (C@@ n,0sk - .group o o O# _) o 'O @@ -342,12 +382,13 @@ odl (a O#l oí i: - + .group ó ó 'o: ómhai o:@ - + ói (p@ 'o: + .group oi oi O _L15) oi (+ @'I @@ -369,15 +410,16 @@ _) oi (leá 'I oidh aI oir (_ 'ERR + _sc) oi (r O oigh (ea aI - + .group p p p // broad ph f // broad p (L22 p; // slender ph (L20 f; // slender -?1 _b_) p (@ +?1 _b_) p (@ .group r @@ -388,13 +430,13 @@ L12i) r (t_ Z rr R rg r@g + rgh rQ" 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 @@ -402,13 +444,14 @@ s (cL01 S s (CCL01 S // slender s (pCé s // broad -?1 _t_) s (@ +?1 _t_) s (@ sh h sh (CL01 h sh (L01 h; s (lL01 S + _') s (_ s // 's in poems etc + _) sain (@P4 s,an - .group t t t[ // broad L01) t c // slender @@ -418,7 +461,7 @@ ?1 _) t (_L01 c L01C) t tS // slender after consonant t (CL01 tS // slender with following consonant before vowels -?1 _d_) t (@ +?1 _d_) t (@ th h th (L01 h; L01C) th h @@ -432,7 +475,7 @@ thne (_ h@nE A) th (_ // silent th at word end - + .group u u U# ua u@ @@ -441,11 +484,14 @@ uai (d ui uá u:'A: ui I + ui (s U + ui (sce_ I uinn (_ 'i:n uinti U#'i:ntI _b) uí wi: _bh) uí wi: g) uí wi: + gh) uí wi: umh u: L03) ui @I _d) u (l_ O# @@ -453,8 +499,9 @@ gh) ui (gh_ @i: uí i: uachai 'ux@ + _) uimhir (C@P6 ,IvIR + - .group ú ú u: únmh u:nv diff --git a/dictsource/hy_list b/dictsource/hy_list index 6b07d71e..f18469ac 100644 --- a/dictsource/hy_list +++ b/dictsource/hy_list @@ -2,6 +2,8 @@ // This file is UTF8 encoded // Spelling-to-phoneme words for Armenian +// ?1 West Armenian + // names of letters _ա aIb բ ben @@ -20,7 +22,7 @@ _ը '@t# կ ken հ ho ձ dza -ղ r"ad +ղ r"at ճ ce մ men յ hi @@ -30,15 +32,16 @@ _ը '@t# չ tSa պ pe ջ dZe -ռ **a +ռ R2a ս se վ vev տ tyn ր re -ց tso +ց ts#o ւ hyn փ p#yr ք k#e +և jev _օ o ֆ fe @@ -52,6 +55,21 @@ d di e e f ef +// symbols +$ dolar +% տոկոս $text +* աստղանիշ $text ++ գումարած $text += հավասար $text + + +_՝ b'ut# +_՞ harts#ak'an +_՛ S'eSt +_։ verdZak'et // U+0589 +_: verdZak'et +_, storak'et +_. midZak'et // numbers @@ -82,5 +100,41 @@ _dpt _sto**ak'el_ // function words +ես $u+ // pronouns +դու $u+ +եք $u+ +Դուք $u+ +նա $u+ +այն $u+ +մենք $u+ +նրանք $u+ + +դուք $u+ +ենք $u+ +են $u+ + +այդ $u+ +այս $u+ +դա $u+ +որ $u+ +էր $u+ + +մի $u+ +է $u+ + +հետ $u+ // prepositions + +եվ $u+ // and +իսկ $u+ $brk // and, but +կամ $u+ // or +որը $u+ // which + +կարող $u+ // can + + + +// exceptions +ով ov +ովքեր ovk#er diff --git a/dictsource/hy_rules b/dictsource/hy_rules index 09453c2f..a0ef6020 100755 --- a/dictsource/hy_rules +++ b/dictsource/hy_rules @@ -2,8 +2,10 @@ // (consonants are changed for Armenian-West in the voice file "hy-west") // This file is UTF-8 encoded +// ?1 West Armenian + .L01 բ գ թ կ պ տ ք -.L02 ու այ իւ իյ ոյ // other vowel sounds +.L02 ու այ իւ իյ ոյ ա ե ը ի ո օ // vowel sounds // ligature .replace @@ -12,7 +14,7 @@ .group ա ա a - այ aI + այ (K aI այ (_ a .group բ @@ -41,7 +43,7 @@ .group է է e էօ W - էյ eI + էյ (K eI .group ը ը @ @@ -57,7 +59,7 @@ ի i իւ y իւ (_ iv - իյ i@ + իյ (K i@ .group լ լ l @@ -97,8 +99,9 @@ L02) մ (_ m .group յ - յ h // ?? [j] + _) յ h // ?? [j] _) յ (C h@ + յ j .group ն ն n @@ -133,8 +136,8 @@ _) ջ (C dZ@ .group ռ - ռ ** - _) ռ (C **@ + ռ R2 + _) ռ (C R2@ .group ս ս s @@ -151,6 +154,7 @@ .group ր ր r + L02) ր (L02 * _) ր (C r@ C) ր (_ @r L02) ր (_ r @@ -178,7 +182,5 @@ ֆ f _) ֆ (C f@ -.group - $ dol@ diff --git a/dictsource/nl_list b/dictsource/nl_list index b3f09c51..c3cfbe86 100644 --- a/dictsource/nl_list +++ b/dictsource/nl_list @@ -36,6 +36,8 @@ _s Es _t te: _cap h'o:fdlEt@r +_sub s'8pskrIpt|| +_sup s'yp@rskrIpt|| _?A l'Et@r _?? s'imbo:l diff --git a/dictsource/pa_rules b/dictsource/pa_rules index 5a160b57..f44574bf 100755 --- a/dictsource/pa_rules +++ b/dictsource/pa_rules @@ -371,12 +371,12 @@ ੱ) ਯ (_ j: .group ਰ - ਰ RV - ਰ (B R - @) ਰ (_ R - ੱ) ਰ R:V - ੱ) ਰ (B R: - ੱ) ਰ (_ R: + ਰ rV + ਰ (B r + @) ਰ (_ r + ੱ) ਰ r:V + ੱ) ਰ (B r: + ੱ) ਰ (_ r: .group ਲ ਲ lV diff --git a/dictsource/pt_list b/dictsource/pt_list index 343cfce5..f63744f7 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -69,6 +69,8 @@ v ve // not Roman numbers x Sis# _cap maI'uskulU +_sub ||subskR'itU +_sup ||sob*eskR'itU _?A l'etR&_ _?? s'imbolU_ _#32 esp'asU @@ -297,10 +299,10 @@ unts $abbrev usb $abbrev -dr $dot -dra $dot -mr $dot -mrs $dot +dr dowtor $dot +dra dowt'o*& $dot +mr m'ister $dot +mrs m'irsys $dot prof pR'Of $dot profº pR,ofes'or profª pR,ofes'o*& @@ -642,6 +644,7 @@ jamais $u+ $verbf abacaxi abakaSy abordo $alt aborto $alt $verb +absorta $alt2 acerto $alt2 $noun acertos $alt2 acocho $alt2 $noun @@ -847,7 +850,6 @@ enterro $alt2 $noun entorto $alt entroso $alt envelope $alt -envolto $alt2 enxaqueca $alt2 enxerto $alt2 $noun epopeia $alt @@ -941,7 +943,6 @@ hoje $alt2 horrores $alt2 humores $alt2 ideia $alt -imberbe $alt interesse $alt2 interesse $alt $verb iodo $alt2 @@ -960,6 +961,7 @@ lepra $alt leste $alt2 $verb ?2 lhe l^y lingueta $alt2 +lisboeta $alt2 lodo $alt2 logro $alt lopes $alt @@ -985,7 +987,6 @@ modelo $alt $verb moeda $alt moem $alt mofo $alt $verb -moleta $alt2 molho $alt2 $noun monera $alt morcego $alt2 @@ -994,6 +995,7 @@ moreia $alt mortos $alt motora $alt2 mui mwi +muleta $alt2 mureta $alt2 mutreta $alt2 namoro $alt2 $noun @@ -1091,6 +1093,8 @@ risoto $alt2 rock $alt roem $alt rola $alt2 $noun +roleta $alt2 +rolete $alt2 rolo $alt2 $noun rota $alt2 rota $alt $noun @@ -1148,6 +1152,7 @@ transtorno $alt $verb traqueia $alt travesso $alt2 tremores $alt2 +treta $alt2 trevo $alt2 troco $alt2 $noun tropa $alt @@ -1243,6 +1248,7 @@ python p'aIT&~N ?1 readme r'i:dmi: ?1 sapi s,ap'i ?1 scanner sk'En&r +sky sk'ay shake S'eIk ?1 shift S'ift ?1 scroll sk:r'ol @@ -1254,13 +1260,16 @@ símbolo s'imbolU ?4 símbolo s'iNbolU ?2 software s'Oftwe@- ?1 space sp'eIsy +?2 space sp'eIs ?1 sporting sp'Ort,ing tab t'aby tablet t'ablet ?1 telemóvel t,El,Em'OvEl ?1 telemóveis t,El,Em'OveIs# ?1 up &p -?1 upload &pl'oud +update &pd'eIt +upgrade &pgR'eId +upload &pl'oud ?2 web w'Eb ?1 yahoo 'i,ah'u ?2 yahoo iah'u @@ -1275,7 +1284,7 @@ louis _^_FR // foreign product names ?1 access 'aks,Es ?1 adobe &d'Oby - android &ndR'Oid + android &NdR'Oid apple 'Epow chrome kR'owmi debian d'Ebj&~N diff --git a/dictsource/pt_rules b/dictsource/pt_rules index f89ba2f5..3313e7ed 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -214,7 +214,7 @@ i) e (r_ E @s) e (r_ E - u) e (r_ E + qu) e (r_ E ib) e (rL04_ E d) e (rL04_ E @@ -226,11 +226,10 @@ @s) e (rL04_ E sp) e (rL04_ E - f) e (rL02_ E e (quL02_ E - +e (rbL04_ E e (rgL04_ E e (rsL04_ E @@ -240,6 +239,7 @@ e (ssL04_ E e (ss_ E // stress and english words ?2 ection (_ 'EkS&~N +?2 ee (n_ i e (stL04_ E e (strL04_ E @@ -372,6 +372,7 @@ tiv) e (L05_ E // es- viv) e (L05_ e _com) e (L05_ e + s_colh) e (res_ E _cos) e (L05_ e _pud) e (L05_ E _coub) e (L05_ E @@ -424,11 +425,13 @@ _corro) e (L07_ e _interromp) e (L07_ e _troux) e (L07_ E _ens) e (bL03_ E + _enver) e (dL03_ E _amanc) e (bL03_ E qu) e (brL04_ E _cel) e (brL04_ E _boch) e (chL04_ e - _ex) e (crL04_ E + _on) e (rL04_ E + _ex) e (crL04_ E _enr) e (dL01_ E _v) e (dL03_ E _arr) e (dL03_ E @@ -472,14 +475,14 @@ _adult) e (rL04_ E _persev) e (rL04_ E _recup) e (rL04_ E _refrig) e (rL04_ E - _v) e (rbL03_ E - _ex) e (rcL02_ E + _ex) e (rcL02_ E _alic) e (rcL02_ E _p) e (rdL02_ E _l) e (rdL03_ E _h) e (rdL04_ E _des) e (rdL04_ E _) e (rgL03_ e +_so) e (rgL03_ e _re) e (rgL03_ e _bez) e (rrL03_ e v) e (rtL03_ e // con- re- in- @@ -837,7 +840,7 @@ _entorp) e (çL03_ e ?1 f) o (rmulá u // eg: formulário, formulários. ?1 v) o (lt O o (luem_ o - o (CCuem_ o + o (ssuem_ o êC) o (CA_ o êCC) o (CA_ o ôC) o (CA_ o @@ -852,7 +855,8 @@ _entorp) e (çL03_ e óCC) o (CA_ o úC) o (CA_ o úCC) o (CA_ o - +?2 otion (_ 'owS&~N + //sort _f) o (L05_ o _pormen) o (L05_ O @@ -862,6 +866,7 @@ _pormen) o (L05_ O _esn) o (bL04_ O _engl) o (bL04_ O _sal) o (brL03_ o + _env) o (ltL03_ o _) o (cL03_ o _m) o (fL01_ O _m) o (fL02_ O @@ -1072,6 +1077,8 @@ _remem) o (rL04_ O u (a u g) u (a+ w q) u (a+ w +u (eC u +u (ei u r) u (_A u u (L04_ 'u @@ -1079,6 +1086,8 @@ _remem) o (rL04_ O ui (_ 'uI u (iu w u (iCK u +u (éC u +u (íC u uy uI ul (K uw u (lh+ u @@ -1091,6 +1100,7 @@ _remem) o (rL04_ O g) u (Y _m) ui (tA_ 'wiN +?2 ution (_ 'uS&~N .group ú diff --git a/dictsource/sk_list b/dictsource/sk_list index 61480f8a..8f7fdc35 100644 --- a/dictsource/sk_list +++ b/dictsource/sk_list @@ -69,6 +69,8 @@ _tld s_v'l-novkoU // character names _cap vel^ke: +_sub d,olni:||indeks|| +_sup h,oRni:||indeks|| _?? simbol _#9 t'ab _#32 'medzeRa @@ -76,7 +78,7 @@ _?A znak * hviezda $max3 + plus $max3 -= Rovna:sa $max3 += Rovna:||sa $max3 @ zavina:tS & ampeRsand # kRi:Zik $max3 @@ -88,64 +90,88 @@ _' apostRof _( za:tvoRka _) zatvoRit; _, tSiaRka -_- poml-tSka -__ podtSiaRknutie +_- spojovn^i:k +__ podtSiaRkovn^i:k _. bodka -_/ lomeno +_/ lomka _: dvojbodka _; bodkotSiaRka _< menSi: -_> vetSSi: +_> v&tSSi: _? ota:zn^ik _[ hRanata:||za:tvoRka -_\ opatSne:||lomeno +_\ opatSna:||lomka _] hRanata:||zatvoRit; -_^ stRieZka +_^ voka:n^ _` aktsent _{ zloZena:||za:tvoRka _| zvisla:||tSiaRa _} zloZena:||zatvoRit; _~ vl-novka -_ tvr-da:m'edzeRa // U+00A0 no-break-space -_¡ obra:t;eni:v'i:kRitSn^i:k -_¦ pReRuSena:'tSiaRa -_ª hoRni:indeks'a: -_« dvojita:lomena:||za:tvoRka -_­ mekka:poml-tSka -_² nadRuhu: -_³ natRetju -_´ dl:Zen^ -_· bodka'vpRostRjedku -_¸ tsedila -_¹ napRvu: -_» dvojita:lomena:||zatvoRit; -_¿ obRa:t;eni:'ota:zn^ik -_– dl-ha:'poml-tSka -_‘ l^ava:'u:vodzovka -_’ prava:'u:vodzovka -_“ horne:'u:vodzovki -_” dolne:'u:vodzovki -_‡ dvojiti:kRi:Z -_• odRa:Zka -_‣ tRojuholni:kova:'odRa:Zka +_ tvr-da:||m'edzeRa // U+00A0 no-break-space +_¡ obra:t;eni:||v'i:kRitSn^i:k +_¦ pReRuSena:||tSiaRa +_¨ pRehla:ska +_« dvojita:||lomena:||za:tvoRka +_­ Rozd;el^ovn^i:k +_´ dl:Zen^ +_· bodka||v||pRostRjedku +_¸ tsedila +_» dvojita:||lomena:||zatvoRit; +_¿ obRa:t;eni:||ota:zn^ik +_– poml-tSka +_‘ hoRne:||jednoduche:||u:vodzovki +_’ odsuvn^i:k +_“ hoRne:||u:vodzovki +_” dvojita:||hoRna:||opatSna:||u:vodzovka +_„ dolne:||u:vodzovki +_‚ dolne:||jednoduche:||u:vodzovki +_‡ dvojkRi:Z +_• odRa:Zka +_‣ odRa:Zka||tRojuholni:k +_⁃ odRa:Zka||v||tvaRe||poml-tSki ‰ pRomile € euRo § paRagRaf ÷ d;eleno × kRa:t ° stupn^ou -¢ tsentou -£ libjeR -¤ znatSkameni +¢ tsent +£ libRa +¤ mena +© kopiRajt +® Registrovane: +¥ jen − mi:nus -± plus'mi:nus -µ mu: -¼ Stvr-tina +± plus||mi:nus +µ mi: +¼ Stvr-t;ina ½ polovitsa -¾ tri_Stvr-tini -¬ logitske:not -æ a'e: -þ poml-tSkanad +¾ tRi_||Stvr-t;ini +¬ logitski:||za:poR +æ otvoRene:||e: +þ soRn +¯ pRuh||nad +ð ed +ƒ floRe:n +_† kRi:Z +_≈ pRibliZn^e||sa||Rovna: +_≠ n^eRovna:||sa +_≤ menSi:||alebo||sa||Rovna: +_≥ v&tSSi:||alebo||sa||Rovna: +_√ dRuha:||odmotsn^ina +_∛ tRet;ia||odmotsn^ina +_∞ n^ekon^etSno +_■ tSieRni||StvoRets +_□ bieli||StvoRets +_◆ tSieRni||diamant +_○ bieli||kRuh +_● tSieRni||kRuh +_◦ odRa:Zka||v||tvaRe||bielej||bodki +_✓ zaSkr-tnutie +_✔ tutSne:||zaSkr-tnutie +_➔ Si:pka||vpravo +_➢ odRa:Zka||v||tvaRe||Si:pki // Numbers diff --git a/dictsource/tr_rules b/dictsource/tr_rules index 4b84bd7b..8ae84901 100644 --- a/dictsource/tr_rules +++ b/dictsource/tr_rules @@ -12,7 +12,6 @@ .L01 ç f h k p q s ş t // unvoiced consonants .L02 ı a o u // back vowels - .L03 i e ö ü î â ô û // not-back vowels .replace @@ -218,6 +217,7 @@ .group r r R A) r (A * + ğ) r (A * ra (_S2 %Ra re (_S2 %Re diff --git a/phsource/compile_report b/phsource/compile_report index ce6f4d04..1c070aad 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -857,7 +857,7 @@ ufric/tl# [tl#] is [tl#] kl ufric/tlh [K] nso [K] tn -ufric/x [x] base +ufric/x_ [x] base ufric/x2 [x2] af [x] ku [Q2] ka @@ -1013,7 +1013,6 @@ ustop/t_dnt [t] base [t] hr ustop/t_dnt2 [t] base2 [d] kn - [t] es ustop/t_hi [t[] base [t] et [t^] et @@ -1595,6 +1594,7 @@ vowel/@_3 [@#] en [@3] ur [@] da [@] am +vowel/&_3 [&] az vowel/3_2 [3:] en-n [@] zh vowel/3_3 [3:] en-rp @@ -1651,6 +1651,7 @@ vowel/a# [a] base2 [&] sr [a#] rw [a/] rw + [a] az [a] wo [a] dv [a:] dv @@ -1751,7 +1752,6 @@ vowel/aa [a:] et [A:] no [aa] zhy [a] hy - [a] az vowel/aa# [O] en-us [0] en-wi [a2] fi @@ -1785,6 +1785,7 @@ vowel/aa_9 [a] fi [a:] hi [a] ne [a] pa + [a] az [a] ak [a] mt [A] kk @@ -2227,12 +2228,12 @@ vowel/o_mid [U@] en-rp [o] bg [o] tr [o] fa - [o] az [o] dv [o:] dv [o] tt vowel/o_mid2 [O] fr [O] ht + [o] az vowel/oo [o] base [O:] en-sc [O] en-wi @@ -2350,6 +2351,7 @@ vowel/u_2 [u1] fi [u] is [u] tr [u] sl + [u] az [u] am [u] wo vowel/u#_2 [u-] sv @@ -2364,7 +2366,6 @@ vowel/u_5 [U1] et [u] vi [u] sw [u] nso - [u] az [u] tn vowel/u#_5 [y] vi vowel/u_6 [u] ta diff --git a/phsource/ph_azerbaijani b/phsource/ph_azerbaijani new file mode 100755 index 00000000..42e3cac9 --- /dev/null +++ b/phsource/ph_azerbaijani @@ -0,0 +1,62 @@ + +phoneme i + vowel starttype #i endtype #i + length 180 + FMT(vowel/ii_5) +endphoneme + +phoneme e + vowel starttype #e endtype #e + length 200 + FMT(vowel/e_mid2) +endphoneme + +phoneme & + vowel starttype #e endtype #e + length 200 + IF thisPh(isWordEnd) THEN + FMT(vowel/&_3) + ENDIF + FMT(vowel/&) +endphoneme + +phoneme y + vowel starttype #u endtype #u + length 200 + FMT(vowel/y) +endphoneme + +phoneme W + vowel starttype #@ endtype #@ + length 200 + FMT(vowel/y#_2) +endphoneme + +phoneme u + vowel starttype #u endtype #u + length 180 + FMT(vowel/u_2) +endphoneme + +phoneme o + vowel starttype #o endtype #o + length 200 + FMT(vowel/o_mid2) +endphoneme + +phoneme a + vowel starttype #a endtype #a + length 200 + IF thisPh(isWordEnd) THEN + FMT(vowel/a#) + ENDIF + FMT(vowel/aa_9) +endphoneme + +phoneme @ + vowel starttype #@ endtype #@ + ipa ɯ + length 180 + FMT(vowel/u#_7) +endphoneme + diff --git a/phsource/ph_base2 b/phsource/ph_base2 index a77bacfd..26f1126f 100644 --- a/phsource/ph_base2 +++ b/phsource/ph_base2 @@ -7,7 +7,7 @@ phoneme a vowel starttype #a endtype #a - length 180 + length 190 IF thisPh(isDiminished) THEN ChangePhoneme(a/) FMT(vowel/a#) @@ -18,28 +18,28 @@ endphoneme phoneme a/ vowel starttype #@ endtype #@ - length 180 + length 190 FMT(vowel/a#) endphoneme phoneme e vowel starttype #e endtype #e - length 170 + length 180 FMT(vowel/e) endphoneme phoneme E vowel starttype #e endtype #e - length 170 + length 180 FMT(vowel/ee_1) endphoneme phoneme i vowel starttype #i endtype #i - length 150 + length 170 IfNextVowelAppend(;) FMT(vowel/i) endphoneme @@ -47,42 +47,42 @@ endphoneme phoneme o vowel starttype #o endtype #o - length 170 + length 180 FMT(vowel/o) endphoneme phoneme O vowel starttype #o endtype #o - length 170 + length 180 FMT(vowel/oo_4) endphoneme phoneme u vowel starttype #u endtype #u - length 160 + length 180 FMT(vowel/u_bck) endphoneme phoneme U vowel starttype #u endtype #u - length 160 + length 180 FMT(vowel/uu_2) endphoneme phoneme y vowel starttype #i endtype #i - length 160 + length 180 FMT(vowel/y) endphoneme phoneme Y vowel starttype #@ endtype #@ - length 160 + length 180 FMT(vowel/y#) endphoneme diff --git a/phsource/ph_spanish b/phsource/ph_spanish index 775b89f9..10b3eaf6 100644 --- a/phsource/ph_spanish +++ b/phsource/ph_spanish @@ -111,22 +111,12 @@ phoneme D ENDIF endphoneme + phoneme t // dental variant of /t/ - vls dnt stop - voicingswitch d[ - lengthmod 2 - Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16 - Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20 - - IF nextPh(isPause2) THEN - WAV(ustop/t_dnt2, 35) - ENDIF - WAV(ustop/t_dnt2, 70) - + import_phoneme base/t[ endphoneme - phoneme s vls alv frc sibilant lengthmod 3 diff --git a/phsource/phonemes b/phsource/phonemes index 17dc1543..c5bb7480 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -634,7 +634,7 @@ endphoneme phoneme j - liquid palatal + liquid palatal starttype #i lengthmod 7 IF nextPhW(isVowel) THEN @@ -1610,7 +1610,7 @@ phoneme x Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 IF nextPh(isPause) THEN - WAV(ufric/x, 110) + WAV(ufric/x_, 60) ENDIF WAV(ufric/x_hr, 20) endphoneme diff --git a/phsource/ufric/x_.wav b/phsource/ufric/x_.wav new file mode 100755 index 00000000..ad7a1398 Binary files /dev/null and b/phsource/ufric/x_.wav differ diff --git a/src/compiledict.cpp b/src/compiledict.cpp index eb4e1409..c4979533 100644 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -700,9 +700,9 @@ static int compile_line(char *linebuf, char *dict_line, int *hash) ix = utf8_in(&c2,p); if(c2 == 0) break; - if(iswupper(c2)) + if(iswupper2(c2)) { - utf8_out(towlower(c2),p); + utf8_out(towlower2(c2),p); } else { diff --git a/src/dictionary.cpp b/src/dictionary.cpp index eafd6ce4..41ebfa2b 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -520,7 +520,7 @@ void DecodePhonemes(const char *inptr, char *outptr) unsigned short ipa1[96] = { 0x20,0x21,0x22,0x2b0,0x24,0x25,0x0e6,0x2c8,0x28,0x27e,0x2a,0x2b,0x2cc,0x2d,0x2e,0x2f, 0x252,0x31,0x32,0x25c,0x34,0x35,0x36,0x37,0x275,0x39,0x2d0,0x2b2,0x3c,0x3d,0x3e,0x294, - 0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x29f,0x271,0x14b,0x254, + 0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x26b,0x271,0x14b,0x254, 0x3a6,0x263,0x280,0x283,0x3b8,0x28a,0x28c,0x153,0x3c7,0xf8,0x292,0x32a,0x5c,0x5d,0x5e,0x5f, 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x261,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x303,0x7f @@ -629,10 +629,13 @@ char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int -void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) -{//========================================================================= - /* Can be called after a clause has been translated into phonemes, in order +void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode) +{//=============================================================================== + /* Called after a clause has been translated into phonemes, in order to display the clause in phoneme mnemonic form. + + phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator + bit 4: 0=eSpeak phoneme names, 1=IPA */ int ix; @@ -645,6 +648,8 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) char *buf; int count; int flags; + int use_ipa; + int use_tie; int separate_phonemes = 0; char phon_buf[30]; char phon_buf2[30]; @@ -653,15 +658,16 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) static const char *stress_chars = "==,,''"; static const int char_tie[] = {0x0361, 0x200d}; // combining-double-inverted-breve, zero-width-joiner - if(use_ipa >= 4) + use_ipa = phoneme_mode & 0x10; + use_tie = phoneme_mode & 0x0f; + + if(use_tie >= 3) { // separate individual phonemes with underscores separate_phonemes = '_'; - if(use_ipa == 5) - use_ipa = 0; - else - use_ipa = 1; + use_tie = 0; } + if(phon_out != NULL) { for(ix=1; ix<(n_phoneme_list-2); ix++) @@ -669,13 +675,19 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) buf = phon_buf; plist = &phoneme_list[ix]; + + WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags); if(plist->newword) *buf++ = ' '; else { if((separate_phonemes != 0) && (ix > 1)) { - *buf++ = separate_phonemes; + utf8_in(&c, phon_buf2); + if((c < 0x2b0) || (c > 0x36f)) // not if the phoneme starts with a superscript letter + { + *buf++ = separate_phonemes; + } } } @@ -707,17 +719,16 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa) } flags = 0; - WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags); count = 0; for(p=phon_buf2; *p != 0;) { p += utf8_in(&c, p); - if(use_ipa > 1) + if(use_tie > 0) { // look for non-inital alphabetic character, but not diacritic, superscript etc. - if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha(c)) + if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha2(c)) { - buf += utf8_out(char_tie[use_ipa-2], buf); + buf += utf8_out(char_tie[use_tie-1], buf); } } buf += utf8_out(c, buf); @@ -923,7 +934,7 @@ int Unpronouncable(Translator *tr, char *word, int posn) break; } - if((c != '\'') && !iswalpha(c)) + if((c != '\'') && !iswalpha2(c)) return(0); } @@ -2102,7 +2113,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ break; case RULE_NONALPHA: - if(!iswalpha(letter_w)) + if(!iswalpha2(letter_w)) { add_points = (21-distance_right); post_ptr += letter_xbytes; @@ -2346,7 +2357,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ break; case RULE_NONALPHA: - if(!iswalpha(letter_w)) + if(!iswalpha2(letter_w)) { add_points = (21-distance_right); pre_ptr -= letter_xbytes; @@ -2663,7 +2674,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c if(tr->letter_bits_offset > 0) { // not a Latin alphabet, switch to the default Latin alphabet language - if((letter <= 0x241) && iswalpha(letter)) + if((letter <= 0x241) && iswalpha2(letter)) { sprintf(phonemes,"%c%s",phonSWITCH,tr->langopts.ascii_language); return(0); diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index b6f9baf6..299e947e 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -632,7 +632,7 @@ void OnOptions2(int event_id) case MENU_PATH0: string = wxFileSelector(_T("Master phonemes file"),wxFileName(path_phfile).GetPath(), - _T(""),_T(""),_T("*"),wxOPEN); + _T("phonemes"),_T(""),_T("*"),wxOPEN); if(!string.IsEmpty()) { path_phfile = string; diff --git a/src/extras.cpp b/src/extras.cpp index d9da8bdb..89e7cad3 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -1564,8 +1564,8 @@ void CountWordFreq(wxString path, wcount **hashtab) for(k=0; k letter) + break; + if(c == letter) + { + c = derived_letters[ix+1]; + letter = c & 0x3fff; + if((modifier = modifiers[c >> 14]) != NULL) + { + Lookup(tr, modifier, capital); + if(capital[0] == 0) + { + capital[2] = SetTranslator2("en"); // overwrites previous contents of translator2 + Lookup(translator2, modifier, &capital[3]); + if(capital[3] != 0) + { + capital[0] = phonPAUSE; + capital[1] = phonSWITCH; + len = strlen(&capital[3]); + capital[len+3] = phonSWITCH; + capital[len+4] = phontab_1; + capital[len+5] = 0; + } + } + } + } + } LookupLetter(tr, letter, word[n_bytes], ph_buf, control & 1); if(ph_buf[0] == phonSWITCH) @@ -663,6 +765,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) return(0); } + if((ph_buf[0] == 0) && ((number = NonAsciiNumber(letter)) > 0)) { // convert a non-ascii number to 0-9 @@ -794,7 +897,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) speak_letter_number = 1; if(!(al_flags & AL_NO_SYMBOL)) { - if(iswalpha(letter)) + if(iswalpha2(letter)) Lookup(translator, "_?A", ph_buf); if((ph_buf[0]==0) && !iswspace(letter)) @@ -2244,8 +2347,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' ')) utf8_in(&next_char,p); - if(!iswalpha(next_char) && (thousands_exact==0)) -// if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0))) + if(!iswalpha2(next_char) && (thousands_exact==0)) +// if(!iswalpha2(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0))) strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc. } diff --git a/src/readclause.cpp b/src/readclause.cpp index 6da87e36..a667cdb0 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -260,8 +260,25 @@ static const short wchar_tolower[] = { 0x23d, 0x19a, 0x23e, 0x2c66, 0x243, 0x180, - 0x000, 0x000, -}; + 0,0 }; + +static const short wchar_toupper[] = { + 0x0b5, 0x39c, + 0x0df, 0x0df, + 0x0ff, 0x178, + 0x131, 0x049, + 0x17f, 0x053, + 0x180, 0x243, + 0x195, 0x1f6, + 0x19a, 0x23d, + 0x19e, 0x220, + 0x1bf, 0x1f7, + 0x1c6, 0x1c4, + 0x1c9, 0x1c7, + 0x1cc, 0x1ca, + 0x1dd, 0x18e, + 0x1f3, 0x1f1, + 0,0 }; #ifdef NEED_WCHAR_FUNCTIONS @@ -317,13 +334,17 @@ int towlower(int c) int towupper(int c) { + int ix; // check whether a previous character code is the upper-case equivalent of this character if(towlower(c-32) == c) return(c-32); // yes, use it if(towlower(c-1) == c) return(c-1); - if(towlower(c-2) == c) - return(c-2); + for(ix=0; wchar_toupper[ix] != 0; ix+=2) + { + if(wchar_toupper[ix] == c) + return(wchar_toupper[ix+1]); + } return(c); // no } @@ -417,6 +438,28 @@ int iswalpha2(int c) return(walpha_tab[c-0x80]); } +int iswlower2(int c) +{ + if(c < 0x80) + return(islower(c)); + if(c > MAX_WALPHA) + return(iswlower(c)); + if(walpha_tab[c-0x80] == 0xff) + return(1); + return(0); +} + +int iswupper2(int c) +{ + int x; + if(c < 0x80) + return(isupper(c)); + if(c > MAX_WALPHA) + return(iswupper(c)); + if(((x = walpha_tab[c-0x80]) > 0) && (x < 0xfe)) + return(1); + return(0); +} int towlower2(unsigned int c) { @@ -426,7 +469,7 @@ int towlower2(unsigned int c) // check for non-standard upper to lower case conversions if(c == 'I') { - if(translator->translator_name == L('t','r')) + if(translator->langopts.dotless_i) { c = 0x131; // I -> ı } @@ -453,6 +496,24 @@ int towlower2(unsigned int c) return(c + x); // convert to lower case } +int towupper2(unsigned int c) +{ + int ix; + if(c > MAX_WALPHA) + return(towupper(c)); + + // check whether a previous character code is the upper-case equivalent of this character + if(towlower2(c-32) == c) + return(c-32); // yes, use it + if(towlower2(c-1) == c) + return(c-1); + for(ix=0; wchar_toupper[ix] != 0; ix+=2) + { + if(wchar_toupper[ix] == c) + return(wchar_toupper[ix+1]); + } + return(c); // no +} static int IsRomanU(unsigned int c) {//================================ @@ -2330,7 +2391,7 @@ f_input = f_in; // for GetC etc c2 = ' '; } else - if((c2 == '/') || iswalpha(c2)) + if((c2 == '/') || iswalpha2(c2)) { // check for space in the output buffer for embedded commands produced by the SSML tag if(ix > (n_buf - 20)) @@ -2513,10 +2574,10 @@ f_input = f_in; // for GetC etc } } - if(iswupper(c1)) + if(iswupper2(c1)) { tr->clause_upper_count++; - if((option_capitals == 2) && (sayas_mode == 0) && !iswupper(cprev)) + if((option_capitals == 2) && (sayas_mode == 0) && !iswupper2(cprev)) { char text_buf[40]; char text_buf2[30]; @@ -2533,7 +2594,7 @@ f_input = f_in; // for GetC etc } } else - if(iswalpha(c1)) + if(iswalpha2(c1)) tr->clause_lower_count++; if(option_phoneme_input) @@ -2602,8 +2663,8 @@ if(option_ssml) parag=1; if(!iswspace(c1)) { - if(!IsAlpha(c1) || !iswlower(c1)) -// if(iswdigit(c1) || (IsAlpha(c1) && !iswlower(c1))) + if(!IsAlpha(c1) || !iswlower2(c1)) +// if(iswdigit(c1) || (IsAlpha(c1) && !iswlower2(c1))) { UngetC(c2); ungot_char2 = c1; @@ -2702,7 +2763,7 @@ if(option_ssml) parag=1; if(nl_count==0) { - if((c1 == ',') && (cprev == '.') && (tr->translator_name == L('h','u')) && iswdigit(cprev2) && (iswdigit(c_next) || (iswlower(c_next)))) + if((c1 == ',') && (cprev == '.') && (tr->translator_name == L('h','u')) && iswdigit(cprev2) && (iswdigit(c_next) || (iswlower2(c_next)))) { // lang=hu, fix for ordinal numbers, eg: "december 2., szerda", ignore ',' after ordinal number c1 = CHAR_COMMA_BREAK; @@ -2721,7 +2782,7 @@ if(option_ssml) parag=1; } else { - if (iswlower(c_next) || (c_next=='-')) // hyphen is needed for lang-hu (eg. 2.-kal) + if (iswlower2(c_next) || (c_next=='-')) // hyphen is needed for lang-hu (eg. 2.-kal) is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag) } } @@ -2730,7 +2791,7 @@ if(option_ssml) parag=1; { is_end_clause = 0; // eg. u.s.a.'s } - if(iswlower(c_next)) + if(iswlower2(c_next)) { // next word has no capital letter, this dot is probably from an abbreviation // c1 = ' '; diff --git a/src/speak_lib.cpp b/src/speak_lib.cpp index 6c5d6bc3..2a4fcbcf 100644 --- a/src/speak_lib.cpp +++ b/src/speak_lib.cpp @@ -1164,6 +1164,17 @@ ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream) } // end of espeak_SetPhonemes +ESPEAK_API void espeak_TextToPhonemes(const void *text, char *buffer, int size, int textmode, int phonememode) +{//============================================================================================================== + /* phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator + bit 4: 0=eSpeak phoneme names, 1=IPA + */ + option_multibyte = textmode & 7; + TranslateClause(translator, NULL, text, NULL, NULL); + GetTranslatedPhonemeString(buffer, size, phonememode); +} + + ESPEAK_API void espeak_CompileDictionary(const char *path, FILE *log, int flags) {//============================================================================= ENTER("espeak_CompileDictionary"); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index e41eebe6..ab64f5a1 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.47.07a 23.Apr.13"; +const char *version_string = "1.47.07b 25.Apr.13"; const int version_phdata = 0x014701; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 303c563f..7fec4d84 100644 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1953,20 +1953,14 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) if((option_phonemes > 0) || (phoneme_callback != NULL)) { - int use_ipa = 0; + int phoneme_mode = 0; if(option_phonemes >= 3) - use_ipa = option_phonemes-2; // 1=ipa, 2=ipa with tie, 3=ipa with ZWJ, 4=ipa with separators + phoneme_mode = 0x10 + option_phonemes-3; // 0x10=ipa, 0x11=ipa with tie, 0x12=ipa with ZWJ, 0x13=ipa with separators - GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa); + GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), phoneme_mode); if(option_phonemes > 0) { fprintf(f_trans,"%s\n",translator->phon_out); - - if(!iswalpha(0x010d)) - { - // check that c-caron is recognized as an alphabetic character - fprintf(stderr,"Warning: Accented letters are not recognized, eg: U+010D\nSet LC_CTYPE to a UTF-8 locale\n"); - } } if(phoneme_callback != NULL) { diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 55cc8adf..cc36033a 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -972,7 +972,7 @@ SetLengthMods(tr,3); // all equal SetLetterBits(tr,LETTERGP_VOWEL2,hy_vowels); SetLetterBits(tr,LETTERGP_C,hy_consonants); tr->langopts.max_initial_consonants = 6; - tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED; + tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED; // tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words } break; @@ -1290,6 +1290,7 @@ SetLengthMods(tr,3); // all equal ResetLetterBits(tr,0x2); SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y tr->langopts.param[LOPT_ALT] = 2; // call ApplySpecialAttributes2() if a word has $alt or $alt2 + tr->langopts.accents = 2; // 'capital' after letter name } break; @@ -1521,6 +1522,7 @@ SetLengthMods(tr,3); // all equal tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable tr->langopts.stress_flags = S_NO_AUTO_2; //no automatic secondary stress + tr->langopts.dotless_i = 1; tr->langopts.param[LOPT_SUFFIX] = 1; if(name2 == L('a','z')) diff --git a/src/translate.cpp b/src/translate.cpp index bea234d9..9c685341 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -624,7 +624,7 @@ int IsAllUpper(const char *word) while((*word != 0) && !isspace2(*word)) { word += utf8_in(&c, word); - if(!iswupper(c)) + if(!iswupper2(c)) return(0); } return(1); @@ -1053,7 +1053,7 @@ int TranslateWord(Translator *tr, char *word_start, int next_pause, WORD_TAB *wt } } - if((wflags & FLAG_ALL_UPPER) && (word_length > 1)&& iswalpha(first_char)) + if((wflags & FLAG_ALL_UPPER) && (word_length > 1)&& iswalpha2(first_char)) { if((option_tone_flags & OPTION_EMPHASIZE_ALLCAPS) && !(dictionary_flags[0] & FLAG_ABBREV)) { @@ -1632,7 +1632,7 @@ if(end_type & SUFX_UNPRON) tr->expect_past--; } - if((word_length == 1) && (tr->translator_name == L('e','n')) && iswalpha(first_char) && (first_char != 'i')) + if((word_length == 1) && (tr->translator_name == L('e','n')) && iswalpha2(first_char) && (first_char != 'i')) { // English Specific !!!! // any single letter before a dot is an abbreviation, except 'I' @@ -1908,7 +1908,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa while(*p2 != ' ') p2++; utf8_in(&c_word2, p2+1); // first character of the next word; - if(!iswalpha(c_word2)) + if(!iswalpha2(c_word2)) { ok =0; } @@ -2376,9 +2376,9 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in, // there is a list of character codes to be substituted with alternative codes - if(iswupper(c_lower = c)) + if(iswupper2(c_lower = c)) { - c_lower = towlower(c); + c_lower = towlower2(c); upper_case = 1; } @@ -2392,7 +2392,7 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in, new_c = replace_chars[ix+1]; break; } - if((word >> 16) == (unsigned int)towlower(next_in)) + if((word >> 16) == (unsigned int)towlower2(next_in)) { new_c = replace_chars[ix+1]; ignore_next = 1; @@ -2409,14 +2409,14 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in, // there is a second character to be inserted // don't convert the case of the second character unless the next letter is also upper case c2 = new_c >> 16; - if(upper_case && iswupper(next_in)) - c2 = towupper(c2); + if(upper_case && iswupper2(next_in)) + c2 = towupper2(c2); *insert = c2; new_c &= 0xffff; } if(upper_case) - new_c = towupper(new_c); + new_c = towupper2(new_c); *wordflags |= FLAG_CHAR_REPLACED; return(new_c); @@ -2480,7 +2480,7 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c, // look for 'n and replace by a special character (unicode: schwa) - if(!iswalpha(prev_in)) + if(!iswalpha2(prev_in)) { utf8_in(&next2, &ptr[1]); @@ -2910,7 +2910,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre } else { - if(iswupper(c)) + if(iswupper2(c)) word_flags |= FLAG_FIRST_UPPER; if((prev_out == ' ') && iswdigit(sbuf[ix-2]) && !iswdigit(prev_in)) @@ -2939,7 +2939,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre } } - if(iswupper(c)) + if(iswupper2(c)) { c = towlower2(c); @@ -2954,7 +2954,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre } else { - if((iswlower(prev_in)) && (prev_in != 0xba)) // Windows thinks masc.ordinal (0xba) is lower-case + if(iswlower2(prev_in)) { // lower case followed by upper case in a word if(UpperCaseInWord(tr, &sbuf[ix], c) == 1) @@ -2970,7 +2970,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre // next_word_flags |= FLAG_NOSPACE; // problem: prevents FLAG_HAS_DOT being set } } - else if((c != ' ') && iswupper(prev_in) && iswlower(next_in)) + else if((c != ' ') && iswupper2(prev_in) && iswlower2(next_in)) { int next2_in; utf8_in(&next2_in,&source[source_index + next_in_nbytes]); diff --git a/src/translate.h b/src/translate.h index 6fcf8410..8aadd08b 100644 --- a/src/translate.h +++ b/src/translate.h @@ -542,6 +542,7 @@ typedef struct { char tone_numbers; char ideographs; // treat as separate words char textmode; // the meaning of FLAG_TEXTMODE is reversed (to save data when *_list file is compiled) + char dotless_i; // uses letter U+0131 int testing; // testing options: bit 1= specify stressed syllable in the form: "outdoor/2" int listx; // compile *_listx after *list const unsigned int *replace_chars; // characters to be substitutes @@ -715,8 +716,11 @@ int IsAlpha(unsigned int c); int IsVowel(Translator *tr, int c); int iswalpha2(int c); int isspace2(unsigned int c); +int iswlower2(int c); +int iswupper2(int c); int towlower2(unsigned int c); -void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int use_ipa); +int towupper2(unsigned int c); +void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode); const char *WordToString2(unsigned int word); ALPHABET *AlphabetFromChar(int c); ALPHABET *AlphabetFromName(const char *name); diff --git a/src/transldlg.cpp b/src/transldlg.cpp index e79700d9..c75eda58 100644 --- a/src/transldlg.cpp +++ b/src/transldlg.cpp @@ -460,7 +460,7 @@ void TranslDlg::OnCommand(wxCommandEvent& event) t_phonetic->SetDefaultStyle(style_phonetic_large); translate_text = 3; - use_ipa = 1; + use_ipa = 0x10; break; case T_PROCESS: diff --git a/src/voices.cpp b/src/voices.cpp index 2cade50a..4eaefca1 100644 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -601,7 +601,7 @@ voice_t *LoadVoice(const char *vname, int control) // which directory to look for a named voice. List of voice names, must end in a space. static const char *voices_asia = - "bn fa fa-pin hi hy hy-west id ka kn ku ml ms ne pa ta te tr vi vi-hue vi-sgn zh zh-yue "; + "az bn fa fa-pin hi hy hy-west id ka kn ku ml ms ne pa ta te tr vi vi-hue vi-sgn zh zh-yue "; static const char *voices_europe = "an bg bs ca cs cy da de el en en-us es et fi fr fr-be ga hr hu is it lt lv mk nl no pl pt-pt ro ru sk sq sr sv ";