diff --git a/dictsource/an_list b/dictsource/an_list index 33ede621..65a0ee0c 100644 --- a/dictsource/an_list +++ b/dictsource/an_list @@ -1,4 +1,4 @@ -// Aragon translation rules +// Aragon translation rules // This file is UTF-8 encoded // letters @@ -182,6 +182,7 @@ $ d'olar / baRRa \ kontraBaRRa | b'aRRaBertik'al +° graUs _- gj'on ! TaRR'ar||eksklamaTj'on diff --git a/dictsource/bn_list b/dictsource/bn_list index 56852140..11a5429b 100644 --- a/dictsource/bn_list +++ b/dictsource/bn_list @@ -5,7 +5,7 @@ // Bengali numbers are changed to latin characters before translation _0 S'unjO _1 '&k -_2 duj +_2 d'uj _3 t'in _4 tS'ar _5 p'a~tS @@ -125,7 +125,7 @@ _0M1 h'ajar _0M2 l'ak# _0M3 k'ot.i _0M4 'Orbud -_dpt dOsomik +_dpt _d'Osomik_ // Single consonants @@ -133,40 +133,42 @@ _dpt dOsomik খ k#O গ gO ঘ g#O -ঙ 'uNO +ঙ 'uNO~ চ tSO ছ tShO // [h] to distinguish from [tS] জ JO ঝ J#O -ঞ 'iNO +ঞ 'iNO~ ট t.O ঠ t.#O ড d.O ঢ d.#O -ণ m'odd#ennO +ণ m,odd#en.n.'O ত tO থ t#O দ dO ধ d#O -ন d'ontennO +ন d,ontenn'O প pO ফ fO // or [p#O] ? ব bO ভ b#O ম mO য় Oj -য ontostedZ'O +য ,ontostedZ'O র rO ড় r.O ড় r.O // (d. + nukta) ঢ় hr.O ঢ় hr.O // (d#. + nukta) ল lO -শ taleboS:O -ষ mud#en:oS:O -স d'onteS:O +শ t,aleboS:'O +ষ m,ud#en:oS:'O +স d,onteS:'O হ hO -ৎ kh'Ond.otO +ৎ kh,Ond.ot'O +ক্ষ k,ojmud#en:oS:'O + // full vowels অ O @@ -176,11 +178,16 @@ _dpt dOsomik উ hrOS:o'u ঊ dirg#o'u ঋ ri -এ e -ঐ oj -ও o ঔ ow +এ e $u+ // word 'it' +ঐ oj $u+ // word 'that' +ও o $u+ $brk // 'and' +_এ e +_ঐ oj +_ও o + + // combining vowel signs া 'akar ি r'oS:ikar @@ -200,12 +207,17 @@ _dpt dOsomik ঁ tS'Ondrobindu ় b'indu -_, koma +$ d.Olar +% SOtk'Ora ++ jOg += SOman + // Punctuation । dVn.d.V - +_, koma +_? pr'oSnOtSihnO // Pronouns আমি $u // main: I diff --git a/dictsource/bn_rules b/dictsource/bn_rules index 4052adb3..66b685af 100644 --- a/dictsource/bn_rules +++ b/dictsource/bn_rules @@ -1,4 +1,4 @@ - + // This file is UTF8 encoded // letter groups: @@ -384,3 +384,5 @@ ৢ l- ৣ l- + __) - (_D bij'og + D_) - (_D bij'og diff --git a/dictsource/da_list b/dictsource/da_list index b8c481e2..9e13ce6f 100644 --- a/dictsource/da_list +++ b/dictsource/da_list @@ -54,38 +54,38 @@ _?? symbol _#9 tab _#32 blank -* 'asd&r,isg $max3 -% pRos'end $max3 -@ sn,&:bel'&: -/ sgRVsdrai $max3 -\ 'Vmvendsgr,VsdRai $max3 +* '&sd@-r,isg $max3 +% pRos'End $max3 +@ sn,&b@-l'&: +/ sgRVsdrAj $max3 +\ 'VmvEndsgr,VsdRai $max3 _, k'oma: -_; se:mi:ko:lVn +_; semiko:lVn _: k'o:lVn _. pONtOm // PN u => O -_? spWrgsmVlstajn -_! udRVbstejn -_- binnesdrai -__ b'Onsdrai +_? spWrsmOlstAjn +_! udRVbstAjn +_- bin@-sdrAi +__ b'OnsdrAi & _Vw £ pun? € euro -© kVpirajt -÷ divid'eReD||meD +© kVpirAjt +÷ divid'eRVD||mED = l'imeD # n'OmV § paragr'af × g'aNe ª feminin||Wdin'al º m'askulin||Wdin'al -® registr'Er@D||v'ar@mErk3 -¼ en||kvart -¾ trEkv'art +® registr'ErVD||v'Ar@-mErk@- +¼ en||kvArt +¾ trEkv'Art ¢ s'ent ¥ j'en: µ my ' apostr'Vf -½ en'hal +½ en'h&l + plus // numbers @@ -11132,7 +11132,7 @@ ide id'e // idea idé id'e // idea tune tun3 $capital // PB Tune lufthavn - not "tune a car" [tjune] ny ny // new -også Vs@- // also +også ?Vs@- // also idet id'e // in so far as (rub og stub) R'Ob||V||sd'Ob tre tr'E // the number 3 @@ -11140,8 +11140,8 @@ rejicere rejis'eV // PB should not be pronounced [raje] rejicerer rejis'eV // PB rejiceres rejis'eVs // PB rejicering rejis'eRiN // PB -nogle n'o:@-n // PB English: 'some' - must be pronounced like the Danish word 'nogen' -nogen n'o:@-n // PB +nogle n'o@-n // PB English: 'some' - must be pronounced like the Danish word 'nogen' +nogen n'o@-n // PB ligesom l?isVm // PB bliver blir // PB konfirmand kVnferm'&nd // PB diff --git a/dictsource/da_rules b/dictsource/da_rules index 05103726..3f891bf8 100644 --- a/dictsource/da_rules +++ b/dictsource/da_rules @@ -76,7 +76,7 @@ pl) a (nen ?& // planen // long & before de(n) - made long in ph_danish - a (de & // gade + a (de & // gade a (den & //gaden // Have = "oceans" vs. the verb have @@ -96,7 +96,7 @@ burde_h) ave & // burde have sagt past) a & // tandpastareklame r) a (CK+ A // drab, Rasmus, rask - r) a (CA+ A // drabelig, brase, gratis + r) a (CA+ A // drabelig, brase, gratis r) a (len+ ?A // gralen TEST r) a (le+ A // morale, prale r) a (dio++ A: // shortend too much by ph_danish @@ -224,6 +224,7 @@ burde_h) ave & // burde have sagt // general rule: [A] after consonant before m C) a (m+ A // ham, gamle, lam, Sam, samarbejde s) a (mL04+ & // Samoa, Samuel + met) a (+ & // metamorfose _im) a (m '& // stressed s) amurai &mur'aI // samurai c) a (mp+ & // camping @@ -388,12 +389,14 @@ gammeld) a (gs & // _t) av (_ Aw // han tav stille // general rule: [A] before r - ar (++ A: // skar, barsk + ar (K++ A: // skar, barsk + ar (Ce++ A // farten + ar (Ci++ A // farlig ar (k+ A: // marken ar (A+ AR // tarif TEST _) ar (i+ A: // arier, arisk - are (++ A:A // skare, sparepenge - aret (+ A:A@-D // advaret + are (++ A?A // skare, sparepenge + aret (+ A?A@-D // advaret ar (ne+ A // barnet ar (e+ AR // reparere, parere TEST f) are (++ A:A // fare @@ -595,7 +598,7 @@ _entusi) a (s '& // stressed - entusiast st) av (nin &v // stavning bogst) av &v // bogstavrim - not [Au] h) av (_ & // hav - problem with the noun "hav" [hAu] -iske_h) av A?u // Kaspiske hav, Karibiske Hav +iske_h) av (_ A?u // Kaspiske hav, Karibiske Hav @h) av (_ A?u // flammehav h) av (C A?u // havbund, havre københ) av (n 'Aw // @@ -673,11 +676,11 @@ ginger_) ale Ejl // _indi) a (na '& // stressed - U.S. state // stressed a in final -al in $alt words in da_list - &) al (_$p_alt+ '&l // fatal, monumental, krystalklar, regional + &) al ($p_alt+ '?&l // fatal, monumental, krystalklar, regional &) al (ist$p_alt+ &l // specialist - &) al (e_$p_alt+ ''&l // anale + &) al (e_$p_alt+ ''?&l // anale &r) al (e_$p_alt+ 'Al // liberale, morale - r) al ($p_alt++ 'Al // [A] after "r" - general, neutral, koral + r) al ($p_alt++ '?Al // [?A] after "r" - general, neutral, koral &) al (ism$p_alt+ &l' // socialisme // exception - no stress because of stressed -ion r) a (l@@+ A // centralisation NEEDS MORE WORK @@ -702,13 +705,13 @@ ginger_) ale Ejl // &) ans ($p_alt '&ns // varians // stressed a in final -at - words in da_list - &) at ($p_alt '&d // attentat - &) at (t$p_alt ''& // fregatter - only one t - &) ation ($p_alt &S''on // delegation - 2*'' because of ventil-ventilation - &r) ation ($p_alt AS'on // koncentration - &r) at ($p_alt 'At // [A] after "r" - kammerat - &r) at (i$p_alt At // [A] after "r" - demokrati - &r) at (ur$p_alt At' // [A] after "r", stressed u - littteratur + &) at ($p_alt '?&d // attentat + &) at (t$p_alt ''?& // fregatter - only one t + &) ation ($p_alt &S''?on // delegation - 2*'' because of ventil-ventilation + &r) ation ($p_alt AS'?on // koncentration + &r) at ($p_alt '?At // [A] after "r" - kammerat + &r) at (i$p_alt ?At // [A] after "r" - demokrati + &r) at (ur$p_alt ?At' // [A] after "r", stressed u - littteratur intern) atio (nal &So // clash with "internat" _oblig) atio (n &S'o // clash with "obligat" in da_list oblig) atio (n &S'o // statsobligation @@ -937,40 +940,40 @@ parmes) a (n '& // stressed // general rule: [&] after p/b/d before n L06) a (n & // tand, tante, band, spand, spade L06) a (nd ?& // bande - ban) a (n '& // banan -kontrab) ande '&nd@- // - hvord) a (n '& // stressed a in 'hvordan' - g) a (ngster+ & // + ban) a (n '?& // banan +kontrab) ande '?&nd@- // + hvord) a (n '?& // stressed a in 'hvordan' + g) a (ngster+ ?& // m) anche (t ANS'E // manchet - hin) a (n '& // stressed - hinanden - _ap) a (ch '& // apache + hin) a (n '?& // stressed - hinanden + _ap) a (ch '?& // apache pil) a (tus '& // Pontius Pilatus - L06) a (nk A // bank + L06) a (nk ?A // bank sp) a (nking &: // an (cien AN - a (ndre+ A // andre - t) a (nd & // tandrensning - _) andrea &ndr'e& // name - andrew &ndru // name - v) a (ndr A // vandre - v) a (ndrør & // - a (pote A // apotek - n) apoleon &p'oljVn // name - eng) a (ng 'A // stressed - h) a (L01 A // hank, hang, bank -restaur) ant 'AN // added stress - l) a (p+ A // slap, lap - h) a (p A // haps - l) a (pL04+ & // volapyk + a (ndre+ ?A // andre + t) a (nd ?& // tandrensning + _) andrea ?&ndr'e& // name + andrew ?&ndru // name + v) a (ndr ?A // vandre + v) a (ndrør ?& // + a (pote ?A // apotek + n) apoleon ?&p'oljVn // name + eng) a (ng '?A // stressed + h) a (L01 ?A // hank, hang, bank +restaur) ant '?AN // added stress + l) a (p+ ?A // slap, lap + h) a (p ?A // haps + l) a (pL04+ ?& // volapyk h) a (ppA ?& // happy end, happening - j) a (pp A // jappe - j) a (ps A // japser - t) a (nk A // tankstation + j) a (pp ?A // jappe + j) a (ps ?A // japser + t) a (nk ?A // tankstation mj) a (v A // kålr) a (bi 'A // kålrabi - stressed a au (++ Aw // auto, autoritet aubergin oberS'i:n // - vagin) a & // vaginaudvider + vagin) a ?& // vaginaudvider l) aurie Ori // name astron) au (t 'Aw // stressed _f) aux o // faux pas @@ -1017,11 +1020,11 @@ _dinos) aurer 'A?urV // stressed str) abads Ab'&s // stressed a, silent d disput) a (ts '& // stressed amsterd) a (m 'A // - seb) a (stian '& // PN stressed - _te) a (ter '& // stressed - byz) a (ns_ '& // stressed -_domin) a (n '& // stressed - dominans - top) a (s '& // stressed + seb) a (stian '?& // PN stressed + _te) a (ter '?& // stressed + byz) a (ns_ '?& // stressed +_domin) a (n '?& // stressed - dominans + top) a (s '?& // stressed sm) a (ck & // aw (K Aw ay (K Ej // a changed to E @@ -1047,7 +1050,7 @@ dovenl) ar (s & // &) age (re$p_alt+ &S'e@ // not for the "age" words - gagere hjertemass) age &:S@- // hjertemassage et) age (+ &:S@- // stueetage - t) aget (+ &@D // kirketaget - [@-] is too short here + t) aget (+ &:@D // kirketaget - [@-] is too short here t) age (lse &@- // tilfangetagelse foret) age & // bet) age &@- // betaget @@ -1148,14 +1151,15 @@ hospitalsv) ag (t Ag // sp) agh (ett &g' // spaghetti sp) ag (num A?u // r) ag (e+ A?u // drage, rage - C) age (++ &:j@- // bage, kage + C) age (++ &j@- // bage, kage fl) age (ne ?&j@- // flagene C) age (nK++ ?&j@- // sagen, kagen _t) age (_+ &j@- // tage _t) age (_sig & + _t) age (_imod & du_t) age (_ & - voldt) age (_ & - voldt) ager (_ Ar + voldt) age (_ & + voldt) ager (_ Ar cart) age (na &g'e: // name b) ag (efter++ &j // age (lig '&j@- // uindtagelig, behagelig - stressed @@ -1208,7 +1212,7 @@ rædselssl) age (n &j@- // rædselsslagent las) agn (e '&nj // bret) agn (e '&n; // s) agd (e+ & // sagde - tilb) ag (e '&:; // stressed a in 'tilbage' + tilb) ag (e '&; // stressed a in 'tilbage' .group al // final -ale - stressed a @@ -1443,7 +1447,7 @@ frederi) c (ia =ks // cigaret sig3r'&#t cigarett sig3r'&#t cc ks // accent - yu) cc (a k + yu) cc (a k ro) cc (o k // name pu) ccini S'ini // name rebe) cc (a =k // name @@ -1461,7 +1465,7 @@ frederi) c (ia =ks // c (æsar s // cordelia kVd'ili-& // ni) ch (ol k // Nicholas - computer kVmpj'u:tV // + computer kVmpj'utV // cha (t tj& // chatte ch (ateau S // chianti kj'&nti // @@ -1526,7 +1530,7 @@ north_) carolina k&rol'aIn& // d d - A) de (_ D@-_| // hade, lade + A) de (_ D@-_! // hade, lade a) de (@ D@- // hadefuld a) der (@ DV // skaderne ski) de (@ D@- // skidefuld @@ -1761,7 +1765,7 @@ stikor) d // exception - silent d in 'stikord' kandi) d (at 'd mi) dd (a d nø) dde (+ D@- // jordnøddesmør - nø) dder (+ DV // nødderne + nø) dder (+ DV // nødderne an) d (e // manden, anden - silent d _fan) de (me // fandeme - skip de, only this word gær) de V // silent d @@ -1867,7 +1871,8 @@ stikor) d // exception - silent d in 'stikord' arv) e (@ @- // farvestof ugl) e (@ @- // fugleskræmsel ønn) e (st @- // kønneste - av) e (@ @- // pavestolt + rn) e (ste @- // fjerneste + av) e (@ @- // pavestolt // exceptions cyk) e (lløb @- @@ -1895,7 +1900,7 @@ stikor) d // exception - silent d in 'stikord' @r) es (_ Vs // koncentreres TEST // E before n - VERY BROAD - e (nK E // end, men - ?E sounds too short in words like "endelig" + e (nK ?E // end, men, endelig C) e (nd ?E // kendelse, send e (ns e // ensrette _) e (n_ e @@ -1978,7 +1983,8 @@ _still) e (ben ='e st) ed (mo e // stedmor st) ed (sø e // stedsøm st) ed (da e // steddatter - e (dt ?e // fedtet dt => t 2 consonants: short e + st) ed (br e // stedbror, stedbroder, stedbrødre + e (dt ?e // fedtet dt => t 2 consonants: short e gaz) e (lle '?E // stressed van) e (ssa '?E // stressed ard) e (nner '?E // Ardennerne - stressed @@ -1987,7 +1993,7 @@ _still) e (ben ='e h) e (dd ?e // hedde m) e (dalje e // medalje v) e (de @- // helvedes - hv) ede eD@- // hvedebrød + hv) ede eD@- // hvedebrød tol) ed (o 'ed // toledostål val) e (ncia 'E // name mal) er V // maler @@ -2166,7 +2172,7 @@ stikir) e (nddreng '&# // m) e (di+ e // medicin rn) e (d+ ,e // derned forn) eden 'eD@-n // - an) er (@ V // anerkende + an) er (@ V // anerkende L09) e (de e // nede, nederlag mån) e (d @- // måneder arkim) e (des 'e // name @@ -2288,7 +2294,7 @@ provenc) e // Provence - skip the e _b) eg (_ aI // æbl) e (grød @- // æblegrød bobl) e @- // boblegummi - nothing to do with "bleg" - _) egen (@ ej@-n // egenrådig, egennyttig, egentlig + _) egen (@ ?ej@-n // egenrådig, egennyttig, egentlig eg (enkapital+ Aj eg (enbeskyd+ aI // egenbeskydning _r) e (sten_ &# // resten @@ -2364,6 +2370,7 @@ stoneh) enge EndZ // trap) ez 'Ets // stressed l) eague i:g // Champions League _m) e (d E // med, medgift + m) e (da e // medaljon // Words ending with e - general rule @) e (_+ @-_! // husleje, vække @@ -2376,6 +2383,8 @@ stoneh) enge EndZ // kk) e (@ @- // vækkeur TEST studi) e (@ @- // studiegruppe apach) e (@ @- // apacheleder +handsk) e @- // handskerum + bøvs) e @- // bøvsesen studi) er V // Catt) e (@ @- // skatteår ell) e @- // cellevæg @@ -2384,9 +2393,11 @@ stoneh) enge EndZ // vi) e (@ @- // vievand alv) e @- // kalvekød næs) e (@ @- // næseblod + øv) e (@ @- // prøveperiode + al) e (@ @- // malebog dans) e (@ @- // dansebal ås) e @- // dåse, gåsehud, Åse - ån) e (@ @- // låneansøgning + ån) e (@+ @- // låneansøgning, månestråle _lev) e (@++ @- // levevis arn) e (@ @- // barnebarn kam) e (ra @- // @@ -2398,8 +2409,8 @@ stoneh) enge EndZ // ørn) e (@ @- // børnebog mm) e (@ @- // dømmekraft ab) e (@ @- // abekat - - e (dere @- // torpedere + + e (dere @- // torpedere øl) e (@+ @- // køleskab aff) e (@ @- // straffeattest Alj) e (@ @- // patruljevogn @@ -2554,6 +2565,7 @@ _sakram) e (nte 'e &) ende (_++ @-n@- // troende // exceptions to the -ende rule k) end (e_+++ E-n // genkende, kende, anerkende + søsk) end (e++ @-n _erk) end (e_++ 'En // erkende k) ender (_ E-nV // genkender, kender, anerkender henv) ende (_ E-n@- // @@ -2672,52 +2684,52 @@ _offic) e (_ // office (officepakke) st) edet (_ ED@-t // værkstedet Ad) en (@ @-n // udenlandsk, udenad Ad) en (ti en // identificere - sir) ene (+ 'En@- // + sir) ene (+ '?En@- // gr) ene (+ En@- // grene rr) ed @-D // lærred, ørred rr) ed (A @-d // herredømme fingr) ene Vn@- // _st) evie ivi // name - ucc) es 'e + ucc) es '?e nog) et (_ D // noget - styr) e (n 'e // styren - diskr) e (t+ 'e // stressed - ork) ester 'estV // stressed e in 'orkester' - borgm) e (ster 'e // stressed - prot) e (se 'e // stressed - forur) e (ne 'e // stressed - forurene + styr) e (n '?e // styren + diskr) e (t+ '?e // stressed + ork) ester '?EstV // stressed e in 'orkester' + borgm) e (ster '?E // stressed + prot) e (se '?e // stressed + forur) e (ne '?e // stressed - forurene _terap) eut 'Wwd // stressed terap) eut Wwd // synsterapeut _torp) e (do 'e // stressed - _cel) e (ber 'e // stressed -_parent) e (s 'e // stressed - _kat) e (der 'e // stressed - ekst) e (rn 'E // stressed - int) e (rn+ 'E // stressed - bod) e (ga 'e // stressed -halvfj) e (rds '& // stressed - _konc) e (rn 'E // + _cel) e (ber '?e // stressed +_parent) e (s '?e // stressed + _kat) e (der '?e // stressed + ekst) e (rn '?E // stressed + int) e (rn+ '?E // stressed + bod) e (ga '?e // stressed +halvfj) e (rds '?& // stressed + _konc) e (rn '?E // merc) e (des 'e // car -vietnam) e (ser 'e // stressed - _ant) e (nne 'E // stressed - _el) e (v 'e // stressed - el) e (v e // kostelev, skoleelev +vietnam) e (ser '?e // stressed + _ant) e (nne '?E // stressed + _el) e (v '?e // stressed + el) e (v ?e // kostelev, skoleelev el) e (vat @- // elevator - sydv) e (st 'E // stressed - nordv) e (st 'E // - musk) e (t+ 'E // stressed + sydv) e (st '?E // stressed + nordv) e (st '?E // + musk) e (t+ '?E // stressed all) e (gro 'e // stressed - _id) e 'e // ide, ideen - id) ee (l e'E // ideelle, ideelt -havann) e (ser 'e // stressed - _malt) e (s 'e // malteser + _id) e '?e // ide, ideen + id) ee (l e'?E // ideelle, ideelt +havann) e (ser '?e // stressed + _malt) e (s '?e // malteser // a few words with final -es - stressed e - abc) e (s 'E + abc) e (s '?E cypr) e (s '&# - rec) e (s 'E - exc) e (s 'E - proc) e (s 'E + rec) e (s '?E + exc) e (s '?E + proc) e (s '?E k) ea (ton i: // name ompet) en (ce AN @@ -2783,7 +2795,7 @@ magdal) e (n 'e // Magdalena - name _d) e (_gaulle @- // name _d) e (_ i_! // venstr) e V // venstreorienterede - e (venty E: // eventyr + e (venty E // eventyr // plural suffix -ene @) ene (_ @-n@- // benene, pengene @@ -2799,6 +2811,8 @@ venstr) e V // venstreorienterede _hel) ene 'en@- // name at_form) ene 'en@- // + charl) ene 'i:n // name + // stressed e in nouns with final -esse in da_list &) esse ($p_alt ''?Es@- // finesse &) esse (r$p_alt ''?EsV // finesser @@ -2827,6 +2841,7 @@ at_form) ene 'en@- // rævep) el (s+ ?El // rævepels skindp) el (s+ ?El // skindpelsen + s) el (e+ el // sikkerhedssele // exceptions to the -el rule // final -el in da_list - stressed e @@ -3017,6 +3032,8 @@ verdensd) el el _ag) en (t 'en // agent fænom) en 'en // stressed _gem) en 'en // stressed + ætyl) en 'en // stressed + metyl) en 'en // stressed _form) en (e 'en // formene - stressed ag) en (t en // agent _ad) en (_ 'en // stressed @@ -3204,10 +3221,10 @@ infant) eri ($p_alt @-r''i // infanteri // NB suffix takes away the stres from "italiener/italienere" and since // it isn't possible to mark the rule "not for $alt words" -er and -ere a not suffixes any more. @) er (_N V // elsker - @) ere (_+ VV // elskere - @) eres (_ V@-Vs // elskeres - @) eren (_ V:Vn // elskeren - @) erens (_ VrVns // elskerens + @) ere (_+ V%V // elskere + @) eres (_ V%Vs // elskeres + @) eren (_ V:%Vn // elskeren + @) erens (_ Vr%Vns // elskerens @) ers (_ Vs // elskers @) erne (_++ Vn@- // elskerne @) ernes (_ Vn@-s // elskernes @@ -3221,6 +3238,8 @@ infant) eri ($p_alt @-r''i // infanteri wien) er V // wienerbrød od) er V // moderinstinkt + hyp) er (@ V // hyperaktiv + æd) er (@ V // læderindtræk sortep) er er // vigtigp) er er // beh) er (sk Er // beherske @@ -3278,7 +3297,7 @@ revolv) er (+ V // kundes) ervice Wvis // s) er (vicen W // v) ernon (++ Wn@-n // name - t) er (a+ er // synsterapeut + t) er (ap+ er // synsterapeut met) er (+ V // materantal dent) er V // studentereksamen _all) er V // allersidst @@ -3488,8 +3507,8 @@ guldgrav) er (e V // t) er (mo Er // termometer t) er (r E // terror t) er (rass a // [taˈʁɑsə] - _) er (C er' // er + consonant: stress on next syllable - er'hverv - _) er (go er // not stress on next in "ergo..." + _) er (C Er' // er + consonant: stress on next syllable - er'hverv + _) er (go Er // not stress on next in "ergo..." er (fari Er // ministererfaring _) ernie W:ni // name am) er (ika_ 'er // Amerika @@ -3780,7 +3799,7 @@ _nicol) ette 'Et@- // Nicolette _) fe (_ fe // cali) for 'fO: // Californien - @) for (@ fV: // lønforhøjelse, efterforske + @) for (C@ fV: // lønforhøjelse, efterforske // General rule, most words with af- plus vowel: [f] => [w] a) f (A w // afart, afprøve @@ -3812,6 +3831,7 @@ _nicol) ette 'Et@- // Nicolette a) ff (utage f // ra) ff (e f // straffe ra) f (le f // rafle + ka) f (ka f // name gira) f f // girafskind ra) f (fr f // straffri ra) f (for f // strafforfølge @@ -3955,7 +3975,8 @@ _nicol) ette 'Et@- // Nicolette g (rib g // ådselgribbe g (ran g // ædelgran g (ross g // ølgrossist - ø) g j // deleted (_ + ø) g (A j_! // møgunge - no link with next vowel + ø) g (C j // møgkedelig rø) g (ter g // røgterdreng sø) g (ang g // g (le j // mægler, besegle @@ -4361,6 +4382,7 @@ engelsk_st) i (l+ i // skr) i (der ?i // short i - general rule? b) i (l ?i // bil, bilen f) i (l ?i // fil, filen + f) i (le i // file v) i (dere ?i // t) i (d ?i // tid t) i (de@ i: // tidevand @@ -4384,23 +4406,24 @@ engelsk_st) i (l+ i // l) ide (_deres i l) ide (_jeres i l) ide (_vores i +_godt_l) ide i // general rule: initial in- : [e] - _) i (n+ e // instinkt, ineffektiv - i (ns e // bladinsekt, musikinstrument + _) i (n+ ?e // instinkt, ineffektiv + i (ns ?e // bladinsekt, musikinstrument ingeni (ø enS@-nj // flyingeniør - i (nter e // fritidsinteresse - h) i (n i // hinsides - i (nfant e // marineinfanteri + i (nter ?e // fritidsinteresse + h) i (n ?i // hinsides + i (nfant ?e // marineinfanteri f) i (nsky ?i // finskytte, finskydning i (nc ?e // pincet - _) insider ensaIdV // - _) inside (information ensaId // - _) i (ni i // initiativ - i (nu i // inuit - p) i (nsel i // - p) i (nsler i // - sixt) i (nsk 'i // + _) insider ?ensaIdV // + _) inside (information ?ensaId // + _) i (ni ?i // initiativ + i (nu ?i // inuit + p) i (nsel ?i // + p) i (nsler ?i // + sixt) i (nsk '?i // // general rule: [e] before double consonant L03) i (L01%+ ?e // ligge, dikke @@ -4412,46 +4435,47 @@ engelsk_st) i (l+ i // bast) ille 'ilj3 // sp) i (l e // lotterispil sp) ilop il'Vp // stressed - L09) i (L03%a+ e // middag - L02) i (pp e // svippe, vippe - L09) i (pp e // nippe, knippe, knippel, snippe - s) i (pp e // sippe + L09) i (L03%a+ ?e // middag + L02) i (pp ?e // svippe, vippe + L09) i (pp ?e // nippe, knippe, knippel, snippe + s) i (pp ?e // sippe mississ) i (ppi 'i // stressed musl) i (n_ 'i // stressed - v) i (ss e // visse - vr) i (ss e // vrisse - v) i (sh e // uvished - n) i (sse e // - pen) i (s i // penissen - vildn) i (s i // - p) i (sse e // - n) i (p e // nips, niptang + v) i (ss ?e // visse + vr) i (ss ?e // vrisse + v) i (sh ?e // uvished + n) i (sse ?e // + pen) i (s ?i // penissen + vildn) i (s ?i // + p) i (sse ?e // + n) i (p ?e // nips, niptang kn) ip (tang iw // kniptang i (kke+ ?e // ikke, sikkerhed, sikkert - ch) i (k+ i // chikke - sk) i (k+ i // skikkelse + ch) i (k+ ?i // chikke + sk) i (k+ ?i // skikkelse L06) i (lle ?e // billede, piller b) i (lle_+ ?i // insect b) i (ller_+ ?i // insect b) i (llen_+ ?i // insect - b) i (llet+ i // - traf) i (k i // juletrafikken - tekn) i (k i // salgsteknikken - but) i (k i // videobutikken + b) i (llet+ ?i // + traf) i (k ?i // juletrafikken + tekn) i (k ?i // salgsteknikken + but) i (k ?i // videobutikken // general rule: [i] after k, [e] followed by n/m - k) i (C+++ ?i // kikke, kikkert, kirke, kiosk + k) i (k ?i // kik, kikkert k) i (Ce++ i // skide -// k) i (dere++ i: - k) i (L09++ e // kind, skinke, skimme, skimte + sk) i (bet++ ?i // skibet + k) i (L09++ ?e // kind, skinke, skimme, skimte k) i (L09L11++ i // kime k) i (mning+ i // bik) i (ni ?i // sk) i (mo+ ?i // eskimo -// General rule j in "udie" +// General rule j in "udie", "olie" ud) i (e j // studie, audiens + ol) i (e j // olie // general rule: [e] between l and nt l) i (nt e // flint, klint, splint @@ -4526,20 +4550,20 @@ spirrev) i (p 'i // stressed C) i (mL06 e // simpel, vimpel sl) i (m i // slimprøve p) ibe (tøj iw // - p) i (p+ i // pipfugl - b) i (p+ i // bipper, biperson + p) i (p+ ?i // pipfugl + b) i (p+ ?i // bipper, biperson v) i (b+ i // vibrere - C) i (mC e // fims, gesims, vimse, bims, dims, bimle + C) i (mC ?e // fims, gesims, vimse, bims, dims, bimle l) i (mni+ i // limning -himstreg) i (ms 'e // stressed +himstreg) i (ms '?e // stressed sk) i (n+ ?e // skin, skinne, skinke - kn) i (p e // kniplen - Cr) i (mC e // vrimle, strimle + kn) i (p ?e // kniplen + Cr) i (mC ?e // vrimle, strimle Cr) i (mm ?e // grimme - short followed by 2 consonants pr) i (m+ i // primtal, primus - L06r) i (nt e // brint, print - kor) i (nt e // korinterne - str) i (nt e // strinte + L06r) i (nt ?e // brint, print + kor) i (nt ?e // korinterne + str) i (nt ?e // strinte s) i (dde ?e // sidde s) i (dning e // eftersidning læbest) i (ft e // @@ -4577,7 +4601,7 @@ espadr) ille 'ilj@- // l) inge (ri l&NSe // // general rule: [e] before nd/nk/ng - i (nd+ ?e // ind, find, vind + i (nd++++ ?e // ind, find, vind p) i (nkode ?e i (nde+ ?e // inde, finde, vinde er) i (ndr ?e // erindring, erindre @@ -4646,7 +4670,7 @@ _ventr) i (k 'i // ventrikel, ventrikler obel) i (sk '?i // stressed r) i (L08++ ?e // riste, frisk, brist, vrist, Kristus, dristig r) i (skage+ ?i // riskager - r) i (L08L04+ ?i // aristokrat + r) i (L08L04++ ?i // aristokrat, periskop dr) i (stig ?e // r) i (stik+ ?i // karakteristik fr) i (stad ?i // @@ -5332,8 +5356,8 @@ byzant) in '?in // byzantinsk .group it // words with final -it - stressed i &) it ($p_alt '?it // bakelit - &) it (an$p_alt it' // samaritan - &) ition ($p_alt iS'on // definition + &) it (an$p_alt ?it' // samaritan + &) ition ($p_alt iS'?on // definition &) it (t$p_alt '?i // avoid double t - bakelitten [ b,ak@l'it@-n] .group iv @@ -5415,6 +5439,7 @@ _adopt) iv 'iw _) je (t dZE // jetfly firma) je (t dZE // jumbo) je (t dZE // + per) je (t sZE // hyperjet ø) j (et j // øjet, overtøjet j (ungl dZ // jungle _) jersey (_ dZW:si // New Jersey @@ -5461,7 +5486,7 @@ _adopt) iv 'iw .group k k k - kk g // bækkenet [b'?Eg@n@-D] + kk k s) k (r g // skrive kanterel kant@-r'&#l // kumquat kVmkwVd // @@ -5842,8 +5867,8 @@ salama) nd nd // salamander ba) nd (emedlem nd // nd (åse nd // tundåse eje) nd (el nd // - fi) nd (el nd // findele - nd (else n // opfindelse + _fi) nd (el nd // findele + nd (else+ n // opfindelse fi) nd (eløn n // e) nd (e+ n // endeløs iske) nd (erun =nd // name @@ -6030,6 +6055,7 @@ _man_ba) nd (er n // tr) os (skrift+ os // o (ld++ ?V // hold, holde, solde - ld=>l o (mm+ ?V // komme, omme + o (nd ?o // bonde, onde _noget_r) o (s_ ?V // @@ -6043,7 +6069,7 @@ _noget_r) o (s_ ?V // w) oogie ugi // w) oo u // Hollywood oonagh un& // name - c) ochise OwS'i:s // name + c) ochise OwS'i:s // name kl) oro (form oo shamp) oo ?o // nark) o o // narkoopgør @@ -6066,13 +6092,13 @@ _noget_r) o (s_ ?V // t) o (rna ?V // tornado // PB final -skop - stressed o - &sk) op ($p_alt++ 'op // gyroskop - &sk) op (i$p_alt op' // mikroskopi - &tr) op ($p_alt++ 'op // misantrop, filantrop + &sk) op ($p_alt++ '?op // gyroskop + &sk) op (i$p_alt ?op' // mikroskopi + &tr) op ($p_alt++ '?op // misantrop, filantrop // final -om in da_list - stressed o - @) om ($p_alt+++ 'om // atom, diplom, syndrom - sark) om om // knoglesarkom + @) om ($p_alt+++ '?om // atom, diplom, syndrom + sark) om ?om // knoglesarkom // final - ose - stressed o &) ose ($p_alt+ 'o:s@- // hypnose @@ -6082,14 +6108,14 @@ _noget_r) o (s_ ?V // o (tisk o: // gotisk, laotisk // final -ode - stressed o - di) o (de 'o -elektr) o (de 'o - epis) o (de 'o - kat) o (de 'o - kust) o (de 'o - met) o (de 'o - pag) o (de 'o - peri) o (de 'o + _ di) o (de 'o +_elektr) o (de 'o + _epis) o (de 'o + _kat) o (de 'o + _kust) o (de 'o + _met) o (de 'o + _pag) o (de 'o + _peri) o (de 'o // general rule c/k + o + n + consonant = [V] L10) o (nC V // konvoj, conga, konservator - could also be [O] @@ -6305,26 +6331,27 @@ trak_l) o (d // // general rule o + p/b: [V] o (L06+ V // op, opdrage, obstruere + o (L06%+ ?V // oppe - short kommand) o o // kommandobroen s) ophia of'i& // name - o (pposit o // opposition + o (pposit ?o // opposition o (L06L11+ o // oktober, global, Robert, oberst - psyk) o (+ o // psykogen - o (pefter+ V // - o (parbejde+ V // - j) o (b@ V // jobannonce - o (pad+ V // opad - b) o (pæl o // - k) o (par V // koparret + psyk) o (+ ?o // psykogen + o (pefter+ ?V // + o (parbejde+ ?V // + j) o (b@ ?V // jobannonce + o (pad+ ?V // opad + b) o (pæl ?o // + k) o (par ?V // koparret L10) o (L06rL11 o // kobra L02) o (L06le+ V // boble L02) o (L06%e++ ?V // dobbel C) o (L06L04++ o // monopol, mobil p) o (pidol++ V // popidol o (bbA+++ ?V // hobby, snobbet, snobbede - st) o (p++ V // stopur - k) o (bber+++ O // - selv) o (p V // selvoptaget + st) o (p++ ?V // stopur + k) o (bber+++ ?O // + selv) o (p ?V // selvoptaget _r) o (bin++ V // Robin Hood _r) oby (n++ Vbe // name pr) o (ble o // problem @@ -6333,13 +6360,13 @@ kommand) o o // kommandobroen cle) o (patra 'o // nark) o (C o // narkobranchen mikr) o o // mikroprocessor - h) o (b+ o // menneskehob - Cn) o (L06++ o // knob, knop, knoppen - gal) o (C 'V // galoche, galop - stressed - dr) o (sche V // - r) o (che V // broche - gal) o (ppere o // - kykl) o (p 'o // + h) o (b+ ?o // menneskehob + Cn) o (L06++ ?o // knob, knop, knoppen + gal) o (C '?V // galoche, galop - stressed + dr) o (sche ?V // + r) o (che ?V // broche + gal) o (ppere ?o // + kykl) o (p '?o // // general rule l + o + t: [V] l) o (t V // blot, plot, kaskelot @@ -6654,7 +6681,7 @@ torped) o o // torpedoflyene artisk) o (k 'V // stressed aut) o (+ o // autoklub t) or (t O: // tortur - C) or (L07L05 O: // portal TEST + C) or (L07L05 O: // portal TEST t) o (t V // hårtot, tot, hottentot t) o (tA o // total em) o (+ o // demokrati @@ -6736,14 +6763,14 @@ perestr) o (jka 'V // stressed _f) oyeren wAj'e@-n // f) oyer wAje // p) or (n O: // porno - p) or (c V // porcelæn + p) orce Os@- // porcelæn m) oskva Vskv'& // _im) o (d 'o // stressed m) ontana Vnt'&n& // m) o (nitor V // _C) o (_ o // jo, ko, lo, so f) o (d+ ?o // fodre - C) oe (de o // boede, troede + C) oe (de o // boede, troede betr) oe (de o@- // betroede midler sk) oe (de o@- // spr) og ow // sprog @@ -6893,7 +6920,7 @@ noblesse_) oblige _^_fr // noblesse oblige &l) on ($p_alt '?VN // bouillon, talon &æs) on ($p_alt++ '?VN // sæson bet) on ($p_alt++ '?VN // beton - &j) on ($p_alt '?VN // medaljon + &j) on ($p_alt++ '?VN // medaljon &el) on ($p_alt '?on // melon &) on (el$p_alt++ on // rationel @@ -6975,7 +7002,7 @@ helsingf) or (s 'V // stressed sekt) or V // sektoren k) or (t ?O: // kort k) or (tA ?O: // korte - t) or (L06 O: // torpedere + t) or (L06 O: // torpedere or (to O: // ortodoks, ortopæd m) orge OO@- // morgen dek) or (_ 'V:r // dekor @@ -7003,7 +7030,7 @@ helsingf) or (s 'V // stressed f) or (me O: // forme f) or (mere V // formere _h) ormon Om'on // - n) or (m O: // normal - length 90 in ph_danish + n) or (m O // normal st) or (m O: // b) or (t O: // bortforklare _ab) or 'O:d // stressed @@ -7044,7 +7071,7 @@ _transp) or (t_ 'O: // stressed - transport f) ord (ø Vd' // fordømme v) ord (i 'Vrd // gernvordighed ord (en+ Od // orden, ordensmagt - n) orden OVn // Norden - silent d + n) orden OVn // Norden - silent d b) orde (nde orE // ord (ene+ oR // ordene ord (enen+ O:d // ordenen @@ -7132,7 +7159,7 @@ _transp) or (t_ 'O: // stressed - transport _f) ore (lle+ or'&#l // foreller (fish) _f) ore (n++ V'e: // forene, forening genf) ore (n+ Ve: // genforene - f) ore (sC+ 0:0 // forestiller, foreslog + f) ore (sC+ O:O // forestiller, foreslog _f) or (el_+ or // forel _f) or (et_+ 'o@- // foret _f) or (elsk++ V' // forelske @@ -7462,6 +7489,7 @@ _transp) or (t_ 'O: // stressed - transport op) ret (++ r&#t A) rer (_++ V // horer A) ret (_++ 3-VD // horet, fyret + æ) ret (_+++ VD // været A) rerne (_++ Vn@- // horerne A) rerne (s_++ Vn@- // horernes A) rene (_ Vn@- // hærene @@ -7727,7 +7755,7 @@ franci) sc (o sk // Francisco _) stone sdoun // namde - Stone empire_) state (_ stEjt // _) sir (_ sW: // Sir Arthur - sher (wood SW: // Sherwood Forrest + sher (wood SW: // Sherwood Forrest surf sW:f // windsurfing surf (e sW:f la) sur sur // lasurfarve @@ -8133,6 +8161,7 @@ meningi) ti (s =ti j) u (nk V // junkaktie hal) u (nk 'O // stressed _f) u (nk V // funkmusik + f) unk (tion 0N // funktionsfejl _p) u (nk V // punker L06) u (nkt O // punkt @@ -8169,23 +8198,25 @@ meningi) ti (s =ti // remove u in order to make the -ig/elig rule (group i) work with u + -ig list words // e.g. u+erværdig [uErv'Erdi] will keep its stress on the next to last syllable. - _) u (@@+P1 u: + _) u (@@+P1 u_! // _" = no link with next vowel _) ufor '?ufV: // uforskyldt, uforfalsket, uforandret - _) uud 'u|'uD // uudforsket + _) uud '?u|'?uD // uudforsket + _) u (lækker '?u + // exceptions - u isn't a prefix uppercut VpVkVt // - _) u (nd+ O // underfuld, undtage - _) u (ng+ O // ungdommelig + _) u (nd+ ?O // underfuld, undtage + _) u (ng+ ?O // ungdommelig u (gle+ u // ugle - u (lv+ u // ulvene + u (lv+ ?u // ulvene _) ubeset (_ ubesed // - _p) u (b_ V // - p) u (bb V // pubben, pubber + _p) u (b_ ?V // + p) u (bb ?V // pubben, pubber u (hyre+ u: u (enig+ u' // uformel ufOm'el // - u (ltima u // ultimatum - u (ltra u // ultraviolet + u (ltima ?u // ultimatum + u (ltra ?u // ultraviolet u (denfor+ u // u (dgrundelig+ u // u (imodståelig u // @@ -8276,17 +8307,17 @@ meningi) ti (s =ti _) ud (@@+P2 ''?uD _) ude (@@+P3 ''uD@- // exceptions for ud-: [ud] - _) ud (elt+P2 '?ud // udelt - _) ud (at+P2 '?ud // udateret + _) ud (elt+P2 '?ud // udelt + _) ud (at+P2 '?ud // udateret _) ud (rikkelig+P2 ud _) ud (røj+P2 'ud _) ud (uelig+ ?ud _) ud (y+P2 '?ud // udyd, udygtig, udyr _) ud (øbt+P2 'ud - _) ud (ød+P2 ?ud // udødelig + _) ud (ød+P2 ?ud // udødelig _) ud (åd+P2 '?ud _) ud (en+ ?uD - _) ud (kig ?uD // udkigspost (another rule overrides a silent g rule) + _) ud (kig ?uD // udkigspost (another rule overrides a silent g rule) u (nL08+ O // kunst br) unch VnS // @@ -8297,7 +8328,7 @@ meningi) ti (s =ti st) u (nt V // stuntman _) d) u (ncan V // name b) urg (er Wg // - u (mK+ O // dum + u (mK+ ?O // dum n) u (mlock V // h) umphrey Vmfri // name _b) urns W:ns // name @@ -8469,15 +8500,15 @@ mudderh) u (l O // g) u (f ?O // guffe g) ulv Ol // gulv - silent v g) ulv (e Olv // gulve - sm) u (C O // smukkere, smurt + sm) u (C ?O // smukkere, smurt rasm) u (s u // Rasmus - name m) u (sik u // middagsmusik - sL09) u (t u // snut, smut + sL09) u (t ?u // snut, smut sL09) u (tt ?u // smutte sL09) u (CL11 u // snude sm) u (L03+ u // smule, smuld, smuds l) u (krere u // - L09) u (f O // fornuft + L09) u (f ?O // fornuft L09) u (ff ?O // muffe m) uffin VfIn // m) u (ft u // mufti @@ -8487,7 +8518,7 @@ mudderh) u (l O // _instr) u (ks 'u // stressed valp) u (rgis 'u // stressed valpurgisnat gr) u (p u // gruppe - r) u (m O + r) u (m ?O tr) u (man u // name _st) urgis WdZis // name _m) u (llin V // name @@ -8569,7 +8600,7 @@ proven) u 'y dø) v w // døvstum le) v (_ w // elev ble) v (et : // long e - could also be w [ˈblewəð] - mø) v (e+ w_| // møve + mø) v (e+ w_! // møve &A) v (_A v // gav ordre ti) v (A v // fiktive v (n w // jævn, levne @@ -8673,10 +8704,15 @@ udeble) v w // d) y (sse ?y // dysse pl) y (ss ?y // plysset h) y (ld ?y // hyldest + C) y (ll ?y // gylle // short y Cl) y ?y // fly, bly TEST s) y (nes ?y + s) y (l ?y // sylen + l) y (d ?y + l) y (de_ y + l) y (den_ ?y // general rule: [W] before (some) velars y (nk+ W // ynk, ynkelig, klynke @@ -8705,38 +8741,38 @@ udeble) v w // s) yndi (k ?Wndi // syndikat // general rule: consonant + y + sp/st/sk: [?y] - glottal - C) y (L08+ y // kysk + C) y (L08+ ?y // kysk C) y (se+ y // kyse l) y (set+ ?y // c) y (kel ?y // short y - l) y (stgård W // + l) y (stgård ?W // kr) y (bb+ ?y // krybbe - kr) y (s+ y // krystal, kryster + kr) y (s+ ?y // krystal, kryster r) y (L01%++ ?W // krykke, ryggen r) y (C+ ?W // ryste, bryllup, tryg, krympe, krymmel - short W - tr) y (l++ y // tryl - str) y (C y // stryknin + tr) y (l++ ?y // tryl + str) y (C ?y // stryknin _harr) y i // dr) y (p W // r) y (Ce++ y // tryne, pryde tr) y (de ?y // fortryde r) ydell aId'El/2 // name - r) y (sk+ y // brysk - mar) y (s i // - r) y (L06+ y // kryptere, kryb + r) y (sk+ ?y // brysk + mar) y (s i // name + r) y (L06+ ?y // kryptere, kryb r) y (L06A+ y // krybe - r) y (t+ y // rytme, rytter - br) y (n y // øjenbryn - gr) y (n y // - gr) y (nt W // - p) y (nt W // + r) y (t+ ?y // rytme, rytter + br) y (n ?y // øjenbryn + gr) y (n ?y // + gr) y (nt ?W // + p) y (nt ?W // r) y (de++ y // bryde forbr) y (d++ ?y // forbrydelse, forbryder - r) y (den++ ?y // gryden - short y TEST - r) y (d_++ y // fryd, ryd -// Short glottal y in both "kryds" and "krydse/r" + r) y (d_++ ?y // fryd, ryd + +// Short y in both "kryds" and "krydse/r" r) y (dC++ ?y // krydser, rydde - fr) y (s+ y // forfrysning + fr) y (s+ ?y // forfrysning // exceptions // problem with lyst - blond = light coloured; and lyst = would like to, feel like @@ -8950,7 +8986,8 @@ _stereot) y (p 'y // stressed // glottal æ followed by double consonant æ (C%+ ?E // læsse - æ (CC ?E // hænder - nd=>n Too broad? + æ (CC ?E // hænder - nd=>n + æv (de ?Ew // hævde æ (gypt E' // ærre ?E3-V // spærreballon desv) ærre 'E3-V // stressed @@ -8973,7 +9010,7 @@ _hun_l) æ (ste E: kr) æ (_ E? // r) æ (t+ &# // åndedræt spr) æ (C+ &# // sprængt - pr) æ (C+ ?E // prætendere, præsentere, prækvalificere + pr) æ (C+ ?E // prætendere, præsentere, prækvalificere rør) æg Eg // pr) æ (gn E // prægnans, prægnant for) æ (dle ?E // @@ -9079,8 +9116,8 @@ majest) æ (t 'E // stressed æ ø W // Short ø - double consonant - ø (C%++ ?W // tørre, fødder, rødder - r) ø (L09% ?W# // grønne, strømme, rømme + ø (C%++ ?W // tørre, fødder, rødder + r) ø (L09%+ ?W# // grønne, strømme, rømme ø (rnene ?W // børnene, tjørnene - TEST ø (ds ?W // ødsel, fødsel - short before 2 consonants b) ø (n ?W // bønder @@ -9125,7 +9162,7 @@ oberstl) ø (jtnant 'W# // stressed dr) ø (n ?W // drøn dr) ø (ne W // drøne d) ø (d ?W // død - d) ø (de W: // døde + d) ø (de W // døde d) ø (den ?W // døden r) ø (mer ?W // strømere L08) ø (ge W // skøge @@ -9182,7 +9219,6 @@ bonder) ø (v W# // bonderøve å (Ce O // måned år (@ O: // dårlig, årsag @) år (_ ?O: // skatteår -// g) år O // går, overgår _) år (_ O: // år C) år (_ ?O: // sår, kår, skår, får år (s O: // årstid @@ -9192,6 +9228,10 @@ bonder) ø (v W# // bonderøve n) å (et ?O // short glottal o @n) å (et O // opnået +// Short o + v) å (gn ?0 // vågne + v) å (ben ?0 + ovenp) å (_ '?O // stressed (originally 2 words "oven på") undg) åe (lig '?O // stressed opn) åe (lig '?O // stressed @@ -9294,7 +9334,7 @@ slagsm) å (l ?O // str) å (forkort ?V // stråforkorter str) å (hat ?V // str) å (død ?V // - årer OO- // sårer, årer + årer OO- // sårer, årer å (lti ?V // måltid .group ' diff --git a/dictsource/en_list b/dictsource/en_list index ecc2fbdf..1cd478c9 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -1,4 +1,4 @@ - + // You can use the en_extra file, rather than this one // to add your own pronunciation definitions. @@ -1631,6 +1631,7 @@ gigantic dZaIg'antIk gilead g'IlIad gimme gImi giraffe dZI2raaf +github gIthVb glacier gleIS3 goin ,goUI2n $only // for goin' gonna g,@n@ diff --git a/dictsource/es_list b/dictsource/es_list index abce5fcb..6d307b7b 100644 --- a/dictsource/es_list +++ b/dictsource/es_list @@ -29,6 +29,7 @@ _tld t'ilde // names of symbols ª a º o +° grados _. punto _, koma _; p,untoik'oma diff --git a/dictsource/hi_list b/dictsource/hi_list index d926d6ba..f77a850f 100644 --- a/dictsource/hi_list +++ b/dictsource/hi_list @@ -162,7 +162,7 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? श S@ ष s.@ // retroflex [S] स s@ -ह H@- +ह H@ क़ q@ ख़ x@ ग़ Q@ @@ -196,10 +196,21 @@ _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? _?? Vks.@r +// Alphabet names +_ar 'Vrbi +_cyr sIrIk'Ik +_zh c'i@ni // Punctuation । dVn.d.V +$ dOl@r +% pVt'IS@t ++ plVs += bVr'a:b@r +* ta:r'a:Nk@n +* + // Pronouns मैं $u // main: IrI मुझे $u @@ -262,7 +273,7 @@ _?? Vks.@r को $u // ko: to तक $u // tak: until, for(time) बिना $u $pause // without (preposition) -में $u // me: in +में me~: $u+ // me: in से $u // se: from, with, by @@ -272,7 +283,7 @@ _?? Vks.@r // Conjunctions -और $u $pause // aur: and +और $u $brk // aur: and य j@ $u $pause // ja: or अगर $u $pause // agar: if यदि $u $pause // yadi: if, whether @@ -299,5 +310,5 @@ _?? Vks.@r // Exceptions -क्रिकेट krIk'Et +क्रिकेट kr'IkIt सायबर s'aIb@r diff --git a/dictsource/hi_rules b/dictsource/hi_rules index ffbd8801..5b6ccf83 100644 --- a/dictsource/hi_rules +++ b/dictsource/hi_rules @@ -390,7 +390,7 @@ ः H // visarga .group ् // virama -् + ् // Extra consonants @@ -410,7 +410,7 @@ ज़ zV ज़ (B z -.group ड़ // dddha (should retroflex flap) +.group ड़ // dddha (should retroflex flap ?) ड़ r.V ड़ (B r. @@ -443,8 +443,3 @@ -.group - $ dOlV - % pVsEnt - - diff --git a/dictsource/it_list b/dictsource/it_list index f5aab0cd..90500f7d 100644 --- a/dictsource/it_list +++ b/dictsource/it_list @@ -1,4 +1,4 @@ -// This file is UTF-8 encoded +// This file is UTF-8 encoded // $alt change [e] or [o] in the stressed syllable to [E] or [O] @@ -82,6 +82,7 @@ _tld t'ilde # kantSellet:o @ ki'otS:ola ~ tilde +° g@-*'a:di : d,uep'unti _! p,untoesklamat'ivo diff --git a/dictsource/ml_rules b/dictsource/ml_rules index 3094aba9..fa6061b1 100644 --- a/dictsource/ml_rules +++ b/dictsource/ml_rules @@ -295,12 +295,5 @@ -.group 0xe0a4 // devanagari - 0xe0a4 _^_HI // switch to hindi voice - -.group 0xe0a5 // devanagari - 0xe0a5 _^_HI - - .group $ do:l.ar diff --git a/dictsource/nl_list b/dictsource/nl_list index 5cff59cf..1a0f4cea 100644 --- a/dictsource/nl_list +++ b/dictsource/nl_list @@ -1,4 +1,4 @@ - + // This file in UTF8 encoded // $alt2, remove s from plural, remove en from plural @@ -80,6 +80,7 @@ _- k'OpElt,e:k@n = Q@l'EIkte:k@n __ l'IgEntst@-*'e:pj@ € 'Y:*o:t,e:k@n +° Qra:d@n // numbers diff --git a/dictsource/pt_list b/dictsource/pt_list index 34dd50b5..19d2c056 100644 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -683,6 +683,7 @@ bolo $alt2 bolo $alt $verb borboleta $alt2 bordo $alt +borra $alt2 $noun bosque $alt boto $alt2 $noun brejo $alt @@ -693,12 +694,13 @@ cacete $alt2 cachorra $alt2 caderneta $alt2 cadete $alt2 +camelha $alt camelo $alt2 camiseta $alt2 cantora $alt2 capacete $alt2 caractere $alt -carbureto $alt2 +carbureto $alt2 careta $alt2 carreta $alt2 carroça $alt @@ -707,7 +709,7 @@ cateto $alt2 catorze $alt2 cebola $alt2 cefaleia $alt -centopeia $alt +centopeia $alt cerca $alt cerca $alt2 $noun cerco $alt $verb @@ -735,8 +737,11 @@ concerto $alt2 $noun concertos $alt2 concordo $alt conforto $alt $verb +console $alt2 $noun consolo $alt2 $noun controle $alt2 $noun +controles $alt2 +controles $alt $verb controlo $alt2 $noun coreia $alt coreto $alt2 @@ -747,19 +752,19 @@ corto $alt corveta $alt2 corvos $alt coto $alt2 -cotovelo $alt2 +cotovelo $alt2 cratera $alt crede $alt2 crepe $alt decore $alt -degelo $alt2 +degelo $alt2 desapego $alt2 $noun descordo $alt desemprego $alt2 desemprego $alt $verb desespero $alt2 $noun desfecho $alt2 -desmantelo $alt2 $noun +desmantelo $alt2 $noun desporto $alt2 desportos $alt desprezo $alt2 $noun @@ -768,7 +773,7 @@ desse $alt $verb deste $alt2 deste $alt $verb desterro $alt2 -destroem $alt +destroem $alt deveras $alt dez $alt diarreia $alt @@ -787,11 +792,12 @@ endereço $alt $verb enforco $alt engordo $alt enredo $alt $verb -enrosco $alt $verb +enrosco $alt $verb enterro $alt2 $noun enumerem $alt envelope $alt envolto $alt2 +enxaqueca $alt2 enxerto $alt2 $noun epopeia $alt eritreia $alt @@ -800,7 +806,7 @@ erro $alt $verb esboço $alt $verb escopeta $alt2 escova $alt2 $noun -escovas $alt2 +escovas $alt2 escovo $alt escroto $alt2 esforço $alt $verb @@ -813,18 +819,18 @@ espiroqueta $alt2 espoleta $alt2 esposa $alt2 esqueleto $alt2 -estilete $alt2 +estilete $alt2 estrela $alt2 estrofe $alt estorno $alt $verb estorvo $alt $verb etiqueta $alt2 europa $alt -europeia $alt +europeia $alt exagero $alt $verb explore $alt faceta $alt2 -fantoche $alt +fantoche $alt farofa $alt febre $alt fera $alt @@ -843,7 +849,7 @@ forca $alt2 força $alt2 $noun forças $alt2 forço $alt -formos $alt2 +formos $alt2 forro $alt $verb frevo $alt2 fulgores $alt2 @@ -851,8 +857,8 @@ galera $alt galileia $alt gameta $alt2 geleia $alt -gelo $alt2 -gelo $alt $verb +gelo $alt2 +gelo $alt $verb genebra $alt gesso $alt2 golpe $alt @@ -871,16 +877,18 @@ hemorroida $alt hoje $alt2 horrores $alt2 ideia $alt -interesse $alt2 $noun +imberbe $alt +interesse $alt2 +interesse $alt $verb jogo $alt2 $noun joguete $alt2 lagosta $alt2 lambreta $alt2 lebre $alt lembrete $alt2 -lepra $alt +lepra $alt leste $alt2 $verb -lingueta $alt2 +lingueta $alt2 lopes $alt macete $alt2 maior $alt @@ -901,9 +909,9 @@ minueto $alt2 miolo $alt2 miolos $alt modelo $alt2 -modelo $alt $verb +modelo $alt $verb moeda $alt -mofo $alt $verb +mofo $alt $verb molho $alt2 $noun monera $alt morcego $alt2 @@ -928,7 +936,7 @@ obstetra $alt odisseia $alt onu $1 olho $alt2 $noun -onomatopeia $alt +onomatopeia $alt opereta $alt2 ordens $alt osso $alt2 @@ -942,7 +950,6 @@ palacete $alt2 palheta $alt2 panfleto $alt2 pangeia $alt -panqueca p,&~Nk'Ek& pantera $alt parede $alt2 pastora $alt2 @@ -970,7 +977,7 @@ pose $alt2 povos $alt poxa p'oS& primavera $alt -prosopopeia $alt +prosopopeia $alt quarteto $alt2 queda $alt quede $alt2 @@ -986,13 +993,13 @@ reforço $alt $verb reforços $alt refresco $alt $verb reitora $alt2 -rejo $alt +rejo $alt relevo $alt2 $noun remorso $alt -renovo $alt $verb +renovo $alt $verb retorno $alt $verb -reuva $alt -rigores $alt2 +reuva $alt +rigores $alt2 rixa x'iS& rocha $alt rock $alt @@ -1037,10 +1044,10 @@ tocha $alt toga $alt topo $alt $verb torno $alt $verb -tornozelo $alt2 +tornozelo $alt2 torre $alt2 $noun torres $alt2 -torro $alt +torro $alt tortos $alt traqueia $alt travesso $alt2 @@ -1054,6 +1061,7 @@ tumores $alt2 valeta $alt2 vanessa $alt2 velozes $alt +verbete $alt2 violeta $alt2 violoncelo $alt voga $alt @@ -1070,7 +1078,8 @@ zorra $alt2 ?1 back b'Ek ?2 backup bEk'&p ?2 backups bEk'&ps -?1 blind bl'aind +blind bl'aind +book buk ?1 braille b:r'aily ?2 Braille bR'aili ?1 cancel k'&ns'El @@ -1087,7 +1096,6 @@ zorra $alt2 ?2 download daUNl'owd ?3 download dau~Nl'owd ?1 end 'end -?1 escape Sk'eIpy ?2 esc 'Esk ?3 esc 'EskI ?1 explorer ,ekspl'O:*&r- @@ -1110,6 +1118,7 @@ zorra $alt2 ?2 Intranet iNtRan'Et ?1 kernel k'Ern,El ?2 kernel k'Ern@l +laptop lEptOp ?1 line l'ain layout l'eI,aUt ?2 logo l'OgU @@ -1140,14 +1149,12 @@ símbolo s'imbolU ?2 software s'Oftwe@- ?1 space sp'eIsy ?1 sporting sp'Ort,ing -?1 tab t'ab + tab t'aby ?1 telemóvel t,El,Em'OvEl ?1 telemóveis t,El,Em'OveIs# ?1 up &p ?1 upload &pl'oud ?2 web w'Eb -?2 verbete verb'etSi -?2 verbetes verb'etSis ?1 yahoo 'i,ah'u ?2 yahoo iah'u ?1 yes j'Es @@ -1161,14 +1168,16 @@ louis _^_FR // foreign product names ?1 access 'aks,Es ?1 adobe &d'Oby +apple 'Epow +chrome kR'owmi debian d'Ebj&~N ?1 excel ,Eks'El ?1 express ,Ekspr'Es espeak isp'i:k ?1 espeakedit isp'i:kEd,it +facebook feisybuk ?1 fedora _^_EN -?1 firefox f'ai&rfOks -?2 firefox f'ai@fOks + firefox f'ai@fOks ?1 front fr'ont ?1 jaws dZ'au:z ?1 linux l,in'uks @@ -1203,6 +1212,7 @@ playstation _^_EN suse z'u:ts@ ?1 start st'art // nero StartSmart ?1 time t'aImy // nero show time +twitter tw'iter ubuntu ub'untu ?1 unix ,u:n'iks ?2 unix j'uniks diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 8cbbbbd6..cce034fc 100644 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -100,6 +100,7 @@ ái (s ''aI á (iCK ''a áy ''aI + ál (C ''aU áu ''aU áu (s ''aU ?1 ál ''Al @@ -221,13 +222,13 @@ f) e (rem_ E e (que_ E - e (quem_ E - + e (quem_ E + e (rgA_ E e (rgAm_ E -e (rgue_ E -e (rguem_ E + e (rgue_ E + e (rguem_ E e (rsA_ E e (rsAm_ E @@ -242,7 +243,7 @@ e (rguem_ E e (stAm_ E e (strA_ E -e (rme_ E + e (rme_ E e (rnA_ E e (rnAm_ E @@ -461,6 +462,7 @@ respond) e (L07_ e // cor- _gr) e (gL03_ e _gal) e (gL03_ e _n) e (grL03_ e + _ch) e (guL02_ e estr) ei (L04_ EI _inv) e (jL04_ E tr) e (pL04_ E // es- @@ -488,10 +490,9 @@ _recup) e (rL04_ E _refrig) e (rL04_ E _v) e (rbL03_ E _p) e (rdL02_ E -_ch) e (guL02_ e _l) e (rdL03_ E _h) e (rdL04_ E - _bez) e (rrL03_ e + _bez) e (rrL03_ e _inv) e (rtL03_ e _f) e (rvL03_ e _refr) e (scL01_ E @@ -536,6 +537,7 @@ _entorp) e (çL03_ e éi (s ''EI é (iCK ''E éy ''eI + él (C ''EU éu ''EU éu (s ''EU é (uCK ''E @@ -576,18 +578,18 @@ _entorp) e (çL03_ e gu (Y g a) gu (ent gw _ar) gu (i gw - averi) gu (e gw + averi) gu (e gw enxa) gu (e gw - i) gu (idade gw + i) gu (idade gw lin) gu (e gw lin) gu (i gw - _min) gu (e gw + _min) gu (e gw _pin) gu (im_ gw _pin) gu (ins_ gw - _sa) gu (i gw + _sa) gu (i gw san) gu (ín gw san) gu (in gw - tin) gu (i gw + tin) gu (i gw ?1 n) gu (A gw // eg: língua, etc. ?1 man) gu (ei g // mangueira ?1 gu (ém_ g // eg: alguém, ninguém, etc... @@ -620,6 +622,8 @@ _entorp) e (çL03_ e i (A_ 'i i (am_ 'i + i (em_ 'i + io (_ iU io (s_ iU i (oCK i @@ -657,6 +661,7 @@ _entorp) e (çL03_ e ím (C ''im ín (K ''iN ính ''in^ + íl (C ''IU .group j @@ -754,6 +759,9 @@ _entorp) e (çL03_ e o (ltA_ O o (ltAm_ O + o (lve_ O + o (lvem_ O + o (sA_ O o (so_N o // not for osos_ o (sAm_ O @@ -831,10 +839,10 @@ _entorp) e (çL03_ e //sort _f) o (L05_ o _f) o (L07_ o - _engl) o (bL04_ O _s) o (bL02_ O + _af) o (bL04_ O _esn) o (bL04_ O - _af) o (bL04_ O + _engl) o (bL04_ O br) o (chL04_ O _deb) o (chL04_ O _m) o (fL01_ O @@ -842,8 +850,6 @@ _entorp) e (çL03_ e _s) o (frL02_ O r) o (gL04_ O // inter- _j) o (gL04_ O -_emp) o (lgL04_ O -_f) o (lgL04_ O _af) o (gL04_ O _adv) o (gL04_ O _ref) o (gL04_ O @@ -851,15 +857,12 @@ _f) o (lgL04_ O _ap) oi (L02_ OI _b) oi (L04_ OI _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 - env) o (lvL02_ O // des- - _abs) o (lvL02_ O - _dev) o (lvL02_ O - _res) o (lvL02_ O - _rev) o (lvL02_ O - _ent) o (pL02_ O + ent) o (pL02_ O _c) o (pL03_ O _ens) o (pL04_ O _s) o (prL04_ O @@ -941,21 +944,21 @@ _remem) o (rL04_ O ?1 _) qua kwa // quatro, etc. ?1 _) que ke // quente, etc. ?1 _) quei (C k'eI // queira, queima, etc - A) quên (C kw'eN // frequência, etc. - C) quên (C kw'eN // delinquência, etc. - C) quên (A kw'eN // quinquênio, etc. + quên kw'eN // quinquênio, etc. ade) qu (e kw + _a) qu (idade_ kw + _a) qu (ífero_ kw e) qu (estr kw ese) qu (ív kw _e) qu (in kw fre) qu (ent kw + _ini) qu (idade_ kw li) qu (id kw lí) qu (id kw n) qu (en kw _) qu (inqu kw se) qu (en kw tran) qu (il kw -?1 quec kes // esquece, etc. ?1 queç kes // esqueça. ?1 A) que (nA_ ke // pequeno, etc. ?1 C) quê (_ ke // porquê, etc. @@ -1013,6 +1016,14 @@ _remem) o (rL04_ O ?1 A) s (G+ Z ?1 A) s (_KS1 s# ?1 A) s (_G+S1 Z + s (b z + s (d z + s (g z + s (l z + s (m z + s (n z + sr zx + s (v z _) sobre (@P5 sob*e diff --git a/dictsource/ru_list b/dictsource/ru_list index 2666f1e3..58af2d00 100644 --- a/dictsource/ru_list +++ b/dictsource/ru_list @@ -51,9 +51,9 @@ _6C S,E#s;t;s'ot _7C s;,Ims'ot _8C vOs;Ims'ot _9C dev;Vts'ot -_1MA1 t'ys;Its;V // no '1' before thousand -_0MA1 t'ys;Its;i -_0M1 t'ys;Vts; +_1MA1 t'ys;ItS;V // no '1' before thousand +_0MA1 t'ys;ItS;i +_0M1 t'ys;VtS; _1MA2 m;,IlI;'on _0MA2 m;,IlI;'ona _0M2 m;,IlI;'onof diff --git a/dictsource/te_list b/dictsource/te_list index 83bfc551..1af8f373 100644 --- a/dictsource/te_list +++ b/dictsource/te_list @@ -22,7 +22,7 @@ n En o o: p pi: q kju: -r a:r +r a:rp s Es t t#i: u ju: @@ -40,7 +40,7 @@ _1 okat.i _1a oka _2 rend.u _3 mu:d.u -_4 na:lgu +_4 na:lugu _5 aIdu _6 a:ru _7 ;e:d.u @@ -48,20 +48,20 @@ _8 ;enimidi _9 tommidi _1X padi _11 padakond.u -_12 pannemd.u -_13 padamu:d.u: +_12 pannend.u +_13 padammu:d.u: _14 pad#na:lugu _15 padihe:nu _16 padaha:ru _17 padihe:d.u _18 padd#enimidi -_19 pamdommadi +_19 pandommidi _2X irav#aI _3X muppaI _4X nalub#aI _5X ja:b#aI _6X arav#aI -_7X d.eb#baI +_7X d.#eb#baI _8X jenab#aI _9X tomb#aI _0C v#andala @@ -85,7 +85,7 @@ _?? aks.aram // 'unknown character' + ku:d.ika * naks.atra \ bja:kasla:s. -/ sla:s. +/ kudiva:lugi:ta © ka:pi:raIt. ¶ v#e:ra: @@ -137,7 +137,7 @@ U+c4d v#ottu ఫ్ ip# బ్ ib భ్ ib# -మ్ im +మ్ imu: య్ ij ర్ ir ఱ్ ir diff --git a/dictsource/te_rules b/dictsource/te_rules index 77008280..ade4544c 100644 --- a/dictsource/te_rules +++ b/dictsource/te_rules @@ -224,7 +224,7 @@ . ఁ n // candrabindu - ం m // anusvara (this should nasalize the vowel) + ం n // anusvara (this should nasalize the vowel) ః h // visarga @@ -243,7 +243,7 @@ ూ u: - ృ ru + ృ r- ౄ r-: diff --git a/espeak-data/voices/en b/espeak-data/voices/en index 59ed2ce2..84d12dd8 100644 --- a/espeak-data/voices/en +++ b/espeak-data/voices/en @@ -1,6 +1,6 @@ name english -language en-uk 2 language en-gb 2 +language en-uk 2 language en 2 gender male diff --git a/espeak-data/voices/es-la b/espeak-data/voices/es-la index 262d0687..4fbacd1b 100644 --- a/espeak-data/voices/es-la +++ b/espeak-data/voices/es-la @@ -1,4 +1,4 @@ -name spanish-latin-american +name spanish-latin-am language es-la language es-mx 6 language es 6 diff --git a/phsource/ph_bengali b/phsource/ph_bengali index a7dd4bc1..f7863016 100644 --- a/phsource/ph_bengali +++ b/phsource/ph_bengali @@ -35,37 +35,37 @@ endphoneme phoneme i vowel starttype #i endtype #i - length 200 + length 210 FMT(vowel/i_6) endphoneme phoneme u vowel starttype #u endtype #u - length 200 + length 210 FMT(vowel/u) endphoneme phoneme e vowel starttype #e endtype #e - length 200 + length 210 FMT(vowel/e) endphoneme phoneme & vowel starttype #a endtype #a - length 200 + length 210 FMT(vowel/&_2) endphoneme phoneme o vowel starttype #o endtype #o - length 200 + length 210 IF nextPhW(w) THEN - length 160 + length 170 ENDIF FMT(vowel/o) endphoneme diff --git a/phsource/ph_danish b/phsource/ph_danish index de0a2e11..bd92210e 100644 --- a/phsource/ph_danish +++ b/phsource/ph_danish @@ -8,6 +8,116 @@ // AC + @- OR V: Long "pile" [pi:l@-] // AC[i]: Long "smidig" [smi:Di] +// Change the length of short vowels (?+vowel) +procedure ShortVowelLength +// "endelig" - Short initial vowel sounds too short +IF thisPh(isWordStart) THEN + length 160 + RETURN +ENDIF +// "slutte" t/d + @- makes the u too long +IF next2PhW(@-) THEN + IF nextPhW(t) OR nextPhW(d) THEN + //length 100 + LengthAdd -50 + // Don't shorten it further if it comes after an "r" sound + // Exit the procedure + RETURN + ENDIF +ENDIF +// "bygget" - consonant + [@-D] makes the vowel too long +IF next2PhW(@-) THEN + IF next3PhW(t) OR next3PhW(d) OR next3PhW(D) THEN + LengthAdd -50 + // Don't shorten it further if it comes after an "r" sound ("brygget") + // Exit the procedure + RETURN + ENDIF +ENDIF +// "bygger" - consonant + [V] makes the vowel too long +IF nextPhW(isNotVowel) AND next2PhW(V) THEN + LengthAdd -50 + // Don't shorten it further if it comes after an "r" sound ("brygger") + // Exit the procedure + RETURN +ENDIF +// "rigtigt", "fred", "frem", "centralen" - R makes the vowel too long + IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN +// length 100 + LengthAdd -50 + ENDIF +// "ring", "ringe", "fængsel" + IF nextPhW(N) THEN +// length 100 + LengthAdd -10 + ENDIF +// "sigte" t/d + @- makes the vowel too long + IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) THEN + IF next3PhW(@-) THEN +// length 100 + LengthAdd -50 + ENDIF + ENDIF +endprocedure + +// Change the length of normal vowels (without ? in front of them) +procedure LongVowelLength +// "alene" - Short initial vowel sounds too short at length 140 +IF thisPh(isWordStart) THEN + length 160 + RETURN +ENDIF +// "forlade" - [D@-] makes the vowel too long +IF nextPhW(D) AND next2PhW(@-) THEN + length 180 + RETURN +ENDIF +// PB long vowel followed by [@-] or [V](vowel+vowel) - "pigen" [p'i@-n] + IF nextPhW(@-) OR nextPhW(V) THEN + length 225 + ENDIF +// PB "enig", "enige", "evig", "stædig" - vowel+consolant+[i] + IF nextPhW(isNotVowel) AND next2PhW(i) THEN + length 225 + ENDIF +// "ræve", "dele", "mene", "røve", "møve" +IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(3) OR next3PhW(@-) THEN + length 225 +ENDIF +// "vilje", "nedladende" [n'eDl&D@-n@-], "delte" - short followed by 2 consonants + IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN + // Don't make "møve" [m'Ww_!@-_!] short + IF NOT next2PhW(_!) THEN + length 140 + ENDIF + ENDIF +// "bryde", "bryder", "strålen", "henrivende" R makes the vowel too long + IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN + IF next2PhW(@-) OR next2PhW(V) THEN +// length 180 + LengthAdd -70 + ENDIF + ENDIF + // "syste", "sylte" t/d/D + @- makes the vowel too long + // "international", - added [V] TEST + IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) OR next2PhW(D) THEN + IF next3PhW(@-) OR next3PhW(V) THEN + length 110 + ENDIF + ENDIF +// "glimrende" [l/3] makes the following vowel too long +// LengthAdd doesn't work here. The length could be 225 or 140 - 30 + IF prevPhW(l/3) THEN +// LengthAdd -30 + length 110 + ENDIF +// "længe" - short - 2 consonants => 1 consonant (ng => [N]) +IF nextPhW(N) THEN + length 140 +ENDIF +endprocedure + +// A bit longer than [@-] phoneme @ vowel starttype #@ endtype #@ unstressed @@ -59,26 +169,12 @@ phoneme i length 140 // Long vowel followed by consonant and @- "gide", "pile" IF nextPhW(isNotVowel) AND next2PhW(@-) THEN - length 225 +// length 225 ENDIF // "gider", vrider" IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN length 140 ENDIF -// PB long vowel followed by [@-] - "pigen" [p'i@-n] -IF nextPhW(@-) OR nextPhW(V) THEN - length 225 -ENDIF -// "vilje" - short followed by 2 consonants -IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN - length 140 -ENDIF -// PB "tie", "stige", "krige" vowel + vowel: extra length -// What is causing this very short [i] in words with final [@-]? -// NOT "galleriet" [g,?&lVR'i@-D] -IF nextPhW(V) OR nextPhW(@) OR nextPhW(@-) AND NOT next2PhW(D) THEN -// length 240 -ENDIF //"skider" short IF nextPhW(D) AND next2PhW(V) THEN length 140 @@ -87,7 +183,7 @@ ENDIF IF nextPhW(D) AND next2PhW(V) AND next3PhW(V) THEN length 225 ENDIF - +CALL LongVowelLength FMT(vowel/i_4) endphoneme @@ -95,7 +191,8 @@ endphoneme // sviret vs. svirret phoneme ?i vowel starttype #i endtype #i - length 100 + length 140 + CALL ShortVowelLength IfNextVowelAppend(;) FMT(vowel/i_4) endphoneme @@ -111,22 +208,8 @@ endphoneme phoneme e vowel starttype #e endtype #e length 140 -// "dele", "mene" -IF next2PhW(@-) THEN - length 225 -ENDIF -// PB "ring", "ringe" -IF nextPhW(N) THEN - length 140 -ENDIF -// PB "enig", "enige", "evig" -IF nextPhW(isNotVowel) AND next2PhW(i) THEN - length 225 -ENDIF -// "nedladende" [n'eDl&D@-n@-], "delte" - before 2 consonants: short -IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN - length 140 -ENDIF + CALL LongVowelLength + CALL ShortVowelLength FMT(vowel/e) endphoneme @@ -135,14 +218,7 @@ endphoneme phoneme ?e vowel starttype #e endtype #e length 140 -// "rigtigt" R makes the e too long - IF prevPhW(R) THEN - length 100 - ENDIF -// "sigte" t/d + @- makes the e too long -IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) AND next3PhW(@-) THEN - length 100 -ENDIF + CALL ShortVowelLength FMT(vowel/e) endphoneme @@ -153,29 +229,18 @@ phoneme E IF thisPh(isWordEnd) THEN IfNextVowelAppend(_!) ENDIF - // "ræve" -IF nextVowel(@-) THEN - length 225 -ENDIF -// "ære", "kærester", "ærefrygt" - longer E +// "ære", "kærester", "ærefrygt" - vowel + vowel IF nextPhW(V) THEN length 225 ENDIF -// "stædig" [st'EDi] long -IF nextPhW(isNotVowel) AND next2PhW(i) THEN +// "dræber" TEST shortened by -70 in procedure because of the "r" sound +IF prevPhW(R) OR prevPhW(r) OR prevPhW(3-) AND next2PhW(V) THEN length 225 ENDIF -// "længe" - short - 2 consonants => 1 consonant -IF nextPhW(N) THEN - length 140 -ENDIF + CALL LongVowelLength // "værelse" [v'E3-Vls@_!] IF nextPhW(3-) AND next2PhW(V) THEN length 100 -ENDIF -// "mælkebøtte" - short followed by 2 consonants -IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN - length 140 ENDIF FMT(vowel/e_mid2) endphoneme @@ -186,14 +251,7 @@ phoneme ?E vowel starttype #e endtype #e ipa ε length 140 - // "fred" R makes the E too long - IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN - length 100 - ENDIF -// "fængsel" N makes the E too long - IF nextPhW(N) THEN - length 100 - ENDIF + CALL ShortVowelLength FMT(vowel/e_mid2) endphoneme @@ -203,22 +261,17 @@ phoneme & length 140 // "same", "sale", "bade" - consonant + @-: long // but NOT "hinanden" -IF next2PhW(@-) OR next2PhW(@) AND NOT next3PhW(n) THEN - length 225 +IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(@) THEN + IF NOT next3PhW(n) THEN + length 225 + ENDIF ENDIF // ThisPh + V or @- // "ae", "aer" vowel + vowel: extra length IF nextPhW(@-) OR nextPhW(V) THEN length 260 ENDIF -// "stadig" [st&Di], "stadigt" [st&Dit] -IF nextPhW(isNotVowel) AND next2PhW(i) THEN - length 225 -ENDIF -// "Alfie", "alfer" - short before 2 consonants -IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN - length 140 -ENDIF +CALL LongVowelLength FMT(vowel/ee_2) endphoneme @@ -228,7 +281,7 @@ endphoneme phoneme ?& vowel starttype #e endtype #e length 140 - FMT(vowel/ee_2) + FMT(vowel/ee_2) endphoneme // Added for the æ in "dræbt" @@ -236,6 +289,8 @@ phoneme &# vowel starttype #e endtype #e length 140 ipa a + CALL LongVowelLength +// CALL ShortVowelLength FMT(vowel/&) endphoneme @@ -243,40 +298,28 @@ endphoneme // "revl" vs. "tremme" phoneme ?&# vowel starttype #e endtype #e - length 120 + length 140 + CALL ShortVowelLength FMT(vowel/&) endphoneme phoneme A // PB changed to a_8 vowel starttype #a endtype #a length 140 -// PB long vowel followed by consonant and certain vowels - "drabelig" -IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(V) THEN - length 225 -ENDIF -// "bange" [bAN@-] - [N] = 2 consonants (ng) => short -IF nextPhW(N) THEN - length 140 -ENDIF +CALL LongVowelLength // "fare" [f'A:A] IF nextPhW(A) THEN length 225 -ENDIF -// "gratis" -IF next2PhW(i) THEN - length 225 -ENDIF -IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN - length 140 ENDIF FMT(vowel/a_8) endphoneme // PB short A -// "drab" vs. "drabelig" +// "krabbe" vs. "drabelig" phoneme ?A vowel starttype #a endtype #a length 140 +CALL ShortVowelLength FMT(vowel/a_8) endphoneme @@ -287,10 +330,7 @@ phoneme u IF nextPhW(@-) OR nextPhW(V) OR next2PhW(@-) OR next2PhW(V)THEN length 225 ENDIF -// "umulig" [u:m'uli] -IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN - length 225 -ENDIF +CALL LongVowelLength FMT(vowel/u_bck) endphoneme @@ -299,10 +339,7 @@ endphoneme phoneme ?u vowel starttype #u endtype #u length 140 -// "slutte" t/d + @- makes the u too long -IF nextPhW(t) OR nextPhW(d) AND next2PhW(@-) THEN - length 100 -ENDIF + CALL ShortVowelLength FMT(vowel/u_bck) endphoneme @@ -317,10 +354,7 @@ ENDIF IF next2PhW(V) OR next2PhW(@-) THEN length 225 ENDIF -// "modig" - long vowel after consonant + [i] -IF nextPhW(D) AND next2PhW(i) THEN - length 225 -ENDIF +CALL LongVowelLength FMT(vowel/o_2) endphoneme @@ -344,14 +378,11 @@ ENDIF IF nextPhW(V) OR nextPhW(@-) THEN length 225 ENDIF -// "rådig" -IF nextVowel(i) AND nextVowel(isFinalVowel) THEN - length 225 -ENDIF // "såre", "sårede" [s'O:?OD@-] IF nextPhW(O) OR nextPhW(?O) THEN length 225 ENDIF +CALL LongVowelLength FMT(vowel/o_5) endphoneme @@ -366,14 +397,7 @@ endphoneme phoneme V vowel starttype #@ endtype #@ length 140 -// "forlig" -IF nextPhW(isNotVowel) AND next2PhW(i) THEN - length 225 -ENDIF -// PB "konge" - ng=>n -IF nextPhW(N) THEN - length 140 -ENDIF +CALL LongVowelLength FMT(vowel/V_4) endphoneme @@ -387,10 +411,8 @@ endphoneme phoneme 0 vowel starttype #o endtype #o - length 140 //225 -IF nextPhW(3) OR nextPhW(V) OR nextPhW(@-) THEN - length 225 -ENDIF + length 140 + ipa ɔ FMT(vowel/oo_2) endphoneme @@ -398,6 +420,7 @@ endphoneme phoneme ?0 vowel starttype #o endtype #o length 140 + ipa ɔ FMT(vowel/oo_2) endphoneme @@ -407,24 +430,20 @@ phoneme y // PB long vowel followed by consonant and certain vowels // "gyde", "gyder" IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(V) THEN - length 225 -ENDIF -// "dydig" [dyDi] -IF nextPhW(isNotVowel) AND next2PhW(i) THEN - length 225 + // not "gebyret" TEST + IF NOT nextPhW(3-) AND NOT nextPhW(R) AND NOT nextPhW(r) THEN + length 225 + ENDIF ENDIF // "syge" [sy@-] vowel + vowel: extra length, but NOT "fyret" [fyVD] IF nextPhW(@-) OR nextPhW(3) AND NOT next2PhW(D) THEN length 225 ENDIF // "tyve" -IF nextPhW(?u) AND next2PhW(@-) THEN +IF nextPhW(w) AND next2PhW(@-) THEN length 225 ENDIF -// "bryde" R makes the y too long - IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN - length 180 - ENDIF +CALL LongVowelLength FMT(vowel/y) endphoneme @@ -433,25 +452,14 @@ endphoneme phoneme ?y vowel starttype #i endtype #i length 140 -// "udrydde" R makes the y too long - IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN - length 100 - ENDIF -// "hytte" t/d + @- makes the y too long -IF nextPhW(t) OR nextPhW(d) AND next2PhW(@-) THEN - length 100 -ENDIF + CALL ShortVowelLength FMT(vowel/y) endphoneme phoneme Y vowel starttype #i endtype #i - length 225 -IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN - glstop - length 140 -ENDIF -IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN + length 140 +IF nextPhW(V) OR nextPhW(@-) THEN length 225 ENDIF FMT(vowel/yy) @@ -460,34 +468,15 @@ endphoneme phoneme W vowel starttype #@ endtype #@ length 140 -// "kløe" vowel + vowel: long -IF nextPhW(@-) THEN - length 225 -ENDIF -// "røve" W + 1 consonant + 3 or W or @ -IF next2PhW(@-) OR next2PhW(3) THEN - length 225 -ENDIF // "røveri" but NOT "surfer" [sWfV] TEST IF next2PhW(V) OR next2PhW(?V) AND NOT next2PhW(isFinalVowel) THEN length 140 ENDIF -// PB "nødig", "nødigt", "kølige" - long -IF nextVowel(i) THEN - length 225 -ENDIF -// "møve" [mWw@-] - long -IF nextPhW(w) AND nextVowel(@-) THEN - length 225 -ENDIF // "børnebog" - short IF nextPhW(r) AND next2PhW(n) AND next3PhW(@-) THEN length 140 ENDIF -// PB "synge" -IF nextPhW(N) THEN - length 140 -ENDIF +CALL LongVowelLength FMT(vowel/oe) endphoneme @@ -496,10 +485,7 @@ endphoneme phoneme ?W vowel starttype #@ endtype #@ length 140 -// "bryllup", "rødder" R makes the y too long - IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN - length 100 - ENDIF + CALL ShortVowelLength FMT(vowel/oe) endphoneme @@ -519,6 +505,7 @@ endphoneme phoneme ?W# vowel starttype #@ endtype #@ length 140 + CALL ShortVowelLength FMT(vowel/V) endphoneme @@ -562,24 +549,6 @@ endphoneme phoneme l/3 // Replacement for [l/] liquid lengthmod 7 - - IF nextPhW(isVowel) THEN -// ChangePhoneme(l) - ENDIF - - PrevVowelEndings - VowelEnding(l/l_@) - VowelEnding(l/l_a) - VowelEnding(l/l_e, -50) // hjælpe - VowelEnding(l/l_i, -70) // flygte? - VowelEnding(l/l_o, -60) // stole, skole, hjulpet - VowelEnding(l/l_u, -70) - EndSwitch - -// IF nextPh(isLiquid) THEN -// FMT(l/_l) -// ENDIF - FMT(l/l_) endphoneme diff --git a/phsource/ph_english_us b/phsource/ph_english_us index fdfc2909..760ede5e 100644 --- a/phsource/ph_english_us +++ b/phsource/ph_english_us @@ -322,7 +322,7 @@ endphoneme phoneme aI3 vowel starttype #a endtype #@ - length 300 + length 310 ipa aɪɚ IfNextVowelAppend(r-) FMT(vwl_en_us/ai3) diff --git a/phsource/ph_tamil b/phsource/ph_tamil index a09cf775..ce006565 100644 --- a/phsource/ph_tamil +++ b/phsource/ph_tamil @@ -159,3 +159,7 @@ phoneme # // a NULL phoneme for 'virama' ChangePhoneme(NULL) endphoneme +phoneme z. + CALL base/z. + ipa U+027B +endphoneme diff --git a/phsource/vwl_en_us/er b/phsource/vwl_en_us/er index 064276ad..6dff7167 100644 Binary files a/phsource/vwl_en_us/er and b/phsource/vwl_en_us/er differ diff --git a/phsource/vwl_en_us/oor b/phsource/vwl_en_us/oor index 3d6ca31e..302b7da4 100644 Binary files a/phsource/vwl_en_us/oor and b/phsource/vwl_en_us/oor differ diff --git a/src/compiledata.cpp b/src/compiledata.cpp index a9307d25..a275558d 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -3059,6 +3059,7 @@ int CompilePhoneme(int compile_phoneme) case kRETURN: *prog_out++ = i_RETURN; + DecThenCount(); break; case kINCLUDE: diff --git a/src/numbers.cpp b/src/numbers.cpp index ce94948b..f8192a64 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -699,11 +699,38 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) else language = L('e','n'); - if(language != tr->translator_name) + if((language != tr->translator_name) || (language == L('k','o'))) { + char *p3; + int initial, code; + char hangul_buf[12]; + // speak in the language for this alphabet (or English) ph_buf[2] = SetTranslator2(WordToString2(language)); - LookupLetter(translator2, letter, word[n_bytes], &ph_buf[3], control & 1); + + if(((code = letter - 0xac00) >= 0) && (letter <= 0xd7af)) + { + // Special case for Korean letters. + // break a syllable hangul into 2 or 3 individual jamo + + hangul_buf[0] = ' '; + p3 = &hangul_buf[1]; + if((initial = (code/28)/21) != 11) + { + p3 += utf8_out(initial + 0x1100, p3); + } + utf8_out(((code/28) % 21) + 0x1161, p3); // medial + utf8_out((code % 28) + 0x11a7, &p3[3]); // final + p3[6] = ' '; + p3[7] = 0; + ph_buf[3] = 0; + TranslateRules(translator2, &hangul_buf[1], &ph_buf[3], sizeof(ph_buf)-3, NULL, 0, NULL); + SetWordStress(translator2, &ph_buf[3], NULL, -1, 0); + } + else + { + LookupLetter(translator2, letter, word[n_bytes], &ph_buf[3], control & 1); + } if(ph_buf[3] == phonSWITCH) { diff --git a/src/phonemelist.cpp b/src/phonemelist.cpp index 027949cf..b514ddd2 100644 --- a/src/phonemelist.cpp +++ b/src/phonemelist.cpp @@ -125,6 +125,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) int delete_count; int word_start; int inserted; + int deleted; PHONEME_DATA phdata; int n_ph_list3; @@ -343,6 +344,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) plist3 = &ph_list3[j]; inserted = 0; + deleted = 0; if(insert_ph != 0) { // we have a (linking) phoneme which we need to insert here @@ -431,23 +433,27 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) plist3->phcode = alternative; if(alternative == 1) - continue; // NULL phoneme, discard - - if(ph->type == phVOWEL) { - plist3->synthflags |= SFLAG_SYLLABLE; - if(ph2->type != phVOWEL) - plist3->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed + deleted = 1; // NULL phoneme, discard } else - plist3->synthflags &= ~SFLAG_SYLLABLE; + { + if(ph->type == phVOWEL) + { + plist3->synthflags |= SFLAG_SYLLABLE; + if(ph2->type != phVOWEL) + plist3->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed + } + else + plist3->synthflags &= ~SFLAG_SYLLABLE; - // re-interpret the changed phoneme - // But it doesn't obey a second ChangePhoneme() - InterpretPhoneme(tr, 0x100, plist3, &phdata, &worddata); + // re-interpret the changed phoneme + // But it doesn't obey a second ChangePhoneme() + InterpretPhoneme(tr, 0x100, plist3, &phdata, &worddata); + } } - if(ph->type == phVOWEL) + if((ph->type == phVOWEL) && (deleted == 0)) { PHONEME_LIST *p; @@ -552,7 +558,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) } } - if(plist3 != plist3_inserted) + if((plist3 != plist3_inserted) && (ix > 0)) { if((x = (tr->langopts.word_gap & 0x7)) != 0) { @@ -585,51 +591,54 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) // not yet implemented } - phlist[ix].ph = ph; - phlist[ix].type = ph->type; - phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module - phlist[ix].synthflags = plist3->synthflags; - phlist[ix].stresslevel = plist3->stresslevel & 0xf; - phlist[ix].wordstress = plist3->wordstress; - phlist[ix].tone_ph = plist3->tone_ph; - phlist[ix].sourceix = 0; - phlist[ix].phcode = ph->code; - - if(plist3->sourceix != 0) + if(deleted == 0) { - phlist[ix].sourceix = plist3->sourceix; - phlist[ix].newword = 1; // this phoneme is the start of a word + phlist[ix].ph = ph; + phlist[ix].type = ph->type; + phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module + phlist[ix].synthflags = plist3->synthflags; + phlist[ix].stresslevel = plist3->stresslevel & 0xf; + phlist[ix].wordstress = plist3->wordstress; + phlist[ix].tone_ph = plist3->tone_ph; + phlist[ix].sourceix = 0; + phlist[ix].phcode = ph->code; - if(start_sentence) + if(plist3->sourceix != 0) { - phlist[ix].newword = 5; // start of sentence + start of word - start_sentence = 0; + phlist[ix].sourceix = plist3->sourceix; + phlist[ix].newword = 1; // this phoneme is the start of a word + + if(start_sentence) + { + phlist[ix].newword = 5; // start of sentence + start of word + start_sentence = 0; + } + } + else + { + phlist[ix].newword = 0; } - } - else - { - phlist[ix].newword = 0; - } -// phlist[ix].length = ph->std_length; - phlist[ix].length = phdata.pd_param[i_SET_LENGTH]*2; - if((ph->code == phonPAUSE_LONG) && (option_wordgap > 0)) - { - phlist[ix].ph = phoneme_tab[phonPAUSE_SHORT]; - phlist[ix].length = option_wordgap*14; // 10mS per unit at the default speed - } + // phlist[ix].length = ph->std_length; + phlist[ix].length = phdata.pd_param[i_SET_LENGTH]*2; + if((ph->code == phonPAUSE_LONG) && (option_wordgap > 0) && (plist3[1].sourceix != 0)) + { + phlist[ix].ph = phoneme_tab[phonPAUSE_SHORT]; + phlist[ix].length = option_wordgap*14; // 10mS per unit at the default speed + } - if(ph->type==phVOWEL || ph->type==phLIQUID || ph->type==phNASAL || ph->type==phVSTOP || ph->type==phVFRICATIVE || (ph->phflags & phPREVOICE)) - { - phlist[ix].length = 128; // length_mod - phlist[ix].env = PITCHfall; - } + if(ph->type==phVOWEL || ph->type==phLIQUID || ph->type==phNASAL || ph->type==phVSTOP || ph->type==phVFRICATIVE || (ph->phflags & phPREVOICE)) + { + phlist[ix].length = 128; // length_mod + phlist[ix].env = PITCHfall; + } - phlist[ix].prepause = 0; - phlist[ix].amp = 20; // default, will be changed later - phlist[ix].pitch1 = 255; - phlist[ix].pitch2 = 255; - ix++; + phlist[ix].prepause = 0; + phlist[ix].amp = 20; // default, will be changed later + phlist[ix].pitch1 = 255; + phlist[ix].pitch2 = 255; + ix++; + } } phlist[ix].newword = 2; // end of clause diff --git a/src/readclause.cpp b/src/readclause.cpp index ea8bcbbb..049ef18d 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -85,6 +85,7 @@ static const unsigned short punct_chars[] = {',','.','?','!',':',';', 0x055e, // Armenian question 0x055b, // Armenian emphasis mark + 0x060c, // Arabic , 0x061b, // Arabic ; 0x061f, // Arabic ? 0x06d4, // Arabic . @@ -132,6 +133,7 @@ static const unsigned int punct_attributes [] = { 0, CLAUSE_QUESTION | PUNCT_IN_WORD, // Armenian question CLAUSE_PERIOD | PUNCT_IN_WORD, // Armenian emphasis mark + CLAUSE_COMMA, // Arabic , CLAUSE_SEMICOLON, // Arabic ; CLAUSE_QUESTION, // Arabic question mark CLAUSE_PERIOD, // Arabic full stop diff --git a/src/setlengths.cpp b/src/setlengths.cpp index 392faa2b..785e14fd 100644 --- a/src/setlengths.cpp +++ b/src/setlengths.cpp @@ -575,6 +575,7 @@ void CalcLengths(Translator *tr) int last_pitch = 0; int pitch_start; int length_mod; + int next2type; int len; int env2; int end_of_clause; @@ -689,8 +690,19 @@ void CalcLengths(Translator *tr) p->prepause = 40; - if((prev->type == phPAUSE) || (prev->type == phVOWEL)) // || (prev->ph->mnemonic == ('/'*256+'r'))) - p->prepause = 0; + if(prev->type == phVOWEL) + { + p->prepause = 0; // use murmur instead to link from the preceding vowel + } + else + if(prev->type == phPAUSE) + { + // reduce by the length of the preceding pause + if(prev->length < p->prepause) + p->prepause -= prev->length; + else + p->prepause = 0; + } else if(p->newword==0) { @@ -827,9 +839,17 @@ if(stress <= 1) next3 = &phoneme_list[ix+4]; } + next2type = next2->ph->length_mod; if(more_syllables==0) { - len = tr->langopts.length_mods0[next2->ph->length_mod *10+ next->ph->length_mod]; + if(next->newword || next2->newword) + { + // don't use 2nd phoneme over a word boundary, unless it's a pause + if(next2type != 1) + next2type = 0; + } + + len = tr->langopts.length_mods0[next2type *10+ next->ph->length_mod]; if((next->newword) && (tr->langopts.word_gap & 0x20)) { @@ -841,7 +861,7 @@ if(stress <= 1) } else { - length_mod = tr->langopts.length_mods[next2->ph->length_mod *10+ next->ph->length_mod]; + length_mod = tr->langopts.length_mods[next2type *10+ next->ph->length_mod]; if((next->type == phNASAL) && (next2->type == phSTOP || next2->type == phVSTOP) && (next3->ph->phflags & phFORTIS)) length_mod -= 15; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index b6fe3fbf..92c61ac4 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.03e 29.Mar.13"; +const char *version_string = "1.47.03f 31.Mar.13"; const int version_phdata = 0x014701; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 5a325c37..2a6e4645 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -93,12 +93,12 @@ ALPHABET alphabets [] = { {"_ti", OFFSET_TIBET, 0xf00, 0xfff, 0, 0}, {"_my", OFFSET_MYANMAR, 0x1000,0x109f, 0, 0}, {"_ka", OFFSET_GEORGIAN, 0x10a0,0x10ff, L('k','a'), AL_WORDS}, - {"_ko", OFFSET_KOREAN, 0x1100,0x11ff, 0, 0}, + {"_ko", OFFSET_KOREAN, 0x1100,0x11ff, L('k','o'), AL_WORDS}, {"_eth", OFFSET_ETHIOPIC, 0x1200,0x139f, 0, 0}, {"_braille", 0x2800, 0x2800,0x28ff, 0, AL_NO_SYMBOL}, {"_ja", 0x3040, 0x3040,0x30ff, 0, AL_NOT_CODE}, {"_zh", 0x3100, 0x3100,0x9fff, 0, AL_NOT_CODE}, - {"_ko", 0xa700, 0xa700,0xd7ff, 0, AL_NOT_CODE}, + {"_ko", 0xa700, 0xa700,0xd7ff, L('k','o'), AL_NOT_CODE | AL_WORDS}, {NULL, 0, 0, 0, 0, 0} }; diff --git a/src/translate.cpp b/src/translate.cpp index eeafb2c5..1a0471d9 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -1732,6 +1732,7 @@ int SetTranslator2(const char *new_language) translator2->phoneme_tab_ix = new_phoneme_tab; } } + translator2->phonemes_repeat[0] = 0; return(new_phoneme_tab); } // end of SetTranslator2 @@ -2440,6 +2441,35 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c, 0x72,0x73,0x74,0x75 }; + // check for Korean Hangul letters + if(((code = c - 0xac00) >= 0) && (c <= 0xd7af)) + { + // break a syllable hangul into 2 or 3 individual jamo + initial = (code/28)/21; + medial = (code/28) % 21; + final = code % 28; + + if(initial == 11) + { + // null initial + c = medial + 0x1161; + if(final > 0) + *insert = final + 0x11a7; + } + else + { + // extact the initial and insert the remainder with a null initial + c = initial + 0x1100; + *insert = (11*28*21) + (medial*28) + final + 0xac00; + } + return(c); + } + else if(((code = c - 0x3130) >= 0) && (code < 0x34)) + { + // Hangul compatibility jamo + return(hangul_compatibility[code] + 0x1100); + } + switch(tr->translator_name) { case L('a','f'): @@ -2467,36 +2497,6 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c, } } break; - - case L('k','o'): - if(((code = c - 0xac00) >= 0) && (c <= 0xd7af)) - { - // break a syllable hangul into 2 or 3 individual jamo - initial = (code/28)/21; - medial = (code/28) % 21; - final = code % 28; - - if(initial == 11) - { - // null initial - c = medial + 0x1161; - if(final > 0) - *insert = final + 0x11a7; - } - else - { - // extact the initial and insert the remainder with a null initial - c = initial + 0x1100; - *insert = (11*28*21) + (medial*28) + final + 0xac00; - } - return(c); - } - else if(((code = c - 0x3130) >= 0) && (code < 0x34)) - { - // Hangul compatibility jamo - return(hangul_compatibility[code] + 0x1100); - } - break; } return(SubstituteChar(tr, c, next_in, insert, wordflags)); } @@ -2951,7 +2951,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre } else { - if(iswlower(prev_in)) + if((iswlower(prev_in)) && (prev_in != 0xba)) // Windows thinks masc.ordinal (0xba) is lower-case { // lower case followed by upper case in a word if(UpperCaseInWord(tr, &sbuf[ix], c) == 1) diff --git a/src/voices.cpp b/src/voices.cpp index a762abdf..c0486025 100644 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -1883,12 +1883,24 @@ void FreeVoiceList() ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) {//======================================================================== -#ifndef PLATFORM_RISCOS + char path_voices[sizeof(path_home)+12]; + + +#ifdef PLATFORM_RISCOS + if(n_voices_list == 0) + { + sprintf(path_voices,"%s%cvoices",path_home,PATHSEP); + len_path_voices = strlen(path_voices)+1; + GetVoices(path_voices); + voices_list[n_voices_list] = NULL; // voices list terminator + } + return((const espeak_VOICE **)voices_list); + +#else int ix; int j; espeak_VOICE *v; static espeak_VOICE **voices = NULL; - char path_voices[sizeof(path_home)+12]; // free previous voice list data FreeVoiceList(); @@ -1926,7 +1938,6 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) } return((const espeak_VOICE **)voices); #endif - return((const espeak_VOICE **)voices_list); } // end of espeak_ListVoices