// Arabic letters | // Arabic letters | ||||
ء h'amza | ء h'amza | ||||
آ 'Elifm,adda# | |||||
أ 'Elifh,amza | |||||
ا 'Elif | |||||
ب bE? | |||||
آ al'if_mamd'uda# | |||||
أ h'amza_taht_al'if | |||||
ؤ h'amza_?la_waw | |||||
إ al'if_taht_h'amza | |||||
ئ h'amza_?la_jE? | |||||
ا al'if | |||||
ب ba | |||||
ة t'E?maR2b'uta# | ة t'E?maR2b'uta# | ||||
ت tE? | |||||
ت ta | |||||
ث TE? | ث TE? | ||||
ج ZIm | |||||
ج dZi:m | |||||
ح hE? | ح hE? | ||||
خ xE? | خ xE? | ||||
د dEl/1 | |||||
ذ DEl/1 | |||||
د dal/1 | |||||
ذ Dal/1 | |||||
ر R2A:? | ر R2A:? | ||||
ز zEjn | ز zEjn | ||||
س si:n | س si:n | ||||
ش Si:n | ش Si:n | ||||
ص sO:d@- | |||||
ض dO:d@- | |||||
ص sa:d@- | |||||
ض da:d@- | |||||
ط thA:? | ط thA:? | ||||
ظ DA:? | ظ DA:? | ||||
ع ?ajn | |||||
غ Q"ajn | |||||
ف fE? | |||||
ق qO:f | |||||
ك kEf | |||||
ل lEm | |||||
ع '?Ein | |||||
غ 'Q"Ein | |||||
ف fa | |||||
ق qa:f | |||||
ك kaf | |||||
ل lam | |||||
م mi:m | م mi:m | ||||
ن nu|:n | ن nu|:n | ||||
ه hE? | |||||
و wO:w | |||||
ه ha | |||||
و waw | |||||
ى al'if_maks'ura | |||||
ي jE? | ي jE? | ||||
// Farsi | |||||
پ pa | |||||
چ tSa | |||||
ژ Za | |||||
گ ga:f | |||||
ی f'A@si||j'e | |||||
ک k'a:f | |||||
// Urdu | |||||
ٹ te | |||||
ڈ de | |||||
ڑ z.e | |||||
ے barij'e | |||||
ھ h'@ | |||||
َ a | َ a | ||||
ِ i | ِ i | ||||
alas a#l'as | alas a#l'as | ||||
albeit O:lb'i:It | albeit O:lb'i:It | ||||
alfalfa alf'alf@ | alfalfa alf'alf@ | ||||
algebra aldZI2br@ | |||||
alias eIli@s | alias eIli@s | ||||
alibi al@baI | alibi al@baI | ||||
alibis al@baIz | alibis al@baIz | ||||
(tear apart) t,e@||a#pA@t | (tear apart) t,e@||a#pA@t | ||||
(tear off) t'e@||'0f | (tear off) t'e@||'0f | ||||
teargas ti@3gas | teargas ti@3gas | ||||
techy tEki | |||||
teddybear t'EdIb,e@ | teddybear t'EdIb,e@ | ||||
telemetry t@lEm@tri | telemetry t@lEm@tri | ||||
telepathy t@lEp@Ti | telepathy t@lEp@Ti | ||||
?5 Luxembourg lVks@mbVRg | ?5 Luxembourg lVks@mbVRg | ||||
Madagascar mad@g'ask3 | Madagascar mad@g'ask3 | ||||
Madras m@draas | Madras m@draas | ||||
Madrid m@drId | |||||
Madrid m@drId | |||||
Malawi $alt3 | Malawi $alt3 | ||||
Malayalam maleI'A:l@m | |||||
Maldives mO:ld'i:v | Maldives mO:ld'i:v | ||||
Mali mA:li | Mali mA:li | ||||
Mandalay $3 | Mandalay $3 | ||||
Wyoming waI'oUmIN | Wyoming waI'oUmIN | ||||
Xhosa kO:s@ | Xhosa kO:s@ | ||||
Yemen $alt2 | Yemen $alt2 | ||||
Yosemite joUs'Em@ti | |||||
zaire zaI'i@3 | zaire zaI'i@3 | ||||
zimbabwe zI2mbA:bwi | zimbabwe zI2mbA:bwi | ||||
zimbabwean zI2mbA:bwI@n | zimbabwean zI2mbA:bwI@n |
a) ch (il k | a) ch (il k | ||||
bra) ch k | bra) ch k | ||||
te) ch (K k | te) ch (K k | ||||
_te) ch k | |||||
ch (isC k | ch (isC k | ||||
ch (ic_ k | ch (ic_ k | ||||
@@Car) ch (_ k | @@Car) ch (_ k | ||||
&n) iel (_ j@L | &n) iel (_ j@L | ||||
&r) iel (_ =i:@L | &r) iel (_ =i:@L | ||||
ie (n i@ | ie (n i@ | ||||
&) ie (n_ =i@n | |||||
d) iene (_ 'aIi:n | d) iene (_ 'aIi:n | ||||
ie (ntal I'E | ie (ntal I'E | ||||
g) ie (n i: | g) ie (n i: |
eles $u+ $verbf | eles $u+ $verbf | ||||
elas $u+ $verbf | elas $u+ $verbf | ||||
me $u // reflexive | |||||
me $u $verbf | |||||
me $u $verbf // reflexive | |||||
te $u $verbf | te $u $verbf | ||||
nos $u $nounf | nos $u $nounf | ||||
la $u | la $u | ||||
?2 nesta $u+ $nounf | ?2 nesta $u+ $nounf | ||||
?2 neste $u+ $nounf n'estSi //in this | ?2 neste $u+ $nounf n'estSi //in this | ||||
?2 esse $u+ $nounf 'esi // that | ?2 esse $u+ $nounf 'esi // that | ||||
essa 'Es& $u+ | |||||
essa 'Es& $u+ $noun | |||||
desse $u+ $nounf | desse $u+ $nounf | ||||
desta $nounf | desta $nounf | ||||
nesse n'esy $u+ $nounf | nesse n'esy $u+ $nounf | ||||
duns $u $nounf | duns $u $nounf | ||||
dumas $u $nounf | dumas $u $nounf | ||||
em $u // in,on,at | |||||
em $u $noun // in,on,at | |||||
no nu $u $nounf | no nu $u $nounf | ||||
na $u $nounf | na $u $nounf | ||||
num $u $nounf | num $u $nounf | ||||
// conjunctions | // conjunctions | ||||
?1 e i $u // and | ?1 e i $u // and | ||||
?2 e i $u // and | ?2 e i $u // and | ||||
se $u // if | |||||
se $u+ $verbf // if | |||||
?2 mas $u // but | ?2 mas $u // but | ||||
estava $u | estava $u | ||||
estávamos $u | estávamos $u | ||||
astavam $u | |||||
estavam $u | |||||
estive $u | estive $u | ||||
?2 esteve estevy $u2 | ?2 esteve estevy $u2 | ||||
// some common adjectives and adverbs | // some common adjectives and adverbs | ||||
alguns $u // some | |||||
algumas $u // some | |||||
não n,&U~ $strend // not | |||||
alguns $u $noun // some | |||||
algumas $u $noun // some | |||||
não n,&U~ $verbf $strend // not | |||||
nunca $u+ $verbf | |||||
sempre $u+ $verbf | |||||
qualquer $u $nounf | |||||
quaisquer $u $nounf | |||||
jamais $u+ $verbf | |||||
// MAIN WORD DICTIONARY | // MAIN WORD DICTIONARY | ||||
aeroportos $alt | aeroportos $alt | ||||
albatrozes $alt | albatrozes $alt | ||||
alcateia $alt | alcateia $alt | ||||
alcova $alt2 | |||||
alferes $alt | alferes $alt | ||||
algozes $alt | algozes $alt | ||||
alicerce $alt | |||||
almoço $alt $verb | almoço $alt $verb | ||||
ameba $alt | ameba $alt | ||||
amores $alt2 | amores $alt2 | ||||
besta $alt2 | besta $alt2 | ||||
bilhete $alt2 | bilhete $alt2 | ||||
boca $alt2 | boca $alt2 | ||||
boceta $alt2 | |||||
bochecha $alt2 | bochecha $alt2 | ||||
bojo $alt2 | bojo $alt2 | ||||
boleia $alt | boleia $alt | ||||
borra $alt2 $noun | borra $alt2 $noun | ||||
bosque $alt | bosque $alt | ||||
boto $alt2 $noun | boto $alt2 $noun | ||||
boxe $alt | |||||
brejo $alt | brejo $alt | ||||
bromelha $alt | bromelha $alt | ||||
cabelo $alt2 | cabelo $alt2 | ||||
cadete $alt2 | cadete $alt2 | ||||
camelha $alt | camelha $alt | ||||
camelo $alt2 | camelo $alt2 | ||||
caminhonete $alt | |||||
camiseta $alt2 | camiseta $alt2 | ||||
cantora $alt2 | cantora $alt2 | ||||
capacete $alt2 | capacete $alt2 | ||||
faceta $alt2 | faceta $alt2 | ||||
fantoche $alt | fantoche $alt | ||||
farofa $alt | farofa $alt | ||||
farolete $alt2 | |||||
febre $alt | febre $alt | ||||
fera $alt | fera $alt | ||||
feitora $alt2 | feitora $alt2 | ||||
ferozes $alt | ferozes $alt | ||||
fezes $alt | fezes $alt | ||||
filete $alt2 | |||||
?1 fixe fiSy | ?1 fixe fiSy | ||||
foda $alt2 $verb | foda $alt2 $verb | ||||
fogos $alt | fogos $alt | ||||
galera $alt | galera $alt | ||||
galileia $alt | galileia $alt | ||||
gameta $alt2 | gameta $alt2 | ||||
garçonete $alt2 | |||||
geleia $alt | geleia $alt | ||||
gelo $alt2 | gelo $alt2 | ||||
gelo $alt $verb | gelo $alt $verb | ||||
joguete $alt2 | joguete $alt2 | ||||
lagosta $alt2 | lagosta $alt2 | ||||
lambreta $alt2 | lambreta $alt2 | ||||
lanchonete $alt | |||||
lebre $alt | lebre $alt | ||||
lembrete $alt2 | lembrete $alt2 | ||||
lepra $alt | lepra $alt | ||||
macete $alt2 | macete $alt2 | ||||
maior $alt | maior $alt | ||||
maleta $alt2 | maleta $alt2 | ||||
marionete $alt | |||||
marreta $alt2 | marreta $alt2 | ||||
megera $alt | megera $alt | ||||
melhor $alt | melhor $alt | ||||
modelo $alt2 | modelo $alt2 | ||||
modelo $alt $verb | modelo $alt $verb | ||||
moeda $alt | moeda $alt | ||||
moem $alt | |||||
mofo $alt $verb | mofo $alt $verb | ||||
molho $alt2 $noun | molho $alt2 $noun | ||||
monera $alt | monera $alt | ||||
naquela $nounf | naquela $nounf | ||||
naquele $alt2 $nounf | naquele $alt2 $nounf | ||||
nervo $alt2 | nervo $alt2 | ||||
nojo $alt2 | |||||
novelo $alt2 | novelo $alt2 | ||||
novos $alt | novos $alt | ||||
obstetra $alt | obstetra $alt | ||||
odisseia $alt | odisseia $alt | ||||
onu $1 | onu $1 | ||||
olho $alt2 $noun | |||||
olho $alt2 $noun | |||||
olhos $alt | |||||
onomatopeia $alt | onomatopeia $alt | ||||
opereta $alt2 | opereta $alt2 | ||||
ordens $alt | ordens $alt | ||||
pantera $alt | pantera $alt | ||||
parede $alt2 | parede $alt2 | ||||
pastora $alt2 | pastora $alt2 | ||||
patinete $alt | |||||
pedra $alt | pedra $alt | ||||
pela $alt $verb | pela $alt $verb | ||||
pelego $alt2 | |||||
pela $alt $verb | |||||
pelo $alt2 | pelo $alt2 | ||||
pelo $alt $verb | pelo $alt $verb | ||||
peso $alt $verb | peso $alt $verb | ||||
remorso $alt | remorso $alt | ||||
renovo $alt $verb | renovo $alt $verb | ||||
retorno $alt $verb | retorno $alt $verb | ||||
reuva $alt | |||||
reuva x'EUv& | |||||
rigores $alt2 | rigores $alt2 | ||||
rixa x'iS& | rixa x'iS& | ||||
rocha $alt | rocha $alt | ||||
rock $alt | rock $alt | ||||
roem $alt | |||||
rola $alt2 $noun | rola $alt2 $noun | ||||
rolo $alt2 $noun | rolo $alt2 $noun | ||||
rota $alt2 | rota $alt2 | ||||
tapete $alt2 | tapete $alt2 | ||||
temores $alt2 | temores $alt2 | ||||
tempero $alt2 $noun | tempero $alt2 $noun | ||||
tenores $alt2 | |||||
terrores $alt2 | terrores $alt2 | ||||
teta $alt2 | teta $alt2 | ||||
tetra $alt | tetra $alt | ||||
vozes $alt | vozes $alt | ||||
xarope $alt | xarope $alt | ||||
zelo $alt2 $noun | zelo $alt2 $noun | ||||
zero $alt | |||||
zorra $alt2 | zorra $alt2 | ||||
?1 download d'a,wnl'oud | ?1 download d'a,wnl'oud | ||||
?2 download daUNl'owd | ?2 download daUNl'owd | ||||
?3 download dau~Nl'owd | ?3 download dau~Nl'owd | ||||
drive dR'aivy | |||||
driver dR'aiver | |||||
drivers dR'aiveRs | |||||
?1 end 'end | ?1 end 'end | ||||
?2 esc 'Esk | ?2 esc 'Esk | ||||
?3 esc 'EskI | ?3 esc 'EskI | ||||
?1 ovo 'ovu | ?1 ovo 'ovu | ||||
?1 pause p'au:z | ?1 pause p'au:z | ||||
page p'eIdZ | page p'eIdZ | ||||
pizza p'its& | |||||
python p'aIT&~N | python p'aIT&~N | ||||
?1 readme r'i:dmi: | ?1 readme r'i:dmi: | ||||
?1 sapi s,ap'i | ?1 sapi s,ap'i | ||||
?1 space sp'eIsy | ?1 space sp'eIsy | ||||
?1 sporting sp'Ort,ing | ?1 sporting sp'Ort,ing | ||||
tab t'aby | tab t'aby | ||||
tablet t'ablet | |||||
?1 telemóvel t,El,Em'OvEl | ?1 telemóvel t,El,Em'OvEl | ||||
?1 telemóveis t,El,Em'OveIs# | ?1 telemóveis t,El,Em'OveIs# | ||||
?1 up &p | ?1 up &p | ||||
?2 microsoft m'aIkRows'Oft | ?2 microsoft m'aIkRows'Oft | ||||
?1 movie m'uvi | ?1 movie m'uvi | ||||
?1 nero n'Eru | ?1 nero n'Eru | ||||
?1 office 'Of,is | |||||
/1 office 'Of,is | |||||
?2 office 'Ofsy | |||||
openoffice 'opeIN|'Ofis | openoffice 'opeIN|'Ofis | ||||
?1 outlook 'autl'uk | ?1 outlook 'autl'uk | ||||
?2 Outlook ,aUtl'uk | ?2 Outlook ,aUtl'uk |
?1 a (lK ,A // Algarve, Almerinda, etc... | ?1 a (lK ,A // Algarve, Almerinda, etc... | ||||
?2 al (K aU | ?2 al (K aU | ||||
a (lh+ a | a (lh+ a | ||||
a (m &~ | a (m &~ | ||||
a (mAr_ & | a (mAr_ & | ||||
a (mA@ & | a (mA@ & | ||||
e (xA_ E | e (xA_ E | ||||
e (xAm_ E | e (xAm_ E | ||||
?2 _n) e (t E | ?2 _n) e (t E | ||||
em (C eIm | em (C eIm | ||||
en (K eIN | en (K eIN | ||||
enh en^ | enh en^ | ||||
_perd) e (L05_ e | _perd) e (L05_ e | ||||
_quis) e (L05_ E | _quis) e (L05_ E | ||||
_soub) e (L05_ E | _soub) e (L05_ E | ||||
_talh) e (L05_ E | |||||
_trem) e (L05_ e | _trem) e (L05_ e | ||||
diss) e (L06_ E // contra- | diss) e (L06_ E // contra- | ||||
fend) e (L06_ e // de- o- | fend) e (L06_ e // de- o- | ||||
_hosp) e (dL03_ E | _hosp) e (dL03_ E | ||||
_gr) e (gL03_ e | _gr) e (gL03_ e | ||||
_gal) e (gL03_ e | _gal) e (gL03_ e | ||||
_pel) e (gL03_ e | |||||
_n) e (grL03_ e | _n) e (grL03_ e | ||||
_ch) e (guL02_ e | _ch) e (guL02_ e | ||||
estr) ei (L04_ EI | estr) ei (L04_ EI | ||||
_reit) e (rL03_ E | _reit) e (rL03_ E | ||||
_sinc) e (rL03_ E | _sinc) e (rL03_ E | ||||
_g) e (rL04_ E | _g) e (rL04_ E | ||||
_z) e (rL04_ E | |||||
qu) e (rL04_ E // re- | qu) e (rL04_ E // re- | ||||
_op) e (rL04_ E | _op) e (rL04_ E | ||||
gen) e (rL04_ E // de- re- | gen) e (rL04_ E // de- re- | ||||
_alt) e (rL04_ E | _alt) e (rL04_ E | ||||
_enc) e (rL04_ E | |||||
_sug) e (rL04_ E | _sug) e (rL04_ E | ||||
_sup) e (rL04_ E | _sup) e (rL04_ E | ||||
_tol) e (rL04_ E | _tol) e (rL04_ E | ||||
_recup) e (rL04_ E | _recup) e (rL04_ E | ||||
_refrig) e (rL04_ E | _refrig) e (rL04_ E | ||||
_v) e (rbL03_ E | _v) e (rbL03_ E | ||||
_alic) e (rcL02_ E | |||||
_p) e (rdL02_ E | _p) e (rdL02_ E | ||||
_l) e (rdL03_ E | _l) e (rdL03_ E | ||||
_h) e (rdL04_ E | _h) e (rdL04_ E | ||||
_bez) e (rrL03_ e | _bez) e (rrL03_ e | ||||
_inv) e (rtL03_ e | _inv) e (rtL03_ e | ||||
_f) e (rvL03_ e | _f) e (rvL03_ e | ||||
_alic) e (rçL03_ E | |||||
_p) e (sL01_ E | |||||
_l) e (sL03_ E | |||||
_refr) e (scL01_ E | _refr) e (scL01_ E | ||||
_d) e (scL02_ E | _d) e (scL02_ E | ||||
_cr) e (scL02_ E | _cr) e (scL02_ E | ||||
_atr) e (vL03_ e | _atr) e (vL03_ e | ||||
_r) e (zL04_ E | _r) e (zL04_ E | ||||
_pr) e (zL04_ E | _pr) e (zL04_ E | ||||
_rev) e (zL04_ E | |||||
_despr) e (zL04_ E | _despr) e (zL04_ E | ||||
_embel) e (zL04_ E | _embel) e (zL04_ E | ||||
_menospr) e (zL04_ E | _menospr) e (zL04_ E | ||||
_) l (_ 'Ele | _) l (_ 'Ele | ||||
l l | l l | ||||
l) l | l) l | ||||
lh l^ | |||||
lh lj | |||||
A) lh lj | A) lh lj | ||||
?1 A) lh l^ | |||||
A) lh l^ | |||||
?4 A) lh l^ | ?4 A) lh l^ | ||||
o (lA_ O | o (lA_ O | ||||
o (lAm_ O | o (lAm_ O | ||||
o (lhe_ O | |||||
o (lhem_ O | |||||
o (ltA_ O | o (ltA_ O | ||||
o (ltAm_ O | o (ltAm_ O | ||||
?1 o (l_ 'O | ?1 o (l_ 'O | ||||
?2 ol (_ Ow | ?2 ol (_ Ow | ||||
o (lh o | |||||
?2 _) o (lhA_ O | |||||
?2 _) o (lhAm_ O | |||||
om (_ oN | om (_ oN | ||||
o (ma_ o | o (ma_ o | ||||
//sort | //sort | ||||
_f) o (L05_ o | _f) o (L05_ o | ||||
_pormen) o (L05_ O | |||||
_f) o (L07_ o | _f) o (L07_ o | ||||
_s) o (bL02_ O | _s) o (bL02_ O | ||||
_af) o (bL04_ O | _af) o (bL04_ O | ||||
_t) o (lL03_ o | _t) o (lL03_ o | ||||
_f) o (lgL04_ O | _f) o (lgL04_ O | ||||
_emp) o (lgL04_ O | _emp) o (lgL04_ O | ||||
c) o (lhL02_ O // es- en- re- | |||||
_t) o (lhL02_ O | |||||
_m) o (lhL04_ O | |||||
_) o (lhL04_ O | |||||
m) o (lhL04_ O | |||||
ent) o (pL02_ O | ent) o (pL02_ O | ||||
_c) o (pL03_ O | _c) o (pL03_ O | ||||
_ens) o (pL04_ O | _ens) o (pL04_ O | ||||
u (iu w | u (iu w | ||||
u (iCK u | u (iCK u | ||||
uy uI | uy uI | ||||
ul (K uw | |||||
u (lh+ u | |||||
um (_ u~N | um (_ u~N | ||||
um (C u~m | um (C u~m |
_11 Od;'innVttsVt; | _11 Od;'innVttsVt; | ||||
_12 dv;In'AttsVt; | _12 dv;In'AttsVt; | ||||
_13 tR;In'AttsVt; | _13 tR;In'AttsVt; | ||||
_14 ts;It'y@-*nVttsVt; | |||||
_14 tS;It'y@-*nVttsVt; | |||||
_15 p;Itn'AttsVt; | _15 p;Itn'AttsVt; | ||||
_16 SE#stn'AttsVt; | _16 SE#stn'AttsVt; | ||||
_17 s;Imn'AttsVt; | _17 s;Imn'AttsVt; | ||||
_0C st'o | _0C st'o | ||||
_2C dv;'es;t;I | _2C dv;'es;t;I | ||||
_3C tr;'ista | _3C tr;'ista | ||||
_4C ts;It'yr;E2sta | |||||
_4C tS;It'yr;E2sta | |||||
_5C p;,It;s'ot | _5C p;,It;s'ot | ||||
_6C S,E#s;t;s'ot | _6C S,E#s;t;s'ot | ||||
_7C s;,Ims'ot | _7C s;,Ims'ot |
phonemetable am base | phonemetable am base | ||||
include ph_amhari | include ph_amhari | ||||
phonemetable si hi | |||||
include ph_sinhala | |||||
//************************************************************************************** | //************************************************************************************** | ||||
// The following lines are experimental, for future additions. | // The following lines are experimental, for future additions. | ||||
// These langauges are not in a usable state. | // These langauges are not in a usable state. | ||||
// These lines can be deleted. | // These lines can be deleted. | ||||
phonemetable rw base2 | |||||
include ph_kinyarwanda | |||||
phonemetable si hi | |||||
include ph_sinhala | |||||
phonemetable sl sk | |||||
include ph_slovenian | |||||
//phonemetable rw base2 | |||||
//include ph_kinyarwanda | |||||
//phonemetable mr hi | //phonemetable mr hi | ||||
//include ph_marathi | //include ph_marathi | ||||
//phonemetable prs base | //phonemetable prs base | ||||
//include ph_dari | //include ph_dari | ||||
phonemetable sl sk | |||||
include ph_slovenian | |||||
//phonemetable gd base | //phonemetable gd base | ||||
//include ph_s_gaelic | //include ph_s_gaelic | ||||
//phonemetable tn base | //phonemetable tn base | ||||
//include ph_setswana | //include ph_setswana | ||||
//phonemetable mt base | //phonemetable mt base | ||||
//include ph_maltese | //include ph_maltese | ||||
# Toolflags: | # Toolflags: | ||||
CCflags = -c -C90 -depend !Depend -IC: -throwback -zM | |||||
C++flags = -c -depend !Depend -IC: -throwback -zM | |||||
CCflags = -c -C90 -depend !Depend -IC: -throwback -memaccess -zM -L22-S22-L41 | |||||
C++flags = -c -depend !Depend -IC: -throwback -zM -L22-S22-L41 | |||||
Linkflags = -rmf -c++ -o $@ | Linkflags = -rmf -c++ -o $@ | ||||
ObjAsmflags = -throwback -NoCache -depend !Depend | ObjAsmflags = -throwback -NoCache -depend !Depend | ||||
CMHGflags = | CMHGflags = | ||||
objasm $(objasmflags) -from @.s.assemb -to @.o.assemb | objasm $(objasmflags) -from @.s.assemb -to @.o.assemb | ||||
# Dynamic dependencies: | # Dynamic dependencies: | ||||
/*************************************************************************** | /*************************************************************************** | ||||
* Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||||
* Copyright (C) 2005 to 2013 by Jonathan Duddington * | |||||
* email: [email protected] * | * email: [email protected] * | ||||
* * | * * | ||||
* This program is free software; you can redistribute it and/or modify * | * This program is free software; you can redistribute it and/or modify * | ||||
#include <ctype.h> | #include <ctype.h> | ||||
#include <locale.h> | #include <locale.h> | ||||
#include "kernel.h" | #include "kernel.h" | ||||
#include <math.h> | |||||
#include "speech.h" | #include "speech.h" | ||||
#include "speak_lib.h" | #include "speak_lib.h" | ||||
voice_variant_names[n_voice_variant_files++] = p; | voice_variant_names[n_voice_variant_files++] = p; | ||||
} | } | ||||
else | else | ||||
if(strcmp(p, "default") != 0) | |||||
{ | { | ||||
if(n_voice_files >= (N_VOICE_NAMES-1)) | if(n_voice_files >= (N_VOICE_NAMES-1)) | ||||
continue; | continue; | ||||
void ReadVoiceNames() | void ReadVoiceNames() | ||||
{//=================== | {//=================== | ||||
char directory[sizeof(path_home)+10]; | |||||
char directory[sizeof(path_home)+20]; | |||||
n_voice_files = 0; | n_voice_files = 0; | ||||
n_voice_variant_files = 0; | n_voice_variant_files = 0; | ||||
sprintf(directory,"%s.voices.default", path_home); | |||||
if(GetFileLength(directory) > 0) | |||||
{ | |||||
// put the 'default' voice at the start of the list | |||||
voice_names[n_voice_files++] = "default"; | |||||
} | |||||
sprintf(directory,"%s.voices",path_home); | sprintf(directory,"%s.voices",path_home); | ||||
ReadVoiceNames2(directory); | ReadVoiceNames2(directory); | ||||
int initialise(void) | int initialise(void) | ||||
{//================= | {//================= | ||||
sprintf(path_home,"%s.espeak-data","<eSpeak$Dir>"); | |||||
char buf[N_PATH_HOME]; | |||||
_kernel_swi_regs regs; | |||||
_kernel_oserror *error; | |||||
buf[0] = 0; | |||||
regs.r[0] = (int)"eSpeak$Dir"; | |||||
regs.r[1] = (int)buf; | |||||
regs.r[2] = sizeof(buf); | |||||
regs.r[3] = 0; | |||||
regs.r[4] = 0; | |||||
regs.r[5] = 0; | |||||
error = _kernel_swi(0x20023,®s,®s); // OS_ReadVarVal | |||||
buf[regs.r[2]] = 0; | |||||
sprintf(path_home,"%s.espeak-data",buf); | |||||
if(GetFileLength(path_home) != -2) | if(GetFileLength(path_home) != -2) | ||||
{ | { | ||||
// not found, try the 10 character version of the directory name | // not found, try the 10 character version of the directory name | ||||
sprintf(path_home,"%s.espeak-dat","<eSpeak$Dir>"); | |||||
sprintf(path_home,"%s.espeak-dat",buf); | |||||
} | } | ||||
if(GetFileLength(path_home) != -2) | if(GetFileLength(path_home) != -2) | ||||
{ | { | ||||
} | } | ||||
WavegenInit(22050,0); | WavegenInit(22050,0); | ||||
LoadPhData(); | |||||
LoadPhData(NULL); | |||||
SetVoiceStack(NULL, ""); | SetVoiceStack(NULL, ""); | ||||
SynthesizeInit(); | SynthesizeInit(); | ||||
return(0); | return(0); | ||||
static_length = 0; | static_length = 0; | ||||
else | else | ||||
{ | { | ||||
strcat(&static_buf[static_length]," : "); | |||||
strcat(&static_buf[static_length]," \n "); | |||||
static_length+=3; | static_length+=3; | ||||
} | } | ||||
void jsd_swi_functions(int *r) | void jsd_swi_functions(int *r) | ||||
/****************************/ | /****************************/ | ||||
{ | { | ||||
int use_ipa; | |||||
espeak_VOICE voice_select; | espeak_VOICE voice_select; | ||||
switch(r[0]) | switch(r[0]) | ||||
{ | { | ||||
case 0: /* major version */ | case 0: /* major version */ | ||||
r[0] = 4; | r[0] = 4; | ||||
r[1] = 331; | |||||
r[1] = 347; | |||||
break; | break; | ||||
case 1: /* register user */ | case 1: /* register user */ | ||||
break; | break; | ||||
case 3: | case 3: | ||||
// r[0] = (int)speech_to_phonemes((char *)r[1]); | |||||
// translate into phonemes | |||||
use_ipa = 0; | |||||
if((r[2] >= 1) && (use_ipa <= 3)) | |||||
use_ipa = r[2]; | |||||
TranslateClause(translator,NULL,(char *)r[1],NULL,NULL); | |||||
GetTranslatedPhonemeString(translator->phon_out, sizeof(translator->phon_out), use_ipa); | |||||
r[0] = (int)translator->phon_out; | |||||
break; | break; | ||||
case 4: | case 4: | ||||
/*********************************************************/ | /*********************************************************/ | ||||
{ | { | ||||
int value; | int value; | ||||
int value2; | |||||
int q_length; | int q_length; | ||||
value = r[0]; | value = r[0]; | ||||
case 0: // ready ? | case 0: // ready ? | ||||
// returns the index into the source text of the currently speaking word | // returns the index into the source text of the currently speaking word | ||||
if(current_source_index > 0) | |||||
r[1] = current_source_index-1; | |||||
else | |||||
r[1] = current_source_index; /* source index */ | |||||
if(current_source_index > 0) | |||||
r[1] = current_source_index-1; | |||||
else | |||||
r[1] = current_source_index; /* source index */ | |||||
r[2] = 0; /* source tag */ | r[2] = 0; /* source tag */ | ||||
r[3] = 0; /* for future expansion */ | r[3] = 0; /* for future expansion */ | ||||
r[4] = 0; | r[4] = 0; | ||||
r[5] = 0; | r[5] = 0; | ||||
if(wcmdq_head == wcmdq_tail) | |||||
if(WcmdqUsed() < 5) | |||||
{ | { | ||||
r[0] = -1; /* ready, or nearly */ | r[0] = -1; /* ready, or nearly */ | ||||
} | } | ||||
else | else | ||||
{ | |||||
r[0] = 0; | r[0] = 0; | ||||
} | |||||
break; | break; | ||||
case 1: /* restore old sound channel. DO NOTHING */ | case 1: /* restore old sound channel. DO NOTHING */ | ||||
break; | break; | ||||
case 7: /* pitch */ | case 7: /* pitch */ | ||||
// not implemented | |||||
value = (value * 50)/128; | |||||
SetParameter(espeakPITCH, value, 0); | |||||
break; | break; | ||||
case 8: /* speed */ | |||||
SetParameter(espeakRATE,value,0); | |||||
case 8: // speed, convert to range 80 to 400, mid-value=180 | |||||
if(value < 128) | |||||
value2 = 80 + (value*100)/128; // linear range for 0-127 -> 80-179 | |||||
else | |||||
value2 = 80 + pow((float)value/128.0, 1.75)*100; | |||||
SetParameter(espeakRATE,value2,0); | |||||
break; | break; | ||||
case 9: /* word_gap */ | case 9: /* word_gap */ | ||||
if(value >= 128) | |||||
value = value - 128; | |||||
if(value > 1) | |||||
value = (value-1) * 5; | |||||
SetParameter(espeakWORDGAP,value,0); | SetParameter(espeakWORDGAP,value,0); | ||||
break; | break; | ||||
case 10: /* pitch_range */ | case 10: /* pitch_range */ | ||||
// not implemented | |||||
value = (value * 50)/128; | |||||
SetParameter(espeakRANGE, value, 0); | |||||
break; | break; | ||||
case 12: /* reset */ | case 12: /* reset */ | ||||
break; | break; | ||||
case 13: /* volume */ | case 13: /* volume */ | ||||
SetParameter(espeakVOLUME,value,0); | |||||
// convert to range 6-255 to 10-400, mid-value=100 | |||||
if(value < 6) | |||||
value2 = value + 4; | |||||
else | |||||
if(value < 128) | |||||
{ | |||||
value2 = pow((float)(value+40)/168.0, 1.75)*100; | |||||
} | |||||
else | |||||
value2 = pow((float)value/128.0, 2.0)*100; | |||||
SetParameter(espeakVOLUME,value2,0); | |||||
WavegenSetVoice(voice); | |||||
break; | |||||
case 14: // set voice by name | |||||
SetVoiceByName((char *)r[0]); | |||||
WavegenSetVoice(voice); | WavegenSetVoice(voice); | ||||
break; | break; | ||||
} | } | ||||
return(value); | return(value); | ||||
} | } | ||||
void PrintVersion() | |||||
{//================ | |||||
char buf[120]; | |||||
printf("\nspeak text-to-speech: %s Data at: %s\n", version_string, path_home); | |||||
} | |||||
void command_line(char *arg_string, int wait) | void command_line(char *arg_string, int wait) | ||||
{//========================================== | {//========================================== | ||||
char command[80]; | char command[80]; | ||||
char *p; | char *p; | ||||
int ix; | int ix; | ||||
int quiet; | |||||
voicename[0] = 0; | voicename[0] = 0; | ||||
wavefile[0] = 0; | wavefile[0] = 0; | ||||
option_linelength = 0; | option_linelength = 0; | ||||
option_phonemes = 0; | option_phonemes = 0; | ||||
option_waveout = 0; | option_waveout = 0; | ||||
option_quiet = 0; | |||||
quiet = 0; | |||||
option_multibyte = 0; // auto | option_multibyte = 0; // auto | ||||
option_capitals = 0; | option_capitals = 0; | ||||
option_punctuation = 0; | option_punctuation = 0; | ||||
break; | break; | ||||
case 'h': | case 'h': | ||||
printf("\nspeak text-to-speech: %s\n%s",version_string,help_text); | |||||
PrintVersion(); | |||||
printf("\n%s",help_text); | |||||
return; | return; | ||||
case 'k': | case 'k': | ||||
break; | break; | ||||
case 'q': | case 'q': | ||||
option_quiet = 1; | |||||
quiet = 1; | |||||
break; | break; | ||||
case 'f': | case 'f': | ||||
else | else | ||||
if(strcmp(command,"help")==0) | if(strcmp(command,"help")==0) | ||||
{ | { | ||||
printf("\nspeak text-to-speech: %s\n%s",version_string,help_text); | |||||
PrintVersion(); | |||||
printf("\n%s",help_text); | |||||
return; | return; | ||||
} | } | ||||
else | else | ||||
SetParameter(espeakPUNCTUATION,option_punctuation,0); | SetParameter(espeakPUNCTUATION,option_punctuation,0); | ||||
} | } | ||||
else | else | ||||
if(memcmp(command,"version",7)==0) | |||||
{ | |||||
PrintVersion(); | |||||
return; | |||||
} | |||||
else | |||||
if(memcmp(command,"ipa",3)==0) | |||||
{ | |||||
option_phonemes = 3; | |||||
} | |||||
else | |||||
{ | { | ||||
printf("Command not recognised\n"); | printf("Command not recognised\n"); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
if((option_phonemes > 1) && !option_waveout) | |||||
quiet = 1; // can't call sprintf() during callback | |||||
SetVoiceByName(voicename); | SetVoiceByName(voicename); | ||||
if((filename[0]==0) && (p[0]=='\r')) | if((filename[0]==0) && (p[0]=='\r')) | ||||
{ | { | ||||
// nothing to speak | // nothing to speak | ||||
if(option_quiet) | |||||
if(quiet) | |||||
{ | { | ||||
SpeakNextClause(NULL,NULL,2); // stop speaking | SpeakNextClause(NULL,NULL,2); // stop speaking | ||||
more_text = 0; | more_text = 0; | ||||
} | } | ||||
} | } | ||||
if(option_waveout || option_quiet) | |||||
if(option_waveout || quiet) | |||||
{ | { | ||||
// write speech to a WAV file | // write speech to a WAV file | ||||
if(option_quiet) | |||||
if(quiet) | |||||
{ | { | ||||
OpenWaveFile(NULL,samplerate); | OpenWaveFile(NULL,samplerate); | ||||
option_waveout = 2; | option_waveout = 2; |
[Setup] | [Setup] | ||||
AppName=eSpeak | AppName=eSpeak | ||||
AppVerName=eSpeak version 1.47.01 | |||||
AppVerName=eSpeak version 1.47.04 | |||||
AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). | AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). | ||||
WindowVisible=yes | WindowVisible=yes | ||||
$0e: Result := 'hu'; | $0e: Result := 'hu'; | ||||
$0f: Result := 'is'; | $0f: Result := 'is'; | ||||
$10: Result := 'it'; | $10: Result := 'it'; | ||||
//$12: Result := 'ko'; | |||||
$12: Result := 'ko'; | |||||
$13: Result := 'nl'; | $13: Result := 'nl'; | ||||
$14: Result := 'no'; | $14: Result := 'no'; | ||||
$15: Result := 'pl'; | $15: Result := 'pl'; | ||||
$1c: Result := 'sq'; | $1c: Result := 'sq'; | ||||
$1d: Result := 'sv'; | $1d: Result := 'sv'; | ||||
$1f: Result := 'tr'; | $1f: Result := 'tr'; | ||||
//$20: Result := 'ur'; | |||||
$20: Result := 'ur'; | |||||
$21: Result := 'id'; | $21: Result := 'id'; | ||||
$25: Result := 'et'; | $25: Result := 'et'; | ||||
$26: Result := 'lv'; | $26: Result := 'lv'; | ||||
$39: Result := 'hi'; | $39: Result := 'hi'; | ||||
//$3a: Result := 'mt'; | //$3a: Result := 'mt'; | ||||
$3c: Result := 'ga'; | $3c: Result := 'ga'; | ||||
$3e: Result := 'ms'; | |||||
//$3f: Result := 'kk'; | //$3f: Result := 'kk'; | ||||
$41: Result := 'sw'; | $41: Result := 'sw'; | ||||
//$44: Result := 'tt'; | //$44: Result := 'tt'; | ||||
'mk': value := $42f; | 'mk': value := $42f; | ||||
'ml': value := $44c; | 'ml': value := $44c; | ||||
'mn': value := $450; | 'mn': value := $450; | ||||
'ms': value := $43e; | |||||
'mt': value := $43a; | 'mt': value := $43a; | ||||
'my': value := $455; | 'my': value := $455; | ||||
'ne': value := $461; | 'ne': value := $461; |
[Setup] | [Setup] | ||||
AppName=eSpeakEdit | AppName=eSpeakEdit | ||||
AppVerName=eSpeakEdit version 1.47.01 | |||||
AppVerName=eSpeakEdit version 1.47.04 | |||||
DefaultDirName={pf}\eSpeak | DefaultDirName={pf}\eSpeak | ||||
DefaultGroupName=eSpeak | DefaultGroupName=eSpeak | ||||
OutputBaseFilename=setup_espeakedit | OutputBaseFilename=setup_espeakedit | ||||
[Languages] | [Languages] | ||||
Name: "en"; MessagesFile: "compiler:Default.isl" | Name: "en"; MessagesFile: "compiler:Default.isl" | ||||
Name: "af"; MessagesFile: "compiler:Languages\Afrikaans.isl" | Name: "af"; MessagesFile: "compiler:Languages\Afrikaans.isl" | ||||
Name: "bg"; MessagesFile: "compiler:Languages\Bulgarian.isl" | |||||
Name: "bs"; MessagesFile: "compiler:Languages\Bosnian.isl" | Name: "bs"; MessagesFile: "compiler:Languages\Bosnian.isl" | ||||
Name: "cs"; MessagesFile: "compiler:Languages\Czech.isl" | Name: "cs"; MessagesFile: "compiler:Languages\Czech.isl" | ||||
Name: "da"; MessagesFile: "compiler:Languages\Danish.isl" | |||||
Name: "de"; MessagesFile: "compiler:Languages\German.isl" | Name: "de"; MessagesFile: "compiler:Languages\German.isl" | ||||
Name: "el"; MessagesFile: "compiler:Languages\Greek.isl" | Name: "el"; MessagesFile: "compiler:Languages\Greek.isl" | ||||
Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl" | Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl" | ||||
Name: "fa"; MessagesFile: "compiler:Languages\Farsi.isl" | |||||
Name: "fi"; MessagesFile: "compiler:Languages\Finnish.isl" | Name: "fi"; MessagesFile: "compiler:Languages\Finnish.isl" | ||||
Name: "fr"; MessagesFile: "compiler:Languages\French.isl" | Name: "fr"; MessagesFile: "compiler:Languages\French.isl" | ||||
Name: "hi"; MessagesFile: "compiler:Languages\Hindi.islu" | |||||
Name: "hr"; MessagesFile: "compiler:Languages\Croatian.isl" | Name: "hr"; MessagesFile: "compiler:Languages\Croatian.isl" | ||||
Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl" | Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl" | ||||
Name: "id"; MessagesFile: "compiler:Languages\Indonesian-5.1.11.isl" | Name: "id"; MessagesFile: "compiler:Languages\Indonesian-5.1.11.isl" | ||||
Name: "it"; MessagesFile: "compiler:Languages\Italian.isl" | Name: "it"; MessagesFile: "compiler:Languages\Italian.isl" | ||||
Name: "lv"; MessagesFile: "compiler:Languages\Latvian-1-5.1.11.isl" | |||||
Name: "ka"; MessagesFile: "compiler:Languages\Georgian.islu" | |||||
Name: "lv"; MessagesFile: "compiler:Languages\Latvian.isl" | |||||
Name: "ne"; MessagesFile: "compiler:Languages\Nepali.islu" | |||||
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl" | Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl" | ||||
Name: "no"; MessagesFile: "compiler:Languages\Norwegian.isl" | Name: "no"; MessagesFile: "compiler:Languages\Norwegian.isl" | ||||
Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl" | Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl" | ||||
Name: "ro"; MessagesFile: "compiler:Languages\Romanian.isl" | Name: "ro"; MessagesFile: "compiler:Languages\Romanian.isl" | ||||
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl" | Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl" | ||||
Name: "sk"; MessagesFile: "compiler:Languages\Slovak.isl" | Name: "sk"; MessagesFile: "compiler:Languages\Slovak.isl" | ||||
;Name: "sq"; MessagesFile: "compiler:Languages\Albanian-2-5.1.11.isl" | |||||
Name: "sr"; MessagesFile: "compiler:Languages\Serbian.isl" | Name: "sr"; MessagesFile: "compiler:Languages\Serbian.isl" | ||||
Name: "tr"; MessagesFile: "compiler:Languages\Turkish.isl" | Name: "tr"; MessagesFile: "compiler:Languages\Turkish.isl" | ||||
Name: "vi"; MessagesFile: "compiler:Languages\Vietnamese.isl" | |||||
Name: "zh"; MessagesFile: "compiler:Languages\ChineseSimp-12-5.1.11.isl" | Name: "zh"; MessagesFile: "compiler:Languages\ChineseSimp-12-5.1.11.isl" | ||||
#include "translate.h" | #include "translate.h" | ||||
#include "wave.h" | #include "wave.h" | ||||
const char *version_string = "1.47.03f 31.Mar.13"; | |||||
const char *version_string = "1.47.04 02.Apr.13"; | |||||
const int version_phdata = 0x014701; | const int version_phdata = 0x014701; | ||||
int option_device_number = -1; | int option_device_number = -1; |
{ | { | ||||
SetCyrillicLetters(tr); | SetCyrillicLetters(tr); | ||||
SetLetterVowel(tr,0x2a); | SetLetterVowel(tr,0x2a); | ||||
tr->charset_a0 = charsets[5]; // ISO-8859-5 | |||||
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word | tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word | ||||
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x107; // devoice at end of word, and change voicing to match a following consonant (except v) | tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x107; // devoice at end of word, and change voicing to match a following consonant (except v) | ||||
tr->langopts.param[LOPT_REDUCE] = 2; | tr->langopts.param[LOPT_REDUCE] = 2; |
prev_clause_pause = clause_pause; | prev_clause_pause = clause_pause; | ||||
*tone_out = tone; | |||||
if(tone_out != NULL) | |||||
*tone_out = tone; | |||||
new_sentence = 0; | new_sentence = 0; | ||||
if(terminator & CLAUSE_BIT_SENTENCE) | if(terminator & CLAUSE_BIT_SENTENCE) |