diff --git a/dictsource/en_list b/dictsource/en_list index a0c117eb..838f7c77 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -980,6 +980,7 @@ iconbar aIk0nbA@ imagine I2madZI2n impedance I2mpi:d@ns imperative I2mpEr@tIv +impi $1 imprecise I2mprIs'aIs inappropriate ,Ina2proUpri@t incense Ins'Ens $verb @@ -1461,6 +1462,7 @@ rearm ri:'A@m rebel rI2bEl $verb recall ri:kO:l recall $2 $verb +recalled rI2kO:ld recess ri:sEs recipe rEsIpi: reciprocal rI2sIpr@k@L @@ -1558,7 +1560,6 @@ saline seIlaIn san ,san sardine $2 satan seIt@n -satellite sat@laIt saucepan sO:sp@n saudi saUdI2 says sEz @@ -1906,6 +1907,7 @@ Cheadle tSi:d@L Cheshire tSES3 Chiswick tSIzIk Dolgellau d0lg'EClaI +Dover doUv3 Dumfries dVmfr'i:s Dyfed d'VvId Edinburgh EdInb%Vr@ @@ -2436,6 +2438,7 @@ might ,maIt $verbf $strend2 $only (might have to) ,maIth'avt@5 $verbf $atend have %hav $pastf $only +haves havz (have been) %hav%bIn $pastf (have to) havtU $atend has %ha2z $pastf $only diff --git a/dictsource/en_rules b/dictsource/en_rules index 48ad09e9..7622d859 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -967,6 +967,7 @@ _it_separ) ate (_ @t par) ates (_ eIt|s @) ated (++_ eItId + _s) atel (l at@ @) ati (_ 'A:tI at (im_ 'eIt @) ating (++_ eItIN @@ -2603,6 +2604,7 @@ ise (_ aIz iser (_ aIz3 @) ism (_$3de Iz@m + an) ism (_$3d Iz@m @iB) ism (_$3d Iz@m is (er+_ aIz iz (er_ aIz @@ -3682,6 +3684,7 @@ ch) or (d O@ l) or (d O@ _m) or O@ + _m) orr 0r _m) ore o@ nd) or (_ 3 nt) or (_ o@ @@ -5040,8 +5043,8 @@ 'll (_$3 @L -.group 0xce -// $group (++ _^_EL +.group 0xce // Greek letters +// 0xce is the first byte of the utf-8 code for these characters α 'alf@_ ά 'alf@_ @@ -5063,8 +5066,7 @@ ξ ks'aI_ ο oUm'aIkr0n_ -.group 0xcf -// $group (++ _^_EL +.group 0xcf // Greek letters π p'aI_ ρ r'oU_ diff --git a/dictsource/hr_rules b/dictsource/hr_rules index a1a2bd7b..269b5355 100644 --- a/dictsource/hr_rules +++ b/dictsource/hr_rules @@ -123,6 +123,11 @@ ó o: ú u: + ä _^_DE // use German voice + ö _^_DE + ü _^_DE + ß _^_DE + $ dol&r . totSk& @@ -143,3 +148,42 @@ = (== =) = (= ==) = (_ _:: + +.group 0xce // Greek letters + + α alf&_ + ά alf&_||tonos + β b'et&_ + γ g&m&_ + δ delt&_ + ε Epsilon + έ Epsilon||tonos + ζ zet&_ + η et&_ + ή et&_||tonos + θ txet&_ + ι jot&_ + ί jot&_||tonos + κ k&p&_ + λ l&md&_ + μ mi_ + ν ni_ + ξ k_si_ + ο omi_k@-*on_ + +.group 0xcf // Greek letters + + π pi_ + ρ @-*o_ + σ sigm&_ + ς grtSko_||z&vrS@no_||sigm&_ + τ t&U_ + υ grtSki_||IpsIlon_ + ύ grtSki||IpsIlon_||tonos + φ fi_ + χ h_i + ψ pss'I + ω omeg&_ + ώ omeg&_||tonos + ό omi_k@-*on_||tonos + diff --git a/dictsource/pt_list b/dictsource/pt_list index 5ce9a12f..ab80e73e 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -1,4 +1,4 @@ - + // This file in UTF8 encoded // Options @@ -93,32 +93,32 @@ _¿ ,iNtex,ogas,&U~,iNvertS'id& _5 s'iNku ?1_6 s'eIS ?2_6 s'eIs -?1_7 s'Et +?1_7 s'Ety ?2_7 s'EtSi _8 'oItu -?1_9 n'Ov +?1_9 n'Ovy ?2_9 n'Ovi ?1_10 d'ES ?2_10 d'Ez -?1_11 'oNz +?1_11 'oNzy ?2_11 'oNzi -?1_12 d'oz +?1_12 d'ozy ?2_12 d'ozi -?1_13 t:r'ez +?1_13 t:r'ezy ?2_13 t@-*'ezi -?1_14 k&t'Orz +?1_14 k&t'orzy ?2_14 kat'Orzi -?1_15 k'iNz +?1_15 k'iNzy ?2_15 k'iNzi ?1_16 dyz&s'eiS ?2_16 d,ezes'eIs -?1_17 dyz&s'Et +?1_17 dyz&s'Ety ?2_17 d,ezes'EtSi ?1_18 dyz'Oitu ?2_18 dez'oItu -?1_19 dyz&n'Ov +?1_19 dyz&n'Ovy ?2_19 dezen'Ovi -?1_2X v'iNt +?1_2X v'iNty ?2_2X v'iNtSi ?1_3X tr'iNt& ?2_3X t@-*'iNt& @@ -130,7 +130,8 @@ _5X siNkw'eINt& ?1_7X syt'eINt& ?2_7X set'eINt& _8X oIt'eINt& -_9X nov'eINt& +?1 _9X nuv'eINt& +?2 _9X nov'eINt& _1C0 s'eIN ?1_0C s'eINtuS ?2_0C s'eINtuz @@ -163,25 +164,42 @@ _0Z3 mil'Ezim& // 1000ths // ABBREVIATIONS //************** +aapp $abbrev abadv $abbrev +abc $abbrev a.c 'as'e adsl $abbrev +ae $abbrev +aids $abbrev apedv $abbrev -?1 apedv ,a,pe,,E,de've +avc $abbrev bios b'i,OS d.c d,es'e +cne $abbrev cpu $abbrev -//?1 cpu ,se,pe'u -?1 cpuc ,se,pe,u'se +cpuc $abbrev +dpoc $abbrev +ecg $abbrev edp $abbrev ?1 etc ,ets'Et:r& ?2 etc ,ets'Ete*& -?2 (http ://) ag,atete'pe_ +hiv $abbrev +(http ://) ag,atete'pe_ +icc $abbrev +IEEE $abbrev // Institute of Electrical and Electronics Engineers +iss $abbrev +jpeg Z,Ot&p'Eg +mpeg ,Emp'Eg +nba $abbrev nvda $abbrev +oms $abbrev +omt $abbrev +osi $abbrev +?1 sa ,Esj'a +?1 sos ,Esj,O'Es +ue $abbrev unts $abbrev -unts $abbrev -?1 usb ,u,Esy'be -?2 usb $abbrev +usb $abbrev // articles @@ -539,66 +557,114 @@ era 'Er& abacaxi abakaSi axé aSE elixir eliSir -?1 fixe fiSe +?1 fixe f'iSy lixo l'iSu roxo x'oSu // foreign words ?1 alt 'alt ?1 bacalhau b,&k&lj'aU -?1 caps k'aps - ctrl k'oNt:r,Ol -?1 delete dil'i:t -?1 design diz'aIn -?1 down d'aUn -?1 download d'aUnloUd +?1 back _^_EN +?1 blind _^_EN +?1 braille b:r'aily +?1 cancel _^_EN +?1 caps _^_EN +?1 ctrl k'oNt:r,Ol +?2 ctrl k'oNt:r,OU +?1 delete _^_EN +?1 design _^_EN +?1 down _^_EN +?1 download _^_EN +?1 end _^_EN ?1 escape Sk'eIpy -?1 eyes w'aIz +?1 eyes _^_EN +?1 gmail g,em'eIl ?1 google g'u:g&l -hardware h'ardwe@ -?1 kernel k'ErnEl +?1 hardware _^_EN +?2hardware h'ardwe@ +?1 home _^_EN +?1 hotmail _^_EN +?1 install _^_EN +?1 kernel k'Ern,El ?2 kernel k'ErnEU -?1 line l'aIn +?1 line _^_EN layout l'eI,aUt ?1 lock _^_EN -?1 mail meIl +?1 mail _^_EN ?2 mail m'eja -?1 menu mEnU +?1 menu menu +?1 next _^_EN ok Ok'eI ?1 pause p'au:z -?1 page p'eIdZ +?1 page _^_EN +?1 scanner _^_EN +?1 shift S'ift ?1 scroll _^_EN site s'aIt software s'Oftwe@ -?1 up _^_EN -?1 upload _^_EN +?1 space _^_EN +?1 sporting sp'Ort,ing +?1 tab t'ab +?1 up _^_EN +?1 upload _^_EN ?1 window _^_EN -?1 yes j'Es +?1 yahoo _^_EN +?1 yes _^_EN // common person names alan 'al@n +louis _^_FR // foreign product names -?1 access 'aksEs -debian d'Ebj&~N +?1 access _^_EN +?1 adobe &d'Oby +?1 debian _^_EN +?2 debian d'Ebj&~N +?1 excel _^_EN +?1 express _^_EN espeak isp'i:k espeakedit isp'i:k,Ed,it -firefox f'ai@foks -?1 hal hal +?1 fedora _^_EN +?1 firefox _^_EN +?2 firefox f'ai@foks +?1 front _^_EN +?1 hal _^_EN ?1 jaws dZ'au:z ?1 linux l,in'uks ?2 linux l'inuks +?1 live _^_EN +?1 maker _^_EN +?1 media _^_EN +?1 messenger _^_EN +?1 microsoft m,ik:r'os,Oft +?1 movie _^_EN +?1 nero n'E:ru +?1 office _^_EN openoffice 'opeIN|'Ofis +?1 outlook _^_EN +?1 paint p'aint +?1 player _^_EN +?1 point _^_EN +?1 power _^_EN +?1 product _^_EN +?1 Publisher _^_EN ?1 reader _^_EN +?1 setup _^_EN +?1 scout _^_EN // Nero Scout +?1 skype _^_EN slackware sl'akwe@ +?1 smart _^_EN // nero StartSmart speak spi:k suse z'u:ts@ +?1 start _^_EN // nero StartSmart +?1 time _^_EN // nero show time ubuntu ub'untu ?1 unix ,u:n'iks ?2 unix j'u:niks ?1 windows _^_EN +?1 WinRAR _^_EN @@ -650,3 +716,4 @@ vogel f'o:g@l volkmann f'Olkman + diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 0ce44a3c..52424461 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -1,4 +1,4 @@ -// translation rules Brazilian +// translation rules Brazilian // This file is UTF-8 encoded // Options @@ -161,17 +161,17 @@ ?1 C) ecç 'E's // eg: selecção, etc... ?1 C) e (ã i // leão, panteão, etc. ?1 C) e (a i // oceano, etc. -?1 _C) e (CACA y //definições. -?1 _C) e (CCACAr y // desligar. -?1 C) e (CCAC y // eg: deslocamento, etc... -?1 _C) e (CKAr y // fechar -?1 _C) e (CCACAr y // terminar. -?1 _C) e (CACC y // recicla, reciclagem, etc... -?1 _f) e (rrament y // ferramenta, ferramentas. +?1 _d) e (fini y //definições. +?1 _d) e (slig y // desligar. +?1 _d) e (sloc y // eg: deslocamento, etc... +?1 _f) e (ch y // fechar +?1 _t) e (rmin y // terminar. +?1 _r) e (cicl y // recicla, reciclagem, etc... +?1 _f) e (rramenta y // ferramenta, ferramentas. +?1 _p) e (squ y // pesquisar ?1 hip) e (r ,E // eg: hiper ?1 sup) e (r ,E // super -?1 int) e (rC 'E // Interno -?1 int) e (rr E // eg: Enterra +?1 int) e (rn ,E // Interno ?1 n) e (t ,E // eg: net ?1 e (l_ ,E // eg: possível, manuel, etc... @@ -218,11 +218,11 @@ gu (Y g ?1 guen (C gw'eIN // aguenta, etc. ?1 n) gu (A gw // eg: língua, etc. +?1 gu (ém_ g // eg: alguém, ninguém, etc... .group h -?1 _) h (_ &g'a -?2 _) h (_ ag'a + _) h (_ ag'a h // silent @@ -319,7 +319,7 @@ n n n (n nh n^ -?1 A) nn n //drop “n” in European Portuguese (eg: connosco). +?1 A) nn n //drop “n” (eg: connosco). .group o @@ -341,11 +341,10 @@ ?2 ol (K Ow ?2 olh olj -?1 om (_ 'om -?2 om (_ oN + om (_ oN o (ma_ o -?1 om (C 'om -?2 om (C om + + om (C om on (K oN o (na_ o onh on^ @@ -409,7 +408,7 @@ ?1 A) que (nA_ ke // pequeno, etc. ?1 C) quê (_ ke // porquê, etc. ?1 que (l ke // aquele, etc. -?1 que (r_ ke // qualquer, etc. +?1 que (r_ kE // qualquer, etc. ?1 qui ki // quinta, esquilo, etc. ?1 _) quind kuind // quindecágono, etc. ?1 tran) qui kui // tranquilo, etc. @@ -606,3 +605,4 @@ + diff --git a/dictsource/ru_rules b/dictsource/ru_rules index 1fb01063..f6f430f3 100755 --- a/dictsource/ru_rules +++ b/dictsource/ru_rules @@ -285,7 +285,7 @@ .group л _) л (_ El^ - л (_ l^ +// л (_ l^ // rule removed л (Y l^ л l diff --git a/dictsource/sv_rules b/dictsource/sv_rules index bf9a6c8c..ed2ecda1 100755 --- a/dictsource/sv_rules +++ b/dictsource/sv_rules @@ -8,53 +8,65 @@ a (vb A: a (vd A: a (va a - a (rt_ A: + a (rt_ A: + a (vg A: a (r_ a - a (r_ a - b) a (r_ A: - bb) a (r_ a + p)a (d_ a + b) a (r_ A: + bb) a (r_ a a (CC a a (_ a &) a (_ a2 - a (re_ a - a (rn A: - a (rna a - l) a (rs A: + a (re_ a + a (rn A: + a (rna a + l) a (rs A: k) a (ta ,a - m) a (j a - om) a (t A: - st) a (rt A: - gr) a (m a - a (x a - p) a (nel a - k) a (n a - j) a (n a - r) a (de a - eg) a (n a - er) a (d a - er) a (t a - d) a (n_ a + m) a (j a + om) a (t A: + _m) a (ter a + st) a (rt A: + gr) a (m a + a (x a + p) a (nel a + a (uto a + k) a (n a + n) a (d a + j) a (n a + r) a (de a + eg) a (n a + er) a (d a + er) a (t a + d) a (n_ a + st) a (t_ a tot) a (l 'A: - v) a (ld A: - v) a (rd A: - sm) a (rt A: - r) a (t A: - s) a (maC a - ng) a (d a - m) a (n a - t) a (t A: - ent) a (r A: - a (t_ a - a (st a - s) a (s_ a - s) a (d_ a - er) a (t_ a - åg) a (n a - t) a (n_ a - el) a (d a - nn) a (n a - mell) a (n a - arbet arbe:t + v) a (ld A: + v) a (rd A: + sm) a (rt A: + r) a (t A: + s) a (maC a + ng) a (d a + m) a (n a + t) a (t A: + ent) a (r A: + a (t_ a + ast ast + s) a (s_ a + s) a (d_ a + er) a (t_ a + åg) a (n a + t) a (n_ a + el) a (d a + nn) a (n a + mell) a (n a + _sk) a (d A: + ansv) a (r A: + ll) a (de a + _v) a (nl A: + d) a (d_ a + tt) a (C_ a + dd) a (C_ a + arbet arbe:t .group b b b @@ -78,7 +90,11 @@ .group d d d d (d - dagen dA:gEn + dagen dA:gEn + disken dIskEn + djup j'u-p + djur j'u-r + dum d8m .group e e e: @@ -91,7 +107,9 @@ d) e (lv e: d) e (ln e: d) e (lt e: - + d) e (bat E + s) e (kund E + ch) e (f E: e (ta E e (x E &) e (_ E @@ -113,6 +131,9 @@ nyh) e (t e: r) e (sul E r) e (sur E + r) e (dak E + v) e (ta e: + r) e (ta e: pr) e (n E _) e (tik E r) e (ce E @@ -140,6 +161,7 @@ espeak _^_EN h h h (h hj j + hög hY:g heading _^_EN .group i @@ -172,9 +194,9 @@ espeak _^_EN _) k (ö S; k (öp S; karta kA:rta - kategori katEg,u:ri: - kalend kal'End - känsl SEnsl + kategori katEg,u:ri: + kalend kal'End + känsl S;Ensl .group l l l @@ -185,12 +207,17 @@ espeak _^_EN .group m m m m (m - menu _^_EN - människ m'EnIsx, - medlem m'e:dlEm - maga maga + menu _^_EN + människ m'EnIsx, + medlem m'e:dlEm + maga maga + meny mEn'y: + minimera mIni:m'e:ra2 + maximera maksi:m'e:ra2 motor m'u:tOr motorer m'Otu:rEr + model mOd'El + musik mu-s'i:k .group n n n @@ -198,7 +225,8 @@ espeak _^_EN ng N n (k N network _^_EN - normal nOrmA:l + normal nOrmA:l + natur n'at'u-r .group o o u: @@ -229,11 +257,14 @@ espeak _^_EN och 'Ok k) o (ns O pr) o (cent O + p) o (lis O + p) o (pu O .group p p p p (p paket pak'e:t + parentes par@nt,e:s .group q q k @@ -295,6 +326,7 @@ espeak _^_EN u (n 8 u (tl u- r) u (m_ 8: + utmärk 'u-tm@rk .group v v v @@ -322,7 +354,8 @@ espeak _^_EN å o: å (CC O tr) å (d 'o: - v) å (rt 'o: + v) å (r 'o: + h) å (r 'o: .group ä ä E: diff --git a/phsource/compile_report b/phsource/compile_report index 605da61b..14e8e042 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -20,7 +20,7 @@ pl 17 102 sk 22 117 cs 6 118 - hr 15 121 + hr 16 121 ru 36 119 it 28 111 es 7 111 @@ -460,7 +460,7 @@ 1 vowel/oe_4 sv 2 vowel/o_mid hu ro 8 vowel/oo en_sc de eo es el sv no zh_yue - 10 vowel/oo_1 en_n en_rp en_wm af fi sk vi + 11 vowel/oo_1 en_n en_rp en_wm af fi sk hr vi 3 vowel/oo_2 en_sc cy cs 1 vowel/oo_3 af 2 vowel/oo_4 hi pl diff --git a/phsource/mbrola/in1 b/phsource/mbrola/in1 index 9d150738..d7568aef 100644 --- a/phsource/mbrola/in1 +++ b/phsource/mbrola/in1 @@ -46,4 +46,6 @@ 0 n^ NULL 0 N 0 j NULL 0 y 0 S NULL 0 sh +0 s. NULL 0 sh + diff --git a/phsource/mbrola/sv b/phsource/mbrola/sv index 8dbf6718..ddf2092f 100644 --- a/phsource/mbrola/sv +++ b/phsource/mbrola/sv @@ -19,6 +19,7 @@ 0 S; NULL 0 C 0 sx NULL 0 S 0 S NULL 0 rs +0 s. NULL 0 rs 0 u- NULL 0 }: 0 Y: NULL 0 2: 0 y NULL 0 Y diff --git a/phsource/ph_croatian b/phsource/ph_croatian index 1b32fdfd..c61048ec 100644 --- a/phsource/ph_croatian +++ b/phsource/ph_croatian @@ -13,7 +13,7 @@ endphoneme phoneme a vowel starttype (a) endtype (a) - length 140 + length 150 formants vowel/a reduceto & 4 endphoneme @@ -35,14 +35,14 @@ endphoneme phoneme E vowel starttype (e) endtype (e) - length 130 + length 140 formants vowel/e_mid endphoneme phoneme e vowel starttype (e) endtype (e) - length 130 + length 140 formants vowel/e endphoneme @@ -64,6 +64,13 @@ phoneme I endphoneme +phoneme o + vowel starttype (o) endtype (o) + length 140 + formants vowel/oo_1 +endphoneme + + phoneme u vowel starttype (u) endtype (u) length 130 diff --git a/phsource/ph_czech b/phsource/ph_czech index f545b5bd..20ebfb06 100644 --- a/phsource/ph_czech +++ b/phsource/ph_czech @@ -1,6 +1,6 @@ phoneme e vowel starttype (e) endtype (e) - length 130 + length 120 formants vowel/e_mid endphoneme @@ -12,7 +12,7 @@ endphoneme phoneme o vowel starttype (o) endtype (o) - length 130 + length 120 formants vowel/oo_2 endphoneme diff --git a/phsource/ph_slovak b/phsource/ph_slovak index 47ec700f..d25e10d2 100644 --- a/phsource/ph_slovak +++ b/phsource/ph_slovak @@ -1,39 +1,39 @@ phoneme i vowel starttype (i) endtype (i) - length 120 + length 110 formants vowel/ii_3 linkout ; endphoneme phoneme i: vowel starttype (i) endtype (i) - length 230 + length 260 formants vowel/i_3 linkout ; endphoneme phoneme & vowel starttype (e) endtype (e) - length 130 + length 120 formants vowel/ee_6 endphoneme phoneme e vowel starttype (e) endtype (e) - length 130 + length 120 formants vowel/e_mid2 endphoneme phoneme e: vowel starttype (e) endtype (e) - length 280 + length 290 formants vowel/e_mid endphoneme phoneme a vowel starttype (a) endtype (a) - length 140 + length 120 formants vowel/a endphoneme @@ -45,19 +45,19 @@ endphoneme phoneme o vowel starttype (o) endtype (o) - length 130 + length 120 formants vowel/oo_1 endphoneme phoneme o: vowel starttype (o) endtype (o) - length 280 + length 290 formants vowel/oo_1 endphoneme phoneme u vowel starttype (u) endtype (u) - length 130 + length 110 formants vowel/u_2 endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 75341000..2aedc0fe 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1174,7 +1174,6 @@ include ph_swedish phonemetable no base include ph_norwegian - phonemetable vi base include ph_vi diff --git a/phsource/vdiph/ai_7 b/phsource/vdiph/ai_7 index 1e72614f..d1abbfa3 100644 Binary files a/phsource/vdiph/ai_7 and b/phsource/vdiph/ai_7 differ diff --git a/phsource/vdiph/ei b/phsource/vdiph/ei index 6154eb5d..be336aaa 100644 Binary files a/phsource/vdiph/ei and b/phsource/vdiph/ei differ diff --git a/phsource/vdiph/vowelchart.png b/phsource/vdiph/vowelchart.png index 26872318..c877daf4 100644 Binary files a/phsource/vdiph/vowelchart.png and b/phsource/vdiph/vowelchart.png differ diff --git a/phsource/vdiph2/vowelchart.png b/phsource/vdiph2/vowelchart.png index ed4cf49d..3efca2f5 100644 Binary files a/phsource/vdiph2/vowelchart.png and b/phsource/vdiph2/vowelchart.png differ diff --git a/phsource/vowel/e_e b/phsource/vowel/e_e index 720998fc..cefc0b41 100644 Binary files a/phsource/vowel/e_e and b/phsource/vowel/e_e differ diff --git a/phsource/vowel/vowelchart.png b/phsource/vowel/vowelchart.png index f1eaed5e..fff04e87 100644 Binary files a/phsource/vowel/vowelchart.png and b/phsource/vowel/vowelchart.png differ diff --git a/phsource/vowelcharts/en b/phsource/vowelcharts/en index cfc0a25d..a5fbdf0c 100644 --- a/phsource/vowelcharts/en +++ b/phsource/vowelcharts/en @@ -41,7 +41,7 @@ IR 544 1340 2460 616 1190 2450 VR 648 1180 2595 640 1140 2460 A~ 640 1120 2640 640 1120 2640 E~ 672 1660 2624 672 1660 2624 -O~ 512 880 2624 512 880 2620 +O~ 480 839 2760 480 839 2780 W~ 694 1360 2624 694 1360 2624 y: 280 1720 2340 280 1720 2340 Y: 448 1520 2420 463 1520 2400 diff --git a/phsource/vowelcharts/en.png b/phsource/vowelcharts/en.png index ea4833c9..935ec068 100644 Binary files a/phsource/vowelcharts/en.png and b/phsource/vowelcharts/en.png differ diff --git a/phsource/vowelcharts/en_n b/phsource/vowelcharts/en_n index a79c00e6..4af8b49d 100644 --- a/phsource/vowelcharts/en_n +++ b/phsource/vowelcharts/en_n @@ -41,7 +41,7 @@ IR 544 1340 2460 616 1190 2450 VR 648 1180 2595 640 1140 2460 A~ 640 1120 2640 640 1120 2640 E~ 672 1660 2624 672 1660 2624 -O~ 512 880 2624 512 880 2620 +O~ 480 839 2760 480 839 2780 W~ 694 1360 2624 694 1360 2624 y: 280 1720 2340 280 1720 2340 Y: 448 1520 2420 463 1520 2400 diff --git a/phsource/vowelcharts/en_n.png b/phsource/vowelcharts/en_n.png index 40e04f76..93203725 100644 Binary files a/phsource/vowelcharts/en_n.png and b/phsource/vowelcharts/en_n.png differ diff --git a/phsource/vowelcharts/en_rp b/phsource/vowelcharts/en_rp index e4395046..9b0931d5 100644 --- a/phsource/vowelcharts/en_rp +++ b/phsource/vowelcharts/en_rp @@ -41,7 +41,7 @@ IR 544 1340 2460 616 1190 2450 VR 648 1180 2595 640 1140 2460 A~ 640 1120 2640 640 1120 2640 E~ 672 1660 2624 672 1660 2624 -O~ 512 880 2624 512 880 2620 +O~ 480 839 2760 480 839 2780 W~ 694 1360 2624 694 1360 2624 y: 280 1720 2340 280 1720 2340 Y: 448 1520 2420 463 1520 2400 diff --git a/phsource/vowelcharts/en_rp.png b/phsource/vowelcharts/en_rp.png index cf20bf77..f9259895 100644 Binary files a/phsource/vowelcharts/en_rp.png and b/phsource/vowelcharts/en_rp.png differ diff --git a/phsource/vowelcharts/en_sc b/phsource/vowelcharts/en_sc index c7a1577a..37b71435 100644 --- a/phsource/vowelcharts/en_sc +++ b/phsource/vowelcharts/en_sc @@ -11,7 +11,7 @@ U 407 1500 2160 392 1500 2160 a 784 1180 2680 768 1220 2680 a2 760 1420 2600 736 1380 2540 aa 784 1180 2680 768 1220 2680 -E 518 1882 2540 581 1810 2540 +E 518 1920 2540 581 1810 2540 I 504 1700 2560 504 1700 2560 i 520 2000 2540 520 2000 2540 0 566 890 2641 566 890 2641 @@ -41,7 +41,7 @@ IR 544 1340 2460 616 1190 2450 VR 648 1180 2595 640 1140 2460 A~ 640 1120 2640 640 1120 2640 E~ 672 1660 2624 672 1660 2624 -O~ 512 880 2624 512 880 2620 +O~ 480 839 2760 480 839 2780 W~ 694 1360 2624 694 1360 2624 y: 280 1720 2340 280 1720 2340 Y: 448 1520 2420 463 1520 2400 diff --git a/phsource/vowelcharts/en_sc.png b/phsource/vowelcharts/en_sc.png index 0f7b07c6..485bcd46 100644 Binary files a/phsource/vowelcharts/en_sc.png and b/phsource/vowelcharts/en_sc.png differ diff --git a/phsource/vowelcharts/en_us b/phsource/vowelcharts/en_us index 3d3797d9..e70414d6 100644 --- a/phsource/vowelcharts/en_us +++ b/phsource/vowelcharts/en_us @@ -41,7 +41,7 @@ IR 544 1340 2460 616 1190 2450 VR 648 1180 2595 640 1140 2460 A~ 640 1120 2640 640 1120 2640 E~ 672 1660 2624 672 1660 2624 -O~ 512 880 2624 512 880 2620 +O~ 480 839 2760 480 839 2780 W~ 694 1360 2624 694 1360 2624 y: 280 1720 2340 280 1720 2340 Y: 448 1520 2420 463 1520 2400 diff --git a/phsource/vowelcharts/en_us.png b/phsource/vowelcharts/en_us.png index 330b82ab..acec1800 100644 Binary files a/phsource/vowelcharts/en_us.png and b/phsource/vowelcharts/en_us.png differ diff --git a/phsource/vowelcharts/en_wm b/phsource/vowelcharts/en_wm index c5a3df4b..f9fff599 100644 --- a/phsource/vowelcharts/en_wm +++ b/phsource/vowelcharts/en_wm @@ -41,7 +41,7 @@ IR 544 1340 2460 616 1190 2450 VR 648 1180 2595 640 1140 2460 A~ 640 1120 2640 640 1120 2640 E~ 672 1660 2624 672 1660 2624 -O~ 512 880 2624 512 880 2620 +O~ 480 839 2760 480 839 2780 W~ 694 1360 2624 694 1360 2624 y: 280 1720 2340 280 1720 2340 Y: 448 1520 2420 463 1520 2400 diff --git a/phsource/vowelcharts/en_wm.png b/phsource/vowelcharts/en_wm.png index 62190ec8..daaf19f3 100644 Binary files a/phsource/vowelcharts/en_wm.png and b/phsource/vowelcharts/en_wm.png differ diff --git a/phsource/vowelcharts/fi b/phsource/vowelcharts/fi index 3f8b4190..3abdcda6 100644 --- a/phsource/vowelcharts/fi +++ b/phsource/vowelcharts/fi @@ -12,8 +12,8 @@ u 320 740 2400 320 740 2400 u1 344 800 2360 344 800 2360 U 368 800 2660 368 800 2660 y 280 1720 2340 280 1720 2340 -ai 664 1040 2800 312 2240 2940 -&i 744 1540 2500 355 2222 2720 +ai 688 1064 2806 312 2300 2820 +&i 744 1540 2500 328 2280 2720 oi 545 780 2780 310 2002 2300 ei 547 1855 2536 320 2300 2740 Yi 448 1520 2420 355 2222 2720 diff --git a/phsource/vowelcharts/fi.png b/phsource/vowelcharts/fi.png index afbb5a3f..18b392fd 100644 Binary files a/phsource/vowelcharts/fi.png and b/phsource/vowelcharts/fi.png differ diff --git a/phsource/vowelcharts/fr b/phsource/vowelcharts/fr index 95764e22..5430eba8 100644 --- a/phsource/vowelcharts/fr +++ b/phsource/vowelcharts/fr @@ -4,16 +4,16 @@ a 925 1342 2700 925 1342 2700 e 464 1980 2520 464 1980 2520 E 647 1778 2530 647 1778 2530 i 280 2280 2820 200 2398 2820 -o 454 812 2559 432 824 2520 -O 670 946 2620 630 902 2700 +o 464 820 2559 440 820 2600 +O 480 800 2700 480 800 2700 u 320 860 2360 320 860 2360 y 272 1820 2280 272 1800 2260 Y 448 1520 2420 463 1520 2400 W 525 1320 2200 525 1320 2200 w^i 280 1832 2436 200 2398 2820 -A~ 640 1120 2640 640 1120 2640 +A~ 600 1060 2640 600 1060 2640 E~ 694 1360 2624 694 1360 2624 -O~ 512 880 2624 512 880 2620 +O~ 381 700 2960 381 700 2960 W~ 694 1360 2624 694 1360 2624 I 280 2280 2820 200 2398 2820 U 320 860 2360 320 860 2360 diff --git a/phsource/vowelcharts/fr.png b/phsource/vowelcharts/fr.png index 633d3806..998d2bb5 100644 Binary files a/phsource/vowelcharts/fr.png and b/phsource/vowelcharts/fr.png differ diff --git a/phsource/vowelcharts/fr_ca b/phsource/vowelcharts/fr_ca index 9e79f268..c4c683f6 100644 --- a/phsource/vowelcharts/fr_ca +++ b/phsource/vowelcharts/fr_ca @@ -4,16 +4,16 @@ a 925 1342 2700 925 1342 2700 e 464 1980 2520 464 1980 2520 E 584 1820 2560 584 1820 2560 i 280 2280 2820 200 2398 2820 -o 454 812 2559 432 824 2520 -O 670 946 2620 630 902 2700 +o 464 820 2559 440 820 2600 +O 480 800 2700 480 800 2700 u 320 740 2400 320 740 2400 y 272 1820 2280 272 1800 2260 Y 448 1520 2420 463 1520 2400 W 525 1320 2200 525 1320 2200 w^i 280 1832 2436 200 2398 2820 -A~ 640 1120 2640 640 1120 2640 +A~ 600 1060 2640 600 1060 2640 E~ 672 1660 2624 672 1660 2624 -O~ 512 880 2624 512 880 2620 +O~ 381 700 2960 381 700 2960 W~ 694 1360 2624 694 1360 2624 I 384 2030 2610 384 2030 2610 U 368 880 2440 368 900 2440 diff --git a/phsource/vowelcharts/fr_ca.png b/phsource/vowelcharts/fr_ca.png index fe7cfbf6..3cb90229 100644 Binary files a/phsource/vowelcharts/fr_ca.png and b/phsource/vowelcharts/fr_ca.png differ diff --git a/phsource/vowelcharts/hi b/phsource/vowelcharts/hi index d1f6307a..c7aa2035 100644 --- a/phsource/vowelcharts/hi +++ b/phsource/vowelcharts/hi @@ -26,5 +26,5 @@ U 368 880 2440 368 900 2440 u: 320 740 2400 320 740 2400 u2: 320 860 2360 320 860 2360 l- 352 1240 3020 352 1200 3020 -aI 744 1540 2500 355 2222 2720 +aI 744 1540 2500 328 2280 2720 aU 724 1130 2760 472 780 2500 diff --git a/phsource/vowelcharts/hi.png b/phsource/vowelcharts/hi.png index 3c231f87..1044e495 100644 Binary files a/phsource/vowelcharts/hi.png and b/phsource/vowelcharts/hi.png differ diff --git a/phsource/vowelcharts/ru b/phsource/vowelcharts/ru index dc740a10..189af4dd 100644 --- a/phsource/vowelcharts/ru +++ b/phsource/vowelcharts/ru @@ -24,3 +24,4 @@ ja 485 1672 2340 795 1122 2580 V# 659 1278 2583 659 1278 2583 Y 452 1709 2460 452 1709 2460 a 925 1320 2700 896 1340 2660 +a# 658 1408 2460 658 1408 2460 diff --git a/phsource/vowelcharts/ru.png b/phsource/vowelcharts/ru.png index a0a8deef..49a2c39c 100644 Binary files a/phsource/vowelcharts/ru.png and b/phsource/vowelcharts/ru.png differ diff --git a/phsource/vowelcharts/vi b/phsource/vowelcharts/vi index 399521ec..4b64de9a 100644 --- a/phsource/vowelcharts/vi +++ b/phsource/vowelcharts/vi @@ -7,7 +7,7 @@ e 464 1980 2520 464 1980 2520 i 296 2220 2820 200 2398 2820 O 664 1000 2731 664 1020 2731 o 512 860 2648 512 860 2648 -u 392 740 2760 392 720 2760 +u 392 736 2760 392 736 2760 y 448 1520 2420 463 1520 2400 @: 686 1280 2595 686 1280 2595 aI 672 1460 2430 400 2000 2700 diff --git a/phsource/vowelcharts/vi.png b/phsource/vowelcharts/vi.png index 81b272f0..9bc320b5 100644 Binary files a/phsource/vowelcharts/vi.png and b/phsource/vowelcharts/vi.png differ diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 69316c35..40ee9398 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -876,6 +876,7 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int int final_ph; int mnem; int post_tonic; + int opt_length; unsigned char vowel_stress[N_WORD_PHONEMES/2]; char syllable_type[N_WORD_PHONEMES/2]; @@ -1143,19 +1144,20 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int tonic = langopts.unstressed_wd2; /* more than one syllable, used secondary stress as the main stress */ } + max_stress = 0; + max_stress_posn = 0; + for(v=1; v= max_stress) + { + max_stress = vowel_stress[v]; + max_stress_posn = v; + } + } + if(tonic >= 0) { /* find position of highest stress, and replace it by 'tonic' */ - max_stress = 0; - max_stress_posn = 0; - for(v=1; v= max_stress) - { - max_stress = vowel_stress[v]; - max_stress_posn = v; - } - } /* don't disturb an explicitly set stress by 'unstress-at-end' flag */ if((tonic > max_stress) || (max_stress <= 4)) @@ -1303,20 +1305,36 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int break; } - if(langopts.param[LOPT_IT_LENGTHEN] && (*p == phonLENGTHEN)) - { - // remove lengthen indicator from non-stressed syllables - if(v_stress < 4) - p++; - else - if((langopts.param[LOPT_IT_LENGTHEN]==2) && (v != (vowel_count - 2))) - p++; // LANG=Italian, remove lengthen indicator from non-penultimate syllables - } - if(vowel_stress[v] > max_stress) { max_stress = vowel_stress[v]; } + + if((*p == phonLENGTHEN) && ((opt_length = langopts.param[LOPT_IT_LENGTHEN]) != 0)) + { + // remove lengthen indicator from non-stressed syllables + int shorten=0; + + if(opt_length & 0x10) + { + // only allow lengthen indicator on the highest stress syllable in the word + if(v != max_stress_posn) + shorten = 1; + } + else + if(v_stress < 4) + { + // only allow lengthen indicator if stress >= 4. + shorten = 1; + } + + if(((opt_length & 0xf)==2) && (v != (vowel_count - 2))) + shorten = 1; // LANG=Italian, remove lengthen indicator from non-penultimate syllables + + if(shorten) + p++; + } + v++; } @@ -1553,6 +1571,7 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec int letter_group; int distance_right; int distance_left; + int lg_pts; MatchRecord match; static MatchRecord best; @@ -1682,7 +1701,10 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec letter_group = *rule++ - 'A'; if(IsLetter(letter_w,letter_group)) { - match.points += (20-distance_right); + lg_pts = 20; + if(letter_group==2) + lg_pts = 19; // fewer points for C, general consonant + match.points += (lg_pts-distance_right); post_ptr += letter_xbytes; } else @@ -1830,7 +1852,10 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec letter_group = *rule++ - 'A'; if(IsLetter(letter_w,letter_group)) { - match.points += (20-distance_left); + lg_pts = 20; + if(letter_group==2) + lg_pts = 19; // fewer points for C, general consonant + match.points += (lg_pts-distance_left); pre_ptr -= letter_xbytes; } else diff --git a/src/intonation.cpp b/src/intonation.cpp index e0526418..e9bbda73 100755 --- a/src/intonation.cpp +++ b/src/intonation.cpp @@ -267,7 +267,9 @@ static TONE_TABLE tone_table[N_TONE_TABLE] = { {PITCHfrise, 38,10, PITCHfrise2, 36,10, // comma, or question 20, 25, 34, 20, drops_0, 3, 3, 15, 25, 0}, - {PITCHdrop, 38, 1, PITCHdrop, 42,25, // exclamation +// {PITCHdrop, 38, 1, PITCHdrop, 42,25, // exclamation +// 20, 25, 34, 22, drops_0, 3, 3, 12, 8, 0}, + {PITCHfall, 30, 5, PITCHfall, 30, 7, // statement 20, 25, 34, 22, drops_0, 3, 3, 12, 8, 0}, diff --git a/src/synthdata.cpp b/src/synthdata.cpp index ecfab5fd..1e6e6c78 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.24.04 08.May.07"; +const char *version_string = "1.24.06 10.May.07"; const int version_phdata = 0x012201; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index f53a30bc..bb6747c2 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -241,8 +241,8 @@ Translator *SelectTranslator(const char *name) case L('h','i'): { static const char dev_consonants2[] = {0x02,0x03,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f}; - static wchar_t replace_chars_hi[11] = {0x966,0x967,0x968,0x969,0x96a,0x96b,0x96c,0x96d,0x96e,0x96f,0}; // digits 0-9 - static wchar_t replacement_chars_hi[11] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0}; + static const wchar_t replace_chars_hi[11] = {0x966,0x967,0x968,0x969,0x96a,0x96b,0x96c,0x96d,0x96e,0x96f,0}; // digits 0-9 + static const unsigned int replacement_chars_hi[11] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0}; static int stress_lengths_hi[8] = {190, 190, 210, 210, 0, 0, 230, 250}; static int stress_amps_hi[8] = {17,14, 20,20, 20,24, 24,22 }; @@ -269,8 +269,8 @@ Translator *SelectTranslator(const char *name) { static int stress_amps_hu[8] = {16,16, 20,20, 20,24, 24,22 }; static int stress_lengths_hu[8] = {180,150, 200,180, 0,0, 230,270}; - static wchar_t replace_chars_hu[] = {0xd4,0xf4,0xdb,0xfb,0}; - static wchar_t replacement_chars_hu[] = {0x150,0x151,0x170,0x171,0}; // allow o,u-circumflex for o,u-double-acute + static const wchar_t replace_chars_hu[] = {0xd4,0xf4,0xdb,0xfb,0}; + static const unsigned int replacement_chars_hu[] = {0x150,0x151,0x170,0x171,0}; // allow o,u-circumflex for o,u-double-acute tr = new Translator(); SetupTranslator(tr,stress_lengths_hu,stress_amps_hu); @@ -290,6 +290,26 @@ Translator *SelectTranslator(const char *name) } break; + case L('i','s'): // Icelandic + { + static int stress_amps_is[] = {16,16, 20,20, 20,24, 24,22 }; + static int stress_lengths_is[8] = {180,140, 200,200, 0,0, 240,260}; + static const wchar_t is_L08[] = {'c','f','h','k','p','s','t','x',0xfe,0}; // voiceless conants, including 'þ' + + tr = new Translator(); + SetupTranslator(tr,stress_lengths_is,stress_amps_is); + tr->langopts.stress_rule = 1; + tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels + + SetLetterBits(tr,4,"kpst"); // Letter group F + SetLetterBits(tr,3,"jvr"); // Letter group H + tr->letter_groups[8] = is_L08; + SetLetterVowel(tr,'y'); + tr->langopts.numbers = 0xe9; + tr->langopts.numbers2 = 0x2; + } + break; + case L('i','t'): // Italian { static int stress_lengths_it[8] = {150, 140, 180, 180, 0, 0, 270, 320}; @@ -378,8 +398,8 @@ Translator *SelectTranslator(const char *name) { static int stress_lengths_ro[8] = {170, 170, 180, 180, 0, 0, 240, 260}; static int stress_amps_ro[8] = {15,13, 18,18, 20,22, 22,22 }; - static wchar_t replace_chars_ro[5] = {0x218,0x219,0x21a,0x21b,0}; - static wchar_t replacement_chars_ro[5] = {0x15e,0x15f,0x162,0x163,0}; // replace s-comma, t-comma by s-cedilla, t-cedilla + static const wchar_t replace_chars_ro[5] = {0x218,0x219,0x21a,0x21b,0}; + static const unsigned int replacement_chars_ro[5] = {0x15e,0x15f,0x162,0x163,0}; // replace s-comma, t-comma by s-cedilla, t-cedilla tr = new Translator(); SetupTranslator(tr,stress_lengths_ro,stress_amps_ro); @@ -403,9 +423,24 @@ Translator *SelectTranslator(const char *name) case L('c','s'): // Czech case L('h','r'): // Croatian { + static const wchar_t replace_chars_hr[] = + {0x430,0x431,0x446,0x45b,0x447,0x434,0x452,0x45f, + 0x435,0x444,0x433,0x445,0x438,0x458,0x43a,0x43b, + 0x459,0x43c,0x43d,0x45a,0x43e,0x43f,0x440,0x441, + 0x448,0x442,0x443,0x432,0x437,0x436, + 0x453,0x455,0x45c,0}; // ѓ ѕ ќ + + static const unsigned int replacement_chars_hr[] = + {'a','b','c',0x107,0x10d,'d',0x111,'d'+(0x17e<<16), + 'e','f','g','h','i','j','k','l', + 'l'+('j'<<16),'m','n','n'+('j'<<16),'o','p','r','s', + 0x161,'t','u','v','z',0x17e, + 0x111,'d'+('z'<<16),0x107,0}; + static int stress_amps_sk[8] = {16,16, 20,20, 20,24, 24,22 }; - static int stress_lengths_sk[8] = {180,180, 200,180, 0,0, 220,230}; - static char *sk_voiced = "bdgjlmnrvwzaeiouy"; +// static int stress_lengths_sk[8] = {180,180, 200,200, 0,0, 210,220}; + static int stress_lengths_sk[8] = {190,190, 210,210, 0,0, 210,210}; + static char *sk_voiced = "bdgjlmnrvwzaeiouy"; tr = new Translator(); SetupTranslator(tr,stress_lengths_sk,stress_amps_sk); @@ -420,7 +455,12 @@ Translator *SelectTranslator(const char *name) tr->langopts.numbers = 0x1c0d + 0x84000; if(name2 == L('h','r')) + { tr->langopts.numbers2 = 0xa; // variant numbers before thousands,milliards + tr->langopts.replace_chars = replace_chars_hr; + tr->langopts.replacement_chars = replacement_chars_hr; + } + if(name2 == L('c','s')) tr->langopts.numbers2 = 0x8; // variant numbers before milliards @@ -835,8 +875,8 @@ Translator_Afrikaans::Translator_Afrikaans() : Translator() } -int Translator_Afrikaans::TranslateChar(char *ptr, int prev_in, int c, int next_in) -{//=============================================================================== +int Translator_Afrikaans::TranslateChar(char *ptr, int prev_in, int c, int next_in, int *insert) +{//============================================================================================= // look for 'n and replace by a special character (unicode: schwa) if(!iswalpha(prev_in)) diff --git a/src/tr_languages.h b/src/tr_languages.h index d181612d..0c57d5f5 100644 --- a/src/tr_languages.h +++ b/src/tr_languages.h @@ -51,7 +51,7 @@ class Translator_Afrikaans: public Translator public: Translator_Afrikaans(); private: - int TranslateChar(char *ptr, int prev_in, int c, int next_in); + int TranslateChar(char *ptr, int prev_in, int c, int next_in, int *insert); }; // end of class Translator_Afrikaans diff --git a/src/translate.cpp b/src/translate.cpp index ed698508..f1dc2a91 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -393,7 +393,7 @@ Translator::Translator() SetLetterBits(this,1,"bcdfgjklmnpqstvxz"); // B hard consonants, excluding h,r,w SetLetterBits(this,2,"bcdfghjklmnpqrstvwxz"); // C all consonants SetLetterBits(this,3,"hlmnr"); // H 'soft' consonants - + SetLetterBits(this,4,"cfhkpqstx"); // F voiceless consonants SetLetterBits(this,5,"bdgjlmnrvwyz"); // G voiced SetLetterBits(this,6,"eiy"); // Letter group Y, front vowels SetLetterBits(this,7,"aeiouy"); // vowels, including y @@ -1470,18 +1470,28 @@ static int EmbeddedCommand(unsigned int &source_index) -int Translator::TranslateChar(char *ptr, int prev_in, int c, int next_in) -{//====================================================================== +int Translator::TranslateChar(char *ptr, int prev_in, int c, int next_in, int *insert) +{//=================================================================================== // To allow language specific examination and replacement of characters const wchar_t *p; + unsigned int new_c; + + if(c == 0) return(0); if(langopts.replace_chars != NULL) { // there is a list of character codes to be substituted with alternative codes if((p = wcschr(langopts.replace_chars,c)) != NULL) { - return(langopts.replacement_chars[p - langopts.replace_chars]); + new_c = langopts.replacement_chars[p - langopts.replace_chars]; + if(new_c & 0xffe00000) + { + // there is a second character to be inserted + *insert = (new_c >> 16); + new_c &= 0xffff; + } + return(new_c); } } return(c); @@ -1500,6 +1510,7 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ int prev_out2; int prev_in2=0; int next_in; + int char_inserted=0; int clause_pause; int pre_pause=0; int pre_pause_add=0; @@ -1626,9 +1637,19 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ utf8_in(&prev_in,&source[source_index-1],1); // prev_in = source[source_index-1]; } prev_source_index = source_index; - source_index += utf8_in(&cc,&source[source_index],0); // cc = source[source_index++]; - c = cc; + + if(char_inserted) + { + c = char_inserted; + char_inserted = 0; + } + else + { + source_index += utf8_in(&cc,&source[source_index],0); // cc = source[source_index++]; + c = cc; + } utf8_in(&next_in,&source[source_index],0); + if((c == CTRL_EMBEDDED) || (c == ctrl_embedded)) { // start of embedded command in the text @@ -1705,7 +1726,9 @@ if((c == '/') && (langopts.testing & 2) && isdigit(next_in) && IsAlpha(prev_out) c = '\''; } - c = TranslateChar(&source[source_index],prev_in,c,next_in); // optional language specific function + c = TranslateChar(&source[source_index], prev_in,c, next_in, &char_inserted); // optional language specific function + if(char_inserted) + next_in = char_inserted; if(!IsAlpha(c) && !iswspace(c) && (c != '\'')) { diff --git a/src/translate.h b/src/translate.h index 0ceca9be..5871042a 100755 --- a/src/translate.h +++ b/src/translate.h @@ -212,6 +212,7 @@ extern const int param_defaults[N_SPEECH_PARAM]; #define N_LOPTS 12 #define LOPT_DIERESES 1 // 1=remove [:] from unstressed syllables, 2= remove from unstressed or non-penultimate syllables + // bit 4=0, if stress < 4, bit 4=1, if not the highest stress in the word #define LOPT_IT_LENGTHEN 2 // 1=german #define LOPT_PREFIXES 3 @@ -295,8 +296,8 @@ typedef struct { char tone_numbers; char ideographs; // treat as separate words int testing; // testing options: bit 1= specify stressed syllable in the form: "outdoor/2" - const wchar_t *replace_chars; // characters to be substitutes - const wchar_t *replacement_chars; // substitutes for replace_chars + const wchar_t *replace_chars; // characters to be substitutes + const unsigned int *replacement_chars; // substitutes for replace_chars } LANGUAGE_OPTIONS; @@ -392,7 +393,7 @@ protected: virtual int Unpronouncable(char *word); virtual void SetWordStress(char *output, unsigned int dictionary_flags, int tonic, int prev_stress); virtual int RemoveEnding(char *word, int end_type, char *word_copy); - virtual int TranslateChar(char *ptr, int prev_in, int c, int next_in); + virtual int TranslateChar(char *ptr, int prev_in, int c, int next_in, int *insert); virtual int TranslateNumber(char *word1, char *ph_out, unsigned int *flags, int wflags); virtual int ChangePhonemes(PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch); diff --git a/src/voices.cpp b/src/voices.cpp index aaf413eb..246ac9c5 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -48,7 +48,7 @@ MNEM_TAB genders [] = { {NULL, 0 }}; //int tone_points[10] = {250,140, 1200,110, -1,0, -1,0, -1,0}; -int tone_points[10] = {600,180, 1200,140, 2000,110, 3000,110, -1,0}; +int tone_points[10] = {600,170, 1200,135, 2000,110, 3000,110, -1,0}; // limit the rate of change for each formant number //static int formant_rate_22050[9] = {50, 104, 165, 230, 220, 220, 220, 220, 220}; // values for 22kHz sample rate