diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 1519b180..ed6a2779 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -103,7 +103,7 @@ p Q r R s s; t T ts v x z -Dictionary en_dict 2013-02-13 +Dictionary en_dict 2013-02-20 0 0# 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI3 @@ -377,7 +377,7 @@ S s; S; t t; tS ts tS; ts; v w x z Z Z; -Dictionary pt_dict 2013-02-14 +Dictionary pt_dict 2013-02-19 & &/ &U~ &~ @ @- a A aI aU e E eI EI eU EU @@ -489,13 +489,13 @@ p Q r R s S t tS v w z Z -Dictionary vi_dict 2013-02-10 +Dictionary vi_dict 2013-02-16 @ @: @:I @:U @I @U a a: a:I a:U aI aU e E eU EU -i i@ iU o O o# O# o& -o@ OI oI u u@ uI y y@ -yI +i i@ iE iU o O o# O# +o& o@ OI oI u u@ uI y +y@ yI b c cr d D f g h j J J^ k kh l m n diff --git a/dictsource/en_list b/dictsource/en_list index ec42a441..37fa1abb 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -1022,6 +1022,7 @@ concerto k@ntS'e@toU conches k0ntSI#z concierge k0nsI'e@Z concise k0#ns'aIs +conclave $1 conduct $1 conduct $verb cone koUn @@ -1136,6 +1137,7 @@ deli dElI deliberate dI2lIb@r@t delicate dElI2k@t delimit dI2lImIt // delimited +delivery $alt2 demolish dI2m0lIS demon di:m@n demoness di:m@nEs diff --git a/dictsource/en_rules b/dictsource/en_rules index 8a1af8a6..3aaa5016 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -1771,6 +1771,7 @@ di (ox d%aI _) di (s@ dI2 _) di (sa@ ,dI + _) di (sarm dI2 _) disa (p ,dIs@ di (sast dI2 di (sbe@ ,dI @@ -2467,6 +2468,7 @@ er (ve 3: s) er (van 3: ery (_ @r%i +?3 ery (_++$w_alt2 @rI ?3 @@AC) ery (_ e@ri ery (A 3j _v) ery ErI2 @@ -2745,6 +2747,8 @@ gue (_ g gu (e g _) gu (i g + _) gui (dA gaI + guide (@ gaId _) g (yn g o) g (y_ g g (ynous_ =dZ @@ -3262,7 +3266,7 @@ inter (est Intr interfer Int@f'i@3 _) int (erio+ %Int - _) inter (n_ %Int3: + _) inter (nK %Int3: _) inter (nal %Int3: _) inter (pr %Int3: _) inter (pol@ %Int3: @@ -4576,7 +4580,7 @@ pull) ov oUv m) ov (A u:v n) ov (el 0v - p) over (@ 0v@ + p) over (@ 0v3 pr) ov (e# u:v gr) ov (el 0v tr) ov (er 0v @@ -4942,6 +4946,8 @@ _) re (i@P2 r,i: _) rei (c raI _) rei (l raI + _) rei (s raI + _) re (iss r%i: _) rele (g rElI2 rele (nt rI2lE rele (v rElI# @@ -5122,9 +5128,8 @@ 1_) st (_ _) st (_ s@nt stein staIn - ti) ssue Su: _) s (u s - ss (ue S + ssue Su: ssur S3 a) ssur SU@ a) ssure S'U@ diff --git a/dictsource/pt_list b/dictsource/pt_list index 09ec4a4a..8451ed71 100755 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -1,1323 +1,1323 @@ - -// This file in UTF8 encoded - -// Options -// ?1 European Portuguese -// ?2 Brazilian Portuguese -// ?3 Epenthetic [I] between consonants -// ?4 Brazil mbrola voice - -// $alt change [e] or [o] in the stressed syllable to [E] or [O] -// $alt2 change [E] or [O] in the stressed syllable to [e] or [o] -// Any [E] or [O] phonemes in unstressed words must be listed explicitly - - -// Note for "pt-pt" [R] is the same sound as [r] -// for "pt" [y] is the same sound as [i] - - -// Letters -// If a letter has a "word" pronunciation which is different from its -// "letter" name, then include the letter name here, with the letter -// prefixed by a _ character. - -// accent names -_lig ligad'u*& -_acu &g'udU -_ac2 &g'udUd'uplU -_brv bR'Evi -_ced sedZ'ilj& -?1 _ced syd'il^& -_cir sirku~Nfl'EksU -_dia tR'em& -_dot p'oNtU -_grv gR'avi -_hac ka*'oN -_mcn makR'oN -_ogo ogon'ek -_rng &~n'EU -?1 _rng &~n'El -_stk b'ax& -_tld tS'iU -?1 _tld til - - -// character names - -á $accent -_à $accent // à can be a word -â $accent -ã $accent -ç $accent -_é $accent // é can be a word -ê $accent -í $accent -ó $accent -ô $accent -õ $accent -ú $accent -ü $accent -ß _^_DE - -v ve // not Roman numbers -x Sis# - -_cap maI'uskulU -_?A l'etR&_ -_?? s'imbolU_ -_#32 esp'asU -?1 _#32 Sp'asU -_#9 tab - -* &ste*'iskU $max3 -= __igw'&l_ $max3 -. p'oNtU $max3 -+ maIs# $max3 -% pors'eINtU $max3 -& _'e_ -@ &x'ob& -¤ 'eU*U -€ 'eU*U -§ p&*'agRafU - - -_! ,eskl&mas'&U~ -_" 'asp&s# - -?1 _# k,ardin'al -?2 _# k,ardZin'aU -_$ s,ifR'&U~ -_& 'e -?1 _' ap'Ostr,ofy -?2 _' &p'OstRofU -_( ,abRipa*'eINtezy -_) f,ES&pa*'eINtezy -_* &ste*'iskU -_− m'enUs - -_, v'irgul& -_- 'ifeIN -_/ b'aQ& -_: d,oIsp'oNtus -_; p,oNtu_iv'irgul& -_< men'Or -?1 _= igw'al -?2 _= igw'aU -_> maI'Or -_? ,iNtex,ogas'&U~ -_[ ,abRikowS'etSi -_\ b,ax&,iNvertS'id& -_] f,ES&kowS'etSi -_^ s,irku~Nfl'Eksu -__ s,ublin^'adu -_` gR'avi -_{ ,abRiS'avi -?1 _| b,ax&v,ertSik'al -?2 _| b,ax&v,ertSik'aU -_} f,ES&S'avi -?1 _~ t'il -?2 _~ tS'iU -_¡ ,eskl&mas,&U~,iNvertS'id& -_¿ ,iNtex,ogas,&U~,iNvertS'id& - -_" 'abRi;'asp&||d'upl&s# -_º Oz'in^U -_ª az'in^U -° gR'aU - - -// numeric -//******** - -?1 _0 z'E*u -?2 _0 z'E*U -?1 _1 'um -?2 _1 'u~N - _2 d'oIs# - _3 tR'es# -?1 _4 kw'atru -?2 _4 kw'atRu - _5 s'iNku - _6 s'eIs# -?1 _7 s'Ety -?2 _7 s'EtSy - _8 'oItu - _9 n'Ovy - _10 d'Es# - -_11 'oNzy -_12 d'ozy -?1_13 tr'ezy -?2_13 tR'ezi -?1_14 k&t'orzy -?2_14 kat'orzy -_15 k'iNzy -?1_16 dyz&s'eis# -?2_16 d,ezes'eIs# -?1_17 dyz&s'Ety -?2_17 d,ezes'EtSy -?1_18 dyz'Oitu -?2_18 dez'oItu -?1_19 dyz&n'Ovy -?2_19 dezen'Ovy -?1_2X v'iNty -?2_2X v'iNtSy -_3X tR'iNt& - -?1_4X kw&*'eNt& -?2_4X kwa*'eINt& -_5X siNkw'eINt& -?1_6X sys'eINt& -?2_6X ses'eINt& -?1_7X syt'eINt& -?2_7X set'eINt& -_8X oIt'eINt& -?1 _9X nuv'eINt& -?2 _9X nov'eINt& -_1C0 s'eIN -?1_0C s'eINtus# -?2_0C s'eINtUs# -_1C s'eINtu -?1_2C duz'eINtus# -?2_2C duz'eINtUz -?1_3C tryz'eNtus# -?2_3C tRez'eNtUz -?1_5C kin^'eINtus# -?2_5C kin^'eINtUz -?1_0M1 m'il_ -?2_0M1 m'iU_ -?1_1M1 m'il_ -?2_1M1 m'iU_ - -?1_0M2 milj'o~js# -?2_0M2 milj'o~jz -_1M2 'u~milj'&U~ -?1_0M3 bilj'o~js# -?2_0M3 bilj'o~jz -_1M3 'u~mbilj'&U~ -?1_0M4 trilj'o~js# -?2_0M4 trilj'o~jz -_1M4 'u~ntrilj'&U~ -_0and i -_dpt _v'irgul& -// _0Z2 seNt'Ezim& // 100ths -// _0Z3 mil'Ezim& // 1000ths - -// ordinal numbers -_#º U -_#ª & -_ord o - -_1o pRim'eI* -_2o seg'u~Nd -_3o te*@-s'eI* -_4o kw'a*@-t -_5o k'iNt -_6o s'est -_7o s'EtSim -_8o oIt'av -_9o n'on -_1Xo d'Esim -_2Xo viZ'Ezim -_3Xo tRiZ'Ezim -_4Xo kwad*aZ'Ezim -_5Xo kiNkwaZ'Ezim -_6Xo seksaZ'Ezim -_7Xo septwaZ'Ezim -_8Xo oktoZ'Ezim -_9Xo nonaZ'Ezim -_0Co seINt'Ezim -_1Co seINt'Ezim -_2Co duseINt'Ezim -_3Co tRiseINt'Ezim -_4Co kwad*iZeINt'Ezim -_5Co kiNZeINt'Ezim -_6Co seIseINt'Ezim -_7Co septSiZeINt'Ezim -_8Co oktSiZeINt'Ezim -_9Co noNZeINt'Ezim -_0M1o mil'Ezim -_1M1o mil'Ezim - - -// not roman numbers -vi vi - - -// ABBREVIATIONS -//************** -aapp $abbrev -abadv $abbrev -abc $abbrev -a.c 'as'e -adsl $abbrev -ae $abbrev -aids $abbrev -apedv $abbrev -avc $abbrev -bios b'i,OS -d.c d,es'e -cne $abbrev -cpu $abbrev -cpuc $abbrev -dpoc $abbrev -ecg $abbrev -edp $abbrev -?1 etc ,ets'Et:*& -?2 etc ,ets'Ete*& -e.u.a Eua -eua $abbrev -fbi $abbrev -hiv $abbrev -(http ://) ag,atete'pe_ -icc $abbrev -ieee $abbrev // Institute of Electrical and Electronics Engineers -iss $abbrev -jpeg Z,Ot&p'Eg -mpeg ,Emp'Eg -nba $abbrev -nvda $abbrev -oms $abbrev -omt $abbrev -osi $abbrev -?1 sa ,Esj'a -?1 sos ,Esj,O'Es -ue $abbrev -unts $abbrev -usb $abbrev - - -dr $dot -dra $dot -mr $dot -mrs $dot -prof pr'Of $dot -profº pR,ofes'or -profª pR,ofes'o*& -sr $dot -?1 sra ,Es;'Errj'a $dot -?2 sra $dot - -// articles -o $u+ $nounf -a $u+ $nounf -os $u+ $nounf -as $u+ $nounf -?1 a & $u+ $nounf - -um $u $nounf -uma $u $nounf -uns $u $nounf -umas $u $nounf - - -// pronouns -eu $u+ $verbf -tu $u+ -você vose $u2+ -ele 'ely $u+ -ela $u+ -nós $u+ -vós $u+ -vocês $u2+ -eles $u+ -elas $u+ - -me $u // reflexive -te $u -nos $u -la $u -lo $u -las $u -los $u -//se $u - -?2 este $u+ $nounf 'estSi // this -?2 estes $u+ $nounf 'estSis // these -?2 esta 'Est& $u+ $nounf -?2 neste $u+ $nounf n'estSi //in this -?2 nestes $u+ n'estSis //in these -?2 esse $u+ $nounf 'esi // that -essa 'Es& $u+ -desse d'esy $u+ -nesse n'esy $u+ -aquele &k'ely $u+ $nounf // that -aquela $u+ -daquele d&k'ely $u+ $nounf - - que $u // pronunciation is in pt_rules - -// possessive adjectives -meu $u+ $nounf -minha $u+ -meus $u+ -minhas $u+ -teu $u+ $nounf -tua $u+ -teus $u+ -tuas $u+ -seu $u+ $nounf -sua $u+ -seus $u+ -suas $u+ -?2 nosso $u+ // n'OsU -?2 nossa $u+ n'Os& -?2 nossos $u+ n'OsUs -?2 nossas $u+ n'Os&s -dele dely $u1+ -dela $u+ -deles $u+ -delas $u+ -nele nely $u1+ - -// prepositions -de $u // of,from -do $u $nounf -da $u $nounf -dos $u -das $u -dum $u -duma $u -duns $u -dumas $u - -em $u // in,on,at -no nu $u $nounf -na $u -?2 nos nus# $u -nas $u -num $u -numa $u -nuns $u -numas $u - -por $u // by,for,through -pelo $u -?2 pela $u p'el& -pelos $u -?2 pelas $u p'el&s - -ao $u -à ,a: -à $atend $atstart $accent -aos $u -às ,a:s - -para $u // for,to -pro $u $nounf -pra $u -pros $u -pras $u -prò $u -prà $u -pròs $u -pràs $u - -com $u // with -?2 sem // without -?2 até $u // until -?2 desde $u // from,since -?2 entre // between,among -?2 por $u // by,for,through - sobre $alt2 // on,above,about -?2 sob // under,below -?2 debaixo // under,below - -?2 durante - - -// conjunctions -?1 e i $u // and -?2 e i $u // and -se $u // if - - -?2 mas $u // but -?2 porém // however -?2 todavia // yet -?2 contudo // nevertheless - -?2 ou $u // or -?2 quer // whether - -?2 assim // thus -?2 portanto // therefore - -?2 porque // because -?2 pois // because -?2 como $u // as - -?2 embora // although -?2 apesar // despite - - -?2 caso // if -?2 (desde que) d'esdZiki/ // provided that -?2 (exceto se) es'Etusi/ // unless -?2 (salvo se) s'alvusi/ // unless - -?2 (para que) p,a*&ki/ // so that - - - -?2 quando // when -?2 onde $u // where -?2 apenas // as soon as -?2 mal // as soon as, hardly -?2 (logo que) l'Oguki/ // as soon as -?2 (antes que) '&~NtSiski/ // before -?2 (depois que) dep'OIski/ // after -?2 (sempre que) s'eNpriki/ // whenever -?2 enquanto // while - - -// negative - -// questions - - -// auxillary verbs (be, have, can, etc) - // ser, to be -ser $u -sou $u -é E $u -é $atend $atstart $accent -és Es $u -somos $u -sois $u -são $u - -era E*& $u1 // .. imperfect -éramos $u -éreis $u -eram E*&U~ $u1 - -fui $u // .. preterite -foste fostSy $u1 // & fostes -foi $u -fomos $u - - -fora $u // .. pluperfect -fômamos $u -fôreis $u -foram fo*&U~ $u1 - -serei $u // .. future -?2 será se*a $u2 -seremos $u -sereis $u -serão $u - -seria $u // .. conditional -seríamos $u -seríeis $u -seriam $u - - // estar - to be -estar $u -estou $u -está $u est'a -estamos $u -estais $u -estão $u - -estava $u -estávamos $u -astavam $u - -estive $u -?2 esteve estevy $u2 -estivemos $u -estiveram $u -estiver $u estSiv'Er - -estarei $u -estará $u -estaremos $u -estarão $u - - - // ter - to have -ter $u -tenho $u -tens $u -tem $u -temos $u -tendes $u -têm $u - -tinha $u -tínhamos $u -tínheis $u -tinham $u - -tive $u -tiveste $u -teve tevy $u1 -tivemos $u -tivestes $u -tiveram $u - -tivera $u -tivéramos $u -tivéreis $u -tiveram $u - -terei $u -terás $u -terá $u -teremos $u -tereis $u -terão $u - - // fazer - to do -fazer $u+ -faço $u+ -faz $u+ -fazemos $u+ -fazem $u+ - - - // poder - can -poder $u+ -posso $u+ -pode $u+ -podemos $u+ -podem $u+ - -podia $u+ -podíamos $u+ -podiam $u+ - -pude $u+ -pôde $u+ -pudemos $u+ -puderam $u+ - -poderei $u3+ -poderá $u3+ -poderemos $u+ -poderão $u+ - - - // ir - to go (used to make future tense) -vou $u+ -vai $u+ -vamos $u+ -vão $u+ - - // haver -há $u+ - - -// Letter names -_a a -_e E -_o O -a a $atend -e E $atend // assume letter-e at end of sentence -o O $atend - - -// some common adjectives and adverbs -alguns $u // some -algumas $u // some -não n,&U~ $strend // not - -// Words with two possible pronounciations -jogo Z'OgU $verb -gosto g'OstU $verb -começo kom'EsU $verb -almoço aUm'OsU $verb -retorno xet'OrnU $verb -acordo &k'OrdU $verb -governo gov'ernU $noun -?2 olho 'oljU $noun -?4 olho 'ol^U $noun -?2 colher kolj'Er $noun -?4 colher kol^'Er $noun - - -// MAIN WORD DICTIONARY -//********************* -// $alt changes stressed [e] or [o] phoneme to open [E] or [O] -// $alt2 changes stressed [E] or [O] phoneme to close [e] or [o] - -abacaxi abakaSy -abordo $alt -aborto $alt $verb -acerto $alt2 $noun -acertos $alt2 -acervo $alt2 -adepto $alt -adereço $alt2 -adore $alt -adorno $alt $verb -albatrozes $alt -alcateia $alt -alferes $alt -algozes $alt -alicerce $alt -amanheça $alt2 -amanheço $alt2 -amanhecesse $alt2 -amarelo $alt -ameba $alt -amores $alt2 -anoitecesse $alt2 -anoiteça $alt2 -anoiteço $alt2 -apego $alt2 $noun -apelo $alt $verb -aposto $alt $verb -apreço $alt2 -aperto $alt2 $noun -apoio $alt $verb -aprendeste $alt2 -aprovo $alt -arredores $alt -arremesso $alt2 $noun -arroz $alt2 -assembleia $alt -aterro $alt2 $noun -atmosfera $alt -atrozes $alt -austera $alt -austero $alt -autora $alt2 -axé aSE -bebeste $alt2 -beco $alt2 -belo $alt -besta $alt2 -bezerra $alt2 -bezerro $alt2 -bilhete $alt2 -boca $alt2 -bochecha $alt2 -bojo $alt2 -boleia $alt -bolero $alt -bolo $alt2 -bolo $alt $verb -borboleta $alt2 -bordo $alt -boto $alt2 $noun -bromelha $alt -cabeça $alt2 -cabresto $alt2 -cacete $alt2 -cachorra $alt2 -caderneta $alt2 -camiseta $alt2 -cantora $alt2 -caractere $alt -caramelo $alt -careta $alt2 -carreta $alt2 -casebre $alt -castelo $alt -cateto $alt2 -catorze $alt2 -cebola $alt2 -cefaleia $alt -cerca $alt $verb -cerco $alt $verb -cesta $alt2 -cesto $alt2 -chamego $alt2 -chefe $alt -chinelo $alt -choro $alt2 $noun -chupeta $alt2 -clamores $alt2 -coco $alt2 -cofre $alt -coice $alt2 -colabore $alt -colheste $alt2 -colmeia $alt -colore $alt -começo $alt2 $noun -comodo $alt2 -comera $alt2 -comeres $alt2 -comeste $alt2 -concerto $alt2 $noun -concordo $alt -conforto $alt $verb -conheceste $alt2 -conheço $alt2 -consolo $alt2 $noun -contivermos $alt -copa $alt -copo $alt -coreia $alt -corneta $alt2 -cornos $alt -corpos $alt -correste $alt2 -corto $alt -corveta $alt2 -corvos $alt -coto $alt2 -couber $alt -couberem $alt -couberdes $alt -couberes $alt -cratera $alt -crede $alt2 -cresce $alt -crescem $alt -der $alt -desapego $alt2 $noun -descabelo $alt -desce $alt -descem $alt -descordo $alt -descova $alt2 -desespero $alt2 $noun -desfecho $alt2 -desprezo $alt $verb -deva $alt2 -devo $alt2 -deveras $alt -dez $alt -diarreia $alt -discordo $alt -dissermos $alt -dobro $alt2 $noun -doce $alt2 -doutora $alt2 -droga $alt -duelo $alt -dueto $alt2 -elixir eliSir -elo $alt -emprego $alt2 $noun -encosto $alt $verb -endereço $alt2 -endereço $alt $verb -enforco $alt -engordo $alt -enumerem $alt -enredo $alt $verb -enterro $alt2 $noun -envelope $alt -envolto $alt2 -enxerto $alt2 $noun -epopeia $alt -eritreia $alt -erro $alt2 $noun -erros $alt2 -esboço $alt $verb -escopeta $alt2 -escroto $alt2 -esforço $alt $verb -esforços $alt -esgoto $alt2 $noun -esperma $alt -espeto $alt2 $noun -espiroqueta $alt2 -espoleta $alt2 -esposa $alt2 -esqueceste $alt2 -esqueleto $alt2 -estiverdes $alt -estiveres $alt -estivermos $alt -estrela $alt2 -estremeceste $alt2 -estrofe $alt -estorno $alt $verb -estorvo $alt $verb -etiqueta $alt2 -europa $alt -exagero $alt $verb -expeça $alt2 -expeço $alt2 -explore $alt -faceta $alt2 -farelo $alt -farofa $alt -febre $alt -feitora $alt2 -fera $alt -fere $alt -ferem $alt -ferozes $alt -fezes $alt -?1 fixe fiSy -fizermos $alt -folga $alt -fogos $alt -foguete $alt2 -foice $alt2 -forca $alt2 -forças $alt2 -fores $alt2 -forro $alt $verb -fosse $alt2 -fossem $alt2 -frevo $alt2 -galera $alt -gameta $alt2 -geleia $alt -gelo $alt $verb -germe $alt -gesso $alt2 -golpe $alt -gonorreia $alt -gorda $alt2 -gota $alt2 -gozo $alt $verb -graveto $alt2 -grego $alt2 -grelha $alt -grega $alt2 -groselha $alt -grosso $alt2 -grozo $alt $verb -hoje $alt2 -houvermos $alt -ideia $alt -insonoro $alt -joga $alt -jogam $alt -jogos $alt -jogue $alt -joguem $alt -joguete $alt2 -lambreta $alt2 -lebre $alt -lerda $alt -lerdo $alt -líderes $alt2 -lopes $alt -maleta $alt2 -mantiverdes $alt -mantiveres $alt -mantivermos $alt -marmelo $alt -marreta $alt2 -martelo $alt -merda $alt -megera $alt -melo $alt -mentora $alt2 -metro $alt -mexa m'eS& -mexi meS'i -mexo m'eSU -miolo $alt2 -moeda $alt -modo $alt -modos $alt -molho $alt2 $noun -monera $alt -morcego $alt2 -morda $alt2 -moreia $alt -mortos $alt -motora $alt2 -?2 mulher mulj'Er -?4 mulher mul^'Er -mui mwi -muito mw'iNtU // -s is included as a suffix -muita mw'iNt& -mulheres $alt -mureta $alt2 -mutreta $alt2 -namoro $alt2 $noun -naquele $alt2 -negra $alt2 -negro $alt2 -novos $alt -obstetra $alt -obsoleta $alt2 -obsoleto $alt2 -pbvivera $alt -obtivermos $alt -odisseia $alt -onu $1 -opereta $alt2 -ordens $alt -osso $alt2 -ostra $alt2 -ovos $alt -pachorra $alt2 -padeceste $alt2 -paexa paeSa -palacete $alt2 -palheta $alt2 -pangeia $alt -pantera $alt -paralelo $alt -parede $alt2 -pastora $alt2 -pedra $alt -pelego $alt2 -pelo $alt $verb -perde $alt -perdem $alt -perede $alt2 -pesa $alt -pesam $alt -pesque $alt -pesquem $alt -peso $alt -peso $alt2 $noun -piloto $alt2 -pintora $alt2 -pirueta $alt2 -plateia $alt -plebeia $alt -polca $alt -porcos $alt -porrete $alt2 -porra $alt2 -portos $alt -pose $alt2 -povos $alt -poxa p'oS& -preta $alt2 -preto $alt2 -primavera $alt -profere $alt -proferem $alt -provo $alt -puder $alt -punheta $alt -puserdes $alt -quarteto $alt2 -quinteto $alt2 -quisermos $alt -recomeço $alt2 $noun -recordo $alt -recorto $alt -rede $alt2 -redor $alt -reembolso $alt $verb -reforços $alt -reforço $alt $verb -refresco $alt $verb -reitora $alt2 -relevo $alt2 $noun -remorso $alt -reprovo $alt -resolve $alt -resolvem $alt -rixa x'iS& -rocha $alt -rock $alt -rogas $alt -rolo $alt2 $noun -rumores $alt2 -saleta $alt2 -sarjeta $alt -severa $alt -severo $alt -seborreia $alt -seco $alt2 $noun -secos $alt2 -selo $alt $verb -selvagem seUv'aZeIN -sexteto $alt2 -?1 senhora $alt2 -senhores $alt2 -sincera $alt -sincero $alt -sinopse $alt -sobe $alt -sobem $alt -soco $alt2 -soco $alt $verb -sofrem $alt -sofre $alt -sofreste $alt2 -sogra $alt -sopre $alt -soprem $alt -sopro $alt $verb -soro $alt2 -sorvete $alt2 -sossego $alt2 $noun -souberdes $alt -soubermos $alt -suborno $alt $verb -sufoco $alt2 $noun -sufocos $alt2 -sugere $alt -sugerem $alt -suporto $alt -suor swOr -tapete $alt2 -tempero $alt2 $noun -teta $alt2 -tetra $alt -tiver $alt -tivera $alt -tiveres $alt -tivermos $alt -tocha $alt -toga $alt -tola $alt2 -tolo $alt2 -topo $alt $verb -torno $alt $verb -torres $alt2 -tortos $alt -traqueia $alt -travesso $alt2 -tremores $alt2 -trevo $alt2 -troco $alt2 $noun -tropa $alt -tropeço $alt2 $noun -trombeta $alt2 -valeta $alt2 -vanessa $alt2 -velozes $alt -verbo $alt -verme $alt -vierem $alt -violeta $alt2 -voga $alt -vozes $alt -xarope $alt -zelo $alt $verb -zero $alt -zorra $alt2 - - - - -// foreign words -?1 alt 'alt -?2 agosto &g'ostU -?1 back b'Ek -?2 backup bEk'&p -?2 backups bEk'&ps -?1 blind bl'aind -?1 braille b:r'aily -?2 Braille bR'aili -?1 cancel k'&ns'El -?1 caps k'aps -?1 com kom -?1 ctrl k'oNt:r,Ol -?1 dat d'at -?1 doc d'Ok -?1 delete d'il'it -?1 design d,iz'ain -?1 dj d,i:dZ'eI -?1 down d'a,wn -?1 download d'a,wnl'oud -?2 download daUNl'owd -?3 download dau~Nl'owd -?1 end 'end -?1 escape Sk'eIpy -?2 esc 'Esk -?3 esc 'EskI -?1 explorer ,ekspl'O:*&r- -?2 Explorer ekspl'O*er -?1 eyes 'aiz -?1 frame fr'eImy -?2 frame fR'eImi -?1 gmail g,em'eIl -?2 Gmail Zem'eIl -?1 google g'u:g&l -?2 google g'ugol -?1 hardware 'ard,w'Er- -?2 hardware h'ardwe@- -?1 home 'omy -?2 home h'owmi -?1 hotmail h'Otm'eIl -?2 hotmail hotm'eIl -?1 install ,inst'al -?2 internet iNtern'Et -?2 Intranet iNtRan'Et -?2 inveja iNv'EZ& -?1 kernel k'Ern,El -?2 kernel k'Ern@l -?1 line l'ain - layout l'eI,aUt -?2 logo l'OgU -?1 lock l'Ok - mail m'eIl - mails m'eIls -?1 maior m,&j'Or- -?2 maior maI'Or -?2 maiores maI'O*is -?1 menor myn'Or- -?2 menor men'Or -?2 menores men'O*is -?2 melhor melj'Or -?2 melhores melj'O*is -?4 melhor mel^'Or -?4 melhores mel^'O*is -?2 mouse m'aUzi -?1 menu menu -?1 next n'Ekst - ok Ok'eI -?2 offline Ofl'aIN -?2 online oNlaIN - org Org -?1 ovo 'ovu -?1 pause p'au:z - page p'eIdZ -?2 pior pi'Or -?2 piores pi'O*is -preço $alt2 -python p'aIT&~N -queda $alt -?1 readme r'i:dmi: -?1 sapi s,ap'i -?1 scanner sk'En&r -?1 shift S'ift -?1 scroll sk:r'ol -?1 site s'aIt -?2 site s'aItSi -?1 software s'Oft,w'Er- -símbolo s'imbolU -?4 símbolo s'iNbolU -?2 software s'Oftwe@- -?1 space sp'eIsy -?1 sporting sp'Ort,ing -?1 tab t'ab -?1 telemóvel t,El,Em'OvEl -?1 telemóveis t,El,Em'OveIs# -?1 up &p -?1 upload &pl'oud -?2 web w'Eb -?2 verbete verb'etSi -?2 verbetes verb'etSis -?1 yahoo 'i,ah'u -?2 yahoo iah'u -?1 yes j'Es - - -// common person names -alan 'al@n -louis _^_FR - - -// foreign product names -?1 access 'aks,Es -?1 adobe &d'Oby - debian d'Ebj&~N -?1 excel ,Eks'El -?1 express ,Ekspr'Es - espeak isp'i:k -?1 espeakedit isp'i:kEd,it -?1 fedora _^_EN -?1 firefox f'ai&rfOks -?2 firefox f'ai@fOks -?1 front fr'ont -?1 jaws dZ'au:z -?1 linux l,in'uks -?2 linux l'inUks -?1 live l'aiv -?1 maker m'eIk&r- -?1 media m'Ed,i& -?1 messenger m'Es&ndZ&r- -?1 microsoft m,ik:r'os,Oft -?2 microsoft m'aIkRows'Oft -?1 movie m'uvi -?1 nero n'Eru -?1 office 'Of,is - openoffice 'opeIN|'Ofis -?1 outlook 'autl'uk -?2 Outlook ,aUtl'uk -?1 paint p'aint -?1 player pl'eI&r- -playstation _^_EN -?1 point p'oint -?1 power p'aU&r- -?1 product p:r'&d&kt -?1 Publisher p'&bl,iS&r- -?1 reader r'id,&r- -?1 setup s'Et'&p -?1 scout sk'aut // Nero scout -?1 skype sk'aip -?2 Skype sk'aIp - Slackware sl'akwe@- -?1 smart sm'art // nero StartSmart - speak spi:k - suse z'u:ts@ -?1 start st'art // nero StartSmart -?1 time t'aImy // nero show time - ubuntu ub'untu -?1 unix ,u:n'iks -?2 unix j'uniks - wagner v'agner -?3 wagner v'agIner -?1 windows w'iNd'ou:z -?2 windows w'iNdows -?1 window w'iNd'ou -?2 window w'iNdow - - -// historical/famous person names -babbage b'abidZ -bernhard bern'ard -darwin d'Arwin -dijkstra d'ijkstrA: -einstein _!'aInSt,aIn -feynman f'ainm@n -freud fr'OId -friedrich fr'i:driS -gauss g'aUs -geisel g'aIzEU -gottfried g'Otfri:t -hawking h'o:king -heisenberg h'aIzEnberg -hitler h'itler -isaac iz'&k -lavoisier lavwazj'e -leibniz l'aIbni:ts -montesquieu m,oNteskj'e -neumann n'OIman -newton n'i;utoN -oppenheimer _!'Op@nh,aImar -richard x'iS&rd -riemann r'i:man -rijndael x'ain;d'al -rousseau Rus'o -schrödinger Sr'edinger -stephen st'i:v@n -steve st'i:v -turing t'u*iNg -voltaire vOlt'Er -von f%On - - -// foreign common names/surnames -?1 alison &l'is&N -?1 cleverson kl'Evyrs&N -?2 cleverson kl'EversoN -?1 elton 'Elt&N -?1 halison &l'is&N -klein kl'aIn // Very common on southern Brazil. -?1 kleverson kl'Evers&N -krueger kR'iZer -krüger kR'iZer -kühl k'il -?1 nelson n'Els&N -mueler m'iler -mueller m'iler -müler m'iler -müller m'iler -ronchi r'OnCi: -vogel f'o:g@l -volkmann f'Olkman - - - - - - - - - - + +// This file in UTF8 encoded + +// Options +// ?1 European Portuguese +// ?2 Brazilian Portuguese +// ?3 Epenthetic [I] between consonants +// ?4 Brazil mbrola voice + +// $alt change [e] or [o] in the stressed syllable to [E] or [O] +// $alt2 change [E] or [O] in the stressed syllable to [e] or [o] +// Any [E] or [O] phonemes in unstressed words must be listed explicitly + + +// Note for "pt-pt" [R] is the same sound as [r] +// for "pt" [y] is the same sound as [i] + + +// Letters +// If a letter has a "word" pronunciation which is different from its +// "letter" name, then include the letter name here, with the letter +// prefixed by a _ character. + +// accent names +_lig ligad'u*& +_acu &g'udU +_ac2 &g'udUd'uplU +_brv bR'Evi +_ced sedZ'ilj& +?1 _ced syd'il^& +_cir sirku~Nfl'EksU +_dia tR'em& +_dot p'oNtU +_grv gR'avi +_hac ka*'oN +_mcn makR'oN +_ogo ogon'ek +_rng &~n'EU +?1 _rng &~n'El +_stk b'ax& +_tld tS'iU +?1 _tld til + + +// character names + +á $accent +_à $accent // à can be a word +â $accent +ã $accent +ç $accent +_é $accent // é can be a word +ê $accent +í $accent +ó $accent +ô $accent +õ $accent +ú $accent +ü $accent +ß _^_DE + +v ve // not Roman numbers +x Sis# + +_cap maI'uskulU +_?A l'etR&_ +_?? s'imbolU_ +_#32 esp'asU +?1 _#32 Sp'asU +_#9 tab + +* &ste*'iskU $max3 += __igw'&l_ $max3 +. p'oNtU $max3 ++ maIs# $max3 +% pors'eINtU $max3 +& _'e_ +@ &x'ob& +¤ 'eU*U +€ 'eU*U +§ p&*'agRafU + + +_! ,eskl&mas'&U~ +_" 'asp&s# + +?1 _# k,ardin'al +?2 _# k,ardZin'aU +_$ s,ifR'&U~ +_& 'e +?1 _' ap'Ostr,ofy +?2 _' &p'OstRofU +_( ,abRipa*'eINtezy +_) f,ES&pa*'eINtezy +_* &ste*'iskU +_− m'enUs + +_, v'irgul& +_- 'ifeIN +_/ b'aQ& +_: d,oIsp'oNtus +_; p,oNtu_iv'irgul& +_< men'Or +?1 _= igw'al +?2 _= igw'aU +_> maI'Or +_? ,iNtex,ogas'&U~ +_[ ,abRikowS'etSi +_\ b,ax&,iNvertS'id& +_] f,ES&kowS'etSi +_^ s,irku~Nfl'Eksu +__ s,ublin^'adu +_` gR'avi +_{ ,abRiS'avi +?1 _| b,ax&v,ertSik'al +?2 _| b,ax&v,ertSik'aU +_} f,ES&S'avi +?1 _~ t'il +?2 _~ tS'iU +_¡ ,eskl&mas,&U~,iNvertS'id& +_¿ ,iNtex,ogas,&U~,iNvertS'id& + +_" 'abRi;'asp&||d'upl&s# +_º Oz'in^U +_ª az'in^U +° gR'aU + + +// numeric +//******** + +?1 _0 z'E*u +?2 _0 z'E*U +?1 _1 'um +?2 _1 'u~N + _2 d'oIs# + _3 tR'es# +?1 _4 kw'atru +?2 _4 kw'atRu + _5 s'iNku + _6 s'eIs# +?1 _7 s'Ety +?2 _7 s'EtSy + _8 'oItu + _9 n'Ovy + _10 d'Es# + +_11 'oNzy +_12 d'ozy +?1_13 tr'ezy +?2_13 tR'ezi +?1_14 k&t'orzy +?2_14 kat'orzy +_15 k'iNzy +?1_16 dyz&s'eis# +?2_16 d,ezes'eIs# +?1_17 dyz&s'Ety +?2_17 d,ezes'EtSy +?1_18 dyz'Oitu +?2_18 dez'oItu +?1_19 dyz&n'Ovy +?2_19 dezen'Ovy +?1_2X v'iNty +?2_2X v'iNtSy +_3X tR'iNt& + +?1_4X kw&*'eNt& +?2_4X kwa*'eINt& +_5X siNkw'eINt& +?1_6X sys'eINt& +?2_6X ses'eINt& +?1_7X syt'eINt& +?2_7X set'eINt& +_8X oIt'eINt& +?1 _9X nuv'eINt& +?2 _9X nov'eINt& +_1C0 s'eIN +?1_0C s'eINtus# +?2_0C s'eINtUs# +_1C s'eINtu +?1_2C duz'eINtus# +?2_2C duz'eINtUz +?1_3C tryz'eNtus# +?2_3C tRez'eNtUz +?1_5C kin^'eINtus# +?2_5C kin^'eINtUz +?1_0M1 m'il_ +?2_0M1 m'iU_ +?1_1M1 m'il_ +?2_1M1 m'iU_ + +?1_0M2 milj'o~js# +?2_0M2 milj'o~jz +_1M2 'u~milj'&U~ +?1_0M3 bilj'o~js# +?2_0M3 bilj'o~jz +_1M3 'u~mbilj'&U~ +?1_0M4 trilj'o~js# +?2_0M4 trilj'o~jz +_1M4 'u~ntrilj'&U~ +_0and i +_dpt _v'irgul& +// _0Z2 seNt'Ezim& // 100ths +// _0Z3 mil'Ezim& // 1000ths + +// ordinal numbers +_#º U +_#ª & +_ord o + +_1o pRim'eI* +_2o seg'u~Nd +_3o te*@-s'eI* +_4o kw'a*@-t +_5o k'iNt +_6o s'est +_7o s'EtSim +_8o oIt'av +_9o n'on +_1Xo d'Esim +_2Xo viZ'Ezim +_3Xo tRiZ'Ezim +_4Xo kwad*aZ'Ezim +_5Xo kiNkwaZ'Ezim +_6Xo seksaZ'Ezim +_7Xo septwaZ'Ezim +_8Xo oktoZ'Ezim +_9Xo nonaZ'Ezim +_0Co seINt'Ezim +_1Co seINt'Ezim +_2Co duseINt'Ezim +_3Co tRiseINt'Ezim +_4Co kwad*iZeINt'Ezim +_5Co kiNZeINt'Ezim +_6Co seIseINt'Ezim +_7Co septSiZeINt'Ezim +_8Co oktSiZeINt'Ezim +_9Co noNZeINt'Ezim +_0M1o mil'Ezim +_1M1o mil'Ezim + + +// not roman numbers +vi vi + + +// ABBREVIATIONS +//************** +aapp $abbrev +abadv $abbrev +abc $abbrev +a.c 'as'e +adsl $abbrev +ae $abbrev +aids $abbrev +apedv $abbrev +avc $abbrev +bios b'i,OS +d.c d,es'e +cne $abbrev +cpu $abbrev +cpuc $abbrev +dpoc $abbrev +ecg $abbrev +edp $abbrev +?1 etc ,ets'Et:*& +?2 etc ,ets'Ete*& +e.u.a Eua +eua $abbrev +fbi $abbrev +hiv $abbrev +(http ://) ag,atete'pe_ +icc $abbrev +ieee $abbrev // Institute of Electrical and Electronics Engineers +iss $abbrev +jpeg Z,Ot&p'Eg +mpeg ,Emp'Eg +nba $abbrev +nvda $abbrev +oms $abbrev +omt $abbrev +osi $abbrev +?1 sa ,Esj'a +?1 sos ,Esj,O'Es +ue $abbrev +unts $abbrev +usb $abbrev + + +dr $dot +dra $dot +mr $dot +mrs $dot +prof pr'Of $dot +profº pR,ofes'or +profª pR,ofes'o*& +sr $dot +?1 sra ,Es;'Errj'a $dot +?2 sra $dot + +// articles +o $u+ $nounf +a $u+ $nounf +os $u+ $nounf +as $u+ $nounf +?1 a & $u+ $nounf + +um $u $nounf +uma $u $nounf +uns $u $nounf +umas $u $nounf + + +// pronouns +eu $u+ $verbf +tu $u+ +você vose $u2+ +ele 'ely $u+ +ela $u+ +nós $u+ +vós $u+ +vocês $u2+ +eles $u+ +elas $u+ + +me $u // reflexive +te $u +nos $u $nounf +la $u +lo $u +las $u +los $u +//se $u + +?2 este $u+ $nounf 'estSi // this +?2 estes $u+ $nounf 'estSis // these +?2 esta 'Est& $u+ $nounf +?2 nesta $u+ $nounf +?2 neste $u+ $nounf n'estSi //in this +?2 esse $u+ $nounf 'esi // that +essa 'Es& $u+ +desse $u+ $nounf +desta $nounf +nesse n'esy $u+ $nounf +aquele &k'ely $u+ $nounf // that +aquela $u+ $nounf +daquele d&k'ely $u+ $nounf +daquela $u+ $nounf + + que $u // pronunciation is in pt_rules + +// possessive adjectives +meu $u+ $nounf // meus +minha $u+ $nounf // minhas +teu $u+ $nounf +tua $u+ $nounf +seu $u+ $nounf +sua $u+ $nounf +?2 nosso $u+ $nounf // n'OsU +?2 nossa $u+ $nounf n'Os& +?2 nossos $u+ $nounf n'OsUs +?2 nossas $u+ $nounf n'Os&s +dele dely $u1+ +dela $u+ +deles $u+ +delas $u+ +nele nely $u1+ + +// prepositions +de $u $nounf // of,from +do $u $nounf +da $u $nounf +dos $u $nounf +das $u $nounf +dum $u +duma $u +duns $u +dumas $u + +em $u // in,on,at +no nu $u $nounf +na $u $nounf +num $u +numa $u +nuns $u +numas $u + +por $u $nounf // by,for,through +pelo $u $nounf +?2 pela $u $nounf p'el& + +ao $u +à ,a: +à $atend $atstart $accent +aos $u +às ,a:s + +para $u // for,to +pro $u $nounf +pra $u +pros $u +pras $u +prò $u +prà $u +pròs $u +pràs $u + +com $u // with +?2 sem // without +?2 até $u // until +?2 desde $u // from,since +?2 entre // between,among + sobre $alt2 // on,above,about +?2 sob // under,below +?2 debaixo // under,below + +?2 durante + + +// conjunctions +?1 e i $u // and +?2 e i $u // and +se $u // if + + +?2 mas $u // but +?2 porém // however +?2 todavia // yet +?2 contudo // nevertheless + +?2 ou $u // or +?2 quer // whether + +?2 assim // thus +?2 portanto // therefore + +?2 porque // because +?2 pois // because +?2 como $u // as + +?2 embora // although +?2 apesar // despite + + +?2 caso // if +?2 (desde que) d'esdZiki/ // provided that +?2 (exceto se) es'Etusi/ // unless +?2 (salvo se) s'alvusi/ // unless + +?2 (para que) p,a*&ki/ // so that + + + +?2 quando // when +?2 onde $u // where +?2 apenas // as soon as +?2 mal // as soon as, hardly +?2 (logo que) l'Oguki/ // as soon as +?2 (antes que) '&~NtSiski/ // before +?2 (depois que) dep'OIski/ // after +?2 (sempre que) s'eNpriki/ // whenever +?2 enquanto // while + + +// negative + +// questions + + +// auxillary verbs (be, have, can, etc) + // ser, to be +ser $u +sou $u +é E $u +é $atend $atstart $accent +és Es $u +somos $u +sois $u +são $u + +era E*& $u1 // .. imperfect +éramos $u +éreis $u +eram E*&U~ $u1 + +fui $u // .. preterite +foste fostSy $u1 // & fostes +foi $u +fomos $u + + +fora $u // .. pluperfect +fômamos $u +fôreis $u +foram fo*&U~ $u1 + +serei $u // .. future +?2 será se*a $u2 +seremos $u +sereis $u +serão $u + +seria $u // .. conditional +seríamos $u +seríeis $u +seriam $u + + // estar - to be +estar $u +estou $u +está $u est'a +estamos $u +estais $u +estão $u + +estava $u +estávamos $u +astavam $u + +estive $u +?2 esteve estevy $u2 +estivemos $u +estiveram $u +estiver $u estSiv'Er + +estarei $u +estará $u +estaremos $u +estarão $u + + + // ter - to have +ter $u +tenho $u +tens $u +tem $u +temos $u +tendes $u +têm $u + +tinha $u +tínhamos $u +tínheis $u +tinham $u + +tive $u +tiveste $u +teve tevy $u1 +tivemos $u +tivestes $u +tiveram $u + +tivera $u +tivéramos $u +tivéreis $u +tiveram $u + +terei $u +terás $u +terá $u +teremos $u +tereis $u +terão $u + + // fazer - to do +fazer $u+ +faço $u+ +faz $u+ +fazemos $u+ +fazem $u+ + + + // poder - can +poder $u+ +posso $u+ +pode $u+ +podemos $u+ +podem $u+ + +podia $u+ +podíamos $u+ +podiam $u+ + +pude $u+ +pôde $u+ +pudemos $u+ +puderam $u+ + +poderei $u3+ +poderá $u3+ +poderemos $u+ +poderão $u+ + + + // ir - to go (used to make future tense) +vou $u+ +vai $u+ +vamos $u+ +vão $u+ + + // haver +há $u+ + + +// Letter names +_a a +_e E +_o O +a a $atend +e E $atend // assume letter-e at end of sentence +o O $atend + + +// some common adjectives and adverbs +alguns $u // some +algumas $u // some +não n,&U~ $strend // not + + +// MAIN WORD DICTIONARY +//********************* +// $alt changes stressed [e] or [o] phoneme to open [E] or [O] +// $alt2 changes stressed [E] or [O] phoneme to close [e] or [o] + +abacaxi abakaSy +abordo $alt +aborto $alt $verb +acerto $alt2 $noun +acordo $alt $verb +acertos $alt2 +acervo $alt2 +adepto $alt +adereço $alt2 +adore $alt +adorno $alt $verb +albatrozes $alt +alcateia $alt +alferes $alt +algozes $alt +alicerce $alt +almoço $alt $verb +amarelo $alt +ameba $alt +amores $alt2 +apego $alt2 $noun +apelo $alt $verb +aposto $alt $verb +apreço $alt2 +aperto $alt2 $noun +apoio $alt $verb +aprovo $alt +arredores $alt +arremesso $alt2 $noun +arroz $alt2 +assembleia $alt +ateia $alt +aterro $alt2 $noun +atmosfera $alt +atrozes $alt +austera $alt +austero $alt +autora $alt2 +axé aSE +baqueta $alt2 +beco $alt2 +belo $alt +besta $alt2 +bilhete $alt2 +boca $alt2 +bochecha $alt2 +bojo $alt2 +boleia $alt +bolero $alt +bolo $alt2 +bolo $alt $verb +borboleta $alt2 +bordo $alt +boto $alt2 $noun +bromelha $alt +cabeça $alt2 +cabresto $alt2 +cacete $alt2 +cachorra $alt2 +caderneta $alt2 +camiseta $alt2 +cantora $alt2 +capacete $alt2 +caractere $alt +caramelo $alt +careta $alt2 +carreta $alt2 +carroça $alt +casebre $alt +castelo $alt +cateto $alt2 +catorze $alt2 +cebola $alt2 +cefaleia $alt +cerco $alt $verb +cesta $alt2 +cesto $alt2 +chamego $alt2 +chefe $alt +checam $alt +cheque $alt +chinelo $alt +choro $alt2 $noun +chovesse $alt2 +chupeta $alt2 +clamores $alt2 +coco $alt2 +cofre $alt +cogumelo $alt +coice $alt2 +colabore $alt +colete $alt2 +colchete $alt2 +colher $alt $verb +colheres $alt $noun +colmeia $alt +colore $alt +começo $alt2 $noun +comodo $alt2 +concerto $alt2 $noun +concordo $alt +conforto $alt $verb +consolo $alt2 $noun +contivermos $alt +controle $alt2 $noun +controlo $alt2 $noun +copa $alt +copo $alt +coreia $alt +corneta $alt2 +cornos $alt +corpos $alt +corto $alt +corveta $alt2 +corvos $alt +coto $alt2 +couberdes $alt +coubermos $alt +cratera $alt +crede $alt2 +cresce $alt +crescem $alt +der $alt +derdes $alt +desapego $alt2 $noun +descabelo $alt +desce $alt +descem $alt +descordo $alt +desespero $alt2 $noun +desfecho $alt2 +desprezo $alt $verb +deva $alt2 +devo $alt2 +deveras $alt +dez $alt +diarreia $alt +discordo $alt +dissermos $alt +dobro $alt2 $noun +doce $alt2 +doutora $alt2 +droga $alt +duelo $alt +dueto $alt2 +elixir eliSir +elo $alt +emprego $alt2 $noun +encosto $alt $verb +endereço $alt2 +endereço $alt $verb +enforco $alt +engordo $alt +enumerem $alt +enredo $alt $verb +enterro $alt2 $noun +envelope $alt +envolto $alt2 +enxerto $alt2 $noun +epopeia $alt +erga $alt2 +ergam $alt2 +ergo $alt2 +eritreia $alt +erro $alt2 $noun +erros $alt2 +esboço $alt $verb +escopeta $alt2 +escova $alt2 $noun +escroto $alt2 +esforço $alt $verb +esforços $alt +esgoto $alt2 $noun +esgotos $alt2 +esperma $alt +espeto $alt2 $noun +espiroqueta $alt2 +espoleta $alt2 +esposa $alt2 +esqueleto $alt2 +estiverdes $alt +estivermos $alt +estrela $alt2 +estrofe $alt +estorno $alt $verb +estorvo $alt $verb +etiqueta $alt2 +europa $alt +exagero $alt $verb +expeça $alt2 +expeço $alt2 +explore $alt +faceta $alt2 +farelo $alt +farofa $alt +febre $alt +feitora $alt2 +fera $alt +ferozes $alt +fezes $alt +?1 fixe fiSy +fizerdes $alt +fizermos $alt +foda $alt2 $verb +folga $alt +fogos $alt +foguete $alt2 +foice $alt2 +forca $alt2 +forças $alt2 +fordes $alt2 +fores $alt2 +forro $alt $verb +fosse $alt2 +frevo $alt2 +galera $alt +galileia $alt +gameta $alt2 +geleia $alt +gelo $alt $verb +germe $alt +gesso $alt2 +golpe $alt +gonorreia $alt +gorda $alt2 +gosto $alt $verb +gota $alt2 +governo $alt2 $noun +gozo $alt $verb +graveto $alt2 +grego $alt2 +grelha $alt +grega $alt2 +groselha $alt +grosso $alt2 +grozo $alt $verb +hemorroida $alt +hoje $alt2 +horrores $alt2 +houverdes $alt +houvermos $alt +ideia $alt +insonoro $alt +interesse $alt2 $noun +joga $alt +jogam$alt +jogo $alt $verb +jogos $alt +jogue $alt +joguem $alt +joguete $alt2 +lambreta $alt2 +lebre $alt +lerda $alt +lerdo $alt +líderes $alt2 +lopes $alt +maleta $alt2 +mantiverdes $alt +mantiveres $alt +mantivermos $alt +marcelo $alt +marmelo $alt +marreta $alt2 +martelo $alt +merda $alt +megera $alt +melo $alt +mentora $alt2 +meta $alt $noun +meteoro $alt +metro $alt +mexa m'eS& +mexi meS'i +mexo m'eSU +minueto $alt2 +miolo $alt2 +miolos $alt +moeda $alt +modo $alt +modos $alt +molho $alt2 $noun +monera $alt +morcego $alt2 +morda $alt2 +moreia $alt +mortos $alt +motora $alt2 +?2 mulher mulj'Er +?4 mulher mul^'Er +mui mwi +muito mw'iNtU // -s is included as a suffix +muita mw'iNt& +mulheres $alt +mureta $alt2 +mutreta $alt2 +namoro $alt2 $noun +naquela $nounf +naquele $alt2 $nounf +negra $alt2 +negro $alt2 +novos $alt +obstetra $alt +obsoleta $alt2 +obsoleto $alt2 +obtivera $alt +obtivermos $alt +odisseia $alt +onu $1 +olho $alt2 $noun +osso $alt2 +ossos $alt +opereta $alt2 +ordens $alt +ostra $alt2 +ovos $alt +pachorra $alt2 +paexa paeSa +palacete $alt2 +palheta $alt2 +pangeia $alt +pantera $alt +paralelo $alt +parede $alt2 +pastora $alt2 +pedra $alt +pelego $alt2 +pelo $alt $verb +perde $alt +perdem $alt +pesa $alt +pesam $alt +pesque $alt +pesquem $alt +peso $alt $verb +piloto $alt2 $noun +pintora $alt2 +pirueta $alt2 +plateia $alt +plebeia $alt +polca $alt +porcos $alt +porrete $alt2 +porra $alt2 +portos $alt +pose $alt2 +povos $alt +poxa p'oS& +preta $alt2 +preto $alt2 +primavera $alt +provo $alt +puder $alt +puderdes $alt +pudermos $alt +puserdes $alt +quarteto $alt2 +quinteto $alt2 +quiserdes $alt +quisermos $alt +recomeço $alt2 $noun +recordo $alt +recorto $alt +rede $alt2 +redor $alt +reembolso $alt $verb +reforços $alt +reforço $alt $verb +refresco $alt $verb +reitora $alt2 +relevo $alt2 $noun +remorso $alt +reprovo $alt +resolve $alt +resolvem $alt +retorno $alt $verb +rixa x'iS& +rocha $alt +rock $alt +rogas $alt +rola $alt2 $noun +rolo $alt2 $noun +rosna $alt +rosnam $alt +rosne $alt +rosnem $alt +rosno $alt +rumores $alt2 +saleta $alt2 +sarjeta $alt +severa $alt +severo $alt +seborreia $alt +seca $alt2 $noun +secas $alt2 +seco $alt2 +seco $alt $verb +selo $alt $verb +selvagem seUv'aZeIN +sexteto $alt2 +?1 senhora $alt2 +senhores $alt2 +sincera $alt +sincero $alt +sinopse $alt +sobe $alt +sobem $alt +soco $alt2 +soco $alt $verb +sofrem $alt +sofre $alt +sofreste $alt2 +sogra $alt +sopre $alt +soprem $alt +sopro $alt $verb +soro $alt2 +sorvete $alt2 +sossego $alt2 $noun +souberdes $alt +soubermos $alt +suborno $alt $verb +sufoco $alt2 $noun +sufocos $alt2 +sugere $alt +sugerem $alt +suporto $alt +suor swOr +tapete $alt2 +tempero $alt2 $noun +teta $alt2 +tetra $alt +tiverdes $alt +tivermos $alt +tocha $alt +toga $alt +tola $alt2 +tolo $alt2 +tolhe $alt +tolhem $alt +topo $alt $verb +torno $alt $verb +torre $alt2 $noun +torres $alt2 +tortos $alt +traqueia $alt +travesso $alt2 +tremores $alt2 +trevo $alt2 +troco $alt2 $noun +tropa $alt +tropeço $alt2 $noun +trombeta $alt2 +tumores $alt2 +valeta $alt2 +vanessa $alt2 +velozes $alt +verme $alt +vierem $alt +violeta $alt2 +voga $alt +vozes $alt +xarope $alt +xeque $alt +zelo $alt $verb +zero $alt +zorra $alt2 + + + + +// foreign words +?1 alt 'alt +?2 agosto &g'ostU +?1 back b'Ek +?2 backup bEk'&p +?2 backups bEk'&ps +?1 blind bl'aind +?1 braille b:r'aily +?2 Braille bR'aili +?1 cancel k'&ns'El +?1 caps k'aps +?1 com kom +?1 ctrl k'oNt:r,Ol +?1 dat d'at +?1 doc d'Ok +?1 delete d'il'it +?1 design d,iz'ain +?1 dj d,i:dZ'eI +?1 down d'a,wn +?1 download d'a,wnl'oud +?2 download daUNl'owd +?3 download dau~Nl'owd +?1 end 'end +?1 escape Sk'eIpy +?2 esc 'Esk +?3 esc 'EskI +?1 explorer ,ekspl'O:*&r- +?2 Explorer ekspl'O*er +?1 eyes 'aiz +?1 frame fr'eImy +?2 frame fR'eImi +?1 gmail g,em'eIl +?2 Gmail Zem'eIl +?1 google g'u:g&l +?2 google g'ugol +?1 hardware 'ard,w'Er- +?2 hardware h'ardwe@- +?1 home 'omy +?2 home h'owmi +?1 hotmail h'Otm'eIl +?2 hotmail hotm'eIl +?1 install ,inst'al +?2 internet iNtern'Et +?2 Intranet iNtRan'Et +?2 inveja iNv'EZ& +?1 kernel k'Ern,El +?2 kernel k'Ern@l +?1 line l'ain + layout l'eI,aUt +?2 logo l'OgU +?1 lock l'Ok + mail m'eIl + mails m'eIls +?1 maior m,&j'Or- +?2 maior maI'Or +?2 maiores maI'O*is +?1 menor myn'Or- +?2 menor men'Or +?2 menores men'O*is +?2 melhor melj'Or +?2 melhores melj'O*is +?4 melhor mel^'Or +?4 melhores mel^'O*is +?2 mouse m'aUzi +?1 menu menu +?1 next n'Ekst + ok Ok'eI +?2 offline Ofl'aIN +?2 online oNlaIN + org Org +?1 ovo 'ovu +?1 pause p'au:z + page p'eIdZ +?2 pior pi'Or +?2 piores pi'O*is +preço $alt2 +python p'aIT&~N +queda $alt +?1 readme r'i:dmi: +?1 sapi s,ap'i +?1 scanner sk'En&r +?1 shift S'ift +?1 scroll sk:r'ol +?1 site s'aIt +?2 site s'aItSi +?1 software s'Oft,w'Er- +símbolo s'imbolU +?4 símbolo s'iNbolU +?2 software s'Oftwe@- +?1 space sp'eIsy +?1 sporting sp'Ort,ing +?1 tab t'ab +?1 telemóvel t,El,Em'OvEl +?1 telemóveis t,El,Em'OveIs# +?1 up &p +?1 upload &pl'oud +?2 web w'Eb +?2 verbete verb'etSi +?2 verbetes verb'etSis +?1 yahoo 'i,ah'u +?2 yahoo iah'u +?1 yes j'Es + + +// common person names +alan 'al@n +louis _^_FR + + +// foreign product names +?1 access 'aks,Es +?1 adobe &d'Oby + debian d'Ebj&~N +?1 excel ,Eks'El +?1 express ,Ekspr'Es + espeak isp'i:k +?1 espeakedit isp'i:kEd,it +?1 fedora _^_EN +?1 firefox f'ai&rfOks +?2 firefox f'ai@fOks +?1 front fr'ont +?1 jaws dZ'au:z +?1 linux l,in'uks +?2 linux l'inUks +?1 live l'aiv +?1 maker m'eIk&r- +?1 media m'Ed,i& +?1 messenger m'Es&ndZ&r- +?1 microsoft m,ik:r'os,Oft +?2 microsoft m'aIkRows'Oft +?1 movie m'uvi +?1 nero n'Eru +?1 office 'Of,is + openoffice 'opeIN|'Ofis +?1 outlook 'autl'uk +?2 Outlook ,aUtl'uk +?1 paint p'aint +?1 player pl'eI&r- +playstation _^_EN +?1 point p'oint +?1 power p'aU&r- +?1 product p:r'&d&kt +?1 Publisher p'&bl,iS&r- +?1 reader r'id,&r- +?1 setup s'Et'&p +?1 scout sk'aut // Nero scout +?1 skype sk'aip +?2 Skype sk'aIp + Slackware sl'akwe@- +?1 smart sm'art // nero StartSmart + speak spi:k + suse z'u:ts@ +?1 start st'art // nero StartSmart +?1 time t'aImy // nero show time + ubuntu ub'untu +?1 unix ,u:n'iks +?2 unix j'uniks + wagner v'agner +?3 wagner v'agIner +?1 windows w'iNd'ou:z +?2 windows w'iNdows +?1 window w'iNd'ou +?2 window w'iNdow + + +// historical/famous person names +babbage b'abidZ +bernhard bern'ard +darwin d'Arwin +dijkstra d'ijkstrA: +einstein _!'aInSt,aIn +feynman f'ainm@n +freud fr'OId +friedrich fr'i:driS +gauss g'aUs +geisel g'aIzEU +gottfried g'Otfri:t +hawking h'o:king +heisenberg h'aIzEnberg +hitler h'itler +isaac iz'&k +lavoisier lavwazj'e +leibniz l'aIbni:ts +montesquieu m,oNteskj'e +neumann n'OIman +newton n'i;utoN +oppenheimer _!'Op@nh,aImar +richard x'iS&rd +riemann r'i:man +rijndael x'ain;d'al +rousseau Rus'o +schrödinger Sr'edinger +stephen st'i:v@n +steve st'i:v +turing t'u*iNg +voltaire vOlt'Er +von f%On + + +// foreign common names/surnames +?1 alison &l'is&N +?1 cleverson kl'Evyrs&N +?2 cleverson kl'EversoN +?1 elton 'Elt&N +?1 halison &l'is&N +klein kl'aIn // Very common on southern Brazil. +?1 kleverson kl'Evers&N +krueger kR'iZer +krüger kR'iZer +kühl k'il +?1 nelson n'Els&N +mueler m'iler +mueller m'iler +müler m'iler +müller m'iler +ronchi r'OnCi: +vogel f'o:g@l +volkmann f'Olkman + + + + + + + + + + diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 96702e44..9c87d4fd 100755 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -1,1045 +1,1068 @@ -// translation rules Brazilian -// This file is UTF-8 encoded - -// Options -// ?1 European Portuguese -// ?2 Brazilian Portuguese -// ?3 Epenthetic [I] between consonants -// ?4 Brazil mbrola voice - -// Letter groups -// A a vowel -// B a consonant, except h l r w y -// C a consonant -// G a voiced consonant -// K not a vowel - -// endings -.L01 a am -.L02 e em -.L03 a am o -.L04 a am e em o ue uem -.L05 r ra ram re rem rdes -.L06 ra ram ste re rem -.L07 sse ssem ste - - -.group a - _) a (_ a - _) a (_W 'a // in an acronym - a a - &) a (_ =& // in final unstressed syllable - &) a (s_ =& - &) a (_a =&/ // ?? elide final a before a - &) a (_à =&/ -?1 a (_ =& // in final unstressed syllable -?1 a (s_ =& -?1 a (_a =&/ // ?? elide final a before a -?1 a (_à =&/ - - a (C_ & - a (r_ 'a -?1 p) a (d_ =E - a (CC_ & -?1 a (l_ 'A // eg: Portugal, capital, etc. -?1 a (lK ,A // Algarve, Almerinda, etc... -?2 al (K aU - a (lh+ a - - a (m &~ - a (mAr_ & - a (mA@ & - a (n &~ - a (nA@ & - a (nAr_ & - am (_ =&~N - am (C &~m -?4 am (C &~N - an (K+ &~N - anh (A &~n^ - am (_ =&U~ -?1 a (z_ 'a //eg: paz, rapaz, capaz, etc... -?1 C) acç 'a's // eg: selecção, etc... - - ai aI - ai (s aI - a (iu_ a // caiu - a (iCK a - ay aI - ao (_ aU - au aU - au (s aU - a (uCK a - - -.group â - â ''& - â (m ''&~ - â (n ''&~ - âm (K ''&~m - ân (K ''&~N - ânh ''&~n^ - - -.group à - à a - _) à (s_ aI - - à (m &~ - à (n &~ - àm (K &~m - àn (K &~N - ành (A &~n^ - - -.group á - á ''a - ái ''aI - ái (s ''aI - á (iCK ''a - áy ''aI - áu ''aU - áu (s ''aU -?1 ál ''Al - á (uCK ''a - - -.group ã - ã &~ - ão &U~ - - -.group b - _) b (_ be - b b - b (b -?3 b (B bI -?3 b (s b -?3 b (_C b_ - - -.group c - _) c (_ se - c k - c (Y s // ce ci -?3 c (B kI -?3 c (s k -?3 c (t k -?3 c (_C k_ - ch S - ck k -?1 c (c //drop “c” in European Portuguese (eg: seleccionar) -?1 A) ct t //drop “c” in European Portuguese (eg: exacto) -?1 A) cç s //drop “c” in European Portuguese (eg: selecção) -?1 conta) ct (A kt // eg: contacto, contactar, contactável, incontactável, etc... - - -.group d - _) d (_ de - d d - d (d -?3 d (B dZI -?3 d (_C d_ -?2 d (i dZ -?2 d (í dZ -?2 d (e_ dZ - - -.group e - _) e (_ E - e e - e (_ =y - e (s_ =y -?2 e (_AN =i/ // ?? elide to [j] if next word starts with a vowel -?2 &l) e (_AN =i // but not after l or r -?2 &r) e (_AN =i -?1 e (_iN =i/ // drop final [i] is next word starts with another i - -?1 e (e i //eg: candeeiro - -?2 el (K EU - e (lh+ e - v) e (lhA_ E - - e (be_ E - e (bem_ E - - e (ca_ E - e (ce_ E - e (cem_ E - - e (chA_ E - e (chAm_ E - r) e (cho_ e - - e (clA_ E - e (clAm_ E - e (co_ E - e (ctA_ E - e (ctAm_ E - e (çA_ E - e (çAm_ E - - e (de_ E - e (dem_ E - - e (fa_ E - - e (gA_ E - e (gAm_ E - - e (grA_ E - e (grAm_ E - - h) e (gA_ e - h) e (gAm_ e - - e (gue_ E - e (guem_ E - - e (lA_ E - e (lo_ e - e (lAm_ E - - i) e (r_ E - @s) e (r_ E - u) e (r_ E - - ib) e (rA_ E - d) e (rA_ E - ed) e (rAm_ e - m) e (rA_ E - iv) e (rAm_ E - pod) e (rA_ e - d) e (rAm_ E - ib) e (rAm_ E - @s) e (rA_ E - @s) e (rAm_ E - sp) e (rA_ E - sp) e (rAm_ E - f) e (re_ E - f) e (rem_ E - - e (rgA_ E - e (rgAm_ E - - e (rsA_ E - e (rsAm_ E - - e (se_ E - e (sem_ E - - e (ssA_ E - e (ssAm_ E - - e (stA_ E - e (stAm_ E - e (strA_ E - - e (rnA_ E - e (rnAm_ E - - e (rtA_ E - e (rtAm_ E - - e (rrA_ E - e (rrAm_ E - - e (rvA_ E - e (rvAm_ E - - e (tA_ E - An) e (tA_ e - gaz) e (ta_ e - e (tAm_ E - - e (vA_ E - t) e (ve_ e - e (vi_ e - e (vê_ e - e (vAm_ E - - e (rrAs_ E - - e (x_ E - e (xA_ E - e (xAm_ E -?2 _n) e (t E - - em (C eIm - en (K eIN - enh en^ - - em (_ =eIN - em (s_ =eIN - en (_ =eIN - en (s_ =eIN - - ei eI - ei (s eI - ei ($w_alt EI - e (iCK e - ey eI - eu eU - eu (s eU - e (uCK e - -?1 d) e (CAA y -?1 d) e (CACAA y -?1 d) e (CACAC y -?1 d) e (CACC y -?1 d) e (CCAA y -?1 d) e (nCAA ,e -?1 d) e (CCACA y -?1 d) e (nCACA ,e -?1 d) e (CCACCA y -?1 d) e (nCACCA ,e - - j) e (tA_ E - j) e (tAm_ E - _r) eex (A eez - -?1 _) es (C@@ S // drop initial "e". -?1 _) e (f i // efectuar, etc. -?1 _n) e (nhu i // eg: nenhum, nenhuma, nenhuns, nenhumas. -?1 e (la_ 'E // eg: cadela, janela, vela, etc... -?1 C) e (cC ,E // eg: seleccionar, efectuar, etc... -?1 C) ecç 'E's // eg: selecção, etc... -?1 C) e (ã i // leão, panteão, etc. -?1 C) e (a i // oceano, etc. -?1 C) e (o 'i // eg: geologia, etc... -?1 C) e (ú i // conteúdo, etc. -?1 Cã) e j // cães, mãe, etc... -?1 c) e (rea y // cereais -?1 d) e (fici y // deficiênte, deficiência, etc... -?1 _d) e (fini y //definições. -?1 _d) e (slig y // desligar. -?1 _d) e (sloc y // eg: deslocamento, etc... -?1 _f) e (ch y // fechar -?1 _p) e (rcentag y // percentagem -?1 p) e (ssoa y //pessoal, pessoais, etc. -?1 pr) e (cis y // precisar -?1 pr) e (f y // preferências, etc. -?1 _r) e (cicl y // recicla, reciclagem, etc... -?1 r) e (cor y // recorrer, recordar -?1 r) e (luz y // eg: reluzir -?1 r) e (lva ,E // eg: relvado -?1 r) e (smung y // resmungar -?1 r) e (ss y // eg: ressequidos -?1 r) e (volv y // revolver -?1 r) e (vel y // revelar -?1 _t) e (rmin y // terminar. -?1 _v) e (loci y // velocidade -?1 _f) e (rramenta y // ferramenta, ferramentas. -?1 _p) e (squ y // pesquisar -?1 hip) e (r ,E // eg: hiper -?1 sup) e (r ,E // super -?1 _m) e (ga ,E // mega -?1 _int) e (rn ,E // Interno -?1 n) e (t 'E // eg: net -?1 e (l_ 'E // eg: possível, manuel, etc... -?1 v) e (l_ ,E // eg: possível, amovível, disponível, etc... -?1 l) e (ta 'E // eg: bicicleta, atleta. - - - sf) e (ra_ E // esfera, biosfera - -//sort - _fiz) e (L05_ E - _exag) e (L05_ E - _houv) e (L05_ E - _perd) e (L05_ e - _soub) e (L05_ E - _rend) e (L06_ e - _vend) e (L06_ e - _atend) e (L06_ e -_compreend) e (L06_ e -_entend) e (L06_ e -_estend) e (L06_ e -respond) e (L06_ e // cor- - com) e (L07_ e - _bat) e (L07_ e - _beb) e (L07_ e - _tem) e (L07_ e - _viv) e (L07_ e - colh) e (L07_ e // & es- - _corr) e (L07_ e - _eleg) e (L07_ e - _morr) e (L07_ e - _perd) e (L07_ e - _sofr) e (L07_ e - _torc) e (L07_ e - _venc) e (L07_ e - _adoec) e (L07_ e - _aperd) e (L07_ e - _merec) e (L07_ e - conhec) e (L07_ e // & re- - entend) e (L07_ e - preend) e (L07_ e // sur- com- - respond) e (L07_ e // cor- -_convenc) e (L07_ e -_entristec) e (L07_ e -_envaidec) e (L07_ e -_escond) e (L07_ e -_obedec) e (L07_ e -interromp) e (L07_ e -intromet) e (L07_ e - qu) e (brL04_ E - _hosp) e (dL03_ E - _estr) ei (L03_ EI - _inv) e (jL04_ E - _dec) e (pL04_ E - _p) e (quL02_ E - _s) e (quL02_ E - l) e (que_ E - _imp) e (rL03_ E - _reit) e (rL03_ E - _g) e (rL04_ E - _op) e (rL04_ E - _qu) e (rL04_ E - _alt) e (rL04_ E - _sup) e (rL04_ E - _tol) e (rL04_ E - _coop) e (rL04_ E - _temp) e (rL04_ E - _) e (rguL02_ E - _alb) e (rguL02_ E - _enx) e (rguL02_ E - _inv) e (rtL03_ e - _f) e (rvL03_ e - _p) e (scL03_ E - _m) e (sclL04 E - _l) e (ssL02_ e - _esp) e (ssL03_ e - _m) e (tL03_ e - _com) e (tL03_ e - _rem) e (tL03_ e - _derr) e (tL03_ e - _prom) e (tL03_ e - _subm) e (tL03_ e -_comprom) e (tL03_ e - _sol) e (trL03_ E - _pen) e (trL04_ E - scr) e (vL03_ e // e- in- pre- ree- - _atr) e (vL03_ e - _descr) e (vL03_ e - _pr) e (zL04_ E - _embel) e (zL04_ E - par) e (çL01_ e // pareça, apareça - _acont) e (çL01_ e - _arref) e (çL01_ e - _ado) e (çL03_ e - _aqu) e (çL03_ e - _car) e (çL03_ e - _mer) e (çL03_ e - _pad) e (çL03_ e - _per) e (çL03_ e - _esqu) e (çL03_ e - _obed) e (çL03_ e - _ofer) e (çL03_ e - _aborr) e (çL03_ e -_compar) e (çL03_ e -_desapar) e (çL03_ e -_enfraqu) e (çL03_ e -_enriqu) e (çL03_ e -_envaid) e (çL03_ e -_esclar) e (çL03_ e -_reapar) e (çL03_ e -_reconh) e (çL03_ e -//endsort - - - -.group é - é ''E - éi ''EI - éi (s ''EI - é (iCK ''E - éy ''eI - éu ''EU - éu (s ''EU - é (uCK ''E - ém (_ ''eIN - ém (s_ ''eIN - én (_ ''eIN - én (s_ ''eIN - - -.group ê - ê ''e - êm (_ ''eIN - êm (C ''eIm - ên (K ''eIN - ênh ''en^ - êm (_ ''eIN - - -.group f -?1 _) f (_W Ef; // within an acronym -?1 _) f (_ Ef // individual letter or end-of-acronym - _) f (_ 'Efe - f f - f (f -?3 f (B fI -?3 f (_C f_ - - -.group g -?1 _) g (_ ge -?1 _) g (_W Ze // within an acronym - _) g (_ Ze - g g - g (g -?3 g (B gI -?3 g (_C g_ - g (Y Z // ge gi - gu (Y g -?1 guen (C gw'eIN // aguenta, etc. -?1 n) gu (A gw // eg: língua, etc. -?1 man) gu (ei g // mangueira -?1 gu (ém_ g // eg: alguém, ninguém, etc... - - -.group h - _) h (_ ag'a - h // silent - - -.group i - _) i (_ i - i i - i (A j - i (o i - Cr) i i - Cl) i i - i (_ 'i - -?2 il (K iU - i (lh+ i - - im (_ iN - im (C im -?4 im (C iN - in (C iN // ?4 ?? - in (g iN - in (k iN - inh in^ - - i (A_ 'i - i (am_ 'i - io (_ iU - io (s_ iU - i (oCK i - iu (_ iU - iu (s_ iU - i (uCK i - - áC) i (A_ j - áCC) i (A_ j - âC) i (A_ j - âCC) i (A_ j - éC) i (A_ j - éCC) i (A_ j - êC) i (A_ j - êCC) i (A_ j - íC) i (A_ j - íCC) i (A_ j - óC) i (A_ j - óCC) i (A_ j - ôC) i (A_ j - ôCC) i (A_ j - úC) i (A_ j - úCC) i (A_ j - -?1 _) i (ntern 'i //inter -?1 @) ing (_ _^_EN -?1 @) ings (_ _^_EN - - -.group í - í ''i - í (m ''i - í (n ''i - ím (_ ''iN - ím (C ''im - ín (K ''iN - ính ''in^ - - -.group j - _) j (_ Z'Ot& - j Z -?3 j (B ZI -?3 j (_C Z_ - - -.group k -?1 _) k (_ k'ap& -?2 _) k (_ ka - k k - k (k -?3 k (B kI -?3 k (s k -?3 k (t k -?3 k (_C k_ - - -.group l -?1 _) l (_W El; // within an acronym -?1 _) l (_ El - _) l (_ 'Ele - l l - l) l - lh l^ - A) lh lj -?1 A) lh l^ -?4 A) lh l^ - - -.group m -?1 _) m (_W Em; -?1 _) m (_ Em - _) m (_ 'eme - m m - m (m -?3 m (B mI -?3 m (_C m_ - - -.group n -?1 _) n (_W En; -?1 _) n (_ En - _) n (_ 'ene - n n - n (n -?3 n (B nI -?3 n (_C n_ - nh n^ -?1 A) nn n //drop “n” (eg: connosco). - - -.group o - o o - @) o (_ =U - o (s_ =U - ou ow - oi oI - oi ($w_alt OI - oi ($w_alt2++ oI - oi (a_ OI // ?? - oi (cA_ OI - oi (de_ OI - oi (s oI - o (iCK o -?1 C) oo (_ ow // eg: voo, enjoo, etc... - oy OI - - o (cA_ O - o (cAm_ O - - o (que_ O - o (quem_ O - - p) o (dA_ O - p) o (dAm_ O - - o (g_ O - o (gs_ O - - o (ge_ O - o (gem_ O - - o (jA_ O - o (jAm_ O - - o (ldA_ O - o (ldAm_ O - - o (lA_ O - o (lAm_ O - - o (ltA_ O - o (ltAm_ O - - o (sA_ O - o (so_N o // not for osos_ - o (sAm_ O - - o (ssA_ O - o (ssAm_ O - - o (va_ O - o (vAm_ O - o (ve_ O - m) o (va_ o - m) o (vam_ o - o (veCs_ O - -?1 o (l_ 'O -?2 ol (_ Ow - o (lh o -?2 _) o (lhA_ O -?2 _) o (lhAm_ O - om (_ oN - o (ma_ o - - om (C om -?4 om (C oN - on (K oN - @s) on (_ %oN // words ending in -son - o (na_ o - onh on^ - - o (brA_ O - o (brAm_ O - o (dA_ O - o (dAm_ O - t) o (dA_ o - - o (rCA_ O - o (rCo_ o - o (rCAm_ O - - o (stA_ O - o (sto_ o - o (stAm_ O - o (strA_ O - o (strAm_ O - - o (tA_ O - o (tAm_ O - -?2 o (x_ O -?1 oz (_ Os# -?2 oz (_ Oz - o (zes_ O - o (rA_ O - b) o (re_ o - c) o (re_ o - d) o (re_ o - l) o (re_ o - t) o (re_ o - v) o (re_ o - o (rAm_ O - b) o (rA_ O - @@) o (rA_ o - - o (p_ 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. -?1 _p) o (rtuC u // Portugal, Portucalense, etc... -?1 pr) o (f u -?1 _s) o (lu u // solução, soluções. -?1 interr) o (g u // eg: interrogação -?1 f) o (rmulá u // eg: formulário, formulários. -?1 v) o (lt O - -//sort - _engl) o (bL01_ O - _esn) o (bL04_ O - _deb) o (chL04_ O -_desabr) o (chL04_ O - _r) o (gL04_ O - _adv) o (gL04_ O - _ref) o (gL04_ O - _ap) oi (L01_ OI - _esc) o (lhL02_ O - _m) o (lhL04_ O - _abs) o (lvL02_ O - _env) o (lvL02_ O - _rev) o (lvL02_ O -_desenv) o (lvL02_ O - _ent) o (pL02_ O - c) o (rrL01_ o // escorra, incorra, corra, recorra - _m) o (rrL01_ o - _r) o (snL01_ O - _c) o (spL02_ O - p) ostos (_ Ost=Us# // dispostos etc. -//endsort - -.group ô - ô ''o - ôm (_ ''oN - ôm (C ''om - ôn (K ''oN - ônh ''on^ - - -.group ó - ó ''O - - ói ''OI - ói (s ''OI - ó (iCK ''O - óu ''Ow - óy ''OI - - -.group õ - õ o~ - õe o~j - - -.group p - _) p (_ pe - p p - p (p -?3 p (B pI -?3 p (s p -?3 p (t p -?3 p (_C p_ -?1 ph f //Didn’t use in European Portuguese (eg: English) -?1 ple (_ _^_EN - - -.group q - _) q (_ ke - q k -?3 q (B kI - qu kw - qü kw - qu (Y k - qu (K ku -?2 _) que (_K ke - _) que (_ ky -?1 _) qua kwa // quatro, etc. -?1 _) que ke // quente, etc. -?1 _) quei (C k'eI // queira, queima, etc -?1 C) quen (C kw'eIN // cinquenta, etc. -?1 A) quen (C kw'eIN // frequência, etc. -?1 quec kes // esquece, etc. -?1 queç kes // esqueça. -?1 A) que (nA_ ke // pequeno, etc. -?1 C) quê (_ ke // porquê, etc. -?1 que (l ke // aquele, etc. -?1 que (r_ kE // qualquer, etc. -?1 qui ki // quinta, esquilo, etc. -?1 _) quind kuind // quindecágono, etc. -?1 tran) qui kui // tranquilo, etc. -?1 _) quo kuo // quoficiente, etc. - - -.group r -?1 _) r (_W 'Err; // within an acronym -?1 _) r (_ 'Err - _) r (_ 'Exe - _) r (_\$ xe'aU // currency - r * - r (_ r - r (C *@- - A) r (A * - A) r (_A * - rr x - XC) r (A R - C) r (A * -//?1 C) r (A r - _) r x - l) r x - n) r (+ x - s) r x -?1 A) r (_ r- // [r-] is English linking-r - - -.group s -?1 _) s (_W Es|; within an acronym [s]+[;] not [s;] phoneme -?1 _) s (_ Es -?2 _) s (_ 'Ese - s s - ss s - sc (Y s - sç s - sh S -?4 _) s (C Is - A) s (A z -?1 @) s (_ s# -?2 s (_ s# - @) s (_A z // next word starts with vowel -?!4 @) s (_G z // next word starts with voiced consonant - - A) s (_S1 s - A) s (_AS1 z // next word starts with vowel - ese) s (_ s -?!4 A) s (_GS1 z // next word starts with voiced consonant - -?1 A) s (C s# -?1 A) ss s -?1 A) s (G+ Z -?1 A) s (_KS1 s# -?1 A) s (_G+S1 Z - - _) sobre (@P5 sob*e - - -.group t - _) t (_ te - t t - t (t -?3 t (B tSI -?3 t (_C t_ -?2 t (i tS -?2 t (í tS -?2 t (e_ tS -?1 th _^_EN -?1 tion (_ _^_EN - - -.group u - _) u (_ u - u u - u (A w - u (_A w - r) u (A u - r) u (_A u - u (A_ 'u - - u (am_ 'u - u (em_ 'u - ui uI - ui (_ 'uI - u (iu w - u (iCK u - uy uI - - um (_ u~N - um (C u~m -?4 um (C u~N - un (K u~N - unh u~n^ - - g) u (Y - - -.group ú - ú ''u - úm (_ ''u~N - úm (C ''u~m -?4 úm (C ''u~N - ún (K ''u~N - únh ''u~n^ - -.group v - v v - v (v -?3 v (B vI -?3 v (_C v_ - - -.group w -?1 _) w (_ d'&bl,iu -?2 _) w (_ d'ablju - w w -?1 w (_ _^_EN -?4 _) w u - - -.group x - x (A S - A) x (A ks - _e) x (A z - _ê) x (A z - _ine) x (A z - e) x (A ks -?1 e) x (CA S - ai) x (A S - ei) x (A S - _au) x s - ou) x (+ S - u) x (i S - x (iqu S - x (C s - xc (Y s - x (s - x (_ ks - x (AxA S - x (ó_ z - a) x (a S - a) x (á S - a) x (ar S - a) x (ei S - xA) x (A S - ale) x (a S - bau) x (A S - brA) x (A S - bY) x (A S - _ca) x (A S - _co) x (A S - _coe) x (A z - _fa) x (i S - _fle) x (a S - gra) x (A S - _he) x (A z - _li) x (A S - _lu) x (A S - _mar) x ks - má) x (im s // máximo, máximas, etc. - me) x (A S - _mé) x (i S - mo) x (a S - _o) x (A S - _o) x (i ks - _o) x (í ks - pi) x (A S - _pro) x (A S - _pra) x (A S - prA) x (i s // aproximado, aproximadamente, aproximar, próximo, etc. - pu) x (A S // verb "puxar" and all its conjugations - qui) x (A S - ri) x (A S - rela) x (A S - _ro) x (A S - _trou) x (e s - _trou) xe (@ sE - _ve) x (A S - _xi) x (A S -?1 i) x (a_ S -?1 i) x (as_ S - _trou) x (ér s - _pro) x (imi s - - -.group y -?1 _) y (_ 'ips,ilON -?2 _) y (_ 'ipsiloN - y i - y (A j - y (_ %i // ?? stress on 1st syllable EN - - -.group z - _) z (_ ze - z z - z (z -?3 z (B zI -?3 z (_C z_ -?1 @) z (_ S -?2 @) z (_ s - @) z (_A z - @) z (_G z - -?1 A) z (C S -?1 A) z (G+ Z -?1 A) z (_C S -?1 A) z (_G+ Z - - -.group - ç s - - ü u - ß s - - $ sifR'&U~ - _r_) $ - - D_) º %o // ordinal - D_) ª %a // ordinal - - - , (D v'irgul& - - - __) - (_D m'enUs - A_) - (_D _ - C_) - (_D _ - +// translation rules Brazilian +// This file is UTF-8 encoded + +// Options +// ?1 European Portuguese +// ?2 Brazilian Portuguese +// ?3 Epenthetic [I] between consonants +// ?4 Brazil mbrola voice + +// Letter groups +// A a vowel +// B a consonant, except h l r w y +// C a consonant +// G a voiced consonant +// K not a vowel + +// endings +.L01 a am +.L02 e em +.L03 a am o +.L04 a am e em o ue uem +.L05 r ra ram re rem rdes +.L06 ra ram ste re rem +.L07 sse ssem ste + + +.group a + _) a (_ a + _) a (_W 'a // in an acronym + a a + &) a (_ =& // in final unstressed syllable + &) a (s_ =& + &) a (_a =&/ // ?? elide final a before a + &) a (_à =&/ +?1 a (_ =& // in final unstressed syllable +?1 a (s_ =& +?1 a (_a =&/ // ?? elide final a before a +?1 a (_à =&/ + + a (C_ & + a (r_ 'a +?1 p) a (d_ =E + a (CC_ & +?1 a (l_ 'A // eg: Portugal, capital, etc. +?1 a (lK ,A // Algarve, Almerinda, etc... +?2 al (K aU + a (lh+ a + + a (m &~ + a (mAr_ & + a (mA@ & + a (n &~ + a (nA@ & + a (nAr_ & + am (_ =&~N + am (C &~m +?4 am (C &~N + an (K+ &~N + anh (A &~n^ + am (_ =&U~ + a (z_ 'a //eg: paz, rapaz, capaz, etc... +?1 C) acç 'a's // eg: selecção, etc... + + ai aI + ai (s aI + a (iu_ a // caiu + a (iCK a + ay aI + ao (_ aU + au aU + au (s aU + a (uCK a + + +.group â + â ''& + â (m ''&~ + â (n ''&~ + âm (K ''&~m + ân (K ''&~N + ânh ''&~n^ + + +.group à + à a + _) à (s_ aI + + à (m &~ + à (n &~ + àm (K &~m + àn (K &~N + ành (A &~n^ + + +.group á + á ''a + ái ''aI + ái (s ''aI + á (iCK ''a + áy ''aI + áu ''aU + áu (s ''aU +?1 ál ''Al + á (uCK ''a + + +.group ã + ã &~ + ão &U~ + + +.group b + _) b (_ be + b b + b (b +?3 b (B bI +?3 b (s b +?3 b (_C b_ + + +.group c + _) c (_ se + c k + c (Y s // ce ci +?3 c (B kI +?3 c (s k +?3 c (t k +?3 c (_C k_ + ch S + ck k +?1 c (c //drop “c” in European Portuguese (eg: seleccionar) +?1 A) ct t //drop “c” in European Portuguese (eg: exacto) +?1 A) cç s //drop “c” in European Portuguese (eg: selecção) +?1 conta) ct (A kt // eg: contacto, contactar, contactável, incontactável, etc... + + +.group d + _) d (_ de + d d + d (d +?3 d (B dZI +?3 d (_C d_ +?2 d (i dZ +?2 d (í dZ +?2 d (e_ dZ + + +.group e + _) e (_ E + e e + e (_ =y + e (s_ =y +?2 e (_AN =i/ // ?? elide to [j] if next word starts with a vowel +?2 &l) e (_AN =i // but not after l or r +?2 &r) e (_AN =i +?1 e (_iN =i/ // drop final [i] is next word starts with another i + +?1 e (e i //eg: candeeiro + +?2 el (K EU + e (lh+ e + v) e (lhA_ E + + e (be_ E + e (bem_ E + + e (ca_ E + e (ce_ E + e (cem_ E + + e (chA_ E + e (chAm_ E + r) e (cho_ e + + e (clA_ E + e (clAm_ E + e (co_ E + e (ctA_ E + e (ctAm_ E + e (çA_ E + e (çAm_ E + + e (de_ E + e (dem_ E + + e (fa_ E + + e (gA_ E + e (gAm_ E + + e (grA_ E + e (grAm_ E + + h) e (gA_ e + h) e (gAm_ e + + e (gue_ E + e (guem_ E + + e (lA_ E + e (lo_ e + e (lAm_ E + + i) e (r_ E + @s) e (r_ E + u) e (r_ E + + ib) e (rA_ E + d) e (rA_ E + ed) e (rAm_ e + m) e (rA_ E + iv) e (rAm_ E + pod) e (rA_ e + d) e (rAm_ E + ib) e (rAm_ E + @s) e (rA_ E + @s) e (rAm_ E + sp) e (rA_ E + sp) e (rAm_ E + f) e (re_ E + f) e (rem_ E + + e (rgA_ E + e (rgAm_ E + + e (rsA_ E + e (rsAm_ E + + e (se_ E + e (sem_ E + + e (ssA_ E + e (ssAm_ E + + e (stA_ E + e (stAm_ E + e (strA_ E + + e (rnA_ E + e (rnAm_ E + + e (rtA_ E + e (rtAm_ E + + e (rrA_ E + e (rrAm_ E + + e (rvA_ E + e (rvAm_ E + + e (tA_ E + An) e (tA_ e + gaz) e (ta_ e + e (tAm_ E + + e (vA_ E + t) e (ve_ e + e (vi_ e + e (vê_ e + e (vAm_ E + + e (rrAs_ E + + e (x_ E + e (xA_ E + e (xAm_ E +?2 _n) e (t E + + em (C eIm + en (K eIN + enh en^ + + em (_ =eIN + em (s_ =eIN + en (_ =eIN + en (s_ =eIN + + ei eI + ei (s eI + ei ($w_alt EI + e (iCK e + ey eI + eu eU + eu (s eU + e (uCK e + +?1 d) e (CAA y +?1 d) e (CACAA y +?1 d) e (CACAC y +?1 d) e (CACC y +?1 d) e (CCAA y +?1 d) e (nCAA ,e +?1 d) e (CCACA y +?1 d) e (nCACA ,e +?1 d) e (CCACCA y +?1 d) e (nCACCA ,e + + j) e (tA_ E + j) e (tAm_ E + _r) eex (A eez + +?1 _) es (C@@ S // drop initial "e". +?1 _) e (f i // efectuar, etc. +?1 _n) e (nhu i // eg: nenhum, nenhuma, nenhuns, nenhumas. +?1 e (la_ 'E // eg: cadela, janela, vela, etc... +?1 C) e (cC ,E // eg: seleccionar, efectuar, etc... +?1 C) ecç 'E's // eg: selecção, etc... +?1 C) e (ã i // leão, panteão, etc. +?1 C) e (a i // oceano, etc. +?1 C) e (o 'i // eg: geologia, etc... +?1 C) e (ú i // conteúdo, etc. +?1 Cã) e j // cães, mãe, etc... +?1 c) e (rea y // cereais +?1 d) e (fici y // deficiênte, deficiência, etc... +?1 _d) e (fini y //definições. +?1 _d) e (slig y // desligar. +?1 _d) e (sloc y // eg: deslocamento, etc... +?1 _f) e (ch y // fechar +?1 _p) e (rcentag y // percentagem +?1 p) e (ssoa y //pessoal, pessoais, etc. +?1 pr) e (cis y // precisar +?1 pr) e (f y // preferências, etc. +?1 _r) e (cicl y // recicla, reciclagem, etc... +?1 r) e (cor y // recorrer, recordar +?1 r) e (luz y // eg: reluzir +?1 r) e (lva ,E // eg: relvado +?1 r) e (smung y // resmungar +?1 r) e (ss y // eg: ressequidos +?1 r) e (volv y // revolver +?1 r) e (vel y // revelar +?1 _t) e (rmin y // terminar. +?1 _v) e (loci y // velocidade +?1 _f) e (rramenta y // ferramenta, ferramentas. +?1 _p) e (squ y // pesquisar +?1 hip) e (r ,E // eg: hiper +?1 sup) e (r ,E // super +?1 _m) e (ga ,E // mega +?1 _int) e (rn ,E // Interno +?1 n) e (t 'E // eg: net +?1 e (l_ 'E // eg: possível, manuel, etc... +?1 v) e (l_ ,E // eg: possível, amovível, disponível, etc... +?1 l) e (ta 'E // eg: bicicleta, atleta. + + + sf) e (ra_ E // esfera, biosfera + +//sort + _fiz) e (L05_ E + _com) e (L05_ e +tiv) e (L05_ E // es- +_coub) e (L05_ E +_exag) e (L05_ E +_houv) e (L05_ E +_perd) e (L05_ e +_soub) e (L05_ E +_rend) e (L06_ e +_vend) e (L06_ e + _atend) e (L06_ e +_compreend) e (L06_ e +_entend) e (L06_ e +_estend) e (L06_ e +respond) e (L06_ e // cor- +_com) e (L07_ e +_envelhec) e (L07_ e +_esclarec) e (L07_ e +_escurec) e (L07_ e +padec) e (L07_ e // com- +parec) e (L07_ e // a- rea- com- desa- +_defend) e (L07_ e +vert) e (L07_ e // in- re- con- +_depend) e (L07_ e +_arrepend) e (L07_ e +ced) e (L07_ e // pro- con- su- +_mord) e (L07_ e +bat) e (L07_ e // re- com- +_esquec) e (L07_ e +_ergu) e (L07_ e +met) e (L07_ e // co- pro- arre- re- intro- compro- sub- +_amanhec) e (L07_ e +_aborrec) e (L07_ e +_anoitec) e (L07_ e +_enlouquec) e (L07_ e +_beb) e (L07_ e +_tem) e (L07_ e +viv) e (L07_ e // re- +colh) e (L07_ e // & es- +corr) e (L07_ e // per- con- in- so- dis- +_eleg) e (L07_ e +_morr) e (L07_ e +_perd) e (L07_ e +_sofr) e (L07_ e +torc) e (L07_ e // con- +venc) e (L07_ e // con- +_adoec) e (L07_ e +aprend) e (L07_ e // re- +merec) e (L07_ e // des- +conhec) e (L07_ e // & re- des- +entend) e (L07_ e +preend) e (L07_ e // sur- com- +respond) e (L07_ e // cor- +_entristec) e (L07_ e +_envaidec) e (L07_ e +_escond) e (L07_ e +_obedec) e (L07_ e +_interromp) e (L07_ e +qu) e (brL04_ E +_hosp) e (dL03_ E +_amanh) e (çL03_ e +_bez) e (rrL03_ e + prom) e (tL03_ e // com- +_v) e (rbL03_ E +_envelh) e (çL03_ e +_enlouqu) e (çL03_ e +_entrist) e (çL03_ e +conh) e (çL03_ e // re- +_anoit) e (çL03_ e +_estr) ei (L03_ EI +_inv) e (jL04_ E +_dec) e (pL04_ E +_p) e (quL02_ E + _s) e (quL02_ E +l) e (que_ E +_imp) e (rL03_ E +_reit) e (rL03_ E + _fortal) e (çL03_ e + abast) e (çL03_ e // re- + _g) e (rL04_ E + _op) e (rL04_ E + _qu) e (rL04_ E + _alt) e (rL04_ E + _sup) e (rL04_ E + _tol) e (rL04_ E + _coop) e (rL04_ E + _temp) e (rL04_ E + _) e (rguL02_ E + _alb) e (rguL02_ E + _enx) e (rguL02_ E + _inv) e (rtL03_ e + _f) e (rvL03_ e + _p) e (scL03_ E + _m) e (sclL04 E + _l) e (ssL02_ e + _esp) e (ssL03_ e + _m) e (tL03_ e + _com) e (tL03_ e +_rem) e (tL03_ e +_derr) e (tL03_ e +_sol) e (trL03_ E +_pen) e (trL04_ E +scr) e (vL03_ e // e- in- pre- ree- de- + _atr) e (vL03_ e + _pr) e (zL04_ E +_embel) e (zL04_ E +_acont) e (çL01_ e +_arref) e (çL01_ e +_ado) e (çL03_ e + _estrem) e (çL03_ e + par) e (çL03_ e // a- re- com- rea- desa- + _aqu) e (çL03_ e + _car) e (çL03_ e + _mer) e (çL03_ e + _pad) e (çL03_ e // com- + _per) e (çL03_ e + _esqu) e (çL03_ e + _obed) e (çL03_ e + _ofer) e (çL03_ e + _aborr) e (çL03_ e +_enfraqu) e (çL03_ e +_enriqu) e (çL03_ e +_envaid) e (çL03_ e +_esclar) e (çL03_ e +_ven) e (rL04_ E +//endsort + + + +.group é + é ''E + éi ''EI + éi (s ''EI + é (iCK ''E + éy ''eI + éu ''EU + éu (s ''EU + é (uCK ''E + ém (_ ''eIN + ém (s_ ''eIN + én (_ ''eIN + én (s_ ''eIN + + +.group ê + ê ''e + êm (_ ''eIN + êm (C ''eIm + ên (K ''eIN + ênh ''en^ + êm (_ ''eIN + + +.group f +?1 _) f (_W Ef; // within an acronym +?1 _) f (_ Ef // individual letter or end-of-acronym + _) f (_ 'Efe + f f + f (f +?3 f (B fI +?3 f (_C f_ + + +.group g +?1 _) g (_ ge +?1 _) g (_W Ze // within an acronym + _) g (_ Ze + g g + g (g +?3 g (B gI +?3 g (_C g_ + g (Y Z // ge gi + gu (Y g +?1 guen (C gw'eIN // aguenta, etc. +?1 n) gu (A gw // eg: língua, etc. +?1 man) gu (ei g // mangueira +?1 gu (ém_ g // eg: alguém, ninguém, etc... + + +.group h + _) h (_ ag'a + h // silent + + +.group i + _) i (_ i + i i + i (A j + i (o i + Cr) i i + Cl) i i + i (_ 'i + +?2 il (K iU + i (lh+ i + + im (_ iN + im (C im +?4 im (C iN + in (C iN // ?4 ?? + in (g iN + in (k iN + inh in^ + + i (A_ 'i + i (am_ 'i + io (_ iU + io (s_ iU + i (oCK i + iu (_ iU + iu (s_ iU + i (uCK i + + áC) i (A_ j + áCC) i (A_ j + âC) i (A_ j + âCC) i (A_ j + éC) i (A_ j + éCC) i (A_ j + êC) i (A_ j + êCC) i (A_ j + íC) i (A_ j + íCC) i (A_ j + óC) i (A_ j + óCC) i (A_ j + ôC) i (A_ j + ôCC) i (A_ j + úC) i (A_ j + úCC) i (A_ j + +?1 _) i (ntern 'i //inter +?1 @) ing (_ _^_EN +?1 @) ings (_ _^_EN + + +.group í + í ''i + í (m ''i + í (n ''i + ím (_ ''iN + ím (C ''im + ín (K ''iN + ính ''in^ + + +.group j + _) j (_ Z'Ot& + j Z +?3 j (B ZI +?3 j (_C Z_ + + +.group k +?1 _) k (_ k'ap& +?2 _) k (_ ka + k k + k (k +?3 k (B kI +?3 k (s k +?3 k (t k +?3 k (_C k_ + + +.group l +?1 _) l (_W El; // within an acronym +?1 _) l (_ El + _) l (_ 'Ele + l l + l) l + lh l^ + A) lh lj +?1 A) lh l^ +?4 A) lh l^ + + +.group m +?1 _) m (_W Em; +?1 _) m (_ Em + _) m (_ 'eme + m m + m (m +?3 m (B mI +?3 m (_C m_ + + +.group n +?1 _) n (_W En; +?1 _) n (_ En + _) n (_ 'ene + n n + n (n +?3 n (B nI +?3 n (_C n_ + nh n^ +?1 A) nn n //drop “n” (eg: connosco). + + +.group o + o o + @) o (_ =U + o (s_ =U + ou ow + oi oI + oi ($w_alt OI + oi ($w_alt2++ oI + oi (a_ OI // ?? + oi (cA_ OI + oi (de_ OI + oi (s oI + o (iCK o +?1 C) oo (_ ow // eg: voo, enjoo, etc... + oy OI + + o (cA_ O + o (cAm_ O + + o (que_ O + o (quem_ O + + p) o (dA_ O + p) o (dAm_ O + + o (g_ O + o (gs_ O + + o (ge_ O + o (gem_ O + + o (jA_ O + o (jAm_ O + + o (ldA_ O + o (ldAm_ O + + o (lA_ O + o (lAm_ O + + o (ltA_ O + o (ltAm_ O + + o (sA_ O + o (so_N o // not for osos_ + o (sAm_ O + + o (ssA_ O + o (ssAm_ O + + o (va_ O + o (vAm_ O + o (ve_ O + m) o (va_ o + m) o (vam_ o + o (veCs_ O + +?1 o (l_ 'O +?2 ol (_ Ow + o (lh o +?2 _) o (lhA_ O +?2 _) o (lhAm_ O + om (_ oN + o (ma_ o + + om (C om +?4 om (C oN + on (K oN + @s) on (_ %oN // words ending in -son + o (na_ o + onh on^ + + o (brA_ O + o (brAm_ O + o (dA_ O + o (dAm_ O + t) o (dA_ o + + o (rCA_ O + o (rCo_ o + o (rCAm_ O + + o (stA_ O + o (sto_ o + o (stAm_ O + o (strA_ O + o (strAm_ O + + o (tA_ O + o (tAm_ O + +?2 o (x_ O +?1 oz (_ Os# +?2 oz (_ Oz + o (zes_ O + o (rA_ O + b) o (re_ o + c) o (re_ o + d) o (re_ o + l) o (re_ o + t) o (re_ o + v) o (re_ o + o (rAm_ O + b) o (rA_ O + @@) o (rA_ o + + o (p_ 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. +?1 _p) o (rtuC u // Portugal, Portucalense, etc... +?1 pr) o (f u +?1 _s) o (lu u // solução, soluções. +?1 interr) o (g u // eg: interrogação +?1 f) o (rmulá u // eg: formulário, formulários. +?1 v) o (lt O + +//sort + _engl) o (bL01_ O + _esn) o (bL04_ O + _deb) o (chL04_ O +_desabr) o (chL04_ O + _r) o (gL04_ O + _adv) o (gL04_ O + _ref) o (gL04_ O + _ap) oi (L01_ OI + _esc) o (lhL02_ O + _m) o (lhL04_ O + _abs) o (lvL02_ O + _env) o (lvL02_ O + _rev) o (lvL02_ O +_desenv) o (lvL02_ O + _ent) o (pL02_ O + c) o (rrL01_ o // escorra, incorra, corra, recorra + _m) o (rrL01_ o + _c) o (spL02_ O + p) ostos (_ Ost=Us# // dispostos etc. +//endsort + +.group ô + ô ''o + ôm (_ ''oN + ôm (C ''om + ôn (K ''oN + ônh ''on^ + + +.group ó + ó ''O + + ói ''OI + ói (s ''OI + ó (iCK ''O + óu ''Ow + óy ''OI + + +.group õ + õ o~ + õe o~j + + +.group p + _) p (_ pe + p p + p (p +?3 p (B pI +?3 p (s p +?3 p (t p +?3 p (_C p_ +?1 ph f //Didn’t use in European Portuguese (eg: English) +?1 ple (_ _^_EN + + +.group q + _) q (_ ke + q k +?3 q (B kI + qu kw + qü kw + qu (Y k + qu (K ku +?2 _) que (_K ke + _) que (_ ky +?1 _) qua kwa // quatro, etc. +?1 _) que ke // quente, etc. +?1 _) quei (C k'eI // queira, queima, etc +?1 C) quen (C kw'eIN // cinquenta, etc. +?1 A) quen (C kw'eIN // frequência, etc. +?1 quec kes // esquece, etc. +?1 queç kes // esqueça. +?1 A) que (nA_ ke // pequeno, etc. +?1 C) quê (_ ke // porquê, etc. +?1 que (l ke // aquele, etc. +?1 que (r_ kE // qualquer, etc. +?1 qui ki // quinta, esquilo, etc. +?1 _) quind kuind // quindecágono, etc. +?1 tran) qui kui // tranquilo, etc. +?1 _) quo kuo // quoficiente, etc. + + +.group r +?1 _) r (_W 'Err; // within an acronym +?1 _) r (_ 'Err + _) r (_ 'Exe + _) r (_\$ xe'aU // currency + r * + r (_ r + r (C *@- + A) r (A * + A) r (_A * + rr x + XC) r (A R + C) r (A * +//?1 C) r (A r + _) r x + l) r x + n) r (+ x + s) r x +?1 A) r (_ r- // [r-] is English linking-r + + +.group s +?1 _) s (_W Es|; within an acronym [s]+[;] not [s;] phoneme +?1 _) s (_ Es +?2 _) s (_ 'Ese + s s + ss s + sc (Y s + sç s + sh S +?4 _) s (C Is + A) s (A z +?1 @) s (_ s# +?2 s (_ s# + @) s (_A z // next word starts with vowel +?!4 @) s (_G z // next word starts with voiced consonant + + A) s (_S1 s + A) s (_AS1 z // next word starts with vowel + ese) s (_ s +?!4 A) s (_GS1 z // next word starts with voiced consonant + +?1 A) s (C s# +?1 A) ss s +?1 A) s (G+ Z +?1 A) s (_KS1 s# +?1 A) s (_G+S1 Z + + _) sobre (@P5 sob*e + + +.group t + _) t (_ te + t t + t (t +?3 t (B tSI +?3 t (_C t_ +?2 t (i tS +?2 t (í tS +?2 t (e_ tS +?1 th _^_EN +?1 tion (_ _^_EN + + +.group u + _) u (_ u + u u + u (A w + u (_A w + r) u (A u + r) u (_A u + u (A_ 'u + + u (am_ 'u + u (em_ 'u + ui uI + ui (_ 'uI + u (iu w + u (iCK u + uy uI + + um (_ u~N + um (C u~m +?4 um (C u~N + un (K u~N + unh u~n^ + + g) u (Y + + +.group ú + ú ''u + úm (_ ''u~N + úm (C ''u~m +?4 úm (C ''u~N + ún (K ''u~N + únh ''u~n^ + +.group v + v v + v (v +?3 v (B vI +?3 v (_C v_ + + +.group w +?1 _) w (_ d'&bl,iu +?2 _) w (_ d'ablju + w w +?1 w (_ _^_EN +?4 _) w u + + +.group x + x (A S + A) x (A ks + _e) x (A z + _ê) x (A z + _ine) x (A z + e) x (A ks +?1 e) x (CA S + ai) x (A S + ei) x (A S + _au) x s + ou) x (+ S + u) x (i S + x (iqu S + x (C s + xc (Y s + x (s + x (_ ks + x (AxA S + x (ó_ z + a) x (a S + a) x (á S + a) x (ar S + a) x (ei S + xA) x (A S + ale) x (a S + bau) x (A S + brA) x (A S + bY) x (A S + _ca) x (A S + _co) x (A S + _coe) x (A z + _fa) x (i S + _fle) x (a S + gra) x (A S + _he) x (A z + _li) x (A S + _lu) x (A S + _mar) x ks + má) x (im s // máximo, máximas, etc. + me) x (A S + _mé) x (i S + mo) x (a S + _o) x (A S + _o) x (i ks + _o) x (í ks + pi) x (A S + _pro) x (A S + _pra) x (A S + prA) x (i s // aproximado, aproximadamente, aproximar, próximo, etc. + pu) x (A S // verb "puxar" and all its conjugations + qui) x (A S + ri) x (A S + rela) x (A S + _ro) x (A S + _trou) x (e s + _trou) xe (@ sE + _ve) x (A S + _xi) x (A S +?1 i) x (a_ S +?1 i) x (as_ S + _trou) x (ér s + _pro) x (imi s + + +.group y +?1 _) y (_ 'ips,ilON +?2 _) y (_ 'ipsiloN + y i + y (A j + y (_ %i // ?? stress on 1st syllable EN + + +.group z + _) z (_ ze + z z + z (z +?3 z (B zI +?3 z (_C z_ +?1 @) z (_ S +?2 @) z (_ s + @) z (_A z + @) z (_G z + +?1 A) z (C S +?1 A) z (G+ Z +?1 A) z (_C S +?1 A) z (_G+ Z + + +.group + ç s + + ü u + ß s + + $ sifR'&U~ + _r_) $ + + D_) º %o // ordinal + D_) ª %a // ordinal + + + , (D v'irgul& + + + __) - (_D m'enUs + A_) - (_D _ + C_) - (_D _ + diff --git a/dictsource/vi_rules b/dictsource/vi_rules index 6e8db88f..fa8ef8d3 100644 --- a/dictsource/vi_rules +++ b/dictsource/vi_rules @@ -1,740 +1,758 @@ -// replace combining (tone) accents with single characters -.replace -à à -á á -ả ả -ã ã -ạ ạ - - -ằ ằ -ắ ắ -ẳ ẳ -ẵ ẵ -ặ ặ - -ầ ầ -ấ ấ -ẩ ẩ -ẫ ẫ -ậ ậ - -è è -é é -ẻ ẻ -ẽ ẽ -ẹ ẹ - -ề ề -ế ế -ể ể -ễ ễ -ệ ệ - -ì ì -í í -ỉ ỉ -ĩ ĩ -ị ị - -ò ò -ó ó -ỏ ỏ -õ õ -ọ ọ - -ồ ồ -ố ố -ổ ổ -ỗ ỗ -ộ ộ - -ờ ờ -ớ ớ -ở ở -ỡ ỡ -ợ ợ - -ù ù -ú ú -ủ ủ -ũ ũ -ụ ụ - -ừ ừ -ứ ứ -ử ử -ữ ữ -ự ự - -ỳ ỳ -ý ý -ỷ ỷ -ỹ ỹ -ỵ ỵ - - -//================================ -// Consonants -//================================ - -.group b - b b - _) b _b - -.group c - c g //k - c (_ kh - ch c // try [tS;] [tS] [c] - -.group d - d J^ // try [z] [J] [dZ] [dZ;] [J^] - -.group đ - đ d - _) đ _d - -.group f - f f - - -.group g - g Q // try [g] [Q] - gh Q // or [g] [Q] - g (i J^ // try [D] [z] [j] [J^] [z;] [J] [dZ] - g (ì J^ - g (í J^ - g (ỉ J^ - g (ĩ J^ - g (ị J^ - gi J^ - -.group h - h h - - -.group j - j Z - - -.group k - k k - k (_ kh - kh x - -.group l - l l - -.group m - m m - -.group n - n n - ng N - ngh N - nh n^ - -.group ñ - ñ n^ - -.group p - p p - ph f - -.group q - q k - q (_ kh - qu w //kw - -.group r - r z. // try [z] [z.] [r] [z;] - -.group s - s s. // try [s.] [s] [S] - -.group t - t t[ - th t - tr cr // try [cr] [tr] [tS;] [tS] [c] [dZ] [dz;] - -.group v - v v - -.group w - w w - -.group x - x s - -.group z - z z - - -//================================ -// Vowels -//================================ - -.group a - a a: - ai a:I - aì a:I2 - aí a:I3 - aỉ a:I4 - aĩ a:I5 - aị a:I6 - ay aI - aỳ aI2 - aý aI3 - aỷ aI4 - aỹ aI5 - aỵ aI6 - ao a:U - aò a:U2 - aó a:U3 - aỏ a:U4 - aõ a:U5 - aọ a:U6 - au aU - aù aU2 - aú aU3 - aủ aU4 - aũ aU5 - aụ aU6 - -.group à - à a:2 - ài a:I2 - ày aI2 - ào a:U2 - àu aU2 - -.group á - á a:3 - ái a:I3 - áy aI3 - áo a:U3 - áu aU3 - -.group ả - ả a:4 - ải a:I4 - ảy aI4 - ảo a:U4 - ảu aU4 - -.group ã - ã a:5 - ãi a:I5 - ãy aI5 - ão a:U5 - ãu aU5 - -.group ạ - ạ a:6 - ại a:I6 - ạy aI6 - ạo a:U6 - ạu aU6 - -//================================ -.group ă - ă a - -.group ằ - ằ a2 - -.group ắ - ắ a3 - -.group ẳ - ẳ a4 - -.group ẵ - ẵ a5 - -.group ặ - ặ a6 - -//================================= -.group â - â @ - ây @I - âu @U - -.group ầ - ầ @2 - ầy @I2 - ầu @U2 - -.group ấ - ấ @3 - ấy @I3 - ấu @U3 - -.group ẩ - ẩ @4 - ẩy @I4 - ẩu @U4 - -.group ẫ - ẫ @5 - ẫy @I5 - ẫu @U5 - -.group ậ - ậ @6 - ậy @I6 - ậu @U6 - -//=========================== -.group e - e E - eo EU - eò EU2 - eó EU3 - eỏ EU4 - eỗ EU5 - eọ EU6 - -.group è - è E2 - èo EU2 - -.group é - é E3 - éo EU3 - -.group ẻ - ẻ E4 - ẻo EU4 - -.group ẽ - ẽ E5 - ẽo EU5 - -.group ẹ - ẹ E6 - ẹo EU6 - -//============================ - -.group ê - ê e - êu eU - -.group ề - ề e2 - ều eU2 - -.group ế - ế e3 - ếu eU3 - -.group ể - ể e4 - ểu eU4 - -.group ễ - ễ e5 - ễu eU5 - -.group ệ - ệ e6 - ệu eU6 - - -//============================ -.group i - i i - i (A j - ia i@ - ià i@2 - iá i@3 - iả i@4 - iã i@5 - iạ i@6 - iê i@ - iề i@2 - iế i@3 - iể i@4 - iễ i@5 - iệ i@6 - iu iU - iù iU2 - iú iU3 - iủ iU4 - iũ iU5 - iụ iU6 -// iêu i@U - -.group ì - ì i2 - ì (A j2 - ìa i@2 - ìu iU2 - -.group í - í i3 - í (A j3 - ía i@3 - íu iU3 - -.group ỉ - ỉ i4 - ỉ (A j4 - ỉa i@4 - ỉu iU4 - -.group ĩ - ĩ i5 - ĩ (A j5 - ĩa i@5 - ĩu iU5 - -.group ị - ị i6 - ị (A j6 - ịa i@6 - ịu iU6 - - - -//========================= -.group o - o O - oa o@ // modify oa sound example: hoa,khoa // o (A w - oi OI - oì OI2 - oí OI3 - oỉ OI4 - oĩ OI5 - oị OI6 - ong O# - oe o& // Adding oe sound example: lóe sáng,toét mắt -.group ò - ò O2 - òi OI2 - òa o@2 //ò (A w2 - òng O#2 - òe o&2 - -.group ó - ó O3 - ói OI3 - óa o@3 //ó (A w3 - óng O#3 - óe o&3 - -.group ỏ - ỏ O4 - ỏi OI4 - ỏa o@4 //ỏ (A w4 - ỏng O#4 - ỏe o&4 - -.group õ - õ O5 - õi OI5 - õa o@5 //õ (A w5 - õng O#5 - õe o&5 - -.group ọ - ọ O6 - ọi OI6 - ọa o@6 //ọ (A w6 - ọng O#6 - ọe o&6 - - -//============================= -.group ô - ô o - ôi oI - ông o# // ông sound - -.group ồ - ồ o2 - ồi oI2 - ồng o#2 - -.group ố - ố o3 - ối oI3 - ống o#3 - -.group ổ - ổ o4 - ổi oI4 - ổng o#4 - -.group ỗ - ỗ o5 - ỗi oI5 - ỗng o#5 - -.group ộ - ộ o6 - ội oI6 - ộng o#6 - - - -//============================= -.group ơ - ơ @: - ơi @:I - ơu @:U - -.group ờ - ờ @:2 - ời @:I2 - ờu @:U2 - -.group ớ - ớ @:3 - ới @:I3 - ớu @:U3 - -.group ở - ở @:4 - ởi @:I4 - ởu @:U4 - -.group ỡ - ỡ @:5 - ỡi @:I5 - ỡu @:U5 - -.group ợ - ợ @:6 - ợi @:I6 - ợu @:U6 - - - -//============================= -.group u - u u - u (A w - A) u w - ui uI - uì uI2 - uí uI3 - uỉ uI4 - uĩ uI5 - uị uI6 - ua u@ - uà u@2 - uá u@3 - uả u@4 - uã u@5 - uạ u@6 - uô u@ - uồ u@2 - uố u@3 - uổ u@4 - uỗ u@5 - uộ u@6 - uôi u@j - uồi u@j2 - uối u@j3 - uổi u@j4 - uỗi u@j5 - uội u@j6 - //ung u# -.group ù - ù u2 - ù (A w2 - ùi uI2 - ùa u@2 - //ùng u#2 - -.group ú - ú u3 - ú (A w3 - úi uI3 - úa u@3 - //úng u#3 - -.group ủ - ủ u4 - ủ (A w4 - ủi uI4 - ủa u@4 - //ủng u#4 - -.group ũ - ũ u5 - ũ (A w5 - ũi uI5 - ũa u@5 - //ũng u#5 - -.group ụ - ụ u6 - ụ (A w6 - ụi uI6 - ụa u@6 - //ụng u#6 - -//============================= -.group ư - ư y - ưi yI - ưa y@ - ươ y@ - ườ y@2 - ướ y@3 - ưở y@4 - ưỡ y@5 - ượ y@6 - ưu yw - ươi y@j - ười y@j2 - ưới y@j3 - ưởi y@j4 - ưỡi y@j5 - ượi y@j6 - ươu y@w - ườu y@w2 - ướu y@w3 - ưởu y@w4 - ưỡu y@w5 - ượu y@w6 - -.group ừ - ừ y2 - ừi yI2 - ừa y@2 - ừu yw2 - -.group ứ - ứ y3 - ứi yI3 - ứa y@3 - ứu yw3 - -.group ử - ử y4 - ửi yI4 - ửa y@4 - ửu yw4 - -.group ữ - ữ y5 - ữi yI5 - ữa y@5 - ữu yw5 - -.group ự - ự y6 - ựi yI6 - ựa y@6 - ựu yw6 - - - -.group y - y i - y (A j - ya i@ - yà i@2 - yá i@3 - yả i@4 - yã i@5 - yạ i@6 - yê i@ - yề i@2 - yế i@3 - yể i@4 - yễ i@5 - yệ i@6 -// yêu i@U - -.group ỳ - ỳ i2 - ỳ (A j2 - ỳa i@2 - -.group ý - ý i3 - ý (A j3 - ýa i@3 - -.group ỷ - ỷ i4 - ỷ (A j4 - ỷa i@4 - -.group ỹ - ỹ i5 - ỹ (A j5 - ỹa i@5 - -.group ỵ - ỵ i6 - ỵ (A j6 - ỵa i@6 - -.group 0xce // Greek letters -// 0xce is the first byte of the utf-8 code for these characters - - α a:1n_|f'a:1 - ά a:1n_|f'a:1 - β b'e1_|t['a:1 - γ Q'a:1_|m'a:1 - δ J'E1n_|t['a:1 - ε E1p_|s'i1_|l'O1n - έ E1p_|s'i1_|l'O1n - ζ D'e1_|t['a:1 - η e1_|t['a:1 - ή e1_|t['a:1 - θ t'e1_|t['a:1 - ι i1_|'o1_|t['a:1 - ί i1_|'o1_|t['a:1 - κ k'a:1p_|p'a:1 - λ l'a1m_|_d'a:1 - μ mw'i1 - ν nw'i1 - ξ s'i7 - ο o1_|m'i1_|kz.'O7n - -.group 0xcf // Greek letters - - π p'i1 - ρ z.'o1 - σ s'i3c_|m'a:1 - ς s'i3c_|m'a:1 - τ t['o1 - υ u1p_|s'i1_|l'O1n - ύ u1p_|s'i1_|l'O1n - φ f'i1 - χ c'i1 - ψ ps'i1 - ω o1_|m'e1_|Q'a:7 - ώ o1_|m'e1_|Q'a:7 - ό o1_|m'i1_|kz.'O7n - - -.group - % f'@2n||cr'am - ! _:c'@3m_|t'a:7n_: - ! (\! -// : koUl@n - D_) h (_DD_ D'@:2 // omit colon in time, eg: 2:30 - $ d'o||l'a - != x'o#_|_b'a2N_ - >= l'@:3n_|h'@:1n_|hw,a6kh_b'a2N - <= n^'O4_|h'@:1n_|hw,a6kh_b'a2N - - - __) - (_D cr'y2 - A_) - (_D _ - C_) - (_D _ - - - . c'@3m_ - . (. _: - \.) . - +// replace combining (tone) accents with single characters +.replace +à à +á á +ả ả +ã ã +ạ ạ + + +ằ ằ +ắ ắ +ẳ ẳ +ẵ ẵ +ặ ặ + +ầ ầ +ấ ấ +ẩ ẩ +ẫ ẫ +ậ ậ + +è è +é é +ẻ ẻ +ẽ ẽ +ẹ ẹ + +ề ề +ế ế +ể ể +ễ ễ +ệ ệ + +ì ì +í í +ỉ ỉ +ĩ ĩ +ị ị + +ò ò +ó ó +ỏ ỏ +õ õ +ọ ọ + +ồ ồ +ố ố +ổ ổ +ỗ ỗ +ộ ộ + +ờ ờ +ớ ớ +ở ở +ỡ ỡ +ợ ợ + +ù ù +ú ú +ủ ủ +ũ ũ +ụ ụ + +ừ ừ +ứ ứ +ử ử +ữ ữ +ự ự + +ỳ ỳ +ý ý +ỷ ỷ +ỹ ỹ +ỵ ỵ + + +//================================ +// Consonants +//================================ + +.group b + b b + _) b _b + +.group c + c g //k + c (_ kh + ch c // try [tS;] [tS] [c] + + +.group d + d J^ // try [z] [J] [dZ] [dZ;] [J^] + +.group đ + đ d + _) đ _d + +.group f + f f + + +.group g + g Q // try [g] [Q] + gh Q // or [g] [Q] + //g (i J^ // try [D] [z] [j] [J^] [z;] [J] [dZ] + //g (ì J^ + //g (í J^ + //g (ỉ J^ + //g (ĩ J^ + //g (ị J^ + gi J^ +?1 giết J^'iE3g + giết J^'iE3t[ + giếc J^'iE3kh +?1 giệt J^'iE6g + giệt J^'iE6t[ + giệc J^'iE6kh + +.group h + h h + + +.group j + j Z + + +.group k + k k + k (_ kh + kh x + +.group l + l l + +.group m + m m + +.group n + n n +?1 n (_ N //n + ng N + ngh N + nh n^ + +.group ñ + ñ n^ + +.group p + p p + ph f + +.group q + q k + q (_ kh + qu w //kw + +.group r + r z. // try [z] [z.] [r] [z;] + +.group s + s s. // try [s.] [s] [S] + +.group t + t t[ +?1 t (_ g + th t + tr cr // try [cr] [tr] [tS;] [tS] [c] [dZ] [dz;] + +.group v + v v + +.group w + w w + +.group x + x s + +.group z + z z + + + + +//================================ +// Vowels +//================================ + +.group a + a a: + ai a:I + aì a:I2 + aí a:I3 + aỉ a:I4 + aĩ a:I5 + aị a:I6 + ay aI + aỳ aI2 + aý aI3 + aỷ aI4 + aỹ aI5 + aỵ aI6 + ao a:U + aò a:U2 + aó a:U3 + aỏ a:U4 + aõ a:U5 + aọ a:U6 + au aU + aù aU2 + aú aU3 + aủ aU4 + aũ aU5 + aụ aU6 + +.group à + à a:2 + ài a:I2 + ày aI2 + ào a:U2 + àu aU2 + +.group á + á a:3 + ái a:I3 + áy aI3 + áo a:U3 + áu aU3 + +.group ả + ả a:4 + ải a:I4 + ảy aI4 + ảo a:U4 + ảu aU4 + +.group ã + ã a:5 + ãi a:I5 + ãy aI5 + ão a:U5 + ãu aU5 + +.group ạ + ạ a:6 + ại a:I6 + ạy aI6 + ạo a:U6 + ạu aU6 + +//================================ +.group ă + ă a + +.group ằ + ằ a2 + +.group ắ + ắ a3 + +.group ẳ + ẳ a4 + +.group ẵ + ẵ a5 + +.group ặ + ặ a6 + +//================================= +.group â + â @ + ây @I + âu @U1 + +.group ầ + ầ @2 + ầy @I2 + ầu @U2 + +.group ấ + ấ @3 + ấy @I3 + ấu @U3 + +.group ẩ + ẩ @4 + ẩy @I4 + ẩu @U4 + +.group ẫ + ẫ @5 + ẫy @I5 + ẫu @U5 + +.group ậ + ậ @6 + ậy @I6 + ậu @U6 + +//=========================== +.group e + e E + eo EU + eò EU2 + eó EU3 + eỏ EU4 + eỗ EU5 + eọ EU6 + +.group è + è E2 + èo EU2 + +.group é + é E3 + éo EU3 + +.group ẻ + ẻ E4 + ẻo EU4 + +.group ẽ + ẽ E5 + ẽo EU5 + +.group ẹ + ẹ E6 + ẹo EU6 + +//============================ + +.group ê + ê e + êu eU1 + +.group ề + ề e2 + ều eU2 + +.group ế + ế e3 + ếu eU3 + +.group ể + ể e4 + ểu eU4 + +.group ễ + ễ e5 + ễu eU5 + +.group ệ + ệ e6 + ệu eU6 + + + +//============================ +.group i + i i + i (A j + ia i@ + ià i@2 + iá i@3 + iả i@4 + iã i@5 + iạ i@6 + iê iE + iề iE2 + iế iE3 + iể iE4 + iễ iE5 + iệ iE6 + iu iU + iù iU2 + iú iU3 + iủ iU4 + iũ iU5 + iụ iU6 + iêu iU + iều iU2 + iếu iU3 + iểu iU4 + iễu iU5 + iệu iU6 + +.group ì + ì i2 + ì (A j2 + ìa i@2 + ìu iU2 + +.group í + í i3 + í (A j3 + ía i@3 + íu iU3 + +.group ỉ + ỉ i4 + ỉ (A j4 + ỉa i@4 + ỉu iU4 + +.group ĩ + ĩ i5 + ĩ (A j5 + ĩa i@5 + ĩu iU5 + +.group ị + ị i6 + ị (A j6 + ịa i@6 + ịu iU6 + + + +//========================= +.group o + o O + oa o@ // modify oa sound example: hoa,khoa // o (A w + oi OI + oì OI2 + oí OI3 + oỉ OI4 + oĩ OI5 + oị OI6 + ong O# + oe o& // Adding oe sound example: lóe sáng,toét mắt + +.group ò + ò O2 + òi OI2 + òa o@2 //ò (A w2 + òng O#2 + òe o&2 + +.group ó + ó O3 + ói OI3 + óa o@3 //ó (A w3 + óng O#3 + óe o&3 + +.group ỏ + ỏ O4 + ỏi OI4 + ỏa o@4 //ỏ (A w4 + ỏng O#4 + ỏe o&4 + +.group õ + õ O5 + õi OI5 + õa o@5 //õ (A w5 + õng O#5 + õe o&5 + +.group ọ + ọ O6 + ọi OI6 + ọa o@6 //ọ (A w6 + ọng O#6 + ọe o&6 + + +//============================= +.group ô + ô o + ôi oI + ông o# // ông sound + +.group ồ + ồ o2 + ồi oI2 + ồng o#2 + +.group ố + ố o3 + ối oI3 + ống o#3 + +.group ổ + ổ o4 + ổi oI4 + ổng o#4 + +.group ỗ + ỗ o5 + ỗi oI5 + ỗng o#5 + +.group ộ + ộ o6 + ội oI6 + ộng o#6 + + + +//============================= +.group ơ + ơ @: + ơi @:I + ơu @:U + +.group ờ + ờ @:2 + ời @:I2 + ờu @:U2 + +.group ớ + ớ @:3 + ới @:I3 + ớu @:U3 + +.group ở + ở @:4 + ởi @:I4 + ởu @:U4 + +.group ỡ + ỡ @:5 + ỡi @:I5 + ỡu @:U5 + +.group ợ + ợ @:6 + ợi @:I6 + ợu @:U6 + + + +//============================= +.group u + u u + u (A w + A) u w + ui uI + uì uI2 + uí uI3 + uỉ uI4 + uĩ uI5 + uị uI6 + ua u@ + uà u@2 + uá u@3 + uả u@4 + uã u@5 + uạ u@6 + uô u@ + uồ u@2 + uố u@3 + uổ u@4 + uỗ u@5 + uộ u@6 + uôi u@j + uồi u@j2 + uối u@j3 + uổi u@j4 + uỗi u@j5 + uội u@j6 + //ung u# +.group ù + ù u2 + ù (A w2 + ùi uI2 + ùa u@2 + //ùng u#2 + +.group ú + ú u3 + ú (A w3 + úi uI3 + úa u@3 + //úng u#3 + +.group ủ + ủ u4 + ủ (A w4 + ủi uI4 + ủa u@4 + //ủng u#4 + +.group ũ + ũ u5 + ũ (A w5 + ũi uI5 + ũa u@5 + //ũng u#5 + +.group ụ + ụ u6 + ụ (A w6 + ụi uI6 + ụa u@6 + //ụng u#6 + +//============================= +.group ư + ư y + ưi yI + ưa y@ + ươ y@ + ườ y@2 + ướ y@3 + ưở y@4 + ưỡ y@5 + ượ y@6 + ưu yw + ươi y@j + ười y@j2 + ưới y@j3 + ưởi y@j4 + ưỡi y@j5 + ượi y@j6 + ươu y@w + ườu y@w2 + ướu y@w3 + ưởu y@w4 + ưỡu y@w5 + ượu y@w6 + +.group ừ + ừ y2 + ừi yI2 + ừa y@2 + ừu yw2 + +.group ứ + ứ y3 + ứi yI3 + ứa y@3 + ứu yw3 + +.group ử + ử y4 + ửi yI4 + ửa y@4 + ửu yw4 + +.group ữ + ữ y5 + ữi yI5 + ữa y@5 + ữu yw5 + +.group ự + ự y6 + ựi yI6 + ựa y@6 + ựu yw6 + + + +.group y + y i + y (A j + ya i@ + yà i@2 + yá i@3 + yả i@4 + yã i@5 + yạ i@6 + yê i@ + yề i@2 + yế i@3 + yể i@4 + yễ i@5 + yệ i@6 + // yêu i@U + +.group ỳ + ỳ i2 + ỳ (A j2 + ỳa i@2 + +.group ý + ý i3 + ý (A j3 + ýa i@3 + +.group ỷ + ỷ i4 + ỷ (A j4 + ỷa i@4 + +.group ỹ + ỹ i5 + ỹ (A j5 + ỹa i@5 + +.group ỵ + ỵ i6 + ỵ (A j6 + ỵa i@6 + +.group 0xce // Greek letters +// 0xce is the first byte of the utf-8 code for these characters + + α a:1n_|f'a:1 + ά a:1n_|f'a:1 + β b'e1_|t['a:1 + γ Q'a:1_|m'a:1 + δ J'E1n_|t['a:1 + ε E1p_|s'i1_|l'O1n + έ E1p_|s'i1_|l'O1n + ζ D'e1_|t['a:1 + η e1_|t['a:1 + ή e1_|t['a:1 + θ t'e1_|t['a:1 + ι i1_|'o1_|t['a:1 + ί i1_|'o1_|t['a:1 + κ k'a:1p_|p'a:1 + λ l'a1m_|_d'a:1 + μ mw'i1 + ν nw'i1 + ξ s'i7 + ο o1_|m'i1_|kz.'O7n + +.group 0xcf // Greek letters + + π p'i1 + ρ z.'o1 + σ s'i3c_|m'a:1 + ς s'i3c_|m'a:1 + τ t['o1 + υ u1p_|s'i1_|l'O1n + ύ u1p_|s'i1_|l'O1n + φ f'i1 + χ c'i1 + ψ ps'i1 + ω o1_|m'e1_|Q'a:7 + ώ o1_|m'e1_|Q'a:7 + ό o1_|m'i1_|kz.'O7n + + +.group + % f'@2n||cr'am + ! _:c'@3m_|t'a:7n_: + ! (\! +// : koUl@n + D_) h (_DD_ D'@:2 // omit colon in time, eg: 2:30 + $ d'o||l'a + != x'o#_|_b'a2N_ + >= l'@:3n_|h'@:1n_|hw,a6kh_b'a2N + <= n^'O4_|h'@:1n_|hw,a6kh_b'a2N + + + __) - (_D cr'y2 + A_) - (_D _ + C_) - (_D _ + + + . c'@3m_ + . (. _: + \.) . + diff --git a/espeak-data/voices/en/en-us b/espeak-data/voices/en/en-us index 7673b3bc..fd86703c 100755 --- a/espeak-data/voices/en/en-us +++ b/espeak-data/voices/en/en-us @@ -14,4 +14,4 @@ stressAmp 17 16 19 19 19 19 21 19 replace 03 I i replace 03 I2 i -replace 03 @ @/ + diff --git a/phsource/compile_report b/phsource/compile_report index b4ca41db..6d6a60cb 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -6,7 +6,7 @@ consonants 10 118 base2 26 125 en 54 156 en-n 33 156 - en-us 40 157 + en-us 39 156 en-sc 41 158 en-rp 34 156 en-wm 31 156 @@ -44,15 +44,15 @@ consonants 10 118 es-la 1 125 ca 11 127 an 4 125 - pt 30 141 - pt-pt 20 141 + pt 29 140 + pt-pt 20 140 ro 36 148 el 10 125 grc 12 129 sv 22 129 no 28 134 is 42 141 - vi 52 146 + vi 53 147 zhy 41 138 zh 64 155 sw 9 110 @@ -421,7 +421,7 @@ l/l_ [l] base [l/] fr l/l_@ [l/3] base [l/] fr -l/l@ [hFp] base +l/l@ [L¸j] base [l#] base [l] fr [l/2] fr @@ -455,7 +455,7 @@ l/L2_oL [l/2] base l/L2_uL [l/2] base l/l_3 [l/] de l/l_4 [ll] sq -l/la [hFp] base +l/la [L¸j] base [l#] base [l] fr [l/2] fr @@ -463,7 +463,7 @@ l/la [hFp] base [K] tn l/l_a [l/3] base [l/] fr -l/le [hFp] base +l/le [L¸j] base [l#] base [l] fr [l/2] fr @@ -475,7 +475,7 @@ l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [hFp] base +l/li [L¸j] base [l#] base [l] fr [l/2] fr @@ -489,7 +489,7 @@ ll/ll [L] base ll/_ll [L] base l/l_long [l] base [l] fr -l/lo [hFp] base +l/lo [L¸j] base [l#] base [l/2] fr [K] nso @@ -500,7 +500,7 @@ l^/l_rfx [l.] base [l;] lt [l] ru [l^] ru -l/lu [hFp] base +l/lu [L¸j] base [l#] base [l] fr [l/2] fr @@ -551,7 +551,6 @@ n/_n [n] base [n] zh n/n_ [n] base n/n@ [n] base - [n.] base [n] fr [n#] is [n] zh @@ -561,7 +560,6 @@ n^/n^a [n^] base [n;] lt [n#] ru n/na [n] base - [n.] base [n] fr [n#] is [n] zh @@ -569,7 +567,6 @@ n^/n^e [n^] base [n;] lt [n#] ru n/ne [n] base - [n.] base [n] fr [n#] is [n] zh @@ -577,7 +574,6 @@ n^/n^i [n^] base [n;] lt [n#] ru n/ni [n] base - [n.] base [n] fr [n#] is [n] zh @@ -617,18 +613,22 @@ n^/n^o [n^] base [n;] lt [n#] ru n/no [n] base - [n.] base [n] fr [n#] is [n] zh n/_nr [n.] base n/nr_ [n.] base +n/nr@ [n.] base +n/nra [n.] base +n/nre [n.] base +n/nri [n.] base +n/nro [n.] base +n/nru [n.] base n/n-syl [n-] base n^/n^u [n^] base [n;] lt [n#] ru n/nu [n] base - [n.] base [n] fr [n#] is [n] zh @@ -1345,6 +1345,7 @@ vietnam/a [a:] vi vietnam/_c [kh] vi vietnam/ch [c] vi vietnam/dd [d] vi +vietnam/ie_2 [iE] vi vietnam/oe [o&] vi vietnam/th [t] vi vietnam/tr [cr] vi @@ -1367,6 +1368,7 @@ vnasal/e_n [e~] af [e~] hi [e~] pt vnasal/ii_n [I~] hi + [i] vi vnasal/i_n [i~] pt vnasal/i_n2 [i~] hi vnasal/oi_n [oI~] pt @@ -1389,7 +1391,7 @@ vnasal/u_n [U~] hi vnasal/V_n [V~] hi vnasal/W_n [E~] fr [W~] fr - [&2~] pt + [&~] pt [E~] ht voc/bh [B] base voc/dh [D] base @@ -1537,6 +1539,7 @@ vowel/@_4 [@] en-us [@] nl [@] no vowel/@_6 [@] en + [@] en-us [W] fr [W2] fr vowel/8 [o-] zh @@ -2071,8 +2074,7 @@ vowel/@_low [@] en-rp [@] pa [V] pa [@] si -vowel/@_low2 [@/] en-us - [@2] en-us +vowel/@_low2 [@2] en-us vowel/o [o] base2 [o:] en [oU] en-n @@ -2482,52 +2484,52 @@ vwl_en_us/oor [O:] 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/@2r [L¸j] fr +vwl_fr/a2r [L¸j] fr +vwl_fr/aa2r [L¸j] fr vwl_fr/br [r/2] fr -vwl_fr/e2r [] fr -vwl_fr/e_2r [] fr -vwl_fr/ee2r [] fr -vwl_fr/i2r [] fr +vwl_fr/e2r [L¸j] fr +vwl_fr/e_2r [L¸j] fr +vwl_fr/ee2r [L¸j] fr +vwl_fr/i2r [L¸j] fr vwl_fr/j [j/] fr vwl_fr/lo [l] fr -vwl_fr/o2r [] fr -vwl_fr/oo2r [] fr +vwl_fr/o2r [L¸j] fr +vwl_fr/oo2r [L¸j] fr vwl_fr/r [r] fr [r/2] fr vwl_fr/r_ [r/] fr vwl_fr/r_@ [r/] fr -vwl_fr/r@ [] fr +vwl_fr/r@ [L¸j] fr vwl_fr/@R [x] pt-pt -vwl_fr/r@2 [] fr +vwl_fr/r@2 [L¸j] fr vwl_fr/@R2 [R] fr-ca -vwl_fr/ra [] fr +vwl_fr/ra [L¸j] fr vwl_fr/r_a [r/] fr -vwl_fr/raa [] fr -vwl_fr/re [] fr +vwl_fr/raa [L¸j] fr +vwl_fr/re [L¸j] fr vwl_fr/r_e [r/] fr -vwl_fr/re2 [] fr -vwl_fr/ree [] fr -vwl_fr/ri [] fr +vwl_fr/re2 [L¸j] fr +vwl_fr/ree [L¸j] fr +vwl_fr/ri [L¸j] fr vwl_fr/r_i [r/] fr -vwl_fr/rj [] fr +vwl_fr/rj [L¸j] fr vwl_fr/r_n [r/] fr -vwl_fr/ro [] fr +vwl_fr/ro [L¸j] fr vwl_fr/r_o [r/] fr -vwl_fr/roo [] fr +vwl_fr/roo [L¸j] fr vwl_fr/rr [r/] fr -vwl_fr/ru [] fr +vwl_fr/ru [L¸j] fr vwl_fr/r_u [r/] fr -vwl_fr/rw [] fr -vwl_fr/ry [] fr +vwl_fr/rw [L¸j] fr +vwl_fr/ry [L¸j] fr vwl_fr/r_y [r/] fr vwl_fr/tr [r/2] fr vwl_fr/trr [r/] fr -vwl_fr/u2r [] fr +vwl_fr/u2r [L¸j] fr vwl_fr/wa [w] fr [w/] fr -vwl_fr/y2r [] fr +vwl_fr/y2r [L¸j] fr vwl_hi/l-voc [l-] base [l] lt [l-] sk diff --git a/phsource/n/nri b/phsource/n/nri index e2188db1..0a086bc1 100644 Binary files a/phsource/n/nri and b/phsource/n/nri differ diff --git a/phsource/n/nro b/phsource/n/nro index 9b503c3a..1b0e6885 100644 Binary files a/phsource/n/nro and b/phsource/n/nro differ diff --git a/phsource/n/nru b/phsource/n/nru index 890c4923..0a2577d3 100644 Binary files a/phsource/n/nru and b/phsource/n/nru differ diff --git a/phsource/ph_english_us b/phsource/ph_english_us index c15b7ddd..5b2b64cc 100644 --- a/phsource/ph_english_us +++ b/phsource/ph_english_us @@ -8,7 +8,7 @@ phoneme 3 // Schwa, used for rhotic schwa in American vowel starttype #@ endtype #@ ipa ɚ unstressed - length 210 + length 200 IfNextVowelAppend(r-) FMT(vwl_en_us/3_us) endphoneme @@ -21,15 +21,12 @@ phoneme @ // Schwa IF nextPh(isRhotic) THEN ChangePhoneme(3) ENDIF + IF thisPh(isWordEnd) THEN + FMT(vowel/@_6) + ENDIF FMT(vowel/@_4) endphoneme -phoneme @/ // Schwa, end of word - vowel starttype #@ endtype #@ - unstressed - length 130 - FMT(vowel/@_low2) -endphoneme phoneme @2 // Schwa, changes to I before a vowel vowel starttype #@ endtype #@ diff --git a/phsource/ph_pt_brazil b/phsource/ph_pt_brazil index a6bba543..459dc6c6 100644 --- a/phsource/ph_pt_brazil +++ b/phsource/ph_pt_brazil @@ -39,7 +39,11 @@ phoneme &~ vowel starttype #@ endtype #@ ipa ɐU+0303 length 180 - FMT(vnasal/a#_n) + IF thisPh(isStressed) THEN + FMT(vnasal/W_n) + ELSE + FMT(vnasal/a#_n) + ENDIF endphoneme phoneme &U~ @@ -224,10 +228,3 @@ phoneme * endphoneme -// TESTING -phoneme &2~ - vowel starttype #@ endtype #@ - ipa ɐU+0303 - length 200 - FMT(vnasal/W_n) -endphoneme diff --git a/phsource/ph_vietnam b/phsource/ph_vietnam index eef7563f..52a9e567 100755 --- a/phsource/ph_vietnam +++ b/phsource/ph_vietnam @@ -85,14 +85,18 @@ phoneme i IF prevPhW(w) THEN VowelStart(w/wi) ENDIF - FMT(vowel/i_4) + IF nextPh(n^) OR nextPh(c) THEN + FMT(vnasal/ii_n) +ELSE +FMT(vowel/i_4) +ENDIF endphoneme phoneme O vowel starttype #o endtype #o - IF nextPh(kh) THEN - length 95 + IF nextPh(kh) OR nextPh(N) THEN + length 110 ELSE length 200 ENDIF @@ -101,8 +105,8 @@ endphoneme phoneme o vowel starttype #o endtype #o - IF nextPh(kh) THEN - length 95 + IF nextPh(kh) OR nextPh(N) THEN + length 110 ELSE length 200 ENDIF @@ -286,7 +290,7 @@ endphoneme phoneme u@ vowel starttype #u endtype #@ - length 200 + length 150 //200 FMT(vdiph2/uu@) endphoneme @@ -317,6 +321,12 @@ phoneme o& FMT(vietnam/oe) endphoneme +phoneme iE // iê : viết, giệc + vowel starttype #i endtype #e + length 190 + FMT(vietnam/ie_2) +endphoneme + phoneme kh vls vel frc lengthmod 3 diff --git a/phsource/phonemes b/phsource/phonemes index b83cf47b..2c050525 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -771,12 +771,12 @@ phoneme n. ENDIF NextVowelStarts - VowelStart(n/n@) - VowelStart(n/na) - VowelStart(n/ne) - VowelStart(n/ni) - VowelStart(n/no) - VowelStart(n/nu) + VowelStart(n/nr@) + VowelStart(n/nra) + VowelStart(n/nre) + VowelStart(n/nri) + VowelStart(n/nro) + VowelStart(n/nru) EndSwitch IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN @@ -1936,4 +1936,3 @@ include ph_korean phonemetable kl base include ph_greenlandic - diff --git a/phsource/vdiph2/uw_6 b/phsource/vdiph2/uw_6 index 6b9b4210..823e327a 100644 Binary files a/phsource/vdiph2/uw_6 and b/phsource/vdiph2/uw_6 differ diff --git a/phsource/vowel/oe b/phsource/vowel/oe index ef6388b8..c27427bf 100644 Binary files a/phsource/vowel/oe and b/phsource/vowel/oe differ diff --git a/platforms/big_endian/espeak-phoneme-data.c b/platforms/big_endian/espeak-phoneme-data.c index 8d7ca32f..847ff358 100644 --- a/platforms/big_endian/espeak-phoneme-data.c +++ b/platforms/big_endian/espeak-phoneme-data.c @@ -1,5 +1,5 @@ - +// 20.02.13 Add samplerate 4-bytes at start of phondata // 14.09.10 Recognize long and short frames in phondata // 02.09.10 Fix: Q sections were omitted from the converted phondata // 13.08.10 jonsd: Added Q lines. Use Address to set the displacement in phondata file. @@ -235,7 +235,9 @@ void swap_phondata (const char *infile, const char *outfile, exit (1); } - xread = fread(buf_4, 4, 1, in); + xread = fread(buf_4, 4, 1, in); // version number + fwrite(buf_4, 4, 1, out); + xread = fread(buf_4, 4, 1, in); // sample rate fwrite(buf_4, 4, 1, out); while (fgets (line, sizeof(line), mfest)) diff --git a/platforms/windows/espeakedit/src/speech.h b/platforms/windows/espeakedit/src/speech.h index 04d0e0bf..a004b157 100755 --- a/platforms/windows/espeakedit/src/speech.h +++ b/platforms/windows/espeakedit/src/speech.h @@ -29,6 +29,7 @@ #define INCLUDE_KLATT #define INCLUDE_MBROLA #define INCLUDE_SONIC +#define _ESPEAKEDIT #include #define PLATFORM_WINDOWS diff --git a/platforms/windows/espeakedit/src_copy/speech.h b/platforms/windows/espeakedit/src_copy/speech.h index 04d0e0bf..a004b157 100755 --- a/platforms/windows/espeakedit/src_copy/speech.h +++ b/platforms/windows/espeakedit/src_copy/speech.h @@ -29,6 +29,7 @@ #define INCLUDE_KLATT #define INCLUDE_MBROLA #define INCLUDE_SONIC +#define _ESPEAKEDIT #include #define PLATFORM_WINDOWS diff --git a/src/compiledata.cpp b/src/compiledata.cpp index d3312a11..4e83fa7a 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -27,6 +27,7 @@ #include "wx/wfstream.h" #include "wx/dir.h" #include "wx/filename.h" +#include #include "speak_lib.h" #include "main.h" @@ -45,6 +46,7 @@ extern void FindPhonemesUsed(void); extern void DisplayErrorFile(const char *fname); extern int utf8_out(unsigned int c, char *buf); extern void DrawEnvelopes(); +extern void ReadPhondataManifest(); char path_source[sizeof(path_home)+20]; @@ -465,7 +467,7 @@ return; instn_category = (instn >> 12) & 0xf; data1 = instn & 0xff; type2 = (instn >> 8) & 0xf; - fprintf(f_out, " %.3x: %.4x %s",pc-prog_buf,instn,instn_category_string[instn_category]); + fprintf(f_out, " %.3x: %.4x %s",(unsigned int)(pc-prog_buf),instn,instn_category_string[instn_category]); switch(instn_category) { @@ -644,6 +646,7 @@ static int duplicate_references = 0; static int count_frames = 0; static int error_count = 0; static int resample_count = 0; +static int resample_fails = 0; static int then_count = 0; static int after_if = 0; @@ -738,7 +741,6 @@ static void CompileReport(void) const char *data_path; int prev_table; int prev_mnemonic; - char fname[sizeof(path_source)+20]; if(f_report == NULL) return; @@ -1791,8 +1793,12 @@ static int LoadWavefile(FILE *f, const char *fname) int max = 0; int length; int sr1, sr2; + int failed; + int len; int resample_wav = 0; + const char *fname2; char fname_temp[100]; + char msg[120]; int scale_factor=0; fseek(f,24,SEEK_SET); @@ -1802,53 +1808,67 @@ static int LoadWavefile(FILE *f, const char *fname) if((sr1 != samplerate_native) || (sr2 != sr1*2)) { -#ifdef PLATFORM_WINDOWS - if(sr1 != samplerate_native) + int fd_temp; + char command[sizeof(path_source)+200]; + + failed = 0; + +#ifdef PLATFORM_POSIX + strcpy(fname_temp,"/tmp/espeakXXXXXX"); + if((fd_temp = mkstemp(fname_temp)) >= 0) { - fprintf(f_errors,"Wrong samplerate %d, wants %d\n",sr1,samplerate_native); - error("Wrong samplerate: %s",fname); - } - if(sr2 != sr1*2) - { - error("Not mono: %s",fname); + close(fd_temp); } #else - { - int fd_temp; - char command[sizeof(path_source)+200]; - strcpy(fname_temp,"/tmp/espeakXXXXXX"); - if((fd_temp = mkstemp(fname_temp)) >= 0) - { - close(fd_temp); - sprintf(command,"sox \"%s%s.wav\" -c1 -t wav %s rate -h %d\n",path_source,fname,fname_temp,samplerate_native); - if(system(command) < 0) - { - error("Failed to resample: %s",command); - remove(fname_temp); - return(0); - } - } - - if(GetFileLength(fname_temp) <= 0) - { - error("Failed to resample: %s",command); - remove(fname_temp); - return(0); - } - - f = fopen(fname_temp,"rb"); - if(f == NULL) - { - error("Can't read temp file: %s",fname_temp); - return(0); - } - if(f_report != NULL) - fprintf(f_report, "resampled %s\n", fname); - resample_count++; - resample_wav = 1; - fseek(f,40,SEEK_SET); // skip past the WAV header, up to before "data length" - } + strcpy(fname_temp,tmpnam(NULL)); #endif + + fname2 = fname; + len = strlen(fname); + if(strcmp(&fname[len-4], ".wav") == 0) + { + strcpy(msg, fname); + msg[len-4] = 0; + fname2 = msg; + } + + sprintf(command,"sox \"%s%s.wav\" -r %d -c1 -t wav %s\n",path_source,fname2,samplerate_native, fname_temp); + if(system(command) < 0) + { + failed = 1; + } + + + if(failed || (GetFileLength(fname_temp) <= 0)) + { + if(resample_fails < 2) + error("Resample command failed: %s", command); + resample_fails++; + + if(sr1 != samplerate_native) + { + sprintf(msg, "Can't resample (%d to %d): %s", sr1, samplerate_native, fname); + error("%s", msg); + } + else + { + error("WAV file is not mono: %s", fname); + } + remove(fname_temp); + return(0); + } + + f = fopen(fname_temp,"rb"); + if(f == NULL) + { + error("Can't read temp file: %s",fname_temp); + return(0); + } + if(f_report != NULL) + fprintf(f_report, "resampled %s\n", fname); + resample_count++; + resample_wav = 1; + fseek(f,40,SEEK_SET); // skip past the WAV header, up to before "data length" } displ = ftell(f_phdata); @@ -3321,8 +3341,11 @@ static void CompileEquivalents() p_start[2] = n_bytes >> 8; // index of next table p_start[3] = n_bytes; - LoadVoice(voice_name2,0); // reset the original phoneme table - LoadVoiceVariant(save_voice_name,0); + if(gui_flag != 0) + { + LoadVoice(voice_name2,0); // reset the original phoneme table + LoadVoiceVariant(save_voice_name,0); + } } // end of CompileEquivalents @@ -3362,6 +3385,7 @@ static void CompilePhonemeFiles() case kINCLUDE: NextItem(tSTRING); sprintf(buf,"%s%s",path_source,item_string); + if((stack_ix < N_STACK) && (f = fopen_log(f_errors,buf,"rb")) != NULL) { fprintf(f_errors,"include %s\n",item_string); @@ -3421,6 +3445,7 @@ make_envs(); n_envelopes = 0; error_count = 0; + resample_count = 0; memset(markers_used,0,sizeof(markers_used)); f_errors = stderr; @@ -3534,6 +3559,7 @@ memset(markers_used,0,sizeof(markers_used)); // write a word so that further data doesn't start at displ=0 Write4Bytes(f_phdata,version_phdata); + Write4Bytes(f_phdata,samplerate_native); Write4Bytes(f_phindex,version_phdata); memset(ref_hash_tab,0,sizeof(ref_hash_tab)); @@ -3555,9 +3581,10 @@ fprintf(f_errors,"\nRefs %d, Reused %d\n",count_references,duplicate_references fclose(f_phtab); fclose(f_phcontents); - LoadPhData(); - LoadVoice(voice_name2,0); + LoadPhData(NULL); + if(gui_flag != 0) + LoadVoice(voice_name2,0); CompileReport(); report_dict = CompileAllDictionaries(); @@ -3595,6 +3622,8 @@ fprintf(f_errors,"\nRefs %d, Reused %d\n",count_references,duplicate_references fprintf(stderr,"%s\n",fname); } + + ReadPhondataManifest(); } // end of CompilePhonemeData @@ -3759,7 +3788,6 @@ void CompileIntonation() char buf[sizeof(path_source)+120]; error_count = 0; - resample_count = 0; sprintf(fname_errors,"%s%s",path_source,"error_intonation"); if((f_errors = fopen(fname_errors,"w")) == NULL) @@ -4036,7 +4064,7 @@ void CompileIntonation() { DisplayErrorFile(fname_errors); } - LoadPhData(); + LoadPhData(NULL); } // end of CompileIntonation @@ -4044,7 +4072,22 @@ void CompileIntonation() void CompilePhonemeData() { + WavegenInit(22050, 0); + WavegenSetVoice(voice); CompilePhonemeData2("phonemes"); - return; +} + + +void CompileSampleRate() +{ + long value; + value = wxGetNumberFromUser(_T("Compile phoneme data with a specified sample rate"), _T("Sample rate"), _T("Resample (needs sox)"), 22050, 5000, 48000); + + if(value > 1000) + { + WavegenInit(value, 0); + WavegenSetVoice(voice); + CompilePhonemeData2("phonemes"); + } } diff --git a/src/dictionary.cpp b/src/dictionary.cpp index f24f9f7c..880eda41 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -296,10 +296,6 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) // set up indices into data_dictrules InitGroups(tr); - if(tr->groups1[0] == NULL) - { - fprintf(stderr,"Error in %s_rules, no default rule group\n",name); - } // set up hash table for data_dictlist p = &(tr->data_dictlist[8]); diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index 39e26b60..b6f9baf6 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -43,11 +43,11 @@ #include "prosodydisplay.h" -#ifdef deleted -static const char *about_string = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2009\n\n" + +static const char *about_string2 = "espeakedit: %s\nAuthor: Jonathan Duddington (c) 2009\n\n" "Licensed under GNU General Public License version 3\n" "http://espeak.sourceforge.net/"; -#endif + static const char *about_string = "espeakedit %s
Author: Jonathan Duddington (c) 2009
" "http://espeak.sourceforge.net
" @@ -63,6 +63,7 @@ extern void DictionarySort(const char *dictname); extern void init_z(); extern void CompilePhonemeData(void); +extern void CompileSampleRate(void); extern void CompileMbrola(); extern void CompileIntonation(); extern void InitSpectrumDisplay(); @@ -133,22 +134,21 @@ if(argc > 1) if((strcmp(param,"--help")==0) || (strcmp(param,"-h")==0)) { - printf(about_string,espeak_Info(NULL)); - printf(help_text); + printf(about_string2,espeak_Info(NULL)); + printf("%s", help_text); exit(0); } ConfigInit(); - VoiceReset(0); - WavegenSetVoice(voice); - WavegenInitSound(); if(strcmp(param,"--compile")==0) { + LoadPhData(NULL); + samplerate_native = samplerate = 22050; CompilePhonemeData(); CompileIntonation(); - exit(0); } + exit(0); } ConfigInit(); @@ -205,6 +205,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(MENU_PATH3, MyFrame::OnOptions) EVT_MENU(MENU_PATH4, MyFrame::OnOptions) EVT_MENU(MENU_COMPILE_PH, MyFrame::OnTools) + EVT_MENU(MENU_COMPILE_PH2, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_DICT, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_DICT_DEBUG, MyFrame::OnTools) EVT_MENU(MENU_FORMAT_DICTIONARY, MyFrame::OnTools) @@ -266,6 +267,7 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c int error_flag = 0; int result; int param; + int srate; notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxSize(312,760)); // notebook->AddPage(voicedlg,_T("Voice"),FALSE); @@ -301,9 +303,8 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c SetSize(pos.x, pos.y, size.GetWidth(), size.GetHeight()); LoadConfig(); - WavegenInitSound(); - if((result = LoadPhData()) != 1) + if((result = LoadPhData(&srate)) != 1) { if(result == -1) wxLogError(_T("Failed to read espeak-data/phontab,phondata,phonindex\nPath = ")+wxString(path_home,wxConvLocal)+_T("\n\nThe 'eSpeak' package needs to be installed")); @@ -311,7 +312,10 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c wxLogError(_T("Wrong version of espeak-data at:\n")+ wxString(path_home,wxConvLocal)+_T("\nVersion 0x%x (expects 0x%x)"),result,version_phdata); error_flag = 1; + srate = 22050; } + WavegenInit(srate,0); + WavegenInitSound(); f_trans = stdout; option_ssml = 1; @@ -350,7 +354,13 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c void MyFrame::SetVoiceTitle(char *voice_name) {//========================================== char buf[100]; - SetTitle(AppName + _T(" - ") + wxString(voice_name,wxConvLocal) + _T(" voice")); + + if(samplerate_native == 22050) + sprintf(buf, " - %s voice", voice_name); + else + sprintf(buf, " - %s voice %dHz", voice_name, samplerate_native); + SetTitle(AppName + wxString(buf,wxConvLocal)); + if((data_menu != NULL) && (translator != NULL)) { sprintf(buf,"Compile &dictionary '%s'",translator->dictionary_name); @@ -738,6 +748,12 @@ void MyFrame::OnTools(wxCommandEvent& event) case MENU_COMPILE_PH: CompilePhonemeData(); + SetVoiceTitle(voice_name2); + break; + + case MENU_COMPILE_PH2: + CompileSampleRate(); + SetVoiceTitle(voice_name2); break; case MENU_COMPILE_MBROLA: diff --git a/src/extras.cpp b/src/extras.cpp index 5f056464..a04e4704 100644 --- a/src/extras.cpp +++ b/src/extras.cpp @@ -135,7 +135,7 @@ int TestSynthCallback(short *wav, int numsamples, espeak_EVENT *events) else if(type==espeakEVENT_PHONEME) { - char buf[10]; +// char buf[10]; fprintf(f_events,"[%s]\n",WordToString(events->id.number)); //old version, only 4 characters bytes // memcpy(buf, events->id.string, 8); // buf[8] = 0; @@ -206,7 +206,7 @@ static const unsigned short KOI8_R[0x60] = { #define N_CHARS 34 -#define PH(c1,c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name +#define PH(c1,c2) (c2<<8)+c1 // combine two characters into an integer for phoneme name @@ -236,7 +236,7 @@ static void DecodePhonemes2(const char *inptr, char *outptr) continue; /* indicates unrecognised phoneme */ if((ph = phoneme_tab[phcode]) == NULL) continue; - + if((ph->type == phSTRESS) && (ph->std_length <= 4) && (ph->program == 0)) { if(ph->std_length > 2) @@ -281,7 +281,7 @@ static void DecodePhonemes2(const char *inptr, char *outptr) else if(mnem != 0) { - while((c = (mnem & 0xff)) != 0) + while((c = (mnem & 0xff)) != 0) { *outptr++ = c; mnem = mnem >> 8; @@ -363,7 +363,7 @@ void Lexicon_It(int pass) path_dir1 = wxFileName(fname_lex).GetPath(); strcpy(buf_out, path_dir1.mb_str(wxConvLocal)); sprintf(buf, "%s/IT_errors", buf_out); - + if((f_out = fopen(buf,"w")) == NULL) { str = wxString(buf, wxConvLocal); @@ -412,7 +412,7 @@ void Lexicon_It(int pass) if((p = strstr(buf,"//")) != NULL) *p = 0; - + if((sscanf(buf,"%s %s",word,temp)) < 2) continue; @@ -522,7 +522,7 @@ void Lexicon_It(int pass) fputc(*p, f_listx); // omit secondary stress marks } fputc('\n',f_listx); - + } else if((stress_posn1 != stress_posn2) && (stress_posn1 > 0) && (stress_posn2 > 0)) @@ -706,7 +706,7 @@ void Lexicon_De() return; } path_dir1 = wxFileName(fname).GetPath(); - + if((f_out = fopen("compare_de","w")) == NULL) { wxLogError(_T("Can't write file ")); @@ -934,7 +934,7 @@ void Lexicon_Bg() FILE *f_in; FILE *f_out; - + char word[80]; char word_in[80]; char phonemes[N_WORD_PHONEMES]; @@ -1101,7 +1101,7 @@ if(n_stress > 1) n_stress = 1; if(done) n_out++; - } + } n_words++; } @@ -1383,10 +1383,10 @@ void Lexicon_Ru() len = strlen(suffix); if(len >= (wlen-2)) continue; - + if(ru_stress > (vcount - suffixes[sfx].syllables)) continue; - + if(strcmp(suffix,&word[wlen-len])==0) { strcpy(word2,word); @@ -1547,7 +1547,7 @@ void CountWordFreq(wxString path, wcount **hashtab) // skip leading spaces, numbers, etc if(feof(f_in)) break; } - + // read utf8 bytes until a space, number or punctuation ix = 0; while(!feof(f_in) && (c >= 'A') && (ix < sizeof(buf)-1)) @@ -1557,7 +1557,7 @@ void CountWordFreq(wxString path, wcount **hashtab) } buf[ix++] = 0; buf[ix] = 0; - + // the buf may contain non-alphabetic characters j = 0; n_chars = 0; @@ -1583,7 +1583,7 @@ void CountWordFreq(wxString path, wcount **hashtab) } } fclose(f_in); - + } // end of CountWordFreq @@ -1645,7 +1645,7 @@ void MakeWordFreqList() free(p); } fclose(f_out); - + } // end of Make WorkFreqList @@ -2129,9 +2129,9 @@ void SetSpeedTab(void) // Interpolation table to translate from words-per-minute to internal speed // words-per-minute values (measured) static float wpm1[N_WPM] = - {0, 82, 96, 108, 124, 134, 147, 162, 174, 189, 224, 259, 273, 289, 307, 326, 346, 361, 370 }; + {0, 82, 96, 108, 124, 134, 147, 162, 174, 189, 224, 259, 273, 289, 307, 326, 346, 361, 370 }; // corresponding internal speed values - static float wpm2[N_WPM] = + static float wpm2[N_WPM] = {0,253,200, 170, 140, 125, 110, 95, 85, 75, 55, 40, 35, 30, 25, 20, 15, 10, 5 }; unsigned char speed_lookup[290]; @@ -2245,7 +2245,7 @@ void CharsetToUnicode(const char *charset) #ifdef deleted void Test2() { -// +// char buf[120]; FILE *f; FILE *f_out; @@ -2299,7 +2299,7 @@ if(control==2) f = fopen("/home/jsd1/speechdata/text/test.txt","r"); if(f==NULL) return; - + while(!feof(f) && (ix < sizeof(textbuf)-2)) { diff --git a/src/main.h b/src/main.h index 0402f15b..f9a8a12f 100755 --- a/src/main.h +++ b/src/main.h @@ -136,6 +136,7 @@ enum { MENU_PROSODY, MENU_COMPILE_PH, + MENU_COMPILE_PH2, MENU_COMPILE_DICT, MENU_COMPILE_DICT_DEBUG, MENU_FORMAT_DICTIONARY, diff --git a/src/menus.cpp b/src/menus.cpp index b405b71a..917f4899 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2010 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -90,6 +90,7 @@ wxMenuBar *MakeMenu(int type, const char *dict_name) // DATA MENU data_menu = new wxMenu; data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data")); + data_menu->Append(MENU_COMPILE_PH2, _("Change sample &rate")); data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); data_menu->AppendSeparator(); diff --git a/src/numbers.cpp b/src/numbers.cpp index c2a30153..de3e5e17 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2011 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -435,7 +435,7 @@ void LookupAccentedLetter(Translator *tr, unsigned int letter, char *ph_buf) if((letter >= 0x250) && (letter <= 0x2a8)) { accent_data = letter_accents_250[letter - 0x250]; - } + } if(accent_data != 0) { @@ -551,7 +551,7 @@ void LookupLetter(Translator *tr, unsigned int letter, int next_byte, char *ph_b // if the $accent flag is set for this letter, use the accents table (below) dict_flags[1] = 0; - + if(Lookup(tr, &single_letter[1], ph_buf3) == 0) { single_letter[1] = ' '; @@ -678,7 +678,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) if((ph_buf[0]==0) && !iswspace(letter)) Lookup(tr, "_??", ph_buf); - + if(ph_buf[0] != 0) { // speak the hexadecimal number of the character code @@ -872,7 +872,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) static const char *roman_numbers = "ixcmvld"; static int roman_values[] = {1,10,100,1000,5,50,500}; - + acc = 0; prev = 0; subtract = 0x7fff; @@ -922,7 +922,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) if(isdigit(word[0])) return(0); // eg. 'xx2' - + acc += prev; if(acc < tr->langopts.min_roman) return(0); @@ -985,7 +985,7 @@ int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab) static const char *M_Variant(int value) {//==================================== // returns M, or perhaps MA or MB for some cases - + int teens = 0; if(((value % 100) > 10) && ((value % 100) < 20)) @@ -1074,7 +1074,7 @@ static int LookupThousands(Translator *tr, int value, int thousandplex, int thou if(found_value == 0) { - if((value % 100) >= 20) + if((value % 100) >= 20) { Lookup(tr, "_0of", ph_of); } @@ -1199,7 +1199,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out if(is_ordinal) { strcpy(ph_ordinal, ph_ordinal2); - + if(control & 4) { sprintf(string,"_%d%cx",value,ord_type); // LANG=hu, special word for 1. 2. when there are no higher digits @@ -1212,7 +1212,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out } found_ordinal = found; } - + if(found == 0) { if(control & 2) @@ -1246,9 +1246,9 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out } } } - + // no, speak as tens+units - + if((control & 0x10) && (value < 10)) { // speak leading zero @@ -1262,8 +1262,8 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out } else { - - if((is_ordinal) && + + if((is_ordinal) && ((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL))) { sprintf(string,"_%dX%c", tens, ord_type); @@ -1283,7 +1283,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out sprintf(string,"_%dX", tens); Lookup(tr, string, ph_tens); } - + if((ph_tens[0] == 0) && (tr->langopts.numbers & NUM_VIGESIMAL)) { // tens not found, (for example) 73 is 60+13 @@ -1291,12 +1291,12 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out sprintf(string,"_%dX", tens & 0xfe); Lookup(tr, string, ph_tens); } - + ph_digits[0] = 0; if(units > 0) - { + { found = 0; - + if((control & 2) && (digit_lookup[0] != 0)) { // we have an entry for this digit (possibly together with the next word) @@ -1346,7 +1346,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out } } } - + if((is_ordinal) && (found_ordinal == 0) && (ph_ordinal[0] == 0)) { if((value >= 20) && (((value % 10) == 0) || (tr->langopts.numbers & NUM_SWAP_TENS))) @@ -1354,7 +1354,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out if(ph_ordinal[0] == 0) Lookup(tr, "_ord", ph_ordinal); } - + if((tr->langopts.numbers & (NUM_SWAP_TENS | NUM_AND_UNITS)) && (ph_tens[0] != 0) && (ph_digits[0] != 0)) { Lookup(tr, "_0and", ph_and); @@ -1377,7 +1377,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out { if((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS) next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type; - + if((phoneme_tab[(unsigned int)(ph_tens[ix])]->type == phVOWEL) && (next_phtype == phVOWEL)) ph_tens[ix] = 0; } @@ -1559,13 +1559,13 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null 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) { ph_100[0] = 0; @@ -1628,7 +1628,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null x = 8; // use variant (feminine) for before thousands and millions } - if(LookupNum2(tr, tensunits, x | control & 0x100, buf2) != 0) + if(LookupNum2(tr, tensunits, x | (control & 0x100), buf2) != 0) { if(tr->langopts.numbers & NUM_SINGLE_AND) ph_hundred_and[0] = 0; // don't put 'and' after 'hundred' if there's 'and' between tens and units @@ -1787,7 +1787,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned // this is an ordinal suffix ordinal = 2; flags[0] |= FLAG_SKIPWORDS; - skipwords = 1; + skipwords = 1; } } } @@ -2048,7 +2048,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned break; n_digits++; strcat(ph_out, buf1); - } + } } } diff --git a/src/options.cpp b/src/options.cpp index 23a35c5f..5936111d 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -79,7 +79,7 @@ Options::~Options() for(ix=0; ix < 1; ix++) delete m_lab[ix]; - + delete m_samplerate; delete m_save; delete m_close; @@ -89,13 +89,13 @@ void Options::OnCommand(wxCommandEvent& event) {//=========================================== int id; int value; - + switch(id = event.GetId()) { case wxID_SAVE: value = GetNumeric(m_samplerate); if(value > 0) WavegenInit(value,0); - + Destroy(); break; @@ -120,11 +120,10 @@ void ConfigSetPaths() void ConfigInit() {//============== - long value; wxString string; wxString basedir; const char *path_base; - + #ifdef PLATFORM_WINDOWS int found = 0; char buf[200]; @@ -134,7 +133,7 @@ void ConfigInit() { sprintf(path_home,"%s\\espeak-data",path_base); if(GetFileLength(path_home) == -2) - found = 1; // an espeak-data directory exists + found = 1; // an espeak-data directory exists } if(found == 0) @@ -142,7 +141,7 @@ void ConfigInit() if(pRegKey->Exists() ) { wxString RegVal; - pRegKey->QueryValue(_T("Path"),RegVal); + pRegKey->QueryValue(_T("Path"),RegVal); strncpy0(buf,RegVal.mb_str(wxConvLocal),sizeof(buf)); path_base = buf; } @@ -161,12 +160,6 @@ void ConfigInit() wxFileConfig *pConfig = new wxFileConfig(_T("espeakedit")); wxFileConfig::Set(pConfig); - pConfig->Read(_T("/samplerate"),&value,22050); -#ifdef PLATFORM_WINDOWS - value = 22050; -#endif - WavegenInit(value,0); - basedir = wxString(path_base,wxConvLocal); // this is only used to set defaults for other paths if they are not in the config file pConfig->Read(_T("/spectload"),&path_spectload,basedir+_T("/phsource")); pConfig->Read(_T("/spectload2"),&path_spectload2,basedir+_T("/phsource")); diff --git a/src/prosodydisplay.cpp b/src/prosodydisplay.cpp index db31955d..4bb49ec1 100644 --- a/src/prosodydisplay.cpp +++ b/src/prosodydisplay.cpp @@ -50,6 +50,86 @@ static wxPen PEN_PHSELECTED(wxColour(255,0,0),2,wxSOLID); static wxPen PEN_PHSTRESSED(wxColour(80,80,196),3,wxSOLID); static wxPen PEN_PHSTRESSED2(wxColour(160,160,255),2,wxSOLID); + + + +typedef struct { + unsigned int value; + char *name; +} NAMETAB; + +NAMETAB *manifest = NULL; +int n_manifest; + +const char *LookupManifest(unsigned int addr) +{//============================================= + int ix; + + if(manifest != NULL) + { + for(ix=0; ix < n_manifest; ix++) + { + if(manifest[ix].value == addr) + return(manifest[ix].name); + if(manifest[ix].value > addr) + break; + } + } + return(""); +} + + +void ReadPhondataManifest() +{//========================= +// Read the phondata-manifest file + FILE *f; + int n_lines=0; + int ix; + char *p; + unsigned int value; + char buf[sizeof(path_home)+40]; + char name[120]; + + sprintf(buf,"%s%c%s",path_home,PATHSEP,"phondata-manifest"); + if((f = fopen(buf, "r")) == NULL) + return; + + while(fgets(buf, sizeof(buf), f) != NULL) + n_lines++; + + rewind(f); + + if(manifest != NULL) + { + for(ix=0; ix < n_manifest; ix++) + free(manifest[ix].name); + } + + if((manifest = (NAMETAB *)realloc(manifest, n_lines * sizeof(NAMETAB))) == NULL) + return; + + n_manifest = 0; + while(fgets(buf, sizeof(buf), f) != NULL) + { + if(!isalpha(buf[0])) + continue; + + if(sscanf(&buf[2], "%x %s", &value, name) == 2) + { + if((p = (char *)malloc(strlen(name)+1)) != NULL) + { + strcpy(p, name); + manifest[n_manifest].value = value; + manifest[n_manifest].name = p; + n_manifest++; + } + } + } + fclose(f); +} + + + ProsodyDisplay::ProsodyDisplay(wxWindow *parent, const wxPoint& pos, const wxSize& size) : wxScrolledWindow(parent, -1, pos, size, wxSUNKEN_BORDER | wxNO_FULL_REPAINT_ON_RESIZE) @@ -76,6 +156,7 @@ void InitProsodyDisplay() int ix; wxString string; + ReadPhondataManifest(); menu_envelopes = new wxMenu; // entries match those in envelope_data[] in intonation.cpp @@ -142,6 +223,7 @@ void ProsodyDisplay::SelectPh(int index) int ix; const char *name = "?"; char buf[120]; + char len_string[20]; if(index < 0) return; @@ -162,8 +244,12 @@ void ProsodyDisplay::SelectPh(int index) } y1 = p->pitch1; y2 = p->pitch2; - sprintf(buf,"Stress %s%d Amp %2d StdLength %2d LengthMod %2d Pitch %3d %3d %s PhFlags %.2x ", - emphasized,p->stresslevel&0x7,p->amp,p->std_length*2, p->length,y1,y2,name,p->ph->phflags); + len_string[0] = 0; + if(p->std_length > 0) + sprintf(len_string," Length %d", p->std_length*2); + + sprintf(buf,"Stress %s%d Amp %2d LengthMod %2d Pitch %3d %3d %s PhFlags %.2x [%s%s]", + emphasized,p->stresslevel&0x7,p->amp, p->length,y1,y2,name,p->ph->phflags, LookupManifest(p->phontab_addr), len_string); wxLogStatus(wxString(buf,wxConvLocal)); } @@ -625,4 +711,3 @@ void MyFrame::OnProsody(wxCommandEvent& WXUNUSED(event)) adding_page = 2; // work around for wxNotebook bug (version 2.8.7) screenpages->AddPage(prosodycanvas, _T("Prosody"), true); } - diff --git a/src/readclause.cpp b/src/readclause.cpp index 2aa2c4fa..af2b294b 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -736,7 +736,6 @@ static int LoadSoundFile(const char *fname, int index) { int ix; int fd_temp; - const char *resample; int header[3]; char command[sizeof(fname2)+sizeof(fname2)+40]; @@ -750,17 +749,11 @@ static int LoadSoundFile(const char *fname, int index) fclose(f); f = NULL; - if(header[2] == samplerate) - resample = ""; - else - resample = "polyphase"; - strcpy(fname_temp,"/tmp/espeakXXXXXX"); if((fd_temp = mkstemp(fname_temp)) >= 0) { close(fd_temp); -// sprintf(fname_temp,"%s.wav",tmpnam(NULL)); - sprintf(command,"sox \"%s\" -r %d -w -s -c1 %s %s\n", fname, samplerate, fname_temp, resample); + sprintf(command,"sox \"%s\" -r %d -c1 -t wav %s\n", fname, samplerate, fname_temp); if(system(command) == 0) { fname = fname_temp; diff --git a/src/speak.cpp b/src/speak.cpp index 35d756da..661df32c 100644 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -397,6 +397,7 @@ static int initialise(void) {//======================== int param; int result; + int srate = 22050; // default sample rate // It seems that the wctype functions don't work until the locale has been set // to something other than the default "C". Then, not only Latin1 but also the @@ -412,8 +413,7 @@ static int initialise(void) #endif - WavegenInit(22050,0); // 22050 - if((result = LoadPhData()) != 1) + if((result = LoadPhData(&srate)) != 1) { if(result == -1) { @@ -423,6 +423,7 @@ static int initialise(void) else fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home); } + WavegenInit(srate,0); LoadConfig(); SetVoiceStack(NULL, ""); SynthesizeInit(); diff --git a/src/speak_lib.cpp b/src/speak_lib.cpp index 6c8e8dc4..78feaff8 100644 --- a/src/speak_lib.cpp +++ b/src/speak_lib.cpp @@ -377,11 +377,12 @@ static int initialise(int control) {//=============================== int param; int result; + int srate = 22050; // default sample rate 22050 Hz err = EE_OK; LoadConfig(); - WavegenInit(22050,0); // 22050 - if((result = LoadPhData()) != 1) + + if((result = LoadPhData(&srate)) != 1) // reads sample rate from espeak-data/phontab { if(result == -1) { @@ -394,6 +395,7 @@ static int initialise(int control) else fprintf(stderr,"Wrong version of espeak-data 0x%x (expects 0x%x) at %s\n",result,version_phdata,path_home); } + WavegenInit(srate,0); memset(¤t_voice_selected,0,sizeof(current_voice_selected)); SetVoiceStack(NULL, ""); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index b68fd46b..ae260e35 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,8 +35,8 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.46.35 14.Feb.13"; -const int version_phdata = 0x014631; +const char *version_string = "1.46.36 20.Feb.13"; +const int version_phdata = 0x014636; int option_device_number = -1; FILE *f_logespeak = NULL; @@ -108,13 +108,14 @@ static char *ReadPhFile(void *ptr, const char *fname, int *size) } // end of ReadPhFile -int LoadPhData() -{//============= +int LoadPhData(int *srate) +{//======================== int ix; int n_phonemes; int version; int result = 1; int length; + int rate; unsigned char *p; int *pw; @@ -126,14 +127,16 @@ int LoadPhData() return(-1); if((tunes = (TUNE *)ReadPhFile((void *)(tunes),"intonations",&length)) == NULL) return(-1); - wavefile_data = (unsigned char *)phondata_ptr; + wavefile_data = (unsigned char *)phondata_ptr; n_tunes = length / sizeof(TUNE); - // read the version number from the first 4 bytes of phondata - version = 0; + // read the version number and sample rate from the first 8 bytes of phondata + version = 0; // bytes 0-3, version number + rate = 0; // bytes 4-7, sample rate for(ix=0; ix<4; ix++) { version += (wavefile_data[ix] << (ix*8)); + rate += (wavefile_data[ix+4] << (ix*8)); } if(version != version_phdata) @@ -163,6 +166,8 @@ int LoadPhData() if(phoneme_tab_number >= n_phoneme_tables) phoneme_tab_number = 0; + if(srate != NULL) + *srate = rate; return(result); } // end of LoadPhData @@ -970,7 +975,9 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ phdata->pd_param[i_LENGTH_MOD] = ph->length_mod; if(ph->program == 0) + { return; + } end_flag = 0; @@ -1215,7 +1222,13 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ memcpy(&worddata->prev_vowel, &plist[0], sizeof(PHONEME_LIST)); } +#ifdef _ESPEAKEDIT plist->std_length = phdata->pd_param[i_SET_LENGTH]; + if(phdata->sound_addr[0] != 0) + plist->phontab_addr = phdata->sound_addr[0]; // FMT address + else + plist->phontab_addr = phdata->sound_addr[1]; // WAV address +#endif } // end of InterpretPhoneme diff --git a/src/synthesize.cpp b/src/synthesize.cpp index d4e6a769..1d34ade7 100644 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2010 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -40,7 +40,7 @@ static void SmoothSpect(void); // list of phonemes in a clause int n_phoneme_list=0; -PHONEME_LIST phoneme_list[N_PHONEME_LIST]; +PHONEME_LIST phoneme_list[N_PHONEME_LIST+1]; int mbrola_delay; char mbrola_name[20]; @@ -1395,6 +1395,8 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) prev = &phoneme_list[ix-1]; next = &phoneme_list[ix+1]; next2 = &phoneme_list[ix+2]; + if(next2->ph == NULL) + break; if(p->synthflags & SFLAG_EMBEDDED) { @@ -1448,6 +1450,9 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume) { case phPAUSE: DoPause(p->length,0); +#ifdef _ESPEAKEDIT + p->std_length = p->ph->std_length; +#endif break; case phSTOP: diff --git a/src/synthesize.h b/src/synthesize.h index 6a83b8da..b56edfe6 100644 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -220,7 +220,10 @@ typedef struct { unsigned char newword; // bit 0=start of word, bit 1=end of clause, bit 2=start of sentence unsigned char pitch1; unsigned char pitch2; +#ifdef _ESPEAKEDIT unsigned char std_length; + unsigned int phontab_addr; +#endif } PHONEME_LIST; @@ -435,7 +438,7 @@ extern PHONEME_TAB *phoneme_tab[N_PHONEME_TAB]; // list of phonemes in a clause extern int n_phoneme_list; -extern PHONEME_LIST phoneme_list[N_PHONEME_LIST]; +extern PHONEME_LIST phoneme_list[N_PHONEME_LIST+1]; extern unsigned int embedded_list[]; extern unsigned char env_fall[128]; @@ -510,7 +513,7 @@ unsigned int LookupSound(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int *mat frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, int *n_frames, PHONEME_LIST *plist); unsigned char *LookupEnvelope(int ix); -int LoadPhData(); +int LoadPhData(int *srate); void SynthesizeInit(void); int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume); diff --git a/src/translate.cpp b/src/translate.cpp index c6071586..a363ad6e 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -3378,6 +3378,8 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre } MakePhonemeList(tr, clause_pause, new_sentence); + phoneme_list[N_PHONEME_LIST].ph = NULL; // recognize end of phoneme_list array, in Generate() + phoneme_list[N_PHONEME_LIST].sourceix = 1; if(embedded_count) // ???? is this needed { diff --git a/src/transldlg.cpp b/src/transldlg.cpp index c095a4e3..a71fa1ff 100644 --- a/src/transldlg.cpp +++ b/src/transldlg.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * Copyright (C) 2005 to 2013 by Jonathan Duddington * * email: jonsd@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * @@ -503,13 +503,15 @@ void TranslDlg::OnCommand(wxCommandEvent& event) if((n_ph_list + n_phoneme_list) >= N_PH_LIST) { - n_phoneme_list = N_PH_LIST - n_ph_list - n_phoneme_list; + n_phoneme_list = N_PH_LIST - n_ph_list; } memcpy(&ph_list[n_ph_list],phoneme_list,sizeof(PHONEME_LIST)*n_phoneme_list); n_ph_list += n_phoneme_list; } + ph_list[N_PH_LIST].ph = NULL; // to recognize overrun off list (in Generate() ) + t_phonetic->Clear(); if(option_phonemes == 2) {