| @@ -682,7 +682,7 @@ accouchement a#ku:SmO~ | |||
| accusation akju:z'eIS@n | |||
| acer eIs3 | |||
| acetylene a#sEt@li:n | |||
| accurate akjUr@t | |||
| accurate $alt2 | |||
| accursed a#k3:sI#d | |||
| ?5 accursed a#kVRsI#d | |||
| achille a#kIli: | |||
| @@ -837,6 +837,7 @@ apparatus ap@r'eIt@s | |||
| apprentice a#prEnt2Is | |||
| approximate a#pr0ksIm@t $only | |||
| approximate a#pr0ksImeIt $verb | |||
| approximately a#pr0ksIm@tli | |||
| aqueduct akwI#dVkt | |||
| arab ar@b | |||
| arabic $1 | |||
| @@ -1129,6 +1130,7 @@ chimera kaIm'i@r@ | |||
| chimpanzee $3 | |||
| chipotle tSI2poUtleI | |||
| chisel tSIz@L | |||
| chivalrous SIv@Lr@s | |||
| chloroplast $1 | |||
| chocolate tS0kl@t | |||
| cholera k0l@r@ | |||
| @@ -1185,7 +1187,6 @@ coliseum k0l@s'i:@m | |||
| collage k0l'A:Z | |||
| collarbone k0l3boUn | |||
| college k0lI2dZ | |||
| collegiate k@li:dZI@t | |||
| colloquial k@loUkwI@L | |||
| colon koUl@n | |||
| color kVl3 | |||
| @@ -1276,7 +1277,7 @@ coronet k0r@nEt | |||
| corolla k@roUl@ | |||
| corollary $2 | |||
| corporal kO@pr@L | |||
| corporate kO@p@r@t | |||
| corporate $alt2 | |||
| corps kO@ $only | |||
| corral k@r'al | |||
| corsage kO@s'A:Z | |||
| @@ -1348,8 +1349,8 @@ deity deI@ti | |||
| ?3 deity di:@t2i | |||
| deja deIZA: $only | |||
| deli dElI | |||
| deliberate dI2lIb@r@t | |||
| delicate dElI2k@t | |||
| deliberate $alt2 | |||
| delicate $alt2 | |||
| delimit dI2lImIt // delimited | |||
| delivery $alt2 | |||
| demolish dI2m0lIS | |||
| @@ -1587,6 +1588,7 @@ fetus fi:t@s | |||
| fi f,aI // as in "hi-fi" | |||
| fiasco fi:'askoU | |||
| fiat fi:@t | |||
| ficus fIk@s | |||
| fiery faI3rI | |||
| ?3 fillet fI2leI | |||
| finagle fI#neIg@L | |||
| @@ -1625,7 +1627,7 @@ foyer fOIeI | |||
| freelance fri:laans | |||
| freon fri:0n | |||
| fricassee frIka#seI | |||
| frigate frIg@t | |||
| frigate $alt2 | |||
| fringer frIndZ3 // infringer | |||
| fringing frIndZIN | |||
| frisson fri:s'O~ | |||
| @@ -1691,7 +1693,7 @@ gossamer g0s@m3 | |||
| goto goUtu: | |||
| gourmand gU@mA:nd | |||
| gourmet gU@meI | |||
| graduate gradju:@t | |||
| graduate $alt2 | |||
| graduate gradju:eIt $verb | |||
| graffiti $alt3 | |||
| grandson gr'andsVn | |||
| @@ -1708,7 +1710,7 @@ guinea gIni | |||
| gurus gu:ru:z | |||
| habitual $alt3 | |||
| hacienda hasI'End@ | |||
| hacienda hA:sI'End@ | |||
| haggis hagIs | |||
| haha hA:h'A: | |||
| halation $alt3 // in- | |||
| @@ -1811,20 +1813,20 @@ impi $1 | |||
| impinging Imp'IndZIN | |||
| implacable Impl'ak@b@L | |||
| imprecise ImprIs'aIs | |||
| inanimate In'anIm@t | |||
| inappropriate ,Ina#proUpri@t | |||
| inanimate $alt2 | |||
| inappropriate Ina#pr'oUpri@t | |||
| incense Ins'Ens $verb | |||
| incoming InkVmIN | |||
| increase Inkr'i:s $verb | |||
| indefine $3 | |||
| indeterminate IndI2t'3:mI2n@t | |||
| indeterminate $alt2 | |||
| indicative $2 | |||
| indices IndI2si:z | |||
| indict Ind'aIt | |||
| indie Indi | |||
| indirect $3 | |||
| ?3 indirect Ind3r'Ekt | |||
| indiscriminate IndI2skr'ImI2n@t | |||
| indiscriminate $alt2 | |||
| indo IndoU | |||
| indoor $1 $only | |||
| industry IndVstrI | |||
| @@ -1882,7 +1884,6 @@ iris aIrIs | |||
| iron aI3n | |||
| irony aIr@nI | |||
| isosceles aIs'0s@li:z | |||
| itinerary aIt'In@r@rI | |||
| ja jA: | |||
| jagged dZagI#d | |||
| @@ -1928,7 +1929,9 @@ labored leIb@d | |||
| laborer leIb@r3 | |||
| laborious $alt3 | |||
| labyrinth lab3rInT | |||
| lascivious $alt3 | |||
| lager lA:g3 | |||
| lagoon $alt3 | |||
| laity leI@ti | |||
| landowner l'and,oUn3 | |||
| lapel $alt3 | |||
| @@ -2077,7 +2080,7 @@ mercedes m3:s'eIdi:z | |||
| //mercenary m3:s@n@rI | |||
| merest mi@r@st | |||
| meringue m@raN | |||
| merlot me@l'oU | |||
| merlot m3:l'oU | |||
| mesa meIs@ | |||
| meson mi:z0n | |||
| metabolic mEt@b'0lIk | |||
| @@ -2214,7 +2217,7 @@ obelisk 0b@lI2sk | |||
| obesity oUb'i:s@ti | |||
| obey oUb'eI | |||
| obituary 0b'ItSU@i | |||
| ?3 obituary oUb'ItSUe@i | |||
| ?3 obituary oUb'ItSu:e@i | |||
| object $1 $onlys | |||
| object $verb | |||
| obsolete 0bs@li:t | |||
| @@ -2251,6 +2254,7 @@ oregano 0rIg'A:noU | |||
| orion 0r'aI@n | |||
| ornate $2 | |||
| orphan O@f@n // orphaned | |||
| ottoman 0t@m@n | |||
| outage aUtI2dZ | |||
| outback $1 | |||
| outcome $1 | |||
| @@ -2796,6 +2800,7 @@ spinal spaIn@L | |||
| spoonfed spu:nfEd | |||
| squirrel skwIr@L | |||
| staccato $alt3 | |||
| stasis steIsI#s | |||
| standby standbaI | |||
| stagnate $2 | |||
| ?3 stalagmite $alt3 | |||
| @@ -2894,7 +2899,7 @@ testes tEsti:z | |||
| telephon tElI2foUn // for telephoning | |||
| temperature tEmprI2tS3 | |||
| ?!3 temporary tEmpr@rI | |||
| ?3 template tEmpl@t | |||
| ?3 template $alt2 | |||
| tetanus tEt@n@s | |||
| therefore $1 | |||
| thereof De@r'0v | |||
| @@ -3209,6 +3214,7 @@ Aires aIrIz | |||
| Alamo al@moU | |||
| Albuquerque alb@k3:ki | |||
| Algiers $2 | |||
| Altura O:lt'U@r@ | |||
| Amman a#m'A:n | |||
| Andes andi:z | |||
| Angeles andZ@li:s | |||
| @@ -3394,6 +3400,7 @@ Montana m0nt'an@ | |||
| Monte m0nt2i | |||
| Munich mju:nIk | |||
| Myanmar mjA:nmA@ | |||
| Niagara naI'agr@ | |||
| Nairobi naIr'oUbi | |||
| Naples neIp@Lz | |||
| Nauru naUru: | |||
| @@ -4016,7 +4023,7 @@ unto ,VntU | |||
| upon @p0n $u2 | |||
| from fr0m $u | |||
| ?3 from frVm $u | |||
| (from the) fr,VmD@ | |||
| (from the) %frVmD@2 | |||
| (from where) %frVm||w'e@ $pause | |||
| (from which) %frVm||w'ItS $pause | |||
| up ,Vp $strend2 | |||
| @@ -1117,7 +1117,6 @@ | |||
| _s) ata (n eIt@ | |||
| _g) ator eIt3 | |||
| &) ate (_$w_alt2 @t | |||
| &) ately (_ @tli | |||
| der) ated (_ eItI#d | |||
| pal) ate (_ @t | |||
| consul) ate (_ @t | |||
| @@ -1214,6 +1213,7 @@ | |||
| g) au (s aU | |||
| ?!3 s) au (s 0 | |||
| ?!3 au (str 0 | |||
| au (sch aU | |||
| au (_ aU | |||
| _) auch %O:x | |||
| aud (_ 'O:d | |||
| @@ -1641,10 +1641,11 @@ | |||
| _) co (nw k0 | |||
| _) copy k0pI | |||
| _) copoly k'oUp,0lI | |||
| ?!3 _) co (rL03 k0# | |||
| coro (ll k0#r0 | |||
| co (rrect k@ | |||
| correspo k,0rIsp'0 | |||
| _) co (rri k0 | |||
| _) co (rr k0 | |||
| co (rro k@ | |||
| co (rrup k@ | |||
| _) co (sm k0 | |||
| @@ -3610,6 +3611,7 @@ | |||
| l) ith (er ID | |||
| _t) ith aID | |||
| it (i_ 'i:t | |||
| _) it (iner %aIt | |||
| itius (_ 'IS@s | |||
| itis (_ 'aItIs | |||
| &) it (ive_ =I2t | |||
| @@ -3883,6 +3885,7 @@ | |||
| &) name (_S4 neIm | |||
| _) nano (P4 n,anoU | |||
| nause nO:sI | |||
| _) navig navIg | |||
| necessit n@sEsIt | |||
| &) ness (_S4im n@s | |||
| ?8 &) ness (_S4im nEs | |||
| @@ -4983,7 +4986,7 @@ | |||
| rEr (_ r3 | |||
| C) rh r | |||
| rheu ru: | |||
| rhi (n raI | |||
| rhi (n# raI | |||
| rhi (z raI | |||
| _) rho (d roU | |||
| _) rhodo (@ roUd@ | |||
| @@ -5385,6 +5388,7 @@ | |||
| th (ill th | |||
| ee) thing DI2N | |||
| the (_ D | |||
| &) th (L03_ =T | |||
| ou) thed (_ Dd | |||
| th (en_ D | |||
| g) th (en_ T | |||
| @@ -5872,6 +5876,8 @@ | |||
| %B) y (_S1d I | |||
| _C) y (Ce aI | |||
| C) y (i I | |||
| &C) y (an_ =I | |||
| &C) y (en_ =I | |||
| y (iC_ j | |||
| sf) y (_ aI | |||
| Cf) y (_ %I | |||
| @@ -126,6 +126,8 @@ _9X t'on.n.u:t.t.i | |||
| _0C0 n'u:r:y | |||
| _0C nu:t.t.i | |||
| _1C0 orynu:ry | |||
| _1C orynu:t.t.i | |||
| _2C0 iRynn'u:ry | |||
| _2C irunnu:t.t.i | |||
| _3C0 munn'u:ry | |||
| @@ -164,6 +166,8 @@ _1Xf p'at | |||
| _12f p'antran.t | |||
| _13f p'atimu:v | |||
| _14f p'atina:l | |||
| _15f patin'ai:j | |||
| _18f patin'enn | |||
| _19f p'attomp'atin | |||
| _20f 'iruvatin | |||
| _2Xf 'iruvatt | |||
| @@ -340,7 +340,7 @@ elas $u+ $verbf | |||
| me $u $verbf // reflexive | |||
| te $u $verbf | |||
| nos $u $nounf | |||
| vos vus $u | |||
| vos $u | |||
| la $u | |||
| lo lU $u | |||
| las $u | |||
| @@ -1060,6 +1060,7 @@ proveta $alt2 | |||
| quarteto $alt2 | |||
| queda $alt | |||
| quede $alt2 | |||
| quimera $alt | |||
| quitinete $alt | |||
| quinteto $alt2 | |||
| ramalhete $alt2 | |||
| @@ -1069,7 +1070,8 @@ reconstroem $alt | |||
| recordo $alt | |||
| recorto $alt | |||
| rede $alt2 | |||
| reembolso $alt $verb | |||
| reembolso $alt2 | |||
| reembolso $alt $verb | |||
| reforço $alt $verb | |||
| reforços $alt | |||
| refresco $alt $verb | |||
| @@ -1111,6 +1113,7 @@ sinopse $alt | |||
| soco $alt2 | |||
| soco $alt $verb | |||
| sogra $alt | |||
| sopa $alt2 | |||
| sopro $alt2 $noun | |||
| soro $alt2 | |||
| sorvete $alt2 | |||
| @@ -210,7 +210,6 @@ | |||
| ib) e (rL04_ E | |||
| d) e (rL04_ E | |||
| ed) e (rL04_ e | |||
| m) e (rL04_ E | |||
| iv) e (rL04_ E | |||
| pod) e (rA_ e | |||
| @@ -343,13 +342,14 @@ | |||
| êCC) e (C@ e | |||
| ôC) e (C@ e | |||
| áC) e (C@ e | |||
| áCC) e (C@ e | |||
| áCC) e (CA_ e | |||
| éCC) e (CA_ e | |||
| éCCC) e (C@ e | |||
| íC) el (_ eU | |||
| íC) e (C@ e | |||
| íCC) e (C@ e | |||
| óC) e (C@ e | |||
| óCC) e (C@ e | |||
| óCC) e (CA_ e | |||
| úC) e (C@ e | |||
| úC) el (_ eU | |||
| ection (_ 'EkS&~N | |||
| @@ -427,6 +427,7 @@ _enver) e (dL03_ E | |||
| ad) e (quL04_ E | |||
| _dig) e (rL02_ E | |||
| _ing) e (rL02_ E | |||
| _m) e (rL03_ E | |||
| _sev) e (rL03_ E | |||
| _reit) e (rL03_ E | |||
| _sinc) e (rL03_ E | |||
| @@ -438,6 +439,8 @@ _enver) e (dL03_ E | |||
| gen) e (rL04_ E // de- re- | |||
| _alt) e (rL04_ E | |||
| _enc) e (rL04_ E | |||
| _esm) e (rL04_ E | |||
| _esm) e (rL04_ E | |||
| _imp) e (rL04_ E | |||
| _min) e (rL04_ E | |||
| _sug) e (rL04_ E | |||
| @@ -448,9 +451,11 @@ _enver) e (dL03_ E | |||
| eson) e (rL04_ E | |||
| _apod) e (rL04_ E | |||
| _coop) e (rL04_ E | |||
| _enum) e (rL04_ E | |||
| _exub) e (rL04_ E | |||
| _temp) e (rL04_ E | |||
| _adult) e (rL04_ E | |||
| _aglom) e (rL04_ E | |||
| _dilac) e (rL04_ E | |||
| _encarc) e (rL04_ E | |||
| _incin) e (rL04_ E | |||
| @@ -512,7 +517,6 @@ _entorp) e (çL03_ e | |||
| //endsort | |||
| .group é | |||
| é ''E | |||
| éi ''EI | |||
| @@ -727,6 +731,9 @@ _entorp) e (çL03_ e | |||
| ?2 _) os (_ Us | |||
| ?2 _) os (_A Uz | |||
| ?2 _) os (_G Uz | |||
| ?2 _v) os (_ us | |||
| ?2 _v) os (_A uz | |||
| ?2 _v) os (_G uz | |||
| ou ow | |||
| oi oI | |||
| oi ($w_alt OI | |||
| @@ -825,6 +832,7 @@ _entorp) e (çL03_ e | |||
| v) o (re_ o | |||
| b) o (rL04_ O | |||
| o (p_ O | |||
| C) o (pL04_ O | |||
| ?1 _) o (C O // eg: olá, orla, opção, etc... | |||
| ?1 _C) o (CACAC u // Documento, documentação, localizar, etc. | |||
| ?1 f) o (rmat u // formatar, formato. | |||
| @@ -862,6 +870,7 @@ _pormen) o (L05_ O | |||
| _engl) o (bL04_ O | |||
| _sal) o (brL03_ o | |||
| _) o (cL03_ o | |||
| _barr) o (cL03_ o | |||
| _m) o (fL01_ O | |||
| _m) o (fL02_ O | |||
| _af) o (fL04_ O | |||
| @@ -874,13 +883,8 @@ _pormen) o (L05_ O | |||
| _emp) o (lgL04_ O | |||
| _) o (lhL04_ O | |||
| m) o (lhL04_ O | |||
| emb) o (lsL02_ O | |||
| emb) o (lsL04_ O | |||
| _env) o (ltL03_ o | |||
| ent) o (pL02_ O | |||
| _c) o (pL03_ O | |||
| _t) o (pL04_ O | |||
| _ens) o (pL04_ O | |||
| _gal) o (pL04_ O | |||
| _s) o (prL04_ O | |||
| _al) o (prL04_ O | |||
| _ass) o (prL04_ O | |||
| @@ -206,6 +206,15 @@ bom bo+m $u // example of unstressed [o] | |||
| skozi sko+zi $u+ | |||
| za $u+ | |||
| le lE | |||
| // conjunctions | |||
| če tSE $u | |||
| ker kER | |||
| ter tER $u+ | |||
| vseeno us'E:Eno | |||
| // verb: to be | |||
| sem s@m $u | |||
| @@ -38,8 +38,12 @@ | |||
| .group e | |||
| e e: | |||
| e (X$w_alt3+ 'E | |||
| ee i: | |||
| ee i: | |||
| _n) ee E:E | |||
| _r) ee E:E | |||
| _pr) ee E:E | |||
| e (X$w_alt4 @ | |||
| @) e (n_ E# | |||
| @C) e (r_ E# | |||
| @@ -119,7 +123,8 @@ | |||
| o (č_ 'o: | |||
| o (j_ 'o: | |||
| o (l_ 'o: | |||
| oo u: | |||
| o (oč o: | |||
| .group p | |||
| p p | |||
| @@ -119,7 +119,9 @@ phoneme k | |||
| Vowelout f1=0 f2=2300 200 300 f3=-200 80 rms=20 | |||
| ENDIF | |||
| IF nextPh(isPause2) AND prevPhW(isVowel) THEN | |||
| IF thisPh(isWordEnd) THEN | |||
| WAV(ustop/k) | |||
| ELIF nextPh(isPause2) THEN | |||
| WAV(ustop/k_) | |||
| ELIF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN | |||
| WAV(ustop/kr) | |||
| @@ -526,6 +526,10 @@ unsigned short ipa1[96] = { | |||
| 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x303,0x7f | |||
| }; | |||
| #define N_PHON_OUT 500 | |||
| static char *phon_out_buf = NULL; | |||
| static int phon_out_size = 0; | |||
| char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int use_ipa, int *flags) | |||
| {//=================================================================================================== | |||
| @@ -629,8 +633,8 @@ char *WritePhMnemonic(char *phon_out, PHONEME_TAB *ph, PHONEME_LIST *plist, int | |||
| void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode) | |||
| {//=============================================================================== | |||
| const char *GetTranslatedPhonemeString(int phoneme_mode) | |||
| {//======================================================= | |||
| /* Called after a clause has been translated into phonemes, in order | |||
| to display the clause in phoneme mnemonic form. | |||
| @@ -640,7 +644,6 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode | |||
| int ix; | |||
| unsigned int len; | |||
| unsigned int max_len; | |||
| int phon_out_ix=0; | |||
| int stress; | |||
| int c; | |||
| @@ -668,108 +671,107 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode | |||
| use_tie = 0; | |||
| } | |||
| if(phon_out != NULL) | |||
| for(ix=1; ix<(n_phoneme_list-2); ix++) | |||
| { | |||
| for(ix=1; ix<(n_phoneme_list-2); ix++) | |||
| { | |||
| buf = phon_buf; | |||
| buf = phon_buf; | |||
| plist = &phoneme_list[ix]; | |||
| plist = &phoneme_list[ix]; | |||
| WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags); | |||
| if(plist->newword) | |||
| *buf++ = ' '; | |||
| else | |||
| WritePhMnemonic(phon_buf2, plist->ph, plist, use_ipa, &flags); | |||
| if(plist->newword) | |||
| *buf++ = ' '; | |||
| else | |||
| { | |||
| if((separate_phonemes != 0) && (ix > 1)) | |||
| { | |||
| if((separate_phonemes != 0) && (ix > 1)) | |||
| utf8_in(&c, phon_buf2); | |||
| if((c < 0x2b0) || (c > 0x36f)) // not if the phoneme starts with a superscript letter | |||
| { | |||
| utf8_in(&c, phon_buf2); | |||
| if((c < 0x2b0) || (c > 0x36f)) // not if the phoneme starts with a superscript letter | |||
| { | |||
| *buf++ = separate_phonemes; | |||
| } | |||
| *buf++ = separate_phonemes; | |||
| } | |||
| } | |||
| } | |||
| if(plist->synthflags & SFLAG_SYLLABLE) | |||
| if(plist->synthflags & SFLAG_SYLLABLE) | |||
| { | |||
| if((stress = plist->stresslevel) > 1) | |||
| { | |||
| if((stress = plist->stresslevel) > 1) | |||
| { | |||
| c = 0; | |||
| if(stress > 5) stress = 5; | |||
| c = 0; | |||
| if(stress > 5) stress = 5; | |||
| if(use_ipa) | |||
| { | |||
| c = 0x2cc; // ipa, secondary stress | |||
| if(stress > 3) | |||
| c = 0x02c8; // ipa, primary stress | |||
| } | |||
| else | |||
| { | |||
| c = stress_chars[stress]; | |||
| } | |||
| if(use_ipa) | |||
| { | |||
| c = 0x2cc; // ipa, secondary stress | |||
| if(stress > 3) | |||
| c = 0x02c8; // ipa, primary stress | |||
| } | |||
| else | |||
| { | |||
| c = stress_chars[stress]; | |||
| } | |||
| if(c != 0) | |||
| { | |||
| buf += utf8_out(c, buf); | |||
| if(c != 0) | |||
| { | |||
| buf += utf8_out(c, buf); | |||
| // if(separate_phonemes) | |||
| // *buf++ = separate_phonemes; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| flags = 0; | |||
| count = 0; | |||
| for(p=phon_buf2; *p != 0;) | |||
| flags = 0; | |||
| count = 0; | |||
| for(p=phon_buf2; *p != 0;) | |||
| { | |||
| p += utf8_in(&c, p); | |||
| if(use_tie > 0) | |||
| { | |||
| p += utf8_in(&c, p); | |||
| if(use_tie > 0) | |||
| // look for non-inital alphabetic character, but not diacritic, superscript etc. | |||
| if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha2(c)) | |||
| { | |||
| // look for non-inital alphabetic character, but not diacritic, superscript etc. | |||
| if((count>0) && !(flags & (1 << (count-1))) && ((c < 0x2b0) || (c > 0x36f)) && iswalpha2(c)) | |||
| { | |||
| buf += utf8_out(char_tie[use_tie-1], buf); | |||
| } | |||
| buf += utf8_out(char_tie[use_tie-1], buf); | |||
| } | |||
| buf += utf8_out(c, buf); | |||
| count++; | |||
| } | |||
| buf += utf8_out(c, buf); | |||
| count++; | |||
| } | |||
| if(plist->ph->code != phonSWITCH) | |||
| if(plist->ph->code != phonSWITCH) | |||
| { | |||
| if(plist->synthflags & SFLAG_LENGTHEN) | |||
| { | |||
| if(plist->synthflags & SFLAG_LENGTHEN) | |||
| { | |||
| buf = WritePhMnemonic(buf, phoneme_tab[phonLENGTHEN], NULL, use_ipa, NULL); | |||
| } | |||
| if((plist->synthflags & SFLAG_SYLLABLE) && (plist->type != phVOWEL)) | |||
| { | |||
| // syllablic consonant | |||
| buf = WritePhMnemonic(buf, phoneme_tab[phonSYLLABIC], NULL, use_ipa, NULL); | |||
| } | |||
| if(plist->tone_ph > 0) | |||
| { | |||
| buf = WritePhMnemonic(buf, phoneme_tab[plist->tone_ph], NULL, use_ipa, NULL); | |||
| } | |||
| buf = WritePhMnemonic(buf, phoneme_tab[phonLENGTHEN], NULL, use_ipa, NULL); | |||
| } | |||
| len = buf - phon_buf; | |||
| max_len = (n_phon_out - phon_out_ix - 5); // allow for " ..." and zero byte terminator | |||
| if(len > max_len) | |||
| if((plist->synthflags & SFLAG_SYLLABLE) && (plist->type != phVOWEL)) | |||
| { | |||
| // syllablic consonant | |||
| buf = WritePhMnemonic(buf, phoneme_tab[phonSYLLABIC], NULL, use_ipa, NULL); | |||
| } | |||
| if(plist->tone_ph > 0) | |||
| { | |||
| strcpy(&phon_buf[max_len], " ..."); | |||
| len = max_len + 4; | |||
| buf = WritePhMnemonic(buf, phoneme_tab[plist->tone_ph], NULL, use_ipa, NULL); | |||
| } | |||
| phon_buf[len] = 0; | |||
| strcpy(&phon_out[phon_out_ix], phon_buf); | |||
| phon_out_ix += len; | |||
| } | |||
| if(len > max_len) | |||
| len = buf - phon_buf; | |||
| if((phon_out_ix + len) >= phon_out_size) | |||
| { | |||
| // enlarge the phoneme buffer | |||
| phon_out_size = phon_out_ix + len + N_PHON_OUT; | |||
| if((phon_out_buf = (char *)realloc(phon_out_buf, phon_out_size)) == NULL) | |||
| { | |||
| break; | |||
| phon_out_size = 0; | |||
| return(""); | |||
| } | |||
| } | |||
| phon_out[phon_out_ix] = 0; | |||
| phon_buf[len] = 0; | |||
| strcpy(&phon_out_buf[phon_out_ix], phon_buf); | |||
| phon_out_ix += len; | |||
| } | |||
| phon_out_buf[phon_out_ix] = 0; | |||
| return(phon_out_buf); | |||
| } // end of GetTranslatedPhonemeString | |||
| @@ -1831,17 +1831,24 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
| } | |||
| else | |||
| { | |||
| if((!found) && (tensunits == 0)) | |||
| if((hundreds==1) && (tr->langopts.numbers2 & NUM2_OMIT_1_HUNDRED_ONLY) && ((control & 1)==0)) | |||
| { | |||
| // is there a special pronunciation for exactly n00 ? | |||
| sprintf(string,"_%dC0",hundreds); | |||
| found = Lookup(tr, string, ph_digits); | |||
| // only look for special 100 if there are previous thousands | |||
| } | |||
| if(!found) | |||
| else | |||
| { | |||
| sprintf(string,"_%dC",hundreds); | |||
| found = Lookup(tr, string, ph_digits); // is there a specific pronunciation for n-hundred ? | |||
| if((!found) && (tensunits == 0)) | |||
| { | |||
| // is there a special pronunciation for exactly n00 ? | |||
| sprintf(string,"_%dC0",hundreds); | |||
| found = Lookup(tr, string, ph_digits); | |||
| } | |||
| if(!found) | |||
| { | |||
| sprintf(string,"_%dC",hundreds); | |||
| found = Lookup(tr, string, ph_digits); // is there a specific pronunciation for n-hundred ? | |||
| } | |||
| } | |||
| if(found) | |||
| @@ -1855,9 +1862,6 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null | |||
| { | |||
| if((tr->langopts.numbers & NUM_OMIT_1_HUNDRED) != 0) | |||
| say_one_hundred = 0; | |||
| if(((tr->langopts.numbers2 & NUM2_OMIT_1_HUNDRED_ONLY) != 0) && ((control & 1)==0)) | |||
| say_one_hundred = 0; | |||
| } | |||
| if(say_one_hundred != 0) | |||
| @@ -1164,14 +1164,15 @@ ESPEAK_API void espeak_SetPhonemeTrace(int value, FILE *stream) | |||
| } // end of espeak_SetPhonemes | |||
| ESPEAK_API void espeak_TextToPhonemes(const void *text, char *buffer, int size, int textmode, int phonememode) | |||
| {//============================================================================================================== | |||
| ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, int phonememode) | |||
| {//================================================================================================= | |||
| /* phoneme_mode bits 0-3: 0=only phoneme names, 1=ties, 2=ZWJ, 3=underscore separator | |||
| bits 4-7: 0=eSpeak phoneme names, 1=IPA | |||
| */ | |||
| option_multibyte = textmode & 7; | |||
| TranslateClause(translator, NULL, text, NULL, NULL); | |||
| GetTranslatedPhonemeString(buffer, size, phonememode); | |||
| *textptr = TranslateClause(translator, NULL, *textptr, NULL, NULL); | |||
| return(GetTranslatedPhonemeString(phonememode)); | |||
| } | |||
| @@ -34,7 +34,7 @@ | |||
| #define ESPEAK_API | |||
| #endif | |||
| #define ESPEAK_API_REVISION 7 | |||
| #define ESPEAK_API_REVISION 9 | |||
| /* | |||
| Revision 2 | |||
| Added parameter "options" to eSpeakInitialize() | |||
| @@ -58,6 +58,9 @@ Revision 7 24.Dec.2011 | |||
| Revision 8 26.Apr.2013 | |||
| Added function espeak_TextToPhonemes(). | |||
| Revision 9 30.May.2013 | |||
| Changed function espeak_TextToPhonemes(). | |||
| */ | |||
| /********************/ | |||
| /* Initialization */ | |||
| @@ -35,7 +35,7 @@ | |||
| #include "translate.h" | |||
| #include "wave.h" | |||
| const char *version_string = "1.47.11b 28.May.13"; | |||
| const char *version_string = "1.47.11c 31.May.13"; | |||
| const int version_phdata = 0x014709; | |||
| int option_device_number = -1; | |||
| @@ -1865,6 +1865,7 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) | |||
| char *voice_change; | |||
| static FILE *f_text=NULL; | |||
| static const void *p_text=NULL; | |||
| const char *phon_out; | |||
| if(control == 4) | |||
| { | |||
| @@ -1957,14 +1958,14 @@ int SpeakNextClause(FILE *f_in, const void *text_in, int control) | |||
| if(option_phonemes >= 3) | |||
| phoneme_mode = 0x10 + option_phonemes-3; // 0x10=ipa, 0x11=ipa with tie, 0x12=ipa with ZWJ, 0x13=ipa with separators | |||
| GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), phoneme_mode); | |||
| phon_out = GetTranslatedPhonemeString(phoneme_mode); | |||
| if(option_phonemes > 0) | |||
| { | |||
| fprintf(f_trans,"%s\n",translator->phon_out); | |||
| fprintf(f_trans,"%s\n",phon_out); | |||
| } | |||
| if(phoneme_callback != NULL) | |||
| { | |||
| phoneme_callback(translator->phon_out); | |||
| phoneme_callback(phon_out); | |||
| } | |||
| } | |||
| @@ -1484,7 +1484,7 @@ SetLengthMods(tr,3); // all equal | |||
| if(name2 == L('m','l')) | |||
| { | |||
| tr->letter_bits_offset = OFFSET_MALAYALAM; | |||
| tr->langopts.numbers = NUM_OMIT_1_THOUSAND; | |||
| tr->langopts.numbers = NUM_OMIT_1_THOUSAND | NUM_OMIT_1_HUNDRED; | |||
| tr->langopts.numbers2 = NUM2_OMIT_1_HUNDRED_ONLY; | |||
| } | |||
| else | |||
| @@ -3041,7 +3041,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre | |||
| c = ' '; | |||
| pre_pause_add = 4; | |||
| } | |||
| else if((prev_out == ' ') && IsAlpha(sbuf[ix-2]) && !IsAlpha(prev_in)) | |||
| else if((prev_out == ' ') && IsAlpha(prev_out2) && !IsAlpha(prev_in)) | |||
| { | |||
| // insert extra space between a word + space + hyphen, to distinguish 'a -2' from 'a-2' | |||
| sbuf[ix++] = ' '; | |||
| @@ -3139,7 +3139,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre | |||
| decimal_sep_count = 1; | |||
| } | |||
| } | |||
| else if((prev_out == ' ') && IsAlpha(sbuf[ix-2]) && !IsAlpha(prev_in)) | |||
| else if((prev_out == ' ') && IsAlpha(prev_out2) && !IsAlpha(prev_in)) | |||
| { | |||
| // insert extra space between a word and a number, to distinguish 'a 2' from 'a2' | |||
| sbuf[ix++] = ' '; | |||
| @@ -581,7 +581,6 @@ typedef struct | |||
| const char *transpose_map; | |||
| char dictionary_name[40]; | |||
| char phon_out[500]; | |||
| char phonemes_repeat[20]; | |||
| int phonemes_repeat_count; | |||
| int phoneme_tab_ix; | |||
| @@ -723,7 +722,7 @@ int iswlower2(int c); | |||
| int iswupper2(int c); | |||
| int towlower2(unsigned int c); | |||
| int towupper2(unsigned int c); | |||
| void GetTranslatedPhonemeString(char *phon_out, int n_phon_out, int phoneme_mode); | |||
| const char *GetTranslatedPhonemeString(int phoneme_mode); | |||
| const char *WordToString2(unsigned int word); | |||
| ALPHABET *AlphabetFromChar(int c); | |||
| ALPHABET *AlphabetFromName(const char *name); | |||
| @@ -406,6 +406,7 @@ void TranslDlg::OnCommand(wxCommandEvent& event) | |||
| int translate_text = 0; | |||
| char buf[1000]; | |||
| char phon_out[N_PH_LIST*2]; | |||
| const char *phon_out2; | |||
| int clause_tone; | |||
| int clause_count; | |||
| int use_ipa = 0; | |||
| @@ -495,11 +496,11 @@ void TranslDlg::OnCommand(wxCommandEvent& event) | |||
| CalcPitches(translator,clause_tone); | |||
| CalcLengths(translator); | |||
| GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa); | |||
| phon_out2 = GetTranslatedPhonemeString(use_ipa); | |||
| if(clause_count++ > 0) | |||
| strcat(phon_out," ||"); | |||
| strcat(phon_out,translator->phon_out); | |||
| t_phonetic->SetValue(wxString(translator->phon_out,wxConvUTF8)); | |||
| strcat(phon_out, phon_out2); | |||
| t_phonetic->SetValue(wxString(phon_out2, wxConvUTF8)); | |||
| if((n_ph_list + n_phoneme_list) >= N_PH_LIST) | |||
| { | |||