From e5cc887ce5aefbd8b5aa1d3fd215b30245ffd456 Mon Sep 17 00:00:00 2001 From: jonsd Date: Tue, 2 Apr 2013 13:18:57 +0000 Subject: [PATCH 1/2] [1.47.04] Official release git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@337 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/dict_phonemes | 34 +++--- dictsource/en_list | 59 ++++++---- dictsource/en_rules | 2 + dictsource/pt_list | 53 ++++++--- dictsource/pt_rules | 30 +++-- dictsource/ru_list | 4 +- phsource/compile_report | 16 +-- phsource/ph_sinhala | 155 ++++++++++++++++++++++++++ phsource/ph_urdu | 45 ++++++++ phsource/phonemes | 17 ++- platforms/riscos/Makefile | 11 +- platforms/riscos/copysource | 1 - platforms/riscos/cpp/speak_riscos | 136 +++++++++++++++++----- platforms/windows/make_espeak.iss | 8 +- platforms/windows/make_espeakedit.iss | 2 +- src/synthdata.cpp | 2 +- src/tr_languages.cpp | 1 + src/translate.cpp | 3 +- 18 files changed, 452 insertions(+), 127 deletions(-) create mode 100755 phsource/ph_sinhala create mode 100755 phsource/ph_urdu diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 0ef01f8a..4b119d6a 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -49,6 +49,20 @@ s s. S; t t# t. t.# tS v v# w z +Dictionary pt_dict 2013-04-02 + +& &/ &U~ &~ @ @- a A +aI aU e E eI EI eU EU +i I i/ iU o O oI OI +o~ u U uI u~ y + +* : ; b c C d dZ +f g h j k l l^ m +n N n^ p Q r R r- +s S s# s; t T tS ts +v w x z Z + + Dictionary bg_dict 2013-03-16 @ a e i o u @@ -150,7 +164,7 @@ p Q r R s s; t T ts v x z -Dictionary en_dict 2013-03-30 +Dictionary en_dict 2013-04-02 0 0# 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI3 @@ -164,7 +178,7 @@ d# dZ f g h j k l l# l/ m n N n^ p Q q Q" r R r- R2 s S t T t2 tS tS; v w x -z Z z# +z Z z# z. Dictionary eo_dict 2013-03-08 @@ -563,20 +577,6 @@ S s; S; t t; tS ts tS; ts; v w x z Z Z; -Dictionary pt_dict 2013-03-31 - -& &/ &U~ &~ @ @- a A -aI aU e E eI EI eU EU -i I i/ iU o O oI OI -o~ u U uI u~ y - -* : ; b C d dZ f -g h j k l l^ m n -N n^ p Q r R r- s -S s# s; t T tS ts v -w x z Z - - Dictionary ro_dict 2013-03-04 @ @- @I @U a aI aU e @@ -592,7 +592,7 @@ ts; v v; w w2 x z Z z; Z; -Dictionary ru_dict 2013-03-31 +Dictionary ru_dict 2013-04-01 8 @- a A e E E# E% E2 i I I# I3 I^ ja ju diff --git a/dictsource/en_list b/dictsource/en_list index 1cd478c9..92b93d45 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -325,37 +325,54 @@ _zh tS'aIni:z // Arabic letters ء h'amza -آ 'Elifm,adda# -أ 'Elifh,amza -ا 'Elif -ب bE? +آ al'if_mamd'uda# +أ h'amza_taht_al'if +ؤ h'amza_?la_waw +إ al'if_taht_h'amza +ئ h'amza_?la_jE? +ا al'if +ب ba ة t'E?maR2b'uta# -ت tE? +ت ta ث TE? -ج ZIm +ج dZi:m ح hE? خ xE? -د dEl/1 -ذ DEl/1 +د dal/1 +ذ Dal/1 ر R2A:? ز zEjn س si:n ش Si:n -ص sO:d@- -ض dO:d@- +ص sa:d@- +ض da:d@- ط thA:? ظ DA:? -ع ?ajn -غ Q"ajn -ف fE? -ق qO:f -ك kEf -ل lEm +ع '?Ein +غ 'Q"Ein +ف fa +ق qa:f +ك kaf +ل lam م mi:m ن nu|:n -ه hE? -و wO:w +ه ha +و waw +ى al'if_maks'ura ي jE? +// Farsi +پ pa +چ tSa +ژ Za +گ ga:f +ی f'A@si||j'e +ک k'a:f +// Urdu +ٹ te +ڈ de +ڑ z.e +ے barij'e +ھ h'@ َ a ِ i @@ -725,6 +742,7 @@ aka aka# alas a#l'as albeit O:lb'i:It alfalfa alf'alf@ +algebra aldZI2br@ alias eIli@s alibi al@baI alibis al@baIz @@ -2793,7 +2811,6 @@ tear te@ $verb (tear apart) t,e@||a#pA@t (tear off) t'e@||'0f teargas ti@3gas -techy tEki teddybear t'EdIb,e@ telemetry t@lEm@tri telepathy t@lEp@Ti @@ -3255,8 +3272,9 @@ Lvov l@-v0v ?5 Luxembourg lVks@mbVRg Madagascar mad@g'ask3 Madras m@draas -Madrid m@drId +Madrid m@drId Malawi $alt3 +Malayalam maleI'A:l@m Maldives mO:ld'i:v Mali mA:li Mandalay $3 @@ -3384,6 +3402,7 @@ Wisconsin wI2sk'0nsI2n Wyoming waI'oUmIN Xhosa kO:s@ Yemen $alt2 +Yosemite joUs'Em@ti zaire zaI'i@3 zimbabwe zI2mbA:bwi zimbabwean zI2mbA:bwI@n diff --git a/dictsource/en_rules b/dictsource/en_rules index b913125a..4683f324 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -1464,6 +1464,7 @@ a) ch (il k bra) ch k te) ch (K k + _te) ch k ch (isC k ch (ic_ k @@Car) ch (_ k @@ -3035,6 +3036,7 @@ &n) iel (_ j@L &r) iel (_ =i:@L ie (n i@ + &) ie (n_ =i@n d) iene (_ 'aIi:n ie (ntal I'E g) ie (n i: diff --git a/dictsource/pt_list b/dictsource/pt_list index 19d2c056..c4400fd9 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -329,8 +329,7 @@ vocês $u2+ $verbf eles $u+ $verbf elas $u+ $verbf -me $u // reflexive -me $u $verbf +me $u $verbf // reflexive te $u $verbf nos $u $nounf la $u @@ -345,7 +344,7 @@ se $u ?2 nesta $u+ $nounf ?2 neste $u+ $nounf n'estSi //in this ?2 esse $u+ $nounf 'esi // that -essa 'Es& $u+ +essa 'Es& $u+ $noun desse $u+ $nounf desta $nounf nesse n'esy $u+ $nounf @@ -384,7 +383,7 @@ duma $u $nounf duns $u $nounf dumas $u $nounf -em $u // in,on,at +em $u $noun // in,on,at no nu $u $nounf na $u $nounf num $u $nounf @@ -427,7 +426,7 @@ com $u // with // conjunctions ?1 e i $u // and ?2 e i $u // and -se $u // if +se $u+ $verbf // if ?2 mas $u // but @@ -522,7 +521,7 @@ estão $u estava $u estávamos $u -astavam $u +estavam $u estive $u ?2 esteve estevy $u2 @@ -619,9 +618,14 @@ o O $atend // some common adjectives and adverbs -alguns $u // some -algumas $u // some -não n,&U~ $strend // not +alguns $u $noun // some +algumas $u $noun // some +não n,&U~ $verbf $strend // not +nunca $u+ $verbf +sempre $u+ $verbf +qualquer $u $nounf +quaisquer $u $nounf +jamais $u+ $verbf // MAIN WORD DICTIONARY @@ -643,9 +647,9 @@ aeroporto $alt2 aeroportos $alt albatrozes $alt alcateia $alt +alcova $alt2 alferes $alt algozes $alt -alicerce $alt almoço $alt $verb ameba $alt amores $alt2 @@ -675,6 +679,7 @@ beco $alt2 besta $alt2 bilhete $alt2 boca $alt2 +boceta $alt2 bochecha $alt2 bojo $alt2 boleia $alt @@ -686,6 +691,7 @@ bordo $alt borra $alt2 $noun bosque $alt boto $alt2 $noun +boxe $alt brejo $alt bromelha $alt cabelo $alt2 @@ -696,6 +702,7 @@ caderneta $alt2 cadete $alt2 camelha $alt camelo $alt2 +caminhonete $alt camiseta $alt2 cantora $alt2 capacete $alt2 @@ -832,11 +839,13 @@ explore $alt faceta $alt2 fantoche $alt farofa $alt +farolete $alt2 febre $alt fera $alt feitora $alt2 ferozes $alt fezes $alt +filete $alt2 ?1 fixe fiSy foda $alt2 $verb fogos $alt @@ -856,6 +865,7 @@ fulgores $alt2 galera $alt galileia $alt gameta $alt2 +garçonete $alt2 geleia $alt gelo $alt2 gelo $alt $verb @@ -884,6 +894,7 @@ jogo $alt2 $noun joguete $alt2 lagosta $alt2 lambreta $alt2 +lanchonete $alt lebre $alt lembrete $alt2 lepra $alt @@ -893,6 +904,7 @@ lopes $alt macete $alt2 maior $alt maleta $alt2 +marionete $alt marreta $alt2 megera $alt melhor $alt @@ -911,6 +923,7 @@ miolos $alt modelo $alt2 modelo $alt $verb moeda $alt +moem $alt mofo $alt $verb molho $alt2 $noun monera $alt @@ -930,12 +943,14 @@ namoro $alt2 $noun naquela $nounf naquele $alt2 $nounf nervo $alt2 +nojo $alt2 novelo $alt2 novos $alt obstetra $alt odisseia $alt onu $1 -olho $alt2 $noun +olho $alt2 $noun +olhos $alt onomatopeia $alt opereta $alt2 ordens $alt @@ -953,10 +968,9 @@ pangeia $alt pantera $alt parede $alt2 pastora $alt2 +patinete $alt pedra $alt pela $alt $verb -pelego $alt2 -pela $alt $verb pelo $alt2 pelo $alt $verb peso $alt $verb @@ -998,11 +1012,12 @@ relevo $alt2 $noun remorso $alt renovo $alt $verb retorno $alt $verb -reuva $alt +reuva x'EUv& rigores $alt2 rixa x'iS& rocha $alt rock $alt +roem $alt rola $alt2 $noun rolo $alt2 $noun rota $alt2 @@ -1037,6 +1052,7 @@ suor swOr tapete $alt2 temores $alt2 tempero $alt2 $noun +tenores $alt2 terrores $alt2 teta $alt2 tetra $alt @@ -1068,7 +1084,6 @@ voga $alt vozes $alt xarope $alt zelo $alt2 $noun -zero $alt zorra $alt2 @@ -1095,6 +1110,9 @@ book buk ?1 download d'a,wnl'oud ?2 download daUNl'owd ?3 download dau~Nl'owd +drive dR'aivy +driver dR'aiver +drivers dR'aiveRs ?1 end 'end ?2 esc 'Esk ?3 esc 'EskI @@ -1135,6 +1153,7 @@ laptop lEptOp ?1 ovo 'ovu ?1 pause p'au:z page p'eIdZ + pizza p'its& python p'aIT&~N ?1 readme r'i:dmi: ?1 sapi s,ap'i @@ -1150,6 +1169,7 @@ símbolo s'imbolU ?1 space sp'eIsy ?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 @@ -1190,7 +1210,8 @@ facebook feisybuk ?2 microsoft m'aIkRows'Oft ?1 movie m'uvi ?1 nero n'Eru -?1 office 'Of,is +/1 office 'Of,is +?2 office 'Ofsy openoffice 'opeIN|'Ofis ?1 outlook 'autl'uk ?2 Outlook ,aUtl'uk diff --git a/dictsource/pt_rules b/dictsource/pt_rules index cce034fc..d2f26045 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -47,7 +47,6 @@ ?1 a (lK ,A // Algarve, Almerinda, etc... ?2 al (K aU a (lh+ a - a (m &~ a (mAr_ & a (mA@ & @@ -274,7 +273,6 @@ e (xA_ E e (xAm_ E ?2 _n) e (t E - em (C eIm en (K eIN enh en^ @@ -368,6 +366,7 @@ _perd) e (L05_ e _quis) e (L05_ E _soub) e (L05_ E + _talh) e (L05_ E _trem) e (L05_ e diss) e (L06_ E // contra- fend) e (L06_ e // de- o- @@ -461,6 +460,7 @@ respond) e (L07_ e // cor- _hosp) e (dL03_ E _gr) e (gL03_ e _gal) e (gL03_ e + _pel) e (gL03_ e _n) e (grL03_ e _ch) e (guL02_ e estr) ei (L04_ EI @@ -474,10 +474,12 @@ respond) e (L07_ e // cor- _reit) e (rL03_ E _sinc) e (rL03_ E _g) e (rL04_ E + _z) e (rL04_ E qu) e (rL04_ E // re- _op) e (rL04_ E gen) e (rL04_ E // de- re- _alt) e (rL04_ E + _enc) e (rL04_ E _sug) e (rL04_ E _sup) e (rL04_ E _tol) e (rL04_ E @@ -489,12 +491,16 @@ respond) e (L07_ e // cor- _recup) e (rL04_ E _refrig) e (rL04_ E _v) e (rbL03_ E + _alic) e (rcL02_ E _p) e (rdL02_ E _l) e (rdL03_ E _h) e (rdL04_ E _bez) e (rrL03_ e _inv) e (rtL03_ e _f) e (rvL03_ e + _alic) e (rçL03_ E + _p) e (sL01_ E + _l) e (sL03_ E _refr) e (scL01_ E _d) e (scL02_ E _cr) e (scL02_ E @@ -520,6 +526,7 @@ _obsol) e (tL03_ e _atr) e (vL03_ e _r) e (zL04_ E _pr) e (zL04_ E + _rev) e (zL04_ E _despr) e (zL04_ E _embel) e (zL04_ E _menospr) e (zL04_ E @@ -688,9 +695,9 @@ _entorp) e (çL03_ e _) l (_ 'Ele l l l) l - lh l^ + lh lj A) lh lj -?1 A) lh l^ + A) lh l^ ?4 A) lh l^ @@ -756,6 +763,9 @@ _entorp) e (çL03_ e o (lA_ O o (lAm_ O + o (lhe_ O + o (lhem_ O + o (ltA_ O o (ltAm_ O @@ -778,9 +788,7 @@ _entorp) e (çL03_ e ?1 o (l_ 'O ?2 ol (_ Ow - o (lh o -?2 _) o (lhA_ O -?2 _) o (lhAm_ O + om (_ oN o (ma_ o @@ -838,6 +846,7 @@ _entorp) e (çL03_ e //sort _f) o (L05_ o +_pormen) o (L05_ O _f) o (L07_ o _s) o (bL02_ O _af) o (bL04_ O @@ -859,9 +868,8 @@ _entorp) e (çL03_ e _t) o (lL03_ o _f) o (lgL04_ O _emp) o (lgL04_ O - c) o (lhL02_ O // es- en- re- - _t) o (lhL02_ O - _m) o (lhL04_ O + _) o (lhL04_ O + m) o (lhL04_ O ent) o (pL02_ O _c) o (pL03_ O _ens) o (pL04_ O @@ -1057,6 +1065,8 @@ _remem) o (rL04_ O u (iu w u (iCK u uy uI + ul (K uw + u (lh+ u um (_ u~N um (C u~m diff --git a/dictsource/ru_list b/dictsource/ru_list index 58af2d00..d1cd23ed 100644 --- a/dictsource/ru_list +++ b/dictsource/ru_list @@ -28,7 +28,7 @@ _10 d;'es;It; _11 Od;'innVttsVt; _12 dv;In'AttsVt; _13 tR;In'AttsVt; -_14 ts;It'y@-*nVttsVt; +_14 tS;It'y@-*nVttsVt; _15 p;Itn'AttsVt; _16 SE#stn'AttsVt; _17 s;Imn'AttsVt; @@ -45,7 +45,7 @@ _9X d;E2v;In'ostO _0C st'o _2C dv;'es;t;I _3C tr;'ista -_4C ts;It'yr;E2sta +_4C tS;It'yr;E2sta _5C p;,It;s'ot _6C S,E#s;t;s'ot _7C s;,Ims'ot diff --git a/phsource/compile_report b/phsource/compile_report index 944e95c6..fb1da3e3 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,5 +1,5 @@ -75 phoneme tables +74 phoneme tables new total base 109 109 consonants 11 119 @@ -74,7 +74,6 @@ consonants 11 119 kl 18 119 am 15 114 si 24 155 - rw 15 132 sl 10 137 Data file Used by @@ -218,7 +217,6 @@ dzh/xdz_pzd [J] base [J] tr [J] ku envelope/i_risefall [11] zh -envelope/i_risefall2 [+2] rw envelope/p_214 [5] vi [5] vi-hue [214] zh @@ -236,7 +234,6 @@ envelope/p_fall [2] vi [22] zh [33] zh [53] zh - [+] rw envelope/p_fallrise [4] vi envelope/p_level [1] vi [1] vi-hue @@ -1511,8 +1508,6 @@ vowel/a# [a] base2 [a#] en-sc [a#] en-wi [&] sr - [a#] rw - [a/] rw vowel/a_2 [a] base2 [a] en-wi [A:] en-wi @@ -1524,7 +1519,6 @@ vowel/a_2 [a] base2 [a] pt-pt [a] ro [a] el - [a] rw vowel/a#_2 [A] nl [a:] nl [a] kn @@ -1673,8 +1667,6 @@ vowel/e [e] base [e] da [?e] da [E] kl - [e] rw - [e#] rw vowel/e# [I] en-sc [e] et [E] kl @@ -1825,8 +1817,6 @@ vowel/i [i] base [i] fa [i] kl [i:] si - [i] rw - [i#] rw vowel/i# [y:] cy vowel/i_2 [i2] de [i:] de @@ -1985,8 +1975,6 @@ vowel/o [o] base2 [o] id [o] hy [o] kl - [o] rw - [o#] rw vowel/o_2 [o:] cy [o:] hi [o:] hu @@ -2183,8 +2171,6 @@ vowel/u_bck [u] base2 [?u] da [u] ka [u] ko - [u] rw - [u#] rw vowel/u_bck2 [u] et [u] fr [u:] fr diff --git a/phsource/ph_sinhala b/phsource/ph_sinhala new file mode 100755 index 00000000..cee7ba6f --- /dev/null +++ b/phsource/ph_sinhala @@ -0,0 +1,155 @@ + +// Phonemes for Sinhala +// This inherits from ph_hindi + +// (these are only guesses) + +phoneme @ + vowel starttype #a endtype #a + length 150 + FMT(vowel/@_low) +endphoneme + + +phoneme a + vowel long starttype #a endtype #a + ipa ɐ + length 150 + ChangeIfNotStressed(@) + FMT(vowel/a#_2) +endphoneme + + +phoneme a: + vowel starttype #a endtype #a + length 300 + FMT(vowel/a_3) +endphoneme + + +phoneme & + vowel starttype #e endtype #e + length 150 + FMT(vowel/ee_6) +endphoneme + + +phoneme &: + vowel starttype #e endtype #e + length 300 + FMT(vowel/ee_6) +endphoneme + + +phoneme e + vowel starttype #e endtype #e + length 150 + FMT(vowel/e_mid) +endphoneme + + +phoneme e: + vowel starttype #e endtype #e + length 300 + FMT(vowel/e_mid2) +endphoneme + + +phoneme i + vowel starttype #i endtype #i + length 150 + FMT(vowel/i_6) +endphoneme + + +phoneme i: + vowel starttype #i endtype #i + length 300 + FMT(vowel/i) +endphoneme + + + +phoneme o + vowel starttype #o endtype #o + length 150 + FMT(vowel/oo_1) +endphoneme + + +phoneme o: + vowel starttype #o endtype #o + length 300 + FMT(vowel/oo_1) +endphoneme + + +phoneme u + vowel starttype #u endtype #u + length 130 + FMT(vowel/u_6) +endphoneme + +phoneme u: + vowel starttype #u endtype #u + length 300 + FMT(vowel/u_6) +endphoneme + + + +phoneme aI + vowel long starttype #a endtype #i + length 300 + FMT(vdiph/ai_8) +endphoneme + +phoneme aU + vowel long starttype #a endtype #u + length 300 + FMT(vdiph/au) +endphoneme + + + +// ?? This is standard [v]. Should be it [v] without the fricative noise? +phoneme v + import_phoneme base/v +endphoneme + + +phoneme r + import_phoneme base/r +endphoneme + +phoneme t + import_phoneme base2/t // dental +endphoneme + + +// temporary, map [n#] etc. to [n] etc. + +phoneme m# + ipa U+1D50 + CALL base/m +endphoneme + +phoneme n# + ipa U+207F + CALL base/n +endphoneme + +phoneme n.# + ipa U+1DAF + CALL base/n. +endphoneme + +phoneme n^# + ipa U+1DAE + CALL base/n^ +endphoneme + +phoneme N# + ipa U+1D51 + CALL base/N +endphoneme diff --git a/phsource/ph_urdu b/phsource/ph_urdu new file mode 100755 index 00000000..2dd61fb3 --- /dev/null +++ b/phsource/ph_urdu @@ -0,0 +1,45 @@ +//==================================================== +// Phonemes adjusted for Urdu by Him Prasad Gautam. +//==================================================== + + +phoneme : // Lengthen the previous vowel by "length" + virtual + length 120 +endphoneme + +phoneme @ + vowel flag1 starttype #@ endtype #@ + length 130 + + ChangeIfDiminished(@-) + IF nextPh(H) THEN + FMT(vowel/@_low) + ENDIF + FMT(vowel/@_bck) +endphoneme + + +phoneme V + vowel flag1 starttype #@ endtype #@ + length 150 + CALL hi/V +endphoneme + + +phoneme @2 + vowel flag1 starttype #@ endtype #@ + length 150 + FMT(vowel/@_low) +endphoneme + +phoneme @3 + vowel flag1 starttype #@ endtype #@ + length 150 + ChangeIfDiminished(@-) + FMT(vowel/@_3) +endphoneme + + +//==================================================== +// The rest Phonemes are inherted from Hindi. diff --git a/phsource/phonemes b/phsource/phonemes index 4b57c0ac..22f593bd 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1878,17 +1878,20 @@ include ph_greenlandic phonemetable am base include ph_amhari -phonemetable si hi -include ph_sinhala - //************************************************************************************** // The following lines are experimental, for future additions. // These langauges are not in a usable state. // These lines can be deleted. -phonemetable rw base2 -include ph_kinyarwanda +phonemetable si hi +include ph_sinhala + +phonemetable sl sk +include ph_slovenian + +//phonemetable rw base2 +//include ph_kinyarwanda //phonemetable mr hi //include ph_marathi @@ -1902,9 +1905,6 @@ include ph_kinyarwanda //phonemetable prs base //include ph_dari -phonemetable sl sk -include ph_slovenian - //phonemetable gd base //include ph_s_gaelic @@ -1929,7 +1929,6 @@ include ph_slovenian //phonemetable tn base //include ph_setswana - //phonemetable mt base //include ph_maltese diff --git a/platforms/riscos/Makefile b/platforms/riscos/Makefile index 2cd3b0da..3522e043 100644 --- a/platforms/riscos/Makefile +++ b/platforms/riscos/Makefile @@ -2,8 +2,8 @@ # Toolflags: -CCflags = -c -C90 -depend !Depend -IC: -throwback -zM -C++flags = -c -depend !Depend -IC: -throwback -zM +CCflags = -c -C90 -depend !Depend -IC: -throwback -memaccess -zM -L22-S22-L41 +C++flags = -c -depend !Depend -IC: -throwback -zM -L22-S22-L41 Linkflags = -rmf -c++ -o $@ ObjAsmflags = -throwback -NoCache -depend !Depend CMHGflags = @@ -16,11 +16,11 @@ Squeezeflags = -o $@ @.o.intonation @.o.readclause @.o.setlengths @.o.synthdata \ @.o.synthesize @.o.translate @.o.tr_languages @.o.numbers \ @.o.synth_mbrola @.o.phonemelist \ - @.o.tr_english @.o.wavegen @.o.voices @.o.assemb @.o.cmhgfile + @.o.wavegen @.o.voices @.o.assemb @.o.cmhgfile Link $(Linkflags) C:o.stubs C:o.c++lib @.o.speak_riscos @.o.compiledict \ @.o.dictionary @.o.intonation @.o.readclause @.o.setlengths \ @.o.synthdata @.o.synthesize @.o.numbers @.o.synth_mbrola \ - @.o.translate @.o.tr_english @.o.wavegen @.o.tr_languages \ + @.o.translate @.o.wavegen @.o.tr_languages \ @.o.voices @.o.phonemelist @.o.assemb @.o.cmhgfile @@ -51,8 +51,6 @@ Squeezeflags = -o $@ c++ $(c++flags) -o @.o.synthesize @.CPP.synthesize @.o.translate: @.CPP.translate c++ $(c++flags) -o @.o.translate @.CPP.translate -@.o.tr_english: @.CPP.tr_english - c++ $(c++flags) -o @.o.tr_english @.CPP.tr_english @.o.tr_languages: @.CPP.tr_languages c++ $(c++flags) -o @.o.tr_languages @.CPP.tr_languages @.o.voices: @.CPP.voices @@ -63,3 +61,4 @@ Squeezeflags = -o $@ objasm $(objasmflags) -from @.s.assemb -to @.o.assemb # Dynamic dependencies: + diff --git a/platforms/riscos/copysource b/platforms/riscos/copysource index 4bfece70..b63ca50e 100644 --- a/platforms/riscos/copysource +++ b/platforms/riscos/copysource @@ -18,6 +18,5 @@ copy .^.src.sintab/h .h.sintab fq~c copy .^.src.speak_lib/h .h.speak_lib fq~c copy .^.src.synthesize/h .h.synthesize fq~c copy .^.src.translate/h .h.translate fq~c -copy .^.src.tr_languages/h .h.tr_languages fq~c copy .^.src.voice/h .h.voice fq~c copy .^.src.wave/h .h.wave fq~c diff --git a/platforms/riscos/cpp/speak_riscos b/platforms/riscos/cpp/speak_riscos index 5c22b550..420137be 100644 --- a/platforms/riscos/cpp/speak_riscos +++ b/platforms/riscos/cpp/speak_riscos @@ -1,6 +1,6 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -26,6 +26,7 @@ #include #include #include "kernel.h" +#include #include "speech.h" #include "speak_lib.h" @@ -221,6 +222,7 @@ void ReadVoiceNames2(char *directory) voice_variant_names[n_voice_variant_files++] = p; } else + if(strcmp(p, "default") != 0) { if(n_voice_files >= (N_VOICE_NAMES-1)) continue; @@ -233,11 +235,17 @@ void ReadVoiceNames2(char *directory) void ReadVoiceNames() {//=================== - char directory[sizeof(path_home)+10]; + char directory[sizeof(path_home)+20]; n_voice_files = 0; n_voice_variant_files = 0; + sprintf(directory,"%s.voices.default", path_home); + if(GetFileLength(directory) > 0) + { + // put the 'default' voice at the start of the list + voice_names[n_voice_files++] = "default"; + } sprintf(directory,"%s.voices",path_home); ReadVoiceNames2(directory); @@ -400,11 +408,27 @@ void FillSoundBuf(int size) int initialise(void) {//================= - sprintf(path_home,"%s.espeak-data",""); + char buf[N_PATH_HOME]; + + _kernel_swi_regs regs; + _kernel_oserror *error; + + buf[0] = 0; + regs.r[0] = (int)"eSpeak$Dir"; + regs.r[1] = (int)buf; + regs.r[2] = sizeof(buf); + regs.r[3] = 0; + regs.r[4] = 0; + regs.r[5] = 0; + + error = _kernel_swi(0x20023,®s,®s); // OS_ReadVarVal + buf[regs.r[2]] = 0; + + sprintf(path_home,"%s.espeak-data",buf); if(GetFileLength(path_home) != -2) { // not found, try the 10 character version of the directory name - sprintf(path_home,"%s.espeak-dat",""); + sprintf(path_home,"%s.espeak-dat",buf); } if(GetFileLength(path_home) != -2) { @@ -414,7 +438,7 @@ int initialise(void) } WavegenInit(22050,0); - LoadPhData(); + LoadPhData(NULL); SetVoiceStack(NULL, ""); SynthesizeInit(); return(0); @@ -453,7 +477,7 @@ void speak_text_string(char *data, int terminator, int len, int wait, int voice_ static_length = 0; else { - strcat(&static_buf[static_length]," : "); + strcat(&static_buf[static_length]," \n "); static_length+=3; } @@ -578,13 +602,14 @@ void set_say_options(int reg2, int reg3) void jsd_swi_functions(int *r) /****************************/ { + int use_ipa; espeak_VOICE voice_select; switch(r[0]) { case 0: /* major version */ r[0] = 4; - r[1] = 331; + r[1] = 347; break; case 1: /* register user */ @@ -594,7 +619,13 @@ void jsd_swi_functions(int *r) break; case 3: -// r[0] = (int)speech_to_phonemes((char *)r[1]); + // translate into phonemes + use_ipa = 0; + if((r[2] >= 1) && (use_ipa <= 3)) + use_ipa = r[2]; + TranslateClause(translator,NULL,(char *)r[1],NULL,NULL); + GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa); + r[0] = (int)translator->phon_out; break; case 4: @@ -642,6 +673,7 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw) /*********************************************************/ { int value; + int value2; int q_length; value = r[0]; @@ -650,21 +682,23 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw) case 0: // ready ? // returns the index into the source text of the currently speaking word - if(current_source_index > 0) - r[1] = current_source_index-1; - else - r[1] = current_source_index; /* source index */ + if(current_source_index > 0) + r[1] = current_source_index-1; + else + r[1] = current_source_index; /* source index */ r[2] = 0; /* source tag */ r[3] = 0; /* for future expansion */ r[4] = 0; r[5] = 0; - if(wcmdq_head == wcmdq_tail) + if(WcmdqUsed() < 5) { r[0] = -1; /* ready, or nearly */ } else + { r[0] = 0; + } break; case 1: /* restore old sound channel. DO NOTHING */ @@ -692,19 +726,32 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw) break; case 7: /* pitch */ - // not implemented + value = (value * 50)/128; + SetParameter(espeakPITCH, value, 0); break; - case 8: /* speed */ - SetParameter(espeakRATE,value,0); + case 8: // speed, convert to range 80 to 400, mid-value=180 + if(value < 128) + value2 = 80 + (value*100)/128; // linear range for 0-127 -> 80-179 + else + value2 = 80 + pow((float)value/128.0, 1.75)*100; + + SetParameter(espeakRATE,value2,0); break; case 9: /* word_gap */ + if(value >= 128) + value = value - 128; + + if(value > 1) + value = (value-1) * 5; + SetParameter(espeakWORDGAP,value,0); break; case 10: /* pitch_range */ - // not implemented + value = (value * 50)/128; + SetParameter(espeakRANGE, value, 0); break; case 12: /* reset */ @@ -712,7 +759,22 @@ _kernel_oserror *swi_handler(int swi_no, int *r, void *pw) break; case 13: /* volume */ - SetParameter(espeakVOLUME,value,0); + // convert to range 6-255 to 10-400, mid-value=100 + if(value < 6) + value2 = value + 4; + else + if(value < 128) + { + value2 = pow((float)(value+40)/168.0, 1.75)*100; + } + else + value2 = pow((float)value/128.0, 2.0)*100; + SetParameter(espeakVOLUME,value2,0); + WavegenSetVoice(voice); + break; + + case 14: // set voice by name + SetVoiceByName((char *)r[0]); WavegenSetVoice(voice); break; } @@ -835,6 +897,13 @@ int param_number(char **argp) return(value); } +void PrintVersion() +{//================ + char buf[120]; + printf("\nspeak text-to-speech: %s Data at: %s\n", version_string, path_home); +} + + void command_line(char *arg_string, int wait) {//========================================== @@ -854,6 +923,7 @@ void command_line(char *arg_string, int wait) char command[80]; char *p; int ix; + int quiet; voicename[0] = 0; wavefile[0] = 0; @@ -861,7 +931,7 @@ void command_line(char *arg_string, int wait) option_linelength = 0; option_phonemes = 0; option_waveout = 0; - option_quiet = 0; + quiet = 0; option_multibyte = 0; // auto option_capitals = 0; option_punctuation = 0; @@ -887,7 +957,8 @@ void command_line(char *arg_string, int wait) break; case 'h': - printf("\nspeak text-to-speech: %s\n%s",version_string,help_text); + PrintVersion(); + printf("\n%s",help_text); return; case 'k': @@ -912,7 +983,7 @@ void command_line(char *arg_string, int wait) break; case 'q': - option_quiet = 1; + quiet = 1; break; case 'f': @@ -963,7 +1034,8 @@ void command_line(char *arg_string, int wait) else if(strcmp(command,"help")==0) { - printf("\nspeak text-to-speech: %s\n%s",version_string,help_text); + PrintVersion(); + printf("\n%s",help_text); return; } else @@ -980,6 +1052,17 @@ void command_line(char *arg_string, int wait) SetParameter(espeakPUNCTUATION,option_punctuation,0); } else + if(memcmp(command,"version",7)==0) + { + PrintVersion(); + return; + } + else + if(memcmp(command,"ipa",3)==0) + { + option_phonemes = 3; + } + else { printf("Command not recognised\n"); } @@ -997,22 +1080,25 @@ void command_line(char *arg_string, int wait) } } + if((option_phonemes > 1) && !option_waveout) + quiet = 1; // can't call sprintf() during callback + SetVoiceByName(voicename); if((filename[0]==0) && (p[0]=='\r')) { // nothing to speak - if(option_quiet) + if(quiet) { SpeakNextClause(NULL,NULL,2); // stop speaking more_text = 0; } } - if(option_waveout || option_quiet) + if(option_waveout || quiet) { // write speech to a WAV file - if(option_quiet) + if(quiet) { OpenWaveFile(NULL,samplerate); option_waveout = 2; diff --git a/platforms/windows/make_espeak.iss b/platforms/windows/make_espeak.iss index 2a83b5fa..ec9bca85 100755 --- a/platforms/windows/make_espeak.iss +++ b/platforms/windows/make_espeak.iss @@ -2,7 +2,7 @@ [Setup] AppName=eSpeak -AppVerName=eSpeak version 1.47.03 +AppVerName=eSpeak version 1.47.04 AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). WindowVisible=yes @@ -146,7 +146,7 @@ begin $0e: Result := 'hu'; $0f: Result := 'is'; $10: Result := 'it'; - //$12: Result := 'ko'; + $12: Result := 'ko'; $13: Result := 'nl'; $14: Result := 'no'; $15: Result := 'pl'; @@ -158,7 +158,7 @@ begin $1c: Result := 'sq'; $1d: Result := 'sv'; $1f: Result := 'tr'; - //$20: Result := 'ur'; + $20: Result := 'ur'; $21: Result := 'id'; $25: Result := 'et'; $26: Result := 'lv'; @@ -174,6 +174,7 @@ begin $39: Result := 'hi'; //$3a: Result := 'mt'; $3c: Result := 'ga'; + $3e: Result := 'ms'; //$3f: Result := 'kk'; $41: Result := 'sw'; //$44: Result := 'tt'; @@ -263,6 +264,7 @@ begin 'mk': value := $42f; 'ml': value := $44c; 'mn': value := $450; + 'ms': value := $43e; 'mt': value := $43a; 'my': value := $455; 'ne': value := $461; diff --git a/platforms/windows/make_espeakedit.iss b/platforms/windows/make_espeakedit.iss index bafbdf3e..235aa67d 100755 --- a/platforms/windows/make_espeakedit.iss +++ b/platforms/windows/make_espeakedit.iss @@ -1,7 +1,7 @@ [Setup] AppName=eSpeakEdit -AppVerName=eSpeakEdit version 1.47.03 +AppVerName=eSpeakEdit version 1.47.04 DefaultDirName={pf}\eSpeak DefaultGroupName=eSpeak OutputBaseFilename=setup_espeakedit diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 92c61ac4..6d6eae4c 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.03f 31.Mar.13"; +const char *version_string = "1.47.04 02.Apr.13"; const int version_phdata = 0x014701; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 2a6e4645..6621f999 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -518,6 +518,7 @@ Translator *SelectTranslator(const char *name) { SetCyrillicLetters(tr); SetLetterVowel(tr,0x2a); + tr->charset_a0 = charsets[5]; // ISO-8859-5 tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x107; // devoice at end of word, and change voicing to match a following consonant (except v) tr->langopts.param[LOPT_REDUCE] = 2; diff --git a/src/translate.cpp b/src/translate.cpp index 1a0471d9..2e876cd1 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -3469,7 +3469,8 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre prev_clause_pause = clause_pause; - *tone_out = tone; + if(tone_out != NULL) + *tone_out = tone; new_sentence = 0; if(terminator & CLAUSE_BIT_SENTENCE) From 530253327b6f664c366faf6044890410df83e2b2 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 2 Apr 2013 17:34:22 +0100 Subject: [PATCH 2/2] 1.47.04 (from http://espeak.sourceforge.net/test/latest.html) --- phsource/envelopes.png | Bin 20187 -> 17934 bytes phsource/r/V_ | Bin 5632 -> 0 bytes phsource/r/V_2_ | Bin 5634 -> 0 bytes platforms/windows/make_espeakedit.iss | 10 ++++++++-- 4 files changed, 8 insertions(+), 2 deletions(-) delete mode 100644 phsource/r/V_ delete mode 100644 phsource/r/V_2_ diff --git a/phsource/envelopes.png b/phsource/envelopes.png index 5876f8bc5888a16ccf3b1d8a3d7080e9a9eff474..aac09caa46490b4e9e302c44b308d6726812d441 100644 GIT binary patch literal 17934 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⪻wqeT#dYB3u=n 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 diff --git a/phsource/r/V_ b/phsource/r/V_ deleted file mode 100644 index 349d2b7892f022eaa5b5b5d7bacb348e7f45183d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 zcmeI0d3e;+`p45ua*~r|lAI(n)5*+q)~-NlOFP}$>B_$E#Rd8U!3v^mqJp$V1!R$Z zQAGAd3MfSpC;~;ci&$lmMJ^PmVigNj@PZ({r&Iy)dG6z1zrReLBxk;7&3WeipX8> z|D4YQ){OP3>ysTxH~oJ9k%Y2@PZL!CB7gftDrr*En@N`vhx^;auZ%qyeWO`nWOR5@ zDDs)Sy*(egP3~u06;9-QKBU@F;5cV5vfs76V{2nG*sAmm`rG<^eIdRt(x>aA^p3h) zH|S7rryti>+RE%_9d75-t`+VI&r+}7H`wR(4fLjZDqSJY;f}+$41Irae~V)NQB$bt5%tJfrR56i0HI;+Fxv){DOcKqOIa2#-CI)>Q?+H&>g)`Z}}mP&K7xzg0rbX9v( zOVVo973x4WQoW{psJy78DWq})Ek)zeVDuy!gvOv5Xbswlj-X?x3hhOk&>~cVhN6C` zBg#TaC>psDLchu1$;ahA@7nS#dGsE71@%U)kP%&!H_PMXEV)72Dh-iL(k}67(Ig%) z78`Sn$XF{J5Y`D(g(4wWunIr$JNW7RAU>au=VSO(zAHbRf0N(9@8i$%*Lg)q6b1;B zg;m1)!fM=SppYbp!uR|a{3m=lzY(A1{Kx!OejPuR@5ej&i`)ioGWQZUkz34Fa3{GM z?mTyx+r-V|Ugb)-H*xK0PUPG06Z!4@6%e8+Vc0 z$F1aE;d*e9To88=R>8yYD|iJ$E{sd(+HsxmmB;09`CJ!n0QUknoqLyCgL};5Ugr96 zF&xdEhVR3v@LAXwc7h#XSJ)3e1&71Y_*j? z6xbh@z<1%tc+MJl0}>p?-GR06AbbZF!9>Wx%eY4cyOy274rTM%P*!EFY#RGAR>R;( zxDM`zN8kZi0Y8G<;ZaC(?eV%uzJOoN*YXjYHy-nZWPZToYj`2F_bJw1hYw49sIjpjOYPVV2Z6iV=QHuL75 zs8jdsFF-G=e6y)UHBzDRc$hF0k=7*Q`xitp|1DW&Xd+BFIgl7j5^5=CMH69y!DEC* z2dwernV=@ZjAj=TcUVHI4yq1n;>iqSVNf4|5FaQluhLJ$$&t`8~yi!d9wpTd?T{5zv-?pOIqtyA*H8*9K&OVLxb#XgAYdu#y^`70H&YsuYom`tkj@vKk(E7OLThj_{n);UV8FHX0GL#oc(b7S2 zkVuM4jTy%C!bG8&aGIaZ_r+FgA88A<_Sy+GPhGEAl_e+} zv8Yb|UapgWkWb1V$m8WaS(ML8?@Lppr=-?WGf9+w6!(g=!~!u=-u#3zLMWF*{xmmIx;Vld-FDoN>DG6=Qd!*?3f#i|ZZ}o)zW^mBP2ee}o%C4JOoL zp`Y+8KaxMp*|;e%6{f=%;4WB?t??SRsco^&SLwp4a`L53g`!J(_hg?>0|T}dKbNsUPW)957W2lIPesh3$}yv05FNnaOOSc zJj1YNmShhy&oU%46^LL4Ezt|91nQ>Yh9Q=kN0IaZdL8{W?k$2~-~cY*1I+oEw=ps6SHq$C?rFr^mY6&%tnonJ%V(6}PH2yu4DyBB#@%qqj(39xL zu@+7j&|7IIm;jCf7c-jqipgMCvlQ$Or^630QOaO3On`^jM0OlA2b9v!QB{U2!!bjN zVLN$-s3Ch$lj*r&4C7_zv4`2Cm}(0!qY~K5jbi}@0Q#t*JNbH0F}atVPx{F*WM4xz zWx+c$9DD;}nI235(}D3bHs&rk2P(ikygw1(EBa~r8!GeG{(?UD$Pu8I&V9M5L@mAd z{JVtdKn{L{FdmTk2w{rQzBpe3t<`>9wkge!=r?0X!!etdC6NH6_cTt{M%|}J*;hxa3UZ=_{7jto}JEN z_7E#!PF63-x5bghNZ}TD7*1znn78Sfh6=Kl8V)uxmFz}1jQfr2&#&T7^FWBjw)vV+ zCVVOUEU3n0e@*SM#-AK@GLOCJp* zv5j=Y-^G2<%nji_;J(FQUz)Gyj&Mu4=ePhTa%bRb%!@8C7OL<&b_JWtZekF&_9wt> zPy<4k7{<#8ECLdeT=U_jm2YE~xgV;iBmCMi`fx}=6 zE_DK4&=e5 zWLQltFceTP(HUSf_!*d)NTvm2WxfY1KsP{v3VIZ+)5|C$wc1c;SWdO3H`B-IHFOxA zL+vFUq>FlrZV%1?6Z0E*7i8Y9{jRi$EB6WWJ6`bPVIPJdV((W}A z_?k@a_}zzTB+OWvAl!z#h9)1TkuVV)K|JtJ8VRErA66O(vkAvd584n!L&IoWlk$hh za*r@X4EeyTX(SBskn+ELn12ZK4`Kcx%>OH4?vzHA-y=tWew%jQXGl}w&xA?5U;F1M z>50GiFu@=n`!GcCgD5G3UC)5iS)Nv z5xX;?ck&l$MS*2Glk#TeeV@}J>stDhl+eWbR+iW`(X*Rxk76UogtKA0d^5aHcy#v; zXS|mJEaXx{yf1McOg2xxhX0!qB!h|uh^UJ33l_Y=FXiVqBGl-=vnQ{4L=n5W3y*k zsL|Ce3@tuuHYutwa!ACS@RMOtVI`p_d>-Er??%r}cYAl4OLxt4I-HwA+J{_qEONAQ z+_7)9zhuv~tM+Q!YFnXAx1HA4>kIU^^fG;?z5|!C^)lhc`EK-WKJ^wYT9Oc(UfBPMO&+N(dyJ` zYJz%GsZj{Ejar7scwQ^lPHN}0DjdHp)~0CVv=Q1st+N)RLG7HnMV+aRRfnrDs`J!O z)N85_&plFm4WDDQ0xdxkv`cD*xxG$r$ z#o4ND$|VR+1uXaXMp9kc!st;r_v5-qqI;O zE#*n9R3Y{kuj2^xj!=U0Uq^BNstV`1M&hWmxA9YBnD~lVB|4;GxR*QV_jS6m?|X59{y?CDD4VFDZBZ$*$i4_7 z`yyqLq6iczMYb2Q$RdlpP@sxMEL6c41nKXVYOQ$A@4SEg{xUg9p84K2_ssLjeV$(3 zbFzB(>Jd#51kv}|=x1qS2)0@tK6>Ml_gV_r_UTGfUwW+V@*|pCc!?uet0U{k0r)w9 z*zY$TUj%W-?~Y#{R`LipIEOES2qJ^X8CaP?6tm^{YEmd%m-4F@XA$)xLG&m4lT8Xj zmuQ3tqMR)MUBOL>JC-Kp&f^gpm5BjQDj}YhN^)bR$4AH?M)R}A2!nUU>`0}v+U0n1 z24#KeGpB7z-jrxhxEB`}cRaQ<_VZXZZb@9Hcq(CP!n+CA;z!4|k69CSB;szX{LqNt zf1|Nb{SmHJIfu&@lrswJZP(J54g4xp`Q2`WM( z(LmG%WuOEUfm{fo-{kM*)AD|Ki@ZplD0i0~a-DQg+9a)#)=S%^&!m4z=cRhdD0h-) z%h%;jXeSC##wZ(<{Yr&Ws!UaSD;DK4`VhU2`k}T+kFLtwGj z!9t0!R@f%2!)=BL34$ox;7{;z4((|0ix96wuyZM{ECPd>obP#+(m;i-peg|K|Kg%ca7XCNx zDtC}u!@bV+=0Z6??kcQ;$KcoSCWKrNm&$eIy5cK`%i?mm?%ZJRWo{<-0kpp94E%|`%znx4XZNuC*ss_+ zR)I-y5G;Zpz)$g*HSjJZIEs4+YvB?2J}iLokb~E8i*j}YJBuC3=CXmT%9_~}_BE^q z!Le{7JOq!!!>}BF0(ZlckmNeyd69e`zmBivLxf?%2H{)5U!Sb+r0=MY(@Xku!eSv0 zuYq2m1P0$Ffflagl^w~O`Ga`f`r)@7#1-TBJBZix9A42fZXq|G>&7{_f5T!Z!MEA; zd;7!AJ@!8zy|VJ%CW~sMLgUerFccBrB;tEDQNby??{rOs2_}aS)nuWegxpQ$;?g|A zA3Q~b(1arBZs?i_GoD>WbcTgewO_Sg6HjL8^ZiZ;g#J&Zjhsc6h!xzQ3PEJBn`1~TtKNW%q@eFFAL^sbfyxIE0*v$PDv^@6TX+5&P&P`~Slsh52SEkWd zpUS1YnB>8n857?*{%pK0@nKR%>aO&d%rV*ixrcHyb7y3q$;eCVndBE&8TBCim$1)5 zyusChd%TN1b%og)Ce`KyOU$JD^KC;^#bDgc- zoYxmr6|%n7#)wT(MKO=!ZY5|*)})GrN3q`Mqu~of$)HeAt&?^1w;#3+umqah`Cl~s zVw&r}$b89?ZQE++9l6f#E{A)A`=-0zUE%KLe#_O>xjo>t?V1IepEiAGSgp-a-&4Lo zb~H_f@**ihIwB4gNpXcfO@CRKBD50D^KQ5N;dyupWEkZR}IKU>V#GFTvlS!f70VeSJMH z?+H_28|cRV@C$p6{gj=<_GcTIDa=hU5Ims2rcctR=;QQ0dJDal-b^2(AJEa@IWQmW z2A2U~;+fIRhs6Yh6t#dN>B00y`WxI@1pdGd zoWKiOgLse$I)iSY9f$-fctqFXvDVTBbS!P8RoYDR^f%OUY7(`Ox=KaTJ?IGhdp1=_ zZNdHZr{AHc(obV8n9iej(hl$jI0>B0c;;&+ja|o5uos*OKf**Qg@rH{9%bX%Nz6P@ zOutA~>8f<6bVa(|`j%>^T7nh!!BTtu_rOr7GXxkvez5?0t^83NnJ1UZNEbD z0J)HiBPWmpbeWV1ugqxhEr?=zGkHvBCXTT(kH95R4i@0`2?1ZzBj|6b^!tbM`agC* zAH8D!YfTol;_>spB}`{>*b{_tgY+i|Q}{Q+jMQHs{z{l4`PSbE)6noFVHz5qBuqoY ze@~cKJ=I~6v0GBwX7tOtk~KMNUgq$O6klfg%W11p$E8#zeUfl7&M&Sa&Xu?-Ww~!c z_WE{bI$ZAfRmXiDK5REXd$I39vN^s_G#~Ls*x}#JJTI7;78j7YnJtl zWuJwx7Fx}=Qd_uvlf7d=8^=rnR`;8mK zujSA4K#0P=`Ib;Bd?oxWsQN_xOZqDPV6m0tlA}>i*v+)Y^qwin^uDpi z5NTMd#b|fcDs{73sQT0&lp+Nv#i&7^AxF!1q~n+y^Q6(38*T|oq@QbG7gytcJIto=f50;7)U~`~v(f4Hnu9?F6@Q4)0lR zb0fGP;XC+C9|1$LkMzXf#e>ku4d*`MzQbQ%ny=@Mb1S$PIUgr-7vMU~i|#NAs_=Vu zHJi+CWf1oEXTV%g0|J;x#=-mtRDfcT0sO#0dIsH>4#Qp?LU*NK!`^>}ra&qv0Y89e zne$8+b~{VJwy*=tf?imMJ+=pXmwAuL#a{F!I0WiJ4pYh?HXnQCDt0>ChvnFv%rGW^ zIS=N5H1G{Ql)gZvQ|omZx;DBf9if{;CXrjnKDx8I2x=gePvufPwNuwe_cK{at|hON z-E~KG9jK#}4>RUAZ3p2X2p9ka958}VJhSc~AB+Qqpa|c412?!#&!aoj9=a8sPj91j zpbMUR8Tc1C26kYpEAW6;;05pnX3kSgF|&wS!K`GKGP9W?W(+fg>BD3*5sZnU@%zw> zjY(npF?|^ivjLM~9koc8N4-j?f$iXDU}Qp>aK_Bs0INYyK!I|49BrXjQhI8gu1>d# zYDaIUPt)t^AUcaWK-x(s^&H&^TmS~aPF3hiN3tJ(3_w$UWpAQBpcFktPV2?$Pgim`1{caCrCAyoYHdjHYj?G!kYjj+_3h zLlBLGX;S{!!!#0xAX@HW8VS=<`M;v1e+csrVg4b^|0`i07KfERCWnt+N;{ev(q#OV zFtN?0Cx}9hY>twi!Gt+M5{8K_qNH3Rg(f7gj(r?)%^=d)ML0?#_&@29t6$N$hiMTL z9gu7MO2n2*)V>5)w_Bc8QT(C{FIxL_0r<>*&wySGUf%KgI zZT(95Q|*C&7kin@64W=WO+-mle$1&jB9Tu%mvTS#YHHV%k%?c%I-;*cq_#GM#fKCI z-SifEQr-S8-r3r*H$Ze`I^*5zyxGA=Lw{`be7G7>9j*)iqSe%}{LtYc^McO?g#{G_ zp7FZ9!#!Kv_gtM^rA~`;fy3_D8qg`=mVJr6z5StWr|nf+woSEFTi03htrqKf%O=Yr z%X^km%U;VKY-L(X%}4#;FC5-Bd!cNB+7LuDt z7;}yJ#!1HMxP5^!!T76Tm*EvdlHnI^gVtTEQ)j5L>OG}KA=LJ2DemJXtxP+sUDB#> z{I*P+rcKhuXhXDaTBHWGOX?1FwmMNAt-hizP(M>|t6n_zSnVx*PSEnSSWVEbspaY- zb-dbFO;X*es6JBam8(jXvO}4z3{~P4UilUsL7$+FXc^9GO~x_gNHh+;i8ETIs2pdw zuA*O&K?zf0lt?8&A(RVf8=8g+&;WdnLi2E2M(KdFRlAgPO0{xQDO08?Pb*OhRIZ^4 zv=WuzY}qK>=UDUx?*DzX8Ta}nszHyC1=mVfGVmPScqdtdDsk|#QCc# zoaY*gqt1T%&-Fp#>tdB?mqy`MPWctNQob$!DqoX7mfw)O%3-om)^L8Vt=w78mtT^{ V$p3?5VUNtn_oZK?d(uzR{{nh-y8QqE diff --git a/platforms/windows/make_espeakedit.iss b/platforms/windows/make_espeakedit.iss index e460d7fd..235aa67d 100644 --- a/platforms/windows/make_espeakedit.iss +++ b/platforms/windows/make_espeakedit.iss @@ -32,18 +32,24 @@ Source: "License.txt"; DestDir: "{app}"; [Languages] Name: "en"; MessagesFile: "compiler:Default.isl" Name: "af"; MessagesFile: "compiler:Languages\Afrikaans.isl" +Name: "bg"; MessagesFile: "compiler:Languages\Bulgarian.isl" Name: "bs"; MessagesFile: "compiler:Languages\Bosnian.isl" Name: "cs"; MessagesFile: "compiler:Languages\Czech.isl" +Name: "da"; MessagesFile: "compiler:Languages\Danish.isl" Name: "de"; MessagesFile: "compiler:Languages\German.isl" Name: "el"; MessagesFile: "compiler:Languages\Greek.isl" Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl" +Name: "fa"; MessagesFile: "compiler:Languages\Farsi.isl" Name: "fi"; MessagesFile: "compiler:Languages\Finnish.isl" Name: "fr"; MessagesFile: "compiler:Languages\French.isl" +Name: "hi"; MessagesFile: "compiler:Languages\Hindi.islu" Name: "hr"; MessagesFile: "compiler:Languages\Croatian.isl" Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl" Name: "id"; MessagesFile: "compiler:Languages\Indonesian-5.1.11.isl" Name: "it"; MessagesFile: "compiler:Languages\Italian.isl" -Name: "lv"; MessagesFile: "compiler:Languages\Latvian-1-5.1.11.isl" +Name: "ka"; MessagesFile: "compiler:Languages\Georgian.islu" +Name: "lv"; MessagesFile: "compiler:Languages\Latvian.isl" +Name: "ne"; MessagesFile: "compiler:Languages\Nepali.islu" Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl" Name: "no"; MessagesFile: "compiler:Languages\Norwegian.isl" Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl" @@ -51,8 +57,8 @@ Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "ro"; MessagesFile: "compiler:Languages\Romanian.isl" Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl" Name: "sk"; MessagesFile: "compiler:Languages\Slovak.isl" -;Name: "sq"; MessagesFile: "compiler:Languages\Albanian-2-5.1.11.isl" Name: "sr"; MessagesFile: "compiler:Languages\Serbian.isl" Name: "tr"; MessagesFile: "compiler:Languages\Turkish.isl" +Name: "vi"; MessagesFile: "compiler:Languages\Vietnamese.isl" Name: "zh"; MessagesFile: "compiler:Languages\ChineseSimp-12-5.1.11.isl"