diff --git a/dictsource/de_rules b/dictsource/de_rules index 18581869..c1898af2 100644 --- a/dictsource/de_rules +++ b/dictsource/de_rules @@ -196,7 +196,7 @@ fu) ch (s k äu) ch C eu) ch C - C) chen (_$4 C@n + C) chen (_S4 C@n ä) chen (_ C@n e) chen (_ C@n ü) chen (_ C@n @@ -638,8 +638,8 @@ k k k) k -// @) keit (_$4 kaIt -// @) keiten (_$6 kaIt@n +// @) keit (_S4 kaIt +// @) keiten (_S6 kaIt@n kolleg k%Ole:g _) komme (C@ k%OmE @@ -667,24 +667,24 @@ _) leit (@P4 l'aIt _) lern (@@P4 l'E*n _) lexi (@ lEksi: - @) lich (_$4 lIC - @) liche (_$5 lIC@ - @) lichem (_$6 lIC@m - @) lichen (_$6 lIC@n - @) licher (_$6 lIC3 - @) liches (_$6 lIC@s - @) lichere (_$7 lIC@*@ - @) licherem (_$8 lIC@*@m - @) licheren (_$8 lIC@*@n - @) licherer (_$8 lIC@*@3 - @) licheres (_$8 lIC@*@s - @) lichste (_$7 lICst@ - @) lichstem (_$8 lICst@m - @) lichsten (_$8 lICst@n - @) lichster (_$8 lICst@r - @) lichstes (_$8 lICst@s - @) lichkeit (_$8 lICk%aIt - @) lichung (_$7 lIC%UN + @) lich (_S4 lIC + @) liche (_S5 lIC@ + @) lichem (_S6 lIC@m + @) lichen (_S6 lIC@n + @) licher (_S6 lIC3 + @) liches (_S6 lIC@s + @) lichere (_S7 lIC@*@ + @) licherem (_S8 lIC@*@m + @) licheren (_S8 lIC@*@n + @) licherer (_S8 lIC@*@3 + @) licheres (_S8 lIC@*@s + @) lichste (_S7 lICst@ + @) lichstem (_S8 lICst@m + @) lichsten (_S8 lICst@n + @) lichster (_S8 lICst@r + @) lichstes (_S8 lICst@s + @) lichkeit (_S8 lICk%aIt + @) lichung (_S7 lIC%UN @) lo (gisch l'o: .group m @@ -847,7 +847,7 @@ _be) sp Sp _ge) sp Sp _ver) sp Sp - &C) st (_$2 st + &C) st (_S2 st &C) ste (_S3 st@ &C) stem (_S4 st@m &C) sten (_S4 st@n diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 73c43d05..f794e575 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -305,10 +305,11 @@ tS v w z z. Dictionary ne_dict -@ @- @2 @3 a a: aI aU -a~ e E e: E: E~ e~ i -I i: i~ l- o O o: O: -o~ O~ r- U u u: u~ V +@ @/ @2 @3 a aI aU a~ +e E eI eU E~ e~ i I +i~ l- o O o: oI oU o~ +O~ r- u uI u~ V VI VU +V~ - : b c ch d d. f g h H j J k kh l @@ -375,12 +376,12 @@ ea eI eo eU i i/ I^ iI iU o O Oa oI oU u uI y Y yI yU -* *; b b; c C d d; -dZ f f; g h j k l -l; m m; n N n; p p; -r s S S; t t; tS ts -ts; v v; w w2 x z Z -z; Z; +* *; - b b; c C d +d; dZ f f; g h j k +l l; m m; n N n; p +p; r s S S; t t; tS +ts ts; v v; w w2 x z +Z z; Z; Dictionary ru_dict @@ -497,7 +498,7 @@ uo y y& y@ yE yi yu (u) ; C f h j k kh l m n N p ph r s s. S; t th ts ts. ts. tS; -tS; tsh v w x z. +tS; tsh v w x X z. Dictionary zhy_dict @@ -517,7 +518,17 @@ a a: ai au e e: ei i i: ie iu o o: oi u u: ui uo -b c d dZ f g h j -J k l l^ m n N n^ -p R R2 s S t tS ts -v z Z +: b c d dZ f g h +j J k l l^ m n n^ +p r R R2 s S t tS +ts v x z Z + + +Dictionary hy_dict + +@ a aI e eI i i@ o +u W y + +** b d dZ f g h j +k l m n p R3 s S +t tS ts v x z Z diff --git a/dictsource/en_list b/dictsource/en_list index 3fd2a2b8..a72d8cb6 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -2343,6 +2343,7 @@ Provence pr0v'A~s Pyrenees pIr@n'i:z Qatar katA@ Quebec kwI2bEk +Raleigh rA:lI Reno ri:noU Sahel sA:h'El Saigon saIg'0n diff --git a/dictsource/en_rules b/dictsource/en_rules index af32f659..047ae491 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -84,7 +84,7 @@ ae i: ae (val 'i: aea i@ - @) aed (_$2 d + @) aed (_S2 d _) ae (on i: _) aer (o e@ ae (l eI @@ -226,13 +226,13 @@ ab (ular 'ab b) ab (y eIb b) ab (yl ab - &) able (_$4iev @b@L // suffix + &) able (_S4iev @b@L // suffix &c) able (_ @b@L @ct) able (_ =@b@L - &) ability ($7iev @b'IlI2t%I // suffix - &) abilities ($9iev @b'IlI2t%Iz // suffix - &) ably (_$4iefv @bl%I - &c) ably (_$4fv @bl%I + &) ability (S7iev @b'IlI2t%I // suffix + &) abilities (S9iev @b'IlI2t%Iz // suffix + &) ably (_S4iefv @bl%I + &c) ably (_S4fv @bl%I .group ac _) ac (@ a2k @@ -533,8 +533,8 @@ alz alt|s &) al (_ @L ?8 &) al (_ a2l - @) ally (_$2 l%I - @@ic) ally (_$4 l%I + @) ally (_S2 l%I + @@ic) ally (_S4 l%I inst) al (_ O:l &) al (d @L b) al (d O:l @@ -675,8 +675,8 @@ _) anom a2n0m &) an (_ @n ?8 &) an (_ a2n - @u) an (_$1 n - @i) an (_$1 n + @u) an (_S1 n + @i) an (_S1 n Cc) an (_ an l) an (_ an ll) an (_ @n @@ -725,7 +725,7 @@ d) ang (er eIndZ r) ang (e eIndZ r) anging eIndZIN - r) anged ($1 d + r) anged (S1 d perm) an @n ang (er aNg m) anoeu (v @nu: @@ -1121,8 +1121,8 @@ su) bt (l t de) bt t _) bug (le bju:g - @) bury (_$4i br%I -?3 @) bury (_$4i bEr%I + @) bury (_S4i br%I +?3 @) bury (_S4i bEr%I _) by baI @@ -1447,7 +1447,7 @@ d d d (d _) d' (AP2 d - @@e) d (_$1 d // suffix + @@e) d (_S1 d // suffix ddh d dj dZ dg (_ dZ @@ -1714,20 +1714,20 @@ e (quiv %I e'er e@ h) e (sion 'i: - &f) e's (_$2i s - &k) e's (_$2i s - &p) e's (_$2i s - &t) e's (_$2i s - &c) e's (_$2i Iz - &g) e's (_$2i Iz - &ch) e's (_$2i Iz - &ph) e's (_$2i Iz - &s) e's (_$2i Iz - &sh) e's (_$2i Iz - &th) e's (_$2i z - &r) e's (_$2i z - &x) e's (_$2i Iz - &C) e's (_$2i z + &f) e's (_S2i s + &k) e's (_S2i s + &p) e's (_S2i s + &t) e's (_S2i s + &c) e's (_S2i Iz + &g) e's (_S2i Iz + &ch) e's (_S2i Iz + &ph) e's (_S2i Iz + &s) e's (_S2i Iz + &sh) e's (_S2i Iz + &th) e's (_S2i z + &r) e's (_S2i z + &x) e's (_S2i Iz + &C) e's (_S2i z &Cr) e's (_ @z @) e (tio i: discr) e (tion E @@ -1756,7 +1756,7 @@ _s) ew u: _s) ew (_ oU e (work - eway (_$3 weI + eway (_S3 weI @) ez (_ =Ez .group ea @@ -1851,28 +1851,28 @@ C) ea (ven E .group ed - @@) ed (_$2dvei d - @C) ed (_$2dvei d - @c) ed (_$2vdei t - @d) ed (_$2dvei I2d -?8 @d) ed (_$2dvei Ed - &ch) ed (_$2vei t - &sh) ed (_$2vei t + @@) ed (_S2dvei d + @C) ed (_S2dvei d + @c) ed (_S2vdei t + @d) ed (_S2dvei I2d +?8 @d) ed (_S2dvei Ed + &ch) ed (_S2vei t + &sh) ed (_S2vei t @Csh) ed (_ Ed - @f) ed (_$2vdei t - @g) ed (_$1vi d - @k) ed (_$2vdei t - &en) ed (_$2v d - cl) ed (_$1v d - @p) ed (_$2vdei t - @@er) ed (_$2v d - @ss) ed (_$2dv t - @t) ed (_$2vdei I2d -?8 @t) ed (_$2vdei Ed - @fr) ed (_$2v Id + @f) ed (_S2vdei t + @g) ed (_S1vi d + @k) ed (_S2vdei t + &en) ed (_S2v d + cl) ed (_S1v d + @p) ed (_S2vdei t + @@er) ed (_S2v d + @ss) ed (_S2dv t + @t) ed (_S2vdei I2d +?8 @t) ed (_S2vdei Ed + @fr) ed (_S2v Id yw) ed (_ Ed - @x) ed (_$2vi t - y) ed (_$2v d + @x) ed (_S2vi t + y) ed (_S2v d edly (_ Idl%I c) ed (e_ 'i:d p) ed (e_ i:d @@ -2113,14 +2113,14 @@ .group er &) er 3 - @@@) er (_$2de 3 // suffix - %C) er (_$3 3 - ll) er (_$2 3 + @@@) er (_S2de 3 // suffix + %C) er (_S3 3 + ll) er (_S2 3 &) er (_ 3 ?8 &) er (_ a2 // (temporary because [3] -> [a2] is only for word-final - %C) ers (_$4 3z -?8 %C) ers (_$4 a2z - ss) er (_$2 3 + %C) ers (_S4 3z +?8 %C) ers (_S4 a2z + ss) er (_S2 3 all) er (_ 3 mb) er (_ 3 lin) er (_S1 3 @@ -2228,30 +2228,30 @@ err (_ 3: .group es - &) es (_$1i z + &) es (_S1i z ese (_ i:z @n) ese (_ 'i:z - &f) es (_$1 s - &k) es (_$1 s - &p) es (_$1 s - &t) es (_$1 s - &c) es (_$1 I2z - &g) es (_$1 I2z - &ch) es (_$1 I2z - &ph) es (_$1 I2z - neri) es (_$2i z - &s) es (_$1 I2z - &us) es (_$2e I2z - &rus) es (_$2 I2z - &tus) es (_$2 I2z - &ss) es (_$2 I2z - sh) es (_$2 I2z - &th) es (_$1 z - &r) es (_$1 z - &qu) es (_$1 s - &x) es (_$2 I2z - &z) es (_$2 I2z - &C) es (_$1i z + &f) es (_S1 s + &k) es (_S1 s + &p) es (_S1 s + &t) es (_S1 s + &c) es (_S1 I2z + &g) es (_S1 I2z + &ch) es (_S1 I2z + &ph) es (_S1 I2z + neri) es (_S2i z + &s) es (_S1 I2z + &us) es (_S2e I2z + &rus) es (_S2 I2z + &tus) es (_S2 I2z + &ss) es (_S2 I2z + sh) es (_S2 I2z + &th) es (_S1 z + &r) es (_S1 z + &qu) es (_S1 s + &x) es (_S2 I2z + &z) es (_S2 I2z + &C) es (_S1i z es (carp I2s es (cape %Es es (capi %Es @@ -2290,7 +2290,7 @@ _) eth (a ET eth (ic ET eth (y i:T - @C) eth (_$3e @T + @C) eth (_S3e @T etta (_ 'Et@ ette (_ 'Et pal) ett (e @t @@ -2459,11 +2459,11 @@ A) han (_ h'an // places ha (st heI _) he' %hi: - @) head (_$4 hEd + @) head (_S4 hEd heir e@ _) hetero hEtroU K) hl L - &) hold (_$4 hoUld + &) hold (_S4 hoUld holme hoUm _) homeo hoUmi:oU _) homo (s h,oUmoU @@ -2477,8 +2477,8 @@ _) horri h0rI _) horse hO@s _) house (@ haUs - house (_$5 haUs - houses (_$6 haUzI2z + house (_S5 haUs + houses (_S6 haUzI2z .group i i I @@ -2520,8 +2520,8 @@ _) i (o aI &) ial (_ =I2@l @) ibab aIb@b - @) ible (_$4ev @b@L - @) ibly (_$4efv @bl%I + @) ible (_S4ev @b@L + @) ibly (_S4efv @bl%I i (bilit I l) i (bel aI b) i (ble_ aI @@ -2653,9 +2653,9 @@ is (o_ aIz ise (_ aIz iser (_ aIz3 - @) ism (_$3de Iz@m - an) ism (_$3d Iz@m - @iB) ism (_$3d Iz@m + @) ism (_S3de Iz@m + an) ism (_S3d Iz@m + @iB) ism (_S3d Iz@m is (er+_ aIz iz (er_ aIz prAm) is Is @@ -2739,7 +2739,7 @@ .group ie ie I ie (_ I - ied (_$2i d // suffix + ied (_S2i d // suffix ie (c aI ie (ce i: ie (_ aI @@ -2792,7 +2792,7 @@ ie (v i: iew (_ ju: iew ju: - ies (_$2i z + ies (_S2i z spec) ies (_ i:z ser) ies (_ i:z _ar) ies (_ i:z @@ -2857,20 +2857,20 @@ ?3 s) im (ult aIm .group in - @) ing (_+$3dve I2N - @) ings (_$4dve I2Nz - @) ingly (_$5dve I2Ng-lI - @) ingment (_$7dve I2Ng-m@nt - logu) ing (_$4v I2N - x) ing (_+$3v I2N - @@om) ing (_$3dv I2N - en) ing (_$3v I2N - en) ings (_$4v I2Nz - en) ingly (_$5vf I2Ng-lI - er) ing (_$3v I2N - er) ings (_$4v I2Nz - er) ingly (_$5vf I2Ng-lI - er) ingment (_$7v I2Ng-m@nt + @) ing (_+S3dve I2N + @) ings (_S4dve I2Nz + @) ingly (_S5dve I2Ng-lI + @) ingment (_S7dve I2Ng-m@nt + logu) ing (_S4v I2N + x) ing (_+S3v I2N + @@om) ing (_S3dv I2N + en) ing (_S3v I2N + en) ings (_S4v I2Nz + en) ingly (_S5vf I2Ng-lI + er) ing (_S3v I2N + er) ings (_S4v I2Nz + er) ingly (_S5vf I2Ng-lI + er) ingment (_S7v I2Ng-m@nt Br) ing (_ IN ?7 &) in (_ @n @@ -3208,8 +3208,8 @@ _) llan L%an l (E l lle (_ l - @@o) lled (_$3v d - @@) lled (_$3v d + @@o) lled (_S3v d + @@) lled (_S3v d B) l (_ @L w) l (_ l r) l (_ l @@ -3224,14 +3224,14 @@ ?3 _) lo (gK lO @) lo (gous =l@ lu (na lu: - @) ly (_$2i l%I - @l) ly (_$2 I2 + @) ly (_S2i l%I + @l) ly (_S2 I2 f) ly (_ laI - ief) ly (_$2 l%I - ff) ly (_$2 l%I - of) ly (_$2 l%I + ief) ly (_S2 l%I + ff) ly (_S2 l%I + of) ly (_S2 l%I multip) ly laI - &p) ly (_$2 l%I + &p) ly (_S2 l%I p) ly (_ laI _) ly (d lI @@ -3256,12 +3256,12 @@ @t) le (B@ @L tt) le (@ @-l &C) le (ss l@ - @) less (_$4i l@s - @) lessly (_$6i l@sl%I - @) lessness (_$8i l@sn@s -?8 @) less (_$4i lEs -?8 @) lessly (_$6i lEsl%I -?8 @) lessness (_$8i lEsnEs + @) less (_S4i l@s + @) lessly (_S6i l@sl%I + @) lessness (_S8i l@sn@s +?8 @) less (_S4i lEs +?8 @) lessly (_S6i lEsl%I +?8 @) lessness (_S8i lEsnEs .group m m m @@ -3294,10 +3294,10 @@ _) mn n &B) me (_ m%I @) men (_ mEn - &) ment (_$4 m@nt - &) ments (_$5 m@nt|s -?8 &) ment (_$4 mEnt -?8 &) ments (_$5 mEnt|s + &) ment (_S4 m@nt + &) ments (_S5 m@nt|s +?8 &) ment (_S4 mEnt +?8 &) ments (_S5 mEnt|s mEnt (_ m@nt tor) me (nt m'E C) mented m'EntId @@ -3313,7 +3313,7 @@ _) mono m0noU mon (opol m@n mon (ox m0n - @) most(_$4 moUst + @) most(_S4 moUst &) mouth (_ m@T _) multi mVltI @@ -3349,13 +3349,13 @@ .group n n n n) n - &ia) n (_$1 n - &ia) ns (_$2 nz + &ia) n (_S1 n + &ia) ns (_S2 nz @) name (_ neIm _) nano (P4 n,anoU necessit n@sEsIt - &) ness (_$4i n@s -?8 &) ness (_$4i nEs + &) ness (_S4i n@s +?8 &) ness (_S4i nEs @) n (cC N @) n (ch n n (c_ N @@ -3723,8 +3723,8 @@ _) on (io Vn ec) on (d @n m) on (d_ @n - &C) oned (_$2v d - &C) oning (_$3v I2N + &C) oned (_S2v d + &C) oning (_S3v I2N _) one w0n _) once (_ w0ns ?6 _) one wVn @@ -3801,9 +3801,9 @@ p) or (t o@ or (A o@r &) or (ate 3r - @@) or (_$2d 3 // suffix + @@) or (_S2d 3 // suffix &) or (_ 3 -?8 @@) or (_$2d o@ // suffix +?8 @@) or (_S2d o@ // suffix ?8 &) or (_ o@ _c) or (@ O@ c) or (k O@ @@ -4150,7 +4150,7 @@ p (hole p sym) pa p@ _) pico pi:koU - piece (_$5 pi:s + piece (_S5 pi:s por (tray p%o@ // _) post (@@P4 p,oUst // prefix pneu nju: @@ -4489,10 +4489,10 @@ @) s (hill_ s @) s (hous s _) she' %Si: - &) ship (_$4 SIp - &) ships (_$5 SIps - &) shire (_$5 S@ -?3 &) shire (_$5 Si@ + &) ship (_S4 SIp + &) ships (_S5 SIps + &) shire (_S5 S@ +?3 &) shire (_S5 Si@ sia (_ =Zi@ ?3 sia (_ =Z@ ssia (_ S@ @@ -4530,29 +4530,29 @@ a) ssure S'U@ ea) s (y z s (_ z - @) s (_$1 z + @) s (_S1 z _BA) s (_ s - &se) s (_$1 I2z - &sse) s (_$2 I2z + &se) s (_S1 I2z + &sse) s (_S2 I2z ss (_ s sse (_ s c) s (_ s - @ce) s (_$1 Iz + @ce) s (_S1 Iz f) s (_ s - ng) s (_$1 z + ng) s (_S1 z k) s (_ s - n) s (_$1 z + n) s (_S1 z p) s (_ s th) s (_ s - t) s (_$1 s - te) s (_$1 s - &c) s (_$1 s - &f) s (_$1 s - &k) s (_$1 s - &p) s (_$1 s - &pe) s (_$1 s - &th) s (_$1 s - &t) s (_$1 s + t) s (_S1 s + te) s (_S1 s + &c) s (_S1 s + &f) s (_S1 s + &k) s (_S1 s + &p) s (_S1 s + &pe) s (_S1 s + &th) s (_S1 s + &t) s (_S1 s _ha) s (_ z .group su @@ -4629,7 +4629,7 @@ s) t (l to (morr t@ _) to (nn tV - @) town (_$4 taUn + @) town (_S4 taUn _) tri (A traI _) trie traI _) tri (CA traI @@ -4999,7 +4999,7 @@ wh (ol h m) w (ich_ B) wing (_ wIN - @) wise (_$4 waIz + @) wise (_S4 waIz e) with (_ w'ID with (C w%ID with (A w%ID @@ -5144,19 +5144,19 @@ E (BCe_ @ E (Cia 'i: Ea (_ =i@ - @@) Ed (_$2vei d - &C) Ed (_$2vei d - &c) Ed (_$2vei t - &d) Ed (_$2vei Id - &ch) Ed (_$2vei t - &k) Ed (_$2vei t - &@@om) Ed (_$2v d - &p) Ed (_$2vei t - &t) Ed (_$2vei Id - ur) Ed (_$1vi d - &x) Ed (_$2v t + @@) Ed (_S2vei d + &C) Ed (_S2vei d + &c) Ed (_S2vei t + &d) Ed (_S2vei Id + &ch) Ed (_S2vei t + &k) Ed (_S2vei t + &@@om) Ed (_S2v d + &p) Ed (_S2vei t + &t) Ed (_S2vei Id + ur) Ed (_S1vi d + &x) Ed (_S2v t y) Ed (_ d - Edly (_$4e Idl%I + Edly (_S4e Idl%I E (dia_ i: E (dic_ i: nak) E (d I @@ -5200,21 +5200,21 @@ Er (C 3 Ery (_ @r%I E (x_ E - &) Es (_$2e z - c) Es (_$2e I2z - c) E's (_$3e I2z - f) Es (_$2e s - g) Es (_$2e I2z - ch) Es (_$2e I2z - ph) Es (_$2e I2z - k) Es (_$2e s - p) Es (_$2e s - s) Es (_$2e I2z - s) E's (_$2e I2z - sh) Es (_$2e I2z - t) Es (_$2e s - x) Es (_$2 I2z - Cr) Es (_$2e @z + &) Es (_S2e z + c) Es (_S2e I2z + c) E's (_S3e I2z + f) Es (_S2e s + g) Es (_S2e I2z + ch) Es (_S2e I2z + ph) Es (_S2e I2z + k) Es (_S2e s + p) Es (_S2e s + s) Es (_S2e I2z + s) E's (_S2e I2z + sh) Es (_S2e I2z + t) Es (_S2e s + x) Es (_S2 I2z + Cr) Es (_S2e @z Ese (_ i:z E (sia 'i: Esque 'Esk @@ -5229,25 +5229,25 @@ .group ' - 's (_$2 z - f) 's (_$2 s - p) 's (_$2 s - t) 's (_$2 s - k) 's (_$2 s - se) 's (_$2 I2z - s) 's (_$2 I2z - ce) 's (_$2 I2z - ch) 's (_$2 I2z - och) 's (_$2 s - sh) 's (_$2 I2z - x) 's (_$2 I2z - z) 's (_$2 I2z + 's (_S2 z + f) 's (_S2 s + p) 's (_S2 s + t) 's (_S2 s + k) 's (_S2 s + se) 's (_S2 I2z + s) 's (_S2 I2z + ce) 's (_S2 I2z + ch) 's (_S2 I2z + och) 's (_S2 s + sh) 's (_S2 I2z + x) 's (_S2 I2z + z) 's (_S2 I2z 6_) 's (_ I2z 16_) 's (_ z - 're (_$3 @ - 've (_$3 v - 'd (_$2 d - 'll (_$3 @L + 're (_S3 @ + 've (_S3 v + 'd (_S2 d + 'll (_S3 @L .group 0xce // Greek letters diff --git a/dictsource/fr_list b/dictsource/fr_list index 90a01cc1..d11be215 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -24,7 +24,7 @@ // 2006-11-18 Gilles Casse // -// Updated 2008-10-24 Michel Such +// Updated 2008-11-06 Michel Such // // * Numbers, a few abbreviations and exceptions. // @@ -603,6 +603,7 @@ cancer kA~sEr (chef d'oeuvres) chédeuvres $text choeur kWr cocus koky +couscous kuskus dernier dE2rnjer2 éloquent ElokA~t2 fan f'an diff --git a/dictsource/ro_rules b/dictsource/ro_rules index b0954968..69c74265 100644 --- a/dictsource/ro_rules +++ b/dictsource/ro_rules @@ -176,9 +176,9 @@ i (A j @) i (e_ j - &C) i (_N$1q i/ - &) i (_N$1q i - &) i (-N$1q i // don't reduce to [I^] if a hyphen follows + &C) i (_NS1q i/ + &) i (_NS1q i + &) i (-NS1q i // don't reduce to [I^] if a hyphen follows ţ) i (-Că i ţ) i (-Ci i diff --git a/phsource/compile_report b/phsource/compile_report index ace72ff4..1e2d1bad 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,60 +1,62 @@ -55 phoneme tables +57 phoneme tables new total - base 100 100 - base2 24 119 - en 51 146 - en_n 31 146 - en_us 36 147 - en_sc 39 148 - en_rp 34 146 - en_wm 30 146 - en_wi 30 146 - af 39 132 - cy 29 126 - de 33 127 - eo 13 112 - jbo 4 113 - fi 40 131 - fr 54 137 - fr_ca 11 137 - hi 51 137 - ta 17 140 - hu 23 116 - nl 28 123 - pl 18 113 - sk 29 131 - cs 6 131 - hr 26 136 - mk 3 137 - sr 14 136 - ru 39 131 - it 17 122 - la 21 118 - es 9 120 - es_la 1 120 - pt 28 136 - pt_pt 20 136 - ro 36 143 - el 8 119 - grc 12 124 - sv 25 122 - no 28 126 - is 33 126 - vi 42 138 - zhy 40 133 - zh 65 150 - sw 14 109 - tr 18 124 - ku 18 124 - id 15 121 - rw 15 126 - ko 18 147 - da 15 130 - sq 23 128 - ml 13 139 - bn 59 145 - ne 14 141 - lv 26 121 + base 101 101 + base2 24 120 + en 51 147 + en_n 31 147 + en_us 36 148 + en_sc 39 149 + en_rp 34 147 + en_wm 30 147 + en_wi 30 147 + af 39 133 + cy 29 127 + de 33 128 + eo 13 113 + jbo 4 114 + fi 40 132 + fr 54 138 + fr_ca 11 138 + hi 52 139 + ta 17 142 + hu 23 117 + nl 28 124 + pl 18 114 + sk 29 132 + cs 6 132 + hr 26 137 + mk 3 138 + sr 14 137 + ru 39 132 + it 17 123 + la 21 119 + es 9 121 + es_la 1 121 + pt 28 137 + pt_pt 20 137 + ro 36 144 + el 8 120 + grc 12 125 + sv 25 123 + no 28 127 + is 33 127 + vi 42 139 + zhy 40 134 + zh 65 151 + sw 14 110 + tr 18 125 + ku 18 125 + id 15 122 + rw 15 127 + ko 18 149 + da 15 131 + sq 23 129 + ml 13 141 + bn 59 147 + ne 23 151 + lv 28 123 + hy 16 114 + om 18 118 Data file Used by b/b [b] base @@ -579,7 +581,7 @@ r3/r_trill [R2] base [R] sk [r*] sr [x] pt - [R] lv + [R2] lv r3/r_trill2 [R] base [r] cy [R] hr @@ -593,7 +595,7 @@ r3/r_trill.wav [R2] base [R] sk [r*] sr [x] pt - [R] lv + [R2] lv r3/r_u [(u)] base r3/rx [*] base [r/] base @@ -607,6 +609,7 @@ r3/rx [*] base [x] pt_pt [*;] ro [r#] is + [Q2] hy r3/rz_cs [R^] sk [R^/] sk r3/@tap [**] base @@ -712,6 +715,7 @@ ufric/s_ [s] base [s#] pt [z;] ro [s2] is + [s2] lv ufric/s! [s] base [s2] fi [s] fr @@ -719,9 +723,11 @@ ufric/s! [s] base [s] es [s#] pt [s2] is + [s2] lv ufric/s_continue [s2] fi [s2] hu [s2] is + [s2] lv ufric/sh [S] base [S] fr [s#] pt_pt @@ -762,6 +768,8 @@ ufric/x_hr [x] base [x] hr ufric/x_sr [h] sr [x] sr +ufric/xx3 [X] base + [Q] hy ustop/c [c] base ustop/k [k] base [k] en @@ -840,6 +848,7 @@ ustop/k_unasp [k] base [k] sq [k] bn [k] lv + [k`] om ustop/k_unasp_ [k] zh ustop/null [?] base ustop/p [p] base @@ -853,7 +862,9 @@ ustop/p_ [p] base [ph] hi [ph] zh [ph] bn + [ph] hy ustop/p_asp [ph] hi + [ph] hy ustop/percus10 [(X1] base ustop/pl [p] base [p] base2 @@ -869,6 +880,7 @@ ustop/pl [p] base [p] bn [ph] bn [p] lv + [ph] hy ustop/pr [p] base [p] base2 [p] fi @@ -880,6 +892,7 @@ ustop/pr [p] base [p;] ro [p] bn [ph] bn + [ph] hy ustop/p_unasp [p] base [p] base2 [p] fi @@ -894,6 +907,7 @@ ustop/p_unasp [p] base [p] sq [p] bn [p] lv + [p`] om ustop/p_unasp_ [p] base2 [p] fi [p] hi @@ -941,6 +955,7 @@ ustop/t_dnt [t] base [t] sw [t`] ko [t] bn + [t`] om ustop/t_dnt2 [t[] vi ustop/t_hi [t] hi [t] bn @@ -963,6 +978,7 @@ ustop/ts [ts] base2 [z] zhy [tsh] zh [ts] lv + [ts] hy ustop/tsh [tS] base [c] zhy ustop/tsh_ [tS] base @@ -994,6 +1010,7 @@ ustop/ts_pzd2 [c] hi [c] hu [c`] ko [c] bn + [c`] om ustop/ts_pzd3 [tS;] hr [dZ;] hr ustop/t_sr [d] sr @@ -1023,6 +1040,7 @@ vdiph2/ei_4 [eI] en_us vdiph2/eo [eo] ro vdiph2/e[u [e[u] ro vdiph2/i@ [i@] en_n + [i@] hy vdiph2/i@_2 [i@] en_wm vdiph2/ie [i@] en_wi [ie] fi @@ -1070,11 +1088,12 @@ vdiph/8u [oU] en_us [ou] zh vdiph/aae [aI] en_us vdiph/aai [aai] zhy + [aI] ne + [ai] lv vdiph/aai_2 [AI] af [AY] cy vdiph/aai_3 [ai] fi vdiph/aau [au] fi - [au] lv vdiph/aau_2 [aU] en_wi [aU] de [VU] nl @@ -1096,7 +1115,7 @@ vdiph/ai [aI] base2 [aI] pt [a:I] vi [aI] id - [ai] lv + [aI] hy vdiph/ai_2 [aI] cy [aY] cy vdiph/ai_3 [aI] no @@ -1129,6 +1148,8 @@ vdiph/eei [EI] base2 [EI] de [EI] nl [EI] vi + [eI] ne + [eI] hy vdiph/eei_2 [eI] eo [ei] fi [eI] id @@ -1160,11 +1181,11 @@ vdiph/eu [eU] base2 [eU] sk [eU] pt [eU] vi + [eU] ne vdiph/eu_2 [eu] fi vdiph/&i [&i] fi [aI] hi [aI] bn - [aI] ne vdiph/@i_2 [eI] af [@I] cy [@Y] cy @@ -1182,6 +1203,7 @@ vdiph/oi [oI] base2 [oI] it [OI] la [oI] vi + [oI] ne vdiph/oi_2 [oI] af vdiph/ooi [OI] en [OI] en_n @@ -1198,8 +1220,10 @@ vdiph/ooi_3 [OI] en_rp vdiph/ooi_4 [OI] en_us vdiph/oou [oU] cs [OU] grc + [au] lv vdiph/ou [ou] fi [ou] zhy + [oU] ne vdiph/ou_2 [oU] sk [oU] ro vdiph/ou_3 [oU] is @@ -1214,13 +1238,16 @@ vdiph/ui [uI] base2 [ui] fi [uI] vi [ui] zhy + [uI] ne [ui] lv vdiph/u-i [yI] vi vdiph/ui_2 [uI] af vdiph/ui_3 [uI] cy [uY] cy vdiph/Vi [@:I] vi + [VI] ne vdiph/Vu [@U] af + [VU] ne vdiph/Vu_2 [oU] en_wm vdiph/Vu_3 [o:] nl vdiph/Vu_4 [@U] vi @@ -1282,6 +1309,7 @@ vnasal/u_n [u~] hi [u~] bn [u:~] bn [u~] ne +vnasal/V_n [V~] ne vnasal/W_n [E~] fr [W~] fr voc/bh [B] base @@ -1298,6 +1326,7 @@ voc/Q_ [Q] base [x2] pt voc/Q_less [Q] nl [x2] pt +voc/Q_ulv [Q] hy voc/v [v] base [v] fi [v] fr @@ -1374,6 +1403,7 @@ vowel/@ [@] base [@4] hi [@] ml [@4] bn + [@] hy vowel/@- [@-] base [r*] hr vowel/& [a] en_rp @@ -1382,7 +1412,6 @@ vowel/& [a] en_rp [&] sv [&] bn [&:] bn - [&:] lv vowel/0 [0] en [O] hi [O] pt @@ -1419,6 +1448,7 @@ vowel/8_2 [U] en_us [8] sv vowel/8_3 [eo] zhy vowel/8_5 [8] ku +vowel/8_7 [@] lv vowel/a [a] en_n [aa] en_n [a] en_wm @@ -1444,7 +1474,7 @@ vowel/a# [a/] base2 [&/] pt [a#] rw [a/] rw - [&] lv + [a] om vowel/a_2 [a] base2 [a] en_wi [A:] en_wi @@ -1472,6 +1502,7 @@ vowel/a_3 [a] en_sc [a] is [A] zh [A] da + [a:] om vowel/a#_3 [a2] en [a2] en_n [a2] en_us @@ -1496,7 +1527,6 @@ vowel/a_5 [a:] ta [a] tr [a] sq [a:] ml - [a] lv vowel/a_6 [a] fr [a2] fr vowel/aa [a] fi @@ -1504,6 +1534,9 @@ vowel/aa [a] fi [A] no [A:] no [aa] zhy + [a] lv + [a:] lv + [a] hy vowel/aa# [O] en_us [0] en_wi [a2] fi @@ -1514,7 +1547,6 @@ vowel/aa_2 [A:] en [A] zh vowel/aa_3 [A:] af [A] sq - [a:] lv vowel/aa_4 [O:] en_us [A:] sv [O] vi @@ -1535,8 +1567,10 @@ vowel/a_en [a] en [A] fr [a] pl vowel/@_bck [@] hi + [@/] hi [@] zh [@] bn + [@/] ne vowel/e [e] base2 [e:] en [eI] en_n @@ -1580,6 +1614,7 @@ vowel/e_3 [i] en_n [e:] hu [e] ku vowel/e_5 [i] en_sc +vowel/e_6 [e] om vowel/e_7 [e] sq vowel/ee [E] en_n [E] sv @@ -1609,6 +1644,8 @@ vowel/ee_3 [&] af vowel/ee_6 [&] sk [E3] sv [E] ku + [&] lv + [&:] lv vowel/e_mid [E] en_rp [e] jbo [E] fr @@ -1631,6 +1668,7 @@ vowel/e_mid [E] en_rp [E] da [E] bn [e] lv + [e] hy vowel/e_mid2 [E] af [E] de [E2] de @@ -1645,6 +1683,7 @@ vowel/e_mid2 [E] af [e] tr [E] ko [e:] lv + [E] om vowel/@_fnt [@] en_wi [@2] en_wi [@2] hr @@ -1675,6 +1714,8 @@ vowel/i [i] base2 [i] ko [i:] ml [i] ne + [i] hy + [i:] om vowel/i# [y:] cy vowel/i_2 [i2] de [i:] de @@ -1726,6 +1767,7 @@ vowel/ii [I] en_n [I] is [i] zhy [I] ku + [I] om vowel/ii# [Y] cy [Y] ru [I] ku @@ -1777,6 +1819,7 @@ vowel/@_low [3] en_rp [V] bn [@2] bn [V] ne + [@/] ne vowel/o [o] base2 [o:] en [oU] en_n @@ -1797,6 +1840,7 @@ vowel/o [o] base2 [o] ml [o:] ml [o] bn + [o] hy vowel/o_2 [o:] cy [o2] fr [o:] hi @@ -1820,6 +1864,7 @@ vowel/oe [W] en [W] af [W] de [W] da + [W] hy vowel/oe_2 [W] no [W] tr vowel/oe_4 [W] sv @@ -1829,6 +1874,7 @@ vowel/o_mid [U@] en_rp [o] hu [o] tr [o] ne + [o:] om vowel/oo [O:] en_sc [O] en_wi [O:] en_wi @@ -1869,6 +1915,7 @@ vowel/oo_4 [O] base2 [O:] hi [O] it [O] bn + [O] om vowel/oo_5 [O] pl [O] is [O] sq @@ -1906,6 +1953,7 @@ vowel/u [u:] en_wi [u] ml [u:] ml [u] bn + [u:] om vowel/u# [u:] en_sc [Y] tr vowel/u_2 [u1] fi @@ -1951,6 +1999,7 @@ vowel/u_bck [u] base2 [u] sq [u:] bn [u] ne + [u] hy vowel/u_bck2 [u:] la vowel/u_fnt [u:] en_rp vowel/uu [U] en @@ -1974,8 +2023,10 @@ vowel/uu_bck [U] en_wi [U] no [u] zhy [U] bn + [U] om vowel/u_unr [u-] ko vowel/V [3] en_sc + [V] ne vowel/V_2 [V] en [a] af [V] ru @@ -1985,7 +2036,6 @@ vowel/V_3 [V] en_rp [V] hi [V] ta [V] bn - [V] ne vowel/V_4 [V] en_sc [@:] vi [V] da @@ -2032,6 +2082,9 @@ vowel/yy_4 [y] de [y] hu [y] grc [y] is + [y] hy +vweak/@ [@#] om +vweak/a [a#] om vwl_af/@ [@] af vwl_af/I [I] af vwl_af/r@ [@] af @@ -2087,10 +2140,13 @@ vwl_fr/@R [x] pt_pt vwl_fr/@R2 [R] fr_ca vwl_fr/@R3 [R] fr [r] fr + [Q2] hy vwl_fr/@R4 [R] fr [r] fr [r2] fr + [Q2] hy vwl_fr/@R5 [r] fr + [Q2] hy vwl_fr/r_a [a] fr [a2] fr [wA] fr @@ -2112,6 +2168,7 @@ vwl_no/u#2 [u-:] no vwl_no/y# [Y:] no vwl_no/y#y [Yy] no vwl_ro/ii- [I^] ro + [I#] om vwl_ro/li [I^] ro vwl_ro/mi [I^] ru [I^] ro diff --git a/phsource/ph_hindi b/phsource/ph_hindi index a72728a8..b8807be3 100644 --- a/phsource/ph_hindi +++ b/phsource/ph_hindi @@ -16,6 +16,12 @@ phoneme @ reduceto @- 0 endphoneme +phoneme @/ + vowel starttype (@) endtype (@) + length 130 + formants vowel/@_bck +endphoneme + phoneme V vowel starttype (@) endtype (@) length 130 diff --git a/phsource/phonemes b/phsource/phonemes index 7846f64f..1024efe6 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1138,6 +1138,13 @@ phoneme x switchvoicing Q endphoneme +phoneme X + vls uvl frc + lengthmod 3 + wave ufric/xx3 + before _ ufric/xx3%70 +endphoneme + phoneme h vls glt apr @@ -1325,3 +1332,9 @@ include ph_nepali phonemetable lv base include ph_latvian + +phonemetable hy base +include ph_armenian_west + +phonemetable om base +include ph_oromo diff --git a/phsource/vdiph/aau b/phsource/vdiph/aau index f30e22a4..89bbd9e2 100644 Binary files a/phsource/vdiph/aau and b/phsource/vdiph/aau differ diff --git a/phsource/vdiph/vowelchart.png b/phsource/vdiph/vowelchart.png index 83c4db3e..8f9eb3ea 100644 Binary files a/phsource/vdiph/vowelchart.png and b/phsource/vdiph/vowelchart.png differ diff --git a/phsource/vdiph2/vowelchart.png b/phsource/vdiph2/vowelchart.png index 078f39c9..d36e81f4 100644 Binary files a/phsource/vdiph2/vowelchart.png and b/phsource/vdiph2/vowelchart.png differ diff --git a/phsource/vnasal/V_n b/phsource/vnasal/V_n new file mode 100644 index 00000000..4d87458c Binary files /dev/null and b/phsource/vnasal/V_n differ diff --git a/phsource/vnasal/vowelchart.png b/phsource/vnasal/vowelchart.png index c3b70307..b6a6a05d 100644 Binary files a/phsource/vnasal/vowelchart.png and b/phsource/vnasal/vowelchart.png differ diff --git a/phsource/vowel/8_7 b/phsource/vowel/8_7 new file mode 100644 index 00000000..d29eec67 Binary files /dev/null and b/phsource/vowel/8_7 differ diff --git a/phsource/vowel/vowelchart.png b/phsource/vowel/vowelchart.png index 8bac0a30..1953fc8f 100644 Binary files a/phsource/vowel/vowelchart.png and b/phsource/vowel/vowelchart.png differ diff --git a/src/compiledict.cpp b/src/compiledict.cpp index 1c3f847d..f8a2067e 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -312,6 +312,11 @@ static char nullstring[] = {0}; break; case 1: + if(c == '-') + { + flag_codes[n_flag_codes++] = BITNUM_FLAG_HYPHENATED; + c = ' '; + } if(isspace2(c)) { p[0] = 0; /* terminate english word */ diff --git a/src/dictionary.cpp b/src/dictionary.cpp index f4f7fef3..e7954497 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -2867,7 +2867,7 @@ const char *Translator::LookupDict2(const char *word, const char *word2, char *p // don't use the contraction if any of the words are emphasized for(ix=0; ix <= skipwords; ix++) { - if((wtab != NULL) && (wtab[ix].flags & FLAG_EMPHASIZED)) + if((wtab != NULL) && (wtab[ix].flags & FLAG_EMPHASIZED2)) { condition_failed = 1; } @@ -2935,6 +2935,13 @@ const char *Translator::LookupDict2(const char *word, const char *word2, char *p } } + if(dictionary_flags2 & FLAG_HYPHENATED) + { + if(!(word_flags & FLAG_HYPHEN_AFTER)) + { + continue; + } + } if(dictionary_flags2 & FLAG_CAPITAL) { if(!(word_flags & FLAG_FIRST_UPPER)) @@ -3070,7 +3077,11 @@ int Translator::LookupDictList(char **wordptr, char *ph_out, unsigned int *flags if(length > 0) { // found an abbreviation containing dots - nbytes = utf8_nbytes(word2); + nbytes = 0; + while(((c = word2[nbytes]) != 0) && (c != ' ')) + { + nbytes++; + } memcpy(&word[length],word2,nbytes); word[length+nbytes] = 0; found = LookupDict2(word, word2, ph_out, flags, end_flags, wtab); diff --git a/src/extras.cpp b/src/extras.cpp index 3ecf0818..b5711784 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -126,7 +126,8 @@ int TestSynthCallback(short *wav, int numsamples, espeak_EVENT *events) while((type = events->type) != 0) { - fprintf(f_events,"%2d (%4d %4d) %5d %5d (%3d) ",type,events->unique_identifier,(int)events->user_data,events->audio_position,events->text_position,events->length); + fprintf(f_events,"%2d (%4d %4ld) %5d %5d (%3d) ",type,events->unique_identifier,(long)events->user_data,events->audio_position,events->text_position,events->length); + if((type==3) || (type==4)) fprintf(f_events,"'%s'\n",events->id.name); else diff --git a/src/readclause.cpp b/src/readclause.cpp index 6b50617c..2e1f1ba6 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -82,6 +82,12 @@ const unsigned short punct_chars[] = {',','.','?','!',':',';', 0x3001, // ideograph comma 0x3002, // ideograph period + 0x0589, // Armenian period + 0x055d, // Armenian comma + 0x055c, // Armenian exclamation + 0x055e, // Armenian question + 0x055b, // Armenian emphasis mark + 0xff01, // fullwidth exclamation 0xff0c, // fullwidth comma 0xff0e, // fullwidth period @@ -106,6 +112,12 @@ static const unsigned int punct_attributes [] = { 0, CLAUSE_COMMA+0x8000, // ideograph comma CLAUSE_PERIOD+0x8000, // ideograph period + CLAUSE_PERIOD+0x8000, // Armenian period + CLAUSE_COMMA, // Armenian comma + CLAUSE_EXCLAMATION + PUNCT_IN_WORD, // Armenian exclamation + CLAUSE_QUESTION + PUNCT_IN_WORD, // Armenian question + CLAUSE_PERIOD + PUNCT_IN_WORD, // Armenian emphasis mark + CLAUSE_EXCLAMATION+0x8000, // fullwidth CLAUSE_COMMA+0x8000, CLAUSE_PERIOD+0x8000, @@ -1826,8 +1838,8 @@ MNEM_TAB xml_char_mnemonics[] = { {NULL,-1}}; -int Translator::ReadClause(FILE *f_in, char *buf, short *charix, int n_buf) -{//======================================================================== +int Translator::ReadClause(FILE *f_in, char *buf, short *charix, int n_buf, int *tone_type) +{//======================================================================================== /* Find the end of the current clause. Write the clause into buf @@ -1855,6 +1867,7 @@ int Translator::ReadClause(FILE *f_in, char *buf, short *charix, int n_buf) int any_alnum = 0; int self_closing; int punct_data; + int stressed_word = 0; const char *p; wchar_t xml_buf[N_XML_BUF+1]; @@ -1872,6 +1885,7 @@ int Translator::ReadClause(FILE *f_in, char *buf, short *charix, int n_buf) clause_upper_count = 0; clause_lower_count = 0; end_of_input = 0; + *tone_type = 0; f_input = f_in; // for GetC etc @@ -2110,25 +2124,35 @@ f_input = f_in; // for GetC etc if(iswalnum(c1)) any_alnum = 1; else - if(iswspace(c1)) { - char *p_word; - - if(translator_name == 0x6a626f) + if(stressed_word) { - // language jbo : lojban - // treat "i" or ".i" as end-of-sentence - p_word = &buf[ix-1]; - if(p_word[0] == 'i') + stressed_word = 0; + c1 = CHAR_EMPHASIS; // indicate this word is strtessed + UngetC(c2); + c2 = ' '; + } + + if(iswspace(c1)) + { + char *p_word; + + if(translator_name == 0x6a626f) { - if(p_word[-1] == '.') - p_word--; - if(p_word[-1] == ' ') + // language jbo : lojban + // treat "i" or ".i" as end-of-sentence + p_word = &buf[ix-1]; + if(p_word[0] == 'i') { - ungot_word = "i "; - UngetC(c2); - p_word[0] = 0; - return(CLAUSE_PERIOD); + if(p_word[-1] == '.') + p_word--; + if(p_word[-1] == ' ') + { + ungot_word = "i "; + UngetC(c2); + p_word[0] = 0; + return(CLAUSE_PERIOD); + } } } } @@ -2218,7 +2242,17 @@ if(option_ssml) parag=1; if((phoneme_mode==0) && (sayas_mode==0) && ((punct = lookupwchar(punct_chars,c1)) != 0)) { - if((iswspace(c2) || (punct_attributes[punct] & 0x8000) || IsBracket(c2) || (c2=='?') || (c2=='-') || Eof())) + punct_data = punct_attributes[punct]; + + if(punct_data & PUNCT_IN_WORD) + { + // Armenian punctuation inside a word + stressed_word = 1; + *tone_type = punct_data >> 12 & 0xf; // override the end-of-sentence type + continue; + } + + if((iswspace(c2) || (punct_data & 0x8000) || IsBracket(c2) || (c2=='?') || (c2=='-') || Eof())) { // note: (c2='?') is for when a smart-quote has been replaced by '?' buf[ix] = ' '; @@ -2295,6 +2329,11 @@ if(option_ssml) parag=1; return(CLAUSE_NONE); } } + + if(stressed_word) + { + ix += utf8_out(CHAR_EMPHASIS, &buf[ix]); + } buf[ix] = ' '; buf[ix+1] = 0; return(CLAUSE_EOF); // end of file diff --git a/src/setlengths.cpp b/src/setlengths.cpp index c3883d2e..ea0fafa1 100755 --- a/src/setlengths.cpp +++ b/src/setlengths.cpp @@ -542,7 +542,10 @@ void Translator::CalcLengths() if(end_of_clause == 2) { // this is the last syllable in the clause, lengthen it - more for short vowels - length_mod = length_mod * (256 + (280 - p->ph->std_length)/3)/256; + len = p->ph->std_length; + if(langopts.stress_flags & 0x40000) + len=200; // don't lengthen short vowels more than long vowels at end-of-clause + length_mod = length_mod * (256 + (280 - len)/3)/256; } if(p->type != phVOWEL) diff --git a/src/speak_lib.cpp b/src/speak_lib.cpp index b3b11d2f..f766b7a1 100644 --- a/src/speak_lib.cpp +++ b/src/speak_lib.cpp @@ -517,9 +517,9 @@ void MarkerEvent(int type, unsigned int char_position, int value, unsigned char ep->text_position = char_position & 0xffff; ep->length = char_position >> 24; - time = (double(count_samples + (out_ptr - out_start)/2)*1000.0)/samplerate; + time = (double(count_samples + mbrola_delay + (out_ptr - out_start)/2)*1000.0)/samplerate; ep->audio_position = int(time); - ep->sample = (count_samples + (out_ptr - out_start)/2); + ep->sample = (count_samples + mbrola_delay + (out_ptr - out_start)/2); SHOW("MarkerEvent > count_samples=%d, out_ptr=%x, out_start=0x%x\n",count_samples, out_ptr, out_start); SHOW("*** MarkerEvent > type=%s, uid=%d, text_pos=%d, length=%d, audio_position=%d, sample=%d\n", diff --git a/src/synth_mbrola.cpp b/src/synth_mbrola.cpp index 55ce362d..708b3072 100755 --- a/src/synth_mbrola.cpp +++ b/src/synth_mbrola.cpp @@ -123,6 +123,8 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int char path[sizeof(path_home)+15]; mbrola_name[0] = 0; + mbrola_delay = 0; + if(mbrola_voice == NULL) { samplerate = samplerate_native; @@ -193,6 +195,7 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int else SetParameter(espeakVOICETYPE,1,0); strcpy(mbrola_name,mbrola_voice); + mbrola_delay = 3800; // improve synchronization of events return(EE_OK); } // end of LoadMbrolaTable @@ -602,6 +605,10 @@ void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola) else len = (80 * speed_factor2)/256; +#ifdef USE_MBROLA_LIB + MbrolaMarker(espeakEVENT_PHONEME, (p->sourceix & 0x7ff) + clause_start_char, 0, ph->mnemonic); +#endif + sprintf(buf,"%s\t",WordToString(name)); strcat(mbr_buf,buf); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index b86d1199..f7765530 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.39.14 02.Nov.08"; +const char *version_string = "1.39.18 06.Nov.08"; const int version_phdata = 0x013900; int option_device_number = -1; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 047cc808..88ddab07 100755 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -42,6 +42,7 @@ static void SmoothSpect(void); int n_phoneme_list=0; PHONEME_LIST phoneme_list[N_PHONEME_LIST]; +int mbrola_delay; char mbrola_name[20]; int speed_factor1; diff --git a/src/synthesize.h b/src/synthesize.h index d596d3bd..b9e02d15 100755 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -220,6 +220,7 @@ extern int wavefile_amp2; extern int vowel_transition[4]; extern int vowel_transition0, vowel_transition1; +extern int mbrola_delay; extern char mbrola_name[20]; // from synthdata file diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 9e2fca92..dee239f2 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -45,6 +45,7 @@ // start of unicode pages for character sets #define OFFSET_GREEK 0x380 #define OFFSET_CYRILLIC 0x420 +#define OFFSET_ARMENIAN 0x530 #define OFFSET_DEVANAGARI 0x900 #define OFFSET_BENGALI 0x980 #define OFFSET_TAMIL 0xb80 @@ -431,6 +432,22 @@ SetLengthMods(tr,3); // all equal } break; + case L('h','y'): // Armenian + { + static const char hy_vowels[] = {0x31, 0x35, 0x37, 0x38, 0x3b, 0x48, 0x55, 0}; + static const char hy_consonants[] = {0x32,0x33,0x34,0x36,0x39,0x3a,0x3c,0x3d,0x3e,0x3f, + 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x56,0}; + tr = new Translator(); + tr->langopts.stress_rule = 3; // default stress on final syllable + + tr->letter_bits_offset = OFFSET_ARMENIAN; + memset(tr->letter_bits,0,sizeof(tr->letter_bits)); + SetLetterBits(tr,LETTERGP_A,hy_vowels); + SetLetterBits(tr,LETTERGP_C,hy_consonants); + tr->langopts.max_initial_consonants = 4; + } + break; + case L('i','d'): // Indonesian { static const short stress_lengths_id[8] = {160, 200, 180, 180, 0, 0, 220, 240}; @@ -563,8 +580,8 @@ SetLengthMods(tr,3); // all equal tr->langopts.stress_rule = 0; tr->langopts.spelling_stress = 1; tr->charset_a0 = charsets[4]; // ISO-8859-4 - tr->langopts.numbers = 0x409; - tr->langopts.stress_flags = 0x16; + tr->langopts.numbers = 0x409 + 0x8000 + 0x10000; + tr->langopts.stress_flags = 0x16 + 0x40000; } break; diff --git a/src/translate.cpp b/src/translate.cpp index 38630d33..3c3d015f 100755 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -1179,13 +1179,13 @@ strcpy(phonemes2,phonemes); dictionary_flags[0] &= ~FLAG_PAUSE1; } - if(wflags & FLAG_EMPHASIZED) + if(wflags & FLAG_EMPHASIZED2) { // A word is indicated in the source text as stressed // Give it stress level 6 (for the intonation module) ChangeWordStress(this,word_phonemes,6); -// if(!(wflags & FLAG_LAST_WORD)) // ?? omit pre-pause if it's the last word in the sentence? + if(wflags & FLAG_EMPHASIZED) dictionary_flags[0] |= FLAG_PAUSE1; // precede by short pause } else @@ -2030,6 +2030,7 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ int terminator; int tone; + int tone2; p_textinput = (char *)vp_input; p_wchar_input = (wchar_t *)vp_input; @@ -2044,12 +2045,17 @@ void *Translator::TranslateClause(FILE *f_text, const void *vp_input, int *tone_ for(ix=0; ixReadClause(f_text,source,charix,N_TR_SOURCE); + terminator = translator->ReadClause(f_text, source, charix, N_TR_SOURCE, &tone2); charix[N_TR_SOURCE] = count_characters; clause_pause = (terminator & 0xfff) * 10; // mS tone = (terminator >> 12) & 0xf; + if(tone2 != 0) + { + // override the tone type + tone = tone2; + } for(p=source; *p != 0; p++) { @@ -2248,6 +2254,13 @@ if((c == '/') && (langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(prev_ou c = '\''; } + if(c == CHAR_EMPHASIS) + { + // this character is a marker that the previous word is the focus of the clause + c = ' '; + word_flags |= FLAG_FOCUS; + } + c = TranslateChar(&source[source_index], prev_in,c, next_in, &char_inserted); // optional language specific function if(c == 8) continue; // ignore this character diff --git a/src/translate.h b/src/translate.h index 7505992b..dabcd7c8 100755 --- a/src/translate.h +++ b/src/translate.h @@ -76,7 +76,8 @@ #define FLAG_CAPITAL 0x200 /* pronunciation if initial letter is upper case */ #define FLAG_ALLCAPS 0x400 // only if the word is all capitals #define FLAG_ACCENT 0x800 // character name is base-character name + accent name - +#define FLAG_HYPHENATED 0x1000 // multiple-words, but needs hyphen between parts 1 and 2 +#define BITNUM_FLAG_HYPHENATED 0x2c // wordflags, flags in source word @@ -86,15 +87,16 @@ #define FLAG_HAS_PLURAL 0x4 /* upper-case word with s or 's lower-case ending */ #define FLAG_PHONEMES 0x8 /* word is phonemes */ #define FLAG_LAST_WORD 0x10 /* last word in clause */ -//#define FLAG_SPELLING 0x20 // speak the word as individual letters #define FLAG_EMBEDDED 0x40 /* word is preceded by embedded commands */ #define FLAG_HYPHEN 0x80 #define FLAG_NOSPACE 0x100 // word is not seperated from previous word by a space #define FLAG_FIRST_WORD 0x200 // first word in clause +#define FLAG_FOCUS 0x400 // the focus word of a clause +#define FLAG_EMPHASIZED 0x800 +#define FLAG_EMPHASIZED2 0xc00 // FLAG_FOCUS | FLAG_EMPHASIZED #define FLAG_DONT_SWITCH_TRANSLATOR 0x1000 #define FLAG_SUFFIX_REMOVED 0x2000 #define FLAG_HYPHEN_AFTER 0x4000 -#define FLAG_EMPHASIZED 0x8000 #define FLAG_NO_TRACE 0x10000 // passed to TranslateRules() to suppress dictionary lookup printout #define FLAG_NO_PREFIX 0x20000 @@ -161,8 +163,10 @@ // bits 0-7 pause x 10mS, bits 12-14 intonation type, // bit 19=sentence, bit 18=clause, bits 17=voice change // bit 16 used to distinguish otherwise identical types +// bit 20= punctuation character can be inside a word (Armenian) #define CLAUSE_BIT_SENTENCE 0x80000 #define CLAUSE_BIT_VOICE 0x20000 +#define PUNCT_IN_WORD 0x100000 #define CLAUSE_NONE 0 + 0x04000 #define CLAUSE_PARAGRAPH 70 + 0x80000 @@ -187,6 +191,8 @@ #define SAYAS_DIGITS 0x40 // + number of digits #define SAYAS_DIGITS1 0xc1 +#define CHAR_EMPHASIS 0x0530 // this is an unused character code + // Rule: // [4] [match] [1 pre] [2 post] [3 phonemes] 0 // match 1 pre 2 post 0 - use common phoneme string @@ -306,6 +312,7 @@ typedef struct { // bit15= Give stress to the first unstressed syllable // bit16= Don't diminish consecutive syllables within a word. // bit17= "priority" stress reduces other primary stress to "unstressed" not "secondary" +// bit18= don't lengthen short vowels more than long vowels at end-of-clause int stress_flags; int unstressed_wd1; // stress for $u word of 1 syllable @@ -435,7 +442,7 @@ private: void MakePhonemeList(int post_pause, int new_sentence); int SubstitutePhonemes(PHONEME_LIST2 *plist_out); - int ReadClause(FILE *f_in, char *buf, short *charix, int n_buf); + int ReadClause(FILE *f_in, char *buf, short *charix, int n_buf, int *tone_type); int AnnouncePunctuation(int c1, int c2, char *buf, int ix); const char *LookupDict2(const char *word, const char *word2, char *phonetic, unsigned int *flags, int end_flags, WORD_TAB *wtab);