From 5bdf9d63abd35ba6241af548be141f31089c62f0 Mon Sep 17 00:00:00 2001 From: jonsd Date: Tue, 23 Oct 2007 13:14:49 +0000 Subject: [PATCH] [1.29.11] Move character substitution feature to language *_rules files. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@93 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/af_list | 33 ++++-- dictsource/af_rules | 242 ++++++++++++++++++++++++++++++-------- dictsource/dict_phonemes | 63 +++++----- dictsource/hi_rules | 13 ++ dictsource/hu_rules | 6 + dictsource/mk_rules | 36 ++++++ dictsource/ro_rules | 4 + phsource/compile_report | 40 ++++--- phsource/mbrola/en1 | 1 + phsource/mbrola/us | 1 + phsource/mbrola/us3 | 1 + phsource/ph_base2 | 7 ++ phsource/ph_english_sc | 4 +- phsource/ph_english_wm | 10 +- phsource/ph_greek_ancient | 44 +++++++ phsource/ph_pt_brazil | 7 -- phsource/phonemes | 3 + phsource/vdiph2/i@_2 | Bin 22816 -> 22816 bytes phsource/vowel/e# | Bin 5202 -> 5202 bytes phsource/vowel/i_2 | Bin 7349 -> 7349 bytes phsource/vowelr/aa_r | Bin 20316 -> 20316 bytes phsource/vwl_en/ooi@ | Bin 0 -> 30872 bytes src/compiledict.cpp | 137 +++++++++++++++------ src/dictionary.cpp | 16 ++- src/extras.cpp | 2 + src/numbers.cpp | 16 +-- src/synthdata.cpp | 2 +- src/tr_languages.cpp | 74 +++++++----- src/translate.cpp | 28 +++-- src/translate.h | 5 +- 30 files changed, 583 insertions(+), 212 deletions(-) create mode 100644 phsource/ph_greek_ancient create mode 100644 phsource/vwl_en/ooi@ diff --git a/dictsource/af_list b/dictsource/af_list index 88134f3f..388d96b5 100755 --- a/dictsource/af_list +++ b/dictsource/af_list @@ -91,21 +91,26 @@ bethlehem bEt_liEm brittanje $2 ceylon s@lOn china S'ina +(graaff reinet) x2rA:f||r@n'Et +italië it'A:li;@ jerusalem j@r'ysalEm kanada kanad%a +knysna neIsna kongo kONgu mesopotamië mEsuput'A:mi@ mosambiek musamb'ik -potchefstroom pOtSIfstr'o@m (thaba nchu) tab'A:||ntSu europa Y@r'o@pa +outeniekwa @Ut@n'ikwa portugal $1 +potchefstroom pOtSIfstr'o@m pretoria prit'o@ria stellenbosch st%&l@mbOs +tunisië $2 +turkye $2 upington apiNt@n worcester v'ust@r -zimbabwe zI:mb'ab_wE - +zimbabwe zI:mb'ab_wE @@ -124,16 +129,19 @@ bester b'Est@r botha bo@ta breytenbach breIt@nbax2 carl kA:r@L +cecilia s@si:lia charles _^_EN charlie tSA:li chopin S%OpA~ chris krIs christo krIstu christian krIstian +christelle kr@st&l christine kr@st'i:n coetzee kuts'e@ cronjé krOnj'e@ debora d@bo@ra +debussy d@bus'i: der d@r deventer d'e@v@nt@r du $u @@ -187,6 +195,7 @@ martha marta martin m'A:rt@n michelle miS'&l michiel $2 +miriam mIri@m mostert m'Ost@rt mozart mo@tsart naomi na_'o@mi @@ -195,11 +204,14 @@ naudé nOd'e@ paul p@Ul paulus p@UlWs philip fIl@p +phillips fIl@ps pierre p'e@r petrus pe@trWs phoebe fi:bi rachmaninoff rax2m'aninOf rebekka r@bEka +renée r@neI +retief r@tif ronel run'&l rousseau r@s@U roux r'u @@ -216,6 +228,7 @@ theron tr'On viljoen $2 villiers vIli@rs violet _^_EN $capital +william _^_EN marais mar'E: mandela mand'E:la celliers sIlj'e@ @@ -292,7 +305,7 @@ alhoewel alhuv'&l $pause tensy $2 $pause aangesien $pause wie $pause -wanneer $pause +wanneer $1 $pause waar $pause waarom $pause waarheen $pause @@ -376,7 +389,6 @@ bv beIf'o@rbe@lt $dot // main word list -aanbid $2 aanstaande $2 adagio ad'A:dZi;%@U algaande $2 @@ -468,7 +480,6 @@ hokaai hOkAI hoofsaaklik $2 idee $2 -ietwat itvat ignoreer ix2no@r'e@r inagneming @nax2ne@m@N inkluis $2 @@ -476,16 +487,16 @@ intens @nt'Ens intensiteit $4 jawoord jA:vo@rt - +jupiter jupit@r kafee kaf'e@ -kapitaal kapit'A:l +kaviaar kavi'A:r komaan kOmA:n komberse kOmb'&rs@ kombers kOmb'&rs kopiereg kup'ir&x2 kritiek krIt'ik -kultuur $2 +kulture $2 kunsmatige kWnsm'A:t@x2@ kwansuis $2 @@ -497,6 +508,7 @@ lekkerste l&k@rst@ macaroni makar'o@ni madame mad'A:m makabere m%ak'A:b@r@ +maskering mask'e@r@N $only meegee me@x2e@ memoriam mEm'o@riam merlot m&rl'o@ @@ -608,6 +620,8 @@ uiteindelik $2 uiteraard Yyt@r_'A:rt vaarwel fA:rv'&l +vakant f%ak'ant +vakante f%ak'ant@ vanaf fanaf vandat $1 vanne fan@ @@ -619,7 +633,6 @@ vererger f@r&rg@r ver f'&:r verg f&rx2 vergete f@rx2e@t@ -vergewe f@rx2e@v@ vermy $2 verre f&:r@ verregaande f&r@x2'A:nd@ diff --git a/dictsource/af_rules b/dictsource/af_rules index aa011d96..311dd65f 100755 --- a/dictsource/af_rules +++ b/dictsource/af_rules @@ -38,12 +38,19 @@ agter (dogt %ax2t@r // move default stress: agterdogtig and derivitives agter (oor %ax2t@r_ // move default stress: agteroor/-buig/-druk/-val, etc. &) agtig 'ax2t@x2 // this string almost always carries stress on a + ara (bi %arA: // fix 1st a sound and stress: Arabië/Arabies/-e + ara (bier %ar%a // Stress and a sounds: Arabier/-e + C) are (CA A:r@ // e sound: amptenaredom/blaredak/garebiltong/haredos/jarelange a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria + a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties @C) as (_ as // shorten final a of words ending in -as: rigtingvas/jonkmanskas, etc. C) asie 'A:si + Cst) asie A:si // restore default stress: brandweer/spoorwegstasie and similar + AAst) asie A:si // default stress: polisie/radio/televisie/uitsaaistasie, etc. a (CAA %a d) a (goggen %a //saterdagoggend and friends + ah (C A: // lengthen a and drop h: Ahmed/Dahl/Mahler, etc. a (Cie A: // apies/middagslapie a (Cy %a a (CA A: @@ -102,6 +109,7 @@ afrikaner %afr%ikA:n@r // move stress to end: Afrikaner and compounds afrika A:frika //Stress and 1st a sound: Afrika and compounds: Afrikatale/-state... af (skuw %af // move default stress: afskuwelik and derivitives vs afsku + afsonderl %afsOn@rl // stress, avoid af_ prefix and -lik suffix: afsonderlik/-e/-heid afstootl %afsto@tl // move default stress: afstootlik/-e/-heid/-ste af (sydig %af // fix stress: afsydig/-e/-heid afwesig %afve@s@x2 // to steer clear of pre- and suffixes @@ -141,6 +149,8 @@ amandel am'and@l // amandel/s/-poeding/-tert... ambu (l %amb%y // fix stress: ambulans and compounds/ambulant, etc. _) am (A %am // amorfe/amok/amortisasie/amalgamasie + ambass (ade %amb%as // move default stress: ambassade and compounds + ambassa (deu %amb%as%a // move default stress: ambassadeur and compounds amer (ik %ame@r // Amerika/Amerikaner _) am (nA %am // amnestie/amnesie _) amper amp@r // fix e sound in words like: amperbroekie/amperse/ampertjies @@ -148,7 +158,7 @@ amus (e %am%ys // shorten a and move stress anoniem anun'im _) ar (gi %ar // argief and compounds/argiewe - _) ar (giC %ar% // argitek and compounds + argitek %arx2%itEk // argitek and compounds/argitektuur _) arkad %arkA:d // arkade/arkadia _) armes ar?m@s // fix e sound: armes/armesorg _) ar (om %ar // aroma/aromaties @@ -161,10 +171,15 @@ artille (rie %art@l@ // stress and vowel sounds: artillerie and compounds asem A:s@m // asemgehaal/asemhaling/asemteug/ontwaseming _) as (ke %as // move default stress: askeet/askete/asketies/askese + a (spersie %a // move default stress: aspersie and compounds assist %as@st // assistent/e/assisteer assiste (_ %as'Ist@ // rassiste stress and last e sound + atel (jee %at@L // fix vowel sounds and stress: ateljee and compounds + C) athe (rina %at@ // Catherina/Katherina atten (C at'En // attent/heid/onattent/attensies + a (tomA %a // fix stress and a sound: atome/(sub)atomies @) ator (K 'A:tOr // katalisator/diktatorskap and many similar + @) atories %at'o@ris // stress on -ories: diktatories/organisatories/resperatories, etc. augustus Ox2'WstWs avokado %af%ukA:du // stress and o sounds avokade %af%ukA:d@ // variant form of avokado @@ -176,6 +191,7 @@ .group aa aa A: aai AI + aan (bid %A:n // move default stress: aanbid/-ding aangee (+ 'A:nx2e@ // see rule: _) aange (@P5 A:nx@ _) aange (@P5 'A:nx2@ // added stress mark to ensure stress on aan aandoenlik %A:ndunl@k // move default stress: aandoenlik and derivitives, vs. aandoen @@ -191,11 +207,13 @@ aan (sien %A:n // stress on 2nd slb aan (sien_N 'A:n // stress on 1st slb aan (skou A:n' // stress aanskou/lik - aansteekl %A:nste@kl // move default stress: aansteeklik/-e, vs. aansteek + aan (spreek %A:n // stress on 2nd slb.: aanspreeklik + aan (spreek_N A:n // stress on 1st slb.: aanspreek aanste (llerig A:nst'& // aanstellerig/-e|-heid aansterk 'A:nst&rk // aansterk/ing - aan (stoot %A:n // stress on 2nd slb.: aanstootlik - aan (stoot_N A:n // stress on 1st slb.: aanstoot + aan (stAAC %A:n // stress on 2nd slb.: aanstootlik/aansteeklik + aan (stAAC_N A:n // stress on 1st slb.: aanstoot/aansteek + aan (tasb %A:n // stress: (on)aantasbaar/-bare aantreklik %A:ntr&kl@k // move default stress: aantreklik/-heid aan (trek_N A:n // restore default stress: aantrek aan (vaar %A:n // aanvaar/de/baar @@ -216,9 +234,11 @@ ange (lier %aN@ // angelier/-e and compounds an (gina %aN // move default stress, fix n/g sounds: angina angl (A %A~Nx2l% // anglikaans/anglisisme/anglofiel + angleer aNle@r // hangleer/slangleer and compounds angola A~Nx2'o@la //Angola, Angolabos etc. angol (e %A~Nx2%ul //Angolese etc. C) anette (_ %anEt // Janette/Sanette + ansjovi anS''o@f@ // fix stress and o sound: ansjovis/-se/-smeer an (tjie aIN _) ana ,ana // words starting with ana starts destressed // The following are experimental nasalisation of ans @@ -235,12 +255,14 @@ b (b b (_N p b (eentjie++ b // exception to "bee" rule: beentjie/-s and compounds + bagasie b@x2A:si // shorten 1st a: bagasie and compounds @) baarlik b'A:rl@k // move default stress: wonderbaarlik/-e/-heid/-ste band (A bant // fix t sound: bandomslag/-ontwerp/-opname band (e band // fix d sound: bandeverkoper moterbande etc. @) ba (ren b'A: // onrusbarend/opsienbarend and derivitives ba (ret b%a // move default stress and shorten a sound: baret/-te ba (riton ba // shorten a sound: bariton and compounds + ba (rok b%a // fix stress and a sound: barok and compounds basi (s bA:s@ // basis and compounds batal (jon b%at%al // shorten 1st a sound, moved stress: bataljon and compounds bobbe (j b%Ob@ //fix stress for bobbejaan and friends @@ -280,9 +302,10 @@ batte (ry b%at@ // move default stress: battery/-e and compounds: batterysuur... bibli (oC b@bl%i:% // biblioteek and compounds/biblioteke/bibliofiel/bibliografie... - bidd b'Id // biddag/aanbidding + bidd bId // biddag/aanbidding bid bIt_ // biduur/aanbid binne bIn@ // binnekom/binnelandse + bisan (tyn b%is%an // move default stress: Bisantyns/-e bi (sar b%i // move default stress: bisar/-re bla (tant bl%a // shorten 1st a and move default stress: blatant/-e/-heid @) ble (_ _^_EN // words ending in ble is English @@ -302,11 +325,14 @@ bo (tanie b%o@ // stress on 2nd slb.: botanies/-e bota (nie_N b%o@t%a // stress on 3rd slb.: botanie _) bowe b''o@v@ // fix e sound in compounds: boweaards/bowemaans/bowetoon + bru (ta br%y // move default stress: brutaal/brutale/brutaliteit buiten (ge b'Yyt@n // buitengewoon/s/buitengewone/buitengemeen buiten (ste bYyt@n // restore default stress: buitenste/-s buiten (t bYyt@n // restore default stress: buitentoe/buitentyds buiten bYyt@n' // buitendien/buitensporig buite b'Yyt@ // buitelandse/buitestander/buitew�eld + bul (ga b%ul // fix stress and u sound: Bulgaarse/Bulgare + bulle (tin b%ul@ // fix stress and u sound: bulletin and compounds bybel beIb@l // to correct pronunc. of e in compounds byder (C@ b%eId@r // byderhand/-s/byderwets by (een b%eI_ // move default stress: byeen/byeenkoms/-te, etc. @@ -338,6 +364,7 @@ bed (t bE // fix e and d sounds: bedtafeltjie/bedtyd @) bed (_ bEt // bruidsbed/dubbelbed; many compounds ending in bed be (de_ be@ // bede/gebede + bedes (_ be@d@s // bedes/seënbedes, etc. bedel be@d@l // bedel/gebedel/bedelaar bedeling b@de@l@N //bedeling and compounds bedev be@d@f // bedevaart and compounds @@ -352,6 +379,7 @@ bell (+ b&l // inbeller/oorbelle/seepbelle _) bel (C b&l // Belgies/belhamel bere (_ be@r@ //tediebere pandabere etc. + _) ber (t b&r // fix e sound: Bert/Berta/Bertie/Bertus beste (_ bEst@ // fix e sound: beste/allerbeste/naasbeste/-s be (weging b@ // draaibeweging/swaaibeweging bewende be@v@nd@ // first e pronounced long @@ -372,6 +400,7 @@ beu (C bY@ // beur/beuke/beul besig be@s@x2 + besig (tig b@sIx2 // fix stress and e sound: besigtig/-ing bessie bEsi berg b&rx2 berge b&rg@ @@ -391,6 +420,7 @@ ch x2 _) ch x2 chalet S%aleI // chalet/-s/bergchalet + chau (C S%@U // chauffeer/chauffeur/-s/chauvinis/-me/-ties ch (ol k //cholera, cholestrol etc. ch (l k // chloor and compounds ch (ro k @@ -421,6 +451,7 @@ dekade (s dEk'A:d@ dekant (_ d@kant //try fix suidekant _) deli (ka d%El%i // delikaat/delikate + delika (tess d%El%ik%a // move default stress: delikatesse/-s @) dend (er d@nd // beduidender/behoudender @) dend (ste d@nt // beduidendste/behoudendste @@ -445,8 +476,10 @@ diaken d%iA:k@n // diaken and compounds dia (lo d%i_%a // move default stress: dialoog/dialoë and compounds dia (m d%i%a // diamant and compounds + digi (ta d%ix2%i // move default stress: digitaal/digitale di (gK dI // force default stress: GEDIG/-TE/digbundel/digvorm, etc. dilemma d@lEma // dilemma and compounds + di (mensie d@ // fix stress and 1st i sound: (ontwikkelings)dimensie, etc. di (namie d%i // move default stress: dinamies/-e dina (miet d%in%a // stress to 3rd slb.: dinamiet and compounds direk d%irEk // direk/-sie/-te/-theid/indirek... @@ -477,10 +510,11 @@ di (ssi d@ // move default stress: dissipel/-s dissi (pl d@s@ // fix stress: dissipline/-s and compounds distri (bu d@str@ // distribusie/distribueer and compounds - dis (trik d@s // stress: distrik/-te and compounds + dis (t d@s // stress: distrik/-te and compounds/distansie/distinksie/distorsie/distraksie + distel dIst@l // restore default stress: distel and compounds _) dode d'o@d@ //dodelik dodemars etc. doel (tref d%ul // move default stress: doeltreffend/-e/-ste - doktor (_ dOkt@r // make last o schwa + doktor (K dOkt@r // make 2nd o schwa: doktor/doktorsgraad doku dOky dominee (_ d'o@m@ni domin (A dOmin' // domineer/dominering @@ -517,7 +551,10 @@ e (C E CAC) e (CC @ // fix e sound: nalatenskap/wapenstilstand CAC) e (C% E // beesfilette/nougesette/onderbesette/voortgesette + kod) e (C @ // fix e sound: kodenommer/kodetaal/kodewoord, etc. + Cond) e (CA @ // blondekop/geskondenes/hondebelasting and many compounds/sondebok/sondelas CAC) e (rkK & // fix e sound: deurgewerk; exception to: CAC) e (CC + Cien) e (rC@ @ // fix e sound: opsienersamp/tienerstatus and many similar compounds @p) e (rtjie @ // fix e sound: helpertjies/wegkruipertjie C) e (mm++ E // geelkoperemmer/wateremmer CAnn) e (CA @ // banneling/sinnebeeld/spinnekop/-rak @@ -525,6 +562,7 @@ @C) e (bo @ // compounds with boek/boer/boog/boom/bol/bord/borsel/bos/ grondbonebotter/kamdebo... @C) e (bu @ // briewebus/ereburger/novellebundel/urinebuis/woedebui @C) e (by @ // fix e sound: statebybel/-s + _) edel e@d@l // fix 2nd e sound: edelgas/-steen/-stene/-metaal and many similar _) epi (C %Ep%i //episode and others halw) e (K @ // fix e sound: halwemaan/halwerweë/halwes liefd) e (C @ // fix e in compounds starting with liefde: -blyk/-daad/-diens/-gawe/-groete/-werk, etc. @@ -535,9 +573,11 @@ mp) e (lde_ @ // fix e sound: gemompelde/oorrompelde/verskrompelde and similar @C) e (lk_ & // fix e sound: many compounds ending in kelk/melk @C) e (lke_ & // fix e sound: many compounds ending in -elke: blomkelke, etc. - uiC) e (l @ // fix e sound in wrds like: buideldier/druipeling/skuifelpassie/struikelend/tuimelaar + uiC) e (K @ // fix e sound in wrds like: bruidegom/druipeling/duinebesie/duisendpoot/kruisement... + yd) e (l @ //ydel e sound in compounds verydeling ng) e (nd @ // fix e sound: dringends/dwingends/deurdringender enge (l EN@ // Engeland/Engelsman/Engelssprekend/hengelklub/mengeldrankie/-moes + ensiklope %Ens%ikl%up@ // fix stress and vowel sounds: ensiklopedie and compounds C) e (pan @ //fix e sound: instrumentepaneel/kolepan/liefdepand @k) e (tt@+ E // menseketting/etikette sp) e (lonk @ // spelonk/rowerspelonk/spelonkagtig etc. @@ -557,7 +597,6 @@ toek) e (n E // but: toekenning and compounds C) e (rj @' // fieterjasies/kerjakker/kaperjolle aw) e (C@ @ // aweregs/dawerend and compounds of dawer/drawertjie/hawer and compounds/hawe and comp. - uim) e (C @ // pruimedant/sluimeraar/sluimerend e (CA e@ CCan) e (CA @ // swanepoel/swanesang/tranedal XCier) e (@ @ // dieresorg/-lewe..., many compounds/PIEREWAAI/-ER @@ -574,6 +613,7 @@ @d) e (kr @ // fix e sound: vriendekring/-e e (kono@ %E // 1st e: ekonome/ekonomie/ekonomies/ekonoom e (mosi %i // emosie/emosioneel, etc. + eun) e (rC @ // fix e sound: ondersteunerskorps/sigeunermusiek and similar hal) e (rC@ @ // uithalerperd/-skut/-speler and similar C) e (ndh =@ //asemrowendheid/beduidendheid/doeltreffendheid/dringendheid/voortvarendheid... u) eel 'e@l // words ending in ueel take stress on last slb @@ -582,16 +622,22 @@ gel) eer e@r // words containing geleer take default stress: regsgeleerde @k) eer e@r // words containing keer take default stress, except for: ik) eer 'e@r // abdikeer/kommunikeer, etc. + Cm) eer e@r // words containing meer preceded by consonant take default stress: bergmeer/strandmeer, etc. + rm) eer 'e@r // but not words like: alarmeer/gereformeerd/transformeer sf) eer e@r // sfeer at end of compounds does not take stress: atmosfeer, etc. sk) eer e@r // words kontaining skeer take default stress: af/glad/kort/raakgeskeer + sl) eer e@r // words containing sleer take default stress: seemsleer/volstruisleer Cs) eer e@r // words containing seer (meaning pain) take default stress + ss) eer 'e@r // but many words cont. sseer take stress: adresseer, etc. + Cv) eer e@r // stress: (hoender/volstruisveer/dryfveer w) eer e@r // stress may vary in words containing weer: lugafweer/donderweer u) eer 'e@r // aktueer/konstrueer/salueer, etc. effek %e@fEk // move default stress and fix e sound: effek/-te/-tief eienaardig %eI@nA:rd@x2 // move default stress: eienaardig/-ste @) ein (dig 'eIn // nimmereindige/nimmereindigend + eind (eks eInt_ // fix d sound and make short pause: eindeksamen/-s and compounds sirk) e (l @ // compounds: sirkelgang/sirkelvormig - nk) e (lb @ // onwankelbaar/skenkelbeen/sprinkelbesproeiing + nk) e (lC @ // onwankelbaar/skenkelbeen/sprinkelbesproeiing/kinkeldraai/kronkelpad/seunsenkelspel u) ele (+ 'e@l@ // words ending in uele take stress on penultimate slb _) erde (C &rd@ // fix connecting e in compounds: erdekruik/-ware and similar _) ere e@r@ // ereamp/erediens/ererol/erevoorsitter @@ -600,8 +646,9 @@ C) ersyds @rseIts // fix d and e sounds: enersyds/wedersyds, etc. ele (gant ,e@l@ // elegant/onelegant C) e (k & // + C) e (kk@+ & // fix e sound: luilekker/-lewe C) e (kA+ e@ - C) e (ks E + C) e (ks+ E C) e (kt E ekstase Ekst'A:s@ // stress ekstase/s wink) e (l @ // winkelvensters/-sentrum/-personeel/winkelier/winkelhaak @@ -621,7 +668,7 @@ ee e@ eetjie e@ici // tweetjies/hanetreetjie eedjie e@ici // kleedjie/tafelkleedjie/altaarkleedjie - eeu iu + eeu iu: ei eI ey eI eu Y@ @@ -633,13 +680,14 @@ m) e (nis @ // geheimenis(vol)/verdoemenis C) e (toe_ @ // binnetoe/buitetoe e (gK & - _) e (gal %e@ // stress: egalig/-e + _) ega (l %e@x2A: // stress: egalig/-e _) e (gipt %e@ // move default stress: Egipte/Egiptenaar/Egipties C) ektomie 'Ektumi // histerektomie/vasektomie &) elik (ing @l@k // verduideliking/s/vergoddeliking/verstedeliking app) elkoos @lk'o@s // stress shifts to koos appelkooskonfeit &) e (l_ @ + eiers) e (l & // fix e sound: eiersel/-le/-letjie/-s @sk) e (l & // kwyt(ge)skeld(ing) Cdd) e (le_ e@ Csd) e (le_ e@ @@ -659,7 +707,6 @@ blind) e (ling @ ind) e (ling e@ nd) e (ling @ - uiw) e (l@ @ // duiwelskind/suiwelprodukte and similar compounds _) eike 'eIk@ // many compounds with eike &) e (lC_ @ @m) e (ld & // aanmeld/voormeld @@ -685,7 +732,7 @@ _) ellende e@l'End@ _) ellendig e@l'End@x2 emalje %e@malj@ // fix stress and e sounds: emalje and compounds - enig (ma %EnIx2 // stress and e sound: enigma/-ties/-e + _) enig (ma %EnIx2 // stress and e sound: enigma/-ties/-e lei) er (s @r // leierskap/leiersgroep/leierskursus/leiersposisie... in) er (A 'e@r // kombinering/verkleinering... ff) er (@ @r // keffertjie/koffersleutel/offerande/opoffering @@ -710,7 +757,7 @@ &) erei (_ @reI e (r & Ank) e (r@ @ // ankerpaal/kankerlyer/donkerbril - uik) e (rC @ // fix e sound: many compounds with duiker/gebruiker/suiker + rp) e (rCC @ // fix e sound: ontwerpersbaadjie/purperkleurig, etc. lew) e (ns @ &d) e (r@ @ // not initial or final syllable @@ -721,6 +768,7 @@ een (drag@ %e@n // eendrag has stress on 1st slb, but eendragtig and similar on 2nd eenge 'e@nx2@ _) een (stemm %e@n // move default stress: eenstemmig/-e/-heid + _) een (sy %e@n // move default stress: eensydig/-e/-heid _) een (ton %e@n // move default stress: eentonig een (Cjie e@:iN // eendjie/Leentjie/steentjies _) een (voud@ %e@n // stress on 2nd slb: eenvoudig, but on 1st: eenvoud @@ -756,10 +804,12 @@ C) ewy (C @veI // alewyn/compounds of brandewyn/sekondewyser _op) e (n @ C) ensie (_ 'Ensi // many words ending in stressed ensie(s) + m) ensie (K e~ns%i // words ending in -mensie/-s mostly take default stress: ontwikkelingsdimensies C) ensies 'Ensis // forensiese @) enswaar (dig @nsv'A:r // noemenswaardige/bejammerenswaardig @C) ent (K 'Ent // orent/student/presidentsrede en) ent (_ Ent // restore default stress: koppenent/voetenent + @s) ent (rA Ent // winkelsentrum/studentesentrum, etc. @C) ent (e_ 'Ent // plurals of some of the above C) er (tyd @r // tegelykertyd/kindertyd/indertyd _) etens 'e@t@ns // etenstyd/klok/tafel/uur @@ -772,7 +822,7 @@ r) e (digering E som) e (r @ //someraand and others. _ew) e (++ @ //ewewig, ewekansig etc. - C) e (sk_ 'E // grotesk/burlesk/humoresk + C) e (sk_++ 'E // grotesk/humoresk _w) e (skus E // fix stress and e sound: (suid)weskus and compounds C) e (ske_ 'E // burleske/groteske C) e (sk@ @ // hondeskou/modeskou/erdeskottel/geleideskip/hardeskyf @@ -795,7 +845,6 @@ _mens) e @ //mense at start of compounds _mens) e (k @ //force correct behaviour before k @kom) e (ns_ @ //fix words ending in komens - suid) e @ //suidekant, suidewind etc. @C) e (wa_ @ // goederewa/kolewa/ossewa/troepewa Ab) e (wa @ //bewaking/bewaring in compounds polisiebewaking @C) e (waen @ // plurals and diminutives of some of the above @@ -814,7 +863,6 @@ interpr) e (teer @' //stress and e sound interpreteer _) e (ks %E //move default stress in words starting with eks _C) e (on_ 'i //Leon, Deon etc. - uik) e (rs @ //fix e in words containing uikers CoeC) e (C @ //fix e in boetedoening, boedelbelasting and many others orr) e (l @ //fix e in borrel, orrel, korrel in compounds intell) e (k %E //intellek, and friends @@ -828,11 +876,12 @@ werk) e (rs @ //fix werkers in compounds werkershuis etc. Ceuw) e (l @ //gesneuwelde heuwelhang etc. v) e (nno @ //vennoot and friends + _) euro (pe %Y@r%o@ // stress: Europees/Europese + _) 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. m) exik Eks%ik //mexiko mexikaans etc. t) exas Eks@s //Texaskoors and may be others - yd) e (l @ //ydel e sound in compounds verydeling .group f @@ -850,9 +899,11 @@ fessor fEs@r // fix last o sound: professor and compounds like universiteitsprofessor fessor (a@ f%Es@r // stress: professoraal/-ale/-aat/-ate fessore (_ f@so@r@ // stress: plural: professore and compounds + fi (sant f%i // move default stress: fisant/-e and compounds fi (siek f@ // correct 1st i sound and move default stress: filistyn f@l@st'eIn // filistyn/e _) fi (na@ f%i // finaal/finale/finansies + fla (mi fl%a // move default stress: flamink/-e and compounds fla (grant fl%a // shorten 1st a and move default stress: flagrant/-e flambo (jant fl%amb%u // move default stress: flambojant/-e/-heid flo (re fl%u // move default stress, correct o sound: florerend @@ -861,6 +912,7 @@ @) fonie fun'i // kakofonie/simfonieorkes/telefonie fon (tein f%On // move default stress: fontein/fonteinwater, etc. _) for (C f%Or // formeel/formele/forseer/fortuin + fore (l f%ur& // fix stress and e sound: forel/-e and compounds formi (da f%Orm%i // move default stress: formidabel/-e _) for (se_ f'Or // stress back to 1st slb; se rule: _) for (C fos (fa f%Os // move default stress: fosfaat/fosfate @@ -878,8 +930,11 @@ g x2 g (g gala (si x2%alA: // move default stress: Galasiër/-s + gala (_ gA:l%a // fix g sound: gala/swemgala/gala-aand ga (lAC x2%a // galant/galery/galon/galop gal (joen x2%al // move default stress: galjoen/-e and compounds + gar (n x2%ar // move default stress: garnaal/garnale/garneer/garnering and compounds + @C) garye x2%ar'eI@ // Fix stress: Bulgarye/Hongarye _) gh g gh (_ k @) gheid x2eIt // traagheid/leegheid/droogheid/stugheid @@ -902,6 +957,9 @@ _) graadse (s x2r%A:tsE // fix stress and e sound: graadsesse/-sessies/-sesklas _) graad (vyf x2r%A:t // move default stress: graadvyfs/graadvyfklas, etc. gra (niet x2r%a // move default stress and fix a sound: graniet and compounds + gra (sieu x2r%a // fix stress and shorten a sound: grasieus/-e + _) gras (A x2ras_ // fix stress and a sound: graseter/grasoppervlakte/grasuie + gra (sie x2rA: // but restore default stress and long a: grasie _) gri (mA x2r@ // grimas/grimeer/-middel and other compounds/grimering grotere x2ro@t@r@ // fix vowel sounds and stress: grotere/-s guerrilla g@r'Ila @@ -910,6 +968,7 @@ .group ge ge x2@ C) ge (_ g@ + _) gebede x2@be@d@ // fix stress and vowel sounds: gebedeboek/-e/-tafel/-s gems x2Ems // fix e sound: (baster)gemsbok/-bul/-ooi, etc. gene (_ x2e@n@ // gene/diegene gene (rA x2@n@ // generaal/generasie/-s/genereer @@ -987,7 +1046,6 @@ hard (heid hart // restore default stress: (ge)hardheid hard (lo hart // restore default stress: hardloop/hardloper hard (ste hart // restore default stress: (ge)hardste/-s - _) hare (C hA:r@ // fix e sound: haredos/haregroei/harekam/harewasmiddel @) hartig h'art@x2 // barmhartig/lighartigheid/lighartig... hart (stogte_ h%art // move default stress: hartstogtelik hart (stogte_N hart // restore default stress: hartstogte @@ -997,7 +1055,7 @@ hekse (C hEks@ // fix 2nd e sound in compounds starting with hekse: heksebrousel, etc. _) hele (K he@l@ // hele/helend/heler heli (kop h%&l%i // move default stress: helikopter and compounds - hemde hEmd@ // naghemde/onderhemde/frokkiehemde + hem (C hEm // naghemde/onderhemde/frokkiehemde/syhemp hemel he@m@l // hemelblou/hemelhoog and many compounds with hemel _) her (@P3 h%&r her (berg h&r // restore default stress: herberg/-e @@ -1006,6 +1064,7 @@ her (eK he@r // here/herehuis/heretjie her (eni h%&r? // fix e sound and stress: herenig her (eva h&r? // fix e sound: herevalueer... + herfs h&rfs // restore default stress: herfsskaduwees/herfsverhaal, etc. hersen h&rs@n // restore default stress and fix 2nd e sound: hersenskim/-me/-mig/hersenskudding hertog (in h%&rt%Ox2 // fix stress and o sound: (aarts/groot)hertogin/-ne and similar hertzog h&rtsOx2 // fix stress and o sound: hertzog/-isme/-koekies @@ -1024,6 +1083,8 @@ histor h%isto@r histri (on h%istr%i // 1st i sound and stress: histrionies/-e/histrionisme/-isties hitler hitl@r // Hitler in compounds like Hitlersnorretjie + hong (a h%ONx2 // Hongaar/Hongare/Hongaarse + ho (nneur h%O // move default stress: honneurs/-graad, etc. hoog (dra h%o@x2 // stress: hoogdrawend and derivitives hor (los h%Or // horlosie and compounds hor (mo h%Or // move default stress: hormoon/hormone and compounds @@ -1091,6 +1152,7 @@ _em) i (r @ ië e@:@- // i followed by "deelteken e" iën i'En //i deelteken e n + or) iën i;En // default stress: (beroeps)georiënteerd, etc. iëteit %i@t'eIt // fix stress: (imk)piëteit/variëteit iee (C i'e@ // distansieer/finansieer/finansieel/prieel @@ -1148,7 +1210,7 @@ en) is (K @s // stress: beduidenis/bekentenis/gevangenis, etc. kris) is @s // fix stress: krisis and compounds pol) is (_ @s // polis and compounds - ar) is (K =@s // but sekretaris/argivaris/kommissaris/inventarislys/sekretarisvoël + @Car) is (K =@s // but sekretaris/argivaris/kommissaris/inventarislys/sekretarisvoël litar) is 'Is // but militaris vuil) is @s // stress: vuilis/tuinvuilis AC) iste (_ 'Ist@ // aktiviste/humaniste/kommuniste/pianiste/soliste/violiste @@ -1160,6 +1222,7 @@ @n) iek (e_ 'ik // unieke/compounds @kn) iek (_ ik // but piekniek @t) iek (_ 'ik // antiek/etiek/taktiek + krit) iek ik // restore default stress where -kritiek last in compounds: kunskritiek, etc. @t) iek (e_ 'ik // antieke... @tr) iek (_ 'ik // eksentriek/metriek @tr) iek (e_ 'ik // eksentrieke/metrieke @@ -1172,9 +1235,11 @@ C) isie 'isi // ambisie/ammunisie/komposisie/ammunisiekis C) isieus isi'Y@s // ambisieus/suspisieuse C) isk (_ 'Isk // asterisk/tamarisk + _) islam islam // fix i sound: Islam/Islamiseer/Islamisme C) ispel Isp@l // lispeling/kwispeling/kwispelstert @) isme (_ 'Ism@ // isme always takes stress w) it (A It // fix i sound: eiwitafskeiding/witagtig/kwiteer/grondserwituut + itali (a %it%al%i // move default stress: Italianer/-s and compounds item itEm // fix e sound in item and compounds @) iteit it'eIt // stress on iteit endings @C) itis (_ 'it@s // stress: many diseases ending in -itis @@ -1197,7 +1262,7 @@ jellie dZ'Eli jesus ji:sWs // Jesus also used as part of compounds: Jesusbaard/Jesusklong joer (na j%ur // move default stress: joernaal/joernale/ compounds: joernaalinskrywing, etc. - johan juh'an + joha (n j%uha // Johan/Johanna/Johannie johannes juh'an@s jonge jON@ // jongeling/jongeres jong (etjie jON // fix e sound: jongetjie/-s @@ -1220,6 +1285,8 @@ kelende (_ k@l@nd@ kkelend (_ k@l@nt kkelende (_ k@l@nd@ + kelner k&ln@r // fix 2nd e sound in compounds like kelnerbaadjie, etc. + kelner (in k%&ln@r // move default stress: kelnerin/-ne/-netjie kera (miek k%&r%a // move default stress: keramiek and compounds n) kerend (_ k@r@nt //hunkerend and others n) kerende (_ k@r@nd@ //hunkerende and others @@ -1239,6 +1306,7 @@ @) keurig k'Y@r@x2 // kieskeurig/noukeurig/(on)willekeurig and derivitives _) ki (ta k%i // move default stress: kitaar and compounds klere kle@r@ + kli (maat kl@ // move default stress: klimaat and compounds kli (niek kl@ // fix stress and i sound: kliniek and compounds kklere =kl'e@r@ knip (A knIp? // knipogie/geknipoog/ @@ -1248,7 +1316,7 @@ kri (oel kr%i // move default stress: krioel and derivitives kristal kr@stal // move default stress: kristal and many compounds krit (A kr@t // kriteria/-ium/kritiseer and derivitives - krit (ies kr'it //krities and compounds + krit (ies kr'it //krities and compounds krieket krik@t //krieket e sound and stress krieketw krik@tv //krieket followed by w in compounds always v @@ -1260,7 +1328,9 @@ @) kundi (g k'Wnd@ // wiskundige/onoordeelkundigheid and many similar i) kus k'Ws // chemikus/historikus/politikus, etc. kwali (C@ kw%al%i // kwaliteit/kwalifiseer + kwaran (t kw%ar@n // kwarantyn and compounds _) kwar (tA kw%ar // move default stress: kwartaal/kwartier + kwartel kwart@l_ // restore default stress: kwartel/-eier/-s and similar kwi (tans kw@ // move default stress: kwitansie and compounds @@ -1273,11 +1343,13 @@ kabinet k%ab%inEt // kabinet/drankkabinet/kabinetsvergadering ka (dawer k%a // move default stress: kadawer and compounds kade (t k%adE // shorten 1st a and move default stress: kadet and compounds + kafe (te k%af@ // fix stress and vowel sounds: kafeteria and compounds kake (C kA:k@ // kakebeen/skakelaar/skakelbord/skakelfunksie kalahari kalah'A:ri // stress: Kalahari/-sand/-woestyn ka (lAnC k%a // kalender and compounds/kalant/kalander and compounds kalender k%alEnd@r // fix stress and vowel sounds: kalender/-s and compounds kali (b k%ali // kaliber/kalibrasie/kalibreer + kal (koen k%al // move default stress: kalkoen and compounds kalmeer kalm'e@r // kalmeer/gekalmeer kalmer (A kalm'e@r // kalmerend/e/kalmering kamer kA:m@r // compounds: kamerindeling/kamerorkes, etc. @@ -1288,9 +1360,11 @@ kandi (dA k%an%i // kandidaat/kandidate and compounds @A) kaner (_ k'A:n@r // Afrikaner/Amerikaner _) kan (to@ k%an move default stress: kantoor/kantore and compounds + kant (onder kant_ // kantonderklere/-onderrok, etc. ka (pabel k%a // move default stress and shorten 1st a sound: kapabel/-e kape (l k%ap& // move default stress and fix e sound: kapel and compounds kape (la@ k%ap@ // fix e sound: kapelaan/kapelane and compounds + kapi (ta k%ap%i // fix stress and 1st a sound: kapitaal and compounds/kapitalis/-me/-ties ka (pok k%a // move default stress and shorten a: kapok and compounds kap (tein k%ap // kaptein/kapteinskap/skeepskaptein kapsule k%apsyl@ // stress and e sound: kapsule/-fabriek/-vorm, etc. @@ -1312,9 +1386,10 @@ .group ko + kode (ring k%o@de@ // fix stress and vowel sounds: kodering and compounds ko (kon k%u // fix 1st o sound and move default stress: kokon and compounds kommando k%umandu // move stress, fix o sounds: kommando and compounds - kommissie k%umis%i //kommissie alone and in compounds + kommissie k%umis%i //kommissie alone and in compounds ko (pie@ k%u // kopiereg/kopie koe (rA k%u // koerier/koerasie/koerant and compounds korrek k%urEk //korrek and derivitives @@ -1336,6 +1411,7 @@ kommen (ta k%Om@n // kommentaar/kommentator _) ko (mmo k%u // move default stress and fix 1st o sound: kommosie/-s/kommoditeit/-e kompan (jie k%Omp%an // move default stress: kompanjie/-stuin + konse (kwen k%Ons@ // fix e sound: konsekwensies/konsekwent konserv k%Ons@rv // fix stress and v sound: konservasie/konservatorium and compounds kom (plA k%Om // komplot/kompleet _) kon (C k%On @@ -1348,6 +1424,8 @@ konnekteer kOnEkt'e@r // (ge)konnekteer konnek k%unEk // fix stress and vowel sounds: konneksie/-s and compounds konkel kONk@l // restore default stress and fix [N] sound: konkelaar/konkelwerk, etc. + konsen (tr k%Ons@n // fix stress and e sound: konsentreer/konsentrerend/konsentrasie + konsen (trie k%OnsEn // fix stress and e sound: konsentries/-e konside (rA k%Ons@d@ // fix vowel sounds: konsiderasie/konsidereer konsist k%Ons@st // konsistorie and compounds/konsistensie konsul (A k%Ons%Wl // konsulaat/konsulate/konsulêr @@ -1373,6 +1451,7 @@ _) la (kon l%a // lakoniek/lakonies/lakonisme lam (len l%am // move default stress: lamlendeling/lamlendig/-e/-heid _) lang (d l%aN // langdradig/langdurig and their derivitivs + _) lange (CA laN@ // e sound: langelaas/Langeberge lang (werp l%aN // move default stress: langwerpig/-e/-heid lank (moe l%aNk // move default stress: lankmoedig/-e/-heid _) lapel l%ap'&l //lapelwapen etc. @@ -1411,6 +1490,7 @@ linker lINk@r // blinkertjies/many compounds with linker and klinker lino (leum l@no@ // fix stress and i sound: linoleum and compounds, e.g. linoleumvloere @) ll (_N _^_EN // Words ending in -ll are English + lo (kalA l%u // fix stress and o sound: lokale/ontvangslokale, etc. _) losge (@P5 l'Osx2@ _) losies l%us'is //losies at start always means "to stay" &) lm (K l@-m @@ -1443,6 +1523,7 @@ man (da m%an //mandaat and compounds mane (wale m%an@ // fix stress and shorten a sound: manewale/-s and compounds manier m@ni:r //manier and compounds + manipu m%an%ip%y // fix stress and a sound: manipuleer/manipulering/manipulasie manu (sk ,many _) ma (rA m%a // short, unstressed a: Marietjie/Marina/Marinda/Marita/Maree/marog marine m%arin@ // marine and compounds @@ -1453,8 +1534,10 @@ mar (sje m%ar // move default stress: marsjeer and derivitives mas (biek m%as // move default stress: masbieker/-s masjien m@Sin // masjien and many compounds + masker mask@r // fix e sound: maskerafdruk/-agtig/ontmaskering maso (chis m%as%u // fix vowel sounds: masochis/-te/-ties/-e/-isme 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 maties m'A:tis //tamaties, outomaties etc. ma (tr m%a // matriek and many compounds with matriek/MATRAS/MATROOS/MATROSE @) matig m'A:t@x2 // doelmatig/gelykmatig/regmatig; matig takes stress in compounds @@ -1491,7 +1574,7 @@ mis (tiek m@s mis (troos m@s // mistroostig mis (vorm m@s // stress on 2nd slb - mode m''o@d@ // fix e sound: modeontwerper/-maker, etc. + _) mode m''o@d@ // fix e sound: modeontwerper/-maker, etc. modee m@d'e@ //akkommodeer mode (l m%o@d& // fix stress and e sound: model/-le and compounds mode (lle@ m%Od@ // fix stress and e sound: modelleer/modellering @@ -1503,6 +1586,8 @@ moles (tA mOl@s' // molesteer/der moles (_ m%ulEs // fix stress and e sound: moles/huismoles moles (te_ m%ulEs // fix stress and e sound: moleste and compounds + mo (narg m%o@ // move default stress: monarg/monargies + monargie (_N m%o@n%arx2i // move stress to end: monargie monder (A m%Onde@r // move default stress and lengthen 1st e sound monu (ment m%On%y // monument/e/vrouemonument/monumenteel _) mor (C@ m%Or // move default stress: morbied/morfien/mortier @@ -1513,7 +1598,7 @@ musiek m%Wsik musi (C mysi' // musikant/musikus/musici muske (tier m%Wsk@ // move default stress: musketier/-s - môre (@ mO:r@' // move default stress: môreaand/-middag/-oggend + môre (@ mO:r@ // HAT: all compounds starting with môre- take stress on 1st slb. .group me medalje m@dalj@ // medalje/bronsmedalje/medaljewenner @@ -1529,6 +1614,8 @@ meganies m@x2'A:nis _) meege (@P5 m'e@x2@ me (juf m@ // move default stress and shorten e sound + melancholie (_N m%El%aNk%o@li // fix stress and 1st e sound: melankolie + melanch m%El%aNk // stress and 1st e sound: melancholies/melancholiek/-e/melancholikus/-ci memo (ran m%Em%u // fix stress and vowel sounds: memorandum/memoranda and compounds meneer m@n'e@r // meneer/meneertjie menere m@n'e@r@ // menere/beroepsmenere @@ -1551,11 +1638,12 @@ mentjie m'EiNci // monumentjie/dokumentjies AAs) mes (_ mEs // fix last e sound in compounds like kombuismes Cs) mes (_ mEs // fix last e sound in compounds like slagtersmes - metaal m@t'A:l + metaal m@tA:l metale m@t'A:l@ _) meta (C m%Et%a // metabolies/-e/metafoor/metafories meteen mEt_'e@n // meteen/meteens/almeteens mete (o m%it%i // fix stress and e sounds: meteoor and compounds/meteore/meteories/-e + meteo (riet m%it%i%u // fix stress and vowel sounds: meteoriet/-e and compounds metode m@t'o@d@ // metode/s me (tod m@ // metodies/metodiek @@ -1628,8 +1716,10 @@ nese (_ n'e@s@ //japannese soedannese stres and e sound netel ne@t@l // netelig and derivitives/netel and compounds nogal nOx2al // fix o sound: nogal/-s + nok (turn n%Ok // move default stress: nokturne/-s no (minA n%O // fix 1st o sound: (ge)nomineer/nominasie nommer (een n%Om@r? // stress: nommereen in compounds like nommereenspeler + noncha (la n%OnS%a // fix stress and ch sound: nonchalant/-e/-heid nood (saak n%o@t // move default stress: noodsaaklik/-e/-heid, vs. noodsaak nood (saak_N no@t // restore default stress: (ge)noodsaak normaal nOrm'A:l // normaal/normaalweg/abnormaal @@ -1672,6 +1762,7 @@ oranje %o@ranj@ // fix stress and e sound in compounds: oranjeagtig/oranjekleur _) ordent %OrdEnt // move default stress: ordentlik/-e/-er/-ste/-heid orent (K %o@rEnt // fix stress of orent in compounds: kiertsorent/orentspring, etc. + orgi (de %Orx2@ // move default stress: orgidee/orgideë and compounds orie o@ri oriu 'o@riW _) or (ka %Or // move default stress: orkaan/orkane/orkaanwaarskuwing... @@ -1753,10 +1844,11 @@ _) op (@P2 'Op // opeet/opeis/optredes/opoffering open (+ o@p@n // open/opening/e/s open (b %o@p@n openbaar/openbare/openbaring - _) oper (A %o@p@r // operasie/operateur/opereer - &) opera (sie %o@p@rA: // default stress when operasie 2nd part of compound: hartoperasie, etc. - opera (_ 'o@p@ra // stress: opera/operas + _) oper (A %o@p@r // operateur/opereer + operasie %o@p@rA:si // fix stress operasie/hartoperasie, etc. + opera (K o@p@r%a // stress: opera/operas/operamusiek/-sanger opinie o@p'ini // opinie/-s + opium o@piWm // fix vowel sounds: opium and compounds op (nuut %Op // move default stress: opnuut op (offer Op // fix o sound: selfopperende, etc. oppon (A %Op@n // opponent/opponeer @@ -1769,7 +1861,7 @@ opti (mA %Opt%i // optimis/-me/-te/-ties/optimaal op (winde %Op // move default stress: opwindend and derivitives _) or (ga %Or // move default stress: orgaan/organe - organisasie Orx2anis'A:si + organi (sA %Orx2%ani ose (a %o@S%i // fix stress and s and e sounds: oseaan/oseane and compounds @) oties 'o@tis // antibioties/eksoties/eroties/neuroties ower (@ o@v@r // lowergroen/betowerend/dowerig/compounds of owerheid @@ -1809,6 +1901,7 @@ _) onnie Oni // onnie/-s; not on- prefix onreg (K Onr&x2 // stress: onreg/te/onregmatig on (regv++ %On // stress: onregverdig/e/heid + on (sin_N On // restore default stress: onsin on (skuld_N 'On // restore default stress: onskuld _) ont (@P3 %Ont ont (d@ %On // remove t sound: ontdaan/belastingontduiking/ontdooi @@ -1834,9 +1927,10 @@ ongeriefli (k Onx2@r'ifl@ // to avoid "-lik" suffix retranslation onder On@r onder (bre %On@r // move default stress: onderbreek/onderbreking + onder (danig %On@r // move default stress: onderdanig/-e/-heid onder (druk %On@r // exception to default stress rule onder (duim %On@r // exception to default stress rule - onder (enC ''On@r_ // default stress: onderent + _) onder (enC ''On@r_ // default stress: onderent onder (hande %On@r // move default stress: onderhandel and derivitives onder (hor %On@r // exception to default stress rule: onder (hou %On@r // move default stress: onderhou/-dend/-e @@ -1848,6 +1942,8 @@ onder (steu %On@r // exception to default stress rule: ondersteun/-ing/-ers onder (vin %On@r // exception to default stress rule: ondervind/ondervinding onder (vra %On@r // move default stress: ondervra/-ging + onder (werping %On@r // move default stress: onderwerping/-sklousule + onder (worp %On@r // move default stress: onderworpene/onderworpenheid, etc. _) onderge (@P7 'On@rx2@ _) on (kant On // stress on 1st slb.: onkant and compounds on (langs On // stress on 1st slb.: onlangs/-e @@ -1864,6 +1960,7 @@ oontjie oINki oondjie oINki oombliklik o@mbl'Ikl@k // stress: oombliklik/e + _) oopge (@P5 'o@px2@ // oopgesper, etc. oorbluf o@rbl'Wf // stress: oorbluf/te oor (blyw %o@r // move default stress: oorblywend/-e oorbodig o@rb'o@d@x2 // stress: oorbodig/-e/-heid @@ -1879,6 +1976,7 @@ oorkoepel o@rk'up@l // stress and pronunc. of el: oorkoepelend/oorkoepeling _) oorlede o@rl'e@d@ // stress oorlede/ne/s oorle (wing o@rl''e@ // stress on 2nd slb.: oorlewing/-sekuriteit/-situasie + oor (meester %o@r // move default stress: oormeester oor (reed %o@r // move default stress oor (redA %o@r // move default stress: oorredingskrag oor (rompel %o@r // move default stress @@ -1887,6 +1985,7 @@ oor (spronk %o@r // move default stress: (on)oorspronklik and compounds oor (stur %o@r // move default stress: oorsturig/-e/-heid oor (tr %o@r // oortree/oortreding/oortref + oor (trek o@r // restore default stress: oortreksel/oortrekpapier/oortrektrui oor (tuig %o@r // oortuig/oortuiging/oortuigende _) oor (vleuel %o@r // move default stress: oorvleuel/-ing _) oor (vloedig %o@r // move default stress: oorvloedig/-e vs. oorvloed @@ -1914,6 +2013,7 @@ pantser pants@r // fix e sound in compounds starting with pantser pa (pier p%a // papier and compounds 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 parti (tu p%art@ // fix stress and i sound: partituur/partiture and compounds pa (tat p@ // patat/warmpatat/wurgpatat patie (K p%at'i //words ending in patie has stress at end + a sound/simpatiek @@ -1930,9 +2030,9 @@ pa (Ciljoe p%a% // fix stress: pawiljoen/paviljoen/-e and compounds polio po@li;u // polio and compounds _) peli (ka p%El%i // move default stress: pelikaan/pelikane -// @) pene (_ p@n@ // geroepene/ontslapene/uitgeworpene pen (dule p%En // move defaul;t stress: pendule/-s pene (_ p@n@ // geroepenes/ontslapenes/uitgeworpenes + pene (trA p%En@ // fix e sounds: penetrasie/(ge)penetreer pensi (oen p%EnS%i; // move default stress: pensioen and compounds _) perde p'&:rd@ @) perde (_ p&:rd@ // compounds ending with perde @@ -1944,6 +2044,7 @@ skam) pere (_ p@r@ ?? shorten 1st e in ending perfek p@rfEk // perfek/-te/-sie/-sionis peri (o p%e@r%i; // stress: periode/-s and compounds + perle (moe p%&rl@ // move default stress: perlemoen/perlemoer and compounds pe (rron p@ // move default stress and fix e sound: perron and derivitives r) peling (_ p@l@N //verwerpeling etc. peloton pEl@t'On @@ -1953,7 +2054,10 @@ perso (neel p%&rs%u // personeel and compounds pervers p@rf&rs // pervers/perversie _) pe (trA_ pe@ // lengthen e sound: Petro/Petra + petrol pEtr@l_ // o = schwa: petrol and compounds + petrol (eum p@tro@l // move default stress and soften e: petroleum and compounds pe (tunia p@ // fix stress and e sound: petunia/-s + phi (lippA_ f@ // fix stress and 1st i sound: Philippa/Philippi _) pi (la p%i // move default stress: pilaar/pilare/pilatus pi (sto p@ // pistool/pistole and compounds pizza pitsa // fix zz sound: pizza and compounds @@ -1976,6 +2080,9 @@ _) pos (a pOs //posadres/posadministrasie _) post (K p'@Ust- //post where it means after _) post (u p%Ost // move default stress: postuur/posture/postuum and compounds of postuur + poten (sia p%o@t%En // fix e sound: potensiaal/potensiale and compounds + poësie p%u:@zi // bieg/natuurpoësie/poëversameling, etc. + poë (tA p%u:e@ // poëties/-e/poëte ra) pporte (rA p%Orte@ // fix stress and e sound: rapportering/rapporterende _) prak (tyk pr%ak // stress: praktyk and compounds prefek prifEk // fix vowel sounds: prefek/-te/-tuur and compounds @@ -1983,6 +2090,7 @@ pre (mier pr@ // move default stress and fix e sound: premier and compounds pre (sA pr@ // president/presies/present pre (se_ pre@ // fix e sound of words ending in -prese + preten (si pr@te~n // fix stress and e sounds: pretensie/(on)pretensieus/-e primi (t pr@m@ // make i sounds schwa: primitief/primitiewe prinsi (pA pr@ns@ // move default stress: prinsipaal/prinsipale/prinsipaals/prinsipieel/-ële prinsipe (K pr@nsip@ // stress on 2nd slb.: prinsipe/-s @@ -1990,8 +2098,10 @@ posisie puz'isi predi (kant pr%e@d@ // predikant and compounds prinse (s pr@nsE // prinses/-se|-sie/-s + @) prinses (_ pr@nsEs // fix e sound in compounds ending in -prinses: feeprinses, etc. priv (a@ pr%if // privaat/private pro (blA pr%u // probleem/probleme + proble (mati pr%Obl@ // fix vowel sounds: problematies/-e/problematiek profesie prOf@s'i // fix vowel sounds and move stress pro (CA pr%u // probeer/produk/proses/professie/provinsie prokie pro@k%i //sprokie and compounds @@ -2032,6 +2142,7 @@ _) r (_D. rant _) r (_DD. rant _) r (_DDD rant + raad (A rA:t_ // fix d sound and short pause: raadop/voorraadopname, etc. radika (li radika radika (le radik'A: radikaa radik'A: @@ -2141,6 +2252,7 @@ sigare (t s@x2%arE // fix vowel sounds and move default stress sig (a@ s@x2 // sigaar/sigare/sigaardosie siklu (s siklW // siklus and many compounds + silhoe (A s@l%uw // silhoeët/-te/-teer sili (nd s@lI // silinder(s)/silinderkoppe sinteties s@nte@tis // sinteties/e/fotosinteties/-e si (viel s@ // move default stress and fix i sound: siviel/-e @@ -2151,10 +2263,13 @@ saamge (P6 s'A:mx2@ // saamgepers/-de/saamgetel/saamgeêet saamgee sA:mx2e@ // fix ee in saamgee; see rule: saamge (P6 sabot (A s%ab%ut // sabotasie/saboteer + safari s%afA:r%i // fix 1st a: safari/safaripak, etc. + sa (ff s%a // move default stress: saffier and compounds/saffraan and compounds salaris s@lA:r@s // salaris/aanvangsalaris/salarisskaal/-uitbetaling - salon salOn // eetsalon/haarkappersalon + salo (n s%alO // eetsalon/haarkappersalon _) sam (b s%am // move default stress: sambok/-kke/sambreel/sambrele and compounds _) same (@P4 s'A:m@ // samekoms/sameswering + _) same (hA@ s%A:m@ // stress: (on)samehangend/samehorig/-e/-heid, but samehang samel (C sA:m@l // versamelde: see rule:_) same (@P4 s'A:m@ samen (+ sA:m@n // gesamentlik/-e _) san (da s%an // move default stress: sandaal/-tjies/sandale @@ -2177,12 +2292,13 @@ se (llin s%&' // stress on 'in: (met)gesellin/-ne/-netjie, etc. @) sel (wig s'&l // stress: (ver)eenselwig and derivitives _) seme (Ct s@mE // sementtafel/blad/vierkant/semester/-s + _) semi (_ sEmi // fix e sound: semi/semi-formeel, etc. semi (na s%Em%i // seminaar/seminare/seminarium sening se@n@N // sening/haaksening/heupsening _) senior s''i:ni@r // default stress; fix vowl sounds: senior and compounds starting with senior senior (itei s%i:n%i%Or // fix vowel sounds: senioriteit - sen (trale s%En // exception to default stress rule + _) sen (tra@ s%En // exception to default stress rule: sentraal/sentrale _) ser (e@ s@r // fix stress and 1st e sound: sereen/serene sere (moni s%Er@ // seremonie/-meester/huwelikseremonie/seremonieel ser (sant s@r // move default stress: sersant and compounds @@ -2263,7 +2379,6 @@ @) skynlik sk'eInl@k oê­³kynlik/onwaarskeinlik/waarskynlikheid smelt sm< sodom (iet s,o@dOm // fix stress and 2nd o sound: sodomiet/-e - sonde (C@ sOnd@ // sondebok/sondelas son (geC sOn // songebakte/-brande/-bruinde/-droogde sosial (i so@Sial' // sosialis/sosialisme/sosialisties so (v so@ // soveel/sover @@ -2279,6 +2394,7 @@ @) spre (ken spr'e@ // stress: vanselfsprekend _) ste (ri st%E // fix stress and e sound: steriel/-e/steriliteit stimu (lA st@m%y // move default stress and fix i sound: stimuleer/stimulering/stimulasie + _) sub (a sWb_ // subagent/subartikel/subatomies, etc. sub (li s%Wb // move default stress: subliem/-e sub (stansie s%Wp // move default stress and fix b sound: substansie/-s/substansieel/-siële sub (ti s%Wp // stress and b sound: subtiel/-ste/subtiliteit @@ -2293,7 +2409,6 @@ swart (gal sw%art // move default stress: swartgallig @) swem (_ swEm // fix e sound of compounds ending in swem: uitswem/wegswem... swerk sv&rk - swinkel svINk@l .group st D_) ste st@ //ste after numbers 22ste etc. @@ -2303,6 +2418,7 @@ staties st'A:tis steding ste@d@N // besteding and compounds 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 @) stel (iC st@l // eersteling/gunsteling/wellusteling/worsteling/eerstelig and compounds @) ste (llen st'& // belangstellendes/gerusstellend/regstellende/teleurstellend @@ -2317,6 +2433,7 @@ stene (_ ste@n@ //skoorstene, bakstene etc. chri) stene (_ st@n@ //fix christene and compounds @) stel (o st@l //bewusteloos/lustelose/rusteloosheid/kosteloos + mAre) ste (r st& // fix e sound: more/môrester/-re @) sterkt st&rkt // compounds ending in sterkte weg) ster (we st&r // wegsterwe/wegsterwende @@ -2346,6 +2463,7 @@ t (_dN // final t, and next word starts with d A) tch _^_EN // clutch/pitch/bitch tabak tab'ak; + ta (blet t%a // move default stress: tablet/-te and compounds tafe (re t%af@ // fix vowel sounds: tafereel/taferele and compounds @) talig t'A:l@x2 // Anderstalig/tweetalig _) ta (ma t%a // tamatie and compounds @@ -2362,6 +2480,7 @@ t (ema++ t // compounds with tema tia (_ Sja + tiara t%iA:ra // stress: tiara/-s _) tibet t%ibEt // move default stress: Tibet/-aans/-e @) tief (_ t'if // alternatief/aktief/instinktief/(ak)kumulatief @) tiewe (_ t'iv@ // alternatiewe/aktiewe/instinktiewe/(ak)kumulatiewe @@ -2369,6 +2488,8 @@ ti (ra t%i // move default stress tiran tirade tj tS @) tj (a tj // separate tj: agtjarig/blatjang/bontjas/olifantjag/ouditjaar/tweegatjakkals + tjello tSElu // fix e sound and o in compounds: tjello/-konsert/-musiek/-sonata + tje (llis tS%E // move default stress and fix e sound: tjellis/-te tj (ie c _) tj (ie tS ui) tj tj // uitjaag/uitjou/uitjubel @@ -2382,10 +2503,12 @@ @) tion (_ _^_EN //words ending in tion is English @) tions (_ _^_EN //words ending in tions is English toegank t%ux2'aNk // toeganklik/heid + toe (komsti t%u // move default stress: toekomstig/-e toenemen tun'e@m@n //toenemend/e/er toereike t%ureIk@ // toereikend/heid toereken (b t%ur'e@k@n // ontoerekenbaar/heid/ontoerekenbaarheid toneel t%une@l + tonele t%une@l@ // fix o sound: tonele and compounds toegeef t%ux2e@f // move default stress: (on)toegeeflik/-e/-heid toege (wing t'ux2e@ // exception to _) toege (@P5 tux2@ _) toege (@P5 t'ux2@ @@ -2405,7 +2528,7 @@ @) treer tr'e@r // this slb always takes stress; many words tref (afs trEf_ // fix e sound and insert short pause: trefafstand/-e - trek tr&k + tre (k tr& trekker tr&k@r // voortrekkerleier/Voortrekkerstraat/salaristrekkersvergadering triomf (ant tr%i%Omf // move default stress: triomfantlik/-e @) trise (_ tr'is@ // aktrise and similar @@ -2447,6 +2570,10 @@ teks (+ tEks // compounds with teks tent (_ tEnt //suurstoftent and others te (oo t@ // geboorteoorskot/kosteoorweging/siekteoorsaak/terroristeoorlog + s) te (king te@ //ontsteking in compounds + te (rgend t'& //tergend and compounds + @C) te (rgend t'& //sieltergend and others + _) teraarde t%&r?A:rd@ // move default stress and fix e sounds: teraardebestelling/-s n) terie t@r'i // galanterie/infanterie and compounds wa) te (ring t@ //water exception to rest @@ -2487,6 +2614,7 @@ &) tels (_S4 t@ls sleu) tel t@l //sleutel in compounds te (l t& + A) te (ling t@ // betiteling/insluiteling/loteling/uitbeiteling/verstoteling teltjie t@lki @) tel (o t@l // hartelose/besluiteloos/gedagtelose &) tert (A t@rt // fix e sound: agtertoe/foltertuig/gietertuit/kilometertoelae/lastertaal/letterteken @@ -2529,7 +2657,6 @@ u (CA y uu y ui Yy - uiwe Yyv@ //druiwesap and many others uie (C Yy@ // graansuierdiens/kruiersloon/kuiergas/luierbroekie/sluierdoek/suierklep/getuienis uy Yy @@ -2543,6 +2670,7 @@ uit (eenloop Yyt_ // restore default stress: uiteenloop uiteen (lop %Yyt_%e@n // move stress to 3rd slb.: uiteenlopend/uiteenloping uitgee (+ 'Yytx2e@ // se rule: _) uitge (@P5 Yytx2@ + uit (kansel ''Yyt // enforce stress on 1st slb: uitkanselleer uitsonderli (k %YytsOn@rl@ // move default stress: uitsonderlik/-e vs. uitsonder uit (sorteer ''Yyt // remove stress from -eer and place on 1st slb uitspreekl %Yytspre@kl // fix stress and avoid -lik suffix: onuitspreeklik/-e @@ -2554,9 +2682,8 @@ uitgewerk Yytx2@v&rk // uitgewerk and derivitives; see rule: uitgewer uitgewerp Yytx2@v&rp // fix vowel sounds, see rule: uitgewer uitke (n YytkE // mix e sound: uitken - C) uiwer (A Yyv@r // huiwerend/suiweringsaanleg and similar compounds ulti (ma %Wlt%i // move default stress: ultimatum/-s - u (ra %y // uraan and compounds/uranus + _) u (ra %y // uraan and compounds/uranus urine %yrin@ // urine and compounds urineer yrin'e@r // stress to end utjie Yyci @@ -2577,6 +2704,9 @@ vagina vax2ina // fix v sound and shorten a sound: vagina/-s vagin (A@ v%ax2%in // move default stress: vaginale and similar vakansie f@k'ansi + va (ku v%a // fix stress and v sound: vakuum and compounds/vakume/evakueer + vak (unie fak_ // restore default stress, insert short pause: vakunie and compounds + va (llei f%a // fix stress and a sound: vallei/-e and compounds _) van (@ f%an // (on)vanpas/vanjaar/vandag/vanaand/vanoggend and many similar _) vang (@ faN // vangwa, etc.; see rule: _) van (@ f%an vangen f'aN@n // gevangene/gevangenis/bevangenheid @@ -2590,6 +2720,7 @@ @) vel (A fe@l // aanbeveling/aanbevelingsbrief vele f'e@l@ ven (dusie f@n // fix stress and e sound: vendusie and compounds + vene (siA v@ni: // Venesië/Venesiese ven (ster fe~n // nasalise ven (yn f@n // venyn/venynig ver f@r @@ -2607,6 +2738,7 @@ verende f'e@r@nd@ verer (ing f@r_e@r // verering and compounds ending with verering, eg. heldeverering vergete f@rx2'e@t@ // vergeterig/vergetelheid + _) vergewe f@rx2e@v@ // vergewe/vergewend/-e vering f'e@r@N //motivering preservering etc. @C) vers (_ f&rs // teksvers/slotvers/kindervers and similar @C) vers (e_ f&rs // plurals of words like the above @@ -2630,10 +2762,11 @@ verte (l f@rt& // oorvertelling/rondvertel and similar verter (A f@rte@r // spysvertering and compounds/spysverterende ver (velA f@r // vervelig/verveling (see: _) ver (@P3 f@r + verwe (_ f&rv@ // fix e sound: (olie/water)verwe, etc. verwery f&rv@r%eI // fix stress and e sounds: verwery and compounds like huisverwery vi (brA v%i // fix v and i sounds: vibrasie/vibreer vi (cto@ v%i // fix v and i sounds: victoriaans/-e - video v'idi;u //video and compounds + video vidi;u //video and compounds vier (kantig f%i:r // move default stress: vierkantig/-e vs. vierkant ville _^_EN @@ -2652,10 +2785,10 @@ _) vasge (@P5 f'asx2@ vleuel flY@@l // fix last e sound in vleuel in words like vleuelklavier/tweevleuelig, etc. vlieë (nier fl%i@ // move default stress: vlieënier and compounds + vodka vOtka // fix v sound and a sound in compounds: vodka/-bottel, etc. @) voerig f'ur@x2 // breedvoerig/uitvoeriger - volke f'Olk@ // volke/-re: exception to: vo (lC f%O - volk (ing fOlk // bevolking: exception to: vo (lC f%O - volk (s fOlk // volksliedere/volksbeweging/volksleier and similar + volk fOlk + vol (kome f%Ol vo (llA_ fO // volle/vollê/Volla - exception to: vo (lC f%O volle (dig f%Ole@ // fix stress and e sound: (on)volledig/-e/-heid... vo (ller fO // exception to: vo (lC f%O @@ -2695,6 +2828,7 @@ vrygewig freIx2'e@v@x2 // vrygewig/-e|-heid vry (wil fr%eI // vrywillig/-lik|-heid vuldig f'Wld@x2 // sorgvuldig/veelvuldig/vermenigvuldig and variants + vul (ka f%Wl // move default stress: vulkaan/vulkane/vulkanies @@ -2702,6 +2836,7 @@ w v w (w d) w w + ad) w v // w sound: badwater/bladwisselend/stadwaarts @C) w (erk v // fix w sound: hardwerkend/handwerk/naaldwerk AAd) w v // bloedweinig/draadwerk/huidweefsel/landgoedwyn/smeedwerk/skottelgoedwasser nd) w v // aandwandeling/brandweer/eindwedstryd/grondwet/grondwal @@ -2709,10 +2844,14 @@ k) w w k) w (And v // fix w sound: buikwand/rukwinde s) w w + s) w (r v // fix w sound: skeepswrak/sielswroeging/aardswreedheid + wreed (a vre@t_ // fix d sound and insert short pause: wreedaard/-s + wreed (aardig vr%e@t_ // move default stress: wreedaardig/-e/-heid @s) w (al v // fix w sound: dwarswal/gruiswalle/loodswalvis s) w (eek v // fix w sound: feesweek/kersweek/paasweek/vandeesweek/werksweek @s) w (iel v // fix w sound: fietswiel/gewaarwordingswiel and similar compounds s) w (il v // fix w sound: groepswil/hemelswil/liefdeswil/korswil + C) winkel vINk@l // w sound: boek/dames/plaaswinkel, etc. s) w (yf v // fix w sound: viswyf/ganswyfie/mannetjieswyfie ens) w v ers) w v // flenterswaai/kerswense/koerswaarde/kopersweerstand/trekkerswee/verkeerswisselaar @@ -2724,6 +2863,7 @@ ooC) w v // booswig/grootwild/ooswaarts/ out) w v // houtwerk/soutwater and similar yd) w v // fix w sound: sluittydwerk/(wa)wydwakker + wee (moedi v%e@ // move default stress: weemoedig/-e/-heid weer (lê v%e@r // move default stress weer (leg w%e@r // move default stress: (on)weerlegbaar @) weg (_ v&x2 // blindweg/botweg and many similar @@ -2736,12 +2876,13 @@ werwel v&rv@l // fix w and 2nd e sound: werwel and many compounds w (ese_ v //words ending in wese t) w w + t) w (at v // geut/put/soetwater, etc./ietwat it) w v // inkuitwisser/witwyn/uitwoed/witwatersrand @) wa (_N vA: // words ending in -wa: afleweringswa @) w (aen v // strydwaens/afleweringswaentjie @s) w (And v // kranswand/kuswind/meswond @s) w (An_ v // plurals of the above in -de: de treate - _) wan (o van? // wanorde/wanopvatting + _) wan (A van_ // wanorde/wanopvatting/wanaanpassing/winindruk wapen vA:p@n // fix problems with compounds and derivitives of wapen: ontwapening/wapengeweld //wapenopleiding @k) ware vA:r@ // breekware/blikware/lakware @@ -2768,9 +2909,10 @@ waarder (@ vard'e@r // waarderend/e/waardering &) waardig v'A:rd@x2 // stress on -waardig: merkwaardig/besienswaardigheid, etc. s) wed (C vEt // toetswedstryd/tenniswedstryd/afloswedloop + @) wed (str vEt // fix e sound: buite/foto/rugbywedstryd s) wedd (@ vEd // beroepswedder wedywer vEteIv@r // pronunc. of d and e-sound in derivitives - weer (hou w%e@r // exception to default stress rule + weer (hou v%e@r // exception to default stress rule weer (spre ve@r' // weerspreek/weersprekende/weerspreking weer (staan v%e@r // weerstaan/onweerstaanbaar C) wering (_ ve@r@N //borswering, diefwering etc. @@ -2782,6 +2924,7 @@ wh _^_EN // words containing wh are English _) wig vIx2 // fix stress: gewig/-tig/-e wiking vikiN // fix i sounds + wilhel (mi v@lh%&l // move default stress: Wilhelmina/-straat wn _^_EN // names containing town/Brackendowns/Brown worth _^_EN @@ -2829,6 +2972,7 @@ ge) ë (rf & // oorgeëf/-de ë (teit @ // fix stress and e sound: variëteit and compounds ïgnoreer ix2nur'e@r // geïgnoreer + ïllu (st %il%W // geïllustreer/-de ï (nt @ // geïnteresseerd ï (nC 'I // beïndruk/beïnvloed ïsol %is%ul // geïsoleer/-d diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index b5733d35..235a534f 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -127,16 +127,15 @@ tS v w z Z z2 Dictionary hi_dict -@ @- @2 @3 a a: aI aU -e E e: E: E~ i I i: -l- o O o: O: o~ O~ r- -U u: u~ V +@ @2 @3 a a: aI aU E +e: E: E~ I i: O o: O: +O~ r- U u: V -- : b c ch d d. f -g h H j J k kh l -m n N n. n^ p ph Q -q r s S s. t T t. -t.h th v w x z +: b c ch d d. f g +h H j J k kh l m +n N n. n^ p ph Q q +r s S s. t T t. t.h +th v w x z Dictionary hr_dict @@ -155,12 +154,12 @@ tS; v x z Z Dictionary hu_dict A a: E e: i i: o o: -u u: Y y y: Y: +u u: 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 +: b c d dZ f g h +j J k l m n n^ p +R R2 s S s2 t tS ts +v z Z Dictionary it_dict @@ -288,7 +287,7 @@ Dictionary pt_dict & &/ &U~ &~ @ @- a A aI aU e E eI EI eU EU -i i/ iU i~ o O oI OI +e~ i i/ iU o O oI OI o~ u U uI u~ y * : ; b C d dZ f @@ -300,17 +299,14 @@ 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 +@ @- @I a aI aU e ea +eI eU i I^ iI o Oa oI +oU u uI y -* *; 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 t; tS -ts ts; v v; w w2 x z -Z z; Z; +* *; b c d dZ f g +h j k l m m; n p +r s S S; t tS ts ts; +v w w2 x z Z Dictionary is_dict @@ -337,13 +333,16 @@ h j k l m n N p r R s t w z +Dictionary grc_dict + + + Dictionary mk_dict -& @ @- @2 a A a: E -e e: E~ i I i: l- o -o: oU r- u u: y +& @ @- @2 a E e i +I o r- u -* b d 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 +* b d dZ dZ; f g j +k k^ l l^ m n n^ p +r R s S t tS ts v +x z Z diff --git a/dictsource/hi_rules b/dictsource/hi_rules index e60091c9..5fb319f4 100755 --- a/dictsource/hi_rules +++ b/dictsource/hi_rules @@ -10,6 +10,19 @@ // ?3 use diphthong for "au" +.replace + ० 0 + १ 1 + २ 2 + ३ 3 + ४ 4 + ५ 5 + ६ 6 + ७ 7 + ८ 8 + ९ 9 + + // Vowels .group अ diff --git a/dictsource/hu_rules b/dictsource/hu_rules index f5709ac6..d9a320d2 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -2,6 +2,12 @@ // This file is UTF-8 encoded +.replace +// allow o,u-circumflex for o,u-double-acute + ô ő + û ű + + .group a a A _) a (_ %A diff --git a/dictsource/mk_rules b/dictsource/mk_rules index 592c9dee..70694f09 100755 --- a/dictsource/mk_rules +++ b/dictsource/mk_rules @@ -1,6 +1,42 @@ // translation rules for Macedonian // This file is UTF-8 encoded +.replace + a а + b б + c ц + ć ћ + č ч + dž џ + dz ѕ + d д + đ ђ + e е + f ф + g г + h х + i и + j ј + k к + lj љ + l л + m м + nj њ + n н + o о + p п + r р + s с + š ш + t т + u у + v в + z з + ž ж + đ ѓ + ć ќ + + .group а а a diff --git a/dictsource/ro_rules b/dictsource/ro_rules index 785c16f1..7c8972e7 100644 --- a/dictsource/ro_rules +++ b/dictsource/ro_rules @@ -3,6 +3,10 @@ // This file is UTF-8 encoded +// replace s-comma, t-comma by s-cedilla, t-cedilla +.replace + ș ş + ț ţ .group a diff --git a/phsource/compile_report b/phsource/compile_report index be3bcc11..9e02f69d 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,7 +1,7 @@ -39 phoneme tables +40 phoneme tables new total base 96 96 - base2 23 114 + base2 24 115 en 53 144 en_n 30 144 en_us 37 144 @@ -25,13 +25,14 @@ mk 3 130 sr 2 129 ru 38 126 - it 17 117 + it 17 118 la 21 114 - es 6 114 - pt 28 131 + es 6 115 + pt 27 131 pt_pt 20 131 - ro 36 138 - el 8 114 + ro 36 139 + el 8 115 + grc 7 120 sv 25 118 no 28 122 is 32 121 @@ -215,7 +216,7 @@ 30 r/trr base af de fi nl ru ro sv sw 11 r/xr base 2 ufric/ch base de - 3 ufric/f base de ro + 4 ufric/f base de ro grc 2 ufric/f_ base ro 5 ufric/h_ base fi hi la 6 ufric/h@ base fi hi la @@ -272,7 +273,7 @@ 8 ustop/ts_pzd base hi ru 2 ustop/ts_pzd_ hi hu 2 ustop/ts_pzd2 hi hu - 2 vdiph/0i pt vi + 3 vdiph/0i pt grc vi 3 vdiph/0i_2 en_sc no en_wi 3 vdiph2/e@ en_sc en_wi 1 vdiph2/ea ro @@ -323,10 +324,10 @@ 1 vdiph/au_3 en_rp 6 vdiph/au_4 base2 cy eo sk it is 1 vdiph/ee-e hi - 5 vdiph/eei en de nl pt vi + 5 vdiph/eei base2 en de nl vi 3 vdiph/eei_2 en_us eo fi 2 vdiph/eei_3 en_rp sk - 3 vdiph/eeu pt vi zhy + 4 vdiph/eeu pt grc vi zhy 2 vdiph/eeu_2 la pt_pt 2 vdiph/eeu_3 en_n en_wm 1 vdiph/eey fi @@ -346,7 +347,7 @@ 9 vdiph/ooi en en_n en_us cy eo fi no zhy 1 vdiph/ooi_2 af 2 vdiph/ooi_3 en_rp en_wm - 1 vdiph/oou cs + 2 vdiph/oou cs grc 2 vdiph/ou fi zhy 2 vdiph/ou_2 sk ro 2 vdiph/ou_3 is @@ -363,7 +364,7 @@ 1 vdiph/Vu_2 en_wm 1 vdiph/Vu_3 nl 2 vdiph/&y fi nl - 2 vdiph/yi fi no + 3 vdiph/yi fi grc no 1 vdiph/y#i fi 1 vdiph/y#i_2 is 1 vdiph/yi_fr fr @@ -416,7 +417,7 @@ 4 vowel/& en_rp fi hi sv 4 vowel/0 base2 en hi pt 3 vowel/0_2 en_n pt_pt sw - 5 vowel/0_3 en_us en_sc en_rp en_wm hu + 4 vowel/0_3 en_us en_sc en_rp hu 2 vowel/@_2 fr 2 vowel/&_2 en_us 6 vowel/@_3 en_sc de hi @@ -480,7 +481,7 @@ 2 vowel/ii_6 en_wm 1 vowel/ii_en en 10 vowel/@_low en_rp hi ro no - 12 vowel/o base2 en en_wm de hi it la pt_pt sv en_wi + 10 vowel/o base2 en de hi it la pt_pt sv en_wi 4 vowel/o_2 cy hi hu no 2 vowel/o-_2 en_n en_wm 3 vowel/o_3 en_sc fr @@ -493,10 +494,10 @@ 1 vowel/oe_4 sv 2 vowel/o_mid fr hu 12 vowel/oo en_sc de eo la es el sv no zhy en_wi - 10 vowel/oo_1 en_n en_rp en_wm af fi sk hr vi + 12 vowel/oo_1 en_n en_rp en_wm af fi sk hr vi 3 vowel/oo_2 en_sc cy cs 1 vowel/oo_3 af - 5 vowel/oo_4 hi pl it en_wi + 6 vowel/oo_4 en_wm hi pl it en_wi 1 vowel/oo_5 is 6 vowel/oo_en en en_n en_rp 2 vowelr/aa_r en_sc @@ -538,11 +539,11 @@ 1 vowel/yy fr_ca 1 vowel/yy_2 no 1 vowel/yy_3 sv - 5 vowel/yy_4 de hu la is + 6 vowel/yy_4 de hu la grc is 1 vwl_af/@ af 1 vwl_af/I af 2 vwl_af/r@ af - 6 vwl_en/aI@ en en_n en_us en_sc en_rp en_wm + 5 vwl_en/aI@ en en_n en_us en_sc en_rp 2 vwl_en/aI@_2 en_sc 5 vwl_en/aU@ en en_n en_us en_sc en_wm 12 vwl_en/@L en en_us en_sc en_rp en_wm af @@ -550,6 +551,7 @@ 1 vwl_en_n/aa_5 en_n 2 vwl_en_n/O@ en_n 1 vwl_en_n/u_ en_n + 1 vwl_en/ooi@ en_wm 3 vwl_en_rp/aa en_rp 1 vwl_en_rp/aU@ en_rp 1 vwl_en_rp/e@ en_rp diff --git a/phsource/mbrola/en1 b/phsource/mbrola/en1 index bfea6f7a..c5c1f4c5 100644 --- a/phsource/mbrola/en1 +++ b/phsource/mbrola/en1 @@ -27,3 +27,4 @@ 0 @- NULL 0 NULL 0 aI@ NULL 60 aI @ 0 aU@ NULL 75 aU @ +0 x NULL 0 k diff --git a/phsource/mbrola/us b/phsource/mbrola/us index ed437991..c5529d50 100644 --- a/phsource/mbrola/us +++ b/phsource/mbrola/us @@ -12,6 +12,7 @@ 0 w/ NULL 0 w 0 ; NULL 0 NULL 0 g- NULL 0 NULL +0 x NULL 0 k_h 0 @- NULL 0 NULL 0 aI@ NULL 60 AI r 0 aU@ NULL 75 aU r diff --git a/phsource/mbrola/us3 b/phsource/mbrola/us3 index 3b66a0eb..f3b8897f 100644 --- a/phsource/mbrola/us3 +++ b/phsource/mbrola/us3 @@ -12,6 +12,7 @@ 0 w/ NULL 0 w 0 ; NULL 0 NULL 0 g- NULL 0 NULL +0 x NULL 0 k 0 @- NULL 0 NULL 0 aI@ NULL 60 AI r 0 aU@ NULL 75 aU r diff --git a/phsource/ph_base2 b/phsource/ph_base2 index c0db1771..4fbb2922 100644 --- a/phsource/ph_base2 +++ b/phsource/ph_base2 @@ -107,6 +107,13 @@ phoneme eI endphoneme +phoneme EI + vowel starttype (e) endtype (i) + length 230 + formants vdiph/eei +endphoneme + + phoneme oI vowel starttype (o) endtype (i) length 240 diff --git a/phsource/ph_english_sc b/phsource/ph_english_sc index 30b9daa4..dd167c56 100644 --- a/phsource/ph_english_sc +++ b/phsource/ph_english_sc @@ -92,14 +92,14 @@ endphoneme phoneme I - vowel starttype (e) endtype (e) + vowel starttype (@) endtype (@) length 110 formants vowel/e# before l/2 vowel/@_3-30+l/L2_@L endphoneme phoneme I2 - vowel starttype (e) endtype (e) + vowel starttype (@) endtype (@) unstressed length 110 formants vowel/e# diff --git a/phsource/ph_english_wm b/phsource/ph_english_wm index 90db524f..3799c6c7 100644 --- a/phsource/ph_english_wm +++ b/phsource/ph_english_wm @@ -62,7 +62,7 @@ endphoneme phoneme 0 vowel starttype (o) endtype (o) length 140 - formants vowel/0_3 + formants vowel/oo_4 reduceto @ 0 endphoneme @@ -146,7 +146,7 @@ endphoneme phoneme O@ vowel starttype (o) endtype (@) length 240 - formants vowel/o + formants vowel/oo_1 linkout r- endphoneme @@ -154,7 +154,7 @@ endphoneme phoneme O vowel starttype (o) endtype (o) length 150 - formants vowel/o + formants vowel/oo_1 reduceto @ 0 endphoneme @@ -189,7 +189,7 @@ endphoneme phoneme eI vowel starttype (@) endtype (i) - length 210 + length 230 formants vdiph/@i_3 endphoneme @@ -228,7 +228,7 @@ endphoneme phoneme aI@ vowel starttype (a) endtype (@) length 270 - formants vwl_en/aI@ + formants vwl_en/ooi@ linkout r- endphoneme diff --git a/phsource/ph_greek_ancient b/phsource/ph_greek_ancient new file mode 100644 index 00000000..47815de2 --- /dev/null +++ b/phsource/ph_greek_ancient @@ -0,0 +1,44 @@ + +//==================================================== +// Ancient Greek - based on base2 +//==================================================== + +phoneme y + vowel starttype (i) endtype (i) + length 160 + formants vowel/yy_4 +endphoneme + +phoneme EU + vowel starttype (e) endtype (u) + length 230 + formants vdiph/eeu +endphoneme + +phoneme OI + vowel starttype (o) endtype (i) + length 230 + formants vdiph/0i +endphoneme + +phoneme OU + vowel starttype (o) endtype (u) + length 230 + formants vdiph/oou +endphoneme + + +phoneme yI + vowel starttype (i) endtype (i) + length 230 + formants vdiph/yi +endphoneme + + +phoneme f // consider this an affrictive + vls blb afr + vowelout f1=0 f2=1000 -500 -350 f3=-200 80 + lengthmod 2 + wave ufric/f // could replace this with a [pf] wav file +endphoneme + diff --git a/phsource/ph_pt_brazil b/phsource/ph_pt_brazil index a4665a10..ecbcd04a 100644 --- a/phsource/ph_pt_brazil +++ b/phsource/ph_pt_brazil @@ -138,13 +138,6 @@ phoneme eI endphoneme -phoneme EI - vowel starttype (e) endtype (i) - length 230 - formants vdiph/eei -endphoneme - - phoneme OI vowel starttype (o) endtype (i) length 230 diff --git a/phsource/phonemes b/phsource/phonemes index 12d88aba..331b6348 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1218,6 +1218,9 @@ include ph_romanian phonemetable el base2 include ph_greek +phonemetable grc base2 +include ph_greek_ancient + phonemetable sv base include ph_swedish diff --git a/phsource/vdiph2/i@_2 b/phsource/vdiph2/i@_2 index 2444de9f05aa6d34afb0d0175e6bf2648ac5a4b7..90ff1787bdd8bf55585d835ea667c86ca50fec8f 100644 GIT binary patch delta 315 zcmZ3miE+UuM&aN9SLcvm*FY8q28K+Bcq1`}l#Rl+EJ2Y#ewITAgAvmvrVC82jF}7` zjDbR8OiLJa(OVG;JU&8fbjw2BtCnVHr^T@5F4nOp^*OuJBjufhiyd}+faX3CI>ea4_@Bd_p^xK_kPOoU#u%;|#!Fm2 z!XW*xcnR=2HaqE{(eT7!5~LrF?jL;4zA7DcqB|FyK#t2=5yuP%;hL10RWo2RbK!A delta 345 zcmZ3miE+UuM&aN9SLcvm*FY8q28K+Bcq1`}_>IE0EI}SXewM=w1_riyO!Jsr88aCi z7!QanVa#A;=8R-e;Vck(!1#bMmCJ*%hMPeU#Gb@w&$5R109YKTnW2JTfDBZXUl3 z+_`I{vRGhFuaM(rdJXl4hBAb`*x;F=vFSX^0y`Jy$L=~lESsP6u$wS$+5FzYPyzt^ CZ(I)m diff --git a/phsource/vowel/e# b/phsource/vowel/e# index 4366026b060d306e647a23b9725161f361b86513..94d76bf3391013ef154e28bd253482fbf8f94376 100644 GIT binary patch delta 59 ocmcblaYOMh0;iCa=xuEUXAlF$WT-o(GB3EpVI}0MoS&!TG#tjnx7~`0Cpr4asU7T diff --git a/phsource/vowel/i_2 b/phsource/vowel/i_2 index 51f80a6cee6cd0d54e4e2d313fdb537273a49f5c..951392ca3fda4f08a9939d29782da381376f25a7 100644 GIT binary patch delta 173 zcmdmLxz%#RW-dDhrdv$!n1mP=7$g`s@IPSu!q~|%jo~~81FtBP8j}LI9_ux31|ASw zfQN;*fR};SiYbCglYbIJn*amb=8s%4OiT<+ll^(cRlzzQbD43&bbR3!VuR^;!UxeY n`6HLc=FPlzOadHG`(ijEK=$!$W)$c`h=y{6Lqul_NpS%HQ)MT` delta 173 zcmdmLxz%#RW-hw}%(s}{F$pm$Fi0?N;D5mQg|U-k8pC-G25wO%H6{gaJ=Sa72f%Cr z9v0pL-Uc2krU)iY{z(jN0xqnZKXSz|F&$u@?9VH%3Rd-)%ZwYQ;|sSC8%)O&K8TLV oAGtI(Z|1dQ65xT_7sC+&wr?||Ko^q$15`AWBOD?+TS$rv05^LqKL7v# diff --git a/phsource/vowelr/aa_r b/phsource/vowelr/aa_r index bf41c8ebae24edfe1cb8cb046e4eb31d19be89d2..2b2aed677de916d342237b086c79f78ab947a0e4 100644 GIT binary patch delta 224 zcmcaJkMYht#tl6ZjPaX$CB!)xLpLu~;AUa8-n>!eGc&UT^MZ-`qLcS%D5`SFFhwv) zad9$l;ACKa!1#bMg}0O83^xNCh|K^5Z}=G4HZy6iV`jF0eE_Jd-UcY><0HYy!1I!c ziTN&5Cc_3M2C*cj9Hx~leheC{41ypd?YXXkjN}CwGl};w$Vfh9BOz=iMg7O#xGI~411XN0Cg~# TR>;BF3=A5|5cXy>T{R^DIWRCz diff --git a/phsource/vwl_en/ooi@ b/phsource/vwl_en/ooi@ new file mode 100644 index 0000000000000000000000000000000000000000..c1c5a5b7bb3aa24fb328a85a945e7604c7c87c4b GIT binary patch literal 30872 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
`r$CA{xS-ful#vOB0Yf{4n` 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 literal 0 HcmV?d00001 diff --git a/src/compiledict.cpp b/src/compiledict.cpp index ac86eaac..5137a31c 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -176,7 +176,6 @@ int compile_line(char *linebuf, char *dict_line, int *hash) char encoded_ph[200]; unsigned char bad_phoneme[4]; - p = linebuf; comment = NULL; phonetic = word = ""; @@ -347,7 +346,8 @@ int compile_line(char *linebuf, char *dict_line, int *hash) if((word[0] & 0x80)==0) // 7 bit ascii only { - // 1st letter - need to consider utf8 here + // If first letter is uppercase, convert to lower case. (Only if it's 7bit ascii) + // ??? need to consider utf8 here word[0] = tolower(word[0]); } @@ -789,8 +789,6 @@ char *compile_rule(char *input) for(ix=0; finish==0; ix++) { c = input[ix]; - if((c=='/') && (input[ix+1]=='/')) - c = input[ix] = '\n'; // treat command as end of line switch(c = input[ix]) { @@ -1167,6 +1165,7 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) int different; char *prev_rgroup_name; unsigned int char_code; + int compile_mode=0; char *buf; char buf1[120]; char *rules[N_RULES]; @@ -1184,7 +1183,13 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) { linenum++; buf = fgets(buf1,sizeof(buf1),f_in); - if((buf != NULL) && (buf[0] == '\r')) buf++; // ignore extra \r in \r\n + if(buf != NULL) + { + if((p = (unsigned char *)strstr(buf,"//")) != NULL) + *p = 0; + + if(buf[0] == '\r') buf++; // ignore extra \r in \r\n + } if((buf != NULL) && (memcmp(buf,".L",2)==0)) { @@ -1196,7 +1201,7 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) continue; } - if((buf == NULL) || (memcmp(buf,".group",6)==0)) + if((buf == NULL) || (buf[0] == '.')) { // next .group or end of file, write out the previous group @@ -1212,46 +1217,106 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) } n_rules = 0; - if(buf == NULL) break; // end of file - - p = (unsigned char *)&buf[6]; - while((p[0]==' ') || (p[0]=='\t')) p++; // Note: Windows isspace(0xe1) gives TRUE ! - ix = 0; - while((*p > ' ') && (ix<12)) - group_name[ix++] = *p++; - group_name[ix]=0; - - if(sscanf(group_name,"0x%x",&char_code)==1) + if(compile_mode == 2) { - // group character is given as a character code (max 16 bits) - p = (unsigned char *)group_name; - - if(char_code > 0x100) - { - *p++ = (char_code >> 8); - } - *p++ = char_code; - *p = 0; + // end of the character replacements section + fwrite(&n_rules,1,4,f_out); // write a zero word to terminate the replacemenmt list } - if(strlen(group_name) > 2) - { - if(utf8_in(&c,group_name,0) < 2) - { - fprintf(f_log,"%5d: Group name longer than 2 bytes (UTF8)",linenum); - error_count++; - } + if(buf == NULL) break; // end of file - group_name[2] = 0; + if(memcmp(buf,".replace",8)==0) + { + compile_mode = 2; + fputc(RULE_GROUP_START,f_out); + fputc(RULE_REPLACEMENTS,f_out); + + // advance to next word boundary + while((ftell(f_out) & 3) != 0) + fputc(0,f_out); + } + + if(memcmp(buf,".group",6)==0) + { + compile_mode = 1; + + p = (unsigned char *)&buf[6]; + while((p[0]==' ') || (p[0]=='\t')) p++; // Note: Windows isspace(0xe1) gives TRUE ! + ix = 0; + while((*p > ' ') && (ix<12)) + group_name[ix++] = *p++; + group_name[ix]=0; + + if(sscanf(group_name,"0x%x",&char_code)==1) + { + // group character is given as a character code (max 16 bits) + p = (unsigned char *)group_name; + + if(char_code > 0x100) + { + *p++ = (char_code >> 8); + } + *p++ = char_code; + *p = 0; + } + + if(strlen(group_name) > 2) + { + if(utf8_in(&c,group_name,0) < 2) + { + fprintf(f_log,"%5d: Group name longer than 2 bytes (UTF8)",linenum); + error_count++; + } + + group_name[2] = 0; + } } continue; } - prule = compile_rule(buf); - if((prule != NULL) && (n_rules < N_RULES)) + switch(compile_mode) { - rules[n_rules++] = prule; + case 1: // .group + prule = compile_rule(buf); + if((prule != NULL) && (n_rules < N_RULES)) + { + rules[n_rules++] = prule; + } + break; + + case 2: // .replace + { + int replace1; + int replace2; + char *p; + + p = buf; + replace1 = 0; + replace2 = 0; + while(isspace2(*p)) p++; + ix = 0; + while((unsigned char)(*p) > 0x20) // not space or zero-byte + { + p += utf8_in(&c,p,0); + replace1 += (c << ix); + ix += 16; + } + while(isspace2(*p)) p++; + ix = 0; + while((unsigned char)(*p) > 0x20) + { + p += utf8_in(&c,p,0); + replace2 += (c << ix); + ix += 16; + } + if(replace1 != 0) + { + fwrite(&replace1,1,4,f_out); + fwrite(&replace2,1,4,f_out); + } + } + break; } } fclose(f_temp); diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 4abb3959..f25b10f9 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -205,9 +205,9 @@ void Translator::InitGroups(void) int ix; char *p; char *p_name; + unsigned int *pw; unsigned char c, c2; int len; - int rule_count; n_groups2 = 0; for(ix=0; ix<256; ix++) @@ -228,6 +228,18 @@ void Translator::InitGroups(void) } p++; + if(p[0] == RULE_REPLACEMENTS) + { + pw = (unsigned int *)(((int)p+4) & ~3); // advance to next word boundary + langopts.replace_chars = pw; + while(pw[0] != 0) + { + pw += 2; // find the end of the replacement list, each entry is 2 words. + } + p = (char *)(pw+1); + continue; + } + if(p[0] == RULE_LETTERGP2) { ix = p[1] - 'A'; @@ -266,11 +278,9 @@ void Translator::InitGroups(void) } // skip over all the rules in this group - rule_count = 0; while(*p != RULE_GROUP_END) { p += (strlen(p) + 1); - rule_count++; } p++; } diff --git a/src/extras.cpp b/src/extras.cpp index 19732a52..bd45204c 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -998,6 +998,8 @@ void ConvertToUtf8() } // end of ConvertToItf8 +//****************************************************************************************************** + //#define calcspeedtab diff --git a/src/numbers.cpp b/src/numbers.cpp index 08647774..de9bfc1e 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -354,12 +354,14 @@ int Translator::LookupNum2(int value, int control, char *ph_out) if(langopts.numbers & 0x200) { // remove vowel from the end of tens if units starts with a vowel (LANG=Italian) - ix = strlen(ph_tens)-1; - 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((ix = strlen(ph_tens)-1) >= 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",ph_tens,ph_digits); } @@ -793,7 +795,7 @@ int Translator::TranslateNumber_1(char *word, char *ph_out, unsigned int *flags, decimal_point = 0; } } - if(ph_out[0] != 0) + if((ph_out[0] != 0) && (ph_out[0] != phonSWITCH)) { int next_char; utf8_in(&next_char,&word[n_digits+1],0); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 2ec789ea..d0ae207b 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.29.10 16.Oct.07"; +const char *version_string = "1.29.11 23.Oct.07"; const int version_phdata = 0x012901; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index bc6182df..148a75d2 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -38,6 +38,7 @@ #define L_qa 0x716100 +#define L_grc 0x677263 // grc Ancient Greek #define OFFSET_GREEK 0x380 @@ -45,19 +46,41 @@ #define OFFSET_DEVANAGARI 0x900 -static const unsigned int replace_cyrillic[] = - {0x430,0x431,0x446,0x45b,0x447,0x45f,0x455,0x434,0x452, - 0x435,0x444,0x433,0x445,0x438,0x458,0x43a,0x459, - 0x43b,0x43c,0x45a,0x43d,0x43e,0x43f,0x440,0x441, - 0x448,0x442,0x443,0x432,0x437,0x436, - 0x453,0x45c,0}; // ѓ ѕ ќ - -static const unsigned int replace_cyrillic_latin[] = - {'a','b','c',0x107,0x10d,'d'+(0x17e<<16),'d'+('z'<<16),'d',0x111, - 'e','f','g','h','i','j','k','l'+('j'<<16), - 'l','m','n'+('j'<<16),'n','o','p','r','s', - 0x161,'t','u','v','z',0x17e, - 0x111,0x107,0}; +static const unsigned int replace_cyrillic_latin[] = + {0x430,'a', + 0x431,'b', + 0x446,'c', + 0x45b,0x107, + 0x447,0x10d, + 0x45f,'d'+(0x17e<<16), + 0x455,'d'+('z'<<16), + 0x434,'d', + 0x452,0x111, + 0x435,'e', + 0x444,'f', + 0x433,'g', + 0x445,'h', + 0x438,'i', + 0x458,'j', + 0x43a,'k', + 0x459,'l'+('j'<<16), + 0x43b,'l', + 0x43c,'m', + 0x45a,'n'+('j'<<16), + 0x43d,'n', + 0x43e,'o', + 0x43f,'p', + 0x440,'r', + 0x441,'s', + 0x448,0x161, + 0x442,'t', + 0x443,'u', + 0x432,'v', + 0x437,'z', + 0x436,0x17e, + 0x453,0x111, + 0x45c,0x107, +0}; // ѓ ѕ ќ void SetupTranslator(Translator *tr, int *lengths, int *amps) @@ -132,6 +155,7 @@ Translator *SelectTranslator(const char *name) break; case L('e','l'): // Greek + case L_grc: // Ancient Greek { static int stress_lengths_el[8] = {155, 180, 210, 210, 0, 0, 270, 300}; static int stress_amps_el[8] = {15,12, 20,20, 20,24, 24,22 }; // 'diminished' is used to mark a quieter, final unstressed syllable @@ -167,6 +191,12 @@ Translator *SelectTranslator(const char *name) tr->langopts.numbers = 0xb09; tr->langopts.numbers2 = 0x2; // variant form of numbers before thousands + + if(name2 == L_grc) + { + // ancient greek + tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; + } } break; @@ -259,8 +289,6 @@ Translator *SelectTranslator(const char *name) case L('h','i'): { static const char dev_consonants2[] = {0x02,0x03,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f}; - static const unsigned int replace_chars_hi[11] = {0x966,0x967,0x968,0x969,0x96a,0x96b,0x96c,0x96d,0x96e,0x96f,0}; // digits 0-9 - static const unsigned int replacement_chars_hi[11] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0}; static int stress_lengths_hi[8] = {190, 190, 210, 210, 0, 0, 230, 250}; static int stress_amps_hi[8] = {17,14, 20,19, 20,24, 24,22 }; @@ -274,8 +302,6 @@ Translator *SelectTranslator(const char *name) tr->langopts.numbers = 0x811; tr->langopts.numbers2 = 0x100; tr->letter_bits_offset = OFFSET_DEVANAGARI; - tr->langopts.replace_chars = replace_chars_hi; - tr->langopts.replacement_chars = replacement_chars_hi; memset(tr->letter_bits,0,sizeof(tr->letter_bits)); SetLetterBitsRange(tr,LETTERGP_A,0x06,0x14); // vowel letters @@ -306,8 +332,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.numbers = 0x1c0d + 0x4000 + NUM_ROMAN_UC; tr->langopts.numbers2 = 0x4a; // variant numbers before thousands,milliards - tr->langopts.replace_chars = replace_cyrillic; - tr->langopts.replacement_chars = replace_cyrillic_latin; + tr->langopts.replace_chars = replace_cyrillic_latin; SetLetterVowel(tr,'y'); SetLetterVowel(tr,'r'); @@ -319,14 +344,10 @@ Translator *SelectTranslator(const char *name) { static int stress_amps_hu[8] = {17,17, 19,19, 20,24, 24,22 }; static int stress_lengths_hu[8] = {185,195, 195,190, 0,0, 210,220}; - static const unsigned int replace_chars_hu[] = {0xd4,0xf4,0xdb,0xfb,0}; - static const unsigned int replacement_chars_hu[] = {0x150,0x151,0x170,0x171,0}; // allow o,u-circumflex for o,u-double-acute tr = new Translator(); SetupTranslator(tr,stress_lengths_hu,stress_amps_hu); tr->charset_a0 = charsets[2]; // ISO-8859-2 - tr->langopts.replace_chars = replace_chars_hu; - tr->langopts.replacement_chars = replacement_chars_hu; tr->langopts.vowel_pause = 0x20; tr->langopts.stress_rule = 0; @@ -417,9 +438,6 @@ SetLengthMods(tr,3); // all equal tr->langopts.stress_rule = 4; // antipenultimate tr->langopts.numbers = 0x0c29 + 0x4000; tr->langopts.numbers2 = 0x8a; // variant numbers before thousands,milliards - - tr->langopts.replace_chars = replace_cyrillic_latin; - tr->langopts.replacement_chars = replace_cyrillic; } break; @@ -495,8 +513,6 @@ SetLengthMods(tr,3); // all equal { static int stress_lengths_ro[8] = {170, 170, 180, 180, 0, 0, 240, 260}; static int stress_amps_ro[8] = {15,13, 18,18, 20,22, 22,22 }; - static const unsigned int replace_chars_ro[5] = {0x218,0x219,0x21a,0x21b,0}; - static const unsigned int replacement_chars_ro[5] = {0x15e,0x15f,0x162,0x163,0}; // replace s-comma, t-comma by s-cedilla, t-cedilla tr = new Translator(); SetupTranslator(tr,stress_lengths_ro,stress_amps_ro); @@ -505,8 +521,6 @@ SetLengthMods(tr,3); // all equal tr->langopts.stress_flags = 0x100 + 0x6; tr->charset_a0 = charsets[2]; // ISO-8859-2 - tr->langopts.replace_chars = replace_chars_ro; - tr->langopts.replacement_chars = replacement_chars_ro; tr->langopts.numbers = 0x1829+0x6000 + NUM_ROMAN; tr->langopts.numbers2 = 0x1e; // variant numbers before all thousandplex } diff --git a/src/translate.cpp b/src/translate.cpp index b1bbd643..7efb49e9 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -665,6 +665,10 @@ if((wmark > 0) && (wmark < 8)) if(!found && iswdigit(first_char)) { + Lookup("_0lang",word_phonemes); + if(word_phonemes[0] == phonSWITCH) + return(0); + found = TranslateNumber(word,phonemes,&dictionary_flags,wflags); } @@ -1560,16 +1564,14 @@ static int EmbeddedCommand(unsigned int &source_index) } // end of EmbeddedCommand - -int Translator::TranslateChar(char *ptr, int prev_in, unsigned int c, unsigned int next_in, int *insert) -{//===================================================================================================== - // To allow language specific examination and replacement of characters - +int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in, int *insert) +{//================================================================================== int ix; unsigned int word; unsigned int new_c, c2, c_lower; int upper_case = 0; static int ignore_next = 0; + const unsigned int *replace_chars; if(ignore_next) { @@ -1578,7 +1580,7 @@ int Translator::TranslateChar(char *ptr, int prev_in, unsigned int c, unsigned i } if(c == 0) return(0); - if(langopts.replace_chars == NULL) + if((replace_chars = tr->langopts.replace_chars) == NULL) return(c); // there is a list of character codes to be substituted with alternative codes @@ -1590,18 +1592,18 @@ int Translator::TranslateChar(char *ptr, int prev_in, unsigned int c, unsigned i } new_c = 0; - for(ix=0; (word = langopts.replace_chars[ix]) != 0; ix++) + for(ix=0; (word = replace_chars[ix]) != 0; ix+=2) { if(c_lower == (word & 0xffff)) { if((word >> 16) == 0) { - new_c = langopts.replacement_chars[ix]; + new_c = replace_chars[ix+1]; break; } if((word >> 16) == (unsigned int)tolower(next_in)) { - new_c = langopts.replacement_chars[ix]; + new_c = replace_chars[ix+1]; ignore_next = 1; break; } @@ -1625,6 +1627,14 @@ int Translator::TranslateChar(char *ptr, int prev_in, unsigned int c, unsigned i if(upper_case) new_c = towupper(new_c); return(new_c); + +} + + +int Translator::TranslateChar(char *ptr, int prev_in, unsigned int c, unsigned int next_in, int *insert) +{//===================================================================================================== + // To allow language specific examination and replacement of characters + return(SubstituteChar(this,c,next_in,insert)); } diff --git a/src/translate.h b/src/translate.h index d6b7e6e8..24318517 100755 --- a/src/translate.h +++ b/src/translate.h @@ -118,6 +118,7 @@ #define RULE_LETTERGP 17 // A B C H F G Y letter group number #define RULE_LETTERGP2 18 // L + letter group number #define RULE_CAPITAL 19 // word starts with a capital letter +#define RULE_REPLACEMENTS 20 // section for character replacements #define RULE_NO_SUFFIX 24 // N #define RULE_NOTVOWEL 25 // K #define RULE_IFVERB 26 // V @@ -278,6 +279,7 @@ typedef struct { #define NUM_ROMAN 0x20000 #define NUM_ROMAN_UC 0x40000 + // bits0-1=which numbers routine to use. // bit2= thousands separator must be space // bit3= , decimal separator, not . @@ -294,7 +296,6 @@ typedef struct { // bit16=dot after number indicates ordinal // bit17=recognize roman numbers // bit18=Roman numbers only if upper case - int numbers; // bits 1-4 use variant form of numbers before thousands,millions,etc. @@ -302,6 +303,7 @@ typedef struct { // bit7=(LANG-ru) use MB for 1 thousand, million, etc // bit8=(LANG=sw) special word for 100,000s int numbers2; + int max_roman; int thousands_sep; int decimal_sep; @@ -314,7 +316,6 @@ typedef struct { char ideographs; // treat as separate words int testing; // testing options: bit 1= specify stressed syllable in the form: "outdoor/2" const unsigned int *replace_chars; // characters to be substitutes - const unsigned int *replacement_chars; // substitutes for replace_chars } LANGUAGE_OPTIONS;