Browse Source

[1.41.32]

lang=hu, ordinal number fixes
--punct, changes to intonation of punctuation names.
Add language option: don't stress second part of hyphenated words.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@230 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 15 years ago
parent
commit
f2eed5229e
51 changed files with 2528 additions and 1608 deletions
  1. 65
    24
      dictsource/af_list
  2. 84
    16
      dictsource/af_rules
  3. 12
    4
      dictsource/da_list
  4. 703
    574
      dictsource/da_rules
  5. 385
    384
      dictsource/dict_phonemes
  6. 7
    6
      dictsource/en_list
  7. 17
    7
      dictsource/en_rules
  8. 8
    9
      dictsource/fr_list
  9. 1
    0
      dictsource/fr_rules
  10. 424
    149
      dictsource/hu_list
  11. 118
    37
      dictsource/hu_rules
  12. 4
    1
      dictsource/jbo_rules
  13. 7
    42
      dictsource/ta_list
  14. 114
    11
      dictsource/ta_rules
  15. 16
    9
      phsource/compile_report
  16. BIN
      phsource/n/_nr
  17. BIN
      phsource/n/nr_
  18. 17
    8
      phsource/ph_danish
  19. 3
    3
      phsource/ph_english
  20. 6
    6
      phsource/ph_english_us
  21. 1
    1
      phsource/ph_polish
  22. 2
    2
      phsource/ph_tamil
  23. 6
    1
      phsource/phonemes
  24. BIN
      phsource/vdiph/aoo
  25. BIN
      phsource/vnasal/oo_n
  26. BIN
      phsource/vnasal/oo_n2
  27. BIN
      phsource/vowel/ii_final
  28. BIN
      phsource/vwl_en/aU@
  29. BIN
      phsource/vwl_en_us/ar
  30. BIN
      phsource/vwl_en_us/er
  31. BIN
      phsource/vwl_en_us/ir
  32. 1
    0
      platforms/windows/espeakedit/src/speech.h
  33. 1
    0
      platforms/windows/espeakedit/src_copy/speech.h
  34. 1
    0
      platforms/windows/windows_cmd/src/speech.h
  35. 1
    0
      platforms/windows/windows_sapi/src/speech.h
  36. 1
    3
      src/compiledict.cpp
  37. 1
    1
      src/debug.h
  38. 21
    10
      src/dictionary.cpp
  39. 92
    19
      src/espeak.cpp
  40. 0
    25
      src/espeakedit.cpp
  41. 1
    1
      src/intonation.cpp
  42. 180
    114
      src/numbers.cpp
  43. 23
    23
      src/phonemelist.cpp
  44. 105
    54
      src/readclause.cpp
  45. 6
    0
      src/speech.h
  46. 1
    1
      src/synthdata.cpp
  47. 7
    0
      src/synthesize.cpp
  48. 4
    2
      src/tr_languages.cpp
  49. 37
    25
      src/translate.cpp
  50. 23
    13
      src/translate.h
  51. 22
    23
      src/voices.cpp

+ 65
- 24
dictsource/af_list View File

@@ -301,6 +301,7 @@ moorreesburg mur'e@sbWrx2
(thaba nchu) tab'A:||ntSu
europa Y@r'o@pa
nigel _^_EN
nineve nIn@fi
outeniekwa @Ut@n'ikwa
oxford _^_EN
pelindaba p&l@nd'A:ba
@@ -352,9 +353,12 @@ annalet anal'Et
André 'andreI
annette an'Et
antoinette antun'Et
aristoteles arist'o@t@lEs
badenhorst bA:d@nhOrst
barbara bA:b@ra
basson $2
bea bi:ja
belcher _^_EN
benade b@nA:di
benjamin bEndZ@m@n
bennett bEn@t
@@ -364,6 +368,7 @@ betsie bEtsi
beyers beI@rs
blignault blIx2n@Ut
blomerus blum'e@rWs
blum blum
botha bo@ta
bouwer b@U@r
brian _^_EN
@@ -371,6 +376,7 @@ bredenkamp bre@d@nkamp
bruwer bruw'&:r
caesar siz@r
carl kA:r@L
carol _^_EN
casanova kasan'o@va
cecil sEs@l
cecile s@si:l
@@ -380,6 +386,7 @@ charles _^_EN
charlie tSA:li
charmaine SA:m'eI:n
chopin S%OpA~
clark _^_EN
conradie $2
chris krIs
christo krIstu
@@ -392,11 +399,11 @@ christine kr@st'i:n
cindy sIndi
coetzee kuts'e@
cronjé krOnj'e@
cussons kas@ns
cynthia _^_EN
dalene dal'e@n
daniël d'A:ni:@l
#zzz
darwin _^_EN
daniël d'A:ni:@l
david _^_EN
(da vinci) da||v'intSi
debora d@bo@ra
@@ -423,17 +430,20 @@ elmien $2
elsabe &ls@bi
elsabé &ls@bi
emmarentia Emar'e~nSja
engelbrecht EN@lbr&x2t
erasmus $2
ernest _^_EN
esegiël is'e@x2i:@l
esegiël is'e@x2i: @l
estelle %ist&l
etienne Eti@n
eugene judZ'i:n
eugène yZ'En
farao fA:ro@
ferreira f@r&:r@
filemon f'il@mOn
filemon f'il@mOn
fischer fiS@r
floris $1
fouché fuS'e@
fourie fur'i
francina $2
francois franSwa
@@ -445,6 +455,7 @@ georgina dZO:dZ'ina
gerhard x2&rart
gerhardus $2
gertruida $2
gilbert _^_EN
gloria glO:ria
grange x2rA:nsi
grové x2ruv'e@
@@ -466,7 +477,6 @@ ingrid iNgr@d
isabel is@b&l
iskariot isk'ariOt
jaco jaku
jacques ZA:k
james _^_EN
jane _^_EN
Jean ZA~n $capital
@@ -474,11 +484,15 @@ jesebel je@s@b&l
jimmy _^_EN
joan _^_EN
joey dZ@Ui
johl jo@l
jones _^_EN
jordaan $2
joris $1
josef jo@s@f
josephina jo@s@f'ina
juanita juan'ita
julia _^_EN
khayyam kaj'am
kelvin _^_EN
kim _^_EN $capital
krige krix2@
@@ -496,10 +510,10 @@ levi le@fi
liesbet lisbEt
louis luI
louise luw'i:z
lukas l'ukas
mackintosh _^_EN
madelene mad@l'e@n
mbeki mbE:ki
madelene mad@l'e@n
magdalena $3
malan mal'an
malherbe mal'&rb@
@@ -544,6 +558,7 @@ naudé nOd'e@
neil _^_EN
nelson _^_EN
niklaas niklA:s
olga Olga
ontong OntON
phillips fIl@ps
pierre p'e@r
@@ -551,9 +566,13 @@ petronella pe@trun'&la
petrus pe@trWs
phoebe fi:bi
picasso pik'asu
piketberg pik'Etb&rx2
pinokkio pin'Oki;u
pretorius pr@to@riWs
quixote kix2'OtE
rachmaninoff rax2m'aninOf
rademeyer rA:d@meI@r
rall rA:l
rebekka r@bEka
reinette r@nEt
renette r@nEt
@@ -561,6 +580,7 @@ renée r@neI
retha re@ta
retief r@tif
rhodes _^_EN
riekert rik@rt
robert _^_EN
ronel run'&l
rossouw r@s@U
@@ -570,6 +590,7 @@ rupert rup@rt
salomo sA:l@mo@
samuel sA:my@l
sandra sandra
sappho sapfu
schalk sk'alk
scheepers ske@p@rs
schmidt Smit
@@ -580,12 +601,14 @@ schutte skWt@
sebastian s@bastian
servaas s@rfA:s
shakespeare _^_EN
sheila Si:la
sigmund sigmunt
sophia suf'i:ja
sophie _^_EN
stephan ste@fan
stephanus st@fA:nWs
strauss straUs
stockenström stOk@nstro@m
suzanne suz'A:n
suzette suz'Et
tania tanja
@@ -593,8 +616,9 @@ telemann te@l@man
terblanche t@rblA:nS
theo tiu
theron tr'On
timotheus t@m'o@tiWs
thessalonicense tEsalo@nis'E:ns@
thys teIs
timotheus t@m'o@tiWs
toerien $2
totius to@SiWs
trudie trudi
@@ -607,6 +631,7 @@ vincent _^_EN
violet _^_EN $capital
visagie fis'A:x2i
william _^_EN
wilson _^_EN
yolande jul'and@
yvonne iv'On
zyl seIl
@@ -640,28 +665,29 @@ martini mart'i:ni
naspers nasp&rs
peugeot pW:Z@U
(pick n pay) p,ik||@n||p'eI
porsche pOrS@
port pOrt $1
rover _^_EN
sotho su:tu
thessalonicense tEsalo@nis'Ens@
toyota $2
venda vEnda
volvo vOlvu
wimpy wImpi
// some Bible names
levitikus $2
deuteronomium dY@t@ro@n'o@miWm
josua j'o@Sia
jesaja $2
jeremia j%e@r@m'ia
hosea hus'i:a
amos 'A:mOs
obadja o@b'atja
miga m'ix2a
habakuk h'abakWk
sefanja s@f'anja
sagaria sax2ar'ia
maleagi $3

// Some Bible names
amos 'A:mOs
deuteronomium dY@t@ro@n'o@miWm
habakuk h'abakWk
hosea hus'i:a
jeremia j%e@r@m'ia
jesaja $2
josua j'o@Sia
levitikus $2
maleagi $3
miga m'ix2a
obadja o@b'atja
sagaria sax2ar'ia
sefanja s@f'anja

// article

@@ -813,7 +839,7 @@ allegro al'Egru
almiskie $3
alom al_'Om
alreeds $2
alternatiewe $4
altemit $3
amelee am@le@
amen A:mEn
anale an'A:l@
@@ -853,11 +879,11 @@ capita kapita
casino kas'i:n@U
cedille s@dIl@
charisma kar'Isma
clichés kliS'eI:s
cliché kliS'eI:
crescendo kr@SEndu

dadelik dA:d@lIk
dagorde dax2_Ord@
darem dar@m
dekade dEk'A:d@
dekreling dEkre@l@N
@@ -901,12 +927,14 @@ forte fOrt@
g'n x2In
gaandeweg x2A:nd@v&x2
garages g@rA:dZ@s
gebrokener x2@bro@k@n@r
gee x2e@
geen x2e@n
geldelike x2&ld@l@k@
genade $2
genesis x2e@n@s@s
//gesamentlik x2@sA:m@ntl@k
gewellys x2e@v@lleIs
gladiator x2ladi'A:tOr
globale x2lo@b'A:l@
gooi x2OI
@@ -920,6 +948,7 @@ handtertjie hant&:rci
hanou hA:n@U
hardop hart?Op
heeltemal he@lt@mal
heimat haImat
hek h&k
hekke h&k@
helaas he@l'A:s
@@ -978,6 +1007,7 @@ libido l@bidu
lokaas lOk_A:s
londense lOnd@ns@
lord _^_EN
luidop lYyt_Op

macaroni makar'o@ni
madame mad'A:m
@@ -1017,12 +1047,14 @@ nalatigheid nA:l'A:t@x2eIt
namate $2
negeer n@x2e@r
negering n@x2e@r@N
negester ne@x2@st&r
netjies nE:icis
netjiese nEicis@
netsowel nEtso@v&l
nikswerd nIksv&:rt
nimmermeer $1
nirvana n@rvA:na
nogeens nOx2_e@ns
normale nOrm'A:l@
numeri nWm@ri

@@ -1049,6 +1081,7 @@ ongeloof $1
ongelyk $1
ongemak $1
ongerief $1
ongeriefie $1
ongewens $1
ongewensde $3
ongewoons $1
@@ -1081,13 +1114,16 @@ parkie $1
parte $1
patos pA:tOs
patriotisme patri|ut'Ism@
pedaledemping p@dA:l@dEmp@N
penorent pEno@rEnt
per p@r $only
persent p@rsEnt
petite p@tit
pinotage pinut'A:Z
pirouette p@ru:'Et
plaasjaap plA:sjA:p
plasenta plas'Enta
poinsettia pOIns'Etia
primate $2
(pro forma) pro@||f'Orma

@@ -1098,6 +1134,7 @@ renaissance rEn@s'A~ns
retoriek r@tur'ik
rimpeling rImp@l@N
rinkink $2
rondeel $2
rooipers roIp&:rs
roterende rut'e@r@nd@
rottenes rOt@nEs
@@ -1132,8 +1169,11 @@ sonop sOn_Op
sonore sun'o@r@
sover so@f&r
staccato $2
sterwens st&rv@ns
stilswye $1
subiet sWb'it
suburbia sWb'Wrbija
swangerswaar swaN@rswA:r

tanga taNga
tango taNx2u
@@ -1167,6 +1207,7 @@ verby f@rbeI
verdere f&rd@r@
vererger f@r&rg@r
ver f'&:r
vereduifie fe@r@dYyfi
verg f&rx2
vergeleë f&:rx2@l,e@@
vergete f@rx2e@t@

+ 84
- 16
dictsource/af_rules View File

@@ -52,9 +52,10 @@
adole (ssen %ad%o@l@ // fix stress and vowel sounds: adolessent/-e/-adolessensie
ad (vies %at // move default stress: advies/-brief/-komitee and many similar

af (gunstig %af // move default stress: afgunstig/-e
C) agie A:x2i
a (gitA %a // fix a sound: agitasie/(ge)agiteer
agte (los %ax2t@ // move default stress: agtelosig/-e/-heid
agte (losig %ax2t@ // move default stress: agtelosig/-e/-heid
agter (dogt %ax2t@r // move default stress: agterdogtig and derivatives
agtereen (volg %ax2t@r_%e@n // move default stress: agtereenvolgend/-e/-ens
agter (oor %ax2t@r_ // move default stress: agteroor/-buig/-druk/-val, etc.
@@ -69,6 +70,7 @@
@@@smokkel) ary %ar%eI // default stress: diamant-/drank-/dwelm-/goud-/kokaïensmokkelary, etc.
amarula %am%arul%a // fix stress and a sounds: amarula and compounds
a (ment %a // shorten a sound: perkament/testament and compounds
arends A:r@nts_ // fix e sound: arendsoog/-kloue/-nes
argen (tA %arx2@n // move default stress: Argentinië/Argentyns/-e
a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria
a (ristokr %a // shorten 1st a: aristokrasie/-kraat/-krate/-kraties
@@ -78,6 +80,7 @@
C%C) asie A:si // restore default stress: bok-/dikmelkkasie and similar
oub) asie A:si // restore default stress: oubasie/-s
@form) asie A:si // restore default stress to compounds ending in -formasie: graniet-/grond-/rotsformasie, etc.
gl) asie A:si // restore default stress: wyn-/sjampanjeglasie, etc.
pl) asie A:s%i // restore default stress: gemeenplasies/gemeenskapsplasies and similar
Csp) asie A:s%i // restore default stress: vloer/kantoorspasie, etc.
Cst) asie A:si // restore default stress: brandweer/spoorwegstasie and similar
@@ -145,6 +148,7 @@
_k) a (nA %a //kanon and others

apart %apart // fix stress: (bus-/klein)apartheid
aphro (dit %afr%u // fix stress and ph and o sounds: Aphrodite/-dities
_) a (po %a // apollo/apostel
apo (krieC %ap%u // fix stress and vowel sounds: apokrief/-iewe
a (politi %A: // lengthen a sound: apolitiek/apolities/-e
@@ -169,6 +173,7 @@
ar (gaï %ar // move default stress: argaïes/-e
arge (tip %arx2@ // move default stress: argetipe/argetipies/-e
ar (moedig %ar // move default stress: armoedig/-e/-heid
arm (salig %ar@-m // move default stress: armsalig/-e/-heid/-ste
_) arte (ri %arte@ // fix stress and e sound: arterie/-ë/-s
_) asbes %asbEs // fix stress and e sound: asbes and many compounds
a (siel %a // shorten a sound and move default stress: asiel and compounds
@@ -194,10 +199,12 @@
_) afge (@P4 'afx2@ // stress on 1st slb
afgryslik %afx2reIsl@k // move default stress: afgryslik and derivatives vs. afgrys/-e
af (hank %af // move default stress: afhanklik/-e/-heid, etc.
_) af (kerig %af // move stress: afkerig/-e/-heid
_) af (komstig %af // move default stress: afkomstig
afrik (aan %afr%ik // exception to af prefix and move stress to end
afrikane (K %afr%ikA:n@ // move stress to end: Afrikaner and compounds
afrika A:frika //Stress and 1st a sound: Afrika and compounds: Afrikatale/-state...
afro (dit %afr%u // alternate spelling: Afrodite/-dities
af (sigte %af // move default stress: afsigtelik/-e/-heid
af (skuw %af // move default stress: afskuwelik and derivatives vs afsku
afsonderl %afsOn@rl // stress, avoid af_ prefix and -lik suffix: afsonderlik/-e/-heid
@@ -207,6 +214,7 @@
afwesig %afve@s@x2 // to steer clear of pre- and suffixes
af (wagten %af // move default stress: afwagtend/-e
agenda %ax2End%a // fix stress and 1st a sound: agenda/-s/-punt, etc.
age (rend %ax2e@ // fix stress and vowel sounds: agerend/-e
a (gonie %a // fix 1st a sound and move default stress: agonies/-e
agonie (_N %ax2%uni // move stress to end: agonie
agter (bak %ax2t@r // fix stress: agterbaks/-e/-heid
@@ -314,6 +322,7 @@
aan (grensen %A:n // move default stress: aangrensend/-e
aan (grypend %A:n // fix stress: aangrypend/-e
aan (hangig %A:n // move default stress: aanhangig vs. aanhang
aan (hank %A:n // move default stress: aanhanklik/-e/-heid
aan (houden %A:n // move default stress: aanhoudend/-e
aan (lok %A:n // move default stress: aanloklik/-heid
aan (lok_N A:n // restore default stress: aanlok
@@ -501,6 +510,7 @@
bloed (stol bl%ut // move default stress: bloedstollend/-e
_) blo (kka bl%O // move default stress: blokkade/-s and compounds
_) blo (kkeer bl%O // move default stress: (ge)blokkeer/-der, etc.
blom (akker blOm_ // fix O sound, pause: blomakker/-s and compounds
blon (dine bl%On // move default stress: blondine/-s
bly (moed bl%eI // move default stress: blymoedig/-e/-heid
bo (botie b%u // fix stress and 1st o sound: bobotie and compounds
@@ -715,6 +725,7 @@
_) deli (ka d%El%i // delikaat/delikate
delika (tess d%El%ik%a // move default stress: delikatesse/-s
deli (rium d@lI // fix stress and vowel sounds: delirium and compounds
delphinium d%&lfini;Wm // fix stress and ph sound: delphinium and compounds
@) dend (er d@nd // beduidender/behoudender
_) den (dri d%En // dendriet/-e/dendrities/-e
@@ -736,6 +747,7 @@
@C) derm (K d&r@-m // fix e sound of derm in compounds: nersdermklier/slukdermsiekte, etc.
@) dderd (_ d@rt // ontredderd, se rule: dd d
_) derge d&rx2@ // dergelik/-e
@) de (rosie t_%e@ // fix e sound, pause: winderosie/tyderosie and similar
desibel dEsib&l // fix vowel sounds: desibel/-s
de (skun d%E //deskundig/e in compounds
_) des (po d%Es // move default stress: despoot/despote
@@ -772,6 +784,7 @@
digi (ta d%ix2%i // move default stress: digitaal/digitale
di (gK dI // force default stress: GEDIG/-TE/digbundel/digvorm, etc.
digtere (K d@x2t@rE // move default stress: digteres/-se
dik (vell d@k // move default stress: dikvellig/-e/-heid
dilemma d@lEma // dilemma and compounds
dimen (si d@mEn // fix stress and 1st i sound: (ontwikkelings)dimensie, etc./-dimensioneel/-ele
di (namie d%i // move default stress: dinamies/-e
@@ -790,12 +803,13 @@
dis (koers d@s // move default stress: diskoers/-e
diskre (s d@skrE // fix stress and e sound: diskresie/diskresionêre
_) dis (kre d@s // move default stress: diskreet/-heid/-ste/diskrete
_) dis (kussA d@s // move default stress: diskussie/-s/diskusseer
dis (loja d@s // move default stress: dislojaal/-lojale/-lojaliteit
_) dis (oP3 d@s // disorganisasie/disoriënteer
dis (pu d@s // move default stress: dispuut/dispute
distro (fie d@str%u // fix stress and o sound: (spier)distrofie, etc.
divide (nd d@v@dE //dividende etc.
d (_N t //
d (_ t //
dj c // palatal stop
_) dj dZ // regional: djy/djou/djulle, etc.

@@ -871,9 +885,11 @@
@) d (roos t // fix d sound: draadrooster/maand-/strand-/veldroos
@) d (rose_ t // fix d sound: maand-/strand-/veldrose
@) d (rosie t // fix d sound: maand-/strand-/veldrosie/-s
_) drukke (ry dr%Wk@ // move default stress: drukkery and compounds
@) d (t // drop d: breedte/handtekening/rondte/rondtrek...
du (et d%u:w // fix stress and -ue-sound: (klavier)duet/-te, etc.
@n) d (uit t_ // fix d sound and insert short break: enduit/handuit and similar
verby) dw dw // fix d sound: verbydwarrel/-dwaal/-dwing
dwelm (_ dw&l@-m // fix d and e sounds in compounds like wonderdwelm
dw (erg dw // fix d sound: tuindwerg/-e/-ie
@) dwes tv'Es // noordwes/te/lik/e suidwes/te/lik/e
@@ -890,6 +906,8 @@
CAC) e (CC @ // fix e sound: nalatenskap/wapenstilstand
CAC) e (C% E // beesfilette/nougesette/onderbesette/voortgesette
blind) e (C@ @ // fix e sound in compounds like: blindekol/-mol/-wese
vreugd) e (C @ // fix e sound: vreugdefees/-klokkies/-lied/-tyd...
vriend) e (C @ // fix e sound: vriendepaar/-woorde
juwel) e (C @ // fix e sound: juwelekissie and similar compounds
fontein) e (C @_ // fix e sound: Fonteinesirkel/-wisselaar, etc.
kening) e (@ @ // fix e sound: rekeningeklerk/-navraag and similar
@@ -920,6 +938,7 @@
naald) e (C @ // fix e sound: naaldekoker/-kussing/-werk, etc.
noord) e (C @ // fix e sound: noordewind and compounds
Colw) e (C @ // fix e sound: golweslag/wolwedans
bolw) e (rk_ & // exception to above: fix e sound: bolwerk and compounds
ros) e (CA @ // fix e sound: rosegeur/roseweg
slang) e (C @ // fix e sound: slangebesweerder/-diens/-draer/-gebroedsel/-kuil/-teelt
speld) e (C @ // fix e sound: speldekop/-kussing/-punt, etc.
@@ -1091,8 +1110,10 @@
ss) eer 'e@r // but many words cont. sseer take stress: adresseer, etc.
Cv) eer e@r // stress: (hoender/volstruisveer/dryfveer
AAv) eer e@r // restore default stress: pouveer/makouveer/horlosieveer/kraaiveer/rooiveer
Cev) eer e@r // restore default stress: duiwe-/haneveer
w) eer e@r // stress may vary in words containing weer: lugafweer/donderweer
u) eer 'e@r // aktueer/konstrueer/salueer, etc.
@) eerdheid 'e@rtheIt // fix stress: geraffineerdheid/ongedissiplineerdheid, etc.
effek (K %ifEk // move default stress and fix e sound: effek/-te/-tief/rimpeleffek
eienaardig %eI@nA:rd@x2 // move default stress: eienaardig/-ste
@) ein (dig 'eIn // nimmereindige/nimmereindigend
@@ -1120,6 +1141,7 @@
C) ema (_ e@ma // words ending in ema: compounds of skema/tema
emfi (seem %Emf%i // move default stress: emfiseem and compounds
C) enaar @nA:r // eienaar/lessenaar
C) enare (_ @nA:r@ // fix e sound: towenare and similar
C) enier @n'i:r // kruidenier/spysenier/valkenier/Renier
C) enheid @nheIt // opgewondenheid/bedorwenheid and many similar
_) enorm e@n'Or@_m // enorm/-s, pronunc. of rm
@@ -1152,6 +1174,7 @@
e (gK &
@C) e (groep @ // fix e sound: beelde-/vriendegroep
_) ega (l %e@x2A: // stress: egalig/-e
egosentrie %e@x2%usEntri // fix stress and o sound: egosentries/-e
_) e (gipt %e@ // move default stress: Egipte/Egiptenaar/Egipties
C) ektomie 'Ektumi // histerektomie/vasektomie
&) elik (ing @l@k // verduideliking/s/vergoddeliking/verstedeliking
@@ -1229,6 +1252,7 @@
ff) er (@ @r // keffertjie/koffersleutel/offerande/opoffering
stoff) er (A 'e@r // exception to rule: ff) er (@ @
C) eres @r'Es // ...onderwyseres
@dans) ere (K @rE // fix stress: beroeps-/waaierdanseres/-se/-sie, etc.
C) eress @r'Es // onderwyseresse/-sie
&) e (m_ @
&l) e (m_ E // compounds ending in lem
@@ -1266,10 +1290,10 @@
_rasp) e (r @ // fix e sound in rasper- compounds: raspertong/-vyl, etc./rasperend
werp) e (rsA @ // fix e sound: ontwerpersolie/-sonbril/-uitrusting
lew) e (ns @
&d) e (r@+ @ // not initial or final syllable
&d) e (r@++ @ // not initial or final syllable
skuld) erke _&rkE // fix e sound: skulderkentennis/-erkenning
@C) e (reë @ // fix e sound: geelperskereën/tropereën, etc.
@d) e (rnst+ & // but fix e sound in doodernstig/-e
@d) e (rnst++ & // but fix e sound in doodernstig/-e
&t) e (r@ @
Cit) e (ring e@ // fix final e sound in compounds like begrotingsmonitering
iënt) e (r@n e@ // fix e sound: lewensoriëntering/-rende
@@ -1314,7 +1338,7 @@
_) este (t %Este@ // fix stress and vowel sounds: esteties/-e/estetika
hip) e (r @
_) er (b &r' // erbarm/ing
erke (n %&rkE // fix stress and e sounds: erken/-ning/(self)erkende
erke (n+ %&rkE // fix stress and e sounds: erken/-ning/(self)erkende
m) erke (nd &rk@ // kenmerkend/-e
p) erke (nd &rk@ // beperkend/-e
w) erke (nd &rk@ // (mede/terug)werkend/-e
@@ -1352,6 +1376,7 @@
elaar @lA:r //wandelaar, twyfelaar etc.
oord) elaar e@lA:r //beoordelaar and oordelaar/friends
C) ewel (A e@v@l // prewelend/wrewelig/newelig/beneweling
ewewig (tig %e@v@vIx2 // move default stress: ewewigtig/-e
d) e (mons E%
r) e (digering E
som) e (r @ //someraand and others.
@@ -1417,6 +1442,7 @@
Ceuw) e (l @ //gesneuwelde heuwelhang etc.
v) e (nno@+ @ //vennoot and friends
_) euro (pe %Y@r%o@ // stress: Europees/Europese
ev (entue %iv // fix e and v sounds: eventueel/-ele
_) ewe (red %e@v@ // move default stress: (on)eweredig/-e/-heid
ex (+ _^_EN // words containing ex are English
al) ex (and %Ekz //alexanderbaai, alexandria etc.
@@ -1479,6 +1505,8 @@
_) fok (o fOk_ // fix o sound, insert short break: fokop/fokof
folio fo@li_u // fix o sounds: folio and compounds
fondue f%Ondy // fix stress and ue sound: fondue and compounds
fone (tiek f%o@n@ // fix e sound: fonetiek and compounds
fone (tie f%une@ // fix stress and o sound: foneties/-e
@) fonie fun'i // kakofonie/simfonieorkes/telefonie
@) fonies f'o@nis // fix stress: simfoniese/polifonies/telefonies
@) fonie (s@@ fun'i // fix stress: simfonieseisoen and similar
@@ -1541,6 +1569,7 @@
gim (naK x2@m // move default stress: gimnas/-te
gimna (siA x2@mnA: // move default stress and lenghthen a sound: gimnasium/gimnasia
glans x2lans // glans not nasalised: glans/-ende/-papier, etc.
glas (a x2las_ // shorten a sound, short pause: glasafskorting/-albaster/-apparaat...
glas (o x2las_ // fix a sound and short break: glasoog/-ogie/-oë/-opaal/-oppervlakte
gletser x2l''Ets@r // fix 2nd e sound: gletserbeweging/-meer/-vorming/vergletsering, etc.
glise (rien gl@s@ // fix stress and g and vowel sounds: gliserien(-salf/-suur)
@@ -1656,7 +1685,7 @@
bur) ger g@r
gee (+ x2e@
geër (_ x2e@@r // oorgeër/pasaangeër
gees (drift x2%e@s // move default stress: geesdriftig and derivatives
gees (drifti x2%e@s // move default stress: geesdriftig and derivatives
@) gegee =x2@x2e@
gegewens x2@x2e@v@ns // fix e sounds in many compounds: agtergrond-/fossielgegewens/-versameling
gei (+ x2eI // geil and derivatives/geiser/geit/-e
@@ -1680,6 +1709,7 @@
.group h
h h
h (h
_) half (geP4 h'alf // fix e sound in halfgetem(de), etc.
half (kro@ h%alf // move default stress: halfkroon/halfkrone
half (een h%alf_ // move default stress in this and following time expressions: halfeen/-vergadering
half (twee h%alf
@@ -1710,6 +1740,7 @@
hard (ste hart // restore default stress: (ge)hardste/-s
harle (kyn h%arl@ // fix stress and e sound: harlekyn/-e and compounds
harmo (nie h%arm%u // fix stress and o sound: harmonie/-ë
harmonies harm'o@nis // fix stress (dis-/en-/fil-)harmonies/-e
har (poen h%ar // move default stress: harpoen/-e and compounds
@) hartig h'art@x2 // barmhartig/lighartigheid/lighartig...
hart (roer h%art // move default stress: hartroerend/-e/-ste
@@ -1767,7 +1798,7 @@
&) hede (_ he@d@
he (g h&
heid (_S4 heIt
herinner h&r'In@r // herinner/-ing/-e|s
herinner h%&rIn@r // herinner/-ing/-e|s
hetero (@@P6 h%Et@-r%u // fix stress and vowel sounds: many compounds: heteroseksueel/-ele/-aliteit, etc.
hex (C hEks // prevent English translation: Hex(rivier)vallei
hia (sint h%ij%a // fix stress: hiasint/-e and compounds
@@ -1815,7 +1846,7 @@
iber (i@ %ibe@r // Siberië/Siberiese/Iberiese
@) ic (_ _^_EN // Words ending in -ic are English
ie i
tr) ie (_ 'i //stress on trie at word end
tr) ie (_N 'i //stress on trie at word end
ieë (K i:@ // knieë/vlieë/spieël/-tjie
ie (uu i // split ie/uu, eu not diphthong: drieuur and similar
ss) ief (_ 'if // move default stress: aggressief/massief/obsessief/progressief, etc.
@@ -2038,6 +2069,7 @@
j j
j (j
ja (broer jA: // fix a sound: jabroer/-s
_) jack _^_EN // English: Jack/-ie/-son
_) jag (A j''ax2_ // fix stress and a sound: jagavontuur/-ekspedisie/-entoesias/-eskader/-instink...
jag (end jA:x2 // but long a in jagend/-e and compounds
jag (er jA:x2 // long a in jager and compounds
@@ -2147,6 +2179,7 @@
klip (A klIp_ // fix i sound: klipalbaster/-altaar/--uil/leiklipolie
klou (sule kl%@U // move default stress: klousule/-s
kklere =kl'e@r@
kners (_ kn&rs // fix e sound: blikners/tande(ge)kners, etc.
knip (A knIp? // knipogie/geknipoog/
_) krag (A kr''ax2_ // kragaanleg/-eenheid/-installasie/-onderbreking/-opwekker
kra (gie krA: // but: kragie/-s
@@ -2156,6 +2189,7 @@
kreme (tart kr@m@ // fix stress and e sounds: kremetart and compounds
_) kre (o kr%i // fix stress and e sound: Kreool/Kreole/Kreoolse
_) kre (pe@ kr@ // fix stress and 1ste sound: krepeer/-krepering
kriewe (l kriv@ // fix e sound: kriewelend/kriewelkous/-krapper/-siekte...
krimi (nA kr@m@' // krimineel/kriminele/diskrimineer
kri (oel kr%i // move default stress: krioel and derivatives
kri (sant kr@ // move default stress: krisant/-e
@@ -2371,7 +2405,7 @@
_) kontras k%Ontras // move default stress: kontras/-te/kontrasteer
kontrasep k%Ontr%asEp // fix stress and e sound: kontrasepsie and derivatives
kontrover (s k%Ontr%uv&r // o and v sounds: kontroversie/kontroversieel
_) kop (o kOp? // fix o sound: koponder/koponderstebo/kopomdraai/kopoperasie
kop (o kOp? // fix o sound: koponderstebo/kopomdraai/kopoperasie/gryskoponderwyser/poenskopolifant
kopu (lA k%Op%y // fix o sound: kopulasie/kopuleer and derivatives
_) kor (dA k%Or // kordaat/kordon
ko (rint k%u // fix stress and o sound: korint/-e and compounds
@@ -2530,6 +2564,7 @@
ma (kriel m%a // move default stress: makriel/-e
maksi (ma@ m%aks%i // move default stress: maksimaal/-male
&) mal (_S3 mal
mala (giet m%al%a // fix stress and a sounds: malagiet and compounds
malaria mal'A:ria
mal (gas m%al // move default stress: Malgas/-se/-sies
malles (_ mal@s // fix e sound: (mags)malles and similar
@@ -2561,13 +2596,15 @@
marmer marm@r_ // fix e sound: marmerbeeld/-blad and many others
marmo (set m%arm%u // fix stress and o sound: marmoset/-te
mar (sje m%ar // move default stress: marsjeer and derivatives
mas (biek m%as // move default stress: masbieker/-s
ma s (biek m%as // move default stress: masbieker/-s
masjien m@Sin // masjien and many compounds
masji (na@ m%aS%i // move default stress: masjinaal/-ale
maskara m%askA:r%a // move default stress: maskara and compounds
masker mask@r // fix e sound: maskerafdruk/-agtig/ontmaskering
masker (ade m%ask@r // move default stress: maskerade/-s
maso (chis m%as%u // fix vowel sounds: masochis/-te/-ties/-e/-isme
mastekto (m m%astEkt%u // fix stress and vowel sounds: mastektomie and compounds
mate (matie m%at@ // fix vowel sounds: matematies/-e
matemati (CA m%at@m%at%i // fix stress and vowel sounds: matematikus/-ci
materi (A@ m%at%e@r%i // materiaal/materiale/materiële/materieel
materie (+ m%ate@r%i // stress and vowel sounds: materie and many compounds
@@ -2586,6 +2623,7 @@
midde (l mId@ // middellyf/middelpunt/middelste/bemiddelend
middel (jari m@d@l // move default stress: middeljarig and derivatives
middelli (k mId@l@ // drop one l: (on)middellik/-e
milieu m@ljy // fix stress and vowel sounds: milieu and compounds
milit m@l@t // militêr/militaris
mil (jA m@l // move default stress: miljoen/-e/miljard/-e
mille (nniA m@lE // millennium/millennia
@@ -2608,6 +2646,7 @@
mis (gis m@s // stress on 2nd slb
mis (gun m@s // stress on 2nd slb
mis (ha m@s // mishandel/mishaag
_) mis (inP3 m@s // fix 1st i sound, pause: misinterpretasie/misinterpreteer
miske (n m@skE // misken/ning/onmiskenbaar
mis (l m@s // misluk/mislei
mis (lamp mIs // restore default stress: mislamp/-e
@@ -2660,6 +2699,7 @@
mosam (biek m%o@s%am // move default stress: Mosambiek/-er/-se
mosa (ïek m%o@s%a // move default stress: mosaïek and compounds
mo (skee m%O // move default stress: moskee/-s and compounds
motie (C m%o@ti // handle stress: winsmotief/-tiewe and similar compounds
motor mo@t@r // motorfiets/motorkar/vragmotor
motor (ie m%uto@r // fix stress and o sounds: motories/-e
@) mpel (A mp@l // bewimpeling/dompelaar/strompeling
@@ -2723,6 +2763,7 @@
ment m'Ent
mental (iteit m,Ental // fix stress: mentaliteit/sentimentaliteit and compounds
mentjie m'EiNci // monumentjie/dokumentjies
menue (t m%En%y:;E // fix stress and vowel sounds: menuet/-te
@C) mere (_ me@:r@ // fix penultimate e sound: sout(water)-/strandmere
me (riete m@ // move default stress: meriete and compounds
merino m@rin%u // fix stress and vowel sounds: merino/-skaap/-ram, etc.
@@ -2877,6 +2918,7 @@
oe) n (g n //soengroet, pensioengewend etc.
nuanse (K n%yans@ // move default stress: nuanse/-s and compounds
nuan (seer n%y%an // fix stress: (ge)nuanseer/-d
nuanse (ring n%y%anse@ // fix stress: nuansering and compounds
nuus (kierig n%ys // move default stress: nuuskierig/-heid
nuwer (wet n%yv@r // move default stress: nuwerwets/-e
@Cer) ny (_ n'eI // move default stress: lekkerny/raserny/slawerny
@@ -2899,6 +2941,7 @@
oase %u_A:s@ // oase/-s and compounds
o (terap u // psigo-/fisioterapeut
_) ob (s %Op // obskuur/obskure/obskuriteit/obsessie/obseen
obser (veer %Ops%&r // fix stress, b sound: (ge)observeer(d/-e)
C) o (dium o@ // fix stress and o sound: jodium/podium/rodium and their compounds
oefen uf@n// oefenbroekie/oefeningboek/liggaamsoefeninge
t) oeke (n uk%E // fix e sound: toeken/-ning/kuns-/watertoekenning
@@ -2966,6 +3009,7 @@
odjie OIci
otjie OIci
offi (sier %Of@ // move default stress: offisier and compounds
offisi %Of%iS%i;
ofiel uf'il // franko-/hemo-/nekro-/pedo-/russofiel, etc.
ofilie ufil'i // hemo-/nekro-/pedofilie, etc.
ofobie ufo@b'i // antropo/-xenofobie and many other -fobie words
@@ -3029,6 +3073,7 @@
om (sig %Om // move default stress: omsigtig/-heid
omsingel %OmsIN@l // fix stress: omsingel/fix e sound: omsingelde
_) om (sirkel %Om // move default stress: omsirkel and derivatives
_) omskans %Omskans // fix stress: omskans/-ing/-s
_) om (skep %Om // move default stress: omskep and derivatives
_) om (skr %Om // move default stress: omskryf/omskrewe
_) om (sluier %Om // move default stress: omsluier and derivatives
@@ -3116,7 +3161,6 @@
ontering %Onte@r@N //ontering in compounds montering etc.
_) on (tooCC %On // ontoombaar/-bare/-baarheid/ontoonbaar/-bare/-baarheid/ontoornig/-e/-heid
onvoor (s %Onf%o@r //stress: onvoorsiens, onvoorstelbaar etc.
onvoor (w %Onf%o@r //stress: onvoorwaardelik etc.
onome un'o@m@ // astronome/ekonome/gastronome
onomie unum'i // astronomie/ekonomie/gastronomie
onomies un'o@mis // astronomies/-e/ekonomies/-e/gastronomies/-e
@@ -3139,6 +3183,7 @@
_) on (kruid On // restore default stress: onkruid/-doder and similar
_) on (lus On // restore default stress: onlus/-te/onlusgebied, etc.
_) onnie Oni // onnie/-s; not on- prefix
onom (stoot %On%Om // fix stress: onomstootbaar/onomstootlik and their derivatives
_) on (paar On // restore default stress: onpaar/-skoene
onreg (K Onr&x2 // stress: onreg/te/onregmatig
on (regv++ %On // stress: onregverdig/e/heid
@@ -3258,6 +3303,7 @@
oor (heers %o@r // move default stress
_) oor (hoofs %o@r // move default stress: oorhoofs/-e
oorkoepel o@rk'up@l // stress and pronunc. of el: oorkoepelend/oorkoepeling
oor (koom %o@r // fix stress: (on)oorkoomlik/-e
oor (laaid %o@r // move default stress: oorlaaide/-s
oor (lams %o@r // move default stress: oorlams/-e/-heid
_) oorlede o@rl'e@d@ // stress oorlede/ne/s
@@ -3330,6 +3376,7 @@
parle (ment p%arl@ // move default stress and fix e sound: parlement and compounds, eg.
parme (saan p%arm@ // move default stress: parmesaan(kaas) and compounds
paro (di p%ar%u // fix stress and vowel sounds: parodie and compounds
parti (sa p%art%i // move default stress: partisaan/-ane
parti (tu p%art@ // fix stress and i sound: partituur/partiture and compounds
pase (lla p%as& // fix stress and a sound: pasella(tjie) and compounds
pa (sifi p%a // shorten a sound: pasifis/-me/-ties/-e
@@ -3384,6 +3431,7 @@
ry) pere (_ p@r@ // fix penultimate e sound: rypere
skam) pere (_ p@r@ ?? shorten 1st e in ending
perfek p@rfEk // perfek/-te/-sie/-sionis
pergola p%&rx2o@l%a // move default stress: pergola/-s and compounds
perife (rA@ p%Er@f@ // fix stress and vowel sounds: periferie/-ë/periferaal/-ale
peri (o p%e@r%i // stress: periode/-s and compounds
peripa (t pEripa'' // fix stress and vowel sounds: peripateties/-e/peripatetikus/-se/peripatetici
@@ -3548,6 +3596,7 @@
puntener p%Wnt@ne@r // stress and 2nd e sound: puntenerig and derivatives
pu (pil p%y // move default stress: pupil/-le and compounds
puri (tein p%yr@ // fix stress and i sound: puritein/-e/-se
pêrel p&:r@l // fix e sound: pêrelig/-e


.group q
@@ -3608,6 +3657,7 @@

rivier r@fi:r
_) ri (g rI // stress on 1st slb.: rigting/-loos/-vas, etc.
robot (A ro@bOt_ // fix 2nd o sound, pause: robotarm/-oog/-oë
ron (dawel r%On // move default stress: rondawel/-s/-tjie
rond (borst r%Ont // move default stress: rondborstig/-e
rond (r rOnt // grondreuk/grondrel/rondreis/-rol/-ry
@@ -3626,6 +3676,7 @@
.group re
rea (ks r%ia // reaksie/s/skokreaksie
rea (C r%i%a // reageer/realis/me|ties
re (ageren r%i // fix stress and vowel sounds: reagerend/-e
re (bel r@ // move stress from 1st slb
recce rEki // fix e and c sounds: recce/-s
re (dakC r@ // fix stress and e sound: redaksie/redakteur and compounds
@@ -3657,6 +3708,7 @@
re (kru r@ // move stress from 1st slb
_) re (la r@ // relaas/relase/relasie and compounds
rele (van r@l@ // relevansie/relevant and derivatives
re (liek r@ // fix stress and e sound: reliek/-e and compounds
reli (gi r@l@ // fix stress and e sound: religie/-ë/religieus
reliëf r%e@l%iEf // fix stress and vowel sounds: reliëf and compounds
rem (_ rEm // handrem/kabeltrem/kragrem/noodrem/skyfrem/stadstrem/veiligheidsrem
@@ -3949,7 +4001,7 @@
_) spon (ta sp%On // move default stress: spontaan/spontane
_) sport (@@@ sp''Ort_ // force stress on 1st slb.: sportadministrasie/-konfederasie
spreekwoordeli spr%e@kvo@rd@l@ // move default stress: spreekwoordelik/-e, vs. spreekwoord
springbok spr''INbOk // fix o sound: Springbokafrigter/-agterspeler; fix stress: Springbokklere
springbo (k spr''INbO // fix o sound: Springbokafrigter/-agterspeler; fix stress: Springbokklere
sproke spro@k@ // see rule: pro (CA pr%u : aangesprokene/onbesproke, etc.
self (_ s'&lf // myself/vanself
K) sewe (C s'e@v@ // sewejarige/standerdseweklas
@@ -3983,9 +4035,11 @@
smelt sm&lt
sodom (iet s,o@dOm // fix stress and 2nd o sound: sodomiet/-e
son (g@ sOn // songebakte/-brande/-bruinde/-droogde/songod
son (om s''On_ // fix 1st o sound, pause: sonomspoelde/-omgewe
sosial (i so@Sial' // sosialis/sosialisme/sosialisties
so (v so@ // soveel/sover
soverre so@f'&r@ // stress: se rule: so (v s'o@ // soveel/sover
spas (mod sp%as // move default stress: spasmodies/-e
speku (lA sp%Ek%y // spekulasie/spekuleer/spekulatief
@) sper (a sp@r' //desperate/desperaatheid/rasperagtig
ek) sper (im spEr // eksperimenteer/eksperimenteel
@@ -3994,8 +4048,7 @@
spesialis (A spESialis
spesialis spESal'Is
spesi (f sp%Es%I // spesifiek/spesifiseer
stede (C ste@d@ // fix e sounds of many compounds and derivatives containing stede
ste (laan st@ // fix e sound: eerste-/ag(t)stelaan
spine (t sp%inE // move default stress: spinet/-te and compounds
%Cel) ste (r st& // fix e sound: dubbelster/-re
Cet) ste (rK st& // fix e sound: ballet-/kabaret-/krieketster/-re
dwaal) ste (r st& // fix e sound: dwaalster/-re
@@ -4025,6 +4078,7 @@
suid (oos s%Yyt_ // move default stress and insert short break: suidoos/-te/-lik
suite swit@ // fix -ui-sound: suite/-s and compounds
sukses s%WksEs // sukses/suksesse/suksesvol/reusesukses
sultana s%WltA:n%a // fix stress, keep last a short in compounds: sultana/-s
_) su (meri s%u // fix stress and u sound: sumeries/-e
su (mmier s%W // move default stress: sumier/-e
superintendent s,upr@nt%EndEnt // fix stress and vowel sounds: superintendent and compounds
@@ -4033,7 +4087,7 @@
_) sw sw // fix w sound: words beginning with sw-: swerweling/swetend
swaar (lyw sw%A:r // move default stress: swaarlywig/-e/-heid
swaar (moed sw%A:r // move default stress: swaarmoedig/-e/-heid
swag (K sv'ax2
swag (K svax2 // dorps-/volkswag, etc.
swa (hili sw%a // fix stress and a sound: swahili/-'s
_) swam (A@ swam_ // shorten a sound: swamagtig/-etend/-infeksie
swart (gal sw%art // move default stress: swartgallig
@@ -4062,11 +4116,15 @@
stapel stA:p@l // fix e sound: (op)stapeling/stapelaar
staties st'A:tis
sta (tutA st%a // fix stress and a sound: statute/statutêr
êr) ste (_S3 st@ // preserve stress: elementêrste/primêrste, etc.
stede (C ste@d@ // fix e sounds of many compounds and derivatives containing stede
steding ste@d@N // besteding and compounds
ste (ke_ ste@ // fix e sound: by-/mes-/proefsteke
steke (lig ste@k@ // fix 2nd e sound: stekelig/-e/-heid
C) steker ste@k@r // e sound: (aan/dop/kwaad/rugsteker/-s/-y, etc.
_ne) stel st@l // fix e sound: nestel/-end
wor) stel st@l //worstel e sound in compounds
ste (laan st@ // fix e sound: eerste-/ag(t)stelaan
ste (land st@ // fix e sound: vasteland and several compounds
@) stel (iC st@l // eersteling/gunsteling/wellusteling/worsteling/eerstelig and compounds
&) stele (fo st&l@ // fix e sound in compounds: huis-/werkstelefoon/-fone
@@ -4088,6 +4146,7 @@
mAre) ste (r st& // fix e sound: more/môrester/-re
stereo (ti st%e@r%i%u // fix stress and vowel sounds: stereotiep/-tipe/-tipeer
sterf (K st&rf // fix e sound: uitsterf/weg(ge)sterf/kindersterfte
sterk (_ st&rk // fix e sound: duiwel-/kapitaal-/stormsterk, etc.
@) sterkt st&rkt // compounds ending in sterkte
stero (ïed st%e@r%u; // fix stress and vowel sounds: steroïed/-e
bok) ster (t st&:r // fix e sound: bokstert/-e/-tjie/-s
@@ -4293,6 +4352,7 @@
teater t%iA:t@r // fix stress and e sound: teater and compounds
tea (tra t%i%a // fix stress and vowel sounds: teatraal/teatrale
teen (argu t''e@n // forse stress on 1st slb.: teenargument/-e/-asie
te (dom t@ // fix e sound: idiotedom and similar
teen (oorges t%e@n_ // move default stress: teenoorgestel/-d/-e
@A) te (geC t@ // fix e sound: Hugenotegemeente/stategebou and similar compounds
@C) te (gn t& //tegniek/iese and friends
@@ -4526,6 +4586,7 @@

ve (l f& // maagvel, stress on 1st slb
@) vel (A fe@l // aanbeveling/aanbevelingsbrief
veld (C f&lt // fix d sound: veldreuk/-radio/-rantsoen, etc.
vele f'e@l@
ven (detta v%En // fix stress and v sound: vendatta and compounds
ven (dusie f@n // fix stress and e sound: vendusie and compounds
@@ -4579,12 +4640,14 @@
ver (reik f&:r // fix stress and e sound: verreikend/-e
@) vers (_ f&rs // teksvers/slotvers/kindervers and similar
vers (album f&:rs_ // fix e sound: versalbum/-s
_) vers (b f&rs // fix e sound: versbundel/-bou/-boek
@) vers (e_ f&rs // plurals of words like the above
_) versf f''&rsf // fix stress and e sound: versfragment/-e
ver (sie_ f&:r //words ending in versie
ver (sies_ f&:r //words ending in versies
vers (panor f&:rs // fix stress and e sound: verspanorama/-s
ver (spring f''&:r // fix stress and e sound: verspring/-er/-kompetisie
vers (v f&rs // fix e sound: versvorm/versvoete
verf (i f@rf //verfilm and compounds
ver (flenC f@r // verflenter and derivatives/verflens; see rule: verf (C f&rf
ver (fris f@r // verfris and derivatives; see rule: verf (C f&rf
@@ -4692,7 +4755,8 @@
voort (v@@ f%o@rt // voortvarend/voortvlugtige
_) vooruit fo@r_'Yyt // vooruit/vooruitsig/vooruitbeplanning
vooruit (strew fo@rYyt' // change stress
voorwaard (_ f%o@rvA:rd // stress: (on)voorwaardelik
voorwaarde (_ f%o@rvA:rd@ // stress: (on)voorwaardelik
voorwaarde (_N fo@rvA:rd@ // fix stress: voorwaarde/-s
vor (_ _^_EN //words ending in vor is English
vorm fOr@m
vorsti (n fOrst'I // fix stress: vorstin/-ne/-netjie and compounds
@@ -4740,8 +4804,10 @@
&s) w (eefs v // fix w sound: compounds like -sweefsel/tuisweefstof, etc.
@s) w (enn v // fix w sound: beurs-/groeps-/klas-/naas-/pryswenner/-wennende
_) web vEb //webadres/se, webarea etc.
As) weer (_ ve@r // fix w sound: kusweer/ysweer, etc.
AAs) w (enk v // fix w sound: kombuis-/nuus-/sweiswenk/-e
plaas) w (erC v // fix w sound: plaaswerf/-werwe
s) w (oeling v // fix w sound: koors-/geesteswoelinge
s) w (ou v // fix w sound: bamboeswoud/keerkringswoud and similar
s) w (r v // fix w sound: skeepswrak/sielswroeging/aardswreedheid
wreed (a vre@t_ // fix d sound and insert short pause: wreedaard/-s
@@ -4779,6 +4845,7 @@
weer (leg w%e@r // move default stress: (on)weerlegbaar
weer (strew v%e@r // move default stress: weerstrewig/-e/-heid
@) wees (_ ve@s // fix w sound: siekwees/volkwees
weet (gierig v%e@t // move default stress: weetgierig/-e/-heid
@) weg (_ v&x2 // blindweg/botweg and many similar
spoor) weg v&x2 // fix e sound: spoorwegaanleg/-aansluiting/-amptenaar/-eiendom/-inkomste/-ongeluk...
_) wegge (C@P5 v'&x2@ // prefix: weggeja and similar
@@ -4917,6 +4984,7 @@
.group y
y eI
%C) y (_ _^_EN // English: Betty/Eddy/Harry/Molly/Penny/Tommy
skapp) y (_ %eI // compounds like: handels-/versekerings-/verskepingsmaatskappy
york j'O:k //new-yorkse and may be others
ysterre (lin eIst@re@ // fix e sound: ysterreling/-s


+ 12
- 4
dictsource/da_list View File

@@ -1,4 +1,4 @@

// This file is UTF8 encoded
// Spelling-to-phoneme words for Danish

@@ -29,7 +29,7 @@ _ced s@d'ila
_cir s'3:kVmfl,Eks
_dia 'umlaut
_dot wiDd'0tabVv
_grv gr'a:v
_grv aks'aN gr'a:v
_hac h'atS,Ek
_mcn m'akr,0n
_ogo '0g0n,Ek
@@ -61,17 +61,22 @@ _#32 blank
_, koma:
_; se:mi:ko:lVn
_: ko:lVn
_. pun^tum
_. puNtum
_? spWrgsmVlstajn
_! udRVbstejn
_- binnesdrai
__ bOndsdrai
__ b'Onsdrai
& ou
£ pun?
€ euro
© kopyrajt
÷ divid'eReD meD
= l'imeD
# n'OmV
§ paragr'af



// numbers
_0 'nOl
_1 'e:n
@@ -215,6 +220,7 @@ k kO:
l El
m Em
n En
o o
p pe:
q ku:
r Er
@@ -233,6 +239,7 @@ egen a:j@n
eget a:j@D
egne a:in@
enter entV
ide id'e // idea
igen igen
Ny ny // new
også Vs@ // also
@@ -240,3 +247,4 @@ havde h'aD@ // had
sagde sa@ // said
sig sAi // oneself



+ 703
- 574
dictsource/da_rules
File diff suppressed because it is too large
View File


+ 385
- 384
dictsource/dict_phonemes View File

@@ -1,86 +1,32 @@
Phonemes which are used in the *_rules and *_list files


Dictionary zhy_dict

a aa aai aan aau ai au e
ei eo eoi eu i iu o oe
oi ong ou u ui yu

b c d f g h j k
l m n N p r s t
tS v w z


Dictionary fr_dict

@ @- @2 a A~ e E E2
E: E~ i i- i: o O o2
O2 o3 O~ u u: W w^i wA
W~ y Y

: b d dZ f g h j
k l m n N n2 n^ p
p2 r R r2 s S t t2
t3 tS v w z Z z2 z3


Dictionary nl_dict

8 @ @- A a: E e: EI
eU i I O O: o: u VU
Wy y Y: yU

* : ; b C d f g
h j k l m n N n^
p Q r s S t tS v
v2 w x z


Dictionary jbo_dict

@ a aI aU e eI i l-
o oI r- u

- b d dZ f g h j
k l m n N p R s
S t tS v w x z Z


Dictionary hu_dict

A a: E e: i i: o o:
u u: Y y y: Y:

: b c C d dZ f g
h j J k l l^ m n
N n^ p R R2 s S s2
t tS ts v z Z


Dictionary hy_dict
Dictionary af_dict

@ a aI e eI i i@ o
u W y
& &: 3: @ @- @L @U a
A: aI AI aU A~ E e: e@
eI e~ I i iu O O: o@
OI oI o~ u uI W y Y@
Yy

** b c d dZ dz f g
h j k k# l m n p
p# r R r" s S t t#
tS ts ts# v X z Z
- : ; ? b c d dZ
f g h j k l L m
n N p r s S t T
tS v w x x2 z Z


Dictionary zh_dict
Dictionary bn_dict

@ @r a A ai Au E ei
i i. i[ iA iE io iou N-
o o- ong ou u u@ ua uai
uei uo y y& y@ yE yi yu
& a a: a~ e E e~ i
I i: i:~ i~ l- o O o:
O~ o~ r- U u u: u:~ u~
V

; C f h j k kh l
L m n N p ph q r
R s s. S; t th ts ts.
ts. tS; tS; tsh v w x X
z.
* b B bh c C ch d
d. dh dh. g gh h j J
Jh k kh l m n N n.
n^ p ph Q r r. s S
s. t t. th th. tS x z


Dictionary ca_dict
@@ -95,29 +41,55 @@ R2 s S; t T ts tS; v
v# w z Z Z;


Dictionary af_dict
Dictionary cs_dict

& &: 3: @ @- @L @U a
A: aI AI aU A~ E e: e@
eI e~ I i iu O O: o@
OI oI o~ u uI W y Y@
Yy
@- a a: aU e e: eI eU
i i: l- o o: oU r- u
u:

- : ; ? b c d dZ
f g h j k l L m
n N p r s S t T
tS v w x x2 z Z
* ; b c d dZ dz f
g h j J k l l^ m
n N n^ p r R R^ R^/
s S t tS ts v x z
Z


Dictionary id_dict
Dictionary cy_dict

@ a aI aU e E E2 i
o O u
@ @- @I @Y a A: aI aU
AY aY E e: eU I i: Iu
O o: OI OY U u: uY V
Y y: Yu

* : ? b d dZ f g
h j k l m n N n^
p r R R2 s S t tS
v w x z
: b C d D dZ f g
h j k l L m n N
p r s S t T v w
x z


Dictionary da_dict

& 0 3 @ @- a A e
E i o O u V W y
Y

* - : ; ? b d D
dZ f g h j k l L
m n N p r R s S
t tS v w


Dictionary de_dict

3 @ @- a A A: aI aU
E E2 E: e: EI I i2 i:
O o: OY U u: W y y:
Y:

* : ; b C C2 d D
dZ f g h j k l m
n N p pF r s S t
tS ts v x z Z


Dictionary el_dict
@@ -147,17 +119,63 @@ s S t T t2 tS v w
x z Z


Dictionary cs_dict
Dictionary eo_dict

@- a a: aU e e: eI eU
i i: l- o o: oU r- u
u:
@- a aI aU e eI eU i
o oI u uI

* ; b c d dZ dz f
g h j J k l l^ m
n N n^ p r R R^ R^/
s S t tS ts v x z
Z
* - b d dZ f g h
j k l m n p r R
s S t T tS ts v w
x z Z


Dictionary es_dict

a aI aU e E eI eU i
o O oI u

* ** : b B d D f
g j J J^ k l m n
N n^ p Q R R2 s t
T tS v v# w x z


Dictionary eu_dict

a aI aU e eI eU i o
oI u Y

* ** : ; b B c d
D f g h j J k l
l^ m n n^ p Q r R
s S t tS ts tz v w
x z


Dictionary fi_dict

& &i &y a a2 ai au e
ei eu ey i I ie iu iy
o oi ou u ui uo Y y
Yi yi Yy yY

: b d f g h j k
l m n N p r s S
s2 t v w Z


Dictionary fr_dict

@ @- @2 a A~ e E E2
E: E~ i i- i: o O o2
O2 o3 O~ u u: W w^i wA
W~ y Y

: b d dZ f g h j
k l m n N n2 n^ p
p2 r R r2 s S t t2
t3 tS v w z Z z2 z3


Dictionary grc_dict
@@ -171,19 +189,6 @@ l m n N p R s t
T v x z


Dictionary cy_dict

@ @- @I @Y a A: aI aU
AY aY E e: eU I i: Iu
O o: OI OY U u: uY V
Y y: Yu

: b C d D dZ f g
h j k l L m n N
p r s S t T v w
x z


Dictionary hbs_dict

& @ @2 a A a: aI aU
@@ -196,127 +201,122 @@ N n^ p r R R2 s S
t tS ts tS; v x z Z


Dictionary it_dict
Dictionary hi_dict

@- a a/ aI aU e E eI
i I o O u
@ @- @2 @3 a a: aI aU
e E e: E: E~ i I i:
l- o O o: O: O~ o~ r-
U u: u~ V

* : ; b d dZ f g
h j k l l^ m n N
n^ p r R s S t tS
ts v w w2 z
- : b bh c ch d d.
dh dh. f g gh h H j
J Jh k kh l l. m n
N n. n^ p ph Q q r
r. s S s. t T t. th
th. v w x z


Dictionary sk_dict
Dictionary hu_dict

& @- a a: e e: i i:
l- l: o o: oU r- r: u
u:
A a: E e: i i: o o:
u u: Y y y: Y:

* ; b d d; dZ dz f
g h j k l l^ m n
N n^ p r R R^ R^/ s
S t t; tS ts v x z
Z
: b c C d dZ f g
h j J k l l^ m n
N n^ p R R2 s S s2
t tS ts v z Z


Dictionary ku_dict
Dictionary hy_dict

8 a e E E# eI eU i
I o u U y
@ a aI e eI i i@ o
u W y

* : b c d dZ f g
h j J k l m n p
q r R s S t tS v
w x z Z
** b c d dZ dz f g
h j k k# l m n p
p# r R r" s S t t#
tS ts ts# v X z Z


Dictionary sq_dict
Dictionary id_dict

@ @/ a A a/ aI E e
eI i I I# O OI u V
y yE
@ a aI aU e E E2 i
o O u

** : ; b c d D dZ
dz dZ; f g h j k l
L ll m n n^ p r R
R2 s S t T tS ts v
w z Z
* : ? b d dZ f g
h j k l m n N n^
p r R R2 s S t tS
v w x z


Dictionary sw_dict
Dictionary is_dict

@- a a/ e i m- n- N-
o u
& @- a aI aU e E eI
i I o O oU oU2 u W
y y# Yy

* : b d D f g h
j J k l m n N n^
p Q R s S t T tS
v w x z
* ** : ; 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


Dictionary fi_dict
Dictionary it_dict

& &i &y a a2 ai au e
ei eu ey i I ie iu iy
o oi ou u ui uo Y y
Yi yi Yy yY
@- a a/ aI aU e E eI
i I o O u

: b d f g h j k
l m n N p r s S
s2 t v w Z
* : ; b d dZ f g
h j k l l^ m n N
n^ p r R s S t tS
ts v w w2 z


Dictionary pl_dict
Dictionary jbo_dict

a E E# E~ i O O~ u
y
@ a aI aU e eI i l-
o oI r- u

: ; b c C d d; dZ
dz dz; f g h j k l
m n N n^ p r R s
S s; S; t t; tS ts ts;
tS; v w x z Z Z;
- b d dZ f g h j
k l m n N p R s
S t tS v w x z Z


Dictionary no_dict
Dictionary kn_dict

@ @2 a A a: A: AI aI
aU E E: e: I i: O o:
OI U u- u-: u-I u: W y
y: Y: Yy
a a: aI aU e E e: i
I i: o o: r- u u: V
y

: ; b d f g h j
k l m n N p r R
s S s; t v w x z
: b bh c ch d d. dh
dh. dZ f g gh h j J
Jh k kh l l. m n N
n. n^ p ph R R2 s S
s. S; t t. th th. tS v
w z


Dictionary vi_dict
Dictionary ku_dict

@ @: @:I @:U @I @U a a:
a:I a:U aI aU E e eU EU
i i@ iU O o OI oI u
u@ uI y y@ yI
8 a e E E# eI eU i
I o u U y

b c d D f g h j
J k kh l m n N n^
p Q r s s. t t[ ts;
tS; v w x z Z z.
* : b c d dZ f g
h j J k l m n p
q r R s S t tS v
w x z Z


Dictionary ro_dict
Dictionary la_dict

@ @- @I @U a aI aU e
ea eI eo eU i i/ I^ iI
iU o O Oa oI oU u uI
y Y yI yU
@- a a: aI aU E e: EU
I i: O o: OI U u: y
y:

* *; - b b; c C d
d; dZ f f; g h j k
l l; m m; n N n; p
p; r s S S; t t; tS
ts ts; v v; w w2 x z
Z z; Z;
* : ; <h> ? b d f
g h j k l m n N
p r R s t w z


Dictionary lv_dict
@@ -331,281 +331,282 @@ n^ p r R R2 s S t
tS ts v z Z


Dictionary pt_dict
Dictionary mk_dict

& &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU
i I i/ iU o O oI OI
o~ u U uI u~ y
& @ @- @2 a A a: E
e e: i I i: l- o o:
oU r- u u:

* : ; b C d dZ f
g h j k l l^ m n
N n^ p Q r R r- s
S s# s; t T tS ts v
w x z Z
* b d dZ dz dZ; f g
h j k k^ l l^ m n
N n^ p r R s S t
tS ts tS; v x z Z


Dictionary tr_dict
Dictionary ml_dict

a e E i I o O u
U u# W y Y
a a: aI aU e E e: i
I i: o o: r- u u: V
y

* : b c d dZ f g
h j J k l m n p
Q r R s S t tS v
w z Z
: b bh c ch d d. dh
dh. dZ f g gh h j J
Jh k kh l l. m n N
n. n^ p ph R R2 s s.
S; t t. th th. tS v w
z z.


Dictionary ru_dict
Dictionary mn_dict

8 @- A a E e E# E2
E3 i I I# I2 I3 I^ ja
ju o O u u" u# V V#
y Y
a e i o O o: U u

* ; b d d; dZ; f g
j k l l^ m m; n n^
p r R s S s; S; t
t; ts ts; tS; v x z Z
z; Z;
: ; c f g j k L
m n p p# R s S t
t# tS ts ts# w x


Dictionary eo_dict
Dictionary ne_dict

@- a aI aU e eI eU i
o oI u uI
@ @/ @2 @3 a aI aU a~
e E eI eU e~ E~ i I
i~ l- o O o: oI oU O~
o~ r- u uI u~ V VI VU
V~

* - b d dZ f g h
j k l m n p r R
s S t T tS ts v w
x z Z
- : b bh c ch d d.
dh f g gh h H j J
Jh k kh l l. m n N
n. n^ p ph Q q r r.
s S s. t T t. th v
w x z z.


Dictionary mk_dict
Dictionary nl_dict

& @ @- @2 a A a: E
e e: i I i: l- o o:
oU r- u u:
8 @ @- A a: E e: EI
eU i I O O: o: u VU
Wy y Y: yU

* b d dZ dz dZ; f g
h j k k^ l l^ m n
N n^ p r R s S t
tS ts tS; v x z Z
* : ; b C d f g
h j k l m n N n^
p Q r s S t tS v
v2 w x z


Dictionary es_dict
Dictionary no_dict

a aI aU e E eI eU i
o O oI u
@ @2 a A a: A: AI aI
aU E E: e: I i: O o:
OI U u- u-: u-I u: W y
y: Y: Yy

* ** : b B d D f
g j J J^ k l m n
N n^ p Q R R2 s t
T tS v v# w x z
: ; b d f g h j
k l m n N p r R
s S s; t v w x z


Dictionary is_dict
Dictionary pap_dict

& @- a aI aU e E eI
i I o O oU oU2 u W
y y# Yy
a a/ aI e E eI i o
O u y Y

* ** : ; 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
: ? b d dZ f g h
j k l m n N n^ p
R s S t tS v w x
z Z


Dictionary da_dict
Dictionary pa_dict

& 0 3 @ @- a A e
E i o O u V W y
Y
@ a a~ e E e~ E~ i
I i~ I~ o O O~ o~ r-
U u u~ U~ V V~

* - : ; ? b d D
dZ f g h j k l L
m n N n^ p r R s
S t tS v w
: ; b bh c ch d d.
dh dh. f g gh h H j
J Jh k kh l l. m n
N n. n^ p ph Q R R2
s S t t. th th. v x
z


Dictionary de_dict
Dictionary pl_dict

3 @ @- a A A: aI aU
E E2 E: e: EI I i2 i:
O o: OY U u: W y y:
Y:
a E E# E~ i O O~ u
y

* : ; b C C2 d D
dZ f g h j k l m
n N p pF r s S t
tS ts v x z Z
: ; b c C d d; dZ
dz dz; f g h j k l
m n N n^ p r R s
S s; S; t t; tS ts ts;
tS; v w x z Z Z;


Dictionary sv_dict
Dictionary prs_dict

8 @ a a2 A: E E- e:
E: I i: O o: U u- u:
W y y: Y:
@ A i o

: ; b d f g h j
k l m n N p R s
S s. S; sx t v w z
b d h l t X


Dictionary la_dict
Dictionary pt_dict

@- a a: aI aU E e: EU
I i: O o: OI U u: y
y:
& &/ &U~ &~ @ @- a A
aI aU e E eI EI eU EU
i I i/ iU o O oI OI
o~ u U uI u~ y

* : ; <h> ? b d f
g h j k l m n N
p r R s t w z
* : ; b C d dZ f
g h j k l l^ m n
N n^ p Q r R r- s
S s# s; t T tS ts v
w x z Z


Dictionary hi_dict
Dictionary ro_dict

@ @- @2 @3 a a: aI aU
e E e: E: E~ i I i:
l- o O o: O: O~ o~ r-
U u: u~ V
@ @- @I @U a aI aU e
ea eI eo eU i i/ I^ iI
iU o O Oa oI oU u uI
y Y yI yU

- : b bh c ch d d.
dh dh. f g gh h H j
J Jh k kh l l. m n
N n. n^ p ph Q q r
r. s S s. t T t. th
th. v w x z
* *; - b b; c C d
d; dZ f f; g h j k
l l; m m; n N n; p
p; r s S S; t t; tS
ts ts; v v; w w2 x z
Z z; Z;


Dictionary ta_dict
Dictionary ru_dict

a a: aI aU e E e: i
I i: o o: U u u: V
8 @- A a E e E# E2
E3 i I I# I2 I3 I^ ja
ju o O u u" u# V V#
y Y

: ; b C d d. dZ f
g h j k l l. m n
N n. n^ p r R s S
s. t t. th tS v w z
z.
* ; b d d; dZ; f g
j k l l^ m m; n n^
p r R s S s; S; t
t; ts ts; tS; v x z Z
z; Z;


Dictionary bn_dict
Dictionary rw_dict

& a a: a~ e E e~ i
I i: i:~ i~ l- o O o:
O~ o~ r- U u u: u:~ u~
V
a e i o u

* b B bh c C ch d
d. dh dh. g gh h j J
Jh k kh l m n N n.
n^ p ph Q r r. s S
s. t t. th th. tS x z
* : b B c d dZ f
g h j J k l m n
N n^ p q R s S S;
t tS v w x z


Dictionary eu_dict
Dictionary sk_dict

a aI aU e eI eU i o
oI u Y
& @- a a: e e: i i:
l- l: o o: oU r- r: u
u:

* ** : ; b B c d
D f g h j J k l
l^ m n n^ p Q r R
s S t tS ts tz v w
x z
* ; b d d; dZ dz f
g h j k l l^ m n
N n^ p r R R^ R^/ s
S t t; tS ts v x z
Z


Dictionary kn_dict
Dictionary sq_dict

a a: aI aU e E e: i
I i: o o: r- u u: V
y
@ @/ a A a/ aI E e
eI i I I# O OI u V
y yE

: b bh c ch d d. dh
dh. dZ f g gh h j J
Jh k kh l l. m n N
n. n^ p ph R R2 s S
s. S; t t. th th. tS v
w z
** : ; b c d D dZ
dz dZ; f g h j k l
L ll m n n^ p r R
R2 s S t T tS ts v
w z Z


Dictionary ml_dict
Dictionary sv_dict

a a: aI aU e E e: i
I i: o o: r- u u: V
y
8 @ a a2 A: E E- e:
E: I i: O o: U u- u:
W y y: Y:

: b bh c ch d d. dh
dh. dZ f g gh h j J
Jh k kh l l. m n N
n. n^ p ph R R2 s s.
S; t t. th th. tS v w
z z.
: ; b d f g h j
k l m n N p R s
S s. S; sx t v w z


Dictionary mn_dict
Dictionary sw_dict

a e i o O o: U u
@- a a/ e i m- n- N-
o u

: ; c f g j k L
m n p p# R s S t
t# tS ts ts# w x
* : b d D f g h
j J k l m n N n^
p Q R s S t T tS
v w x z


Dictionary ne_dict
Dictionary ta_dict

@ @/ @2 @3 a aI aU a~
e E eI eU e~ E~ i I
i~ l- o O o: oI oU O~
o~ r- u uI u~ V VI VU
V~
a a: aI aU e E e: i
I i: o o: U u u: V

- : b bh c ch d d.
dh f g gh h H j J
Jh k kh l l. m n N
n. n^ p ph Q q r r.
s S s. t T t. th v
w x z z.
: ; b C d d. dZ f
g h H j k l l. m
n N n. n^ p r R s
S s. t t. th tS v w
z z.


Dictionary pap_dict
Dictionary tr_dict

a a/ aI e E eI i o
O u y Y
a e E i I o O u
U u# W y Y

: ? b d dZ f g h
j k l m n N n^ p
R s S t tS v w x
z Z
* : b c d dZ f g
h j J k l m n p
Q r R s S t tS v
w z Z


Dictionary rw_dict
Dictionary vi_dict

a e i o u
@ @: @:I @:U @I @U a a:
a:I a:U aI aU E e eU EU
i i@ iU O o OI oI u
u@ uI y y@ yI

* : b B c d dZ f
g h j J k l m n
N n^ p q R s S S;
t tS v w x z
b c d D f g h j
J k kh l m n N n^
p Q r s s. t t[ ts;
tS; v w x z Z z.


Dictionary pa_dict
Dictionary zh_dict

@ a a~ e E e~ E~ i
I i~ I~ o O O~ o~ r-
U u u~ U~ V V~
@ @r a A ai Au E ei
i i. i[ iA iE io iou N-
o o- ong ou u u@ ua uai
uei uo y y& y@ yE yi yu

: ; b bh c ch d d.
dh dh. f g gh H j J
Jh k kh l l. m n N
n. n^ p ph Q R s S
t t. th th. v x z
(u) ; C f h j k kh
l L m n N p ph q
r s s. S; t th ts ts.
ts. tS; tS; tsh v w x X
z.


Dictionary prs_dict
Dictionary zhy_dict

@ A i o
a aa aai aan aau ai au e
ei eo eoi eu i iu o oe
oi ong ou u ui yu

b d h l t X
b c d f g h j k
l m n N p r s t
tS v w z

+ 7
- 6
dictsource/en_list View File

@@ -98,6 +98,7 @@ _?A l,Et3
_?? sImb@L
_#9 tab
_#32 speIs
… _::d%0td,0t // for elipsis or ... while reading

_  hA@dspeIs // U+00A0 no-break-space
_! Ekskl@m'eIS@n
@@ -436,7 +437,7 @@ abstract a2bstr'akt $verb
academe a2kad@mI
access aksEs $onlys
access aksEs $verb
accouche a2ku:S
accouchement a2ku:SmO~
acer eIs3
aces eIsI2z
acetylene a2sEt@li:n
@@ -1519,6 +1520,8 @@ motif moUt'i:f
moustache m@st'aaS
mouths maUDz $only
movies mu:vI2z
multitude $1
multiplexer $1
mundane $2
murmur m3:m3
?5 murmur mVRm3
@@ -1553,7 +1556,7 @@ nobody 'noUb0dI
nocturnal $2
nomenclature n@mENkl@tS3
nonsense n0ns@ns
nonetheless n0nD@l'Es
nonetheless nVnD@l'Es
nosedive noUzdaIv
not noUt // for noted, notable, etc
nott n0t
@@ -1655,6 +1658,7 @@ pasting peIstI2N
pastry peIstrI
pate pateI
pathos peIT0s
paypal peIpal
pear pe@
peculiar pI2kju:lI3
pedalo pEd@loU
@@ -2609,8 +2613,6 @@ Graeme greI@m
Graham greI@m
Hadrian heIdri:@n
Harriet hari@t
Hugh hju:
Hughes hju:z
Huw hju:
Iain i:@n
Ian i:@n
@@ -3045,7 +3047,7 @@ your jO@ $u $nounf $only
their De@ $u $nounf $only
theirs De@z

none n0n
none nVn
noone noUw0n
anyone EnIw0n
everyone EvrIw0n
@@ -3192,7 +3194,6 @@ like laIk $strend2
?3 err e@
?3 fortune fO@tS@n
?3 garage ga2rA:Z
?3 happy hapi:
?3 herb 3:b
?3 hurricane h3:@keIn
?3 investigative Inv,EstI2g'eItIv

+ 17
- 7
dictsource/en_rules View File

@@ -878,8 +878,9 @@
ch) ar (it ar
ph) ar (i ar
m) ar (i @r
m) ar (ig ar
m) ar (inaC ar
_m) ar (i ar
m) ar (in @r
_m) ar (inaC ar
m) ar (iner ar
m) ar (io ar
htm) ar e@
@@ -892,7 +893,7 @@
&) ar (in_ @r
v) ar (iA e@r
@) ar (ity ar
ar (iu 'e@r
ar (iu+ 'e@r
arom (at a2roUm
arre (_ A@
arred (_ A@d
@@ -1286,6 +1287,7 @@
ch (é+ S
ch (ef S
ch (em k
chement (_ =SmO~
ch (ev S
chez SeI
Ca) ch (e S
@@ -2016,6 +2018,7 @@
en (core 0n
&) ency (_ @ns%I
ency (cli %EnsI
en (dA_ 'En
_) en (d En
_) en (da %En
eg) en (d @n
@@ -2786,7 +2789,7 @@
p) ie (_ aI
pp) ie (_ I
ie (f i:
iege i:dZ
ieg (e# i:dZ
ie (go I'eI
ieh (C i:
iei (_ i:aI
@@ -2820,7 +2823,7 @@
ie (t aI@
@) ie (th i@
iesta i:'Est@
iette I2'Et
ie (tt I2'E
@) iety 'aI@t%I
l) ieu u:
l) ieu (te %Ef
@@ -3356,6 +3359,7 @@
@) most(_S4 moUst
&) mouth (_ m@T
_) multi mVltI
_) multi (@@P5 m,VltI

.group mi
millen mI2lEn
@@ -3483,7 +3487,7 @@
oa oU
oar (_ o@
oar o@
o (atia oU
cr) o (at oU
br) oa (d O:
o (ba oU
t) o (bacc @
@@ -3894,6 +3898,7 @@
@) or (ic_ '0r
or (ig 0r
&) ored (_ @d
h) ored (_S1 d
_f) ore (C O@
f) ore (clo %o@
f) ore (st 0rI
@@ -4619,6 +4624,7 @@
_ca) su Zu:
_) sus (A su:z
su (al Zu:
n) su (al sju:
_) su (b sV
su (bdue s%V
su (bmerg s@
@@ -4704,6 +4710,7 @@
tsch tS
_) two tu:
ttu (r t@
@) tu (al tSu:
@) tu (late =tSU
@) tur (A tS@r
@) tur (al_ tS=@r
@@ -4817,6 +4824,7 @@
f) u (gal 'ju:
ug (er_ u:g
s) ugge (st @dZE
h) ugh ju:
mp) ug (n ju:
uh (C u:
u (i ju:
@@ -4847,6 +4855,7 @@
_f) ully UlI
f) ull Ul
p) ull Ul
_) ultra (@ ,Ultra
u (ly u:
d) u (ly ju:
u (lul V
@@ -4859,8 +4868,8 @@
uoy OI
_) us (_ Vz
_) us (A ju:z
usu (al ju:Zu:
&) us (_ @s
usua (l ju:Zu:
u (sh V
b) u (sh U
c) u (sh U
@@ -5246,6 +5255,7 @@
En (_ @n
?8 En (_ En
En (atA @n
En (dA_ 'En
E (ndous E
Ener (_ _n@
Ening (_ _nI2N

+ 8
- 9
dictsource/fr_list View File

@@ -24,7 +24,7 @@

// 2006-11-18 Gilles Casse <[email protected]>
//
// Updated 2009-10-09 Michel Such <[email protected]>
// Updated 2009-10-26 Michel Such <[email protected]>
//
// * Numbers, a few abbreviations and exceptions.
//
@@ -364,10 +364,11 @@ afin afE~ $u+ $brk
avant $u+
après $u+
(temps en temps) tA~zA~tA~
alors alOr $u+
depuis $u+
ainsi $u+
alors alOr $u+
aussi $u+
encore $u+
depuis $u+


certes $u+
@@ -571,11 +572,8 @@ quelques kElk=@z2 $u+
tel $u+
telle $u+
telles $u+
tout t'ut2 $u+
toute t'ut $u+
toutes t'utz2 $u+
tous $u+
rien Ri-'E~n2 $u+
tout t'ut2
rien Ri-'E~n2

// Letters which can be words
//===========================
@@ -632,7 +630,7 @@ anis anis
arte arte
auvent ovA~
beta beta
bien bi-E~n2 $u+
bien bi-E~n2
bis bis
bissus bisys
blues _^_en
@@ -899,3 +897,4 @@ venezuela venezyela
wallis wAlis
futuna futuna
zimbabwe zimbabwe


+ 1
- 0
dictsource/fr_rules View File

@@ -1477,3 +1477,4 @@ _r) w (an u // Rwanda





+ 424
- 149
dictsource/hu_list View File

@@ -77,36 +77,135 @@ _0M1o EzR2Edik
_1M1o EzR2Edik
_2M1o ke:tEzR2Edik

_0-a A
_0-i Ei
_0-e E
_0-án a:n
_0-ára a:R2A
_0-ére e:R2E
_0-ra a:R2A
_0-re e:R2E
_0-én e:n
_0-ai Ai
_0-ei Ei
(1-e) elseje $text
(1-én) elsején $text
(1-jén) elsején $text
(1-i) elsejei $text
(1-ei) elsejei $text
(1-ére) elsejére $text
(1-re) elsejére $text
(2-i) másodikai $text
(3-i) harmadikai $text
(6-i) hatodikai $text
(8-i) nyolcadikai $text
(13-i) tizenharmadikai $text
(16-i) tizenhatodikai $text
(18-i) tizennyolcadikai $text
(20-i) huszadikai $text
(23-i) huszonharmadikai $text
(26-i) huszonhatodikai $text
(28-i) huszonnyolcadikai $text
(30-i) harmincadikai $text

// $alt2 means these rules only apply if the previous word
// has $alt1 (language specific). $text implies $only (for this group only)

_0-a A $alt2
_0-i Ei $alt2
_0-e E $alt2
_0-án a:n $alt2
_0-ára a:R2A $alt2
_0-ére e:R2E $alt2
_0-ra a:R2A $alt2
_0-re e:R2E $alt2
_0-én e:n $alt2
_0-ai Ai $alt2
_0-ei Ei $alt2
_0-től e:tY:l $alt2
_0-tól a:to:l $alt2
_0-ig e:ig $alt2 //special date ordinal numbers for example elsejéig, negyedikéig etc.

(1-e) elseje $text $alt2
(1-én) elsején $text $alt2
(1-jén) elsején $text $alt2
(1-i) elsejei $text $alt2
(1-ei) elsejei $text $alt2
(1-ére) elsejére $text $alt2
(1-re) elsejére $text $alt2
(1-től) elsejétől $text $alt2
(1-ig) elsejéig $text $alt2

(2-i) másodikai $text $alt2
(2-ig) másodikáig $text $alt2
(3-i) hAR2_mAdikAi $alt2
(3-ig) harmadikáig $text $alt2
(6-i) hAtodikAi $alt2
(6-ig) hatodikáig $text $alt2
(8-i) n^'oltsAdikAi $alt2
(8-ig) nyolcadikáig $text $alt2
(13-ig) tizenharmadikáig $text $alt2
(16-ig) tizenhatodikáig $text $alt2
(18-ig) tizennyolcadikáig $text $alt2
(20-i) huszadikai $text $alt2

(20-ig) huszadikáig $text $alt2
(23-ig) huszonharmadikáig $text $alt2
(26-ig) huszonhatodikáig $text $alt2
(28-ig) huszonnyolcadikáig $text $alt2
(30-ig) harmincadikáig $text $alt2
(30-i) harmincadikai $text $alt2



// these exceptions only for 0, not for other numbers ending in '0'
(0-ás) nul:a:S
(0-t) nul:a:t
(0-val) nul:a:vAl

// entries with a single digit such as (2-i) also apply to 22, 32, etc, unless $only

// with these suffixes, use [J:] not [J]
(1-es) EJ:ES
(1-et) EJ:Et
(1-est) EJ:ESt
(1-esét) EJ:ESe:t
(1-esével) EJ:ESe:vEl
(1-essel) EJ:ES:El
(1-eseik) EJ:ESEik
(1-eseikkel) EJ:ESEik:El
(1-eseiket) EJ:ESEikEt
(1-esekkel) EJ:ESEk:El
(1-esek) EJ:ESEk
(1-el) EJ:El

(2-es) kEt:ES
(2-est) kEt:ESt
(2-essel) kEt:ES:El
(2-őt) kEt:Y:t
(2-esen) kEt:ESEn
(2-esével) kEt:ESe:vEl
(2-n) kEt:Y:n
(2-esekkel) kEt:ESEk:El
(2-eseket) kEt:ESEkEt
(2-eseik) kEt:ESEik

(3-as) ha:R2mAS
(3-asának) ha:R2mASa:nAk
(3-ason) ha:R2mASon
(3-assal) ha:R2mAS:Al
(3-asával) ha:R2mASa:vAl
(3-ast) ha:R2mASt
(3-at) ha:R2mAt
(3-al) ha:R2om:Al

(4-el) ne:J:El //4 number suffixes (now contains one suffix)
(5-tel) Yt:El
(5-el) Yt:El
(6-al) hAt:Al
(6-tal) hAt:Al

(7-es) hEtES
(7-est) hEtESt
(7-esek) hEtESEk
(7-eseket) hEtESEkEt
(7-esekkel) hEtESEk:El
(7-esbe) hEtESbE
(7-esben) hEtESbEn
(7-esük) hEtESyk
(7-tel) he:t:El
(7-el) he:t:El

(10-es) tizES // use [i] not [i:]
(10-est) tizESt
(10-essel) tizES:El
(10-esével) tizESe:vEl

(20-as) husAS // use [u] not [u:]
(20-ast) husASt
(20-assal) husAS:Al
(20-asával) husASa:vAl

//special number exceptions
(10-el) ti:zzEl
(20-al) hu:s:Al
(30-al) hAR2mints:Al
(40-el) nEJvEn:El
(50-el) YtvEn:El
(60-al) hAtvAn:Al
(70-el) hEtvEn:El
(80-al) n^oltsvAn:Al
(90-el) kilEntsvEn:El

// These words mean that a dot after number, immediately preceding, does not mean an ordinal number
január $alt
@@ -126,6 +225,7 @@ december $alt
//The following 12 row contains shorter hungarian month names
jan $alt
feb $alt
febr $alt
márc $alt
ápr $alt
máj $alt
@@ -172,13 +272,30 @@ _cap n'AJ_|
// Abbreviations
ÁNTSZ a:Ente:Es $allcaps
km kilo:me:tER2
GYSEV JESEv $allcaps
GYESEV JESEv $allcaps
HÉV he:v $allcaps
City siti $capital
GDP dZi:di:pi: $allcaps
HSDPA $abbrev $allcaps
ORTT $abbrev $allcaps
ORFK oEREfka: $abbrev $allcaps
MÁV ma:v $allcaps
MTI $abbrev $allcaps
mm milime:tER2

VDSZSZ ve:de:EsEs $allcaps
a.m An^n^i||m'int $dot
ún u:JnEvEzEt: $dot
dr doktoR2 $dot
mr mistER2 $dot //in hungarian we not use, but lot of books contains this word.
mrs misis $dot //In hungarian we not use, but lot of book contains this word.
gpu $abbrev
GB gigAba:jt $allcaps
MB mEgAba:jt $allcaps
OK ok $allcaps
mvgyosz Emve:Je:oEs
OTP $abbrev
OTP o:te:pe: $allcaps
id idY:SEb: $dot
ill illEtvE $dot
ifj ifjAb: $dot
@@ -193,24 +310,25 @@ vö v'EZd||_'Yss2E


// Articles
a $u // the
az $u
aki $u+ // that
a $u $strend2 // the
az $u $strend2
//aki $u+ // that

ez $u+ // this
ez $unstressend // this


// Pronouns

// If these are only used for emphasis then then don't need $u
// én $u
// te $u
// ő $u
// mi $u
// ti $u
// ők $u
// maga $u
// maguk $u
én $unstressend
te $unstressend

ők $unstressend $pause
mi $unstressend
ti $unstressend
ők $unstressend
maga $unstressend
maguk $unstressend


// Conjunctions
@@ -222,7 +340,6 @@ mert $u $pause // because
miatt $u // because
bár $u $pause // although
habár $u $pause // although

ha $u $pause // if
noha $u $pause // even thought

@@ -231,132 +348,280 @@ noha $u $pause // even thought


// Negative
nem $u $combine $strend
ne $u+
nem $unstressend $combine $strend
ne $unstressend

e $u // "-e" question
e $atend // stressed at end of sentence

// Unstressed adverbs prepositions etc.
néhány $u+
néhány $unstressend
is $u // also

elöl $u // in front of
elől $u
elé $u
előtt $u

mögül $u // behind
mögött $u
mögé $u

kívül $u
után $u // after

alól $u
alá $u
alatt $u // below

felől $u // above
felé $u
fölé $u
felett $u // above
fölött $u

mellől $u // besides
mellé $u
mellett $u

közül $u
közé $u
között $u

elöl $unstressend // in front of
elől $unstressend
elé $unstressend
előtt $unstressend

mögül $unstressend // behind
mögött $unstressend
mögé $unstressend

kívül $unstressend
után $unstressend // after

alól $unstressend
alá $unstressend
alatt $unstressend // below

felől $unstressend // above
felé $unstressend
fölé $unstressend
felett $unstressend // above
fölött $unstressend

//mellől $u // besides
//mellé $u
//mellett $u
lett $unstressend
ott $unstressend
itt $unstressend
neked $unstressend
nektek $unstressend
nekik $unstressend
neki $unstressend
nekem $unstressend
//közül $u
//közé $u
//között $u
an $u // so many persons
as $u
ba $u // into
ban $u // in
be $u
ben $u
ból $u // from inside
ből $u
ba $unstressend // into
ban $unstressend // in
be $unstressend
ben $unstressend
ból $unstressend // from inside
ből $unstressend
e $u // in query, his/her
ei $u // his her multiole
en $u
es $u
hez $u
hoz $u // to
höz $u
ig $u // up to
ik $u // -th
nak $u // of, him/her
nek $u
nál $u // by
nél $u
on $u // on
en $u // on
hez $unstressend
hoz $unstressend // to
höz $unstressend
ig $unstressend // up to
ik $unstressend // -th
nak $unstressend // of, him/her
nek $unstressend
nál $unstressend // by
nél $unstressend
on $unstressend // on
en $unstressend // on
os $u
ra $u // onto
re $u
ról $u // from top of, about
röl $u
ről $u
ra $unstressend // onto
re $unstressend
ról $unstressend // from top of, about
röl $unstressend
ről $unstressend
szer $u
szor $u // times
szó $unstressend
szór $u
ször $u
tól $u // from
töl $u
től $u
val $u // with
vel $u
tól $unstressend // from
töl $unstressend
től $unstressend
val $unstressend // with
vel $unstressend
án $u // on that day
é $u // his, her
éi $u // his, her multiple
én $u
én $unstressend
ón $u
ós $u
ön $u
ön $unstressend
ös $u

ellen $u // against
elé $u // before
óta $u // since

sok $u // many
kevés $u // few
se $u // neither
sem $u // nor


be $u //into
ki $u // out of
le $u // down
fel $u // up
föl $u // up
meg $u // finish an action
el $u // away
át $u //through
rá $u //onto
ide $u // here
oda $u // there
szét $u //apart
össze $u //connect with
vissza $u //back
ellen $u //against

volna $u // would
részén $u //on ... part of

nélkül $u // without
folytán $u // because of
úgy $u // like that
így $u // like this
egyaránt $u // alike
minden $u // all
részben $u // partly

egyik $u // one of
másik $u // the other
ellen $unstressend // against
//elé $u // before
//óta $u // since

sok $unstressend // many
kevés $unstressend // few
se $unstressend // neither
sem $unstressend // nor


be $unstressend //into
ki $unstressend // out of
le $unstressend // down
fel $unstressend // up
föl $unstressend // up
meg $unstressend // finish an action
el $unstressend // away
át $unstressend //through
rá $unstressend //onto

ide $unstressend // here
oda $unstressend // there
szét $unstressend //apart
//össze $u //connect with
//vissza $u //back
volna $unstressend // would
//részén $u //on ... part of

nélkül $unstressend // without
//folytán $u // because of
úgy $unstressend // like that
így $unstressend // like this
egyaránt $unstressend // alike
//minden $strend // all
mindent $strend
//részben $u // partly

egyik $unstressend // one of
//másik $u // the other
lehet $unstressend
rossz $unstressend
jó $unstressend
jót $unstressend
kér $unstressend
tartják $unstressend
erős $unstressend
lennie $unstressend
közt $u+
levegőjére $unstressend
ad $unstressend
kapják $unstressend
kap $unstressend
már $unstressend
maradt $unstressend
jobb $unstressend
most $unstressend
még $unstressend
gép $unstressend
részt $unstressend
lenne $unstressend
őt $unstressend
helyes $u+
fák $unstressend
et $unstressend
megvédeni $unstressend
sztrájk $unstressend
hír $unstressend
magukat $unstressend
majd $unstressend
áll $unstressend
állt $unstressend
arról $unstressend
innen $unstressend
érjen $unstressend
nap $unstressend
név $unstressend
lány $unstressend
lányt $unstressend
vár $unstressend
várt $unstressend
ért $unstressend
ér $unstressend
tag $unstressend
tesz $unstressend
tett $unstressend
tette $unstressend
baj $unstressend
csak $unstressend
vált $unstressend
jut $unstressend
legyen $unstressend
azt $unstressend
ezt $unstressend
út $unstressend
tiszt $unstressend
vesz $unstressend
cég $unstressend
járt $unstressend
jár $unstressend
él $unstressend
élsz $unstressend
élt $unstressend
hát $unstressend
fiú $unstressend
srác $unstressend
ült $unstressend
ám $unstressend
rám $unstressend
tűnik $unstressend
nyújt $unstressend
nincsen $unstressend
mégy $unstressend
nő $unstressend
nőt $unstressend
sas $unstressend
sast $unstressend
fél $unstressend
félt $unstressend
félsz $unstressend
düh $unstressend
más $unstressend
mást $unstressend
rúd $unstressend
mint $unstressend $brk $combine
iránt $unstressend
légy $unstressend
tűnt $unstressend
ösét $unstressend
új $unstressend
nyúlt $unstressend
magát $unstressend
engem $unstressend
téged $unstressend
minket $unstressend
titeket $unstressend
őket $unstressend
cikk $unstressend
vont $unstressend
mond $unstressend
jutni $unstressend
jött $unstressend
szólsz $unstressend
lőtt $unstressend
sor $unstressend
árt $unstressend
fest $unstressend
fújt $unstressend
kért $unstressend
tét $unstressend
kém $unstressend
jön $unstressend
bent $unstressend
kezd $unstressend
ránk $unstressend
gondolt $unstressend
dönt $unstressend
véli $unstressend
folyt $unstressend
döntött $unstressend
fájt $unstressend
hozni $unstressend
lát $unstressend
kép $unstressend
nyert $unstressend
függ $unstressend
hidd $unstressend
megy $unstressend
hírt $unstressend
hely $unstressend
jutott $unstressend
mit $unstressend
forrás $unstressend
terv $unstressend
mind $unstressend
ment $unstressend
jól $unstressend
napját $unstressend
több $unstressend
tart $unstressend
hág $unstressend


// word pairs
@@ -390,7 +655,7 @@ lesztek $u
lesznek $u


kell $u+ // should
kell $unstressend // should

szabad $u+ // can (allowed)

@@ -458,7 +723,9 @@ ny En^
ø $accent
ß _^_DE

. pont $max3
… _p%ontp%ontp%ont // 3 or more dots are changed to elipsis
. p%ont $max3
_. pont
* tSillAg $max3
% sa:zAle:k $max3
+ plus $max3
@@ -493,7 +760,8 @@ _[ n^'ito:sYglEtES $max3
_] z'a:R2o:sYglEtES $max3
_{ k'EzdY:kAptSoS $max3
_} v'e:gkAptSoS $max3
_… pontpontpont $max3
_… pontpontpont

_• di:spont
_| fyg:Y:lEgESvonAl
_> nAJob
@@ -515,5 +783,12 @@ egyezség eggyesség


(Szvsz) eszvéesz
(edik szeptember) szeptember
(CD-k) cédék
(cd-k) cédék
(CD-n) cédén
(cd-n) cédén
(cd-d) cédéd
(CD-d) cédéd
(db-os) darabos
(db-ot) darabot


+ 118
- 37
dictsource/hu_rules View File

@@ -1,4 +1,3 @@

// Hungarian translation rules
// This file is UTF-8 encoded

@@ -9,10 +8,13 @@
û ű



.group a
a A
_) a (_ %A
_) alattvaló _!'AlAtvAlo:
D00_-) al (_ zAl // double z for 100-al
000_-) al (_ Al // ... but not 1000-al
_) alattvaló AlAtvAlo:

.group á
á a:
@@ -26,7 +28,7 @@
@) ban (_S3 bAn
@) ben (_S3 bEn

biz (A b'iz, // bizalmas etc.
biz (A biz, // bizalmas etc.
biedermeier bi:dER2ma:jER2

.group c
@@ -35,8 +37,8 @@
cs tS
ccs tS:
!) cz ts // in names which start with a capital letter
ar) csz (e ts
harmin) c ts
csz ts|s
ar) c (cson ts
anar) ch (i C
balda) ch (in C
hierar) ch (i C
@@ -51,28 +53,19 @@ hierar) ch (i C
szé) ch tS
_zi) ch (y tS

c (szín tS

dA) c (sz ts
kilen) c (sz ts
kvar) c (sz ts
mala) c (sá ts
nyol) c (sz ts
har) c (sz ts
lán) c (sz ts
pá) c (só ts
per) c (sz ts
pol) c (so ts
por) c (sé ts
por) c (sz ts
rán) c (sz ts
tán) c (sz ts

_szé) che (ny tSe:
_szé) ché (ny tSe:
_sto) ck (holm k
har) c (csoport ts
_) church tSYR2tS
lán) c (cs ts

.group d
d d
@@ -85,15 +78,28 @@ hierar) ch (i C
beszé) d (szin d
cselé) d d
fogó) dz (kod ts
fogó) dz (ó z
fenyegető) dz z
föl) d (sánc d
ha) dd (_S2 d
ha) d (járat d
ha) d (sor d
hor) d (szék d
máso) d (sor d
akaró) dz z
hallgató) dz z
húzó) dz ts
harapó) dz z
himbáló) dz z
lopó) dz z
tapogató) dz z
villó) dz z
e) dz (ő dz
e) dz (és dz

pa) d (sor d
ren) d (sza d

va) d (sző d
kére) dz ts
mentegető) dz z
@@ -107,6 +113,7 @@ mentegető) dz z
dsz ts
dsz (C ts
dsz (a ds
dsz (á ds
a) dsz (A ts:
e) dsz (A ts:
o) dsz (A ts:
@@ -127,9 +134,10 @@ mentegető) dz z

.group e
e E
000_-) el (_ REl // double R for 1000-el
000000_-) el (_ El // ... but not 1000000-el

D_-_) es (_ %ES
_) egyezség _!'EJ:ESSe:g
_) egyezség EJ:ESSe:g

.group é
é e:
@@ -145,6 +153,7 @@ mentegető) dz z
f f



.group g
g g
gg g:
@@ -165,19 +174,24 @@ mentegető) dz z
_e) gy (ik J:
_e) gy (üt J:
e) gyj (elentésű Jj
lá) gy (sá J
gyön) gy (sor J
_minde) gy (ik J:

na) gysz (a Js

na) gy (sokára J
na) gy (siet J
_) goethe gY:tE
_) goethé gY:te:
me) g (gy g
le) g (gy g
orszá) g (gyűlés g
ú) gy (se J
seho) gy (se J

.group h
h h
hertz hER2ts

.group i
i i
@@ -190,6 +204,8 @@ _minde) gy (ik J:
íts i:tS:
fesz) ítsd i:tSd
ford) ítsd i:tSd
szól) ítsd i:tSd
áll) ítsd i:tSd
semmis) ítsd i:tSd
bizony) ítsd i:tSd

@@ -216,13 +232,22 @@ bizony) ítsd i:tSd

.group l
l l
fe) l (ju l
fe) l (jö l
fe) l (jegy l
fe) l (jelen l

e) l (jö l

lj l^j
cé) l (já jj

ly j
lly jj

A) lj (A l^j
e) l (jut l
e) l (jus l

á) ll (j j
beszé) lj jj
bére) lj jj
@@ -240,9 +265,10 @@ szamue) ly lli
mi) ll (i l




.group m
m m

ko) mm (uni m


@@ -257,9 +283,17 @@ szamue) ly lli
nj n^n^
nyj n^n^

_) nem (- n,Em // has $combine attribute in hu_list, combine with the next word
_) nem (- nEm // has $combine attribute in hu_list, combine with the next word
me) nny (ország n^
me) nny (d n^
me) nny (k n^
pihe) nj (_S2 n^
főbe) n (jár n
szí) n (játék n
ingye) n n


sze) nny (víz n^
ajá) nlj j:


@@ -267,7 +301,7 @@ szamue) ly lli
o o

_r) oose (velt u:z
_) otthon othon
otthon othon

.group ó
ó o:
@@ -307,7 +341,7 @@ szamue) ly lli
ssz ss2
szts stS:
sztsze stsE
sztsza stsA
föld) s (ánc S
s (színű S
hel) s (inki z
@@ -338,7 +372,8 @@ liszte) szs (ák SZ
rend) sz (er s:
robbaná) s S
robbaná) ss S:

ejtőernyő) ssz S|s
krumpli) s (zsák S

.group t

@@ -348,10 +383,13 @@ robbaná) ss S:
tc ts:
tt t:
ttk t:k
tth t:h
@) tól (_S3q to:l
@) től (_S3q tY:l
tt (C tt
ttn t:n
ttm t:m
ttl t:l
ttr t:R2
ty c
// s) ty c: //
@@ -363,6 +401,8 @@ robbaná) ss S:
apá) ts (ág tS:
becsüle) t t
becsüle) tt t:
bizo) ts (ág tS:
csapa) t (jel t
cson) t t
cson) tt t:
cson) tj c
@@ -370,32 +410,55 @@ becsüle) tt t:
ezüs) tt t:
éle) t t
éle) tt t:
fron) t (szolgál t
gyapo) t t
gyapo) tt t:
gondola) t (sor t
gráni) t t
gráni) tt t:
já) tsz ts:
já) tssz ts:
tsz ts:
já) tsz (m ts
tsz (_S3 ts:
tsz (é ts:
tsz (o ts:
tsz (ő ts:
tszó (_S4 ts:o:
tsz (a t|s
tsz (e t|s
tsz (á t|s
me) tsz (et ts:
ada) t t
ada) tt t:
ké) t (sarok t
ké) t (sor t
ké) t (sáv t
ké) tsz (er ts:
ö) tsz (ör ts:
hé) tsz (er ts:
kegyele) t t
kegyele) tt t:
korán) t (se t
szorí) ts (a tS:
sie) ts tS:
üzle) tt t:
üzle) tj c:
ürí) ts (e tS:
mula) ts tS:
nemze) ts tS:
nemze) t (szo t
néme) ts (ég tS:
min) t t
tse tSE
tso tSo
ttsá tS:a:
tsa tSA
tsá tSa:
ts (a tS
ts (á tS
ts (e tS
ts (é tS
ts (o tS
ts (u tS
tsd tSd
tsé tSe:
t (cs t
ttsé tS:e:
tsu tSu
tts tS:
tts (é tS:
tsö tSY
j) ts tS
C) tj c
@@ -429,12 +492,14 @@ folyama) t (jel t
kür) t t
kür) tj c
kür) t (jel t
kür) t (szó t
küldö) ttj c:
neve) ts (ég tS:
o) tt t:
szen) t (szék t
szé) t t
szé) tt t:
szé) tszé t|se:
szöve) ts (ég tS:
söté) ts (ég tS:
sajá) ts (ág tS:
@@ -451,6 +516,7 @@ folyama) t (jel t
lehe) ts (ég tS:
tehe) ts (ég tS:
lá) tsz ts:
te) tsz ts:
lá) t (sze t
fize) ts (ég tS:
segí) ts tS:
@@ -462,7 +528,14 @@ ismere) ts (ég tS:
ha) t (száz t
hé) t (száz t
vé) ts (ég tS:

vona) t (jegy t
tesz) t (sor t
tes) t (sér t
fron) t (jár t
á) t (söpör t
ala) tt (jár t:
fri) tz ts:
fű) ts tS:


.group u
@@ -474,6 +547,8 @@ ismere) ts (ég tS:
.group ü
ü y
ütt yt:
ütty yc:


.group ű
ű y:
@@ -497,6 +572,7 @@ ismere) ts (ég tS:

.group z
z z

zs Z
zzs Z:
a) z (t s
@@ -519,7 +595,8 @@ lefeje) z (ték s
ré) z (sz z
tartó) z s
gá) z (sz z
gé) z (sz z
gá) z (cső z
gé) z (sz z

ké) z (sz zz
há) z (so z
@@ -545,16 +622,20 @@ lefeje) z (ték s
_gá) zsz (ámla zs:
_gá) zsz (ámlá zs:
_ré) zs (ó zS
ő) zs (uta zS
_vá) zs (or zS
_szára) zs (ág SS

_nehé) zs (ely zS

_) zürich tsyR2iC
vigyá) zz (ba z
vigyá) zz (t z


.group
_) :-) v'iJoR2



$ dolla:R2
ä E

+ 4
- 1
dictsource/jbo_rules View File

@@ -14,13 +14,15 @@

.group b
b b
b (C b_

.group c
c S
K) c (C S_!

.group d
d d
dj dZ
dj dZ // ??

.group e
e e
@@ -82,6 +84,7 @@
r r- // syllabic
A) r R
r (A R
r (C R_ // ?? do this in phonemes data instead?


.group s

+ 7
- 42
dictsource/ta_list View File

@@ -84,7 +84,7 @@ _- in.aIppUg // இணைப்புக்
! vijVppU // வியப்பு
_? ke:l.vi // கேள்வி
# en.||kuRi $max3 // எண் குறி
= samVnba:d.U $max3 // சமன்பாடு
= samVnpa:d.U $max3 // சமன்பாடு
+ ku:t.t.Vl $max3 // கூட்டல்
* perUkkVl $max3 // பெருக்கல்
/ sa:jvU // சாய்வு
@@ -195,53 +195,24 @@ _dpt _pul.l.i
போண்டா $alt
பஜ்ஜி $alt
பாதாம் $alt
பலூன் $alt
பிராமணன் $alt
பிரம்மன் $alt
பம்பாய் $alt
போகம் $alt
போதனை $alt
பூகோலம் $alt
பூலோகம் $alt
பூமி $alt
பூகம்பம் $alt
பூதம் $alt
புதன் $alt
பலி $alt
பலம் $alt
பலவான் $alt
பகவான் $alt
பாகவதம் $alt
பகவத் $alt
பங்கம் $alt
பீடி $alt
பீதி $alt
பம்பரம் $alt
பாதுஷா $alt
பேகம் $alt


தானம் $alt // initial த as [d]
தேகம் $alt
திரவியம் $alt
தூபம் $alt
தீபம் $alt
// initial த as [d]
தீபாவளி $alt
தீரம் $alt
தைரியம் $alt
திடம் $alt
திரவம் $alt
திடீர் $alt
திவசம் $alt
தியானம் $alt
தானியம் $alt
தண்டனை $alt
துவம்சம் $alt
திருஷ்டி $alt
தயாநிதி $alt
தயாளு $alt
துக்கம் $alt
திகில் $alt
துந்துவி $alt
தயவு $alt
தடால் $alt
@@ -249,31 +220,25 @@ _dpt _pul.l.i
தடக் $alt
தீக்ஷை $alt
தடியன் $alt

தரிசனம் $alt
தட்சணை $alt


கக $alt // initial க as [g]
கனம் $alt
கணம் $alt
கணபதி $alt
கணீர் $alt
கிலி $alt
கில்லி $alt
கோதுமை $alt
கோபுரம் $alt
காந்தம் $alt
காந்தி $alt
குண்டு $alt
கோலி $alt
குகை $alt
கிரி $alt
கோமதி $alt
கயா $alt
காயத்ரி $alt
கங்கை $alt
கங்கா $alt
குரு $alt
குகன் $alt
கட $alt
கோ $alt
கதி $alt


பப pVpV

+ 114
- 11
dictsource/ta_rules View File

@@ -66,15 +66,32 @@
_) க (BT g // $alt
க்க kkV
க்க (B kk
_) க (ௌ g
க (ீத g
க (ஜ gV

_) க (ௌ g
_) க (ம்பீர gV
_) க (ந்தர்வ gV
_) க (ோவிந்த g
_) க (ணே gV

_) க (ருட gV
_) க (ர்ஜ gV
_) க (ாண்டாமிருக g
_) க (ோந்து g
_) க (ாந்த g
_) க (ுண்ட g
_) க (ோபுர g
_) க (ுரு g
_) க (ுகன g
_) க (ணபதி gV
_) க (ணீர gV
_) க (ோதுமை g
_) க (ுகை g
_) க (ோஷ g
_) க (ுண g
_) க (தியில் gV
_) க (டிகார gV


ங NV
@@ -93,10 +110,8 @@
ட்) ச (B tS
ஞ்) ச dZV
ஞ்) ச (B dZ
_) ச (ட் tS
_) ச (Bட் tS
_) ச (ன் tS
_) ச (Bன் tS
_) ச (ிட் tS
_) ச (ின் tS



@@ -114,7 +129,8 @@
// _) ட (B t.
ட்ட t.t.V
ட்ட (B t.t.

ஷ்) ட t.V
ஷ்) ட (B t.

ண n.V
ண (B n.
@@ -128,8 +144,14 @@
_) த (BT d // if word has $alt
த்த ttV
த்த (B tt
க்) த tV
க்) த (B t
ஸ்) த tV
ஸ்) த (B t


// exceptions, த as [d]

// exceptions, த as [d]
_) த (ன dV
_) த (ர்ம dV
_) த (ுர் d
@@ -138,6 +160,46 @@
_) த (ுஷ் d
_) த (க்ஷிணா dV
_) த (ண்ட dV
_) த (ருமி dV
_) த (ர்பை dV
_) த (ாவா d
_) த (ாதா d
_) த (ரித்திரம dV
_) த (ர்பார dV
_) த (ீர்க d
_) த (ினுச d
_) த (ாராவி d
_) த (ர்க dV
_) த (ான d
_) த (ேக d
_) த (ேக்கு t
_) த (ேக்கிலை t
_) த (ேக்கடி t
_) த (ிரவிய d
_) த (ூப d
_) த (ீப d
_) த (ீர d
_) த (ைரிய d
_) த (ிட d
_) த (ிரவ d
_) த (ிடீ d
_) த (ிவச d
_) த (ியான d
_) த (ானிய d
_) த (ுக்க d
_) த (ிகில d
_) த (ூம d
_) த (ாவணி d
_) த (ாம்_தூம d
_) த (ாடி d
_) த (ாச d
_) த (சரா dV
_) த (ோஷ d
_) த (ரணி dV
_) த (ாரணி d
_) த (ோசை d



ந nV
ந (B n // dental n
@@ -159,18 +221,59 @@
ட்) ப (B p
ற்) ப pV
ற்) ப (B p
று) ப pV
று) ப(B p
ன்) ப pV
ன்) ப (B p

ம்) ப p
ம்) ப (ா p
ம்) ப (B b
த்) ப p
த்) ப (ா p
த்) ப (B b

ஃ) ப fV
ஃ) ப (B f

_) ப (ால b
_) ப (ால் p
_) ப (ாலின் p
_) ப (ாலை p
_) ப (ாலில் p
_) ப (ாலுடன் p
_) ப (ாலினுடைய p

_) ப (ாலாபிஷேக p
_) ப (ாலு b
_) ப (ானு b
_) ப (ீம b
_) ப (காசுர bV
_) ப (ோஜ b
_) ப (தில bV
_) ப (க்தி bV
_) ப (ஜ bV
_) ப (ைரவ b
_) ப (யம bV
_) ப (ார்கவி b
_) ப (ூதேவி b
_) ப (ம்பாய bV
_) ப (ாதுஷா b
_) ப (க்த bV
_) ப (லம bV
_) ப (லவான bV
_) ப (ிராமண b
_) ப (ிரம்ம b
_) ப (ம்பர bV
_) ப (லூன bV
_) ப (ூமி b
_) ப (ூலோக b
_) ப (ூகோல b
_) ப (ூத b
_) ப (ுதன b
_) ப (லி bV
_) ப (கவான bV
_) ப (ௌதிக b


ம mV
ம (B m
@@ -217,8 +320,8 @@
ஸ (B s


hV
ஹ (B h
HV
ஹ (B H


க்ஷ ks.V

+ 16
- 9
phsource/compile_report View File

@@ -51,7 +51,7 @@
id 15 127
sq 35 128
hy 24 120
da 21 119
da 22 122
rw 15 132
ml 13 154
kn 15 154
@@ -60,7 +60,7 @@
mr 12 152
eu 6 126
mn 15 115
pa 13 153
pa 14 154
prs 8 111

Data file Used by
@@ -244,6 +244,7 @@ envelope/i_risefall2 [+2] rw
envelope/p_214 [5] vi
[214] zh
envelope/p_512 [6] vi
[+] pa
envelope/p_fall [2] vi
[7] vi
[4] zhy
@@ -567,6 +568,12 @@ n^/n^o [(o)] base
n/no [(o)] base
n/_nr [n.] base
n/nr_ [n.] base
n/nr@ [(@)] base
n/nra [(a)] base
n/nre [(e)] base
n/nri [(i)] base
n/nro [(o)] base
n/nru [(u)] base
n^/n^u [(u)] base
n/nu [(u)] base
r2/_r2 [r-] base
@@ -617,12 +624,12 @@ r3/r_trill.wav [R2] base
[x] pt
r3/r_u [(u)] base
r3/r_uvl [r"] base
[R2] da
[R4] da
r3/r_uvl.wav [r"] base
[R] fr
[r] fr
[r/2] fr
[R2] da
[R4] da
r3/rx [*] base
[r/] base
[r/] af
@@ -638,10 +645,12 @@ r3/@tap [**] base
r3/@tap2 [**] base
r3/@tap_rfx [r.] base
r/a_ [r] da
r/aa [R6] da
r/r [r] base
[r-] base
[r] en_sc
[r] de
[R5] da
r/_r [r] base
[r] en_sc
[r.] bn
@@ -779,7 +788,6 @@ ufric/x_sr [h] sr
[x] sr
ufric/xx [X] base
[Q"] base
[R] da
ustop/c [c] base
ustop/k [k] base
[k] en
@@ -1357,8 +1365,8 @@ vnasal/o_n [o~] hi
[o~] bn
vnasal/o_n2 [o~] af
[O~] fr
vnasal/oo_n [O~] en
vnasal/oo_n2 [O~] hi
vnasal/oo_n2 [O~] en
[O~] hi
[o] zh
[O~] bn
vnasal/oo_n3 [O~] pl
@@ -1386,7 +1394,6 @@ voc/Q_ [Q] base
voc/Q_less [Q] nl
[x2] pt
voc/Q_ulv [Q"] base
[R] da
voc/v [v] base
[v] fi
[v] fr
@@ -2222,7 +2229,6 @@ vwl_en/aI@_2 [aI] en_sc
[aI@] en_sc
vwl_en/aU@ [aU@] en
[aU@] en_n
[aU@] en_us
[aU@] en_sc
[aU@] en_wm
vwl_en/@L [@L] en
@@ -2250,6 +2256,7 @@ vwl_en_us/a [a] en_us
vwl_en_us/ai@ [aI@] en_us
vwl_en_us/ar [A:] en_us
[A@] en_us
vwl_en_us/aU@ [aU@] en_us
vwl_en_us/ee [E] en_us
vwl_en_us/er [e@] en_us
vwl_en_us/ir [i@3] en_us

BIN
phsource/n/_nr View File


BIN
phsource/n/nr_ View File


+ 17
- 8
phsource/ph_danish View File

@@ -134,18 +134,27 @@ phoneme r // used for 'r' after a vowel (to create a diphthong)
lengthmod 7
endphoneme

phoneme R2 // uvular trill [r"]
vcd uvl frc
formants r3/r_uvl+r3/r_uvl.wav%75
before _ r3/r_uvl+r3/r_uvl.wav%50
lengthmod 6
phoneme R6 //
liquid
formants r/aa
lengthmod 7
endphoneme

phoneme R // voiced velar fricative [Q"]
phoneme R4 // uvular trill [r"] without WAV
vcd uvl frc
formants voc/Q_ulv+ufric/xx%80
before _ voc/Q_ulv+ufric/xx%60
formants r3/r_uvl+r3/r_uvl.wav%1
before _ r3/r_uvl+r3/r_uvl.wav%1
lengthmod 6
endphoneme


phoneme R5 // English r
liquid starttype #r endtype #r
rhotic
length 100
lengthmod 7
beforenotvowel r/
formants r/r
endphoneme



+ 3
- 3
phsource/ph_english View File

@@ -223,7 +223,7 @@ endphoneme

phoneme o@
vowel starttype (o) endtype (@)
length 240
length 250
formants vowel/oo_en
linkout r-
endphoneme
@@ -385,8 +385,8 @@ endphoneme

phoneme O~
vowel starttype (o) endtype (o)
length 260
formants vnasal/oo_n
length 240
formants vnasal/oo_n2
endphoneme



+ 6
- 6
phsource/ph_english_us View File

@@ -201,7 +201,7 @@ endphoneme

phoneme u:
vowel starttype (u) endtype (u)
length 180
length 190
formants vdiph2/uw
endphoneme

@@ -243,7 +243,7 @@ endphoneme

phoneme e@
vowel starttype (e) endtype (@)
length 270
length 280
formants vwl_en_us/er
appendph r
endphoneme
@@ -251,7 +251,7 @@ endphoneme

phoneme i@3
vowel starttype (i) endtype (@)
length 250
length 280
formants vwl_en_us/ir
appendph r
endphoneme
@@ -259,7 +259,7 @@ endphoneme

phoneme U@
vowel starttype (@) endtype (@)
length 240
length 250
formants vwl_en_us/ur
linkout r-
endphoneme
@@ -275,8 +275,8 @@ endphoneme

phoneme aU@
vowel starttype (a) endtype (@)
length 270
formants vwl_en/aU@
length 300
formants vwl_en_us/aU@
linkout r-
endphoneme


+ 1
- 1
phsource/ph_polish View File

@@ -154,7 +154,7 @@ phoneme dz
vowelin f1=1 f2=1700 -300 300 f3=-100 80 len=50
vowelout f1=2 f2=1700 -300 300 f3=-100 80
formants d/xdz+ustop/ts%140
before _ voc/z_+ustop/ts_%70
before _ voc/z_+ustop/ts_%60
after _ NULL
after @ d/xd
lengthmod 5

+ 2
- 2
phsource/ph_tamil View File

@@ -25,7 +25,7 @@ endphoneme

phoneme a:
vowel starttype (a) endtype (a)
length 270
length 300
formants vowel/a_5
endphoneme

@@ -53,7 +53,7 @@ endphoneme

phoneme i:
vowel starttype (i) endtype (i)
length 270
length 300
formants vowel/i
endphoneme


+ 6
- 1
phsource/phonemes View File

@@ -220,6 +220,7 @@ phoneme (@) virtual
after r- r2/r2@
after m m/m@
after n n/n@
after n. n/nr@
after N nn/nn@
after n^ n^/n^@
before l/ DFT-60+l/L1_@L
@@ -243,6 +244,7 @@ phoneme (a) virtual
after r- r2/r2a
after m m/ma
after n n/na
after n. n/nra
after N nn/nna
after n^ n^/n^a
before l/ DFT-40+l/L1_aL
@@ -266,6 +268,7 @@ phoneme (e) virtual
after r- r2/r2e
after m m/me
after n n/ne
after n. n/nre
after N nn/nne
after n^ n^/n^e
before l/ DFT-30+l/L1_eL
@@ -289,6 +292,7 @@ phoneme (i) virtual
after r- r2/r2i
after m m/mi
after n n/ni
after n. n/nri
after N nn/nni
after n^ n^/n^i
before l/ DFT-30+l/L1_iL
@@ -313,6 +317,7 @@ phoneme (o) virtual
after r- r2/r2o
after m m/mo
after n n/no
after n. n/nro
after N nn/nno
after n^ n^/n^o
before l/ DFT-40+l/L1_oL
@@ -336,6 +341,7 @@ phoneme (u) virtual
after r- r2/r2u
after m m/mu
after n n/nu
after n. n/nru
after N nn/nnu
after n^ n^/n^u
before l/ DFT-40+l/L1_uL
@@ -571,7 +577,6 @@ endphoneme

phoneme n.
vcd rfx nasal
starttype n endtype n
vowelin f1=2 f2=1200 -300 250 f3=-500 80 rms=20 colr=2
vowelout f1=2 f2=1200 -300 250 f3=-500 80 rms=20 brk colr=2
length 100

BIN
phsource/vdiph/aoo View File


BIN
phsource/vnasal/oo_n View File


BIN
phsource/vnasal/oo_n2 View File


BIN
phsource/vowel/ii_final View File


BIN
phsource/vwl_en/aU@ View File


BIN
phsource/vwl_en_us/ar View File


BIN
phsource/vwl_en_us/er View File


BIN
phsource/vwl_en_us/ir View File


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

@@ -34,6 +34,7 @@
#define PATHSEP '\\'
#define USE_PORTAUDIO
//#define USE_NANOSLEEP
#define NO_VARIADIC_MACROS
#define __cdecl
#define ESPEAK_API
#define PATH_ESPEAK_DATA "C:\\Program files\\espeak\\espeak-data"

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

@@ -34,6 +34,7 @@
#define PATHSEP '\\'
#define USE_PORTAUDIO
//#define USE_NANOSLEEP
#define NO_VARIADIC_MACROS
#define __cdecl
#define ESPEAK_API
#define PATH_ESPEAK_DATA "C:\\Program files\\espeak\\espeak-data"

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

@@ -30,6 +30,7 @@
#define PATHSEP '\\'
#define USE_PORTAUDIO
#define NO_VARIADIC_MACROS
#define ESPEAK_API
//#define INCLUDE_KLATT

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

@@ -27,6 +27,7 @@
#define __WIN32__
#define NEED_WCSTOF
#define NEED_GETOPT
#define NO_VARIADIC_MACROS
#define USE_MBROLA_LIB
#define ESPEAK_API

+ 1
- 3
src/compiledict.cpp View File

@@ -568,12 +568,10 @@ step=1; // TEST
}
else
{
dict_line[length++] = 80 + multiple_words + multiple_numeric_hyphen; // if numeric, count a hyphen as an extra word
dict_line[length++] = 80 + multiple_words;
ix = multiple_string_end - multiple_string;
if(multiple_numeric_hyphen)
{
// the first part is numeric, so keep the hyphen to match on
dict_line[length++] = '-';
dict_line[length++] = ' ';
}
memcpy(&dict_line[length],multiple_string,ix);

+ 1
- 1
src/debug.h View File

@@ -13,7 +13,7 @@ extern void debug_time(const char* text);

#else

#ifdef PLATFORM_WINDOWS
#ifdef NO_VARIADIC_MACROS
#define SHOW(format) // VC6 doesn't allow "..."
#else
#define SHOW(format,...)

+ 21
- 10
src/dictionary.cpp View File

@@ -1030,7 +1030,7 @@ void ChangeWordStress(Translator *tr, char *word, int new_stress)



void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags, int tonic, int prev_stress)
void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int tonic, int prev_stress)
{//=========================================================================================================
/* Guess stress pattern of word. This is language specific

@@ -1099,11 +1099,11 @@ void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags,
max_output = output + (N_WORD_PHONEMES-3); /* check for overrun */

// any stress position marked in the xx_list dictionary ?
stressed_syllable = dictionary_flags & 0x7;
if(dictionary_flags & 0x8)
stressed_syllable = dictionary_flags[0] & 0x7;
if(dictionary_flags[0] & 0x8)
{
// this indicates a word without a primary stress
stressed_syllable = dictionary_flags & 0x3;
stressed_syllable = dictionary_flags[0] & 0x3;
unstressed_word = 1;
}

@@ -1113,7 +1113,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags,
{
// option: don't stress monosyllables except at end-of-clause
vowel_stress[1] = 1;
dictionary_flags |= FLAG_STRESS_END2;
dictionary_flags[0] |= FLAG_STRESS_END2;
}

// heavy or light syllables
@@ -1350,7 +1350,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags,
}
break;

case 7: // LANG=tr, the last syllable for any vowel markes explicitly as unstressed
case 7: // LANG=tr, the last syllable for any vowel marked explicitly as unstressed
if(stressed_syllable == 0)
{
stressed_syllable = vowel_count - 1;
@@ -2575,10 +2575,15 @@ int TranslateRules(Translator *tr, char *p_start, char *phonemes, int ph_size, c
#endif

// is it a bracket ?
if(letter == 0xe000+'(')
{
if(pre_pause < tr->langopts.param2[LOPT_BRACKET_PAUSE])
pre_pause = tr->langopts.param2[LOPT_BRACKET_PAUSE]; // a bracket, aleady spoken by AnnouncePunctuation()
}
if(IsBracket(letter))
{
if(pre_pause < 4)
pre_pause = 4;
if(pre_pause < tr->langopts.param[LOPT_BRACKET_PAUSE])
pre_pause = tr->langopts.param[LOPT_BRACKET_PAUSE];
}

// no match, try removing the accent and re-translating the word
@@ -3162,6 +3167,12 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
continue;
}
}
if(dictionary_flags & FLAG_ALT2_TRANS)
{
// language specific
if((tr->translator_name == L('h','u')) && !(tr->prev_dict_flags & FLAG_ALT_TRANS))
continue;
}

if(flags != NULL)
{
@@ -3256,7 +3267,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f
// set the skip words flag
flags[0] |= FLAG_SKIPWORDS;
dictionary_skipwords = length;
return(1);
return(flags[0]);
}
}

@@ -3356,7 +3367,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f
return(0);
}

return(1);
return(flags[0]);
}

ph_out[0] = 0;

+ 92
- 19
src/espeak.cpp View File

@@ -20,7 +20,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef NEED_GETOPT
#include <getopt.h>
#endif
#include <time.h>
#include <sys/stat.h>

@@ -294,6 +296,21 @@ static int SynthCallback(short *wav, int numsamples, espeak_EVENT *events)
}


#ifdef NEED_GETOPT
struct option {
char *name;
int has_arg;
int *flag;
int val;
};
int optind;
static int optional_argument;
static const char *arg_opts = "abfgklpsvw"; // which options have arguments
static char *opt_string="";
#define no_argument 0
#define required_argument 1
#define optional_argument 2
#endif

int main (int argc, char **argv)
//==============================
@@ -330,6 +347,7 @@ int main (int argc, char **argv)
int option_index = 0;
int c;
int ix;
char *optarg2;
int value;
int flag_stdin = 0;
int flag_compile = 0;
@@ -361,6 +379,59 @@ int main (int argc, char **argv)
filename[0] = 0;
option_punctlist[0] = 0;

#ifdef NEED_GETOPT
optind = 1;
opt_string = "";
while(optind < argc)
{
int len;
char *p;

if((c = *opt_string) == 0)
{
opt_string = argv[optind];
if(opt_string[0] != '-')
break;

optind++;
opt_string++;
c = *opt_string;
}
opt_string++;
p = optarg2 = opt_string;

if(c == '-')
{
opt_string="";
for(ix=0; ;ix++)
{
if(long_options[ix].name == 0)
break;
len = strlen(long_options[ix].name);
if(memcmp(long_options[ix].name,p,len)==0)
{
c = long_options[ix].val;
optarg2 = NULL;

if((long_options[ix].has_arg != 0) && (p[len]=='='))
{
optarg2 = &p[len+1];
}
break;
}
}
}
else
if(strchr(arg_opts,c) != NULL)
{
opt_string="";
if(optarg2[0]==0)
{
// the option's value is in the next argument
optarg2 = argv[optind++];
}
}
#else
while(true)
{
c = getopt_long (argc, argv, "a:b:f:g:hk:l:mp:qs:v:w:xXz",
@@ -369,12 +440,14 @@ int main (int argc, char **argv)
/* Detect the end of the options. */
if (c == -1)
break;
optarg2 = optarg;
#endif

switch (c)
{
case 'b':
// input character encoding, 8bit, 16bit, UTF8
if((sscanf(optarg,"%d",&value) == 1) && (value <= 4))
if((sscanf(optarg2,"%d",&value) == 1) && (value <= 4))
synth_flags |= value;
else
synth_flags |= espeakCHARS_8BIT;
@@ -387,7 +460,7 @@ int main (int argc, char **argv)
break;

case 'k':
option_capitals = atoi(optarg);
option_capitals = atoi(optarg2);
break;

case 'x':
@@ -403,7 +476,7 @@ int main (int argc, char **argv)
break;

case 'p':
pitch = atoi(optarg);
pitch = atoi(optarg2);
break;

case 'q':
@@ -411,32 +484,32 @@ int main (int argc, char **argv)
break;

case 'f':
strncpy0(filename,optarg,sizeof(filename));
strncpy0(filename,optarg2,sizeof(filename));
break;

case 'l':
option_linelength = atoi(optarg);
option_linelength = atoi(optarg2);
break;

case 'a':
volume = atoi(optarg);
volume = atoi(optarg2);
break;

case 's':
speed = atoi(optarg);
speed = atoi(optarg2);
break;

case 'g':
wordgap = atoi(optarg);
wordgap = atoi(optarg2);
break;

case 'v':
strncpy0(voicename,optarg,sizeof(voicename));
strncpy0(voicename,optarg2,sizeof(voicename));
break;

case 'w':
option_waveout = 1;
strncpy0(wavefile,optarg,sizeof(filename));
strncpy0(wavefile,optarg2,sizeof(filename));
break;

case 'z': // remove pause from the end of a sentence
@@ -454,17 +527,17 @@ int main (int argc, char **argv)

case 0x101: // --compile-debug
case 0x102: // --compile
strncpy0(voicename,optarg,sizeof(voicename));
strncpy0(voicename,optarg2,sizeof(voicename));
flag_compile = c;
quiet = 1;
break;

case 0x103: // --punct
option_punctuation = 1;
if(optarg != NULL)
if(optarg2 != NULL)
{
ix = 0;
while((ix < N_PUNCTLIST) && ((option_punctlist[ix] = optarg[ix]) != 0)) ix++;
while((ix < N_PUNCTLIST) && ((option_punctlist[ix] = optarg2[ix]) != 0)) ix++;
option_punctlist[N_PUNCTLIST-1] = 0;
option_punctuation = 2;
}
@@ -472,24 +545,24 @@ int main (int argc, char **argv)

case 0x104: // --voices
espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS,0,data_path,0);
DisplayVoices(stdout,optarg);
DisplayVoices(stdout,optarg2);
exit(0);

case 0x106: // -- split
if(optarg == NULL)
if(optarg2 == NULL)
samples_split = 30; // default 30 minutes
else
samples_split = atoi(optarg);
samples_split = atoi(optarg2);
break;

case 0x107: // --path
data_path = optarg;
data_path = optarg2;
break;

case 0x108: // --phonout
if((f_phonemes_out = fopen(optarg,"w")) == NULL)
if((f_phonemes_out = fopen(optarg2,"w")) == NULL)
{
fprintf(stderr,"Can't write to: %s\n",optarg);
fprintf(stderr,"Can't write to: %s\n",optarg2);
}
break;


+ 0
- 25
src/espeakedit.cpp View File

@@ -366,31 +366,6 @@ void MyFrame::OnQuit(wxCommandEvent& event)
}


#ifdef deleted
void MyFrame::OnAbout(wxCommandEvent& event)
{//=========================================
int result;
char buf[300];
wxString url_docs;

switch(event.GetId())
{
case MENU_ABOUT:
sprintf(buf,about_string,espeak_Info(NULL));
(void)wxMessageBox(wxString(buf,wxConvLocal), _T("About eSpeak Editor"));
break;

case MENU_DOCS:
sprintf(buf,"%s/docs/docindex.html",path_home);
url_docs = wxString(buf,wxConvLocal);
result = wxLaunchDefaultBrowser(url_docs);
if(result == 0)
wxLogStatus(_T("Failed to launch browser"));
break;
}
}
#endif


class HtmlWindow: public wxHtmlWindow
{

+ 1
- 1
src/intonation.cpp View File

@@ -275,7 +275,7 @@ static TONE_HEAD tone_head_table[N_TONE_HEAD_TABLE] = {
};

static TONE_NUCLEUS tone_nucleus_table[N_TONE_NUCLEUS_TABLE] = {
{PITCHfall, 30, 5, PITCHfall, 32, 9, NULL, 12, 7, 0}, // 0 statement
{PITCHfall, 29, 4, PITCHfall, 32, 9, NULL, 12, 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

+ 180
- 114
src/numbers.cpp View File

@@ -65,6 +65,9 @@
#define M_MIDDLE_DOT M_DOT_ABOVE // duplicate of M_DOT_ABOVE
#define M_IMPLOSIVE M_HOOK

static int n_digit_lookup;
static char *digit_lookup;

typedef struct {
const char *name;
int flags;
@@ -783,6 +786,8 @@ static int CheckDotOrdinal(Translator *tr, char *word, WORD_TAB *wtab, int lower
} // end of CheckDotOrdinal




int TranslateRoman(Translator *tr, char *word, char *ph_out, WORD_TAB *wtab)
{//=========================================================================
int c;
@@ -995,6 +1000,7 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out)
int found;
int ix;
int units;
int tens;
int used_and=0;
int found_ordinal = 0;
int next_phtype;
@@ -1004,143 +1010,167 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out)
char ph_digits[50];
char ph_and[12];

// is there a special pronunciation for this 2-digit number
units = value % 10;
tens = value / 10;

found = 0;
ph_ordinal[0] = 0;

if(control & 8)
if((control & 2) && (n_digit_lookup == 2))
{
sprintf(string,"_%df",value);
found = Lookup(tr, string, ph_digits);
// pronunciation of the final 2 digits has already been found
strcpy(ph_out, digit_lookup);
}
else
if(control & 1)
{
strcpy(ph_ordinal, ph_ordinal2);

if(control & 4)
{
sprintf(string,"_%dox",value); // LANG=hu, special word for 1. 2. when there are no higher digits
found = Lookup(tr, string, ph_digits);
}
if(found == 0)
{
sprintf(string,"_%do",value);
found = Lookup(tr, string, ph_digits);
}
found_ordinal = found;
}

if(found == 0)
{
if((value == 1) && (control & 2))
{
if(Lookup(tr, "_1a", ph_out) != 0) // LANG=de, "eins"
return(0);
}
sprintf(string,"_%d",value);
found = Lookup(tr, string, ph_digits);
}

// no, speak as tens+units

if((control & 0x10) && (value < 10))
{
// speak leading zero
Lookup(tr, "_0", ph_tens);
}
else
{
if(found)
{
ph_tens[0] = 0;
}
else
if(digit_lookup[0] == 0)
{
units = (value % 10);

if((control & 1) && ((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS)))
// is there a special pronunciation for this 2-digit number
if(control & 8)
{
sprintf(string,"_%dXo",value / 10);
if(Lookup(tr, string, ph_tens) != 0)
sprintf(string,"_%df",value);
found = Lookup(tr, string, ph_digits);
}
else
if(control & 1)
{
strcpy(ph_ordinal, ph_ordinal2);
if(control & 4)
{
found_ordinal = 1;
sprintf(string,"_%dox",value); // LANG=hu, special word for 1. 2. when there are no higher digits
found = Lookup(tr, string, ph_digits);
}
if(found == 0)
{
sprintf(string,"_%do",value);
found = Lookup(tr, string, ph_digits);
}
found_ordinal = found;
}
if(found_ordinal == 0)
if(found == 0)
{
sprintf(string,"_%dX",value / 10);
Lookup(tr, string, ph_tens);
if((value == 1) && (control & 2))
{
if(Lookup(tr, "_1a", ph_out) != 0) // LANG=de, "eins"
return(0);
}
sprintf(string,"_%d",value);
found = Lookup(tr, string, ph_digits);
}

if((ph_tens[0] == 0) && (tr->langopts.numbers & NUM_VIGESIMAL))
}
// no, speak as tens+units
if((control & 0x10) && (value < 10))
{
// speak leading zero
Lookup(tr, "_0", ph_tens);
}
else
{
if(found)
{
// tens not found, (for example) 73 is 60+13
units = (value % 20);
sprintf(string,"_%dX",(value / 10) & 0xfe);
Lookup(tr, string, ph_tens);
ph_tens[0] = 0;
}

ph_digits[0] = 0;
if(units > 0)
{
found = 0;
if(control & 8)
{
// is there a variant form of this number?
sprintf(string,"_%df",units);
found = Lookup(tr, string, ph_digits);
}
if((control & 1) && ((tr->langopts.numbers & NUM_SWAP_TENS) == 0))
else
{
if((control & 1) && ((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS)))
{
// ordinal
sprintf(string,"_%do",units);
if((found = Lookup(tr, string, ph_digits)) != 0)
sprintf(string,"_%dXo", tens);
if(Lookup(tr, string, ph_tens) != 0)
{
found_ordinal = 1;
}
}
if(found == 0)
if(found_ordinal == 0)
{
sprintf(string,"_%d",units);
Lookup(tr, string, ph_digits);
sprintf(string,"_%dX", tens);
Lookup(tr, string, ph_tens);
}
if((ph_tens[0] == 0) && (tr->langopts.numbers & NUM_VIGESIMAL))
{
// tens not found, (for example) 73 is 60+13
units = (value % 20);
sprintf(string,"_%dX", tens & 0xfe);
Lookup(tr, string, ph_tens);
}
ph_digits[0] = 0;
if(units > 0)
{
found = 0;
if((control & 2) && (digit_lookup[0] != 0))
{
// we have an entry for this digit (possibly together with the next word)
strcpy(ph_digits, digit_lookup);
found_ordinal = 1;
ph_ordinal[0] = 0;
}
else
{
if(control & 8)
{
// is there a variant form of this number?
sprintf(string,"_%df",units);
found = Lookup(tr, string, ph_digits);
}
if((control & 1) && ((tr->langopts.numbers & NUM_SWAP_TENS) == 0))
{
// ordinal
sprintf(string,"_%do",units);
if((found = Lookup(tr, string, ph_digits)) != 0)
{
found_ordinal = 1;
}
}
if(found == 0)
{
sprintf(string,"_%d",units);
Lookup(tr, string, ph_digits);
}
}
}
}
}
}

if((control & 1) && (found_ordinal == 0) && (ph_ordinal[0] == 0))
{
if((value >= 20) && (((value % 10) == 0) || (tr->langopts.numbers & NUM_SWAP_TENS)))
Lookup(tr, "_ord20", ph_ordinal);
if(ph_ordinal[0] == 0)
Lookup(tr, "_ord", ph_ordinal);
}

if((tr->langopts.numbers & (NUM_SWAP_TENS | NUM_AND_UNITS)) && (ph_tens[0] != 0) && (ph_digits[0] != 0))
{
Lookup(tr, "_0and", ph_and);
if(tr->langopts.numbers & NUM_SWAP_TENS)
sprintf(ph_out,"%s%s%s%s",ph_digits, ph_and, ph_tens, ph_ordinal);
if((control & 1) && (found_ordinal == 0) && (ph_ordinal[0] == 0))
{
if((value >= 20) && (((value % 10) == 0) || (tr->langopts.numbers & NUM_SWAP_TENS)))
Lookup(tr, "_ord20", ph_ordinal);
if(ph_ordinal[0] == 0)
Lookup(tr, "_ord", ph_ordinal);
}
if((tr->langopts.numbers & (NUM_SWAP_TENS | NUM_AND_UNITS)) && (ph_tens[0] != 0) && (ph_digits[0] != 0))
{
Lookup(tr, "_0and", ph_and);
if(tr->langopts.numbers & NUM_SWAP_TENS)
sprintf(ph_out,"%s%s%s%s",ph_digits, ph_and, ph_tens, ph_ordinal);
else
sprintf(ph_out,"%s%s%s%s",ph_tens, ph_and, ph_digits, ph_ordinal);
used_and = 1;
}
else
sprintf(ph_out,"%s%s%s%s",ph_tens, ph_and, ph_digits, ph_ordinal);
used_and = 1;
}
else
{
if(tr->langopts.numbers & NUM_SINGLE_VOWEL)
{
// remove vowel from the end of tens if units starts with a vowel (LANG=Italian)
if(((ix = strlen(ph_tens)-1) >= 0) && (ph_digits[0] != 0))
if(tr->langopts.numbers & NUM_SINGLE_VOWEL)
{
if((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS)
next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type;
if((phoneme_tab[(unsigned int)(ph_tens[ix])]->type == phVOWEL) && (next_phtype == phVOWEL))
ph_tens[ix] = 0;
// remove vowel from the end of tens if units starts with a vowel (LANG=Italian)
if(((ix = strlen(ph_tens)-1) >= 0) && (ph_digits[0] != 0))
{
if((next_phtype = phoneme_tab[(unsigned int)(ph_digits[0])]->type) == phSTRESS)
next_phtype = phoneme_tab[(unsigned int)(ph_digits[1])]->type;
if((phoneme_tab[(unsigned int)(ph_tens[ix])]->type == phVOWEL) && (next_phtype == phVOWEL))
ph_tens[ix] = 0;
}
}
sprintf(ph_out,"%s%s%s",ph_tens, ph_digits, ph_ordinal);
}
sprintf(ph_out,"%s%s%s",ph_tens, ph_digits, ph_ordinal);
}

if(tr->langopts.numbers & NUM_SINGLE_STRESS)
@@ -1357,17 +1387,21 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
char ph_append[50];
char ph_buf[200];
char ph_buf2[50];
char ph_zeros[50];
char suffix[20];
char buf_digit_lookup[50];

static const char str_pause[2] = {phonPAUSE_NOLINK,0};

*flags = 0;
digit_lookup = buf_digit_lookup;

for(ix=0; isdigit(word[ix]); ix++) ;
n_digits = ix;
value = this_value = atoi(word);

ph_ordinal2[0] = 0;
ph_zeros[0] = 0;

ordinal = CheckDotOrdinal(tr, &word[ix], wtab, 1);

@@ -1377,11 +1411,11 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
ix++;
hyphen = 0;
p = suffix;
if(word[ix] == '-')
if(wtab[0].flags & FLAG_HYPHEN_AFTER)
{
*p++ = '-';
hyphen = 1;
ix += 2;
ix++;
}
while((word[ix] != 0) && (word[ix] != ' ') && (ix < (sizeof(suffix)-1)))
{
@@ -1397,7 +1431,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
// this is an ordinal suffix
ordinal = 2;
flags[0] |= FLAG_SKIPWORDS;
dictionary_skipwords = 1 + hyphen;
dictionary_skipwords = 1;
}
}
}
@@ -1431,7 +1465,17 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
}
else
{
return(0); // number string with leading zero, speak as individual digits
if(n_digits > 3)
{
flags[0] &= ~FLAG_SKIPWORDS;
return(0); // long number string with leading zero, speak as individual digits
}

// speak leading zeros
for(ix=0; (word[ix] == '0') && (ix < (n_digits-1)); ix++)
{
Lookup(tr, "_0", &ph_zeros[strlen(ph_zeros)]);
}
}
}

@@ -1504,11 +1548,33 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
Lookup(tr, "_.", ph_append);
}

n_digit_lookup = 0;
buf_digit_lookup[0] = 0;
if(thousandplex == 0)
{
char *p2;
// look for combinations of the number with the next word
p = word;
while(isdigit(p[1])) p++; // just use the last digit
if(isdigit(p[-1]))
{
p2 = p - 1;
if(LookupDictList(tr, &p2, buf_digit_lookup, flags, FLAG_SUFX, wtab)) // lookup 2 digits
n_digit_lookup = 2;
}
if((buf_digit_lookup[0] == 0) && (*p != '0'))
{
// not found, lookup only the last digit
if(LookupDictList(tr, &p, buf_digit_lookup, flags, FLAG_SUFX, wtab)) // don't match '0', or entries with $only
n_digit_lookup = 1;
}
}

LookupNum3(tr, value, ph_buf, suppress_null, thousandplex, prev_thousands | ordinal);
if((thousandplex > 0) && (tr->langopts.numbers2 & 0x200))
sprintf(ph_out,"%s%s%s",ph_append,ph_buf2,ph_buf); // say "thousands" before its number
sprintf(ph_out,"%s%s%s%s",ph_zeros,ph_append,ph_buf2,ph_buf); // say "thousands" before its number
else
sprintf(ph_out,"%s%s%s",ph_buf2,ph_buf,ph_append);
sprintf(ph_out,"%s%s%s%s",ph_zeros,ph_buf2,ph_buf,ph_append);


while(decimal_point)
@@ -1603,7 +1669,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned
if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' '))
utf8_in(&next_char,p);

if(!iswalpha(next_char))
if(!iswalpha(next_char) && !(wtab[0].flags & FLAG_HYPHEN_AFTER))
strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc.
}


+ 23
- 23
src/phonemelist.cpp View File

@@ -104,16 +104,16 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST2 *plist_out)
if(((pl = &ph_list2[k])->sourceix != 0) && (k > ix))
break;
pl->stress &= 0xf;
pl->stresslevel &= 0xf;
if(phoneme_tab[pl->phcode]->type == phVOWEL)
{
n_syllables++;

if(pl->stress > max_stress)
if(pl->stresslevel > max_stress)
{
syllable_stressed = n_syllables;
max_stress = pl->stress;
max_stress = pl->stresslevel;
max_stress_posn = k;
}
}
@@ -137,7 +137,7 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST2 *plist_out)
flags |= 8;
ch.flags = flags | word_end;

ch.stress = plist2->stress;
ch.stress = plist2->stresslevel;
ch.stress_highest = max_stress;
ch.n_vowels = n_syllables;
ch.vowel_this = syllable;
@@ -156,13 +156,13 @@ static int SubstitutePhonemes(Translator *tr, PHONEME_LIST2 *plist_out)
if((replace_flags & 1) && (word_end == 0))
continue; // this replacement only occurs at the end of a word
if((replace_flags & 2) && ((plist2->stress & 0x7) > 3))
if((replace_flags & 2) && ((plist2->stresslevel & 0x7) > 3))
continue; // this replacement doesn't occur in stressed syllables
// substitute the replacement phoneme
plist2->phcode = replace_phonemes[k].new_ph;
if((plist2->stress > 1) && (phoneme_tab[plist2->phcode]->phflags & phUNSTRESSED))
plist2->stress = 0; // the replacement must be unstressed
if((plist2->stresslevel > 1) && (phoneme_tab[plist2->phcode]->phflags & phUNSTRESSED))
plist2->stresslevel = 0; // the replacement must be unstressed
break;
}
}
@@ -214,8 +214,8 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
for(j = n_ph_list2-3; j>=0; j--)
{
// start with the last phoneme (before the terminating pauses) and move forwards
if((plist2[j].stress & 0x7f) > max_stress)
max_stress = plist2[j].stress & 0x7f;
if((plist2[j].stresslevel & 0x7f) > max_stress)
max_stress = plist2[j].stresslevel & 0x7f;
if(plist2[j].sourceix != 0)
break;
}
@@ -226,10 +226,10 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
{
if(plist2[j].synthflags & SFLAG_PROMOTE_STRESS) // dictionary flags indicated that this stress can be promoted
{
plist2[j].stress = 4; // promote to stressed
plist2[j].stresslevel = 4; // promote to stressed
break;
}
if(plist2[j].stress >= 4)
if(plist2[j].stresslevel >= 4)
{
// found a stressed syllable, so stop looking
break;
@@ -344,7 +344,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
if(plist2->phcode == phonSWITCH)
{
// change phoneme table
SelectPhonemeTable(plist2->tone_number);
SelectPhonemeTable(plist2->tone_ph);
switched_language ^= SFLAG_SWITCHED_LANG;
}
next = phoneme_tab[(plist2+1)->phcode]; // the phoneme after this one
@@ -363,8 +363,8 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
if(ph_list3[k].sourceix)
break; // start of the next word

if(ph_list3[k].stress > word_stress)
word_stress = ph_list3[k].stress;
if(ph_list3[k].stresslevel > word_stress)
word_stress = ph_list3[k].stresslevel;
}
}

@@ -373,7 +373,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
if(ph->type == phVOWEL)
{
// check for consecutive unstressed syllables
if(plist2->stress == 0)
if(plist2->stresslevel == 0)
{
// an unstressed vowel
unstress_count++;
@@ -388,7 +388,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
}
else
{
plist2->stress = 1; // change stress to 'diminished'
plist2->stresslevel = 1; // change stress to 'diminished'
}
}
}
@@ -455,7 +455,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
{
plist2->synthflags |= SFLAG_SYLLABLE;
if(ph2->type != phVOWEL)
plist2->stress = 0; // change from non-vowel to vowel, make sure it's unstressed
plist2->stresslevel = 0; // change from non-vowel to vowel, make sure it's unstressed
}
else
plist2->synthflags &= ~SFLAG_SYLLABLE;
@@ -465,7 +465,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
{
if((ph->mnemonic == 't') && (plist2->sourceix == 0) && ((prev->type == phVOWEL) || (prev->mnemonic == 'n')))
{
if(((plist2+1)->sourceix == 0) && ((plist2+1)->stress < 3) && (next->type == phVOWEL))
if(((plist2+1)->sourceix == 0) && ((plist2+1)->stresslevel < 3) && (next->type == phVOWEL))
{
ph = phoneme_tab[phonT_REDUCED];
}
@@ -483,13 +483,13 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)

if(ph->type == phVOWEL)
{
stress_level = plist2->stress;
stress_level = plist2->stresslevel;
}
else
{
// consonant, get stress from the following vowel
if(next->type == phVOWEL)
stress_level = (plist2+1)->stress;
stress_level = (plist2+1)->stresslevel;
else
break;
}
@@ -562,7 +562,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
insert_ph = phonPAUSE_VSHORT;
}
if(((plist2+1)->stress >= 4) && (tr->langopts.vowel_pause & 0x100))
if(((plist2+1)->stresslevel >= 4) && (tr->langopts.vowel_pause & 0x100))
{
// pause before a words which starts with a stressed vowel
insert_ph = phonPAUSE_SHORT;
@@ -628,8 +628,8 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence)
phlist[ix].type = ph->type;
phlist[ix].env = PITCHfall; // default, can be changed in the "intonation" module
phlist[ix].synthflags = plist2->synthflags | switched_language;
phlist[ix].stresslevel = plist2->stress & 0xf;
phlist[ix].tone_ph = plist2->tone_number;
phlist[ix].stresslevel = plist2->stresslevel & 0xf;
phlist[ix].tone_ph = plist2->tone_ph;
phlist[ix].sourceix = 0;

if(plist2->sourceix != 0)

+ 105
- 54
src/readclause.cpp View File

@@ -63,9 +63,6 @@ int count_characters = 0;
static int sayas_mode;
static int ssml_ignore_l_angle = 0;

static const char *punct_stop = ".:!?"; // pitch fall if followed by space
static const char *punct_close = ")]}>;'\""; // always pitch fall unless followed by alnum

// alter tone for announce punctuation or capitals
//static const char *tone_punct_on = "\0016T"; // add reverberation, lower pitch
//static const char *tone_punct_off = "\001T\001P";
@@ -121,7 +118,7 @@ static const unsigned int punct_attributes [] = { 0,
CLAUSE_COMMA, CLAUSE_PERIOD, CLAUSE_QUESTION, CLAUSE_EXCLAMATION, CLAUSE_COLON, CLAUSE_SEMICOLON,
CLAUSE_SEMICOLON, // en-dash
CLAUSE_SEMICOLON, // em-dash
CLAUSE_SEMICOLON, // elipsis
CLAUSE_SEMICOLON + PUNCT_SAY_NAME, // elipsis

CLAUSE_QUESTION, // Greek question mark
CLAUSE_SEMICOLON, // Greek semicolon
@@ -574,7 +571,7 @@ static const char *LookupSpecial(Translator *tr, const char *string, char* text_

if(LookupDictList(tr,&string1,phonemes,flags,0,NULL))
{
SetWordStress(tr, phonemes, flags[0], -1, 0);
SetWordStress(tr, phonemes, flags, -1, 0);
DecodePhonemes(phonemes,phonemes2);
sprintf(text_out,"[[%s]]",phonemes2);
option_phoneme_input |= 2;
@@ -584,8 +581,8 @@ static const char *LookupSpecial(Translator *tr, const char *string, char* text_
}


static const char *LookupCharName(Translator *tr, int c)
{//=====================================================
static const char *LookupCharName(Translator *tr, int c, int only)
{//===============================================================
// Find the phoneme string (in ascii) to speak the name of character c
// Used for punctuation characters and symbols

@@ -606,20 +603,28 @@ static const char *LookupCharName(Translator *tr, int c)
ix = utf8_out(c,&single_letter[2]);
single_letter[2+ix]=0;

string = &single_letter[1];
if(LookupDictList(tr, &string, phonemes, flags, 0, NULL) == 0)
if(only)
{
// try _* then *
string = &single_letter[2];
LookupDictList(tr, &string, phonemes, flags, 0, NULL);
}
else
{
string = &single_letter[1];
if(LookupDictList(tr, &string, phonemes, flags, 0, NULL) == 0)
{
// now try the rules
single_letter[1] = ' ';
TranslateRules(tr, &single_letter[2], phonemes, sizeof(phonemes), NULL,0,NULL);
// try _* then *
string = &single_letter[2];
if(LookupDictList(tr, &string, phonemes, flags, 0, NULL) == 0)
{
// now try the rules
single_letter[1] = ' ';
TranslateRules(tr, &single_letter[2], phonemes, sizeof(phonemes), NULL,0,NULL);
}
}
}

if((phonemes[0] == 0) && (tr->translator_name != L('e','n')))
if((only==0) && (phonemes[0] == 0) && (tr->translator_name != L('e','n')))
{
// not found, try English
SetTranslator2("en");
@@ -644,20 +649,21 @@ static const char *LookupCharName(Translator *tr, int c)
{
if(lang_name)
{
SetWordStress(translator2, phonemes, flags[0], -1, 0);
SetWordStress(translator2, phonemes, flags, -1, 0);
DecodePhonemes(phonemes,phonemes2);
sprintf(buf,"[[_^_%s %s _^_%s]]","en",phonemes2,WordToString2(tr->translator_name));
SelectPhonemeTable(voice->phoneme_tab_ix); // revert to original phoneme table
}
else
{
SetWordStress(tr, phonemes, flags[0], -1, 0);
SetWordStress(tr, phonemes, flags, -1, 0);
DecodePhonemes(phonemes,phonemes2);
sprintf(buf,"[[%s]] ",phonemes2);
}
option_phoneme_input |= 2;
}
else
if(only == 0)
{
strcpy(buf,"[[(X1)(X1)(X1)]]");
option_phoneme_input |= 2;
@@ -835,6 +841,8 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output
const char *punctname;
int found = 0;
int soundicon;
int attributes;
int short_pause;
int c2;
int len;
int bufix1;
@@ -852,10 +860,10 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output
found = 1;
}
else
if((punctname = LookupCharName(tr, c1)) != NULL)
if((punctname = LookupCharName(tr, c1, 0)) != NULL)
{
found = 1;
if((*bufix==0) || (end_clause==0))
if((*bufix==0) || (end_clause ==0) || (tr->langopts.param[LOPT_ANNOUNCE_PUNCT] & 2))
{
punct_count=1;
while(c2 == c1)
@@ -919,14 +927,24 @@ static int AnnouncePunctuation(Translator *tr, int c1, int *c2_ptr, char *output

if(c1 == '-')
return(CLAUSE_NONE); // no pause
if(bufix1 > 0)
return(CLAUSE_SHORTCOMMA);
if((strchr_w(punct_close,c1) != NULL) && !iswalnum(c2))
return(CLAUSE_SHORTFALL+4);
if(iswspace(c2) && strchr_w(punct_stop,c1)!=NULL)
return(punct_attributes[lookupwchar(punct_chars,c1)]);

attributes = punct_attributes[lookupwchar(punct_chars,c1)];

short_pause = CLAUSE_SHORTFALL;
if((attributes & CLAUSE_BITS_INTONATION) == 0x1000)
short_pause = CLAUSE_SHORTCOMMA;

if((bufix1 > 0) && !(tr->langopts.param[LOPT_ANNOUNCE_PUNCT] & 2))
{
if((attributes & ~0x8000) == CLAUSE_SEMICOLON)
return(CLAUSE_SHORTFALL);
return(short_pause);
}

if(attributes & CLAUSE_BIT_SENTENCE)
return(attributes);
return(CLAUSE_SHORTCOMMA);
return(short_pause);
} // end of AnnouncePunctuation

#define SSML_SPEAK 1
@@ -1936,6 +1954,7 @@ int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix
int c2; // next character
int cprev=' '; // previous character
int cprev2=' ';
int c_next;
int parag;
int ix = 0;
int j;
@@ -1948,7 +1967,7 @@ int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix
int found;
int any_alnum = 0;
int self_closing;
int punct_data;
int punct_data = 0;
int is_end_clause;
int announced_punctuation;
int stressed_word = 0;
@@ -2340,6 +2359,18 @@ if(option_ssml) parag=1;
{
is_end_clause = 0;

if((c1 == '.') && (c2 == '.'))
{
while((c_next = GetC()) == '.')
{
// 3 or more dots, replace by elipsis
c1 = 0x2026;
c2 = ' ';
}
UngetC(c_next);
}
punct_data = 0;
if((punct = lookupwchar(punct_chars,c1)) != 0)
{
punct_data = punct_attributes[punct];
@@ -2371,17 +2402,23 @@ if(option_ssml) parag=1;
}
}

if(is_end_clause)
if((punct_data & PUNCT_SAY_NAME) && (announced_punctuation == 0))
{
int c_next;
if((c1 == '.') && (cprev == '.'))
// used for elipsis (and 3 dots) if a pronunciation for elipsis is given in *_list
char *p2;

p2 = &buf[ix];
sprintf(p2,"%s",LookupCharName(tr, c1, 1));
if(p2[0] != 0)
{
c1 = 0x2026;
punct = 9; // elipsis
ix += strlen(p2);
announced_punctuation = c1;
punct_data = punct_data & ~CLAUSE_BITS_INTONATION; // change intonation type to 0 (full-stop)
}
}

if(is_end_clause)
{
nl_count = 0;
c_next = c2;

@@ -2395,26 +2432,39 @@ if(option_ssml) parag=1;
}
}

if((nl_count==0) && (c1 == '.'))
if(nl_count==0)
{
if((tr->langopts.numbers & NUM_ORDINAL_DOT) &&
(iswdigit(cprev) || (IsRomanU(cprev) && (IsRomanU(cprev2) || iswspace(cprev2))))) // lang=hu
if(c1 == '.')
{
// dot after a number indicates an ordinal number
if(!iswdigit(cprev) || iswlower(c_next) || (c_next == '<'))
is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag)
if((tr->langopts.numbers & NUM_ORDINAL_DOT) &&
(iswdigit(cprev) || (IsRomanU(cprev) && (IsRomanU(cprev2) || iswspace(cprev2))))) // lang=hu
{
// dot after a number indicates an ordinal number
if(!iswdigit(cprev) || iswlower(c_next) || (c_next == '<'))
is_end_clause = 0; // only if followed by lower-case, (or if there is a XML tag)
}
else
if(iswlower(c_next))
{
// next word has no capital letter, this dot is probably from an abbreviation
c1 = ' ';
is_end_clause = 0;
}
if(any_alnum==0)
{
// no letters or digits yet, so probably not a sentence terminator
// Here, dot is followed by space or bracket
c1 = ' ';
is_end_clause = 0;
}
}
else
if(iswlower(c_next))
{
// next word has no capital letter, this dot is probably from an abbreviation
c1 = ' ';
is_end_clause = 0;
}
if(any_alnum==0)
{
c1 = ' '; // no letters or digits yet, so probably not a sentence terminator
is_end_clause = 0;
if(any_alnum==0)
{
// no letters or digits yet, so probably not a sentence terminator
is_end_clause = 0;
}
}
}

@@ -2424,7 +2474,6 @@ if(option_ssml) parag=1;
buf[ix] = ' ';
buf[ix+1] = 0;
punct_data = punct_attributes[punct];
if(nl_count > 1)
{
if((punct_data == CLAUSE_QUESTION) || (punct_data == CLAUSE_EXCLAMATION))
@@ -2449,12 +2498,14 @@ if(option_ssml) parag=1;

if(c1 == announced_punctuation)
{
// const unsigned short keep_punctuation[] = {
// '\'', '-', 0x92, 0xb4, 0x2019, 0x2032, 0 };

// This character has already been announced, so delete it so that it isn't spoken a second time.
// Unless it's a hyphen or apostrophe (which is used by TranslateClause() )
if(!IsBracket(c1))
if(IsBracket(c1))
{
c1 = 0xe000 + '('; // Unicode private useage area. So TranslateRules() knows the bracket name has been spoken
}
else
if(c1 != '-')
{
c1 = ' ';
}

+ 6
- 0
src/speech.h View File

@@ -27,6 +27,12 @@
#define ARCH_BIG
#endif

#ifdef __QNX__
#define NEED_GETOPT
#define NO_VARIADIC_MACROS
#endif


#define PLATFORM_POSIX
#define PATHSEP '/'
// USE_PORTAUDIO or USE_PULSEAUDIO are now defined in the makefile

+ 1
- 1
src/synthdata.cpp View File

@@ -35,7 +35,7 @@
#include "translate.h"
#include "wave.h"

const char *version_string = "1.41.18 19.Oct.09";
const char *version_string = "1.41.32 09.Nov.09";
const int version_phdata = 0x014118;

int option_device_number = -1;

+ 7
- 0
src/synthesize.cpp View File

@@ -1276,6 +1276,13 @@ int Generate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
else
{
DoSpect(p->ph,prev->ph,phoneme_tab[phonPAUSE],2,p,0);
if((p->newword == 0) && (next2->newword == 0))
{
if((next->type == phVFRICATIVE) && (p->ph->mnemonic !='d'))
DoPause(20,0);
if((next->type == phFRICATIVE) || (next->type == phNASAL))
DoPause(12,0);
}
}
break;


+ 4
- 2
src/tr_languages.cpp View File

@@ -154,6 +154,8 @@ static Translator* NewTranslator(void)
tr->langopts.param[LOPT_SONORANT_MIN] = 95;
tr->langopts.param[LOPT_MAXAMP_EOC] = 19;
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 's'; // don't count this character at start of word
tr->langopts.param[LOPT_BRACKET_PAUSE] = 4; // pause at bracket
tr->langopts.param2[LOPT_BRACKET_PAUSE] = 2; // pauses when announcing bracket names
tr->langopts.max_initial_consonants = 3;
tr->langopts.replace_chars = NULL;
tr->langopts.ascii_language = ""; // Non-Latin alphabet languages, use this language to speak Latin words, default is English
@@ -576,10 +578,10 @@ Translator *SelectTranslator(const char *name)

tr->langopts.vowel_pause = 0x20;
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x8036;
tr->langopts.stress_flags = 0x8036 | STRS_HYPEN_UNSTRESS;
tr->langopts.unstressed_wd1 = 2;
// tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x4; // don't propagate over word boundaries
tr->langopts.param[LOPT_IT_DOUBLING] = 1;
tr->langopts.param[LOPT_ANNOUNCE_PUNCT] = 2; // don't break clause before announcing . ? !
// tr->langopts.param[LOPT_COMBINE_WORDS] = 9; // combine some prepositions with the following word

tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_5 | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ROMAN_CAPITALS | NUM_ORDINAL_DOT | NUM_OMIT_1_HUNDRED;

+ 37
- 25
src/translate.cpp View File

@@ -75,6 +75,7 @@ static int embedded_flag = 0; // there are embedded commands to be applied to

static int prev_clause_pause=0;
static int max_clause_pause = 0;
static int any_stressed_words;
int pre_pause;


@@ -1100,7 +1101,7 @@ strcpy(phonemes2,phonemes);
{
char *p;
// German, keep a secondary stress on the stem
SetWordStress(tr, phonemes, dictionary_flags[0], 3, 0);
SetWordStress(tr, phonemes, dictionary_flags, 3, 0);

// reduce all but the first primary stress
ix=0;
@@ -1116,22 +1117,22 @@ strcpy(phonemes2,phonemes);
}
strcpy(word_phonemes,prefix_phonemes);
strcat(word_phonemes,phonemes);
SetWordStress(tr, word_phonemes, dictionary_flags[0], -1, 0);
SetWordStress(tr, word_phonemes, dictionary_flags, -1, 0);
}
else
{
// stress position affects the whole word, including prefix
strcpy(word_phonemes,prefix_phonemes);
strcat(word_phonemes,phonemes);
SetWordStress(tr, word_phonemes, dictionary_flags[0], -1, tr->prev_last_stress);
SetWordStress(tr, word_phonemes, dictionary_flags, -1, tr->prev_last_stress);
}
}
else
{
if(prefix_phonemes[0] == 0)
SetWordStress(tr, phonemes, dictionary_flags[0], -1, tr->prev_last_stress);
SetWordStress(tr, phonemes, dictionary_flags, -1, tr->prev_last_stress);
else
SetWordStress(tr, phonemes, dictionary_flags[0], -1, 0);
SetWordStress(tr, phonemes, dictionary_flags, -1, 0);
strcpy(word_phonemes,prefix_phonemes);
strcat(word_phonemes,phonemes);
}
@@ -1149,6 +1150,11 @@ strcpy(phonemes2,phonemes);
dictionary_flags[0] &= ~FLAG_PAUSE1;
}

if((wflags & FLAG_HYPHEN) && (tr->langopts.stress_flags & STRS_HYPEN_UNSTRESS))
{
ChangeWordStress(tr,word_phonemes,3);
}
else
if(wflags & FLAG_EMPHASIZED2)
{
// A word is indicated in the source text as stressed
@@ -1165,7 +1171,7 @@ strcpy(phonemes2,phonemes);
if(dictionary_flags[0] & (FLAG_STRESS_END | FLAG_STRESS_END2))
ChangeWordStress(tr,word_phonemes,4);
else
if(dictionary_flags[0] & FLAG_UNSTRESS_END)
if((dictionary_flags[0] & FLAG_UNSTRESS_END) && (any_stressed_words))
ChangeWordStress(tr,word_phonemes,3);
}

@@ -1227,7 +1233,7 @@ strcpy(phonemes2,phonemes);
tr->expect_past--;
}

if((word_length == 1) && iswalpha(first_char) && (first_char != 'i'))
if((word_length == 1) && (tr->translator_name == L('e','n')) && iswalpha(first_char) && (first_char != 'i'))
{
// English Specific !!!!
// any single letter before a dot is an abbreviation, except 'I'
@@ -1247,8 +1253,8 @@ strcpy(phonemes2,phonemes);
static void SetPlist2(PHONEME_LIST2 *p, unsigned char phcode)
{//==========================================================
p->phcode = phcode;
p->stress = 0;
p->tone_number = 0;
p->stresslevel = 0;
p->tone_ph = 0;
p->synthflags = embedded_flag;
p->sourceix = 0;
embedded_flag = 0;
@@ -1602,7 +1608,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
{
// this word uses a different phoneme table
SetPlist2(&ph_list2[n_ph_list2],phonSWITCH);
ph_list2[n_ph_list2++].tone_number = switch_phonemes; // temporary phoneme table number
ph_list2[n_ph_list2++].tone_ph = switch_phonemes; // temporary phoneme table number
}

// remove initial pause from a word if it follows a hyphen
@@ -1622,7 +1628,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
ph_list2[n_ph_list2].phcode = ph_code;
ph_list2[n_ph_list2].sourceix = 0;
ph_list2[n_ph_list2].synthflags = embedded_flag;
ph_list2[n_ph_list2++].tone_number = *p++;
ph_list2[n_ph_list2++].tone_ph = *p++;
}
else
if(ph->type == phSTRESS)
@@ -1637,7 +1643,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
// for tone languages, the tone number for a syllable follows the vowel
if(prev_vowel >= 0)
{
ph_list2[prev_vowel].tone_number = ph_code;
ph_list2[prev_vowel].tone_ph = ph_code;
}
else
{
@@ -1651,7 +1657,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
// mark the previous phoneme as a syllabic consonant
prev_vowel = n_ph_list2-1;
ph_list2[prev_vowel].synthflags |= SFLAG_SYLLABLE;
ph_list2[prev_vowel].stress = next_stress;
ph_list2[prev_vowel].stresslevel = next_stress;
}
else
if(ph_code == phonLENGTHEN)
@@ -1678,7 +1684,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
else
{
ph_list2[n_ph_list2].phcode = ph_code;
ph_list2[n_ph_list2].tone_number = 0;
ph_list2[n_ph_list2].tone_ph = 0;
ph_list2[n_ph_list2].synthflags = embedded_flag | found_dict_flag;
embedded_flag = 0;
ph_list2[n_ph_list2].sourceix = srcix;
@@ -1689,8 +1695,13 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
stress = next_stress;
next_stress = 0;

if(stress >= 4)
{
any_stressed_words = 1;
}

if((prev_vowel >= 0) && (n_ph_list2-1) != prev_vowel)
ph_list2[n_ph_list2-1].stress = stress; // set stress for previous consonant
ph_list2[n_ph_list2-1].stresslevel = stress; // set stress for previous consonant

ph_list2[n_ph_list2].synthflags |= SFLAG_SYLLABLE;
prev_vowel = n_ph_list2;
@@ -1702,7 +1713,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
}
if(next_tone != 0)
{
ph_list2[n_ph_list2].tone_number = next_tone;
ph_list2[n_ph_list2].tone_ph = next_tone;
next_tone=0;
}
}
@@ -1720,7 +1731,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
}
}

ph_list2[n_ph_list2].stress = stress;
ph_list2[n_ph_list2].stresslevel = stress;
n_ph_list2++;
first_phoneme = 0;
}
@@ -1742,7 +1753,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa
// this word uses a different phoneme table, now switch back
SelectPhonemeTable(voice->phoneme_tab_ix);
SetPlist2(&ph_list2[n_ph_list2],phonSWITCH);
ph_list2[n_ph_list2++].tone_number = voice->phoneme_tab_ix; // original phoneme table number
ph_list2[n_ph_list2++].tone_ph = voice->phoneme_tab_ix; // original phoneme table number
}


@@ -2021,6 +2032,7 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t
embedded_read = 0;
option_phoneme_input &= ~2; // clear bit 1 (temporary indication)
pre_pause = 0;
any_stressed_words = 0;

if((clause_start_char = count_characters) < 0)
clause_start_char = 0;
@@ -2390,7 +2402,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
else
if(c=='-')
{
if(IsAlpha(prev_in) && IsAlpha(next_in))
if((IsAlpha(prev_in) || iswdigit(prev_in)) && IsAlpha(next_in))
{
// '-' between two letters is a hyphen, treat as a space
word_flags |= FLAG_HYPHEN;
@@ -2683,17 +2695,17 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
}
word = pw;

// include the next few characters, in case there are an ordinal indicator
// include the next few characters, in case there are an ordinal indicator or other suffix
pn[0] = ' ';
memcpy(pn+1, pw, 8);
pn[8] = 0;
memcpy(pn+1, pw, 16);
pn[16] = 0;

for(pw = &number_buf[1]; pw < pn;)
{
// keep wflags for each part, for FLAG_HYPHEN_AFTER
dict_flags = TranslateWord2(tr, pw, &words[ix], words[ix].pre_pause,0 );
while(*pw++ != ' ');
words[ix].pre_pause = 0;
words[ix].flags = 0;
}
}
else
@@ -2730,7 +2742,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre

if(dict_flags & FLAG_SKIPWORDS)
{
ix += dictionary_skipwords; // dictionary indicates skip next word(s)
ix += dictionary_skipwords; // dictionary indicates skip next word(s)
}
}

@@ -2740,7 +2752,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre
PHONEME_LIST2 *p2;
p2 = &ph_list2[n_ph_list2 + ix];
p2->phcode = phonPAUSE;
p2->stress = 0;
p2->stresslevel = 0;
p2->sourceix = source_index;
p2->synthflags = 0;
}

+ 23
- 13
src/translate.h View File

@@ -76,9 +76,9 @@
#define FLAG_VERB_EXT 0x100 /* extend the 'verb follows' */
#define FLAG_CAPITAL 0x200 /* pronunciation if initial letter is upper case */
#define FLAG_ALLCAPS 0x400 // only if the word is all capitals
#define BITNUM_FLAG_ALLCAPS 0x2a
#define FLAG_ACCENT 0x800 // character name is base-character name + accent name
#define FLAG_HYPHENATED 0x1000 // multiple-words, but needs hyphen between parts 1 and 2
#define BITNUM_FLAG_ALLCAPS 0x2a
#define BITNUM_FLAG_HYPHENATED 0x2c


@@ -164,29 +164,30 @@

// Punctuation types returned by ReadClause()
// bits 0-7 pause x 10mS, bits 12-14 intonation type,
// bit 15- don't need space after the punctuation
// bit 19=sentence, bit 18=clause, bits 17=voice change
// bit 16 used to distinguish otherwise identical types
// bit 20= punctuation character can be inside a word (Armenian)
// bit 21= speak the name of the punctuation character
#define CLAUSE_BIT_SENTENCE 0x80000
#define CLAUSE_BIT_CLAUSE 0x40000
#define CLAUSE_BIT_VOICE 0x20000
#define CLAUSE_BITS_INTONATION 0x7000
#define PUNCT_IN_WORD 0x100000
#define PUNCT_SAY_NAME 0x200000

#define CLAUSE_NONE 0 + 0x04000
#define CLAUSE_PARAGRAPH 70 + 0x80000
#define CLAUSE_EOF 35 + 0x90000
#define CLAUSE_EOF 40 + 0x90000
#define CLAUSE_VOICE 0 + 0x24000
#define CLAUSE_PERIOD 35 + 0x80000
#define CLAUSE_PERIOD 40 + 0x80000
#define CLAUSE_COMMA 20 + 0x41000
#define CLAUSE_SHORTCOMMA 4 + 0x41000
#define CLAUSE_SHORTFALL 4 + 0x40000
#define CLAUSE_QUESTION 35 + 0x82000
#define CLAUSE_EXCLAMATION 40 + 0x83000
#define CLAUSE_QUESTION 40 + 0x82000
#define CLAUSE_EXCLAMATION 45 + 0x83000
#define CLAUSE_COLON 30 + 0x40000
#ifdef PLATFORM_RISCOS
#define CLAUSE_SEMICOLON 30 + 0x40000
#else
#define CLAUSE_SEMICOLON 30 + 0x41000
#endif

#define SAYAS_CHARS 0x12
#define SAYAS_GLYPHS 0x13
@@ -225,8 +226,8 @@ typedef struct{
// a clause translated into phoneme codes (first stage)
typedef struct {
unsigned char phcode;
unsigned char stress;
unsigned char tone_number;
unsigned char stresslevel;
unsigned char tone_ph;
unsigned char synthflags;
unsigned short sourceix;
} PHONEME_LIST2;
@@ -242,7 +243,7 @@ extern const int param_defaults[N_SPEECH_PARAM];



#define N_LOPTS 16
#define N_LOPTS 18
#define LOPT_DIERESES 1
// 1=remove [:] from unstressed syllables, 2= remove from unstressed or non-penultimate syllables
// bit 4=0, if stress < 4, bit 4=1, if not the highest stress in the word
@@ -296,6 +297,12 @@ extern const int param_defaults[N_SPEECH_PARAM];
// Call ApplySpecialAttributes() if $alt or $alt2 is set for a word
#define LOPT_ALT 15

// pause for bracket (default=4), pause when annoucing bracket names (default=2)
#define LOPT_BRACKET_PAUSE 16

// bit 1, don't break clause before annoucning . ? !
#define LOPT_ANNOUNCE_PUNCT 17


// stress_rule
#define STRESSPOSN_1L 0 // 1st syllable
@@ -314,6 +321,7 @@ typedef struct {
int vowel_pause;
int stress_rule; // 1=first syllable, 2=penultimate, 3=last

#define STRS_HYPEN_UNSTRESS 0x100000
// bit0=don't stress monosyllables, except at end of clause
// bit1=don't set diminished stress,
// bit2=mark unstressed final syllables as diminished
@@ -329,11 +337,13 @@ typedef struct {
// bit17= "priority" stress reduces other primary stress to "unstressed" not "secondary"
// bit18= don't lengthen short vowels more than long vowels at end-of-clause
// bit19=stress on final syllable if it has a long vowel, but previous syllable has a short vowel
// bit20= hyphenated words, 2nd part is unstressed

int stress_flags;
int unstressed_wd1; // stress for $u word of 1 syllable
int unstressed_wd2; // stress for $u word of >1 syllable
int param[N_LOPTS];
int param2[N_LOPTS];
unsigned char *length_mods;
unsigned char *length_mods0;

@@ -605,7 +615,7 @@ void CalcPitches(Translator *tr, int clause_tone);

int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy);
int Unpronouncable(Translator *tr, char *word);
void SetWordStress(Translator *tr, char *output, unsigned int &dictionary_flags, int tonic, int prev_stress);
void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, int tonic, int prev_stress);
int TranslateRules(Translator *tr, char *p, char *phonemes, int size, char *end_phonemes, int end_flags, unsigned int *dict_flags);
int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab);
void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *tone, char **voice_change);

+ 22
- 23
src/voices.cpp View File

@@ -113,12 +113,12 @@ enum {



typedef struct {
const char *mnem;
int data;
} keywtab_t;
static MNEM_TAB options_tab[] = {
{"reduce_t", LOPT_REDUCE_T},
{"bracket", LOPT_BRACKET_PAUSE},
{NULL, -1} };

static keywtab_t keyword_tab[] = {
static MNEM_TAB keyword_tab[] = {
{"name", V_NAME},
{"language", V_LANGUAGE},
{"gender", V_GENDER},
@@ -373,11 +373,12 @@ void VoiceReset(int tone_only)

static int breath_widths[N_PEAKS] = {0,200,200,400,400,400,600,600,600};

// default is: pitch 82,118
// voice->pitch_base = 0x49000; // default, 73 << 12;
// voice->pitch_range = 0x0f30; // default = 0x1000
voice->pitch_base = 0x47000;
voice->pitch_range = 3996;
// default is: pitch 78,120
voice->pitch_base = 0x45000;
voice->pitch_range = 4536;
// default is: pitch 80,117
// voice->pitch_base = 0x47000;
// voice->pitch_range = 3996;

voice->formant_factor = 256;

@@ -503,12 +504,12 @@ voice_t *LoadVoice(const char *vname, int control)
// bit 4 1 = vname = full path

FILE *f_voice = NULL;
keywtab_t *k;
char *p;
int key;
int ix;
int n;
int value;
int value2;
int error = 0;
int langix = 0;
int tone_only = control & 2;
@@ -527,6 +528,7 @@ voice_t *LoadVoice(const char *vname, int control)
char translator_name[40];
char new_dictionary[40];
char phonemes_name[40];
char option_name[40];
const char *language_type;
char buf[200];
char path_voices[sizeof(path_home)+12];
@@ -631,15 +633,7 @@ voice_t *LoadVoice(const char *vname, int control)

if(buf[0] == 0) continue;

key = 0;
for(k=keyword_tab; k->mnem != NULL; k++)
{
if(strcmp(buf,k->mnem)==0)
{
key = k->data;
break;
}
}
key = LookupMnem(keyword_tab, buf);

switch(key)
{
@@ -804,10 +798,15 @@ voice_t *LoadVoice(const char *vname, int control)
break;

case V_OPTION:
if(sscanf(p,"%d %d",&ix,&value) == 2)
value2 = 0;
if((sscanf(p,"%s %d %d",option_name,&value,&value2) >= 2) && ((ix = LookupMnem(options_tab, option_name)) >= 0))
{
langopts->param[ix] = value;
langopts->param2[ix] = value2;
}
else
{
if((ix >= 0) && (ix < N_LOPTS))
langopts->param[ix] = value;
fprintf(stderr,"Bad voice option: %s %s\n",buf,p);
}
break;


Loading…
Cancel
Save