diff --git a/dictsource/en_list b/dictsource/en_list index 78ddf5e9..a0c117eb 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -1190,9 +1190,11 @@ monotone m0n@toUn monsieur m@sj3: ?5 monsieur m@sjVR mony mVnI2 // monies, monied +moped moUpEd moraine m@reIn morale m@ral morass m0r'as +morose m@r'oUs mosquito m0sk'i:toU motel moUt'El motif moUt'i:f @@ -1895,6 +1897,7 @@ zulu zu:lu: Altrincham O:ltrIN@m Anglesey aNg@LsI2 Argyle A@g'aIl +Argyll A@g;aIl Bacup beIk@p Berwick bErIk Betws bEtUs diff --git a/dictsource/en_rules b/dictsource/en_rules index 00a580db..48ad09e9 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -1280,6 +1280,7 @@ ch (ord k an) ch (or k o) ch (_ k + oo) ch (_ tS _ta) ch k ta) ch tS sta) ch S @@ -1605,6 +1606,7 @@ acB) e (_ I2 e (Cic_ E e (Cical 'E + e (Cium i: t) ech (_ Ek m) e (chanic I @@) eble (_ @b@L @@ -1860,6 +1862,7 @@ eir e@ w) eir i@ l) ei (s E + th) ei (sC i:I _s) eis (m aIz f) ei (t_ I ei (th aI @@ -3211,6 +3214,7 @@ _) mobile moUbaIl im) mobile moUbaIl mobile m@bi:l + mono (ga m@n'0 mo (noto m@ _) mono m0noU mon (opol m@n @@ -3503,6 +3507,8 @@ _id) ol (a 0l petr) ol (_ @L s) ol (em 0l + s) ol (ic @l + s) ol (il @l t) ol (er 0l m) ol (ec @l m) ol (ecule 0l diff --git a/dictsource/fr_list b/dictsource/fr_list index 3cd4d0c8..c7e26130 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -12,23 +12,23 @@ // "letter" name, then include the letter name here, with the letter // prefixed by a _ character. -_à a:aksA~grav -â a:aksA~sirkO~flEks -ä a:trema +_à a:aksA~gRav +â a:aksA~siRkO~flEks +ä a:tRema ç sesedij -ë @:trema +ë @:tRema é @:aksA~Egy -è @:aksA~grav -ê @:aksA~sirkO~flEks -ï i:trema -ë @:trema +è @:aksA~gRav +ê @:aksA~siRkO~flEks +ï i:tRema +ë @:tRema ñ Entilde -ô o:aksA~sirkO~flEks -ö o:trema -ù u:aksA~grav -û u:aksA~sirkO~flEks -ü u:trema -_y i:gr'Ek +ô o:aksA~siRkO~flEks +ö o:tRema +ù u:aksA~gRav +û u:aksA~siRkO~flEks +ü u:tRema +_y i:gR'Ek @@ -41,57 +41,57 @@ _?? sE~b'OL ! Eksklamassj'O~ _" gijm'E _# dj'Ez -_$ dOl'ar -_% purs'A~ +_$ dOl'aR +_% puRs'A~ _& e -_' apOstr'Of -_( 'uvr@-parA~t'Ez -_) f'Erm parA~t'Ez -_* astErisk: +_' apOstR'Of +_( 'uvR@-paRA~t'Ez +_) f'ERm paRA~t'Ez +_* astERisk: _+ plys -_, virg'yl -_- tir'E +_, viRg'yl +_- tiR'E _. pw'E~ _/ sl'aS _: d'Ypw'E~ -_; pw'E~virg'yl -_< E~ferj'Wr +_; pw'E~viRg'yl +_< E~feRj'WR _= eg'al -_> syperj'Wr +_> sypeRj'WR _? kEstj'O~ _@ at -_[ uvr@-_kroS'E +_[ uvR@-_kRoS'E _\ b'aksl'aS -_] f'Erm_kroS'E -_^ sirkOnfl'Eks +_] f'ERm_kRoS'E +_^ siRkOnfl'Eks __ sulin^'e -_` aks'A~_gr'av -_{ uvr_akOl'ad -_| b'ar -_} f'Erm_akOl'ad +_` aks'A~_gR'av +_{ uvR_akOl'ad +_| b'aR +_} f'ERm_akOl'ad _~ tild'e _¢ sEnt _¥ i;'En -_£ l'ivr -_° d@gr'e +_£ l'ivR +_° d@gR'e _± pl'yz_'u_mw'E~ -_× myltip@-lj'e_p'ar -_÷ diviz'e_p'ar -_¼ W~_k'ar +_× myltip@-lj'e_p'aR +_÷ diviz'e_p'aR +_¼ W~_k'aR _½ W~_d@m'i -_¾ trw'a k'ar -_© _^_k'0pIr,aIt_^_ -_® r@Zistr'@d_m'ark +_¾ tRw'a k'aR +_© _^_k'0pIR,aIt_^_ +_® R@ZistR'@d_m'aRk // numeric -_0 zer'o +_0 zeR'o _1 W~ _2 d'Y -_3 trw'a -_4 k'atr +_3 tRw'a +_4 k'atR _5 s'E~c _6 s'is six siz2 @@ -102,8 +102,8 @@ _10 d'is dix diz2 _11 O~z _12 d'uz -_13 tr'Ez -_14 kat'Orz +_13 tR'Ez +_14 kat'ORz _15 k'E~z _16 s'Ez _17 d'is:'Et @@ -112,17 +112,17 @@ _19 d'is:n'@f _20 v'E~ _21 v'E~te:E~ _22 v'E~td'Y -_23 v'E~t:trw'a -_24 v'E~tk'atr +_23 v'E~t:tRw'a +_24 v'E~tk'atR _25 v'E~ts'E~c _26 v'E~ts'is _27 v'E~ts'Et _28 v'E~tw^it _29 v'E~tn'@f -_3X tr'A~t -_31 tr'A~te:E~ -_4X kar'A~t -_41 kar'A~te:E~ +_3X tR'A~t +_31 tR'A~te:E~ +_4X kaR'A~t +_41 kaR'A~te:E~ _5X sE~k'A~t _51 sE~k'A~te:E~ _6X swas'A~t @@ -130,31 +130,31 @@ _61 swas'A~te:E~ _7X swas'A~t:d'is _71 swas'A~te:O~z _72 swas'A~t:d'uz -_73 swas'A~t:tr'Ez -_74 swas'A~t:kat'Orz +_73 swas'A~t:tR'Ez +_74 swas'A~t:kat'ORz _75 swas'A~t:k'E~z _76 swas'A~t:s'Ez _77 swas'A~t:d'is:'Et _78 swas'A~t:d'is:'w^it _79 swas'A~t:d'is:n'@f -_8X k'atr@v'E~ -_80 k'atr@v'E~z2 -_9X k'atr@v'E~d'is -_91 k'atr@v'E~:O~z -_92 k'atr@v'E~:d'uz -_93 k'atr@v'E~:tr'Ez -_94 k'atr@v'E~:kat'Orz -_95 k'atr@v'E~:k'E~z -_96 k'atr@v'E~:s'Ez -_97 k'atr@v'E~:d'is:'Et -_98 k'atr@v'E~:d'is:'w^it -_99 k'atr@v'E~:d'is:n'@f +_8X k'atR@v'E~ +_80 k'atR@v'E~z2 +_9X k'atR@v'E~d'is +_91 k'atR@v'E~:O~z +_92 k'atR@v'E~:d'uz +_93 k'atR@v'E~:tR'Ez +_94 k'atR@v'E~:kat'ORz +_95 k'atR@v'E~:k'E~z +_96 k'atR@v'E~:s'Ez +_97 k'atR@v'E~:d'is:'Et +_98 k'atR@v'E~:d'is:'w^it +_99 k'atR@v'E~:d'is:n'@f _0C s'A~ _1C0 s'A~t2 _0M1 m'il _1M1 m'il _0M2 milj'O~ -_0M3 milj'ar +_0M3 milj'aR _0and e _dpt pw'E~ @@ -167,9 +167,9 @@ abc 'a b'e s'e ac 'a s'e api 'a p'e 'i cio s'e'i;'o -ctrl kO~tr'ol -dept depart@m'A~ -etc etseter'a +ctrl kO~tR'ol +dept depaRt@m'A~ +etc etseteR'a hmm h@m ibm 'i:b'e:'Em ip 'i:p'e @@ -179,31 +179,30 @@ mbrola Em'bRola mlle mad@mwaz'El mme mad'am mr m@sj'Y -p.s pOstkript'Om -ratp 'Er:'a:t'e:p'e +p.s pOstkRipt'Om +ratp 'ER:'a:t'e:p'e s.t.p s'il:t'@:pl'E s.v.p s'il:v'u:pl'E st s'E~ ste s'E~t stp s'il:t'@:pl'E svp s'il:v'u:pl'E -url 'y:'Er:'El +url 'y:'ER:'El usb 'y:'Es:'be utf y:te:Ef xfce iksEfse@ -xy 'iks:igr'Ek +xy 'iks:igR'Ek ii d'Y $abbrev // roman numerals -iii trw'a $abbrev -iv k'atr $abbrev +iii tRw'a $abbrev +iv k'atR $abbrev -dr dOkt'Wr $dot $capital +dr dOkt'WR $dot $capital prof $dot -// numbers // articles le $u $nounf @@ -348,8 +347,8 @@ tout $u // Letters which can be words //=========================== -à a:aksA~grav $atend -y i:gr'Ek $atend +à a:aksA~gRav $atend +y i:gR'Ek $atend @@ -357,15 +356,15 @@ y i:gr'Ek $atend scient si bénéficient benefisi $verb -président prezidA~t2 -président prezidt2 $verb +président pRezidA~t2 +président pRezidt2 $verb // MAIN WORD DICTIONARY //********************* -monsieur m@sjY // monsieur -montréal mO~real // Montréal +monsieur m@sjY +montréal mO~Real (il y a) ili;a $u (il y) ili $u (n'est ce pas) nEspa @@ -385,7 +384,7 @@ montréal mO~real // Montréal bus bys echo Eko fils fis -mars mars +mars maRs pays pEi sens sA~s c'est sEt2 $u @@ -403,45 +402,43 @@ open OpEn espeak ispik nvda $abbrev outlook autluk -reader Rid'Wr -potentiomètre pOtA~sjOmEtr +reader Rid'WR +potentiomètre pOtA~sjOmEtR processus pROsEsys // ut (t is said) août ut azimut azim'yt -brut br'yt +brut bR'yt but by $verb but byt connecticut kOnEktikyt helmut Elmut mazout mazut out aut -rut ryt -scorbut skOrbyt +rut Ryt +scorbut skORbyt scout skut scouts skut stout staut -uppercut ypErkyt +uppercut ypERkyt ut yt zut syt // et (t is said) -//Downing_street -//Dun_and_Bradstreet bridget bRidZEt exocet EgzOsEt fret fR'Et gadget gadZEt hamlet amlEt -internet E~tErnEt +internet E~tERnEt jacket ZakEt knesset knEsEt -lazaret lazarEt -margaret margarEt +lazaret lazaREt +margaret maRgaREt net nEt offset OfsEt pickpocket pikpOkEt @@ -453,38 +450,38 @@ soviet sOvjEt // ct (ct are not said) aspect aspE aspects aspE -circonspect circO~spE -irrespect irEspE -prospect prOspE -respect rEspE +circonspect ciRcO~spE +irrespect iREspE +prospect pROspE +respect REspE suspect syspE // st (t is not said) -prévost prevo +prévost pRevo // urt (t is said) -kurt kurt -yaourt jaurt -yoghourt yogurt -yogourt yogurt +kurt kuRt +yaourt jauRt +yoghourt yoguRt +yogourt yoguRt // ort (t said) -short SOrt +short SORt // art (t said) -stewart stiwart -steward stiwart -stuttgart Stutgart -hart art -kart kart -smart smart +stewart stiwaRt +steward stiwaRt +stuttgart StutgaRt +hart aRt +kart kaRt +smart smaRt // irt -flirt fl@rt -(sweat shirt) swEtS@rt -tee-shirt tiS@rt +flirt fl@Rt +(sweat shirt) swEtS@Rt +tee-shirt tiS@Rt -parfum parfW~ +parfum paRfW~ forum fOR@m // words from other languages @@ -520,9 +517,9 @@ yacht jot // tions (tjO~ instead of sjO~) achetions aS@tjO~z2 ajoutions aZutjO~z2 -apportions apOrtjO~z2 -apprêtions aprEtjO~z2 -arrêtions arEtjO~z2 +apportions apORtjO~z2 +apprêtions apREtjO~z2 +arrêtions aREtjO~z2 assistions asistjO~ bastions bastjO~z2 battions batjO~z2 @@ -538,39 +535,39 @@ digestions diZEstjO~z2 discutions diskytjO~z2 doutions dutjO~z2 débutions debytjO~z2 -désertions dezErtjO~z2 +désertions dezERtjO~z2 détentions detA~tjO~z2 escomptions EskO~tjO~z2 existions EgzistjO~z2 exploitions EksplwatjO~z2 -exportions EkspOrtjO~z2 +exportions EkspORtjO~z2 gestions ZEstjO~z2 habitions abitjO~z2 -heurtions @rtjO~z2 +heurtions @RtjO~z2 indigestions E~diZEstjO~z2 insistions E~sistjO~z2 jetions Z@tjO~z2 limitions limitjO~z2 manifestions manifEstjO~z2 -méritions meritjO~z2 -partions partjO~z2 -pressentions prEsA~tjO~z2 -présentions prezA~tjO~z2 -prêtions prEtjO~z2 +méritions meRitjO~z2 +partions paRtjO~z2 +pressentions pREsA~tjO~z2 +présentions pRezA~tjO~z2 +prêtions pREtjO~z2 quittions kitjO~z2 -rations ratjO~z2 -redoutions r@dutjO~z2 -regrettions r@grEtjO~z2 -représentions r@prezA~tjO~z2 -respections rEspEktjO~z2 -ressentions r@sA~tjO~z2 -restions rEstjO~z2 -répétions repetjO~z2 +rations RatjO~z2 +redoutions R@dutjO~z2 +regrettions R@gREtjO~z2 +représentions R@pRezA~tjO~z2 +respections REspEktjO~z2 +ressentions R@sA~tjO~z2 +restions REstjO~z2 +répétions RepetjO~z2 sentions sA~tjO~z2 -sortions sOrtjO~z2 +sortions sORtjO~z2 souhaitions suEtjO~z2 soumettions sumEtjO~z2 -supportions sypOrtjO~z2 +supportions sypORtjO~z2 tentions tA~tjO~z2 traitions tREtjO~z2 votions vOtjO~z2 $u diff --git a/dictsource/fr_rules b/dictsource/fr_rules index 9642ca84..7a10c6e0 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -248,8 +248,8 @@ _r) e (stru @ // restructurer -) est (_ Est // -est - Cr) es (_C @ - rC) es (_C @ // fortes dames + @Cr) es (_C =@ + rC) es (_C =@ // fortes dames ') eu (_ y // eu eu (r_ W // peur @@ -278,8 +278,8 @@ _CC) e (_ @ _qu) e (_ @ // que - Cr) e (_C @ // quatre pattes - rC) e (_C @ + @Cr) e (_C =@ // quatre pattes + rC) e (_C =@ e (_ // montre diff --git a/dictsource/pt_list b/dictsource/pt_list index f2087c1b..5ce9a12f 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -34,23 +34,28 @@ _?? s'imbolu _. p'oNtu _! ,eskl&mas'&U~ -_" 'asp&s -_# k,ardZin'aU +?1 _" 'asp&S +?2 _" 'asp&s +?1 _# k,ardin'al +?2 _# k,ardZin'aU _$ s,if@-*'&U~ _% pors'eINtu _& 'e -_' ap'Ost@-*,ofu +?1 _' ap'Ost@-*,ofy +?2 _' ap'Ost@-*,ofu _( ,ab@-*ipa*'eINtezi _) f,ES&pa*'eINtezi _* ,aste*'isku -_+ m'aIs +?1 _+ m'aIS +?2 _+ m'aIs _, v'irgul& _- 'ifeIN _/ b'aQ& _: d,oIsp'oNtus _; p,oNtu_iv'irgul& _< men'Or -_= igw'aU +?1 _= igw'al +?2 _= igw'aU _> maI'Or _? ,iNtex,ogas'&U~ _@ ax'ob& @@ -61,12 +66,15 @@ _^ s,irkuNfl'Eksu __ s,ublin^'adu _` g@-*'avi _{ ,ab@-*iS'avi -_| b,ax&v,ertSik'aU +?1 _| b,ax&v,ertSik'al +?2 _| b,ax&v,ertSik'aU _} f,ES&S'avi -_~ tS'iU +?1 _~ t'il +?2 _~ tS'iU _¡ ,eskl&mas,&U~,iNvertS'id& _¿ ,iNtex,ogas,&U~,iNvertS'id& -_" 'ab@-*i;'asp&z d'upl&s +?1 _" 'ab@-*i;'asp&S d'upl&S +?2 _" 'ab@-*i;'asp&z d'upl&s // numeric @@ -155,10 +163,25 @@ _0Z3 mil'Ezim& // 1000ths // ABBREVIATIONS //************** -(http ://) ag,atete'pe_ -a.c ,as'e +abadv $abbrev +a.c 'as'e +adsl $abbrev +apedv $abbrev +?1 apedv ,a,pe,,E,de've +bios b'i,OS d.c d,es'e -etc ,ets'Ete*& +cpu $abbrev +//?1 cpu ,se,pe'u +?1 cpuc ,se,pe,u'se +edp $abbrev +?1 etc ,ets'Et:r& +?2 etc ,ets'Ete*& +?2 (http ://) ag,atete'pe_ +nvda $abbrev +unts $abbrev +unts $abbrev +?1 usb ,u,Esy'be +?2 usb $abbrev // articles @@ -516,7 +539,7 @@ era 'Er& abacaxi abakaSi axé aSE elixir eliSir -?1fixe fiSe +?1 fixe fiSe lixo l'iSu roxo x'oSu @@ -524,9 +547,9 @@ roxo x'oSu ?1 alt 'alt ?1 bacalhau b,&k&lj'aU ?1 caps k'aps -?1 ctrl k'oNt:r'Ol + ctrl k'oNt:r,Ol ?1 delete dil'i:t -?1 design diz'aIn //? In Brasilian Portuguese +?1 design diz'aIn ?1 down d'aUn ?1 download d'aUnloUd ?1 escape Sk'eIpy @@ -541,8 +564,7 @@ layout l'eI,aUt ?1 mail meIl ?2 mail m'eja ?1 menu mEnU -?1 num _^_EN -?1 ok Ok'eI + ok Ok'eI ?1 pause p'au:z ?1 page p'eIdZ ?1 scroll _^_EN @@ -562,18 +584,20 @@ alan 'al@n ?1 access 'aksEs debian d'Ebj&~N espeak isp'i:k -speak spi:k +espeakedit isp'i:k,Ed,it firefox f'ai@foks ?1 hal hal ?1 jaws dZ'au:z -?1 linux l'inUks +?1 linux l,in'uks ?2 linux l'inuks openoffice 'opeIN|'Ofis -?1 reader r'i:d&@ +?1 reader _^_EN slackware sl'akwe@ +speak spi:k suse z'u:ts@ ubuntu ub'untu -unix j'u:niks +?1 unix ,u:n'iks +?2 unix j'u:niks ?1 windows _^_EN @@ -625,3 +649,4 @@ ronchi r'OnCi: vogel f'o:g@l volkmann f'Olkman + diff --git a/dictsource/pt_rules b/dictsource/pt_rules index a6ff94e6..0ce44a3c 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -13,6 +13,7 @@ .group a _) a (_ a + _) a (_W 'a // in an acronym a a &) a (_ =& // in final unstressed syllable &) a (s_ =& @@ -25,7 +26,7 @@ a (C_ & a (r_ 'a -?1 p) a (d_ =E +?1 p) a (d_ =E a (CC_ & ?1 al (_ 'al // eg: Portugal, capital, etc. ?2 al (K aU @@ -38,6 +39,7 @@ an (K &~N a (nhA &~ am (_ =&U~ +?1 a (z_ 'a //eg: paz, rapaz, capaz, etc... ai aI ai (s aI @@ -133,7 +135,7 @@ ?2 el (K EU ?2 elh elj -?1 e (rtA_ 'E // Eg: Alberto, aberta, etc... +?1 e (rtA_ 'E // Eg: Alberto, aberta, etc... em (C eIm en (K eIN enh en^ @@ -152,24 +154,26 @@ eu (s eU e (uCK e -?1 _) es (C@@ S // drop initial "e". -?1 _) e (f i // efectuar, etc. -?1 C) e (cC 'E // eg: seleccionar, efectuar, selecção, etc... -?1 C) e (ã i // leão, panteão, etc. -?1 C) e (a i // oceano, etc. -?1 _C) e (CACA =y //definições. -?1 _C) e (CCACAr =y // desligar. -?1 _C) e (CKAr =y // fechar -?1 _C) e (CCACAr =y // terminar. -?1 _C) e (CACC =y // recicla, reciclagem, etc... -?1 _f) e (rrament =y // ferramenta, ferramentas. -?1 hip) e (r ,E // eg: hiper -?1 sup) e (r ,E // super -?1 int) e (rC 'E // Interno -?1 int) e (rr E // Interno -?1 n) e (t ,E // eg: net - -?1 e (l_ ,E +?1 _) es (C@@ S // drop initial "e". +?1 _) e (f i // efectuar, etc. +?1 _n) e (nhu i // eg: nenhum, nenhuma, nenhuns, nenhumas. +?1 C) e (cC ,E // eg: seleccionar, efectuar, etc... +?1 C) ecç 'E's // eg: selecção, etc... +?1 C) e (ã i // leão, panteão, etc. +?1 C) e (a i // oceano, etc. +?1 _C) e (CACA y //definições. +?1 _C) e (CCACAr y // desligar. +?1 C) e (CCAC y // eg: deslocamento, etc... +?1 _C) e (CKAr y // fechar +?1 _C) e (CCACAr y // terminar. +?1 _C) e (CACC y // recicla, reciclagem, etc... +?1 _f) e (rrament y // ferramenta, ferramentas. +?1 hip) e (r ,E // eg: hiper +?1 sup) e (r ,E // super +?1 int) e (rC 'E // Interno +?1 int) e (rr E // eg: Enterra +?1 n) e (t ,E // eg: net +?1 e (l_ ,E // eg: possível, manuel, etc... .group é @@ -197,8 +201,8 @@ .group f -?1 _) f (_ Ef; // individual letter -?1 _) f (__ Ef // individual letter at end-of-word +?1 _) f (_W Ef; // within an acronym +?1 _) f (_ Ef // individual letter or end-of-acronym _) f (_ 'Efe f f f (f @@ -206,6 +210,7 @@ .group g ?1 _) g (_ ge +?1 _) g (_W Ze // within an acronym _) g (_ Ze g g g (g @@ -216,7 +221,8 @@ .group h - _) h (_ ag'a +?1 _) h (_ &g'a +?2 _) h (_ ag'a h // silent @@ -262,8 +268,8 @@ úC) i (A_ j úCC) i (A_ j -?1 @) ing (_ _^_EN -?1 @) ings (_ _^_EN +?1 @) ing (_ _^_EN +?1 @) ings (_ _^_EN .group í @@ -282,14 +288,14 @@ .group k ?1 _) k (_ k'ap& -?2 _) k (_ ka +?2 _) k (_ ka k k k (k .group l -?1 _) l (_ El; // individual letter -?1 _) l (__ El // individual letter at end-of-word +?1 _) l (_W El; // within an acronym +?1 _) l (_ El _) l (_ 'Ele l l l (l @@ -299,16 +305,16 @@ .group m -?1 _) m (_ Em; -?1 _) m (__ Em +?1 _) m (_W 'Em; +?1 _) m (_ Em _) m (_ 'eme m m m (m .group n -?1 _) n (_ En; -?1 _) n (__ En +?1 _) n (_W 'En +?1 _) n (_ En _) n (_ 'ene n n n (n @@ -327,37 +333,33 @@ oi (s oI o (iCK o oo u -?1 v) oo (_ ow +?1 C) oo (_ ow // eg: voo, enjoo, etc... oy OI o (Ca_ O -?1 o (Cá_ 'O -?1 o (Cé_ 'O -?1 o (Cí_ 'O -?1 o (Có_ 'O -?1 o (Cú_ 'O ?1 ol (_ Ol ?2 ol (K Ow ?2 olh olj -?1 om (_ 'om -?2 om (_ oN +?1 om (_ 'om +?2 om (_ oN o (ma_ o -?1 om (C 'om -?2 om (C om +?1 om (C 'om +?2 om (C om on (K oN o (na_ o onh on^ o (rmA_ O o (rmAC O -?1 oz (_ OS -?2 oz (_ Oz +?1 oz (_ OS +?2 oz (_ Oz o (zes_ O o (ra_ O o (ras_ O -?1 _C) o (CACACC =u // Documento, documentação, etc. -?1 _C) o (CCAC =u // formatar, formato. +?1 _) o (C O // eg: olá, orla, opção, etc... +?1 _C) o (CACACC u // Documento, documentação, etc. +?1 C) o (CCAC u // formatar, formato. .group ô @@ -415,18 +417,18 @@ .group r -?1 _) r (_ 'Err; // individual letter -?1 _) r (__ 'Err // individual letter at end-of-word +?1 _) r (_W 'Err; // within an acronym +?1 _) r (_ 'Err _) r (_ 'Exe _) r (_\$ xe'aU // currency r r -?1 A) r (A :r -?2 A) r (A * -?1 A) r (_A :r -?2 A) r (_A * +?1 A) r (A :r +?2 A) r (A * +?1 A) r (_A :r +?2 A) r (_A * rr x -?1 C) r (A :r -?2 C) r (A @-* +?1 C) r (A :r +?2 C) r (A @-* _) r x l) r x n) r x @@ -435,18 +437,18 @@ .group s -?1 _) s (_ 'Ess|; [s]+[;] not [s;] phoneme -?1 _) s (__ 'Ess - _) s (_ 'Ese +?1 _) s (_W 'Es|; within an acronym [s]+[;] not [s;] phoneme +?1 _) s (_ 'Es +?2 _) s (_ 'Ese s s ss s sc (Y s sç s A) s (A z -?1 s (_ S -?2 s (_ s - s (_A z // next word starts with vowel - s (_G z // next word starts with voiced consonant +?1 @) s (_ S +?2 @) s (_ s + @) s (_A z // next word starts with vowel + @) s (_G z // next word starts with voiced consonant A) s (_S1 s A) s (_AS1 z // next word starts with vowel @@ -466,8 +468,8 @@ ?2 t (i tS ?2 t (í tS ?2 t (e_ tS -?1 th _^_EN -?1 tion (_ _^_EN +?1 th _^_EN +?1 tion (_ _^_EN .group u @@ -507,14 +509,15 @@ .group w - _) w (_ d'ablju +?1 _) w (_ d'&bl,iu +?2 _) w (_ d'ablju w w -?1 w (_ _^_EN +?1 w (_ _^_EN .group x -?1 _) x (_ SiS -?2 _) x (_ Sis +?1 _) x (_ SiS +?2 _) x (_ Sis x (A S A) x (A ks e) x (A z @@ -532,7 +535,8 @@ .group y - _) y (_ 'ipsiloN +?1 _) y (_ 'ipsil,ON +?2 _) y (_ 'ipsiloN y i y (A j @@ -541,16 +545,17 @@ _) z (_ ze z z z (z -?1 z (_ S -?2 z (_ s - z (_A z - z (_G z +?1 @) z (_ S +?2 @) z (_ s + @) z (_A z + @) z (_G z ?1 A) z (C S ?1 A) z (G+ Z ?1 A) z (_C S ?1 A) z (_G+ Z + .group ç s _) ç (_ s'esed'il^& @@ -600,3 +605,4 @@ + diff --git a/phsource/ufric/sx_sv.wav b/phsource/ufric/sx_sv.wav index f7b1f350..0ce284dd 100644 Binary files a/phsource/ufric/sx_sv.wav and b/phsource/ufric/sx_sv.wav differ diff --git a/phsource/ufric/xx.wav b/phsource/ufric/xx.wav index 19619856..b4d8a751 100644 Binary files a/phsource/ufric/xx.wav and b/phsource/ufric/xx.wav differ diff --git a/phsource/vnasal/o_n3 b/phsource/vnasal/o_n3 new file mode 100644 index 00000000..96c431e5 Binary files /dev/null and b/phsource/vnasal/o_n3 differ diff --git a/phsource/vnasal/vowelchart.png b/phsource/vnasal/vowelchart.png index d3964727..84f36af1 100644 Binary files a/phsource/vnasal/vowelchart.png and b/phsource/vnasal/vowelchart.png differ diff --git a/phsource/vwl_fr/@R b/phsource/vwl_fr/@R index faee245d..02d86667 100644 Binary files a/phsource/vwl_fr/@R and b/phsource/vwl_fr/@R differ diff --git a/phsource/vwl_fr/@R2 b/phsource/vwl_fr/@R2 index 3f354338..5614f07c 100644 Binary files a/phsource/vwl_fr/@R2 and b/phsource/vwl_fr/@R2 differ diff --git a/phsource/x/g2.wav b/phsource/x/g2.wav index 318c1f19..9b10f839 100644 Binary files a/phsource/x/g2.wav and b/phsource/x/g2.wav differ diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 4a31642c..ee27e2a7 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -654,6 +654,9 @@ void copy_rule_string(char *string, int &state) case 'T': c = RULE_ALT1; break; + case 'W': + c = 0x31; + break; case 'L': // expect two digits c = *p++ - '0'; diff --git a/src/numbers.cpp b/src/numbers.cpp index df76e374..9cba8417 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -45,6 +45,7 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control) int n_bytes; int letter; int len; + int next; unsigned char *p; char ph_stress[2]; char capital[20]; @@ -69,7 +70,11 @@ int Translator::TranslateLetter(char *word, char *phonemes, int control) len = utf8_out(letter,&single_letter[2]); single_letter[2+len] = ' '; - memcpy(&single_letter[3+len],&word[n_bytes],3); // include the next letter, after a space, in case it affects the translation rules + + next = 0x31; + if(word[n_bytes] == ' ') + next = ' '; + single_letter[3+len] = next; // follow by space-space if the end of the word, or space-0x31 single_letter[1] = '_'; if(Lookup(&single_letter[1],ph_buf) == 0) diff --git a/src/readclause.cpp b/src/readclause.cpp index c0375e62..ce9343d1 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -594,8 +594,8 @@ static char *VoiceFromStack(int *voice_variant) { sp = &ssml_stack[ix]; - if(sp->voice_name[0] != 0) - strcpy(voice_name, sp->voice_name); +// if(sp->voice_name[0] != 0) + strcpy(voice_name, sp->voice_name); // don't inherit name from previous levels ?? if(sp->language[0] != 0) strcpy(language, sp->language); if(sp->voice_gender != 0) diff --git a/src/synthdata.cpp b/src/synthdata.cpp index b844ffb4..9b4d02c7 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.24.02 04.May.07"; +const char *version_string = "1.24.03 06.May.07"; const int version_phdata = 0x012201; int option_device_number = -1; diff --git a/src/translate.h b/src/translate.h index fe6025e3..c49114e2 100755 --- a/src/translate.h +++ b/src/translate.h @@ -46,7 +46,7 @@ #define FLAG_CAPITAL 0x8000 /* pronunciation if initial letter is upper case */ #define FLAG_DOT 0x10000 /* ignore '.' after word (abbreviation) */ -#define FLAG_ABBREV 0x20000 /* use this pronunciation rather than split into letters */ +#define FLAG_ABBREV 0x20000 // spell as letters, even with a vowel, OR use specified pronunciation rather than split into letters #define FLAG_STEM 0x40000 // must have a suffix #define FLAG_DOUBLING 0x80000 // doubles the following consonant diff --git a/src/voices.cpp b/src/voices.cpp index 3c18e5b9..82afd18f 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -61,6 +61,7 @@ static espeak_VOICE *voices_list[N_VOICES_LIST]; static int len_path_voices; espeak_VOICE *voice_selected = NULL; +espeak_VOICE *first_voice = NULL; char voice_name[40]; @@ -209,6 +210,143 @@ void ReadTonePoints(char *string, int *tone_pts) } + + +static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname, const char*leafname) +{//=================================================================================== +// Read a Voice file, allocate a VOICE_DATA and set data from the +// file's language, gender, name lines + + char linebuf[120]; + char vname[80]; + char vgender[80]; + char vlanguage[80]; + char languages[300]; // allow space for several alternate language names and priorities + + + unsigned int len; + int langix = 0; + int n_languages = 0; + char *p; + espeak_VOICE *voice_data; + int priority; + int age; + int n_variants = 3; // default, number of variants of this voice before using another voice + int gender; + +#ifdef PLATFORM_WINDOWS + if(memcmp(leafname,"mb-",3) == 0) + { + // check whether the mbrola speech data is present for this voice + memcpy(vname,&leafname[3],3); + vname[3] = 0; + sprintf(linebuf,"%s/mbrola/%s",path_home,vname); + + if(GetFileLength(linebuf) <= 0) + return(0); + } +#endif + + vname[0] = 0; + vgender[0] = 0; + age = 0; + + while(fgets(linebuf,sizeof(linebuf),f_in) != NULL) + { + linebuf[strlen(linebuf)-1] = 0; + + if(memcmp(linebuf,"name",4)==0) + { + p = &linebuf[4]; + while(isspace(*p)) p++; + strncpy0(vname,p,sizeof(vname)); + } + else + if(memcmp(linebuf,"language",8)==0) + { + priority = DEFAULT_LANGUAGE_PRIORITY; + vlanguage[0] = 0; + + sscanf(&linebuf[8],"%s %d",vlanguage,&priority); + len = strlen(vlanguage) + 2; + // check for space in languages[] + if(len < (sizeof(languages)-langix-1)) + { + languages[langix] = priority; + + strcpy(&languages[langix+1],vlanguage); + langix += len; + n_languages++; + } + } + else + if(memcmp(linebuf,"gender",6)==0) + { + sscanf(&linebuf[6],"%s %d",vgender,&age); + } + else + if(memcmp(linebuf,"variants",8)==0) + { + sscanf(&linebuf[8],"%d",&n_variants); + } + } + languages[langix++] = 0; + + gender = LookupMnem(genders,vgender); + + if(n_languages == 0) + { +#ifdef deleted +// Read voice variant files +// Don't use this, instead preset the variants_* arrays + + // no language is specified, this voice file only affects the voice characteristics + if(memcmp(leafname,"!variant",8)==0) + { + if(((variant = atoi(&leafname[8])) > 0) && (strlen(variants_either) < N_VOICE_VARIANTS)) + { + char string[2]; + string[0] = variant; + string[1] = 0; + strcat(variants_either,string); + if(gender == 1) + strcat(variants_male,string); + if(gender == 2) + strcat(variants_female,string); + } + } +#endif + return(NULL); // no language lines in the voice file + } + + p = (char *)calloc(sizeof(espeak_VOICE) + langix + strlen(fname) + strlen(vname) + 3, 1); + voice_data = (espeak_VOICE *)p; + p = &p[sizeof(espeak_VOICE)]; + + memcpy(p,languages,langix); + voice_data->languages = p; + + strcpy(&p[langix],fname); + voice_data->identifier = &p[langix]; + voice_data->name = &p[langix]; + + if(vname[0] != 0) + { + langix += strlen(fname)+1; + strcpy(&p[langix],vname); + voice_data->name = &p[langix]; + } + + voice_data->age = age; + voice_data->gender = gender; + voice_data->variant = 0; + voice_data->xx1 = n_variants; + return(voice_data); +} // end of ReadVoiceFile + + + + void VoiceReset(int tone_only) {//=========================== // Set voice to the default values @@ -379,6 +517,7 @@ voice_t *LoadVoice(char *vname, int control) char phonemes_name[40]; char *language_type; char buf[200]; + char path_voices[140]; char langname[4]; int stress_amps[8]; @@ -392,7 +531,8 @@ voice_t *LoadVoice(char *vname, int control) if(voicename[0]==0) strcpy(voicename,"default"); - sprintf(buf,"%s%cvoices%c%s",path_home,PATHSEP,PATHSEP,voicename); + sprintf(path_voices,"%s%cvoices%c",path_home,PATHSEP,PATHSEP); + sprintf(buf,"%s%s",path_voices,voicename); if(GetFileLength(buf) <= 0) { @@ -400,10 +540,15 @@ voice_t *LoadVoice(char *vname, int control) langname[0] = voicename[0]; langname[1] = voicename[1]; langname[2] = 0; - sprintf(buf,"%s%cvoices%c%s%c%s",path_home,PATHSEP,PATHSEP,langname,PATHSEP,voicename); + sprintf(buf,"%s%s%c%s",path_voices,langname,PATHSEP,voicename); } f_voice = fopen(buf,"r"); + if(first_voice == NULL) + { + first_voice = ReadVoiceFile(f_voice,buf+len_path_voices,voicename); + rewind(f_voice); + } language_type = "en"; // default if(f_voice == NULL) @@ -776,7 +921,7 @@ static int ScoreVoice(espeak_VOICE *voice_spec, int spec_n_parts, int spec_lang_ p = voice->languages; // list of languages+dialects for which this voice is suitable - if(voice_spec->languages == NULL) + if(spec_n_parts == 0) { score = 100; } @@ -836,10 +981,18 @@ static int ScoreVoice(espeak_VOICE *voice_spec, int spec_n_parts, int spec_lang_ if(score == 0) return(0); - if((voice_spec->name != NULL) && (strcmp(voice_spec->name,voice->name)==0)) + if(voice_spec->name != NULL) { - // match on voice name - score += 400; + if(strcmp(voice_spec->name,voice->name)==0) + { + // match on voice name + score += 500; + } + else + if(strcmp(voice_spec->name,voice->identifier)==0) + { + score += 400; + } } if(((voice_spec->gender == 1) || (voice_spec->gender == 2)) && @@ -886,14 +1039,15 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices) int ix; int score; int nv; // number of candidates - int n_parts=1; + int n_parts=0; int lang_len=0; char *p; espeak_VOICE *vp; // count number of parts in the specified language - if(voice_select->languages != NULL) + if((voice_select->languages != NULL) && (voice_select->languages[0] != 0)) { + n_parts = 1; lang_len = strlen(voice_select->languages); for(p = voice_select->languages; *p != 0; p++) { @@ -901,7 +1055,6 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices) n_parts++; } } - // select those voices which match the specified language nv = 0; for(ix=0; ix 0) && (strlen(variants_either) < N_VOICE_VARIANTS)) - { - char string[2]; - string[0] = variant; - string[1] = 0; - strcat(variants_either,string); - if(gender == 1) - strcat(variants_male,string); - if(gender == 2) - strcat(variants_female,string); - } - } -#endif - return(NULL); // no language lines in the voice file - } - - p = (char *)calloc(sizeof(espeak_VOICE) + langix + strlen(fname) + strlen(vname) + 3, 1); - voice_data = (espeak_VOICE *)p; - p = &p[sizeof(espeak_VOICE)]; - - memcpy(p,languages,langix); - voice_data->languages = p; - - strcpy(&p[langix],fname); - voice_data->identifier = &p[langix]; - voice_data->name = &p[langix]; - - if(vname[0] != 0) - { - langix += strlen(fname)+1; - strcpy(&p[langix],vname); - voice_data->name = &p[langix]; - } - - voice_data->age = age; - voice_data->gender = gender; - voice_data->variant = 0; - voice_data->xx1 = n_variants; - return(voice_data); -} // end of ReadVoiceFile - - static espeak_VOICE *SelectVoiceByName(espeak_VOICE **voices, const char *name) {//============================================================================ int ix; @@ -1212,7 +1232,7 @@ void GetVoices(const char *path) FILE *f_voice; espeak_VOICE *voice_data; int ftype; - char fname[80]; + char fname[140]; #ifdef PLATFORM_RISCOS #else @@ -1305,7 +1325,7 @@ espeak_ERROR SetVoiceByName(const char *name) espeak_VOICE *v; int variant=0; char *p; - char buf[80]; + static char buf[60]; strncpy0(buf,name,sizeof(buf)); if((p = strchr(buf,'+')) != NULL) @@ -1315,6 +1335,14 @@ espeak_ERROR SetVoiceByName(const char *name) variant = atoi(p+1); } +// first check for a voice with this filename + if(LoadVoice(buf,1) != NULL) + { + voice_selected = first_voice; + WavegenSetVoice(voice); + return(EE_OK); + } + if(n_voices_list == 0) espeak_ListVoices(NULL); // create the voices list @@ -1358,7 +1386,7 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) int ix; static espeak_VOICE *voices[N_VOICES_LIST]; char selected_voice_id[80]; - char path_voices[80]; + char path_voices[130]; // free previous voice list data if((voice_selected != NULL) && (voice_selected->identifier != NULL))