Co-authored-by: Sebastien Le Maguer <[email protected]>master
| @@ -58,6 +58,7 @@ new languages: | |||
| * piqd (Klingon) -- Valdis Vitolins | |||
| * qu (Quechua) -- Valdis Vitolins | |||
| * qdb (Lang Belta) -- Da Def, Valdis Vitolins | |||
| * smj (Lule Saami) -- Katri Hiovain, Sebastien Le Maguer | |||
| * th (Thai) -- Valdis Vitolins | |||
| * tk (Turkmen) -- boracasli98, Valdis Vitolins | |||
| * ug (Uyghur) -- boracasli98, Valdis Vitolins | |||
| @@ -383,6 +383,7 @@ phsource/phonemes.stamp: \ | |||
| phsource/ph_latvian \ | |||
| phsource/ph_lithuanian \ | |||
| phsource/ph_lojban \ | |||
| phsource/ph_lule_saami \ | |||
| phsource/ph_macedonian \ | |||
| phsource/ph_malayalam \ | |||
| phsource/ph_maltese \ | |||
| @@ -578,6 +579,7 @@ dictionaries: \ | |||
| espeak-ng-data/si_dict \ | |||
| espeak-ng-data/sk_dict \ | |||
| espeak-ng-data/sl_dict \ | |||
| espeak-ng-data/smj_dict \ | |||
| espeak-ng-data/sq_dict \ | |||
| espeak-ng-data/sr_dict \ | |||
| espeak-ng-data/sv_dict \ | |||
| @@ -870,6 +872,9 @@ espeak-ng-data/sk_dict: dictsource/sk_list dictsource/sk_rules dictsource/sk_ext | |||
| sl: espeak-ng-data/sl_dict | |||
| 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 | |||
| espeak-ng-data/sq_dict: dictsource/sq_list dictsource/sq_rules dictsource/sq_extra dictsource/sq_emoji | |||
| @@ -0,0 +1,282 @@ | |||
| // 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 | |||
| @@ -0,0 +1,4 @@ | |||
| name Lule Saami | |||
| language smj | |||
| status testing | |||
| @@ -0,0 +1,427 @@ | |||
| //==================================================== | |||
| // 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 | |||
| @@ -602,7 +602,6 @@ endphoneme | |||
| phoneme w | |||
| liquid | |||
| lengthmod 7 | |||
| @@ -639,7 +638,6 @@ endphoneme | |||
| phoneme j // **y**es | |||
| liquid pal starttype #i | |||
| lengthmod 7 | |||
| @@ -1710,6 +1708,9 @@ include ph_farsi | |||
| phonemetable fi base1 | |||
| include ph_finnish | |||
| phonemetable smj base1 | |||
| include ph_lule_saami | |||
| phonemetable fr base1 | |||
| include ph_french | |||
| @@ -0,0 +1,30 @@ | |||
| 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 | |||
| @@ -811,7 +811,8 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.param[LOPT_IT_DOUBLING] = 1; | |||
| 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'); | |||
| tr->langopts.spelling_stress = 1; | |||
| tr->langopts.intonation_group = 3; // less intonation, don't raise pitch at comma | |||
| @@ -1400,6 +1401,26 @@ Translator *SelectTranslator(const char *name) | |||
| tr->langopts.numbers2 = NUM2_THOUSANDS_VAR4; | |||
| tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator | |||
| 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 | |||
| { | |||
| static const short stress_lengths_sq[8] = { 150, 150, 180, 180, 0, 0, 300, 300 }; | |||