*_list files: added attribute $sentence. *_rules files: added attributes $w_alt, $p_alt. phoneme definitions: added attribute no_pause. -X command-line option: Show the matching of multiple-word entries in *_list files. espeakedit: Add menu option to compile the intonation data file (the data is not yet used). Start language: Bulgarian. lang=bg (Bulgarian): Add feature in espeakedit to make bg_listx from a lexicon of words which have stress position mark-up. espeakedit: Change the frame-length field from Spin Control to Text Control to allow better access from screen-readers. Language options: add an option to the Regressive Voicing option to de-voice the final consonant of words. Don't speak "dot" if an ellipsis is followed by a dot. Intonation: change the internal pitch unit to give finer control, and align with the values displayed in the espeakedit Prosody window. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@243 d46cf337-b52f-0410-862d-fd96e6ae7743master
| @@ -92,6 +92,7 @@ | |||
| gü) i (K i | |||
| qü) i (K i | |||
| i (A j | |||
| i (a_ i | |||
| i (u i | |||
| A) ig (_ tS; | |||
| A) ix S; | |||
| @@ -185,7 +186,7 @@ | |||
| tj (_ tS; | |||
| tx tS; | |||
| tz dz | |||
| tm mm Geminació | |||
| tm mm // Geminació | |||
| .group u | |||
| @@ -140,7 +140,7 @@ _0Co 'hUnd3tst@ | |||
| // Abbreviations | |||
| //============== | |||
| a.a.o A:||A:||_o: | |||
| (a . a . o .) A:||A:||_o: | |||
| allg 'alg@maIn | |||
| abb 'abb,IldUN | |||
| anm 'anm,E*kUN | |||
| @@ -163,7 +163,7 @@ st 'Este: | |||
| usf %Untzo:f'O*t | |||
| usw %Untzo:v'aIt3 $pause | |||
| vgl fE*gl'aIC@ | |||
| z.b tsUmb'aISpi:l | |||
| (z . b .) tsUmb'aISpi:l | |||
| // definite article | |||
| @@ -62,7 +62,7 @@ W# y Y | |||
| * - : ? b d D dZ | |||
| f g h j k l L l/2 | |||
| l/3 m n N p r R s | |||
| S t T tS v w z | |||
| S t T tS v w | |||
| Dictionary hu_dict | |||
| @@ -152,9 +152,9 @@ s2 t v w Z | |||
| Dictionary fr_dict | |||
| @ @- @2 a A A~ e E | |||
| E2 E: E~ i i- i: o o2 | |||
| o3 O~ u u: w w^i W~ y | |||
| @ @- a A~ e E E2 E: | |||
| E~ i i: o O o2 o3 O~ | |||
| u u: w W w^a w^i W~ y | |||
| Y | |||
| : b d dZ f g h j | |||
| @@ -204,8 +204,8 @@ th. v w x z | |||
| Dictionary ta_dict | |||
| a a: aI aU e E e: i | |||
| I i: o o: U u u: V | |||
| V# | |||
| I i: o o: U u u: U: | |||
| V V# | |||
| : ; b C d d. dZ f | |||
| g h H j k l l. m | |||
| @@ -238,15 +238,16 @@ w x z | |||
| Dictionary is_dict | |||
| & @- a aI aU e E eI | |||
| i I o O oU oU2 u W | |||
| y y# Yy | |||
| @- a a: aI aI: aU aU: E | |||
| E: eI eI: i I i: I: O | |||
| O: OI oU oU: u u: W W: | |||
| y y: yI Yy Yy: | |||
| * ** : ; b c C d | |||
| D f g h j J k l | |||
| l# m m# n N n# N# n^ | |||
| n^# p Q r R r# R2 s | |||
| s2 t T tl# v x z | |||
| S s2 t T tl# v x z | |||
| Dictionary it_dict | |||
| @@ -463,6 +464,17 @@ p Q R s S t T tS | |||
| v w x z | |||
| Dictionary sl_dict | |||
| & @ a E e i O o | |||
| u y | |||
| : b d dZ dz f g h | |||
| j k l l^ m n N n^ | |||
| p R R^ s S t tS ts | |||
| v w x z Z | |||
| Dictionary tr_dict | |||
| a e E i I o O u | |||
| @@ -483,8 +495,8 @@ u@ uI y y@ yI | |||
| b c d D f g h j | |||
| J k kh l m n N n^ | |||
| p Q r s s. s; t t[ | |||
| tS; v w x z Z z. | |||
| p Q r s s. t t[ tS; | |||
| v w x z Z z. | |||
| Dictionary zh_dict | |||
| @@ -593,3 +605,13 @@ J Jh k kh l m n N | |||
| p ph Q q R r. s S | |||
| s. t T t. th th. v x | |||
| z Z z. | |||
| Dictionary bg_dict | |||
| @ a e i o u | |||
| ; b C d d; dZ dz f | |||
| g j k l L l^ m n | |||
| n^ p r s S s; t t; | |||
| tS ts v x z Z z; | |||
| @@ -9,7 +9,6 @@ | |||
| //stress symbols ' primary , secondary % unstressed | |||
| // Conditional rules | |||
| // ?2 Use long 'a' in 'bath' | |||
| // ?3 General American | |||
| // ?!3 Not General American | |||
| // ?5 split [3:] er [3:], ir [IR], ur [VR] | |||
| @@ -385,6 +384,7 @@ VI $abbrev | |||
| wwii dVb@Lju:dVb@Lju:t'u: | |||
| xxx $abbrev // not roman 30 | |||
| xy $abbrev | |||
| yd jA@d | |||
| nd $only | |||
| @@ -601,7 +601,7 @@ argue A@gju: | |||
| aries e@ri:z | |||
| arithmetic a2rITm@tIk | |||
| arise a2raIz | |||
| arisen a2rIz@n | |||
| arisen @rIz@n | |||
| armslength ,A@mzl'ENT | |||
| arouse a2raUz | |||
| asbestos asb'Est@s | |||
| @@ -1020,6 +1020,7 @@ el ,El | |||
| electricity I2lEktr'IsI2tI | |||
| electrode I2lEktroUd | |||
| electron I2lEktr0n | |||
| electrocute $2 | |||
| elicit I2lIsI2t | |||
| eligible ElI2dZ@b@L | |||
| élite Il'i:t | |||
| @@ -2666,6 +2667,7 @@ Leanne li:'an | |||
| Lenore lEn'o@ | |||
| Leroy li:rOI | |||
| Liam li:@m | |||
| Llewellyn L@w'ElIn | |||
| Lois loUIs | |||
| Louis lu:I | |||
| Louise lu:w'i:z | |||
| @@ -2898,6 +2900,8 @@ are %A@ $pastf $only | |||
| was %w0z $pastf $only | |||
| ?3 was %wVz $pastf $only | |||
| ?3 wasn't wVznt $pastf $only | |||
| (was a) w%0za2 | |||
| (was the) w%0zD@2 | |||
| wast %w0st $only $pastf $only | |||
| were %w3: $pastf $only | |||
| isn't ,Iz@nt $pastf $strend2 | |||
| @@ -3119,7 +3123,7 @@ soon $verbf | |||
| still $verbf | |||
| already O:lrEdI $u2 $verbf $strend2 | |||
| not ,n0t $verbextend $only $strend | |||
| not ,n0t $verbextend $onlys $strend | |||
| (not have) n0ta2v $pastf $u1 | |||
| (not have) n0thav $pastf $atend | |||
| (not have to) ,n0thavt@5 $pastf $strend | |||
| @@ -21,7 +21,6 @@ | |||
| // This file is UTF-8 encoded | |||
| // Conditional rules | |||
| // ?2 Use long 'a' in 'bath' | |||
| // ?3 General American | |||
| // ?!3 Not General American | |||
| // ?5 split [3:] er [3:], ir [IR], ur [VR] | |||
| @@ -661,14 +660,14 @@ | |||
| .group an | |||
| @) ana (_ 'A:n@ | |||
| ?2 C) an (c aan | |||
| C) an (c aan | |||
| c) an (c an | |||
| f) an (c an | |||
| n) an (c an | |||
| p) an (c an | |||
| ?2 @m) an (d aan | |||
| ?2 sl) an (d aan | |||
| ?2 C) an (t aan | |||
| @m) an (d aan | |||
| sl) an (d aan | |||
| C) an (t aan | |||
| an (ath a2n | |||
| ann (eal a2n | |||
| ann (ih a2n | |||
| @@ -704,8 +703,8 @@ | |||
| &) an (ce_ @n | |||
| ?8 &) an (ce_ a2n | |||
| fin) an (c 'an | |||
| ?2 h) an (ce_ aan | |||
| ?2 z) an (ce_ aan | |||
| h) an (ce_ aan | |||
| z) an (ce_ aan | |||
| &) an (cy @n | |||
| adv) an (c an | |||
| _) an (cie eIn | |||
| @@ -1416,7 +1415,7 @@ | |||
| _) confi (den k0nfI | |||
| _) co (nfis k0 | |||
| _) co (nflu k0 | |||
| _) co (ngress k0 | |||
| _) co (ngre k0 | |||
| congru k0ngru: | |||
| _) co (ni k0 | |||
| _) co (njug k0 | |||
| @@ -1944,6 +1943,7 @@ | |||
| .group el | |||
| _) el (A %Il | |||
| _) ele (ctro %Il,E | |||
| _) ele (ctrol %IlE | |||
| _) ele (ctron ElE | |||
| _) ele (g ElI | |||
| _) elem ElIm | |||
| @@ -2579,6 +2579,8 @@ | |||
| ent) i (ce aI | |||
| @) i (ce_ I2 | |||
| @) i (ced_ I2 | |||
| off) ice I2s | |||
| serv) ice I2s | |||
| @) i (cence I | |||
| _) ich Ik | |||
| &) i (ciCe_ =I | |||
| @@ -3035,6 +3037,7 @@ | |||
| ?7 io (_ =i:oU | |||
| b) io aIoU | |||
| b) io (logy aI0 | |||
| card) io I2oU | |||
| v) io aI0 | |||
| io (li_ I2'oU | |||
| &) ion (_ =i@n | |||
| @@ -3894,6 +3897,7 @@ | |||
| w) orce (st U | |||
| &f) or (d_ 3 | |||
| ore o@ | |||
| or (esis O@ | |||
| oresc @r'Es | |||
| ora (cl 0r@ | |||
| or (eB_ 0r | |||
| @@ -4301,6 +4305,7 @@ | |||
| _) pre (mi prE | |||
| _) pre (miu pri: | |||
| _) pre (mol pr%i: | |||
| _) pre (nK prE | |||
| _) pre (p_ prE | |||
| _) pre (posi prE | |||
| _) pre (qu pri: | |||
| @@ -4607,6 +4612,7 @@ | |||
| pri) s (o z | |||
| @) some (_S4 sVm | |||
| o) some (_S4 soUm | |||
| cro) ss (h s | |||
| ssion S@n | |||
| ssion (_ =S@n | |||
| ?8 ssion (_ =SVn | |||
| @@ -5249,6 +5255,7 @@ | |||
| E (BCe_ @ | |||
| E (Cia 'i: | |||
| Ea (_ =i@ | |||
| Ea (n_ 'i@ | |||
| @@) Ed (_S2vei d | |||
| &C) Ed (_S2vei d | |||
| &c) Ed (_S2vei t | |||
| @@ -1,6 +1,6 @@ | |||
| / | |||
| // *************************************************************************** | |||
| // * Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||
| // * Copyright (C) 2005 to 2010 by Jonathan Duddington * | |||
| // * email: [email protected] * | |||
| // * * | |||
| // * This program is free software; you can redistribute it and/or modify * | |||
| @@ -24,7 +24,7 @@ | |||
| // 2006-11-18 Gilles Casse <[email protected]> | |||
| // | |||
| // Updated 2010-04-01 Michel Such <[email protected]> | |||
| // Updated 2010-05-18 Michel Such <[email protected]> | |||
| // | |||
| // * Numbers, a few abbreviations and exceptions. | |||
| // | |||
| @@ -119,9 +119,9 @@ _. _|pw%E~ | |||
| _/ bar||oblik | |||
| _: d'Y||pw'E~ | |||
| _; pwE~||virg'yl | |||
| _< E~feri-Yr | |||
| _< E~feriWr | |||
| _= egal | |||
| _> syperi-Yr | |||
| _> syperiWr | |||
| _? pwE~||dE~tE2rogasj'O~ | |||
| _! pwE~||dEksklamasj'O~ | |||
| _[ uvr@-_kroSE2 | |||
| @@ -145,11 +145,11 @@ _§ sEksj'O~ | |||
| @ _::arobaz | |||
| % pursA~ $max3 | |||
| & e $u $brk | |||
| _& _e_komErsi-'al | |||
| _& _e_komErsi'al | |||
| * asterisk: $max3 | |||
| + plys $max3 | |||
| ~ tilde | |||
| € @ro | |||
| € @r'o | |||
| ¢ sEnt | |||
| ¥ iEn | |||
| £ livr | |||
| @@ -158,17 +158,17 @@ _& _e_komErsi-'al | |||
| ÷ diviz'e_p'ar | |||
| ¼ W~_k'ar | |||
| ½ W~_d@m'i | |||
| ¾ trwa_k'ar | |||
| ¾ trw^a_k'ar | |||
| © _^_EN | |||
| ® mark||depoz'e | |||
| // numeric | |||
| _0 zero $u+ | |||
| _0 zero2 $u+ | |||
| _1 W~ | |||
| _2 dYz2 | |||
| _3 trwaz2 | |||
| _2 d@z2 | |||
| _3 trw^az2 | |||
| _4 katr | |||
| _5 sE~k | |||
| _6 siz3 | |||
| @@ -182,13 +182,13 @@ _13 trEz | |||
| _14 katorz | |||
| _15 kE~z | |||
| _16 sEz | |||
| _17 dis:Et | |||
| _17 disEt | |||
| _18 dizw^it3 | |||
| _19 diznYf | |||
| _20 vE~ | |||
| _20 vE~t2 | |||
| _21 vE~te:W~ | |||
| _22 vE~tdYz2 | |||
| _23 vE~t:trwaz2 | |||
| _23 vE~t:trw^az2 | |||
| _24 vE~tkatr | |||
| _25 vE~tsE~k | |||
| _26 vE~tsiz3 | |||
| @@ -201,9 +201,9 @@ _4X karA~t | |||
| _41 karA~te:W~ | |||
| _5X sE~kA~t | |||
| _51 sE~kA~te:W~ | |||
| _6X swasA~t: | |||
| _61 swasA~te:W~ | |||
| _71 swasA~te:O~z | |||
| _6X sw^asA~t | |||
| _61 sw^asA~te:W~ | |||
| _71 sw^asA~te:O~z | |||
| _8X katr@vE~: | |||
| _80 katr@vE~z2 | |||
| _0C sA~ | |||
| @@ -221,12 +221,12 @@ _dpt virgyl | |||
| ?2 _9X nonA~t | |||
| ?2 _91 nonA~te:W~ | |||
| (21 ème) vE~te:yni-Em | |||
| (31 ème) trA~te:yni-Em | |||
| (41 ème) karA~te:yni-Em | |||
| (51 ème) sE~kA~te:yni-Em | |||
| (61 ème) swasA~te:yni-Em | |||
| (81 ème) katr@vE~:yni-Em | |||
| (21 ème) vE~te:yniEm | |||
| (31 ème) trA~te:yniEm | |||
| (41 ème) karA~te:yniEm | |||
| (51 ème) sE~kA~te:yniEm | |||
| (61 ème) sw^asA~te:yniEm | |||
| (81 ème) katr@vE~:yniEm | |||
| // ABBREVIATIONS | |||
| //************** | |||
| @@ -240,6 +240,7 @@ alt _::alt | |||
| amd aEmde | |||
| aol aoEl | |||
| api apei | |||
| ascii aski | |||
| avg $abbrev | |||
| avh aveaS | |||
| bay _^_en | |||
| @@ -256,6 +257,7 @@ dept depart@mA~ | |||
| divx diviks | |||
| ebay _^_en | |||
| (e bay) ebay $text | |||
| ebcdic @besedik | |||
| edf @deEf | |||
| eml @EmEl | |||
| etc E2tsetera | |||
| @@ -287,7 +289,7 @@ mm millimètre $text | |||
| mme madame $text | |||
| mn minyt | |||
| mns minytz2 | |||
| (mp 3) _|Empetrwa | |||
| (mp 3) _|Empetrw^a | |||
| mr m@siY | |||
| nsi $abbrev | |||
| nsis $abbrev | |||
| @@ -309,6 +311,7 @@ riaa $abbrev | |||
| riscos riskoEs | |||
| sap $abbrev | |||
| scsi $abbrev | |||
| solaris solaris | |||
| sos $abbrev | |||
| s.t.p silt@:pl'E2 | |||
| s.v.p silvu:pl'E2 | |||
| @@ -341,7 +344,8 @@ pr professeur $text *dot $capital | |||
| // articles | |||
| le $nounf $u+ | |||
| le $verb $verbextend $u | |||
| el $u | |||
| el $u+ | |||
| los los $u+ | |||
| la $nounf $u+ | |||
| la $verb $verbextend $u | |||
| les lez2 $nounf $u+ | |||
| @@ -355,7 +359,7 @@ mais $u+ | |||
| ou u $u $brk | |||
| eh $u $brk | |||
| en $u | |||
| et e $u $brk | |||
| et _|e $u | |||
| ni $u | |||
| car $u | |||
| car $noun | |||
| @@ -369,7 +373,9 @@ ainsi $u+ | |||
| alors alor $u+ | |||
| aussi $u+ | |||
| encore $u+ | |||
| enfin $u+ | |||
| depuis $u+ | |||
| lors $u+ | |||
| certes $u+ | |||
| @@ -471,7 +477,7 @@ vers vEr $u+ | |||
| vers $noun | |||
| en $u+ | |||
| en $u+ $verb $verbextend | |||
| (en suspens) A~||sysp'A~ | |||
| suspense syspEns | |||
| (en tous) A~||tuz2 $u+ | |||
| par $u+ | |||
| parmi $u+ | |||
| @@ -483,6 +489,7 @@ entre $u+ | |||
| entre $verb | |||
| contre $u+ | |||
| chaque $u+ | |||
| chez $u+ | |||
| plusieurs $u+ | |||
| durant $u+ | |||
| avec $u+ $brk | |||
| @@ -504,6 +511,7 @@ point $noun | |||
| plus $u+ | |||
| guère $u+ | |||
| jamais $u+ | |||
| toujours $u+ | |||
| non nO~ $u+ | |||
| oui _|wi $u+ | |||
| @@ -574,8 +582,11 @@ quelques kElk=@z2 $u+ | |||
| tel $u+ | |||
| telle $u+ | |||
| telles $u+ | |||
| tout t'ut2 | |||
| rien ri-'E~n2 | |||
| tout t'ut2 $u+ | |||
| tous $u+ | |||
| toute t'ut $u+ | |||
| toutes t'utz2 $u+ | |||
| rien ri'E~n2 $u+ | |||
| // Letters which can be words | |||
| //=========================== | |||
| @@ -614,8 +625,6 @@ tunis tynis | |||
| (1 èrement) pr@mjErmA~ | |||
| monsieur m@sjY | |||
| messieurs mesjYz2 | |||
| (n'est ce pas) n'Es||p'az2 | |||
| (qu'est ce que) kEsk@ $u | |||
| absent absA~ | |||
| @@ -634,7 +643,7 @@ any Eni $u | |||
| armageddon armagedO~ | |||
| auvent ovA~ | |||
| beta beta | |||
| bien bi-E~n2 | |||
| bien biE~n2 | |||
| bis bis | |||
| bissus bisys | |||
| blues _^_en | |||
| @@ -657,24 +666,27 @@ dernier dErnjer2 | |||
| doppler doplEr | |||
| éloquent elokA~t2 | |||
| enfer A~fEr | |||
| fahrenheit far@najt | |||
| faut fot2 $u+ | |||
| fier fjer $verb | |||
| for $u+ | |||
| francis frA~sis | |||
| fred frEd | |||
| free fri: | |||
| fuel fjul | |||
| gangster gA~gstEr | |||
| gars ga | |||
| genesis Zenezis | |||
| georges ZorZ | |||
| gilles Zil | |||
| gin dZin | |||
| granit granitt $text | |||
| gulf gYlf | |||
| gus gys | |||
| gym Zim | |||
| hélas elas $u+ | |||
| jacques Zak | |||
| karaoke karaoke | |||
| kevin kevin | |||
| laser lazEr | |||
| listbox listboks | |||
| louis lwi | |||
| @@ -686,30 +698,34 @@ mars mars | |||
| mas mas | |||
| mat mat | |||
| merguez mErgEz | |||
| mieux mi-Y $u+ | |||
| messieurs mesjYz2 | |||
| mieux miY $u+ | |||
| monsieur m@sjY | |||
| mrs _^_en | |||
| oasis oazis | |||
| ours urs | |||
| pataquès patakEs | |||
| peter pi:tYr | |||
| patchwork patSwWrk | |||
| peter pi:tWr | |||
| phallus falys | |||
| polder poldEr | |||
| premier pr@mjer2 | |||
| program _^_en | |||
| (program files) program||fajlz | |||
| (program files) programfajlz | |||
| query kueri | |||
| queries kueri | |||
| quid kwid $u+ | |||
| quit _^_en | |||
| recorder rikordYr | |||
| quit kwit | |||
| recorder rikOrdWr | |||
| requiem rekw^ijEm | |||
| revolver revolvEr | |||
| revolver revOlvEr | |||
| sas sas | |||
| scan skan | |||
| scanner skaner2 $verb | |||
| scanner skanYr $noun | |||
| scanners skanYr | |||
| scanner skanWr $noun | |||
| scanners skanWr | |||
| shampoing SA~pwE~ | |||
| sir _^_EN | |||
| sir sWr | |||
| souris suri | |||
| stocker stoker2 | |||
| sus sys | |||
| @@ -719,7 +735,8 @@ tuttiquanti tutikw'anti | |||
| vaut $u+ | |||
| vaux $u+ | |||
| vénus venys | |||
| vot vot | |||
| vot vOt | |||
| writer raitWr | |||
| yves iv | |||
| @@ -766,9 +783,9 @@ stewart sti:wart | |||
| // urt (t is said) | |||
| kurt kurt | |||
| yaourt _|i-aurt | |||
| yoghourt _|i-ogurt | |||
| yogourt _|i-ogurt | |||
| yaourt _|iaurt | |||
| yoghourt _|iogurt | |||
| yogourt _|iogurt | |||
| // ort (t said) | |||
| short Sort | |||
| @@ -793,7 +810,7 @@ smart smart | |||
| about _^_en | |||
| acer asEr | |||
| and _^_en | |||
| amazon amaz'on | |||
| amazon amaz'On | |||
| apple _^_en | |||
| at at $u+ | |||
| (audible manager) od,ibl||manadZ'Yr | |||
| @@ -807,24 +824,23 @@ edit _^_en | |||
| emacs E2maks | |||
| emacspeak E2makspi:k | |||
| end _^_en | |||
| epson E2pson | |||
| espeak @spi:k | |||
| ethernet etErnEt | |||
| exit egzit | |||
| (file zilla) f,ajl||zij'a | |||
| from from $u | |||
| from frOm $u | |||
| get _^_en | |||
| google gug=Yl | |||
| gnome gnom | |||
| google gug=Wl | |||
| gnome gnOm | |||
| gnu $abbrev | |||
| hamburger _|A~b@rgYr | |||
| hamburger _|A~b@rgWr | |||
| help _^_en | |||
| hot _^_en | |||
| in in $u+ | |||
| inside _^_en | |||
| internet E~tErn'Et | |||
| (internet explorer) E~tErn'Et||E2ksplor'Yr | |||
| klaxon klakson | |||
| (internet explorer) E~tErn'Et||E2ksplor'Wr | |||
| klaxon klaksOn | |||
| let _^_en | |||
| lite _^_en | |||
| login _^_en | |||
| @@ -832,14 +848,14 @@ logon _^_en | |||
| (mac os x) makoEsiks | |||
| made _^_en | |||
| media medja | |||
| messenger mE2sEnZYr | |||
| messenger mE2sEnZWr | |||
| my maj $u+ | |||
| nat nat | |||
| not _^_en | |||
| null _^_en | |||
| ok oke $u+ | |||
| open op'Yn | |||
| (open source) op,Yn||s'urs | |||
| open op'Wn | |||
| (open source) op,Wn||s'urs | |||
| outlook autlu:k | |||
| paint _^_en | |||
| paper _^_en | |||
| @@ -847,7 +863,6 @@ people _^_en | |||
| redhat rEdat | |||
| same _^_en | |||
| sametime _^_en | |||
| schubert SubEr | |||
| sun _^_en | |||
| (text aloud) tEkst||@la=wd | |||
| ubuntu ubuntu | |||
| @@ -861,7 +876,7 @@ constations kO~statjO~z2 | |||
| contentions kO~tA~tjO~z2 | |||
| dations datjO~z2 | |||
| désertions dezErtjO~z2 $verb | |||
| exploitions EksplwatjO~z2 | |||
| exploitions Eksplw^atjO~z2 | |||
| heurtions hYrtjO~z2 | |||
| partions partjO~z2 | |||
| rations ratjO~z2 $verb | |||
| @@ -898,6 +913,7 @@ kenya kenja | |||
| laos laos | |||
| lesotho lezoto | |||
| liechtenstein liStYnStajn | |||
| angeles A~nZelEs | |||
| malawi malawi | |||
| mayotte majot | |||
| montréal mO~real | |||
| @@ -915,7 +931,7 @@ texas tE2ks'as | |||
| tuvalu tuvalu | |||
| vanuatu vanuatu | |||
| venezuela venezyela | |||
| (viêt nam) vi-Etnam | |||
| (viêt nam) viEtnam | |||
| wallis walis | |||
| futuna futuna | |||
| zimbabwe zimbabwe | |||
| @@ -1,7 +1,7 @@ | |||
| // French translation rules for Espeak | |||
| // *************************************************************************** | |||
| // * Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||
| // * Copyright (C) 2005 to 2010 by Jonathan Duddington * | |||
| // * email: [email protected] * | |||
| // * * | |||
| // * This program is free software; you can redistribute it and/or modify * | |||
| @@ -23,7 +23,7 @@ | |||
| // 2006-11-18 Gilles Casse <[email protected]> | |||
| // | |||
| // Updated: 2010-04-01 Michel Such <[email protected]> | |||
| // Updated: 2010-05-18 Michel Such <[email protected]> | |||
| // | |||
| // Letter classes: | |||
| @@ -48,8 +48,8 @@ | |||
| .group a | |||
| ae (_ e // reggae vitae | |||
| aen A~ // caen (diff Cicero: aA~) | |||
| ae ae // maestro | |||
| aim (K W~ // faim | |||
| ae aE // maestro | |||
| aim (K E~ // faim | |||
| ain (K E~ // pain | |||
| Ct) ain (_ E~n2 // certain ami | |||
| ch) ain (_ E~n2 // prochain arret | |||
| @@ -61,9 +61,7 @@ | |||
| ait (_ E2t2 // dirait ferait... | |||
| aient (_ E2t2 // diraient feraient... | |||
| f) ai (sA @ // faisons faisan | |||
| a (ill a | |||
| a (ils_ a | |||
| a (il_ a | |||
| a (ilK a | |||
| aie (me E2 // paiement | |||
| ai E // aile | |||
| ai (L06 E // aile | |||
| @@ -86,12 +84,13 @@ | |||
| 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 | |||
| 簿m) an (_ A~ // ca簿man | |||
| _ca簿m) an (_ A~ // ca簿man | |||
| _C) aon (_ A~ // faon, paon, taon | |||
| s) aoul (_ u // saoul | |||
| s) aou (le u // saoule | |||
| @@ -104,12 +103,12 @@ | |||
| au (re_ o // dinosaure | |||
| _) audio (@P5 o2dio | |||
| _) auto (@P4 o2to | |||
| _) autom (n o2to | |||
| _) autom (n otO | |||
| bb) aye (X ei // abbaye | |||
| ay (C E // aym矇 | |||
| ay Ej // paye | |||
| ay (_ E2 // display | |||
| Xl) ayer (X E2jYr // player, layer | |||
| Xl) ayer (X E2jWr // player, layer | |||
| w) an (_ an | |||
| a a // bateau | |||
| @@ -144,6 +143,7 @@ | |||
| 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 | |||
| @@ -155,7 +155,6 @@ | |||
| _) ch (orA k // chorale | |||
| _) ch (oriz S | |||
| _) ch (oro S | |||
| te) ch (_ k | |||
| ch (r k // chr矇tien | |||
| _) chrono (@P6 krono | |||
| ch (l k | |||
| @@ -166,7 +165,7 @@ | |||
| ck k // nickel | |||
| cqu k // grecque | |||
| cq k // pecq | |||
| s) c (Y // | |||
| s) c (Y | |||
| x) c (Y | |||
| c (Y s // c癡de | |||
| _) cyber (P5 sibEr | |||
| @@ -181,8 +180,8 @@ | |||
| c k // recoin donc | |||
| cient (_ sit2 // ils appr嚙箠ent, remercient. | |||
| effi) cien (t sjA~ // coefficient | |||
| d矇fi) cien (t sjA~ // d矇ficient | |||
| effi) cient sjA~ // coefficient | |||
| d矇fi) cient sjA~ // d矇ficient | |||
| cast (_S4 kast // podcast | |||
| casts (_S5 kast // podcasts | |||
| _) clown klun | |||
| @@ -202,6 +201,7 @@ _) 癟' (P2v s | |||
| .group d | |||
| dd d // addition | |||
| _) d' (P2 d | |||
| _ban) d (_ d | |||
| _lan) d (_ d // land | |||
| _stan) d (_ d // stand | |||
| an) d (_ | |||
| @@ -210,6 +210,7 @@ _) 癟' (P2v s | |||
| _gran) d (_ t2 // grand ami, grand marchand | |||
| Cen) d (_ t2 | |||
| Con) d (_ | |||
| con) d (_ t2 | |||
| quen) d (_ t2 | |||
| r) d (_ | |||
| _har) d (_ d | |||
| @@ -237,7 +238,7 @@ _) 癟' (P2v s | |||
| // Define use of the final 'e' in french | |||
| e (_ | |||
| _C) e (_ @2 // je te | |||
| _C) e (_ @ // je te | |||
| -c) e (_ | |||
| -j) e (_ | |||
| C) e (- | |||
| @@ -259,7 +260,7 @@ _) 癟' (P2v s | |||
| pl) ein (_ E~n2 // plein emploi | |||
| e (il E // vieille | |||
| ei E // neige | |||
| eoi wa // asseoir | |||
| eoi w^a // asseoir | |||
| ell El // selle | |||
| el (K El // celsius, caramel | |||
| _f) em (me a // femme | |||
| @@ -551,6 +552,7 @@ L06ch) e (CA @ | |||
| @ch) e (CrA | |||
| @L06ch) e (CrA @ | |||
| @L06C) e (CrA @ | |||
| @L06C) e (rrA E | |||
| @CL06) e (CrA @ | |||
| %C) e (CrA++ | |||
| e (rr+++ E | |||
| @@ -559,9 +561,9 @@ L06ch) e (CA @ | |||
| _) e (CA e | |||
| _) e (xC++ E2 | |||
| Cr) eam i:m | |||
| Cr) eamer i:mYr | |||
| Cl) eaner i:nYr | |||
| vert) e (rX Y | |||
| Cr) eamer i:mWr | |||
| Cl) eaner i:nWr | |||
| vert) e (rX W | |||
| e簿n (_ 'Ein | |||
| _y) en (_ En | |||
| iew) er (X er2 | |||
| @@ -594,7 +596,7 @@ _m) e (ga e | |||
| .group 癡 | |||
| Z) 癡me i-Em | |||
| Z) 癡me iEm | |||
| 癡 E | |||
| 癡s (_ E | |||
| Ar) 癡s (_ Es | |||
| @@ -629,9 +631,14 @@ p) 癡s (_ Es | |||
| su) gg (Y gZ // sugg矇rer suggestif | |||
| gg g // agglom矇rer | |||
| ai) gni n^ // craignions ch璽taignier | |||
| gn n^ // agneau | |||
| gn nj // agneau | |||
| 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 | |||
| @@ -671,7 +678,6 @@ An) gt (A t // vingtaine doigt矇 | |||
| .group h | |||
| _) h _| | |||
| Ca) h (_ h | |||
| _) h (abi // habit, habilleur | |||
| _) h (allo // hallog癡ne | |||
| _) h (ame // hame癟on | |||
| @@ -711,6 +717,8 @@ _) h (umb // humble | |||
| _) h (umi // humide | |||
| _) h (umo // humour | |||
| _) hy (A j | |||
| haus (_ o2s //blockhaus | |||
| heim (_ ajm | |||
| _) h (y // hypermarch矇 | |||
| _) hyper (@P5 ipEr | |||
| _) hyper (_ ipEr | |||
| @@ -725,30 +733,18 @@ _) half _^_en | |||
| .group i | |||
| i i // cri | |||
| C) i (A i- | |||
| C) i (onK j | |||
| r) i (onK i- | |||
| C) i (erA i | |||
| l) i (A i | |||
| _) i (A i- | |||
| C) i (e_ i | |||
| C) i (es_ i | |||
| Cr) i (a i: | |||
| _Cr) i (A i: | |||
| Cr) i (矇 i: | |||
| Cr) i (er_ i: | |||
| rr) i (er_ i- | |||
| C) ien (t_ i | |||
| d矇v) ien (t_ i- | |||
| t) ien (K_ i-E~ // tient | |||
| v) ien (K_ i-E~ // vient | |||
| at) ien (t_ i-A~ // patient | |||
| cip) ien (C i-A~ // r矇cipient | |||
| d矇v) ien (t_ i | |||
| t) ien (K_ iE~ // tient | |||
| v) ien (K_ iE~ // vient | |||
| at) ien (t_ jA~ // patient | |||
| cip) ien (C jA~ // r矇cipient | |||
| cl) ien (C i:A~ // client | |||
| mol) ien (C i-A~ // 矇molient | |||
| v矇n) ien (C i-A~ // inconv矇nient | |||
| or) ien (t iA~ // orient, orienter | |||
| ot) ien (t_ i-A~ // quotient | |||
| mol) ien (C jA~ // 矇molient | |||
| v矇n) ien (C jA~ // inconv矇nient | |||
| or) ien (t jA~ // orient, orienter | |||
| ot) ien (t_ jA~ // quotient | |||
| i (e_ i | |||
| _) ill il // ill矇gal | |||
| @@ -779,8 +775,10 @@ C) i (es_ i | |||
| in (kX iN // link | |||
| in (n i // innombrable | |||
| in (C E~ // vingt | |||
| in (_ W~ // vin | |||
| in (_ E~ // vin | |||
| ing (_ iN | |||
| ing (s iN | |||
| ing (to iN | |||
| _) infra (sP5 E~fra | |||
| _) inter (@@P5 E~tEr | |||
| _) interr (A E~tEr | |||
| @@ -793,7 +791,7 @@ C) i (es_ i | |||
| bor) is (_ is | |||
| dor) is (_ is | |||
| tor) is (_ is | |||
| fl) irt Yrt | |||
| fl) irt Wrt | |||
| otl) i (neX aj | |||
| onl) i (ne_ aj | |||
| offl) i (ne_ aj | |||
| @@ -814,19 +812,6 @@ C) i (es_ i | |||
| ram_f) i (le _^_en | |||
| .group 簿 | |||
| 簿n (C E~ // co簿ncider | |||
| 簿n (_ E~ | |||
| 簿s (K is // ma簿s, archa簿sme | |||
| 簿 (q i // archa簿que | |||
| 簿 (c i // la簿c | |||
| a) 簿 (A j // a簿eul | |||
| a) 簿 (C i // na簿f | |||
| tha) 簿 (K j // tha簿 | |||
| _ha) 簿 (K i // ha簿r | |||
| 簿 i // ambigu簿t矇 | |||
| .group j | |||
| j Z // adjoint joujoux | |||
| _) j' (P2v Z | |||
| @@ -853,6 +838,7 @@ C) i (es_ i | |||
| au) lt // h矇rault | |||
| uCi) l (_ // outil, fusil | |||
| nti) l (_ // gentil | |||
| nti) lh j // gentilhomme | |||
| ui) ll j // juillet | |||
| _) lorsqu' (P7 lorsk | |||
| @@ -900,7 +886,7 @@ C) i (es_ i | |||
| x_) os (_ o | |||
| o (t_ o | |||
| oe (ll wa // moelleux | |||
| oe (ll w^a // moelleux | |||
| oe (i Y // oeil | |||
| _) oe (C Y // oesophage | |||
| _ph) oe (C e // phoetus | |||
| @@ -913,8 +899,8 @@ C) i (es_ i | |||
| _) oi (gnon o // oignons | |||
| oin (C wE~ | |||
| oin (_ wE~ // coin | |||
| oi wa // poil | |||
| o礙 (l wa // po礙le | |||
| oi w^a // poil | |||
| o礙 (l w^a // po礙le | |||
| om (C O~ // bombe | |||
| om (m o // nommer | |||
| om (ni om // omnibus | |||
| @@ -931,6 +917,9 @@ C) i (es_ i | |||
| _) on (z _|O~ // onze, onzi嚙練e | |||
| _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 | |||
| @@ -946,18 +935,15 @@ C) i (es_ i | |||
| ou u // hibou brouillard | |||
| ou (A w | |||
| r) ou (A u | |||
| ou (iA u | |||
| ou (il u | |||
| oue (mA u // d�ouement | |||
| _) ou (at _|u // ouate | |||
| o羅 u // o羅 | |||
| o羶 u // co羶ter | |||
| oy (A waj // noyer voyelles | |||
| _b) oy (co oi- // boycott | |||
| oy (A w^aj // noyer voyelles | |||
| _b) oy (co oj // boycott | |||
| _c) oy (o oi // coyote | |||
| _y) o (y o | |||
| oy wa | |||
| oy w^a | |||
| o (_ o // zorro all矇gro | |||
| o (z_ o // berlioz | |||
| o o | |||
| @@ -966,12 +952,15 @@ _c) oy (o oi // coyote | |||
| // 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 | |||
| @@ -1030,20 +1019,20 @@ C) oing (_ _^_en // going | |||
| .group q | |||
| q k // coq | |||
| _) qu' (AP3 k | |||
| _) qua (d kwA // quadrature | |||
| _) qua (tA kwA // quaternaire | |||
| _) qua (d kwa // quadrature | |||
| _) qua (tA kwa // quaternaire | |||
| _) quan (tA kwA~ // quantique | |||
| _) qua (drill ka // quadriller | |||
| _a) qua kwA // aquarium | |||
| _a) qua kwa // aquarium | |||
| _a) qu (if ku // aquif癡re | |||
| _A) qui (dist kw^i // 矇quidistant | |||
| _A) qui (lat kw^i // 矇quilat矇ral | |||
| _C) qua kwA // squale square | |||
| _A) qua kwA // 矇quateur | |||
| d矇) qua kwA // adequate | |||
| _) qua (rtz kwA // quartz | |||
| _C) qua kwa // squale square | |||
| _A) qua kwa // 矇quateur | |||
| d矇) qua kwa // adequate | |||
| _) qua (rtz kwa // quartz | |||
| qu k // quatre | |||
| _) que (_ k@2 // que | |||
| _) que (_ k@ // que | |||
| n) q (_ k // cinq cent | |||
| // group q: English section | |||
| @@ -1081,6 +1070,7 @@ cou) rr (o r // courroie | |||
| sch (iz sk // schizophr癡ne | |||
| sch (ol sk | |||
| sch (oo sk | |||
| schu Su | |||
| sch S // sch矇ma | |||
| d矇) sh (A z // d矇shabiller | |||
| @@ -1104,7 +1094,7 @@ cou) rr (o r // courroie | |||
| _) supra (@P5 sypra | |||
| batro) s (_ s | |||
| oc矇ro) s (_ s | |||
| scien (t si-A~ // conscient scientifique | |||
| scien (t siA~ // conscient scientifique | |||
| sql (_S3 EskyEl | |||
| _u) s (_ s | |||
| @@ -1186,8 +1176,10 @@ VCi) t (_ t2 | |||
| r) t (_ | |||
| aul) t (_ // Renault | |||
| grani) t (_ t | |||
| _) t矇l矇 (@P4 tele | |||
| _) tele tele | |||
| _) thermo (@P6 tErmo | |||
| tt t // attitude | |||
| @@ -1298,13 +1290,14 @@ VCi) t (_ t2 | |||
| _) ultra (P5 yltra | |||
| g) u (ay u | |||
| g) ueill Yj // orgueilleux | |||
| g) ueil (_ Yj // orgueil | |||
| 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 Y // run, autorun | |||
| um (_ om // album | |||
| r) u (nX W // run, autorun | |||
| pr) unt (_ W~ // emprunt | |||
| um (_ Om // album | |||
| f) um (_ W~ // parfum | |||
| um (b W~ // humble | |||
| um (p W~ | |||
| @@ -1371,6 +1364,7 @@ _) w (A _|w | |||
| _) wir _^_en // wire | |||
| winn _^_en // winner | |||
| wise _^_en | |||
| with _^_en | |||
| wor _^_en | |||
| @@ -1407,14 +1401,12 @@ _) w (A _|w | |||
| .group y | |||
| y i // cryog矇nique myope | |||
| _) y (A j // yak, yacht | |||
| _) y (A _|j // yak | |||
| _) y (eu j // yeux | |||
| _) yacht _^_en // yacht, yachtman | |||
| _) y (eu i- // yeux | |||
| _) yahoo (P5 i-a'u | |||
| ym (b E~ // symbolique | |||
| ym (p E~ // tympan | |||
| ym (_ E~ // thym | |||
| _) yahoo (P5 ja'u | |||
| ym (K E~ // tympan | |||
| y (nn i | |||
| y (nA i | |||
| X) ys (_ is | |||
| @@ -1427,7 +1419,7 @@ _) w (A _|w | |||
| z z | |||
| t) z s // tzigane | |||
| t) zer (_ zEr | |||
| C) zer (_ zYr | |||
| C) zer (_ zWr | |||
| .group | |||
| @@ -1437,10 +1429,11 @@ _) w (A _|w | |||
| 矇 e // 矇t矇 | |||
| 礙 E // f礙te | |||
| 簽 Ni // ni簽o | |||
| 簿 i // na簿f | |||
| 簿n (K E~ // co簿ncidence | |||
| 簿s (_ is // ma簿s | |||
| 繹 o // angstr繹m | |||
| � Y | |||
| �u Y: // s�ur | |||
| 羶 y: // f羶tes | |||
| 羹 y // b羹lcher | |||
| @@ -145,7 +145,8 @@ _#-ének e:nEk | |||
| _#-ának a:nAk | |||
| _#-vel e:vEl $alt2 | |||
| _#-val a:vAl $alt2 | |||
| _#-ánál a:na:l $alt2 | |||
| _#-énél e:ne:l $alt2 | |||
| (1-e) elseje $text $alt2 | |||
| (1-én) elsején $text $alt2 | |||
| (1-jén) elsején $text $alt2 | |||
| @@ -169,6 +170,8 @@ _#-val a:vAl $alt2 | |||
| (1-jéig) elsejéig $text $alt2 | |||
| (1-ének) elsejének $text $alt2 | |||
| (1-vel) elsejével $text $alt2 | |||
| (1-jénél) elsejénél $text $alt2 | |||
| (1-énél) elsejénél $text $alt2 | |||
| (2-i) másodikai $text $alt2 | |||
| (2-ig) másodikáig $text $alt2 | |||
| (3-i) hAR2_mAdikAi $alt2 | |||
| @@ -210,6 +213,9 @@ _#-val a:vAl $alt2 | |||
| (0-an) nul:a:n | |||
| (0-ában) nul:a:bAn | |||
| (0-ába) nul:a:bA | |||
| (0-áson) nul:a:Son | |||
| (0-tól) nul:a:to:l | |||
| (00-tól) nul:Anul:a:to:l | |||
| (1-gyet) EJ:Et | |||
| (1-gyes) EJ:ES | |||
| (2-őt) kEt:Y:t | |||
| @@ -224,6 +230,7 @@ _#-val a:vAl $alt2 | |||
| (3-adikat) hAR2mAdikAt //special exception | |||
| (3-adikon) hAR2mAdikon //special exception | |||
| (3-adikkal) hAR2mAdik:Al //special exception | |||
| (3-t) ha:R2mAt | |||
| //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 | |||
| @@ -246,9 +253,12 @@ _#-val a:vAl $alt2 | |||
| (7-től) hEtEdike:tY:l $alt2 | |||
| (7-tel) he:t:El | |||
| (7-el) he:t:El | |||
| (7-sekre) hEtESEkR2E | |||
| (7-sel) hEtES:El | |||
| (8-cal) n^olts:Al | |||
| (8-al) n^olts:Al | |||
| (9-el) kilEnts:El | |||
| (9-cel) kilEnts:El | |||
| _10e tiz | |||
| _20e hus | |||
| (10-szer) ti:s:ER2 | |||
| @@ -256,7 +266,6 @@ _20e hus | |||
| //special number exceptions | |||
| (10-el) ti:zzEl | |||
| (20-al) hu:s:Al | |||
| @@ -376,7 +385,7 @@ LST ElESte: $allcaps | |||
| BAR bAR2 $allcaps | |||
| //SS EsEs $allcaps | |||
| a.m An^n^i||m'int $dot | |||
| (a . m .) An^n^i||m'int | |||
| ún u:JnEvEzEt: $hasdot | |||
| dr doktoR2 $dot | |||
| mr mistER2 $hasdot //in hungarian we not use, but lot of books contains this word. | |||
| @@ -397,7 +406,7 @@ stb SAtYb:i $hasdot | |||
| u.n u:JnEvEzEt: $hasdot | |||
| ú.n u:JnEvEzEt: $hasdot | |||
| vö v'EZd||_'Yss2E | |||
| (u . i .) u:i: | |||
| @@ -824,7 +833,7 @@ látszik $unstressend | |||
| látszott $unstressend | |||
| látszanak $unstressend | |||
| látszotok $unstressend | |||
| körül $unstressend | |||
| körül $unstressend $alt3 | |||
| dőlt $unstressend | |||
| vér $unstressend | |||
| sót $unstressend | |||
| @@ -962,7 +971,12 @@ lép $unstressend | |||
| pénzt $unstressend | |||
| pénz $unstressend | |||
| nép $unstressend | |||
| lennék $unstressend | |||
| lennél $unstressend | |||
| lennénk $unstressend | |||
| lennétek $unstressend | |||
| hitt $unstressend | |||
| fő $unstressend | |||
| // word pairs | |||
| @@ -1150,6 +1164,7 @@ _″ duplA|ApostR2o:f | |||
| _ˇ lEfEle:n^i:l | |||
| _¡ AlSo:indEks | |||
| // Main Exceptions List | |||
| //===================== | |||
| @@ -1174,6 +1189,8 @@ egyezség eggyesség | |||
| (cd-n) cédén | |||
| (cd-d) cédéd | |||
| (CD-d) cédéd | |||
| CD-m) cédém | |||
| (cd-m) cédém | |||
| (db-os) darabos | |||
| (db-ot) darabot | |||
| (LST-k) elesték | |||
| @@ -1187,6 +1204,8 @@ egyezség eggyesség | |||
| //after word and don't disturb Orca working. | |||
| (PC-n) pécén | |||
| (USB-n) úesbén | |||
| (usb-n) úesbén | |||
| (usb-t) úesbét | |||
| (USA-ból) usából | |||
| (USA-nak) usának | |||
| (DVD-k) dévédék | |||
| @@ -1195,10 +1214,11 @@ egyezség eggyesség | |||
| (dvd-n) dévédén | |||
| (dvd-d) dévédéd | |||
| (DVD-d) dévédéd | |||
| (DVD-m) dévédét | |||
| (dvd-m) dévédém | |||
| (USA-éval) usáéval | |||
| (ubuntu-n) ubuntun | |||
| (hu-n) hun | |||
| (USA-ban) usában | |||
| (USA-ba) usába | |||
| @@ -17,11 +17,14 @@ | |||
| _) alattvaló AlAtvAlo: | |||
| ahhoz Ahoz | |||
| .group á | |||
| á a: | |||
| @) ában (_S4q a:bAn | |||
| @) ának (_S4q a:nAk | |||
| @) ától (_S4q a:to:l | |||
| @) áig (_S3q a:ig | |||
| @) ára (_S3q a:R2A | |||
| .group b | |||
| b b | |||
| @@ -36,8 +39,12 @@ | |||
| tö) bb (ség b | |||
| tö) bb (nyire b | |||
| tö) bb (nek b | |||
| tová) bb (ra b | |||
| tová) bbr (a bR2 | |||
| tö) bb (soro b | |||
| tö) bb (ny b | |||
| tö) bb (féle b | |||
| jo) bbr (a bR2 | |||
| tö) bbr (e bR2 | |||
| .group c | |||
| c ts | |||
| @@ -72,7 +79,9 @@ | |||
| har) c (cselek ts | |||
| külön) c (sé ts | |||
| mala) c (sül ts | |||
| gyümöl) cs (zs tS | |||
| fil) c (csiz ts | |||
| szo) c (segély ts | |||
| .group ch | |||
| anar) ch (i h | |||
| @@ -97,7 +106,8 @@ hierar) ch (i h | |||
| ar) ch (ív h | |||
| ar) ch (ivál h | |||
| ma) ch (iná h | |||
| oligar) ch h | |||
| legpe) ch (es h: | |||
| .group d | |||
| d d | |||
| @@ -174,7 +184,21 @@ menetren) dsz (erű d|s | |||
| föl) d (szerzé d | |||
| twee) dz (ak d|z | |||
| twee) dsz (ok d|s | |||
| dtt t: //this letters need spokening longer t phoneme | |||
| _) kar) d (su d | |||
| zöl) d (sapk d | |||
| hí) d (szer d | |||
| szaba) d (szoft d | |||
| rövi) d (zár d | |||
| ren) d (zavar d | |||
| ügyvé) d (jel d | |||
| kez) dt t | |||
| tiné) dzs (e dZ | |||
| mene) dzs (me dZ | |||
| ná) d (szék d | |||
| rövi) d (soroz d | |||
| pa) d (szerű d | |||
| ná) d (suhog d | |||
| .group dz | |||
| fogó) dz (kod ts | |||
| @@ -209,7 +233,8 @@ követelő) dz z | |||
| rángató) dz z | |||
| titkoló) dz z | |||
| ringató) dz z | |||
| mére) dz (k ts | |||
| pilóta) dzs (ek dZ | |||
| .group e | |||
| e E | |||
| @@ -226,6 +251,8 @@ ringató) dz z | |||
| @) ében (_S4q e:bEn | |||
| @) ének (_S4q e:nEk | |||
| @) étől (_S4q e:tY:l | |||
| @) ére (_S3q e:R2E | |||
| @) éig (_S3q e:ig | |||
| éhség e:Se:g | |||
| éhségg e:Se:g: | |||
| @@ -235,6 +262,9 @@ ringató) dz z | |||
| .group f | |||
| f f | |||
| //führer fy:R2ER2 | |||
| e) ff (ajt f | |||
| e) ff (él f | |||
| a) ff (él f | |||
| .group g | |||
| @@ -343,6 +373,12 @@ tizene) gy (edik J: | |||
| e) gy (enként J: | |||
| félmege) gy (ez J: | |||
| _e) gy (el J: | |||
| tizene) gy (et J: | |||
| tizene) gy (en J: | |||
| e) gy (esület J: | |||
| a) gy (sej J | |||
| e) gy (úttal J: | |||
| épülete) gy (ütt J: | |||
| .group h | |||
| h h | |||
| @@ -352,7 +388,7 @@ félmege) gy (ez J: | |||
| .group i | |||
| i i | |||
| @) i (_S1 i | |||
| @) ig (_S2 ig | |||
| _) itthon ithon | |||
| .group í | |||
| @@ -367,16 +403,27 @@ félmege) gy (ez J: | |||
| v) í (zére i | |||
| sz) í (ve i | |||
| t) í (zes i | |||
| sz) í (vel i: | |||
| .group j | |||
| j j | |||
| @) jában (_S5q ja:bAn | |||
| @) jának (_S5q ja:nAk | |||
| @) jától (_S5q ja:to:l | |||
| @) jáig (_S4q ja:ig | |||
| @) jára (_S4q ja:R2A | |||
| @) jával (_S5q ja:vAl | |||
| @) jének (_S5 je:nEk | |||
| @) jére (_S4 je:R2E | |||
| @) jétől (_S5 je:tY:l | |||
| @) jéig (_S4 je:ig | |||
| @) jével (_S5 je:vEl | |||
| _) javíts jAvi:tS: | |||
| _) javítsd jAvi:tSd | |||
| .group k | |||
| k k | |||
| kk k: | |||
| @@ -393,6 +440,9 @@ félmege) gy (ez J: | |||
| készségg ke:SSe:g: | |||
| _a) kk (reditál k | |||
| _) közt kYst | |||
| bara) kk (b k | |||
| bara) kk (f k | |||
| bara) kk (j k | |||
| .group l | |||
| l l | |||
| @@ -507,6 +557,8 @@ tulajdo) n (jog n | |||
| irá) ny (jel n^ | |||
| ö) n (jelöl n | |||
| teljesítmé) ny (javu n^ | |||
| törvé) ny (java n^ | |||
| ajá) nl l: | |||
| .group o | |||
| o o | |||
| @@ -526,7 +578,7 @@ teljesítmé) ny (javu n^ | |||
| .group p | |||
| p p | |||
| pp p: | |||
| pp (C pp | |||
| pp (C p: | |||
| p (v p_ | |||
| _) potsdam potsda:m | |||
| @@ -539,9 +591,12 @@ teljesítmé) ny (javu n^ | |||
| qu kv | |||
| .group r | |||
| @) ra (_S2 R2A | |||
| @) re (_S2 RE | |||
| r R2 | |||
| rr RR | |||
| rm R2_m | |||
| r) r R2 | |||
| r (r R | |||
| r (cc R | |||
| _) richa (rd R2iCa: | |||
| @@ -550,7 +605,6 @@ teljesítmé) ny (javu n^ | |||
| i) rr (itá R2 | |||
| ko) rr (epetá R2 | |||
| .group s | |||
| s S | |||
| föld) s (ánc S | |||
| @@ -578,7 +632,8 @@ juventu) s s //a radio station name | |||
| hallá) s (zavar S | |||
| gyalogo) s (zászló S | |||
| ki) s (zsidó S | |||
| szennye) s (zsá S | |||
| alvá) s (zavar S | |||
| .group ss | |||
| ssz ss2 | |||
| @@ -747,6 +802,10 @@ gyalogo) ssz Ss | |||
| jelzé) ssz (erű Ss | |||
| kitöré) ssz (erű Ss | |||
| hatá) ssz (üne Ss | |||
| fri) ss (zöl S: | |||
| nyúva) ssz s: | |||
| hirdeté) ssz (erve Ss | |||
| páncélo) ssz Ss | |||
| .group sz | |||
| sz s | |||
| @@ -776,8 +835,7 @@ kenyere) szs (ák SZ | |||
| tava) sz (ára s | |||
| rongyo) szs (ák SZ | |||
| para) sztsz (ek st|s | |||
| rava) sz (ára s | |||
| rava) sz (ár s | |||
| .group t | |||
| @@ -788,9 +846,12 @@ rongyo) szs (ák SZ | |||
| tt t: | |||
| ttk t:k | |||
| tth t:h | |||
| ttg t:g | |||
| ttgy t:J | |||
| ttp t:p | |||
| @) tól (_S3q to:l | |||
| @) től (_S3q tY:l | |||
| tt (C tt | |||
| tt (C t: | |||
| ttn t:n | |||
| ttm t:m | |||
| ttl t:l | |||
| @@ -956,7 +1017,16 @@ hangula) t (jel t | |||
| vizsgála) t (soroza t | |||
| á) tjátsz tja:ts: | |||
| á) tjátssz tja:ts: | |||
| kobal) t (sugár t | |||
| többle) t (szol t | |||
| á) t (söprő t | |||
| ú) t (javí t | |||
| billentyűze) t (jel t | |||
| á) t (címké t | |||
| sej) t (szö t | |||
| szöve) t (sapk t | |||
| mene) t (szél t | |||
| tesz) t (cikk t | |||
| .group ts | |||
| ts (_S2 tS //general rule with word end of ts letters | |||
| @@ -1037,6 +1107,10 @@ indula) tsz (ó t|s | |||
| segi) ts (é tS: | |||
| kür) tsz (ó t|s | |||
| hi) tsz (ó t|s | |||
| á) tsz (ok t|s | |||
| halla) tsz (a ts: | |||
| fejle) ts (ég tS: | |||
| sie) tsz ts: | |||
| .group u | |||
| u u | |||
| @@ -1103,7 +1177,7 @@ lefeje) z (te s | |||
| lefeje) z (ték s | |||
| pén) z (tár s | |||
| ré) z (serpenyő z | |||
| tartó) z s | |||
| tartó) z (t s | |||
| gá) z (cső z | |||
| @@ -1199,6 +1273,16 @@ hiányo) z (t s | |||
| foglalko) z (t s | |||
| tanulmányo) z (t s | |||
| magyará) z (t s | |||
| kötö) z (t s | |||
| vitatko) z (t s | |||
| tartó) z (k s | |||
| ajándéko) z (t s | |||
| tarto) z (k s | |||
| tarto) z (t s | |||
| rejtő) z (kö s | |||
| rejtő) z (t s | |||
| hango) z (t s | |||
| .group | |||
| @@ -19,9 +19,9 @@ _2f tv'W: | |||
| _3f Tr#j'u: | |||
| _4f fj'W:Qyrr# | |||
| _5 f'Im | |||
| _6 s'e:xs | |||
| _6 s'E:xs | |||
| _7 sj'W: | |||
| _8 'aUhd& | |||
| _8 'aUhda | |||
| _9 n'i:;y | |||
| _10 t'i:;y | |||
| _11 'EdlEv,y | |||
| @@ -39,10 +39,10 @@ _4X fj'W:*Ryt,i;y | |||
| _5X f'Imti;,y | |||
| _6X s'Exsdi;,y | |||
| _7X sj'W:ti;,y | |||
| _8X 'aUhd&t,i;y | |||
| _8X 'aUhdat,i;y | |||
| _9X n'i:;yt,i;y | |||
| _0C h'ynd@-*yD | |||
| _1C 'eIhd||h'ynd@-R&D | |||
| _1C 'eIhd||h'ynd@-RaD | |||
| _2C tv'W:||h'ynd@-RyD | |||
| _3C Tr#j'u:||h'ynd@-RyD | |||
| _4C fj'W:Qyrr#||h'ynd@-RyD | |||
| @@ -51,38 +51,38 @@ _0M2 m'IdljoUn | |||
| _1M2 eI:n||m'IdljoUn | |||
| _2M2 tv'aI:rr#||m'IdljoUn | |||
| _3M2 Tr#j'aU:rr#||m'IdljoUn | |||
| _4M2 fj'oU:*&rr#||m'IdljoUn | |||
| _dpt _k,Omm&_ | |||
| _0and o:Q | |||
| _4M2 fj'oU:*arr#||m'IdljoUn | |||
| _dpt _k,Omma_ | |||
| _0and O:Q | |||
| _cap sd'oUrr#d | |||
| _?? t'aUghn# | |||
| // Characters | |||
| _! 'yhbr#oUpyn&Rm,Err#kI | |||
| _" JaI:s&lWhb | |||
| # mIll& | |||
| _$ d'Odl&rr# | |||
| _& o:QmErr#kI | |||
| _! 'yhbr#oUpynaRm,Err#kI | |||
| _" JaI:salWhb | |||
| # mIlla | |||
| _$ d'Odlarr# | |||
| _& O:QmErr#kI | |||
| / skaUsdr#Ig | |||
| _( svI:jI | |||
| _) sv'I:jIl'o:k&sd | |||
| _) sv'I:jIl'O:kasd | |||
| _{ slYy:vysvIjI | |||
| _} sl'Yy:vysv,IjIl'o:k&sd | |||
| _} sl'Yy:vysv,IjIl'O:kasd | |||
| _[ hOrdn#glOvI | |||
| _] h'Ordn#glOvIl'o:k&sd | |||
| = s'a:m&sEmm,Err#kI | |||
| _] h'Ordn#glOvIl'O:kasd | |||
| = s'a:masEmm,Err#kI | |||
| _\ 'W:vyxdsk,aUsdr#Ig | |||
| _- b&ndsdrr#Ig | |||
| _- bandsdrr#Ig | |||
| __ yndIRsdrr#Ig | |||
| _? sb'yrdn#iNg,&mErr#kI | |||
| _? sb'yrdn#iNg,amErr#kI | |||
| + bl'u:s | |||
| _< OdglOvI | |||
| _> 'OdglOvIl,o:k&sd | |||
| _. p'uN#hgdy#rr# | |||
| _, k'Omm& | |||
| _; s'e:mik,Omm& | |||
| _: dv'i:puN#hgdy#rr# | |||
| _> 'OdglOvIl,O:kasd | |||
| _. p'uN#hgdyrr# | |||
| _, k'Omma | |||
| _; s'E:mik,Omma | |||
| _: dv'i:puN#hgdyrr# | |||
| // abbreviations | |||
| @@ -379,39 +379,39 @@ fram $u+ // forward | |||
| //**************** | |||
| _á aU: | |||
| á aU: $atend | |||
| b bje: | |||
| c sje: | |||
| d dje: | |||
| ð e:D | |||
| b bjE: | |||
| c sjE: | |||
| d djE: | |||
| ð E:D | |||
| f Ef | |||
| g gje: | |||
| g gjE: | |||
| h haU: | |||
| _í i: | |||
| í i: $atend | |||
| j j'o:D | |||
| j j'O:D | |||
| k k'aU: | |||
| l Etl# | |||
| m Em | |||
| n En | |||
| p pje: | |||
| p pjE: | |||
| q ku: | |||
| r Err# | |||
| s Es | |||
| t tje: | |||
| t tjE: | |||
| v vaf | |||
| w tv'W:v&ldv,af | |||
| x e:xs | |||
| w tv'W:valdv,af | |||
| x E:xs | |||
| _y 'yfsilOn||,I: | |||
| _ý 'yfsilOn||,i: | |||
| y 'yfsilOn||,I: $atend | |||
| ý 'yfsilOn||,i: $atend | |||
| z se:t& | |||
| z sE:ta | |||
| þ T'Ordn# | |||
| // MAIN WORD DICTIONARY | |||
| //********************* | |||
| bolla bOll& | |||
| halló h&lloU | |||
| mylla mIll& | |||
| bolla bOlla | |||
| halló halloU | |||
| mylla mIlla | |||
| @@ -5,6 +5,10 @@ | |||
| // letter group F p,t,k,s | |||
| // letter group H j,r,v, | |||
| .L01 e i í y ý æ j // front vowels | |||
| .L02 c f h k p t x þ s // voiceless consonants | |||
| .L03 p t k | |||
| .replace | |||
| x xz // so that it behaves as 2 letters | |||
| @@ -12,7 +16,7 @@ | |||
| .group a | |||
| a a: | |||
| a (FH a: | |||
| a (CC & | |||
| a (CC a | |||
| a (ng aU | |||
| a (nk aU | |||
| @@ -21,7 +25,7 @@ | |||
| au (CC Yy | |||
| _) al (@P2N ,a:l | |||
| _) a (ll+ & | |||
| _) a (ll+ a | |||
| .group á | |||
| á aU: | |||
| @@ -47,12 +51,12 @@ | |||
| .group ð | |||
| ð D | |||
| ð (B T | |||
| ð (__ T // before pause | |||
| ð (__ T | |||
| .group e | |||
| e e: | |||
| e (FH e: | |||
| e E: | |||
| e (FH E: | |||
| e (CC E | |||
| e (ng eI | |||
| e (nk eI | |||
| @@ -93,13 +97,13 @@ | |||
| _) g (i J | |||
| _) g (í J | |||
| _) g (æ J | |||
| _) g (j J | |||
| _) gj J | |||
| A) g (a Q | |||
| A) g (u Q | |||
| A) g (ð Q | |||
| A) g (r Q | |||
| g (_ Q | |||
| gn (_ g | |||
| g (_ x | |||
| gn (_ gn# | |||
| gt xd | |||
| g (s x | |||
| gj J | |||
| @@ -118,6 +122,7 @@ | |||
| h h | |||
| hj C | |||
| hl l# | |||
| hr hr# | |||
| hn hn# | |||
| hv kv | |||
| @@ -141,21 +146,20 @@ | |||
| .group k | |||
| k k | |||
| _) k (e c | |||
| _) k (i c | |||
| _) k (í c | |||
| _) k (y c | |||
| _) k (ý c | |||
| _) k (æ c | |||
| _) k k | |||
| k g | |||
| _) k (L01 c | |||
| k (L01 J | |||
| kj c | |||
| k (K g | |||
| k (k h // [hk] | |||
| k (s x | |||
| k (t t | |||
| .group l | |||
| l l | |||
| l (_ l# | |||
| l (_ l# // ?? | |||
| l (BX l# | |||
| ll dl | |||
| ll (BX tl# | |||
| @@ -166,13 +170,14 @@ | |||
| m m | |||
| mm (K m | |||
| B) m hm# | |||
| m (B m# | |||
| m (L03 m# | |||
| .group n | |||
| n n | |||
| nn n: | |||
| B) n hn# | |||
| n (B n# | |||
| n (L03 n# | |||
| n (g N | |||
| ng (_ Ng | |||
| ngt (K N#d | |||
| @@ -195,9 +200,11 @@ | |||
| .group o | |||
| o o: | |||
| o (FH o: | |||
| o O: | |||
| o (FH O: | |||
| o (CC O | |||
| o (gi OI | |||
| o (gj OI | |||
| o (ng oU | |||
| o (nk oU | |||
| @@ -206,15 +213,11 @@ | |||
| ó oU: | |||
| ó (FH oU: | |||
| ó (CC oU | |||
| óf (A oU2 | |||
| .group p | |||
| p b | |||
| _) p p | |||
| p p | |||
| B) p b | |||
| s) p b | |||
| p (K b | |||
| p (s f | |||
| p (k f | |||
| p (t f | |||
| @@ -230,37 +233,41 @@ | |||
| C) r @-R | |||
| l) r **R | |||
| A) r (A *R | |||
| B) r r# | |||
| r (B rr# | |||
| r (L02 rr# | |||
| r (_ _|R | |||
| r _|R2 | |||
| rr R*R | |||
| rl dl | |||
| rl (K rtl# | |||
| rn rdn# | |||
| rl (B Rtl# | |||
| rn Rdn# | |||
| .group s | |||
| s s | |||
| ss ss2 | |||
| _) sh S // English | |||
| sh (_ S // English | |||
| .group t | |||
| _) t t | |||
| t t | |||
| B) t d | |||
| s) t d | |||
| t (K d | |||
| t d | |||
| tt hd | |||
| t (l ht //?? ætla | |||
| t (l hd //?? ætla | |||
| t (n hd | |||
| th (_ T // English | |||
| _) th T // English | |||
| .group u | |||
| u y: | |||
| u (FH y: | |||
| u (CC y | |||
| u (gi yI | |||
| u (gj yI | |||
| K) u (ng u | |||
| K) u (nk u | |||
| @) u (num_ O | |||
| .group ú | |||
| @@ -124,9 +124,9 @@ m'n m@n | |||
| jouw $u | |||
| uw $u | |||
| zijn $u | |||
| z'n $u | |||
| z'n z@n | |||
| haar $u | |||
| d'r $u | |||
| d'r d@r | |||
| ons $u | |||
| onze $u | |||
| jullie $u | |||
| @@ -10,6 +10,8 @@ | |||
| au VU | |||
| ay a:j | |||
| _) aan (@P3 'a:n | |||
| .group b | |||
| _) b (_ be: | |||
| @@ -137,7 +139,7 @@ | |||
| _) n (_ En | |||
| n n | |||
| nn n | |||
| ng (_ N | |||
| ng N | |||
| nj n^ | |||
| @@ -685,7 +685,7 @@ | |||
| A) r (_A * | |||
| rr x | |||
| XC) r (A R | |||
| C) r (A r | |||
| C) r (A * | |||
| //?1 C) r (A r | |||
| _) r x | |||
| l) r x | |||
| @@ -196,7 +196,6 @@ tamil தமிழ் $text | |||
| பாகவதம் $alt | |||
| பகவத் $alt | |||
| பங்கம் $alt | |||
| பீதி $alt | |||
| பேகம் $alt | |||
| பார்லி $alt | |||
| பிக்கினி $alt | |||
| @@ -230,6 +229,9 @@ tamil தமிழ் $text | |||
| பாக்கித் $alt | |||
| பாக்கிச் $alt | |||
| பர்மிய $alt | |||
| பலே $alt | |||
| பூம் $alt | |||
| பரத $alt | |||
| (பி . ஏ) bije: | |||
| @@ -266,11 +268,16 @@ tamil தமிழ் $text | |||
| துருவம் $alt | |||
| தீரமுள்ள $alt | |||
| தீரமற்ற $alt | |||
| தலாய் $alt | |||
| தேசிங்கு $alt | |||
| தேச $alt | |||
| தேசப் $alt | |||
| தானம் $alt | |||
| // initial ட | |||
| டார்ச் t.a:rtS | |||
| டிவி t.ivi | |||
| டி t.i | |||
| // initial ச as [tS] | |||
| சீ $alt | |||
| @@ -279,6 +286,7 @@ tamil தமிழ் $text | |||
| சீச்சீ $alt | |||
| சிட்டாய் $alt | |||
| சேச்சே $alt | |||
| சிரம் sirVm | |||
| கக $alt // initial க as [g] | |||
| @@ -296,7 +304,6 @@ tamil தமிழ் $text | |||
| கோபி $alt | |||
| கச்சாமி $alt | |||
| குரு $alt | |||
| கோர $alt | |||
| கும் $alt | |||
| கும்மென்று $alt | |||
| கும்முனு $alt | |||
| @@ -309,6 +316,8 @@ tamil தமிழ் $text | |||
| கம்னு $alt | |||
| கம்மென்று $alt | |||
| குதி $alt | |||
| கம் $alt | |||
| காந்தம் $alt | |||
| // p as [f] | |||
| @@ -336,3 +345,5 @@ tamil தமிழ் $text | |||
| டிபன் t.ifVn | |||
| ஆகா a:Ha: | |||
| ஓகோ o:Ho: | |||
| கப் kVp | |||
| @@ -42,8 +42,8 @@ | |||
| _) க (B k | |||
| _) க (T gV // if word has $alt attribute in ta_list | |||
| _) க (BT+ g // $alt | |||
| க்க kkV | |||
| க்க (B kk | |||
| க் (க k | |||
| க்) க kV# | |||
| ற்) க _kV | |||
| ற்) க (B _k | |||
| L01) க kV | |||
| @@ -58,6 +58,7 @@ | |||
| //sort | |||
| _) க (ங்கா gV | |||
| _) க (ங்கை gV | |||
| _) க (டகட gV | |||
| _) க (டப்பாரை gV | |||
| _) க (டிகார gV | |||
| _) க (டோத்கஜ gV | |||
| @@ -65,7 +66,9 @@ | |||
| _) க (ணீர gV | |||
| _) க (ணே gV | |||
| _) க (ண்டங் gV | |||
| _) க (தாயுத gV | |||
| _) க (திகலங் gV | |||
| _) க (திக் gV | |||
| _) க (திதா gV | |||
| _) க (திய gV | |||
| _) க (தியில் gV | |||
| @@ -84,11 +87,14 @@ | |||
| _) க (லீர gV | |||
| _) க (வண gV | |||
| _) க (வன gV | |||
| _) க (வர்னர gV | |||
| _) க (வாஸ்கர gV | |||
| _) க (ாண்டாமிருக g | |||
| _) க (ாண்டீப g | |||
| _) காண்டேக (ர ga:n.d.e:kV | |||
| _) க (ாந்த g | |||
| _) க (ாந்தங் g | |||
| _) க (ாந்தத் g | |||
| _) க (ாந்தி g | |||
| _) க (ானங் g | |||
| _) க (ானத்த g | |||
| _) க (ானம g | |||
| @@ -98,6 +104,7 @@ | |||
| _) க (ிரிஜா g | |||
| _) க (ிரிதர g | |||
| _) க (ீதல k | |||
| _) க (ீத்த k | |||
| _) க (ுகன g | |||
| _) க (ுகை g | |||
| _) க (ுஜராத g | |||
| @@ -115,6 +122,7 @@ | |||
| _) குண்டாந்த (டி gun.d.a:ntV | |||
| _) க (ுண்டாய g | |||
| _) க (ுண்டு g | |||
| _) க (ுதிக் g | |||
| _) க (ுதிச் g | |||
| _) க (ுதித் g | |||
| _) க (ுதிப் g | |||
| @@ -122,6 +130,7 @@ | |||
| _) க (ுபுகுபு g | |||
| _) க (ுபுக் g | |||
| _) க (ுப்பென்ற g | |||
| _) க (ுமாஸ்தா g | |||
| _) க (ுமுகுமு g | |||
| _) க (ும்பல g | |||
| _) க (ும்மிடிப்பூண் g | |||
| @@ -129,6 +138,7 @@ | |||
| _) க (ுருக்கள g | |||
| _) க (ுருதேவ g | |||
| _) க (ுருநா g | |||
| _) க (ுருமார g | |||
| _) க (ுருரா g | |||
| _) க (ுருவா g | |||
| _) க (ுருவாய g | |||
| @@ -138,7 +148,9 @@ | |||
| _) க (ுருவுடை g | |||
| _) க (ுருவோட g | |||
| _) க (ூடலூர g | |||
| _) க (ூர்க்கா g | |||
| _) க (ெட்டி g | |||
| _) க (ெட்டிரு k | |||
| _) க (ேலி g | |||
| _) க (ோகுல g | |||
| _) க (ோதாவரி g | |||
| @@ -147,11 +159,15 @@ | |||
| _) க (ோந்து g | |||
| _) க (ோபப் k | |||
| கோப (ால go:p | |||
| _) க (ோபிகை g | |||
| _) க (ோபிசெட் g | |||
| _) கோப (ித்து ko:b | |||
| _) க (ோபிநா g | |||
| _) க (ோபிய g | |||
| _) க (ோபுர g | |||
| _) க (ோர_ g | |||
| _) க (ோர_முடிய k | |||
| _) க (ோர_வேண்ட k | |||
| _) க (ோரக g | |||
| _) க (ோரத g | |||
| _) க (ோரப g | |||
| @@ -169,6 +185,7 @@ | |||
| //sort | |||
| _கல்) க (ண்ட kV | |||
| _நற்) க (தி gV | |||
| _கல்) க (த்தா kV | |||
| கொல்) க (த்தா kV | |||
| மோ) க (ன HV | |||
| @@ -180,7 +197,13 @@ | |||
| சுதா) க (ரின kV | |||
| சுதா) க (ர்_ kV | |||
| கல) க (ல kV | |||
| க (வி kV | |||
| வீண்) க (வலை kV | |||
| மகா) க (வி kV | |||
| மஹா) க (வி kV | |||
| விகட) க (வி kV | |||
| க (விஞ kV | |||
| க (விராய kV | |||
| வீண்) க (ஷ்ட kV | |||
| ம) க (ா H | |||
| தொல்) க (ாப்பி k | |||
| கோயில்) க (ாளை k | |||
| @@ -191,24 +214,37 @@ | |||
| கி (ரண g | |||
| _) கி (ரஹ g | |||
| _) கி (ராக்கி g | |||
| _) கி (ராதக k | |||
| _) கி (ராம g | |||
| _) கி (ரீட k | |||
| ங்) க (ிரு g | |||
| கிரு (ஷ் kri | |||
| _) கி (ரைண்டர g | |||
| கி (லேச k | |||
| _வட) க (ிழ k | |||
| தென்) க (ிழ k | |||
| நற்) க (ுண g | |||
| _சற்) க (ுண g | |||
| க (ுமார k | |||
| _) கு (ரோத k | |||
| க (ுல k | |||
| _அங்) க (ுல g | |||
| _) குல்க (ந்த gulkV | |||
| குண்டல) க (ேசி k | |||
| ம) க (ேசுவர H // need to restrict to _ம) and _வீரம) ?? | |||
| ம) க (ேந்திர H | |||
| ம) க (ேஷ்வ H | |||
| ம) க (ேஸ்வர H | |||
| வீண்) க (ோப k | |||
| துர்) க்க ggV# | |||
| மார்) க்க ggV# | |||
| மூர்) க்க ggV# | |||
| _வர்) க்க ggV# | |||
| _சொர்) க்க ggV# | |||
| நிர்) க்க (தி ggV | |||
| அ) க்க (ினி gg | |||
| வி) க்ட (ோரியா kt. // victoria | |||
| வி) க (்ரம k | |||
| //endsort | |||
| @@ -263,12 +299,12 @@ | |||
| _) சி (நே s | |||
| _) சி (னே s | |||
| _) ச (ின் tS | |||
| _) சிரத்த (ை srVdd | |||
| சி (ரம s | |||
| _) சிரு (ஷ்டி sri | |||
| _) ச (ீன tS | |||
| _) ச (ீனிவா s | |||
| சீ (னிவாச sri: | |||
| _) ச (ீன்_ s | |||
| _ஈ) சு s | |||
| கே) சு (வ s | |||
| மே) சு (வ s | |||
| @@ -324,6 +360,7 @@ | |||
| _) ட (ிவிய t. | |||
| _) ட (வல t.V | |||
| _) ட (வர t.V | |||
| _) ட (ேப t. | |||
| .group ண | |||
| ண n.V | |||
| @@ -357,12 +394,14 @@ | |||
| _) த (சரதர dV | |||
| _) த (சரா dV | |||
| _) த (சை dV | |||
| _) த (டதட dV | |||
| _) த (டபுடல dV | |||
| _) த (டவை dV | |||
| _) த (டால dV | |||
| _) த (டிJ_பயல dV | |||
| _) த (டிJ_புத்தக dV | |||
| _) த (டிJ_மாட dV | |||
| _) த (டிக்க dV | |||
| _) த (டித்த dV | |||
| _) த (டியன dV | |||
| _) த (டியர dV | |||
| @@ -374,7 +413,11 @@ | |||
| _) த (ண்டபாணி dV | |||
| _) த (ண்டம dV | |||
| _) த (ண்டாயுதபாணி dV | |||
| _) த (ண்டிக்க dV | |||
| _) த (ண்டித் dV | |||
| _) த (ண்டிப்ப dV | |||
| _) த (ண்டிப்பா dV | |||
| _) த (ண்டியுங்கள dV | |||
| _) த (னகோடி dV | |||
| _) த (னசேகரன dV | |||
| _) த (னன்ஜெயன dV | |||
| @@ -404,10 +447,14 @@ | |||
| _) த (வம dV | |||
| _) த (ாக்கா d | |||
| _) த (ாக்காம t | |||
| _) த (ாக்காவிட்டா t | |||
| _) த (ாச d | |||
| _) த (ாடி d | |||
| _) த (ாட்சண்ய d | |||
| _) த (ாட்சாய d | |||
| _) த (ாதா d | |||
| _) த (ானங் d | |||
| _) த (ானத் d | |||
| _) த (ானிய d | |||
| _) த (ானுவ d | |||
| _) த (ாம்_தூம d | |||
| @@ -423,8 +470,10 @@ | |||
| _) த (ிக்கு d | |||
| _) த (ிக்கு_முக்க t | |||
| _) த (ிக்கு_வாய t | |||
| _) த (ிக்குமுக்கா t | |||
| _) த (ிக்கே d | |||
| _) த (ிக்கை d | |||
| _) த (ிக்விஜய d | |||
| _) த (ிசை d | |||
| _) த (ிடப d | |||
| _) த (ிடம d | |||
| @@ -449,18 +498,18 @@ | |||
| _) த (ிவாகர d | |||
| _) த (ிவான d | |||
| _) த (ிவ்ய d | |||
| _) த (ீட்சை d | |||
| _) த (ீப d | |||
| _) த (ீப்ப t | |||
| _) த (ீரச் d | |||
| _) த (ீரத்துட d | |||
| _) த (ீரன d | |||
| _) த (ீரமில்ல d | |||
| _) த (ீரரை d | |||
| _) த (ீரர் d | |||
| _) த (ீர்க d | |||
| _) த (ீர்க்கலா t | |||
| _) த (ீர்க்கா t | |||
| _) த (ீர்க்க t | |||
| _) த (ுக்க d | |||
| _) த (ுக்கடா t | |||
| _) த (ுக்கிரி t | |||
| _) த (ுச்சம d | |||
| _) த (ுச்சாதனன d | |||
| _) த (ுட்ட d | |||
| @@ -471,17 +520,22 @@ | |||
| _) த (ுரோண d | |||
| _) த (ுர் d | |||
| _) து (வந்த_ d | |||
| _) து (வார d | |||
| _) த (ுஷ் d | |||
| _) த (ூசி d | |||
| _) த (ூப d | |||
| _) த (ூம d | |||
| _) த (ூர d | |||
| _) த (ூஷணை d | |||
| _) த (ெய்வ d | |||
| _) த (ேக d | |||
| _) த (ேக்க t | |||
| _) த (ேசத்தார d | |||
| _) த (ேவகான d | |||
| _) த (ேவகி d | |||
| _) த (ேவதை d | |||
| _) த (ேவன d | |||
| _) த (ேவருலக d | |||
| _) த (ேவர்க d | |||
| _) த (ேவலோக d | |||
| _) த (ேவாதி d | |||
| @@ -492,6 +546,7 @@ | |||
| _) த (ேவி d | |||
| _) த (ேவேந் d | |||
| _) த (ைரிய d | |||
| _) த (ொனி d | |||
| _) த (ொபுக் d | |||
| _) த (ொம் d | |||
| _) த (ோசை d | |||
| @@ -499,9 +554,11 @@ | |||
| //endsort | |||
| //sort | |||
| _வசந்) த tV# | |||
| த (ன tV | |||
| _கீ) த (ா t | |||
| _சீ) த (ா t | |||
| _ல) த (ா t | |||
| அனி) த (ா t | |||
| சுஜா) த (ா t | |||
| @@ -528,9 +585,11 @@ _பார்வ) த (ி t | |||
| _) து (ரோண t | |||
| _) து (வேச d | |||
| _) து (வேஷ d | |||
| _) துவைத dvaItV# | |||
| வீண்) த (ேவை t | |||
| வீண்) த (ொல்லை t | |||
| யு) த்த ddV# | |||
| பு) த்த (ன ddV | |||
| சி) த்த (ர ddV | |||
| பு) த்த (ர ddV | |||
| பு) த்த (ி dd | |||
| சா) த்த (ிய dd | |||
| @@ -540,8 +599,10 @@ _பார்வ) த (ி t | |||
| பு) த்த (ியி dd | |||
| உ) த்த (ியோக dd | |||
| சமு) த்த (ிர dd | |||
| அ) த்த (ெய்வ dd | |||
| ச) த (்ய t | |||
| நி) த (்ய t | |||
| ச) த்ரபதி trVpVti | |||
| சி) த (்ரா t | |||
| பவி) த (்ரா t | |||
| ச) த (்ரு t | |||
| @@ -569,13 +630,11 @@ _பார்வ) த (ி t | |||
| _) ப (T+ bV // if word has $alt attribute in ta_list | |||
| _) ப (BT+ b // if word has $alt | |||
| ப் (ப p | |||
| ப pV | |||
| ப (B p | |||
| ப்) ப pV | |||
| ப்) ப (B p | |||
| L02) ப pV | |||
| L02) ப (B p | |||
| குஷ்) ப (ு b | |||
| று) ப _pV | |||
| று) ப(B _p | |||
| ம) ப pV | |||
| ம) ப (ா p | |||
| @@ -584,8 +643,6 @@ _பார்வ) த (ி t | |||
| த) ப (ா p | |||
| த) ப (B b | |||
| @) பத (ி pVt | |||
| ன்) பத (ி bVd | |||
| ப (ுர p | |||
| ப (ால p | |||
| ப (ாள p | |||
| @@ -611,6 +668,7 @@ _பார்வ) த (ி t | |||
| _) ப (ட்டன bV | |||
| _) ப (ட்டன_ pV | |||
| _) ப (தில bV | |||
| _) பத்த (ிரகாளி bVdd | |||
| _) ப (த்திரமா bV | |||
| _) ப (ந்தங்கள bV | |||
| _) ப (ந்தத் bV | |||
| @@ -639,6 +697,7 @@ _பார்வ) த (ி t | |||
| _) ப (லதேவ bV | |||
| _) ப (லத்தை bV | |||
| _) ப (லப்படு bV | |||
| _) ப (லப்பரீட்சை bV | |||
| _) ப (லம bV | |||
| _) ப (லமுறை pV | |||
| _) ப (லராம bV | |||
| @@ -647,8 +706,10 @@ _பார்வ) த (ி t | |||
| _) ப (லவீன bV | |||
| _) ப (லஹீன bV | |||
| _) பலாத்க (ார bVla:dk | |||
| _) ப (லிபீட bV | |||
| _) ப (லிய bV | |||
| _) ப (லூன bV | |||
| _) ப (வாணி bV | |||
| _) ப (வ்ய bV | |||
| _) ப (ஸ bV | |||
| _) ப (ாகங்க b | |||
| @@ -660,8 +721,15 @@ _பார்வ) த (ி t | |||
| _) ப (ாடி_பில்டிங் b | |||
| _) ப (ாணி b | |||
| _) ப (ாதிக்க b | |||
| _) ப (ாதிக்கு_ p | |||
| _) ப (ாதிக்கும்_குறை p | |||
| _) ப (ாதிக்கும்_மேற்பட்ட_ p | |||
| _) ப (ாதிக்கும்_மேல p | |||
| _) ப (ாதித்த b | |||
| _) ப (ாதிப்ப b | |||
| _) ப (ாதுஷா b | |||
| _) பாத்த (ியதை ba:dd | |||
| _) பாத்த (ியம்_ ba:dd | |||
| _) ப (ாத்யதை b | |||
| _) ப (ாத்ரூம b | |||
| _) ப (ானு b | |||
| @@ -675,9 +743,10 @@ _பார்வ) த (ி t | |||
| _) ப (ாலக்காட p | |||
| _) ப (ாலச b | |||
| _) ப (ாலதண் b | |||
| _) ப (ாலமு b | |||
| _) ப (ாலமுர b | |||
| _) ப (ாலாஜி b | |||
| _) ப (ாலாபிஷேக p | |||
| _) ப (ாலாம்பிக b | |||
| _) ப (ாலாவ b | |||
| _) ப (ாலின் p | |||
| _) ப (ாலு b | |||
| @@ -687,6 +756,18 @@ _பார்வ) த (ி t | |||
| _) ப (ால் p | |||
| _) ப (ால்_தாக்கரே b | |||
| _) ப (ால்ய b | |||
| _நேய_) ப (ாவ b | |||
| _சிநேக_) ப (ாவ b | |||
| _சினேக_) ப (ாவ b | |||
| _முக_) ப (ாவ b | |||
| _முகத்தின்_) ப (ாவ b | |||
| முகங்களினுடைய_) ப (ாவ b | |||
| முகங்களின்_) ப (ாவ b | |||
| முகங்களிலிருந்த_) ப (ாவ b | |||
| முகங்களிலிருந்து_) ப (ாவ b | |||
| முகத்தினுடைய_) ப (ாவ b | |||
| முகத்திலிருந்த_) ப (ாவ b | |||
| முகத்திலிருந்து_) ப (ாவ b | |||
| _) ப (ாவனா b | |||
| _) ப (ாவனை b | |||
| _) ப (ாவித்த b | |||
| @@ -712,6 +793,7 @@ _பார்வ) த (ி t | |||
| _) ப (ீம b | |||
| _) ப (ீரங்கி b | |||
| _) ப (ீராமணர b | |||
| _) ப (ுக்தி b | |||
| _) ப (ுட்டி b | |||
| _) ப (ுதன b | |||
| _) புத்த(K buddV | |||
| @@ -724,8 +806,10 @@ _பார்வ) த (ி t | |||
| _) ப (ுத்திய b | |||
| _) ப (ுல்லாக்க b | |||
| _) ப (ுவன b | |||
| _) ப (ூகம்ப b | |||
| _) ப (ூகோல b | |||
| _) ப (ூட்ஸ b | |||
| _) ப (ூதகணங்க b | |||
| _) ப (ூதங் b | |||
| _) ப (ூதத் b | |||
| _) ப (ூதம b | |||
| @@ -735,11 +819,11 @@ _பார்வ) த (ி t | |||
| _) ப (ூமாதேவி b | |||
| _) ப (ூமி b | |||
| _) ப (ூலோக b | |||
| _) ப (ூவுலக b | |||
| _) ப (ெங்களூர b | |||
| _) ப (ெட்ரூம b | |||
| _) ப (ெர்லிங b | |||
| _) ப (ெல் b | |||
| _) ப (ெஸ்ட் b | |||
| _) ப (ேஜார b | |||
| _) ப (ேட்டரி b | |||
| _) ப (ேதலித்த b | |||
| @@ -749,6 +833,7 @@ _பார்வ) த (ி t | |||
| _) ப (ைரவ b | |||
| _) ப (ொம்மல b | |||
| _) ப (ொம்மை b | |||
| _) ப (ோகங்க b | |||
| _) ப (ோஜ b | |||
| _) ப (ோதன b | |||
| _) ப (ோதித் b | |||
| @@ -761,36 +846,83 @@ _பார்வ) த (ி t | |||
| //sort | |||
| இயல்) ப bV# | |||
| பரிதா) ப (+ bV# | |||
| அனுதா) ப (+ bV# | |||
| நன்) ப (கல pV | |||
| பின்) ப (கல pV | |||
| முன்) ப (கல pV | |||
| நாலா) ப (க்க pV | |||
| வட) ப (குதி pV | |||
| தென்) ப (குதி pV | |||
| ப (க்கK pV | |||
| ப (டி pV | |||
| மறு) ப (டி bV | |||
| @) ப (ட்ச+ pV | |||
| ப (ண pV | |||
| _சிவ) ப (த pV | |||
| கஜ) பதி pVti | |||
| கண) பதி pVti | |||
| ரகு) பதி pVti | |||
| சீதா) பதி pVti | |||
| சேது) பதி pVti | |||
| தரணி) பதி pVti | |||
| மகுட) பதி pVti | |||
| பிரகஸ்) பதி pVti | |||
| லக்ஷ்மி) பதி pVti | |||
| வித்யா) பதி pVti | |||
| அம்பிகா) பதி pVti | |||
| வளையா) பதி pVti | |||
| வேங்கட) பதி pVti | |||
| மின்) ப (திப்ப+ pV | |||
| காண்) பத (ில bVd | |||
| பதை) ப (தை pV | |||
| கல்) ப (னா pV | |||
| நிரு) ப (மா pV | |||
| அனு) ப (மா pV | |||
| _ஊடு) ப (யிர pV | |||
| பல) ப (ல pV | |||
| _மூடு) ப (ல்லக் pV | |||
| பள) ப (ள pV | |||
| வட) ப (ழ pV | |||
| வீண்) ப (ழி pV | |||
| _தீ) ப (ா p | |||
| சமன்) ப (ாட p | |||
| முரன்) ப (ாட p | |||
| ப (ாண்டி p | |||
| ப (ாதை p | |||
| ச) பாபதி ba:pVti | |||
| எதிர்) ப (ார p | |||
| _கா) ப (ாலி b | |||
| அட) ப (ாவ p | |||
| வீண்) ப (ாவ p | |||
| அடி) ப (ாவி p | |||
| கோ) ப (ி p | |||
| ஆண்) ப (ிள்ளை p | |||
| பெண்) ப (ிள்ளை p | |||
| பூம்) ப (ுகார p | |||
| ம்) ப (ுரா b | |||
| நாலா) ப (ுற p | |||
| ப (ுறK p | |||
| மண்) ப (ுழு p | |||
| பூம்) ப (ுஹார p | |||
| ம்) ப (ூர b | |||
| ராம்) ப (ூர p | |||
| அ) ப (ூர்வ b | |||
| இன்ஸ்) ப (ெக்டர p | |||
| இளம்) ப (ெண் p | |||
| ப (ெருமான p | |||
| ப (ெற p // ?? end-of-word + suffix ?? | |||
| வீண்) ப (ேச்ச p | |||
| ப (ோக_ p | |||
| ப (ோகின்ற p | |||
| ப (ோகிற p | |||
| ப (ோதிலும்+ p | |||
| ப (ோது+ p | |||
| ப (ோதும்+ p | |||
| ப (ோதும்_+ p | |||
| ப (ோதே_+ p | |||
| ப (ோன_ p | |||
| ப (ோனா p | |||
| ப (ோன்ற+ p // ?? end-of-word + suffix ?? | |||
| ப (ோய் p | |||
| ப (ோல_ p | |||
| @@ -800,10 +932,15 @@ _பார்வ) த (ி t | |||
| ப (ோலப்_ p | |||
| ப (ோலவே_ p | |||
| ப (ோல்_+ p | |||
| ப (ோவத p | |||
| _டே) ப (் p | |||
| கர்) ப்ப bbV# | |||
| நிர்) ப்ப (ந்த bbV | |||
| _ர) ப்ப (ர bbV | |||
| துர்) ப்ப (ாக்கிய bb | |||
| ஆர்) ப்ப (ாட்ட bb | |||
| துர்) ப்ப (ோதனை bb | |||
| கம்) ப்யூட (ர pjU:t.V | |||
| //endsort | |||
| // If ப+ appearing in the middle of a word is followed by ட+ | |||
| @@ -814,6 +951,9 @@ _பார்வ) த (ி t | |||
| ம்) ப (Bட b | |||
| //sort | |||
| சித்தப்) பி(ரமை b | |||
| _) பி(ராந்தியு b | |||
| ஜெய) பி (ர p | |||
| _) பி (ரகதீ b | |||
| _) பி (ரகலாதன p | |||
| _) பி (ரகஸ்பதி b | |||
| @@ -822,6 +962,7 @@ _பார்வ) த (ி t | |||
| _) பி (ரகாஷ p | |||
| _) பி (ரக்ஞை p | |||
| _) பி (ரசங் p | |||
| _) பி (ரசன்ந p | |||
| _) பி (ரசன்ன p | |||
| _) பி (ரசவ p | |||
| _) பி (ரசாத p | |||
| @@ -829,6 +970,7 @@ _பார்வ) த (ி t | |||
| _) பிரச (ார prVtS | |||
| _) பி (ரசித்த p | |||
| _) பி (ரசித்தி p | |||
| _) பி (ரசுர p | |||
| _) பி (ரச்சனை p | |||
| _) பிரச (்னை prVtS | |||
| _) பி (ரஜ p | |||
| @@ -845,12 +987,14 @@ _பார்வ) த (ி t | |||
| _) பி (ரமிப்ப b | |||
| _) பி (ரமுகர p | |||
| _) பி (ரமை b | |||
| வீண்) பி (ரமை b | |||
| _) பி (ரம்ம b | |||
| _) பி (ரம்மன b | |||
| _) பி (ரம்மை b | |||
| _) பி (ரயத்தன p | |||
| _) பி (ரயா p | |||
| _) பி (ரயோக p | |||
| துஷ்) பி (ரயோக p | |||
| _) பி (ரயோசன p | |||
| _) பி (ரயோஜன p | |||
| _) பி (ரலய p | |||
| @@ -859,18 +1003,29 @@ _பார்வ) த (ி t | |||
| _) பி (ரவேச p | |||
| _) பி (ரவேசி p | |||
| _) பி (ரஷ்ட p | |||
| _) பி (ரஸாத p | |||
| _) பி (ரஸ்தா p | |||
| _) பி (ரஹலாத p | |||
| _) பி (ராகார p | |||
| _) பி (ராணன p | |||
| _) பி (ராணி p | |||
| _) பி (ராண்ட p | |||
| _) பி (ராதித் p | |||
| பயப்) பி (ராந்தி b | |||
| மனப்) பி (ராந்தி b | |||
| _) பி (ராந்தியங் p | |||
| _) பி (ராந்தியத் p | |||
| _) பி (ராந்தியம்_ p | |||
| _) பி (ராந்தியை b | |||
| _) பி (ரான்தி_ b | |||
| _) பி (ராப் p | |||
| _) பி (ராமண b | |||
| _) பி (ராமணன b | |||
| _) பி (ராமின்_ b | |||
| பி (ராய p | |||
| _) பி (ரார்தன p | |||
| _) பி (ரார்தி p | |||
| _) பி (ரார்த்த p | |||
| _) பி (ரிட b | |||
| _) பி (ரித்தானி b | |||
| _) பி (ரியன p | |||
| @@ -976,6 +1131,7 @@ _பார்வ) த (ி t | |||
| வ vV | |||
| வ (B v | |||
| _) வி (யா v | |||
| வி (யூக v | |||
| .group ஶ | |||
| @@ -1018,13 +1174,16 @@ _பார்வ) த (ி t | |||
| ஆ a: | |||
| இ i | |||
| _) இ (ரா // silent before 'raa' | |||
| _) இ (ராக i | |||
| _) இ (ரான i | |||
| _) இ (லட்சிய // silent | |||
| _) இ (ரகசிய // silent | |||
| _) இ (லேச // silent | |||
| _) இ (ரத்த | |||
| _) இ (ராம | |||
| _) இ (ராவண | |||
| _) இ (ராத்த | |||
| _) இ (ராஜ | |||
| _) இ (ராணுவ | |||
| _) இ (லகுவாக | |||
| ஈ i: | |||
| @@ -1,28 +1,29 @@ | |||
| // letters | |||
| //vi_list | |||
| // chữ cái - ABC | |||
| b be | |||
| c se | |||
| d de | |||
| đ d@: | |||
| f E3p | |||
| g g@: | |||
| g D'e7 | |||
| h ha3t | |||
| j gi | |||
| k ka: | |||
| l E | |||
| m Em | |||
| n En | |||
| l El@:2 | |||
| m Em@:2 | |||
| n En@:2 | |||
| p pe | |||
| q kwi | |||
| r E | |||
| s E3t | |||
| r Ez.@:2 | |||
| s E3s | |||
| t te | |||
| v ve | |||
| w v'ek,E3p | |||
| x i3ts; | |||
| x i3c | |||
| z zE3t | |||
| // numbers | |||
| _0 J'e1z.'o // dê-rô | |||
| // số - numbers | |||
| _0 x,o1N // không | |||
| _1 m'o6t[ // một | |||
| _2 h'a:I // hai | |||
| _3 _b'a: // ba | |||
| @@ -33,32 +34,32 @@ _7 _b'aI4 // bảy | |||
| _8 t['a:3m // tám | |||
| _9 c'i3n // chín | |||
| _1X m'y@2j // mười | |||
| _2X h'a:I||m'y@2j // hai mười | |||
| _3X _b'a:||m'y@2j // ba mười | |||
| _4X _b'o3n||m'y@2j // bốn mười | |||
| _5X n'am||m'y@2j // năm mười | |||
| _6X s.'aU3||m'y@2j // sáu mười | |||
| _7X _b'aI4||m'y@2j // bảy mười | |||
| _8X t['a:3m||m'y@2j // tám mười | |||
| _9X c'i3n||m'y@2j // chín mười | |||
| _2X h'a:I||m'y@7j // hai mươi | |||
| _3X _b'a:||m'y@7j // ba mươi | |||
| _4X _b'o3n||m'y@7j // bốn mươi | |||
| _5X n'am||m'y@7j // năm mươi | |||
| _6X s.'aU3||m'y@7j // sáu mươi | |||
| _7X _b'aI4||m'y@7j // bảy mươi | |||
| _8X t['a:3m||m'y@7j // tám mươi | |||
| _9X c'i3n||m'y@7j // chín mươi | |||
| _21 h'a:I||m'y@2j||m'o3t[ | |||
| _31 _b'a:||m'y@2j||m'o3t[ | |||
| _41 _b'o3n||m'y@2j||m'o3t[ | |||
| _51 n'am||m'y@2j||m'o3t[ | |||
| _61 s.'aU3||m'y@2j||m'o3t[ | |||
| _71 _b'aI4||m'y@2j||m'o3t[ | |||
| _81 t['a:3m||m'y@2j||m'o3t[ | |||
| _91 c'i3n||m'y@2j||m'o3t[ | |||
| _21 h'a:I||m'y@7j||m'o3t[ | |||
| _31 _b'a:||m'y@7j||m'o3t[ | |||
| _41 _b'o3n||m'y@7j||m'o3t[ | |||
| _51 n'am||m'y@7j||m'o3t[ | |||
| _61 s.'aU3||m'y@7j||m'o3t[ | |||
| _71 _b'aI4||m'y@7j||m'o3t[ | |||
| _81 t['a:3m||m'y@7j||m'o3t[ | |||
| _91 c'i3n||m'y@7j||m'o3t[ | |||
| _25 h'a:I||m'y@2j||l'a7m | |||
| _35 _b'a:||m'y@2j||l'a7m | |||
| _45 _b'o3n||m'y@2j||l'a7m | |||
| _55 n'am||m'y@2j||l'a7m | |||
| _65 s.'aU3||m'y@2j||l'a7m | |||
| _75 _b'aI4||m'y@2j||l'a7m | |||
| _85 t['a:3m||m'y@2j||l'a7m | |||
| _95 c'i3n||m'y@2j||l'a7m | |||
| _25 h'a:I||m'y@7j||l'a7m | |||
| _35 _b'a:||m'y@7j||l'a7m | |||
| _45 _b'o3n||m'y@7j||l'a7m | |||
| _55 n'am||m'y@7j||l'a7m | |||
| _65 s.'aU3||m'y@7j||l'a7m | |||
| _75 _b'aI4||m'y@7j||l'a7m | |||
| _85 t['a:3m||m'y@7j||l'a7m | |||
| _95 c'i3n||m'y@7j||l'a7m | |||
| _0C cr'am // trăm | |||
| _0M1 N'a:2n // ngàn | |||
| @@ -67,8 +68,39 @@ _0M3 t['i4 // tỷ | |||
| _0and l,in^ // linh | |||
| _dpt _f,@I4_ | |||
| // symbols | |||
| _, f@I4 | |||
| // kí hiệu - symbols | |||
| ~ J'@U3N'a:5 | |||
| ` J'@U3hw'i@2n | |||
| _! J'@U3c'@3mt'a:7n | |||
| @ a:1k'O2N | |||
| # J'@U3t'a7N $max3 | |||
| $ J'@U3_d'o1l'a:7 | |||
| % f'@2ncr'a7m | |||
| ^ J'@U3m'u5 | |||
| & J'@U3v,a:2 | |||
| * J'@U3s.'a:U7 $max3 | |||
| _( m'@:4Nw'a6kh | |||
| _) _d'O3NNw'a6kh | |||
| _- Q'a:6cN'a:7N | |||
| __ Q'a:6cJ'y@3j | |||
| = J'@U3_b'a2N $max3 | |||
| + J'@U3k'o6N $max3 | |||
| _{ m'@:4Nw'a6khn^'O6n | |||
| _} _d'O3NNw'a6khn^'O6n | |||
| _[ m'@:4Nw'a6khv'u@7N | |||
| _] _d'O3NNw'a6khv'u@7N | |||
| _| s'o4t'a4N | |||
| _\ s'o4f,a:I4 | |||
| _: h'a:I1c'@3m | |||
| _; c'@3mf'@I4 | |||
| _' Nw'a6kh_d'@:7n | |||
| _“ Nw'a6khk'E3p | |||
| _, f'@I4 | |||
| _. c'@3m | |||
| _/ s'o4cr'a:I3 | |||
| _< n^'O4h'@:7n | |||
| _> l'@:3nh'@:7n | |||
| _? h'OI4c'@3m | |||
| // ?? found in festival wow_vi_ptn_phrasing.scm | |||
| bị $u | |||
| @@ -112,6 +144,5 @@ vẫn $u | |||
| vì $u | |||
| với $u | |||
| internet int@:n'E3t | |||
| // từ gốc nước ngoài -common foreign language words | |||
| internet int@:n'E3t | |||
| @@ -220,11 +220,11 @@ $textmode | |||
| 护 hu4 | |||
| 横 heng2 | |||
| 环 huan2 | |||
| 似 shi4 | |||
| 似 si4 | |||
| 殿 dian4 | |||
| 品 pin3 | |||
| 塞 sai1 | |||
| 候 hou5 | |||
| 候 hou4 | |||
| 蛋 dan4 | |||
| 絲 si1 | |||
| 樓 lou2 | |||
| @@ -1361,7 +1361,7 @@ $textmode | |||
| 遥 yao2 | |||
| 司 si1 | |||
| 钓 diao4 | |||
| 训 xun5 | |||
| 训 xun4 | |||
| 奶 nai3 | |||
| 阿 a1 | |||
| 倦 juan4 | |||
| @@ -1930,7 +1930,7 @@ $textmode | |||
| 款 kuan3 | |||
| 臥 wo4 | |||
| 鵲 que5 | |||
| 訓 xun5 | |||
| 訓 xun4 | |||
| 鲜 xian1 | |||
| 锭 ding4 | |||
| 奴 nu2 | |||
| @@ -1,4 +1,4 @@ | |||
| 60 phoneme tables | |||
| 62 phoneme tables | |||
| new total | |||
| base 99 99 | |||
| consonants 9 107 | |||
| @@ -17,7 +17,7 @@ consonants 9 107 | |||
| jbo 2 111 | |||
| nci 3 120 | |||
| fi 40 130 | |||
| fr 55 137 | |||
| fr 56 137 | |||
| fr_ca 11 137 | |||
| hi 58 145 | |||
| ta 21 149 | |||
| @@ -42,7 +42,7 @@ consonants 9 107 | |||
| grc 12 124 | |||
| sv 23 121 | |||
| no 28 125 | |||
| is 32 125 | |||
| is 42 135 | |||
| ru 39 130 | |||
| vi 41 136 | |||
| zhy 41 133 | |||
| @@ -59,7 +59,9 @@ consonants 9 107 | |||
| ne 18 153 | |||
| pa 14 147 | |||
| prs 8 106 | |||
| sl 6 130 | |||
| gd 6 99 | |||
| bg 10 115 | |||
| Data file Used by | |||
| b/b [b] base | |||
| @@ -104,7 +106,6 @@ d/dr [*] base | |||
| [d[] base | |||
| [d] base2 | |||
| [d] fi | |||
| [d] fr | |||
| [d.] hi | |||
| [dh.] hi | |||
| [d] hu | |||
| @@ -199,6 +200,7 @@ envelope/p_rise [3] vi | |||
| [35] zh | |||
| envelope/vi_5amp [5] vi | |||
| envelope/vi_6amp [6] vi | |||
| g2/g [g] fr | |||
| g2/xg [gh] hi | |||
| g/g [g] base | |||
| [g-] en | |||
| @@ -251,22 +253,28 @@ j/j_ [j] base | |||
| [j] zh | |||
| j/j@ [j] base | |||
| [j] de | |||
| [j/] fr | |||
| [j] zh | |||
| j/ja [j] base | |||
| [j] de | |||
| [j/] fr | |||
| [j] zh | |||
| j/je [j] base | |||
| [j] de | |||
| [j/] fr | |||
| [j] zh | |||
| j/ji [j] base | |||
| [j] de | |||
| [j/] fr | |||
| [j] zh | |||
| j/jo [j] base | |||
| [j] de | |||
| [j/] fr | |||
| [j] zh | |||
| j/_j_short [j] de | |||
| j/ju [j] base | |||
| [j] de | |||
| [j/] fr | |||
| [j] zh | |||
| j/xj [j] base | |||
| [j] de | |||
| @@ -322,12 +330,10 @@ l/l_ [l/] base | |||
| [l/] fr | |||
| l/l_@ [l/3] base | |||
| [W] fr | |||
| [Y] fr | |||
| [l/] fr | |||
| l/l@ [] base | |||
| [L] base | |||
| [W] fr | |||
| [Y] fr | |||
| [l] fr | |||
| l/L1_aL [l/] base | |||
| [l/] de | |||
| @@ -353,7 +359,6 @@ l/l_3 [l/] de | |||
| l/l_4 [ll] sq | |||
| l/la [] base | |||
| [L] base | |||
| [a] fr | |||
| [l] fr | |||
| l/l_a [l/3] base | |||
| [l/] fr | |||
| @@ -373,6 +378,8 @@ l/li [] base | |||
| l/l_i [l/3] base | |||
| [l/] fr | |||
| [i] sq | |||
| ll/ll [L] bg | |||
| ll/_ll [L] bg | |||
| l/l_long [l] base | |||
| [l] fr | |||
| l/lo [] base | |||
| @@ -380,15 +387,14 @@ l/lo [] base | |||
| [l] fr | |||
| l/l_o [l/3] base | |||
| [l/] fr | |||
| [o2] fr | |||
| l^/l_rfx [l.] base | |||
| l/lu [] base | |||
| [L] base | |||
| [l] fr | |||
| [w^i] fr | |||
| l/l_u [l/3] base | |||
| [l/] fr | |||
| l/l_vi [l] vi | |||
| ll/xll [L] bg | |||
| l/l_y [y] fr | |||
| l/tl [l] base | |||
| [l] fr | |||
| @@ -516,6 +522,8 @@ r3/r_uvl.wav [r"] base | |||
| r3/rx [*] base | |||
| [r/] base | |||
| [r/] af | |||
| [r] fr | |||
| [r/] fr | |||
| [r/2] fr | |||
| [R] fr_ca | |||
| [x] pt_pt | |||
| @@ -590,6 +598,7 @@ ufric/ll [L] base | |||
| [l#] is | |||
| ufric/s [s] base | |||
| [s] fr | |||
| [z2] fr | |||
| [s] es | |||
| [z] sq | |||
| ufric/s_ [s] base | |||
| @@ -597,7 +606,6 @@ ufric/s_ [s] base | |||
| [s2] consonants | |||
| [s] fr | |||
| [z] fr | |||
| [z2] fr | |||
| [s] es | |||
| [z;] ro | |||
| [z] sq | |||
| @@ -773,6 +781,7 @@ ustop/t_short [t] fr | |||
| [t] lv | |||
| [t] sk | |||
| [t] el | |||
| ustop/t_short_ [t] fr | |||
| ustop/tsh_pzd [tS;] zh | |||
| ustop/tsh_pzd_unasp [tS;] zh | |||
| ustop/tsh_sr [tS] sr | |||
| @@ -835,7 +844,7 @@ vdiph2/o@ [o@] af | |||
| vdiph2/oa [Oa] ro | |||
| [ua] zh | |||
| vdiph2/o_oo [o@] en_wi | |||
| [o] is | |||
| [O:] is | |||
| [o] zh | |||
| vdiph2/u#@ [U@] en_sc | |||
| vdiph2/uaa [uo] lv | |||
| @@ -867,6 +876,8 @@ vdiph/aai_2 [AI] af | |||
| vdiph/aai_3 [ai] fi | |||
| vdiph/aau [au] fi | |||
| [au] lv | |||
| [aU] is | |||
| [aU:] is | |||
| vdiph/aau_2 [aU] en_wi | |||
| [aU] de | |||
| [VU] nl | |||
| @@ -900,6 +911,7 @@ vdiph/ai_6 [aI] en_rp | |||
| vdiph/ai_7 [aI] en_sc | |||
| [aI2] en_sc | |||
| [aI] is | |||
| [aI:] is | |||
| vdiph/ai_8 [aI] ta | |||
| vdiph/aoo [aU] en_us | |||
| vdiph/au [aU] en | |||
| @@ -914,7 +926,6 @@ vdiph/au_4 [aU] base2 | |||
| [aU] eo | |||
| [aU] sk | |||
| [aU] it | |||
| [aU] is | |||
| [aU] id | |||
| vdiph/ee-e [E:] hi | |||
| vdiph/eei [EI] base2 | |||
| @@ -946,6 +957,7 @@ vdiph/ei [eI] base2 | |||
| [eI] la | |||
| [eI] pt | |||
| [eI] is | |||
| [eI:] is | |||
| [eI] vi | |||
| [ei] zhy | |||
| vdiph/eu [eU] base2 | |||
| @@ -971,11 +983,13 @@ vdiph/@i_3 [eI] en_wm | |||
| vdiph/&i_3 [aI] vi | |||
| vdiph/ii [iI] ro | |||
| vdiph/i#i [yI] ro | |||
| vdiph/oa_fr [w^a] fr | |||
| vdiph/oi [oI] base2 | |||
| [OI] en_wm | |||
| [OY] de | |||
| [oI] it | |||
| [OI] la | |||
| [OI] is | |||
| [oI] vi | |||
| [oI] ne | |||
| vdiph/oi_2 [oI] af | |||
| @@ -1001,7 +1015,7 @@ vdiph/ou [ou] fi | |||
| vdiph/ou_2 [oU] sk | |||
| [oU] ro | |||
| vdiph/ou_3 [oU] is | |||
| [oU2] is | |||
| [oU:] is | |||
| vdiph/@u [u:] en_wm | |||
| [@U] vi | |||
| [@:U] vi | |||
| @@ -1034,6 +1048,7 @@ vdiph/yi [yi] fi | |||
| [yi] zh | |||
| vdiph/y#i [Yi] fi | |||
| vdiph/y#i_2 [Yy] is | |||
| [Yy:] is | |||
| vdiph/yi_fr [w^i] fr | |||
| vdiph/y#y [Yy] fi | |||
| vdiph/y#y_2 [Yy] af | |||
| @@ -1119,12 +1134,12 @@ vocw/zh [Z] base | |||
| vocw/zh_rfx [z.] base | |||
| voc/z [z] base | |||
| [z] fr | |||
| [z2] fr | |||
| [z;] ro | |||
| [z] sq | |||
| voc/z_ [z] base | |||
| [dz] consonants | |||
| [z] fr | |||
| [z2] fr | |||
| [z;] ro | |||
| [z] sq | |||
| voc/zh [Z] base | |||
| @@ -1153,6 +1168,7 @@ vowel/@ [@] base | |||
| [@4] hi | |||
| [@] hy | |||
| [@] ml | |||
| [@] sl | |||
| vowel/@- [@-] base | |||
| [r*] hr | |||
| vowel/& [a] en_rp | |||
| @@ -1221,6 +1237,7 @@ vowel/a [a] en | |||
| [a] it | |||
| [a] zh | |||
| [a] id | |||
| [a] bg | |||
| vowel/a# [a] base2 | |||
| [a/] base2 | |||
| [a2] en_sc | |||
| @@ -1242,7 +1259,7 @@ vowel/a_2 [a] base2 | |||
| vowel/a#_2 [a#] pl | |||
| [&] hr | |||
| [a2] sv | |||
| [&] is | |||
| [a] is | |||
| [a/] sw | |||
| vowel/a_3 [a] en_sc | |||
| [a/] en_sc | |||
| @@ -1252,7 +1269,6 @@ vowel/a_3 [a] en_sc | |||
| [a:] lv | |||
| [a:] cs | |||
| [a:] la | |||
| [a] is | |||
| [A] zh | |||
| [a] sq | |||
| [A] da | |||
| @@ -1278,17 +1294,17 @@ vowel/a#_3 [a2] en | |||
| [a] ml | |||
| vowel/a_4 [a/] el | |||
| [a] vi | |||
| vowel/a_5 [a] fr | |||
| [a:] ta | |||
| vowel/a#_4 [a] bg | |||
| vowel/a_5 [a:] ta | |||
| [a/] it | |||
| [a] la | |||
| [a] sv | |||
| [a] sw | |||
| [a] tr | |||
| [a:] ml | |||
| vowel/a_6 [a] fr | |||
| [a] ca | |||
| vowel/a_6 [a] ca | |||
| [a:] vi | |||
| vowel/a_7 [a] fr | |||
| vowel/aa [A] fr_ca | |||
| [A] no | |||
| [A:] no | |||
| @@ -1316,6 +1332,7 @@ vowel/aa_6 [A] de | |||
| vowel/aa_7 [A] nl | |||
| vowel/aa_8 [0] en_us | |||
| [A:] en_us | |||
| [a:] is | |||
| vowel/aa_9 [a] fi | |||
| [a:] hi | |||
| [a] ne | |||
| @@ -1326,6 +1343,7 @@ vowel/@_bck [@] hi | |||
| [V] ne | |||
| [@/] ne | |||
| [@] pa | |||
| [@] bg | |||
| vowel/e [e] base2 | |||
| [e:] en | |||
| [eI] en_n | |||
| @@ -1353,6 +1371,7 @@ vowel/e [e] base2 | |||
| [e] ml | |||
| [e:] ml | |||
| [e] ne | |||
| [e] sl | |||
| vowel/e# [I] en_sc | |||
| vowel/e_2 [eI] en_sc | |||
| [e:] de | |||
| @@ -1371,7 +1390,7 @@ vowel/e_9 [E2] fr | |||
| vowel/ee [E] en_n | |||
| [E] sv | |||
| vowel/e_e [E] en_sc | |||
| [e] is | |||
| [E:] is | |||
| vowel/ee# [E#] pl | |||
| vowel/ee_1 [E] base2 | |||
| [e@] en | |||
| @@ -1381,6 +1400,7 @@ vowel/ee_1 [E] base2 | |||
| [E:] sv | |||
| [E:] no | |||
| [e] zhy | |||
| [E] sl | |||
| vowel/ee_2 [E] cy | |||
| [E2] nl | |||
| [E] zh | |||
| @@ -1422,6 +1442,7 @@ vowel/e_mid [E] en_rp | |||
| [E2] id | |||
| [e] hy | |||
| [E] prs | |||
| [e] bg | |||
| vowel/e_mid2 [E] af | |||
| [E] de | |||
| [E2] de | |||
| @@ -1438,11 +1459,11 @@ vowel/e_mid2 [E] af | |||
| [e] tr | |||
| [e] sq | |||
| [E] da | |||
| [e] bg | |||
| vowel/@_fnt [@] en_wi | |||
| [@2] en_wi | |||
| [@2] hr | |||
| vowel/@_fr [3] en_n | |||
| [@2] fr | |||
| vowel/@_hgh [@] fr | |||
| [@] hr | |||
| vowel/i [i] base2 | |||
| @@ -1471,8 +1492,6 @@ vowel/i [i] base2 | |||
| vowel/i# [y:] cy | |||
| vowel/i_2 [i2] de | |||
| [i:] de | |||
| [i] fr | |||
| [i-] fr | |||
| [i] nl | |||
| [i:] la | |||
| [i:] sv | |||
| @@ -1482,7 +1501,7 @@ vowel/i_3 [i] af | |||
| vowel/i_4 [i] fi | |||
| [i] hu | |||
| [I] it | |||
| [i] is | |||
| [i:] is | |||
| [i] vi | |||
| [i] da | |||
| vowel/i_5 [i:] en_sc | |||
| @@ -1498,10 +1517,12 @@ vowel/i_6 [i] hi | |||
| [i] ku | |||
| [i] id | |||
| [i] ml | |||
| [i] bg | |||
| vowel/i#_6 [i.] zh | |||
| vowel/i_7 [i] pl | |||
| [i] sq | |||
| vowel/i#_7 [i[] zh | |||
| vowel/i_8 [i] fr | |||
| vowel/i_en [i:] en | |||
| [i:] en_us | |||
| vowel/i_fnt [i:] en_wi | |||
| @@ -1517,6 +1538,7 @@ vowel/ii [I] en_n | |||
| [I] fr_ca | |||
| [I] nl | |||
| [I] is | |||
| [I:] is | |||
| [i] zhy | |||
| [I] ku | |||
| [I#] sq | |||
| @@ -1542,6 +1564,7 @@ vowel/ii_4 [I2] en | |||
| [I] en_us | |||
| vowel/ii_5 [I] la | |||
| [i] zh | |||
| [i] bg | |||
| vowel/ii_6 [I] en_wm | |||
| [I] en_wi | |||
| [I2] en_wi | |||
| @@ -1549,6 +1572,7 @@ vowel/ii_6 [I] en_wm | |||
| [I] pt | |||
| [y] pt | |||
| [i/] pt | |||
| [i] is | |||
| [I] sq | |||
| vowel/ii_en [i] en | |||
| [i] sq | |||
| @@ -1594,6 +1618,7 @@ vowel/o [o] base2 | |||
| [o] ml | |||
| [o:] ml | |||
| [o:] pa | |||
| [o] sl | |||
| vowel/o_2 [o:] cy | |||
| [o:] hi | |||
| [o:] hu | |||
| @@ -1623,6 +1648,7 @@ vowel/o_mid [U@] en_rp | |||
| [o] hu | |||
| [o] tr | |||
| [o] ne | |||
| [o] bg | |||
| vowel/o_mid2 [O] fr | |||
| vowel/oo [O:] en_sc | |||
| [O] en_wi | |||
| @@ -1639,6 +1665,7 @@ vowel/oo [O:] en_sc | |||
| [O] tr | |||
| [O] id | |||
| [o] prs | |||
| [o] bg | |||
| vowel/oo_1 [O:] en_n | |||
| [O:] en_rp | |||
| [O@] en_rp | |||
| @@ -1668,6 +1695,7 @@ vowel/oo_4 [O] base2 | |||
| vowel/oo_5 [O] pl | |||
| [O] is | |||
| [O] sq | |||
| [O] sl | |||
| vowel/oo_en [O] en | |||
| [O:] en | |||
| [O@] en | |||
| @@ -1705,7 +1733,9 @@ vowel/u_2 [u1] fi | |||
| [u] sk | |||
| [U] hr | |||
| [u] ro | |||
| [u] is | |||
| [u] tr | |||
| [u] bg | |||
| vowel/u#_2 [u-] ta | |||
| [u-] sv | |||
| vowel/u#_3 [U] ta | |||
| @@ -1737,7 +1767,7 @@ vowel/u_bck [u] base2 | |||
| [u] pt | |||
| [u:] sv | |||
| [u:] no | |||
| [u] is | |||
| [u:] is | |||
| [u] zhy | |||
| [u] zh | |||
| [u] sq | |||
| @@ -1747,6 +1777,7 @@ vowel/u_bck [u] base2 | |||
| [u#] rw | |||
| [u] ne | |||
| [u] pa | |||
| [u] bg | |||
| vowel/u_bck2 [u] fr | |||
| [u:] fr | |||
| [u:] la | |||
| @@ -1773,6 +1804,7 @@ vowel/uu_bck [U] en_wi | |||
| [U] pa | |||
| vowel/V [3] en_sc | |||
| [W#] da | |||
| [@] bg | |||
| vowel/V_2 [V] en | |||
| [a] af | |||
| [V] ru | |||
| @@ -1782,6 +1814,7 @@ vowel/V_3 [V] en_rp | |||
| [V] hi | |||
| [V] ta | |||
| [V] pa | |||
| [a] bg | |||
| vowel/V_4 [V] en_sc | |||
| [V] da | |||
| vowel/V_6 [V] en_us | |||
| @@ -1789,6 +1822,7 @@ vowel/V_6 [V] en_us | |||
| vowel/y [y] base2 | |||
| [y:] de | |||
| [y] fi | |||
| [y] fr | |||
| [y:] hu | |||
| [y] nl | |||
| [y] la | |||
| @@ -1804,14 +1838,14 @@ vowel/y# [Y] base2 | |||
| [8] nl | |||
| [Y] ro | |||
| [oe] zhy | |||
| vowel/y## [y#] is | |||
| vowel/y_2 [y] fr | |||
| [y:] la | |||
| vowel/y## [y] is | |||
| vowel/y_2 [y:] la | |||
| [y] zh | |||
| vowel/y#_2 [Y] hu | |||
| [Y:] sv | |||
| vowel/y_3 [y] af | |||
| vowel/y#_3 [W] is | |||
| [W:] is | |||
| vowel/y_4 [y:] no | |||
| vowel/y_5 [y:] sv | |||
| [y] tr | |||
| @@ -1823,7 +1857,8 @@ vowel/yy_3 [y] sv | |||
| vowel/yy_4 [y] de | |||
| [y] hu | |||
| [y] grc | |||
| [y] is | |||
| [y:] is | |||
| [yI] is | |||
| [y] hy | |||
| vwl_af/@ [@] af | |||
| vwl_af/I [I] af | |||
| @@ -1867,36 +1902,42 @@ vwl_en_us/oor [0] 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/e2r [é”] fr | |||
| vwl_fr/ee2r [é”] fr | |||
| vwl_fr/i2r [é”] fr | |||
| vwl_fr/o2r [é”] fr | |||
| vwl_fr/oo2r [é”] fr | |||
| vwl_fr/r [r] fr | |||
| [r2] fr | |||
| vwl_fr/_r [r] fr | |||
| vwl_fr/r_ [r/2] fr | |||
| vwl_fr/r_@ [r/2] fr | |||
| vwl_fr/r@ [ j] fr | |||
| vwl_fr/r_ [r/] fr | |||
| vwl_fr/r_@ [r/] fr | |||
| vwl_fr/r@ [é”] fr | |||
| vwl_fr/@R [x] pt_pt | |||
| vwl_fr/r_2 [r/2] fr | |||
| vwl_fr/@R2 [R] fr_ca | |||
| vwl_fr/ra [ j] fr | |||
| vwl_fr/r_a [r/2] fr | |||
| vwl_fr/raa [A~] fr | |||
| vwl_fr/r_an [A~] fr | |||
| vwl_fr/re [ j] fr | |||
| vwl_fr/r_e [r/2] fr | |||
| vwl_fr/r_e2 [E] fr | |||
| vwl_fr/ri [ j] fr | |||
| vwl_fr/r_i [r/2] fr | |||
| vwl_fr/ro [ j] fr | |||
| vwl_fr/r_o [r/2] fr | |||
| vwl_fr/ro2 [O] fr | |||
| vwl_fr/r_o2 [O] fr | |||
| vwl_fr/ru [ j] fr | |||
| vwl_fr/r_u [r/2] fr | |||
| vwl_fr/ry [y] fr | |||
| [w^i] fr | |||
| vwl_fr/r_y [y] fr | |||
| vwl_fr/tr [r] fr | |||
| vwl_fr/trr [r/2] fr | |||
| vwl_fr/xr [ j] fr | |||
| vwl_fr/ra [é”] fr | |||
| vwl_fr/r_a [r/] fr | |||
| vwl_fr/raa [é”] fr | |||
| vwl_fr/re [é”] fr | |||
| vwl_fr/r_e [r/] fr | |||
| vwl_fr/ree [é”] fr | |||
| vwl_fr/ri [é”] fr | |||
| vwl_fr/r_i [r/] fr | |||
| vwl_fr/rj [é”] fr | |||
| vwl_fr/r_n [r/] fr | |||
| vwl_fr/ro [é”] fr | |||
| vwl_fr/r_o [r/] fr | |||
| vwl_fr/roo [é”] fr | |||
| vwl_fr/rr [r/] fr | |||
| vwl_fr/ru [é”] fr | |||
| vwl_fr/r_u [r/] fr | |||
| vwl_fr/ry [é”] fr | |||
| vwl_fr/tr [r/2] fr | |||
| vwl_fr/trr [r/] fr | |||
| vwl_fr/u2r [é”] fr | |||
| vwl_fr/y2r [é”] fr | |||
| vwl_hi/l-voc [l-] base | |||
| [l-] sk | |||
| [l:] sk | |||
| @@ -29,7 +29,11 @@ phoneme l // use dark [l/2] before not-vowel | |||
| lengthmod 7 | |||
| IF nextPh(isNotVowel) THEN | |||
| ChangePhoneme(l/2) | |||
| IF prevPh(isNotVowel) THEN | |||
| ChangePhoneme(l/) | |||
| ELSE | |||
| ChangePhoneme(l/2) | |||
| ENDIF | |||
| ENDIF | |||
| CALL base/l | |||
| @@ -130,7 +134,7 @@ endphoneme | |||
| phoneme a | |||
| vowel starttype #a endtype #a | |||
| length 150 | |||
| length 160 | |||
| ChangeIfDiminished(a2) | |||
| FMT(vowel/a) | |||
| endphoneme | |||
| @@ -146,7 +150,7 @@ endphoneme | |||
| phoneme aa // 'bath' etc. | |||
| vowel starttype #a endtype #a | |||
| length 150 | |||
| length 190 | |||
| IfNextVowelAppend(r-) | |||
| FMT(vowel/a) | |||
| endphoneme | |||
| @@ -1,14 +1,14 @@ | |||
| //==================================================== | |||
| // French | |||
| //==================================================== | |||
| // Updated 2010-04-01 Michel Such <[email protected]> | |||
| // Updated 2010-05-19 Michel Such <[email protected]> | |||
| phoneme #l virtual | |||
| // Used for l and l/ | |||
| endphoneme | |||
| phoneme #r virtual | |||
| // Used for r and r/2 | |||
| // Used for r, r2 and r/ | |||
| endphoneme | |||
| phoneme : // Lengthen previous vowel by "length" | |||
| @@ -18,20 +18,36 @@ endphoneme | |||
| procedure pre_post_r | |||
| IF prevPh(isVowel) THEN | |||
| VowelEnding(vwl_fr/xr) | |||
| IF prevPh(y) THEN | |||
| VowelEnding(vwl_fr/y2r) | |||
| ELIF prevPh(A~) THEN | |||
| VowelEnding(vwl_fr/aa2r) | |||
| ELIF prevPh(E~) OR prevPh(W~) THEN | |||
| VowelEnding(vwl_fr/ee2r) | |||
| ELIF prevPh(O~) OR prevPh(W~) THEN | |||
| VowelEnding(vwl_fr/oo2r) | |||
| ELIF prevPh(isVowel) THEN | |||
| PrevVowelEndings | |||
| VowelEnding(vwl_fr/@2r) | |||
| VowelEnding(vwl_fr/a2r) | |||
| VowelEnding(vwl_fr/e2r) | |||
| VowelEnding(vwl_fr/i2r) | |||
| VowelEnding(vwl_fr/o2r) | |||
| VowelEnding(vwl_fr/u2r) | |||
| EndSwitch | |||
| ENDIF | |||
| IF nextPhW(isFinalVowel) OR next2Ph(isFinalVowel) THEN | |||
| NextVowelStarts | |||
| VowelStart(vwl_fr/r@, -10) | |||
| VowelStart(vwl_fr/ra, -15) | |||
| VowelStart(vwl_fr/re, -10) | |||
| VowelStart(vwl_fr/ri, -20) | |||
| VowelStart(vwl_fr/ro, -10) | |||
| VowelStart(vwl_fr/ru, -10) | |||
| EndSwitch | |||
| ELSE | |||
| IF nextPh(A~) THEN | |||
| VowelStart(vwl_fr/raa) | |||
| ELIF nextPh(E~) OR nextPh(W~) THEN | |||
| VowelStart(vwl_fr/ree) | |||
| ELIF nextPh(y) THEN | |||
| VowelStart(vwl_fr/ry) | |||
| ELIF nextPh(O~) THEN | |||
| VowelStart(vwl_fr/roo) | |||
| ELIF nextPh(j/) THEN | |||
| VowelStart(vwl_fr/rj) | |||
| ELIF nextPh(isVowel) THEN | |||
| NextVowelStarts | |||
| VowelStart(vwl_fr/r@) | |||
| VowelStart(vwl_fr/ra) | |||
| @@ -45,27 +61,27 @@ endprocedure | |||
| phoneme r | |||
| liquid rhotic uvl | |||
| liquid rhotic vel nopause | |||
| starttype #r endtype #r | |||
| lengthmod 7 | |||
| Vowelin f1=0 f2=1200 -500 500 f3=-200 100 len=65 | |||
| Vowelout f1=0 f2=1200 -500 500 f3=200 100 len=50 | |||
| lengthmod 2 | |||
| IF nextPh(isNotVowel) THEN | |||
| ChangePhoneme(r/2) | |||
| ChangePhoneme(r/) | |||
| ENDIF | |||
| CALL pre_post_r | |||
| IF thisPh(isWordStart) OR prevPhW(r/2) THEN | |||
| Vowelout len=50 | |||
| FMT(vwl_fr/_r, -30) | |||
| ELIF prevPhW(g) OR prevPhW(k) OR prevPhW(p) THEN | |||
| FMT(vwl_fr/tr, -40) | |||
| ELIF prevPhW(d) OR prevPhW(t) THEN | |||
| FMT(vwl_fr/tr, -30) | |||
| ELIF prevPhW(f) OR prevPhW(v) OR prevPhW(S) THEN | |||
| FMT(vwl_fr/tr, -30) | |||
| ELIF prevPhW(b) THEN | |||
| FMT(vwl_fr/tr, -20) | |||
| IF thisPh(isWordStart) THEN | |||
| length 80 | |||
| FMT(vwl_fr/r) addWav(r3/rx, 25) | |||
| ELIF prevPhW(p) OR prevPhW(k) OR prevPhW(t) OR prevPhW(S) THEN | |||
| ChangePhoneme(r/2) | |||
| ELIF prevPhW(b) OR prevPhW(d) OR prevPhW(g) THEN | |||
| ChangePhoneme(r/2) | |||
| ELIF prevPhW(f) OR prevPhW(v) THEN | |||
| ChangePhoneme(r/2) | |||
| ENDIF | |||
| FMT(vwl_fr/r) | |||
| @@ -73,11 +89,11 @@ endphoneme | |||
| phoneme r2 // silent unless followed by vowel | |||
| liquid rhotic uvl | |||
| liquid rhotic vel | |||
| starttype #r endtype #r | |||
| lengthmod 7 | |||
| Vowelin f1=0 f2=1600 -300 300 f3=-200 80 | |||
| Vowelout f1=2 f2=1600 -300 300 f3=-300 80 | |||
| Vowelin f1=0 f2=1200 -500 500 f3=-200 100 len=65 | |||
| Vowelout f1=0 f2=1200 -500 500 f3=200 100 len=50 | |||
| lengthmod 2 | |||
| IF nextPh(isNotVowel) THEN | |||
| ChangePhoneme(NULL) | |||
| @@ -89,48 +105,51 @@ phoneme r2 // silent unless followed by vowel | |||
| endphoneme | |||
| phoneme r/2 // variant of [r] when not preceding a vowel | |||
| phoneme r/ // variant of [r] when not preceding a vowel | |||
| liquid rhotic vel | |||
| starttype #r endtype #r | |||
| Vowelout f1=2 f2=1600 -300 300 f3=-300 100 len=40 | |||
| Vowelout f1=0 f2=1150 -500 500 f3=200 100 len=30 | |||
| lengthmod 2 | |||
| PrevVowelEndings | |||
| VowelEnding(vwl_fr/r_@) | |||
| VowelEnding(vwl_fr/r_a) | |||
| VowelEnding(vwl_fr/r_e) | |||
| VowelEnding(vwl_fr/r_i) | |||
| VowelEnding(vwl_fr/r_o) | |||
| VowelEnding(vwl_fr/r_u) | |||
| EndSwitch | |||
| IF prevPh(isVowel) THEN | |||
| IF nextPh(isPause) THEN | |||
| FMT(vwl_fr/r_2) addWav(r3/rx, 20) | |||
| ELSE | |||
| FMT(vwl_fr/r_, -30) addWav(r3/rx, 20) | |||
| ENDIF | |||
| ENDIF | |||
| IF thisPh(isWordEnd) THEN | |||
| IF prevPhW(t) OR prevPhW(p) OR prevPhW(k) THEN | |||
| FMT(vwl_fr/trr) addWav(r3/rx, 15) | |||
| ELIF prevPhW(v) THEN | |||
| FMT(vwl_fr/r_, -40) | |||
| ELIF prevPhW(f) THEN | |||
| FMT(vwl_fr/r_, -10) addWav(r3/rx, 15) | |||
| ELIF prevPhW(d) THEN | |||
| FMT(vwl_fr/r_) addWav(r3/rx, 15) | |||
| ELIF prevPh(isNotVowel) THEN | |||
| FMT(vwl_fr/rr) addWav(r3/rx, 15) | |||
| ENDIF | |||
| FMT(vwl_fr/r_) addWav(r3/rx, 15) | |||
| ENDIF | |||
| FMT(vwl_fr/r_) | |||
| IF prevPh(isVowel) THEN | |||
| PrevVowelEndings | |||
| VowelEnding(vwl_fr/r_@) | |||
| VowelEnding(vwl_fr/r_a) | |||
| VowelEnding(vwl_fr/r_e) | |||
| VowelEnding(vwl_fr/r_i) | |||
| VowelEnding(vwl_fr/r_o) | |||
| VowelEnding(vwl_fr/r_u) | |||
| EndSwitch | |||
| ENDIF | |||
| IF nextPhW(n) OR nextPhW(n^) THEN | |||
| FMT(vwl_fr/r_n) addWav(r3/rx, 25) | |||
| ENDIF | |||
| FMT(vwl_fr/r_) addWav(r3/rx, 30) | |||
| endphoneme | |||
| phoneme r/2 | |||
| liquid rhotic | |||
| starttype #r endtype #r | |||
| palatal | |||
| Vowelin f1=0 f2=1200 -500 500 f3=-200 100 len=75 | |||
| CALL pre_post_r | |||
| FMT(vwl_fr/tr) addWav(r3/rx, 25) | |||
| endphoneme | |||
| phoneme l | |||
| liquid | |||
| liquid nopause | |||
| starttype #l endtype #l | |||
| lengthmod 7 | |||
| @@ -154,10 +173,9 @@ phoneme l | |||
| ENDIF | |||
| IF prevPh(isPause) OR thisPh(isWordStart) THEN | |||
| VowelEnding(NULL) | |||
| FMT(l/_l) | |||
| ENDIF | |||
| IF prevPh(r/2) THEN | |||
| IF prevPh(isRhotic) THEN | |||
| FMT(l/_l) | |||
| ENDIF | |||
| @@ -208,32 +226,25 @@ phoneme @ | |||
| endphoneme | |||
| phoneme @2 | |||
| vowel starttype #@ endtype #@ | |||
| length 160 | |||
| FMT(vowel/@_fr) | |||
| endphoneme | |||
| phoneme a | |||
| vowel starttype #a endtype #a | |||
| length 170 | |||
| IF prevPh(l) THEN | |||
| VowelStart(l/la, -15) | |||
| ENDIF | |||
| IF prevPhW(w) OR prevPhW(w/) THEN | |||
| FMT(vowel/a_5) | |||
| IF nextPh(isVowel) THEN | |||
| length 220 | |||
| ELSE | |||
| length 170 | |||
| ENDIF | |||
| FMT(vowel/a_6) | |||
| FMT(vowel/a_7) | |||
| endphoneme | |||
| phoneme e | |||
| vowel starttype #e endtype #e | |||
| length 170 | |||
| IF nextPh(isVowel) THEN | |||
| length 220 | |||
| ELSE | |||
| length 170 | |||
| ENDIF | |||
| IF nextPh(l/) THEN | |||
| VowelEnding(l/xl, -20) | |||
| @@ -250,10 +261,6 @@ phoneme E | |||
| vowel starttype #e endtype #e | |||
| length 170 | |||
| IF nextPh(r/2) THEN | |||
| VowelEnding(vwl_fr/r_e2) | |||
| ENDIF | |||
| IF nextPhW(j) THEN | |||
| length 190 | |||
| ENDIF | |||
| @@ -272,19 +279,18 @@ endphoneme | |||
| phoneme i | |||
| vowel starttype #i endtype #i | |||
| length 160 | |||
| IfNextVowelAppend(;) | |||
| FMT(vowel/i_2) | |||
| endphoneme | |||
| IF prevPhW(#r) AND nextPhW(isVowel) THEN | |||
| ChangePhoneme(j/) | |||
| ELIF nextPhW(isVowel) THEN | |||
| ChangePhoneme(j) | |||
| ELSE | |||
| length 160 | |||
| ENDIF | |||
| phoneme i- // shorter | |||
| vowel starttype #i endtype #i | |||
| length 110 | |||
| IfNextVowelAppend(;) | |||
| FMT(vowel/i_2) | |||
| FMT(vowel/i_8) | |||
| endphoneme | |||
| @@ -298,40 +304,70 @@ phoneme i: // longer than i | |||
| endphoneme | |||
| phoneme j/ // Short "i" between "r" and a vowel | |||
| vowel starttype #i endtype #i | |||
| palatal | |||
| IF nextPh(isVowel) THEN | |||
| NextVowelStarts | |||
| VowelStart(j/j@) | |||
| VowelStart(j/ja) | |||
| VowelStart(j/je) | |||
| VowelStart(j/ji) | |||
| VowelStart(j/jo) | |||
| VowelStart(j/ju) | |||
| EndSwitch | |||
| ELSE | |||
| ChangePhoneme(NULL) | |||
| ENDIF | |||
| endphoneme | |||
| phoneme o | |||
| vowel starttype #o endtype #o | |||
| length 170 | |||
| IF nextPh(isVowel) THEN | |||
| length 220 | |||
| ELSE | |||
| 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 | |||
| ChangePhoneme(O) | |||
| ENDIF | |||
| ELSE | |||
| IF nextPhW(isLiquid) AND next2Ph(isNotVowel) THEN | |||
| ChangePhoneme(O) | |||
| ELIF nextPhW(isNasal) AND next2Ph(isNotVowel) THEN | |||
| 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 | |||
| length 170 | |||
| IF nextPh(l/) THEN | |||
| VowelEnding(l/l_o) | |||
| IF nextPh(isVowel) THEN | |||
| length 220 | |||
| ELSE | |||
| length 170 | |||
| ENDIF | |||
| IF thisPh(isFinalVowel) THEN | |||
| @@ -344,15 +380,12 @@ endphoneme | |||
| phoneme O | |||
| vowel starttype #o endtype #o | |||
| length 180 | |||
| IF prevPhW(#r) THEN | |||
| VowelStart(vwl_fr/ro2) | |||
| IF nextPhW(#r) THEN | |||
| length 200 | |||
| ELSE | |||
| length 170 | |||
| ENDIF | |||
| IF nextPhW(r/2) THEN | |||
| VowelEnding(vwl_fr/r_o2) | |||
| ENDIF | |||
| FMT(vowel/o_mid2) | |||
| endphoneme | |||
| @@ -366,7 +399,11 @@ endphoneme | |||
| phoneme u | |||
| vowel starttype #u endtype #u | |||
| length 180 | |||
| IF nextPh(isVowel) OR nextPh(j) THEN | |||
| length 220 | |||
| ELSE | |||
| length 180 | |||
| ENDIF | |||
| FMT(vowel/u_bck2) | |||
| endphoneme | |||
| @@ -381,29 +418,19 @@ endphoneme | |||
| phoneme y | |||
| vowel starttype #u endtype #u | |||
| length 170 | |||
| IF nextPh(l/) THEN | |||
| VowelEnding(l/l_y, -30) | |||
| ENDIF | |||
| IF prevPh(#r) THEN | |||
| IF thisPh(isFinalVowel) THEN | |||
| VowelStart(vwl_fr/ry, -10) | |||
| ELSE | |||
| VowelStart(vwl_fr/ry) | |||
| ENDIF | |||
| ENDIF | |||
| IF nextPh(r/2) THEN | |||
| VowelEnding(vwl_fr/r_y) | |||
| IF nextPh(isVowel) THEN | |||
| length 200 | |||
| ELSE | |||
| length 170 | |||
| ENDIF | |||
| IF nextPhW(E~) THEN | |||
| FMT(vowel/y_2, -30) | |||
| IF nextPh(l/) THEN | |||
| VowelEnding(l/l_y) | |||
| ELIF nextPhW(E~) THEN | |||
| FMT(vowel/y, -30) | |||
| ENDIF | |||
| FMT(vowel/y_2) | |||
| FMT(vowel/y) | |||
| endphoneme | |||
| @@ -427,14 +454,6 @@ phoneme Y | |||
| vowel starttype #@ endtype #@ | |||
| length 170 | |||
| IF prevPh(l) THEN | |||
| VowelStart(l/l@, -20) | |||
| ENDIF | |||
| IF nextPh(l/) THEN | |||
| VowelEnding(l/l_@, -20) | |||
| ENDIF | |||
| IF thisPh(isFinalVowel) THEN | |||
| IF thisPh(isWordEnd) THEN | |||
| FMT(vowel/y#) | |||
| @@ -458,8 +477,7 @@ endphoneme | |||
| phoneme w | |||
| vowel starttype #u endtype #u | |||
| IF prevPhW(#r) OR prevPhW(#l) THEN | |||
| IF prevPh(#r) OR prevPhW(#l) THEN | |||
| NextVowelStarts | |||
| VowelStart(w/w@) | |||
| VowelStart(w/wa, -10) | |||
| @@ -479,16 +497,19 @@ phoneme w/ | |||
| endphoneme | |||
| phoneme w^a | |||
| vowel starttype #o endtype #a | |||
| length 200 | |||
| FMT(vdiph/oa_fr) | |||
| endphoneme | |||
| phoneme w^i | |||
| vowel starttype #u endtype #i | |||
| length 240 | |||
| IF prevPhW(l) THEN | |||
| VowelStart(l/lu, -20) | |||
| ENDIF | |||
| IF prevPhW(#r) THEN | |||
| VowelStart(vwl_fr/ry) | |||
| ENDIF | |||
| IfNextVowelAppend(;) | |||
| FMT(vdiph/yi_fr) | |||
| endphoneme | |||
| @@ -497,17 +518,6 @@ endphoneme | |||
| phoneme A~ | |||
| vowel starttype #a endtype #a | |||
| length 190 | |||
| IF nextPh(r/2) THEN | |||
| VowelEnding(vwl_fr/r_an) | |||
| ENDIF | |||
| IF prevPhW(#r) THEN | |||
| IF thisPh(isFinalVowel) THEN | |||
| VowelStart(vwl_fr/raa, -15) | |||
| ELSE | |||
| VowelStart(vwl_fr/raa, -10) | |||
| ENDIF | |||
| ENDIF | |||
| FMT(vnasal/aa_n4) | |||
| endphoneme | |||
| @@ -586,8 +596,13 @@ phoneme b | |||
| FMT(b/xb) | |||
| ENDIF | |||
| IF nextPh(isPause2) OR nextPh(#l) THEN | |||
| IF nextPh(isPause2) OR nextPh(l) THEN | |||
| FMT(b/b_) addWav(x/b_) | |||
| ELIF nextPh(l/) THEN | |||
| FMT(b/b) | |||
| ELIF nextPh(#r) THEN | |||
| length 40 | |||
| FMT(b/b) addWav(x/b, 50) | |||
| ENDIF | |||
| FMT(b/b) addWav(x/b, 70) | |||
| @@ -605,12 +620,8 @@ phoneme d | |||
| FMT(d/xd) | |||
| ENDIF | |||
| IF nextPh(isPause2) OR nextPh(isPause) THEN | |||
| IF nextPh(isPause2) THEN | |||
| FMT(d/d_) addWav(x/d_, 50) | |||
| ELIF nextPh(#r) THEN | |||
| FMT(d/dr) addWav(x/d, 30) | |||
| ELIF prevPh(isPause) THEN | |||
| FMT(d/d) addWav(x/d, 50) | |||
| ENDIF | |||
| FMT(d/d) addWav(x/d, 40) | |||
| @@ -630,6 +641,8 @@ phoneme g | |||
| IF nextPh(isPause2) THEN | |||
| FMT(g/g_) addWav(x/g_) | |||
| ELIF nextPhW(#r) THEN | |||
| FMT(g2/g) addWav(x/g, 20) | |||
| ENDIF | |||
| FMT(g/g) addWav(x/g, 20) | |||
| @@ -650,9 +663,12 @@ phoneme k | |||
| WAV(ustop/ki, 45) | |||
| ELIF nextPh(#l) THEN | |||
| WAV(ustop/kl, 40) | |||
| ELIF nextPh(#r) THEN | |||
| length 50 | |||
| WAV(ustop/k, 50) | |||
| ENDIF | |||
| WAV(ustop/k, 35) | |||
| WAV(ustop/k, 40) | |||
| endphoneme | |||
| @@ -680,6 +696,9 @@ phoneme p | |||
| WAV(ustop/p_unasp, 60) | |||
| ELIF nextPh(#l) THEN | |||
| WAV(ustop/pl, 30) | |||
| ELIF nextPh(#r) THEN | |||
| length 40 | |||
| WAV(ustop/p_, 60) | |||
| ENDIF | |||
| WAV(ustop/p_unasp_, 90) | |||
| endphoneme | |||
| @@ -738,13 +757,14 @@ phoneme t | |||
| vls alv stop | |||
| voicingswitch d | |||
| lengthmod 2 | |||
| Vowelin f1=0 f2=1600 -300 300 f3=-100 80 | |||
| Vowelout f1=0 f2=1600 -300 250 f3=-100 80 brk | |||
| Vowelin f1=0 f2=1700 -300 300 f3=-100 80 | |||
| Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | |||
| IF nextPh(isPause2) THEN | |||
| WAV(ustop/t_, 40) | |||
| ELIF nextPh(r/2) THEN | |||
| WAV(ustop/t_short, 50) | |||
| ELIF nextPh(#r) THEN | |||
| length 40 | |||
| WAV(ustop/t_short_, 40) | |||
| ENDIF | |||
| WAV(ustop/t_short, 40) | |||
| @@ -757,7 +777,7 @@ phoneme t2 // silent unless followed by vowel | |||
| Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 | |||
| lengthmod 2 | |||
| IF nextPh(isVowel) OR nextPh(w) THEN | |||
| IF nextPh(isVowel) OR nextPh(w) OR nextPh(j) THEN | |||
| WAV(ustop/t_short, 30) | |||
| ELSE | |||
| ChangePhoneme(NULL) | |||
| @@ -797,7 +817,7 @@ phoneme v | |||
| ENDIF | |||
| IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN | |||
| Length 70 | |||
| ELIF nextPhW(w) THEN | |||
| ELIF nextPhW(w) OR nextPhW(#r) THEN | |||
| Length 50 | |||
| ENDIF | |||
| FMT(voc/v) addWav(vocw/v, 60) | |||
| @@ -828,8 +848,8 @@ endphoneme | |||
| phoneme z2 // silent unless followed by vowel | |||
| vcd alv frc sibilant | |||
| IF nextPh(isVowel) OR nextPh(w/) THEN | |||
| FMT(voc/z_, -20) addWav(ufric/s_, 40) | |||
| IF nextPh(isVowel) OR nextPh(w/) OR nextPh(j) THEN | |||
| FMT(voc/z, -20) addWav(ufric/s, 40) | |||
| ELSE | |||
| ChangePhoneme(NULL) | |||
| ENDIF | |||
| @@ -17,10 +17,19 @@ phoneme i | |||
| vowel starttype #i endtype #i | |||
| length 130 | |||
| IfNextVowelAppend(;) | |||
| FMT(vowel/ii_6) | |||
| endphoneme | |||
| phoneme i: | |||
| vowel starttype #i endtype #i | |||
| length 230 | |||
| IfNextVowelAppend(;) | |||
| ChangeIfNotStressed(i) | |||
| FMT(vowel/i_4) | |||
| endphoneme | |||
| phoneme I | |||
| vowel starttype #i endtype #i | |||
| length 130 | |||
| @@ -28,74 +37,98 @@ phoneme I | |||
| FMT(vowel/ii) | |||
| endphoneme | |||
| phoneme e | |||
| vowel starttype #e endtype #e | |||
| length 130 | |||
| ChangeIfNotStressed(E) | |||
| FMT(vowel/e_e) | |||
| phoneme I: | |||
| vowel starttype #i endtype #i | |||
| length 230 | |||
| IfNextVowelAppend(;) | |||
| ChangeIfNotStressed(I) | |||
| FMT(vowel/ii) | |||
| endphoneme | |||
| phoneme E | |||
| vowel starttype #e endtype #e | |||
| length 130 | |||
| FMT(vowel/e_mid) | |||
| endphoneme | |||
| phoneme a | |||
| vowel starttype #a endtype #a | |||
| phoneme E: | |||
| vowel starttype #e endtype #e | |||
| length 130 | |||
| ChangeIfNotStressed(&) | |||
| FMT(vowel/a_3) | |||
| FMT(vowel/e_e) | |||
| endphoneme | |||
| phoneme & | |||
| phoneme a | |||
| vowel starttype #@ endtype #@ | |||
| length 130 | |||
| FMT(vowel/a#_2) | |||
| endphoneme | |||
| phoneme o | |||
| vowel starttype #o endtype #o | |||
| length 130 | |||
| ChangeIfNotStressed(O) | |||
| FMT(vdiph2/o_oo) | |||
| phoneme a: | |||
| vowel starttype #a endtype #a | |||
| length 230 | |||
| ChangeIfNotStressed(a) | |||
| FMT(vowel/aa_8) | |||
| endphoneme | |||
| phoneme O | |||
| vowel starttype #o endtype #o | |||
| length 130 | |||
| FMT(vowel/oo_5) | |||
| endphoneme | |||
| phoneme O: | |||
| vowel starttype #o endtype #o | |||
| length 230 | |||
| ChangeIfNotStressed(O) | |||
| FMT(vdiph2/o_oo) | |||
| endphoneme | |||
| phoneme u | |||
| vowel starttype #u endtype #u | |||
| length 130 | |||
| FMT(vowel/u_2) | |||
| endphoneme | |||
| phoneme u: | |||
| vowel starttype #u endtype #u | |||
| length 230 | |||
| ChangeIfNotStressed(u) | |||
| FMT(vowel/u_bck) | |||
| endphoneme | |||
| phoneme y | |||
| vowel starttype #i endtype #i | |||
| vowel starttype #@ endtype #@ | |||
| length 130 | |||
| FMT(vowel/y##) | |||
| endphoneme | |||
| phoneme y: | |||
| vowel starttype #i endtype #i | |||
| length 230 | |||
| ChangeIfNotStressed(y) | |||
| FMT(vowel/yy_4) | |||
| endphoneme | |||
| phoneme y# | |||
| phoneme W | |||
| vowel starttype #@ endtype #@ | |||
| length 130 | |||
| FMT(vowel/y##) | |||
| FMT(vowel/y#_3) | |||
| endphoneme | |||
| phoneme W | |||
| phoneme W: | |||
| vowel starttype #@ endtype #@ | |||
| length 130 | |||
| ChangeIfNotStressed(W) | |||
| FMT(vowel/y#_3) | |||
| endphoneme | |||
| @@ -106,36 +139,82 @@ phoneme aI | |||
| FMT(vdiph/ai_7) | |||
| endphoneme | |||
| phoneme aI: | |||
| vowel starttype #a endtype #i | |||
| length 230 | |||
| ChangeIfNotStressed(aI) | |||
| FMT(vdiph/ai_7) | |||
| endphoneme | |||
| phoneme eI | |||
| vowel starttype #e endtype #i | |||
| length 170 | |||
| FMT(vdiph/ei) | |||
| endphoneme | |||
| phoneme eI: | |||
| vowel starttype #e endtype #i | |||
| length 230 | |||
| ChangeIfNotStressed(eI) | |||
| FMT(vdiph/ei) | |||
| endphoneme | |||
| phoneme aU | |||
| vowel starttype #a endtype #u | |||
| length 170 | |||
| FMT(vdiph/au_4) | |||
| FMT(vdiph/aau) | |||
| endphoneme | |||
| phoneme aU: | |||
| vowel starttype #a endtype #u | |||
| length 230 | |||
| ChangeIfNotStressed(aU) | |||
| FMT(vdiph/aau) | |||
| endphoneme | |||
| phoneme oU | |||
| vowel starttype #o endtype #u | |||
| length 170 | |||
| FMT(vdiph/ou_3) | |||
| endphoneme | |||
| phoneme oU2 // long version for óf | |||
| phoneme oU: // long version for óf | |||
| vowel starttype #o endtype #u | |||
| length 230 | |||
| ChangeIfNotStressed(oU) | |||
| FMT(vdiph/ou_3) | |||
| endphoneme | |||
| phoneme Yy | |||
| vowel starttype #@ endtype #i | |||
| length 150 | |||
| FMT(vdiph/y#i_2) | |||
| endphoneme | |||
| phoneme Yy: | |||
| vowel starttype #@ endtype #i | |||
| length 220 | |||
| ChangeIfNotStressed(Yy) | |||
| FMT(vdiph/y#i_2) | |||
| endphoneme | |||
| phoneme OI | |||
| vowel starttype #o endtype #i | |||
| length 210 | |||
| FMT(vdiph/oi) | |||
| endphoneme | |||
| phoneme yI | |||
| vowel starttype #i endtype #i | |||
| length 180 | |||
| FMT(vowel/yy_4) | |||
| endphoneme | |||
| // Consonants | |||
| @@ -1677,5 +1677,11 @@ include ph_punjabi | |||
| phonemetable prs base | |||
| include ph_dari | |||
| phonemetable sl sk | |||
| include ph_slovenian | |||
| phonemetable gd base | |||
| include ph_s_gaelic | |||
| phonemetable bg pl | |||
| include ph_bulgarian | |||
| @@ -50,7 +50,7 @@ typedef struct { | |||
| const char *mnem; | |||
| int value; | |||
| } MNEM_TAB; | |||
| int LookupMnem(MNEM_TAB *table, char *string); | |||
| int LookupMnem(MNEM_TAB *table, const char *string); | |||
| @@ -50,7 +50,7 @@ typedef struct { | |||
| const char *mnem; | |||
| int value; | |||
| } MNEM_TAB; | |||
| int LookupMnem(MNEM_TAB *table, char *string); | |||
| int LookupMnem(MNEM_TAB *table, const char *string); | |||
| @@ -2,7 +2,7 @@ | |||
| [Setup] | |||
| AppName=eSpeak | |||
| AppVerName=eSpeak version 1.42 | |||
| AppVerName=eSpeak version 1.43.24 | |||
| AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). | |||
| WindowVisible=yes | |||
| @@ -94,6 +94,8 @@ var | |||
| UILanguage: Integer; | |||
| UIVoice: String; | |||
| Page: TInputQueryWizardPage; | |||
| voices_installed: array [0..200] of String; | |||
| n_voices_installed: Integer; | |||
| const | |||
| sEspeak = 'eSpeak-'; | |||
| @@ -329,6 +331,7 @@ end; | |||
| procedure SetupVoice(Voice: String; Index: Integer); | |||
| var | |||
| ix: Integer; | |||
| RegVoice2: String; | |||
| RegVoice2a: String; | |||
| VoiceUC: String; | |||
| @@ -348,6 +351,16 @@ begin | |||
| VoiceUC := 'default' | |||
| else | |||
| VoiceUC := Uppercase(Voice); | |||
| // check for duplicate voice names | |||
| for ix := 0 to n_voices_installed - 1 do begin | |||
| if voices_installed[ix] = VoiceUC then | |||
| Exit; | |||
| end; | |||
| if n_voices_installed < 200 then begin | |||
| voices_installed[n_voices_installed] := VoiceUC; | |||
| n_voices_installed := n_voices_installed + 1; | |||
| end; | |||
| RegWriteStringValue(HKEY_LOCAL_MACHINE,RegVoice2,'',sEspeak+VoiceUC); | |||
| RegWriteStringValue(HKEY_LOCAL_MACHINE,RegVoice2,'CLSID','{BE985C8D-BE32-4A22-AA93-55C16A6D1D91}'); | |||
| @@ -439,7 +452,7 @@ begin | |||
| Page.Values[0] := Format('%s',[UIVoice]); | |||
| Page.Values[1] := Format('%s',[voice2]); | |||
| n_voices_installed := 0; | |||
| end; | |||
| procedure ClearRegistry; | |||
| @@ -1,7 +1,7 @@ | |||
| [Setup] | |||
| AppName=eSpeakEdit | |||
| AppVerName=eSpeakEdit version 1.42 | |||
| AppVerName=eSpeakEdit version 1.43.24 | |||
| DefaultDirName={pf}\eSpeak | |||
| DefaultGroupName=eSpeak | |||
| OutputBaseFilename=setup_espeakedit | |||
| @@ -48,7 +48,7 @@ typedef struct { | |||
| const char *mnem; | |||
| int value; | |||
| } MNEM_TAB; | |||
| int LookupMnem(MNEM_TAB *table, char *string); | |||
| int LookupMnem(MNEM_TAB *table, const char *string); | |||
| @@ -49,7 +49,7 @@ typedef struct { | |||
| const char *mnem; | |||
| int value; | |||
| } MNEM_TAB; | |||
| int LookupMnem(MNEM_TAB *table, char *string); | |||
| int LookupMnem(MNEM_TAB *table, const char *string); | |||
| @@ -52,7 +52,7 @@ typedef struct { | |||
| const char *mnem; | |||
| int value; | |||
| } MNEM_TAB; | |||
| int LookupMnem(MNEM_TAB *table, char *string); | |||
| int LookupMnem(MNEM_TAB *table, const char *string); | |||
| @@ -402,9 +402,11 @@ STDMETHODIMP CTTSEngObj::SetObjectToken(ISpObjectToken * pToken) | |||
| espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,100,path_install,1); | |||
| espeak_SetSynthCallback(SynthCallback); | |||
| initialised = 1; | |||
| g_voice_name[0] = 0; | |||
| // g_voice_name[0] = 0; | |||
| } | |||
| strcpy(g_voice_name, voice_name); | |||
| espeak_SetVoiceByName(g_voice_name); | |||
| return hr; | |||
| } /* CTTSEngObj::SetObjectToken */ | |||
| @@ -177,6 +177,35 @@ enum { | |||
| }; | |||
| enum { | |||
| kTUNE = 1, | |||
| kENDTUNE, | |||
| kTUNE_PREHEAD, | |||
| kTUNE_ONSET, | |||
| kTUNE_HEAD, | |||
| kTUNE_HEADEXTEND, | |||
| kTUNE_HEADLAST, | |||
| kTUNE_UNSTRESSED, | |||
| kTUNE_NUCLEUS0, | |||
| kTUNE_NUCLEUS1, | |||
| kTUNE_SPLIT, | |||
| }; | |||
| static keywtab_t k_intonation[] = { | |||
| {"tune", 0, kTUNE}, | |||
| {"endtune", 0, kENDTUNE}, | |||
| {"prehead", 0, kTUNE_PREHEAD}, | |||
| {"onset", 0, kTUNE_ONSET}, | |||
| {"head", 0, kTUNE_HEAD}, | |||
| {"headextend", 0, kTUNE_HEADEXTEND}, | |||
| {"headlast", 0, kTUNE_HEADLAST}, | |||
| {"unstressed",0, kTUNE_UNSTRESSED}, | |||
| {"nucleus0", 0, kTUNE_NUCLEUS0}, | |||
| {"nucleus1", 0, kTUNE_NUCLEUS1}, | |||
| {"split", 0, kTUNE_SPLIT}, | |||
| {NULL, 0, -1} | |||
| }; | |||
| static keywtab_t keywords[] = { | |||
| {"vowel", tPHONEME_TYPE, phVOWEL}, | |||
| {"liquid", tPHONEME_TYPE, phLIQUID}, | |||
| @@ -271,6 +300,7 @@ static keywtab_t keywords[] = { | |||
| {"rhotic", tPHONEME_FLAG, phRHOTIC}, | |||
| {"nonsyllabic",tPHONEME_FLAG, phNONSYLLABIC}, | |||
| {"lengthenstop",tPHONEME_FLAG, phLENGTHENSTOP}, | |||
| {"nopause", tPHONEME_FLAG, phNOPAUSE}, | |||
| // voiced / unvoiced | |||
| {"vcd", tPHONEME_FLAG, phVOICED}, | |||
| @@ -310,7 +340,7 @@ static keywtab_t keywords[] = { | |||
| static keywtab_t *keyword_tabs[] = { | |||
| keywords, k_conditions, k_properties }; | |||
| keywords, k_conditions, k_properties, k_intonation }; | |||
| static PHONEME_TAB *phoneme_out; | |||
| @@ -621,6 +651,7 @@ enum { | |||
| tKEYWORD, | |||
| tCONDITION, | |||
| tPROPERTIES, | |||
| tINTONATION, | |||
| }; | |||
| int item_type; | |||
| @@ -982,7 +1013,7 @@ static void error(const char *format, const char *string) | |||
| static void Error(const char *string) | |||
| {//================================== | |||
| error(string,NULL); | |||
| error("%s",string); | |||
| } | |||
| static FILE *fopen_log(FILE *f_log, const char *fname,const char *access) | |||
| @@ -1149,6 +1180,15 @@ static void unget_char(unsigned int c) | |||
| } | |||
| int CheckNextChar() | |||
| {//================ | |||
| int c; | |||
| while(((c = get_char()) == ' ') || (c == '\t')); | |||
| unget_char(c); | |||
| return(c); | |||
| } // end of CheckNextChar | |||
| static int NextItem(int type) | |||
| {//========================== | |||
| int acc; | |||
| @@ -1243,7 +1283,12 @@ static int NextItem(int type) | |||
| p++; | |||
| } | |||
| if(!isdigit(*p)) | |||
| error("Expected a number",NULL); | |||
| { | |||
| if((type == tNUMBER) && (*p == '-')) | |||
| error("Expected an unsigned number",NULL); | |||
| else | |||
| error("Expected a number",NULL); | |||
| } | |||
| while(isdigit(*p)) | |||
| { | |||
| acc *= 10; | |||
| @@ -1254,7 +1299,7 @@ static int NextItem(int type) | |||
| } | |||
| if((type >= tKEYWORD) && (type <= tPROPERTIES)) | |||
| if((type >= tKEYWORD) && (type <= tINTONATION)) | |||
| { | |||
| pk = keyword_tabs[type-tKEYWORD]; | |||
| while(pk->mnem != NULL) | |||
| @@ -3020,6 +3065,7 @@ static void CompilePhonemeFiles() | |||
| } // end of CompilePhonemeFiles | |||
| static void CompilePhonemeData2(const char *source) | |||
| {//================================================ | |||
| char fname[sizeof(path_source)+40]; | |||
| @@ -3110,7 +3156,7 @@ memset(markers_used,0,sizeof(markers_used)); | |||
| if(gui_flag) | |||
| { | |||
| progress = new wxProgressDialog(_T("Phonemes"),_T(""),progress_max); | |||
| progress = new wxProgressDialog(_T("Compiling"),_T(""),progress_max); | |||
| } | |||
| else | |||
| { | |||
| @@ -3260,6 +3306,235 @@ void CompileMbrola() | |||
| static const TUNE default_tune = { | |||
| 0, {0,0,0,0}, | |||
| {0, 40, 24, 8, 0, 0, 0, 0}, | |||
| 46, 57, 255, 78, 50, 255, | |||
| PITCHfall, 0, | |||
| 3, 5, | |||
| 7, 7, 0, | |||
| PITCHfall, 64, 8, | |||
| PITCHfall, 70, 18, 24, 12, | |||
| PITCHfall, 70, 18, 24, 12, | |||
| {0,0,0,0,0,0,0,0,0,0} | |||
| }; | |||
| TUNE new_tune; | |||
| #define N_TUNE_NAMES 100 | |||
| static MNEM_TAB envelope_names[] = { | |||
| {"fall", 0}, | |||
| {"rise", 1}, | |||
| {"fall_rise", 2}, | |||
| {"fall_rise2", 3}, | |||
| {"rise_fall", 4}, | |||
| {NULL, -1} }; | |||
| // env_fallrise3, env_fallrise3, | |||
| // env_fallrise4, env_fallrise4, | |||
| // env_fall2, env_fall2, | |||
| // env_rise2, env_rise2, | |||
| // env_risefallrise, env_risefallrise | |||
| int LookupEnvelope(const char *name) | |||
| {//================================= | |||
| return(LookupMnem(envelope_names, name)); | |||
| } | |||
| void CompileIntonation() | |||
| {//===================== | |||
| int ix; | |||
| char *p; | |||
| char c; | |||
| int keyword; | |||
| int compiling_tune = 0; | |||
| int n_tune_names = 0; | |||
| int done_split; | |||
| int n_tunes = 0; | |||
| FILE *f_out; | |||
| wxString report; | |||
| char name[5]; | |||
| unsigned int tune_names[N_TUNE_NAMES]; | |||
| char buf[sizeof(path_source)+120]; | |||
| error_count = 0; | |||
| sprintf(buf,"%s%s",path_source,"error_intonation"); | |||
| if((f_errors = fopen(buf,"w")) == NULL) | |||
| f_errors = stderr; | |||
| sprintf(buf,"%sintonation",path_source); | |||
| f_in = fopen_log(f_errors, buf, "r"); | |||
| if(f_in == NULL) | |||
| { | |||
| fclose(f_errors); | |||
| return; | |||
| } | |||
| sprintf(buf,"%s/intonations",path_home); | |||
| f_out = fopen_log(f_errors, buf, "w"); | |||
| if(f_out == NULL) | |||
| { | |||
| fclose(f_in); | |||
| fclose(f_errors); | |||
| return; | |||
| } | |||
| // make a list of the tune names | |||
| while(!feof(f_in)) | |||
| { | |||
| if(fgets(buf,sizeof(buf),f_in) == NULL) | |||
| break; | |||
| if((memcmp(buf,"tune",4)==0) && isspace(buf[4])) | |||
| { | |||
| p = &buf[5]; | |||
| while(isspace(*p)) p++; | |||
| ix = 0; | |||
| while((ix < int(sizeof(name) - 1)) && !isspace(*p)) | |||
| { | |||
| name[ix++] = *p++; | |||
| } | |||
| name[ix] = 0; | |||
| tune_names[n_tune_names++] = StringToWord(name); | |||
| if(n_tune_names >= N_TUNE_NAMES) | |||
| break; | |||
| } | |||
| } | |||
| rewind(f_in); | |||
| linenum = 1; | |||
| while(!feof(f_in)) | |||
| { | |||
| keyword = NextItem(tINTONATION); | |||
| switch(keyword) | |||
| { | |||
| case kTUNE: | |||
| if(compiling_tune) | |||
| { | |||
| } | |||
| compiling_tune = 1; | |||
| n_tunes++; | |||
| done_split = 0; | |||
| memcpy(&new_tune, &default_tune, sizeof(TUNE)); | |||
| NextItem(tSTRING); | |||
| new_tune.name = StringToWord(item_string); | |||
| fprintf(f_errors,"tune %s\n",WordToString(new_tune.name)); | |||
| break; | |||
| case kENDTUNE: | |||
| compiling_tune = 0; | |||
| fwrite(&new_tune, 1, sizeof(new_tune), f_out); | |||
| break; | |||
| case kTUNE_PREHEAD: | |||
| new_tune.prehead_start = NextItem(tNUMBER); | |||
| new_tune.prehead_end = NextItem(tNUMBER); | |||
| break; | |||
| case kTUNE_HEAD: | |||
| new_tune.head_max_steps = NextItem(tNUMBER); | |||
| new_tune.head_start = NextItem(tNUMBER); | |||
| new_tune.head_end = NextItem(tNUMBER); | |||
| NextItem(tSTRING); | |||
| if((ix = LookupEnvelope(item_string)) < 0) | |||
| { | |||
| error("Bad envelope name: '%s'",item_string); | |||
| } | |||
| break; | |||
| case kTUNE_HEADEXTEND: | |||
| // up to 8 numbers | |||
| for(ix=0; ix < int(sizeof(new_tune.headextend)); ix++) | |||
| { | |||
| if(!isdigit(c = CheckNextChar()) && (c != '-')) | |||
| break; | |||
| new_tune.headextend[ix] = (NextItem(tSIGNEDNUMBER) * 64) / 100; // convert from percentage to 64ths | |||
| } | |||
| new_tune.n_headextend = ix; // number of values | |||
| break; | |||
| case kTUNE_UNSTRESSED: | |||
| new_tune.unstressed_start = NextItem(tSIGNEDNUMBER); | |||
| new_tune.unstressed_end = NextItem(tSIGNEDNUMBER); | |||
| break; | |||
| case kTUNE_NUCLEUS0: | |||
| NextItem(tSTRING); | |||
| if((ix = LookupEnvelope(item_string)) < 0) | |||
| { | |||
| error("Bad envelope name: '%s'",item_string); | |||
| break; | |||
| } | |||
| new_tune.nucleus0_env = ix; | |||
| new_tune.nucleus0_max = NextItem(tNUMBER); | |||
| new_tune.nucleus0_min = NextItem(tNUMBER); | |||
| break; | |||
| case kTUNE_NUCLEUS1: | |||
| NextItem(tSTRING); | |||
| if((ix = LookupEnvelope(item_string)) < 0) | |||
| { | |||
| error("Bad envelope name: '%s'",item_string); | |||
| break; | |||
| } | |||
| new_tune.nucleus1_env = ix; | |||
| new_tune.nucleus1_max = NextItem(tNUMBER); | |||
| new_tune.nucleus1_min = NextItem(tNUMBER); | |||
| new_tune.tail_start = NextItem(tNUMBER); | |||
| new_tune.tail_end = NextItem(tNUMBER); | |||
| if(!done_split) | |||
| { | |||
| new_tune.split_nucleus_env = ix; | |||
| new_tune.split_nucleus_max = new_tune.nucleus1_max; | |||
| new_tune.split_nucleus_min = new_tune.nucleus1_min; | |||
| new_tune.split_tail_start = new_tune.tail_start; | |||
| new_tune.split_tail_end = new_tune.tail_end; | |||
| } | |||
| break; | |||
| case kTUNE_SPLIT: | |||
| NextItem(tSTRING); | |||
| if((ix = LookupEnvelope(item_string)) < 0) | |||
| { | |||
| error("Bad envelope name: '%s'",item_string); | |||
| break; | |||
| } | |||
| new_tune.split_nucleus_env = ix; | |||
| new_tune.split_nucleus_max = NextItem(tNUMBER); | |||
| new_tune.split_nucleus_min = NextItem(tNUMBER); | |||
| new_tune.split_tail_start = NextItem(tNUMBER); | |||
| new_tune.split_tail_end = NextItem(tNUMBER); | |||
| done_split = 1; | |||
| break; | |||
| default: | |||
| error("Unexpected: '%s'",item_string); | |||
| break; | |||
| } | |||
| } | |||
| fclose(f_in); | |||
| fclose(f_out); | |||
| fclose(f_errors); | |||
| report.Printf(_T("Compiled %d intonation tunes: %d errors."),n_tunes, error_count); | |||
| wxLogStatus(report); | |||
| } // end of CompileIntonation | |||
| void CompilePhonemeData() | |||
| { | |||
| CompilePhonemeData2("phonemes"); | |||
| @@ -44,9 +44,6 @@ extern char word_phonemes[N_WORD_PHONEMES]; // a word translated into phoneme | |||
| static int linenum; | |||
| static int error_count; | |||
| static int transpose_offset; // transpose character range for LookupDictList() | |||
| static int transpose_min; | |||
| static int transpose_max; | |||
| static int text_mode = 0; | |||
| static int debug_flag = 0; | |||
| static int error_need_dictionary = 0; | |||
| @@ -55,6 +52,15 @@ static int hash_counts[N_HASH_DICT]; | |||
| static char *hash_chains[N_HASH_DICT]; | |||
| static char letterGroupsDefined[N_LETTER_GROUPS]; | |||
| MNEM_TAB mnem_rules[] = { | |||
| {"w_alt2", 0x12}, | |||
| {"w_alt3", 0x13}, | |||
| {"w_alt", 0x11}, // note: put longer names before their sub-strings | |||
| {"p_alt2", 0x22}, | |||
| {"p_alt3", 0x23}, | |||
| {"p_alt", 0x21}, | |||
| {NULL, -1} }; | |||
| MNEM_TAB mnem_flags[] = { | |||
| // these in the first group put a value in bits0-3 of dictionary_flags | |||
| {"$1", 0x41}, // stress on 1st syllable | |||
| @@ -89,9 +95,10 @@ MNEM_TAB mnem_flags[] = { | |||
| // language specific | |||
| {"$double", 19}, // IT double the initial consonant of next word | |||
| {"$alt", 20}, // use alternative pronunciation | |||
| {"$alt1", 20}, // synonym for $alt | |||
| {"$alt2", 21}, | |||
| {"$combine", 22}, // Combine with the next word | |||
| {"$alt3", 23}, | |||
| {"$alt3", 22}, | |||
| {"$combine", 23}, // Combine with the next word | |||
| {"$dot", 24}, // ignore '.' after this word (abbreviation) | |||
| {"$hasdot", 25}, // use this pronunciation if there is a dot after the word | |||
| @@ -112,6 +119,7 @@ MNEM_TAB mnem_flags[] = { | |||
| {"$capital", 0x29}, /* use this pronunciation if initial letter is upper case */ | |||
| {"$allcaps", 0x2a}, /* use this pronunciation if initial letter is upper case */ | |||
| {"$accent", 0x2b}, // character name is base-character name + accent name | |||
| {"$sentence",0x2d}, // only if this clause is a sentence (i.e. terminator is {. ? !} not {, ; :} | |||
| // doesn't set dictionary_flags | |||
| {"$?", 100}, // conditional rule, followed by byte giving the condition number | |||
| @@ -143,27 +151,6 @@ int isspace2(unsigned int c) | |||
| } | |||
| static const char *LookupMnem2(MNEM_TAB *table, int value) | |||
| {//======================================================= | |||
| while(table->mnem != NULL) | |||
| { | |||
| if(table->value == value) | |||
| return(table->mnem); | |||
| table++; | |||
| } | |||
| return(""); | |||
| } | |||
| char *print_dictionary_flags(unsigned int *flags) | |||
| {//============================================== | |||
| static char buf[20]; | |||
| sprintf(buf,"%s 0x%x/%x",LookupMnem2(mnem_flags,(flags[0] & 0xf)+0x40), flags[0], flags[1]); | |||
| return(buf); | |||
| } | |||
| static FILE *fopen_log(const char *fname,const char *access) | |||
| {//================================================== | |||
| @@ -179,9 +166,8 @@ static FILE *fopen_log(const char *fname,const char *access) | |||
| } | |||
| #ifdef OPT_FORMAT | |||
| static const char *lookup_mnem(MNEM_TAB *table, int value) | |||
| //======================================================== | |||
| const char *LookupMnemName(MNEM_TAB *table, const int value) | |||
| //========================================================== | |||
| /* Lookup a mnemonic string in a table, return its name */ | |||
| { | |||
| while(table->mnem != NULL) | |||
| @@ -190,9 +176,181 @@ static const char *lookup_mnem(MNEM_TAB *table, int value) | |||
| return(table->mnem); | |||
| table++; | |||
| } | |||
| return("??"); /* not found */ | |||
| } /* end of mnem */ | |||
| #endif | |||
| return(""); /* not found */ | |||
| } /* end of LookupMnemValue */ | |||
| char *print_dictionary_flags(unsigned int *flags) | |||
| {//============================================== | |||
| static char buf[20]; | |||
| sprintf(buf,"%s 0x%x/%x",LookupMnemName(mnem_flags,(flags[0] & 0xf)+0x40), flags[0], flags[1]); | |||
| return(buf); | |||
| } | |||
| char *DecodeRule(const char *group_chars, int group_length, char *rule) | |||
| {//==================================================================== | |||
| /* Convert compiled match template to ascii */ | |||
| unsigned char rb; | |||
| unsigned char c; | |||
| char *p; | |||
| int ix; | |||
| int match_type; | |||
| int finished=0; | |||
| int value; | |||
| int linenum=0; | |||
| int flags; | |||
| int suffix_char; | |||
| int condition_num=0; | |||
| const char *name; | |||
| char buf[60]; | |||
| char buf_pre[60]; | |||
| char suffix[20]; | |||
| static char output[60]; | |||
| static char symbols[] = {' ',' ',' ',' ',' ',' ',' ',' ',' ', | |||
| '@','&','%','+','#','S','D','Z','A','L','!',' ','?','?','J','N','K','V','?','T','X','?','W'}; | |||
| static char symbols_lg[] = {'A','B','C','H','F','G','Y'}; | |||
| match_type = 0; | |||
| buf_pre[0] = 0; | |||
| for(ix=0; ix<group_length; ix++) | |||
| { | |||
| buf[ix] = group_chars[ix]; | |||
| } | |||
| buf[ix] = 0; | |||
| p = &buf[strlen(buf)]; | |||
| while(!finished) | |||
| { | |||
| rb = *rule++; | |||
| if(rb <= RULE_LINENUM) | |||
| { | |||
| switch(rb) | |||
| { | |||
| case 0: | |||
| case RULE_PHONEMES: | |||
| finished=1; | |||
| break; | |||
| case RULE_PRE: | |||
| match_type = RULE_PRE; | |||
| *p = 0; | |||
| p = buf_pre; | |||
| break; | |||
| case RULE_POST: | |||
| match_type = RULE_POST; | |||
| *p = 0; | |||
| strcat(buf," ("); | |||
| p = &buf[strlen(buf)]; | |||
| break; | |||
| case RULE_PH_COMMON: | |||
| break; | |||
| case RULE_CONDITION: | |||
| /* conditional rule, next byte gives condition number */ | |||
| condition_num = *rule++; | |||
| break; | |||
| case RULE_LINENUM: | |||
| value = (rule[1] & 0xff) - 1; | |||
| linenum = (rule[0] & 0xff) - 1 + (value * 255); | |||
| rule+=2; | |||
| break; | |||
| } | |||
| continue; | |||
| } | |||
| if(rb == RULE_DOLLAR) | |||
| { | |||
| p[0] = '$'; | |||
| name = LookupMnemName(mnem_rules, *rule++); | |||
| strcpy(&p[1],name); | |||
| p += (strlen(name)+1); | |||
| c = ' '; | |||
| } | |||
| else | |||
| if(rb == RULE_ENDING) | |||
| { | |||
| static const char *flag_chars = "ei vtfq t"; | |||
| flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f); | |||
| suffix_char = 'S'; | |||
| if(flags & (SUFX_P >> 8)) | |||
| suffix_char = 'P'; | |||
| sprintf(suffix,"%c%d",suffix_char,rule[2] & 0x7f); | |||
| rule += 3; | |||
| for(ix=0;ix<9;ix++) | |||
| { | |||
| if(flags & 1) | |||
| sprintf(&suffix[strlen(suffix)],"%c",flag_chars[ix]); | |||
| flags = (flags >> 1); | |||
| } | |||
| strcpy(p,suffix); | |||
| p += strlen(suffix); | |||
| c = ' '; | |||
| } | |||
| else | |||
| if(rb == RULE_LETTERGP) | |||
| { | |||
| c = symbols_lg[*rule++ - 'A']; | |||
| } | |||
| else | |||
| if(rb == RULE_LETTERGP2) | |||
| { | |||
| value = *rule++ - 'A'; | |||
| p[0] = 'L'; | |||
| p[1] = (value / 10) + '0'; | |||
| c = (value % 10) + '0'; | |||
| if(match_type == RULE_PRE) | |||
| { | |||
| p[0] = c; | |||
| c = 'L'; | |||
| } | |||
| p+=2; | |||
| } | |||
| else | |||
| if(rb <= RULE_LAST_RULE) | |||
| c = symbols[rb]; | |||
| else | |||
| if(rb == RULE_SPACE) | |||
| c = '_'; | |||
| else | |||
| c = rb; | |||
| *p++ = c; | |||
| } | |||
| *p = 0; | |||
| p = output; | |||
| if(linenum > 0) | |||
| { | |||
| sprintf(p,"%5d:\t",linenum); | |||
| p += 7; | |||
| } | |||
| if(condition_num > 0) | |||
| { | |||
| sprintf(p,"?%d ",condition_num); | |||
| p = &p[strlen(p)]; | |||
| } | |||
| if((ix = strlen(buf_pre)) > 0) | |||
| { | |||
| while(--ix >= 0) | |||
| *p++ = buf_pre[ix]; | |||
| *p++ = ')'; | |||
| *p++ = ' '; | |||
| } | |||
| *p = 0; | |||
| strcat(p,buf); | |||
| ix = strlen(output); | |||
| while(ix < 8) | |||
| output[ix++]=' '; | |||
| output[ix]=0; | |||
| return(output); | |||
| } /* end of DecodeRule */ | |||
| @@ -533,9 +691,9 @@ step=1; // TEST | |||
| len_word = strlen(word); | |||
| if(transpose_offset > 0) | |||
| if(translator->transpose_offset > 0) | |||
| { | |||
| len_word = TransposeAlphabet(word, transpose_offset, transpose_min, transpose_max); | |||
| len_word = TransposeAlphabet(word, translator->transpose_offset, translator->transpose_min, translator->transpose_max); | |||
| } | |||
| *hash = HashDictionary(word); | |||
| @@ -762,6 +920,7 @@ static void copy_rule_string(char *string, int &state) | |||
| int sxflags; | |||
| int value; | |||
| int literal; | |||
| MNEM_TAB *mr; | |||
| if(string[0] == 0) return; | |||
| @@ -858,7 +1017,8 @@ static void copy_rule_string(char *string, int &state) | |||
| c = RULE_CAPITAL; | |||
| break; | |||
| case 'T': | |||
| c = RULE_ALT1; | |||
| output[ix++] = RULE_DOLLAR; | |||
| c = 0x11; | |||
| break; | |||
| case 'W': | |||
| c = RULE_SPELLING; | |||
| @@ -899,10 +1059,28 @@ static void copy_rule_string(char *string, int &state) | |||
| } | |||
| break; | |||
| case '$': // obsolete, replaced by S | |||
| fprintf(f_log,"%5d: $ now not allowed, use S for suffix",linenum); | |||
| case '$': | |||
| output[ix++] = RULE_DOLLAR; | |||
| c = 0; | |||
| mr = mnem_rules; | |||
| while(mr->mnem != NULL) | |||
| { | |||
| len = strlen(mr->mnem); | |||
| if(memcmp(p, mr->mnem, len) == 0) | |||
| { | |||
| c = mr->value; | |||
| p += len; | |||
| break; | |||
| } | |||
| mr++; | |||
| } | |||
| if(c == 0) | |||
| { | |||
| fprintf(f_log,"%5d: $ command not recognized\n",linenum); | |||
| error_count++; | |||
| } | |||
| break; | |||
| case 'P': | |||
| sxflags |= SUFX_P; // Prefix, now drop through to Suffix | |||
| case 'S': | |||
| @@ -1703,17 +1881,6 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha | |||
| } | |||
| sprintf(fname_temp,"%s%ctemp",path_home,PATHSEP); | |||
| transpose_offset = 0; | |||
| if(strcmp(dict_name,"ru") == 0) | |||
| { | |||
| // transpose cyrillic alphabet from unicode to iso8859-5 | |||
| // transpose_offset = 0x430-0xd0; | |||
| transpose_offset = 0x42f; // range 0x01 to 0x22 | |||
| transpose_min = 0x430; | |||
| transpose_max = 0x451; | |||
| } | |||
| value = N_HASH_DICT; | |||
| Write4Bytes(f_out,value); | |||
| Write4Bytes(f_out,offset_rules); | |||
| @@ -18,8 +18,6 @@ | |||
| ***************************************************************************/ | |||
| #include "StdAfx.h" | |||
| #define LOG_TRANSLATE | |||
| #include <stdio.h> | |||
| #include <ctype.h> | |||
| @@ -40,6 +38,7 @@ int dictionary_skipwords; | |||
| char dictionary_name[40]; | |||
| extern char *print_dictionary_flags(unsigned int *flags); | |||
| extern char *DecodeRule(const char *group_chars, int group_length, char *rule); | |||
| // accented characters which indicate (in some languages) the start of a separate syllable | |||
| //static const unsigned short diereses_list[7] = {L'ä',L'ë',L'ï',L'ö',L'ü',L'ÿ',0}; | |||
| @@ -106,8 +105,8 @@ static int reverse_word_bytes(int word) | |||
| } | |||
| int LookupMnem(MNEM_TAB *table, char *string) | |||
| {//========================================== | |||
| int LookupMnem(MNEM_TAB *table, const char *string) | |||
| {//================================================ | |||
| while(table->mnem != NULL) | |||
| { | |||
| if(strcmp(string,table->mnem)==0) | |||
| @@ -118,7 +117,6 @@ int LookupMnem(MNEM_TAB *table, char *string) | |||
| } | |||
| //============================================================================================= | |||
| // Read pronunciation rules and pronunciation lookup dictionary | |||
| // | |||
| @@ -1628,159 +1626,6 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, | |||
| //============================================================================================= | |||
| #ifdef LOG_TRANSLATE | |||
| static char *DecodeRule(const char *group_chars, int group_length, char *rule) | |||
| {//=========================================================================== | |||
| /* Convert compiled match template to ascii */ | |||
| unsigned char rb; | |||
| unsigned char c; | |||
| char *p; | |||
| int ix; | |||
| int match_type; | |||
| int finished=0; | |||
| int value; | |||
| int linenum=0; | |||
| int flags; | |||
| int suffix_char; | |||
| int condition_num=0; | |||
| char buf[60]; | |||
| char buf_pre[60]; | |||
| char suffix[20]; | |||
| static char output[60]; | |||
| static char symbols[] = {' ',' ',' ',' ',' ',' ',' ',' ',' ', | |||
| '@','&','%','+','#','S','D','Z','A','L','!',' ','?','?','J','N','K','V','?','T','X','?','W'}; | |||
| static char symbols_lg[] = {'A','B','C','H','F','G','Y'}; | |||
| match_type = 0; | |||
| buf_pre[0] = 0; | |||
| for(ix=0; ix<group_length; ix++) | |||
| { | |||
| buf[ix] = group_chars[ix]; | |||
| } | |||
| buf[ix] = 0; | |||
| p = &buf[strlen(buf)]; | |||
| while(!finished) | |||
| { | |||
| rb = *rule++; | |||
| if(rb <= RULE_LINENUM) | |||
| { | |||
| switch(rb) | |||
| { | |||
| case 0: | |||
| case RULE_PHONEMES: | |||
| finished=1; | |||
| break; | |||
| case RULE_PRE: | |||
| match_type = RULE_PRE; | |||
| *p = 0; | |||
| p = buf_pre; | |||
| break; | |||
| case RULE_POST: | |||
| match_type = RULE_POST; | |||
| *p = 0; | |||
| strcat(buf," ("); | |||
| p = &buf[strlen(buf)]; | |||
| break; | |||
| case RULE_PH_COMMON: | |||
| break; | |||
| case RULE_CONDITION: | |||
| /* conditional rule, next byte gives condition number */ | |||
| condition_num = *rule++; | |||
| break; | |||
| case RULE_LINENUM: | |||
| value = (rule[1] & 0xff) - 1; | |||
| linenum = (rule[0] & 0xff) - 1 + (value * 255); | |||
| rule+=2; | |||
| break; | |||
| } | |||
| continue; | |||
| } | |||
| if(rb == RULE_ENDING) | |||
| { | |||
| static const char *flag_chars = "ei vtfq t"; | |||
| flags = ((rule[0] & 0x7f)<< 8) + (rule[1] & 0x7f); | |||
| suffix_char = 'S'; | |||
| if(flags & (SUFX_P >> 8)) | |||
| suffix_char = 'P'; | |||
| sprintf(suffix,"%c%d",suffix_char,rule[2] & 0x7f); | |||
| rule += 3; | |||
| for(ix=0;ix<9;ix++) | |||
| { | |||
| if(flags & 1) | |||
| sprintf(&suffix[strlen(suffix)],"%c",flag_chars[ix]); | |||
| flags = (flags >> 1); | |||
| } | |||
| strcpy(p,suffix); | |||
| p += strlen(suffix); | |||
| c = ' '; | |||
| } | |||
| else | |||
| if(rb == RULE_LETTERGP) | |||
| { | |||
| c = symbols_lg[*rule++ - 'A']; | |||
| } | |||
| else | |||
| if(rb == RULE_LETTERGP2) | |||
| { | |||
| value = *rule++ - 'A'; | |||
| p[0] = 'L'; | |||
| p[1] = (value / 10) + '0'; | |||
| c = (value % 10) + '0'; | |||
| if(match_type == RULE_PRE) | |||
| { | |||
| p[0] = c; | |||
| c = 'L'; | |||
| } | |||
| p+=2; | |||
| } | |||
| else | |||
| if(rb <= RULE_LAST_RULE) | |||
| c = symbols[rb]; | |||
| else | |||
| if(rb == RULE_SPACE) | |||
| c = '_'; | |||
| else | |||
| c = rb; | |||
| *p++ = c; | |||
| } | |||
| *p = 0; | |||
| p = output; | |||
| if(linenum > 0) | |||
| { | |||
| sprintf(p,"%5d:\t",linenum); | |||
| p += 7; | |||
| } | |||
| if(condition_num > 0) | |||
| { | |||
| sprintf(p,"?%d ",condition_num); | |||
| p = &p[strlen(p)]; | |||
| } | |||
| if((ix = strlen(buf_pre)) > 0) | |||
| { | |||
| while(--ix >= 0) | |||
| *p++ = buf_pre[ix]; | |||
| *p++ = ')'; | |||
| *p++ = ' '; | |||
| } | |||
| *p = 0; | |||
| strcat(p,buf); | |||
| ix = strlen(output); | |||
| while(ix < 8) | |||
| output[ix++]=' '; | |||
| output[ix]=0; | |||
| return(output); | |||
| } /* end of decode_match */ | |||
| #endif | |||
| void AppendPhonemes(Translator *tr, char *string, int size, const char *ph) | |||
| @@ -1833,8 +1678,8 @@ void AppendPhonemes(Translator *tr, char *string, int size, const char *ph) | |||
| static void MatchRule(Translator *tr, char *word[], int group_length, char *rule, MatchRecord *match_out, int word_flags, int dict_flags) | |||
| {//====================================================================================================================================== | |||
| static void MatchRule(Translator *tr, char *word[], char *word_start, int group_length, char *rule, MatchRecord *match_out, int word_flags, int dict_flags) | |||
| {//======================================================================================================================================================== | |||
| /* Checks a specified word against dictionary rules. | |||
| Returns with phoneme code string, or NULL if no match found. | |||
| @@ -1861,6 +1706,7 @@ static void MatchRule(Translator *tr, char *word[], int group_length, char *rule | |||
| char *rule_start; /* start of current match template */ | |||
| char *p; | |||
| int ix; | |||
| int match_type; /* left, right, or consume */ | |||
| int failed; | |||
| @@ -1874,6 +1720,7 @@ static void MatchRule(Translator *tr, char *word[], int group_length, char *rule | |||
| int lg_pts; | |||
| int n_bytes; | |||
| int add_points; | |||
| int command; | |||
| MatchRecord match; | |||
| static MatchRecord best; | |||
| @@ -1883,6 +1730,7 @@ static void MatchRule(Translator *tr, char *word[], int group_length, char *rule | |||
| unsigned char condition_num; | |||
| char *common_phonemes; /* common to a group of entries */ | |||
| char *group_chars; | |||
| char word_buf[N_WORD_BYTES]; | |||
| group_chars = *word; | |||
| @@ -2091,11 +1939,29 @@ static void MatchRule(Translator *tr, char *word[], int group_length, char *rule | |||
| failed = 1; | |||
| break; | |||
| case RULE_ALT1: | |||
| if(dict_flags & FLAG_ALT_TRANS) | |||
| add_points = 1; | |||
| case RULE_DOLLAR: | |||
| command = *rule++; | |||
| if((command & 0xf0) == 0x10) | |||
| { | |||
| if(dict_flags & (1 << (BITNUM_FLAG_ALT + (command & 0xf)))) | |||
| add_points = 23; | |||
| else | |||
| failed = 1; | |||
| } | |||
| else | |||
| failed = 1; | |||
| if((command & 0xf0) == 0x20) | |||
| { | |||
| // make a copy of the word up to the post-match characters | |||
| ix = *word - word_start + consumed + group_length + 1; | |||
| memcpy(word_buf, word_start-1, ix); | |||
| word_buf[ix] = ' '; | |||
| word_buf[ix+1] = 0; | |||
| if(LookupFlags(tr, &word_buf[1]) & (1 << (BITNUM_FLAG_ALT + (command & 0xf)))) | |||
| add_points = 23; | |||
| else | |||
| failed = 1; | |||
| } | |||
| break; | |||
| case '-': | |||
| @@ -2403,7 +2269,6 @@ static void MatchRule(Translator *tr, char *word[], int group_length, char *rule | |||
| total_consumed = consumed; | |||
| } | |||
| #ifdef LOG_TRANSLATE | |||
| if((option_phonemes == 2) && (match.points > 0) && ((word_flags & FLAG_NO_TRACE) == 0)) | |||
| { | |||
| // show each rule that matches, and it's points score | |||
| @@ -2417,7 +2282,6 @@ static void MatchRule(Translator *tr, char *word[], int group_length, char *rule | |||
| DecodePhonemes(match.phonemes,decoded_phonemes); | |||
| fprintf(f_trans,"%3d\t%s [%s]\n",pts,DecodeRule(group_chars, group_length, rule_start),decoded_phonemes); | |||
| } | |||
| #endif | |||
| } | |||
| @@ -2425,13 +2289,11 @@ static void MatchRule(Translator *tr, char *word[], int group_length, char *rule | |||
| while(*rule++ != 0); | |||
| } | |||
| #ifdef LOG_TRANSLATE | |||
| if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) | |||
| { | |||
| if(group_length <= 1) | |||
| fprintf(f_trans,"\n"); | |||
| } | |||
| #endif | |||
| /* advance input data pointer */ | |||
| total_consumed += group_length; | |||
| @@ -2491,7 +2353,6 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
| word_copy[ix] = 0; | |||
| #ifdef LOG_TRANSLATE | |||
| if((option_phonemes == 2) && ((word_flags & FLAG_NO_TRACE)==0)) | |||
| { | |||
| char wordbuf[120]; | |||
| @@ -2504,7 +2365,6 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
| wordbuf[ix] = 0; | |||
| fprintf(f_trans,"Translate '%s'\n",wordbuf); | |||
| } | |||
| #endif | |||
| p = p_start; | |||
| tr->word_vowel_count = 0; | |||
| @@ -2548,7 +2408,7 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
| { | |||
| if(tr->groups3[ix] != NULL) | |||
| { | |||
| MatchRule(tr, &p, wc_bytes, tr->groups3[ix], &match1, word_flags, dict_flags0); | |||
| MatchRule(tr, &p, p_start, wc_bytes, tr->groups3[ix], &match1, word_flags, dict_flags0); | |||
| found = 1; | |||
| } | |||
| } | |||
| @@ -2568,12 +2428,12 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
| found = 1; | |||
| p2 = p; | |||
| MatchRule(tr, &p2, 2, tr->groups2[g], &match2, word_flags, dict_flags0); | |||
| MatchRule(tr, &p2, p_start, 2, tr->groups2[g], &match2, word_flags, dict_flags0); | |||
| if(match2.points > 0) | |||
| match2.points += 35; /* to acount for 2 letters matching */ | |||
| /* now see whether single letter chain gives a better match ? */ | |||
| MatchRule(tr, &p, 1, tr->groups1[c], &match1, word_flags, dict_flags0); | |||
| MatchRule(tr, &p, p_start, 1, tr->groups1[c], &match1, word_flags, dict_flags0); | |||
| if(match2.points >= match1.points) | |||
| { | |||
| @@ -2589,11 +2449,11 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c | |||
| { | |||
| /* alphabetic, single letter chain */ | |||
| if(tr->groups1[c] != NULL) | |||
| MatchRule(tr, &p, 1, tr->groups1[c], &match1, word_flags, dict_flags0); | |||
| MatchRule(tr, &p, p_start, 1, tr->groups1[c], &match1, word_flags, dict_flags0); | |||
| else | |||
| { | |||
| // no group for this letter, use default group | |||
| MatchRule(tr, &p, 0, tr->groups1[0], &match1, word_flags, dict_flags0); | |||
| MatchRule(tr, &p, p_start, 0, tr->groups1[0], &match1, word_flags, dict_flags0); | |||
| if((match1.points == 0) && ((option_sayas & 0x10) == 0)) | |||
| { | |||
| @@ -3167,6 +3027,12 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor | |||
| continue; | |||
| } | |||
| if((dictionary_flags2 & FLAG_SENTENCE) && !(tr->clause_terminator & CLAUSE_BIT_SENTENCE)) | |||
| { | |||
| // only uis this clause is a sentence , i.e. terminator is {. ? !} not {, : :} | |||
| continue; | |||
| } | |||
| if(dictionary_flags2 & FLAG_VERB) | |||
| { | |||
| // this is a verb-form pronunciation | |||
| @@ -3243,7 +3109,18 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor | |||
| if(textmode == translator->langopts.textmode) | |||
| { | |||
| // only show this line if the word translates to phonemes, not replacement text | |||
| fprintf(f_trans,"Found: %s [%s] %s\n",word1,ph_decoded,print_dictionary_flags(flags)); | |||
| if(dictionary_skipwords) | |||
| { | |||
| // matched more than one word | |||
| memcpy(word_buf,word2,word_end-word2); | |||
| word_buf[word_end-word2-1] = 0; | |||
| fprintf(f_trans,"Found: '%s %s",word1,word_buf); | |||
| } | |||
| else | |||
| { | |||
| fprintf(f_trans,"Found: '%s",word1); | |||
| } | |||
| fprintf(f_trans,"' [%s] %s\n",ph_decoded,print_dictionary_flags(flags)); | |||
| } | |||
| } | |||
| return(word_end); | |||
| @@ -3541,12 +3418,11 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy) | |||
| if(end_flags & FLAG_SUFX_E_ADDED) | |||
| { | |||
| utf8_out(tr->langopts.suffix_add_e, &word_end[1]); | |||
| #ifdef LOG_TRANSLATE | |||
| if(option_phonemes == 2) | |||
| { | |||
| fprintf(f_trans,"add e\n"); | |||
| } | |||
| #endif | |||
| if(option_phonemes == 2) | |||
| { | |||
| fprintf(f_trans,"add e\n"); | |||
| } | |||
| } | |||
| } | |||
| @@ -65,6 +65,7 @@ extern void DictionarySort(const char *dictname); | |||
| extern void init_z(); | |||
| extern void CompilePhonemeData(void); | |||
| extern void CompileMbrola(); | |||
| extern void CompileIntonation(); | |||
| extern void InitSpectrumDisplay(); | |||
| extern void InitProsodyDisplay(); | |||
| extern void InitWaveDisplay(); | |||
| @@ -203,6 +204,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) | |||
| EVT_MENU(MENU_FORMAT_DICTIONARY, MyFrame::OnTools) | |||
| EVT_MENU(MENU_SORT_DICTIONARY, MyFrame::OnTools) | |||
| EVT_MENU(MENU_COMPILE_MBROLA, MyFrame::OnTools) | |||
| EVT_MENU(MENU_COMPILE_INTONATION, MyFrame::OnTools) | |||
| EVT_MENU(MENU_CLOSE_ALL, MyFrame::OnQuit) | |||
| EVT_MENU(MENU_QUIT, MyFrame::OnQuit) | |||
| EVT_MENU(MENU_SPEAK_TRANSLATE, MyFrame::OnSpeak) | |||
| @@ -218,6 +220,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) | |||
| EVT_MENU(MENU_VOWELCHART2, MyFrame::OnTools) | |||
| EVT_MENU(MENU_VOWELCHART3, MyFrame::OnTools) | |||
| EVT_MENU(MENU_LEXICON_RU, MyFrame::OnTools) | |||
| EVT_MENU(MENU_LEXICON_BG, MyFrame::OnTools) | |||
| EVT_MENU(MENU_LEXICON_DE, MyFrame::OnTools) | |||
| EVT_MENU(MENU_LEXICON_IT, MyFrame::OnTools) | |||
| EVT_MENU(MENU_LEXICON_IT2, MyFrame::OnTools) | |||
| @@ -553,6 +556,7 @@ void MyFrame::OnTools(wxCommandEvent& event) | |||
| break; | |||
| case MENU_LEXICON_RU: | |||
| case MENU_LEXICON_BG: | |||
| case MENU_LEXICON_DE: | |||
| case MENU_LEXICON_IT: | |||
| case MENU_LEXICON_IT2: | |||
| @@ -566,6 +570,10 @@ void MyFrame::OnTools(wxCommandEvent& event) | |||
| case MENU_COMPILE_MBROLA: | |||
| CompileMbrola(); | |||
| break; | |||
| case MENU_COMPILE_INTONATION: | |||
| CompileIntonation(); | |||
| break; | |||
| case MENU_COMPILE_DICT_DEBUG: | |||
| debug_flag =1; // and drop through to next case | |||
| @@ -200,8 +200,6 @@ static const unsigned short KOI8_R[0x60] = { | |||
| #define N_CHARS 34 | |||
| int *p_unicode; | |||
| int unicode[80]; | |||
| #define PH(c1,c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name | |||
| @@ -765,6 +763,202 @@ void Lexicon_De() | |||
| } | |||
| void Lexicon_Bg() | |||
| {//============== | |||
| // Bulgarian: compare stress markup in a list of words with lookup using bg_rules | |||
| char *p; | |||
| char *pw; | |||
| char *pw1; | |||
| int cc; | |||
| int vcount; | |||
| int lex_stress; | |||
| int input_length; | |||
| int n_words=0; | |||
| int n_wrong=0; | |||
| int n_out=0; | |||
| int n_stress; | |||
| int max_stress; | |||
| int max_stress_posn; | |||
| int stress_first; | |||
| int done; | |||
| PHONEME_TAB *ph; | |||
| FILE *f_in; | |||
| FILE *f_out; | |||
| FILE *f_log; | |||
| char word[80]; | |||
| char word_in[80]; | |||
| char phonemes[N_WORD_PHONEMES]; | |||
| char buf[200]; | |||
| char fname[sizeof(path_dsource)+20]; | |||
| static unsigned short bg_vowels[] = {0x430, 0x435, 0x438, 0x43e, 0x443, 0x44a, 0x44d, 0x44e, 0x44f, 0x450, 0x451, 0x45d, 0}; | |||
| if(gui_flag == 0) | |||
| return; | |||
| wxString s_fname = wxFileSelector(_T("List of UTF-8 words with Combining Grave Accent U+300 to indicate stress"),path_dir1, | |||
| _T(""),_T(""),_T("*"),wxOPEN); | |||
| if(s_fname.IsEmpty()) | |||
| return; | |||
| strcpy(buf,s_fname.mb_str(wxConvLocal)); | |||
| path_dir1 = wxFileName(s_fname).GetPath(); | |||
| if((f_in = fopen(buf,"r")) == NULL) | |||
| { | |||
| wxLogError(_T("Can't read file: ") + wxString(buf,wxConvLocal)); | |||
| return; | |||
| } | |||
| input_length = GetFileLength(buf); | |||
| sprintf(fname,"%s%c%s",path_dsource,PATHSEP,"bg_listx_1"); | |||
| if((f_out = fopen(fname,"w")) == NULL) | |||
| { | |||
| wxLogError(_T("Can't write to: ")+wxString(fname,wxConvLocal)); | |||
| fclose(f_in); | |||
| return; | |||
| } | |||
| sprintf(fname,"%s%c%s",path_dsource,PATHSEP,"bg_log"); | |||
| f_log = fopen(fname,"w"); | |||
| LoadVoice("bg",0); | |||
| progress = new wxProgressDialog(_T("Lexicon"),_T(""),input_length); | |||
| for(;;) | |||
| { | |||
| if((n_words & 0x3ff) == 0) | |||
| { | |||
| progress->Update(ftell(f_in)); | |||
| } | |||
| if(fgets(buf,sizeof(buf),f_in) == NULL) | |||
| break; | |||
| if(isspace2(buf[0])) | |||
| continue; | |||
| // convert from UTF-8 to Unicode | |||
| word[0] = 0; | |||
| word[1] = ' '; | |||
| pw = &word[2]; | |||
| pw1 = word_in; | |||
| p = buf; | |||
| while(*p == ' ') p++; | |||
| vcount = 0; | |||
| lex_stress = 0; | |||
| n_stress = 0; | |||
| stress_first = 0; | |||
| // find the marked stress position | |||
| for(;;) | |||
| { | |||
| p += utf8_in(&cc, p); | |||
| if(iswspace(cc)) | |||
| break; | |||
| if(cc == 0xfeff) | |||
| continue; // ignore UTF-8 indication | |||
| pw1 += utf8_out(cc, pw1); // copy UTF-8 to 'word_in' | |||
| if(lookupwchar(bg_vowels, cc) != 0) | |||
| vcount++; | |||
| if((cc == 0x300) || (cc == 0x450) || (cc == 0x45d)) | |||
| { | |||
| // combining grave accent, of accented vowel character | |||
| lex_stress = vcount; | |||
| n_stress++; | |||
| if(vcount == 1) | |||
| stress_first = 1; | |||
| if(cc == 0x300) | |||
| continue; // discard combining accent | |||
| if(cc == 0x450) | |||
| cc = 0x435; // remove accent from vowel | |||
| if(cc == 0x45d) | |||
| cc = 0x438; | |||
| } | |||
| pw += utf8_out(cc, pw); // copy UTF-8 to 'word' | |||
| } | |||
| *pw++ = ' '; | |||
| *pw = 0; | |||
| *pw1 = 0; | |||
| // translate | |||
| TranslateWord(translator, &word[2],0, NULL); | |||
| DecodePhonemes(word_phonemes,phonemes); | |||
| // find the stress position in the translation | |||
| max_stress = 0; | |||
| max_stress_posn = -1; | |||
| vcount = 0; | |||
| ph = phoneme_tab[phonPAUSE]; | |||
| for(p=word_phonemes; *p != 0; p++) | |||
| { | |||
| ph = phoneme_tab[(unsigned int)*p]; | |||
| if(ph == NULL) | |||
| continue; | |||
| if(ph->type == phVOWEL) | |||
| vcount++; | |||
| if(ph->type == phSTRESS) | |||
| { | |||
| if(ph->std_length > max_stress) | |||
| { | |||
| max_stress = ph->std_length; | |||
| max_stress_posn = vcount+1; | |||
| } | |||
| } | |||
| } | |||
| done = 0; | |||
| if((lex_stress != max_stress_posn) || (n_stress != 1)) | |||
| { | |||
| if((vcount > 0) && (lex_stress > 0) && (lex_stress <= 7)) | |||
| { | |||
| if((n_stress == 2) && (stress_first)) | |||
| { | |||
| done = 1; | |||
| fprintf(f_out,"%s\t$%d\n",&word[2],lex_stress); | |||
| } | |||
| if(n_stress == 1) | |||
| { | |||
| done = 1; | |||
| fprintf(f_out,"%s\t$%d\n",&word[2],lex_stress); | |||
| } | |||
| } | |||
| if(done == 0) | |||
| { | |||
| n_wrong++; | |||
| fprintf(f_out,"%s\t$text %s\n", &word[2], word_in); | |||
| } | |||
| if(done) | |||
| n_out++; | |||
| } | |||
| n_words++; | |||
| } | |||
| fclose(f_in); | |||
| fclose(f_out); | |||
| fclose(f_log); | |||
| delete progress; | |||
| sprintf(buf,"Lexicon: Input %d, Output %d, Failed %d",n_words,n_out,n_wrong); | |||
| wxLogStatus(wxString(buf,wxConvLocal)); | |||
| } // end of Lexicon_Bg | |||
| void Lexicon_Ru() | |||
| {//============== | |||
| // compare stress markings in Russian RuLex file with lookup in ru_rules | |||
| @@ -791,6 +985,9 @@ void Lexicon_Ru() | |||
| int len; | |||
| int check_root; | |||
| int *p_unicode; | |||
| int unicode[80]; | |||
| char word[80]; | |||
| char word2[80]; | |||
| int counts[20][20][10]; | |||
| @@ -1066,6 +1263,9 @@ void CompareLexicon(int id) | |||
| case MENU_LEXICON_RU: | |||
| Lexicon_Ru(); | |||
| break; | |||
| case MENU_LEXICON_BG: | |||
| Lexicon_Bg(); | |||
| break; | |||
| case MENU_LEXICON_DE: | |||
| Lexicon_De(); | |||
| break; | |||
| @@ -49,6 +49,7 @@ BEGIN_EVENT_TABLE(FormantDlg, wxPanel) | |||
| // EVT_SPINCTRL(T_TIMEFRAME,FormantDlg::OnSpin) | |||
| END_EVENT_TABLE() | |||
| int use_spin_controls=0; | |||
| void FormantDlg::OnCommand(wxCommandEvent& event) | |||
| {//============================================= | |||
| @@ -181,7 +182,14 @@ FormantDlg::FormantDlg(wxWindow *parent) : wxPanel(parent,-1,wxDefaultPosition,w | |||
| } | |||
| y=224; | |||
| t_timeframe = new wxSpinCtrl(this,T_TIMEFRAME,_T(""), wxPoint(6,y+0), wxSize(52,24), wxTE_CENTRE,0,500,0,_T("Frame length")); | |||
| if(use_spin_controls) | |||
| { | |||
| t_timeframe = new wxSpinCtrl(this,T_TIMEFRAME,_T(""), wxPoint(6,y+0), wxSize(52,24), wxTE_CENTRE,0,500,0,_T("Frame length")); | |||
| } | |||
| else | |||
| { | |||
| tt_timeframe = new wxTextCtrl(this,T_TIMEFRAME,_T(""), wxPoint(6,y+0), wxSize(52,24), wxTE_CENTRE,wxDefaultValidator,_T("Frame length")); | |||
| } | |||
| t_orig_frame = new wxStaticText(this,-1,_T("mS"),wxPoint(61,y+8)); | |||
| t_ampframe = new wxSpinCtrl(this,T_AMPFRAME,_T(""), wxPoint(104,y+0), wxSize(52,24), wxTE_CENTRE,0,500,0,_T("Frame amplitude")); | |||
| t_lab[3] = new wxStaticText(this,-1,_T("% amp - Frame"),wxPoint(159,y+8)); | |||
| @@ -255,6 +263,12 @@ void FormantDlg::GetValues(SpectSeq *spectseq, int frame) | |||
| return; | |||
| sf = spectseq->frames[frame]; | |||
| if(use_spin_controls == 0) | |||
| { | |||
| formantdlg->tt_timeframe->GetValue().ToLong(&num); | |||
| sf->length_adjust = num - spectseq->GetFrameLength(frame,0,NULL); | |||
| } | |||
| for(ix=0; ix < 8; ix++) | |||
| { | |||
| if(ix < 7) | |||
| @@ -386,7 +400,13 @@ void FormantDlg::ShowFrame(SpectSeq *spectseq, int frame, int pk, int field) | |||
| } | |||
| // find the time until the next keyframe | |||
| SetSpinCtrl(t_timeframe,int(spectseq->GetFrameLength(frame,1,&original_mS)+0.5)); // round to nearest integer | |||
| value.Printf(_T("%d"),int(spectseq->GetFrameLength(frame,1,&original_mS)+0.5)); // round to nearest integer | |||
| if(use_spin_controls) | |||
| t_timeframe->SetValue(value); | |||
| else | |||
| tt_timeframe->SetValue(value); | |||
| value.Printf(_T("%d mS"),original_mS); | |||
| t_orig_frame->SetLabel(value); | |||
| value.Printf(_T("%3d"),sf->amp_adjust); | |||
| @@ -21,6 +21,7 @@ | |||
| #include <stdio.h> | |||
| #include <string.h> | |||
| #include <stdlib.h> | |||
| #include <wctype.h> | |||
| #include "speak_lib.h" | |||
| @@ -45,8 +46,8 @@ typedef struct { | |||
| char env; | |||
| char flags; //bit 0=pitch rising, bit1=emnphasized, bit2=end of clause | |||
| char nextph_type; | |||
| short pitch1; | |||
| short pitch2; | |||
| unsigned char pitch1; | |||
| unsigned char pitch2; | |||
| } SYLLABLE; | |||
| static SYLLABLE *syllable_tab; | |||
| @@ -61,10 +62,10 @@ static int tone_pitch_env; /* used to return pitch envelope */ | |||
| #define PITCHfall 0 | |||
| #define PITCHrise 1 | |||
| #define PITCHfrise 2 // and 3 must be for the varient preceded by 'r' | |||
| #define PITCHfrise2 4 // and 5 must be the 'r' variant | |||
| #define PITCHrisefall 6 | |||
| #define PITCHrise 2 | |||
| #define PITCHfrise 4 // and 3 must be for the variant preceded by 'r' | |||
| #define PITCHfrise2 6 // and 5 must be the 'r' variant | |||
| #define PITCHrisefall 8 | |||
| /* 0 fall */ | |||
| unsigned char env_fall[128] = { | |||
| @@ -191,9 +192,9 @@ static unsigned char env_risefallrise[128] = { | |||
| unsigned char *envelope_data[18] = { | |||
| env_fall, | |||
| env_rise, | |||
| unsigned char *envelope_data[20] = { | |||
| env_fall, env_fall, | |||
| env_rise, env_rise, | |||
| env_frise, env_r_frise, | |||
| env_frise2, env_r_frise2, | |||
| env_risefall, env_risefall, | |||
| @@ -206,18 +207,17 @@ unsigned char *envelope_data[18] = { | |||
| }; | |||
| /* all pitches given in Hz above pitch_base */ | |||
| /* indexed by stress */ | |||
| static int min_drop[] = {6,7,9,9,20,20,20,25}; | |||
| // pitch change during the main part of the clause | |||
| static int drops_0[8] = {0x400,0x400,0x700,0x700,0x700,0xa00,0x1800,0x0e00}; | |||
| //static int drops_1[8] = {0x400,0x400,0x600,0x600,0xc00,0xc00,0x0e00,0x0e00}; | |||
| //static int drops_2[8] = {0x400,0x400,0x600,0x600,-0x800,0xc00,0x0e00,0x0e00}; | |||
| static int drops_0[8] = {9,9,16,16,16,23,55,32}; | |||
| static short oflow[] = {0, 20, 12, 4, 0}; | |||
| static short oflow_emf[] = {5, 26, 16, 10, 5}; | |||
| static short oflow_less[] = {3, 19, 12, 7, 2}; | |||
| // static short oflow_test2[] = {20, 0, 20, 0, 20}; | |||
| // static short back_emf[] = {35, 32, 0}; | |||
| // overflow table values are 64ths of the body pitch range (between body_start and body_end) | |||
| static signed char oflow[] = {0, 40, 24, 8, 0}; | |||
| static signed char oflow_emf[] = {10, 52, 32, 20, 10}; | |||
| static signed char oflow_less[] = {6, 38, 24, 14, 4}; | |||
| #define N_TONE_HEAD_TABLE 13 | |||
| @@ -235,8 +235,8 @@ typedef struct { | |||
| unsigned char body_max_steps; | |||
| char body_lower_u; | |||
| char n_overflow; | |||
| short *overflow; | |||
| unsigned char n_overflow; | |||
| signed char *overflow; | |||
| } TONE_HEAD; | |||
| @@ -259,38 +259,38 @@ typedef struct { | |||
| #define T_EMPH 1 | |||
| static TONE_HEAD tone_head_table[N_TONE_HEAD_TABLE] = { | |||
| {20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 0 statement | |||
| {20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 1 comma | |||
| {20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 2 question | |||
| {20, 25, 39, 22, drops_0, 3, 4, 5, oflow_emf}, // 3 exclamation | |||
| {20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 4 statement, emphatic | |||
| {20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less}, // 5 statement, less intonation | |||
| {20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less}, // 6 comma, less intonation | |||
| {20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less}, // 7 comma, less intonation, less rise | |||
| {20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 8 pitch raises at end of sentence | |||
| {20, 25, 34, 20, drops_0, 3, 3, 5, oflow}, // 9 comma | |||
| {20, 25, 34, 22, drops_0, 3, 3, 5, oflow}, // 10 question | |||
| {15, 18, 18, 14, drops_0, 3, 3, 5, oflow_less}, // 11 test | |||
| {20, 25, 24, 22, drops_0, 3, 3, 5, oflow_less}, // 12 test | |||
| {46, 57, 78, 50, drops_0, 3, 7, 5, oflow}, // 0 statement | |||
| {46, 57, 78, 46, drops_0, 3, 7, 5, oflow}, // 1 comma | |||
| {46, 57, 78, 46, drops_0, 3, 7, 5, oflow}, // 2 question | |||
| {46, 57, 90, 50, drops_0, 3, 9, 5, oflow_emf}, // 3 exclamation | |||
| {46, 57, 78, 50, drops_0, 3, 7, 5, oflow}, // 4 statement, emphatic | |||
| {46, 57, 74, 55, drops_0, 4, 7, 5, oflow_less}, // 5 statement, less intonation | |||
| {46, 57, 74, 55, drops_0, 4, 7, 5, oflow_less}, // 6 comma, less intonation | |||
| {46, 57, 74, 55, drops_0, 4, 7, 5, oflow_less}, // 7 comma, less intonation, less rise | |||
| {46, 57, 78, 50, drops_0, 3, 7, 5, oflow}, // 8 pitch raises at end of sentence | |||
| {46, 57, 78, 46, drops_0, 3, 7, 5, oflow}, // 9 comma | |||
| {46, 57, 78, 50, drops_0, 3, 7, 5, oflow}, // 10 question | |||
| {34, 41, 41, 32, drops_0, 3, 7, 5, oflow_less}, // 11 test | |||
| {46, 57, 55, 50, drops_0, 3, 7, 5, oflow_less}, // 12 test | |||
| }; | |||
| static TONE_NUCLEUS tone_nucleus_table[N_TONE_NUCLEUS_TABLE] = { | |||
| {PITCHfall, 29, 4, PITCHfall, 31, 8, NULL, 11, 6, 0}, // 0 statement | |||
| {PITCHfrise, 35, 8, PITCHfrise2, 35,10, NULL, 15, 23, 0}, // 1 comma | |||
| {PITCHfrise, 39,10, PITCHfrise2, 36,10, NULL, 15, 28, 0}, // 2 question | |||
| // {PITCHfall, 41, 4, PITCHfall, 41,27, NULL, 16, 4, T_EMPH}, // 3 exclamation | |||
| {PITCHfall, 41, 4, PITCHfall, 41,35, NULL, 35, 4, T_EMPH}, // 3 exclamation | |||
| {PITCHfall, 38, 2, PITCHfall, 42,30, NULL, 15, 5, 0}, // 4 statement, emphatic | |||
| {PITCHfall, 28, 5, PITCHfall, 28, 9, NULL, 12, 7, 0}, // 5 statement, less intonation | |||
| {PITCHfrise, 30, 8, PITCHfrise2, 30,10, NULL, 13, 20, 0}, // 6 comma, less intonation | |||
| {PITCHfrise2, 28, 7, PITCHfall, 29,14, NULL, 14, 8, 0}, // 7 comma, less intonation, less rise | |||
| {PITCHrise, 30,20, PITCHfall, 19,14, NULL, 20, 26, 0}, // 8 pitch raises at end of sentence | |||
| {PITCHfrise, 35,11, PITCHfrise2, 32,10, NULL, 19, 24, 0}, // 9 comma | |||
| {PITCHfrise, 39,15, PITCHfall, 28,14, NULL, 20, 36, 0}, // 10 question | |||
| {PITCHfall, 28, 6, PITCHfall, 28,10, NULL, 12, 6, 0}, // 11 test | |||
| {PITCHfall, 35, 9, PITCHfall, 35,12, NULL, 16, 10, 0}, // 12 test | |||
| {PITCHfall, 64, 8, PITCHfall, 70,18, NULL, 24, 12, 0}, // 0 statement | |||
| {PITCHfrise, 80,18, PITCHfrise2, 78,22, NULL, 34, 52, 0}, // 1 comma | |||
| {PITCHfrise, 88,22, PITCHfrise2, 82,22, NULL, 34, 64, 0}, // 2 question | |||
| {PITCHfall, 92, 8, PITCHfall, 92,80, NULL, 76, 8, T_EMPH}, // 3 exclamation | |||
| {PITCHfall, 86, 4, PITCHfall, 94,66, NULL, 34, 10, 0}, // 4 statement, emphatic | |||
| {PITCHfall, 62,10, PITCHfall, 62,20, NULL, 28, 16, 0}, // 5 statement, less intonation | |||
| {PITCHfrise, 68,18, PITCHfrise2, 68,22, NULL, 30, 44, 0}, // 6 comma, less intonation | |||
| {PITCHfrise2, 64,16, PITCHfall, 66,32, NULL, 32, 18, 0}, // 7 comma, less intonation, less rise | |||
| {PITCHrise, 68,46, PITCHfall, 42,32, NULL, 46, 58, 0}, // 8 pitch raises at end of sentence | |||
| {PITCHfrise, 78,24, PITCHfrise2, 72,22, NULL, 42, 52, 0}, // 9 comma | |||
| {PITCHfrise, 88,34, PITCHfall, 64,32, NULL, 46, 82, 0}, // 10 question | |||
| {PITCHfall, 56,12, PITCHfall, 56,20, NULL, 24, 12, 0}, // 11 test | |||
| {PITCHfall, 70,18, PITCHfall, 70,24, NULL, 32, 20, 0}, // 12 test | |||
| }; | |||
| /* index by 0=. 1=, 2=?, 3=! 4=none, 5=emphasized */ | |||
| @@ -306,11 +306,8 @@ unsigned char punctuation_to_tone[INTONATION_TYPES][PUNCT_INTONATIONS] = { | |||
| }; | |||
| /* indexed by stress */ | |||
| static int min_drop[] = {0x300,0x300,0x400,0x400,0x900,0x900,0x900,0xb00}; | |||
| int n_tunes = 0; | |||
| TUNE *tunes = NULL; | |||
| #define SECONDARY 3 | |||
| @@ -419,20 +416,17 @@ static int count_increments(int ix, int end_ix, int min_stress) | |||
| static void set_pitch(SYLLABLE *syl, int base, int drop) | |||
| /******************************************************/ | |||
| // Set the pitch of a vowel in syllable_tab. Base & drop are Hz * 256 | |||
| // Set the pitch of a vowel in syllable_tab | |||
| { | |||
| int pitch1, pitch2; | |||
| int flags = 0; | |||
| /* adjust experimentally */ | |||
| int pitch_range2 = 148; | |||
| int pitch_base2 = 72; | |||
| if(base < 0) base = 0; | |||
| pitch2 = ((base * pitch_range2 ) >> 15) + pitch_base2; | |||
| pitch2 = base; | |||
| if(drop < 0) | |||
| { | |||
| @@ -440,10 +434,12 @@ static void set_pitch(SYLLABLE *syl, int base, int drop) | |||
| drop = -drop; | |||
| } | |||
| pitch1 = pitch2 + ((drop * pitch_range2) >> 15); | |||
| pitch1 = pitch2 + drop; | |||
| if(pitch1 < 0) | |||
| pitch1 = 0; | |||
| if(pitch1 > 511) pitch1 = 511; | |||
| if(pitch2 > 511) pitch2 = 511; | |||
| if(pitch1 > 254) pitch1 = 254; | |||
| if(pitch2 > 254) pitch2 = 254; | |||
| syl->pitch1 = pitch1; | |||
| syl->pitch2 = pitch2; | |||
| @@ -466,13 +462,17 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *t | |||
| int initial; | |||
| int overflow=0; | |||
| int n_overflow; | |||
| int pitch_range; | |||
| int pitch_range_abs; | |||
| int *drops; | |||
| short *overflow_tab; | |||
| signed char *overflow_tab; | |||
| SYLLABLE *syl; | |||
| static short continue_tab[5] = {-13, 16, 10, 4, 0}; | |||
| static signed char continue_tab[5] = {-26, 32, 20, 8, 0}; | |||
| drops = th->body_drops; | |||
| pitch_range = (th->body_end - th->body_start) << 8; | |||
| pitch_range_abs = abs(pitch_range); | |||
| if(continuing) | |||
| { | |||
| @@ -480,8 +480,7 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *t | |||
| overflow = 0; | |||
| n_overflow = 5; | |||
| overflow_tab = continue_tab; | |||
| increment = (th->body_end - th->body_start) << 8; | |||
| increment = increment / (th->body_max_steps -1); | |||
| increment = pitch_range / (th->body_max_steps -1); | |||
| } | |||
| else | |||
| { | |||
| @@ -513,8 +512,7 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *t | |||
| if(n_steps > 1) | |||
| { | |||
| increment = (th->body_end - th->body_start) << 8; | |||
| increment = increment / (n_steps -1); | |||
| increment = pitch_range / (n_steps -1); | |||
| } | |||
| else | |||
| increment = 0; | |||
| @@ -527,7 +525,7 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *t | |||
| pitch += increment; | |||
| else | |||
| { | |||
| pitch = (th->body_end << 8) - (increment * overflow_tab[overflow++])/16; | |||
| pitch = (th->body_end << 8) + (pitch_range_abs * overflow_tab[overflow++])/64; | |||
| if(overflow >= n_overflow) | |||
| { | |||
| overflow = 0; | |||
| @@ -548,20 +546,20 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *t | |||
| if(stress >= PRIMARY) | |||
| { | |||
| syl->stress = PRIMARY_STRESSED; | |||
| set_pitch(syl,pitch,drops[stress]); | |||
| set_pitch(syl,(pitch >> 8),drops[stress]); | |||
| } | |||
| else | |||
| if(stress >= SECONDARY) | |||
| { | |||
| set_pitch(syl,pitch,drops[stress]); | |||
| set_pitch(syl,(pitch >> 8),drops[stress]); | |||
| } | |||
| else | |||
| { | |||
| /* unstressed, drop pitch if preceded by PRIMARY */ | |||
| if((syllable_tab[ix-1].stress & 0x3f) >= SECONDARY) | |||
| set_pitch(syl,pitch - (th->body_lower_u << 8), drops[stress]); | |||
| set_pitch(syl,(pitch >> 8) - th->body_lower_u, drops[stress]); | |||
| else | |||
| set_pitch(syl,pitch,drops[stress]); | |||
| set_pitch(syl,(pitch >> 8),drops[stress]); | |||
| } | |||
| ix++; | |||
| @@ -571,13 +569,12 @@ static int calc_pitch_segment(int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *t | |||
| static void SetPitchGradient(int start_ix, int end_ix, int start_pitch, int end_pitch) | |||
| {//==================================================================================== | |||
| // Set a linear pitch change over a number of syllables. | |||
| // Used for pre-head, unstressed syllables in the body, and the tail | |||
| static int calc_pitch_segment2(int ix, int end_ix, int start_p, int end_p, int min_stress) | |||
| /****************************************************************************************/ | |||
| /* Linear pitch rise/fall, change pitch at min_stress or stronger | |||
| Used for pre-head and tail */ | |||
| { | |||
| int ix; | |||
| int stress; | |||
| int pitch; | |||
| int increment; | |||
| @@ -585,49 +582,43 @@ static int calc_pitch_segment2(int ix, int end_ix, int start_p, int end_p, int m | |||
| int drop; | |||
| SYLLABLE *syl; | |||
| if(ix >= end_ix) | |||
| return(ix); | |||
| n_increments = count_increments(ix,end_ix,min_stress); | |||
| increment = (end_p - start_p) << 8; | |||
| increment = (end_pitch - start_pitch) << 8; | |||
| n_increments = end_ix - start_ix; | |||
| if(n_increments <= 0) | |||
| return; | |||
| if(n_increments > 1) | |||
| { | |||
| increment = increment / n_increments; | |||
| } | |||
| pitch = start_p << 8; | |||
| while(ix < end_ix) | |||
| pitch = start_pitch << 8; | |||
| for(ix=start_ix; ix < end_ix; ix++) | |||
| { | |||
| syl = &syllable_tab[ix]; | |||
| stress = syl->stress; | |||
| if(increment > 0) | |||
| { | |||
| set_pitch(syl,pitch,-increment); | |||
| set_pitch(syl,(pitch >> 8),-(increment >> 8)); | |||
| pitch += increment; | |||
| } | |||
| else | |||
| { | |||
| drop = -increment; | |||
| drop = -(increment >> 8); | |||
| if(drop < min_drop[stress]) | |||
| drop = min_drop[stress]; | |||
| pitch += increment; | |||
| if(drop > 0x900) | |||
| drop = 0x900; | |||
| set_pitch(syl, pitch, drop); | |||
| if(drop > 18) | |||
| drop = 18; | |||
| set_pitch(syl, (pitch >> 8), drop); | |||
| } | |||
| ix++; | |||
| } | |||
| return(ix); | |||
| } /* end of calc_pitch_segment2 */ | |||
| } // end of SetPitchGradient | |||
| @@ -651,10 +642,8 @@ static int calc_pitches(int start, int end, int head_tone, int nucleus_tone) | |||
| /* vowels before the first primary stress */ | |||
| /******************************************/ | |||
| if(number_pre > 0) | |||
| { | |||
| ix = calc_pitch_segment2(ix, ix+number_pre, th->pre_start, th->pre_end, 0); | |||
| } | |||
| SetPitchGradient(ix, ix+number_pre, th->pre_start, th->pre_end); | |||
| ix += number_pre; | |||
| /* body of tonic segment */ | |||
| /*************************/ | |||
| @@ -680,13 +669,13 @@ static int calc_pitches(int start, int end, int head_tone, int nucleus_tone) | |||
| { | |||
| tone_pitch_env = tn->pitch_env0; | |||
| drop = tn->tonic_max0 - tn->tonic_min0; | |||
| set_pitch(&syllable_tab[ix++],tn->tonic_min0 << 8,drop << 8); | |||
| set_pitch(&syllable_tab[ix++],tn->tonic_min0, drop); | |||
| } | |||
| else | |||
| { | |||
| tone_pitch_env = tn->pitch_env1; | |||
| drop = tn->tonic_max1 - tn->tonic_min1; | |||
| set_pitch(&syllable_tab[ix++],tn->tonic_min1 << 8,drop << 8); | |||
| set_pitch(&syllable_tab[ix++],tn->tonic_min1, drop); | |||
| } | |||
| syllable_tab[tone_posn].env = tone_pitch_env; | |||
| @@ -696,7 +685,7 @@ static int calc_pitches(int start, int end, int head_tone, int nucleus_tone) | |||
| /* tail, after the tonic syllable */ | |||
| /**********************************/ | |||
| calc_pitch_segment2(ix, end, tn->tail_start, tn->tail_end, 0); | |||
| SetPitchGradient(ix, end, tn->tail_start, tn->tail_end); | |||
| return(tone_pitch_env); | |||
| } /* end of calc_pitches */ | |||
| @@ -1057,13 +1046,8 @@ void CalcPitches(Translator *tr, int clause_type) | |||
| { | |||
| syl = &syllable_tab[st_ix]; | |||
| x = syl->pitch1 - 72; | |||
| if(x < 0) x = 0; | |||
| p->pitch1 = x; | |||
| x = syl->pitch2 - 72; | |||
| if(x < 0) x = 0; | |||
| p->pitch2 = x; | |||
| p->pitch1 = syl->pitch1; | |||
| p->pitch2 = syl->pitch2; | |||
| p->env = PITCHfall; | |||
| if(syl->flags & SYL_RISE) | |||
| @@ -1099,6 +1083,6 @@ if(p->tone_ph) | |||
| } | |||
| } | |||
| } // end of Translator::CalcPitches | |||
| } // end of CalcPitches | |||
| @@ -138,6 +138,7 @@ enum { | |||
| MENU_FORMAT_DICTIONARY, | |||
| MENU_SORT_DICTIONARY, | |||
| MENU_COMPILE_MBROLA, | |||
| MENU_COMPILE_INTONATION, | |||
| MENU_SPEAK_TRANSLATE, | |||
| MENU_SPEAK_RULES, | |||
| @@ -155,6 +156,7 @@ enum { | |||
| MENU_VOWELCHART3, | |||
| MENU_LEXICON, | |||
| MENU_LEXICON_RU, | |||
| MENU_LEXICON_BG, | |||
| MENU_LEXICON_DE, | |||
| MENU_LEXICON_IT, | |||
| MENU_LEXICON_IT2, | |||
| @@ -88,6 +88,7 @@ wxMenuBar *MakeMenu(int type) | |||
| data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); | |||
| data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); | |||
| data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list...")); | |||
| // data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data")); | |||
| data_menu->AppendSeparator(); | |||
| data_menu->Append(MENU_FORMAT_DICTIONARY, _("&Layout *_rules file")); | |||
| data_menu->Append(MENU_SORT_DICTIONARY, _("&Sort *_rules file")); | |||
| @@ -113,6 +114,7 @@ wxMenuBar *MakeMenu(int type) | |||
| lexicon_menu = new wxMenu; | |||
| lexicon_menu->Append(MENU_LEXICON_RU, _("Russian (lexicon.dict)")); | |||
| lexicon_menu->Append(MENU_LEXICON_BG, _("Bulgarian")); | |||
| lexicon_menu->Append(MENU_LEXICON_DE, _("German")); | |||
| lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); | |||
| lexicon_menu->Append(MENU_LEXICON_IT2, _("Italian, pass 2")); | |||
| @@ -120,7 +122,7 @@ wxMenuBar *MakeMenu(int type) | |||
| tools_menu = new wxMenu; | |||
| tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); | |||
| // tools_menu->Append(MENU_LOAD_WAV, _T("Analyse WAV file")); | |||
| tools_menu->Append(MENU_LEXICON, _("Compare &Lexicon"), lexicon_menu); | |||
| tools_menu->Append(MENU_LEXICON, _("Process &Lexicon"), lexicon_menu); | |||
| tools_menu->Append(MENU_TO_UTF8, _("Convert file to &UTF8...")); | |||
| tools_menu->Append(MENU_COUNT_WORDS, _("Count word &frequencies...")); | |||
| tools_menu->Append(MENU_TEST , _("Test (temporary)")); | |||
| @@ -769,7 +769,11 @@ static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB | |||
| { | |||
| if(roman || !(wtab[1].flags & FLAG_FIRST_UPPER)) | |||
| { | |||
| utf8_in(&c2, &word_end[2]); | |||
| if(word_end[0] == '.') | |||
| utf8_in(&c2, &word_end[2]); | |||
| else | |||
| utf8_in(&c2, &word_end[1]); | |||
| if((word_end[1] != 0) && ((c2 == 0) || (wtab[0].flags & FLAG_COMMA_AFTER) || IsAlpha(c2))) | |||
| { | |||
| // ordinal number is indicated by dot after the number | |||
| @@ -810,6 +814,19 @@ if((tr->prev_dict_flags & FLAG_ALT_TRANS) && ((c2 == 0) || (wtab[0].flags & FLAG | |||
| } // end of CheckDotOrdinal | |||
| static int hu_number_e(const char *word) | |||
| {//===================================== | |||
| // lang-hu: variant form of numbers when followed by hyphen and a suffix starting with 'a' or 'e' (but not a, e, az, ez, azt, ezt, att. ett | |||
| if((word[0] == 'a') || (word[0] == 'e')) | |||
| { | |||
| if((word[1] == ' ') || (word[1] == 'z') || ((word[1] == 't') && (word[2] == 't'))) | |||
| return(0); | |||
| return(1); | |||
| } | |||
| return(0); | |||
| } // end of hu_numnber_e | |||
| int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
| @@ -824,6 +841,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
| int repeat = 0; | |||
| int n_digits = 0; | |||
| char *word_start; | |||
| int num_control = 0; | |||
| unsigned int flags[2]; | |||
| char ph_roman[30]; | |||
| char number_chars[N_WORD_BYTES]; | |||
| @@ -895,18 +913,34 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) | |||
| sprintf(number_chars," %d ",acc); | |||
| if(word[0] == '.') | |||
| { | |||
| // dot has not been removed. This implies that there was no space after it | |||
| return(0); | |||
| } | |||
| if(CheckDotOrdinal(tr, word_start, word, wtab, 1)) | |||
| wtab[0].flags |= FLAG_ORDINAL; | |||
| if(tr->langopts.numbers & NUM_ROMAN_ORDINAL) | |||
| { | |||
| if((n_digits <= 1) && !(wtab[0].flags & FLAG_ORDINAL)) | |||
| return(0); | |||
| wtab[0].flags |= FLAG_ORDINAL; | |||
| if(tr->translator_name == L('h','u')) | |||
| { | |||
| if(!(wtab[0].flags & FLAG_ORDINAL)) | |||
| { | |||
| if((wtab[0].flags & FLAG_HYPHEN_AFTER) && hu_number_e(word)) | |||
| { | |||
| // should use the 'e' form of the number | |||
| num_control |= 1; | |||
| } | |||
| else | |||
| return(0); | |||
| } | |||
| } | |||
| } | |||
| tr->prev_dict_flags = 0; | |||
| TranslateNumber(tr, &number_chars[2], p, flags, wtab); | |||
| TranslateNumber(tr, &number_chars[2], p, flags, wtab, num_control); | |||
| if(tr->langopts.numbers & NUM_ROMAN_AFTER) | |||
| strcat(ph_out,ph_roman); | |||
| @@ -1319,11 +1353,11 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
| tensunits = value % 100; | |||
| buf1[0] = 0; | |||
| ph_thousands[0] = 0; | |||
| ph_thousand_and[0] = 0; | |||
| if(hundreds > 0) | |||
| { | |||
| ph_thousands[0] = 0; | |||
| ph_thousand_and[0] = 0; | |||
| found = 0; | |||
| if(ordinal && (tensunits == 0)) | |||
| { | |||
| @@ -1369,6 +1403,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
| } | |||
| ph_digits[0] = 0; | |||
| if(hundreds > 0) | |||
| { | |||
| if((tr->langopts.numbers & NUM_AND_HUNDRED) && ((control & 1) || (ph_thousands[0] != 0))) | |||
| @@ -1418,9 +1453,13 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
| } | |||
| ph_hundred_and[0] = 0; | |||
| if((tr->langopts.numbers & NUM_HUNDRED_AND) && (tensunits != 0)) | |||
| if(tensunits > 0) | |||
| { | |||
| if((value > 100) || ((control & 1) && (thousandplex==0))) | |||
| if((tr->langopts.numbers & NUM_HUNDRED_AND) && ((value > 100) || ((control & 1) && (thousandplex==0)))) | |||
| { | |||
| Lookup(tr, "_0and", ph_hundred_and); | |||
| } | |||
| if((tr->langopts.numbers & NUM_THOUSAND_AND) && (hundreds == 0) && ((control & 1) || (ph_thousands[0] != 0))) | |||
| { | |||
| Lookup(tr, "_0and", ph_hundred_and); | |||
| } | |||
| @@ -1461,8 +1500,8 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
| } // end of LookupNum3 | |||
| static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int *flags, WORD_TAB *wtab) | |||
| {//======================================================================================================== | |||
| static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control) | |||
| {//===================================================================================================================== | |||
| // Number translation with various options | |||
| // the "word" may be up to 4 digits | |||
| // "words" of 3 digits may be preceded by another number "word" for thousands or millions | |||
| @@ -1501,7 +1540,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
| n_digit_lookup = 0; | |||
| buf_digit_lookup[0] = 0; | |||
| digit_lookup = buf_digit_lookup; | |||
| number_control = 0; | |||
| number_control = control; | |||
| for(ix=0; isdigit(word[ix]); ix++) ; | |||
| n_digits = ix; | |||
| @@ -1639,9 +1678,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
| if(tr->translator_name == L('h','u')) | |||
| { | |||
| // variant form of numbers when followed by hyphen and a suffix starting with 'a' or 'e' (buit not a, e, az, ez, azt, ezt | |||
| if((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact==1) | |||
| && ((word[suffix_ix] == 'a') || (word[suffix_ix] == 'e')) && ((c = word[suffix_ix+1]) != ' ') && (c != 'z')) | |||
| // variant form of numbers when followed by hyphen and a suffix starting with 'a' or 'e' (but not a, e, az, ez, azt, ezt | |||
| if((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact==1) && hu_number_e(&word[suffix_ix])) | |||
| { | |||
| number_control |= 1; // use _1e variant of number | |||
| } | |||
| @@ -1821,13 +1859,13 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
| int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab) | |||
| {//================================================================================================ | |||
| int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control) | |||
| {//============================================================================================================= | |||
| if(option_sayas == SAYAS_DIGITS1) | |||
| return(0); // speak digits individually | |||
| if(tr->langopts.numbers != 0) | |||
| return(TranslateNumber_1(tr, word1, ph_out, flags, wtab)); | |||
| return(TranslateNumber_1(tr, word1, ph_out, flags, wtab, control)); | |||
| return(0); | |||
| } // end of TranslateNumber | |||
| @@ -192,7 +192,7 @@ void ConfigSave(int exit) | |||
| wxFileConfig *pConfig = (wxFileConfig *)(wxConfigBase::Get()); | |||
| #ifndef PLATFORM_WINDOWS | |||
| pConfig->Write(_T("/samplerate"),samplerate); | |||
| // pConfig->Write(_T("/samplerate"),samplerate); | |||
| #endif | |||
| pConfig->Write(_T("/spectload"),path_spectload); | |||
| pConfig->Write(_T("/spectload2"),path_spectload2); | |||
| @@ -62,6 +62,7 @@ | |||
| #define phLONG 0x200000 | |||
| #define phLENGTHENSTOP 0x400000 // make the pre-pause slightly longer | |||
| #define phRHOTIC 0x800000 | |||
| #define phNOPAUSE 0x1000000 | |||
| #define phLOCAL 0x80000000 // used during compilation | |||
| // fixed phoneme code numbers, these can be used from the program code | |||