Co-authored-by: Sebastien Le Maguer <[email protected]>master
* piqd (Klingon) -- Valdis Vitolins | * piqd (Klingon) -- Valdis Vitolins | ||||
* qu (Quechua) -- Valdis Vitolins | * qu (Quechua) -- Valdis Vitolins | ||||
* qdb (Lang Belta) -- Da Def, Valdis Vitolins | * qdb (Lang Belta) -- Da Def, Valdis Vitolins | ||||
* smj (Lule Saami) -- Katri Hiovain, Sebastien Le Maguer | |||||
* th (Thai) -- Valdis Vitolins | * th (Thai) -- Valdis Vitolins | ||||
* tk (Turkmen) -- boracasli98, Valdis Vitolins | * tk (Turkmen) -- boracasli98, Valdis Vitolins | ||||
* ug (Uyghur) -- boracasli98, Valdis Vitolins | * ug (Uyghur) -- boracasli98, Valdis Vitolins |
phsource/ph_latvian \ | phsource/ph_latvian \ | ||||
phsource/ph_lithuanian \ | phsource/ph_lithuanian \ | ||||
phsource/ph_lojban \ | phsource/ph_lojban \ | ||||
phsource/ph_lule_saami \ | |||||
phsource/ph_macedonian \ | phsource/ph_macedonian \ | ||||
phsource/ph_malayalam \ | phsource/ph_malayalam \ | ||||
phsource/ph_maltese \ | phsource/ph_maltese \ | ||||
espeak-ng-data/si_dict \ | espeak-ng-data/si_dict \ | ||||
espeak-ng-data/sk_dict \ | espeak-ng-data/sk_dict \ | ||||
espeak-ng-data/sl_dict \ | espeak-ng-data/sl_dict \ | ||||
espeak-ng-data/smj_dict \ | |||||
espeak-ng-data/sq_dict \ | espeak-ng-data/sq_dict \ | ||||
espeak-ng-data/sr_dict \ | espeak-ng-data/sr_dict \ | ||||
espeak-ng-data/sv_dict \ | espeak-ng-data/sv_dict \ | ||||
sl: espeak-ng-data/sl_dict | sl: espeak-ng-data/sl_dict | ||||
espeak-ng-data/sl_dict: dictsource/sl_list dictsource/sl_rules dictsource/sl_extra dictsource/sl_emoji | espeak-ng-data/sl_dict: dictsource/sl_list dictsource/sl_rules dictsource/sl_extra dictsource/sl_emoji | ||||
smj: espeak-ng-data/smj_dict | |||||
espeak-ng-data/smj_dict: dictsource/smj_list dictsource/smj_rules | |||||
sq: espeak-ng-data/sq_dict | sq: espeak-ng-data/sq_dict | ||||
espeak-ng-data/sq_dict: dictsource/sq_list dictsource/sq_rules dictsource/sq_extra dictsource/sq_emoji | espeak-ng-data/sq_dict: dictsource/sq_list dictsource/sq_rules dictsource/sq_extra dictsource/sq_emoji | ||||
// SMJ translation rules | |||||
// This file is UTF-8 encoded | |||||
// _) a // "a" at the start of a word | |||||
// a (CC // "a" followed by two consonants | |||||
// a (C% // "a" followed by a double consonant (the same letter twice) | |||||
// a (/% // "a" followed by a percent sign | |||||
// %C) a // "a" preceded by a double consonants | |||||
// @@) bi // "bi" preceded by at least two syllables | |||||
// @@a) bi // "bi" preceded by at least 2 syllables and following 'a' | |||||
// START SMJ HERE | |||||
// groups | |||||
//.L01 i j // used in palatalization rules | |||||
.L01 b d g k p t // Plosives | |||||
.L02 r l j v // Sonorants | |||||
//.L02 b d f g h j l m n r s v | |||||
//.L03 l m n r | |||||
//.L04 a b c d e f g h i j k l m n o p q r s t u v õ ä ö ü | |||||
//.L05 a e i l m n o r u õ ä ö ü | |||||
// Epenthetic vowels in Q3 consonant clusters | |||||
// r l j v followed by homorganic consonants (geminates) | |||||
// barggo, dárbbo, tjoarvve, girjje, álggo, galbba, gålmmå, dálvve, nijbbe, bievdde | |||||
// separate rules for all cons. clusters and vowel nucleai? | |||||
// a (L02%C // possible to generalize? | |||||
// A) rgg r@^g // Any vowel + schwaa - more general? | |||||
//Orthographically homonymous Q3: f, l, m, n, nj, ń, ñ, ŋ, r, s, sj, v | |||||
// After numeral 1 -- Q3; after any numeral <1 -- Q2? | |||||
// akta @) ff ff: | |||||
// Word order? -- Impossible to have a syntactic disambiguator in Espeak to recognize homonymous sg.nom & sg.gen forms... | |||||
// OR if adjusted orthography would be used, e.g.: f'f/fff ff: | |||||
// Vowel compensation/readjustment: V1 and V2 longest in Q1, gradually decreasing in length, but differences very small/not significant. | |||||
.group a | |||||
// a A | |||||
a (@ A // back vowel | |||||
@) a a: | |||||
artihkal ar.t'ihkAl | |||||
%CC) a A // short after Q3 consonant/cluster | |||||
.group á | |||||
%CC) á a // short after Q3 consonant/cluster | |||||
á (@ A: // | |||||
@) á a: // in 2nd syll | |||||
C) á A: // after Q1 (single) consonant | |||||
.group ä | |||||
ä (@ & | |||||
ä &: // | |||||
// ä i& // in Sweden | |||||
ä e& // in Sweden | |||||
.group æ // same as ä | |||||
æ (@ & | |||||
æ &: // | |||||
// æ i& // in Sweden | |||||
æ e& // in Sweden | |||||
%CC) æ & // short after Q3 consonant/cluster | |||||
.group å | |||||
å O | |||||
@) å O: // in 2nd syll | |||||
%CC) å O // short after Q3 consonant/cluster | |||||
.group b | |||||
b p | |||||
A) b (A b // voiced in an intervocalic position | |||||
bb b: // voiced within a geminate | |||||
bussa p'u-s:A // Scandinavian loanword | |||||
.group c | |||||
c ts | |||||
.group d | |||||
d t | |||||
dal dAl | |||||
A) d (A d // voiced in an intervocalic position | |||||
dd d: | |||||
dj c // palatal plosive | |||||
A) dj (A J\ // voiced palatal plosive between vowels | |||||
A) ddj (A J\: // voiced palatal plosive between vowels | |||||
dts dz // [d͡z] | |||||
dtj dZ // [d͡ʒ] | |||||
.group e | |||||
e (@ E: // open-mid | |||||
e (_ iE // open 2nd syll | |||||
@) e iE // in 2nd syll | |||||
e E // other environments | |||||
.group f | |||||
f f | |||||
ff f: | |||||
akta @) ff (A ff: // (Q3/sg.nom when with numeral 1) | |||||
.group g | |||||
g k | |||||
A) g (A g // voiced in an intervocalic position | |||||
gg g: | |||||
.group h | |||||
h h | |||||
hk hk | |||||
hkk k: // [h] not audible in Q3 cons. cluster | |||||
hp hp | |||||
hpp p: // [h] not audible in Q3 cons. cluster | |||||
ht ht | |||||
htt t: // [h] not audible in Q3 cons. cluster | |||||
hts hts | |||||
htts h:ts | |||||
htj htS | |||||
httj ht:S | |||||
.group i | |||||
i i: // can be long as well? | |||||
ie (@ iE | |||||
%CC) i i // short after Q3 consonant | |||||
.group j | |||||
j j | |||||
ja ja | |||||
i) jbb jIb | |||||
journalissta Sur.nal'isstA | |||||
.group k | |||||
k k | |||||
k (á kh // Aspirated in Scandinavian loanwords, like this? | |||||
káffa kh'A:f:A | |||||
kásus kh'A:su-s | |||||
kássa kh'A:S:A | |||||
kk k: | |||||
.group l | |||||
l l // Can be a copula itself | |||||
ll l: | |||||
akta @) ll (A ll: // (Q3/sg.nom when with numeral 1) | |||||
á) lgg lAg // Q3 | |||||
a) lbb lab // Q3 | |||||
u) lpp lub // Q3 | |||||
á) lmm lAm // Q3 | |||||
á) lvv lAv // Q3 | |||||
.group m | |||||
m m | |||||
mm m: | |||||
akta @) mm (A mm: // (Q3/sg.nom when with numeral 1) | |||||
.group n | |||||
n n | |||||
nj n_j | |||||
nnj n_j: | |||||
akta @) nnj (A nn_j: // (Q3/sg.nom when with numeral 1) | |||||
.group ñ | |||||
ñ N | |||||
ññ N: | |||||
akta @) ññ (A NN: // (Q3/sg.nom when with numeral 1) | |||||
.group ń | |||||
ń N | |||||
ńń N: | |||||
akta @) ńń (A NN: // (Q3/sg.nom when with numeral 1) | |||||
.group ŋ | |||||
ŋ N | |||||
ŋŋ N: | |||||
akta @) ŋŋ (A NN: // (Q3/sg.nom when with numeral 1) | |||||
.group o | |||||
o oO | |||||
@) o uo | |||||
oa ua // | |||||
oa (@ oA // | |||||
.group ö | |||||
%CC) ö Y | |||||
ö Y: // | |||||
.group ø | |||||
%CC) ø Y | |||||
ø Y: // | |||||
.group p | |||||
p p | |||||
p (á ph // Aspirated in Scandinavian loanwords | |||||
pp p: | |||||
parlamænnta par.lAm'&ntA | |||||
.group r | |||||
r r | |||||
rd rt | |||||
rl rl | |||||
// rl l. // Retroflex. in Scandinavian loanwords | |||||
rn rn | |||||
// rn n. // Retroflex. in Scandinavian loanwords | |||||
rt rt | |||||
// rt t. // Retroflex. in Scandinavian loanwords | |||||
a) rgg rag // Q3 | |||||
e) rgg reg // Q3 | |||||
æ) rgg r&g // Q3 | |||||
a) rvv rav // Q3 | |||||
á) rbb rAb // Q3 | |||||
i) rjj rij // Q3 | |||||
u) rŋŋ ruN // Q3 | |||||
rr r: | |||||
akta @) rr (A rr: // (Q3/sg.nom when with numeral 1) | |||||
.group s | |||||
s s | |||||
ss s: | |||||
akta @) ss (A ss: // (Q3/sg.nom when with numeral 1) | |||||
sj S | |||||
ssj S: // Q2 or Q3 | |||||
akta @) ssj (A SS: // (Q3/sg.nom when with numeral 1) | |||||
.group t | |||||
t t | |||||
t (á th // Aspirated in Scandinavian loanwords | |||||
t (_ ht // at the end of a word | |||||
tt t: | |||||
tj tS // voiceless alveo-palatal fricative in Sweden | |||||
ts ts // voiceless alveo-palatal fricative in Sweden e.g. <subtsas> | |||||
tts ts: | |||||
.group u | |||||
u u | |||||
uo (@ uo | |||||
// u u: // | |||||
// u U- // | |||||
// u u- // in newish Scand. loanwords like <komuvnna> | |||||
// List some of most common scand. loanwords? | |||||
.group v | |||||
v v | |||||
vv v: | |||||
L01) v f // before a plosive | |||||
v (_ P // in the end of a word, e.g. 1sg suffix | |||||
e) vdd ved // Q3 | |||||
i) vdd vid // Q3 | |||||
å) vdd vOd // Q3 | |||||
akta @) vv (A vv: // (Q3/sg.nom when with numeral 1) | |||||
.group w | |||||
w v | |||||
.group x | |||||
x ks | |||||
xx k:s | |||||
.group y | |||||
y y | |||||
.group z | |||||
z ts | |||||
zz t:s // pizza | |||||
K) zh Z | |||||
name Lule Saami | |||||
language smj | |||||
status testing |
//==================================================== | |||||
// Lule Saami | |||||
//==================================================== | |||||
phoneme : // Lengthen previous vowel by "length" | |||||
virtual | |||||
length 160 | |||||
endphoneme | |||||
phoneme @ // close schwa | |||||
vwl starttype #@ endtype #@ | |||||
unstressed | |||||
length 120 | |||||
FMT(vowel/@_4) | |||||
endphoneme | |||||
phoneme i | |||||
vwl starttype #i endtype #i | |||||
length 140 | |||||
IfNextVowelAppend(;) | |||||
ChangeIfUnstressed(I) | |||||
FMT(vowel/i_4) | |||||
endphoneme | |||||
phoneme I | |||||
vwl starttype #i endtype #i | |||||
length 140 | |||||
IfNextVowelAppend(;) | |||||
FMT(vowel/ii_3) | |||||
endphoneme | |||||
phoneme e | |||||
vwl starttype #e endtype #e | |||||
length 150 | |||||
FMT(vowel/e_mid2) | |||||
endphoneme | |||||
phoneme E | |||||
vwl starttype #e endtype #e | |||||
length 160 | |||||
FMT(vowel/ee_4) | |||||
endphoneme | |||||
phoneme & | |||||
vwl starttype #a endtype #a | |||||
length 150 | |||||
FMT(vowel/&) | |||||
endphoneme | |||||
phoneme a | |||||
vwl starttype #a endtype #a | |||||
length 170 | |||||
// ChangeIfUnstressed(a2) | |||||
FMT(vowel/aa_9) | |||||
endphoneme | |||||
phoneme a2 | |||||
vwl starttype #a endtype #a | |||||
length 170 | |||||
FMT(vowel/aa#) | |||||
endphoneme | |||||
phoneme A | |||||
vwl starttype #a endtype #a | |||||
length 170 | |||||
FMT(vowel/aa_8) | |||||
endphoneme | |||||
phoneme o | |||||
vwl starttype #o endtype #o | |||||
length 155 | |||||
FMT(vowel/oo_1) | |||||
endphoneme | |||||
phoneme O | |||||
vwl starttype #o endtype #o | |||||
length 150 | |||||
FMT(vowel/o_mid) | |||||
endphoneme | |||||
phoneme Y | |||||
vwl starttype #@ endtype #@ | |||||
length 155 | |||||
FMT(vowel/y#) | |||||
endphoneme | |||||
phoneme u | |||||
vwl starttype #u endtype #u | |||||
length 140 | |||||
FMT(vowel/u_bck) | |||||
endphoneme | |||||
phoneme u1 // TEST | |||||
vwl starttype #u endtype #u | |||||
length 140 | |||||
FMT(vowel/u_2) | |||||
endphoneme | |||||
phoneme U // TEST | |||||
vwl starttype #u endtype #u | |||||
length 140 | |||||
FMT(vowel/uu_4) | |||||
endphoneme | |||||
phoneme u- | |||||
vwl starttype #u endtype #u | |||||
ipa ʉ | |||||
length 200 | |||||
FMT(vowel/u#_2) | |||||
endphoneme | |||||
phoneme y | |||||
vwl starttype #u endtype #u | |||||
length 150 | |||||
FMT(vowel/y) | |||||
endphoneme | |||||
phoneme W | |||||
vwl starttype #@ endtype #@ | |||||
length 120 | |||||
FMT(vowel/oe_2) | |||||
endphoneme | |||||
phoneme w | |||||
liquid | |||||
lengthmod 7 | |||||
starttype #u | |||||
IF nextPh(isVowel) THEN | |||||
NextVowelStarts | |||||
VowelStart(w/w@) | |||||
VowelStart(w/wa) | |||||
VowelStart(w/we) | |||||
VowelStart(w/wi) | |||||
VowelStart(w/wo) | |||||
VowelStart(w/wu) | |||||
EndSwitch | |||||
VowelEnding(w/xw, -30) | |||||
IF prevPhW(isNasal) THEN | |||||
FMT(w/w) | |||||
ELSEIF prevPhW(h) THEN | |||||
// none, [hw] | |||||
ELSE | |||||
FMT(w/_w) | |||||
ENDIF | |||||
ELSE | |||||
// no vowel follows | |||||
Vowelout len=50 | |||||
IF prevPh(#i) THEN | |||||
FMT(w/iw_) | |||||
ENDIF | |||||
FMT(w/w_) | |||||
ENDIF | |||||
endphoneme | |||||
// Diphthongs | |||||
//=========== | |||||
phoneme ai | |||||
vwl starttype #a endtype #i | |||||
length 310 | |||||
lng | |||||
FMT(vdiph/aai_3) | |||||
endphoneme | |||||
phoneme &i | |||||
vwl starttype #a endtype #i | |||||
length 290 | |||||
lng | |||||
FMT(vdiph/&i) | |||||
endphoneme | |||||
phoneme oi | |||||
vwl starttype #o endtype #i | |||||
length 280 | |||||
lng | |||||
FMT(vdiph/ooi) | |||||
endphoneme | |||||
phoneme ei | |||||
vwl starttype #e endtype #i | |||||
length 280 | |||||
lng | |||||
FMT(vdiph/eei_2) | |||||
endphoneme | |||||
phoneme Yi | |||||
vwl starttype #@ endtype #i | |||||
length 270 | |||||
lng | |||||
FMT(vdiph/y#i) | |||||
endphoneme | |||||
phoneme ui | |||||
vwl starttype #u endtype #i | |||||
length 270 | |||||
lng | |||||
FMT(vdiph/ui_4) | |||||
endphoneme | |||||
phoneme yi | |||||
vwl starttype #u endtype #i | |||||
length 270 | |||||
lng | |||||
FMT(vdiph/yi) | |||||
endphoneme | |||||
phoneme au | |||||
vwl starttype #a endtype #u | |||||
length 300 | |||||
lng | |||||
FMT(vdiph/aau) | |||||
endphoneme | |||||
phoneme ou | |||||
vwl starttype #o endtype #u | |||||
length 280 | |||||
lng | |||||
FMT(vdiph/ou) | |||||
endphoneme | |||||
phoneme eu | |||||
vwl starttype #e endtype #u | |||||
length 280 | |||||
lng | |||||
FMT(vdiph/eu_2) | |||||
endphoneme | |||||
phoneme iu | |||||
vwl starttype #i endtype #u | |||||
length 280 | |||||
lng | |||||
FMT(vdiph2/iu_2) | |||||
endphoneme | |||||
phoneme &y | |||||
vwl starttype #a endtype #u | |||||
length 280 | |||||
lng | |||||
FMT(vdiph/&y) | |||||
endphoneme | |||||
phoneme ey | |||||
vwl starttype #e endtype #u | |||||
length 280 | |||||
lng | |||||
FMT(vdiph/eey) | |||||
endphoneme | |||||
phoneme Yy | |||||
vwl starttype #@ endtype #u | |||||
length 270 | |||||
lng | |||||
FMT(vdiph/y#y) | |||||
endphoneme | |||||
phoneme iy | |||||
vwl starttype #i endtype #u | |||||
length 260 | |||||
lng | |||||
FMT(vdiph2/iy) | |||||
endphoneme | |||||
phoneme uo | |||||
vwl starttype #u endtype #o | |||||
length 280 | |||||
lng | |||||
FMT(vdiph2/uo) | |||||
endphoneme | |||||
phoneme ie | |||||
vwl starttype #i endtype #e | |||||
length 280 | |||||
lng | |||||
FMT(vdiph2/ie) | |||||
endphoneme | |||||
phoneme yY | |||||
vwl starttype #u endtype #@ | |||||
length 280 | |||||
lng | |||||
FMT(vdiph2/y-y#) | |||||
endphoneme | |||||
// CONSONANTS | |||||
//=========== | |||||
phoneme r | |||||
import_phoneme base1/R | |||||
endphoneme | |||||
phoneme r. // retroflex | |||||
liquid rfx | |||||
lengthmod 3 | |||||
Vowelout f1=3 f2=1400 -400 300 f3=-400 80 rms=35 len=15 colr=2 | |||||
Vowelin f1=2 f2=1400 -400 300 f3=-400 80 len=20 | |||||
IF nextPh(isNotVowel) THEN | |||||
FMT(r3/@tap_rfx_) | |||||
ENDIF | |||||
FMT(r3/@tap_rfx) | |||||
endphoneme | |||||
phoneme R2 // this is [R2], but shorter | |||||
liquid trl | |||||
lengthmod 6 | |||||
ipa r | |||||
Vowelin f1=0 f2=1700 -300 300 f3=-300 80 | |||||
Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk | |||||
FMT(r3/r_trill_short) addWav(r3/r_trill.wav, 50) | |||||
endphoneme | |||||
phoneme P | |||||
vls blb stp | |||||
lengthmod 2 | |||||
voicingswitch b | |||||
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 gpaus | |||||
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 | |||||
WAV(ustop/p_unasp) | |||||
endphoneme | |||||
phoneme v // approximant, not fricative | |||||
vcd lbd frc | |||||
lengthmod 6 | |||||
voicingswitch f | |||||
Vowelin f1=0 f2=1000 -300 -200 f3=-300 100 | |||||
Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 | |||||
IF nextPh(isPause2) THEN | |||||
FMT(voc/v_) | |||||
ENDIF | |||||
FMT(voc/v) | |||||
endphoneme | |||||
phoneme t // dental variant of /t/ | |||||
import_phoneme base1/t[ | |||||
voicingswitch d | |||||
endphoneme | |||||
phoneme d | |||||
vcd dnt stp | |||||
voicingswitch t | |||||
lengthmod 5 | |||||
Vowelin f1=2 f2=1700 -100 200 f3=0 80 | |||||
Vowelout f1=2 f2=1700 -100 200 f3=0 80 rms=20 | |||||
IF PreVoicing THEN | |||||
FMT(d/xd) | |||||
ENDIF | |||||
IF nextPh(isPause2) THEN | |||||
FMT(d/d_) addWav(x/d_) | |||||
ELIF nextPh(r) THEN | |||||
FMT(d/dr) addWav(x/d_dnt, 60) | |||||
ENDIF | |||||
FMT(d/d) addWav(x/d_dnt, 60) | |||||
endphoneme | |||||
phoneme n | |||||
vcd alv nas | |||||
lengthmod 4 | |||||
ipa n | |||||
IF nextPhW(isVelar) THEN // /n/ is velarized to /N/ when before velar stops | |||||
ChangePhoneme(N) | |||||
ENDIF | |||||
CALL base1/n | |||||
endphoneme | |||||
phoneme p | |||||
import_phoneme base2/p | |||||
voicingswitch b | |||||
endphoneme | |||||
phoneme k | |||||
import_phoneme base2/k | |||||
voicingswitch g | |||||
endphoneme | |||||
phoneme s2 // second part of long [s] | |||||
import_phoneme consonants/s2 | |||||
endphoneme | |||||
phoneme h | |||||
vls glt apr | |||||
lengthmod 3 | |||||
IF nextPh(#@) THEN | |||||
WAV(h/h@) | |||||
ELIF nextPh(#a) THEN | |||||
WAV(h/ha) | |||||
ELIF nextPh(#e) THEN | |||||
WAV(h/he) | |||||
ELIF nextPh(#i) THEN | |||||
WAV(h/hi) | |||||
ELIF nextPh(#o) THEN | |||||
WAV(h/hu_fi, 70) | |||||
ELIF nextPh(#u) THEN | |||||
WAV(h/hu_fi, 80) | |||||
ENDIF | |||||
WAV(h/h_, 70) // no vowel following | |||||
endphoneme | |||||
phoneme w | phoneme w | ||||
liquid | liquid | ||||
lengthmod 7 | lengthmod 7 | ||||
phoneme j // **y**es | phoneme j // **y**es | ||||
liquid pal starttype #i | liquid pal starttype #i | ||||
lengthmod 7 | lengthmod 7 | ||||
phonemetable fi base1 | phonemetable fi base1 | ||||
include ph_finnish | include ph_finnish | ||||
phonemetable smj base1 | |||||
include ph_lule_saami | |||||
phonemetable fr base1 | phonemetable fr base1 | ||||
include ph_french | include ph_french | ||||
a 0 712 1160 2780 696 1160 2780 | |||||
e 0 504 1900 2540 504 1900 2540 | |||||
i 0 312 2300 2820 304 2300 2820 | |||||
o 0 512 860 2648 512 860 2648 | |||||
u 0 320 740 2400 320 740 2400 | |||||
I 0 360 2120 2680 360 2120 2660 | |||||
& 0 736 1540 2500 752 1540 2500 | |||||
a2 0 657 1100 2703 657 1120 2703 | |||||
Y 0 448 1520 2420 463 1520 2400 | |||||
u1 0 344 800 2360 344 800 2360 | |||||
U 0 368 800 2660 368 800 2660 | |||||
y 0 280 1720 2340 280 1720 2340 | |||||
ai 0 688 1064 2806 312 2300 2820 | |||||
&i 0 744 1540 2500 328 2280 2720 | |||||
oi 0 545 780 2720 310 2002 2500 | |||||
ei 0 547 1855 2536 320 2300 2740 | |||||
Yi 0 448 1520 2420 355 2222 2720 | |||||
ui 0 320 740 2400 272 2247 3100 | |||||
yi 0 280 1720 2320 296 2280 2780 | |||||
au 0 688 1060 2580 368 900 2540 | |||||
ou 0 516 860 2648 312 860 2360 | |||||
eu 0 460 1929 2512 327 947 2367 | |||||
iu 0 296 2180 2820 320 920 2360 | |||||
&y 0 744 1520 2500 296 1720 2340 | |||||
ey 0 547 1855 2536 280 1720 2340 | |||||
Yy 0 448 1520 2420 280 1720 2340 | |||||
iy 0 280 2280 2820 280 1720 2340 | |||||
uo 0 344 896 2375 494 864 2468 | |||||
ie 0 280 2280 2820 728 1562 2520 | |||||
yY 0 280 1720 2340 448 1520 2420 |
tr->langopts.param[LOPT_IT_DOUBLING] = 1; | tr->langopts.param[LOPT_IT_DOUBLING] = 1; | ||||
tr->langopts.long_stop = 130; | tr->langopts.long_stop = 130; | ||||
tr->langopts.numbers = NUM_DECIMAL_COMMA + NUM_ALLOW_SPACE; | |||||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT; | |||||
// tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_ORDINAL_DOT; | |||||
SetLetterVowel(tr, 'y'); | SetLetterVowel(tr, 'y'); | ||||
tr->langopts.spelling_stress = 1; | tr->langopts.spelling_stress = 1; | ||||
tr->langopts.intonation_group = 3; // less intonation, don't raise pitch at comma | tr->langopts.intonation_group = 3; // less intonation, don't raise pitch at comma | ||||
tr->langopts.numbers2 = NUM2_THOUSANDS_VAR4; | tr->langopts.numbers2 = NUM2_THOUSANDS_VAR4; | ||||
tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator | tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator | ||||
break; | break; | ||||
case L3('s', 'm', 'j'): // Lule Saami | |||||
{ | |||||
static const unsigned char stress_amps_fi[8] = { 18, 16, 22, 22, 20, 22, 22, 22 }; | |||||
static const short stress_lengths_fi[8] = { 150, 180, 200, 200, 0, 0, 210, 250 }; | |||||
SetupTranslator(tr, stress_lengths_fi, stress_amps_fi); | |||||
tr->langopts.stress_rule = STRESSPOSN_1L; | |||||
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_2_TO_HEAVY; // move secondary stress from light to a following heavy syllable | |||||
tr->langopts.param[LOPT_IT_DOUBLING] = 1; | |||||
tr->langopts.long_stop = 130; | |||||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT; | |||||
SetLetterVowel(tr, 'y'); | |||||
tr->langopts.spelling_stress = 1; | |||||
tr->langopts.intonation_group = 3; // less intonation, don't raise pitch at comma | |||||
} | |||||
break; | |||||
case L('s', 'q'): // Albanian | case L('s', 'q'): // Albanian | ||||
{ | { | ||||
static const short stress_lengths_sq[8] = { 150, 150, 180, 180, 0, 0, 300, 300 }; | static const short stress_lengths_sq[8] = { 150, 150, 180, 180, 0, 0, 300, 300 }; |