diff --git a/dictsource/da_list b/dictsource/da_list index eca6df58..eae75c2b 100755 --- a/dictsource/da_list +++ b/dictsource/da_list @@ -1,4 +1,6 @@ -// PB = Peter Bjarkov - pbj1234@hotmail.com +tv $abbrev + +// PB = Peter Bjarkov - pbj1234@hotmail.com // This file is UTF8 encoded // Spelling-to-phoneme words for Danish diff --git a/dictsource/da_rules b/dictsource/da_rules index e0bea91a..8f17a268 100755 --- a/dictsource/da_rules +++ b/dictsource/da_rules @@ -4184,6 +4184,14 @@ uimodst) å (elig 'O // PB stressed åre V3 // PB tåre å (lti V // PB måltid +.group ' + 's (_S2 s + 'er (_S3 %V + 'erne (_S5 %Vn@ + 'ernes (_S6 %Vn@s + 'et (_S3 @D + + .group $ dVlV // PB changed from [dVlar] ñ _^_ES // PB mañana diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 6516b056..f5b68e54 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -1,7 +1,7 @@ Phonemes which are used in the *_rules and *_list files -Dictionary af_dict +Dictionary af_dict 2010-05-24 & &: 3: @ @- @L @U a A: aI AI aU A~ E e: e@ @@ -15,7 +15,7 @@ n N n^ p r s S t T tS v w x x2 z Z -Dictionary ca_dict +Dictionary ca_dict 2010-05-12 @ a a# aI e E E2 i o O u U @@ -27,7 +27,7 @@ R2 s S; t T ts tS; v v# w z Z Z; -Dictionary cs_dict +Dictionary cs_dict 2010-07-03 @- a a: aU e e: eI eU i i: l- o o: oU r- u @@ -40,7 +40,7 @@ s S t tS ts v x z Z -Dictionary cy_dict +Dictionary cy_dict 2010-05-24 @ @- @I @Y a A: aI aU AY aY E e: eU I i: Iu @@ -53,7 +53,7 @@ p r s S t T v w x z -Dictionary da_dict +Dictionary da_dict 2010-07-03 & &# 0 3 @ @- a A e E i o O u V W @@ -65,7 +65,7 @@ l/2 l/3 m n N p r R s S t T tS v w z -Dictionary hu_dict +Dictionary hu_dict 2010-07-17 A a: E e: i i: o o: u u: Y y y: Y: @@ -76,7 +76,7 @@ n^ p r R R2 s S s2 t tS ts v z Z -Dictionary de_dict +Dictionary de_dict 2010-07-03 3 3: @ @- a A A: aI aU E E2 E: e: EI i I @@ -89,7 +89,7 @@ n N p pF r s S t tS ts v w x z Z -Dictionary el_dict +Dictionary el_dict 2008-12-16 @ @- a aI e i o oI u @@ -100,7 +100,7 @@ n^ p Q r R s s; t T ts v x z z; -Dictionary en_dict +Dictionary en_dict 2010-07-13 0 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI@ aU @@ -116,7 +116,7 @@ s S t T t2 tS v w x z Z -Dictionary eo_dict +Dictionary eo_dict 2010-05-19 @- a aI aU e eI eU i o oI u uI @@ -127,18 +127,18 @@ s S t T tS ts v w x z Z -Dictionary es_dict +Dictionary es_dict 2010-07-13 a aI aU e E eI eU i o O oI u * ** : b B d D f g j J J^ k l m n -N n^ p Q R R2 s t -T tS v v# w x z +N n^ p Q R R2 s S +t T tS v v# w x z -Dictionary fi_dict +Dictionary fi_dict 2009-05-01 & &i &y a a2 ai au e ei eu ey i I ie iu iy @@ -150,11 +150,11 @@ l m n N p r s S s2 t v w Z -Dictionary fr_dict +Dictionary fr_dict 2010-07-18 @ @- a A~ e E E2 E: -E~ i I o O o2 o3 O~ -u u: w W W~ y Y +E~ i I o O o3 O~ u +u: w W W~ y Y - : b d dZ f g h j k l m n N n2 n^ @@ -162,7 +162,7 @@ p p2 r r2 s S t t2 t3 tS v z Z z2 z3 -Dictionary grc_dict +Dictionary grc_dict 2008-03-03 a aI aU e E EI eU EU i o O oI OI OU u y @@ -173,7 +173,7 @@ l m n N p R s t T v x z -Dictionary hbs_dict +Dictionary hbs_dict 2008-12-17 & @ @2 a A a: aI aU e E e: i I i: l- o @@ -185,7 +185,7 @@ N n^ p r R R2 s S t tS ts tS; v x z Z -Dictionary hi_dict +Dictionary hi_dict 2009-11-24 @ @- @2 @3 a a: aI aU e E e: E: E~ i I i: @@ -200,7 +200,7 @@ r. s S s. t T t. th th. v w x z -Dictionary ta_dict +Dictionary ta_dict 2010-07-18 a a: aI aU e E e: i I i: o o: u U u: U: @@ -213,7 +213,7 @@ s S s. t T t. th tS v w z z. -Dictionary hy_dict +Dictionary hy_dict 2008-12-22 @ a aI e eI i i@ o u W y @@ -224,7 +224,7 @@ p# r R r" s S t t# tS ts ts# v X z Z -Dictionary id_dict +Dictionary id_dict 2010-01-07 @ a aI aU e E E2 i o O u @@ -235,7 +235,7 @@ r R R2 s S t tS v w x z -Dictionary is_dict +Dictionary is_dict 2010-04-05 @- a a: aI aI: aU aU: E E: eI eI: i I i: I: O @@ -249,7 +249,7 @@ n^# p Q r R r# R2 s S s2 t T tl# v x z -Dictionary it_dict +Dictionary it_dict 2009-04-03 @- a a/ aI aU e E eI i I o O u @@ -260,7 +260,7 @@ n^ p r R s S t tS ts v w w2 z -Dictionary jbo_dict +Dictionary jbo_dict 2010-02-16 @ a aI aU e eI i l- n- o oI r- u @@ -270,7 +270,7 @@ l m n N p R s S t tS v w x z Z -Dictionary ku_dict +Dictionary ku_dict 2008-04-14 8 a e E E# eI eU i I o u U y @@ -281,7 +281,7 @@ q r R s S t tS v w x z Z -Dictionary la_dict +Dictionary la_dict 2008-01-15 @- a a: aI aU E e: EU I i: O o: OI U u: y @@ -292,7 +292,7 @@ g h j k l m n N p r R s t w z -Dictionary lv_dict +Dictionary lv_dict 2010-03-12 a a: ai au e e: ei i i: ie iu o o: u u: ui @@ -304,7 +304,7 @@ n^ p r R R2 s S t tS ts v z Z -Dictionary mk_dict +Dictionary mk_dict 2007-12-19 & @ @- @2 a A a: e E e: i I i: l- o o: @@ -316,7 +316,7 @@ N n^ p r R s S t tS ts tS; v x z Z -Dictionary nci_dict +Dictionary nci_dict 2010-01-20 a e i o O @@ -325,19 +325,19 @@ k l m n p R s S t tS v w x -Dictionary nl_dict +Dictionary nl_dict 2010-07-18 8 @ @- A a: A~ E e: EI eU i I O O: o: u VU Wy y Y: yU -* : ; b d f g h -j k l m n N n^ p -Q r s S t tS v v# -w x z +* : ; b d D f g +h j k l m n N n^ +p Q r s S t tS v +v# w x z Z -Dictionary no_dict +Dictionary no_dict 2010-01-20 @ @2 a A a: A: AI aI aU E E: e: I i: O o: @@ -349,7 +349,7 @@ k l m n N p r R s S s; t v w x z -Dictionary pap_dict +Dictionary pap_dict 2009-05-02 a a/ aI e E eI i o O u y Y @@ -360,7 +360,7 @@ R s S t tS v w x z Z -Dictionary pl_dict +Dictionary pl_dict 2009-10-19 a E E# E~ i O O~ u y @@ -372,7 +372,7 @@ s; S; t t; tS ts tS; v w x z Z Z; -Dictionary pt_dict +Dictionary pt_dict 2010-07-03 & &/ &U~ &~ @ @- a A aI aU e E eI EI eU EU @@ -386,7 +386,7 @@ S s# s; t T tS ts v w x z Z -Dictionary ro_dict +Dictionary ro_dict 2010-03-12 @ @- @I @U a aI aU e ea eI eo eU i i/ I^ iI @@ -401,7 +401,7 @@ ts; v v; w w2 x z Z z; Z; -Dictionary ru_dict +Dictionary ru_dict 2010-03-13 8 @- a A e E E# E2 E3 i I I# I2 I3 I^ ja @@ -415,7 +415,7 @@ t; ts tS; v x z Z z; Z; -Dictionary sk_dict +Dictionary sk_dict 2010-03-12 & @- a a: e e: i i: l- l: o o: oU r- r: u @@ -428,7 +428,7 @@ S t t; tS ts v x z Z -Dictionary sq_dict +Dictionary sq_dict 2008-12-22 @ @/ a A a/ aI e E eI i I I# O OI u V @@ -441,7 +441,7 @@ R2 s S t T tS ts v w z Z -Dictionary sv_dict +Dictionary sv_dict 2010-05-28 8 @ a A: E E- e: E: I i: O o: U u- u: W @@ -452,7 +452,7 @@ k l m n N p R s S s. S; sx t v w z -Dictionary sw_dict +Dictionary sw_dict 2008-11-27 @- a a/ e i m- n- N- o u @@ -463,10 +463,10 @@ p Q R s S t T tS v w x z -Dictionary sl_dict +Dictionary sl_dict 2010-07-14 -& @ a e E i o O -u y +@ a a: e E e: i i: +o O o: u u: y : b d dZ dz f g h j k l l^ m n N n^ @@ -474,7 +474,7 @@ p R R^ s S t tS ts v w x z Z -Dictionary tr_dict +Dictionary tr_dict 2010-06-02 @ a e E i I o O u U W y Y @@ -485,7 +485,7 @@ p Q r R s S t tS v w z Z -Dictionary vi_dict +Dictionary vi_dict 2010-05-11 @ @: @:I @:U @I @U a a: a:I a:U aI aU e E eU EU @@ -498,7 +498,7 @@ p Q r s s. t t[ tS; v w x z Z z. -Dictionary zh_dict +Dictionary zh_dict 2010-06-29 @ @r a A ai Au E ei i i. i[ iA iE io iou N- @@ -512,7 +512,7 @@ S; t th ts ts. ts. tS; tS; tsh v w x X z. -Dictionary zhy_dict +Dictionary zhy_dict 2009-01-19 a aa aai aan aau ai au e ei eo eoi eu i iu o oe @@ -523,7 +523,7 @@ l m n N p r s t tS v w z -Dictionary am_dict +Dictionary am_dict 2010-01-17 @ a e i o u y @@ -531,7 +531,7 @@ b d h l m q R s S t tS -Dictionary ml_dict +Dictionary ml_dict 2009-10-10 a a: aI aU e E e: i I i: o o: r- u u: V @@ -545,7 +545,7 @@ S; t t. th th. tS v w z z. -Dictionary ne_dict +Dictionary ne_dict 2008-12-16 @ @/ @2 @3 a aI aU a~ e E eI eU e~ E~ i I @@ -561,7 +561,7 @@ s S s. t T t. th v w x z z. -Dictionary pa_dict +Dictionary pa_dict 2009-11-24 @ a a~ e E e~ E~ i I i~ I~ o O O~ o~ r- @@ -575,7 +575,7 @@ s S t t. th th. v x z -Dictionary prs_dict +Dictionary prs_dict 2009-12-01 @ A E eI i o u @@ -584,7 +584,7 @@ k l m n p r R s S t tS v w X z Z -Dictionary rw_dict +Dictionary rw_dict 2008-03-27 a e i o u @@ -594,7 +594,7 @@ N n^ p q R s S S; t tS v w x z -Dictionary ur_dict +Dictionary ur_dict 2009-12-02 @ a a: aI aU E e: i I i: O o: U u: @@ -607,7 +607,7 @@ s. t T t. th th. v x z Z z. -Dictionary bg_dict +Dictionary bg_dict 2010-05-19 @ a e i o u @@ -617,7 +617,7 @@ n^ p r s S s; t t; tS ts v x z Z z; -Dictionary nso_dict +Dictionary nso_dict 2010-05-26 @ a e i m- n- N- o u @@ -628,7 +628,7 @@ N n^ p Q r R R3 s S t T tS v w x z -Dictionary ht_dict +Dictionary ht_dict 2010-06-29 a A~ e E E~ i o O O~ u w y diff --git a/dictsource/en_list b/dictsource/en_list index ca61ca4f..e854ce3a 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -3015,6 +3015,7 @@ has haz $allcaps hath %haT $pastf $only had %ha#d $pastf $strend2 $only had ,had $atend +(had to) h%adt@5 (had to) hadtu: $atend (had been) %ha#d%bIn $pastf having ,havI2N $strend2 $pastf $only @@ -3047,7 +3048,7 @@ didn't dIdnt $verbf done dVn make m,eIk $strend2 $only -made m,eId $strend2 $only +made m,eId $strend2 $only $u+ putting pUtI2N put ,pUt $onlys $strend2 diff --git a/dictsource/en_rules b/dictsource/en_rules index a95912af..aa4da05b 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -2440,6 +2440,7 @@ for (bid f@ for (bad f@ for (see f%O@ + for (ward f'o@ // straightforward ft (en f .group g diff --git a/dictsource/es_list b/dictsource/es_list index 6bc23d48..bc796fb9 100644 --- a/dictsource/es_list +++ b/dictsource/es_list @@ -83,28 +83,28 @@ _5 T'inko _6 s'eIs _7 sj'ete _8 'OtSo -_9 nw'eve +_9 nw'eBe _1X dj'ET _11 'OnTe _12 d'oTe _13 t**'eTe _14 kat'ORTe _15 k'inTe -_20 v'eInte -_2X v'eInt +_20 b'eInte +_2X b'eInt _3X t**'eInta _4X kwa*'Enta _5X Tinkw'Enta _6X sEs'Enta _7X sEt'Enta _8X OtS'Enta -_9X nOv'Enta +_9X nOB'Enta _0C Tj'EntOs _1C0 T'ien // exactly one hundred _1C T'iento _5C kinj'EntOs _7C s,eteTj'EntOs -_9C n,OveTj'EntOs +_9C n,OBeTj'EntOs _0M1 m'il _1M1 m'il // no '1' before thousand _0M2 miJ^'ones @@ -119,7 +119,7 @@ _0and i _dpt koma //_roman Rom'ano -vi vi // not a Roman number +vi bi // not a Roman number // articles @@ -381,8 +381,6 @@ _a a a a $atend _o o o o $atend -v uve -x Ekis _y ,ig**'iEQa y ,ig**'iEQa $atend ch tSe diff --git a/dictsource/es_rules b/dictsource/es_rules index 7272dc6d..a3344f1b 100644 --- a/dictsource/es_rules +++ b/dictsource/es_rules @@ -5,8 +5,11 @@ // ?1 Castilian // ?2 Latin America -.L01 j w l r d g n m +.L01 j w l r b d g n m p t k c .L02 b d g n m // change [s] to [z] before these +.L03 f h j s y z // allow [B] [D] [Q] before these consonants +.L04 b v f p // labials, nasals are [m] +.L05 g k // velars, nasals are [N] .group a a a @@ -18,11 +21,13 @@ .group b - b B - _) b b + b b + _) b b // phoneme definition may change it to [B] + b (A B + b (cY B + b (L03 B m) b b n) b b - b (L01 b b (iA b b (uA b @@ -33,10 +38,14 @@ .group d - d D - _) d d + d d + _) d d // phoneme definition may change it to [D] + d (A D + d (cY D + d (L03 D m) d d n) d d + l) d d r) d d @@ -58,12 +67,14 @@ .group g - g Q - _) g g + g g + _) g g // phoneme definition may change it to [Q] + g (A Q + g (cY Q + g (L03 Q m) g g n) g g g (Y+ x // ge gi - g (r g .group h @@ -92,18 +103,23 @@ ?2 A) ll (A j: + .group m m m + m (K n + m (L04 m + m (_L04 m + m (L05 N + m (_L05 N + m (j N .group n n n - n (b m - n (v m - n (f m - n (p m - n (g N // ?? - n (k N // ?? + n (L04 m + n (_L04 m + n (L05 N + n (_L05 N n (j N @@ -121,6 +137,10 @@ .group p p p p (t p: + _) ph f + ph (K f + _) ps (ico s + _) ps (eudo s .group q @@ -145,10 +165,15 @@ .group s s s &) s (_S1 s + _) s (C Es + _) sh S + sh (K S .group t t t + _) th T + th (K T .group u @@ -163,7 +188,7 @@ .group v v B - _) v v# + _) v b ?1 m) v b ?1 n) v b ?1 v (L01 b diff --git a/dictsource/fr_list b/dictsource/fr_list index d6678484..f0b16f26 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -24,7 +24,7 @@ // 2006-11-18 Gilles Casse // -// Updated 2010-06-22 Michel Such +// Updated 2010-07-16 Michel Such // // * Numbers, a few abbreviations and exceptions. // @@ -111,12 +111,12 @@ _" gijmE2 _# djEz _' apostr'Of -_( 'uvr@-parA~t'Ez -_) f'Erm parA~t'Ez +_( parA~tEz_goS +_) parA~tEz_drwat _, virgyl _- tirE2 _. _|pw%E~ -_/ bar||oblik +_/ barOblik _: d'Y||pw'E~ _; pwE~||virg'yl _< E~feriWr @@ -124,15 +124,15 @@ _= egal _> syperiWr _? pwE~||dE~tE2rogasj'O~ _! pwE~||dEksklamasj'O~ -_[ uvr@-_kroSE2 -_\ b'aksl'aS -_] f'Erm_kroS'E2 +_[ krOSE2_goS +_\ barOblik_E~vErse +_] krOSE2_drwa _^ sirkO~flEks __ sulin^e _` aks'A~_gr'av -_{ uvr_akolad +_{ akOlad_goS _| bar_vErtik'al -_} f'Erm_akol'ad +_} akOlad_drwat ² pyis'A~s||d'Y _« uvre||gijm'E2 _» fErme||gijm'E2 @@ -165,9 +165,9 @@ _& _e_komErsi'al // numeric -_0 zero2 $u+ +_0 zero $u+ _1 W~ -_2 d@z2 +_2 dYz2 _3 trwaz2 _4 katr _5 sE~k @@ -179,7 +179,7 @@ _10 diz3 _11 _|O~z _12 duz _13 trEz -_14 katorz +_14 katOrz _15 kE~z _16 sEz _17 disEt @@ -214,6 +214,7 @@ _0M2 miljO~ _0M3 miljar _0and e _dpt virgyl +_roman rom'E~ //some numbers have special pronunciation in Belgium and Switzerland ?2 _7X sEptA~t @@ -250,7 +251,7 @@ cci $abbrev cia $abbrev cio $abbrev cm centimètre $text -collins kolins +collins kOlins cpu $abbrev ctrl _::kO~trOl dept depart@mA~ @@ -303,7 +304,7 @@ pci $abbrev pcmcia $abbrev pda $abbrev philips filips -p.s postskriptom +p.s pOstskriptOm qq quelque $text qqs quelques $text ratp $abbrev @@ -370,7 +371,7 @@ avant $u+ après aprEz2 $u+ (temps en temps) tA~zA~tA~ ainsi $u+ -alors alor $u+ +alors alOr $u+ aussi $u+ encore $u+ enfin $u+ @@ -380,7 +381,7 @@ lors $u+ certes $u+ dont dO~t2 $u -lorsque lorsk=@ $u+ +lorsque lOrsk=@ $u+ puisque pyisk=@ $u+ presque prEsk=@ $u+ que $u+ @@ -423,16 +424,16 @@ ce $u+ $nounf ceci $u+ $verbf cela $u+ $verbf voici $u+ -voila $u+ +voilà $u+ cet $u $nounf cette $u $nounf ces sez2 $u $nounf -(celle ci) sEl||si $verbf -(celle la) sEl||la $verbf -(ceux ci) sY||si $verbf -(ceux la) sY||la $verbf -(celles ci) sEl||si $verbf -(celles la) sEl||la $verbf +(celle ci) sEl||si $verbf $u+ +(celle là) sEl||la $verbf $u+ +(ceux ci) sY||si $verbf $u+ +(ceux là) sY||la $verbf $u+ +(celles ci) sEl||si $verbf $u+ +(celles là) sEl||la $verbf $u+ plupart $u+ // possessives @@ -465,7 +466,7 @@ du $u $nounf des dez2 $u $nounf -//à a $u +à a $u+ au $u $nounf aux $u $nounf @@ -519,7 +520,7 @@ oui _|wi $u+ quand kA~t2 $u+ quoi $u+ où $u+ -comme kom $u+ +comme kOm $u+ comment $u+ pourquoi $u+ pourtant $u+ @@ -656,17 +657,17 @@ buffer bYfYr bus bys bus by $verb cancer kA~sEr -canyon kanjon +canyon kanjOn charles Sarl (chef d'oeuvre) chédeuvre $text (chef d'oeuvres) chédeuvres $text -choeur kYr +choeur kWr cinema sinema -cocus koky +cocus kOky couscous kuskus delete _^_en dernier dErnjer2 -doppler doplEr +doppler dOplEr dot dOt éloquent elokA~t2 enfer A~fEr @@ -676,24 +677,24 @@ fier fjer $verb for $u+ francis frA~sis fred frEd -free frI +free frI: fuel fjul gangster gA~gstEr gars ga genesis Zenezis -georges ZorZ +georges ZOrZ gilles Zil gin dZin -gulf gYlf +gulf gWlf gus gys gym Zim hélas elas $u+ jacques Zak -karaoke karaoke +karaoke karaOke kevin kevin laetitia letisja laser lazEr -listbox listboks +listbox listbOks louis lwi malus malys mai mE2 @@ -714,10 +715,10 @@ pataquès patakEs patchwork patSwWrk peter pItWr phallus falys -polder poldEr +polder pOldEr premier pr@mjer2 program _^_en -(program files) programfajlz +(program files) prOgramfajlz query kueri queries kueri quid kwid $u+ @@ -761,7 +762,7 @@ azimut azim'yt brut br'yt but by $verb but byt -cut kYt +cut kWt mazout mazut michael mikaEl out aut @@ -769,14 +770,14 @@ rut ryt scorbut scorbutt $text scout skut stout staut -uppercut ypErkyt +uppercut ypErkWt ut yt zut zyt // et (t is said) -exocet E2gzosEt +exocet E2gzOsEt fret fr'Et budget bydZE2 hamlet _|amlEt @@ -784,7 +785,7 @@ knesset knesEt lazaret lazarE2 margaret margarEt net nEt -offset ofsEt +offset OfsEt set sEt soviet soviEt stewart stIwart @@ -796,7 +797,7 @@ yoghourt _|iogurt yogourt _|iogurt // ort (t said) -short Sort +short SOrt // art (t said) steward stiwart @@ -806,8 +807,8 @@ kart kart smart smart // irt -(sweat shirt) swEtSYrt -(sweat shirts) swEtSYrt +(sweat shirt) swEtSWrt +(sweat shirts) swEtSWrt (tee shirt) t,IS'Wrt (tee shirts) t,IS'Wrt (t shirt) t,IS'Wrt @@ -821,7 +822,7 @@ and _^_en amazon amaz'On apple _^_en at at $u+ -(audible manager) od,ibl||manadZ'Yr +(audible manager) od,ibl||manadZ'Wr bin bin bit bit bluetooth blut'us @@ -830,13 +831,13 @@ computer _^_en debian debjan edit _^_en emacs E2maks -emacspeak E2makspIk +emacspeak E2makspI:k end _^_en -espeak @spIk +espeak @spI:k ethernet etErnEt exit egzit (file zilla) f,ajl||zij'a -from frOm $u +from frOm $u+ get _^_en google gug=Wl gnome gnOm @@ -847,7 +848,7 @@ hot _^_en in in $u+ inside _^_en internet E~tErn'Et -(internet explorer) E~tErn'Et||E2ksplor'Wr +(internet explorer) E~tErn'Et||E2ksplOr'Wr klaxon klaksOn let _^_en lite _^_en @@ -889,7 +890,7 @@ heurtions _|WrtjO~z2 partions partjO~z2 rations ratjO~z2 $verb tentions tA~tjO~z2 -votions votjO~z2 +votions vOotjO~z2 étions etjO~z2 évitions evitjO~z2 @@ -908,6 +909,7 @@ bayeux bajY bélarus belarys belize beliz bissau bisa'o +brazzaville brazavil (burkina faso) burkina||faso burundi burundi calvados calvadoss $text @@ -919,8 +921,8 @@ guatemala gwatemala hindi _|indi honduras _|O~dyras kenya kenja -laos laos -lesotho lezoto +laos laOs +lesotho lezOto liechtenstein liStWnStajn angeles A~nZelEs malawi malawi @@ -930,10 +932,10 @@ montserrat mO~sera nevis nevis niger niZEr oman oman -palaos palaos +palaos palaOs samoa samoa swaziland swazilA~d -leone leon +leone leOn koweït kowEjt taïwan tajwan texas tE2ks'as @@ -944,3 +946,4 @@ venezuela venezy-E2la wallis walis futuna futuna zimbabwe zimbabwe + diff --git a/dictsource/fr_rules b/dictsource/fr_rules index 6252585b..438fb197 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -1,1462 +1,1477 @@ -// French translation rules for Espeak - -// *************************************************************************** -// * Copyright (C) 2005 to 2010 by Jonathan Duddington * -// * email: jonsd@users.sourceforge.net * -// * * -// * This program is free software; you can redistribute it and/or modify * -// * it under the terms of the GNU General Public License as published by * -// * the Free Software Foundation; either version 3 of the License, or * -// * (at your option) any later version. * -// * * -// * This program is distributed in the hope that it will be useful, * -// * but WITHOUT ANY WARRANTY; without even the implied warranty of * -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -// * GNU General Public License for more details. * -// * * -// * You should have received a copy of the GNU General Public License * -// * along with this program; if not, see: * -// * . * -// ***************************************************************************/ - -// This file is UTF-8 encoded - -// 2006-11-18 Gilles Casse -// -// Updated: 2010-06-29 Michel Such -// - -// Letter classes: -// A all vowels: a e i o u y â ä é ê è î ï ô ö ù û -// C all consonants -// Y front vowels: e i y é ê è î -// K not a vowel (i.e. consonant, space, ) - -.replace -œ oe -î i -à a - - -.L01 d e l n r t u -.L02 b c d f g h k p t v -.L03 d l m n s t v -.L04 c d f g l m n v -.L05 g h k l m v w -.L06 l r s - - -.group a - ae (_ e // reggae vitae - aen A~ // caen (diff Cicero: aA~) - ae aE // maestro - aim (K E~ // faim - ain (K E~ // pain - Ct) ain (_ E~n2 // certain ami - ch) ain (_ E~n2 // prochain arret - ai (_ e // dirai ferai... - _ess) ai (_ E2 // essai - _vr) ai (_ E2 // vrai - ai (b E // faible - ais (_ E2z2 // dirais ferais... - ait (_ E2t2 // dirait ferait... - aient (_ E2t2 // diraient feraient... - f) ai (sA @ // faisons faisan - a (ilK a - aie (me E2 // paiement - ai E // aile - ai (L06 E // aile - ai (CAX E // aile - am (b A~ // jambon - am (p A~ // camp - am (m a // programmation - _) am (n am // amnistie - am (n a // condamner - - _L04) an (_ an - an (n_ a - _h) an (_ an - _) anti (@@P4 A~ti - _) anti (CAXP4 A~ti - _) arché (@P5 arke // archéologue - _) archéo (@P6 arkeo // archéologue - _) arch (aP4 ark // archange - _) arch (oP4 ark // archonte - _) anarcho (@P7 anarko // anarchosyndicalisme - - a (nnA a // manne - an (K A~ // ancien, élan - an (h an - @@m) an (_ an // tennisman - zm) an (_ an // jazzman - L02m) an (_ an - lism) an (_ A~ // talisman - ulm) an (_ A~ // musulman - _caïm) an (_ A~ // caïman - _C) aon (_ A~ // faon, paon, taon - s) aoul (_ u // saoul - s) aou (le u // saoule - août ut // août - août (i aus // aoûtien - aut (_ ot2 - a (ô // saune - au o2 // au, aux - aud (_ o // chaud -_C) aud (_ o2d // Maud - au (l_ o // Paul - au (re_ o // dinosaure - _) audio (@P5 o2dio - _) auto (@P4 o2to - _) autom (n otO - bb) aye (X ei // abbaye - ay (C E // aymé - ay Ej // paye - ay (_ E2 // display - Xl) ayer (X E2jWr // player, layer - h) am (_S2 am - w) an (_ an - a a // bateau - -// group a: English section - sm) all _^_en // small, smaller - a (wC _^_en - - -.group b - bb b // abbé - om) b (_ // plomb applomb - b b // aube - -// group b: English section - back _^_en - bbl _^_en - bird _^_en // bird - board _^_en // board, keyboard - box (_ _^_en // box, inbox, outbox - bugg _^_en // debugger - _) by _^_en // by, bye, bypass - - -.group c - _) c' (P2v s // s - cch k // bacchanale - cc (Y ks // accéder - cc k // occuper - _) c (d se - _) ch (arism k // charisme, charismatique - _) ch (irop k // chiroptère - a) ch (_ k // almanach - ar) c (ti // arctique - e) ch (_ k // varech - ni) ch (_ k - _A) ch (o_ k // écho - mani) ch (é k // manichéisme - wi) ch tS // sandwich - mito) ch (o k // mitochondrie - _eu) ch (ari k // eucharistie - or) ch (esC k // orchestre - or) ch (iC k // orchidée - _) ch (ao k // chaos, chaotique - _) ch (orA k // chorale - _) ch (oriz S - _) ch (oro S - ch (r k // chrétien - _) chrono (@P6 krono - ch (l k - ch (n k - ch (s k - ch (to k - ch S // chien - ck k // nickel - cqu k // grecque - cq k // pecq - s) c (Y - x) c (Y - c (Y s // cède - _) cyber (P5 sibEr - Can) c (_ // banc - Con) c (_ // tronc, jonc - _don) c (_ k // donc - cler) c (_ // leclerc - tchou) c (_ - taba) c (_ - toma) c (_ - se) c (ond g // seconde secondaire - c k // recoin donc - - cient (_ sit2 // ils appr�ient, remercient. - effi) cient sjA~ // coefficient - défi) cient sjA~ // déficient - cast (_S4 kast // podcast - casts (_S5 kast // podcasts - _) clown klun - -// group c: English section - n) ch (_ _^_en // french - ch (ment _^_en // attachment - cut (_ _^_en // cut, shortcut - - -.group ç - - ç s // rançon - _) ç' (P2v s - - -.group d - dd d // addition - _) d' (P2 d - _ban) d (_ d - _lan) d (_ d // land - _stan) d (_ d // stand - an) d (_ - _san) d (_ d - - _gran) d (_ t2 // grand ami, grand marchand - Cen) d (_ t2 - Con) d (_ - con) d (_ t2 - quen) d (_ t2 - r) d (_ - _har) d (_ d - lor) d (_ d - oi) d (_ - ou) d (_ - - dt (_ t // Schmidt - _ni) d (_ // nid - d d // don bled - _expé) dien (t_ djA~ // expédient -V_expé) dien (t_ di // expédient -_ingré) dien (t_ djA~ // ingrédient - dien (t_ di // étudient (verbe) - _) dendro (@P6 dE~dro - -// group d: English section - day (_ _^_en - _) devic _^_en - dle (X _^_en // bundle, handle - - -.group e - -// Define use of the final 'e' in french - e (_ - _C) e (_ @ // je te - -c) e (_ - -j) e (_ - C) e (- - - e (Ce_ E - eau o // bateau - g) ea (s_ a // mangeas - cap) e (la_ e - gh) e (tAX e // spagheti - j) e (a // Jean Jeanne - p) ect (_ E2 // suspect - ect (_ Ekt // direct - pi) ed (_ e // pied - _art) e (++ e // arte, artefact - _cl) ef (_ e // clef - _cr) e (at e - _) ein (K En // Einstein - ein (K E~ // peindre - pl) ein (_ E~n2 // plein emploi - e (il E // vieille - ei E // neige - eoi wa // asseoir - ell El // selle - el (K El // celsius, caramel - _f) em (me a // femme - i) e (mA // remerciement, d�ploiement - A) e (rA // remerciera - tch) e (rX Y - @) em (me a // patiemment - em (b A~ // décembre - em (mACC A~ // emmancher - em (mACAC A~ // emmagasiner - em (ma E2 // emmanuel - em (mai A~ // emmailloter - l) em (n a // solemnel - il) emn Em // dilemne - em (p A~ - en (_ A~n2 // en - en (hA A~n // enharmonique - _C) en (j E~ // benjamin - _flam) en (c E~ // flamenco - _) en (A A~n // enivrer - - C) en (d_ A~ // comprend dépend - od) en (dr E~ // rhododendron - qu) en (d_ A~ - - pati) en A~ // patient patience - en (nu A~ // ennui - en (nA E // penne ennemi - - é) en (_ E~ // européen - - Ci) en (nA E // mienne - - éC) en (t_ A~ // récent différent élément - équ) en (t_ A~ // fréquent, conséquent - étic) en (t_ A~ // réticent - - _C) en (t_ A~ // cent vent lent dent - cc) en (t_ A~ // accent - Asc) en (t_ A~ // luminescent - _dol) en (t_ A~ // dolent - ol) en (t_ A~ // somnolent, violent - Vol) en (t_ // somnolent, violent - Xol) ent (_ t2 // volent - eul) ent (_ t2 // veulent - ul) en (t_ A~ // turbulent - Ccul) ent (_ t2 - Vul) ent (_ t2 - imCoC) en (t_ A~ // impotent - inCoC) en (t_ A~ // innocent, indolent - -XACcid) en (t_ A~ // accident, occident - - _ag) en (t_ A~ // agent - _ard) en (t_ A~ // ardent - _arg) en (t_ A~ // argent - _urg) en (t_ A~ // urgent - V_urg) ent (_ t2 // urgent (verbe) - - _émin) en (t_ A~ // éminent - immin) en (t_ A~ // imminent - oémin) en (t_ A~ // proéminent - jac) en (t_ A~ // sous-jacent, adjacent - _lat) en (t_ A~ // latent - - ig) ent (_ t2 - ilig) ent (_ A~t2 - llig) ent (_ A~t2 - ndig) ent (_ A~t2 - tang) ent (_ A~t2 // tangent - @@ing) en (t_ A~ // astreingent, contingentindigent - - man) en (t_ A~ // permanent - _pat) en (t_ A~ // patent - rmam) en (t_ A~ // firmament - verg) en (t_ A~ // convergent, divergent - Vverg) ent (_ t2 // convergent, divergent (verbe) - - _serg) en (t_ A~ // sergent -CACCim) en (t_ A~ // condiment, gentiment - dim) en (t_ A~ // rudiment - Agim) en (t_ A~ // régiment - Alim) en (t_ A~ // poliment - inim) en (t_ A~ // infiniment - manim) en (t_ A~ // maniment - onim) en (t_ A~ // boniment - plim) en (t_ A~ // compliment - Atim) en (t_ A~ // bâtiment - _cim) en (t_ A~ // ciment - _pim) en (t_ A~ // piment - gm) en (t_ A~ // fragment - Asim) en (t_ A~ // quasiment - - ertin) en (t_ A~ // pertinent, impertinent - ontin) en (t_ A~ // continent, incontinent - _sArm) en (t_ A~ // sarment, serment - erm) en (t_ A~ // ferment - Vferm) ent (_ t2 // ferment, referment (verbe) - XArp) en (t_ A~ // arpent, serpent - CArr) en (t_ A~ // conncurrent, torrent - Cerr) ent (_ t2 // ils serrent -_appar) en (t_ A~ // apparent - spar) en (t_ A~ // transparent - _par) en (t_ A~ // parent - V_par) ent (_ t2 // parent (verbe) - _var) en (t_ A~ // varent - mitt) en (t_ A~ // intermittent - énit) en (t_ A~ // pénitent - tourm) en (t_ A~ // tourment - Cflu) en (t_ A~ // affluent, confluent - VCflu) ent (_ t2 // refluent, influent (verbe) - - _tal) en (t_ A~ // talent - ival) en (t_ A~ // équivalent - Vival) ent (_ t2 // équivalent (verbe) - xcell) en (t_ A~ // excellent -Vxcell) ent (_ t2 // excellent - - iCam) en (t_ A~ - mm) en (t_ A~ - em) en (t_ A~ // lentement - mom) en (t_ A~ // moment - Aaim) en (t_ A~ - Caim) en (t_ A~ - dum) en (t_ A~ - gum) en (t_ A~ - jum) en (t_ A~ - oCum) en (t_ A~ - rum) en (t_ A~ - - éCid) en (t_ A~ - VéCid) ent (_ t2 - Xtrid) en (t_ A~ - _flor) en (t_ A~ - _laur) en (t_ A~ -_mécont) en (t_ A~ - _cont) en (t_ A~ -_Vcont) ent (_ t2 - éC) en (t_ A~ // compétent - _souv) en (t_ A~ // souvent - Cud) en (t_ A~ - - _couv) en (tS3f A~ // le couvent -V_couv) en (t_ // elles couvent -s_couv) en (t_ // elles couvent - - ent (_ t2 // étaient mangent - A) ent (_ t2 // étaient mangent - - Ci) en (K E~ // rien, lien - Ci) en (c A~ // science - - AA) en (_ E~ - C) en (_ En // amen, abdomen, golden - C) en (to_ En // memento - nc) ens (_ A~ // encens - xam) en (_ E~ // examen - - en (s_ A~ - en (CA A~ // pentathlon - en (CC A~ // entre - sp) ens (_ Ens // suspens - éC) ens (_ A~z2 // dépens démens - - _C) er (_ Er // fer - _Ch) er (_ Er // cher - _env) er (_ Er - _hi) er (_ Er // hier - _fi) er (_ Er // fier - _hiv) er (X Er // hiver - Cst) er (X Er // hamster - _cart) er (X Er // carter - _cutt) er (X Er // cutter - tain) er (X Er // container - _ti) er (_ Er - ack) er (K Yr - ock) er (K Er - rock) er (K Yr - - er (_ e // parler léger - er (s_ e - - i) e (rt_ E // requiert - - d) e (ssus_ @ // dessus - - _d) es (bA e - _d) es (jA e // Desjardins - _d) es (nA e - _d) es (qA e // desquels - - _l) es (qA e // lesquels - - _m) es (dA e // mesdames - _m) es (nA e - Am) es (dA e - Am) es (nA e // Dumesnil - - d) esh (A ez // Deshormeaux - - _r) e (ss @ // ressembler - _r) e (ssu e // ressusciter - _r) e (stra @ - _r) e (stro @ - _r) e (stru @ // restructurer - -) est (_ Est // -est - - dg) et (_ Et // Bridget, gadget - k) et (_ Et - tick) et (_ E2 - m) et (_ Et2 - - eu Y // eu - _) eu (ss y // eu - - _) eut (_ yt2 - eut (_ Yt2 - _) extra (uP5 E2kstra - _) extra (CP5 E2kstra - _) eû y // eût - eû Y: // jeûne - - ey (_ E2 // dahomey - ey (C E2 // ceylan - ey Ej // asseye - - ez (_ ez2 // nez mangez chez - - g) e (A // mangeons - g) eu Y // vengeur - g) eu (re y // gageure - - _d) e (ch @ - _r) e (ch @ // recherche - e (Cl @ - - _l) e (xA E2 - _m) e (xA E2 - _l) e (CA @ - _l) e (ChA @ - _l) e (ClA @ // Leclerc - tr) e (CA @ - tr) e (ChA @ - - e (CC E // infect pelle mettre - e (Cr @ - _) e (C% e // effet, effectuer - e (C_ E - e (t_ E2 - e (rC E - es (_ z2 - - %C) e (xA E2 - - @gu) e (CA - @gu) er (A r - @qu) e (CA - @qu) er (A r - _qu) e (CA @ -@L06gu) e (CA @ -@L06qu) e (CA @ - @C) e (CA - @C) e (li @ - @ch) e (li @ - @C) er (A r - @C) e (rion++ @ - @C) e (riez++ @ - @ch) e (CA - @ch) er (A r - L06ch) e (CA @ - @L06C) e (CA @ - @CL06) e (CA @ - @bC) e (CA @ - @ct) e (CA @ - %C) e (CA++ - %C) er (A++ r - @C) e (xA++ E2 - @c) e (v++ @ - @d) e (v++ @ - - @C) e (CrA - @ch) e (CrA -@L06ch) e (CrA @ - @L06C) e (CrA @ - @L06C) e (rrA E - @CL06) e (CrA @ - %C) e (CrA++ - e (rr+++ E - - e @ // menue - _) e (CA e - _) e (xC++ E2 - Cr) eam Im - Cr) eamer ImWr - Cl) eaner InWr - vert) e (rX W - eï (K 'Ej - _y) en (_ En - iew) er (X er2 - _m) e (ga e - - -// group e: English section - eac _^_en - C) ead _^_en // read, head - eak _^_en // break, speak - eal _^_en // deal - ear _^_en // ear, search - eas _^_en // please - eave _^_en // leave - ed (_ _^_en - ee _^_en // meeting - efore (_ _^_en // before - eing (_ _^_en // being, boeing - eive _^_en // receive - eld (_ _^_en // field - _) enter (_ _^_en // enter - _) enhan _^_en - qu) est (_ _^_en // request - qu) este (X_ _^_en // requested, requester - _) even (X _^_en // forever, however - _) ever _^_en // forever, however - oC) ever _^_en // forever, however - _) eye _^_en - - -.group è - - Z) ème iEm - è E - ès (_ E - Ar) ès (_ Es - m) ès (_ Es - n) ès (_ Es - p) ès (_ Es - - -.group ë - u) ë // ambiguë - ë E // citroën noël - - -.group f - f f - f (f - _ner) f (X - _neu) f (_ans v // liaison: neuf ans - _neu) f (_heures v - -// group f: English section - _) fire _^_en - fly _^_en - _) frame _^_en - fter (_ _^_en - - -.group g - g g - g (Y Z - - su) gg (Y gZ // suggérer suggestif - gg g // agglomérer - ai) gni n^ // craignions châtaignier - gn nj // agneau -_wa) gner (_ gnEr - gni n^i // signifier - gn (e_ n^ - gn (_ n^ - gn (eCA nj@- - gn (ie n // compagnie - dia) g (no g - _a) g (no g -_quatrevin) gts (_ z2 - - vin) gt (_A t // liaison: vingt ans - - vin) gt (_un - vin) gt (_deux t - vin) gt (_trois t //liaison: vingt-trois - vin) gt (_quatr t - vin) gt (_cinq t - vin) gt (_six t - vin) gt (_sept t - vin) gt (_huit t - vin) gt (_neuf t - vin) gt (_neuvi t - - gt (_ // vingt doigts - An) gt (A t // vingtaine doigté - - gu (i g // anguille - ai) gui (l gyi // aiguillage - in) gui (s gyi // linguiste - g (C g - - _ran) g (_ // rang - _san) g (_ // sang - étan) g (_ // étang - _lon) g (_ // long - bour) g (_ // Strasbourg - - g (_ g // grog gag goulag - -// group g: English section - _) game (X _^_en - girl _^_en // girl - gy (_ _^_en - - -.group h - _) h _| - _) h (abi // habit, habilleur - _) h (allo // hallogène - _) h (ame // hameçon - _) h (andr // handroïde - _) h (arm // harmonie - _) h (el // hellène - _) h (ect // hectare - _) h (erb // herbe - _) h (é - _) h (éris _| - _) h (éro _| - _) h (eure // heure - _) h (iber // hibernation - _) hi (A _|j // hier - _) h (ippo // hippodrome - _) h (iro // hirondelle - _) h (ist // histoire - _) h (iv // hiver - _) h (omm // homme - _) h (onn // honneur - _) h (ô // hôpital - _) h (os // hostile - _) h (ora // horaire - _) h (orip // horipeau - _) h (oriz // horizon - _) h (oro // horoscope - _) h (orlo // horloge - _) h (orr // horreur - _) h (uil // huile - _) h (uiss // huissier - _) h (uitr // huître - _) h (umA // humain - _) h (umC // humble - _) hy (A j - haus (_ o2s //blockhaus - heim (_ ajm - _) h (y // hypermarché - _) hyper (@P5 ipEr - _) hyper (_ ipEr - _) hypra (@P5 ipra - h // ahuri - -// group h: English section - _) half _^_en - here (_ _^_en // here - - -.group i - i i // cri - - C) i (erA i - C) ien (t_ i - dév) ien (t_ i - t) ien (K_ jE~ // tient - v) ien (K_ jE~ // vient - at) ien (t_ jA~ // patient - cip) ien (C jA~ // récipient - cl) ien (C iA~ // client - mol) ien (C jA~ // émolient - vén) ien (C jA~ // inconvénient - or) ien (t iA~ // orient, orienter - ot) ien (t_ jA~ // quotient - - i (e_ i - _) i (ce@ aj // iceberg - _) ill il // illégal - ill (_ il // Bill - _C) ill (y_ il // Billy - aigu) ill ij // aiguille - anqu) ill il // tranquille - c) ill (i il - dist) ill il // distiller - _L05) ill il // Lille, mille, ville, william - osc) ill il // osciller - gu) ill ij // guillaume - qu) ill ij // quille - A) ill j // caillou - C) ill ij // famille - a) il (_ j // bail - e) il (_ j - gt) i (m aj - u) il (_ j // deuil - L01_f) ils (_ is // fils (enfant) - - imm imm // immaculé - im (_ im // karim - im (C E~ // timbre - w) in in // winrar - inct (_ E~ // distinct - in (h in // inhumain - in (kX iN // link - in (n i // innombrable - in (C E~ // vingt - in (_ E~ // vin - ing (_ iN - ing (h ing - ing (s iN - ing (to iN - _) infra (sP5 E~fra - _) inter (@@P5 E~tEr - _) interr (A E~tEr - _) inter (_ E~t'Er - _) inter (ne_ E~t'Er - _) intra (neP5 E~tra - _) intra (uP5 E~tra - C) is (_ i - Kir) is (_ is - bor) is (_ is - dor) is (_ is - tor) is (_ is - fl) irt Wrt - otl) i (neX aj - onl) i (ne_ aj - offl) i (ne_ aj - dr) i (ve aj - pr) int (_ int - -// group i: English section - ibuter (X _^_en - iev _^_en - ife (_ _^_en - igh _^_en - iven (_ _^_en - ind (X _^_en // find, mind - _C) ind (erX _^_en // finder - AC) ind (erX _^_en // reminder - ize (X _^_en // realize - _bAl) i (ze i - ram_f) i (le _^_en - -.group ï - ï i // naïf - A) ï (_ j - A) ïe (_ j - A) ï (lA j - - - ïn (K E~ // coïncidence - ma) ïs (_ is // maïs - - - -.group j - j Z // adjoint joujoux - _) j' (P2v Z - _) jazz dZaz - _) j (obK dZ - _) j (ohK dZ - _) jusqu' (P6 Zysk - - -.group k - k k // kafka - - -// group k: English section - ke (_ _^_en // make, take - ke (s_ _^_en // makes, takes - ke (rX _^_en // maker - ke (nX _^_en // taken - -.group l - l l // lit - ll l // aller - _) l' (P2 l - au) lt // hérault - uCi) l (_ // outil, fusil - nti) l (_ // gentil - nti) lh j // gentilhomme - ui) ll j // juillet - _) lorsqu' (P7 lorsk - -// group l: English section - less (_ _^_en // noiseless - _) live _^_en - @) loud (_ _^_en - ll (X _^_en - - -.group m - m m // film - mm m // pomme - _) m' (P2v m - _) mc (@P2 mak - _) ms (P2 EmEs - master (_S6 mastYr - -// group m: English section - _) mail (_ _^_en // mailer - mov (ieX _^_en // move, movy - - -.group n - n n // une - nn n - ng (_ N - ngh ng - - _) n' (P2v n - _wAC) ner (_ nEr - - _) n (_° nymero - _) neuro (@@P5 nYro - _) nvda (P4 Envedea - - -.group o - br) oc (_ o // broc - cr) oc (_ o // escroc - on (n o - ls) on (_ on - Cst) on (_ on - _) os (_ os - _v) os (gY o2 - s_) os (_ o - x_) os (_ o - o (t_ o - - oe (ll wa // moelleux - oe (i Y // oeil - _) oe (C Y // oesophage - _ph) oe (C e // phoetus - _ph) oe (n_ Y // phoen - oeu Y // voeu - oeud Y // noeud - oeufs (_ Y // oeufs boeufs - oeu (x Yz2 // voeux coeur - o (eC o // coefficient - _) oi (gnon o // oignons - oin (C wE~ - oin (_ wE~ // coin - oi wa // poil - oê (l wa // poêle - om (C O~ // bombe - om (m o // nommer - om (ni om // omnibus - n) om (X O~ // nom - om (_ om // www.web.com - s) om (n om - - on (K O~ // mon - on (t_ O~t2 // mont vont sont - _m) ont (pAC O~ // Montpellier - _m) ont (m O~ - _m) ont (rAal O~ // Montreal - onsh (A O~z // bonshommes - onh (A on // bonhomme - _) on (z _|O~ // onze, onzi�me - - _c) on (_ O~ // no comment - gt) on (_ On // Washington - Cst) on (_ On - ps) on (_ On - _C) on (_ O~n2 // mon appui, mon histoire, mon havre - - alc) oo (l o // alcool - z) oo o // zoo - z) oo (C oo // zoologue - z) oo (m u // zoom - _gal) op (_ o // galop - - _sir) op (_ o // sirop - - v) ost (_ o // Prévost - _C) oup (_ u // coup, loup - - - ou u // hibou brouillard - ou (in w // pingouin - oue (mA u // dvvouement - _) ou (at _|u // ouate - où u // où - oû u // coûter - oy (A waj // noyer voyelles - _b) oy (co oj // boycott - _c) oy (o oi // coyote - _y) o (y o - oy wa - o (_ o // zorro allégro - o (z_ o // berlioz - o o - _sC) ot ot - - -// group o: English section - oa (X _^_en // approach, load - oa (_ oa - oa (s_ oa - oa (CerX _^_en - oach _^_en - old (er_ _^_en // folder, older - C) oing (_ _^_en // going - oo (Ce _^_en // boomer - oo (k _^_en // book, cook - oo (st _^_en // booster - oo (X _^_en // pool - C) oot _^_en // bootable football - _) one _^_en - oun (C _^_en // bounce, found - _) over _^_en // over - ow (e _^_en // flower, power - ow (X _^_en - oy (X _^_en // boy, toy - - -.group ô - ôt (_ o2 // rôt - ô o2 // cône - - -.group p - p p // pas - _) para (pCP4 para - _) photo (@P5 foto - _) poly (@P4 poli - _) post (KP4 post - _) post (ACCP4 post - _) pseudo (@P6 psYdo - p (p // appliquer - pays pE2iz2 // pays, paysage - ph f // phrase - - m) ps (_ // temps champs - r) ps (_ // corps - - cham) p (_ // champ - - cam) p (_ // camp - - dra) p (_ // drap - _) psych (@P5 psik - _) psych (iCP5 psiS - _) psych (AA_P5 psiS - - ba) p (t // baptiser - com) p (t // compte - - C) pt (_ // prompt exempt - - se) pt (_ t // sept - se) pt (iè t // septième - scul) p (t // sculpture - _) puisqu' (P7 pyisk - -// group p: English section - pad (_ _^_en - plug _^_en // plug - printer (_ _^_en // printer - - -.group q - q k // coq - _) qu' (AP3 k - _) qua (d kwa // quadrature - _) qua (tA kwa // quaternaire - _) quan (tA kwA~ // quantique - _) qua (drill ka // quadriller - _a) qua kwa // aquarium - _a) qu (if ku // aquifère - _A) qui (dist kyi // équidistant - _A) qui (lat kyi // équilatéral - _C) qua kwa // squale square - _A) qua kwa // équateur - dé) qua kwa // adequate - _) qua (rtz kwa // quartz - qu k // quatre - _) que (_ k@ // que - n) q (_ k // cinq cent - -// group q: English section - quick _^_en // quick, quickly - - -.group r - - _su) rr rr // surréaliste - cou) rr rr // courrai - mou) rr rr // mourrai - cou) rr (i r // courrier - cou) rr (o r // courroie - r r // rien - rr r - _) radio (@P5 radio - -// group r: English section - _) real _^_en - resen _^_en - rst (_ _^_en - _) rule _^_en - - -.group s - s s // verser sien - - s (_S1 z2 - stein (_ Stajn - - _) s' (P2v s // s'amène - _) s' (esXP2v s // s'amène - sç s // immisça - sch (ie sk // schierzo - sch (iz sk // schizophrène - sch (ol sk - sch (oo sk - schu Su - - sch S // schéma - dé) sh (A z // déshabiller - sh S // shérif - ss s // assez - - ai) s (em s // vraisemblable - _al) s (ac z // Alsace - aCè) s (_ s - nè) s (_ s - kansa) s (_ s // Kansas, Arkansas - ub) s (is z // subsister - tran) s (A z // transition - tran) s (e s // transe - tran) s (ub s // transubstantiation - A) s (A z // baiser - A) s (oft s // microsoft - A) s (ol_ s // tournesol - _) socio (@P5 sosio - _) super (@@P5 sypEr - _) super (_ sypEr - _) supra (@P5 sypra - batro) s (_ s - océro) s (_ s - scien (t siA~ // conscient scientifique - sql (_S3 EskyEl - - _u) s (_ s - Cu) s (_ - Abu) s (_ s - _Abu) s (_ - mbu) s (_ s -_cACpu) s (_ s - Acu) s (_ s - docu) s (_ - écu) s (_ - asu) s (_ s - odu) s (_ s - gu) s (_ s - igu) s (_ // aigus - iu) s (_ s // radius - ïu) s (_ s // laïus - Culu) s (_ s // cumulus - plu) s (_ z2 // plus, surplus - ylu) s (_ s // stylus - mu) s (_ s - _mu) s (_ - ému) s (_ - opu) s (_ s // opus, octopus - Aru) s (_ s // virus - aru) s (_ // disparus - ouru) s (_ // courus - Anu) s (_ s // bonus, tonus - enu) s (_ // menus, venus - psu) s (_ s // lapsus - cessu) s (_ s // processus - - atu) s (_ s // stratus motus - ctu) s (_ s // cactus - etu) s (_ s - aitu) s (_ - itu) s (_ s - ltu) s (_ s // altus - otu) s (_ s // motus - Cutu) s (_ s - - _tou) s (_ s - - s (b z // sbire - s (d z - s (g z - s (j z - s (v z - _tou) s (_Ces_ - _tou) s (_des_ s - _tou) s (_Cos_ - _tou) s (_leurs_ - -// group s: English section - CA) sh (_ _^_en // punish - sh (_ _^_en - sh (Ap _^_en // shop, ship - sh (At _^_en // shut, shot - _) sky _^_en - _) smil _^_en // smile, smiley - spy _^_en - - -.group t - t t // bataille - _) t (_ te - -) t (- t2 - _) t' (P2v t - Vn) t (_ t2 - A) t (- t2 - VCi) t (_ t2 - t (_ - peti) t (_ t2 - _) th t // thon - ts (_S1 z2 // silent at end of word unless next word starts with a vowel - C) t (_ t // compost watt soft script malttact abrupt - ki) t (_ t // kit - n) t (_ - r) t (_ - - aul) t (_ // Renault - grani) t (_ t - - _) télé (@P4 tele - _) tele tele - _) thermo (@P6 tErmo - - tt t // attitude - - s) th (m // asthme - th t // théorie - hui) t (_ t3 // huit - - _) t t // tien tiers - an) t (ia t // Santiago - C) t (ieu s // contentieux - - t (io_ s // ratio - - Ama) t (ieX s // diplomatie - a) t (ia s // spatial - en) t (ia s // confidentialit� - lbu) t (iA s // balbutiait - r) t (ia s // impartial - ini) t (iA s // initier - p) t (ia s // nuptial - an) t (iat s // transsubstantiation - - t (ion s // programmation - V) t (ion t // verbes - ache) t (ion t // achetions, rachetions - ai) t (ion t // souhaitions, traitions - oi) t (ion t // boitions - si) t (ion s // position - chan) t (ion t // chantions, d�chantions - Cisi) t (ion t // visitions - ci) t (ions t // citions - comp) t (ions t // comptions, escomptions - CAnc) t (ion s // fonctionner, ponctionner - Ce) t (ions t // jetions, rejetions - Vec) t (ion t // respections - Vep) t (ion t // respections - éCi) t (ions t // hésitions, héritions - éti) t (ion s // pétition - Vé) t (ion t // répétions - habi) t (ions t // habitions - imi) t (ions t // imitions, limitions - VAu) t (ion t // ajoutions - lu) t (ion s // févolution - Apor) t (ion t // emportions, exportions - opor) t (ion s // proportion - Cpor) t (ion t // emportions, exportions - sor) t (ion t // sortions - rê) t (ion t // arrêtions, apprêtions - - s) t (ion t // gestion - _ta) t (ion t // tation - sen) t (ion_ t // sentions, ressentions - t) t (ion t // combattions - - t (iel s // partiel - t (ieu s // ambitieux - t (iAm s // patiemment - - mar) t (ien s // martien vénitienne - a) t (ien s - i) t (ien s - o) t (ien s - - ipé) t (ieX s - amé) t (ieX s - nu) t (ieX s // minutie - ni) tien (t_ si - bu) tien (t_ si - - cra) t (ieX s // démocratie - - ner) t (ie s // inertie - - _ce) t (_ t -_transA) t (_ t - -// group t: English section - C) th (_ _^_en // month - _) th (eX _^_en // the, then - _) th (aX _^_en // than, that - _) time _^_en - tle (_ _^_en - too _^_en - ttl _^_en - try (_ _^_en // try, country - sCar) t (_ _^_en // smart, start - sCar) t (er_ _^_en // starter - _) tun (AX _^_en - - -.group u - u y // cruel nuage brut - ui yi // nuit, fuite - uin (K yE~ // juin - _s) u (rfX Y - _bl) u (ff Y - _s) u (rfeX Y - uy (A yij - - C) ucci utSi // capuccino - c) ueill Yj // cueillir - c) ueil (_ Yj // recueil - _g) ua wa - ag) ua (X wa - Ctig) ua (_ wa - _c) ul (_ y - _) ultra (P5 yltra - g) u (ay u - g) ueill Yj // orgueilleux - haïk) u (X u - - C) u (bX Y // hub, club - C) u (gX Y // bug, mug - _n) u (rse Y // nurse - r) u (nX W // run, autorun - pr) unt (_ W~ // emprunt - um (_ Om // album - f) um (_ W~ // parfum - um (b W~ // humble - um (p W~ - un (C W~ // emprunt lundi - un (n y // tunnel - CC) un (_ W~ // brun - uc) un (_ W~n2 // aucun - un (_ W~n2 // un avion - _h) un (_ W~ // hun - - fl) ux (_ y // flux, reflux - g) u (A // fatigue - g) u (ï y // ambiguïté - g) u (ë y // ambiguë - uz (z Y - -// group u: English section - _b) usi _^_en // business, businessman - C) ui (ce _^_en // produice, juice - umber (_ _^_en - ump (_ _^_en - unch _^_en - under _^_en // under, understand, thunder - _C) un (_ _^_en - _C) un (ny _^_en - _) up (C _^_en // upper, update - up (_ _^_en // setup - urn (X _^_en // burn, turn - ust (_ _^_en // just, trust - - -.group ü - ü y - üs (_ ys - üm (_ om - ül (_ yll - - -.group v - v v - vers (_ vErz2 - dri) ver (X vYr - view (X vju - _) view (A vjuv - -// group v: English section - voice (X _^_en - void (_ _^_en - vy (_ _^_en - - -.group w - w w - _) w (A _|w - w (ag v // wagon - wa (ve_ wE:j // wave - wa (re_ wE: // hardware software - -// group w: English section - e) w (K _^_en - _) wan _^_en - wr _^_en // write - way _^_en // way, away - _) wir _^_en // wire - winn _^_en // winner - wise _^_en - with _^_en - wor _^_en - - -.group x - x ks - xx ks - _) x (A gz // xylophone - _) x (CP1 iks // xylophone - xml (_S3 _|iksEmEl - e) x (A gz // exagérer exemple - L03e) x (A ks // annexe, vexer - _ine) x (A gz - _e) x (h gz // exhumer - - ai) x (_ // voix paix prix - oi) x (_ - ri) x (_ - - _soi) x (A s // soixante - - Au) x (_ z2 // faux feux choux - - _au) x (quel // auxquels - - _di) x (_neuf z // liaison: dix-neuf - _di) x (_ z3 - _si) x (_neu s // liaison: six-neuf - _si) x (_ z3 - - di) x (iè z // dixième - si) x (iè z // sixième - deu) x (iè z // deuxième - - -.group y - y i // cryogénique myope - _) y (A _|j // yak - _) y (eu j // yeux - _) yacht _^_en // yacht, yachtman - - _) yahoo (P5 ja'u - ym (K E~ // tympan - y (nn i - y (nA i - X) ys (_ is - yx (_ iks - - yn E~ // laryngite - - -.group z - z z - t) z s // tzigane - t) zer (_ zEr - C) zer (_ zWr - - -.group -// accented characters, these could have their own groups if they need more rules - â a: - ñ n^ - - é e // été - ê E // fête - - ö o // angström - û y: // fûtes - ü y // bülcher - - -// symbols that are normally spoken when reading text - , (D pilk:u - $ dolar - ° d@gre - _n_) ° // n° - - - - - - - - - +// French translation rules for Espeak + +// *************************************************************************** +// * Copyright (C) 2005 to 2010 by Jonathan Duddington * +// * email: jonsd@users.sourceforge.net * +// * * +// * This program is free software; you can redistribute it and/or modify * +// * it under the terms of the GNU General Public License as published by * +// * the Free Software Foundation; either version 3 of the License, or * +// * (at your option) any later version. * +// * * +// * This program is distributed in the hope that it will be useful, * +// * but WITHOUT ANY WARRANTY; without even the implied warranty of * +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +// * GNU General Public License for more details. * +// * * +// * You should have received a copy of the GNU General Public License * +// * along with this program; if not, see: * +// * . * +// ***************************************************************************/ + +// This file is UTF-8 encoded + +// 2006-11-18 Gilles Casse +// Initial rules for French, imported from +// Cicero TTS: A Small, Fast and Free Text-To-Speech Engine. +// http://www.fluxnic.net/cicero +// +// Rules are now maintained by Michel Such +// Last update: 2010-07-16 Michel Such +// + +// Letter classes: +// A all vowels: a e i o u y â ä é ê è î ï ô ö ù û +// C all consonants +// Y front vowels: e i y é ê è î +// K not a vowel (i.e. consonant, space, ) + +.replace +œ oe + + +.L01 d e l n r t u +.L02 b c d f g h k p t v +.L03 d l m n s t v +.L04 c d f g l m n v +.L05 g h k l m v w +.L06 l r s + + +.group a + ae (_ e // reggae vitae + aen A~ // caen (diff Cicero: aA~) + ae aE // maestro + aim (K E~ // faim + ain (K E~ // pain + Ct) ain (_ E~n2 // certain ami + ch) ain (_ E~n2 // prochain arret + ai (_ e // dirai ferai... + _ess) ai (_ E2 // essai + _vr) ai (_ E2 // vrai + ai (b E // faible + ais (_ E2z2 // dirais ferais... + ait (_ E2t2 // dirait ferait... + aient (_ E2t2 // diraient feraient... + f) ai (sA @ // faisons faisan + a (ilK a + aie (me E2 // paiement + ai E // aile + ai (L06 E // aile + ai (CAX E // aile + am (b A~ // jambon + am (p A~ // camp + am (m a // programmation + _) am (n am // amnistie + am (n a // condamner + + _L04) an (_ an + an (n_ a + _h) an (_ an + _) anti (@@P4 A~ti + _) anti (CAXP4 A~ti + _) arché (@P5 arke // archéologue + _) archéo (@P6 arkeo // archéologue + _) arch (aP4 ark // archange + _) arch (oP4 ark // archonte + _) anarcho (@P7 anarko // anarchosyndicalisme + + a (nnA a // manne + an (K A~ // ancien, élan + an (h an + @@m) an (_ an // tennisman + zm) an (_ an // jazzman + L02m) an (_ an + lism) an (_ A~ // talisman + ulm) an (_ A~ // musulman + _caïm) an (_ A~ // caïman + _C) aon (_ A~ // faon, paon, taon + s) aoul (_ u // saoul + s) aou (le u // saoule + août ut // août + août (i aus // aoûtien + aut (_ ot2 + a (ô // saune + au o // au, aux + aud (_ o // chaud +_C) aud (_ od // Maud + au (l_ O // Paul + au (re_ o // dinosaure + _) audio (@P5 odio + _) auto (@P4 oto + _) autom (n otO + bb) aye (X ei // abbaye + ay (C E // aymé + ay Ej // paye + ay (_ E2 // display + Xl) ayer (X E2jWr // player, layer + h) am (_S2 am + w) an (_ an + a a // bateau + +// group a: English section + sm) all _^_en // small, smaller + a (wC _^_en + + +.group b + bb b // abbé + om) b (_ // plomb applomb + b b // aube + +// group b: English section + back _^_en + bbl _^_en + bird _^_en // bird + board _^_en // board, keyboard + box (_ _^_en // box, inbox, outbox + bugg _^_en // debugger + _) by _^_en // by, bye, bypass + + +.group c + _) c' (P2v s // s + cch k // bacchanale + cc (Y ks // accéder + cc k // occuper + _) c (d se + _) ch (arism k // charisme, charismatique + _) ch (irop k // chiroptère + a) ch (_ k // almanach + ar) c (ti // arctique + e) ch (_ k // varech + ni) ch (_ k + _A) ch (o_ k // écho + mani) ch (é k // manichéisme + wi) ch tS // sandwich + mito) ch (o k // mitochondrie + _eu) ch (ari k // eucharistie + or) ch (esC k // orchestre + or) ch (iC k // orchidée + _) ch (ao k // chaos, chaotique + _) ch (orA k // chorale + _) ch (oriz S + _) ch (oro S + ch (r k // chrétien + _) chrono (@P6 krono + ch (l k + ch (n k + ch (s k + ch (to k + ch S // chien + ck k // nickel + cqu k // grecque + cq k // pecq + s) c (Y + x) c (Y + c (Y s // cède + _) cyber (P5 sibEr + Can) c (_ // banc + Con) c (_ // tronc, jonc + _don) c (_ k // donc + cler) c (_ // leclerc + tchou) c (_ + taba) c (_ + toma) c (_ + se) c (ond g // seconde secondaire + c k // recoin donc + + cient (_ sit2 // ils appr�ient, remercient. + effi) cient sjA~ // coefficient + défi) cient sjA~ // déficient + cast (_S4 kast // podcast + casts (_S5 kast // podcasts + _) clown klun + +// group c: English section + n) ch (_ _^_en // french + ch (ment _^_en // attachment + cut (_ _^_en // cut, shortcut + + +.group ç + + ç s // rançon + _) ç' (P2v s + + +.group d + dd d // addition + _) d' (P2 d + _ban) d (_ d + _lan) d (_ d // land + _stan) d (_ d // stand + an) d (_ + _san) d (_ d + + _gran) d (_ t2 // grand ami, grand marchand + Cen) d (_ t2 + Con) d (_ + con) d (_ t2 + quen) d (_ t2 + r) d (_ + _har) d (_ d + lor) d (_ d + oi) d (_ + ou) d (_ + + dt (_ t // Schmidt + _ni) d (_ // nid + d d // don bled + _expé) dien (t_ djA~ // expédient +V_expé) dien (t_ di // expédient +_ingré) dien (t_ djA~ // ingrédient + dien (t_ di // étudient (verbe) + _) dendro (@P6 dE~dro + +// group d: English section + day (_ _^_en + _) devic _^_en + dle (X _^_en // bundle, handle + + +.group e + +// Define use of the final 'e' in french + e (_ + _C) e (_ @ // je te + -c) e (_ + -j) e (_ + C) e (- + + e (Ce_ E + eau o // bateau + g) ea (s_ a // mangeas + cap) e (la_ e + gh) e (tAX e // spagheti + j) e (a // Jean Jeanne + p) ect (_ E2 // suspect + ect (_ Ekt // direct + pi) ed (_ e // pied + _art) e (++ e // arte, artefact + _cl) ef (_ e // clef + _cr) e (at e + _) ein (K En // Einstein + ein (K E~ // peindre + pl) ein (_ E~n2 // plein emploi + e (il E // vieille + ei E // neige + eoi wa // asseoir + ell El // selle + el (K El // celsius, caramel + _f) em (me a // femme + i) e (mA // remerciement, d�ploiement + e (ro_ e // Cicero + A) e (rA // remerciera + tch) e (rX W + @) em (me a // patiemment + em (b A~ // décembre + em (mACC A~ // emmancher + em (mACAC A~ // emmagasiner + em (ma E2 // emmanuel + em (mai A~ // emmailloter + l) em (n a // solemnel + il) emn Em // dilemne + em (p A~ + en (_ A~n2 // en + en (hA A~n // enharmonique + _C) en (j E~ // benjamin + _flam) en (c E~ // flamenco + _) en (A A~n // enivrer + + C) en (d_ A~ // comprend dépend + od) en (dr E~ // rhododendron + qu) en (d_ A~ + + pati) en A~ // patient patience + en (nu A~ // ennui + en (nA E // penne ennemi + + é) en (_ E~ // européen + + Ci) en (nA E // mienne + + éC) en (t_ A~ // récent différent élément + équ) en (t_ A~ // fréquent, conséquent + étic) en (t_ A~ // réticent + + _C) en (t_ A~ // cent vent lent dent + cc) en (t_ A~ // accent + Asc) en (t_ A~ // luminescent + _dol) en (t_ A~ // dolent + ol) en (t_ A~ // somnolent, violent + Vol) en (t_ // somnolent, violent + Xol) ent (_ t2 // volent + eul) ent (_ t2 // veulent + ul) en (t_ A~ // turbulent + Ccul) ent (_ t2 + Vul) ent (_ t2 + imCoC) en (t_ A~ // impotent + inCoC) en (t_ A~ // innocent, indolent + +XACcid) en (t_ A~ // accident, occident + + _ag) en (t_ A~ // agent + _ard) en (t_ A~ // ardent + _arg) en (t_ A~ // argent + _urg) en (t_ A~ // urgent + V_urg) ent (_ t2 // urgent (verbe) + + _émin) en (t_ A~ // éminent + immin) en (t_ A~ // imminent + oémin) en (t_ A~ // proéminent + jac) en (t_ A~ // sous-jacent, adjacent + _lat) en (t_ A~ // latent + + ig) ent (_ t2 + ilig) ent (_ A~t2 + llig) ent (_ A~t2 + ndig) ent (_ A~t2 + tang) ent (_ A~t2 // tangent + @@ing) en (t_ A~ // astreingent, contingentindigent + + man) en (t_ A~ // permanent + _pat) en (t_ A~ // patent + rmam) en (t_ A~ // firmament + verg) en (t_ A~ // convergent, divergent + Vverg) ent (_ t2 // convergent, divergent (verbe) + + _serg) en (t_ A~ // sergent +CACCim) en (t_ A~ // condiment, gentiment + dim) en (t_ A~ // rudiment + Agim) en (t_ A~ // régiment + Alim) en (t_ A~ // poliment + inim) en (t_ A~ // infiniment + manim) en (t_ A~ // maniment + onim) en (t_ A~ // boniment + plim) en (t_ A~ // compliment + Atim) en (t_ A~ // bâtiment + _cim) en (t_ A~ // ciment + _pim) en (t_ A~ // piment + gm) en (t_ A~ // fragment + Asim) en (t_ A~ // quasiment + + ertin) en (t_ A~ // pertinent, impertinent + ontin) en (t_ A~ // continent, incontinent + _sArm) en (t_ A~ // sarment, serment + erm) en (t_ A~ // ferment + Vferm) ent (_ t2 // ferment, referment (verbe) + XArp) en (t_ A~ // arpent, serpent + CArr) en (t_ A~ // conncurrent, torrent + Cerr) ent (_ t2 // ils serrent +_appar) en (t_ A~ // apparent + spar) en (t_ A~ // transparent + _par) en (t_ A~ // parent + V_par) ent (_ t2 // parent (verbe) + _var) en (t_ A~ // varent + mitt) en (t_ A~ // intermittent + énit) en (t_ A~ // pénitent + tourm) en (t_ A~ // tourment + Cflu) en (t_ A~ // affluent, confluent + VCflu) ent (_ t2 // refluent, influent (verbe) + + _tal) en (t_ A~ // talent + ival) en (t_ A~ // équivalent + Vival) ent (_ t2 // équivalent (verbe) + xcell) en (t_ A~ // excellent +Vxcell) ent (_ t2 // excellent + + iCam) en (t_ A~ + mm) en (t_ A~ + em) en (t_ A~ // lentement + mom) en (t_ A~ // moment + Aaim) en (t_ A~ + Caim) en (t_ A~ + dum) en (t_ A~ + gum) en (t_ A~ + jum) en (t_ A~ + oCum) en (t_ A~ + rum) en (t_ A~ + + éCid) en (t_ A~ + VéCid) ent (_ t2 + Xtrid) en (t_ A~ + _flor) en (t_ A~ + _laur) en (t_ A~ +_mécont) en (t_ A~ + _cont) en (t_ A~ +_Vcont) ent (_ t2 + éC) en (t_ A~ // compétent + _souv) en (t_ A~ // souvent + Cud) en (t_ A~ + + _couv) en (tS3f A~ // le couvent +V_couv) en (t_ // elles couvent +s_couv) en (t_ // elles couvent + + ent (_ t2 // étaient mangent + A) ent (_ t2 // étaient mangent + + Ci) en (K E~ // rien, lien + Ci) en (c A~ // science + + AA) en (_ E~ + C) en (_ En // amen, abdomen, golden + C) en (to_ En // memento + nc) ens (_ A~ // encens + xam) en (_ E~ // examen + + en (s_ A~ + en (CA A~ // pentathlon + en (CC A~ // entre + sp) ens (_ Ens // suspens + éC) ens (_ A~z2 // dépens démens + + _C) er (_ Er // fer + _Ch) er (_ Er // cher + _env) er (_ Er + _hi) er (_ Er // hier + _fi) er (_ Er // fier + _hiv) er (X Er // hiver + Cst) er (X Er // hamster + _cart) er (X Er // carter + _cutt) er (X Er // cutter + tain) er (X Er // container + _ti) er (_ Er + ack) er (K Wr + ock) er (K Er + rock) er (K Wr + + er (_ e // parler léger + er (s_ e + + i) e (rt_ E // requiert + + d) e (ssus_ @ // dessus + + _d) es (bA e + _d) es (jA e // Desjardins + _d) es (nA e + _d) es (qA e // desquels + + _l) es (qA e // lesquels + + _m) es (dA e // mesdames + _m) es (nA e + Am) es (dA e + Am) es (nA e // Dumesnil + + d) esh (A ez // Deshormeaux + + _r) e (ss @ // ressembler + _r) e (ssu e // ressusciter + _r) e (stra @ + _r) e (stro @ + _r) e (stru @ // restructurer + -) est (_ Est // -est + + dg) et (_ Et // Bridget, gadget + k) et (_ Et + tick) et (_ E2 + m) et (_ Et2 + + eu Y // eu + eu (CX W // neuf + eu (CeX W // fleuve + eu (Cer_ Y // pleurer + eu (CeX Y // meule + eu (reX W // demeure +gu) eu (leX W // gueule +gu) eu (ler Y // gueuler + eu (rC W // pleurnicher + eu (rreX W // beurre + _) eu (ss y // eusse + + _) eut (_ yt2 + eut (_ Yt2 + _) extra (uP5 E2kstra + _) extra (CP5 E2kstra + _) eû y // eût + eû Y: // jeûne + + ey (_ E2 // dahomey + ey (C E2 // ceylan + ey Ej // asseye + + ez (_ ez2 // nez mangez chez + + g) e (A // mangeons + g) eu Y // vengeur + g) eu (re y // gageure + + _d) e (ch @ + _r) e (ch @ // recherche + e (Cl @ + + _l) e (xA E2 + _m) e (xA E2 + _l) e (CA @ + _l) e (ChA @ + _l) e (ClA @ // Leclerc + tr) e (CA @ + tr) e (ChA @ + + e (CC E // infect pelle mettre + e (Cr @ + _) e (C% e // effet, effectuer + e (C_ E + e (t_ E2 + e (rC E + es (_ z2 + + %C) e (xA E2 + + @gu) e (CA + @gu) er (A r + @qu) e (CA + @qu) er (A r + _qu) e (CA @ +@L06gu) e (CA @ +@L06qu) e (CA @ + @C) e (CA + @C) e (li @ + @ch) e (li @ + @C) er (A r + @C) e (rion++ @ + @C) e (riez++ @ + @ch) e (CA + @ch) er (A r + L06ch) e (CA @ + @L06C) e (CA @ + @CL06) e (CA @ + @bC) e (CA @ + @ct) e (CA @ + %C) e (CA++ + %C) er (A++ r + @C) e (xA++ E2 + @c) e (v++ @ + @d) e (v++ @ + + @C) e (CrA + @ch) e (CrA +@L06ch) e (CrA @ + @L06C) e (CrA @ + @L06C) e (rrA E + @CL06) e (CrA @ + %C) e (CrA++ + e (rr+++ E + + e @ // menue + _) e (CA e + _) e (xC++ E2 + Cr) eam Im + Cr) eamer ImWr + Cl) eaner InWr + vert) e (rX W + eï (K 'Ej + _y) en (_ En + iew) er (X er2 + _m) e (ga e + + +// group e: English section + eac _^_en + C) ead _^_en // read, head + eak _^_en // break, speak + eal _^_en // deal + ear _^_en // ear, search + eas _^_en // please + eave _^_en // leave + ed (_ _^_en + ee _^_en // meeting + efore (_ _^_en // before + eing (_ _^_en // being, boeing + eive _^_en // receive + eld (_ _^_en // field + _) enter (_ _^_en // enter + _) enhan _^_en + qu) est (_ _^_en // request + qu) este (X_ _^_en // requested, requester + _) even (X _^_en // forever, however + _) ever _^_en // forever, however + oC) ever _^_en // forever, however + _) eye _^_en + + +.group è + + Z) ème iEm + è E + ès (_ E + Ar) ès (_ Es + m) ès (_ Es + n) ès (_ Es + p) ès (_ Es + + +.group ë + u) ë // ambiguë + ë E // citroën noël + + +.group f + f f + f (f + _ner) f (X + _neu) f (_ans v // liaison: neuf ans + _neu) f (_heures v + +// group f: English section + _) fire _^_en + fly _^_en + _) frame _^_en + fter (_ _^_en + + +.group g + g g + g (Y Z + + su) gg (Y gZ // suggérer suggestif + gg g // agglomérer + ai) gni n^ // craignions châtaignier + gn nj // agneau +_wa) gner (_ gnEr + gni n^i // signifier + gn (e_ n^ + gn (_ n^ + gn (eCA nj@- + gn (ie n // compagnie + dia) g (no g + _a) g (no g +_quatrevin) gts (_ z2 + + vin) gt (_A t // liaison: vingt ans + + vin) gt (_un + vin) gt (_deux t + vin) gt (_trois t //liaison: vingt-trois + vin) gt (_quatr t + vin) gt (_cinq t + vin) gt (_six t + vin) gt (_sept t + vin) gt (_huit t + vin) gt (_neuf t + vin) gt (_neuvi t + + gt (_ // vingt doigts + An) gt (A t // vingtaine doigté + + gu (i g // anguille + ai) gui (l gyi // aiguillage + in) gui (s gyi // linguiste + g (C g + + _ran) g (_ // rang + _san) g (_ // sang + étan) g (_ // étang + _lon) g (_ // long + bour) g (_ // Strasbourg + + g (_ g // grog gag goulag + +// group g: English section + _) game (X _^_en + girl _^_en // girl + gy (_ _^_en + + +.group h + _) h _| + _) h (abi // habit, habilleur + _) h (allo // hallogène + _) h (ame // hameçon + _) h (andr // handroïde + _) h (arm // harmonie + _) h (el // hellène + _) h (ect // hectare + _) h (erb // herbe + _) h (é + _) h (éris _| + _) h (éro _| + _) h (eure // heure + _) h (iber // hibernation + _) hi (A _|j // hier + _) h (ippo // hippodrome + _) h (iro // hirondelle + _) h (ist // histoire + _) h (iv // hiver + _) h (omm // homme + _) h (onn // honneur + _) h (ô // hôpital + _) h (os // hostile + _) h (ora // horaire + _) h (orip // horipeau + _) h (oriz // horizon + _) h (oro // horoscope + _) h (orlo // horloge + _) h (orr // horreur + _) h (uil // huile + _) h (uiss // huissier + _) h (uitr // huître + _) h (umA // humain + _) h (umC // humble + _) hy (A j + haus (_ os //blockhaus + heim (_ ajm + _) h (y // hypermarché + _) hyper (@P5 ipEr + _) hyper (_ ipEr + _) hypra (@P5 ipra + h // ahuri + +// group h: English section + _) half _^_en + here (_ _^_en // here + + +.group i + i i // cri + + C) i (erA i + C) ien (t_ i + dév) ien (t_ i + t) ien (K_ jE~ // tient + v) ien (K_ jE~ // vient + at) ien (t_ jA~ // patient + cip) ien (C jA~ // récipient + cl) ien (C iA~ // client + mol) ien (C jA~ // émolient + vén) ien (C jA~ // inconvénient + or) ien (t iA~ // orient, orienter + ot) ien (t_ jA~ // quotient + + i (e_ i + _) i (ce@ aj // iceberg + _) ill il // illégal + ill (_ il // Bill + _C) ill (y_ il // Billy + aigu) ill ij // aiguille + anqu) ill il // tranquille + c) ill (i il + dist) ill il // distiller + _L05) ill il // Lille, mille, william + v) ill (e_ il // ville + osc) ill il // osciller + gu) ill ij // guillaume + qu) ill ij // quille + A) ill j // caillou + C) ill ij // famille + a) il (_ j // bail + e) il (_ j + gt) i (m aj + u) il (_ j // deuil + L01_f) ils (_ is // fils (enfant) + + imm imm // immaculé + im (_ im // karim + im (C E~ // timbre + w) in in // winrar + inct (_ E~ // distinct + in (h in // inhumain + in (kX iN // link + in (n i // innombrable + in (C E~ // vingt + in (_ E~ // vin + ing (_ iN + ing (h ing + ing (s iN + ing (to iN + _) infra (sP5 E~fra + _) inter (@@P5 E~tEr + _) interr (A E~tEr + _) inter (_ E~t'Er + _) inter (ne_ E~t'Er + _) intra (neP5 E~tra + _) intra (uP5 E~tra + C) is (_ i + Kir) is (_ is + bor) is (_ is + dor) is (_ is + tor) is (_ is + fl) irt Wrt + otl) i (neX aj + onl) i (ne_ aj + offl) i (ne_ aj + dr) i (ve aj + pr) int (_ int + +// group i: English section + ibuter (X _^_en + iev _^_en + ife (_ _^_en + igh _^_en + iven (_ _^_en + ind (X _^_en // find, mind + _C) ind (erX _^_en // finder + AC) ind (erX _^_en // reminder + ize (X _^_en // realize + _bAl) i (ze i + ram_f) i (le _^_en + +.group ï + ï i // naïf + A) ï (_ j + A) ïe (_ j + A) ï (lA j + + + ïn (K E~ // coïncidence + ma) ïs (_ is // maïs + + + +.group j + j Z // adjoint joujoux + _) j' (P2v Z + _) jazz dZaz + _) j (obK dZ + _) j (ohK dZ + _) jusqu' (P6 Zysk + + +.group k + k k // kafka + + +// group k: English section + ke (_ _^_en // make, take + ke (s_ _^_en // makes, takes + ke (rX _^_en // maker + ke (nX _^_en // taken + +.group l + l l // lit + ll l // aller + _) l' (P2 l + au) lt // hérault + uCi) l (_ // outil, fusil + nti) l (_ // gentil + nti) lh j // gentilhomme + ui) ll j // juillet + _) lorsqu' (P7 lorsk + +// group l: English section + less (_ _^_en // noiseless + _) live _^_en + @) loud (_ _^_en + ll (X _^_en + + +.group m + m m // film + mm m // pomme + _) m' (P2v m + _) mc (@P2 mak + _) ms (P2 EmEs + master (_S6 mastWr + +// group m: English section + _) mail (_ _^_en // mailer + mov (ieX _^_en // move, movy + + +.group n + n n // une + nn n + ng (_ N + ngh ng + + _) n' (P2v n + _wAC) ner (_ nEr + + _) n (_° nymero + _) neuro (@@P5 nYro + _) nvda (P4 Envedea + + +.group o + br) oc (_ o // broc + cr) oc (_ o // escroc + ls) on (_ On + Cst) on (_ On + _) os (_ Os + _v) os (gY o + s_) os (_ o + x_) os (_ o + o (t_ o + + oe (ll wa // moelleux + oe (i W // oeil + _) oe (C Y // oesophage + _ph) oe (C e // phoetus + _ph) oe (n_ W // phoen + oeu W // voeu + oeud Y // noeud + oeufs (_ Y // oeufs boeufs + oeu (x Yz2 // voeux + o (eC o // coefficient + _) oi (gnon o // oignons + oin (C wE~ + oin (_ wE~ // coin + oi wa // poil + oê (l wa // poêle + om (b O~ // bombe + om (p O~ // trompe + n) om (X O~ // nom + om (_ Om // www.web.com + + on (K O~ // montre, vision + on (n O // bonne, personne + on (t_ O~t2 // mont vont sont + _m) ont (pAC O~ // Montpellier + _m) ont (m O~ + _m) ont (rAal O~ // Montreal + onsh (A O~z // bonshommes + onh (A On // bonhomme + _) on (z _|O~ // onze, onzième + + _c) on (_ O~ // no comment + ps) on (_ On // Epson + gt) on (_ On // Washington + Cst) on (_ On + ps) on (_ On + _C) on (_ O~n2 // mon appui, mon histoire, mon havre + + alc) oo (l O // alcool + z) oo o // zoo + z) oo (C oo // zoologue + z) oo (m u // zoom + _gal) op (_ o // galop + + _sir) op (_ o // sirop + + v) ost (_ o // Prévost + _C) oup (_ u // coup, loup + + + ou u // hibou brouillard groupe encouragé + ou (in w // pingouin + oue (mA u // dévouement + _) ou (at _|u // ouate + où u // où + oû u // coûter + oy (A waj // noyer voyelles + _b) oy (co Oj // boycott + _c) oy (o Oi // coyote + _y) o (y O + oy wa + o (_ o // zorro allégro + gr) oss os // grosse, grossir + + C) o (sA o // position + o (CC O // poste, votre + o O + +// group o: English section + oa (X _^_en // approach, load + oa (_ oa + oa (s_ oa + oa (CerX _^_en + oach _^_en + old (er_ _^_en // folder, older + C) oing (_ _^_en // going + oo (Ce _^_en // boomer + oo (k _^_en // book, cook + oo (st _^_en // booster + oo (X _^_en // pool + C) oot _^_en // bootable football + _) one _^_en + oun (C _^_en // bounce, found + _) over _^_en // over + _sC) ot _^_en // shot, slot, spot + ow (e _^_en // flower, power + ow (X _^_en + oy (X _^_en // boy, toy + + +.group ô + ôt (_ o // rôt + ô o // cône + + +.group p + p p // pas + _) para (pCP4 para + _) photo (@P5 foto + _) poly (@P4 poli + _) post (KP4 post + _) post (ACCP4 post + _) pseudo (@P6 psYdo + p (p // appliquer + pays pE2iz2 // pays, paysage + ph f // phrase + + m) ps (_ // temps champs + r) ps (_ // corps + + cham) p (_ // champ + + cam) p (_ // camp + + dra) p (_ // drap + _) psych (@P5 psik + _) psych (iCP5 psiS + _) psych (AA_P5 psiS + + ba) p (t // baptiser + com) p (t // compte + + C) pt (_ // prompt exempt + + se) pt (_ t // sept + se) pt (iè t // septième + scul) p (t // sculpture + _) puisqu' (P7 pyisk + +// group p: English section + pad (_ _^_en + plug _^_en // plug + printer (_ _^_en // printer + + +.group q + q k // coq + _) qu' (AP3 k + _) qua (d kwa // quadrature + _) qua (tA kwa // quaternaire + _) quan (tA kwA~ // quantique + _) qua (drill ka // quadriller + _a) qua kwa // aquarium + _a) qu (if ku // aquifère + _A) qui (dist kyi // équidistant + _A) qui (lat kyi // équilatéral + _C) qua kwa // squale square + _A) qua kwa // équateur + dé) qua kwa // adequate + _) qua (rtz kwa // quartz + qu k // quatre + _) que (_ k@ // que + n) q (_ k // cinq cent + +// group q: English section + quick _^_en // quick, quickly + + +.group r + + _su) rr rr // surréaliste + cou) rr rr // courrai + mou) rr rr // mourrai + cou) rr (i r // courrier + cou) rr (o r // courroie + r r // rien + rr r + _) radio (@P5 radio + +// group r: English section + _) real _^_en + resen _^_en + rst (_ _^_en + _) rule _^_en + + +.group s + s s // verser sien + + s (_S1 z2 + stein (_ Stajn + + _) s' (P2v s // s'amène + _) s' (esXP2v s // s'amène + sç s // immisça + sch (ie sk // schierzo + sch (iz sk // schizophrène + sch (ol sk + sch (oo sk + schu Su + + sch S // schéma + dé) sh (A z // déshabiller + sh S // shérif + ss s // assez + + ai) s (em s // vraisemblable + _al) s (ac z // Alsace + aCè) s (_ s + nè) s (_ s + kansa) s (_ s // Kansas, Arkansas + aka) s (_ s + ub) s (is z // subsister + tran) s (A z // transition + tran) s (e s // transe + tran) s (ub s // transubstantiation + A) s (A z // baiser + A) s (oft s // microsoft + A) s (ol_ s // tournesol + _) socio (@P5 sosio + _) super (@@P5 sypEr + _) super (_ sypEr + _) supra (@P5 sypra + batro) s (_ s + océro) s (_ s + scien (t siA~ // conscient scientifique + sql (_S3 EskyEl + + _u) s (_ s + Cu) s (_ + Abu) s (_ s + _Abu) s (_ + mbu) s (_ s +_cACpu) s (_ s + Acu) s (_ s + docu) s (_ + écu) s (_ + asu) s (_ s + odu) s (_ s + gu) s (_ s + igu) s (_ // aigus + iu) s (_ s // radius + ïu) s (_ s // laïus + Culu) s (_ s // cumulus + plu) s (_ z2 // plus, surplus + ylu) s (_ s // stylus + mu) s (_ s + _mu) s (_ + ému) s (_ + opu) s (_ s // opus, octopus + Aru) s (_ s // virus + aru) s (_ // disparus + ouru) s (_ // courus + Anu) s (_ s // bonus, tonus + enu) s (_ // menus, venus + psu) s (_ s // lapsus + cessu) s (_ s // processus + + atu) s (_ s // stratus motus + ctu) s (_ s // cactus + etu) s (_ s + aitu) s (_ + itu) s (_ s + ltu) s (_ s // altus + otu) s (_ s // motus + Cutu) s (_ s + + _tou) s (_ s + + s (b z // sbire + s (d z + s (g z + s (j z + s (v z + _tou) s (_Ces_ + _tou) s (_des_ s + _tou) s (_Cos_ + _tou) s (_leurs_ + +// group s: English section + CA) sh (_ _^_en // punish + sh (_ _^_en + sh (Ap _^_en // shop, ship + sh (At _^_en // shut, shot + _) sky _^_en + _) smil _^_en // smile, smiley + spy _^_en + + +.group t + t t // bataille + _) t (_ te + -) t (- t2 + _) t' (P2v t + Vn) t (_ t2 + A) t (- t2 + VCi) t (_ t2 + t (_ + peti) t (_ t2 + _) th t // thon + ts (_S1 z2 // silent at end of word unless next word starts with a vowel + C) t (_ t // compost watt soft script malttact abrupt + ki) t (_ t // kit + n) t (_ + r) t (_ + + aul) t (_ // Renault + grani) t (_ t + + _) télé (@P4 tele + _) tele tele + _) thermo (@P6 tErmo + + tt t // attitude + + s) th (m // asthme + th t // théorie + hui) t (_ t3 // huit + + _) t t // tien tiers + an) t (ia t // Santiago + C) t (ieu s // contentieux + + t (io_ s // ratio + + Ama) t (ieX s // diplomatie + a) t (ia s // spatial + en) t (ia s // confidentialit� + lbu) t (iA s // balbutiait + r) t (ia s // impartial + ini) t (iA s // initier + p) t (ia s // nuptial + an) t (iat s // transsubstantiation + + t (ion s // programmation + V) t (ion t // verbes + ache) t (ion t // achetions, rachetions + ai) t (ion t // souhaitions, traitions + oi) t (ion t // boitions + si) t (ion s // position + chan) t (ion t // chantions, d�chantions + Cisi) t (ion t // visitions + ci) t (ions t // citions + comp) t (ions t // comptions, escomptions + CAnc) t (ion s // fonctionner, ponctionner + Ce) t (ions t // jetions, rejetions + Vec) t (ion t // respections + Vep) t (ion t // respections + éCi) t (ions t // hésitions, héritions + éti) t (ion s // pétition + Vé) t (ion t // répétions + habi) t (ions t // habitions + imi) t (ions t // imitions, limitions + VAu) t (ion t // ajoutions + lu) t (ion s // févolution + Apor) t (ion t // emportions, exportions + opor) t (ion s // proportion + Cpor) t (ion t // emportions, exportions + sor) t (ion t // sortions + rê) t (ion t // arrêtions, apprêtions + + s) t (ion t // gestion + _ta) t (ion t // tation + sen) t (ion_ t // sentions, ressentions + t) t (ion t // combattions + + t (iel s // partiel + t (ieu s // ambitieux + t (iAm s // patiemment + + mar) t (ien s // martien vénitienne + a) t (ien s + i) t (ien s + o) t (ien s + + ipé) t (ieX s + amé) t (ieX s + nu) t (ieX s // minutie + ni) tien (t_ si + bu) tien (t_ si + + cra) t (ieX s // démocratie + + ner) t (ie s // inertie + + _ce) t (_ t +_transA) t (_ t + +// group t: English section + C) th (_ _^_en // month + _) th (eX _^_en // the, then + _) th (aX _^_en // than, that + _) time _^_en + tle (_ _^_en + too _^_en + ttl _^_en + try (_ _^_en // try, country + sCar) t (_ _^_en // smart, start + sCar) t (er_ _^_en // starter + _) tun (AX _^_en + + +.group u + u y // cruel nuage brut + ui yi // nuit, fuite + uin (K yE~ // juin + _s) u (rfX W + _bl) u (ff W + _s) u (rfeX W + uy (A yij + + C) ucci utSi // capuccino + c) ueill Wj // cueillir + c) ueil (_ Wj // recueil + _g) ua wa + ag) ua (X wa + Ctig) ua (_ wa + _c) ul (_ y + _) ultra (P5 yltra + g) u (ay u + g) ueill Wj // orgueilleux + haïk) u (X u + + C) u (bX W // hub, club + C) u (gX W // bug, mug + _n) u (rse W // nurse + r) u (nX W // run, autorun + pr) unt (_ W~ // emprunt + um (_ Om // album + f) um (_ W~ // parfum + um (b W~ // humble + um (p W~ + un (C W~ // emprunt lundi + un (n y // tunnel + CC) un (_ W~ // brun + uc) un (_ W~n2 // aucun + un (_ W~n2 // un avion + _h) un (_ W~ // hun + + fl) ux (_ y // flux, reflux + g) u (A // fatigue + g) u (ï y // ambiguïté + g) u (ë y // ambiguë + uz (z W + +// group u: English section + _b) usi _^_en // business, businessman + C) ui (ce _^_en // produice, juice + umber (_ _^_en + ump (_ _^_en + unch _^_en + under _^_en // under, understand, thunder + _C) un (_ _^_en + _C) un (ny _^_en + _) up (C _^_en // upper, update + up (_ _^_en // setup + urn (X _^_en // burn, turn + ust (_ _^_en // just, trust + + +.group ü + ü y + üs (_ ys + üm (_ om + ül (_ yll + + +.group v + v v + vers (_ vErz2 + dri) ver (X vWr + view (X vju + _) view (A vjuv + +// group v: English section + voice (X _^_en + void (_ _^_en + vy (_ _^_en + + +.group w + w w + _) w (A _|w + w (ag v // wagon + wa (ve_ wE:j // wave + wa (re_ wE: // hardware software + +// group w: English section + e) w (K _^_en + _) wan _^_en + wr _^_en // write + way _^_en // way, away + _) wir _^_en // wire + winn _^_en // winner + wise _^_en + with _^_en + wor _^_en + + +.group x + x ks + xx ks + _) x (A gz // xylophone + _) x (CP1 iks // xylophone + xml (_S3 _|iksEmEl + e) x (A gz // exagérer exemple + L03e) x (A ks // annexe, vexer + _ine) x (A gz + _e) x (h gz // exhumer + + ai) x (_ // voix paix prix + oi) x (_ + ri) x (_ + + _soi) x (A s // soixante + + Au) x (_ z2 // faux feux choux + + _au) x (quel // auxquels + + _di) x (_neuf z // liaison: dix-neuf + _di) x (_ z3 + _si) x (_neu s // liaison: six-neuf + _si) x (_ z3 + + di) x (iè z // dixième + si) x (iè z // sixième + deu) x (iè z // deuxième + + +.group y + y i // cryogénique myope + _) y (A _|j // yak + _) y (eu j // yeux + _) yacht _^_en // yacht, yachtman + + _) yahoo (P5 ja'u + ym (K E~ // tympan + y (nn i + y (nA i + X) ys (_ is + yx (_ iks + + yn E~ // laryngite + + +.group z + z z + t) z s // tzigane + t) zer (_ zEr + C) zer (_ zWr + + +.group +// accented characters, these could have their own groups if they need more rules + â a: + ñ n^ + + é e // été + ê E // fête + + ö o // angström + û y: // fûtes + ü y // bülcher + + +// symbols that are normally spoken when reading text + , (D pilk:u + $ dOlar + ° d@gre + _n_) ° // n° + + + + + + + + + diff --git a/dictsource/hu_list b/dictsource/hu_list index c82a0b4b..225c2858 100755 --- a/dictsource/hu_list +++ b/dictsource/hu_list @@ -82,7 +82,7 @@ _30o hAR2_mintsAdik _60o hAtvAnAdik _80o n^oltsvAnAdik _0Co sa:zAdik -_2Co ke:tsa:zAdik +_2Co ke:t|sa:zAdik _0M1o EzR2Edik _1M1o EzR2Edik _2M1o ke:tEzR2Edik @@ -150,6 +150,13 @@ _#-énél e:ne:l $alt2 _#-ik || //This is not a mistake. This is a special ordinal number suffix, with not need insert replace word suffix. For example: //If a string containing the 17-ik string, need spokening tizenhetedik phoneme. If the suffix rule not containing the || rule but containing another //replace word, the spokened suffix is mistaked, for example tizenhetedikedik if this rule containing the Edik phoneme, not || phoneme. +_#-iki i +_#-ike E +_#-ikei Ei +_#-ika A +_#-ikai Ai +_#-éhez e:hEz +_#-ához a:hoz (1-e) elseje $text $alt2 (1-én) elsején $text $alt2 (1-jén) elsején $text $alt2 @@ -175,6 +182,10 @@ _#-ik || //This is not a mistake. This is a special ordinal number suffix, with (1-vel) elsejével $text $alt2 (1-jénél) elsejénél $text $alt2 (1-énél) elsejénél $text $alt2 +(1-iki) elsejei $text $alt2 +(1-ike) elseje $text $alt2 +(1-ikei) elsejei $text $alt2 +(1-éhez) elsejéhez $text $alt2 (2-i) másodikai $text $alt2 (2-ig) másodikáig $text $alt2 (3-i) hAR2_mAdikAi $alt2 @@ -219,6 +230,8 @@ _#-ik || //This is not a mistake. This is a special ordinal number suffix, with (0-áson) nul:a:Son (0-tól) nul:a:to:l (00-tól) nul:Anul:a:to:l +(0-n) nul:a:n +(00-n) nul:Anul:a:n (1-gyet) EJ:Et (1-gyes) EJ:ES (2-őt) kEt:Y:t @@ -234,6 +247,7 @@ _#-ik || //This is not a mistake. This is a special ordinal number suffix, with (3-adikon) hAR2mAdikon //special exception (3-adikkal) hAR2mAdik:Al //special exception (3-t) ha:R2mAt +(3-mas) ha:R2mAS //4 number suffixes (4-el) ne:J:El //Nneed J: phoneme, not J phoneme contains one suffix) (4-gyel) ne:J:El //Need J: phoneme, not J phoneme @@ -280,7 +294,6 @@ _20e hus (80-al) n^oltsvAn:Al (90-el) kilEntsvEn:El - // These words mean that a dot after number, immediately preceding, does not mean an ordinal number január $alt február $alt diff --git a/dictsource/hu_rules b/dictsource/hu_rules index 366a7119..646428fe 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -208,6 +208,12 @@ menetren) dsz (erű d|s va) d (szeder d twee) d (sapk d fe) dd (hetetlen d +ezre) d (segé d +erő) d (szerű d +csalá) d (szociol d +száza) d (szemle d +zöl) d (szem d + .group dz fogó) dz (kod ts @@ -244,6 +250,9 @@ titkoló) dz z ringató) dz z mére) dz (k ts pilóta) dzs (ek dZ +ezre) dz (ene d|z +száza) dz (ene d|z +honvé) dz (ászló d|z .group e e E @@ -516,6 +525,7 @@ keresztü) l (j l _) e) lj (ár lj ha) ll (ga l _ta) lj (án lj +_fé) l (jobb l @@ -587,6 +597,7 @@ teljesítmé) ny (javu n^ ajá) nl l: _feddhetetle) n (jelle n állomá) ny (jel n^ +ingatla) n (jog n .group o o o @@ -662,6 +673,7 @@ gyalogo) s (zászló S ki) s (zsidó S szennye) s (zsá S alvá) s (zavar S +magatartá) s (zavar S .group ss ssz ss2 @@ -1072,6 +1084,7 @@ fejeze) t (cím t pán) t (szél t boo) t (sorrend t _á) t (jöj t +ú) tsz (oros t|s .group ts ts (_S2 tS //general rule with word end of ts letters diff --git a/dictsource/nl_list b/dictsource/nl_list index 09fca342..bd6458d3 100644 --- a/dictsource/nl_list +++ b/dictsource/nl_list @@ -5,7 +5,6 @@ // If a letter has a "word" pronunciation which is different from its // "letter" name, then include the letter name here, with the letter // prefixed by a _ character. - b be: c se: d de: @@ -294,25 +293,147 @@ werd $u // Pronounce as English delete _^_EN -down _^_EN +//down _^_EN escape _^_EN home _^_EN game _^_EN +homepage _^_EN items _^_EN laptop _^_EN -page _^_EN +(page down) _^_EN +(page up) _^_EN player _^_EN -slash _^_EN speak _^_EN -the _^_EN +the D@ up _^_EN // words where -eren is not a stressed verb ending + +achter $alt +achterkleinkinder $alt +ader $alt ander $alt +anker $alt +badder $alt +bagger $alt +baker $alt +beender $alt +belemmer $alt +beter $alt +bibber $alt +bladder $alt +blader $alt +blaker $alt +blikker $alt +blubber $alt +blunder $alt +bolder $alt +bolster $alt +boter $alt +buffer $alt +bulder $alt +bulldozer $alt +bumper $alt +bunker $alt +cijfer $alt +donder $alt +dwater $alt +eier $alt +ender $alt +filter $alt +geester $alt +gemoeder $alt +hamer $alt +hoender $alt +jakker $alt +jammer $alt +kalver $alt +kanker $alt +kaver $alt kinder $alt +kladder $alt +klodder $alt +koekeloer $alt +kommer $alt +kuier $alt +lammer $alt +laster $alt +lazer $alt +lebber $alt +leder $alt // gelederen +leger $alt +ler $alt +letter $alt +lever $alt +lieder $alt +lubber $alt +luister $alt +modder $alt +moeder $alt +monster $alt +nader $alt +nummer $alt ouder $alt +pantser $alt +peiger $alt +peuter $alt +pleister $alt +poeder $alt +poeier $alt +polder $alt +rader $alt +raster $alt +redder $alt +ridder $alt +runder $alt +schilder $alt +slenter $alt +slinger $alt +snipper $alt +sodemieter $alt +splinter $alt sputter $alt +suiker $alt +timmer $alt +tover $alt +vinger $alt +volker $alt +vorder $alt +wakker $alt +water $alt +wegwijzer $alt +wonder $alt +zever $alt +zonder $alt +zuiver $alt +zwanger $alt + +// words where -age is [a:Q@] not French ['a:Z@] +drage $alt +hedentendage $alt +gestage $alt $2 +grage $alt +inzage $alt +lage $alt +oplage $alt +sage $alt +lrage $alt +vrage $alt + +// -age exceptions +amperage Amp@r'a:Z@ +camouflage ka:mufl'a:Z@ +courtage kurt'a:Z@ +curettage kyr@t'a:Z@ +drainage drEn'a:Z@ +equipage e:kwip'a:Z@ +jumelage Zym@l'a:Z@ +metrage me:tr'a:Z@ +outillage utij'a:Z@ +vrijage vre:j'a:Z@ + + // pronunciation exceptions aangrijpend $2 @@ -320,7 +441,6 @@ bourgondier burx'o:ndi:@r circuit sIrku'i computer $2 contour ko:nt'ur -eren I:*@n ingewikkeld $3 ingrijpend $2 ingeval $3 @@ -328,7 +448,6 @@ ingevolge $3 ingrediënt $4 ingenieur Inzj@nj'Y:r journaal Surn'a:l -natuur na:t'yr ongastvrij OnQAstv@-*'EI ongelooflijk $3 ongemakkelijk $3 diff --git a/dictsource/nl_rules b/dictsource/nl_rules index 11c1759c..8f15ff27 100644 --- a/dictsource/nl_rules +++ b/dictsource/nl_rules @@ -2,8 +2,8 @@ .group a a a: - a (CC A - a (C_ A + a (CK A + a (x A aa a: aai a:j ae E: @@ -12,6 +12,11 @@ _) aan (@P3 'a:n aa (rd_ 'a: + aa (t_ 'a: + _) af (C@P2 'Af + age (_ 'a:Z@ + ages (_S1 s + age (_$w_alt a:Q@ aire (_ 'E:r @@ -20,12 +25,16 @@ bb b bs (_N ps + &) baar (_ =ba:r _) be (@P2 b@ _) b (ee+ b _) be (ren bI: _) be (ter be: + _) be (ven_ be: + _) bever be:v@r + _) be (zem be: _) beu bY: - &) baar (_ =ba:r + _) bij (C@P3 b'EI .group c @@ -34,6 +43,13 @@ c (y s c k ch x + _) ch S + _) ch (arit x + _) ch (arter tS + _) ch (emi x + _) ch (ip tS + _) ch (olest x + _) ch (r x ck k @@ -46,10 +62,10 @@ .group e e e: - @C) e (_S1q @ + &C) e (_S1q @ e (_ @ - e (CC E - e (C_ E + e (CK E + e (x E e (r I: eï (+ @_I ei (+ EI @@ -57,22 +73,27 @@ ee e: eeuw eU eu Y: - @) ee (rd_ 'I: @) ee (l_ 'e: @) ee (m_ 'e: - @) ee (rt_ 'e: - @) el (_ @l - @) eld (_ @ld - @) ele (_ @l@ - @) en (_S2d @n - @) ens (_S3 @ns - @) end (_ @nd - @) ende (_ @nd@ - @) er (_ @r - @) ere (_ @r@ - @) er (en_$p_alt @r // where 'eren' is not a verb ending - @) eren (_ 'e:r@n - @) es (_ @s + @) ee (r_ 'I: + @) ee (rt_ 'I: + @) ee (rd_ 'I: + @) ee (rde_ 'I: + @) ee (rden_ 'I: + it) eit (_ 'EIt + &) el (_ @l + &) eld (_ @ld + &) ele (_ @l@ + &) em (_ @m + &) en (_S2q @n + &) ens (_S3q @ns + &) end (_ @nd + &) ende (_ @nd@ + &) er (_ @r + &) ere (_ @r@ + &) er (en_$p_alt @r // where 'eren' is not a verb ending + eren (_ 'I:r@n + &) es (_ @s eau o: //words with French origin @@ -80,6 +101,7 @@ @) e (raar_ @ &) e (nB@ @ + id) e (nt E &) e (rC@ @ @@ -110,8 +132,8 @@ .group i i i ij (+ EI - i (CC I - i (C_ I + i (CK I + i (x I ie i ieuw iw @@ -120,10 +142,13 @@ m) ie (_ 'i p) ie (_ 'i + ie (f_ 'i ie (r_ 'i ie (rd_ 'i - @) ig (_ @x + @) ig (_S2d @x + @) ige (_ @Q@ _) in (gP2 'In + io (nage iO @) isch (_ =is @) ische (_ =is@ @@ -136,11 +161,15 @@ k k kk k + _) koning k'o:nIN // in compounds + _) koningin ko:nIQ'In + .group l l l ll l - @) lijk (_S4 l@k + &) lijk (_S4 l@k + &) lijke (_S5 l@k@ &) laan (_S4 la:n @) loog (_ lo:x @@ -159,8 +188,8 @@ .group o o o: - o (CC O - o (C_ O + o (CK O + o (x O o (r o: oo (r O: // ?? or just for word-final "oor" ? ooi o:j @@ -168,12 +197,14 @@ oe u oei uj ou VU + ou (rage u telef) oo (n 'o: .group on _) onaan (@P5 On'a:n + _) onder (@P5 'Ond@r _) onge (@P4 ,OnQ@ _) ont (@P3 Ont _) on (te@P2 On // ontegecht @@ -198,11 +229,15 @@ .group p p p pp p + _) ph f + ph (K f .group q q k qu kv + @) qu (eer k + @) qu (eren_ k .group r @@ -211,6 +246,13 @@ C) r (A @-* rr *r +.group re + _) re (geren r@ + _) re (geer r@ + _) re (cent r@ + _) re (cept r@ + _) re (ceptief re: + _) re (serve_ r@ .group s s s @@ -218,6 +260,8 @@ sch sx sch (_ s sch (e_ s + _) sh S + sh (K S sj S @@) s (_S1 s @@ -233,6 +277,8 @@ th t t (haar t // th is not [t] t (hav t + _) toe (@P3 t'u + .group te _) tegen (P5 t'e:Q@n @@ -252,7 +298,7 @@ _) te (recht t@ _) te (sam t@ // tesamen _) te (veel t@ - _) te (vergreefP2 t@ + _) te (vergeefP2 t@ _) te (voorschijn t@ _) te (vor t@ // tevoren _) te (vred t@ // tevreden @@ -261,8 +307,8 @@ .group u u y - u (CC 8 - u (C_ 8 + u (CK 8 + u (x 8 uu y ui Wy uw yU @@ -279,6 +325,8 @@ .group w w v# + w (X w + w (CK w .group x @@ -295,6 +343,7 @@ .group + é e: éé e: $ d'OlAr , (D k'Oma: diff --git a/dictsource/ta_rules b/dictsource/ta_rules index 3e3b4e86..72ce5c1a 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -239,6 +239,7 @@ _) கி (ளாஸ g _வட) க (ிழ k தென்) க (ிழ k + அப) க (ீர்த்தி k _பால்) க (ுட k _வளை) க (ுட k மன்னார்) க (ுடி k @@ -268,6 +269,7 @@ _வர்) க்க ggV# _சொர்) க்க ggV# நிர்) க்க (தி ggV + தீர்) க்க (ாலோசநை gg _வி) க்க (ினம்_ gg அ) க்க (ினி gg ஆரோ) க்க (ிய gg @@ -275,8 +277,10 @@ _வி) க்க (ிரக gg கு) க்கி (ராம gg ஜன) க்க (ும்பல gg + அ) க (்டோபர k வி) க்ட (ோரியா kt. // victoria வி) க (்ரம k + ஆ) க (்ரோஷ k //endsort @@ -535,6 +539,7 @@ _) தி (யான dj _) த (ிரவ d _) த (ிரவிய d + _) தி (ராவிட d _) த (ிரௌபதி d _) த (ில்லி d _) த (ிவச d @@ -814,6 +819,7 @@ _பார்வ) த (ி t _) ப (ாரதி b _) ப (ாரத்த b _) ப (ாரம b + _) ப (ாரம்பரிய p _) ப (ார்கவி b _) ப (ார்மசி f _) ப (ார்மஸி f @@ -982,6 +988,7 @@ _முகத்தின்_) ப (ாவ b வட) ப (ழ pV வீண்) ப (ழி pV _தீ) ப (ா p + உ) ப (ாசனை p சமன்) ப (ாட p முரன்) ப (ாட p ப (ாண்டி p @@ -1051,6 +1058,7 @@ _முகத்தின்_) ப (ாவ b _ர) ப்ப (ர bbV துர்) ப்ப (ாக்கிய bb ஆர்) ப்ப (ாட்ட bb + _நில) ப்பி (ரபு pp மன) ப்பி (ரமை bb துர்) ப்ப (ோதனை bb கம்) ப்யூட (ர pjU:t.V @@ -1060,6 +1068,7 @@ _முகத்தின்_) ப (ாவ b // and not preceded by ம், then ப should sound as 'pa'. ப (ட pV @) ப (Bட p + @) ப்ட pt.V# // செப்டம்பர+ ம்) ப (ட bV ம்) ப (Bட b @@ -1121,6 +1130,7 @@ _முகத்தின்_) ப (ாவ b _) பி (ரஸ்தா p _) பி (ரஹலாத p _) பி (ராகார p + _) பி (ராக்கள b _) பி (ராண_ p _) பி (ராணன p _) பி (ராணி p @@ -1142,6 +1152,11 @@ _முகத்தின்_) ப (ாவ b _) பி (ரார்தன p _) பி (ரார்தி p _) பி (ரார்த்த p + _) பி (ராவின b + _) பி (ராவிற் b + _) பி (ராவில b + _) பி (ராவுக்கு b + _) பி (ராவை b _) பி (ரிட b _) பி (ரித்தானி b _) பி (ரியன p @@ -1159,6 +1174,7 @@ _முகத்தின்_) ப (ாவ b _) பி (ரோகிதர p _) பி (ளாட்பார p _) பி (ளாஸ்க் f // flask + _) பிள (ைட் fl. _) பீ (ராமண b அதிக) ப்பி (ரசங்க pp _பர) ப்பி (ரம்ம pb diff --git a/phsource/compile_report b/phsource/compile_report index ba490dfa..f9131864 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -17,8 +17,8 @@ consonants 9 115 jbo 2 114 nci 3 123 fi 40 133 - fr 56 138 - fr-ca 11 138 + fr 55 137 + fr-ca 11 137 hi 58 149 ta 20 151 hu 24 121 @@ -32,7 +32,7 @@ consonants 9 115 sr 14 138 it 18 126 la 21 124 - es 8 123 + es 10 123 es-la 1 123 ca 11 125 pt 29 138 @@ -59,11 +59,11 @@ consonants 9 115 ne 18 156 pa 14 150 prs 8 111 - sl 6 133 + sl 7 133 gd 6 107 bg 10 119 nso 8 107 - ht 11 138 + ht 11 137 Data file Used by b/b [b] base @@ -341,8 +341,8 @@ l/l_ [l/] base [l/] fr l/l_@ [l/3] base [l/] fr -l/l@ [á3m] base - [l#] base +l/l@ [l#] base + [€¦] base [l] fr [l/2] fr l/L1_aL [l/] base @@ -367,14 +367,14 @@ l/L2_oL [l/2] base l/L2_uL [l/2] base l/l_3 [l/] de l/l_4 [ll] sq -l/la [á3m] base - [l#] base +l/la [l#] base + [€¦] base [l] fr [l/2] fr l/l_a [l/3] base [l/] fr -l/le [á3m] base - [l#] base +l/le [l#] base + [€¦] base [l] fr [l/2] fr l/l_e [l/3] base @@ -383,8 +383,8 @@ l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [á3m] base - [l#] base +l/li [l#] base + [€¦] base [l] fr [l/2] fr [l] zh @@ -395,15 +395,15 @@ ll/ll [L] bg ll/_ll [L] bg l/l_long [l] base [l] fr -l/lo [á3m] base - [l#] base +l/lo [l#] base + [€¦] base [l] fr [l/2] fr l/l_o [l/3] base [l/] fr l^/l_rfx [l.] base -l/lu [á3m] base - [l#] base +l/lu [l#] base + [€¦] base [l] fr [l/2] fr l/l_u [l/3] base @@ -1640,7 +1640,6 @@ vowel/o [o] base2 [oU] en-wi [o:] de [o] fr - [o2] fr [o] hi [o] ta [o:] ta @@ -1676,7 +1675,6 @@ vowel/o_5 [O] nl vowel/o_6 [O:] nl vowel/o_7 [o] ku vowel/o_8 [o] fr - [o2] fr [o] ht vowel/oe [W] af [W] de @@ -1690,7 +1688,6 @@ vowel/o_mid [U@] en-rp [o] ne [o] bg vowel/o_mid2 [O] fr - [o] fr [O] ht vowel/oo [o] base [O:] en-sc @@ -1825,8 +1822,6 @@ vowel/u_bck [u] base2 [u] bg vowel/u_bck2 [u] fr [u:] fr - [u] ta - [u:] ta [u:] la [u] ht vowel/uu [U] en @@ -1952,51 +1947,51 @@ vwl_en_us/oor [O:] en-us vwl_en_us/or [o@] en-us [O:] en-sc vwl_en_us/ur [U@] en-us -vwl_fr/@2r [�æ] fr -vwl_fr/a2r [�æ] fr -vwl_fr/aa2r [�æ] fr +vwl_fr/@2r [] fr +vwl_fr/a2r [] fr +vwl_fr/aa2r [] fr vwl_fr/br [r/2] fr -vwl_fr/e2r [�æ] fr -vwl_fr/e_2r [�æ] fr -vwl_fr/ee2r [�æ] fr -vwl_fr/i2r [�æ] fr +vwl_fr/e2r [] fr +vwl_fr/e_2r [] fr +vwl_fr/ee2r [] fr +vwl_fr/i2r [] fr vwl_fr/j [j/] fr -vwl_fr/o2r [�æ] fr -vwl_fr/oo2r [�æ] fr +vwl_fr/o2r [] fr +vwl_fr/oo2r [] fr vwl_fr/r [r] fr [r/2] fr vwl_fr/r_ [r/] fr vwl_fr/r_@ [r/] fr -vwl_fr/r@ [�æ] fr +vwl_fr/r@ [] fr vwl_fr/@R [x] pt-pt -vwl_fr/r@2 [�æ] fr +vwl_fr/r@2 [] fr vwl_fr/@R2 [R] fr-ca -vwl_fr/ra [�æ] fr +vwl_fr/ra [] fr vwl_fr/r_a [r/] fr -vwl_fr/raa [�æ] fr -vwl_fr/re [�æ] fr +vwl_fr/raa [] fr +vwl_fr/re [] fr vwl_fr/r_e [r/] fr -vwl_fr/re2 [�æ] fr -vwl_fr/ree [�æ] fr -vwl_fr/ri [�æ] fr +vwl_fr/re2 [] fr +vwl_fr/ree [] fr +vwl_fr/ri [] fr vwl_fr/r_i [r/] fr -vwl_fr/rj [�æ] fr +vwl_fr/rj [] fr vwl_fr/r_n [r/] fr -vwl_fr/ro [�æ] fr +vwl_fr/ro [] fr vwl_fr/r_o [r/] fr -vwl_fr/roo [�æ] fr +vwl_fr/roo [] fr vwl_fr/rr [r/] fr -vwl_fr/ru [�æ] fr +vwl_fr/ru [] fr vwl_fr/r_u [r/] fr -vwl_fr/rw [�æ] fr -vwl_fr/ry [�æ] fr +vwl_fr/rw [] fr +vwl_fr/ry [] fr vwl_fr/r_y [r/] fr vwl_fr/tr [r/2] fr vwl_fr/trr [r/] fr -vwl_fr/u2r [�æ] fr +vwl_fr/u2r [] fr vwl_fr/wa [w] fr [w/] fr -vwl_fr/y2r [�æ] fr +vwl_fr/y2r [] fr vwl_hi/l-voc [l-] base [l-] sk [l:] sk diff --git a/phsource/ph_afrikaans b/phsource/ph_afrikaans index d8ce4a0c..cfa51cff 100755 --- a/phsource/ph_afrikaans +++ b/phsource/ph_afrikaans @@ -16,7 +16,8 @@ phoneme @ // Schwa, but always unstressed unstressed length 140 IF nextPh(r/) THEN - FMT(vwl_af/r@, 50) + Length 190 + FMT(vwl_af/r@) ENDIF FMT(vwl_af/@) endphoneme @@ -39,7 +40,8 @@ phoneme I // short I, Schwa vowel starttype #@ endtype #@ length 140 IF nextPh(r/) THEN - FMT(vwl_af/r@, 50) + Length 190 + FMT(vwl_af/r@) ENDIF FMT(vwl_af/I) endphoneme diff --git a/phsource/ph_albanian b/phsource/ph_albanian index 0019c5ad..080268c9 100644 --- a/phsource/ph_albanian +++ b/phsource/ph_albanian @@ -282,6 +282,7 @@ endphoneme phoneme dZ; vcd pla afr sibilant palatal voicingswitch tS; + ipa dʑ lengthmod 5 Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 diff --git a/phsource/ph_croatian b/phsource/ph_croatian index 9dd0fbea..56f35904 100644 --- a/phsource/ph_croatian +++ b/phsource/ph_croatian @@ -25,6 +25,7 @@ endphoneme phoneme tS; // this is letter ć vls pal afr sibilant palatal + ipa tɕ lengthmod 2 voicingswitch dZ; Vowelin f1=0 f2=2500 300 500 f3=300 80 rate len=70 @@ -69,6 +70,7 @@ endphoneme phoneme dZ; // letter đ vcd pla afr sibilant palatal lengthmod 5 + ipa dʑ voicingswitch tS; Vowelin f1=2 f2=2500 300 500 f3=300 80 rate len=70 diff --git a/phsource/ph_english b/phsource/ph_english index 15dcdea1..7d345863 100644 --- a/phsource/ph_english +++ b/phsource/ph_english @@ -113,11 +113,8 @@ endphoneme phoneme 3 // Schwa, used for rhotic schwa in American - vowel starttype #@ endtype #@ - unstressed - length 140 - ipa ə CALL @ + ipa ə endphoneme diff --git a/phsource/ph_english_rp b/phsource/ph_english_rp index 97606e47..090dc8da 100644 --- a/phsource/ph_english_rp +++ b/phsource/ph_english_rp @@ -17,11 +17,8 @@ endphoneme phoneme 3 // Schwa, used for rhotic schwa in American - vowel starttype #@ endtype #@ - unstressed - length 140 - ipa ə CALL @ + ipa ə endphoneme diff --git a/phsource/ph_english_sc b/phsource/ph_english_sc index 59a3cc93..ee4fb7cf 100644 --- a/phsource/ph_english_sc +++ b/phsource/ph_english_sc @@ -70,6 +70,7 @@ endphoneme phoneme a# vowel starttype #@ endtype #@ + ipa ɐ unstressed length 140 IfNextVowelAppend(r-) @@ -152,7 +153,8 @@ phoneme A: ipa a: IfNextVowelAppend(r-) IF nextPh(r) THEN - FMT(vowelr/aa_r, 30) + Length 250 + FMT(vowelr/aa_r) ENDIF FMT(vowel/a_3) endphoneme @@ -235,7 +237,8 @@ phoneme u: Length 200 ENDIF IF nextPh(isPause) THEN - FMT(vowel/u#_4, 40) + Length 200 + FMT(vowel/u#_4) ENDIF FMT(vowel/u#) endphoneme diff --git a/phsource/ph_french b/phsource/ph_french index e1eb8796..3e6843be 100644 --- a/phsource/ph_french +++ b/phsource/ph_french @@ -1,7 +1,7 @@ //==================================================== // French //==================================================== -// Updated 2010-06-22 Michel Such +// Updated 2010-07-16 Michel Such phoneme #l virtual // Used for l and l/ @@ -115,7 +115,6 @@ phoneme r/ // variant of [r] when not preceding a vowel vcd uvl frc rhotic starttype #r endtype #r - Vowelout f1=1 f2=1200 -400 800 f3=200 100 len=30 lengthmod 7 ipa U+0281 @@ -282,13 +281,12 @@ phoneme a length 170 ENDIF - FMT(vowel/a_7) + FMT(vowel/a_7, 85) endphoneme phoneme e vowel starttype #e endtype #e - palatal IF nextPh(l/) THEN VowelEnding(l/xl, -20) @@ -364,7 +362,7 @@ endphoneme phoneme j/ // Short "i" between "r" and a vowel vowel starttype #i endtype #i length 100 - unstressed +// unstressed NextVowelStarts VowelStart(j/j@) @@ -386,47 +384,6 @@ phoneme o length 170 ENDIF - IF thisPh(isFinalVowel) THEN - IF thisPh(isWordEnd) THEN - FMT(vowel/o_8) - ELIF nextPh(p2) OR nextPh(t2) OR nextPh(z2) THEN - FMT(vowel/o_8) - ELIF nextPh(z) THEN - FMT(vowel/o) - ELSE - FMT(vowel/o_mid2) - ENDIF - ELSE - IF nextPhW(#r) AND next2Ph(isNotVowel) THEN - ChangePhoneme(O) - ELIF nextPhW(isLiquid) AND next2Ph(isNotVowel) THEN - ChangePhoneme(O) - ELIF nextPhW(n) AND next2Ph(j) THEN - FMT(vowel/o) - ELIF nextPhW(isNasal) AND next2Ph(isLiquid) THEN - ChangePhoneme(O) - ELIF nextPhW(isNotVowel) AND next2Ph(isNasal) THEN - ChangePhoneme(O) - ELIF nextPhW(d) AND next2Ph(isNotVowel) THEN - ChangePhoneme(O) - ELIF nextPhW(t) AND next2Ph(isLiquid) AND nextVowel(isFinalVowel) THEN - ChangePhoneme(O) - ELSE - FMT(vowel/o) - ENDIF - FMT(vowel/o) - ENDIF -endphoneme - - -phoneme o2 - vowel starttype #o endtype #o - IF nextPh(isVowel) THEN - length 220 - ELSE - length 170 - ENDIF - IF thisPh(isFinalVowel) THEN FMT(vowel/o_8) ELSE @@ -437,10 +394,10 @@ endphoneme phoneme O vowel starttype #o endtype #o - IF nextPhW(#r) THEN - length 200 - ELSE - length 170 + length 170 + + IF nextPhW(z) OR nextPhW(z2) OR nextPhW(z3) THEN + ChangePhoneme(o) ENDIF FMT(vowel/o_mid2) @@ -498,23 +455,7 @@ phoneme Y vowel starttype #@ endtype #@ length 170 - IF thisPh(isFinalVowel) THEN - IF thisPh(isWordEnd) THEN - FMT(vowel/y#) - ELIF nextPh(z2) OR nextPh(t2) THEN - FMT(vowel/y#) - ELSE - ChangePhoneme(W) - ENDIF - ELSE - IF nextPhW(isNotVowel) AND next2Ph(isLiquid) THEN - FMT(vowel/y#) - ELIF nextPhW(isNotVowel) AND next2Ph(isNotVowel) THEN - ChangePhoneme(W) - ELSE - FMT(vowel/y#) - ENDIF - ENDIF + FMT(vowel/y#) endphoneme @@ -934,7 +875,8 @@ endphoneme phoneme z2 // silent unless followed by vowel vcd alv frc sibilant IF nextPh(isVowel) OR nextPh(w/) OR nextPh(j) THEN - FMT(voc/z, -20) addWav(ufric/s, 40) + Length 70 + FMT(voc/z) addWav(ufric/s, 40) ELSE ChangePhoneme(NULL) ENDIF @@ -953,3 +895,4 @@ phoneme z3 // "six" and "dix". [s] before pause, [z] before vowel, else [] endphoneme + diff --git a/phsource/ph_hindi b/phsource/ph_hindi index 59b92c63..7e20326c 100644 --- a/phsource/ph_hindi +++ b/phsource/ph_hindi @@ -414,7 +414,8 @@ endphoneme phoneme ch - import_phoneme base/tS; + CALL base/tS; + ipa ch endphoneme diff --git a/phsource/ph_macedonian b/phsource/ph_macedonian index a488ba60..e8e455d4 100644 --- a/phsource/ph_macedonian +++ b/phsource/ph_macedonian @@ -12,6 +12,7 @@ endphoneme phoneme dZ; vcd pal afr sibilant palatal lengthmod 5 + ipa dʑ voicingswitch tS; Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 diff --git a/phsource/ph_portugal b/phsource/ph_portugal index 47f2ded2..8a4f7335 100644 --- a/phsource/ph_portugal +++ b/phsource/ph_portugal @@ -153,11 +153,8 @@ endphoneme phoneme s# // This is [s] for Brazil, [S] for Portugal - vls pla frc sibilant - lengthmod 3 - ipa ʃ CALL base/S -// import_phoneme base/S + ipa ʃ endphoneme diff --git a/phsource/ph_pt_brazil b/phsource/ph_pt_brazil index e17286ae..c364bd06 100644 --- a/phsource/ph_pt_brazil +++ b/phsource/ph_pt_brazil @@ -200,10 +200,8 @@ endphoneme phoneme s# // This is [s] for Brazi;, [S] for Portugal - vls alv frc sibilant - lengthmod 3 - ipa s CALL base/s + ipa s endphoneme diff --git a/phsource/ph_romanian b/phsource/ph_romanian index fffaeccf..e83ffa8b 100644 --- a/phsource/ph_romanian +++ b/phsource/ph_romanian @@ -15,7 +15,8 @@ phoneme I^ // "silent i", palatilizes the preceding consonant ChangePhoneme(;) ENDIF IF prevPh(l;) THEN - FMT(vwl_ro/li, -10) + Length 60 + FMT(vwl_ro/li) ENDIF IF prevPh(m;) THEN FMT(vwl_ro/mi) diff --git a/phsource/ph_serbian b/phsource/ph_serbian index 2aad5963..0670399b 100644 --- a/phsource/ph_serbian +++ b/phsource/ph_serbian @@ -108,6 +108,7 @@ endphoneme phoneme dZ; vcd pla afr sibilant palatal lengthmod 5 + ipa dʑ voicingswitch tS; Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 @@ -131,6 +132,7 @@ endphoneme phoneme tS; vls pal afr sibilant palatal lengthmod 2 + ipa tɕ voicingswitch dZ; Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 WAV(ustop/ts_sr) diff --git a/phsource/ph_spanish b/phsource/ph_spanish index 8505aa40..c70d6b2c 100644 --- a/phsource/ph_spanish +++ b/phsource/ph_spanish @@ -31,6 +31,13 @@ phoneme g Vowelin f1=2 f2=2300 200 300 f3=-300 80 Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + IF thisPh(isWordStart) AND nextPh(isVowel) THEN + IF prevPh(isPause) OR prevPh(isNasal) THEN + ELSE + ChangePhoneme(Q) + ENDIF + ENDIF + IF PreVoicing THEN FMT(g/xg) ENDIF @@ -41,6 +48,32 @@ phoneme g FMT(g/g) addWav(x/g2) // weaker [g] endphoneme +phoneme d + vcd dnt stop + + IF thisPh(isWordStart) AND nextPh(isVowel) THEN + IF prevPh(isPause) OR prevPh(isNasal) OR prevPh(l) THEN + ELSE + ChangePhoneme(D) + ENDIF + ENDIF + + CALL base2/d +endphoneme + +phoneme b + vcd blb stop + + IF thisPh(isWordStart) AND nextPh(isVowel) THEN + IF prevPh(isPause) OR prevPh(isNasal) THEN + ELSE + ChangePhoneme(B) + ENDIF + ENDIF + + CALL base/b +endphoneme + phoneme D vcd dnt frc @@ -71,7 +104,7 @@ endphoneme phoneme v# // a shorter [v], a little towards [b] vcd lbd frc - ipa v + ipa ʋ lengthmod 6 voicingswitch f Vowelin f1=1 f2=1000 -300 -200 f3=-300 100 diff --git a/phsource/ph_tamil b/phsource/ph_tamil index e26801fa..9ebcc7bf 100644 --- a/phsource/ph_tamil +++ b/phsource/ph_tamil @@ -81,18 +81,13 @@ endphoneme phoneme u vowel starttype #u endtype #u length 110 - IF prevPhW(isVel) THEN - FMT(vowel/u_bck2) - ELSE - ChangeIfNotStressed(U) - ENDIF + ChangeIfNotStressed(U) FMT(vowel/u_6) endphoneme phoneme U vowel starttype #u endtype #u length 110 - ipa ʉ FMT(vowel/u#_3) endphoneme @@ -100,7 +95,6 @@ phoneme u: vowel starttype #u endtype #u length 260 IF prevPhW(isVel) THEN - FMT(vowel/u_bck2) ELSE ChangeIfNotStressed(U:) ENDIF @@ -109,7 +103,6 @@ endphoneme phoneme U: vowel starttype #u endtype #u - ipa ʉː length 240 FMT(vowel/u#_3) endphoneme diff --git a/phsource/ph_zh b/phsource/ph_zh index 9fdeb198..5377218a 100644 --- a/phsource/ph_zh +++ b/phsource/ph_zh @@ -199,6 +199,7 @@ endphoneme phoneme tS; vls pal afr sibilant palatal + ipa tɕ lengthmod 2 Vowelin f1=0 f2=2700 400 600 f3=300 80 WAV(ustop/tsh_pzd_unasp) @@ -206,6 +207,7 @@ endphoneme phoneme tS;h vls pal afr sibilant palatal + ipa tɕh lengthmod 2 Vowelin f1=0 f2=2700 400 600 f3=300 80 WAV(ustop/tsh_pzd, 80) @@ -214,6 +216,7 @@ endphoneme phoneme S; vls pla frc sibilant lengthmod 2 + ipa ɕ Vowelin f1=0 f2=2700 400 600 f3=300 80 WAV(ufric/sh_pzd2, 20) endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index f72e5f23..291a231e 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -858,7 +858,7 @@ endphoneme //******************************************************************* -phoneme b +phoneme b vcd blb stop voicingswitch p Vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk @@ -961,6 +961,7 @@ endphoneme phoneme dZ; vcd pla afr sibilant palatal voicingswitch tS; + ipa dʑ lengthmod 5 Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 Vowelout f1=2 f2=2700 400 600 f3=300 80 @@ -1188,6 +1189,7 @@ endphoneme phoneme Z; vcd pal frc sibilant palatal voicingswitch S; + ipa ʑ lengthmod 6 Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70 Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk @@ -1334,6 +1336,7 @@ endphoneme phoneme tS; vls pal afr sibilant palatal voicingswitch dZ; + ipa tɕ lengthmod 2 Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70 @@ -1494,6 +1497,7 @@ endphoneme phoneme S; vls pal frc sibilant palatal voicingswitch Z; + ipa ɕ lengthmod 3 Vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70 Vowelout f1=1 f2=2700 400 600 f3=200 70 rate diff --git a/phsource/vwl_fr/a2r b/phsource/vwl_fr/a2r index 082ae823..694e99e6 100755 Binary files a/phsource/vwl_fr/a2r and b/phsource/vwl_fr/a2r differ diff --git a/phsource/vwl_fr/aa2r b/phsource/vwl_fr/aa2r index e8ca82fd..f66717df 100755 Binary files a/phsource/vwl_fr/aa2r and b/phsource/vwl_fr/aa2r differ diff --git a/phsource/vwl_fr/e2r b/phsource/vwl_fr/e2r index 84b1d0d5..cab37b91 100755 Binary files a/phsource/vwl_fr/e2r and b/phsource/vwl_fr/e2r differ diff --git a/phsource/vwl_fr/e_2r b/phsource/vwl_fr/e_2r index e58e63b7..bb2850f3 100755 Binary files a/phsource/vwl_fr/e_2r and b/phsource/vwl_fr/e_2r differ diff --git a/phsource/vwl_fr/ee2r b/phsource/vwl_fr/ee2r index cee7d674..addbfcea 100755 Binary files a/phsource/vwl_fr/ee2r and b/phsource/vwl_fr/ee2r differ diff --git a/phsource/vwl_fr/i2r b/phsource/vwl_fr/i2r index 07654f0a..a6d5470a 100755 Binary files a/phsource/vwl_fr/i2r and b/phsource/vwl_fr/i2r differ diff --git a/phsource/vwl_fr/o2r b/phsource/vwl_fr/o2r index 4662dff6..5f2c23b9 100755 Binary files a/phsource/vwl_fr/o2r and b/phsource/vwl_fr/o2r differ diff --git a/phsource/vwl_fr/oo2r b/phsource/vwl_fr/oo2r index 438c2d39..59484f0e 100755 Binary files a/phsource/vwl_fr/oo2r and b/phsource/vwl_fr/oo2r differ diff --git a/phsource/vwl_fr/r@ b/phsource/vwl_fr/r@ index 5c4db707..57e9a26b 100755 Binary files a/phsource/vwl_fr/r@ and b/phsource/vwl_fr/r@ differ diff --git a/phsource/vwl_fr/r@2 b/phsource/vwl_fr/r@2 index e4c82448..cad0b48a 100755 Binary files a/phsource/vwl_fr/r@2 and b/phsource/vwl_fr/r@2 differ diff --git a/phsource/vwl_fr/r_ b/phsource/vwl_fr/r_ index 808dd5b4..91402bbe 100755 Binary files a/phsource/vwl_fr/r_ and b/phsource/vwl_fr/r_ differ diff --git a/phsource/vwl_fr/r_@ b/phsource/vwl_fr/r_@ index ce8bc0f5..17df123a 100755 Binary files a/phsource/vwl_fr/r_@ and b/phsource/vwl_fr/r_@ differ diff --git a/phsource/vwl_fr/r_a b/phsource/vwl_fr/r_a index b1fc28f1..40c6019f 100755 Binary files a/phsource/vwl_fr/r_a and b/phsource/vwl_fr/r_a differ diff --git a/phsource/vwl_fr/r_e b/phsource/vwl_fr/r_e index 091c3962..3f188ea8 100755 Binary files a/phsource/vwl_fr/r_e and b/phsource/vwl_fr/r_e differ diff --git a/phsource/vwl_fr/r_i b/phsource/vwl_fr/r_i index 62906f31..1576ac2e 100755 Binary files a/phsource/vwl_fr/r_i and b/phsource/vwl_fr/r_i differ diff --git a/phsource/vwl_fr/r_n b/phsource/vwl_fr/r_n index 3ff69b13..47e9b3a1 100755 Binary files a/phsource/vwl_fr/r_n and b/phsource/vwl_fr/r_n differ diff --git a/phsource/vwl_fr/r_o b/phsource/vwl_fr/r_o index ff1fd4f5..d454ade0 100755 Binary files a/phsource/vwl_fr/r_o and b/phsource/vwl_fr/r_o differ diff --git a/phsource/vwl_fr/r_u b/phsource/vwl_fr/r_u index 12d51848..eb2f72df 100755 Binary files a/phsource/vwl_fr/r_u and b/phsource/vwl_fr/r_u differ diff --git a/phsource/vwl_fr/r_y b/phsource/vwl_fr/r_y index 31aea7ff..aa92d32b 100755 Binary files a/phsource/vwl_fr/r_y and b/phsource/vwl_fr/r_y differ diff --git a/phsource/vwl_fr/ra b/phsource/vwl_fr/ra index 0c98aca0..9bd9526d 100755 Binary files a/phsource/vwl_fr/ra and b/phsource/vwl_fr/ra differ diff --git a/phsource/vwl_fr/raa b/phsource/vwl_fr/raa index 38eb3655..e6164ec6 100755 Binary files a/phsource/vwl_fr/raa and b/phsource/vwl_fr/raa differ diff --git a/phsource/vwl_fr/re b/phsource/vwl_fr/re index a14826ef..07e5222b 100755 Binary files a/phsource/vwl_fr/re and b/phsource/vwl_fr/re differ diff --git a/phsource/vwl_fr/re2 b/phsource/vwl_fr/re2 index a9599dc9..a2cf4874 100755 Binary files a/phsource/vwl_fr/re2 and b/phsource/vwl_fr/re2 differ diff --git a/phsource/vwl_fr/ree b/phsource/vwl_fr/ree index fc9f779c..54b4f379 100755 Binary files a/phsource/vwl_fr/ree and b/phsource/vwl_fr/ree differ diff --git a/phsource/vwl_fr/ri b/phsource/vwl_fr/ri index 36975db6..86c83831 100755 Binary files a/phsource/vwl_fr/ri and b/phsource/vwl_fr/ri differ diff --git a/phsource/vwl_fr/rj b/phsource/vwl_fr/rj index 1d65fb7a..c5a51cc4 100755 Binary files a/phsource/vwl_fr/rj and b/phsource/vwl_fr/rj differ diff --git a/phsource/vwl_fr/ro b/phsource/vwl_fr/ro index de97a1ff..b445fe15 100755 Binary files a/phsource/vwl_fr/ro and b/phsource/vwl_fr/ro differ diff --git a/phsource/vwl_fr/roo b/phsource/vwl_fr/roo index 75b14378..f8aec094 100755 Binary files a/phsource/vwl_fr/roo and b/phsource/vwl_fr/roo differ diff --git a/phsource/vwl_fr/ru b/phsource/vwl_fr/ru index c25b8968..277bfa61 100755 Binary files a/phsource/vwl_fr/ru and b/phsource/vwl_fr/ru differ diff --git a/phsource/vwl_fr/rw b/phsource/vwl_fr/rw index cf21a65f..08ed5be8 100755 Binary files a/phsource/vwl_fr/rw and b/phsource/vwl_fr/rw differ diff --git a/phsource/vwl_fr/ry b/phsource/vwl_fr/ry index 6c07b3ed..5614c379 100755 Binary files a/phsource/vwl_fr/ry and b/phsource/vwl_fr/ry differ diff --git a/phsource/vwl_fr/u2r b/phsource/vwl_fr/u2r index 68e489c0..49da6ecb 100755 Binary files a/phsource/vwl_fr/u2r and b/phsource/vwl_fr/u2r differ diff --git a/phsource/vwl_fr/y2r b/phsource/vwl_fr/y2r index 2145750f..6925f4aa 100755 Binary files a/phsource/vwl_fr/y2r and b/phsource/vwl_fr/y2r differ diff --git a/src/compiledata.cpp b/src/compiledata.cpp index 225f6ea0..8dd96ce4 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "wx/wx.h" #include "wx/wfstream.h" @@ -359,6 +360,8 @@ static PHONEME_TAB *phoneme_out; static int n_phcodes_list[N_PHONEME_TABS]; static PHONEME_TAB_LIST phoneme_tab_list2[N_PHONEME_TABS]; static PHONEME_TAB *phoneme_tab2; +static int phoneme_flags; +static int place_articulation; #define N_PROCS 50 int n_procs; @@ -838,16 +841,41 @@ static int ph_sorter(char **a, char **b) -static void PrintPhonemesUsed(FILE *f, const char *dictname) -{//========================================================= +static void PrintPhonemesUsed(FILE *f, const char *dsource, const char *dictname) +{//============================================================================== int ix; PHONEME_TAB *ph; PHONEME_TAB *ph_tab[N_PHONEME_TAB]; int count = 0; int n_ph = 0; int section = 0; + time_t mod_time; + char fname[sizeof(path_home)+45]; + struct stat statbuf; + char time_string[20]; + const char *files[] = {"rules","list","listx"}; - fprintf(f,"\n\nDictionary %s_dict\n",dictname); + // find the date-stamp of the dictionary source files + mod_time = 0; + for(ix=0; ix<3; ix++) + { + sprintf(fname,"%s%s_%s",dsource, dictname, files[ix]); + if(stat(fname,&statbuf) == 0) + { + if(statbuf.st_mtime > mod_time) + mod_time = statbuf.st_mtime; + } + } + + if(mod_time > 0) + { + strftime(time_string, sizeof(time_string), "%F", localtime(&mod_time)); + fprintf(f,"\n\nDictionary %s_dict %s\n",dictname, time_string); + } + else + { + fprintf(f,"\n\nDictionary %s_dict\n",dictname); + } fflush(f); for(ix=0; (ix 127) + { + value = 127; + error("Parameter > 127",NULL); + } + if(value < -128) + { + value = -128; + error("Parameter < -128",NULL); + } + } + else + { + value = NextItemBrackets(tNUMBER,1); + if(value > 255) + { + value = 255; + error("Parameter > 255",NULL); + } + } } addr = LoadDataFile(path, isvowel); addr = addr / 4; // addr is words not bytes @@ -2525,6 +2575,18 @@ static void CallPhoneme(void) if((ph = FindPhoneme(item_string)) == NULL) return; addr = ph->program; + + if(phoneme_out->type == phINVALID) + { + // Phoneme type has not been set. Copy it from the called phoneme + phoneme_out->type = ph->type; + phoneme_flags = ph->phflags & ~phARTICULATION; + place_articulation = (ph->phflags & phARTICULATION) >> 16; + phoneme_out->start_type = ph->start_type; + phoneme_out->end_type = ph->end_type; + phoneme_out->std_length = ph->std_length; + phoneme_out->length_mod = ph->length_mod; + } } *prog_out++ = i_CALLPH + (addr >> 16); @@ -2551,8 +2613,6 @@ static void InstnPlusPhoneme(int instn) int CompilePhoneme(int compile_phoneme) {//==================================== int endphoneme = 0; - int phoneme_flags = 0; - int place_articulation = 0; int keyword; int value; int phcode = 0; @@ -2568,6 +2628,8 @@ int CompilePhoneme(int compile_phoneme) if_level = 0; if_stack[0].returned = 0; after_if = 0; + phoneme_flags = 0; + place_articulation = 0; NextItem(tSTRING); if(compile_phoneme) diff --git a/src/compiledict.cpp b/src/compiledict.cpp index f99e441c..faccbeb3 100644 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -1118,6 +1118,9 @@ static void copy_rule_string(char *string, int &state) case 'b': sxflags |= SUFX_B; break; + case 'a': + sxflags |= SUFX_A; + break; default: if(isdigit(c)) value = (value*10) + (c - '0'); diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 5c9ae743..fcba0acc 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -245,6 +245,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) char fname[sizeof(path_home)+20]; strcpy(dictionary_name,name); // currently loaded dictionary name + strcpy(tr->dictionary_name, name); // Load a pronunciation data file into memory // bytes 0-3: offset to rules data @@ -634,32 +635,32 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out) } } } - WritePhMnemonic(phon_out, &phon_out_ix, plist->ph, plist); - if(plist->synthflags & SFLAG_LENGTHEN) - { - WritePhMnemonic(phon_out, &phon_out_ix, phoneme_tab[phonLENGTHEN], NULL); - } - if((plist->synthflags & SFLAG_SYLLABLE) && (plist->type != phVOWEL)) - { - // syllablic consonant - WritePhMnemonic(phon_out, &phon_out_ix, phoneme_tab[phonSYLLABIC], NULL); - } if(plist->ph->code == phonSWITCH) { // the tone_ph field contains a phoneme table number p = phoneme_tab_list[plist->tone_ph].name; - while((c = *p++) != 0) - { - if(option_phonemes != 3) - phon_out[phon_out_ix++] = c; - } - phon_out[phon_out_ix++] = ' '; + + sprintf(&phon_out[phon_out_ix], "(%s)", p); + phon_out_ix += (strlen(p) + 2); } else - if(plist->tone_ph > 0) { - WritePhMnemonic(phon_out, &phon_out_ix, phoneme_tab[plist->tone_ph], NULL); + WritePhMnemonic(phon_out, &phon_out_ix, plist->ph, plist); + + if(plist->synthflags & SFLAG_LENGTHEN) + { + WritePhMnemonic(phon_out, &phon_out_ix, phoneme_tab[phonLENGTHEN], NULL); + } + if((plist->synthflags & SFLAG_SYLLABLE) && (plist->type != phVOWEL)) + { + // syllablic consonant + WritePhMnemonic(phon_out, &phon_out_ix, phoneme_tab[phonSYLLABIC], NULL); + } + if(plist->tone_ph > 0) + { + WritePhMnemonic(phon_out, &phon_out_ix, phoneme_tab[plist->tone_ph], NULL); + } } } @@ -810,7 +811,7 @@ static int Unpronouncable_en(Translator *tr, char *word) index += utf8_in(&c,&word[index]); count++; - if((c==0) || (c==' ')) + if((c==0) || (c==' ') || (c == '\'')) break; if(IsVowel(tr, c) || (c == 'y')) @@ -890,7 +891,7 @@ int Unpronouncable(Translator *tr, char *word) if(tr->langopts.param[LOPT_UNPRONOUNCABLE] == 1) return(0); - if((*word == ' ') || (*word == 0)) + if(((c = *word) == ' ') || (c == 0) || (c == '\'')) return(0); index = 0; @@ -898,7 +899,7 @@ int Unpronouncable(Translator *tr, char *word) for(;;) { index += utf8_in(&c,&word[index]); - if((c==0) || (c==' ')) + if((c==0) || (c==' ') || (c == '\'')) break; if(count==0) @@ -925,7 +926,7 @@ int Unpronouncable(Translator *tr, char *word) vowel_posn--; // disregard this as the initial letter when counting if(vowel_posn > (tr->langopts.max_initial_consonants+1)) - return(1); // no vowel, or no vowel in first four letters + return(1); // no vowel, or no vowel in first few letters return(0); @@ -1167,6 +1168,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int opt_length; int done; int stressflags; + int dflags = 0; signed char vowel_stress[N_WORD_PHONEMES/2]; char syllable_weight[N_WORD_PHONEMES/2]; @@ -1185,6 +1187,9 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, stressflags = tr->langopts.stress_flags; + if(dictionary_flags != NULL) + dflags = dictionary_flags[0]; + /* copy input string into internal buffer */ for(ix=0; ixlangopts.stress_flags & 1) && (vowel_count == 2)) { @@ -1994,13 +1999,15 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ break; case RULE_NOTVOWEL: - if(!IsLetter(tr, letter_w,0)) + if(IsLetter(tr, letter_w, 0) || ((letter_w == ' ') && (word_flags & FLAG_SUFFIX_VOWEL))) + { + failed = 1; + } + else { add_points = (20-distance_right); post_ptr += letter_xbytes; } - else - failed = 1; break; case RULE_DIGIT: diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index 30f266e7..ee559136 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -178,7 +178,7 @@ if(argc > 1) // Make a menubar - myframe->SetMenuBar(MakeMenu(0)); + myframe->SetMenuBar(MakeMenu(0, voice_name2)); myframe->CreateStatusBar(); myframe->SetVoiceTitle(voice_name2); @@ -240,7 +240,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) EVT_TIMER(1, MyFrame::OnTimer) EVT_SIZE(MyFrame::OnSize) - EVT_SASH_DRAGGED_RANGE(ID_WINDOW_TOP, ID_WINDOW_BOTTOM, MyFrame::OnSashDrag) + EVT_SASH_DRAGGED(ID_WINDOW_LEFT, MyFrame::OnSashDrag) END_EVENT_TABLE() @@ -260,22 +260,16 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c int result; int param; - // Create some dummy layout windows -wxSashLayoutWindow *win; - // Another window to the left of the client window - win = new wxSashLayoutWindow(this, ID_WINDOW_LEFT2, + m_leftWindow = new wxSashLayoutWindow(this, ID_WINDOW_LEFT, wxDefaultPosition, wxSize(298, 30), wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN); - win->SetDefaultSize(wxSize(310, 1000)); - win->SetOrientation(wxLAYOUT_VERTICAL); - win->SetAlignment(wxLAYOUT_LEFT); -// win->SetBackgroundColour(wxColour(0, 255, 255)); - win->SetSashVisible(wxSASH_RIGHT, TRUE); + m_leftWindow->SetDefaultSize(wxSize(310, 1000)); + m_leftWindow->SetOrientation(wxLAYOUT_VERTICAL); + m_leftWindow->SetAlignment(wxLAYOUT_LEFT); + m_leftWindow->SetSashVisible(wxSASH_RIGHT, TRUE); - m_leftWindow2 = win; - - notebook = new wxNotebook(m_leftWindow2,-1); + notebook = new wxNotebook(m_leftWindow,-1); // notebook->AddPage(voicedlg,_T("Voice"),FALSE); formantdlg = new FormantDlg(notebook); notebook->AddPage(formantdlg,_T(" Spect"),FALSE); @@ -336,12 +330,14 @@ void MyFrame::SetVoiceTitle(char *voice_name) {//========================================== char buf[100]; SetTitle(AppName + _T(" - ") + wxString(voice_name,wxConvLocal) + _T(" voice")); - if(data_menu != NULL) + if((data_menu != NULL) && (translator != NULL)) { - sprintf(buf,"Compile &dictionary '%s'",dictionary_name); + sprintf(buf,"Compile &dictionary '%s'",translator->dictionary_name); data_menu->SetLabel(MENU_COMPILE_DICT, wxString(buf,wxConvLocal)); - sprintf(buf,"&Layout '%s_rules' file",dictionary_name); + sprintf(buf,"&Layout '%s_rules' file",translator->dictionary_name); data_menu->SetLabel(MENU_FORMAT_DICTIONARY, wxString(buf,wxConvLocal)); + sprintf(buf,"&Sort '%s_rules' file",translator->dictionary_name); + data_menu->SetLabel(MENU_SORT_DICTIONARY, wxString(buf,wxConvLocal)); } } @@ -563,8 +559,8 @@ void DisplayErrorFile(const char *fname) len = GetFileLength(fname); if(len > 0) { - if(len > 2000) - len = 2000; // restrict length to pppppevent crash in wxLogMessage() + if(len > 1500) + len = 1500; // restrict length to pppppevent crash in wxLogMessage() msg = (char *)malloc(len+1); if(msg != NULL) { @@ -633,8 +629,8 @@ void MyFrame::OnTools(wxCommandEvent& event) sprintf(fname_log,"%s%s",path_dsource,"dict_log"); log = fopen(fname_log,"w"); - LoadDictionary(translator, dictionary_name, 0); - if((err = CompileDictionary(path_dsource,dictionary_name,log,err_fname,debug_flag)) < 0) + LoadDictionary(translator, translator->dictionary_name, 0); + if((err = CompileDictionary(path_dsource,translator->dictionary_name,log,err_fname,debug_flag)) < 0) { wxLogError(_T("Can't access file:\n")+wxString(err_fname,wxConvLocal)); @@ -729,37 +725,26 @@ void MyFrame::OnSpeak(wxCommandEvent& event) void MyFrame::OnSashDrag(wxSashEvent& event) { - if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE) - return; + int w, h; - switch (event.GetId()) - { - case ID_WINDOW_TOP: - { - m_topWindow->SetDefaultSize(wxSize(1000, event.GetDragRect().height)); - break; - } - case ID_WINDOW_LEFT1: - { - m_leftWindow1->SetDefaultSize(wxSize(event.GetDragRect().width, 1000)); - break; - } - case ID_WINDOW_LEFT2: - { - m_leftWindow2->SetDefaultSize(wxSize(event.GetDragRect().width, 1000)); - break; - } - case ID_WINDOW_BOTTOM: - { - m_bottomWindow->SetDefaultSize(wxSize(1000, event.GetDragRect().height)); - break; - } - } - wxLayoutAlgorithm layout; - layout.LayoutMDIFrame(this); + if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE) + return; - // Leaves bits of itself behind sometimes - GetClientWindow()->Refresh(); + GetClientSize(&w, &h); + + switch (event.GetId()) + { + case ID_WINDOW_LEFT: + { + m_leftWindow->SetDefaultSize(wxSize(event.GetDragRect().width, h)); + break; + } + } + wxLayoutAlgorithm layout; + layout.LayoutMDIFrame(this); + + // Leaves bits of itself behind sometimes + GetClientWindow()->Refresh(); } diff --git a/src/klatt.cpp b/src/klatt.cpp index c4fb783b..f8b3a647 100644 --- a/src/klatt.cpp +++ b/src/klatt.cpp @@ -421,7 +421,7 @@ if(option_log_frames) #endif out = resonator(&(kt_globals.rsn[Rout]),out); - temp = (out * wdata.amplitude * kt_globals.amp_gain0) ; /* Convert back to integer */ + temp = (int)(out * wdata.amplitude * kt_globals.amp_gain0) ; /* Convert back to integer */ // mix with a recorded WAV if required for this phoneme diff --git a/src/main.h b/src/main.h index ff146218..90942259 100755 --- a/src/main.h +++ b/src/main.h @@ -8,7 +8,7 @@ typedef unsigned char UCHAR; -extern wxMenuBar *MakeMenu(int type); +extern wxMenuBar *MakeMenu(int type, const char *dict_name); extern wxString path_phsource; extern wxString path_speaktext; @@ -56,10 +56,7 @@ class MyFrame: public wxMDIParentFrame protected: - wxSashLayoutWindow* m_topWindow; - wxSashLayoutWindow* m_leftWindow1; - wxSashLayoutWindow* m_leftWindow2; - wxSashLayoutWindow* m_bottomWindow; + wxSashLayoutWindow* m_leftWindow; wxTimer m_timer; DECLARE_EVENT_TABLE() @@ -177,10 +174,7 @@ enum { SPECTSEQ_VOICEDLG }; -#define ID_WINDOW_TOP 100 -#define ID_WINDOW_LEFT1 101 -#define ID_WINDOW_LEFT2 102 -#define ID_WINDOW_BOTTOM 103 +#define ID_WINDOW_LEFT 101 diff --git a/src/mbrowrap.cpp b/src/mbrowrap.cpp index d1c3ed46..3c250c4a 100644 --- a/src/mbrowrap.cpp +++ b/src/mbrowrap.cpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/menus.cpp b/src/menus.cpp index 0f86760b..7a450db4 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -22,13 +22,12 @@ #include "main.h" - wxMenu *speak_menu; wxMenu *data_menu = NULL; -wxMenuBar *MakeMenu(int type) -{//========================== - +wxMenuBar *MakeMenu(int type, const char *dict_name) +{//================================================= + char buf[100]; wxMenu *file_menu; wxMenu *help_menu; wxMenu *option_menu = NULL; @@ -95,6 +94,13 @@ wxMenuBar *MakeMenu(int type) data_menu->Append(MENU_FORMAT_DICTIONARY, _("&Layout *_rules file")); data_menu->Append(MENU_SORT_DICTIONARY, _("&Sort *_rules file")); + sprintf(buf,"Compile &dictionary '%s'",dict_name); + data_menu->SetLabel(MENU_COMPILE_DICT, wxString(buf,wxConvLocal)); + sprintf(buf,"&Layout '%s_rules' file",dict_name); + data_menu->SetLabel(MENU_FORMAT_DICTIONARY, wxString(buf,wxConvLocal)); + sprintf(buf,"&Sort '%s_rules' file",dict_name); + data_menu->SetLabel(MENU_SORT_DICTIONARY, wxString(buf,wxConvLocal)); + // OPTIONS MENU paths_menu = new wxMenu; paths_menu->Append(MENU_PATH0, _("Master phonemes file...")); diff --git a/src/phoneme.h b/src/phoneme.h index cda100aa..353b6746 100644 --- a/src/phoneme.h +++ b/src/phoneme.h @@ -36,6 +36,7 @@ // phoneme properties // bits 16-19 give place of articulation +#define phARTICULATION 0xf0000 #define phWAVE 0x01 #define phUNSTRESSED 0x02 #define phFORTIS 0x08 @@ -50,7 +51,6 @@ #define phBRKAFTER 0x4000 // [*] add a post-pause #define phBEFOREPAUSE 0x8000 // replace with the link_out phoneme if the next phoneme is a pause - #define phNONSYLLABIC 0x100000 // don't count this vowel as a syllable when finding the stress position #define phLONG 0x200000 #define phLENGTHENSTOP 0x400000 // make the pre-pause slightly longer diff --git a/src/prosodydisplay.cpp b/src/prosodydisplay.cpp index 9541426e..cc08acf8 100644 --- a/src/prosodydisplay.cpp +++ b/src/prosodydisplay.cpp @@ -591,6 +591,8 @@ void MyFrame::OnProsody(wxCommandEvent& WXUNUSED(event)) // Open the Prosody display window // Make another frame, containing a canvas + int h, w, w2; + if(prosodyframe != NULL) { // The Prosody window is already open @@ -598,8 +600,10 @@ void MyFrame::OnProsody(wxCommandEvent& WXUNUSED(event)) return; } + m_leftWindow->GetSize(&w2, &h); + GetClientSize(&w, &h); prosodyframe = new ChildFrProsody(myframe, _T(""), - wxPoint(10, 200), wxSize(1000, 300), + wxPoint(0, 100), wxSize(w-w2, 420), wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE); @@ -622,7 +626,7 @@ void MyFrame::OnProsody(wxCommandEvent& WXUNUSED(event)) prosodycanvas = canvas; // Associate the menu bar with the frame - prosodyframe->SetMenuBar(MakeMenu(2)); + prosodyframe->SetMenuBar(MakeMenu(2,translator->dictionary_name)); prosodyframe->prosodycanvas = canvas; prosodyframe->Show(TRUE); diff --git a/src/spectdisplay.cpp b/src/spectdisplay.cpp index 5b6cf548..aaf2b8d3 100644 --- a/src/spectdisplay.cpp +++ b/src/spectdisplay.cpp @@ -35,6 +35,7 @@ #include "phoneme.h" #include "synthesize.h" #include "voice.h" +#include "translate.h" #include "spect.h" #include "options.h" @@ -981,6 +982,7 @@ void MyFrame::OnNewWindow(wxCommandEvent& event) SpectSeq *spectseq; wxString leaf; wxString pathload; + int width, height; if(event.GetId() == MENU_SPECTRUM) pathload = path_spectload; @@ -1021,10 +1023,11 @@ void MyFrame::OnNewWindow(wxCommandEvent& event) else path_spectload2 = path.GetPath(); - // Make another frame, containing a canvas + // Make another frame, containing a canvas + GetClientSize(&width, &height); MyChild *subframe = new MyChild(myframe, _T("Spectrum"), - wxPoint(10, 10), wxSize(300, 300), - wxDEFAULT_FRAME_STYLE | wxMAXIMIZE | + wxPoint(10, 0), wxSize(500, height), + wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE); subframe->SetTitle(leaf); @@ -1032,14 +1035,13 @@ void MyFrame::OnNewWindow(wxCommandEvent& event) // Give it a status line subframe->CreateStatusBar(); - int width, height; subframe->GetClientSize(&width, &height); SpectDisplay *canvas = new SpectDisplay(subframe, wxPoint(0, 0), wxSize(width, height), spectseq); canvas->savepath = filename; currentcanvas = canvas; // Associate the menu bar with the frame - subframe->SetMenuBar(MakeMenu(1)); + subframe->SetMenuBar(MakeMenu(1,translator->dictionary_name)); subframe->canvas = canvas; subframe->Show(TRUE); diff --git a/src/synth_mbrola.cpp b/src/synth_mbrola.cpp index 20a27339..4919a890 100644 --- a/src/synth_mbrola.cpp +++ b/src/synth_mbrola.cpp @@ -522,7 +522,6 @@ int MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, int resume, FILE *f_mbr memset(&fmtp, 0, sizeof(fmtp)); InterpretPhoneme(NULL, 0, p, &phdata); fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; - fmtp.fmt_length = phdata.sound_param[pd_FMT]; len = DoSpect2(p->ph, 0, &fmtp, p, -1); // len = DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,-1); len = (len * 1000)/samplerate; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index a6fd6254..1e9b7e86 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,8 +35,8 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.43.52 04.Jul.10"; -const int version_phdata = 0x014351; +const char *version_string = "1.43.57 18.Jul.10"; +const int version_phdata = 0x014354; int option_device_number = -1; FILE *f_logespeak = NULL; @@ -1041,15 +1041,15 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ } } else - if(instn2 == 4) + if(instn2 ==pd_ADDWAV) { // addWav(), return if previous instruction was FMT() or WAV() end_flag--; } - if((instn2 != 1) && (instn2 != 4)) + if((instn2 == pd_VWLSTART) || (instn2 == pd_VWLEND)) { - // FMT, VowelStart or VowelEnding. + // VowelStart or VowelEnding. phdata->sound_param[instn2] = param_sc; // sign extend } } diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 5d9de350..74873304 100644 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -54,6 +54,7 @@ static int last_wcmdq; static int pitch_length; static int amp_length; static int modn_flags; +static int fmt_amplitude=0; static int syllable_start; static int syllable_end; @@ -223,6 +224,13 @@ static void DoPause(int length, int control) wcmdq[wcmdq_tail][1] = len; WcmdqInc(); last_frame = NULL; + + if(fmt_amplitude != 0) + { + wcmdq[wcmdq_tail][0] = WCMD_FMT_AMPLITUDE; + wcmdq[wcmdq_tail][1] = fmt_amplitude = 0; + WcmdqInc(); + } } // end of DoPause @@ -972,7 +980,7 @@ static void StartSyllable(void) int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_LIST *plist, int modulation) {//======================================================================================================== - // which 0 not a vowel, 1 start of vowel, 2 body and end of vowel + // which: 0 not a vowel, 1 start of vowel, 2 body and end of vowel // length_mod: 256 = 100% // modulation: -1 = don't write to wcmdq @@ -1025,6 +1033,15 @@ if(which==1) if(frames == NULL) return(0); // not found + if(fmt_params->fmt_amp != fmt_amplitude) + { + // an amplitude adjustment is specified for this sequence + q = wcmdq[wcmdq_tail]; + q[0] = WCMD_FMT_AMPLITUDE; + q[1] = fmt_amplitude = fmt_params->fmt_amp; + WcmdqInc(); + } + frame1 = frames[0].frame; if(voice->klattv[0]) wcmd_spect = WCMD_KLATT; @@ -1166,6 +1183,16 @@ if(which==1) total_len += len; } } + + if((which != 1) && (fmt_amplitude != 0)) + { + q = wcmdq[wcmdq_tail]; + q[0] = WCMD_FMT_AMPLITUDE; + q[1] = fmt_amplitude = 0; + WcmdqInc(); + } + + return(total_len); } // end of DoSpect @@ -1429,7 +1456,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) // a period of voicing before the release InterpretPhoneme(NULL, 0x01, p, &phdata); fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; - fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.fmt_amp = phdata.sound_param[pd_FMT]; DoSpect2(ph, 0, &fmtp, p, 0); if(p->synthflags & SFLAG_LENGTHEN) @@ -1457,7 +1484,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) } InterpretPhoneme(NULL,0, p, &phdata); fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; - fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.fmt_amp = phdata.sound_param[pd_FMT]; fmtp.wav_addr = phdata.sound_addr[pd_ADDWAV]; fmtp.wav_amp = phdata.sound_param[pd_ADDWAV]; DoSpect2(ph, 0, &fmtp, p, 0); @@ -1504,7 +1531,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) memset(&fmtp, 0, sizeof(fmtp)); fmtp.std_length = phdata.pd_param[i_SET_LENGTH]*2; fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; - fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.fmt_amp = phdata.sound_param[pd_FMT]; fmtp.wav_addr = phdata.sound_addr[pd_ADDWAV]; fmtp.wav_amp = phdata.sound_param[pd_ADDWAV]; @@ -1529,7 +1556,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) InterpretPhoneme(NULL,0, p, &phdata); fmtp.std_length = phdata.pd_param[i_SET_LENGTH]*2; fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; - fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.fmt_amp = phdata.sound_param[pd_FMT]; if(next->type==phVOWEL) { @@ -1578,7 +1605,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) InterpretPhoneme(NULL, 0, p, &phdata); fmtp.std_length = phdata.pd_param[i_SET_LENGTH]*2; fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; - fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.fmt_amp = phdata.sound_param[pd_FMT]; fmtp.wav_addr = phdata.sound_addr[pd_ADDWAV]; fmtp.wav_amp = phdata.sound_param[pd_ADDWAV]; DoSpect2(p->ph, 0, &fmtp, p, modulation); @@ -1619,9 +1646,10 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) fmtp.use_vowelin = 1; fmtp.fmt_control = 1; fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; -// fmtp.fmt_length = phdata.sound_param[pd_FMT]; } + fmtp.fmt_amp = phdata.sound_param[pd_FMT]; + pitch_env = envelope_data[p->env]; amp_env = NULL; if(p->tone_ph != 0) @@ -1670,7 +1698,7 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) } fmtp.fmt_addr = phdata.sound_addr[pd_FMT]; - fmtp.fmt_length = phdata.sound_param[pd_FMT]; + fmtp.fmt_amp = phdata.sound_param[pd_FMT]; fmtp.transition0 = 0; fmtp.transition1 = 0; diff --git a/src/synthesize.h b/src/synthesize.h index bd01acc8..3eef6a24 100644 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -177,6 +177,7 @@ int mix_wavefile_offset; int amplitude; int amplitude_v; +int amplitude_fmt; // percentage amplitude adjustment for formant synthesis } WGEN_DATA; @@ -275,6 +276,7 @@ typedef struct { int use_vowelin; int fmt_addr; int fmt_length; + int fmt_amp; int fmt2_addr; int fmt2_lenadj; int wav_addr; @@ -466,6 +468,8 @@ extern unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1]; #define WCMD_VOICE 11 #define WCMD_EMBEDDED 12 #define WCMD_MBROLA_DATA 13 +#define WCMD_FMT_AMPLITUDE 14 + #define N_WCMDQ 160 diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index e376bf96..cf8103cb 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -60,8 +60,6 @@ static void Translator_Russian(Translator *tr); - - static void SetLetterVowel(Translator *tr, int c) {//============================================== tr->letter_bits[c] = (tr->letter_bits[c] & 0x40) | 0x81; // keep value for group 6 (front vowels e,i,y) @@ -618,7 +616,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.accents = 2; // Say "Capital" after the letter. tr->langopts.vowel_pause = 0; - tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_NOPAUSE | NUM_ROMAN | NUM_VIGESIMAL | NUM_DFRACTION_4; + tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_NOPAUSE | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_AFTER | NUM_VIGESIMAL | NUM_DFRACTION_4; SetLetterVowel(tr,'y'); } break; @@ -670,7 +668,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.spelling_stress = 1; tr->langopts.accents = 1; - tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_DECIMAL_COMMA | NUM_THOUS_SPACE | NUM_DFRACTION_2 | NUM_ROMAN_UC; + tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_DECIMAL_COMMA | NUM_THOUS_SPACE | NUM_DFRACTION_2 | NUM_ROMAN_CAPITALS; tr->langopts.numbers2 = 0x4a; // variant numbers before thousands,milliards tr->langopts.replace_chars = replace_cyrillic_latin; diff --git a/src/translate.cpp b/src/translate.cpp index 491a54d0..74816a85 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -862,7 +862,7 @@ if((wmark > 0) && (wmark < 8)) { // either all upper or all lower case - if((tr->langopts.numbers & NUM_ROMAN) || ((tr->langopts.numbers & NUM_ROMAN_UC) && (wflags & FLAG_ALL_UPPER))) + if((tr->langopts.numbers & NUM_ROMAN) || ((tr->langopts.numbers & NUM_ROMAN_CAPITALS) && (wflags & FLAG_ALL_UPPER))) { if((found = TranslateRoman(tr, word1, phonemes, wtab)) != 0) dictionary_flags[0] |= FLAG_ABBREV; // prevent emphasis if capitals @@ -920,6 +920,9 @@ if((wmark > 0) && (wmark < 8)) // find a remainder that we can pronounce. emphasize_allcaps = 0; + if(wordx[0] == '\'') + break; + if(posn > 0) non_initial = 1; @@ -934,6 +937,7 @@ if((wmark > 0) && (wmark < 8)) return(0); } +#ifdef deleted p = &wordx[word_length-3]; // this looks wrong. Doesn't consider multi-byte chars. if(memcmp(p,"'s ",3) == 0) { @@ -943,7 +947,7 @@ if((wmark > 0) && (wmark < 8)) p[1] = ' '; last_char = p[-1]; } - +#endif length=0; while(wordx[length] != ' ') length++; } @@ -952,7 +956,7 @@ if((wmark > 0) && (wmark < 8)) // anything left ? if(*wordx != ' ') { - if(unpron_phonemes[0] != 0) + if((unpron_phonemes[0] != 0) && (wordx[0] != '\'')) { // letters which have been spoken individually from affecting the pronunciation of the pronuncable part wordx[-1] = ' '; @@ -1163,9 +1167,11 @@ strcpy(phonemes2,phonemes); else { if(end_flags & FLAG_SUFX) - TranslateRules(tr, wordx, phonemes, N_WORD_PHONEMES, NULL,wflags | FLAG_SUFFIX_REMOVED, dictionary_flags); - else - TranslateRules(tr, wordx, phonemes, N_WORD_PHONEMES, NULL,wflags,dictionary_flags); + wflags |= FLAG_SUFFIX_REMOVED; + if(end_type & SUFX_A) + wflags |= FLAG_SUFFIX_VOWEL; + + TranslateRules(tr, wordx, phonemes, N_WORD_PHONEMES, NULL, wflags, dictionary_flags); if(phonemes[0] == phonSWITCH) { diff --git a/src/translate.h b/src/translate.h index ca842baa..92a487d9 100644 --- a/src/translate.h +++ b/src/translate.h @@ -109,6 +109,7 @@ #define FLAG_COMMA_AFTER 0x20000 // comma after this word #define FLAG_MULTIPLE_SPACES 0x40000 // word is preceded by multiple spaces, newline, or tab +#define FLAG_SUFFIX_VOWEL 0x08000000 // remember an initial vowel from the suffix #define FLAG_NO_TRACE 0x10000000 // passed to TranslateRules() to suppress dictionary lookup printout #define FLAG_NO_PREFIX 0x20000000 @@ -122,6 +123,8 @@ #define SUFX_Q 0x4000 // don't retranslate #define SUFX_T 0x10000 // don't affect the stress position in the stem #define SUFX_B 0x20000 // break, this character breaks the word into stem and suffix (used with SUFX_P) +#define SUFX_A 0x40000 // remember that the suffix starts with a vowel + #define FLAG_ALLOW_TEXTMODE 0x02 // allow dictionary to translate to text rather than phonemes #define FLAG_SUFX 0x04 @@ -380,16 +383,16 @@ typedef struct { #define NUM_DFRACTION_3 0x6000 #define NUM_DFRACTION_4 0x8000 #define NUM_DFRACTION_5 0xa000 -#define NUM_ORDINAL_DOT 0x10000 -#define NUM_ROMAN 0x20000 -#define NUM_ROMAN_UC 0x40000 -#define NUM_NOPAUSE 0x80000 -#define NUM_AND_HUNDRED 0x100000 -#define NUM_ROMAN_AFTER 0x200000 -#define NUM_VIGESIMAL 0x400000 -#define NUM_ROMAN_ORDINAL 0x800000 -#define NUM_ROMAN_CAPITALS 0x1000000 -#define NUM_THOUSAND_AND 0x2000000 +#define NUM_ORDINAL_DOT 0x10000 +#define NUM_NOPAUSE 0x20000 +#define NUM_AND_HUNDRED 0x40000 +#define NUM_THOUSAND_AND 0x80000 +#define NUM_VIGESIMAL 0x100000 + +#define NUM_ROMAN 0x1000000 +#define NUM_ROMAN_CAPITALS 0x2000000 +#define NUM_ROMAN_AFTER 0x4000000 +#define NUM_ROMAN_ORDINAL 0x8000000 // bits0-1=which numbers routine to use. // bit2= thousands separator must be space @@ -404,16 +407,17 @@ typedef struct { // bit11=say 19** as nineteen hundred // bit12=allow space as thousands separator (in addition to langopts.thousands_sep) // bits13-15 post-decimal-digits 0=single digits, 1=(LANG=it) 2=(LANG=pl) 3=(LANG=ro) - // bit16=dot after number indicates ordinal - // bit17=recognize roman numbers - // bit18=Roman numbers only if upper case - // bit19=don't add pause after a number - // bit20='and' before hundreds - // bit21= say "roman" after the number, not before - // bit22= vigesimal number, if tens are not found - // bit23=Roman numbers are ordinal numbers - // bit24=Roman numbers must be capital letters - // bit25='and' after thousands if there are no hundreds + + // bit16= dot after number indicates ordinal + // bit17= don't add pause after a number + // bit18= 'and' before hundreds + // bit19= 'and' after thousands if there are no hundreds + // bit20= vigesimal number, if tens are not found + + // bit24= recognize roman numbers + // bit25= Roman numbers only if upper case + // bit26= say "roman" after the number, not before + // bit27= Roman numbers are ordinal numbers int numbers; // bits 1-4 use variant form of numbers before thousands,millions,etc. @@ -476,6 +480,7 @@ typedef struct int translator_name; int transpose_max; int transpose_min; + char dictionary_name[40]; char phon_out[300]; char phonemes_repeat[20]; diff --git a/src/transldlg.cpp b/src/transldlg.cpp index 350db5c8..43dac73e 100644 --- a/src/transldlg.cpp +++ b/src/transldlg.cpp @@ -292,13 +292,14 @@ TranslDlg::TranslDlg(wxWindow *parent) : wxPanel(parent) t_phonetic = new wxTextCtrl(this,T_PHONETIC,_T(""),wxPoint(0,262), - wxSize(298,height_ph),wxTE_MULTILINE | wxTE_READONLY,wxDefaultValidator,_T("Phoneme translation window")); + wxSize(298,height_ph),wxTE_MULTILINE | wxTE_READONLY, wxDefaultValidator,_T("Phoneme translation window")); style_phonetic = t_phonetic->GetDefaultStyle(); font_phonetic = style_phonetic.GetFont(); font_size = font_phonetic.GetPointSize(); font_phonetic_large = font_phonetic; style_phonetic_large = style_phonetic; +//font_phonetic_large.SetFamily(wxFONTFAMILY_SWISS); font_phonetic_large.SetPointSize(font_size+1); style_phonetic_large.SetFont(font_phonetic_large); diff --git a/src/wavegen.cpp b/src/wavegen.cpp index c5c1ec0e..40ab3047 100644 --- a/src/wavegen.cpp +++ b/src/wavegen.cpp @@ -693,6 +693,7 @@ void WavegenInit(int rate, int wavemult_fact) max_hval = 0; wdata.amplitude = 32; + wdata.amplitude_fmt = 100; for(ix=0; ix> 8) * wdata.amplitude_fmt)/(10000 << 3); // switch sign of harmonics above about 900Hz, to reduce max peak amplitude h_switch_sign = 890 / (wdata.pitch >> 12); @@ -1200,7 +1202,8 @@ int Wavegen() } // adjust amplitude to compensate for fewer harmonics at higher pitch - amplitude2 = (wdata.amplitude * wdata.pitch)/(100 << 11); +// amplitude2 = (wdata.amplitude * wdata.pitch)/(100 << 11); + amplitude2 = (wdata.amplitude * (wdata.pitch >> 8) * wdata.amplitude_fmt)/(10000 << 3); if(glottal_flag > 0) { @@ -1535,7 +1538,7 @@ void SetEmbedded(int control, int value) general_amplitude = GetAmplitude(); break; - case EMBED_F: // emphasiis + case EMBED_F: // emphasis general_amplitude = GetAmplitude(); break; @@ -1837,6 +1840,7 @@ int WavegenFill(int fill_zeros) echo_complete -= length; } wdata.n_mix_wavefile = 0; + wdata.amplitude_fmt = 100; KlattReset(1); result = PlaySilence(length,resume); break; @@ -1907,6 +1911,11 @@ int WavegenFill(int fill_zeros) case WCMD_MBROLA_DATA: result = MbrolaFill(length, resume); break; + + case WCMD_FMT_AMPLITUDE: + if((wdata.amplitude_fmt = q[1]) == 0) + wdata.amplitude_fmt = 100; // percentage, but value=0 means 100% + break; } if(result==0)