Fixes to: announce punctuation ( --punct option) git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@227 d46cf337-b52f-0410-862d-fd96e6ae7743master
| Dictionary pa_dict | Dictionary pa_dict | ||||
| @ a a~ e E e~ E~ i | @ a a~ e E e~ E~ i | ||||
| I i: i~ I~ o O o: O~ | |||||
| o~ r- U u u~ U~ V V~ | |||||
| I i~ I~ o O O~ o~ r- | |||||
| U u u~ U~ V V~ | |||||
| : ; b bh c ch d d. | : ; b bh c ch d d. | ||||
| dh dh. f g gh H j J | dh dh. f g gh H j J | ||||
| Jh k kh l l. m n N | Jh k kh l l. m n N | ||||
| n. n^ p ph Q R s S | n. n^ p ph Q R s S | ||||
| t t. th th. v x z | t t. th th. v x z | ||||
| Dictionary prs_dict | |||||
| @ A i o | |||||
| b d h l t X |
| // numeric | // numeric | ||||
| _0 zero $text // TEST | |||||
| //_0 z'i@roU | |||||
| //_0 zero $text // TEST | |||||
| _0 z'i@roU | |||||
| _1 w'0n | _1 w'0n | ||||
| ?6 _1 w'Vn | ?6 _1 w'Vn | ||||
| _2 t'u: | _2 t'u: | ||||
| ogre oUg3 | ogre oUg3 | ||||
| okay oUk'eI | okay oUk'eI | ||||
| oled oUlEd // abbrev | oled oUlEd // abbrev | ||||
| omeg oUm'eIg@ | |||||
| omega oUm'eIg@ | |||||
| omelet 0ml@t | omelet 0ml@t | ||||
| omelette 0ml@t | omelette 0ml@t | ||||
| omnibus $1 | omnibus $1 | ||||
| omniscience 0mn'IsI@ns | omniscience 0mn'IsI@ns | ||||
| opaque oUp'eIk | opaque oUp'eIk | ||||
| oped 0p'Ed | |||||
| opine oUp'aIn | opine oUp'aIn | ||||
| opossum @p0s@m | opossum @p0s@m | ||||
| opponent @poUn@nt | opponent @poUn@nt |
| // 2006-11-18 Gilles Casse <[email protected]> | // 2006-11-18 Gilles Casse <[email protected]> | ||||
| // | // | ||||
| // Updated 2009-09-28 Michel Such <[email protected]> | |||||
| // Updated 2009-10-09 Michel Such <[email protected]> | |||||
| // | // | ||||
| // * Numbers, a few abbreviations and exceptions. | // * Numbers, a few abbreviations and exceptions. | ||||
| // | // | ||||
| afrikaans afrikans | afrikaans afrikans | ||||
| bahamas baamas | bahamas baamas | ||||
| bangladesh bA~gladES | bangladesh bA~gladES | ||||
| bayeux bajY | |||||
| bélarus belarys | bélarus belarys | ||||
| belize beliz | belize beliz | ||||
| bissau bisa'o | bissau bisa'o | ||||
| (burkina faso) byrkina||faso | (burkina faso) byrkina||faso | ||||
| burundi burundi | burundi burundi | ||||
| calvados calvadoss $text | |||||
| croatie kroasi | croatie kroasi | ||||
| esperanto E2sperA~to | esperanto E2sperA~to | ||||
| groenland groEnlA~d | groenland groEnlA~d |
| // 2006-11-18 Gilles Casse <[email protected]> | // 2006-11-18 Gilles Casse <[email protected]> | ||||
| // | // | ||||
| // Updated: 2009-09-25 Michel Such <[email protected]> | |||||
| // Updated: 2009-10-09 Michel Such <[email protected]> | |||||
| // | // | ||||
| // Letter classes: | // Letter classes: | ||||
| ol) en (t_ A~ // somnolent, violent | ol) en (t_ A~ // somnolent, violent | ||||
| Vol) en (t_ // somnolent, violent | Vol) en (t_ // somnolent, violent | ||||
| Xol) ent (_ t2 // volent | Xol) ent (_ t2 // volent | ||||
| eul) ent (_ t2 // veulent | |||||
| ul) en (t_ A~ // turbulent | ul) en (t_ A~ // turbulent | ||||
| Vul) en (t_ | Vul) en (t_ | ||||
| imCoC) en (t_ A~ // impotent | imCoC) en (t_ A~ // impotent | ||||
| _) n (_° nymero | _) n (_° nymero | ||||
| _) neuro (@@P5 nYro | _) neuro (@@P5 nYro | ||||
| _) nvda (P4 Envedea | |||||
| .group o | .group o |
| _0Z2 sa:zAd // hundredths | _0Z2 sa:zAd // hundredths | ||||
| _0Z3 EzR2Ed | _0Z3 EzR2Ed | ||||
| _0Z4 ti:zEzR2Ed | _0Z4 ti:zEzR2Ed | ||||
| _0Z5 sa:zEzR2Ed | |||||
| _0Z6 miliomod | |||||
| // ordinal numbers | // ordinal numbers | ||||
| október $alt | október $alt | ||||
| november $alt | november $alt | ||||
| december $alt | december $alt | ||||
| //The following 12 row contains shorter hungarian month names | //The following 12 row contains shorter hungarian month names | ||||
| jan $alt | jan $alt | ||||
| feb $alt | feb $alt |
| .group á | .group á | ||||
| á a: | á a: | ||||
| @) ában (_S4 a:bAn | |||||
| @) ának (_S4 a:nAk | |||||
| .group b | .group b | ||||
| b b | b b | ||||
| bb b: | bb b: | ||||
| @) ban (_S3 bAn | |||||
| @) ben (_S3 bEn | |||||
| biz (A b'iz, // bizalmas etc. | biz (A b'iz, // bizalmas etc. | ||||
| biedermeier bi:dER2ma:jER2 | biedermeier bi:dER2ma:jER2 | ||||
| dd d: | dd d: | ||||
| dts tS: | dts tS: | ||||
| dt t: | dt t: | ||||
| apró) d (sz d | |||||
| a) dsz ts: | a) dsz ts: | ||||
| beszé) d (szin d | |||||
| cselé) d d | cselé) d d | ||||
| enge) dsz ts: | enge) dsz ts: | ||||
| engedelmeske) dsz ts: | engedelmeske) dsz ts: | ||||
| fogó) dz (kod ts | |||||
| hazu) dsz ts: | hazu) dsz ts: | ||||
| ha) d (járat d | |||||
| hor) d (szék d | |||||
| mara) dsz ts: | mara) dsz ts: | ||||
| tu) dsz ts: | tu) dsz ts: | ||||
| kére) dz ts | kére) dz ts | ||||
| mentegető) dz z | |||||
| // dd d: | // dd d: | ||||
| dz dz | dz dz | ||||
| A) dz (A d:z | A) dz (A d:z | ||||
| .group e | .group e | ||||
| e E | e E | ||||
| D_-_) es (_ %ES | D_-_) es (_ %ES | ||||
| _) egyezség _!'EJ:ESSe:g | _) egyezség _!'EJ:ESSe:g | ||||
| .group é | .group é | ||||
| é e: | é e: | ||||
| éi (é e::i: | éi (é e::i: | ||||
| @) ében (_S4 e:bEn | |||||
| @) ének (_S4 e:nEk | |||||
| .group ë | .group ë | ||||
| ë Y | ë Y | ||||
| C) gyj J | C) gyj J | ||||
| A) gyj (A J: | A) gyj (A J: | ||||
| ha) gyj J: | ha) gyj J: | ||||
| _e) gy (es J: | |||||
| e) gy (jelentésű J | |||||
| _e) gy (es J: | |||||
| _e) gy (et_ J: | _e) gy (et_ J: | ||||
| _e) gy (etlen J: | _e) gy (etlen J: | ||||
| _e) gy (ik J: | _e) gy (ik J: | ||||
| _e) gy (üt J: | _e) gy (üt J: | ||||
| e) gyj (elentésű Jj | |||||
| gyön) gy (sor J | |||||
| _minde) gy (ik J: | _minde) gy (ik J: | ||||
| na) gysz (a Js | na) gysz (a Js | ||||
| .group i | .group i | ||||
| i i | i i | ||||
| @) i (_S1 i | |||||
| _) itthon ithon | _) itthon ithon | ||||
| .group í | .group í | ||||
| í i: | í i: | ||||
| íts i:tS: | íts i:tS: | ||||
| fesz) ítsd i:tSd | |||||
| bizony) ítsd i:tSd | |||||
| .group j | .group j | ||||
| j j | j j | ||||
| @) jában (_S5 ja:bAn | |||||
| @) jának (_S5 ja:nAk | |||||
| _) javíts jAvi:tS: | _) javíts jAvi:tS: | ||||
| _) javítsd jAvi:tSd | _) javítsd jAvi:tSd | ||||
| .group k | .group k | ||||
| k k | k k | ||||
| kk k: | kk k: | ||||
| föld) s (ánc S | föld) s (ánc S | ||||
| s (színű S | s (színű S | ||||
| hel) s (inki z | hel) s (inki z | ||||
| ki) s (ebb SS | ki) s (ebb SS | ||||
| _má) s (szó S | _má) s (szó S | ||||
| _munká) s S | _munká) s S | ||||
| tty c: | tty c: | ||||
| apá) ts (ág tS: | apá) ts (ág tS: | ||||
| becsüle) t t | becsüle) t t | ||||
| csalódo) tts (ág tS: | |||||
| cson) t t | cson) t t | ||||
| cson) tj c | cson) tj c | ||||
| ezüs) t t | ezüs) t t | ||||
| éle) t t | éle) t t | ||||
| felej) ts tS | felej) ts tS | ||||
| gyapo) t t | |||||
| gráni) t t | |||||
| já) tsz (ani ts: | já) tsz (ani ts: | ||||
| tsz ts: | tsz ts: | ||||
| szorí) ts (a tS: | szorí) ts (a tS: | ||||
| á) t (sző t | á) t (sző t | ||||
| á) t (szú t | á) t (szú t | ||||
| á) t (szű t | á) t (szű t | ||||
| á) t (jut t | |||||
| á) t (jö t | |||||
| bizo) tts (ág tS: | bizo) tts (ág tS: | ||||
| állí) ts tS: | állí) ts tS: | ||||
| állapo) t (sor t | állapo) t (sor t | ||||
| köve) ts (ég tS: | köve) ts (ég tS: | ||||
| kür) t t | kür) t t | ||||
| kür) tj c | kür) tj c | ||||
| küldö) ttj c: | |||||
| korlátozo) tts tS: | korlátozo) tts tS: | ||||
| neve) ts (ég tS: | neve) ts (ég tS: | ||||
| on) ts (u tS | on) ts (u tS | ||||
| o) tt t: | |||||
| szen)t (szék t | szen)t (szék t | ||||
| szé) t t | szé) t t | ||||
| szöve) ts (ég tS: | szöve) ts (ég tS: | ||||
| söté) ts (ég tS: | |||||
| sajá) ts (ág tS: | |||||
| pillan) ts tS | pillan) ts tS | ||||
| romlo) tts tS: | romlo) tts tS: | ||||
| tar) ts tS | tar) ts tS | ||||
| e) z (t s | e) z (t s | ||||
| ho) z (ta s | ho) z (ta s | ||||
| ho) z (tá s | ho) z (tá s | ||||
| helye) z (ked s | |||||
| inté) z (ked s | inté) z (ked s | ||||
| költö) z (köd s | költö) z (köd s | ||||
| //_xx விழுக்காடு $text // TESTING doesn't reduce vowels | |||||
| // This file is UTF8 encoded | // This file is UTF8 encoded | ||||
| // Spelling to phoneme words and exceptions for Tamil | // Spelling to phoneme words and exceptions for Tamil | ||||
| _0M5 a:jirVma:jirVmko:d.i // 10,000,000,000,000 | _0M5 a:jirVma:jirVmko:d.i // 10,000,000,000,000 | ||||
| _1M5 a:jirVma:jirVmko:d.i | _1M5 a:jirVma:jirVmko:d.i | ||||
| _dpt _pul.l.i | _dpt _pul.l.i | ||||
| // exceptions | |||||
| பாபு $alt // initial ப as [b] | |||||
| பாலு $alt | |||||
| பவானி $alt | |||||
| பகவதி $alt | |||||
| பானம் $alt | |||||
| பாறம் $alt | |||||
| பாரதி $alt | |||||
| பாரதம் $alt | |||||
| பரதம் $alt | |||||
| பாப $alt | |||||
| பாகம் $alt | |||||
| பண்தம் $alt | |||||
| பவனி $alt | |||||
| தானம் $alt // initial த as [d] | |||||
| தேகம் $alt | |||||
| திரவியம் $alt | |||||
| தூபம் $alt | |||||
| தீபம் $alt | |||||
| தீபாவளி $alt | |||||
| தீரம் $alt | |||||
| தைரியம் $alt | |||||
| திடம் $alt | |||||
| திரவம் $alt | |||||
| திடீர் $alt | |||||
| திவசம் $alt | |||||
| தியானம் $alt | |||||
| தானியம் $alt | |||||
| தண்டனை $alt | |||||
| துவம்சம் $alt | |||||
| திருஷ்டி $alt | |||||
| தயாநிதி $alt | |||||
| தயாளு $alt | |||||
| துக்கம் $alt | |||||
| திகில் $alt | |||||
| துந்துவி $alt | |||||
| தயவு $alt | |||||
| தடால் $alt | |||||
| திக் $alt | |||||
| தடக் $alt | |||||
| தீக்ஷை $alt | |||||
| கக $alt // initial க as [g] | |||||
| கனம் $alt | |||||
| கணம் $alt | |||||
| கணபதி $alt | |||||
| கணீர் $alt | |||||
| கிலி $alt | |||||
| கில்லி $alt | |||||
| கோதுமை $alt | |||||
| கோபுரம் $alt | |||||
| காந்தம் $alt | |||||
| காந்தி $alt | |||||
| குண்டு $alt | |||||
| கோலி $alt | |||||
| குகை $alt | |||||
| கிரி $alt | |||||
| கோமதி $alt | |||||
| பப pVpV |
| _) எ ;e // add a short [j] sound at start of word ? | _) எ ;e // add a short [j] sound at start of word ? | ||||
| ஏ e: | ஏ e: | ||||
| _) ஏ ;e:: // add a short [j] sound at start of word ? | |||||
| _) ஏ ;e: // add a short [j] sound at start of word ? | |||||
| ஐ aI | ஐ aI | ||||
| ்) க (B g | ்) க (B g | ||||
| _) க kV | _) க kV | ||||
| _) க (B k | _) க (B k | ||||
| _) க (T gV // if word has $alt attribute in ta_list | |||||
| _) க (BT g // $alt | |||||
| க்க kkV | க்க kkV | ||||
| க்க (B kk | க்க (B kk | ||||
| _) க (ௌ g | |||||
| க (ீத g | |||||
| க (ஜ gV | |||||
| _) க (ம்பீர gV | |||||
| _) க (ந்தர்வ gV | |||||
| _) க (ோவிந்த g | |||||
| ங NV | ங NV | ||||
| ங (B N | ங (B N | ||||
| ச sV // ?? [z] | ச sV // ?? [z] | ||||
| ச (B s | ச (B s | ||||
| _) ச sa | _) ச sa | ||||
| ஞ்) ச dZV | ஞ்) ச dZV | ||||
| ஞ்) ச (B dZ | ஞ்) ச (B dZ | ||||
| ஜ dZV | ஜ dZV | ||||
| ஜ (B dZ | ஜ (B dZ | ||||
| ஞ n^V | ஞ n^V | ||||
| ஞ (B n^ | ஞ (B n^ | ||||
| ட d.V | ட d.V | ||||
| ட (B d. | ட (B d. | ||||
| _) ட t.V | _) ட t.V | ||||
| ட்ட t.t.V | ட்ட t.t.V | ||||
| ட்ட (B t.t. | ட்ட (B t.t. | ||||
| ண n.V | ண n.V | ||||
| ண (B n. | ண (B n. | ||||
| த dV | த dV | ||||
| த (B d | த (B d | ||||
| _) த tV | _) த tV | ||||
| _) த (B t | _) த (B t | ||||
| _) த (T dV // if word has $alt attribute in ta_list | |||||
| _) த (BT d // if word has $alt | |||||
| த்த ttV | த்த ttV | ||||
| த்த (B tt | த்த (B tt | ||||
| // exceptions, த as [d] | |||||
| _) த (ன dV | |||||
| _) த (ர்ம dV | |||||
| _) த (ுர் d | |||||
| _) த (ூர d | |||||
| _) த (ெய்வ d | |||||
| _) த (ுஷ் d | |||||
| _) த (க்ஷிணா dV | |||||
| ந nV | ந nV | ||||
| ந (B n // dental n | ந (B n // dental n | ||||
| ன nV | ன nV | ||||
| ன (B n // alveolar n | ன (B n // alveolar n | ||||
| ப bV | ப bV | ||||
| ப (B b | ப (B b | ||||
| _) ப pV | _) ப pV | ||||
| _) ப (B p | _) ப (B p | ||||
| _) ப (T bV // if word has $alt attribute in ta_list | |||||
| _) ப (BT b // if word has $alt | |||||
| ப்ப ppV | ப்ப ppV | ||||
| ப்ப (B pp | ப்ப (B pp | ||||
| ட்) ப pV | ட்) ப pV | ||||
| ஃ) ப fV | ஃ) ப fV | ||||
| ஃ) ப (B f | ஃ) ப (B f | ||||
| ம mV | ம mV | ||||
| ம (B m | ம (B m | ||||
| ய jV | ய jV | ||||
| ய (B j | ய (B j | ||||
| ர rV | ர rV | ||||
| ர (B r | ர (B r | ||||
| ற RV | ற RV | ||||
| ற (B R | ற (B R | ||||
| ற் (ற t. // RR -> t.R | ற் (ற t. // RR -> t.R | ||||
| ல lV | ல lV | ||||
| ல (B l | ல (B l | ||||
| ள l.V | ள l.V | ||||
| ள (B l. | ள (B l. | ||||
| ழ z.V | ழ z.V | ||||
| ழ (B z. | ழ (B z. | ||||
| வ vV | வ vV | ||||
| வ (B v | வ (B v | ||||
| ஶ SV | ஶ SV | ||||
| ஶ (B S | ஶ (B S | ||||
| ஷ s.V | ஷ s.V | ||||
| ஷ (B s. | ஷ (B s. | ||||
| ஸ sV | ஸ sV | ||||
| ஸ (B s | ஸ (B s | ||||
| ஹ hV | ஹ hV | ||||
| ஹ (B h | ஹ (B h | ||||
| க்ஷ ks.V | க்ஷ ks.V | ||||
| க்ஷ (B ks. | க்ஷ (B ks. | ||||
| 61 phoneme tables | |||||
| 62 phoneme tables | |||||
| new total | new total | ||||
| base 104 104 | base 104 104 | ||||
| base2 26 125 | base2 26 125 | ||||
| eu 6 126 | eu 6 126 | ||||
| mn 15 115 | mn 15 115 | ||||
| pa 13 153 | pa 13 153 | ||||
| prs 8 111 | |||||
| Data file Used by | Data file Used by | ||||
| b/b [b] base | b/b [b] base | ||||
| [k] base2 | [k] base2 | ||||
| [k] en | [k] en | ||||
| [k] fi | [k] fi | ||||
| [k] fr | |||||
| [kh] hi | [kh] hi | ||||
| [k] hu | [k] hu | ||||
| [k] lv | [k] lv | ||||
| vdiph/au [aU] en | vdiph/au [aU] en | ||||
| [aU] af | [aU] af | ||||
| [a:U] vi | [a:U] vi | ||||
| [aU] prs | |||||
| vdiph/au# [aU] en_sc | vdiph/au# [aU] en_sc | ||||
| vdiph/au_2 [au] zhy | vdiph/au_2 [au] zhy | ||||
| vdiph/au_3 [aU] en_rp | vdiph/au_3 [aU] en_rp | ||||
| [EI] vi | [EI] vi | ||||
| [eI] hy | [eI] hy | ||||
| [eI] ne | [eI] ne | ||||
| [eI] prs | |||||
| vdiph/eei_2 [eI] eo | vdiph/eei_2 [eI] eo | ||||
| [ei] fi | [ei] fi | ||||
| [ei] lv | [ei] lv | ||||
| [e~] hi | [e~] hi | ||||
| [e~] pt | [e~] pt | ||||
| [e~] bn | [e~] bn | ||||
| vnasal/ii_n [I~] hi | |||||
| vnasal/i_n [i~] pt | vnasal/i_n [i~] pt | ||||
| [i~] bn | [i~] bn | ||||
| [i:~] bn | [i:~] bn | ||||
| vnasal/i_n2 [I~] hi | |||||
| [i~] hi | |||||
| vnasal/i_n2 [i~] hi | |||||
| vnasal/m- [m-] sw | vnasal/m- [m-] sw | ||||
| vnasal/n- [n-] sw | vnasal/n- [n-] sw | ||||
| vnasal/nn- [N-] sw | vnasal/nn- [N-] sw | ||||
| [A] zh | [A] zh | ||||
| vowel/aa_3 [A:] af | vowel/aa_3 [A:] af | ||||
| [A] sq | [A] sq | ||||
| [A] prs | |||||
| vowel/aa_4 [A:] sv | vowel/aa_4 [A:] sv | ||||
| [O] vi | [O] vi | ||||
| vowel/aa_5 [A:] en_n | vowel/aa_5 [A:] en_n | ||||
| [E2] id | [E2] id | ||||
| [e] hy | [e] hy | ||||
| [E] bn | [E] bn | ||||
| [E] prs | |||||
| vowel/e_mid2 [E] af | vowel/e_mid2 [E] af | ||||
| [E] de | [E] de | ||||
| [E2] de | [E2] de | ||||
| [i:] kn | [i:] kn | ||||
| [i] ne | [i] ne | ||||
| [i] mn | [i] mn | ||||
| [i] prs | |||||
| vowel/i# [y:] cy | vowel/i# [y:] cy | ||||
| vowel/i_2 [i2] de | vowel/i_2 [i2] de | ||||
| [i:] de | [i:] de | ||||
| [oU] en_n | [oU] en_n | ||||
| [oU] en_wi | [oU] en_wi | ||||
| [o:] de | [o:] de | ||||
| [o2] fr | |||||
| [o] hi | [o] hi | ||||
| [o] ta | [o] ta | ||||
| [o] it | [o] it | ||||
| [o] bn | [o] bn | ||||
| [o] mr | [o] mr | ||||
| [o:] mn | [o:] mn | ||||
| [o:] pa | |||||
| vowel/o_2 [o:] cy | vowel/o_2 [o:] cy | ||||
| [o2] fr | |||||
| [o:] hi | [o:] hi | ||||
| [o:] hu | [o:] hu | ||||
| [o:] la | [o:] la | ||||
| [o] vi | [o] vi | ||||
| [o] da | [o] da | ||||
| [o:] bn | [o:] bn | ||||
| [o:] pa | |||||
| vowel/o-_2 [V] en_n | vowel/o-_2 [V] en_n | ||||
| [V] en_wm | [V] en_wm | ||||
| vowel/o_3 [oU] en_sc | vowel/o_3 [oU] en_sc | ||||
| [o] fr | |||||
| [o:] ta | [o:] ta | ||||
| vowel/o-_3 [U] en_rp | vowel/o-_3 [U] en_rp | ||||
| vowel/o-_4 [o] ro | vowel/o-_4 [o] ro | ||||
| [O] da | [O] da | ||||
| vowel/o_6 [O:] nl | vowel/o_6 [O:] nl | ||||
| vowel/o_7 [o] ku | vowel/o_7 [o] ku | ||||
| vowel/o_8 [o] fr | |||||
| vowel/oe [W] en | vowel/oe [W] en | ||||
| [W] af | [W] af | ||||
| [W] de | [W] de | ||||
| [o] zhy | [o] zhy | ||||
| [O] tr | [O] tr | ||||
| [O] id | [O] id | ||||
| [o] prs | |||||
| vowel/oo_1 [O:] en_n | vowel/oo_1 [O:] en_n | ||||
| [O:] en_rp | [O:] en_rp | ||||
| [O@] en_rp | [O@] en_rp | ||||
| [u] kn | [u] kn | ||||
| [u:] kn | [u:] kn | ||||
| [u] bn | [u] bn | ||||
| [u] prs | |||||
| vowel/u# [u:] en_sc | vowel/u# [u:] en_sc | ||||
| [Y] tr | [Y] tr | ||||
| vowel/u_2 [u1] fi | vowel/u_2 [u1] fi | ||||
| vwl_en_us/or [o@] en_us | vwl_en_us/or [o@] en_us | ||||
| [O:] en_sc | [O:] en_sc | ||||
| vwl_en_us/ur [U@] en_us | vwl_en_us/ur [U@] en_us | ||||
| vwl_fr/r [R] fr | |||||
| [r] fr | |||||
| vwl_fr/r [r] fr | |||||
| [r2] fr | [r2] fr | ||||
| vwl_fr/_r [R] fr | vwl_fr/_r [R] fr | ||||
| [r] fr | [r] fr | ||||
| [E~] fr | [E~] fr | ||||
| [W~] fr | [W~] fr | ||||
| vwl_fr/@R [x] pt_pt | vwl_fr/@R [x] pt_pt | ||||
| vwl_fr/_r2 [R] fr | |||||
| vwl_fr/@R2 [R] fr_ca | vwl_fr/@R2 [R] fr_ca | ||||
| vwl_fr/@R3 [Q2] hy | vwl_fr/@R3 [Q2] hy | ||||
| vwl_fr/@R4 [Q2] hy | vwl_fr/@R4 [Q2] hy |
| //==================================================== | //==================================================== | ||||
| // French | // French | ||||
| //==================================================== | //==================================================== | ||||
| // Updated 2009-09-30 Michel Such <[email protected]> | |||||
| // Updated 2009-10-07 Michel Such <[email protected]> | |||||
| phoneme (l) virtual | phoneme (l) virtual | ||||
| // Used for l and l/ | // Used for l and l/ | ||||
| phoneme i- // shorter | phoneme i- // shorter | ||||
| vowel starttype (i) endtype (i) | vowel starttype (i) endtype (i) | ||||
| length 130 | |||||
| length 110 | |||||
| formants vowel/i_2 | formants vowel/i_2 | ||||
| after (l) l/li-15 | after (l) l/li-15 | ||||
| after (r) vwl_fr/ri | after (r) vwl_fr/ri | ||||
| phoneme o | phoneme o | ||||
| vowel starttype (o) endtype (o) | vowel starttype (o) endtype (o) | ||||
| length 170 | length 170 | ||||
| formants vowel/o_3 | |||||
| formants vowel/o_8 | |||||
| after (l) l/lo-10 | after (l) l/lo-10 | ||||
| after (r) vwl_fr/ro | after (r) vwl_fr/ro | ||||
| before l/ DFT+l/l_o | before l/ DFT+l/l_o | ||||
| phoneme o2 | phoneme o2 | ||||
| vowel starttype (o) endtype (o) | vowel starttype (o) endtype (o) | ||||
| length 170 | length 170 | ||||
| formants vowel/o_2 | |||||
| formants vowel/o | |||||
| after (l) l/lo-10 | after (l) l/lo-10 | ||||
| after (r) vwl_fr/ro | after (r) vwl_fr/ro | ||||
| before l/ vowel/o_mid2+l/l_o | before l/ vowel/o_mid2+l/l_o | ||||
| phoneme wA | phoneme wA | ||||
| vowel starttype (o) endtype (a) | vowel starttype (o) endtype (a) | ||||
| length 230 | |||||
| length 220 | |||||
| formants vwl_fr/w_a | formants vwl_fr/w_a | ||||
| after (l) l/lo-10 | after (l) l/lo-10 | ||||
| after (r) vwl_fr/ro-15 | |||||
| after (r) vwl_fr/ro | |||||
| before l/ DFT-10+l/l_a | before l/ DFT-10+l/l_a | ||||
| before j DFT | before j DFT | ||||
| before (r) DFT+vwl_fr/xr | before (r) DFT+vwl_fr/xr | ||||
| lengthmod 2 | lengthmod 2 | ||||
| wave ustop/k%40 // reduce strength of noise burst | wave ustop/k%40 // reduce strength of noise burst | ||||
| before _ ustop/k_ | before _ ustop/k_ | ||||
| before (r) ustop/kr%45 | |||||
| before (r) ustop/k%50 | |||||
| before r/2 ustop/k%60 | before r/2 ustop/k%60 | ||||
| before (l) ustop/kl%45 | before (l) ustop/kl%45 | ||||
| before (i) ustop/ki%45 | before (i) ustop/ki%45 | ||||
| phoneme r // between vowels in a word | phoneme r // between vowels in a word | ||||
| liquid uvl starttype (r) endtype (r) | liquid uvl starttype (r) endtype (r) | ||||
| vowelin f1=0 f2=1600 -300 300 f3=-200 80 | |||||
| vowelin f1=0 f2=1600 -300 300 f3=-200 80 len=20 | |||||
| vowelout f1=2 f2=1600 -300 300 f3=-300 80 | vowelout f1=2 f2=1600 -300 300 f3=-300 80 | ||||
| length 100 | length 100 | ||||
| lengthmod 7 | lengthmod 7 | ||||
| phoneme R // First letter of a word | phoneme R // First letter of a word | ||||
| liquid uvl starttype (r) endtype (r) | liquid uvl starttype (r) endtype (r) | ||||
| vowelin f1=0 f2=1600 -300 300 f3=-200 80 | |||||
| vowelin f1=0 f2=1600 -300 300 f3=-200 80 len=20 | |||||
| vowelout f1=2 f2=1600 -300 300 f3=-300 80 | vowelout f1=2 f2=1600 -300 300 f3=-300 80 | ||||
| length 100 | length 100 | ||||
| lengthmod 0 | lengthmod 0 | ||||
| beforenotvowel r/2 | beforenotvowel r/2 | ||||
| formants vwl_fr/r | |||||
| formants vwl_fr/_r2 | |||||
| after _ vwl_fr/_r | after _ vwl_fr/_r | ||||
| after (a) vwl_fr/_r | after (a) vwl_fr/_r | ||||
| after (e) vwl_fr/_r | after (e) vwl_fr/_r | ||||
| phoneme r/2 // variant of [r] when not preceding a vowel | phoneme r/2 // variant of [r] when not preceding a vowel | ||||
| liquid uvl starttype r/2 endtype r/2 | liquid uvl starttype r/2 endtype r/2 | ||||
| vowelout f1=2 f2=1600 -300 300 f3=-300 80 | |||||
| vowelout f1=2 f2=1600 -300 300 f3=-300 100 | |||||
| length 100 | length 100 | ||||
| lengthmod 2 | lengthmod 2 | ||||
| formants vwl_fr/r_+r3/rx%25 | formants vwl_fr/r_+r3/rx%25 |
| phoneme I~ | phoneme I~ | ||||
| vowel starttype (i) endtype (i) | vowel starttype (i) endtype (i) | ||||
| length 170 | length 170 | ||||
| formants vnasal/i_n2 | |||||
| formants vnasal/ii_n | |||||
| endphoneme | endphoneme | ||||
| phoneme e~ | phoneme e~ |
| phonemetable pa hi | phonemetable pa hi | ||||
| include ph_punjabi | include ph_punjabi | ||||
| phonemetable prs base | |||||
| include ph_dari |
| unsigned char bad_phoneme[4]; | unsigned char bad_phoneme[4]; | ||||
| static char nullstring[] = {0}; | static char nullstring[] = {0}; | ||||
| WORD_TAB winfo; | |||||
| comment = NULL; | comment = NULL; | ||||
| text_not_phonemes = 0; | text_not_phonemes = 0; | ||||
| phonetic = word = nullstring; | phonetic = word = nullstring; | ||||
| if(word[0] == '_') | if(word[0] == '_') | ||||
| { | { | ||||
| // This is a special word, used by eSpeak. Translate this into phonemes now | // This is a special word, used by eSpeak. Translate this into phonemes now | ||||
| memset(&winfo,0,sizeof(winfo)); | |||||
| strcat(phonetic, " "); // need a space to indicate word-boundary | strcat(phonetic, " "); // need a space to indicate word-boundary | ||||
| // PROBLEM vowel reductions are not applied to the translated phonemes | // PROBLEM vowel reductions are not applied to the translated phonemes | ||||
| // condition rules are not applied | // condition rules are not applied | ||||
| TranslateWord(translator,phonetic,0,&winfo); | |||||
| TranslateWord(translator,phonetic,0,NULL); | |||||
| text_not_phonemes = 0; | text_not_phonemes = 0; | ||||
| strncpy0(encoded_ph, word_phonemes, N_WORD_BYTES-4); | strncpy0(encoded_ph, word_phonemes, N_WORD_BYTES-4); | ||||
| sprintf(fname,"%s%c%s_dict",path_home,PATHSEP,name); | sprintf(fname,"%s%c%s_dict",path_home,PATHSEP,name); | ||||
| size = GetFileLength(fname); | size = GetFileLength(fname); | ||||
| if(tr->data_dictlist != NULL) | |||||
| { | |||||
| Free(tr->data_dictlist); | |||||
| tr->data_dictlist = NULL; | |||||
| } | |||||
| f = fopen(fname,"rb"); | f = fopen(fname,"rb"); | ||||
| if((f == NULL) || (size <= 0)) | if((f == NULL) || (size <= 0)) | ||||
| { | { | ||||
| return(1); | return(1); | ||||
| } | } | ||||
| if(tr->data_dictlist != NULL) | |||||
| Free(tr->data_dictlist); | |||||
| tr->data_dictlist = Alloc(size); | tr->data_dictlist = Alloc(size); | ||||
| fread(tr->data_dictlist,size,1,f); | fread(tr->data_dictlist,size,1,f); | ||||
| fclose(f); | fclose(f); |
| char phonemes[80]; | char phonemes[80]; | ||||
| char phonemes2[80]; | char phonemes2[80]; | ||||
| char buf_out[120]; | char buf_out[120]; | ||||
| WORD_TAB winfo; | |||||
| static const char *vowels1 = "aeiou"; | static const char *vowels1 = "aeiou"; | ||||
| static const char *vowels2 = "aeou"; | static const char *vowels2 = "aeou"; | ||||
| } | } | ||||
| } | } | ||||
| // translate | // translate | ||||
| memset(&winfo,0,sizeof(winfo)); | |||||
| TranslateWord(translator,&word1[1],0,&winfo); | |||||
| TranslateWord(translator,&word1[1],0, NULL); | |||||
| DecodePhonemes(word_phonemes,phonemes); | DecodePhonemes(word_phonemes,phonemes); | ||||
| stress_posn1 = 0; | stress_posn1 = 0; | ||||
| vowel_ix++; | vowel_ix++; | ||||
| } | } | ||||
| memset(&winfo,0,sizeof(winfo)); | |||||
| TranslateWord(translator,&word2[1],0,&winfo); | |||||
| TranslateWord(translator,&word2[1],0, NULL); | |||||
| DecodePhonemes(word_phonemes,phonemes2); | DecodePhonemes(word_phonemes,phonemes2); | ||||
| vowel_ix = 1; | vowel_ix = 1; | ||||
| char pronounce2[80]; | char pronounce2[80]; | ||||
| char phonemes[80]; | char phonemes[80]; | ||||
| char phonemes2[80]; | char phonemes2[80]; | ||||
| WORD_TAB winfo; | |||||
| static const char *vowels = "aeiouyAEIOUY29@"; | static const char *vowels = "aeiouyAEIOUY29@"; | ||||
| } | } | ||||
| // translate | // translate | ||||
| memset(&winfo,0,sizeof(winfo)); | |||||
| TranslateWord(translator,&word2[1],0,&winfo); | |||||
| TranslateWord(translator,&word2[1],0, NULL); | |||||
| DecodePhonemes2(word_phonemes,phonemes); // also need to change some phoneme names | DecodePhonemes2(word_phonemes,phonemes); // also need to change some phoneme names | ||||
| int wlen; | int wlen; | ||||
| int len; | int len; | ||||
| int check_root; | int check_root; | ||||
| WORD_TAB winfo; | |||||
| char word[80]; | char word[80]; | ||||
| char word2[80]; | char word2[80]; | ||||
| } | } | ||||
| // translate | // translate | ||||
| memset(&winfo,0,sizeof(winfo)); | |||||
| TranslateWord(translator, &word2[1],0,&winfo); | |||||
| TranslateWord(translator, &word2[1],0, NULL); | |||||
| DecodePhonemes(word_phonemes,phonemes); | DecodePhonemes(word_phonemes,phonemes); | ||||
| // find the stress position in the translation | // find the stress position in the translation |
| char ph_buf2[50]; | char ph_buf2[50]; | ||||
| char suffix[20]; | char suffix[20]; | ||||
| char *wordptr; | char *wordptr; | ||||
| unsigned int dictflags[2]; | |||||
| unsigned int dictflags; | |||||
| static const char str_pause[2] = {phonPAUSE_NOLINK,0}; | static const char str_pause[2] = {phonPAUSE_NOLINK,0}; | ||||
| // but not if the next word starts with an upper-case letter | // but not if the next word starts with an upper-case letter | ||||
| ordinal = 2; | ordinal = 2; | ||||
| word[ix] = ' '; | word[ix] = ' '; | ||||
| if(tr->translator_name == L('h','u')) | if(tr->translator_name == L('h','u')) | ||||
| { | { | ||||
| // lang=hu don't treat dot as ordinal indicator if the next word is a month name ($alt) | // lang=hu don't treat dot as ordinal indicator if the next word is a month name ($alt) | ||||
| dictflags[0] = 0; | |||||
| wordptr = &word[ix+2]; | wordptr = &word[ix+2]; | ||||
| LookupDictList(tr, &wordptr, ph_buf, dictflags, 0, NULL); | |||||
| if(dictflags[0] & FLAG_ALT_TRANS) // TEST | |||||
| dictflags = TranslateWord(tr, &word[ix+2], 0, NULL); | |||||
| if(dictflags & FLAG_ALT_TRANS) | |||||
| ordinal = 0; | ordinal = 0; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| case NUM_DFRACTION_1: // italian, say "hundredths" is leading zero | |||||
| case NUM_DFRACTION_1: // italian, say "hundredths" if leading zero | |||||
| case NUM_DFRACTION_5: // hungarian, always say "tenths" etc. | case NUM_DFRACTION_5: // hungarian, always say "tenths" etc. | ||||
| if(decimal_count <= 4) | |||||
| LookupNum3(tr, atoi(&word[n_digits]), ph_buf, 0,0,0); | |||||
| if((word[n_digits]=='0') || (decimal_mode == NUM_DFRACTION_5)) | |||||
| { | { | ||||
| LookupNum3(tr, atoi(&word[n_digits]), ph_buf, 0,0,0); | |||||
| if((word[n_digits]=='0') || (decimal_mode == 0xa000)) | |||||
| { | |||||
| // decimal part has leading zeros, so add a "hundredths" or "thousandths" suffix | |||||
| sprintf(string,"_0Z%d",decimal_count); | |||||
| if(Lookup(tr, string, buf1) == 0) | |||||
| break; // revert to speaking single digits | |||||
| // decimal part has leading zeros, so add a "hundredths" or "thousandths" suffix | |||||
| sprintf(string,"_0Z%d",decimal_count); | |||||
| if(Lookup(tr, string, buf1) == 0) | |||||
| break; // revert to speaking single digits | |||||
| strcat(ph_buf,buf1); | |||||
| } | |||||
| strcat(ph_out,ph_buf); | |||||
| n_digits += decimal_count; | |||||
| strcat(ph_buf,buf1); | |||||
| } | } | ||||
| strcat(ph_out,ph_buf); | |||||
| n_digits += decimal_count; | |||||
| break; | break; | ||||
| case NUM_DFRACTION_3: | case NUM_DFRACTION_3: |
| static int AnnouncePunctuation(Translator *tr, int c1, int c2, char *buf, int bufix) | |||||
| {//================================================================================= | |||||
| static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output, int *bufix, int end_clause) | |||||
| {//========================================================================================================== | |||||
| // announce punctuation names | // announce punctuation names | ||||
| // c1: the punctuation character | // c1: the punctuation character | ||||
| // c2: the following character | // c2: the following character | ||||
| const char *punctname; | const char *punctname; | ||||
| int found = 0; | int found = 0; | ||||
| int soundicon; | int soundicon; | ||||
| char *p; | |||||
| int c2; | |||||
| int len; | |||||
| int bufix1; | |||||
| char buf[200]; | |||||
| char buf2[80]; | |||||
| c2 = *c2_ptr; | |||||
| buf[0] = 0; | |||||
| if((soundicon = LookupSoundicon(c1)) >= 0) | if((soundicon = LookupSoundicon(c1)) >= 0) | ||||
| { | { | ||||
| // add an embedded command to play the soundicon | // add an embedded command to play the soundicon | ||||
| sprintf(&buf[bufix],"\001%dI ",soundicon); | |||||
| sprintf(buf,"\001%dI ",soundicon); | |||||
| UngetC(c2); | UngetC(c2); | ||||
| found = 1; | found = 1; | ||||
| } | } | ||||
| if((punctname = LookupCharName(tr, c1)) != NULL) | if((punctname = LookupCharName(tr, c1)) != NULL) | ||||
| { | { | ||||
| found = 1; | found = 1; | ||||
| if(bufix==0) | |||||
| if((*bufix==0) || (end_clause==0)) | |||||
| { | { | ||||
| punct_count=1; | punct_count=1; | ||||
| while(c2 == c1) | while(c2 == c1) | ||||
| punct_count++; | punct_count++; | ||||
| c2 = GetC(); | c2 = GetC(); | ||||
| } | } | ||||
| UngetC(c2); | |||||
| *c2_ptr = c2; | |||||
| if(end_clause) | |||||
| { | |||||
| UngetC(c2); | |||||
| } | |||||
| p = &buf[bufix]; | |||||
| if(punct_count==1) | if(punct_count==1) | ||||
| { | { | ||||
| sprintf(p,"%s %s %s",tone_punct_on,punctname,tone_punct_off); | |||||
| sprintf(buf,"%s %s %s",tone_punct_on,punctname,tone_punct_off); | |||||
| } | } | ||||
| else | else | ||||
| if(punct_count < 4) | if(punct_count < 4) | ||||
| { | { | ||||
| sprintf(p,"\001+10S%s",tone_punct_on); | |||||
| sprintf(buf,"\001+10S%s",tone_punct_on); | |||||
| while(punct_count-- > 0) | while(punct_count-- > 0) | ||||
| sprintf(buf,"%s %s",buf,punctname); | |||||
| sprintf(p,"%s %s\001-10S",buf,tone_punct_off); | |||||
| { | |||||
| sprintf(buf2," %s",punctname); | |||||
| strcat(buf, buf2); | |||||
| } | |||||
| sprintf(buf2," %s\001-10S",tone_punct_off); | |||||
| strcat(buf, buf2); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| sprintf(p,"%s %s %d %s %s", | |||||
| sprintf(buf,"%s %s %d %s %s", | |||||
| tone_punct_on,punctname,punct_count,punctname,tone_punct_off); | tone_punct_on,punctname,punct_count,punctname,tone_punct_off); | ||||
| return(CLAUSE_COMMA); | |||||
| } | } | ||||
| } | } | ||||
| else | else | ||||
| ssml_ignore_l_angle = c1; // this was < which was converted to <, don't pick it up again as < | ssml_ignore_l_angle = c1; // this was < which was converted to <, don't pick it up again as < | ||||
| } | } | ||||
| ungot_char2 = c1; | ungot_char2 = c1; | ||||
| buf[bufix] = ' '; | |||||
| buf[bufix+1] = 0; | |||||
| buf[0] = ' '; | |||||
| buf[1] = 0; | |||||
| } | } | ||||
| } | } | ||||
| if(found == 0) | if(found == 0) | ||||
| return(-1); | return(-1); | ||||
| bufix1 = *bufix; | |||||
| len = strlen(buf); | |||||
| strcpy(&output[*bufix],buf); | |||||
| *bufix += len; | |||||
| if(end_clause==0) | |||||
| return(-1); | |||||
| if(c1 == '-') | if(c1 == '-') | ||||
| return(CLAUSE_NONE); // no pause | return(CLAUSE_NONE); // no pause | ||||
| if(bufix > 0) | |||||
| if(bufix1 > 0) | |||||
| return(CLAUSE_SHORTCOMMA); | return(CLAUSE_SHORTCOMMA); | ||||
| if((strchr_w(punct_close,c1) != NULL) && !iswalnum(c2)) | if((strchr_w(punct_close,c1) != NULL) && !iswalnum(c2)) | ||||
| return(CLAUSE_SHORTFALL+4); | return(CLAUSE_SHORTFALL+4); | ||||
| int any_alnum = 0; | int any_alnum = 0; | ||||
| int self_closing; | int self_closing; | ||||
| int punct_data; | int punct_data; | ||||
| int is_punctuation; | |||||
| int save_c2; | |||||
| int is_end_clause; | |||||
| int announced_punctuation; | |||||
| int stressed_word = 0; | int stressed_word = 0; | ||||
| const char *p; | const char *p; | ||||
| wchar_t xml_buf[N_XML_BUF+1]; | wchar_t xml_buf[N_XML_BUF+1]; | ||||
| linelength = 0; | linelength = 0; | ||||
| } | } | ||||
| if(option_punctuation && (phoneme_mode==0) && (sayas_mode==0) && iswpunct(c1)) | |||||
| { | |||||
| // option is set to explicitly speak punctuation characters | |||||
| // if a list of allowed punctuation has been set up, check whether the character is in it | |||||
| if((option_punctuation == 1) || (wcschr(option_punctlist,c1) != NULL)) | |||||
| { | |||||
| if((terminator = AnnouncePunctuation(tr, c1, c2, buf, ix)) >= 0) | |||||
| return(terminator); | |||||
| } | |||||
| } | |||||
| announced_punctuation = 0; | |||||
| if((phoneme_mode==0) && (sayas_mode==0) && ((punct = lookupwchar(punct_chars,c1)) != 0)) | |||||
| if((phoneme_mode==0) && (sayas_mode==0)) | |||||
| { | { | ||||
| punct_data = punct_attributes[punct]; | |||||
| is_end_clause = 0; | |||||
| if(punct_data & PUNCT_IN_WORD) | |||||
| if((punct = lookupwchar(punct_chars,c1)) != 0) | |||||
| { | { | ||||
| // Armenian punctuation inside a word | |||||
| stressed_word = 1; | |||||
| *tone_type = punct_data >> 12 & 0xf; // override the end-of-sentence type | |||||
| continue; | |||||
| 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 '?' | |||||
| is_end_clause = 1; | |||||
| } | |||||
| } | } | ||||
| if((iswspace(c2) || (punct_data & 0x8000) || IsBracket(c2) || (c2=='?') || (c2=='-') || Eof())) | |||||
| if(option_punctuation && iswpunct(c1)) | |||||
| { | { | ||||
| // note: (c2='?') is for when a smart-quote has been replaced by '?' | |||||
| is_punctuation = 1; | |||||
| // option is set to explicitly speak punctuation characters | |||||
| // if a list of allowed punctuation has been set up, check whether the character is in it | |||||
| if((option_punctuation == 1) || (wcschr(option_punctlist,c1) != NULL)) | |||||
| { | |||||
| if((terminator = AnnouncePunctuation(tr, c1, &c2, buf, &ix, is_end_clause)) >= 0) | |||||
| return(terminator); | |||||
| announced_punctuation = c1; | |||||
| } | |||||
| } | |||||
| if(is_end_clause) | |||||
| { | |||||
| int c_next; | |||||
| if((c1 == '.') && (cprev == '.')) | if((c1 == '.') && (cprev == '.')) | ||||
| { | { | ||||
| c1 = 0x2026; | c1 = 0x2026; | ||||
| } | } | ||||
| nl_count = 0; | nl_count = 0; | ||||
| save_c2 = c2; | |||||
| c_next = c2; | |||||
| if(iswspace(c2)) | |||||
| if(iswspace(c_next)) | |||||
| { | { | ||||
| while(!Eof() && iswspace(c2)) | |||||
| while(!Eof() && iswspace(c_next)) | |||||
| { | { | ||||
| if(c2 == '\n') | |||||
| if(c_next == '\n') | |||||
| nl_count++; | nl_count++; | ||||
| c2 = GetC(); // skip past space(s) | |||||
| } | |||||
| if(!Eof()) | |||||
| { | |||||
| UngetC(c2); | |||||
| c_next = GetC(); // skip past space(s) | |||||
| } | } | ||||
| } | } | ||||
| if((nl_count==0) && (c1 == '.')) | if((nl_count==0) && (c1 == '.')) | ||||
| { | { | ||||
| // if(iswdigit(cprev) && (tr->langopts.numbers & NUM_ORDINAL_DOT) && islower(c2)) | |||||
| if(iswdigit(cprev) && (tr->langopts.numbers & NUM_ORDINAL_DOT)) | if(iswdigit(cprev) && (tr->langopts.numbers & NUM_ORDINAL_DOT)) | ||||
| { | { | ||||
| // dot after a number indicates an ordinal number | // dot after a number indicates an ordinal number | ||||
| is_punctuation = 0; | |||||
| if(islower(c_next) || (c_next == '<')) | |||||
| is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag) | |||||
| } | } | ||||
| else | else | ||||
| if(iswlower(c2)) | |||||
| if(iswlower(c_next)) | |||||
| { | { | ||||
| // next word has no capital letter, this dot is probably from an abbreviation | // next word has no capital letter, this dot is probably from an abbreviation | ||||
| c1 = ' '; | c1 = ' '; | ||||
| is_punctuation = 0; | |||||
| is_end_clause = 0; | |||||
| } | } | ||||
| if(any_alnum==0) | if(any_alnum==0) | ||||
| { | { | ||||
| c1 = ' '; // no letters or digits yet, so probably not a sentence terminator | c1 = ' '; // no letters or digits yet, so probably not a sentence terminator | ||||
| is_punctuation = 0; | |||||
| is_end_clause = 0; | |||||
| } | } | ||||
| } | } | ||||
| c2 = save_c2; | |||||
| if(is_punctuation) | |||||
| if(is_end_clause) | |||||
| { | { | ||||
| UngetC(c_next); | |||||
| buf[ix] = ' '; | buf[ix] = ' '; | ||||
| buf[ix+1] = 0; | buf[ix+1] = 0; | ||||
| } | } | ||||
| return(punct_data); // only recognise punctuation if followed by a blank or bracket/quote | return(punct_data); // only recognise punctuation if followed by a blank or bracket/quote | ||||
| } | } | ||||
| else | |||||
| { | |||||
| if(!Eof()) | |||||
| { | |||||
| if(iswspace(c2)) | |||||
| UngetC(c_next); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| if(speech_parameters[espeakSILENCE]==1) | if(speech_parameters[espeakSILENCE]==1) | ||||
| continue; | continue; | ||||
| if(c1 == announced_punctuation) | |||||
| { | |||||
| // const unsigned short keep_punctuation[] = { | |||||
| // '\'', '-', 0x92, 0xb4, 0x2019, 0x2032, 0 }; | |||||
| // This character has already been announced, so delete it so that it isn't spoken a second time. | |||||
| // Unless it's a hyphen or apostrophe (which is used by TranslateClause() ) | |||||
| if(!IsBracket(c1)) | |||||
| { | |||||
| c1 = ' '; | |||||
| } | |||||
| } | |||||
| j = ix+1; | j = ix+1; | ||||
| ix += utf8_out(c1,&buf[ix]); // buf[ix++] = c1; | ix += utf8_out(c1,&buf[ix]); // buf[ix++] = c1; | ||||
| if(!iswspace(c1) && !IsBracket(c1)) | if(!iswspace(c1) && !IsBracket(c1)) |
| #include "translate.h" | #include "translate.h" | ||||
| #include "wave.h" | #include "wave.h" | ||||
| const char *version_string = "1.41.13 10.Oct.09"; | |||||
| const char *version_string = "1.41.15 12.Oct.09"; | |||||
| const int version_phdata = 0x014100; | const int version_phdata = 0x014100; | ||||
| int option_device_number = -1; | int option_device_number = -1; |
| // fprintf(stderr,"FMT%d %3s %3d-%3d f1=%d f2=%4d %4d %4d f3=%4d %3d\n", | // fprintf(stderr,"FMT%d %3s %3d-%3d f1=%d f2=%4d %4d %4d f3=%4d %3d\n", | ||||
| // which,WordToString(other_ph->mnemonic),len,rms,f1,f2,f2_min,f2_max,f3_adj,f3_amp); | // which,WordToString(other_ph->mnemonic),len,rms,f1,f2,f2_min,f2_max,f3_adj,f3_amp); | ||||
| if(other_ph->mnemonic == '?') | |||||
| if((other_ph != NULL) && (other_ph->mnemonic == '?')) | |||||
| flags |= 8; | flags |= 8; | ||||
| if(which == 1) | if(which == 1) |
| break; | break; | ||||
| case L('f','a'): // Farsi | |||||
| { | |||||
| tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words | |||||
| } | |||||
| break; | |||||
| case L('f','i'): // Finnish | case L('f','i'): // Finnish | ||||
| { | { | ||||
| static const unsigned char stress_amps_fi[8] = {18,16, 22,22, 20,22, 22,22 }; | static const unsigned char stress_amps_fi[8] = {18,16, 22,22, 20,22, 22,22 }; |
| int spell_word; | int spell_word; | ||||
| int stress_bits; | int stress_bits; | ||||
| int emphasize_allcaps = 0; | int emphasize_allcaps = 0; | ||||
| int wflags = wtab->flags; | |||||
| int wmark = wtab->wmark; | |||||
| int wflags; | |||||
| int wmark; | |||||
| WORD_TAB wtab_null[8]; | |||||
| // translate these to get pronunciations of plural 's' suffix (different forms depending on | // translate these to get pronunciations of plural 's' suffix (different forms depending on | ||||
| // the preceding letter | // the preceding letter | ||||
| static char word_iz[4] = {0,'i','z',0}; | static char word_iz[4] = {0,'i','z',0}; | ||||
| static char word_ss[4] = {0,'s','s',0}; | static char word_ss[4] = {0,'s','s',0}; | ||||
| if(wtab == NULL) | |||||
| { | |||||
| memset(wtab_null, 0, sizeof(wtab_null)); | |||||
| wtab = wtab_null; | |||||
| } | |||||
| wflags = wtab->flags; | |||||
| wmark = wtab->wmark; | |||||
| dictionary_flags[0] = 0; | dictionary_flags[0] = 0; | ||||
| dictionary_flags[1] = 0; | dictionary_flags[1] = 0; | ||||
| dictionary_flags2[0] = 0; | dictionary_flags2[0] = 0; | ||||
| end_phonemes[0] = 0; | end_phonemes[0] = 0; | ||||
| ph_limit = &phonemes[N_WORD_PHONEMES]; | ph_limit = &phonemes[N_WORD_PHONEMES]; | ||||
| if(tr->data_dictlist == NULL) | |||||
| { | |||||
| // dictionary is not loaded | |||||
| word_phonemes[0] = 0; | |||||
| return(0); | |||||
| } | |||||
| // count the length of the word | // count the length of the word | ||||
| if(*word1 == ' ') word1++; // possibly a dot was replaced by space: $dot | if(*word1 == ' ') word1++; // possibly a dot was replaced by space: $dot | ||||
| wordx = word1; | wordx = word1; | ||||
| AppendPhonemes(tr,phonemes, N_WORD_PHONEMES, end_phonemes); | AppendPhonemes(tr,phonemes, N_WORD_PHONEMES, end_phonemes); | ||||
| end_phonemes[0] = 0; | end_phonemes[0] = 0; | ||||
| } | } | ||||
| memcpy(wordx,word_copy,strlen(word_copy)); | |||||
| } | } | ||||
| wordx[-1] = c_temp; | wordx[-1] = c_temp; | ||||
| } | } |
| #define FLAG_DONT_SWITCH_TRANSLATOR 0x1000 | #define FLAG_DONT_SWITCH_TRANSLATOR 0x1000 | ||||
| #define FLAG_SUFFIX_REMOVED 0x2000 | #define FLAG_SUFFIX_REMOVED 0x2000 | ||||
| #define FLAG_HYPHEN_AFTER 0x4000 | #define FLAG_HYPHEN_AFTER 0x4000 | ||||
| #define FLAG_ORDINAL 0x8000 // passed to TranslateNumber() to indicate an ordinal number | |||||
| #define FLAG_NO_TRACE 0x10000 // passed to TranslateRules() to suppress dictionary lookup printout | #define FLAG_NO_TRACE 0x10000 // passed to TranslateRules() to suppress dictionary lookup printout | ||||
| #define FLAG_NO_PREFIX 0x20000 | #define FLAG_NO_PREFIX 0x20000 | ||||
| #define FLAG_ORDINAL 0x40000 // passed to TranslateNumber() to indicate an ordinal number | |||||
| // prefix/suffix flags (bits 8 to 14, bits 16 to 22) don't use 0x8000, 0x800000 | // prefix/suffix flags (bits 8 to 14, bits 16 to 22) don't use 0x8000, 0x800000 | ||||
| #define SUFX_E 0x0100 // e may have been added | #define SUFX_E 0x0100 // e may have been added |