From dfb316c05debbd89db54bd3ecc880583fbd16ebe Mon Sep 17 00:00:00 2001 From: jonsd Date: Fri, 16 Nov 2012 10:02:19 +0000 Subject: [PATCH 1/2] [1.46.28] Ignore character U+00AD (soft hyphen) in text. Added stress rule code for Lang=kl (Greenlandic). Changes to languages: it, ta, si git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@294 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/de_list | 2 + dictsource/dict_phonemes | 35 +++++----- dictsource/en_list | 4 +- dictsource/en_rules | 3 +- dictsource/it_listx | 2 +- dictsource/it_rules | 4 +- dictsource/ta_list | 4 +- dictsource/ta_rules | 89 +++++++++++++++++++++++--- phsource/compile_report | 18 +++--- phsource/mbrola/de2 | 5 +- phsource/mbrola/de4 | 2 +- phsource/mbrola/de6 | 2 +- phsource/ph_greenlandic | 102 ++++++++++++++++++++++++++++++ platforms/windows/make_espeak.iss | 7 +- src/dictionary.cpp | 34 ++++++++++ src/numbers.cpp | 68 ++++++++++++++++---- src/synthdata.cpp | 2 +- src/tr_languages.cpp | 12 +++- src/translate.h | 3 + 19 files changed, 339 insertions(+), 59 deletions(-) create mode 100755 phsource/ph_greenlandic diff --git a/dictsource/de_list b/dictsource/de_list index c120992f..1d10a2a9 100644 --- a/dictsource/de_list +++ b/dictsource/de_list @@ -423,6 +423,7 @@ couch _^_EN cursor _^_EN debugger _^_EN dj _^_EN +download _^_EN email _^_EN enterprise _^_EN event _^_EN @@ -497,6 +498,7 @@ terminal _^_EN trip _^_EN tuner _^_EN unix _^_EN +update _^_EN venture _^_EN website _^_EN window _^_EN diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index e7fa4745..07602ef2 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -78,7 +78,7 @@ S s2 t t2 tS ts v w z Z -Dictionary de_dict 2012-10-17 +Dictionary de_dict 2012-10-22 3 @ @- a A A: aI aU A~ E E2 E: e: EI i I @@ -102,7 +102,7 @@ p Q r R s s; t T ts v x z -Dictionary en_dict 2012-10-21 +Dictionary en_dict 2012-11-11 0 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI3 aI@ @@ -203,7 +203,7 @@ q r r. s S s. t T t. th th. v w x z -Dictionary ta_dict 2012-10-17 +Dictionary ta_dict 2012-11-15 a a: aI aU e E e: i I i: o o: u U u2 u: @@ -252,7 +252,7 @@ n^# p Q r R r# R2 s S s2 t T tl# v x z -Dictionary it_dict 2011-01-15 +Dictionary it_dict 2012-11-10 @- a a/ aI aU e E eI i I i# o O u @@ -741,15 +741,16 @@ t# tS ts ts# v w x z Z -Dictionary si_dict 2011-12-05 +Dictionary si_dict 2012-11-05 & &: @ a a: aI aU e -E e: i i: o o: u u: +e: i i: o o: u u: -b d d. dZ f g h j -k l l. m m# n N n# -N# n. n.# n^ n^# p r s -S t t. th tS v w z +b bh d d. dh dZ f g +gh h j k kh l l. m +m# n N n# N# n. n.# n^ +n^# p ph r s S s. t +t. th tS v w Dictionary et_dict 2012-06-12 @@ -825,15 +826,15 @@ R s S S; t w x z Z Z; -Dictionary kl_dict 2012-10-21 +Dictionary kl_dict 2012-11-15 -& a aI e i o O u -W +& 3 @ @- a aI e E +i o O u V W y -: b C d f g h j -k l l# m n N p Q -q r s t tl# ts v w -X z +* : b d D f g h +j k l l# m n N p +Q q r R s t tl# ts +v w X z Dictionary ko_dict 2012-09-17 diff --git a/dictsource/en_list b/dictsource/en_list index f507c231..69d9788d 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -1426,6 +1426,7 @@ imperative Imp'Er@tIv imperfect Imp'3:fEkt impi $1 impinging Imp'IndZIN +implacable Impl'ak@b@L imprecise ImprIs'aIs impregnable Impr'Egn@b@L inanimate In'anIm@t @@ -1471,7 +1472,8 @@ interim $1 intermediate Int3m'i:di@t intern Int3:n $noun interrogatory $3 -inventory Inv@ntrI +inventory Inv@ntri +?3 inventory Inv@nto:ri interface $1 intermin Int'3:mIn // interminable intern $1 $onlys diff --git a/dictsource/en_rules b/dictsource/en_rules index 9badffd1..884e44f9 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -1402,7 +1402,8 @@ me) ch (a k mi) ch (a k chica (n SI2keI - ch (irA k + chi (rA kaI + _) chi (ropA kI2 a) ch (il k bra) ch k te) ch (K k diff --git a/dictsource/it_listx b/dictsource/it_listx index a30b04ee..2488e8cd 100644 --- a/dictsource/it_listx +++ b/dictsource/it_listx @@ -1078,7 +1078,7 @@ cortes $2 cortile $2 cortisol $3 cortocircuito kO@-*totSi@-*k'uito -cosa $2 +cosa $alt cosc $alt coscia $alt cosen $alt2 diff --git a/dictsource/it_rules b/dictsource/it_rules index e1652f5b..6cc802aa 100644 --- a/dictsource/it_rules +++ b/dictsource/it_rules @@ -8,7 +8,7 @@ // Y front vowels: e i (& accents) .L01 a à o ò ó u ù .L02 e é è - +.L03 b d g l m n r v // 's' is [z] before these .group a a a @@ -321,6 +321,7 @@ s s _) s s A) s (A z + s (L03 z l) s s p) s s @@ -377,6 +378,7 @@ .group z z ts A) zz ts: + A) z (A ts: _) z (i dz _) z (ì dz diff --git a/dictsource/ta_list b/dictsource/ta_list index 2936a78c..509e757b 100644 --- a/dictsource/ta_list +++ b/dictsource/ta_list @@ -375,6 +375,7 @@ tamil தமிழ் $text பூந்தி $alt பாவிக்க $alt பார்ல $alt +பாட்டனி $alt // initial த as [d] @@ -534,8 +535,7 @@ tamil தமிழ் $text // p as [f] போன் fo:n போனில் fo:nil -பைல் faIl -பைலை faIlaI +//பைலை faIlaI பாதர் fa:dVr பாதரிடம் fa:dVrid.Vm பாதருடன் fa:dVrUd.Vn diff --git a/dictsource/ta_rules b/dictsource/ta_rules index d8c59a82..de1d7bf7 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -95,7 +95,7 @@ .L19 தம்பி தங்க // words after கோரப் [go:rVb] -.L20 பல் பற் போர போர +.L20 பல் பற் போர போர பசி // words before பாவ+ .L21 நேய ராக சகோதர சாந்த சிநேக சினேக முக முகத்தின் ராகங்களின் ராகத்தின் சம சமமான சமமாக சமநிலை @@ -113,7 +113,7 @@ .L25 நடன டான்ஸ நாட்டிய // words after கேஸ் -.L26 சிலிண்டர ஸ்டவ் கனெக் +.L26 சிலிண்டர ஸ்டவ் கனெக் அடுப்ப // consonants @@ -152,6 +152,7 @@ _) க (ங்குலி gV _) க (ங்கூலி gV _) க (ங்கை gV + _) க (ங்கோத gV _) க (ஞ்சா gV _) க (டகட gV _) க (டத்தில gV @@ -160,6 +161,7 @@ _) க (டப்பாரை gV _) க (டிகார gV _) க (டோத்கஜ gV + _) க (ட்காரி gV _) க (ணபதி gV _) க (ணீர gV _) க (ணே gV @@ -217,6 +219,7 @@ _) க (வுனை gV _) க (வுன்கள gV _) க (வுர gV + _) காங்டாக் ga:Nt.a:k _) காச (ியாபாத ga:z _) க (ாண்டாமிருக g _) க (ாண்டீப g @@ -255,6 +258,7 @@ _) கி (ரய k _) கி (ரவுண்ட g _) கி (ரஹ g + _) கி (ராL04 k _) கிராஃபைட gra:faIt.V# _) கி (ராக்கா k _) கி (ராக்கி g @@ -292,6 +296,7 @@ _) க (ிருஹஸ்தர g _) கி (ரேக்க g _) கி (ரேய k + _) கி (ரை k _) கி (ரைண்டர g _) கி (ரௌண்ட g _) க (ிர்ரெ g @@ -357,7 +362,11 @@ _மன்மதக்) க (ுகை g _) க (ுண்டம k _) க (ுண்டல k _) குண்டாந்த (டி gun.d.a:ntV + _) க (ுண்டானில k + _) க (ுண்டானை k + _) க (ுண்டான் k _) க (ுண்டி k + _) க (ுண்டின g _) குண்ட (ூர gun.t.V# _) க (ுதிக் g _) க (ுதிச் g @@ -388,10 +397,12 @@ _மன்மதக்) க (ுகை g _) க (ுருநா g _) க (ுருபகவான g _) குருப (த்தினி gurupV + _) க (ுருபர g _) குருப (ாத gurup _) குருப (ீட gurup _) குருப (ூ gurup _) க (ுருபூஜை g + _) குருப்பி (ரசாத gurupp _) க (ுருப்பெயர g _) க (ுருமார g _) க (ுருமூர்த்தி g @@ -417,6 +428,7 @@ _மன்மதக்) க (ுகை g _) குவ (ாலிபிகேஷன kw _) கு (வாலியர g _) க (ுஸ்தி g + _) க (ுஹ g _) க (ூகிள g _) க (ூகுள g _) க (ூடலூர g @@ -492,6 +504,7 @@ _மன்மதக்) க (ுகை g _) க (ோரத்தால g _) க (ோரத்தை g _) க (ோரப்_L20 g + _) க (ோரப்பசி g _) க (ோரப்பற் g _) க (ோரப்பல் g _) க (ோரப்போர g @@ -525,6 +538,7 @@ _மன்மதக்) க (ுகை g //endsort //sort + _கோபி) க kV# _ஸ்டா) க kV# _ஜமாய்) க kV# @@ -682,10 +696,15 @@ _தொன்ம) க (ால k மன்னார்) கு (டி ku2 நற்) க (ுண g _சற்) க (ுண g + _நாற்) க (ுண g + _கற்) க (ுண்டில g + _கற்) க (ுண்டு g + _கற்) க (ுண்டை g ஏறிக்) க (ுதி g க (ுமரன k _கண்ணியா) க (ுமரி k க (ுமார k + _சு) க (ுமார g _டா) குமெண்ட kUmen.tV# அழு) க (ுரல k _மெர்) க (ுரி k @@ -704,6 +723,7 @@ _மன்னர்) க (ுல k _டிரா) க (ுலா k _ட்ரா) க (ுலா k _கங்) க (ுலி g + _கை) க (ுலு k _) குல்க (ந்த gulkV _மெரு) க (ூட்ட g _தயை) க (ூர k @@ -756,7 +776,6 @@ _விவே) க் (_ k _வர்) க்க ggV# _சொர்) க்க ggV# _ஸ்வர்) க்க ggV# -_தீர்) க்க (_சுமங்கலி ggV _கை) க்க (டிகார kgV L03) க்க (ண்ட ggV _துணை) க்க (ண்ட ggV @@ -976,6 +995,7 @@ _தணிகா) ச (ல tSV _ரீ) ச (ார்ஜ tS _டிஸ்) ச (ார்ஜ tS _) ச (ார்ஜை tS + _மொ) ச (ார்ட z _) ச (ார்மினார tS _) ச (ார்லஸ tS _) ச (ார்லி tS @@ -1021,6 +1041,7 @@ _தணிகா) ச (ல tSV _) ச (ிப்பு tS _) ச (ிப்பை tS _) ச (ிப்ஸ tS + _) ச (ிம்னி tS _மலே) ச (ிய s. இந்தோனே) ச (ிய s. _பக்தி_) சிரத் (தை srVd @@ -1171,6 +1192,7 @@ _மங்களே) சு (வர s அ) ஜ (ாருதீன z _நா) ஜ (ி z _) ஜ (ியா z + _) ஜ (ீரோ z _) ஜ (ுல்ஃபி z _) ஜ (ுல்பி z _) ஜு (வால dZ @@ -1254,6 +1276,7 @@ _ஷிஃப்) ட t.V# இண்) ட (ர் t.V _) டர்பண்ட (ைன t.VrpVn.t. எண்) டர்பி (ரைL04 t.Vrp + _) ட (ர்பைன t.V _மெண்) ட (ல t.V _) ட (வர t.V _) ட (வல t.V @@ -1263,6 +1286,7 @@ _ஷிஃப்) ட t.V# அல்) ட (ா t. உல்) ட (ா t. _மால்) ட (ா t. + _டெல்) ட (ா t. _) டாக் (_ t.a:k _) ட (ாக்க t. // talkies _) டாக்குமெண்ட d.a:kkUmen.t.V# @@ -1341,6 +1365,7 @@ _செண்) டிமெண்ட t.imen.t.V# _) டி (ராமில t. _) டி (ராமை t. _) டி (ராம் t. + _) டி (ராய d. _) டி (ராயிங் d. கொலஸ்) டி (ரால _|t. _) டி (ராலி t. @@ -1352,6 +1377,7 @@ _செண்) டிமெண்ட t.imen.t.V# _) டி (ரிங்க் d. _) டிரிப் t.rip _) டி (ரிம் t. + _) டி (ரில d. _) டி (ரில்லியன t. _) டிரீட் t.ri:t. _) டி (ரெண் t. @@ -1403,6 +1429,7 @@ _ப்ளஸ்_) டூ t.u: _) ட (ெசோ t. _) ட (ெண்டர t. _) ட (ெண்டுல்கர t. + _) டெண்ட் t.en.t. _) டென்ச (ன t.ens.V _) டென்டுல்க (ர t.ent.UlkV _) ட (ென்னிஸ t. @@ -1411,6 +1438,7 @@ _லான்_) ட (ென்னிஸ t. _) ட (ென்ஷன t. _) டெம்ப (ர t.empV _) டெம்ப (ோ t.emp + _) டெம்ப்லேட் t.emple:t. _) ட (ெய்லர t. _) ட (ெர t. _) டெலஸ்கோப் t.elVsko:p @@ -1558,6 +1586,7 @@ _நடுரோ) ட் (ல t. // exceptions, த as [d] //sort + _) த (L04ா dV _) த (L08னா d _) த (கதக dV @@ -1644,6 +1673,7 @@ _நடுரோ) ட் (ல t. _) த (ரிசி dV _) தரித்த (ிர_ dVridd _) தரித்த (ிரத்த dVridd + _) தரித்த (ிரன dVridd _) த (ரித்திரம dV _) தரித்த (ிரம் dVridd _) த (ருமங் dV @@ -1801,6 +1831,7 @@ _அகாலி_) த (ள dV _) த (ீரரை d _) த (ீர்க d _) த (ீர்க்க t +_) தீர்க்க (_சுமங்கலி dirggV _) தீர்க்க (தரிச di:rggV _) தீர்க்க (த்துடன di:rggV# _) த (ீர்க்கமா d @@ -1976,6 +2007,7 @@ _பிரசார்_பார) த (ி t _ஜோ) திக (ா tik _கார்) திக் tik சட்ட) த (ிட்ட t + _நி) த (ின t எ) தியோப (ிய tijo:p எ) த (ியோப்பிய t _பிர) த (ீ t @@ -1987,8 +2019,14 @@ _பிரசார்_பார) த (ி t வீண்) த (ேவை t _நி) த (ேஷ t _நிவேதி) த (ை t + L03து) த (ொட t வீண்) த (ொல்லை t _தான்) த (ோன்ற t + _சந்) த (ோஷிட t + _சந்) த (ோஷின t + _சந்) த (ோஷு t + _சந்) த (ோஷை t + _சந்) த (ோஷ்_ t _சோவிய) த் t அம்பே) த்க tkV# _வா) த் (சல்ய t @@ -2023,6 +2061,7 @@ _பரிவர்) த்த (ன ddV சில) த்த (ினங் dd பல) த்த (ினங் dd வர்) த்த (ினி dd +_மL06ிஷாசுரமர்) த்த (ினி dd L03) த்த (ினி+ tt ம) த்த (ிய dd வா) த்த (ிய dd @@ -2046,6 +2085,7 @@ L03வ்வு) த்த (ியோக dd _சூ) த்த (ிரரி dd _சூ) த்த (ிரர் dd ஆதி) த்தி (ராவிட dd + _சேஷா) த்த (ிரி dd _வை) த்தீசு (வ ddi:s _வை) த்த (ீஸ்வ dd ராஜ) த்து (ரோக dd @@ -2216,6 +2256,7 @@ _சொந்த_) ப (ந்த bV _) ப (னாரச bV _) ப (னாரஸ bV _) ப (னியன bV + _) ப (ன்சல bV _) ப (ன்னாரி bV _டீயும்_) ப (ன்னும்_ bV _) ப (ன்னும்_டீயும் bV @@ -2225,6 +2266,7 @@ _டீயும்_) ப (ன்னும்_ bV _) ப (ப்ளிமாஸ bV _) ப (ம்பர bV _) ப (ம்பாய bV + _) ப (ய_உணர் bV _) ப (யங் bV _) ப (யங்கர bV _) ப (யத் bV @@ -2315,6 +2357,7 @@ _டீயும்_) ப (ன்னும்_ bV _) ப (லஹீன bV _) பலாத்க (ார bVla:dk _) ப (லிகடா bV + _) ப (லிகள bV _) ப (லிகொ bV _) ப (லிக்கடா bV _) ப (லிக்குச் bV @@ -2333,6 +2376,7 @@ _டீயும்_) ப (ன்னும்_ bV _) ப (ளு bV _) ப (வநகர bV _) ப (வன bV + _) ப (வன்குமார pV _) ப (வாணி bV _) ப (வானி bV _) பவுண்ட (ன faUn.t.V @@ -2374,6 +2418,7 @@ _டெட்_) ப (ாடி b _) ப (ாடி_பில்டிங் b _) ப (ாடிக்கு b _) ப (ாடியை b + _) ப (ாட்டனிய b _) பா (ட்டரி be: _) ப (ாட்டலியன b _) பா (ட்டிங் be: @@ -2566,6 +2611,7 @@ _விளையாடு_) ப (ாம்பே p _) ப (ிங்கர்_ f _) ப (ிசிக்ஸ f _) ப (ிசினஸ b + _) ப (ிசினெஸ b _) ப (ிசிய b _) ப (ிஜிலி b _) ப (ிடில f @@ -2648,6 +2694,7 @@ _விளையாடு_) ப (ாம்பே p _) பி (ரயோஜன p _) பி (ரலய p _) பி (ரளய p + _) பி (ரவகி p _) பி (ரவாக p _) பி (ரவீண p _) பி (ரவீன p @@ -2747,6 +2794,7 @@ _விளையாடு_) ப (ாம்பே p _) பி (ரெயில b _) பி (ரெய்ல b _) பி (ரெஷ் f + _) பி (ரெஸ p _) பி (ரே p _) பி (ரேக்க b _) பிரேச (ில bre:z @@ -2847,6 +2895,7 @@ _பெனசீர்_) ப (ுட்டோ b _) புத்த (ம்_புதிய puttV _) புத்த (ம்_புது puttV _) புத்த (ரிசி puttV + _) புத்த (ழக puttV _) ப (ுத்திக் b _) ப (ுத்திசாலி b _) ப (ுத்திய b @@ -2932,9 +2981,12 @@ _பெனசீர்_) ப (ுட்டோ b _) ப (ெந்தகோஸ்த b _) ப (ெனசீர b _) பெனாச (ீர bena:z + _) ப (ெனாமி b + _) ப (ென்னட் b _) பெப்ப (ே bebb _) ப (ெப்ரவரி f _) ப (ெயில f + _) பெரோஸ fero:zV# _) பெர்ட் (ரண்ட bert. _) ப (ெர்த் b _) ப (ெர்னாட்ஷா b @@ -2955,9 +3007,11 @@ _பெனசீர்_) ப (ுட்டோ b _) ப (ேச்சிலர b _) ப (ேச்சுலர b _) ப (ேஜார b + _) ப (ேட்ஜ b _) ப (ேட்டரி b _) ப (ேட்டா b _) ப (ேட்டிங் b + _) ப (ேட்ஸ்மேன b _) ப (ேதங் b _) ப (ேதமி b _) ப (ேதமு b @@ -2992,8 +3046,8 @@ _பெனசீர்_) ப (ுட்டோ b _) ப (ைரன b _) ப (ைரவ b _) ப (ைராகி b - _) ப (ைலில f - _) ப (ைலு f + _) ப (ைல f + _) ப (ைலட் p _) ப (ொக்கே b _) ப (ொம்மன b _) ப (ொம்மனாட்டி p @@ -3041,9 +3095,11 @@ _பெனசீர்_) ப (ுட்டோ b _) ப (ோனியாக b _) ப (ோனியை b _) ப (ோனில f + _) ப (ோனிலும் f _) ப (ோனுக்க f _) ப (ோனுடைய f _) ப (ோனுல f + _) ப (ோனை f _) ப (ோன்கள f _) ப (ோன்ஸ்லே b _) போப (ால bo:p @@ -3055,6 +3111,7 @@ _பெனசீர்_) ப (ுட்டோ b _) ப (ோரும்_அடி b _) ப (ோர்_அடி b _) ப (ோர்ஜரி f + _) ப (ோர்ட b _) ப (ோர்தான்_அடி b _) ப (ோர்மேன f _) ப (ோர்வெல் b @@ -3175,6 +3232,7 @@ _விரகதா) ப (+ bV# _சிவ) ப (த pV _குளிர்) ப (தன pV _கல்) ப (தரு pV + உயர்) ப (தவி pV கஜ) பதி pVti கண) பதி pVti பசு) பத (ி pVt @@ -3274,6 +3332,7 @@ _முனிசி) ப (ல pV ஆல்) ப (ா f _ஷில்) ப (ா p _முஸ்த) ப (ா f + _ஹனி) ப (ா f _போதும்) ப (ா p _போலாம்) ப (ா p _வேண்டாம்) ப (ா p @@ -3292,6 +3351,7 @@ _வெளிப்) ப (ாக b ஈடு) ப (ாட p இடி) ப (ாட p _கட்டு) ப (ாட p + _மாசு) ப (ாட p _வசை) ப (ாட p _வழி) ப (ாட p இசை) ப (ாட p @@ -3336,7 +3396,9 @@ _வெளிப்) ப (ாக b _சரி) ப (ார p எதிர்) ப (ார p _பிளாட்) ப (ார f + _யுக) ப (ாரதி b இன்) ப (ார்ம f + _யூனி) ப (ார்ம f அ) பார்மெண்ட pa:rment.V# கண்) ப (ார்வை p இம்) ப (ால f @@ -3441,6 +3503,9 @@ L03ந்தப்) பி (ராய p ப (ிறகு+ p தேய்) ப (ிறை p வளர்) ப (ிறை p + ஈ) ப (ில f + _ரீ) ப (ில f + _ரை) ப (ில f _) பிலிப filipV# _) பி (லெட்சர f _சிம்) ப (ிள p @@ -3523,6 +3588,7 @@ _கோலாலம்) ப (ூர p _தவிடு) ப (ொடி p எரி) ப (ொரு p _வன்) ப (ொரு p + _மறை) ப (ொரு p _மென்) ப (ொரு p _ வெடி) ப (ொரு p _பழம்) ப (ொருள p @@ -3537,6 +3603,7 @@ _ வெடி) ப (ொரு p ப (ொழுதும்_+ p ப (ொழுதே_+ p ப (ொழுதோ_+ p +_விலை) ப (ோ p _ஏக) ப (ோக b ராஜ) ப (ோக b ப (ோக_ p @@ -3556,6 +3623,7 @@ _ வெடி) ப (ொரு p _மை) ப (ோட p அசை) ப (ோட p _சத்தம்) ப (ோட p + _திரை) ப (ோட p ப (ோதிலுமே_+ p ப (ோதிலும்+ p ஒம்) ப (ோது _ b @@ -3641,6 +3709,7 @@ _யாதவ) ப்பி (ரகாச pp _வெளி) ப்பி (ரகார pp அதிக) ப்பி (ரசங்க pp _நில) ப்பி (ரபு pp +_சத்திய) ப்பி (ரமா pp மன) ப்பி (ரமை bb _பர) ப்பி (ரம்ம pb _மணி) ப்பி (ரவா pp @@ -3653,6 +3722,7 @@ _வெளி) ப்பி (ரகார pp இரத்த) ப்பி (ரவாக pp _ஒL10ி) ப்பி (ரவாக pp தேச) ப்பி (ரஷ்ட pp + _ஜாதி) ப்பி (ரஷ்ட pp ஆ) ப்பி (ரிக்க f தென்னா) ப்பி (ரிக்க fV _கஜ) ப்ப (ிருஷ்ட bb @@ -3732,9 +3802,7 @@ _சந்தேக) ப்ப (ுத்தி bb மகா) ப (ாரத b L03க்க) ப (ாலி b - _) ப (ோனை f - _) ப (ைல்கள f - _) ப (ோனிலும் f + _சோ) ப (ா f // sofa _ஆ) ப (ீஸ f // office _ஆ) ப (ீச f // office @@ -3813,6 +3881,9 @@ _சந்தேக) ப்ப (ுத்தி bb ஸ sV ஸ (B s + _உ) ஸ்பெக் zbek + _நவா) ஸ zV# + .group ஹ ஹ HV @@ -3828,6 +3899,8 @@ _சந்தேக) ப்ப (ுத்தி bb ஃக gQV ஃக (B gQ + _) ஃபி (ரான் f + // vowel letters .group இ diff --git a/phsource/compile_report b/phsource/compile_report index 13c9a888..d26fe088 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -83,7 +83,7 @@ consonants 10 118 ga 21 127 tt 23 120 ko 15 116 - kl 14 115 + kl 18 119 Data file Used by b/b [b] base @@ -418,7 +418,7 @@ l/l_ [l] base [l/] fr l/l_@ [l/3] base [l/] fr -l/l@ [] base +l/l@ [h&z] base [l#] base [l] fr [l/2] fr @@ -452,7 +452,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 [h&z] base [l#] base [l] fr [l/2] fr @@ -460,7 +460,7 @@ l/la [] base [K] tn l/l_a [l/3] base [l/] fr -l/le [] base +l/le [h&z] base [l#] base [l] fr [l/2] fr @@ -472,7 +472,7 @@ l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [] base +l/li [h&z] base [l#] base [l] fr [l/2] fr @@ -486,7 +486,7 @@ ll/ll [L] base ll/_ll [L] base l/l_long [l] base [l] fr -l/lo [] base +l/lo [h&z] base [l#] base [l/2] fr [K] nso @@ -497,7 +497,7 @@ l^/l_rfx [l.] base [l;] lt [l] ru [l^] ru -l/lu [] base +l/lu [h&z] base [l#] base [l] fr [l/2] fr @@ -1737,10 +1737,10 @@ vowel/e [e] base [e:] dv [e:] te [e:] ga - [e] kl + [E] kl vowel/e# [I] en-sc [e] et - [e] kl + [E] kl vowel/e_2 [eI] en-sc [e:] de [e] hi diff --git a/phsource/mbrola/de2 b/phsource/mbrola/de2 index 694cd7f6..2aac03d3 100644 --- a/phsource/mbrola/de2 +++ b/phsource/mbrola/de2 @@ -37,7 +37,8 @@ 0 V# NULL 0 R 0 UR NULL 60 U R -0 eI NULL 60 E j +0 eI VWL 60 E j +0 eI NULL 0 e: 0 oU NULL 0 o: 0 W~ NULL 0 E~ 0 A~ NULL 0 a~ @@ -49,7 +50,7 @@ 0 @5 NULL 0 @ 0 a# NULL 0 @ 0 I2 NULL 0 I -0 i NULL 0 I +0 i NULL 0 i: 0 aa NULL 0 a 0 V NULL 0 a: 0 0 NULL 0 O diff --git a/phsource/mbrola/de4 b/phsource/mbrola/de4 index 65ed0148..e8a5ec6f 100644 --- a/phsource/mbrola/de4 +++ b/phsource/mbrola/de4 @@ -59,7 +59,7 @@ 0 @5 NULL 0 @ 0 a# NULL 0 @ 0 I2 NULL 0 I -0 i NULL 0 I +0 i NULL 0 i: 0 aa NULL 0 a 0 V NULL 0 a: 0 0 NULL 0 O diff --git a/phsource/mbrola/de6 b/phsource/mbrola/de6 index 1564267c..d2818910 100644 --- a/phsource/mbrola/de6 +++ b/phsource/mbrola/de6 @@ -41,7 +41,7 @@ 0 @5 NULL 0 @ 0 a# NULL 0 @ 0 I2 NULL 0 I -0 i NULL 0 I +0 i NULL 0 i: 0 aa NULL 0 a 0 V NULL 0 a: 0 0 NULL 0 a: diff --git a/phsource/ph_greenlandic b/phsource/ph_greenlandic new file mode 100755 index 00000000..d0b4a339 --- /dev/null +++ b/phsource/ph_greenlandic @@ -0,0 +1,102 @@ + + +// vowels + +phoneme a + vowel starttype #a endtype #a + length 150 + FMT(vowel/a) +endphoneme + +phoneme E + vowel starttype #e endtype #e + length 150 + IF thisPh(isWordEnd) THEN + FMT(vowel/e#) + ENDIF + FMT(vowel/e) +endphoneme + +phoneme i + vowel starttype #i endtype #i + length 150 + FMT(vowel/i) +endphoneme + +phoneme o + vowel starttype #o endtype #o + length 150 + FMT(vowel/o) +endphoneme + +phoneme u + vowel starttype #u endtype #u + length 150 + FMT(vowel/u_bck2) +endphoneme + +phoneme aI + vowel starttype #a endtype #i + length 250 + FMT(vdiph/ai) +endphoneme + + +phoneme e + import_phoneme da/e +endphoneme + +phoneme & + import_phoneme da/& +endphoneme + +phoneme V + import_phoneme da/V +endphoneme + +phoneme O + import_phoneme da/O +endphoneme + +phoneme y + import_phoneme da/y +endphoneme + +phoneme W + import_phoneme da/W +endphoneme + +phoneme 3 + import_phoneme da/3 +endphoneme + +phoneme : // lengthen previous vowel by "length" + virtual + length 120 +endphoneme + + + +// consonants + +phoneme r + import_phoneme base/r" +endphoneme + + +phoneme tl# + vls alv stop + lengthmod 2 + ipa tl# + Vowelin f1=0 f2=1700 -300 300 f3=-100 80 + Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + WAV(ufric/tl#, 50) +endphoneme + + +phoneme ts + import_phoneme consonants/ts +endphoneme + + + diff --git a/platforms/windows/make_espeak.iss b/platforms/windows/make_espeak.iss index 8ff80129..43128588 100755 --- a/platforms/windows/make_espeak.iss +++ b/platforms/windows/make_espeak.iss @@ -2,7 +2,7 @@ [Setup] AppName=eSpeak -AppVerName=eSpeak version 1.46.23 +AppVerName=eSpeak version 1.46.28 AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). WindowVisible=yes @@ -220,6 +220,7 @@ begin 'et': value := $425; 'eu': value := $42d; 'fi': value := $40b; + 'fil': value := $464; 'fr': value := $40c; 'ga': value := $83c; 'gu': value := $447; @@ -250,15 +251,19 @@ begin 'rw': value := $487; 'si': value := $45b; 'sk': value := $41b; + 'sl': value := $424; 'sq': value := $41c; 'sr': value := $81a; 'sv': value := $41d; 'sw': value := $441; 'ta': value := $449; 'te': value := $44a; + 'tg': value := $45e; // 'am' + 'tl': value := $464; 'tn': value := $432; 'tr': value := $41f; 'tt': value := $444; + 'ur': value := $420; 'vi': value := $42a; 'wo': value := $488; 'zh': value := $804; diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 0aa1d63c..09a5c2be 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -1129,6 +1129,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int stressflags; int dflags = 0; int first_primary; + int long_vowel; signed char vowel_stress[N_WORD_PHONEMES/2]; char syllable_weight[N_WORD_PHONEMES/2]; @@ -1444,6 +1445,39 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, vowel_stress[ix] = 4; } break; + + case 12: // LANG=kl (Greenlandic) + long_vowel = 0; + for(ix=1; ix < vowel_count; ix++) + { + if(vowel_stress[ix] == 4) + vowel_stress[ix] = 3; // change marked stress (consonant clusters) to secondary (except the last) + + if(vowel_length[ix] > 0) + { + long_vowel = ix; + vowel_stress[ix] = 3; // give secondary stress to all long vowels + } + } + + // 'stressed_syllable' gives the last marked stress + if(stressed_syllable == 0) + { + // no marked stress, choose the last long vowel + if(long_vowel > 0) + stressed_syllable = long_vowel; + else + { + // no long vowels or consonant clusters + if(vowel_count > 4) + stressed_syllable = vowel_count - 3; + else + stressed_syllable = vowel_count - 1; + } + } + vowel_stress[stressed_syllable] = 4; + max_stress = 4; + break; } /* now guess the complete stress pattern */ diff --git a/src/numbers.cpp b/src/numbers.cpp index 90a246ed..c2a30153 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -1146,6 +1146,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out // control bit 3: use feminine form of '2' (for thousands // control bit 4: speak zero tens // control bit 5: variant of ordinal number (lang=hu) +// bit 8 followed by decimal fraction int found; int ix; @@ -1385,6 +1386,22 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out } } + if(tr->langopts.numbers & NUM_SINGLE_STRESS_L) + { + // only one primary stress, on the first part (tens) + found = 0; + for(ix=0; ix < (signed)strlen(ph_out); ix++) + { + if(ph_out[ix] == phonSTRESS_P) + { + if(found) + ph_out[ix] = phonSTRESS_3; + else + found = 1; + } + } + } + else if(tr->langopts.numbers & NUM_SINGLE_STRESS) { // only one primary stress @@ -1410,6 +1427,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null // control bit 0, previous thousands // bit 1, ordinal number // bit 5 variant form of ordinal number +// bit 8 followed by decimal fraction int found; int hundreds; int tensunits; @@ -1610,7 +1628,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null x = 8; // use variant (feminine) for before thousands and millions } - if(LookupNum2(tr, tensunits, x, buf2) != 0) + if(LookupNum2(tr, tensunits, x | control & 0x100, buf2) != 0) { if(tr->langopts.numbers & NUM_SINGLE_AND) ph_hundred_and[0] = 0; // don't put 'and' after 'hundred' if there's 'and' between tens and units @@ -1858,7 +1876,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned { // this "word" ends with a decimal point Lookup(tr, "_dpt", ph_append); - decimal_point = 1; + decimal_point = 0x100; } else if(suppress_null == 0) @@ -1913,6 +1931,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned // if((buf_digit_lookup[0] == 0) && (*p != '0') && (dot_ordinal==0)) if((buf_digit_lookup[0] == 0) && (*p != '0')) { + // LANG=hu ? // not found, lookup only the last digit (?? but not if dot-ordinal has been found) if(LookupDictList(tr, &p, buf_digit_lookup, flags, FLAG_SUFX, wtab)) // don't match '0', or entries with $only { @@ -1920,24 +1939,38 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned } } - if((tr->langopts.numbers2 & NUM2_PERCENT_BEFORE) && (prev_thousands == 0)) + if(prev_thousands == 0) { - // LANG=si, say "percent" before the number - p2 = word; - while((*p2 != ' ') && (*p2 != 0)) + if((decimal_point == 0) && (ordinal == 0)) { - p2++; + // Look for special pronunciation for this number in isolation (LANG=kl) + sprintf(string, "_%dn", value); + if(Lookup(tr, string, ph_out)) + { + return(1); + } } - if(p2[1] == '%') + + if(tr->langopts.numbers2 & NUM2_PERCENT_BEFORE) { - Lookup(tr, "%", ph_out); - ph_out += strlen(ph_out); - p2[1] = ' '; + // LANG=si, say "percent" before the number + p2 = word; + while((*p2 != ' ') && (*p2 != 0)) + { + p2++; + } + if(p2[1] == '%') + { + Lookup(tr, "%", ph_out); + ph_out += strlen(ph_out); + p2[1] = ' '; + } } } + } - LookupNum3(tr, value, ph_buf, suppress_null, thousandplex, prev_thousands | ordinal); + LookupNum3(tr, value, ph_buf, suppress_null, thousandplex, prev_thousands | ordinal | decimal_point); if((thousandplex > 0) && (tr->langopts.numbers2 & 0x200)) sprintf(ph_out,"%s%s%s%s",ph_zeros,ph_append,ph_buf2,ph_buf); // say "thousands" before its number else @@ -2005,6 +2038,17 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned n_digits += decimal_count; } break; + + case NUM_DFRACTION_7: + // alternative form of decimal fraction digits, except the final digit + while(decimal_count-- > 1) + { + sprintf(string,"_%cd", word[n_digits]); + if(Lookup(tr, string, buf1) == 0) + break; + n_digits++; + strcat(ph_out, buf1); + } } } diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 60ef6e46..1e65d1bf 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.27 21.Oct.12"; +const char *version_string = "1.46.28 16.Nov.12"; const int version_phdata = 0x014624; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 4132d627..dc4b3938 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -113,12 +113,14 @@ static void SetLetterBitsRange(Translator *tr, int group, int first, int last) // ignore these characters static const unsigned short chars_ignore_default[] = { + 0xad, 1, // soft hyphtn 0x200c, 1, // zero width non-joiner 0x200d, 1, // zero width joiner 0, 0 }; // alternatively, ignore characters but allow zero-width-non-joiner (lang-fa) static const unsigned short chars_ignore_zwnj_hyphen[] = { + 0xad, 1, // soft hyphen 0x200c, '-', // zero width non-joiner, replace with hyphen 0x200d, 1, // zero width joiner 0, 0 }; @@ -943,6 +945,14 @@ SetLengthMods(tr,3); // all equal } break; + case L('k','l'): // Greenlandic + { + tr->langopts.stress_rule = 12; + tr->langopts.stress_flags = S_NO_AUTO_2; + tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900 | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_ORDINAL; + } + break; + case L('k','o'): // Korean, TEST { static const char ko_ivowels[] = {0x63,0x64,0x67,0x68,0x6d,0x72,0x74,0x75,0}; // y and i vowels @@ -1207,7 +1217,7 @@ SetLengthMods(tr,3); // all equal tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words tr->langopts.suffix_add_e = tr->letter_bits_offset + 0x4a; //virama - tr->langopts.numbers = NUM_OMIT_1_THOUSAND; + tr->langopts.numbers = NUM_OMIT_1_THOUSAND | NUM_SINGLE_STRESS_L | NUM_DFRACTION_7; tr->langopts.numbers2 = NUM2_PERCENT_BEFORE; tr->langopts.break_numbers = 0x14aa8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi } diff --git a/src/translate.h b/src/translate.h index 76075f6f..b88f0b13 100644 --- a/src/translate.h +++ b/src/translate.h @@ -402,6 +402,7 @@ typedef struct { #define NUM_DFRACTION_4 0x8000 #define NUM_DFRACTION_5 0xa000 #define NUM_DFRACTION_6 0xc000 +#define NUM_DFRACTION_7 0xe000 // lang=si, alternative form of number for decimal fraction digits (except the last) #define NUM_ORDINAL_DOT 0x10000 #define NUM_NOPAUSE 0x20000 #define NUM_AND_HUNDRED 0x40000 @@ -414,6 +415,7 @@ typedef struct { #define NUM_ROMAN_CAPITALS 0x2000000 #define NUM_ROMAN_AFTER 0x4000000 #define NUM_ROMAN_ORDINAL 0x8000000 +#define NUM_SINGLE_STRESS_L 0x10000000 // bits0-1=which numbers routine to use. // bit2= thousands separator must be space @@ -442,6 +444,7 @@ typedef struct { // bit25= Roman numbers only if upper case // bit26= say "roman" after the number, not before // bit27= Roman numbers are ordinal numbers + // bit28= only one primary stress in tens+units (on the tens) int numbers; #define NUM2_THOUSANDS_VAR1 0x40 From cb988de8f9948de763ff06a931d1aaf58e513da1 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 18 Nov 2012 12:13:05 +0000 Subject: [PATCH 2/2] 1.46.28 (from http://espeak.sourceforge.net/test/latest.html) --- dictsource/kl_list | 127 +++++-- dictsource/kl_rules | 80 ++-- dictsource/si_list | 206 +++++++---- dictsource/si_rules | 597 ++++++++++++++++-------------- espeak-data/mbrola_ph/de2_phtrans | Bin 1516 -> 1540 bytes espeak-data/mbrola_ph/de4_phtrans | Bin 1660 -> 1660 bytes espeak-data/mbrola_ph/de6_phtrans | Bin 1276 -> 1276 bytes espeak-data/voices/test/kl | 2 - phsource/vowelcharts/kl | 16 + phsource/vowelcharts/kl.png | Bin 0 -> 17862 bytes phsource/vowelcharts/si | 1 - phsource/vowelcharts/si.png | Bin 18915 -> 18876 bytes 12 files changed, 636 insertions(+), 393 deletions(-) create mode 100644 phsource/vowelcharts/kl create mode 100644 phsource/vowelcharts/kl.png diff --git a/dictsource/kl_list b/dictsource/kl_list index dd5cd12e..8db1c6a8 100644 --- a/dictsource/kl_list +++ b/dictsource/kl_list @@ -2,42 +2,111 @@ // This file is UTF8 encoded // Spelling to phoneme rules for Greenlandic -b be -c se -d de -f ef -g ge +b bE +c sE +d dE +f Ef +g ji h ha -j je +j jE k ka -l el -m em -n en -p pe -q qa: -r er -s es -t te -v ve -w we +l El +m Em +n En +p pE +q qa +r Er +s Es +t tE +v vE +w wE x iks -z ze +z zE // y // æ // ø // å -_0 n'u:lu -_1 at'a:seq -_2 m'arluk -_3 p'iNasut -_4 s'isamat -_5 t'al#imat -_6 arf'inil#it -_7 arfineqm'arluk -_8 arfineqp'iNasut -_9 quliNil'uat -_10 q'uilit +// Native numbers 0-10 +_0n n'u:lu +_1n at'a:sEq +_2n m'arluk +_3n p'iNasut +_4n s'isamat +_5n t'al#imat +_6n arf'inil#it +_7n arfinEqm'arluk +_8n arfinEqp'iNasut +_9n quliNil'uat +_10n q'ulit + +// Danish numbers +_0 'nOl +_1 'en +_2 t'o +_3 tR'e +_4 f'iV +_5 f'Em +_6 s'EQs +_7 s'yw +_8 'O:d@ +_9 n'i +_10 t'i +_11 'Elv@ +_12 t'Vl +_13 tR'&d@-n +_14 fj'ord@-n +_15 f'emt@-n +_16 s'ajsd@-n +_17 s'Wd@-n +_18 '&d@-n +_19 n'ed@-n +_2X t'y:w +_3X tR'&Dv@ +_4X f'W:V +_5X h&l't*Es +_6X t*'Es +_7X h&lfj'&rs +_8X f'irs +_9X h&lf'Ems +_0C h'un*@:D +_1C ed||h'unr@:D +_0M1 t'u:s@-n +_1M1 ed||t'u:s@-n +_1M2 'e:n||milij'o:n +_0M2 milij'o:nV +_1M3 'e:n||milij'a:d +_0M3 milij'a:d3 +_1M4 'e:n||bilij'o:n +_0M4 bilij'o:n3 + +_0and V +_dpt kom:a_ + +// ordinals are followed by a dot in Danish +_ord 3 + +// exceptions for ordinals +_1o fWrsd3 +_2o &n@n +_3o trEdj3 +_4o fjeV +_5o fEmt3 +_6o sjEd3 +_7o syvn3 +_8o Vtn3 +_9o ni@n3 +_10o ti@n3 +_11o Elfd3 +_12o tVlfd3 + +_2Xo t'yv@n@ // 25. +_3Xo tr'&ft@ //36. +_4Xo fWV'tyv@n@ // 42. +_5Xo h<*'Esenstyv@n@ // 52. +_6Xo tr'Esenstyv@n@ // 62. +_7Xo h&lfj'&rsenstyv@n@ // 72. +_8Xo firsenstyv@n@ // 82. +_9Xo h&lf'Emsenstyv@n@ // 95. -_dpt kom:a diff --git a/dictsource/kl_rules b/dictsource/kl_rules index 30611c7e..52210281 100644 --- a/dictsource/kl_rules +++ b/dictsource/kl_rules @@ -3,10 +3,25 @@ // Spelling to phoneme rules for Greenlandic +// don't stress a vowel before these consonant clusters +.L01 ng nng + + .group a a a - aa a: - ai (_ aI + a (CC 'a + a (L01 a + + ak (_ &g + ap (_ &p + at (_ &t + + aa a: + aar a: + aaq a: + + ai (_ aI + .group b @@ -24,8 +39,11 @@ .group e - e e - ee e: + e E + e (CC 'E // a vowel before a consonant cluster is stressed + e (L01 E // ... except for these consonants + + ee E: .group f @@ -34,8 +52,8 @@ .group g - g Q - gg C: + g j + gg j: .group h @@ -45,6 +63,8 @@ .group i i i + i (CC 'i + i (L01 i ii i: @@ -54,8 +74,8 @@ .group k - k k - kk k: + k g + kk g: .group l @@ -70,6 +90,7 @@ .group n n n + na na nn n: ng N nng N: @@ -77,23 +98,25 @@ .group o o o + o (CC 'o + o (L01 o oo o: .group p - p p - p p: + p b + p b: + - .group q q q - qq q: - + qq qq + .group r r r rr X: - + rl rl# .group s s s @@ -101,33 +124,39 @@ .group t - t t - tt t: - tl tl# - ts ts + t d + ti ti + te te + tt d + tl tl# + ts ts .group u - u u - uu u: + u u + u (CC 'u + u (L01 u + uu u: .group v - v v - vv v: + v v + vv v: .group w - w w + w w .group x - x ks + x ks .group y - y j + y j K) y (K i // not before or after a vowel + K) y (CC 'i + K) y (L01 i .group z @@ -149,4 +178,3 @@ .group $ d'olar - \ No newline at end of file diff --git a/dictsource/si_list b/dictsource/si_list index 0ed0b11b..f4b55816 100644 --- a/dictsource/si_list +++ b/dictsource/si_list @@ -1,65 +1,141 @@ - -// This file is UTF8 encoded -// Spelling to phoneme rules for Sinhala - - -// speak Latin letters as English -a e:j -b bi: -c si: -d di: -e i: -f Ef -g dZi: -h e:tS -i a:j -j dZe:j -k ke:j -l El -m Em -n En -o o: -p pi: -q kju: -r a:r -s Es -t thi: -u ju: -v vi: -w dabalju: -x Eks -y wa:j -z zEd - - -// symbols -% sij@j@t.@ $max3 -* &st.@risk@j@ $max3 - -_; t'itk,oma:v@ - -// numbers -_1 ek@ -_2 dek@ -_3 tu:n@ -_4 hat@r@ -_5 pah@ -_6 haj@ -_7 hat@ -_8 at.@ -_9 nav@j@ -_10 dah@j@ -_11 ekol.@h@ -_12 dol.@h@ -_13 dah@tun@ -_14 dah@hat@r@ -_15 pah@l.ov@ -_16 dah@saj@ -_17 dah@hat@ -_18 dah@at.@ -_19 dah@nav@j@ -_2X viss@ -_0C sij@j@ -_0M1 dah@s@ -_0M2 milij@n@j@ -_0M3 bilij@n@j@ +// Sinhala Language. +// This SI_list file is written by Him Prasad Gautam [Kathmandu, nepal] +// This file is UTF-8 encoded. + +// letter groups: +// A - Alphabetical and Symbolic Vowels: +// 0x0D85~0x0D16, 0x0DCA~0x0DF3 +// B - Symbolic Vowels and Halkirima +// 0x0DCA~0x0DF3 +// C - Consonants: +// 0x0D9A~0x0DC2 + +// speak Latin letters as English + + +// numbers +_0 b'induv@ +_1 'ek@ +_2 d'ek@ +_3 t'un@ +_4 h'at@r@ +_5 p'ah@ +_6 h'aj@ +_7 h'at@ +_8 'at.@ +_9 n'av@j@ + +_1d 'ekki // numbers used in a decimal fraction +_2d d'ekki +_3d t'unni + +_10 d'ah@j@ +_11 'ekol,@h@ +_12 d'ol@h@ +_13 d'ah@t,un@ +_14 d'ah@h,@t@r@ +_15 p'ah@l.,ov@ +_16 d'ah@s,@j@ +_17 d'ah@h,@t@ +_18 d'ah@,@t.@ +_19 d'ah@n,@v@j@ +_2X v'isi +_20 v'iss@ +_30 t'ih@ +_31 t'isek@ +_32 t'isdek@ +_33 t'istun@ +_34 t'ish@t,@r@ +_35 t'isp@h@ +_36 t'ish@j@ +_37 t'ish@t@ +_38 t'is@t.@ +_39 t'isn@v,@j@ +_40 h'at@l,ih@ +_41 h'at@l,is'ek@ +_42 h'at@l,isdek@ +_43 h'at@l,istun@ +_44 h'at@l,ish@t,@r@ +_45 h'at@l,isp@h@ +_46 h'at@l,ish@j@ +_47 h'at@l,ish@t@ +_48 h'at@l,is@t.@ +_49 h'at@l,isn@v,@j@ +_5X p'an@s +_50 p'an@h@ +_6X h'&t.@ +_60 h'&t.@ +_7X h'&tt&: +_70 h'&tt&:v@ +_8X 'asu: +_80 'asu:v@ +_9X 'anu: +_90 'anu:v@ + +_1C s'ij@j@ +_0C s'ij@ +_0M1 d'ah@s +_0M1x 'ah@s // exact thousands +_0M2 l'akS +_0M2x l'akS@j@ +_0M3 k'o:t.i +_0M3x k'o:t.ij@ +_0M4 v'il'ij@n //what in sinhala? +_dpt d'aS@m#@ + +// Consonants + +ක k@ +ඛ kh@ +ග g@ +ඝ gh@ +ඞ N@ +ඟ N#g@ +ච tS@ +ඡ tSh@ +ජ dZ@ +ඣ dZh@ +ඤ n^@ +ඥ gn@ +ඦ n^#dZ@ +ට t.@ +ඨ t.h@ +ඩ d.@ +ඪ d.h@ +ණ n.@ +ඬ n.#d.@ +ත t@ +ථ th@ +ද d@ +ධ dh@ +න n@ +ඳ n#d@ +ප p@ +ඵ ph@ +බ b@ +භ bh@ +ම m@ +ඹ m#b@ +ය j@ +ර r@ +ල l@ +ව w@ +ශ S@ +ෂ S@ +ස s@ +හ h@ +ළ l.@ +ෆ f@ + +// symbols +_. t'it@ +_, k'oma:v@ +? pr'a:Sna:rt,@j@ +! v'iSm#@j,a:rt@j@ +_“ 'udrut,@pa:t.,@a:r,@mb@j@ +_” 'udhrut,@pa:t.h,@@w,@s.a:n,@j@ +_: t'itkom,a:v@ +_; d'etit@ +$ do:l.ar $max3 +% sij@j@t.@ $max3 +* &st.@risk@j@ $max3 diff --git a/dictsource/si_rules b/dictsource/si_rules index 56e98d76..a27479fe 100644 --- a/dictsource/si_rules +++ b/dictsource/si_rules @@ -1,270 +1,327 @@ - -// This file is UTF8 encoded -// Spelling to phoneme rules for Sinhala - -// A means vowel letters (not vowel signs) -// B means a combining vowel sign or a virama - - -.group ක - ක ka - ක (B k - -.group ඛ - ඛ ka - ඛ (B k - -.group ග - ග ga - ග (B g - -.group ඝ - ඝ ga - ඝ (B g - -.group ඞ - ඞ Na - ඞ (B N - -.group ඟ - ඟ N#ga - ඟ (B N#g - -.group ච - ච tSa - ච (B tS - -.group ඡ - ඡ tSa - ඡ (B tS - -.group ජ - ජ dZa - ජ (B dZ - -.group ඣ - ඣ dZa - ඣ (B dZh - -.group ඤ - ඤ n^a - ඤ (B n^ - -.group ඥ - ඥ gna - ඥ (B gn - -.group ඦ - ඦ n^#dZa - ඦ (B n^#dZ - -.group ට - ට t.a - ට (B t. - -.group ඨ - ඨ t.a - ඨ (B t. - -.group ඩ - ඩ d.a - ඩ (B d. - -.group ඪ - ඪ d.a - ඪ (B d. - -.group ණ - ණ n.a - ණ (B n. - -.group ඬ - ඬ n.#d.a - ඬ (B n.#d. - - -.group ත - ත ta - ත (B t - -.group ථ - ථ ta - ථ (B t - -.group ද - ද da - ද (B d - -.group ධ - ධ da - ධ (B d - -.group න - න na - න (B n - -.group ඳ - ඳ n#da - ඳ (B n#d - -.group ප - ප pa - ප (B p - -.group ඵ - ඵ pa - ඵ (B p - -.group බ - බ ba - බ (B b - -.group භ - භ ba - භ (B b - -.group ම - ම ma - ම (B m - -.group ඹ - ඹ m#ba - ඹ (B m#b - -.group ය - ය ja - ය (B j - -.group ර - ර ra - ර (B r - -.group ල - ල la - ල (B l - -.group ව - ව va - ව (B v - -.group ශ - ශ Sa - ශ (B S - -.group ෂ - ෂ Sa - ෂ (B S - -.group ස - ස sa - ස (B s - -.group හ - හ ha - හ (B h - -.group ළ - ළ l.a - ළ (B l. - -.group ෆ - ෆ fa - ෆ (B f - - -.group අ - අ a - -.group ආ - ආ a: - -.group ඇ - ඇ & - -.group ඈ - ඈ &: - -.group ඉ - ඉ i - -.group ඊ - ඊ i: - -.group උ - උ u - -.group ඌ - ඌ u: - -.group ඍ - ඍ ru - -.group ඎ - ඎ ru: - -.group ඏ - ඏ li - -.group ඐ - ඐ li: - -.group එ - එ e - -.group ඒ - ඒ e: - -.group ඓ - ඓ aI - -.group ඔ - ඔ o - -.group ඕ - ඕ o: - -.group ඖ - ඖ aU - -.group 0xe0b6 // characters which start with UTF-8 bytes: [e0 b6] - ං m // anusvaraya - ඃ n // visargaya - - -.group 0xe0b7 // characters which start with UTF-8 bytes: [e0 b7] - ා a: - ැ & - ෑ &: - ි i - ී i: - ු u - ූ u: - ෘ ru - ෙ e - ේ e: - ෛ aI - ො o - ෝ o: - ෞ aU - ෟ li - ෲ ru: - ෳ li: - - ් // hal kirima (virima) - - -.group 0xe0a4 // devanagari - 0xe0a4 _^_HI // switch to hindi voice for devanagari characters -.group 0xe0a5 // devanagari - 0xe0a5 _^_HI - -.group 0xe0ae // Tamil - 0xe0ae _^_TA // switch to Tamil voice for Tamil characters -.group 0xe0af // Tamil - 0xe0af _^_TA - - -.group - $ do:l.ar - - +// Sinhala Language. +// This SI_rules file is written by Him Prasad Gautam [Kathmandu, nepal] +// This file is UTF-8 encoded. + +// letter groups: +// A - Alphabetical and Symbolic Vowels: +// 0x0D85~0x0D16, 0x0DCA~0x0DF3 +// B - Symbolic Vowels and Halkirima +// 0x0DCA~0x0DF3 +// C - Consonants: +// 0x0D9A~0x0DC2 + +// speak Latin letters as English + + + +.group ක + ක ka + ක (B k + +.group ඛ + ඛ kha + ඛ (B kh + +.group ග + ග ga + ග (B g + +.group ඝ + ඝ gha + ඝ (B gh + +.group ඞ + ඞ Na + ඞ (B N + +.group ඟ + ඟ N#ga + ඟ (B N#g + +.group ච + ච tSa + ච (B tS + +.group ඡ + ඡ tSha + ඡ (B tSh + +.group ජ + ජ dZa + ජ (B dZ + +.group ඣ + ඣ dZha + ඣ (B dZh + +.group ඤ + ඤ n^a + ඤ (B n^ + +.group ඥ + ඥ gna + ඥ (B gn + +.group ඦ + ඦ n^#dZa + ඦ (B n^#dZ + +.group ට + ට t.a + ට (B t. + +.group ඨ + ඨ t.ha + ඨ (B t.h + +.group ඩ + ඩ d.a + ඩ (B d. + +.group ඪ + ඪ d.a + ඪ (B d. + +.group ණ + ණ n.a + ණ (B n. + +.group ඬ + ඬ n.#d.a + ඬ (B n.#d. + +.group ත + ත ta + ත (B t + +.group ථ + ථ tha + ථ (B th + +.group ද + ද da + ද (B d + +.group ධ + ධ dha + ධ (B dh + +.group න + න na + න (B n + +.group ඳ + ඳ n#da + ඳ (B n#d + +.group ප + ප pa + ප (B p + +.group ඵ + ඵ pha + ඵ (B ph + +.group බ + බ ba + බ (B b + +.group භ + භ bha + භ (B bh + +.group ම + ම ma + ම (B m + +.group ඹ + ඹ m#ba + ඹ (B m#b + +.group ය + ය ja + ය (B j + +.group ර + ර ra + ර (B r + +.group ල + ල la + ල (B l + +.group ව + ව wa + ව (B w + +.group ශ + ශ sa + ශ (B s + +.group ෂ + ෂ Sa + ෂ (B S + +.group ස + ස s.a + ස (B s. + +.group හ + හ ha + හ (B h + +.group ළ + ළ l.a + ළ (B l. + +.group ෆ + ෆ fa + ෆ (B f + +// The Vowel Alphabets + +.group අ + අ a + +.group ආ + ආ a: + +.group ඇ + ඇ & + +.group ඈ + ඈ &: + +.group ඉ + ඉ i + +.group ඊ + ඊ i: + +.group උ + උ u + +.group ඌ + ඌ u: + +.group ඍ + ඍ ru + +.group ඎ + ඎ ru: + +.group ඏ + ඏ li + +.group ඐ + ඐ li: + +.group එ + එ e + +.group ඒ + ඒ e: + +.group ඓ + ඓ aI + +.group ඔ + ඔ o + +.group ඕ + ඕ o: + +.group ඖ + ඖ aU + + + +.group ං // anusvaray@ + ං 'anus.w,a:r@j@ + A) ං m + C) ං m + +.group ඃ // visargaya + ඃ w'is.@rg,@j@ + A) ඃ n + C) ඃ n + +// The Vowelic Symbols + +.group ා + ා '&l@p,ill@ + C) ා a: + +.group ැ + ැ '&d@j@ + C) ැ & + +.group ෑ + ෑ d'i:rg@,&d@j@ + C) ෑ &: + +.group ි + ි 'ispill@ + C) ි i + +.group ී + ී d'i:rg@,ispill@ + C) ී i: + +.group ු + ු p'a:pill@ + C) ු u + +.group ූ + ූ d'i:rg@p,a:pill@ + C) ූ u: + +.group ෘ + ෘ g'&t.@p,ill@ + C) ෘ ru + +.group ෙ + ෙ k'ombuv@ + C) ෙ e + + +.group ෛ + ෛ k'ombud,ek@ + C) ෛ aI + +.group ෞ + ෞ g'ajan,ukitt@ + C) ෞ aU + + +.group 0xe0b7 // More vowelic symbols b7] + + ේ e: + ො o + ෝ o: + ෟ li + ෲ ru: + ෳ li: + + +.group ් + ් halk'ir'im#@ // Halkirima + C) ් + + +.group + $ do:l.ar + + + + +.group 0xe0a4 // devanagari + 0xe0a4 _^_NE // Nepali voice +.group 0xe0a5 // devanagari + 0xe0a5 _^_NE + +.group 0xe0ae // Tamil + 0xe0ae _^_TA // Tamil voice +.group 0xe0af // Tamil + 0xe0af _^_TA + diff --git a/espeak-data/mbrola_ph/de2_phtrans b/espeak-data/mbrola_ph/de2_phtrans index 42b2bbc2c361d8d3c5e153da33c4bfd623a5c785..804a0d4019f097d18b387111cf11fe610892afcb 100644 GIT binary patch delta 60 zcmaFE-NLgWfSHkLav-ztWFKY@&QvP~2$&qp{G2J%YO@>5Bt{Vi1|tU#s02epwgZR> E0Fr16A^-pY delta 47 zcmZqSdBeRSfSHkDav-zt;#k41Q4_Q1Z)A5Z~_DnP)0zu=)c^*yHoA8Y& diff --git a/espeak-data/mbrola_ph/de6_phtrans b/espeak-data/mbrola_ph/de6_phtrans index 09122cffcc722917313319e1893fbdb791456e40..2aa70f4c4511d627782f645be4f05011e3da72b4 100644 GIT binary patch delta 35 lcmeyv`G<2u4l`4x)#g0rD#nQ)SOgdtj2!$Kpui!)0RYKx2&4c2 delta 37 pcmeyv`G<2u4)f#?W`WH$%sGrAIhVvZV)otH&j18^Vjz-%0RZ=l3M>Es diff --git a/espeak-data/voices/test/kl b/espeak-data/voices/test/kl index eeb33e65..1ee5f0b5 100644 --- a/espeak-data/voices/test/kl +++ b/espeak-data/voices/test/kl @@ -1,5 +1,3 @@ name greenlandic language kl -stressrule 2 // penultimate (for testing) - diff --git a/phsource/vowelcharts/kl b/phsource/vowelcharts/kl new file mode 100644 index 00000000..96e86d49 --- /dev/null +++ b/phsource/vowelcharts/kl @@ -0,0 +1,16 @@ +@ 0 525 1441 2340 525 1441 2340 +@- 0 525 1441 2340 525 1441 2340 +a 0 904 1320 2700 896 1340 2660 +e 0 456 1980 2540 440 1980 2540 +i 0 280 2280 2840 240 2339 2840 +o 0 454 812 2559 432 824 2520 +u 0 320 820 2360 320 820 2360 +E 1 504 1700 2480 504 1700 2480 +E 0 456 1980 2540 440 1980 2540 +aI 0 912 1320 2740 360 2200 2820 +& 0 645 1705 2520 645 1705 2520 +V 0 672 1180 2595 672 1180 2595 +O 0 480 760 2710 480 760 2710 +y 0 280 1720 2340 280 1720 2340 +W 0 525 1320 2200 525 1320 2200 +3 0 658 1408 2460 658 1408 2460 diff --git a/phsource/vowelcharts/kl.png b/phsource/vowelcharts/kl.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa1e31caa549899bce3ed288cc16085285c84a4 GIT binary patch literal 17862 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 literal 0 HcmV?d00001 diff --git a/phsource/vowelcharts/si b/phsource/vowelcharts/si index 446157bd..568ebd37 100644 --- a/phsource/vowelcharts/si +++ b/phsource/vowelcharts/si @@ -6,7 +6,6 @@ o 0 512 860 2648 512 860 2648 u 0 320 940 2360 320 900 2360 i: 0 280 2280 2840 240 2339 2840 e: 0 504 1900 2544 496 1920 2552 -E 0 584 1820 2560 584 1820 2560 &: 0 680 1660 2520 680 1660 2520 a: 0 784 1180 2680 776 1200 2680 o: 0 512 860 2648 512 860 2648 diff --git a/phsource/vowelcharts/si.png b/phsource/vowelcharts/si.png index 225b6998442793e2c858669489585476e0ed936f..6e664643a509d920f9fe831b0914d0472cdbf469 100644 GIT binary patch literal 18876 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 literal 18915 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 tn$DkHhJ|z=9m!?+L(qQeG}G3##