From ebf0535e6df7e9b22e9ab9a5c6e8f9e42925aa32 Mon Sep 17 00:00:00 2001 From: jonsd Date: Sun, 18 Jul 2010 22:43:04 +0000 Subject: [PATCH] [1.43.57] Indicate language changes in IPA phoneme output. Phoneme definitions FMT(), second parameter is amplitude percentage. Phoneme definitions CALL(), If phoneme type is not defined, copy the static attributes from the called phoneme. Unpronouncable word check: stop when an apostrophe is reached. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@250 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/da_list | 4 +- dictsource/da_rules | 8 + dictsource/dict_phonemes | 126 +- dictsource/en_list | 3 +- dictsource/en_rules | 1 + dictsource/es_list | 14 +- dictsource/es_rules | 57 +- dictsource/fr_list | 109 +- dictsource/fr_rules | 2939 +++++++++++++++++++------------------- dictsource/hu_list | 17 +- dictsource/hu_rules | 13 + dictsource/nl_list | 133 +- dictsource/nl_rules | 107 +- dictsource/ta_rules | 16 + phsource/compile_report | 89 +- phsource/ph_afrikaans | 6 +- phsource/ph_albanian | 1 + phsource/ph_croatian | 2 + phsource/ph_english | 5 +- phsource/ph_english_rp | 5 +- phsource/ph_english_sc | 7 +- phsource/ph_french | 79 +- phsource/ph_hindi | 3 +- phsource/ph_macedonian | 1 + phsource/ph_portugal | 5 +- phsource/ph_pt_brazil | 4 +- phsource/ph_romanian | 3 +- phsource/ph_serbian | 2 + phsource/ph_spanish | 35 +- phsource/ph_tamil | 9 +- phsource/ph_zh | 3 + phsource/phonemes | 6 +- phsource/vwl_fr/a2r | Bin 2681 -> 2681 bytes phsource/vwl_fr/aa2r | Bin 2682 -> 2682 bytes phsource/vwl_fr/e2r | Bin 2681 -> 2681 bytes phsource/vwl_fr/e_2r | Bin 2681 -> 2682 bytes phsource/vwl_fr/ee2r | Bin 2682 -> 2682 bytes phsource/vwl_fr/i2r | Bin 2681 -> 2681 bytes phsource/vwl_fr/o2r | Bin 2681 -> 2681 bytes phsource/vwl_fr/oo2r | Bin 2682 -> 2682 bytes phsource/vwl_fr/r@ | Bin 2654 -> 1532 bytes phsource/vwl_fr/r@2 | Bin 2654 -> 1533 bytes phsource/vwl_fr/r_ | Bin 2266 -> 2266 bytes phsource/vwl_fr/r_@ | Bin 1603 -> 2061 bytes phsource/vwl_fr/r_a | Bin 1603 -> 2061 bytes phsource/vwl_fr/r_e | Bin 1603 -> 2725 bytes phsource/vwl_fr/r_i | Bin 1603 -> 2061 bytes phsource/vwl_fr/r_n | Bin 3389 -> 3389 bytes phsource/vwl_fr/r_o | Bin 1603 -> 2061 bytes phsource/vwl_fr/r_u | Bin 1603 -> 2061 bytes phsource/vwl_fr/r_y | Bin 1603 -> 2061 bytes phsource/vwl_fr/ra | Bin 2650 -> 1528 bytes phsource/vwl_fr/raa | Bin 2651 -> 1529 bytes phsource/vwl_fr/re | Bin 3018 -> 1896 bytes phsource/vwl_fr/re2 | Bin 3018 -> 1897 bytes phsource/vwl_fr/ree | Bin 2651 -> 1529 bytes phsource/vwl_fr/ri | Bin 3018 -> 1896 bytes phsource/vwl_fr/rj | Bin 3018 -> 1896 bytes phsource/vwl_fr/ro | Bin 3018 -> 1896 bytes phsource/vwl_fr/roo | Bin 2651 -> 1529 bytes phsource/vwl_fr/ru | Bin 3018 -> 1896 bytes phsource/vwl_fr/rw | Bin 3018 -> 1896 bytes phsource/vwl_fr/ry | Bin 3018 -> 1896 bytes phsource/vwl_fr/u2r | Bin 2681 -> 2681 bytes phsource/vwl_fr/y2r | Bin 2681 -> 2681 bytes src/compiledata.cpp | 76 +- src/compiledict.cpp | 3 + src/dictionary.cpp | 65 +- src/espeakedit.cpp | 85 +- src/klatt.cpp | 2 +- src/main.h | 12 +- src/mbrowrap.cpp | 2 +- src/menus.cpp | 14 +- src/phoneme.h | 2 +- src/prosodydisplay.cpp | 8 +- src/spectdisplay.cpp | 12 +- src/synth_mbrola.cpp | 1 - src/synthdata.cpp | 10 +- src/synthesize.cpp | 44 +- src/synthesize.h | 4 + src/tr_languages.cpp | 6 +- src/translate.cpp | 18 +- src/translate.h | 45 +- src/transldlg.cpp | 3 +- src/wavegen.cpp | 15 +- 85 files changed, 2294 insertions(+), 1945 deletions(-) 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 082ae8236a34bd4661382f7d369a214b3d861005..694e99e67c14a2d072028eed7a41e225bb0fd4cd 100755 GIT binary patch delta 224 zcmew<@>67jjs)uh1_*FqJp^TjGq5n2Z**y6tY>=v|36sPfq9K>A(*w3QH8+|q60{t zUy22_!2^1%$VH#ac-WCs9=!7}>* delta 224 zcmew<@>67jjs(;D|9==jz=8G90x*LioPmYGW}{0RV?E0UhzNrN^BUViFncGX3PS)? zl!4(5g97&jrhCkhK#@p>SqwKB{xCh@^J7}U6a^HCV)({>g5eFz0q*0BQyB0UTp zoYNShxEMGeFg{>pVPs%nVO+%{#k7{^0UJW3Lg*Od1il9><_ICMjWP;MeoPM-zW}v? XFayILX$D4A5fepWM!(GsOh4HH{}?j; diff --git a/phsource/vwl_fr/aa2r b/phsource/vwl_fr/aa2r index e8ca82fdd149ddcd21b71cf3aa9031b6f231297a..f66717dfaa9f45c84c207a3c7494a6aecbfbe57f 100755 GIT binary patch delta 190 zcmew*@=IibE(_}d28NA>vlv;J-v9qU*^o`RKAr&v4l^9!3}ITr7zq@JWSGTplVJwa z0S*_YCrnX5ktl|5>?as{SQ=PAF$OU807ZHjIyk2>1aUF2K45&n$im3Lz{0qSM~dky z_W>4!NQKZb#&Es^%m@*XeJ`XL7-us*VEm#0)b<6485k}}Ixv8R;3C)LgBfOTZe;q& F4ghGbFa`hs delta 188 zcmew*@=IibE(_E9|9>_b&SGR@`7l|ZO|;&R0S4|cIB-s2TEZ9!6o_P)#c-3MgXsWQ z8PgM{D4<9b!#DO53>GX7oJ>psOg%u69)=FiX$)Jq8dx7NK44^FWME)nT*V{B#LL6L zju5F3I>zY4hpYyumEnhU1EU|)1I8~3Ky6=un1NxBGy_BkE@Gl6%;>kdk?AKp0FBcu A8vp67j4h!o728N9Wvlv;JJ}|IMKF26u|AsS!=?POL0|P@O!z_lI3@uE%IOUnH zF-8GJq8PrhpI}gDEns`g_>Zv%DAL2w!8wgVo~xYw0pkNk7DfgJ7RFUPQcPkzXIT*< y6+*`t6ZryI5F$XW3_qk-G0tXs!1x8I3xpXME=eYcFrW%ulMiQ@y}5zuCp!RpY%Rh7 delta 178 zcmew<@>67j4hz%!|9>_b%wl9=`M|(1`5dEs{Q=HCrYB613=9mB46_(+GPp1u;QhgP zjWG%+62H=W~hD&0S;b=nF z5_Ln07EC+_r&*f%z3<5|Z0AxENRw_JZ8@ikkt+ iB_OvY@HGJ40dqgdB@d(-81^vjVM4f#Ve=Wbwafs1f=c87 delta 336 zcmew*@>7I2IKb68BskEBnSp^Jbt0cU3)B1me>NJBpJm@Y6y0Y#!1zOkQRc*c5w$A~F{sRt<1!_dJwjX{K~f#(6^ z14b4`1_lw{GQ2=WD0>lgqd!!i{ z!9s8m6Gc@OL}+X5yA4g;ngj0m@FU}0c+#h8TTHVrNZR)oDE px4q(KU_pq0+?K${z>E+9Ipl$~1LGd1Jxm~HL7c|0`7GO7W&rINO7#E$ diff --git a/phsource/vwl_fr/ee2r b/phsource/vwl_fr/ee2r index cee7d674f6ebb74e665ec3b98b24467b676748c1..addbfceaa54aeb6e24ec0d297bef22c1a43072e2 100755 GIT binary patch delta 190 zcmew*@=IibE(_}d28NA>vlv;J-v9qU*^o`RKAZst&N7_h%3_LOiUbNoGR$JQ$*_dU zmQ$DM0#g)FB#Pl1`w4~=y36}Jz#vm$im3Lz{0qSM~X?4 zCyEszQXzDVv6k;HGeQJp-xujD#@S2{7{4e0wS56%28K(Lz6@X?xX3m6V20V78<~Ex F0{{mgFJ=G$ delta 188 zcmew*@=IibE(_E9|9>_b&SGR@`7l|ZO|(9o0S5jsEa17p6u}e;6o_P)#c-2hHIo95 zI@1NFD4<9b!#DO53=FIdyxKrDJwTBjh7QhY3?^I+91j>DFtRW*Ft9ML;*nz7&4Vmb zA#{xKAm0O4gc^{23Ni^yeoPM-zbF8;eF0(yhCR{@j9?+Sh>4;wqu=I6rl0Hp!&)q# diff --git a/phsource/vwl_fr/i2r b/phsource/vwl_fr/i2r index 07654f0ac94d1e859e89e4a8d8f676d07ff79ef4..a6d5470a20b99b3c1a2bad0f20cefe1a9f2d551a 100755 GIT binary patch delta 180 zcmew<@>67j4h!o728N9Wvlv;J-v9qU`5dEc{WgXJ96?O)m?9Y%7$O;FG2CRxW@6w} zVfw-t1r&*5_{M&M!JpNE^#h|CQx8z2hoOUW8bc-*1KSJ67mO^73=Axct9YcCRCyd& z-!Z;}ic|<4W8BQ=!2E;p2UG;8mEnlA1LJ067j4h!@A|Nk}`%wl9=Il;g%`5dEc{U!zmwl1c3Opy!>43P}87;Z9rU_8Lh z!SsbO3MdlA@QwWh!vVGij{l5mOg%u69)=FiX$=3l8aRG2iZHP-GBB_(uHunmTFcYG z!OLU?6{!$9##qeXz+%MI0u=#jWoVUdU|PVm2WU0}0|+xP>=Bb@U_=!%QDkLYu(^Th GCp!RG+$;$I diff --git a/phsource/vwl_fr/o2r b/phsource/vwl_fr/o2r index 4662dff60e78059b5dc76c65c5664daa8dc47760..5f2c23b954ec47785c19ea27867bae0c43a7f54c 100755 GIT binary patch delta 180 zcmew<@>67j4h!o728N9Wvlv;J-v9qU`5dEc{bq&(oE}V5m?9Y%7$O;FG2CRRVRGP9 zV>-ha1r&*5_{M&Mp`4|G^#>ydQx8z2hoOUW8iNei0oDhM4;Wb(85md?SMf+OJ>fpU zf)J??I>wmE*T9Sr0cvH~Bi+C_o9O}L7oaW>W?;A^Ch5R{Ds)XgoMHCn2Bx3v0JEwu Ai2wiq delta 180 zcmew<@>67j4hz%!|9>_b%wl9=`M|(1`5dEc{R)Nz&UB_JOpy!>43P}87;Z9XFgfsu zFr8tH0*XX2d}BYs@P)a7Q-Xw{G0qO!_28KOi(h7{ILMDoejDDLNn0~SY0NI8s A7XSbN diff --git a/phsource/vwl_fr/oo2r b/phsource/vwl_fr/oo2r index 438c2d393cb6023394c970e9bf1f642c6591ee38..59484f0e4aa386c8f405c3d45f2c3ea5f7b7111e 100755 GIT binary patch delta 190 zcmew*@=IibE(_}d28NA>vlv;J-v9qU*^o`RK8yhdb}%q-`7teFj06fqGR$JQ$xz0` zz$w8b!xRM+iDLN1eu5#D#ewYuqYP6IP^5>UgL4{#6;}i61I7o8EQ|~cER3soq?mql zJ0OWv2pwb0;cH+_b&SGR@`7l|ZO|(9Y0S0z3G;lRAEn$oV3Pdu@Vz|j5!oLa_6Lj)7+Dw@7+4rr@klW#@;GoH zL@I=iF?R4Vup&f&S{e3BJ23e%Jz)Hz0Mzych#466NHZ{kh2SD4iV}=|n;V&avI79; CIVyet diff --git a/phsource/vwl_fr/r@ b/phsource/vwl_fr/r@ index 5c4db7071e335127be48a030e1f86ee1aac94563..57e9a26b6d79c96634acb07cbb760de7b0e14baa 100755 GIT binary patch delta 41 xcmca7@`sy0IKb68BskEBiGhKk$bo4hzYGiO)c^k{Ph^qZ=%dTB`8G#0BLD@34EX>6 delta 230 zcmeyveNTixIKb68BskEBiGhKk$boqxzYGiW2L{HC`d%y&zt5aG3lwHxaA51mZiTQ| zdKefc>dV$oVQ}EgVcNtL2^5ZGn8k3DA)Lv9$AxJJV-!#%is2jk2?h;T1|DXnBqpF1 zh8~6v&S?zGI2AY^Fg{>pVPs%nVO+%{#T3l*fE^)HA#{u}i;sZ~Ap+FOut53%lONL_ irY}HUAk4t9M?so_5mm@UQ5Z?YVzMu*^kz23Z!7@UJ2OuJ diff --git a/phsource/vwl_fr/r@2 b/phsource/vwl_fr/r@2 index e4c824485eaeee321051e857a257d1838eceb10a..cad0b48a3189e9959191eca520e0404e501ac698 100755 GIT binary patch delta 42 ycmca7@|Rm6IKb68BskEBnSp_!$iawdBEJj^>(u}MCr@ON-RPssviUYgGa~>GfDJAH delta 230 zcmey%eNTixIKb68BskEBiGhKk$bosHfD8-s2L{HC23{-@zt5aG3lwHxaA51mZiTQ| zdKefc8pzhqVQApUVcNtL2^5ZGn8k3DA%)3-%Y|tNV-!#%is2jk2?h<;1Ds4uNlZX3 z3_T1ToYNSNa2{ZL!1#cXg^_`Qg>e;+6jLw{1CmIE&@sj=J_c5V8j!6Eq#c<2nD#Jz h0qO!_28KNf(hQ8KLMDpBNFo-K{aB?pvon5U0RT~uGra%+ diff --git a/phsource/vwl_fr/r_ b/phsource/vwl_fr/r_ index 808dd5b465fff89d502e4c06a77636a72c545f75..91402bbe43a8efab37eb5a13dbf9ee30c52b3f49 100755 GIT binary patch delta 95 zcmca5cuR1?bXDdDj1L%D7#SE?7%PO1F(&XeFd;-3fZ&0&1LI^lR=JJ0p6f_Zkl9N_945*%p6%)r1<6z{-1Q9y=?b-_lxcot>{rVo=Ru!z=Y0i_^dEdv9) zCzBX+B#;Zj4EC{12UyIQ9xz4$IUvknf0f0Zd;x2_Bkl9N_945*%p6%)r1<6radEQ9wq5bpenA0uIb;Yzx7xos0|&<{Mo+S(qJ| zK1`m#B3kbY76%b07#i5qnC>x00@)zUU_XKB0ILPl3Z^I^2ZR~y53w9zxyLw#sRzgb zVW4ST2Us64K44@4nhe4W45~Z_m{CRY`5e$hUP(7F&SrYR_(d70MgWP?H#-0T delta 100 zcmeAbILspu9N_945*%p6%)r1<6rad6Q9wq5K8 diff --git a/phsource/vwl_fr/r_e b/phsource/vwl_fr/r_e index 091c3962a0b62981b7cc4dc2dae8a259402fe056..3f188ea8e298d05430a38d02b3196a7dc631eefd 100755 GIT binary patch delta 298 zcmX@ivs6?dIKb68BskEBnSp_!C_a^WqJRt&>w=AXzAW{NuX6zf85kT`KRon+u$VqD zFhW?&YitX_terrC05FSzA&}!NLpXamlMGWNP$ZIpkMRdX8dCtPHq!;BD4<9b!)E3j z242=(EDTH$Og%u69){f;@)4;a4ywSh1L!zIaZ24s-{j%)G}V3Eo0tV)~N8H<@&{+yceZgL$h^nmdJBMTz~ X0|+xPB=9kyi9C>IVA$Nqslo^VaTXG< diff --git a/phsource/vwl_fr/r_i b/phsource/vwl_fr/r_i index 62906f314dae1e712babb67ed7a2f6d081182e2f..1576ac2ece280d3a05020e7f84e42c37fb665bf0 100755 GIT binary patch delta 251 zcmX@i(<>kl9N_945*%p6%)r1<6ragFQ9y=?b-_lxcot>{rVo=Ru!z=20i_^d8-oK| z5Ys!RNFW!48SL$ucCo53ePINt0jsn3XKi5l$f(BD0~7&a28K*7UbYvEB1|ld3=AO5 zz@W<0!19jK3Q1%$A3O6;#ug-zBhsrFH#6;F`l0~T@&&BzlB6#KSO_k1P2Qhj^JEv+ h|C1|O8daGeFg{>J*pk54z=SIDK-z(EvplN`BLKQEFaQ7m delta 78 zcmeAbILspu9N_945*%p6%)r1<6rag7Q9y=?<-5f!cg diff --git a/phsource/vwl_fr/r_o b/phsource/vwl_fr/r_o index ff1fd4f5b1733828d51b8ed4336fc15ecbfe0333..d454ade036065be3f22a5bee8922789a1549cb4a 100755 GIT binary patch delta 254 zcmX@i(<>kl9N_945*%p6%)r1<6rayLQ9y=?b-_lxcot>{rVo=Ru!z=&0Hq*c3quLJ z2h$X$NFW!48SE379N2W3WSF9W91v!(Z)P!I`^_lB)C1&zFav`OS2^1Q#s`cnj0_AQ z%)oG;dkPDxNIIViGpfj8=?jdrnI15HQ3h)H0@ij((w6}&1Q)p`9}E_m?9TdUawSWn YDw-h)d<{S&kga|o?ZCKMo>her0G+il@&Et; delta 78 zcmeAbILspu9N_945*%p6%)r1<6rayDQ9y=?<-kl9N_945*%p6%)r1<6kp0bQ9y=?b-_lxcot>{rVo=Ru!z*m{n#fw|RgANl9x#4U25R{N)^kl9N_945*%p6%)r1<6ko|aQ9y=?b-_lxcot>{rVo=Ru!z!VCEEcL(7oH+{=WMFV$>&R|}uvmH+ z7$Gd?HMWId)=owhh5#@NM7&{W;J(1Li767uj%1j{aFgK=Q-hEn(+$J%eSVT8Eo3l*5!=Y{J0hEFQMh4Co oOiLIefm{$~U?^Z>5ZuG`geeNh24Mz<1I!G9GE4!RZ8+r_0XaYt_5c6? delta 313 zcmey#eOp8zIKb68BskEBnSp_!C^3l{(_G`IKb68BskEBiGhKkD3xgUrlYLpGH?uJ&u>k=61~!`j diff --git a/phsource/vwl_fr/re2 b/phsource/vwl_fr/re2 index a9599dc908a8df373f157aed03ba752966e4199c..a2cf48747b8bda4a943bb3d40e899646de26e372 100755 GIT binary patch delta 42 ycmX>l{*q51IKb68BskEBnSp_!DAkB*BEJj^>(u}MCr@M%-soh`viUa0dnN!4>kX6u delta 255 zcmaFKcS@W;IKb68BskEBiGhKkD3y7lfD8-s2L{HC23{=nzt5aG3lwHxaA51mZiTQ| zdcZVLjCqZ1A(*|BQH8-9D$2m{hoOOsg?STGBv2%hVHU$ph7u+QJ_V*7j8Q<5D28wB zCm5cw9^f%zN@4<;)x*%iIgLSt%Yo+s;{!$(Mg|5J##KC0Oe=Xp8#oa{6+*`txAQTu uBSe6D84_e1nEaUbFns}P17QY+J<<$}s3Incsz@Rhll@qwH?uP)u>k;B_BEjZ diff --git a/phsource/vwl_fr/ree b/phsource/vwl_fr/ree index fc9f779c2a7ea20c88a4275bd155c49e2e6ca48b..54b4f3795322b7f0523e5105a2c094302595a6b6 100755 GIT binary patch delta 40 wcmcaD@{?O2IKb68BskEBnSp_!C^eO7qJRt&>$J%eSVT8Eo3m`b!%@!&0P8agb^rhX delta 254 zcmey#eOp8zIKb68BskEBnSp_!C^eONqJRt&^M{RkJ}mXW&zw066lGv=VC%?kg|Jw9 z7#JZe<~6p3VAf7X6^3vy3q<^8Sip0GX%kZhHvaA z7#LU^c(s|5n0kOBJq#V3(-=&+8aN&>K44@48qUJFibslR7f&d%P=(Mj#shp0SP_bV rdKnaC5}5p$_Aq?`Y6D>ghCR{@jHn_eio!@D7L)y0r8l!PeqsRtbL=<( diff --git a/phsource/vwl_fr/ri b/phsource/vwl_fr/ri index 36975db6019f293c2242cf6f9f073ed645f48eba..86c838315876e7a06bf908b71531bfe1a53a1516 100755 GIT binary patch delta 46 zcmX>l{(_G`IKb68BskEBiGhKkD3fU-zYGiO2?oZ=6Ip~eI+?Su{GC$uX!CuJ*GvE| CRSt>( delta 263 zcmaFCcS@W;IKb68BskEBiGhKkD3f_2zYG)ehmE>EEcL(7oH+{=WMFV$>&R|}uvmJ) zG*FCrjcp;Ay^~ReAqpzWz_5vdfvt;a6H_EmB$8nk!%c<{j0d3SV?V*L zpRIx8A7c^|$gCcQ4$f%||G64Celh-HWMO1rU}0RvBgM3qC$xcshlz&?B2*!CjIo%% zfyIc)2r2@yu~oW(X(7`drY}HkAk4t9N1A~VRm4P*1xdtWvM;OjW;VuRW|lwKx$HLA Ivb<&j03^{n1^@s6 diff --git a/phsource/vwl_fr/rj b/phsource/vwl_fr/rj index 1d65fb7a9bc1b9d93519c72b46207c634782bdec..c5a51cc45d536cb6c6eb57e6e1e55e92c580fc20 100755 GIT binary patch delta 41 xcmX>l{(_G`IKb68BskEBiGhKkD2r(#zYGiO2?oZ=6Ip~eI+?R|M>3z`4` delta 255 zcmaFCcS@W;IKb68BskEBiGhKkD2sU_zYGiW`~Uwp>U*)&|Cu>+7EqXh!GWzKyA{G> z=>gL~G3GV4g<$qhMiqu=s3-%&Dux3bIZT_FB7q{246_(+GB7b6;5@^)gE0yy62pVPs%nVO+%{#k80ww1EvFR3UVXaVuW~ r3qk~Jqf7&%AJZPDFFl{(_G`IKb68BskEBiGhKkD4%H}zYGiO)c^k{Ph=6^=w!~a`8LOUCIAG}4QT)X delta 255 zcmaFCcS@W;IKb68BskEBiGhKkD4%&EzYGiW2L{HC`d%#czt5aG3lwHxaA51mZiTQ| zdcZVLjCqZ1A(*|BQH3D@D$2mHlA(bkjcF58Bv2%hVHU$p205k%J`tuJj8Q<5D28wB zCm60UH*iWYB{6}_>S5^MoW>Bq#lZ1^@c|90CVQSxWT6V7V~ibq3~UHR rARDu!8JPW;_Aq?`Y6D>ghCR{@jHn_eiV8>~7L$Ehr8l!NCb0nk%9u0; diff --git a/phsource/vwl_fr/roo b/phsource/vwl_fr/roo index 75b1437887e5c6de1f6dd5291f7a68573fd0c819..f8aec09496861e5d4f0fd37ef408162ce703e460 100755 GIT binary patch delta 40 wcmcaD@{?O2IKb68BskEBnSp_!C_kTRqJRt&>$J%eSVT8Eo3m`b!%@!&0PNuliU0rr delta 254 zcmey#eOp8zIKb68BskEBnSp_!C_kThqJRt&^M{RkJ}mXW&zw066lGv=VC%?kg|Jw9 z7#JZe<~6p3VAf7X6^1Y{3ql{(_G`IKb68BskEBiGhKksFZ0UzYGiO)c^k{Ph=6^=w!~a`8LOUCIAIp4Q~Jd delta 240 zcmaFCcS@W;IKb68BskEBiGhKksFZmkzYGiW2L{HC`d%#czt5aG3lwHxaA51mZiTQ| zdcZVLjCqZ1A(*|BQH3EAD$2mHg@J*sfoT&HNFl{(_G`IKb68BskEBiGhKksGMmczYGiO)c^k{Ph^qZ=%dTB`8LOUCIAKb4SN6p delta 217 zcmaFCcS@W;IKb68BskEBiGhKksGNBszYGiW2L{HC`d%y&zt5aG3lwHxaA51mZiTQ| zdKefc>dV&eVQ^sQVcNtL2^5ZGn8k3DL5qojZx7=R#wegj6vH?66AWxD4Xi5|lbC>7 z7e;+6w^g+2WEswh0rm^b9@a<2obQYG7gM>OnaEV c0Cj;d1H&F+X&`|jWTH6PfmLHO8)Fh10KKL#TL1t6 diff --git a/phsource/vwl_fr/ry b/phsource/vwl_fr/ry index 6c07b3edcb6072c3a0077ae440cd79f04ad85c6f..5614c3791598f542e85fd69e51fdf69b97544668 100755 GIT binary patch delta 41 xcmX>l{(_G`IKb68BskEBiGhKksFGdV&8V_@KjW!l6P2^5ZGn8k3D;SOU1?-|A&j8Q<5D28wBCm6P{CU7t_B{2cD zF!V5Va86@b#>v3(fbjt%3nK#q3*#ytDW-HDWRVJ?V~h!W4D1LsK&=dmq!^g|nD#Jz f0qO!_28QPf7(ynB!i)$-7L$Ehr8l!NCb0nkahWqZ diff --git a/phsource/vwl_fr/u2r b/phsource/vwl_fr/u2r index 68e489c00e74e7f1d9915346d5c283ba582840f3..49da6ecb805e77ce0a8ba218b6fb86f9701d6458 100755 GIT binary patch delta 180 zcmew<@>67j4h!o728N9Wvlv;J-v9qU`5dEc{WgX(9R5tlm?9Y%7$O;FG2CRxW;)BM z&h&*b3MdlA@QwWhLph5H>pjM6j6Fb+9)=FiX$&k}zN`-zA26~oGBB_(uHunm65}ah yL5Nfc9b;_d<3$nyYGqg}UBWn<=>g*xpe_(*V7MeEnZST5bWI*8vblljCp!SQ+%D_@ delta 180 zcmew<@>67j4hz%!|9>_b%wl9=`M|(1`5dEc{T2oWwg#qSOpy!>43P}87;Z9rU}WGE zV*0`u1r&*5_{M&M;S)0h$05dRj6Fb+9)=FiX$%`U8Q2~$K44^FWME)nT*V{BRL#@C yiV&#~I>va8uK`I7P%DFlbOVzg(*wpYKwTirz_3S5+JO;O$V3q+vblljCp!Sj#Vx-8 diff --git a/phsource/vwl_fr/y2r b/phsource/vwl_fr/y2r index 2145750fe68da5bf57004cde96cf01b88a758eb5..6925f4aa7152c13496ffcfcdbaf797b65898b4a9 100755 GIT binary patch delta 180 zcmew<@>67j4h!o728N9Wvlv;J-v9qU`5dEc{RW0nBDTrXHY34?_p%GzLbl1l9+P4;Wb(85md?SMf+O3Gf_X zL5Nfc9b-)3GeHsoYGr7U_GO&S^nmdTP!|X@FiaMcoW+1DbWJ{(VfN+*rl0Hp69O%Z delta 180 zcmew<@>67j4hz%!|9>_b%wl9=`M|(1`5dEc{XB*R963z$m?9Y%7$O;FG2CRh!|1?$ zhEawo3MdlA@QwWh!xq*D?95CuOg%u69)=FiX$;Fa9oQZ)K44^FWME)nT*V{Bl+M$D wBvK)Cj4^?afgPa+sFh)n6a$kV(*wpYKwTir!0 #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)