From f2eed5229e30942ab841b1f9044da4c648b320a7 Mon Sep 17 00:00:00 2001 From: jonsd Date: Mon, 9 Nov 2009 13:11:13 +0000 Subject: [PATCH] [1.41.32] lang=hu, ordinal number fixes --punct, changes to intonation of punctuation names. Add language option: don't stress second part of hyphenated words. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@230 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/af_list | 89 +- dictsource/af_rules | 100 +- dictsource/da_list | 16 +- dictsource/da_rules | 1273 +++++++++-------- dictsource/dict_phonemes | 835 +++++------ dictsource/en_list | 13 +- dictsource/en_rules | 24 +- dictsource/fr_list | 17 +- dictsource/fr_rules | 1 + dictsource/hu_list | 551 +++++-- dictsource/hu_rules | 155 +- dictsource/jbo_rules | 5 +- dictsource/ta_list | 49 +- dictsource/ta_rules | 125 +- phsource/compile_report | 25 +- phsource/n/_nr | Bin 643 -> 643 bytes phsource/n/nr_ | Bin 952 -> 953 bytes phsource/ph_danish | 25 +- phsource/ph_english | 6 +- phsource/ph_english_us | 12 +- phsource/ph_polish | 2 +- phsource/ph_tamil | 4 +- phsource/phonemes | 7 +- phsource/vdiph/aoo | Bin 1557 -> 1557 bytes phsource/vnasal/oo_n | Bin 7276 -> 7276 bytes phsource/vnasal/oo_n2 | Bin 1573 -> 1575 bytes phsource/vowel/ii_final | Bin 7280 -> 7280 bytes phsource/vwl_en/aU@ | Bin 7687 -> 7687 bytes phsource/vwl_en_us/ar | Bin 2154 -> 2460 bytes phsource/vwl_en_us/er | Bin 6238 -> 7274 bytes phsource/vwl_en_us/ir | Bin 6238 -> 7274 bytes platforms/windows/espeakedit/src/speech.h | 1 + .../windows/espeakedit/src_copy/speech.h | 1 + platforms/windows/windows_cmd/src/speech.h | 1 + platforms/windows/windows_sapi/src/speech.h | 1 + src/compiledict.cpp | 4 +- src/debug.h | 2 +- src/dictionary.cpp | 31 +- src/espeak.cpp | 111 +- src/espeakedit.cpp | 25 - src/intonation.cpp | 2 +- src/numbers.cpp | 304 ++-- src/phonemelist.cpp | 46 +- src/readclause.cpp | 159 +- src/speech.h | 6 + src/synthdata.cpp | 2 +- src/synthesize.cpp | 7 + src/tr_languages.cpp | 6 +- src/translate.cpp | 62 +- src/translate.h | 36 +- src/voices.cpp | 45 +- 51 files changed, 2553 insertions(+), 1633 deletions(-) diff --git a/dictsource/af_list b/dictsource/af_list index d804aec0..4d51d908 100755 --- a/dictsource/af_list +++ b/dictsource/af_list @@ -301,6 +301,7 @@ moorreesburg mur'e@sbWrx2 (thaba nchu) tab'A:||ntSu europa Y@r'o@pa nigel _^_EN +nineve nIn@fi outeniekwa @Ut@n'ikwa oxford _^_EN pelindaba p&l@nd'A:ba @@ -352,9 +353,12 @@ annalet anal'Et André 'andreI annette an'Et antoinette antun'Et +aristoteles arist'o@t@lEs +badenhorst bA:d@nhOrst barbara bA:b@ra basson $2 bea bi:ja +belcher _^_EN benade b@nA:di benjamin bEndZ@m@n bennett bEn@t @@ -364,6 +368,7 @@ betsie bEtsi beyers beI@rs blignault blIx2n@Ut blomerus blum'e@rWs +blum blum botha bo@ta bouwer b@U@r brian _^_EN @@ -371,6 +376,7 @@ bredenkamp bre@d@nkamp bruwer bruw'&:r caesar siz@r carl kA:r@L +carol _^_EN casanova kasan'o@va cecil sEs@l cecile s@si:l @@ -380,6 +386,7 @@ charles _^_EN charlie tSA:li charmaine SA:m'eI:n chopin S%OpA~ +clark _^_EN conradie $2 chris krIs christo krIstu @@ -392,11 +399,11 @@ christine kr@st'i:n cindy sIndi coetzee kuts'e@ cronjé krOnj'e@ +cussons kas@ns cynthia _^_EN dalene dal'e@n -daniël d'A:ni:@l -#zzz darwin _^_EN +daniël d'A:ni:@l david _^_EN (da vinci) da||v'intSi debora d@bo@ra @@ -423,17 +430,20 @@ elmien $2 elsabe &ls@bi elsabé &ls@bi emmarentia Emar'e~nSja +engelbrecht EN@lbr&x2t erasmus $2 ernest _^_EN -esegiël is'e@x2i:@l +esegiël is'e@x2i: @l estelle %ist&l etienne Eti@n eugene judZ'i:n eugène yZ'En farao fA:ro@ ferreira f@r&:r@ -filemon f'il@mOn +filemon f'il@mOn fischer fiS@r +floris $1 +fouché fuS'e@ fourie fur'i francina $2 francois franSwa @@ -445,6 +455,7 @@ georgina dZO:dZ'ina gerhard x2&rart gerhardus $2 gertruida $2 +gilbert _^_EN gloria glO:ria grange x2rA:nsi grové x2ruv'e@ @@ -466,7 +477,6 @@ ingrid iNgr@d isabel is@b&l iskariot isk'ariOt jaco jaku -jacques ZA:k james _^_EN jane _^_EN Jean ZA~n $capital @@ -474,11 +484,15 @@ jesebel je@s@b&l jimmy _^_EN joan _^_EN joey dZ@Ui +johl jo@l jones _^_EN jordaan $2 +joris $1 josef jo@s@f +josephina jo@s@f'ina juanita juan'ita julia _^_EN + khayyam kaj'am kelvin _^_EN kim _^_EN $capital krige krix2@ @@ -496,10 +510,10 @@ levi le@fi liesbet lisbEt louis luI louise luw'i:z -lukas l'ukas mackintosh _^_EN madelene mad@l'e@n mbeki mbE:ki +madelene mad@l'e@n magdalena $3 malan mal'an malherbe mal'&rb@ @@ -544,6 +558,7 @@ naudé nOd'e@ neil _^_EN nelson _^_EN niklaas niklA:s +olga Olga ontong OntON phillips fIl@ps pierre p'e@r @@ -551,9 +566,13 @@ petronella pe@trun'&la petrus pe@trWs phoebe fi:bi picasso pik'asu +piketberg pik'Etb&rx2 +pinokkio pin'Oki;u +pretorius pr@to@riWs quixote kix2'OtE rachmaninoff rax2m'aninOf rademeyer rA:d@meI@r +rall rA:l rebekka r@bEka reinette r@nEt renette r@nEt @@ -561,6 +580,7 @@ renée r@neI retha re@ta retief r@tif rhodes _^_EN +riekert rik@rt robert _^_EN ronel run'&l rossouw r@s@U @@ -570,6 +590,7 @@ rupert rup@rt salomo sA:l@mo@ samuel sA:my@l sandra sandra +sappho sapfu schalk sk'alk scheepers ske@p@rs schmidt Smit @@ -580,12 +601,14 @@ schutte skWt@ sebastian s@bastian servaas s@rfA:s shakespeare _^_EN +sheila Si:la sigmund sigmunt sophia suf'i:ja sophie _^_EN stephan ste@fan stephanus st@fA:nWs strauss straUs +stockenström stOk@nstro@m suzanne suz'A:n suzette suz'Et tania tanja @@ -593,8 +616,9 @@ telemann te@l@man terblanche t@rblA:nS theo tiu theron tr'On -timotheus t@m'o@tiWs +thessalonicense tEsalo@nis'E:ns@ thys teIs +timotheus t@m'o@tiWs toerien $2 totius to@SiWs trudie trudi @@ -607,6 +631,7 @@ vincent _^_EN violet _^_EN $capital visagie fis'A:x2i william _^_EN +wilson _^_EN yolande jul'and@ yvonne iv'On zyl seIl @@ -640,28 +665,29 @@ martini mart'i:ni naspers nasp&rs peugeot pW:Z@U (pick n pay) p,ik||@n||p'eI +porsche pOrS@ port pOrt $1 rover _^_EN sotho su:tu -thessalonicense tEsalo@nis'Ens@ toyota $2 venda vEnda volvo vOlvu wimpy wImpi -// some Bible names -levitikus $2 -deuteronomium dY@t@ro@n'o@miWm -josua j'o@Sia -jesaja $2 -jeremia j%e@r@m'ia -hosea hus'i:a -amos 'A:mOs -obadja o@b'atja -miga m'ix2a -habakuk h'abakWk -sefanja s@f'anja -sagaria sax2ar'ia -maleagi $3 + +// Some Bible names +amos 'A:mOs +deuteronomium dY@t@ro@n'o@miWm +habakuk h'abakWk +hosea hus'i:a +jeremia j%e@r@m'ia +jesaja $2 +josua j'o@Sia +levitikus $2 +maleagi $3 +miga m'ix2a +obadja o@b'atja +sagaria sax2ar'ia +sefanja s@f'anja // article @@ -813,7 +839,7 @@ allegro al'Egru almiskie $3 alom al_'Om alreeds $2 -alternatiewe $4 +altemit $3 amelee am@le@ amen A:mEn anale an'A:l@ @@ -853,11 +879,11 @@ capita kapita casino kas'i:n@U cedille s@dIl@ charisma kar'Isma -clichés kliS'eI:s cliché kliS'eI: crescendo kr@SEndu dadelik dA:d@lIk +dagorde dax2_Ord@ darem dar@m dekade dEk'A:d@ dekreling dEkre@l@N @@ -901,12 +927,14 @@ forte fOrt@ g'n x2In gaandeweg x2A:nd@v&x2 garages g@rA:dZ@s +gebrokener x2@bro@k@n@r gee x2e@ geen x2e@n geldelike x2&ld@l@k@ genade $2 genesis x2e@n@s@s //gesamentlik x2@sA:m@ntl@k +gewellys x2e@v@lleIs gladiator x2ladi'A:tOr globale x2lo@b'A:l@ gooi x2OI @@ -920,6 +948,7 @@ handtertjie hant&:rci hanou hA:n@U hardop hart?Op heeltemal he@lt@mal +heimat haImat hek h&k hekke h&k@ helaas he@l'A:s @@ -978,6 +1007,7 @@ libido l@bidu lokaas lOk_A:s londense lOnd@ns@ lord _^_EN +luidop lYyt_Op macaroni makar'o@ni madame mad'A:m @@ -1017,12 +1047,14 @@ nalatigheid nA:l'A:t@x2eIt namate $2 negeer n@x2e@r negering n@x2e@r@N +negester ne@x2@st&r netjies nE:icis netjiese nEicis@ netsowel nEtso@v&l nikswerd nIksv&:rt nimmermeer $1 nirvana n@rvA:na +nogeens nOx2_e@ns normale nOrm'A:l@ numeri nWm@ri @@ -1049,6 +1081,7 @@ ongeloof $1 ongelyk $1 ongemak $1 ongerief $1 +ongeriefie $1 ongewens $1 ongewensde $3 ongewoons $1 @@ -1081,13 +1114,16 @@ parkie $1 parte $1 patos pA:tOs patriotisme patri|ut'Ism@ +pedaledemping p@dA:l@dEmp@N penorent pEno@rEnt per p@r $only persent p@rsEnt petite p@tit pinotage pinut'A:Z pirouette p@ru:'Et +plaasjaap plA:sjA:p plasenta plas'Enta +poinsettia pOIns'Etia primate $2 (pro forma) pro@||f'Orma @@ -1098,6 +1134,7 @@ renaissance rEn@s'A~ns retoriek r@tur'ik rimpeling rImp@l@N rinkink $2 +rondeel $2 rooipers roIp&:rs roterende rut'e@r@nd@ rottenes rOt@nEs @@ -1132,8 +1169,11 @@ sonop sOn_Op sonore sun'o@r@ sover so@f&r staccato $2 +sterwens st&rv@ns stilswye $1 +subiet sWb'it suburbia sWb'Wrbija +swangerswaar swaN@rswA:r tanga taNga tango taNx2u @@ -1167,6 +1207,7 @@ verby f@rbeI verdere f&rd@r@ vererger f@r&rg@r ver f'&:r +vereduifie fe@r@dYyfi verg f&rx2 vergeleë f&:rx2@l,e@@ vergete f@rx2e@t@ diff --git a/dictsource/af_rules b/dictsource/af_rules index 0efffba3..ceff35a9 100755 --- a/dictsource/af_rules +++ b/dictsource/af_rules @@ -52,9 +52,10 @@ adole (ssen %ad%o@l@ // fix stress and vowel sounds: adolessent/-e/-adolessensie ad (vies %at // move default stress: advies/-brief/-komitee and many similar + af (gunstig %af // move default stress: afgunstig/-e C) agie A:x2i a (gitA %a // fix a sound: agitasie/(ge)agiteer - agte (los %ax2t@ // move default stress: agtelosig/-e/-heid + agte (losig %ax2t@ // move default stress: agtelosig/-e/-heid agter (dogt %ax2t@r // move default stress: agterdogtig and derivatives agtereen (volg %ax2t@r_%e@n // move default stress: agtereenvolgend/-e/-ens agter (oor %ax2t@r_ // move default stress: agteroor/-buig/-druk/-val, etc. @@ -69,6 +70,7 @@ @@@smokkel) ary %ar%eI // default stress: diamant-/drank-/dwelm-/goud-/kokaïensmokkelary, etc. amarula %am%arul%a // fix stress and a sounds: amarula and compounds a (ment %a // shorten a sound: perkament/testament and compounds + arends A:r@nts_ // fix e sound: arendsoog/-kloue/-nes argen (tA %arx2@n // move default stress: Argentinië/Argentyns/-e a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties @@ -78,6 +80,7 @@ C%C) asie A:si // restore default stress: bok-/dikmelkkasie and similar oub) asie A:si // restore default stress: oubasie/-s @form) asie A:si // restore default stress to compounds ending in -formasie: graniet-/grond-/rotsformasie, etc. + gl) asie A:si // restore default stress: wyn-/sjampanjeglasie, etc. pl) asie A:s%i // restore default stress: gemeenplasies/gemeenskapsplasies and similar Csp) asie A:s%i // restore default stress: vloer/kantoorspasie, etc. Cst) asie A:si // restore default stress: brandweer/spoorwegstasie and similar @@ -145,6 +148,7 @@ _k) a (nA %a //kanon and others apart %apart // fix stress: (bus-/klein)apartheid + aphro (dit %afr%u // fix stress and ph and o sounds: Aphrodite/-dities _) a (po %a // apollo/apostel apo (krieC %ap%u // fix stress and vowel sounds: apokrief/-iewe a (politi %A: // lengthen a sound: apolitiek/apolities/-e @@ -169,6 +173,7 @@ ar (gaï %ar // move default stress: argaïes/-e arge (tip %arx2@ // move default stress: argetipe/argetipies/-e ar (moedig %ar // move default stress: armoedig/-e/-heid + arm (salig %ar@-m // move default stress: armsalig/-e/-heid/-ste _) arte (ri %arte@ // fix stress and e sound: arterie/-ë/-s _) asbes %asbEs // fix stress and e sound: asbes and many compounds a (siel %a // shorten a sound and move default stress: asiel and compounds @@ -194,10 +199,12 @@ _) afge (@P4 'afx2@ // stress on 1st slb afgryslik %afx2reIsl@k // move default stress: afgryslik and derivatives vs. afgrys/-e af (hank %af // move default stress: afhanklik/-e/-heid, etc. + _) af (kerig %af // move stress: afkerig/-e/-heid _) af (komstig %af // move default stress: afkomstig afrik (aan %afr%ik // exception to af prefix and move stress to end afrikane (K %afr%ikA:n@ // move stress to end: Afrikaner and compounds afrika A:frika //Stress and 1st a sound: Afrika and compounds: Afrikatale/-state... + afro (dit %afr%u // alternate spelling: Afrodite/-dities af (sigte %af // move default stress: afsigtelik/-e/-heid af (skuw %af // move default stress: afskuwelik and derivatives vs afsku afsonderl %afsOn@rl // stress, avoid af_ prefix and -lik suffix: afsonderlik/-e/-heid @@ -207,6 +214,7 @@ afwesig %afve@s@x2 // to steer clear of pre- and suffixes af (wagten %af // move default stress: afwagtend/-e agenda %ax2End%a // fix stress and 1st a sound: agenda/-s/-punt, etc. + age (rend %ax2e@ // fix stress and vowel sounds: agerend/-e a (gonie %a // fix 1st a sound and move default stress: agonies/-e agonie (_N %ax2%uni // move stress to end: agonie agter (bak %ax2t@r // fix stress: agterbaks/-e/-heid @@ -314,6 +322,7 @@ aan (grensen %A:n // move default stress: aangrensend/-e aan (grypend %A:n // fix stress: aangrypend/-e aan (hangig %A:n // move default stress: aanhangig vs. aanhang + aan (hank %A:n // move default stress: aanhanklik/-e/-heid aan (houden %A:n // move default stress: aanhoudend/-e aan (lok %A:n // move default stress: aanloklik/-heid aan (lok_N A:n // restore default stress: aanlok @@ -501,6 +510,7 @@ bloed (stol bl%ut // move default stress: bloedstollend/-e _) blo (kka bl%O // move default stress: blokkade/-s and compounds _) blo (kkeer bl%O // move default stress: (ge)blokkeer/-der, etc. + blom (akker blOm_ // fix O sound, pause: blomakker/-s and compounds blon (dine bl%On // move default stress: blondine/-s bly (moed bl%eI // move default stress: blymoedig/-e/-heid bo (botie b%u // fix stress and 1st o sound: bobotie and compounds @@ -715,6 +725,7 @@ _) deli (ka d%El%i // delikaat/delikate delika (tess d%El%ik%a // move default stress: delikatesse/-s deli (rium d@lI // fix stress and vowel sounds: delirium and compounds + delphinium d%&lfini;Wm // fix stress and ph sound: delphinium and compounds @) dend (er d@nd // beduidender/behoudender _) den (dri d%En // dendriet/-e/dendrities/-e @@ -736,6 +747,7 @@ @C) derm (K d&r@-m // fix e sound of derm in compounds: nersdermklier/slukdermsiekte, etc. @) dderd (_ d@rt // ontredderd, se rule: dd d _) derge d&rx2@ // dergelik/-e + @) de (rosie t_%e@ // fix e sound, pause: winderosie/tyderosie and similar desibel dEsib&l // fix vowel sounds: desibel/-s de (skun d%E //deskundig/e in compounds _) des (po d%Es // move default stress: despoot/despote @@ -772,6 +784,7 @@ digi (ta d%ix2%i // move default stress: digitaal/digitale di (gK dI // force default stress: GEDIG/-TE/digbundel/digvorm, etc. digtere (K d@x2t@rE // move default stress: digteres/-se + dik (vell d@k // move default stress: dikvellig/-e/-heid dilemma d@lEma // dilemma and compounds dimen (si d@mEn // fix stress and 1st i sound: (ontwikkelings)dimensie, etc./-dimensioneel/-ele di (namie d%i // move default stress: dinamies/-e @@ -790,12 +803,13 @@ dis (koers d@s // move default stress: diskoers/-e diskre (s d@skrE // fix stress and e sound: diskresie/diskresionêre _) dis (kre d@s // move default stress: diskreet/-heid/-ste/diskrete + _) dis (kussA d@s // move default stress: diskussie/-s/diskusseer dis (loja d@s // move default stress: dislojaal/-lojale/-lojaliteit _) dis (oP3 d@s // disorganisasie/disoriënteer dis (pu d@s // move default stress: dispuut/dispute distro (fie d@str%u // fix stress and o sound: (spier)distrofie, etc. divide (nd d@v@dE //dividende etc. - d (_N t // + d (_ t // dj c // palatal stop _) dj dZ // regional: djy/djou/djulle, etc. @@ -871,9 +885,11 @@ @) d (roos t // fix d sound: draadrooster/maand-/strand-/veldroos @) d (rose_ t // fix d sound: maand-/strand-/veldrose @) d (rosie t // fix d sound: maand-/strand-/veldrosie/-s + _) drukke (ry dr%Wk@ // move default stress: drukkery and compounds @) d (t // drop d: breedte/handtekening/rondte/rondtrek... du (et d%u:w // fix stress and -ue-sound: (klavier)duet/-te, etc. @n) d (uit t_ // fix d sound and insert short break: enduit/handuit and similar + verby) dw dw // fix d sound: verbydwarrel/-dwaal/-dwing dwelm (_ dw&l@-m // fix d and e sounds in compounds like wonderdwelm dw (erg dw // fix d sound: tuindwerg/-e/-ie @) dwes tv'Es // noordwes/te/lik/e suidwes/te/lik/e @@ -890,6 +906,8 @@ CAC) e (CC @ // fix e sound: nalatenskap/wapenstilstand CAC) e (C% E // beesfilette/nougesette/onderbesette/voortgesette blind) e (C@ @ // fix e sound in compounds like: blindekol/-mol/-wese + vreugd) e (C @ // fix e sound: vreugdefees/-klokkies/-lied/-tyd... + vriend) e (C @ // fix e sound: vriendepaar/-woorde juwel) e (C @ // fix e sound: juwelekissie and similar compounds fontein) e (C @_ // fix e sound: Fonteinesirkel/-wisselaar, etc. kening) e (@ @ // fix e sound: rekeningeklerk/-navraag and similar @@ -920,6 +938,7 @@ naald) e (C @ // fix e sound: naaldekoker/-kussing/-werk, etc. noord) e (C @ // fix e sound: noordewind and compounds Colw) e (C @ // fix e sound: golweslag/wolwedans + bolw) e (rk_ & // exception to above: fix e sound: bolwerk and compounds ros) e (CA @ // fix e sound: rosegeur/roseweg slang) e (C @ // fix e sound: slangebesweerder/-diens/-draer/-gebroedsel/-kuil/-teelt speld) e (C @ // fix e sound: speldekop/-kussing/-punt, etc. @@ -1091,8 +1110,10 @@ ss) eer 'e@r // but many words cont. sseer take stress: adresseer, etc. Cv) eer e@r // stress: (hoender/volstruisveer/dryfveer AAv) eer e@r // restore default stress: pouveer/makouveer/horlosieveer/kraaiveer/rooiveer + Cev) eer e@r // restore default stress: duiwe-/haneveer w) eer e@r // stress may vary in words containing weer: lugafweer/donderweer u) eer 'e@r // aktueer/konstrueer/salueer, etc. + @) eerdheid 'e@rtheIt // fix stress: geraffineerdheid/ongedissiplineerdheid, etc. effek (K %ifEk // move default stress and fix e sound: effek/-te/-tief/rimpeleffek eienaardig %eI@nA:rd@x2 // move default stress: eienaardig/-ste @) ein (dig 'eIn // nimmereindige/nimmereindigend @@ -1120,6 +1141,7 @@ C) ema (_ e@ma // words ending in ema: compounds of skema/tema emfi (seem %Emf%i // move default stress: emfiseem and compounds C) enaar @nA:r // eienaar/lessenaar + C) enare (_ @nA:r@ // fix e sound: towenare and similar C) enier @n'i:r // kruidenier/spysenier/valkenier/Renier C) enheid @nheIt // opgewondenheid/bedorwenheid and many similar _) enorm e@n'Or@_m // enorm/-s, pronunc. of rm @@ -1152,6 +1174,7 @@ e (gK & @C) e (groep @ // fix e sound: beelde-/vriendegroep _) ega (l %e@x2A: // stress: egalig/-e + egosentrie %e@x2%usEntri // fix stress and o sound: egosentries/-e _) e (gipt %e@ // move default stress: Egipte/Egiptenaar/Egipties C) ektomie 'Ektumi // histerektomie/vasektomie &) elik (ing @l@k // verduideliking/s/vergoddeliking/verstedeliking @@ -1229,6 +1252,7 @@ ff) er (@ @r // keffertjie/koffersleutel/offerande/opoffering stoff) er (A 'e@r // exception to rule: ff) er (@ @ C) eres @r'Es // ...onderwyseres + @dans) ere (K @rE // fix stress: beroeps-/waaierdanseres/-se/-sie, etc. C) eress @r'Es // onderwyseresse/-sie &) e (m_ @ &l) e (m_ E // compounds ending in lem @@ -1266,10 +1290,10 @@ _rasp) e (r @ // fix e sound in rasper- compounds: raspertong/-vyl, etc./rasperend werp) e (rsA @ // fix e sound: ontwerpersolie/-sonbril/-uitrusting lew) e (ns @ - &d) e (r@+ @ // not initial or final syllable + &d) e (r@++ @ // not initial or final syllable skuld) erke _&rkE // fix e sound: skulderkentennis/-erkenning @C) e (reë @ // fix e sound: geelperskereën/tropereën, etc. - @d) e (rnst+ & // but fix e sound in doodernstig/-e + @d) e (rnst++ & // but fix e sound in doodernstig/-e &t) e (r@ @ Cit) e (ring e@ // fix final e sound in compounds like begrotingsmonitering iënt) e (r@n e@ // fix e sound: lewensoriëntering/-rende @@ -1314,7 +1338,7 @@ _) este (t %Este@ // fix stress and vowel sounds: esteties/-e/estetika hip) e (r @ _) er (b &r' // erbarm/ing - erke (n %&rkE // fix stress and e sounds: erken/-ning/(self)erkende + erke (n+ %&rkE // fix stress and e sounds: erken/-ning/(self)erkende m) erke (nd &rk@ // kenmerkend/-e p) erke (nd &rk@ // beperkend/-e w) erke (nd &rk@ // (mede/terug)werkend/-e @@ -1352,6 +1376,7 @@ elaar @lA:r //wandelaar, twyfelaar etc. oord) elaar e@lA:r //beoordelaar and oordelaar/friends C) ewel (A e@v@l // prewelend/wrewelig/newelig/beneweling + ewewig (tig %e@v@vIx2 // move default stress: ewewigtig/-e d) e (mons E% r) e (digering E som) e (r @ //someraand and others. @@ -1417,6 +1442,7 @@ Ceuw) e (l @ //gesneuwelde heuwelhang etc. v) e (nno@+ @ //vennoot and friends _) euro (pe %Y@r%o@ // stress: Europees/Europese + ev (entue %iv // fix e and v sounds: eventueel/-ele _) ewe (red %e@v@ // move default stress: (on)eweredig/-e/-heid ex (+ _^_EN // words containing ex are English al) ex (and %Ekz //alexanderbaai, alexandria etc. @@ -1479,6 +1505,8 @@ _) fok (o fOk_ // fix o sound, insert short break: fokop/fokof folio fo@li_u // fix o sounds: folio and compounds fondue f%Ondy // fix stress and ue sound: fondue and compounds + fone (tiek f%o@n@ // fix e sound: fonetiek and compounds + fone (tie f%une@ // fix stress and o sound: foneties/-e @) fonie fun'i // kakofonie/simfonieorkes/telefonie @) fonies f'o@nis // fix stress: simfoniese/polifonies/telefonies @) fonie (s@@ fun'i // fix stress: simfonieseisoen and similar @@ -1541,6 +1569,7 @@ gim (naK x2@m // move default stress: gimnas/-te gimna (siA x2@mnA: // move default stress and lenghthen a sound: gimnasium/gimnasia glans x2lans // glans not nasalised: glans/-ende/-papier, etc. + glas (a x2las_ // shorten a sound, short pause: glasafskorting/-albaster/-apparaat... glas (o x2las_ // fix a sound and short break: glasoog/-ogie/-oë/-opaal/-oppervlakte gletser x2l''Ets@r // fix 2nd e sound: gletserbeweging/-meer/-vorming/vergletsering, etc. glise (rien gl@s@ // fix stress and g and vowel sounds: gliserien(-salf/-suur) @@ -1656,7 +1685,7 @@ bur) ger g@r gee (+ x2e@ geër (_ x2e@@r // oorgeër/pasaangeër - gees (drift x2%e@s // move default stress: geesdriftig and derivatives + gees (drifti x2%e@s // move default stress: geesdriftig and derivatives @) gegee =x2@x2e@ gegewens x2@x2e@v@ns // fix e sounds in many compounds: agtergrond-/fossielgegewens/-versameling gei (+ x2eI // geil and derivatives/geiser/geit/-e @@ -1680,6 +1709,7 @@ .group h h h h (h + _) half (geP4 h'alf // fix e sound in halfgetem(de), etc. half (kro@ h%alf // move default stress: halfkroon/halfkrone half (een h%alf_ // move default stress in this and following time expressions: halfeen/-vergadering half (twee h%alf @@ -1710,6 +1740,7 @@ hard (ste hart // restore default stress: (ge)hardste/-s harle (kyn h%arl@ // fix stress and e sound: harlekyn/-e and compounds harmo (nie h%arm%u // fix stress and o sound: harmonie/-ë + harmonies harm'o@nis // fix stress (dis-/en-/fil-)harmonies/-e har (poen h%ar // move default stress: harpoen/-e and compounds @) hartig h'art@x2 // barmhartig/lighartigheid/lighartig... hart (roer h%art // move default stress: hartroerend/-e/-ste @@ -1767,7 +1798,7 @@ &) hede (_ he@d@ he (g h& heid (_S4 heIt - herinner h&r'In@r // herinner/-ing/-e|s + herinner h%&rIn@r // herinner/-ing/-e|s hetero (@@P6 h%Et@-r%u // fix stress and vowel sounds: many compounds: heteroseksueel/-ele/-aliteit, etc. hex (C hEks // prevent English translation: Hex(rivier)vallei hia (sint h%ij%a // fix stress: hiasint/-e and compounds @@ -1815,7 +1846,7 @@ iber (i@ %ibe@r // Siberië/Siberiese/Iberiese @) ic (_ _^_EN // Words ending in -ic are English ie i - tr) ie (_ 'i //stress on trie at word end + tr) ie (_N 'i //stress on trie at word end ieë (K i:@ // knieë/vlieë/spieël/-tjie ie (uu i // split ie/uu, eu not diphthong: drieuur and similar ss) ief (_ 'if // move default stress: aggressief/massief/obsessief/progressief, etc. @@ -2038,6 +2069,7 @@ j j j (j ja (broer jA: // fix a sound: jabroer/-s + _) jack _^_EN // English: Jack/-ie/-son _) jag (A j''ax2_ // fix stress and a sound: jagavontuur/-ekspedisie/-entoesias/-eskader/-instink... jag (end jA:x2 // but long a in jagend/-e and compounds jag (er jA:x2 // long a in jager and compounds @@ -2147,6 +2179,7 @@ klip (A klIp_ // fix i sound: klipalbaster/-altaar/--uil/leiklipolie klou (sule kl%@U // move default stress: klousule/-s kklere =kl'e@r@ + kners (_ kn&rs // fix e sound: blikners/tande(ge)kners, etc. knip (A knIp? // knipogie/geknipoog/ _) krag (A kr''ax2_ // kragaanleg/-eenheid/-installasie/-onderbreking/-opwekker kra (gie krA: // but: kragie/-s @@ -2156,6 +2189,7 @@ kreme (tart kr@m@ // fix stress and e sounds: kremetart and compounds _) kre (o kr%i // fix stress and e sound: Kreool/Kreole/Kreoolse _) kre (pe@ kr@ // fix stress and 1ste sound: krepeer/-krepering + kriewe (l kriv@ // fix e sound: kriewelend/kriewelkous/-krapper/-siekte... krimi (nA kr@m@' // krimineel/kriminele/diskrimineer kri (oel kr%i // move default stress: krioel and derivatives kri (sant kr@ // move default stress: krisant/-e @@ -2371,7 +2405,7 @@ _) kontras k%Ontras // move default stress: kontras/-te/kontrasteer kontrasep k%Ontr%asEp // fix stress and e sound: kontrasepsie and derivatives kontrover (s k%Ontr%uv&r // o and v sounds: kontroversie/kontroversieel - _) kop (o kOp? // fix o sound: koponder/koponderstebo/kopomdraai/kopoperasie + kop (o kOp? // fix o sound: koponderstebo/kopomdraai/kopoperasie/gryskoponderwyser/poenskopolifant kopu (lA k%Op%y // fix o sound: kopulasie/kopuleer and derivatives _) kor (dA k%Or // kordaat/kordon ko (rint k%u // fix stress and o sound: korint/-e and compounds @@ -2530,6 +2564,7 @@ ma (kriel m%a // move default stress: makriel/-e maksi (ma@ m%aks%i // move default stress: maksimaal/-male &) mal (_S3 mal + mala (giet m%al%a // fix stress and a sounds: malagiet and compounds malaria mal'A:ria mal (gas m%al // move default stress: Malgas/-se/-sies malles (_ mal@s // fix e sound: (mags)malles and similar @@ -2561,13 +2596,15 @@ marmer marm@r_ // fix e sound: marmerbeeld/-blad and many others marmo (set m%arm%u // fix stress and o sound: marmoset/-te mar (sje m%ar // move default stress: marsjeer and derivatives - mas (biek m%as // move default stress: masbieker/-s + ma s (biek m%as // move default stress: masbieker/-s masjien m@Sin // masjien and many compounds + masji (na@ m%aS%i // move default stress: masjinaal/-ale maskara m%askA:r%a // move default stress: maskara and compounds masker mask@r // fix e sound: maskerafdruk/-agtig/ontmaskering masker (ade m%ask@r // move default stress: maskerade/-s maso (chis m%as%u // fix vowel sounds: masochis/-te/-ties/-e/-isme mastekto (m m%astEkt%u // fix stress and vowel sounds: mastektomie and compounds + mate (matie m%at@ // fix vowel sounds: matematies/-e matemati (CA m%at@m%at%i // fix stress and vowel sounds: matematikus/-ci materi (A@ m%at%e@r%i // materiaal/materiale/materiële/materieel materie (+ m%ate@r%i // stress and vowel sounds: materie and many compounds @@ -2586,6 +2623,7 @@ midde (l mId@ // middellyf/middelpunt/middelste/bemiddelend middel (jari m@d@l // move default stress: middeljarig and derivatives middelli (k mId@l@ // drop one l: (on)middellik/-e + milieu m@ljy // fix stress and vowel sounds: milieu and compounds milit m@l@t // militêr/militaris mil (jA m@l // move default stress: miljoen/-e/miljard/-e mille (nniA m@lE // millennium/millennia @@ -2608,6 +2646,7 @@ mis (gis m@s // stress on 2nd slb mis (gun m@s // stress on 2nd slb mis (ha m@s // mishandel/mishaag + _) mis (inP3 m@s // fix 1st i sound, pause: misinterpretasie/misinterpreteer miske (n m@skE // misken/ning/onmiskenbaar mis (l m@s // misluk/mislei mis (lamp mIs // restore default stress: mislamp/-e @@ -2660,6 +2699,7 @@ mosam (biek m%o@s%am // move default stress: Mosambiek/-er/-se mosa (ïek m%o@s%a // move default stress: mosaïek and compounds mo (skee m%O // move default stress: moskee/-s and compounds + motie (C m%o@ti // handle stress: winsmotief/-tiewe and similar compounds motor mo@t@r // motorfiets/motorkar/vragmotor motor (ie m%uto@r // fix stress and o sounds: motories/-e @) mpel (A mp@l // bewimpeling/dompelaar/strompeling @@ -2723,6 +2763,7 @@ ment m'Ent mental (iteit m,Ental // fix stress: mentaliteit/sentimentaliteit and compounds mentjie m'EiNci // monumentjie/dokumentjies + menue (t m%En%y:;E // fix stress and vowel sounds: menuet/-te @C) mere (_ me@:r@ // fix penultimate e sound: sout(water)-/strandmere me (riete m@ // move default stress: meriete and compounds merino m@rin%u // fix stress and vowel sounds: merino/-skaap/-ram, etc. @@ -2877,6 +2918,7 @@ oe) n (g n //soengroet, pensioengewend etc. nuanse (K n%yans@ // move default stress: nuanse/-s and compounds nuan (seer n%y%an // fix stress: (ge)nuanseer/-d + nuanse (ring n%y%anse@ // fix stress: nuansering and compounds nuus (kierig n%ys // move default stress: nuuskierig/-heid nuwer (wet n%yv@r // move default stress: nuwerwets/-e @Cer) ny (_ n'eI // move default stress: lekkerny/raserny/slawerny @@ -2899,6 +2941,7 @@ oase %u_A:s@ // oase/-s and compounds o (terap u // psigo-/fisioterapeut _) ob (s %Op // obskuur/obskure/obskuriteit/obsessie/obseen + obser (veer %Ops%&r // fix stress, b sound: (ge)observeer(d/-e) C) o (dium o@ // fix stress and o sound: jodium/podium/rodium and their compounds oefen uf@n// oefenbroekie/oefeningboek/liggaamsoefeninge t) oeke (n uk%E // fix e sound: toeken/-ning/kuns-/watertoekenning @@ -2966,6 +3009,7 @@ odjie OIci otjie OIci offi (sier %Of@ // move default stress: offisier and compounds + offisi %Of%iS%i; ofiel uf'il // franko-/hemo-/nekro-/pedo-/russofiel, etc. ofilie ufil'i // hemo-/nekro-/pedofilie, etc. ofobie ufo@b'i // antropo/-xenofobie and many other -fobie words @@ -3029,6 +3073,7 @@ om (sig %Om // move default stress: omsigtig/-heid omsingel %OmsIN@l // fix stress: omsingel/fix e sound: omsingelde _) om (sirkel %Om // move default stress: omsirkel and derivatives + _) omskans %Omskans // fix stress: omskans/-ing/-s _) om (skep %Om // move default stress: omskep and derivatives _) om (skr %Om // move default stress: omskryf/omskrewe _) om (sluier %Om // move default stress: omsluier and derivatives @@ -3116,7 +3161,6 @@ ontering %Onte@r@N //ontering in compounds montering etc. _) on (tooCC %On // ontoombaar/-bare/-baarheid/ontoonbaar/-bare/-baarheid/ontoornig/-e/-heid onvoor (s %Onf%o@r //stress: onvoorsiens, onvoorstelbaar etc. - onvoor (w %Onf%o@r //stress: onvoorwaardelik etc. onome un'o@m@ // astronome/ekonome/gastronome onomie unum'i // astronomie/ekonomie/gastronomie onomies un'o@mis // astronomies/-e/ekonomies/-e/gastronomies/-e @@ -3139,6 +3183,7 @@ _) on (kruid On // restore default stress: onkruid/-doder and similar _) on (lus On // restore default stress: onlus/-te/onlusgebied, etc. _) onnie Oni // onnie/-s; not on- prefix + onom (stoot %On%Om // fix stress: onomstootbaar/onomstootlik and their derivatives _) on (paar On // restore default stress: onpaar/-skoene onreg (K Onr&x2 // stress: onreg/te/onregmatig on (regv++ %On // stress: onregverdig/e/heid @@ -3258,6 +3303,7 @@ oor (heers %o@r // move default stress _) oor (hoofs %o@r // move default stress: oorhoofs/-e oorkoepel o@rk'up@l // stress and pronunc. of el: oorkoepelend/oorkoepeling + oor (koom %o@r // fix stress: (on)oorkoomlik/-e oor (laaid %o@r // move default stress: oorlaaide/-s oor (lams %o@r // move default stress: oorlams/-e/-heid _) oorlede o@rl'e@d@ // stress oorlede/ne/s @@ -3330,6 +3376,7 @@ parle (ment p%arl@ // move default stress and fix e sound: parlement and compounds, eg. parme (saan p%arm@ // move default stress: parmesaan(kaas) and compounds paro (di p%ar%u // fix stress and vowel sounds: parodie and compounds + parti (sa p%art%i // move default stress: partisaan/-ane parti (tu p%art@ // fix stress and i sound: partituur/partiture and compounds pase (lla p%as& // fix stress and a sound: pasella(tjie) and compounds pa (sifi p%a // shorten a sound: pasifis/-me/-ties/-e @@ -3384,6 +3431,7 @@ ry) pere (_ p@r@ // fix penultimate e sound: rypere skam) pere (_ p@r@ ?? shorten 1st e in ending perfek p@rfEk // perfek/-te/-sie/-sionis + pergola p%&rx2o@l%a // move default stress: pergola/-s and compounds perife (rA@ p%Er@f@ // fix stress and vowel sounds: periferie/-ë/periferaal/-ale peri (o p%e@r%i // stress: periode/-s and compounds peripa (t pEripa'' // fix stress and vowel sounds: peripateties/-e/peripatetikus/-se/peripatetici @@ -3548,6 +3596,7 @@ puntener p%Wnt@ne@r // stress and 2nd e sound: puntenerig and derivatives pu (pil p%y // move default stress: pupil/-le and compounds puri (tein p%yr@ // fix stress and i sound: puritein/-e/-se + pêrel p&:r@l // fix e sound: pêrelig/-e .group q @@ -3608,6 +3657,7 @@ rivier r@fi:r _) ri (g rI // stress on 1st slb.: rigting/-loos/-vas, etc. + robot (A ro@bOt_ // fix 2nd o sound, pause: robotarm/-oog/-oë ron (dawel r%On // move default stress: rondawel/-s/-tjie rond (borst r%Ont // move default stress: rondborstig/-e rond (r rOnt // grondreuk/grondrel/rondreis/-rol/-ry @@ -3626,6 +3676,7 @@ .group re rea (ks r%ia // reaksie/s/skokreaksie rea (C r%i%a // reageer/realis/me|ties + re (ageren r%i // fix stress and vowel sounds: reagerend/-e re (bel r@ // move stress from 1st slb recce rEki // fix e and c sounds: recce/-s re (dakC r@ // fix stress and e sound: redaksie/redakteur and compounds @@ -3657,6 +3708,7 @@ re (kru r@ // move stress from 1st slb _) re (la r@ // relaas/relase/relasie and compounds rele (van r@l@ // relevansie/relevant and derivatives + re (liek r@ // fix stress and e sound: reliek/-e and compounds reli (gi r@l@ // fix stress and e sound: religie/-ë/religieus reliëf r%e@l%iEf // fix stress and vowel sounds: reliëf and compounds rem (_ rEm // handrem/kabeltrem/kragrem/noodrem/skyfrem/stadstrem/veiligheidsrem @@ -3949,7 +4001,7 @@ _) spon (ta sp%On // move default stress: spontaan/spontane _) sport (@@@ sp''Ort_ // force stress on 1st slb.: sportadministrasie/-konfederasie spreekwoordeli spr%e@kvo@rd@l@ // move default stress: spreekwoordelik/-e, vs. spreekwoord - springbok spr''INbOk // fix o sound: Springbokafrigter/-agterspeler; fix stress: Springbokklere + springbo (k spr''INbO // fix o sound: Springbokafrigter/-agterspeler; fix stress: Springbokklere sproke spro@k@ // see rule: pro (CA pr%u : aangesprokene/onbesproke, etc. self (_ s'&lf // myself/vanself K) sewe (C s'e@v@ // sewejarige/standerdseweklas @@ -3983,9 +4035,11 @@ smelt sm< sodom (iet s,o@dOm // fix stress and 2nd o sound: sodomiet/-e son (g@ sOn // songebakte/-brande/-bruinde/-droogde/songod + son (om s''On_ // fix 1st o sound, pause: sonomspoelde/-omgewe sosial (i so@Sial' // sosialis/sosialisme/sosialisties so (v so@ // soveel/sover soverre so@f'&r@ // stress: se rule: so (v s'o@ // soveel/sover + spas (mod sp%as // move default stress: spasmodies/-e speku (lA sp%Ek%y // spekulasie/spekuleer/spekulatief @) sper (a sp@r' //desperate/desperaatheid/rasperagtig ek) sper (im spEr // eksperimenteer/eksperimenteel @@ -3994,8 +4048,7 @@ spesialis (A spESialis spesialis spESal'Is spesi (f sp%Es%I // spesifiek/spesifiseer - stede (C ste@d@ // fix e sounds of many compounds and derivatives containing stede - ste (laan st@ // fix e sound: eerste-/ag(t)stelaan + spine (t sp%inE // move default stress: spinet/-te and compounds %Cel) ste (r st& // fix e sound: dubbelster/-re Cet) ste (rK st& // fix e sound: ballet-/kabaret-/krieketster/-re dwaal) ste (r st& // fix e sound: dwaalster/-re @@ -4025,6 +4078,7 @@ suid (oos s%Yyt_ // move default stress and insert short break: suidoos/-te/-lik suite swit@ // fix -ui-sound: suite/-s and compounds sukses s%WksEs // sukses/suksesse/suksesvol/reusesukses + sultana s%WltA:n%a // fix stress, keep last a short in compounds: sultana/-s _) su (meri s%u // fix stress and u sound: sumeries/-e su (mmier s%W // move default stress: sumier/-e superintendent s,upr@nt%EndEnt // fix stress and vowel sounds: superintendent and compounds @@ -4033,7 +4087,7 @@ _) sw sw // fix w sound: words beginning with sw-: swerweling/swetend swaar (lyw sw%A:r // move default stress: swaarlywig/-e/-heid swaar (moed sw%A:r // move default stress: swaarmoedig/-e/-heid - swag (K sv'ax2 + swag (K svax2 // dorps-/volkswag, etc. swa (hili sw%a // fix stress and a sound: swahili/-'s _) swam (A@ swam_ // shorten a sound: swamagtig/-etend/-infeksie swart (gal sw%art // move default stress: swartgallig @@ -4062,11 +4116,15 @@ stapel stA:p@l // fix e sound: (op)stapeling/stapelaar staties st'A:tis sta (tutA st%a // fix stress and a sound: statute/statutêr + êr) ste (_S3 st@ // preserve stress: elementêrste/primêrste, etc. + stede (C ste@d@ // fix e sounds of many compounds and derivatives containing stede steding ste@d@N // besteding and compounds ste (ke_ ste@ // fix e sound: by-/mes-/proefsteke + steke (lig ste@k@ // fix 2nd e sound: stekelig/-e/-heid C) steker ste@k@r // e sound: (aan/dop/kwaad/rugsteker/-s/-y, etc. _ne) stel st@l // fix e sound: nestel/-end wor) stel st@l //worstel e sound in compounds + ste (laan st@ // fix e sound: eerste-/ag(t)stelaan ste (land st@ // fix e sound: vasteland and several compounds @) stel (iC st@l // eersteling/gunsteling/wellusteling/worsteling/eerstelig and compounds &) stele (fo st&l@ // fix e sound in compounds: huis-/werkstelefoon/-fone @@ -4088,6 +4146,7 @@ mAre) ste (r st& // fix e sound: more/môrester/-re stereo (ti st%e@r%i%u // fix stress and vowel sounds: stereotiep/-tipe/-tipeer sterf (K st&rf // fix e sound: uitsterf/weg(ge)sterf/kindersterfte + sterk (_ st&rk // fix e sound: duiwel-/kapitaal-/stormsterk, etc. @) sterkt st&rkt // compounds ending in sterkte stero (ïed st%e@r%u; // fix stress and vowel sounds: steroïed/-e bok) ster (t st&:r // fix e sound: bokstert/-e/-tjie/-s @@ -4293,6 +4352,7 @@ teater t%iA:t@r // fix stress and e sound: teater and compounds tea (tra t%i%a // fix stress and vowel sounds: teatraal/teatrale teen (argu t''e@n // forse stress on 1st slb.: teenargument/-e/-asie + te (dom t@ // fix e sound: idiotedom and similar teen (oorges t%e@n_ // move default stress: teenoorgestel/-d/-e @A) te (geC t@ // fix e sound: Hugenotegemeente/stategebou and similar compounds @C) te (gn t& //tegniek/iese and friends @@ -4526,6 +4586,7 @@ ve (l f& // maagvel, stress on 1st slb @) vel (A fe@l // aanbeveling/aanbevelingsbrief + veld (C f< // fix d sound: veldreuk/-radio/-rantsoen, etc. vele f'e@l@ ven (detta v%En // fix stress and v sound: vendatta and compounds ven (dusie f@n // fix stress and e sound: vendusie and compounds @@ -4579,12 +4640,14 @@ ver (reik f&:r // fix stress and e sound: verreikend/-e @) vers (_ f&rs // teksvers/slotvers/kindervers and similar vers (album f&:rs_ // fix e sound: versalbum/-s + _) vers (b f&rs // fix e sound: versbundel/-bou/-boek @) vers (e_ f&rs // plurals of words like the above _) versf f''&rsf // fix stress and e sound: versfragment/-e ver (sie_ f&:r //words ending in versie ver (sies_ f&:r //words ending in versies vers (panor f&:rs // fix stress and e sound: verspanorama/-s ver (spring f''&:r // fix stress and e sound: verspring/-er/-kompetisie + vers (v f&rs // fix e sound: versvorm/versvoete verf (i f@rf //verfilm and compounds ver (flenC f@r // verflenter and derivatives/verflens; see rule: verf (C f&rf ver (fris f@r // verfris and derivatives; see rule: verf (C f&rf @@ -4692,7 +4755,8 @@ voort (v@@ f%o@rt // voortvarend/voortvlugtige _) vooruit fo@r_'Yyt // vooruit/vooruitsig/vooruitbeplanning vooruit (strew fo@rYyt' // change stress - voorwaard (_ f%o@rvA:rd // stress: (on)voorwaardelik + voorwaarde (_ f%o@rvA:rd@ // stress: (on)voorwaardelik + voorwaarde (_N fo@rvA:rd@ // fix stress: voorwaarde/-s vor (_ _^_EN //words ending in vor is English vorm fOr@m vorsti (n fOrst'I // fix stress: vorstin/-ne/-netjie and compounds @@ -4740,8 +4804,10 @@ &s) w (eefs v // fix w sound: compounds like -sweefsel/tuisweefstof, etc. @s) w (enn v // fix w sound: beurs-/groeps-/klas-/naas-/pryswenner/-wennende _) web vEb //webadres/se, webarea etc. + As) weer (_ ve@r // fix w sound: kusweer/ysweer, etc. AAs) w (enk v // fix w sound: kombuis-/nuus-/sweiswenk/-e plaas) w (erC v // fix w sound: plaaswerf/-werwe + s) w (oeling v // fix w sound: koors-/geesteswoelinge s) w (ou v // fix w sound: bamboeswoud/keerkringswoud and similar s) w (r v // fix w sound: skeepswrak/sielswroeging/aardswreedheid wreed (a vre@t_ // fix d sound and insert short pause: wreedaard/-s @@ -4779,6 +4845,7 @@ weer (leg w%e@r // move default stress: (on)weerlegbaar weer (strew v%e@r // move default stress: weerstrewig/-e/-heid @) wees (_ ve@s // fix w sound: siekwees/volkwees + weet (gierig v%e@t // move default stress: weetgierig/-e/-heid @) weg (_ v&x2 // blindweg/botweg and many similar spoor) weg v&x2 // fix e sound: spoorwegaanleg/-aansluiting/-amptenaar/-eiendom/-inkomste/-ongeluk... _) wegge (C@P5 v'&x2@ // prefix: weggeja and similar @@ -4917,6 +4984,7 @@ .group y y eI %C) y (_ _^_EN // English: Betty/Eddy/Harry/Molly/Penny/Tommy + skapp) y (_ %eI // compounds like: handels-/versekerings-/verskepingsmaatskappy york j'O:k //new-yorkse and may be others ysterre (lin eIst@re@ // fix e sound: ysterreling/-s diff --git a/dictsource/da_list b/dictsource/da_list index 94fe240d..20b5064a 100755 --- a/dictsource/da_list +++ b/dictsource/da_list @@ -1,4 +1,4 @@ - + // This file is UTF8 encoded // Spelling-to-phoneme words for Danish @@ -29,7 +29,7 @@ _ced s@d'ila _cir s'3:kVmfl,Eks _dia 'umlaut _dot wiDd'0tabVv -_grv gr'a:v +_grv aks'aN gr'a:v _hac h'atS,Ek _mcn m'akr,0n _ogo '0g0n,Ek @@ -61,17 +61,22 @@ _#32 blank _, koma: _; se:mi:ko:lVn _: ko:lVn -_. pun^tum +_. puNtum _? spWrgsmVlstajn _! udRVbstejn _- binnesdrai -__ bOndsdrai +__ b'Onsdrai & ou £ pun? € euro © kopyrajt +÷ divid'eReD meD = l'imeD # n'OmV +§ paragr'af + + + // numbers _0 'nOl _1 'e:n @@ -215,6 +220,7 @@ k kO: l El m Em n En +o o p pe: q ku: r Er @@ -233,6 +239,7 @@ egen a:j@n eget a:j@D egne a:in@ enter entV +ide id'e // idea igen igen Ny ny // new også Vs@ // also @@ -240,3 +247,4 @@ havde h'aD@ // had sagde sa@ // said sig sAi // oneself + diff --git a/dictsource/da_rules b/dictsource/da_rules index 1851be6a..0e8b2342 100755 --- a/dictsource/da_rules +++ b/dictsource/da_rules @@ -1,7 +1,5 @@ - - -// This file is UTF8 encoded +// This file is UTF8 encoded // Spelling-to-phoneme rules for Danish @@ -15,408 +13,496 @@ - - .group a - a a? - C) a (C a - a (tion a - a (CK a - a (g a_ - a (nK a - a (r+ A: - r) a A: - r) a (CK A - ai (K aj + a a? + C) a (C a + a (tion a + a (CK a + a (g a_ + a (nK a + a (r+ A: + r) a A: + r) a (CK A + ai (K aj - au (K au - ch) au (f o - nive) au o - aw (K aw - ay (K aj - aa O: - r) aa O: + au (K au + ch) au (f o + nive) au o + aw (K aw + ay (K aj + aa O: + r) aa O: +.group af + k) af (fe 'af + l) af (fe 'af + t) af (fe af .group b - b b - bb b - _) be (@P2 be - _) be (d bE - b (il 'b + b b + bb b + _) be (@P2 be + _) be (d bE + b (il 'b .group c - c k + c k - c (e s - c (i s - c (k - ch S - mi) ch (a k S - ch (r k - e) c (h k - c (ha S - cc ks - c (yk s - fa) c (ad s - fa) c (on s + c (e s + c (i s + c (k + ch S + mi) ch (a k S + ch (r k + e) c (h k + c (ha S + cc ks + c (yk s + fa) c (ad s + fa) c (on s .group d - d d - A) d (d D - A) d (_ D - A) d D - A) d (A D - A) dd D - A) d (i d - A) d (ig D - A) d (isk D - A) d (es D - A) d (et D - a) d (g D - a) d (k D - A) de (_ D@ - d) d D - i) d (e d - u) d (er d - bu) d (get - ej) d (e d - le) d (t - li) d (e D - li) d (s D - me) d (b D - me) d (l D - mi) d (l D - ne) d (C D - o) d (a d - o) d (i d - re) d (a d - re) d (i d - ri) d (e D - si) d (e D - ti) d (e D - ti) d (s D - vi) d (e D - al) d (o d - an) d (re d - el) d (i d - ol) d (a d - æl) d (e d - æl) d (i d - æl) d (re d - æn) d (e - æn) d (re d - æn) d (ri d - ær) d (es d - mo) d (C D - mo) d (ul 'd - mo) d (al 'd - bla) d (r D - kor) d d - smu) d (s - pu) d (s - ro) d (s - ry) d (ni D - æ) d D - An) d (rA d - An) d (re d - dar) d d - in) d (C - in) d (i d - in) d (u d - in) d (uC d - in) d (ue d - Co) d (C D - Co) d (A D - go) d (s - go) d (t_ - or) d (ne d - or) d (ning d - or) d (re d - or) d (ret - Aor) d (ret d - kre) d (s - tro) d (s - u) d (A D - u) d (C D - ø) d (C D - ø) d (t - å) d (an d - d (CA d - d (t = - be) d (r D - be) d (st : - bol) d d - a) d (s - i) d (s - r) d (K - ar) d (K d - or) d (re d - in) d - ir) d (_ d - or) d (en - aar) d (K - klo) d (s - nor) d - pro) d (u d - pu) d (s - ur) d (e d - ver) d (en d - sli) d(so D - sli) d(s + d d + a) d (d D + A) d (_ D + A) d D + A) d (A D + A) d (C D + A) d (i d + A) d (ig D + A) d (isk D + A) d (es D + A) d (et D + a) d (g D + a) d (k D + a) d (res d + A) de (_ D@ + d) d d + e) d (t + i) d (e d + i) d (t + o) d (a d + o) d (i d + u) d D + u) d (A D + u) d (er D + u) d (C D + _y) d (re D + ø) d (C D + ø) d (t + å) d (an d + æ) d D + Co) d (C D + Co) d (A D + al) d (er + al) d (et + al) d (o d + an) d (re d + An) d (rA d + An) d (re d + be) d (A d + bu) d (get + bu) d (t + ej) d (e d + el) d (i d + go) d (s + go) d (t_ + he) dd (e D + in) d (C + in) d (eks d + in) d (i d + in) d (u d + in) d (uC d + in) d (ue d + le) d (t + li) d (e D + li) d (s D + lu) d (ere d + ma) d (ras d + me) d (b D + me) d (l D + mi) d (l D + ma) d (d D + me) d (d D + mi) dd (a d + mi) dd (el D + mo) d (C D + mo) d (al 'd + mo) d (el 'd + mo) d (ul 'd + mu) dd (er D + pu) d (e D + ne) d (C D + or) d (el d + or) d (en d + or) d (ne d + or) d (ning d + or) d (re d + or) d (ret + pæ) d (a d + re) d (a d + re) d (i d + ri) d (e D + rø) dd (er D + si) d (e D + si) d (eA D + si) d (eC D + ti) d (e D + ti) d (s D + ud) d d + ur) d (e d + ve) d (h D + vi) d (e D + vi) d (er D + yl) d (er + æl) d (e + æl) d (i d + æl) d (re d + æn) d (ri d + æn) d (re d + æn) d (re d + kla) dd (e D + kry) dd (er D + dd (et D + pu) d (s + ro) d (s + ry) d (ni D + ær) d (es d + bla) d (r D + dar) d d + gui) de d + gui) de (n de + gui) de (r de + gui) de (t de + kor) d d + kru) d (t + kry) d (s + mad) d (A D + plu) d (se + ral) d (e + smu) d (s + snu) d (e D + Aor) d (ret d + kre) d (s + tro) d (s + d (CA d + d (t = + be) d (r D + be) d (st : + bol) d d + a) d (s + i) d (s + r) d (K + ar) d (K d + or) d (re d + in) d + ir) d (_ d + or) d (en + aar) d (K + klo) d (s + nor) d (en d + pro) d (u d + pu) d (s + ver) d (en d + sli) d (so D + sli) d (s +tilfre) d (s .group e - e e - r) e (j a - e (rK & - b) e (ds E - d) e (_ @ - ed) e (- @ - g) e (C e - g) e (js aj - em) e (nt a - plem) e (nter e - elem) e (nt e - em) e (ntal e - glem) e (nt a - glem) e (ntal e - ni) e - ni) e (n e - niv) e (au - ani) e (l e - lini) e e - r) e (_ V% - _r) e e V% - @st) e (n e: - budg) e (t 'E - carst) e (n @ - karst) e (n @ - Kr) e (ag e - @h) e (n 'e - p) e (ge a - p) e (gnin a - r) e (l e - r) e (kt aj - r) e (CK e - eg (et aj - m) eg aj - n) e (K e - ee e: - eg (e 'e: - en (gage an^ - en (tre an^ - p) en (sion an^ - r) en (ce an^ - r) eg (n A:j - r) e (d e - r) e (v e - tr) e e - tr) e (A e - ei A:j - ej (+ ai - v) ej (r 'e ai - ffic) e - ffic) e (r e - &r) e (_ V - &) ede (_ @D@ - &r) ede (_ 3D@ - &r) en (_ 3n + e e + ee e: + r) e (j a + e (rK & + b) e (ds E + d) e (_ @ + ed) e (- @ + g) e (C e + g) e (js aj + em) e (nt a + plem) e (nter e + elem) e (nt e + em) e (ntal e + glem) e (nt a + glem) e (ntal e + ni) e + ni) e (n e + niv) e (au + ani) e (l e + lini) e e + r) e (_ V% + _r) e e V% + @st) e (n e: + budg) e (t 'E + carst) e (n @ + karst) e (n @ + Kr) e (ag e + @h) e (n 'e + p) e (ge a + p) e (gnin a + r) e (l e + r) e (kt aj + r) e (CK e + eg (et aj + p) eg (e aj + m) eg (a eg + m) eg aj + r) ej (s aj + r) eg (er eg + r) eg (n aj + n) e (K e + t) eg (n aj + eg (e 'e: + en (gage aN + en (tre aN + c) en (t en + p) en (sion aN + r) en (ce aN + r) eg (n A:j + r) e (d e + r) e (v e + tr) e e + tr) e (A e + ei A:j + ej (+ ai + v) ej (r 'e ai + ffic) e + ffic) e (r e + &r) e (_ V + &) ede (_ @D@ + &r) ede (_ 3D@ + &r) en (_ 3n &r) en (ing 'en - for) en (ing 'en - &r) en (s_ 3n - &r) et (_ 3D - &) er (_ V - &) en (_ '@-n - &) ene (_ @-n@ - &) ende (_ @-nn@ - &) eren (_ 3r3n - &) eren (s_ 3r3n - &) es (_ @s - &) et (_ @D - icha) e (l - ika) e (l - ir) e (n 'e - yr) e (n 'e + for) en (ing 'en + &r) en (s_ 3n + &r) et (_ 3D + &) er (_ V + &) en (_ '@-n + &) ene (_ @-n@ + &) ende (_ @-nn@ + &) eren (_ 3r3n + &) eren (s_ 3r3n + &) es (_ @s + ucc) es 'e + &) et (_ @D + icha) e (l + ika) e (l + ir) e (n 'e + yr) e (n 'e .group f - f f - ff f - _) for (&@P3 f%V - _) for (e f%V - _) for (um f%or - a) f (A u - a) f (C u - a) f (it f - a) f (on f - a) f (rik f - a) f (sted - a) f (ten f - a) f (tes_ f - Ca) f (t f - ga) f (fel f - gra) f ( f - gra) f (A f - gra) f (C f - ra) f (ik f - ra) f (fe f - kra) f (t f - sa) f (ar f - ska) f (f f - sta) f (e f + f f + ff f + _) for (&@P3 f%V + _) for (e f%V + _) for (um f%or + a) f (A u + a) f (C u + a) f (it f + a) f (on f + a) f (rik f + a) f (sted + a) f (ten f + a) f (tes_ f + Ca) f (t f + ga) f (fel f + gra) f ( f + gra) f (A f + gra) f (C f + ra) f (ik f + ra) f (fe f + kra) f (t f + sa) f (ar f + ska) f (f f + sta) f (e f .group g - g g - gg g - g (ent g - g (ment g - a) g (A w - a) g (C ?w - a) g (e - a) g (en g - g) g g - e) g (e - i) g (t g - i) g (t_ - gti) g - i) g - i) g (A - i) g (ere g - redi) g (er g - i) g (i g - n) g n^ - n) gr n^gr - r) g (_ w - r) g (e w - Ca) g (en j - ra) g (_ w - ra) g (e w - ør) g (s - l) g (_ j - li) g - li) g (g g - u) g g - u) g (e - u) g (l ? - u) g (t g - y) g (e j - y) g (A g - ø) g (e - ø) g (n - æ) g (e j - &e) g j - an) g (å g - ba) g (e - da) g (e - ba) g (C u - ba) g (t g - ba) g (ta u - da) g (C u - ga) g (e S - la) g (e - li) g (t - pli) g (t g - sa) g (s ' - si) g (t g - &ti) g - bud) g (et S - rea) g (er g - aga) g (e S - aga) g (te g - arran) g (e S - eta) g (e S - gara) g (e S - onta) g (e S - reta) g (e - foreta) g (e - ru) g (_ - a) g (A j - l) g (_ j - l) g (e j - l) g (s j - Ca) g (t k - o) g u - bo) g (C u - æda) g (og g' - no) g (e - no) g (le - nø) g j - re) g (e g - re) g (i g - o) g (r g - o) g (n g - o) g (s u - bo) g (st k - ø) g (_ j - ø) g (t g - sal) g j - val) g j - lå) g (e u - navi) g (er g - vå) g (e u - vå) g (n u - vå) g (ne u - go) g = - lo) g = - lo) g (a g - lo) g (i =g - _lo) g (i- S - lo) g (o =g - _lo) g (_ g - _lo) g (g g - ør) g w - a) g (K ? - _) ge (@P2 ge + g g + g) g + g) g (e + g (ent g + &) g (r g + g (ård g + a) g (ent g + g (ment g + a) g (A w + a) g (C ?w + a) g (e + a) g (en g + a) g (i g + a) g (o g + a) g (urk g + g) g + e) g (e + e) g (o g + i) g (t g + i) g (t_ + i) g + i) g (A + i) g (en g + i) g (ere g + i) g (i g + a) g (A j + l) g (_ j + l) g (e j + l) g (s j + n) g + n) gr Ngr + n) gæ gE + o) g (r g + o) g (n g + o) g (s u + r) g (_ w + r) g (e w + u) g g + u) g (e + u) g (l ? + u) g (t g + y) g (e j + y) g (A g + ø) g (e + ø) g (n + æ) g (e j + Ca) g (en j + in) ge (niør Se + ki) gg (e g + li) g (ere + ra) g (_ w + ra) g (e w + ør) g (s + ur) g (A g + l) g (_ j + lA) g (a g + li) g + li) g (g g + mA) g (a g + nA) g (a g + &e) g j + an) g (å g + ba) g (e + da) g (e + ba) g (C u + ba) g (age g + ba) g (t g + ba) g (ta u + da) g (C u + da) g (s_ ? + fa) g (C u + fi) g (ur g + ga) g (e S + la) g (e + li) g (t + re) g (A g + re) g (i S + re) g (iA g + re) g (ist g + sa) g (a =g + sa) g (s ' + si) g (t g + pli) g (t g + &ti) g + bud) g (et S + gti) g + jer) g (A w + jer) g (C w + rea) g (er g + aga) g (e S + aga) g (te g + arran) g (e S + eta) g (e S + gara) g (e S + onta) g (e S + redi) g (er g + reta) g (e +foreta) g (e + ru) g (_ + Ca) g (t k + o) g u + bo) g (C u + æda) g (og g' + no) g (e + no) g (le + nø) g j + re) g (e g + re) g (i g + bo) g (st k + ø) g (_ j + ø) g (t g + sal) g j + val) g j + lå) g (e u + navi) g (er g + vå) g (e u + vå) g (n u + vå) g (ne u + go) g = + lo) g = + lo) g (a g + lo) gg (e g + lo) g (i =g + _lo) g (i- S + lo) g (o =g + blo) g (s =g + _lo) g (_ g + _lo) g (g g + ør) g w + a) g (K ? + _) ge (@P2 ge + + _) ge (nere Se + _) ge (nert Se + _) ge (nerel ge + ge (nera ge + ge (nerer ge + ta) g (e + te) g (ori g - _) ge (nere Se - _) ge (nert Se - _) ge (nerel ge - ge (nera ge - ge (nerer ge - ta) g (e .group h - h h - h (j - hv v - A) h (K - t) h (en h + h h + h (j + hv v + A) h (K + t) h (en h .group i - i i: - i (CK i - ig (_ i - ige (_ i;i - i (nK i - i (nn e - i (mK e - k) i (C_ 'i - k) i (CC_ 'i - l) i (e j - n) i (e i - r) i (g i - t) i (e j - s) i (e j - t) i (on // i ommitted because of sj - s) i (on j + i i: + i (CK i + ig (_ i + ige (_ i;@ + iew j'u + i (nK i + i (nn e + i (mK e + k) i (C_ 'i + k) i (CC_ 'i + l) i (e j + n) i (e i + r) i (g i + s) i (e j + t) i (e j + t) i (on // i ommitted because of sj + t) i (øs + s) i (on j + ingen) i (ør @@ -424,225 +510,266 @@ .group j - j j - j (aw dZ - j (ack dZ - j (ob dZ - j (ohn dZ - o) j (e S - a) j (o S + j j + j (aw dZ + j (ack dZ + j (ob dZ + j (ohn dZ + o) j (e S + a) j (o S .group k - k k - - kk k - - s) k g - - &) k k // after stressed vowel - &) kk g - + k k + kk k + s) k g + pun) k (t N + run) k (en N + san) k (t N + &) k k // after stressed vowel + &) kk g .group l - l l - ll l - ld (K l - &) ld (e_ l - &) ld (ekk l - o) ld l - bo) ld ld - fo) ld l - he) ld l - he) ld (ig ld - no) ld l - æ) ld (r ld - + l l + ll l + ld (K l + &) ld (e_ l + &) ld (ekk l + o) ld l + æ) ld (r ld + bo) ld ld + fo) ld l + he) ld l + he) ld (ig ld + me) ld (el l + me) ld (ing l + no) ld l + so) ld (aC d .group m - m m? - mm m - m (A m - + m m? + mm m + m (A m + gour) met m'e .group n - n n - nn n - nd (e n - nd (K n - nd (ow nd - nd (r nd - u) nd ( n - n (k N - pag) n (e nj - gleme) n (t n^ + n n + nn n + nd (e n + nd (K n + nd (ow nd + nd (r nd + i) nd (eks nd + i) nd (ing n + u) nd ( n + pu) n (kt + ru) n (ke + sa) n (kt + eku) nd nd + pag) n (e nj + gleme) n (t N .group ng - ng (_ n^ - a) ng (A ng - a) ng (C n^ - ng (a ng - ng (i ng - arra) ng n^S - fu) ng n^'g + ng (_ N + ng (e N + ng (s N + a) ng (A ng + a) ng (C N + ng (a ng + ng (i ng + i) ng (s N + u) ng (e N + ba) ng (e N + fa) ng (e =N + fi) ng (er =N + fi) ng (re =N + fu) ng (er Ng + ga) ng (e N + la) ng (e N + li) ng (e N + læ) ng (e N + ma) ng N + ru) ng (e N + sa) ng (e N + se) ng (e N + ti) ng (e N + træ) ng (e N + arra) ng NS .group o - o o: - kr) o (C o - cr) o (C 'o - h) o (ld 'V - h) o (ved o - o (CK o - o (p 'V - o (r o - o (rdn o - m) o (rC V - o (gK o - b) oo (k u - l) oo (k u - ou Vw - ov Vv - @) o (C 'o - @@) o (C 'o - _C) o (l 'V - _C) o (p 'V - _CC) o (p 'V - _CC) o (l 'V - b) o (C 'o - sk) o (le 'o - _f) o (r V - _f) o (re 'V - l) o (kk V - p) o (li o - st) o (K 'o - ati) o (n 'o + o o: + kr) o (C o + cr) o (C 'o + g) ou (rm u + h) o (ld 'V + h) o (ved o + o (CK o + o (p 'V + o (r o + o (rdn o + m) o (rC V + o (gK o + b) oo (k u + l) oo (k u + ou Vw + ov Vv + @) o (C 'o + @@) o (C 'o + _C) o (l 'V + _C) o (p 'V + _CC) o (p 'V + _CC) o (l 'V + b) o (C 'o + ress) o (urc + sk) o (le 'o + _f) o (r V + _f) o (re 'V + l) o (f V + l) o (kk V + l) o (v 'V + l) o (ve O + p) o (li o + st) o (K 'o + ati) o (n 'o .group p - p p - pp p - &) p b - - &) pp b + p p + pp p + &) p b + &) pp b + p (sy .group q - q k + q k - qu kv + qu kv .group r - r r - b) r r - ø) r V: - A) r r - Ae) r V - &) rd (e_ r - &) rd (eKK r - bu) rd (eK rd - no) rd (eKK r - no) rd (isk rd - o) rd (en rd - tu) rd (eK rd - ve) rd (eKK rd + r r + b) r r + ø) r V: + A) r r + Ae) r V + &) rd (e_ r + &) rd (eKK r + o) rd (en++ rd + o) rd (el++ rd + o) rd (rin d + bu) rd (eK rd + jo) rd (en++ r + no) rd (eKK r + no) rd (en++ r + no) rd (isk rd + tu) rd (eK rd + ve) rd (eKK rd .group s - s s - s (p s - s (C s - s (A s - s (ie s - s (ion S - s (j s - s (ch S - kompromi) s + s s + s (p s + s (C s + s (A s + s (ie s + s (ion S + s (j s + s (ch S + s) s +kompromi) s + succe) s ' .group t - t t - A) t (_ t: - th th - &) t t + t t + A) t (_ t: + th th + &) t t - &) tt t - &) th d - t (ie t - t (ion+ sj' - emen) t - elemen) t t - emen) t (al t - glemen) t - glemen) t (al t - lemen) t (er t - poin) t - poin) t (e t + &) tt t + &) th d + t (ie t + t (ion+ sj' + t (iøs+ sj' + lek) t (i S + emen) t +elemen) t t + emen) t (al t +glemen) t +glemen) t (al t + lemen) t (er t + poin) t + poin) t (e t .group u - u u - u (CK u - u (nK u - u (mK O - a) u (g u - b) u (dget y - l) u (k O? - l) u (kas u - m) u (k O? - comp) u (ter ju - r) u u - r) u (m O - r) u (nd O? - fris) u (r y - frit) u (r y - men) u y - g) u (st O - r) u (s u + u u + u (CK u + u (nK u + u (mK O + a) u (g u + b) u (dget y + g) ui (de ai + l) u (k O? + l) u (kas u + m) u (k O? + r) u u + r) u (m O + r) u (nd O? + comp) u (ter ju + fris) u (r y + frit) u (r y + men) u y + resso) u (rs 'u + g) u (st O + r) u (s u + s) u (cc y .group v - v v - vv v - A) v (K w - a) v (n u - &A) v v - &r) v v - al) v (A v - el) v (C - el) v (A - el) v (e v - il) v (A v - ur) v v - hal) v + v v + vv v + A) v (K w + a) v (l u + a) v (n u + &A) v v + &r) v v + al) v (A v + el) v (C + el) v (A + el) v (e v + il) v (A v + ur) v v + hal) v .group w - w w + w w @@ -650,11 +777,11 @@ .group x - x gs + x gs - _) x s + _) x s - n) x s + n) x s @@ -662,71 +789,73 @@ .group y - y y: + y y: - r) y Y: - r) y (CK Y - y (CK Y- - y (nK Y - y (mK Y - d) y (_ i - b) y (A y - n) y (A y + r) y Y: + r) y (CK Y + y (CK Y- + y (nK Y + y (mK Y + d) y (_ i + b) y (A y + n) y (A y .group z - z s + z s - zz s + zz s .group æ - æ E? - æ (CK E: - l) æ E: - r) æ E - r) æ (kk aj - r) æ (v e - r) æ (L01 Aj - r) æ (k Aj - t) æ (C E: - v) æ E: - pr) æ (ge E: - tr) æ E - tr) æ (k 'aj - tr) æ (kA E + æ E + æ (CK E: + l) æ E: + r) æ E + r) æ (kk aj + r) æ (v e + r) æ (L01 Aj + r) æ (k Aj + t) æ (C E: + v) æ E: + pr) æ (ge E: + tr) æ E + tr) æ (k 'aj + tr) æ (kA E .group ø - ø W? - ø (CK W: - b) ø (g W - d) ø (r W - f) ø (r W: - g) ø (r @: - h) ø (j V - h) ø (r W: - k) ø (r W: - l) ø (s W: - m) ø W: - r) ø W: - s) ø W: - t) ø (r W - ø (r W - r) ø (CK W: - øg W - d) øg (n Vj - øj oj + ø W? + ø (CK W: + b) ø (g W + d) ø (r W + f) ø (r W: + g) ø (r @: + h) ø (j V + h) ø (r W: + k) ø (r W: + l) øg (n 'Vj + l) ø (s W: + m) ø W: + r) ø W: + s) ø W: + t) ø (r W + ø (r W + r) ø (CK W: + øg W + d) øg (n Vj + øj oj .group å - å O:? - å (CK V - å (r+ 0: - l) å (r V? + å O:? + å (CK V + å (r+ O: + l) å (r V .group - $ dVlar + $ dVlar + diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 7ab0b3bc..478e9a78 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -1,100 +1,6 @@ Phonemes which are used in the *_rules and *_list files -Dictionary zhy_dict - -a aa aai aan aau ai au e -ei eo eoi eu i iu o oe -oi ong ou u ui yu - -b c d f g h j k -l m n N p r s t -tS v w z - - -Dictionary fr_dict - -@ @- @2 a A~ e E E2 -E: E~ i i- i: o O o2 -O2 o3 O~ u u: W w^i wA -W~ y Y - -: b d dZ f g h j -k l m n N n2 n^ p -p2 r R r2 s S t t2 -t3 tS v w z Z z2 z3 - - -Dictionary nl_dict - -8 @ @- A a: E e: EI -eU i I O O: o: u VU -Wy y Y: yU - -* : ; b C d f g -h j k l m n N n^ -p Q r s S t tS v -v2 w x z - - -Dictionary jbo_dict - -@ a aI aU e eI i l- -o oI r- u - -- b d dZ f g h j -k l m n N p R s -S t tS v w x z Z - - -Dictionary hu_dict - -A a: E e: i i: o o: -u u: Y y y: Y: - -: b c C d dZ f g -h j J k l l^ m n -N n^ p R R2 s S s2 -t tS ts v z Z - - -Dictionary hy_dict - -@ a aI e eI i i@ o -u W y - -** b c d dZ dz f g -h j k k# l m n p -p# r R r" s S t t# -tS ts ts# v X z Z - - -Dictionary zh_dict - -@ @r a A ai Au E ei -i i. i[ iA iE io iou N- -o o- ong ou u u@ ua uai -uei uo y y& y@ yE yi yu - -; C f h j k kh l -L m n N p ph q r -R s s. S; t th ts ts. -ts. tS; tS; tsh v w x X -z. - - -Dictionary ca_dict - -@ a a# aI e E E2 i -o O u U - -* ** : ; b B d D -dZ; f g j J J^ k l -l^ m n N n^ p Q R -R2 s S; t T ts tS; v -v# w z Z Z; - - Dictionary af_dict & &: 3: @ @- @L @U a @@ -109,15 +15,81 @@ n N p r s S t T tS v w x x2 z Z -Dictionary id_dict +Dictionary bn_dict -@ a aI aU e E E2 i -o O u +& a a: a~ e E e~ i +I i: i:~ i~ l- o O o: +O~ o~ r- U u u: u:~ u~ +V -* : ? b d dZ f g -h j k l m n N n^ -p r R R2 s S t tS -v w x z +* b B bh c C ch d +d. dh dh. g gh h j J +Jh k kh l m n N n. +n^ p ph Q r r. s S +s. t t. th th. tS x z + + +Dictionary ca_dict + +@ a a# aI e E E2 i +o O u U + +* ** : ; b B d D +dZ; f g j J J^ k l +l^ m n N n^ p Q R +R2 s S; t T ts tS; v +v# w z Z Z; + + +Dictionary cs_dict + +@- a a: aU e e: eI eU +i i: l- o o: oU r- u +u: + +* ; b c d dZ dz f +g h j J k l l^ m +n N n^ p r R R^ R^/ +s S t tS ts v x z +Z + + +Dictionary cy_dict + +@ @- @I @Y a A: aI aU +AY aY E e: eU I i: Iu +O o: OI OY U u: uY V +Y y: Yu + +: b C d D dZ f g +h j k l L m n N +p r s S t T v w +x z + + +Dictionary da_dict + +& 0 3 @ @- a A e +E i o O u V W y +Y + +* - : ; ? b d D +dZ f g h j k l L +m n N p r R s S +t tS v w + + +Dictionary de_dict + +3 @ @- a A A: aI aU +E E2 E: e: EI I i2 i: +O o: OY U u: W y y: +Y: + +* : ; b C C2 d D +dZ f g h j k l m +n N p pF r s S t +tS ts v x z Z Dictionary el_dict @@ -147,114 +119,40 @@ s S t T t2 tS v w x z Z -Dictionary cs_dict +Dictionary eo_dict -@- a a: aU e e: eI eU -i i: l- o o: oU r- u -u: +@- a aI aU e eI eU i +o oI u uI -* ; b c d dZ dz f -g h j J k l l^ m -n N n^ p r R R^ R^/ -s S t tS ts v x z -Z +* - b d dZ f g h +j k l m n p r R +s S t T tS ts v w +x z Z -Dictionary grc_dict +Dictionary es_dict -a aI aU e E EI eU EU -i o O oI OI OU u y -yI +a aI aU e E eI eU i +o O oI u -: b d f g h j k -l m n N p R s t -T v x z +* ** : b B d D f +g j J J^ k l m n +N n^ p Q R R2 s t +T tS v v# w x z -Dictionary cy_dict +Dictionary eu_dict -@ @- @I @Y a A: aI aU -AY aY E e: eU I i: Iu -O o: OI OY U u: uY V -Y y: Yu +a aI aU e eI eU i o +oI u Y -: b C d D dZ f g -h j k l L m n N -p r s S t T v w +* ** : ; b B c d +D f g h j J k l +l^ m n n^ p Q r R +s S t tS ts tz v w x z -Dictionary hbs_dict - -& @ @2 a A a: aI aU -E e e: i I i: l- O -o o: oU r* r- u U u: - -* ; b d dZ dz dZ; f -g h j k l l^ m n -N n^ p r R R2 s S -t tS ts tS; v x z Z - - -Dictionary it_dict - -@- a a/ aI aU e E eI -i I o O u - -* : ; b d dZ f g -h j k l l^ m n N -n^ p r R s S t tS -ts v w w2 z - - -Dictionary sk_dict - -& @- a a: e e: i i: -l- l: o o: oU r- r: u -u: - -* ; b d d; dZ dz f -g h j k l l^ m n -N n^ p r R R^ R^/ s -S t t; tS ts v x z -Z - - -Dictionary ku_dict - -8 a e E E# eI eU i -I o u U y - -* : b c d dZ f g -h j J k l m n p -q r R s S t tS v -w x z Z - - -Dictionary sq_dict - -@ @/ a A a/ aI E e -eI i I I# O OI u V -y yE - -** : ; b c d D dZ -dz dZ; f g h j k l -L ll m n n^ p r R -R2 s S t T tS ts v -w z Z - - -Dictionary sw_dict - -@- a a/ e i m- n- N- -o u - -* : b d D f g h -j J k l m n N n^ -p Q R s S t T tS -v w x z - - Dictionary fi_dict & &i &y a a2 ai au e @@ -267,201 +165,40 @@ l m n N p r s S s2 t v w Z -Dictionary pl_dict +Dictionary fr_dict -a E E# E~ i O O~ u -y +@ @- @2 a A~ e E E2 +E: E~ i i- i: o O o2 +O2 o3 O~ u u: W w^i wA +W~ y Y -: ; b c C d d; dZ -dz dz; f g h j k l -m n N n^ p r R s -S s; S; t t; tS ts ts; -tS; v w x z Z Z; +: b d dZ f g h j +k l m n N n2 n^ p +p2 r R r2 s S t t2 +t3 tS v w z Z z2 z3 -Dictionary no_dict +Dictionary grc_dict -@ @2 a A a: A: AI aI -aU E E: e: I i: O o: -OI U u- u-: u-I u: W y -y: Y: Yy +a aI aU e E EI eU EU +i o O oI OI OU u y +yI -: ; b d f g h j -k l m n N p r R -s S s; t v w x z +: b d f g h j k +l m n N p R s t +T v x z -Dictionary vi_dict +Dictionary hbs_dict -@ @: @:I @:U @I @U a a: -a:I a:U aI aU E e eU EU -i i@ iU O o OI oI u -u@ uI y y@ yI +& @ @2 a A a: aI aU +E e e: i I i: l- O +o o: oU r* r- u U u: -b c d D f g h j -J k kh l m n N n^ -p Q r s s. t t[ ts; -tS; v w x z Z z. - - -Dictionary ro_dict - -@ @- @I @U a aI aU e -ea eI eo eU i i/ I^ iI -iU o O Oa oI oU u uI -y Y yI yU - -* *; - b b; c C d -d; dZ f f; g h j k -l l; m m; n N n; p -p; r s S S; t t; tS -ts ts; v v; w w2 x z -Z z; Z; - - -Dictionary lv_dict - -a a: ai au e e: ei i -i: ie iu o o: u u: ui -uo - -: b c d dZ f g h -j J k l l^ m n N -n^ p r R R2 s S t -tS ts v z Z - - -Dictionary pt_dict - -& &/ &U~ &~ @ @- a A -aI aU e E eI EI eU EU -i I i/ iU o O oI OI -o~ u U uI u~ y - -* : ; b C d dZ f +* ; b d dZ dz dZ; f g h j k l l^ m n -N n^ p Q r R r- s -S s# s; t T tS ts v -w x z Z - - -Dictionary tr_dict - -a e E i I o O u -U u# W y Y - -* : b c d dZ f g -h j J k l m n p -Q r R s S t tS v -w z Z - - -Dictionary ru_dict - -8 @- A a E e E# E2 -E3 i I I# I2 I3 I^ ja -ju o O u u" u# V V# -y Y - -* ; b d d; dZ; f g -j k l l^ m m; n n^ -p r R s S s; S; t -t; ts ts; tS; v x z Z -z; Z; - - -Dictionary eo_dict - -@- a aI aU e eI eU i -o oI u uI - -* - b d dZ f g h -j k l m n p r R -s S t T tS ts v w -x z Z - - -Dictionary mk_dict - -& @ @- @2 a A a: E -e e: i I i: l- o o: -oU r- u u: - -* b d dZ dz dZ; f g -h j k k^ l l^ m n -N n^ p r R s S t -tS ts tS; v x z Z - - -Dictionary es_dict - -a aI aU e E eI eU i -o O oI u - -* ** : b B d D f -g j J J^ k l m n -N n^ p Q R R2 s t -T tS v v# w x z - - -Dictionary is_dict - -& @- a aI aU e E eI -i I o O oU oU2 u W -y y# Yy - -* ** : ; b c C d -D f g h j J k l -l# m m# n N n# N# n^ -n^# p Q r R r# R2 s -s2 t T tl# v x z - - -Dictionary da_dict - -& 0 3 @ @- a A e -E i o O u V W y -Y - -* - : ; ? b d D -dZ f g h j k l L -m n N n^ p r R s -S t tS v w - - -Dictionary de_dict - -3 @ @- a A A: aI aU -E E2 E: e: EI I i2 i: -O o: OY U u: W y y: -Y: - -* : ; b C C2 d D -dZ f g h j k l m -n N p pF r s S t -tS ts v x z Z - - -Dictionary sv_dict - -8 @ a a2 A: E E- e: -E: I i: O o: U u- u: -W y y: Y: - -: ; b d f g h j -k l m n N p R s -S s. S; sx t v w z - - -Dictionary la_dict - -@- a a: aI aU E e: EU -I i: O o: OI U u: y -y: - -* : ; ? b d f -g h j k l m n N -p r R s t w z +N n^ p r R R2 s S +t tS ts tS; v x z Z Dictionary hi_dict @@ -479,42 +216,71 @@ r. s S s. t T t. th th. v w x z -Dictionary ta_dict +Dictionary hu_dict -a a: aI aU e E e: i -I i: o o: U u u: V +A a: E e: i i: o o: +u u: Y y y: Y: -: ; b C d d. dZ f -g h j k l l. m n -N n. n^ p r R s S -s. t t. th tS v w z -z. +: b c C d dZ f g +h j J k l l^ m n +N n^ p R R2 s S s2 +t tS ts v z Z -Dictionary bn_dict +Dictionary hy_dict -& a a: a~ e E e~ i -I i: i:~ i~ l- o O o: -O~ o~ r- U u u: u:~ u~ -V +@ a aI e eI i i@ o +u W y -* b B bh c C ch d -d. dh dh. g gh h j J -Jh k kh l m n N n. -n^ p ph Q r r. s S -s. t t. th th. tS x z +** b c d dZ dz f g +h j k k# l m n p +p# r R r" s S t t# +tS ts ts# v X z Z -Dictionary eu_dict +Dictionary id_dict -a aI aU e eI eU i o -oI u Y +@ a aI aU e E E2 i +o O u -* ** : ; b B c d +* : ? b d dZ f g +h j k l m n N n^ +p r R R2 s S t tS +v w x z + + +Dictionary is_dict + +& @- a aI aU e E eI +i I o O oU oU2 u W +y y# Yy + +* ** : ; b c C d D f g h j J k l -l^ m n n^ p Q r R -s S t tS ts tz v w -x z +l# m m# n N n# N# n^ +n^# p Q r R r# R2 s +s2 t T tl# v x z + + +Dictionary it_dict + +@- a a/ aI aU e E eI +i I o O u + +* : ; b d dZ f g +h j k l l^ m n N +n^ p r R s S t tS +ts v w w2 z + + +Dictionary jbo_dict + +@ a aI aU e eI i l- +o oI r- u + +- b d dZ f g h j +k l m n N p R s +S t tS v w x z Z Dictionary kn_dict @@ -531,6 +297,52 @@ s. S; t t. th th. tS v w z +Dictionary ku_dict + +8 a e E E# eI eU i +I o u U y + +* : b c d dZ f g +h j J k l m n p +q r R s S t tS v +w x z Z + + +Dictionary la_dict + +@- a a: aI aU E e: EU +I i: O o: OI U u: y +y: + +* : ; ? b d f +g h j k l m n N +p r R s t w z + + +Dictionary lv_dict + +a a: ai au e e: ei i +i: ie iu o o: u u: ui +uo + +: b c d dZ f g h +j J k l l^ m n N +n^ p r R R2 s S t +tS ts v z Z + + +Dictionary mk_dict + +& @ @- @2 a A a: E +e e: i I i: l- o o: +oU r- u u: + +* b d dZ dz dZ; f g +h j k k^ l l^ m n +N n^ p r R s S t +tS ts tS; v x z Z + + Dictionary ml_dict a a: aI aU e E e: i @@ -570,6 +382,30 @@ s S s. t T t. th v w x z z. +Dictionary nl_dict + +8 @ @- A a: E e: EI +eU i I O O: o: u VU +Wy y Y: yU + +* : ; b C d f g +h j k l m n N n^ +p Q r s S t tS v +v2 w x z + + +Dictionary no_dict + +@ @2 a A a: A: AI aI +aU E E: e: I i: O o: +OI U u- u-: u-I u: W y +y: Y: Yy + +: ; b d f g h j +k l m n N p r R +s S s; t v w x z + + Dictionary pap_dict a a/ aI e E eI i o @@ -581,6 +417,82 @@ R s S t tS v w x z Z +Dictionary pa_dict + +@ a a~ e E e~ E~ i +I i~ I~ o O O~ o~ r- +U u u~ U~ V V~ + +: ; b bh c ch d d. +dh dh. f g gh h H j +J Jh k kh l l. m n +N n. n^ p ph Q R R2 +s S t t. th th. v x +z + + +Dictionary pl_dict + +a E E# E~ i O O~ u +y + +: ; b c C d d; dZ +dz dz; f g h j k l +m n N n^ p r R s +S s; S; t t; tS ts ts; +tS; v w x z Z Z; + + +Dictionary prs_dict + +@ A i o + +b d h l t X + + +Dictionary pt_dict + +& &/ &U~ &~ @ @- a A +aI aU e E eI EI eU EU +i I i/ iU o O oI OI +o~ u U uI u~ y + +* : ; b C d dZ f +g h j k l l^ m n +N n^ p Q r R r- s +S s# s; t T tS ts v +w x z Z + + +Dictionary ro_dict + +@ @- @I @U a aI aU e +ea eI eo eU i i/ I^ iI +iU o O Oa oI oU u uI +y Y yI yU + +* *; - b b; c C d +d; dZ f f; g h j k +l l; m m; n N n; p +p; r s S S; t t; tS +ts ts; v v; w w2 x z +Z z; Z; + + +Dictionary ru_dict + +8 @- A a E e E# E2 +E3 i I I# I2 I3 I^ ja +ju o O u u" u# V V# +y Y + +* ; b d d; dZ; f g +j k l l^ m m; n n^ +p r R s S s; S; t +t; ts ts; tS; v x z Z +z; Z; + + Dictionary rw_dict a e i o u @@ -591,21 +503,110 @@ N n^ p q R s S S; t tS v w x z -Dictionary pa_dict +Dictionary sk_dict -@ a a~ e E e~ E~ i -I i~ I~ o O O~ o~ r- -U u u~ U~ V V~ +& @- a a: e e: i i: +l- l: o o: oU r- r: u +u: -: ; b bh c ch d d. -dh dh. f g gh H j J -Jh k kh l l. m n N -n. n^ p ph Q R s S -t t. th th. v x z +* ; b d d; dZ dz f +g h j k l l^ m n +N n^ p r R R^ R^/ s +S t t; tS ts v x z +Z -Dictionary prs_dict +Dictionary sq_dict -@ A i o +@ @/ a A a/ aI E e +eI i I I# O OI u V +y yE -b d h l t X +** : ; b c d D dZ +dz dZ; f g h j k l +L ll m n n^ p r R +R2 s S t T tS ts v +w z Z + + +Dictionary sv_dict + +8 @ a a2 A: E E- e: +E: I i: O o: U u- u: +W y y: Y: + +: ; b d f g h j +k l m n N p R s +S s. S; sx t v w z + + +Dictionary sw_dict + +@- a a/ e i m- n- N- +o u + +* : b d D f g h +j J k l m n N n^ +p Q R s S t T tS +v w x z + + +Dictionary ta_dict + +a a: aI aU e E e: i +I i: o o: U u u: V + +: ; b C d d. dZ f +g h H j k l l. m +n N n. n^ p r R s +S s. t t. th tS v w +z z. + + +Dictionary tr_dict + +a e E i I o O u +U u# W y Y + +* : b c d dZ f g +h j J k l m n p +Q r R s S t tS v +w z Z + + +Dictionary vi_dict + +@ @: @:I @:U @I @U a a: +a:I a:U aI aU E e eU EU +i i@ iU O o OI oI u +u@ uI y y@ yI + +b c d D f g h j +J k kh l m n N n^ +p Q r s s. t t[ ts; +tS; v w x z Z z. + + +Dictionary zh_dict + +@ @r a A ai Au E ei +i i. i[ iA iE io iou N- +o o- ong ou u u@ ua uai +uei uo y y& y@ yE yi yu + +(u) ; C f h j k kh +l L m n N p ph q +r s s. S; t th ts ts. +ts. tS; tS; tsh v w x X +z. + + +Dictionary zhy_dict + +a aa aai aan aau ai au e +ei eo eoi eu i iu o oe +oi ong ou u ui yu + +b c d f g h j k +l m n N p r s t +tS v w z diff --git a/dictsource/en_list b/dictsource/en_list index c436032a..00dc18b7 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -98,6 +98,7 @@ _?A l,Et3 _?? sImb@L _#9 tab _#32 speIs +… _::d%0td,0t // for elipsis or ... while reading _  hA@dspeIs // U+00A0 no-break-space _! Ekskl@m'eIS@n @@ -436,7 +437,7 @@ abstract a2bstr'akt $verb academe a2kad@mI access aksEs $onlys access aksEs $verb -accouche a2ku:S +accouchement a2ku:SmO~ acer eIs3 aces eIsI2z acetylene a2sEt@li:n @@ -1519,6 +1520,8 @@ motif moUt'i:f moustache m@st'aaS mouths maUDz $only movies mu:vI2z +multitude $1 +multiplexer $1 mundane $2 murmur m3:m3 ?5 murmur mVRm3 @@ -1553,7 +1556,7 @@ nobody 'noUb0dI nocturnal $2 nomenclature n@mENkl@tS3 nonsense n0ns@ns -nonetheless n0nD@l'Es +nonetheless nVnD@l'Es nosedive noUzdaIv not noUt // for noted, notable, etc nott n0t @@ -1655,6 +1658,7 @@ pasting peIstI2N pastry peIstrI pate pateI pathos peIT0s +paypal peIpal pear pe@ peculiar pI2kju:lI3 pedalo pEd@loU @@ -2609,8 +2613,6 @@ Graeme greI@m Graham greI@m Hadrian heIdri:@n Harriet hari@t -Hugh hju: -Hughes hju:z Huw hju: Iain i:@n Ian i:@n @@ -3045,7 +3047,7 @@ your jO@ $u $nounf $only their De@ $u $nounf $only theirs De@z -none n0n +none nVn noone noUw0n anyone EnIw0n everyone EvrIw0n @@ -3192,7 +3194,6 @@ like laIk $strend2 ?3 err e@ ?3 fortune fO@tS@n ?3 garage ga2rA:Z -?3 happy hapi: ?3 herb 3:b ?3 hurricane h3:@keIn ?3 investigative Inv,EstI2g'eItIv diff --git a/dictsource/en_rules b/dictsource/en_rules index c5a3f8a1..d9a95f13 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -878,8 +878,9 @@ ch) ar (it ar ph) ar (i ar m) ar (i @r - m) ar (ig ar - m) ar (inaC ar + _m) ar (i ar + m) ar (in @r + _m) ar (inaC ar m) ar (iner ar m) ar (io ar htm) ar e@ @@ -892,7 +893,7 @@ &) ar (in_ @r v) ar (iA e@r @) ar (ity ar - ar (iu 'e@r + ar (iu+ 'e@r arom (at a2roUm arre (_ A@ arred (_ A@d @@ -1286,6 +1287,7 @@ ch (é+ S ch (ef S ch (em k + chement (_ =SmO~ ch (ev S chez SeI Ca) ch (e S @@ -2016,6 +2018,7 @@ en (core 0n &) ency (_ @ns%I ency (cli %EnsI + en (dA_ 'En _) en (d En _) en (da %En eg) en (d @n @@ -2786,7 +2789,7 @@ p) ie (_ aI pp) ie (_ I ie (f i: - iege i:dZ + ieg (e# i:dZ ie (go I'eI ieh (C i: iei (_ i:aI @@ -2820,7 +2823,7 @@ ie (t aI@ @) ie (th i@ iesta i:'Est@ - iette I2'Et + ie (tt I2'E @) iety 'aI@t%I l) ieu u: l) ieu (te %Ef @@ -3356,6 +3359,7 @@ @) most(_S4 moUst &) mouth (_ m@T _) multi mVltI + _) multi (@@P5 m,VltI .group mi millen mI2lEn @@ -3483,7 +3487,7 @@ oa oU oar (_ o@ oar o@ - o (atia oU + cr) o (at oU br) oa (d O: o (ba oU t) o (bacc @ @@ -3894,6 +3898,7 @@ @) or (ic_ '0r or (ig 0r &) ored (_ @d + h) ored (_S1 d _f) ore (C O@ f) ore (clo %o@ f) ore (st 0rI @@ -4619,6 +4624,7 @@ _ca) su Zu: _) sus (A su:z su (al Zu: + n) su (al sju: _) su (b sV su (bdue s%V su (bmerg s@ @@ -4704,6 +4710,7 @@ tsch tS _) two tu: ttu (r t@ + @) tu (al tSu: @) tu (late =tSU @) tur (A tS@r @) tur (al_ tS=@r @@ -4817,6 +4824,7 @@ f) u (gal 'ju: ug (er_ u:g s) ugge (st @dZE + h) ugh ju: mp) ug (n ju: uh (C u: u (i ju: @@ -4847,6 +4855,7 @@ _f) ully UlI f) ull Ul p) ull Ul + _) ultra (@ ,Ultra u (ly u: d) u (ly ju: u (lul V @@ -4859,8 +4868,8 @@ uoy OI _) us (_ Vz _) us (A ju:z + usu (al ju:Zu: &) us (_ @s - usua (l ju:Zu: u (sh V b) u (sh U c) u (sh U @@ -5246,6 +5255,7 @@ En (_ @n ?8 En (_ En En (atA @n + En (dA_ 'En E (ndous E Ener (_ _n@ Ening (_ _nI2N diff --git a/dictsource/fr_list b/dictsource/fr_list index 2aae64ed..c6b67e69 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -24,7 +24,7 @@ // 2006-11-18 Gilles Casse // -// Updated 2009-10-09 Michel Such +// Updated 2009-10-26 Michel Such // // * Numbers, a few abbreviations and exceptions. // @@ -364,10 +364,11 @@ afin afE~ $u+ $brk avant $u+ après $u+ (temps en temps) tA~zA~tA~ -alors alOr $u+ -depuis $u+ ainsi $u+ +alors alOr $u+ aussi $u+ +encore $u+ +depuis $u+ certes $u+ @@ -571,11 +572,8 @@ quelques kElk=@z2 $u+ tel $u+ telle $u+ telles $u+ -tout t'ut2 $u+ -toute t'ut $u+ -toutes t'utz2 $u+ -tous $u+ -rien Ri-'E~n2 $u+ +tout t'ut2 +rien Ri-'E~n2 // Letters which can be words //=========================== @@ -632,7 +630,7 @@ anis anis arte arte auvent ovA~ beta beta -bien bi-E~n2 $u+ +bien bi-E~n2 bis bis bissus bisys blues _^_en @@ -899,3 +897,4 @@ venezuela venezyela wallis wAlis futuna futuna zimbabwe zimbabwe + diff --git a/dictsource/fr_rules b/dictsource/fr_rules index 74068885..e0464db9 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -1477,3 +1477,4 @@ _r) w (an u // Rwanda + diff --git a/dictsource/hu_list b/dictsource/hu_list index 9838f346..406593ac 100755 --- a/dictsource/hu_list +++ b/dictsource/hu_list @@ -77,36 +77,135 @@ _0M1o EzR2Edik _1M1o EzR2Edik _2M1o ke:tEzR2Edik -_0-a A -_0-i Ei -_0-e E -_0-án a:n -_0-ára a:R2A -_0-ére e:R2E -_0-ra a:R2A -_0-re e:R2E -_0-én e:n -_0-ai Ai -_0-ei Ei -(1-e) elseje $text -(1-én) elsején $text -(1-jén) elsején $text -(1-i) elsejei $text -(1-ei) elsejei $text -(1-ére) elsejére $text -(1-re) elsejére $text -(2-i) másodikai $text -(3-i) harmadikai $text -(6-i) hatodikai $text -(8-i) nyolcadikai $text -(13-i) tizenharmadikai $text -(16-i) tizenhatodikai $text -(18-i) tizennyolcadikai $text -(20-i) huszadikai $text -(23-i) huszonharmadikai $text -(26-i) huszonhatodikai $text -(28-i) huszonnyolcadikai $text -(30-i) harmincadikai $text + +// $alt2 means these rules only apply if the previous word +// has $alt1 (language specific). $text implies $only (for this group only) + +_0-a A $alt2 +_0-i Ei $alt2 +_0-e E $alt2 +_0-án a:n $alt2 +_0-ára a:R2A $alt2 +_0-ére e:R2E $alt2 +_0-ra a:R2A $alt2 +_0-re e:R2E $alt2 +_0-én e:n $alt2 +_0-ai Ai $alt2 +_0-ei Ei $alt2 +_0-től e:tY:l $alt2 +_0-tól a:to:l $alt2 +_0-ig e:ig $alt2 //special date ordinal numbers for example elsejéig, negyedikéig etc. + +(1-e) elseje $text $alt2 +(1-én) elsején $text $alt2 +(1-jén) elsején $text $alt2 +(1-i) elsejei $text $alt2 +(1-ei) elsejei $text $alt2 +(1-ére) elsejére $text $alt2 +(1-re) elsejére $text $alt2 +(1-től) elsejétől $text $alt2 +(1-ig) elsejéig $text $alt2 + +(2-i) másodikai $text $alt2 +(2-ig) másodikáig $text $alt2 +(3-i) hAR2_mAdikAi $alt2 +(3-ig) harmadikáig $text $alt2 +(6-i) hAtodikAi $alt2 +(6-ig) hatodikáig $text $alt2 +(8-i) n^'oltsAdikAi $alt2 +(8-ig) nyolcadikáig $text $alt2 +(13-ig) tizenharmadikáig $text $alt2 +(16-ig) tizenhatodikáig $text $alt2 +(18-ig) tizennyolcadikáig $text $alt2 +(20-i) huszadikai $text $alt2 + +(20-ig) huszadikáig $text $alt2 +(23-ig) huszonharmadikáig $text $alt2 +(26-ig) huszonhatodikáig $text $alt2 +(28-ig) huszonnyolcadikáig $text $alt2 +(30-ig) harmincadikáig $text $alt2 +(30-i) harmincadikai $text $alt2 + + + +// these exceptions only for 0, not for other numbers ending in '0' +(0-ás) nul:a:S +(0-t) nul:a:t +(0-val) nul:a:vAl + +// entries with a single digit such as (2-i) also apply to 22, 32, etc, unless $only + +// with these suffixes, use [J:] not [J] +(1-es) EJ:ES +(1-et) EJ:Et +(1-est) EJ:ESt +(1-esét) EJ:ESe:t +(1-esével) EJ:ESe:vEl +(1-essel) EJ:ES:El +(1-eseik) EJ:ESEik +(1-eseikkel) EJ:ESEik:El +(1-eseiket) EJ:ESEikEt +(1-esekkel) EJ:ESEk:El +(1-esek) EJ:ESEk +(1-el) EJ:El + +(2-es) kEt:ES +(2-est) kEt:ESt +(2-essel) kEt:ES:El +(2-őt) kEt:Y:t +(2-esen) kEt:ESEn +(2-esével) kEt:ESe:vEl +(2-n) kEt:Y:n +(2-esekkel) kEt:ESEk:El +(2-eseket) kEt:ESEkEt +(2-eseik) kEt:ESEik + +(3-as) ha:R2mAS +(3-asának) ha:R2mASa:nAk +(3-ason) ha:R2mASon +(3-assal) ha:R2mAS:Al +(3-asával) ha:R2mASa:vAl +(3-ast) ha:R2mASt +(3-at) ha:R2mAt +(3-al) ha:R2om:Al + +(4-el) ne:J:El //4 number suffixes (now contains one suffix) +(5-tel) Yt:El +(5-el) Yt:El +(6-al) hAt:Al +(6-tal) hAt:Al + +(7-es) hEtES +(7-est) hEtESt +(7-esek) hEtESEk +(7-eseket) hEtESEkEt +(7-esekkel) hEtESEk:El +(7-esbe) hEtESbE +(7-esben) hEtESbEn +(7-esük) hEtESyk +(7-tel) he:t:El +(7-el) he:t:El + +(10-es) tizES // use [i] not [i:] +(10-est) tizESt +(10-essel) tizES:El +(10-esével) tizESe:vEl + +(20-as) husAS // use [u] not [u:] +(20-ast) husASt +(20-assal) husAS:Al +(20-asával) husASa:vAl + +//special number exceptions +(10-el) ti:zzEl +(20-al) hu:s:Al +(30-al) hAR2mints:Al +(40-el) nEJvEn:El +(50-el) YtvEn:El +(60-al) hAtvAn:Al +(70-el) hEtvEn:El +(80-al) n^oltsvAn:Al +(90-el) kilEntsvEn:El // These words mean that a dot after number, immediately preceding, does not mean an ordinal number január $alt @@ -126,6 +225,7 @@ december $alt //The following 12 row contains shorter hungarian month names jan $alt feb $alt +febr $alt márc $alt ápr $alt máj $alt @@ -172,13 +272,30 @@ _cap n'AJ_| // Abbreviations ÁNTSZ a:Ente:Es $allcaps km kilo:me:tER2 +GYSEV JESEv $allcaps +GYESEV JESEv $allcaps +HÉV he:v $allcaps +City siti $capital +GDP dZi:di:pi: $allcaps +HSDPA $abbrev $allcaps +ORTT $abbrev $allcaps +ORFK oEREfka: $abbrev $allcaps +MÁV ma:v $allcaps +MTI $abbrev $allcaps mm milime:tER2 +VDSZSZ ve:de:EsEs $allcaps a.m An^n^i||m'int $dot +ún u:JnEvEzEt: $dot dr doktoR2 $dot +mr mistER2 $dot //in hungarian we not use, but lot of books contains this word. +mrs misis $dot //In hungarian we not use, but lot of book contains this word. gpu $abbrev +GB gigAba:jt $allcaps +MB mEgAba:jt $allcaps +OK ok $allcaps mvgyosz Emve:Je:oEs -OTP $abbrev +OTP o:te:pe: $allcaps id idY:SEb: $dot ill illEtvE $dot ifj ifjAb: $dot @@ -193,24 +310,25 @@ vö v'EZd||_'Yss2E // Articles -a $u // the -az $u -aki $u+ // that +a $u $strend2 // the +az $u $strend2 +//aki $u+ // that -ez $u+ // this +ez $unstressend // this // Pronouns // If these are only used for emphasis then then don't need $u -// én $u -// te $u -// ő $u -// mi $u -// ti $u -// ők $u -// maga $u -// maguk $u +én $unstressend +te $unstressend + +ők $unstressend $pause +mi $unstressend +ti $unstressend +ők $unstressend +maga $unstressend +maguk $unstressend // Conjunctions @@ -222,7 +340,6 @@ mert $u $pause // because miatt $u // because bár $u $pause // although habár $u $pause // although - ha $u $pause // if noha $u $pause // even thought @@ -231,132 +348,280 @@ noha $u $pause // even thought // Negative -nem $u $combine $strend -ne $u+ +nem $unstressend $combine $strend +ne $unstressend e $u // "-e" question e $atend // stressed at end of sentence // Unstressed adverbs prepositions etc. -néhány $u+ +néhány $unstressend is $u // also -elöl $u // in front of -elől $u -elé $u -előtt $u +elöl $unstressend // in front of +elől $unstressend +elé $unstressend +előtt $unstressend -mögül $u // behind -mögött $u -mögé $u +mögül $unstressend // behind +mögött $unstressend +mögé $unstressend -kívül $u -után $u // after +kívül $unstressend +után $unstressend // after -alól $u -alá $u -alatt $u // below +alól $unstressend +alá $unstressend +alatt $unstressend // below -felől $u // above -felé $u -fölé $u -felett $u // above -fölött $u - -mellől $u // besides -mellé $u -mellett $u - -közül $u -közé $u -között $u +felől $unstressend // above +felé $unstressend +fölé $unstressend +felett $unstressend // above +fölött $unstressend +//mellől $u // besides +//mellé $u +//mellett $u +lett $unstressend +ott $unstressend +itt $unstressend +neked $unstressend +nektek $unstressend +nekik $unstressend +neki $unstressend +nekem $unstressend +//közül $u +//közé $u +//között $u an $u // so many persons as $u -ba $u // into -ban $u // in -be $u -ben $u -ból $u // from inside -ből $u +ba $unstressend // into +ban $unstressend // in +be $unstressend +ben $unstressend +ból $unstressend // from inside +ből $unstressend e $u // in query, his/her ei $u // his her multiole en $u es $u -hez $u -hoz $u // to -höz $u -ig $u // up to -ik $u // -th -nak $u // of, him/her -nek $u -nál $u // by -nél $u -on $u // on -en $u // on +hez $unstressend +hoz $unstressend // to +höz $unstressend +ig $unstressend // up to +ik $unstressend // -th +nak $unstressend // of, him/her +nek $unstressend +nál $unstressend // by +nél $unstressend +on $unstressend // on +en $unstressend // on os $u -ra $u // onto -re $u -ról $u // from top of, about -röl $u -ről $u +ra $unstressend // onto +re $unstressend +ról $unstressend // from top of, about +röl $unstressend +ről $unstressend szer $u szor $u // times +szó $unstressend szór $u ször $u -tól $u // from -töl $u -től $u -val $u // with -vel $u +tól $unstressend // from +töl $unstressend +től $unstressend +val $unstressend // with +vel $unstressend án $u // on that day é $u // his, her éi $u // his, her multiple -én $u +én $unstressend ón $u ós $u -ön $u +ön $unstressend ös $u -ellen $u // against -elé $u // before -óta $u // since +ellen $unstressend // against +//elé $u // before +//óta $u // since -sok $u // many -kevés $u // few -se $u // neither -sem $u // nor +sok $unstressend // many +kevés $unstressend // few +se $unstressend // neither +sem $unstressend // nor -be $u //into -ki $u // out of -le $u // down -fel $u // up -föl $u // up -meg $u // finish an action -el $u // away -át $u //through -rá $u //onto -ide $u // here -oda $u // there -szét $u //apart -össze $u //connect with -vissza $u //back -ellen $u //against +be $unstressend //into +ki $unstressend // out of +le $unstressend // down +fel $unstressend // up +föl $unstressend // up +meg $unstressend // finish an action +el $unstressend // away +át $unstressend //through +rá $unstressend //onto -volna $u // would -részén $u //on ... part of +ide $unstressend // here +oda $unstressend // there +szét $unstressend //apart +//össze $u //connect with +//vissza $u //back +volna $unstressend // would +//részén $u //on ... part of -nélkül $u // without -folytán $u // because of -úgy $u // like that -így $u // like this -egyaránt $u // alike -minden $u // all -részben $u // partly +nélkül $unstressend // without +//folytán $u // because of +úgy $unstressend // like that +így $unstressend // like this +egyaránt $unstressend // alike +//minden $strend // all +mindent $strend +//részben $u // partly -egyik $u // one of -másik $u // the other +egyik $unstressend // one of +//másik $u // the other +lehet $unstressend +rossz $unstressend +jó $unstressend +jót $unstressend +kér $unstressend +tartják $unstressend +erős $unstressend +lennie $unstressend +közt $u+ +levegőjére $unstressend +ad $unstressend +kapják $unstressend +kap $unstressend +már $unstressend +maradt $unstressend +jobb $unstressend +most $unstressend +még $unstressend +gép $unstressend +részt $unstressend +lenne $unstressend +őt $unstressend +helyes $u+ +fák $unstressend +et $unstressend +megvédeni $unstressend +sztrájk $unstressend +hír $unstressend +magukat $unstressend +majd $unstressend +áll $unstressend +állt $unstressend +arról $unstressend +innen $unstressend +érjen $unstressend +nap $unstressend +név $unstressend +lány $unstressend +lányt $unstressend +vár $unstressend +várt $unstressend +ért $unstressend +ér $unstressend +tag $unstressend +tesz $unstressend +tett $unstressend +tette $unstressend +baj $unstressend +csak $unstressend +vált $unstressend +jut $unstressend +legyen $unstressend +azt $unstressend +ezt $unstressend +út $unstressend +tiszt $unstressend +vesz $unstressend +cég $unstressend +járt $unstressend +jár $unstressend +él $unstressend +élsz $unstressend +élt $unstressend +hát $unstressend +fiú $unstressend +srác $unstressend +ült $unstressend +ám $unstressend +rám $unstressend +tűnik $unstressend +nyújt $unstressend +nincsen $unstressend +mégy $unstressend +nő $unstressend +nőt $unstressend +sas $unstressend +sast $unstressend +fél $unstressend +félt $unstressend +félsz $unstressend +düh $unstressend +más $unstressend +mást $unstressend +rúd $unstressend +mint $unstressend $brk $combine +iránt $unstressend +légy $unstressend +tűnt $unstressend +ösét $unstressend +új $unstressend +nyúlt $unstressend +magát $unstressend +engem $unstressend +téged $unstressend +minket $unstressend +titeket $unstressend +őket $unstressend +cikk $unstressend +vont $unstressend +mond $unstressend +jutni $unstressend +jött $unstressend +szólsz $unstressend +lőtt $unstressend +sor $unstressend +árt $unstressend +fest $unstressend +fújt $unstressend +kért $unstressend +tét $unstressend +kém $unstressend +jön $unstressend +bent $unstressend +kezd $unstressend +ránk $unstressend +gondolt $unstressend +dönt $unstressend +véli $unstressend +folyt $unstressend +döntött $unstressend +fájt $unstressend +hozni $unstressend +lát $unstressend +kép $unstressend +nyert $unstressend +függ $unstressend +hidd $unstressend +megy $unstressend +hírt $unstressend +hely $unstressend +jutott $unstressend +mit $unstressend +forrás $unstressend +terv $unstressend +mind $unstressend +ment $unstressend +jól $unstressend +napját $unstressend +több $unstressend +tart $unstressend +hág $unstressend // word pairs @@ -390,7 +655,7 @@ lesztek $u lesznek $u -kell $u+ // should +kell $unstressend // should szabad $u+ // can (allowed) @@ -458,7 +723,9 @@ ny En^ ø $accent ß _^_DE -. pont $max3 +… _p%ontp%ontp%ont // 3 or more dots are changed to elipsis +. p%ont $max3 +_. pont * tSillAg $max3 % sa:zAle:k $max3 + plus $max3 @@ -493,7 +760,8 @@ _[ n^'ito:sYglEtES $max3 _] z'a:R2o:sYglEtES $max3 _{ k'EzdY:kAptSoS $max3 _} v'e:gkAptSoS $max3 -_… pontpontpont $max3 +_… pontpontpont + _• di:spont _| fyg:Y:lEgESvonAl _> nAJob @@ -515,5 +783,12 @@ egyezség eggyesség (Szvsz) eszvéesz -(edik szeptember) szeptember +(CD-k) cédék +(cd-k) cédék +(CD-n) cédén +(cd-n) cédén +(cd-d) cédéd +(CD-d) cédéd +(db-os) darabos +(db-ot) darabot diff --git a/dictsource/hu_rules b/dictsource/hu_rules index e25cfa13..62d1134e 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -1,4 +1,3 @@ - // Hungarian translation rules // This file is UTF-8 encoded @@ -9,10 +8,13 @@ û ű + .group a a A _) a (_ %A - _) alattvaló _!'AlAtvAlo: + D00_-) al (_ zAl // double z for 100-al + 000_-) al (_ Al // ... but not 1000-al + _) alattvaló AlAtvAlo: .group á á a: @@ -26,7 +28,7 @@ @) ban (_S3 bAn @) ben (_S3 bEn - biz (A b'iz, // bizalmas etc. + biz (A biz, // bizalmas etc. biedermeier bi:dER2ma:jER2 .group c @@ -35,8 +37,8 @@ cs tS ccs tS: !) cz ts // in names which start with a capital letter - ar) csz (e ts -harmin) c ts + csz ts|s + ar) c (cson ts anar) ch (i C balda) ch (in C hierar) ch (i C @@ -51,28 +53,19 @@ hierar) ch (i C szé) ch tS _zi) ch (y tS - c (szín tS - dA) c (sz ts - kilen) c (sz ts - kvar) c (sz ts mala) c (sá ts - nyol) c (sz ts - har) c (sz ts - lán) c (sz ts pá) c (só ts - per) c (sz ts pol) c (so ts por) c (sé ts por) c (sz ts - rán) c (sz ts - tán) c (sz ts _szé) che (ny tSe: _szé) ché (ny tSe: _sto) ck (holm k - + har) c (csoport ts _) church tSYR2tS + lán) c (cs ts .group d d d @@ -85,15 +78,28 @@ hierar) ch (i C beszé) d (szin d cselé) d d fogó) dz (kod ts + fogó) dz (ó z fenyegető) dz z föl) d (sánc d + ha) dd (_S2 d ha) d (járat d ha) d (sor d hor) d (szék d +máso) d (sor d + akaró) dz z +hallgató) dz z + húzó) dz ts harapó) dz z himbáló) dz z + lopó) dz z +tapogató) dz z + villó) dz z + e) dz (ő dz + e) dz (és dz + pa) d (sor d ren) d (sza d + va) d (sző d kére) dz ts mentegető) dz z @@ -107,6 +113,7 @@ mentegető) dz z dsz ts dsz (C ts dsz (a ds + dsz (á ds a) dsz (A ts: e) dsz (A ts: o) dsz (A ts: @@ -127,9 +134,10 @@ mentegető) dz z .group e e E + 000_-) el (_ REl // double R for 1000-el +000000_-) el (_ El // ... but not 1000000-el - D_-_) es (_ %ES - _) egyezség _!'EJ:ESSe:g + _) egyezség EJ:ESSe:g .group é é e: @@ -145,6 +153,7 @@ mentegető) dz z f f + .group g g g gg g: @@ -165,19 +174,24 @@ mentegető) dz z _e) gy (ik J: _e) gy (üt J: e) gyj (elentésű Jj + lá) gy (sá J gyön) gy (sor J _minde) gy (ik J: na) gysz (a Js - + na) gy (sokára J +na) gy (siet J _) goethe gY:tE _) goethé gY:te: me) g (gy g le) g (gy g orszá) g (gyűlés g + ú) gy (se J + seho) gy (se J .group h h h + hertz hER2ts .group i i i @@ -190,6 +204,8 @@ _minde) gy (ik J: íts i:tS: fesz) ítsd i:tSd ford) ítsd i:tSd + szól) ítsd i:tSd + áll) ítsd i:tSd semmis) ítsd i:tSd bizony) ítsd i:tSd @@ -216,13 +232,22 @@ bizony) ítsd i:tSd .group l l l + fe) l (ju l + fe) l (jö l +fe) l (jegy l +fe) l (jelen l + + e) l (jö l + lj l^j cé) l (já jj ly j lly jj - A) lj (A l^j + e) l (jut l + e) l (jus l + á) ll (j j beszé) lj jj bére) lj jj @@ -240,9 +265,10 @@ szamue) ly lli mi) ll (i l + + .group m m m - ko) mm (uni m @@ -257,9 +283,17 @@ szamue) ly lli nj n^n^ nyj n^n^ - _) nem (- n,Em // has $combine attribute in hu_list, combine with the next word + _) nem (- nEm // has $combine attribute in hu_list, combine with the next word me) nny (ország n^ me) nny (d n^ + me) nny (k n^ + pihe) nj (_S2 n^ +főbe) n (jár n +szí) n (játék n +ingye) n n + + + sze) nny (víz n^ ajá) nlj j: @@ -267,7 +301,7 @@ szamue) ly lli o o _r) oose (velt u:z - _) otthon othon + otthon othon .group ó ó o: @@ -307,7 +341,7 @@ szamue) ly lli ssz ss2 szts stS: sztsze stsE - + sztsza stsA föld) s (ánc S s (színű S hel) s (inki z @@ -338,7 +372,8 @@ liszte) szs (ák SZ rend) sz (er s: robbaná) s S robbaná) ss S: - +ejtőernyő) ssz S|s +krumpli) s (zsák S .group t @@ -348,10 +383,13 @@ robbaná) ss S: tc ts: tt t: ttk t:k + tth t:h @) tól (_S3q to:l @) től (_S3q tY:l tt (C tt ttn t:n + ttm t:m + ttl t:l ttr t:R2 ty c // s) ty c: // @@ -363,6 +401,8 @@ robbaná) ss S: apá) ts (ág tS: becsüle) t t becsüle) tt t: +bizo) ts (ág tS: + csapa) t (jel t cson) t t cson) tt t: cson) tj c @@ -370,32 +410,55 @@ becsüle) tt t: ezüs) tt t: éle) t t éle) tt t: + fron) t (szolgál t gyapo) t t gyapo) tt t: +gondola) t (sor t gráni) t t gráni) tt t: já) tsz ts: já) tssz ts: - tsz ts: + já) tsz (m ts + tsz (_S3 ts: + tsz (é ts: + tsz (o ts: + tsz (ő ts: + tszó (_S4 ts:o: + tsz (a t|s + tsz (e t|s + tsz (á t|s + me) tsz (et ts: + ada) t t + ada) tt t: + ké) t (sarok t + ké) t (sor t + ké) t (sáv t + ké) tsz (er ts: + ö) tsz (ör ts: + hé) tsz (er ts: kegyele) t t kegyele) tt t: + korán) t (se t szorí) ts (a tS: + sie) ts tS: + üzle) tt t: + üzle) tj c: ürí) ts (e tS: mula) ts tS: nemze) ts tS: nemze) t (szo t néme) ts (ég tS: min) t t - tse tSE - tso tSo - ttsá tS:a: - tsa tSA - tsá tSa: + ts (a tS + ts (á tS + ts (e tS + ts (é tS + ts (o tS + ts (u tS tsd tSd - tsé tSe: t (cs t - ttsé tS:e: - tsu tSu + tts (á tS: + tts (é tS: tsö tSY j) ts tS C) tj c @@ -429,12 +492,14 @@ folyama) t (jel t kür) t t kür) tj c kür) t (jel t + kür) t (szó t küldö) ttj c: neve) ts (ég tS: o) tt t: szen) t (szék t szé) t t szé) tt t: + szé) tszé t|se: szöve) ts (ég tS: söté) ts (ég tS: sajá) ts (ág tS: @@ -451,6 +516,7 @@ folyama) t (jel t lehe) ts (ég tS: tehe) ts (ég tS: lá) tsz ts: + te) tsz ts: lá) t (sze t fize) ts (ég tS: segí) ts tS: @@ -462,7 +528,14 @@ ismere) ts (ég tS: ha) t (száz t hé) t (száz t vé) ts (ég tS: - + vona) t (jegy t + tesz) t (sor t + tes) t (sér t + fron) t (jár t + á) t (söpör t + ala) tt (jár t: + fri) tz ts: +fű) ts tS: .group u @@ -474,6 +547,8 @@ ismere) ts (ég tS: .group ü ü y ütt yt: + ütty yc: + .group ű ű y: @@ -497,6 +572,7 @@ ismere) ts (ég tS: .group z z z + zs Z zzs Z: a) z (t s @@ -519,7 +595,8 @@ lefeje) z (ték s ré) z (sz z tartó) z s gá) z (sz z - gé) z (sz z +gá) z (cső z +gé) z (sz z ké) z (sz zz há) z (so z @@ -545,16 +622,20 @@ lefeje) z (ték s _gá) zsz (ámla zs: _gá) zsz (ámlá zs: _ré) zs (ó zS + ő) zs (uta zS _vá) zs (or zS _szára) zs (ág SS _nehé) zs (ely zS _) zürich tsyR2iC + vigyá) zz (ba z + vigyá) zz (t z .group - _) :-) v'iJoR2 + + $ dolla:R2 ä E diff --git a/dictsource/jbo_rules b/dictsource/jbo_rules index e439cad6..413213da 100644 --- a/dictsource/jbo_rules +++ b/dictsource/jbo_rules @@ -14,13 +14,15 @@ .group b b b + b (C b_ .group c c S + K) c (C S_! .group d d d - dj dZ + dj dZ // ?? .group e e e @@ -82,6 +84,7 @@ r r- // syllabic A) r R r (A R + r (C R_ // ?? do this in phonemes data instead? .group s diff --git a/dictsource/ta_list b/dictsource/ta_list index 31677b60..abbd4d56 100644 --- a/dictsource/ta_list +++ b/dictsource/ta_list @@ -84,7 +84,7 @@ _- in.aIppUg // இணைப்புக் ! vijVppU // வியப்பு _? ke:l.vi // கேள்வி # en.||kuRi $max3 // எண் குறி -= samVnba:d.U $max3 // சமன்பாடு += samVnpa:d.U $max3 // சமன்பாடு + ku:t.t.Vl $max3 // கூட்டல் * perUkkVl $max3 // பெருக்கல் / sa:jvU // சாய்வு @@ -195,53 +195,24 @@ _dpt _pul.l.i போண்டா $alt பஜ்ஜி $alt பாதாம் $alt -பலூன் $alt -பிராமணன் $alt -பிரம்மன் $alt -பம்பாய் $alt போகம் $alt போதனை $alt -பூகோலம் $alt -பூலோகம் $alt -பூமி $alt பூகம்பம் $alt -பூதம் $alt -புதன் $alt -பலி $alt -பலம் $alt -பலவான் $alt -பகவான் $alt பாகவதம் $alt பகவத் $alt பங்கம் $alt பீடி $alt பீதி $alt -பம்பரம் $alt -பாதுஷா $alt பேகம் $alt -தானம் $alt // initial த as [d] -தேகம் $alt -திரவியம் $alt -தூபம் $alt -தீபம் $alt + // initial த as [d] தீபாவளி $alt -தீரம் $alt -தைரியம் $alt -திடம் $alt -திரவம் $alt -திடீர் $alt -திவசம் $alt -தியானம் $alt -தானியம் $alt தண்டனை $alt துவம்சம் $alt திருஷ்டி $alt தயாநிதி $alt தயாளு $alt -துக்கம் $alt -திகில் $alt துந்துவி $alt தயவு $alt தடால் $alt @@ -249,31 +220,25 @@ _dpt _pul.l.i தடக் $alt தீக்ஷை $alt தடியன் $alt - +தரிசனம் $alt +தட்சணை $alt கக $alt // initial க as [g] கனம் $alt கணம் $alt -கணபதி $alt -கணீர் $alt கிலி $alt கில்லி $alt -கோதுமை $alt -கோபுரம் $alt -காந்தம் $alt காந்தி $alt -குண்டு $alt -கோலி $alt -குகை $alt கிரி $alt கோமதி $alt கயா $alt காயத்ரி $alt கங்கை $alt கங்கா $alt -குரு $alt -குகன் $alt +கட $alt +கோ $alt +கதி $alt பப pVpV diff --git a/dictsource/ta_rules b/dictsource/ta_rules index 27f27dad..89ed1ecd 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -66,15 +66,32 @@ _) க (BT g // $alt க்க kkV க்க (B kk - _) க (ௌ g + க (ீத g க (ஜ gV + _) க (ௌ g _) க (ம்பீர gV _) க (ந்தர்வ gV _) க (ோவிந்த g _) க (ணே gV - + _) க (ருட gV + _) க (ர்ஜ gV + _) க (ாண்டாமிருக g + _) க (ோந்து g + _) க (ாந்த g + _) க (ுண்ட g + _) க (ோபுர g + _) க (ுரு g + _) க (ுகன g + _) க (ணபதி gV + _) க (ணீர gV + _) க (ோதுமை g + _) க (ுகை g + _) க (ோஷ g + _) க (ுண g + _) க (தியில் gV + _) க (டிகார gV ங NV @@ -93,10 +110,8 @@ ட்) ச (B tS ஞ்) ச dZV ஞ்) ச (B dZ - _) ச (ட் tS - _) ச (Bட் tS - _) ச (ன் tS - _) ச (Bன் tS + _) ச (ிட் tS + _) ச (ின் tS @@ -114,7 +129,8 @@ // _) ட (B t. ட்ட t.t.V ட்ட (B t.t. - + ஷ்) ட t.V + ஷ்) ட (B t. ண n.V ண (B n. @@ -128,8 +144,14 @@ _) த (BT d // if word has $alt த்த ttV த்த (B tt + க்) த tV + க்) த (B t + ஸ்) த tV + ஸ்) த (B t - // exceptions, த as [d] + + + // exceptions, த as [d] _) த (ன dV _) த (ர்ம dV _) த (ுர் d @@ -138,6 +160,46 @@ _) த (ுஷ் d _) த (க்ஷிணா dV _) த (ண்ட dV + _) த (ருமி dV + _) த (ர்பை dV + _) த (ாவா d + _) த (ாதா d + _) த (ரித்திரம dV + _) த (ர்பார dV + _) த (ீர்க d + _) த (ினுச d + _) த (ாராவி d + _) த (ர்க dV + _) த (ான d + _) த (ேக d + _) த (ேக்கு t + _) த (ேக்கிலை t + _) த (ேக்கடி t + _) த (ிரவிய d + _) த (ூப d + _) த (ீப d + _) த (ீர d + _) த (ைரிய d + _) த (ிட d + _) த (ிரவ d + _) த (ிடீ d + _) த (ிவச d + _) த (ியான d + _) த (ானிய d + _) த (ுக்க d + _) த (ிகில d + _) த (ூம d + _) த (ாவணி d + _) த (ாம்_தூம d + _) த (ாடி d + _) த (ாச d + _) த (சரா dV + _) த (ோஷ d + _) த (ரணி dV + _) த (ாரணி d + _) த (ோசை d + + ந nV ந (B n // dental n @@ -159,18 +221,59 @@ ட்) ப (B p ற்) ப pV ற்) ப (B p + று) ப pV + று) ப(B p + ன்) ப pV + ன்) ப (B p + + ம்) ப p + ம்) ப (ா p + ம்) ப (B b + த்) ப p + த்) ப (ா p + த்) ப (B b + ஃ) ப fV ஃ) ப (B f _) ப (ால b + _) ப (ால் p + _) ப (ாலின் p + _) ப (ாலை p + _) ப (ாலில் p + _) ப (ாலுடன் p + _) ப (ாலினுடைய p + + _) ப (ாலாபிஷேக p _) ப (ாலு b _) ப (ானு b _) ப (ீம b _) ப (காசுர bV _) ப (ோஜ b _) ப (தில bV - _) ப (க்தி bV _) ப (ஜ bV + _) ப (ைரவ b + _) ப (யம bV + _) ப (ார்கவி b + _) ப (ூதேவி b + _) ப (ம்பாய bV + _) ப (ாதுஷா b + _) ப (க்த bV + _) ப (லம bV + _) ப (லவான bV + _) ப (ிராமண b + _) ப (ிரம்ம b + _) ப (ம்பர bV + _) ப (லூன bV + _) ப (ூமி b + _) ப (ூலோக b + _) ப (ூகோல b + _) ப (ூத b + _) ப (ுதன b + _) ப (லி bV + _) ப (கவான bV + _) ப (ௌதிக b + ம mV ம (B m @@ -217,8 +320,8 @@ ஸ (B s - ஹ hV - ஹ (B h + ஹ HV + ஹ (B H க்ஷ ks.V diff --git a/phsource/compile_report b/phsource/compile_report index 0fad5881..aef3af58 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -51,7 +51,7 @@ id 15 127 sq 35 128 hy 24 120 - da 21 119 + da 22 122 rw 15 132 ml 13 154 kn 15 154 @@ -60,7 +60,7 @@ mr 12 152 eu 6 126 mn 15 115 - pa 13 153 + pa 14 154 prs 8 111 Data file Used by @@ -244,6 +244,7 @@ envelope/i_risefall2 [+2] rw envelope/p_214 [5] vi [214] zh envelope/p_512 [6] vi + [+] pa envelope/p_fall [2] vi [7] vi [4] zhy @@ -567,6 +568,12 @@ n^/n^o [(o)] base n/no [(o)] base n/_nr [n.] base n/nr_ [n.] base +n/nr@ [(@)] base +n/nra [(a)] base +n/nre [(e)] base +n/nri [(i)] base +n/nro [(o)] base +n/nru [(u)] base n^/n^u [(u)] base n/nu [(u)] base r2/_r2 [r-] base @@ -617,12 +624,12 @@ r3/r_trill.wav [R2] base [x] pt r3/r_u [(u)] base r3/r_uvl [r"] base - [R2] da + [R4] da r3/r_uvl.wav [r"] base [R] fr [r] fr [r/2] fr - [R2] da + [R4] da r3/rx [*] base [r/] base [r/] af @@ -638,10 +645,12 @@ r3/@tap [**] base r3/@tap2 [**] base r3/@tap_rfx [r.] base r/a_ [r] da +r/aa [R6] da r/r [r] base [r-] base [r] en_sc [r] de + [R5] da r/_r [r] base [r] en_sc [r.] bn @@ -779,7 +788,6 @@ ufric/x_sr [h] sr [x] sr ufric/xx [X] base [Q"] base - [R] da ustop/c [c] base ustop/k [k] base [k] en @@ -1357,8 +1365,8 @@ vnasal/o_n [o~] hi [o~] bn vnasal/o_n2 [o~] af [O~] fr -vnasal/oo_n [O~] en -vnasal/oo_n2 [O~] hi +vnasal/oo_n2 [O~] en + [O~] hi [o] zh [O~] bn vnasal/oo_n3 [O~] pl @@ -1386,7 +1394,6 @@ voc/Q_ [Q] base voc/Q_less [Q] nl [x2] pt voc/Q_ulv [Q"] base - [R] da voc/v [v] base [v] fi [v] fr @@ -2222,7 +2229,6 @@ vwl_en/aI@_2 [aI] en_sc [aI@] en_sc vwl_en/aU@ [aU@] en [aU@] en_n - [aU@] en_us [aU@] en_sc [aU@] en_wm vwl_en/@L [@L] en @@ -2250,6 +2256,7 @@ vwl_en_us/a [a] en_us vwl_en_us/ai@ [aI@] en_us vwl_en_us/ar [A:] en_us [A@] en_us +vwl_en_us/aU@ [aU@] en_us vwl_en_us/ee [E] en_us vwl_en_us/er [e@] en_us vwl_en_us/ir [i@3] en_us diff --git a/phsource/n/_nr b/phsource/n/_nr index c9bde0cbf099c972be24699c65350a6467378e67..c66889e05a8beea512f5bfe23b63befaf4cb74c1 100644 GIT binary patch delta 190 zcmZo>ZDth;4sdl233d%+W?*25&nseL$eSF)C^=DE!Lxz)0b>PFl!4&^BLn*f1{o$0 zyMmR0C4+GZBZ&QngMsM*BTyCyWOxwlHM|T!QHVH$G{fXmj5{a$GMbQWqA~{-69Jh{ BCXN6A delta 190 zcmZo>ZDth;4sdl233d%+W?*25&nseLNSPeNC^=DE!E*)g1I7xVC<8+c<1)?<3^Gh0 z_6C*@tQm|;7(whm91N@v7$1PyYk1|DVeAF`+u&>lX_3jN70s2DcW#`1!%&iOJ?u#6Mr5F5GGnjB}i!zqa#Uq__;L8+_En; z=7eLNXip}?9_h#y+2Azx7vE(fKZ-`7!o4clWVLF*_NoCpquTQGdZrpRs;wnsXxNa| Ny*9R2?P6!{+6vC~Tj&4) literal 952 zcmdr~El&eM5Pf?$d$;ti6w%Z`E+I7pjUpjjLMkv#N$W8P6hZbU@G}qyBnl8G_yPO@ z62$!gL^UA#cJ`X9uIz4R=FOXrWM6hV8C}e#qpJwO-F1u`#`RO$uaA(I^4%0#ZVb_h z!?zzicWX1(j(dY_fdju1F9NwWPsZba2V0w3@uE}20iU>j@3p~f+V4lJo_PUOQKfs1 zh5;8i!!d>!AV)^av5P(Q&}DS=8GVO7+!Q;?B+5E^Mgik&L0` P#>^&K*j%;Kt@&$9fFECw diff --git a/phsource/ph_danish b/phsource/ph_danish index 7aec4eaf..900589d1 100644 --- a/phsource/ph_danish +++ b/phsource/ph_danish @@ -134,18 +134,27 @@ phoneme r // used for 'r' after a vowel (to create a diphthong) lengthmod 7 endphoneme -phoneme R2 // uvular trill [r"] - vcd uvl frc - formants r3/r_uvl+r3/r_uvl.wav%75 - before _ r3/r_uvl+r3/r_uvl.wav%50 - lengthmod 6 +phoneme R6 // + liquid + formants r/aa + lengthmod 7 endphoneme -phoneme R // voiced velar fricative [Q"] +phoneme R4 // uvular trill [r"] without WAV vcd uvl frc - formants voc/Q_ulv+ufric/xx%80 - before _ voc/Q_ulv+ufric/xx%60 + formants r3/r_uvl+r3/r_uvl.wav%1 + before _ r3/r_uvl+r3/r_uvl.wav%1 lengthmod 6 endphoneme +phoneme R5 // English r + liquid starttype #r endtype #r + rhotic + length 100 + lengthmod 7 + beforenotvowel r/ + formants r/r +endphoneme + + diff --git a/phsource/ph_english b/phsource/ph_english index 17aed1f1..29b7391b 100644 --- a/phsource/ph_english +++ b/phsource/ph_english @@ -223,7 +223,7 @@ endphoneme phoneme o@ vowel starttype (o) endtype (@) - length 240 + length 250 formants vowel/oo_en linkout r- endphoneme @@ -385,8 +385,8 @@ endphoneme phoneme O~ vowel starttype (o) endtype (o) - length 260 - formants vnasal/oo_n + length 240 + formants vnasal/oo_n2 endphoneme diff --git a/phsource/ph_english_us b/phsource/ph_english_us index 81253c2e..41b6af65 100644 --- a/phsource/ph_english_us +++ b/phsource/ph_english_us @@ -201,7 +201,7 @@ endphoneme phoneme u: vowel starttype (u) endtype (u) - length 180 + length 190 formants vdiph2/uw endphoneme @@ -243,7 +243,7 @@ endphoneme phoneme e@ vowel starttype (e) endtype (@) - length 270 + length 280 formants vwl_en_us/er appendph r endphoneme @@ -251,7 +251,7 @@ endphoneme phoneme i@3 vowel starttype (i) endtype (@) - length 250 + length 280 formants vwl_en_us/ir appendph r endphoneme @@ -259,7 +259,7 @@ endphoneme phoneme U@ vowel starttype (@) endtype (@) - length 240 + length 250 formants vwl_en_us/ur linkout r- endphoneme @@ -275,8 +275,8 @@ endphoneme phoneme aU@ vowel starttype (a) endtype (@) - length 270 - formants vwl_en/aU@ + length 300 + formants vwl_en_us/aU@ linkout r- endphoneme diff --git a/phsource/ph_polish b/phsource/ph_polish index 9876ebdb..12a879b6 100644 --- a/phsource/ph_polish +++ b/phsource/ph_polish @@ -154,7 +154,7 @@ phoneme dz vowelin f1=1 f2=1700 -300 300 f3=-100 80 len=50 vowelout f1=2 f2=1700 -300 300 f3=-100 80 formants d/xdz+ustop/ts%140 - before _ voc/z_+ustop/ts_%70 + before _ voc/z_+ustop/ts_%60 after _ NULL after @ d/xd lengthmod 5 diff --git a/phsource/ph_tamil b/phsource/ph_tamil index 58e00302..7e77d231 100644 --- a/phsource/ph_tamil +++ b/phsource/ph_tamil @@ -25,7 +25,7 @@ endphoneme phoneme a: vowel starttype (a) endtype (a) - length 270 + length 300 formants vowel/a_5 endphoneme @@ -53,7 +53,7 @@ endphoneme phoneme i: vowel starttype (i) endtype (i) - length 270 + length 300 formants vowel/i endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 64bbb613..3929c95c 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -220,6 +220,7 @@ phoneme (@) virtual after r- r2/r2@ after m m/m@ after n n/n@ + after n. n/nr@ after N nn/nn@ after n^ n^/n^@ before l/ DFT-60+l/L1_@L @@ -243,6 +244,7 @@ phoneme (a) virtual after r- r2/r2a after m m/ma after n n/na + after n. n/nra after N nn/nna after n^ n^/n^a before l/ DFT-40+l/L1_aL @@ -266,6 +268,7 @@ phoneme (e) virtual after r- r2/r2e after m m/me after n n/ne + after n. n/nre after N nn/nne after n^ n^/n^e before l/ DFT-30+l/L1_eL @@ -289,6 +292,7 @@ phoneme (i) virtual after r- r2/r2i after m m/mi after n n/ni + after n. n/nri after N nn/nni after n^ n^/n^i before l/ DFT-30+l/L1_iL @@ -313,6 +317,7 @@ phoneme (o) virtual after r- r2/r2o after m m/mo after n n/no + after n. n/nro after N nn/nno after n^ n^/n^o before l/ DFT-40+l/L1_oL @@ -336,6 +341,7 @@ phoneme (u) virtual after r- r2/r2u after m m/mu after n n/nu + after n. n/nru after N nn/nnu after n^ n^/n^u before l/ DFT-40+l/L1_uL @@ -571,7 +577,6 @@ endphoneme phoneme n. vcd rfx nasal - starttype n endtype n vowelin f1=2 f2=1200 -300 250 f3=-500 80 rms=20 colr=2 vowelout f1=2 f2=1200 -300 250 f3=-500 80 rms=20 brk colr=2 length 100 diff --git a/phsource/vdiph/aoo b/phsource/vdiph/aoo index fcfeec134eca5692973a177f0799d3c752b2cd50..8ffb9f3c89c20e62053af63ceb35963b82782841 100644 GIT binary patch delta 84 zcmbQrGnHpTxMzb{9@7*i1|ZO2Wsq=zvTe8+_#ZGnU<8Sq@H#-*`Wy@R8#rO&@1z-6 NVeASyhK&nKSpnI-5&HlD delta 54 zcmbQrGnHpTIA_0DKGPH?1_p-7lNgm{^*I*sFXw!~_<#{8!thR7fEC8BkTco1pp+E= DhA0ja diff --git a/phsource/vnasal/oo_n b/phsource/vnasal/oo_n index 3b2ddc9ca69d836ff54bbac29600b575c53978bc..7109a41b2d98726cc19db8e8570f5d30277435fc 100644 GIT binary patch delta 33 ocmaE3@y0?pIKb68B-k~Og@J(~KR-T?ogrqTush?SjnRTK0I|yny#N3J delta 33 ocmaE3@y0?pIKb68B-k~Og@J(~KR-T?ogs0eush@7jnRTK0I~uJ!vFvP diff --git a/phsource/vnasal/oo_n2 b/phsource/vnasal/oo_n2 index 8c918297c7e725754e33530112324893f2de4217..8fa66674a996a6f1e02b35b943ab93d566b255c6 100644 GIT binary patch delta 390 zcmZ3=vz*5$IKb68B-k~Om4SgFKR-Uth?OB8$V3JXtZx@U_zo<`|Non4ARX$!b%ALK zBS=t&sX^=zqYM*>-N4)+$;1Rl zCN9`s4_43MzSWFP~B4+9fJ6p;S*{|N)RmNGElv6Kns01ag|rU#R)SmsPFViFg{ zbO!@N{NxMFqV7IW&$ci-NWOrw9k>p#!OXb<_bda$D_#b;XZd9u;C2B$J6VTi_2#9_ G4NL$9CrtkU delta 340 zcmZ3^vy`VkIKb68B-k~OnSp`9KR%C@AqB`l1`e!m7eM$9EXV)<2Qv|3?m)f=SnLTy z1lI+oC5#}B4ATy=!;CUaAa(=u1W6_)2-}0Jg6jd}1F)KX-1fW=7!^SreGY!UQg)cc z4e52vFm{EU+QdcM>%j&wII!M#0GY_Z;KRTKcIUVMw0Uk@4U=GkwR%3cF*@k7# cV!Z diff --git a/phsource/vowel/ii_final b/phsource/vowel/ii_final index 999d331434eaf412fe6905ec922e0bfd75f41f83..6e61090890701633d190d23cd029495a53dd240d 100644 GIT binary patch delta 279 zcmexh@xfw(7-Pytaa)#HTLuuQV{qVVVB%m(W9(%pU}TUkW2|9xl5Jsk1fQ;PBv7VVb0P1Q3j`qpr zJgSWICeP)O=aoRQ`y|hFX4V5Njk{tdJF*CK+W@sF6xT6;v@{EVw5$|B*K$>0Ha7qu CQb@)C diff --git a/phsource/vwl_en/aU@ b/phsource/vwl_en/aU@ index c3ec6d6d6069aba2ff4a1be11ac20cd9f2ba4479..9c5116d34812925e025f4bd2f4f43c6dfcf5e4ee 100644 GIT binary patch delta 276 zcmZp-X}6i+9qPa{fmw%z0SG2AJ4hul?P3D4Pp~pbzGB(}X6JDo5ENn(0<&lFGVniO ze831&qruO>17kZ&GqAwe6>wqxKIeT~<1YqoCd=9)YwgTMA|NmFWF>F@id@2F} D|0Fp* delta 276 zcmZp-X}6i+9a_mVky)380SG2AM@c0y?Pdb8Pp~RTzGm72X6JFe5fox_0kdcE^6)=k ze831&qrq>(17kZ&3$wu36>{%4E+}S+4FM@)U|_^%12YjeSaKk2u;f6qVRHd%C^Kgi z(0mIH4#o|W&vA&`o{*fv1aX=O*9~EqbN29L2*B9O_&j)FYz1insFVNyuaHyQti<_L F1ON=qJhuP< diff --git a/phsource/vwl_en_us/ar b/phsource/vwl_en_us/ar index dc01c18c7e70fe8b723d1ba3e71dda1414efacc7..200691b93dcc5945eed34d02d6cdf36a042867f5 100644 GIT binary patch delta 281 zcmaDQFh`g_IKb68B-k~OiGhJ3v4~?M|6OKg2PvP)@0mqa8+acuK41h&FvRdV@W9yN z(hbZoc7+_nWKEX+j6IWIvdA(vOlD_QHax%qm9<~O&AaRz{#%TU5Vra7B?+3qp|0Iq;UWB>pF delta 170 zcmbOu{7Qg7IKb68B-k~OiGhJ3v50*m|6OM05-H!w@0mrprtm&se832lV3@ptQD?Fh z%R0sdlV7sPGVYkn&Z?~Xf&(gTzl7U@6UKhQYrqcEmLNT2@_t6y$vLcRCVR0gAzJL2=E1c@uuX+%VTxcn$oZP#2xo&3 zNZT`>gA4_{4SXQ>OuiS)0sIHJAjb8&?2>^Q&A+~8KyEi$YwFt zFuHR1GxV@G@IPRDz*x<-o8c>GgU~C+SB!SNGZ>6`8-zgOW&E!hD)?cE4u`t8RD+PJTsXYPfQNv5seK6hJ`|L1%m^}EN}pn zGyGz75O83sVT|MOW|+X%z%Rn|fN=tsGUFch1Dx*|-!Vq zJIvF((hbZoHprFd1*S7kHe->PTqgo_7$?Yz9L9RM6-gXE3|m+sR&;aKG0H%#$mU(m sFac^s9{(n$KfEw21O#;8RtN}ythg=G%se?rL?<=?=o6s#7-(k=0FULH6#xJL delta 472 zcmaE5anFE1IKb68B-k~OiGhJ3vxsdXe*&SSFUoxxzlJ4Xm4UdI2Lp@Lt68^mT{aOFsl z>|lYg85k<$)HbhX*$y*0nXwpdbPz`<+~_i{!*HW*d1u0n_TaydWVDkW!ss*$kkQ*Y zwlhmYT%E*N05>`kV)W#89%V_GyRu6Vnj!8w%rldDa)yXhq(X58gCoZ*u-D5Oela=< zI55>P#&LKvOkiu|7iD_DIDt!+&0w61Hi!?I>0CQ4;(*OVf diff --git a/platforms/windows/espeakedit/src/speech.h b/platforms/windows/espeakedit/src/speech.h index fc900bb0..ba393a9e 100755 --- a/platforms/windows/espeakedit/src/speech.h +++ b/platforms/windows/espeakedit/src/speech.h @@ -34,6 +34,7 @@ #define PATHSEP '\\' #define USE_PORTAUDIO //#define USE_NANOSLEEP +#define NO_VARIADIC_MACROS #define __cdecl #define ESPEAK_API #define PATH_ESPEAK_DATA "C:\\Program files\\espeak\\espeak-data" diff --git a/platforms/windows/espeakedit/src_copy/speech.h b/platforms/windows/espeakedit/src_copy/speech.h index fc900bb0..ba393a9e 100755 --- a/platforms/windows/espeakedit/src_copy/speech.h +++ b/platforms/windows/espeakedit/src_copy/speech.h @@ -34,6 +34,7 @@ #define PATHSEP '\\' #define USE_PORTAUDIO //#define USE_NANOSLEEP +#define NO_VARIADIC_MACROS #define __cdecl #define ESPEAK_API #define PATH_ESPEAK_DATA "C:\\Program files\\espeak\\espeak-data" diff --git a/platforms/windows/windows_cmd/src/speech.h b/platforms/windows/windows_cmd/src/speech.h index 2736b5ef..d7c5c986 100755 --- a/platforms/windows/windows_cmd/src/speech.h +++ b/platforms/windows/windows_cmd/src/speech.h @@ -30,6 +30,7 @@ #define PATHSEP '\\' #define USE_PORTAUDIO +#define NO_VARIADIC_MACROS #define ESPEAK_API //#define INCLUDE_KLATT diff --git a/platforms/windows/windows_sapi/src/speech.h b/platforms/windows/windows_sapi/src/speech.h index d65d5408..ec90b165 100755 --- a/platforms/windows/windows_sapi/src/speech.h +++ b/platforms/windows/windows_sapi/src/speech.h @@ -27,6 +27,7 @@ #define __WIN32__ #define NEED_WCSTOF #define NEED_GETOPT +#define NO_VARIADIC_MACROS #define USE_MBROLA_LIB #define ESPEAK_API diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 7d6f8a23..c1128767 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -568,12 +568,10 @@ step=1; // TEST } else { - dict_line[length++] = 80 + multiple_words + multiple_numeric_hyphen; // if numeric, count a hyphen as an extra word + dict_line[length++] = 80 + multiple_words; ix = multiple_string_end - multiple_string; if(multiple_numeric_hyphen) { - // the first part is numeric, so keep the hyphen to match on - dict_line[length++] = '-'; dict_line[length++] = ' '; } memcpy(&dict_line[length],multiple_string,ix); diff --git a/src/debug.h b/src/debug.h index c3fb9c92..199b2eb8 100644 --- a/src/debug.h +++ b/src/debug.h @@ -13,7 +13,7 @@ extern void debug_time(const char* text); #else -#ifdef PLATFORM_WINDOWS +#ifdef NO_VARIADIC_MACROS #define SHOW(format) // VC6 doesn't allow "..." #else #define SHOW(format,...) diff --git a/src/dictionary.cpp b/src/dictionary.cpp index c4a91ff3..f4a49347 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -1030,7 +1030,7 @@ void ChangeWordStress(Translator *tr, char *word, int new_stress) -void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags, int tonic, int prev_stress) +void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int tonic, int prev_stress) {//========================================================================================================= /* Guess stress pattern of word. This is language specific @@ -1099,11 +1099,11 @@ void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags, max_output = output + (N_WORD_PHONEMES-3); /* check for overrun */ // any stress position marked in the xx_list dictionary ? - stressed_syllable = dictionary_flags & 0x7; - if(dictionary_flags & 0x8) + stressed_syllable = dictionary_flags[0] & 0x7; + if(dictionary_flags[0] & 0x8) { // this indicates a word without a primary stress - stressed_syllable = dictionary_flags & 0x3; + stressed_syllable = dictionary_flags[0] & 0x3; unstressed_word = 1; } @@ -1113,7 +1113,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags, { // option: don't stress monosyllables except at end-of-clause vowel_stress[1] = 1; - dictionary_flags |= FLAG_STRESS_END2; + dictionary_flags[0] |= FLAG_STRESS_END2; } // heavy or light syllables @@ -1350,7 +1350,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags, } break; - case 7: // LANG=tr, the last syllable for any vowel markes explicitly as unstressed + case 7: // LANG=tr, the last syllable for any vowel marked explicitly as unstressed if(stressed_syllable == 0) { stressed_syllable = vowel_count - 1; @@ -2575,10 +2575,15 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c #endif // is it a bracket ? + if(letter == 0xe000+'(') + { + if(pre_pause < tr->langopts.param2[LOPT_BRACKET_PAUSE]) + pre_pause = tr->langopts.param2[LOPT_BRACKET_PAUSE]; // a bracket, aleady spoken by AnnouncePunctuation() + } if(IsBracket(letter)) { - if(pre_pause < 4) - pre_pause = 4; + if(pre_pause < tr->langopts.param[LOPT_BRACKET_PAUSE]) + pre_pause = tr->langopts.param[LOPT_BRACKET_PAUSE]; } // no match, try removing the accent and re-translating the word @@ -3162,6 +3167,12 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor continue; } } + if(dictionary_flags & FLAG_ALT2_TRANS) + { + // language specific + if((tr->translator_name == L('h','u')) && !(tr->prev_dict_flags & FLAG_ALT_TRANS)) + continue; + } if(flags != NULL) { @@ -3256,7 +3267,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f // set the skip words flag flags[0] |= FLAG_SKIPWORDS; dictionary_skipwords = length; - return(1); + return(flags[0]); } } @@ -3356,7 +3367,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f return(0); } - return(1); + return(flags[0]); } ph_out[0] = 0; diff --git a/src/espeak.cpp b/src/espeak.cpp index 5bb4429e..766734e9 100644 --- a/src/espeak.cpp +++ b/src/espeak.cpp @@ -20,7 +20,9 @@ #include #include #include +#ifndef NEED_GETOPT #include +#endif #include #include @@ -294,6 +296,21 @@ static int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) } +#ifdef NEED_GETOPT + struct option { + char *name; + int has_arg; + int *flag; + int val; + }; + int optind; + static int optional_argument; + static const char *arg_opts = "abfgklpsvw"; // which options have arguments + static char *opt_string=""; +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 +#endif int main (int argc, char **argv) //============================== @@ -330,6 +347,7 @@ int main (int argc, char **argv) int option_index = 0; int c; int ix; + char *optarg2; int value; int flag_stdin = 0; int flag_compile = 0; @@ -361,6 +379,59 @@ int main (int argc, char **argv) filename[0] = 0; option_punctlist[0] = 0; +#ifdef NEED_GETOPT + optind = 1; + opt_string = ""; + while(optind < argc) + { + int len; + char *p; + + if((c = *opt_string) == 0) + { + opt_string = argv[optind]; + if(opt_string[0] != '-') + break; + + optind++; + opt_string++; + c = *opt_string; + } + opt_string++; + p = optarg2 = opt_string; + + if(c == '-') + { + opt_string=""; + for(ix=0; ;ix++) + { + if(long_options[ix].name == 0) + break; + len = strlen(long_options[ix].name); + if(memcmp(long_options[ix].name,p,len)==0) + { + c = long_options[ix].val; + optarg2 = NULL; + + if((long_options[ix].has_arg != 0) && (p[len]=='=')) + { + optarg2 = &p[len+1]; + } + break; + } + } + } + else + if(strchr(arg_opts,c) != NULL) + { + opt_string=""; + if(optarg2[0]==0) + { + // the option's value is in the next argument + optarg2 = argv[optind++]; + } + } +#else while(true) { c = getopt_long (argc, argv, "a:b:f:g:hk:l:mp:qs:v:w:xXz", @@ -369,12 +440,14 @@ int main (int argc, char **argv) /* Detect the end of the options. */ if (c == -1) break; + optarg2 = optarg; +#endif switch (c) { case 'b': // input character encoding, 8bit, 16bit, UTF8 - if((sscanf(optarg,"%d",&value) == 1) && (value <= 4)) + if((sscanf(optarg2,"%d",&value) == 1) && (value <= 4)) synth_flags |= value; else synth_flags |= espeakCHARS_8BIT; @@ -387,7 +460,7 @@ int main (int argc, char **argv) break; case 'k': - option_capitals = atoi(optarg); + option_capitals = atoi(optarg2); break; case 'x': @@ -403,7 +476,7 @@ int main (int argc, char **argv) break; case 'p': - pitch = atoi(optarg); + pitch = atoi(optarg2); break; case 'q': @@ -411,32 +484,32 @@ int main (int argc, char **argv) break; case 'f': - strncpy0(filename,optarg,sizeof(filename)); + strncpy0(filename,optarg2,sizeof(filename)); break; case 'l': - option_linelength = atoi(optarg); + option_linelength = atoi(optarg2); break; case 'a': - volume = atoi(optarg); + volume = atoi(optarg2); break; case 's': - speed = atoi(optarg); + speed = atoi(optarg2); break; case 'g': - wordgap = atoi(optarg); + wordgap = atoi(optarg2); break; case 'v': - strncpy0(voicename,optarg,sizeof(voicename)); + strncpy0(voicename,optarg2,sizeof(voicename)); break; case 'w': option_waveout = 1; - strncpy0(wavefile,optarg,sizeof(filename)); + strncpy0(wavefile,optarg2,sizeof(filename)); break; case 'z': // remove pause from the end of a sentence @@ -454,17 +527,17 @@ int main (int argc, char **argv) case 0x101: // --compile-debug case 0x102: // --compile - strncpy0(voicename,optarg,sizeof(voicename)); + strncpy0(voicename,optarg2,sizeof(voicename)); flag_compile = c; quiet = 1; break; case 0x103: // --punct option_punctuation = 1; - if(optarg != NULL) + if(optarg2 != NULL) { ix = 0; - while((ix < N_PUNCTLIST) && ((option_punctlist[ix] = optarg[ix]) != 0)) ix++; + while((ix < N_PUNCTLIST) && ((option_punctlist[ix] = optarg2[ix]) != 0)) ix++; option_punctlist[N_PUNCTLIST-1] = 0; option_punctuation = 2; } @@ -472,24 +545,24 @@ int main (int argc, char **argv) case 0x104: // --voices espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,0,data_path,0); - DisplayVoices(stdout,optarg); + DisplayVoices(stdout,optarg2); exit(0); case 0x106: // -- split - if(optarg == NULL) + if(optarg2 == NULL) samples_split = 30; // default 30 minutes else - samples_split = atoi(optarg); + samples_split = atoi(optarg2); break; case 0x107: // --path - data_path = optarg; + data_path = optarg2; break; case 0x108: // --phonout - if((f_phonemes_out = fopen(optarg,"w")) == NULL) + if((f_phonemes_out = fopen(optarg2,"w")) == NULL) { - fprintf(stderr,"Can't write to: %s\n",optarg); + fprintf(stderr,"Can't write to: %s\n",optarg2); } break; diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index 4677d2e6..a9d2fab7 100755 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -366,31 +366,6 @@ void MyFrame::OnQuit(wxCommandEvent& event) } -#ifdef deleted -void MyFrame::OnAbout(wxCommandEvent& event) -{//========================================= - int result; - char buf[300]; - wxString url_docs; - - switch(event.GetId()) - { - case MENU_ABOUT: - sprintf(buf,about_string,espeak_Info(NULL)); - (void)wxMessageBox(wxString(buf,wxConvLocal), _T("About eSpeak Editor")); - break; - - case MENU_DOCS: - sprintf(buf,"%s/docs/docindex.html",path_home); - url_docs = wxString(buf,wxConvLocal); - result = wxLaunchDefaultBrowser(url_docs); - if(result == 0) - wxLogStatus(_T("Failed to launch browser")); - break; - } -} -#endif - class HtmlWindow: public wxHtmlWindow { diff --git a/src/intonation.cpp b/src/intonation.cpp index 61b2ff28..2e64bfdc 100755 --- a/src/intonation.cpp +++ b/src/intonation.cpp @@ -275,7 +275,7 @@ static TONE_HEAD tone_head_table[N_TONE_HEAD_TABLE] = { }; static TONE_NUCLEUS tone_nucleus_table[N_TONE_NUCLEUS_TABLE] = { - {PITCHfall, 30, 5, PITCHfall, 32, 9, NULL, 12, 7, 0}, // 0 statement + {PITCHfall, 29, 4, PITCHfall, 32, 9, NULL, 12, 6, 0}, // 0 statement {PITCHfrise, 35, 8, PITCHfrise2, 35,10, NULL, 15, 23, 0}, // 1 comma {PITCHfrise, 39,10, PITCHfrise2, 36,10, NULL, 15, 28, 0}, // 2 question // {PITCHfall, 41, 4, PITCHfall, 41,27, NULL, 16, 4, T_EMPH}, // 3 exclamation diff --git a/src/numbers.cpp b/src/numbers.cpp index 64c4d580..c9954e85 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -65,6 +65,9 @@ #define M_MIDDLE_DOT M_DOT_ABOVE // duplicate of M_DOT_ABOVE #define M_IMPLOSIVE M_HOOK +static int n_digit_lookup; +static char *digit_lookup; + typedef struct { const char *name; int flags; @@ -783,6 +786,8 @@ static int CheckDotOrdinal(Translator *tr, char *word, WORD_TAB *wtab, int lower } // end of CheckDotOrdinal + + int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) {//========================================================================= int c; @@ -995,6 +1000,7 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) int found; int ix; int units; + int tens; int used_and=0; int found_ordinal = 0; int next_phtype; @@ -1004,143 +1010,167 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) char ph_digits[50]; char ph_and[12]; - // is there a special pronunciation for this 2-digit number + units = value % 10; + tens = value / 10; + found = 0; ph_ordinal[0] = 0; - if(control & 8) + if((control & 2) && (n_digit_lookup == 2)) { - sprintf(string,"_%df",value); - found = Lookup(tr, string, ph_digits); - } - else - if(control & 1) - { - strcpy(ph_ordinal, ph_ordinal2); - - if(control & 4) - { - sprintf(string,"_%dox",value); // LANG=hu, special word for 1. 2. when there are no higher digits - found = Lookup(tr, string, ph_digits); - } - if(found == 0) - { - sprintf(string,"_%do",value); - found = Lookup(tr, string, ph_digits); - } - found_ordinal = found; - } - - if(found == 0) - { - if((value == 1) && (control & 2)) - { - if(Lookup(tr, "_1a", ph_out) != 0) // LANG=de, "eins" - return(0); - } - sprintf(string,"_%d",value); - found = Lookup(tr, string, ph_digits); - } - - // no, speak as tens+units - - if((control & 0x10) && (value < 10)) - { - // speak leading zero - Lookup(tr, "_0", ph_tens); + // pronunciation of the final 2 digits has already been found + strcpy(ph_out, digit_lookup); } else { - if(found) + if(digit_lookup[0] == 0) { - ph_tens[0] = 0; + // is there a special pronunciation for this 2-digit number + if(control & 8) + { + sprintf(string,"_%df",value); + found = Lookup(tr, string, ph_digits); + } + else + if(control & 1) + { + strcpy(ph_ordinal, ph_ordinal2); + + if(control & 4) + { + sprintf(string,"_%dox",value); // LANG=hu, special word for 1. 2. when there are no higher digits + found = Lookup(tr, string, ph_digits); + } + if(found == 0) + { + sprintf(string,"_%do",value); + found = Lookup(tr, string, ph_digits); + } + found_ordinal = found; + } + + if(found == 0) + { + if((value == 1) && (control & 2)) + { + if(Lookup(tr, "_1a", ph_out) != 0) // LANG=de, "eins" + return(0); + } + sprintf(string,"_%d",value); + found = Lookup(tr, string, ph_digits); + } + } + + // no, speak as tens+units + + if((control & 0x10) && (value < 10)) + { + // speak leading zero + Lookup(tr, "_0", ph_tens); } else { - units = (value % 10); - - if((control & 1) && ((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS))) + if(found) { - sprintf(string,"_%dXo",value / 10); - if(Lookup(tr, string, ph_tens) != 0) - { - found_ordinal = 1; - } + ph_tens[0] = 0; } - if(found_ordinal == 0) + else { - sprintf(string,"_%dX",value / 10); - Lookup(tr, string, ph_tens); - } - - if((ph_tens[0] == 0) && (tr->langopts.numbers & NUM_VIGESIMAL)) - { - // tens not found, (for example) 73 is 60+13 - units = (value % 20); - sprintf(string,"_%dX",(value / 10) & 0xfe); - Lookup(tr, string, ph_tens); - } - - ph_digits[0] = 0; - if(units > 0) - { - found = 0; - if(control & 8) + + if((control & 1) && ((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS))) { - // is there a variant form of this number? - sprintf(string,"_%df",units); - found = Lookup(tr, string, ph_digits); - } - if((control & 1) && ((tr->langopts.numbers & NUM_SWAP_TENS) == 0)) - { - // ordinal - sprintf(string,"_%do",units); - if((found = Lookup(tr, string, ph_digits)) != 0) + sprintf(string,"_%dXo", tens); + if(Lookup(tr, string, ph_tens) != 0) { found_ordinal = 1; } } - if(found == 0) + if(found_ordinal == 0) { - sprintf(string,"_%d",units); - Lookup(tr, string, ph_digits); + sprintf(string,"_%dX", tens); + Lookup(tr, string, ph_tens); + } + + if((ph_tens[0] == 0) && (tr->langopts.numbers & NUM_VIGESIMAL)) + { + // tens not found, (for example) 73 is 60+13 + units = (value % 20); + sprintf(string,"_%dX", tens & 0xfe); + Lookup(tr, string, ph_tens); + } + + ph_digits[0] = 0; + if(units > 0) + { + found = 0; + + if((control & 2) && (digit_lookup[0] != 0)) + { + // we have an entry for this digit (possibly together with the next word) + strcpy(ph_digits, digit_lookup); + found_ordinal = 1; + ph_ordinal[0] = 0; + } + else + { + if(control & 8) + { + // is there a variant form of this number? + sprintf(string,"_%df",units); + found = Lookup(tr, string, ph_digits); + } + if((control & 1) && ((tr->langopts.numbers & NUM_SWAP_TENS) == 0)) + { + // ordinal + sprintf(string,"_%do",units); + if((found = Lookup(tr, string, ph_digits)) != 0) + { + found_ordinal = 1; + } + } + if(found == 0) + { + sprintf(string,"_%d",units); + Lookup(tr, string, ph_digits); + } + } } } } - } - - if((control & 1) && (found_ordinal == 0) && (ph_ordinal[0] == 0)) - { - if((value >= 20) && (((value % 10) == 0) || (tr->langopts.numbers & NUM_SWAP_TENS))) - Lookup(tr, "_ord20", ph_ordinal); - if(ph_ordinal[0] == 0) - Lookup(tr, "_ord", ph_ordinal); - } - - if((tr->langopts.numbers & (NUM_SWAP_TENS | NUM_AND_UNITS)) && (ph_tens[0] != 0) && (ph_digits[0] != 0)) - { - Lookup(tr, "_0and", ph_and); - if(tr->langopts.numbers & NUM_SWAP_TENS) - sprintf(ph_out,"%s%s%s%s",ph_digits, ph_and, ph_tens, ph_ordinal); - else - sprintf(ph_out,"%s%s%s%s",ph_tens, ph_and, ph_digits, ph_ordinal); - used_and = 1; - } - else - { - if(tr->langopts.numbers & NUM_SINGLE_VOWEL) - { - // remove vowel from the end of tens if units starts with a vowel (LANG=Italian) - if(((ix = strlen(ph_tens)-1) >= 0) && (ph_digits[0] != 0)) - { - if((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS) - next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type; - if((phoneme_tab[(unsigned int)(ph_tens[ix])]->type == phVOWEL) && (next_phtype == phVOWEL)) - ph_tens[ix] = 0; - } + if((control & 1) && (found_ordinal == 0) && (ph_ordinal[0] == 0)) + { + if((value >= 20) && (((value % 10) == 0) || (tr->langopts.numbers & NUM_SWAP_TENS))) + Lookup(tr, "_ord20", ph_ordinal); + if(ph_ordinal[0] == 0) + Lookup(tr, "_ord", ph_ordinal); + } + + if((tr->langopts.numbers & (NUM_SWAP_TENS | NUM_AND_UNITS)) && (ph_tens[0] != 0) && (ph_digits[0] != 0)) + { + Lookup(tr, "_0and", ph_and); + if(tr->langopts.numbers & NUM_SWAP_TENS) + sprintf(ph_out,"%s%s%s%s",ph_digits, ph_and, ph_tens, ph_ordinal); + else + sprintf(ph_out,"%s%s%s%s",ph_tens, ph_and, ph_digits, ph_ordinal); + used_and = 1; + } + else + { + if(tr->langopts.numbers & NUM_SINGLE_VOWEL) + { + // remove vowel from the end of tens if units starts with a vowel (LANG=Italian) + if(((ix = strlen(ph_tens)-1) >= 0) && (ph_digits[0] != 0)) + { + if((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS) + next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type; + + if((phoneme_tab[(unsigned int)(ph_tens[ix])]->type == phVOWEL) && (next_phtype == phVOWEL)) + ph_tens[ix] = 0; + } + } + sprintf(ph_out,"%s%s%s",ph_tens, ph_digits, ph_ordinal); } - sprintf(ph_out,"%s%s%s",ph_tens, ph_digits, ph_ordinal); } if(tr->langopts.numbers & NUM_SINGLE_STRESS) @@ -1357,17 +1387,21 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned char ph_append[50]; char ph_buf[200]; char ph_buf2[50]; + char ph_zeros[50]; char suffix[20]; + char buf_digit_lookup[50]; static const char str_pause[2] = {phonPAUSE_NOLINK,0}; *flags = 0; + digit_lookup = buf_digit_lookup; for(ix=0; isdigit(word[ix]); ix++) ; n_digits = ix; value = this_value = atoi(word); ph_ordinal2[0] = 0; + ph_zeros[0] = 0; ordinal = CheckDotOrdinal(tr, &word[ix], wtab, 1); @@ -1377,11 +1411,11 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned ix++; hyphen = 0; p = suffix; - if(word[ix] == '-') + if(wtab[0].flags & FLAG_HYPHEN_AFTER) { *p++ = '-'; hyphen = 1; - ix += 2; + ix++; } while((word[ix] != 0) && (word[ix] != ' ') && (ix < (sizeof(suffix)-1))) { @@ -1397,7 +1431,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned // this is an ordinal suffix ordinal = 2; flags[0] |= FLAG_SKIPWORDS; - dictionary_skipwords = 1 + hyphen; + dictionary_skipwords = 1; } } } @@ -1431,7 +1465,17 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned } else { - return(0); // number string with leading zero, speak as individual digits + if(n_digits > 3) + { + flags[0] &= ~FLAG_SKIPWORDS; + return(0); // long number string with leading zero, speak as individual digits + } + + // speak leading zeros + for(ix=0; (word[ix] == '0') && (ix < (n_digits-1)); ix++) + { + Lookup(tr, "_0", &ph_zeros[strlen(ph_zeros)]); + } } } @@ -1504,11 +1548,33 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned Lookup(tr, "_.", ph_append); } + n_digit_lookup = 0; + buf_digit_lookup[0] = 0; + if(thousandplex == 0) + { + char *p2; + // look for combinations of the number with the next word + p = word; + while(isdigit(p[1])) p++; // just use the last digit + if(isdigit(p[-1])) + { + p2 = p - 1; + if(LookupDictList(tr, &p2, buf_digit_lookup, flags, FLAG_SUFX, wtab)) // lookup 2 digits + n_digit_lookup = 2; + } + if((buf_digit_lookup[0] == 0) && (*p != '0')) + { + // not found, lookup only the last digit + if(LookupDictList(tr, &p, buf_digit_lookup, flags, FLAG_SUFX, wtab)) // don't match '0', or entries with $only + n_digit_lookup = 1; + } + } + LookupNum3(tr, value, ph_buf, suppress_null, thousandplex, prev_thousands | ordinal); if((thousandplex > 0) && (tr->langopts.numbers2 & 0x200)) - sprintf(ph_out,"%s%s%s",ph_append,ph_buf2,ph_buf); // say "thousands" before its number + sprintf(ph_out,"%s%s%s%s",ph_zeros,ph_append,ph_buf2,ph_buf); // say "thousands" before its number else - sprintf(ph_out,"%s%s%s",ph_buf2,ph_buf,ph_append); + sprintf(ph_out,"%s%s%s%s",ph_zeros,ph_buf2,ph_buf,ph_append); while(decimal_point) @@ -1603,7 +1669,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' ')) utf8_in(&next_char,p); - if(!iswalpha(next_char)) + if(!iswalpha(next_char) && !(wtab[0].flags & FLAG_HYPHEN_AFTER)) strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc. } diff --git a/src/phonemelist.cpp b/src/phonemelist.cpp index 72ac1ab9..296d96c3 100755 --- a/src/phonemelist.cpp +++ b/src/phonemelist.cpp @@ -104,16 +104,16 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST2 *plist_out) if(((pl = &ph_list2[k])->sourceix != 0) && (k > ix)) break; - pl->stress &= 0xf; + pl->stresslevel &= 0xf; if(phoneme_tab[pl->phcode]->type == phVOWEL) { n_syllables++; - if(pl->stress > max_stress) + if(pl->stresslevel > max_stress) { syllable_stressed = n_syllables; - max_stress = pl->stress; + max_stress = pl->stresslevel; max_stress_posn = k; } } @@ -137,7 +137,7 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST2 *plist_out) flags |= 8; ch.flags = flags | word_end; - ch.stress = plist2->stress; + ch.stress = plist2->stresslevel; ch.stress_highest = max_stress; ch.n_vowels = n_syllables; ch.vowel_this = syllable; @@ -156,13 +156,13 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST2 *plist_out) if((replace_flags & 1) && (word_end == 0)) continue; // this replacement only occurs at the end of a word - if((replace_flags & 2) && ((plist2->stress & 0x7) > 3)) + if((replace_flags & 2) && ((plist2->stresslevel & 0x7) > 3)) continue; // this replacement doesn't occur in stressed syllables // substitute the replacement phoneme plist2->phcode = replace_phonemes[k].new_ph; - if((plist2->stress > 1) && (phoneme_tab[plist2->phcode]->phflags & phUNSTRESSED)) - plist2->stress = 0; // the replacement must be unstressed + if((plist2->stresslevel > 1) && (phoneme_tab[plist2->phcode]->phflags & phUNSTRESSED)) + plist2->stresslevel = 0; // the replacement must be unstressed break; } } @@ -214,8 +214,8 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) for(j = n_ph_list2-3; j>=0; j--) { // start with the last phoneme (before the terminating pauses) and move forwards - if((plist2[j].stress & 0x7f) > max_stress) - max_stress = plist2[j].stress & 0x7f; + if((plist2[j].stresslevel & 0x7f) > max_stress) + max_stress = plist2[j].stresslevel & 0x7f; if(plist2[j].sourceix != 0) break; } @@ -226,10 +226,10 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) { if(plist2[j].synthflags & SFLAG_PROMOTE_STRESS) // dictionary flags indicated that this stress can be promoted { - plist2[j].stress = 4; // promote to stressed + plist2[j].stresslevel = 4; // promote to stressed break; } - if(plist2[j].stress >= 4) + if(plist2[j].stresslevel >= 4) { // found a stressed syllable, so stop looking break; @@ -344,7 +344,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) if(plist2->phcode == phonSWITCH) { // change phoneme table - SelectPhonemeTable(plist2->tone_number); + SelectPhonemeTable(plist2->tone_ph); switched_language ^= SFLAG_SWITCHED_LANG; } next = phoneme_tab[(plist2+1)->phcode]; // the phoneme after this one @@ -363,8 +363,8 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) if(ph_list3[k].sourceix) break; // start of the next word - if(ph_list3[k].stress > word_stress) - word_stress = ph_list3[k].stress; + if(ph_list3[k].stresslevel > word_stress) + word_stress = ph_list3[k].stresslevel; } } @@ -373,7 +373,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) if(ph->type == phVOWEL) { // check for consecutive unstressed syllables - if(plist2->stress == 0) + if(plist2->stresslevel == 0) { // an unstressed vowel unstress_count++; @@ -388,7 +388,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) } else { - plist2->stress = 1; // change stress to 'diminished' + plist2->stresslevel = 1; // change stress to 'diminished' } } } @@ -455,7 +455,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) { plist2->synthflags |= SFLAG_SYLLABLE; if(ph2->type != phVOWEL) - plist2->stress = 0; // change from non-vowel to vowel, make sure it's unstressed + plist2->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed } else plist2->synthflags &= ~SFLAG_SYLLABLE; @@ -465,7 +465,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) { if((ph->mnemonic == 't') && (plist2->sourceix == 0) && ((prev->type == phVOWEL) || (prev->mnemonic == 'n'))) { - if(((plist2+1)->sourceix == 0) && ((plist2+1)->stress < 3) && (next->type == phVOWEL)) + if(((plist2+1)->sourceix == 0) && ((plist2+1)->stresslevel < 3) && (next->type == phVOWEL)) { ph = phoneme_tab[phonT_REDUCED]; } @@ -483,13 +483,13 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) if(ph->type == phVOWEL) { - stress_level = plist2->stress; + stress_level = plist2->stresslevel; } else { // consonant, get stress from the following vowel if(next->type == phVOWEL) - stress_level = (plist2+1)->stress; + stress_level = (plist2+1)->stresslevel; else break; } @@ -562,7 +562,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) insert_ph = phonPAUSE_VSHORT; } - if(((plist2+1)->stress >= 4) && (tr->langopts.vowel_pause & 0x100)) + if(((plist2+1)->stresslevel >= 4) && (tr->langopts.vowel_pause & 0x100)) { // pause before a words which starts with a stressed vowel insert_ph = phonPAUSE_SHORT; @@ -628,8 +628,8 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) phlist[ix].type = ph->type; phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module phlist[ix].synthflags = plist2->synthflags | switched_language; - phlist[ix].stresslevel = plist2->stress & 0xf; - phlist[ix].tone_ph = plist2->tone_number; + phlist[ix].stresslevel = plist2->stresslevel & 0xf; + phlist[ix].tone_ph = plist2->tone_ph; phlist[ix].sourceix = 0; if(plist2->sourceix != 0) diff --git a/src/readclause.cpp b/src/readclause.cpp index 1423ae0f..32820c3b 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -63,9 +63,6 @@ int count_characters = 0; static int sayas_mode; static int ssml_ignore_l_angle = 0; -static const char *punct_stop = ".:!?"; // pitch fall if followed by space -static const char *punct_close = ")]}>;'\""; // always pitch fall unless followed by alnum - // alter tone for announce punctuation or capitals //static const char *tone_punct_on = "\0016T"; // add reverberation, lower pitch //static const char *tone_punct_off = "\001T\001P"; @@ -121,7 +118,7 @@ static const unsigned int punct_attributes [] = { 0, CLAUSE_COMMA, CLAUSE_PERIOD, CLAUSE_QUESTION, CLAUSE_EXCLAMATION, CLAUSE_COLON, CLAUSE_SEMICOLON, CLAUSE_SEMICOLON, // en-dash CLAUSE_SEMICOLON, // em-dash - CLAUSE_SEMICOLON, // elipsis + CLAUSE_SEMICOLON + PUNCT_SAY_NAME, // elipsis CLAUSE_QUESTION, // Greek question mark CLAUSE_SEMICOLON, // Greek semicolon @@ -574,7 +571,7 @@ static const char *LookupSpecial(Translator *tr, const char *string, char* text_ if(LookupDictList(tr,&string1,phonemes,flags,0,NULL)) { - SetWordStress(tr, phonemes, flags[0], -1, 0); + SetWordStress(tr, phonemes, flags, -1, 0); DecodePhonemes(phonemes,phonemes2); sprintf(text_out,"[[%s]]",phonemes2); option_phoneme_input |= 2; @@ -584,8 +581,8 @@ static const char *LookupSpecial(Translator *tr, const char *string, char* text_ } -static const char *LookupCharName(Translator *tr, int c) -{//===================================================== +static const char *LookupCharName(Translator *tr, int c, int only) +{//=============================================================== // Find the phoneme string (in ascii) to speak the name of character c // Used for punctuation characters and symbols @@ -606,20 +603,28 @@ static const char *LookupCharName(Translator *tr, int c) ix = utf8_out(c,&single_letter[2]); single_letter[2+ix]=0; - string = &single_letter[1]; - if(LookupDictList(tr, &string, phonemes, flags, 0, NULL) == 0) + if(only) { - // try _* then * string = &single_letter[2]; + LookupDictList(tr, &string, phonemes, flags, 0, NULL); + } + else + { + string = &single_letter[1]; if(LookupDictList(tr, &string, phonemes, flags, 0, NULL) == 0) { - // now try the rules - single_letter[1] = ' '; - TranslateRules(tr, &single_letter[2], phonemes, sizeof(phonemes), NULL,0,NULL); + // try _* then * + string = &single_letter[2]; + if(LookupDictList(tr, &string, phonemes, flags, 0, NULL) == 0) + { + // now try the rules + single_letter[1] = ' '; + TranslateRules(tr, &single_letter[2], phonemes, sizeof(phonemes), NULL,0,NULL); + } } } - if((phonemes[0] == 0) && (tr->translator_name != L('e','n'))) + if((only==0) && (phonemes[0] == 0) && (tr->translator_name != L('e','n'))) { // not found, try English SetTranslator2("en"); @@ -644,20 +649,21 @@ static const char *LookupCharName(Translator *tr, int c) { if(lang_name) { - SetWordStress(translator2, phonemes, flags[0], -1, 0); + SetWordStress(translator2, phonemes, flags, -1, 0); DecodePhonemes(phonemes,phonemes2); sprintf(buf,"[[_^_%s %s _^_%s]]","en",phonemes2,WordToString2(tr->translator_name)); SelectPhonemeTable(voice->phoneme_tab_ix); // revert to original phoneme table } else { - SetWordStress(tr, phonemes, flags[0], -1, 0); + SetWordStress(tr, phonemes, flags, -1, 0); DecodePhonemes(phonemes,phonemes2); sprintf(buf,"[[%s]] ",phonemes2); } option_phoneme_input |= 2; } else + if(only == 0) { strcpy(buf,"[[(X1)(X1)(X1)]]"); option_phoneme_input |= 2; @@ -835,6 +841,8 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output const char *punctname; int found = 0; int soundicon; + int attributes; + int short_pause; int c2; int len; int bufix1; @@ -852,10 +860,10 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output found = 1; } else - if((punctname = LookupCharName(tr, c1)) != NULL) + if((punctname = LookupCharName(tr, c1, 0)) != NULL) { found = 1; - if((*bufix==0) || (end_clause==0)) + if((*bufix==0) || (end_clause ==0) || (tr->langopts.param[LOPT_ANNOUNCE_PUNCT] & 2)) { punct_count=1; while(c2 == c1) @@ -919,14 +927,24 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output if(c1 == '-') return(CLAUSE_NONE); // no pause - if(bufix1 > 0) - return(CLAUSE_SHORTCOMMA); - if((strchr_w(punct_close,c1) != NULL) && !iswalnum(c2)) - return(CLAUSE_SHORTFALL+4); - if(iswspace(c2) && strchr_w(punct_stop,c1)!=NULL) - return(punct_attributes[lookupwchar(punct_chars,c1)]); + + attributes = punct_attributes[lookupwchar(punct_chars,c1)]; + + short_pause = CLAUSE_SHORTFALL; + if((attributes & CLAUSE_BITS_INTONATION) == 0x1000) + short_pause = CLAUSE_SHORTCOMMA; + + if((bufix1 > 0) && !(tr->langopts.param[LOPT_ANNOUNCE_PUNCT] & 2)) + { + if((attributes & ~0x8000) == CLAUSE_SEMICOLON) + return(CLAUSE_SHORTFALL); + return(short_pause); + } + + if(attributes & CLAUSE_BIT_SENTENCE) + return(attributes); - return(CLAUSE_SHORTCOMMA); + return(short_pause); } // end of AnnouncePunctuation #define SSML_SPEAK 1 @@ -1936,6 +1954,7 @@ int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix int c2; // next character int cprev=' '; // previous character int cprev2=' '; + int c_next; int parag; int ix = 0; int j; @@ -1948,7 +1967,7 @@ int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix int found; int any_alnum = 0; int self_closing; - int punct_data; + int punct_data = 0; int is_end_clause; int announced_punctuation; int stressed_word = 0; @@ -2340,6 +2359,18 @@ if(option_ssml) parag=1; { is_end_clause = 0; + if((c1 == '.') && (c2 == '.')) + { + while((c_next = GetC()) == '.') + { + // 3 or more dots, replace by elipsis + c1 = 0x2026; + c2 = ' '; + } + UngetC(c_next); + } + + punct_data = 0; if((punct = lookupwchar(punct_chars,c1)) != 0) { punct_data = punct_attributes[punct]; @@ -2371,17 +2402,23 @@ if(option_ssml) parag=1; } } + if((punct_data & PUNCT_SAY_NAME) && (announced_punctuation == 0)) + { + // used for elipsis (and 3 dots) if a pronunciation for elipsis is given in *_list + char *p2; + + p2 = &buf[ix]; + sprintf(p2,"%s",LookupCharName(tr, c1, 1)); + if(p2[0] != 0) + { + ix += strlen(p2); + announced_punctuation = c1; + punct_data = punct_data & ~CLAUSE_BITS_INTONATION; // change intonation type to 0 (full-stop) + } + } if(is_end_clause) { - int c_next; - - if((c1 == '.') && (cprev == '.')) - { - c1 = 0x2026; - punct = 9; // elipsis - } - nl_count = 0; c_next = c2; @@ -2395,26 +2432,39 @@ if(option_ssml) parag=1; } } - if((nl_count==0) && (c1 == '.')) + if(nl_count==0) { - if((tr->langopts.numbers & NUM_ORDINAL_DOT) && - (iswdigit(cprev) || (IsRomanU(cprev) && (IsRomanU(cprev2) || iswspace(cprev2))))) // lang=hu + if(c1 == '.') { - // dot after a number indicates an ordinal number - if(!iswdigit(cprev) || iswlower(c_next) || (c_next == '<')) - is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag) + if((tr->langopts.numbers & NUM_ORDINAL_DOT) && + (iswdigit(cprev) || (IsRomanU(cprev) && (IsRomanU(cprev2) || iswspace(cprev2))))) // lang=hu + { + // dot after a number indicates an ordinal number + if(!iswdigit(cprev) || iswlower(c_next) || (c_next == '<')) + is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag) + } + else + if(iswlower(c_next)) + { + // next word has no capital letter, this dot is probably from an abbreviation + c1 = ' '; + is_end_clause = 0; + } + if(any_alnum==0) + { + // no letters or digits yet, so probably not a sentence terminator + // Here, dot is followed by space or bracket + c1 = ' '; + is_end_clause = 0; + } } else - if(iswlower(c_next)) { - // next word has no capital letter, this dot is probably from an abbreviation - c1 = ' '; - is_end_clause = 0; - } - if(any_alnum==0) - { - c1 = ' '; // no letters or digits yet, so probably not a sentence terminator - is_end_clause = 0; + if(any_alnum==0) + { + // no letters or digits yet, so probably not a sentence terminator + is_end_clause = 0; + } } } @@ -2424,7 +2474,6 @@ if(option_ssml) parag=1; buf[ix] = ' '; buf[ix+1] = 0; - punct_data = punct_attributes[punct]; if(nl_count > 1) { if((punct_data == CLAUSE_QUESTION) || (punct_data == CLAUSE_EXCLAMATION)) @@ -2449,12 +2498,14 @@ if(option_ssml) parag=1; if(c1 == announced_punctuation) { -// const unsigned short keep_punctuation[] = { -// '\'', '-', 0x92, 0xb4, 0x2019, 0x2032, 0 }; - // This character has already been announced, so delete it so that it isn't spoken a second time. // Unless it's a hyphen or apostrophe (which is used by TranslateClause() ) - if(!IsBracket(c1)) + if(IsBracket(c1)) + { + c1 = 0xe000 + '('; // Unicode private useage area. So TranslateRules() knows the bracket name has been spoken + } + else + if(c1 != '-') { c1 = ' '; } diff --git a/src/speech.h b/src/speech.h index 3a0007a5..e4dc89ba 100755 --- a/src/speech.h +++ b/src/speech.h @@ -27,6 +27,12 @@ #define ARCH_BIG #endif +#ifdef __QNX__ +#define NEED_GETOPT +#define NO_VARIADIC_MACROS +#endif + + #define PLATFORM_POSIX #define PATHSEP '/' // USE_PORTAUDIO or USE_PULSEAUDIO are now defined in the makefile diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 645f1f71..26040efe 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.41.18 19.Oct.09"; +const char *version_string = "1.41.32 09.Nov.09"; const int version_phdata = 0x014118; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index f8edb195..dcc5f289 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1276,6 +1276,13 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) else { DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,0); + if((p->newword == 0) && (next2->newword == 0)) + { + if((next->type == phVFRICATIVE) && (p->ph->mnemonic !='d')) + DoPause(20,0); + if((next->type == phFRICATIVE) || (next->type == phNASAL)) + DoPause(12,0); + } } break; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 1fc9d222..a011a9c1 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -154,6 +154,8 @@ static Translator* NewTranslator(void) tr->langopts.param[LOPT_SONORANT_MIN] = 95; tr->langopts.param[LOPT_MAXAMP_EOC] = 19; tr->langopts.param[LOPT_UNPRONOUNCABLE] = 's'; // don't count this character at start of word + tr->langopts.param[LOPT_BRACKET_PAUSE] = 4; // pause at bracket + tr->langopts.param2[LOPT_BRACKET_PAUSE] = 2; // pauses when announcing bracket names tr->langopts.max_initial_consonants = 3; tr->langopts.replace_chars = NULL; tr->langopts.ascii_language = ""; // Non-Latin alphabet languages, use this language to speak Latin words, default is English @@ -576,10 +578,10 @@ Translator *SelectTranslator(const char *name) tr->langopts.vowel_pause = 0x20; tr->langopts.stress_rule = STRESSPOSN_1L; - tr->langopts.stress_flags = 0x8036; + tr->langopts.stress_flags = 0x8036 | STRS_HYPEN_UNSTRESS; tr->langopts.unstressed_wd1 = 2; -// tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x4; // don't propagate over word boundaries tr->langopts.param[LOPT_IT_DOUBLING] = 1; + tr->langopts.param[LOPT_ANNOUNCE_PUNCT] = 2; // don't break clause before announcing . ? ! // tr->langopts.param[LOPT_COMBINE_WORDS] = 9; // combine some prepositions with the following word tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_5 | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ROMAN_CAPITALS | NUM_ORDINAL_DOT | NUM_OMIT_1_HUNDRED; diff --git a/src/translate.cpp b/src/translate.cpp index 2cd5c279..68266695 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -75,6 +75,7 @@ static int embedded_flag = 0; // there are embedded commands to be applied to static int prev_clause_pause=0; static int max_clause_pause = 0; +static int any_stressed_words; int pre_pause; @@ -1100,7 +1101,7 @@ strcpy(phonemes2,phonemes); { char *p; // German, keep a secondary stress on the stem - SetWordStress(tr, phonemes, dictionary_flags[0], 3, 0); + SetWordStress(tr, phonemes, dictionary_flags, 3, 0); // reduce all but the first primary stress ix=0; @@ -1116,22 +1117,22 @@ strcpy(phonemes2,phonemes); } strcpy(word_phonemes,prefix_phonemes); strcat(word_phonemes,phonemes); - SetWordStress(tr, word_phonemes, dictionary_flags[0], -1, 0); + SetWordStress(tr, word_phonemes, dictionary_flags, -1, 0); } else { // stress position affects the whole word, including prefix strcpy(word_phonemes,prefix_phonemes); strcat(word_phonemes,phonemes); - SetWordStress(tr, word_phonemes, dictionary_flags[0], -1, tr->prev_last_stress); + SetWordStress(tr, word_phonemes, dictionary_flags, -1, tr->prev_last_stress); } } else { if(prefix_phonemes[0] == 0) - SetWordStress(tr, phonemes, dictionary_flags[0], -1, tr->prev_last_stress); + SetWordStress(tr, phonemes, dictionary_flags, -1, tr->prev_last_stress); else - SetWordStress(tr, phonemes, dictionary_flags[0], -1, 0); + SetWordStress(tr, phonemes, dictionary_flags, -1, 0); strcpy(word_phonemes,prefix_phonemes); strcat(word_phonemes,phonemes); } @@ -1149,6 +1150,11 @@ strcpy(phonemes2,phonemes); dictionary_flags[0] &= ~FLAG_PAUSE1; } + if((wflags & FLAG_HYPHEN) && (tr->langopts.stress_flags & STRS_HYPEN_UNSTRESS)) + { + ChangeWordStress(tr,word_phonemes,3); + } + else if(wflags & FLAG_EMPHASIZED2) { // A word is indicated in the source text as stressed @@ -1165,7 +1171,7 @@ strcpy(phonemes2,phonemes); if(dictionary_flags[0] & (FLAG_STRESS_END | FLAG_STRESS_END2)) ChangeWordStress(tr,word_phonemes,4); else - if(dictionary_flags[0] & FLAG_UNSTRESS_END) + if((dictionary_flags[0] & FLAG_UNSTRESS_END) && (any_stressed_words)) ChangeWordStress(tr,word_phonemes,3); } @@ -1227,7 +1233,7 @@ strcpy(phonemes2,phonemes); tr->expect_past--; } - if((word_length == 1) && iswalpha(first_char) && (first_char != 'i')) + if((word_length == 1) && (tr->translator_name == L('e','n')) && iswalpha(first_char) && (first_char != 'i')) { // English Specific !!!! // any single letter before a dot is an abbreviation, except 'I' @@ -1247,8 +1253,8 @@ strcpy(phonemes2,phonemes); static void SetPlist2(PHONEME_LIST2 *p, unsigned char phcode) {//========================================================== p->phcode = phcode; - p->stress = 0; - p->tone_number = 0; + p->stresslevel = 0; + p->tone_ph = 0; p->synthflags = embedded_flag; p->sourceix = 0; embedded_flag = 0; @@ -1602,7 +1608,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa { // this word uses a different phoneme table SetPlist2(&ph_list2[n_ph_list2],phonSWITCH); - ph_list2[n_ph_list2++].tone_number = switch_phonemes; // temporary phoneme table number + ph_list2[n_ph_list2++].tone_ph = switch_phonemes; // temporary phoneme table number } // remove initial pause from a word if it follows a hyphen @@ -1622,7 +1628,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa ph_list2[n_ph_list2].phcode = ph_code; ph_list2[n_ph_list2].sourceix = 0; ph_list2[n_ph_list2].synthflags = embedded_flag; - ph_list2[n_ph_list2++].tone_number = *p++; + ph_list2[n_ph_list2++].tone_ph = *p++; } else if(ph->type == phSTRESS) @@ -1637,7 +1643,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa // for tone languages, the tone number for a syllable follows the vowel if(prev_vowel >= 0) { - ph_list2[prev_vowel].tone_number = ph_code; + ph_list2[prev_vowel].tone_ph = ph_code; } else { @@ -1651,7 +1657,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa // mark the previous phoneme as a syllabic consonant prev_vowel = n_ph_list2-1; ph_list2[prev_vowel].synthflags |= SFLAG_SYLLABLE; - ph_list2[prev_vowel].stress = next_stress; + ph_list2[prev_vowel].stresslevel = next_stress; } else if(ph_code == phonLENGTHEN) @@ -1678,7 +1684,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa else { ph_list2[n_ph_list2].phcode = ph_code; - ph_list2[n_ph_list2].tone_number = 0; + ph_list2[n_ph_list2].tone_ph = 0; ph_list2[n_ph_list2].synthflags = embedded_flag | found_dict_flag; embedded_flag = 0; ph_list2[n_ph_list2].sourceix = srcix; @@ -1689,8 +1695,13 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa stress = next_stress; next_stress = 0; + if(stress >= 4) + { + any_stressed_words = 1; + } + if((prev_vowel >= 0) && (n_ph_list2-1) != prev_vowel) - ph_list2[n_ph_list2-1].stress = stress; // set stress for previous consonant + ph_list2[n_ph_list2-1].stresslevel = stress; // set stress for previous consonant ph_list2[n_ph_list2].synthflags |= SFLAG_SYLLABLE; prev_vowel = n_ph_list2; @@ -1702,7 +1713,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa } if(next_tone != 0) { - ph_list2[n_ph_list2].tone_number = next_tone; + ph_list2[n_ph_list2].tone_ph = next_tone; next_tone=0; } } @@ -1720,7 +1731,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa } } - ph_list2[n_ph_list2].stress = stress; + ph_list2[n_ph_list2].stresslevel = stress; n_ph_list2++; first_phoneme = 0; } @@ -1742,7 +1753,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa // this word uses a different phoneme table, now switch back SelectPhonemeTable(voice->phoneme_tab_ix); SetPlist2(&ph_list2[n_ph_list2],phonSWITCH); - ph_list2[n_ph_list2++].tone_number = voice->phoneme_tab_ix; // original phoneme table number + ph_list2[n_ph_list2++].tone_ph = voice->phoneme_tab_ix; // original phoneme table number } @@ -2021,6 +2032,7 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t embedded_read = 0; option_phoneme_input &= ~2; // clear bit 1 (temporary indication) pre_pause = 0; + any_stressed_words = 0; if((clause_start_char = count_characters) < 0) clause_start_char = 0; @@ -2390,7 +2402,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre else if(c=='-') { - if(IsAlpha(prev_in) && IsAlpha(next_in)) + if((IsAlpha(prev_in) || iswdigit(prev_in)) && IsAlpha(next_in)) { // '-' between two letters is a hyphen, treat as a space word_flags |= FLAG_HYPHEN; @@ -2683,17 +2695,17 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre } word = pw; - // include the next few characters, in case there are an ordinal indicator + // include the next few characters, in case there are an ordinal indicator or other suffix pn[0] = ' '; - memcpy(pn+1, pw, 8); - pn[8] = 0; + memcpy(pn+1, pw, 16); + pn[16] = 0; for(pw = &number_buf[1]; pw < pn;) { + // keep wflags for each part, for FLAG_HYPHEN_AFTER dict_flags = TranslateWord2(tr, pw, &words[ix], words[ix].pre_pause,0 ); while(*pw++ != ' '); words[ix].pre_pause = 0; - words[ix].flags = 0; } } else @@ -2730,7 +2742,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre if(dict_flags & FLAG_SKIPWORDS) { - ix += dictionary_skipwords; // dictionary indicates skip next word(s) + ix += dictionary_skipwords; // dictionary indicates skip next word(s) } } @@ -2740,7 +2752,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre PHONEME_LIST2 *p2; p2 = &ph_list2[n_ph_list2 + ix]; p2->phcode = phonPAUSE; - p2->stress = 0; + p2->stresslevel = 0; p2->sourceix = source_index; p2->synthflags = 0; } diff --git a/src/translate.h b/src/translate.h index 974a5f2f..1e904b91 100755 --- a/src/translate.h +++ b/src/translate.h @@ -76,9 +76,9 @@ #define FLAG_VERB_EXT 0x100 /* extend the 'verb follows' */ #define FLAG_CAPITAL 0x200 /* pronunciation if initial letter is upper case */ #define FLAG_ALLCAPS 0x400 // only if the word is all capitals -#define BITNUM_FLAG_ALLCAPS 0x2a #define FLAG_ACCENT 0x800 // character name is base-character name + accent name #define FLAG_HYPHENATED 0x1000 // multiple-words, but needs hyphen between parts 1 and 2 +#define BITNUM_FLAG_ALLCAPS 0x2a #define BITNUM_FLAG_HYPHENATED 0x2c @@ -164,29 +164,30 @@ // Punctuation types returned by ReadClause() // bits 0-7 pause x 10mS, bits 12-14 intonation type, +// bit 15- don't need space after the punctuation // bit 19=sentence, bit 18=clause, bits 17=voice change // bit 16 used to distinguish otherwise identical types // bit 20= punctuation character can be inside a word (Armenian) +// bit 21= speak the name of the punctuation character #define CLAUSE_BIT_SENTENCE 0x80000 +#define CLAUSE_BIT_CLAUSE 0x40000 #define CLAUSE_BIT_VOICE 0x20000 +#define CLAUSE_BITS_INTONATION 0x7000 #define PUNCT_IN_WORD 0x100000 +#define PUNCT_SAY_NAME 0x200000 #define CLAUSE_NONE 0 + 0x04000 #define CLAUSE_PARAGRAPH 70 + 0x80000 -#define CLAUSE_EOF 35 + 0x90000 +#define CLAUSE_EOF 40 + 0x90000 #define CLAUSE_VOICE 0 + 0x24000 -#define CLAUSE_PERIOD 35 + 0x80000 +#define CLAUSE_PERIOD 40 + 0x80000 #define CLAUSE_COMMA 20 + 0x41000 #define CLAUSE_SHORTCOMMA 4 + 0x41000 #define CLAUSE_SHORTFALL 4 + 0x40000 -#define CLAUSE_QUESTION 35 + 0x82000 -#define CLAUSE_EXCLAMATION 40 + 0x83000 +#define CLAUSE_QUESTION 40 + 0x82000 +#define CLAUSE_EXCLAMATION 45 + 0x83000 #define CLAUSE_COLON 30 + 0x40000 -#ifdef PLATFORM_RISCOS -#define CLAUSE_SEMICOLON 30 + 0x40000 -#else #define CLAUSE_SEMICOLON 30 + 0x41000 -#endif #define SAYAS_CHARS 0x12 #define SAYAS_GLYPHS 0x13 @@ -225,8 +226,8 @@ typedef struct{ // a clause translated into phoneme codes (first stage) typedef struct { unsigned char phcode; - unsigned char stress; - unsigned char tone_number; + unsigned char stresslevel; + unsigned char tone_ph; unsigned char synthflags; unsigned short sourceix; } PHONEME_LIST2; @@ -242,7 +243,7 @@ extern const int param_defaults[N_SPEECH_PARAM]; -#define N_LOPTS 16 +#define N_LOPTS 18 #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 @@ -296,6 +297,12 @@ extern const int param_defaults[N_SPEECH_PARAM]; // Call ApplySpecialAttributes() if $alt or $alt2 is set for a word #define LOPT_ALT 15 + // pause for bracket (default=4), pause when annoucing bracket names (default=2) +#define LOPT_BRACKET_PAUSE 16 + + // bit 1, don't break clause before annoucning . ? ! +#define LOPT_ANNOUNCE_PUNCT 17 + // stress_rule #define STRESSPOSN_1L 0 // 1st syllable @@ -314,6 +321,7 @@ typedef struct { int vowel_pause; int stress_rule; // 1=first syllable, 2=penultimate, 3=last +#define STRS_HYPEN_UNSTRESS 0x100000 // bit0=don't stress monosyllables, except at end of clause // bit1=don't set diminished stress, // bit2=mark unstressed final syllables as diminished @@ -329,11 +337,13 @@ typedef struct { // bit17= "priority" stress reduces other primary stress to "unstressed" not "secondary" // bit18= don't lengthen short vowels more than long vowels at end-of-clause // bit19=stress on final syllable if it has a long vowel, but previous syllable has a short vowel +// bit20= hyphenated words, 2nd part is unstressed int stress_flags; int unstressed_wd1; // stress for $u word of 1 syllable int unstressed_wd2; // stress for $u word of >1 syllable int param[N_LOPTS]; + int param2[N_LOPTS]; unsigned char *length_mods; unsigned char *length_mods0; @@ -605,7 +615,7 @@ void CalcPitches(Translator *tr, int clause_tone); int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy); int Unpronouncable(Translator *tr, char *word); -void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags, int tonic, int prev_stress); +void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int tonic, int prev_stress); int TranslateRules(Translator *tr, char *p, char *phonemes, int size, char *end_phonemes, int end_flags, unsigned int *dict_flags); int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab); void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *tone, char **voice_change); diff --git a/src/voices.cpp b/src/voices.cpp index ec3fcd48..a120f7c8 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -113,12 +113,12 @@ enum { -typedef struct { - const char *mnem; - int data; -} keywtab_t; +static MNEM_TAB options_tab[] = { + {"reduce_t", LOPT_REDUCE_T}, + {"bracket", LOPT_BRACKET_PAUSE}, + {NULL, -1} }; -static keywtab_t keyword_tab[] = { +static MNEM_TAB keyword_tab[] = { {"name", V_NAME}, {"language", V_LANGUAGE}, {"gender", V_GENDER}, @@ -373,11 +373,12 @@ void VoiceReset(int tone_only) static int breath_widths[N_PEAKS] = {0,200,200,400,400,400,600,600,600}; - // default is: pitch 82,118 -// voice->pitch_base = 0x49000; // default, 73 << 12; -// voice->pitch_range = 0x0f30; // default = 0x1000 - voice->pitch_base = 0x47000; - voice->pitch_range = 3996; + // default is: pitch 78,120 + voice->pitch_base = 0x45000; + voice->pitch_range = 4536; +// default is: pitch 80,117 +// voice->pitch_base = 0x47000; +// voice->pitch_range = 3996; voice->formant_factor = 256; @@ -503,12 +504,12 @@ voice_t *LoadVoice(const char *vname, int control) // bit 4 1 = vname = full path FILE *f_voice = NULL; - keywtab_t *k; char *p; int key; int ix; int n; int value; + int value2; int error = 0; int langix = 0; int tone_only = control & 2; @@ -527,6 +528,7 @@ voice_t *LoadVoice(const char *vname, int control) char translator_name[40]; char new_dictionary[40]; char phonemes_name[40]; + char option_name[40]; const char *language_type; char buf[200]; char path_voices[sizeof(path_home)+12]; @@ -631,15 +633,7 @@ voice_t *LoadVoice(const char *vname, int control) if(buf[0] == 0) continue; - key = 0; - for(k=keyword_tab; k->mnem != NULL; k++) - { - if(strcmp(buf,k->mnem)==0) - { - key = k->data; - break; - } - } + key = LookupMnem(keyword_tab, buf); switch(key) { @@ -804,10 +798,15 @@ voice_t *LoadVoice(const char *vname, int control) break; case V_OPTION: - if(sscanf(p,"%d %d",&ix,&value) == 2) + value2 = 0; + if((sscanf(p,"%s %d %d",option_name,&value,&value2) >= 2) && ((ix = LookupMnem(options_tab, option_name)) >= 0)) { - if((ix >= 0) && (ix < N_LOPTS)) - langopts->param[ix] = value; + langopts->param[ix] = value; + langopts->param2[ix] = value2; + } + else + { + fprintf(stderr,"Bad voice option: %s %s\n",buf,p); } break;