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