Browse Source

[1.43.31]

*_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-fd96e6ae7743
master
jonsd 15 years ago
parent
commit
cec2c415da
100 changed files with 13396 additions and 5429 deletions
  1. 2
    1
      dictsource/ca_rules
  2. 7758
    1873
      dictsource/da_list
  3. 3150
    2223
      dictsource/da_rules
  4. 2
    2
      dictsource/de_list
  5. 34
    12
      dictsource/dict_phonemes
  6. 7
    3
      dictsource/en_list
  7. 15
    8
      dictsource/en_rules
  8. 75
    59
      dictsource/fr_list
  9. 83
    90
      dictsource/fr_rules
  10. 28
    8
      dictsource/hu_list
  11. 100
    16
      dictsource/hu_rules
  12. 37
    37
      dictsource/is_list
  13. 41
    34
      dictsource/is_rules
  14. 2
    2
      dictsource/nl_list
  15. 3
    1
      dictsource/nl_rules
  16. 1
    1
      dictsource/pt_rules
  17. 14
    3
      dictsource/ta_list
  18. 182
    23
      dictsource/ta_rules
  19. 70
    39
      dictsource/vi_list
  20. 416
    356
      dictsource/vi_rules
  21. 4
    4
      dictsource/zh_list
  22. 97
    56
      phsource/compile_report
  23. BIN
      phsource/l/l_@
  24. BIN
      phsource/l/l_a
  25. BIN
      phsource/l/l_o
  26. BIN
      phsource/l/l_u
  27. BIN
      phsource/l/l_y
  28. 7
    3
      phsource/ph_english
  29. 188
    168
      phsource/ph_french
  30. 103
    24
      phsource/ph_icelandic
  31. 6
    0
      phsource/phonemes
  32. BIN
      phsource/vnasal/aa_n4
  33. BIN
      phsource/vowel/@_bck
  34. BIN
      phsource/vowel/a_6
  35. BIN
      phsource/vowel/a_en
  36. BIN
      phsource/vowel/e_8
  37. BIN
      phsource/vowel/e_mid
  38. BIN
      phsource/vowel/o-
  39. BIN
      phsource/vowel/o_mid2
  40. BIN
      phsource/vowel/u_bck2
  41. BIN
      phsource/vowel/vowelchart.png
  42. BIN
      phsource/vwl_fr/@2r
  43. BIN
      phsource/vwl_fr/_r
  44. BIN
      phsource/vwl_fr/_r2
  45. BIN
      phsource/vwl_fr/a2r
  46. BIN
      phsource/vwl_fr/aa2r
  47. BIN
      phsource/vwl_fr/e2r
  48. BIN
      phsource/vwl_fr/ee2r
  49. BIN
      phsource/vwl_fr/i2r
  50. BIN
      phsource/vwl_fr/o2r
  51. BIN
      phsource/vwl_fr/oo2r
  52. BIN
      phsource/vwl_fr/r
  53. BIN
      phsource/vwl_fr/r@
  54. BIN
      phsource/vwl_fr/r_
  55. BIN
      phsource/vwl_fr/r_@
  56. BIN
      phsource/vwl_fr/r_a
  57. BIN
      phsource/vwl_fr/r_an
  58. BIN
      phsource/vwl_fr/r_e
  59. BIN
      phsource/vwl_fr/r_i
  60. BIN
      phsource/vwl_fr/r_n
  61. BIN
      phsource/vwl_fr/r_o
  62. BIN
      phsource/vwl_fr/r_u
  63. BIN
      phsource/vwl_fr/r_y
  64. BIN
      phsource/vwl_fr/ra
  65. BIN
      phsource/vwl_fr/raa
  66. BIN
      phsource/vwl_fr/re
  67. BIN
      phsource/vwl_fr/ree
  68. BIN
      phsource/vwl_fr/ri
  69. BIN
      phsource/vwl_fr/rj
  70. BIN
      phsource/vwl_fr/ro
  71. BIN
      phsource/vwl_fr/roo
  72. BIN
      phsource/vwl_fr/rr
  73. BIN
      phsource/vwl_fr/ru
  74. BIN
      phsource/vwl_fr/ry
  75. BIN
      phsource/vwl_fr/tr
  76. BIN
      phsource/vwl_fr/trr
  77. BIN
      phsource/vwl_fr/u2r
  78. BIN
      phsource/vwl_fr/w_a
  79. BIN
      phsource/vwl_fr/xr
  80. 1
    1
      platforms/windows/espeakedit/src/speech.h
  81. 1
    1
      platforms/windows/espeakedit/src_copy/speech.h
  82. 15
    2
      platforms/windows/make_espeak.iss
  83. 1
    1
      platforms/windows/make_espeakedit.iss
  84. 1
    1
      platforms/windows/windows_cmd/src/speech.h
  85. 1
    1
      platforms/windows/windows_dll/src/speech.h
  86. 1
    1
      platforms/windows/windows_sapi/src/speech.h
  87. 3
    1
      platforms/windows/windows_sapi/ttsengobj.cpp
  88. 280
    5
      src/compiledata.cpp
  89. 215
    48
      src/compiledict.cpp
  90. 58
    182
      src/dictionary.cpp
  91. 8
    0
      src/espeakedit.cpp
  92. 202
    2
      src/extras.cpp
  93. 22
    2
      src/formantdlg.cpp
  94. 98
    114
      src/intonation.cpp
  95. 2
    0
      src/main.h
  96. 3
    1
      src/menus.cpp
  97. 57
    19
      src/numbers.cpp
  98. 1
    1
      src/options.cpp
  99. 1
    0
      src/phoneme.h
  100. 0
    0
      src/phonemelist.cpp

+ 2
- 1
dictsource/ca_rules View File

@@ -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

+ 7758
- 1873
dictsource/da_list
File diff suppressed because it is too large
View File


+ 3150
- 2223
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 2
- 2
dictsource/de_list View File

@@ -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

+ 34
- 12
dictsource/dict_phonemes View File

@@ -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;

+ 7
- 3
dictsource/en_list View File

@@ -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

+ 15
- 8
dictsource/en_rules View File

@@ -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

+ 75
- 59
dictsource/fr_list View File

@@ -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

+ 83
- 90
dictsource/fr_rules View File

@@ -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


+ 28
- 8
dictsource/hu_list View File

@@ -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


+ 100
- 16
dictsource/hu_rules View File

@@ -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


+ 37
- 37
dictsource/is_list View File

@@ -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

+ 41
- 34
dictsource/is_rules View File

@@ -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 ú

+ 2
- 2
dictsource/nl_list View File

@@ -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

+ 3
- 1
dictsource/nl_rules View File

@@ -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^



+ 1
- 1
dictsource/pt_rules View File

@@ -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

+ 14
- 3
dictsource/ta_list View File

@@ -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


+ 182
- 23
dictsource/ta_rules View File

@@ -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:


+ 70
- 39
dictsource/vi_list View File

@@ -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

+ 416
- 356
dictsource/vi_rules
File diff suppressed because it is too large
View File


+ 4
- 4
dictsource/zh_list View File

@@ -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

+ 97
- 56
phsource/compile_report View File

@@ -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

BIN
phsource/l/l_@ View File


BIN
phsource/l/l_a View File


BIN
phsource/l/l_o View File


BIN
phsource/l/l_u View File


BIN
phsource/l/l_y View File


+ 7
- 3
phsource/ph_english View File

@@ -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

+ 188
- 168
phsource/ph_french View File

@@ -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

+ 103
- 24
phsource/ph_icelandic View File

@@ -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

+ 6
- 0
phsource/phonemes View File

@@ -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

BIN
phsource/vnasal/aa_n4 View File


BIN
phsource/vowel/@_bck View File


BIN
phsource/vowel/a_6 View File


BIN
phsource/vowel/a_en View File


BIN
phsource/vowel/e_8 View File


BIN
phsource/vowel/e_mid View File


BIN
phsource/vowel/o- View File


BIN
phsource/vowel/o_mid2 View File


BIN
phsource/vowel/u_bck2 View File


BIN
phsource/vowel/vowelchart.png View File


BIN
phsource/vwl_fr/@2r View File


BIN
phsource/vwl_fr/_r View File


BIN
phsource/vwl_fr/_r2 View File


BIN
phsource/vwl_fr/a2r View File


BIN
phsource/vwl_fr/aa2r View File


BIN
phsource/vwl_fr/e2r View File


BIN
phsource/vwl_fr/ee2r View File


BIN
phsource/vwl_fr/i2r View File


BIN
phsource/vwl_fr/o2r View File


BIN
phsource/vwl_fr/oo2r View File


BIN
phsource/vwl_fr/r View File


BIN
phsource/vwl_fr/r@ View File


BIN
phsource/vwl_fr/r_ View File


BIN
phsource/vwl_fr/r_@ View File


BIN
phsource/vwl_fr/r_a View File


BIN
phsource/vwl_fr/r_an View File


BIN
phsource/vwl_fr/r_e View File


BIN
phsource/vwl_fr/r_i View File


BIN
phsource/vwl_fr/r_n View File


BIN
phsource/vwl_fr/r_o View File


BIN
phsource/vwl_fr/r_u View File


BIN
phsource/vwl_fr/r_y View File


BIN
phsource/vwl_fr/ra View File


BIN
phsource/vwl_fr/raa View File


BIN
phsource/vwl_fr/re View File


BIN
phsource/vwl_fr/ree View File


BIN
phsource/vwl_fr/ri View File


BIN
phsource/vwl_fr/rj View File


BIN
phsource/vwl_fr/ro View File


BIN
phsource/vwl_fr/roo View File


BIN
phsource/vwl_fr/rr View File


BIN
phsource/vwl_fr/ru View File


BIN
phsource/vwl_fr/ry View File


BIN
phsource/vwl_fr/tr View File


BIN
phsource/vwl_fr/trr View File


BIN
phsource/vwl_fr/u2r View File


BIN
phsource/vwl_fr/w_a View File


BIN
phsource/vwl_fr/xr View File


+ 1
- 1
platforms/windows/espeakedit/src/speech.h View File

@@ -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);

+ 1
- 1
platforms/windows/espeakedit/src_copy/speech.h View File

@@ -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);

+ 15
- 2
platforms/windows/make_espeak.iss View File

@@ -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
- 1
platforms/windows/make_espeakedit.iss View File

@@ -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

+ 1
- 1
platforms/windows/windows_cmd/src/speech.h View File

@@ -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);

+ 1
- 1
platforms/windows/windows_dll/src/speech.h View File

@@ -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);




+ 1
- 1
platforms/windows/windows_sapi/src/speech.h View File

@@ -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);

+ 3
- 1
platforms/windows/windows_sapi/ttsengobj.cpp View File

@@ -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 */

+ 280
- 5
src/compiledata.cpp View File

@@ -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");

+ 215
- 48
src/compiledict.cpp View File

@@ -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);

+ 58
- 182
src/dictionary.cpp View File

@@ -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");
}
}
}


+ 8
- 0
src/espeakedit.cpp View File

@@ -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

+ 202
- 2
src/extras.cpp View File

@@ -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;

+ 22
- 2
src/formantdlg.cpp View File

@@ -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);

+ 98
- 114
src/intonation.cpp View File

@@ -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


+ 2
- 0
src/main.h View File

@@ -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,

+ 3
- 1
src/menus.cpp View File

@@ -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)"));

+ 57
- 19
src/numbers.cpp View File

@@ -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

+ 1
- 1
src/options.cpp View File

@@ -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);

+ 1
- 0
src/phoneme.h View File

@@ -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

+ 0
- 0
src/phonemelist.cpp View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save