Browse Source

Revert "Move most stress rule definitions from tr_languages.c to language files"

This reverts commit 0f55204522.

This breaks using voice files like mb-de5-en. It could also use
named values for the stress rules (e.g. 'first-syllable').
master
Reece H. Dunn 7 years ago
parent
commit
ecd0902a10
73 changed files with 63 additions and 74 deletions
  1. 2
    1
      docs/voices.md
  2. 0
    1
      espeak-ng-data/lang/aav/vi
  3. 0
    1
      espeak-ng-data/lang/art/eo
  4. 0
    1
      espeak-ng-data/lang/art/ia
  5. 0
    1
      espeak-ng-data/lang/art/jbo
  6. 0
    1
      espeak-ng-data/lang/bat/lt
  7. 0
    1
      espeak-ng-data/lang/bat/lv
  8. 0
    1
      espeak-ng-data/lang/bnt/sw
  9. 0
    1
      espeak-ng-data/lang/bnt/tn
  10. 0
    1
      espeak-ng-data/lang/ccs/ka
  11. 0
    1
      espeak-ng-data/lang/cel/cy
  12. 0
    1
      espeak-ng-data/lang/cel/ga
  13. 0
    1
      espeak-ng-data/lang/cel/gd
  14. 0
    1
      espeak-ng-data/lang/cus/om
  15. 0
    1
      espeak-ng-data/lang/dra/kn
  16. 0
    1
      espeak-ng-data/lang/dra/ml
  17. 0
    1
      espeak-ng-data/lang/dra/ta
  18. 0
    1
      espeak-ng-data/lang/dra/te
  19. 0
    1
      espeak-ng-data/lang/esx/kl
  20. 0
    1
      espeak-ng-data/lang/eu
  21. 0
    1
      espeak-ng-data/lang/gmq/da
  22. 0
    1
      espeak-ng-data/lang/gmq/is
  23. 0
    1
      espeak-ng-data/lang/gmq/nb
  24. 0
    1
      espeak-ng-data/lang/gmq/sv
  25. 0
    1
      espeak-ng-data/lang/gmw/af
  26. 0
    1
      espeak-ng-data/lang/gmw/de
  27. 0
    1
      espeak-ng-data/lang/gmw/en
  28. 0
    1
      espeak-ng-data/lang/gmw/nl
  29. 0
    1
      espeak-ng-data/lang/grk/el
  30. 0
    1
      espeak-ng-data/lang/grk/grc
  31. 0
    2
      espeak-ng-data/lang/inc/as
  32. 0
    1
      espeak-ng-data/lang/inc/bn
  33. 0
    1
      espeak-ng-data/lang/inc/bpy
  34. 0
    1
      espeak-ng-data/lang/inc/gu
  35. 0
    1
      espeak-ng-data/lang/inc/hi
  36. 0
    1
      espeak-ng-data/lang/inc/mr
  37. 0
    1
      espeak-ng-data/lang/inc/ne
  38. 0
    1
      espeak-ng-data/lang/inc/or
  39. 0
    1
      espeak-ng-data/lang/inc/pa
  40. 0
    1
      espeak-ng-data/lang/inc/si
  41. 0
    1
      espeak-ng-data/lang/ine/hy
  42. 1
    1
      espeak-ng-data/lang/ine/sq
  43. 1
    1
      espeak-ng-data/lang/ira/ku
  44. 0
    1
      espeak-ng-data/lang/ko
  45. 1
    1
      espeak-ng-data/lang/poz/id
  46. 0
    2
      espeak-ng-data/lang/poz/ms
  47. 0
    1
      espeak-ng-data/lang/roa/an
  48. 0
    1
      espeak-ng-data/lang/roa/ca
  49. 0
    1
      espeak-ng-data/lang/roa/es
  50. 0
    1
      espeak-ng-data/lang/roa/fr
  51. 0
    1
      espeak-ng-data/lang/roa/it
  52. 1
    1
      espeak-ng-data/lang/roa/pap
  53. 0
    1
      espeak-ng-data/lang/roa/pt
  54. 1
    1
      espeak-ng-data/lang/roa/pt-BR
  55. 0
    1
      espeak-ng-data/lang/sai/gn
  56. 0
    1
      espeak-ng-data/lang/sem/am
  57. 0
    1
      espeak-ng-data/lang/sem/mt
  58. 0
    1
      espeak-ng-data/lang/trk/az
  59. 0
    1
      espeak-ng-data/lang/trk/tr
  60. 0
    1
      espeak-ng-data/lang/trk/tt
  61. 0
    1
      espeak-ng-data/lang/urj/fi
  62. 1
    1
      espeak-ng-data/lang/urj/hu
  63. 0
    1
      espeak-ng-data/lang/zle/ru
  64. 0
    1
      espeak-ng-data/lang/zls/bg
  65. 0
    1
      espeak-ng-data/lang/zls/bs
  66. 0
    1
      espeak-ng-data/lang/zls/hr
  67. 0
    1
      espeak-ng-data/lang/zls/mk
  68. 0
    1
      espeak-ng-data/lang/zls/sl
  69. 0
    1
      espeak-ng-data/lang/zls/sr
  70. 0
    1
      espeak-ng-data/lang/zlw/cs
  71. 0
    1
      espeak-ng-data/lang/zlw/pl
  72. 0
    1
      espeak-ng-data/lang/zlw/sk
  73. 55
    0
      src/libespeak-ng/tr_languages.c

+ 2
- 1
docs/voices.md View File

3. langopts->unstressed_wd1 (stress for $u word of 1 syllable) 3. langopts->unstressed_wd1 (stress for $u word of 1 syllable)
4. langopts->unstressed_wd2 (stress for $u word of >1 syllable) 4. langopts->unstressed_wd2 (stress for $u word of >1 syllable)


All parameters are not required. For example, "stressRule 2 1" is valid.
If a value is not given, it defaults to zero. For example:
"stressRule 2" is equal to "stressRule 2 0 0 0"


### stressLength ### stressLength



+ 0
- 1
espeak-ng-data/lang/aav/vi View File



words 1 words 1
pitch 80 118 pitch 80 118
stressRule 0

+ 0
- 1
espeak-ng-data/lang/art/eo View File

language eo language eo


apostrophe 2 apostrophe 2
stressRule 2

+ 0
- 1
espeak-ng-data/lang/art/ia View File

name Interlingua name Interlingua
language ia language ia
stressRule 2

+ 0
- 1
espeak-ng-data/lang/art/jbo View File



speed 80 // speed adjustment, percentage speed 80 // speed adjustment, percentage
letterVowel y letterVowel y
stressRule 2

+ 0
- 1
espeak-ng-data/lang/bat/lt View File

name Lithuanian name Lithuanian
language lt language lt
stressRule 2

+ 0
- 1
espeak-ng-data/lang/bat/lv View File

tone 150 220 450 255 750 20 3500 255 tone 150 220 450 255 750 20 3500 255
stressAmp 12 10 8 8 0 0 18 15 stressAmp 12 10 8 8 0 0 18 15
stressLength 160 140 200 140 0 0 240 180 stressLength 160 140 200 140 0 0 240 180
stressRule 0

+ 0
- 1
espeak-ng-data/lang/bnt/sw View File

language sw language sw


status testing status testing
stressRule 2

+ 0
- 1
espeak-ng-data/lang/bnt/tn View File

language tn language tn


status testing status testing
stressRule 2

+ 0
- 1
espeak-ng-data/lang/ccs/ka View File

name Georgian name Georgian
language ka language ka
stressRule 0

+ 0
- 1
espeak-ng-data/lang/cel/cy View File

intonation 4 intonation 4
letterVowel w letterVowel w
letterVowel y letterVowel y
stressRule 2

+ 0
- 1
espeak-ng-data/lang/cel/ga View File

language ga language ga


dictrules 1 // fix for eclipsis dictrules 1 // fix for eclipsis
stressRule 0

+ 0
- 1
espeak-ng-data/lang/cel/gd View File

language gd language gd


status testing status testing
stressRule 0

+ 0
- 1
espeak-ng-data/lang/cus/om View File

language om language om


status testing status testing
stressRule 2

+ 0
- 1
espeak-ng-data/lang/dra/kn View File



intonation 2 intonation 2
//consonants 80 //consonants 80
stressRule 0

+ 0
- 1
espeak-ng-data/lang/dra/ml View File



intonation 2 intonation 2
//consonants 80 //consonants 80
stressRule 13

+ 0
- 1
espeak-ng-data/lang/dra/ta View File



intonation 2 intonation 2
consonants 80 consonants 80
stressRule 0

+ 0
- 1
espeak-ng-data/lang/dra/te View File



intonation 2 intonation 2
//consonants 80 //consonants 80
stressRule 0

+ 0
- 1
espeak-ng-data/lang/esx/kl View File

name Greenlandic name Greenlandic
language kl language kl


stressRule 12

+ 0
- 1
espeak-ng-data/lang/eu View File

language eu language eu


status testing status testing
stressRule 1

+ 0
- 1
espeak-ng-data/lang/gmq/da View File



tunes s2 c2 q2 e2 tunes s2 c2 q2 e2
letterVowel y letterVowel y
stressRule 0

+ 0
- 1
espeak-ng-data/lang/gmq/is View File

name Icelandic name Icelandic
language is language is
letterVowel y letterVowel y
stressRule 0

+ 0
- 1
espeak-ng-data/lang/gmq/nb View File



intonation 4 intonation 4
letterVowel y letterVowel y
stressRule 0

+ 0
- 1
espeak-ng-data/lang/gmq/sv View File

name Swedish name Swedish
language sv language sv
letterVowel y letterVowel y
stressRule 0

+ 0
- 1
espeak-ng-data/lang/gmw/af View File

roughness 0 roughness 0
pitch 63 120 pitch 63 120
letterVowel y letterVowel y
stressRule 0

+ 0
- 1
espeak-ng-data/lang/gmw/de View File

language de language de


letterVowel y letterVowel y
stressRule 0

+ 0
- 1
espeak-ng-data/lang/gmw/en View File

status mature status mature


tunes s1 c1 q1 e1 tunes s1 c1 q1 e1
stressRule 0

+ 0
- 1
espeak-ng-data/lang/gmw/nl View File

name Dutch name Dutch
language nl language nl
letterVowel y letterVowel y
stressRule 0

+ 0
- 1
espeak-ng-data/lang/grk/el View File

name Greek name Greek
language el language el
stressRule 2

+ 0
- 1
espeak-ng-data/lang/grk/grc View File

language grc language grc


stressLength 170 170 190 190 0 0 230 240 stressLength 170 170 190 190 0 0 230 240
stressRule 2
dictrules 1 dictrules 1
words 3 words 3

+ 0
- 2
espeak-ng-data/lang/inc/as View File

language as language as


status testing status testing

stressRule 0

+ 0
- 1
espeak-ng-data/lang/inc/bn View File

name Bengali name Bengali
language bn language bn
stressRule 0

+ 0
- 1
espeak-ng-data/lang/inc/bpy View File

name Bishnupriya Manipuri name Bishnupriya Manipuri
language bpy language bpy
stressRule 0

+ 0
- 1
espeak-ng-data/lang/inc/gu View File

language gu language gu


status testing status testing
stressRule 2

+ 0
- 1
espeak-ng-data/lang/inc/hi View File

name Hindi name Hindi
language hi language hi
stressRule 6

+ 0
- 1
espeak-ng-data/lang/inc/mr View File

language mr language mr


status testing status testing
stressRule 6

+ 0
- 1
espeak-ng-data/lang/inc/ne View File

language ne language ne


dictrules 1 dictrules 1
stressRule 6

+ 0
- 1
espeak-ng-data/lang/inc/or View File

language or language or


status testing status testing
stressRule 6

+ 0
- 1
espeak-ng-data/lang/inc/pa View File

name Punjabi name Punjabi
language pa language pa
stressRule 6

+ 0
- 1
espeak-ng-data/lang/inc/si View File

status testing status testing


intonation 2 intonation 2
stressRule 0

+ 0
- 1
espeak-ng-data/lang/ine/hy View File

name Armenian (East Armenia) name Armenian (East Armenia)
language hy language hy
language hy-arevela language hy-arevela
stressRule 3

+ 1
- 1
espeak-ng-data/lang/ine/sq View File

name Albanian name Albanian
language sq language sq
letterVowel y letterVowel y
stressRule 3
// add this line to remove 'ë' at the end of words // add this line to remove 'ë' at the end of words
// replace 00 @/ NULL // replace 00 @/ NULL

+ 1
- 1
espeak-ng-data/lang/ira/ku View File

language ku language ku


//words 1 48 //words 1 48
stressRule 7

+ 0
- 1
espeak-ng-data/lang/ko View File

pitch 80 118 pitch 80 118
intonation 2 intonation 2


stressRule 8

+ 1
- 1
espeak-ng-data/lang/poz/id View File



stressLength 160 200 180 180 0 0 220 240 stressLength 160 200 180 180 0 0 220 240
stressAmp 16 18 18 18 0 0 22 21 stressAmp 16 18 18 18 0 0 22 21
stressRule 2
consonants 80 80 consonants 80 80

+ 0
- 2
espeak-ng-data/lang/poz/ms View File



stressLength 160 200 180 180 0 0 220 240 stressLength 160 200 180 180 0 0 220 240
stressAmp 16 18 18 18 0 0 22 21 stressAmp 16 18 18 18 0 0 22 21
stressRule 2
intonation 3 // Less intonation, and comma does not raise the pitch. intonation 3 // Less intonation, and comma does not raise the pitch.


// Nuance - Peninsula Malaysia // Nuance - Peninsula Malaysia
// (only the last phoneme of a word, only in unstressed syllables) // (only the last phoneme of a word, only in unstressed syllables)
consonants 80 80 consonants 80 80


+ 0
- 1
espeak-ng-data/lang/roa/an View File

name Aragonese name Aragonese
language an language an
stressRule 2

+ 0
- 1
espeak-ng-data/lang/roa/ca View File

name Catalan name Catalan
language ca language ca
stressRule 2

+ 0
- 1
espeak-ng-data/lang/roa/es View File

language es language es
dictrules 1 dictrules 1
tunes s6 c6 q6 e6 tunes s6 c6 q6 e6
stressRule 2

+ 0
- 1
espeak-ng-data/lang/roa/fr View File

dictrules 1 dictrules 1
tunes s3 c3 q3 e3 tunes s3 c3 q3 e3
letterVowel y letterVowel y
stressRule 3

+ 0
- 1
espeak-ng-data/lang/roa/it View File



tunes s4 c4 q4 e4 tunes s4 c4 q4 e4
letterVowel y letterVowel y
stressRule 2

+ 1
- 1
espeak-ng-data/lang/roa/pap View File

status testing status testing


phonemes base2 phonemes base2
stressRule 3

+ 0
- 1
espeak-ng-data/lang/roa/pt View File

dictrules 1 dictrules 1
intonation 2 intonation 2
letterVowel y letterVowel y
stressRule 3

+ 1
- 1
espeak-ng-data/lang/roa/pt-BR View File



dictrules 2 dictrules 2
stressLength 200 115 230 230 0 0 250 270 stressLength 200 115 230 230 0 0 250 270
stressRule 3

+ 0
- 1
espeak-ng-data/lang/sai/gn View File

language gn language gn
dictrules 1 dictrules 1
words 0 1 words 0 1
stressRule 3

+ 0
- 1
espeak-ng-data/lang/sem/am View File

language am language am


status testing status testing
stressRule 0

+ 0
- 1
espeak-ng-data/lang/sem/mt View File

language mt language mt


status testing status testing
stressRule 2

+ 0
- 1
espeak-ng-data/lang/trk/az View File

language az language az


status testing status testing
stressRule 7

+ 0
- 1
espeak-ng-data/lang/trk/tr View File

name Turkish name Turkish
language tr language tr
stressRule 7

+ 0
- 1
espeak-ng-data/lang/trk/tt View File

name Tatar name Tatar
language tt language tt
stressRule 3

+ 0
- 1
espeak-ng-data/lang/urj/fi View File

name Finnish name Finnish
language fi language fi
letterVowel y letterVowel y
stressRule 0

+ 1
- 1
espeak-ng-data/lang/urj/hu View File

option bracket 0 0 option bracket 0 0
pitch 81 117 pitch 81 117
letterVowel y letterVowel y
stressRule 0

+ 0
- 1
espeak-ng-data/lang/zle/ru View File

replace 03 a a# replace 03 a a#


dict_min 20000 dict_min 20000
stressRule 5

+ 0
- 1
espeak-ng-data/lang/zls/bg View File



stressAmp 13 12 17 17 20 22 22 21 stressAmp 13 12 17 17 20 22 22 21
stressLength 180 170 200 200 200 200 210 220 stressLength 180 170 200 200 200 200 210 220
stressRule 2
letterVowel 0x2a letterVowel 0x2a



+ 0
- 1
espeak-ng-data/lang/zls/bs View File

dictrules 3 4 dictrules 3 4
letterVowel y letterVowel y
letterVowel r letterVowel r
stressRule 0

+ 0
- 1
espeak-ng-data/lang/zls/hr View File

dictrules 1 dictrules 1
letterVowel y letterVowel y
letterVowel r letterVowel r
stressRule 0

+ 0
- 1
espeak-ng-data/lang/zls/mk View File

name Macedonian name Macedonian
language mk language mk
stressRule 4

+ 0
- 1
espeak-ng-data/lang/zls/sl View File

language sl language sl


status testing status testing
stressRule 2

+ 0
- 1
espeak-ng-data/lang/zls/sr View File



letterVowel y letterVowel y
letterVowel r letterVowel r
stressRule 0

+ 0
- 1
espeak-ng-data/lang/zlw/cs View File

language cs language cs
letterVowel y letterVowel y
letterVowel r letterVowel r
stressRule 0

+ 0
- 1
espeak-ng-data/lang/zlw/pl View File



intonation 2 intonation 2
letterVowel y letterVowel y
stressRule 2

+ 0
- 1
espeak-ng-data/lang/zlw/sk View File

language sk language sk
letterVowel y letterVowel y
letterVowel r letterVowel r
stressRule 0

+ 55
- 0
src/libespeak-ng/tr_languages.c View File

static const short stress_lengths_af[8] = { 170, 140, 220, 220, 0, 0, 250, 270 }; static const short stress_lengths_af[8] = { 170, 140, 220, 220, 0, 0, 250, 270 };
SetupTranslator(tr, stress_lengths_af, NULL); SetupTranslator(tr, stress_lengths_af, NULL);


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.vowel_pause = 0x30; tr->langopts.vowel_pause = 0x30;
tr->langopts.param[LOPT_DIERESES] = 1; tr->langopts.param[LOPT_DIERESES] = 1;
tr->langopts.param[LOPT_PREFIXES] = 1; tr->langopts.param[LOPT_PREFIXES] = 1;
{ {
SetupTranslator(tr, stress_lengths_fr, stress_amps_fr); SetupTranslator(tr, stress_lengths_fr, stress_amps_fr);
tr->letter_bits_offset = OFFSET_ETHIOPIC; tr->letter_bits_offset = OFFSET_ETHIOPIC;
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = S_NO_AUTO_2 | S_FINAL_DIM; // don't use secondary stress tr->langopts.stress_flags = S_NO_AUTO_2 | S_FINAL_DIM; // don't use secondary stress
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x107; // devoice at end of word, and change voicing to match a following consonant (except v) tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x107; // devoice at end of word, and change voicing to match a following consonant (except v)
tr->langopts.param[LOPT_REDUCE] = 2; tr->langopts.param[LOPT_REDUCE] = 2;
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_SINGLE_AND | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ROMAN_CAPITALS; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_SINGLE_AND | NUM_ROMAN | NUM_ROMAN_ORDINAL | NUM_ROMAN_CAPITALS;
tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator
} }
SetupTranslator(tr, stress_lengths_bn, stress_amps_bn); SetupTranslator(tr, stress_lengths_bn, stress_amps_bn);
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = S_MID_DIM | S_FINAL_DIM; // use 'diminished' for unstressed final syllable tr->langopts.stress_flags = S_MID_DIM | S_FINAL_DIM; // use 'diminished' for unstressed final syllable
tr->letter_bits_offset = OFFSET_BENGALI; tr->letter_bits_offset = OFFSET_BENGALI;
SetIndicLetters(tr); // call this after setting OFFSET_BENGALI SetIndicLetters(tr); // call this after setting OFFSET_BENGALI
SetupTranslator(tr, stress_lengths_cy, stress_amps_cy); SetupTranslator(tr, stress_lengths_cy, stress_amps_cy);


tr->encoding = ESPEAKNG_ENCODING_ISO_8859_14; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_14;
tr->langopts.stress_rule = STRESSPOSN_2R;


// 'diminished' is an unstressed final syllable // 'diminished' is an unstressed final syllable
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
static const short stress_lengths_da[8] = { 160, 140, 200, 200, 0, 0, 220, 230 }; static const short stress_lengths_da[8] = { 160, 140, 200, 200, 0, 0, 220, 230 };
SetupTranslator(tr, stress_lengths_da, NULL); SetupTranslator(tr, stress_lengths_da, NULL);


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.param[LOPT_PREFIXES] = 1; tr->langopts.param[LOPT_PREFIXES] = 1;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900 | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_ORDINAL; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900 | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_ORDINAL;
} }
static const short stress_lengths_de[8] = { 150, 130, 200, 200, 0, 0, 270, 270 }; static const short stress_lengths_de[8] = { 150, 130, 200, 200, 0, 0, 270, 270 };
static const unsigned char stress_amps_de[] = { 20, 20, 20, 20, 20, 22, 22, 20 }; static const unsigned char stress_amps_de[] = { 20, 20, 20, 20, 20, 22, 22, 20 };
SetupTranslator(tr, stress_lengths_de, stress_amps_de); SetupTranslator(tr, stress_lengths_de, stress_amps_de);
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.word_gap = 0x8; // don't use linking phonemes tr->langopts.word_gap = 0x8; // don't use linking phonemes
tr->langopts.vowel_pause = 0x30; tr->langopts.vowel_pause = 0x30;
tr->langopts.param[LOPT_PREFIXES] = 1; tr->langopts.param[LOPT_PREFIXES] = 1;
static const short stress_lengths_en[8] = { 182, 140, 220, 220, 0, 0, 248, 275 }; static const short stress_lengths_en[8] = { 182, 140, 220, 220, 0, 0, 248, 275 };
SetupTranslator(tr, stress_lengths_en, NULL); SetupTranslator(tr, stress_lengths_en, NULL);


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = 0x08; tr->langopts.stress_flags = 0x08;
tr->langopts.numbers = NUM_HUNDRED_AND | NUM_ROMAN | NUM_1900; tr->langopts.numbers = NUM_HUNDRED_AND | NUM_ROMAN | NUM_1900;
tr->langopts.param[LOPT_COMBINE_WORDS] = 2; // allow "mc" to cmbine with the following word tr->langopts.param[LOPT_COMBINE_WORDS] = 2; // allow "mc" to cmbine with the following word
SetLetterBits(tr, LETTERGP_Y, el_fvowels); // front vowels: ε η ι υ _ SetLetterBits(tr, LETTERGP_Y, el_fvowels); // front vowels: ε η ι υ _


tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY; // mark unstressed final syllables as diminished tr->langopts.stress_flags = S_FINAL_DIM_ONLY; // mark unstressed final syllables as diminished
tr->langopts.unstressed_wd1 = 0; tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2; tr->langopts.unstressed_wd2 = 2;
tr->char_plus_apostrophe = eo_char_apostrophe; tr->char_plus_apostrophe = eo_char_apostrophe;


tr->langopts.vowel_pause = 2; tr->langopts.vowel_pause = 2;
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.unstressed_wd2 = 2; tr->langopts.unstressed_wd2 = 2;


SetupTranslator(tr, stress_lengths_es, stress_amps_es); SetupTranslator(tr, stress_lengths_es, stress_amps_es);


tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.stress_rule = STRESSPOSN_2R;


// stress last syllable if it doesn't end in vowel or "s" or "n" // stress last syllable if it doesn't end in vowel or "s" or "n"
// 'diminished' is an unstressed final syllable // 'diminished' is an unstressed final syllable
tr->langopts.roman_suffix = utf8_ordinal; tr->langopts.roman_suffix = utf8_ordinal;
} else if (name2 == L_pap) { } else if (name2 == L_pap) {
// stress last syllable unless word ends with a vowel // stress last syllable unless word ends with a vowel
tr->langopts.stress_rule = STRESSPOSN_1R;
tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2; tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2;
} else } else
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 2; // use es_rules for unpronouncable rules tr->langopts.param[LOPT_UNPRONOUNCABLE] = 2; // use es_rules for unpronouncable rules
static const short stress_lengths_eu[8] = { 200, 200, 200, 200, 0, 0, 210, 230 }; // very weak stress static const short stress_lengths_eu[8] = { 200, 200, 200, 200, 0, 0, 210, 230 }; // very weak stress
static const unsigned char stress_amps_eu[8] = { 16, 16, 18, 18, 18, 18, 18, 18 }; static const unsigned char stress_amps_eu[8] = { 16, 16, 18, 18, 18, 18, 18, 18 };
SetupTranslator(tr, stress_lengths_eu, stress_amps_eu); SetupTranslator(tr, stress_lengths_eu, stress_amps_eu);
tr->langopts.stress_rule = STRESSPOSN_2L; // ?? second syllable, but not on a word-final vowel
tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED; tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED;
tr->langopts.param[LOPT_SUFFIX] = 1; tr->langopts.param[LOPT_SUFFIX] = 1;
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_VIGESIMAL; tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_VIGESIMAL;


SetupTranslator(tr, stress_lengths_fi, stress_amps_fi); 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.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.param[LOPT_IT_DOUBLING] = 1;
tr->langopts.long_stop = 130; tr->langopts.long_stop = 130;
case L('f', 'r'): // french case L('f', 'r'): // french
{ {
SetupTranslator(tr, stress_lengths_fr, stress_amps_fr); SetupTranslator(tr, stress_lengths_fr, stress_amps_fr);
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = S_NO_AUTO_2 | S_FINAL_DIM; // don't use secondary stress tr->langopts.stress_flags = S_NO_AUTO_2 | S_FINAL_DIM; // don't use secondary stress
tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->encoding = ESPEAKNG_ENCODING_ISCII; tr->encoding = ESPEAKNG_ENCODING_ISCII;
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = 6; // stress on last heaviest syllable, excluding final syllable
tr->langopts.stress_flags = S_MID_DIM | S_FINAL_DIM; // use 'diminished' for unstressed final syllable tr->langopts.stress_flags = S_MID_DIM | S_FINAL_DIM; // use 'diminished' for unstressed final syllable
tr->langopts.numbers = NUM_SWAP_TENS; tr->langopts.numbers = NUM_SWAP_TENS;
tr->langopts.break_numbers = 0x14aa8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi tr->langopts.break_numbers = 0x14aa8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi
else if (name2 == L('g', 'u')) { else if (name2 == L('g', 'u')) {
SetupTranslator(tr, stress_lengths_equal, stress_amps_equal); SetupTranslator(tr, stress_lengths_equal, stress_amps_equal);
tr->letter_bits_offset = OFFSET_GUJARATI; tr->letter_bits_offset = OFFSET_GUJARATI;
tr->langopts.stress_rule = STRESSPOSN_2R;
} else if (name2 == L('n', 'e')) { } else if (name2 == L('n', 'e')) {
SetupTranslator(tr, stress_lengths_equal, stress_amps_equal); SetupTranslator(tr, stress_lengths_equal, stress_amps_equal);
tr->langopts.break_numbers = 0x2aaaa8; tr->langopts.break_numbers = 0x2aaaa8;
SetupTranslator(tr, stress_lengths_hr, stress_amps_hr); SetupTranslator(tr, stress_lengths_hr, stress_amps_hr);
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2;


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_NO_2;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x3; tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x3;
tr->langopts.max_initial_consonants = 5; tr->langopts.max_initial_consonants = 5;
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2;


tr->langopts.vowel_pause = 0x20; tr->langopts.vowel_pause = 0x20;
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2 | 0x8000 | S_HYPEN_UNSTRESS; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2 | 0x8000 | S_HYPEN_UNSTRESS;
tr->langopts.unstressed_wd1 = 2; tr->langopts.unstressed_wd1 = 2;
tr->langopts.param[LOPT_IT_DOUBLING] = 1; tr->langopts.param[LOPT_IT_DOUBLING] = 1;
static const char hy_consonants2[] = { 0x45, 0 }; static const char hy_consonants2[] = { 0x45, 0 };


SetupTranslator(tr, stress_lengths_hy, NULL); SetupTranslator(tr, stress_lengths_hy, NULL);
tr->langopts.stress_rule = STRESSPOSN_1R; // default stress on final syllable


tr->letter_bits_offset = OFFSET_ARMENIAN; tr->letter_bits_offset = OFFSET_ARMENIAN;
memset(tr->letter_bits, 0, sizeof(tr->letter_bits)); memset(tr->letter_bits, 0, sizeof(tr->letter_bits));
static const unsigned char stress_amps_id[8] = { 16, 18, 18, 18, 20, 22, 22, 21 }; static const unsigned char stress_amps_id[8] = { 16, 18, 18, 18, 20, 22, 22, 21 };


SetupTranslator(tr, stress_lengths_id, stress_amps_id); SetupTranslator(tr, stress_lengths_id, stress_amps_id);
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_ROMAN; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_ROMAN;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.accents = 2; // "capital" after letter name tr->langopts.accents = 2; // "capital" after letter name
static const wchar_t is_lettergroup_B[] = { 'c', 'f', 'h', 'k', 'p', 't', 'x', 0xfe, 0 }; // voiceless conants, including 'þ' ?? 's' static const wchar_t is_lettergroup_B[] = { 'c', 'f', 'h', 'k', 'p', 't', 'x', 0xfe, 0 }; // voiceless conants, including 'þ' ?? 's'


SetupTranslator(tr, stress_lengths_is, NULL); SetupTranslator(tr, stress_lengths_is, NULL);
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_NO_2;
tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels tr->langopts.param[LOPT_IT_LENGTHEN] = 0x11; // remove lengthen indicator from unstressed vowels
tr->langopts.param[LOPT_REDUCE] = 2; tr->langopts.param[LOPT_REDUCE] = 2;
static const unsigned char stress_amps_it[8] = { 17, 15, 18, 16, 20, 22, 22, 22 }; static const unsigned char stress_amps_it[8] = { 17, 15, 18, 16, 20, 22, 22, 22 };
SetupTranslator(tr, stress_lengths_it, stress_amps_it); SetupTranslator(tr, stress_lengths_it, stress_amps_it);
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_NO_AUTO_2 | S_FINAL_DIM_ONLY | S_PRIORITY_STRESS; tr->langopts.stress_flags = S_NO_AUTO_2 | S_FINAL_DIM_ONLY | S_PRIORITY_STRESS;
tr->langopts.vowel_pause = 1; tr->langopts.vowel_pause = 1;
tr->langopts.unstressed_wd1 = 0; tr->langopts.unstressed_wd1 = 0;
static const wchar_t jbo_punct_within_word[] = { '.', ',', '\'', 0x2c8, 0 }; // allow period and comma within a word, also stress marker (from LOPT_CAPS_IN_WORD) static const wchar_t jbo_punct_within_word[] = { '.', ',', '\'', 0x2c8, 0 }; // allow period and comma within a word, also stress marker (from LOPT_CAPS_IN_WORD)


SetupTranslator(tr, stress_lengths_jbo, NULL); SetupTranslator(tr, stress_lengths_jbo, NULL);
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.vowel_pause = 0x20c; // pause before a word which starts with a vowel, or after a word which ends in a consonant tr->langopts.vowel_pause = 0x20c; // pause before a word which starts with a vowel, or after a word which ends in a consonant
tr->punct_within_word = jbo_punct_within_word; tr->punct_within_word = jbo_punct_within_word;
tr->langopts.param[LOPT_CAPS_IN_WORD] = 2; // capitals indicate stressed syllables tr->langopts.param[LOPT_CAPS_IN_WORD] = 2; // capitals indicate stressed syllables
SetLetterBits(tr, LETTERGP_C, ka_consonants); SetLetterBits(tr, LETTERGP_C, ka_consonants);
SetLetterBits(tr, LETTERGP_VOWEL2, ka_vowels); SetLetterBits(tr, LETTERGP_VOWEL2, ka_vowels);


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_NO_2;
tr->letter_bits_offset = OFFSET_GEORGIAN; tr->letter_bits_offset = OFFSET_GEORGIAN;
tr->langopts.max_initial_consonants = 7; tr->langopts.max_initial_consonants = 7;
case L('k', 'l'): // Greenlandic case L('k', 'l'): // Greenlandic
{ {
SetupTranslator(tr, stress_lengths_equal, stress_amps_equal); SetupTranslator(tr, stress_lengths_equal, stress_amps_equal);
tr->langopts.stress_rule = 12;
tr->langopts.stress_flags = S_NO_AUTO_2; tr->langopts.stress_flags = S_NO_AUTO_2;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900 | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_ORDINAL; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900 | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_ORDINAL;
} }
SetLetterBits(tr, LETTERGP_Y, ko_ivowels); SetLetterBits(tr, LETTERGP_Y, ko_ivowels);
SetLetterBits(tr, LETTERGP_G, (const char *)ko_voiced); SetLetterBits(tr, LETTERGP_G, (const char *)ko_voiced);


tr->langopts.stress_rule = 8; // ?? 1st syllable if it is heavy, else 2nd syllable
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words
tr->langopts.numbers = NUM_OMIT_1_HUNDRED; tr->langopts.numbers = NUM_OMIT_1_HUNDRED;
tr->langopts.numbers2 = NUM2_MYRIADS; tr->langopts.numbers2 = NUM2_MYRIADS;
SetupTranslator(tr, stress_lengths_ku, stress_amps_ku); SetupTranslator(tr, stress_lengths_ku, stress_amps_ku);
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_9; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_9;


tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable

tr->langopts.numbers = NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_AND_HUNDRED; tr->langopts.numbers = NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_AND_HUNDRED;
tr->langopts.max_initial_consonants = 2; tr->langopts.max_initial_consonants = 2;
} }
case L('l', 'a'): // Latin case L('l', 'a'): // Latin
{ {
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_4; // includes a,e,i,o,u-macron tr->encoding = ESPEAKNG_ENCODING_ISO_8859_4; // includes a,e,i,o,u-macron
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_NO_AUTO_2;
tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2;
tr->langopts.param[LOPT_DIERESES] = 1; tr->langopts.param[LOPT_DIERESES] = 1;
tr->langopts.numbers = NUM_ROMAN; tr->langopts.numbers = NUM_ROMAN;
tr->langopts.max_roman = 5000; tr->langopts.max_roman = 5000;
case L('l', 't'): // Lithuanian case L('l', 't'): // Lithuanian
{ {
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_4; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_4;
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_NO_AUTO_2; tr->langopts.stress_flags = S_NO_AUTO_2;
tr->langopts.unstressed_wd1 = 0; tr->langopts.unstressed_wd1 = 0;
tr->langopts.unstressed_wd2 = 2; tr->langopts.unstressed_wd2 = 2;


SetupTranslator(tr, stress_lengths_lv, stress_amps_lv); SetupTranslator(tr, stress_lengths_lv, stress_amps_lv);


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.spelling_stress = 1; tr->langopts.spelling_stress = 1;
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_4; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_4;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_4 | NUM_ORDINAL_DOT; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_4 | NUM_ORDINAL_DOT;
tr->letter_groups[0] = tr->letter_groups[7] = vowels_cyrillic; tr->letter_groups[0] = tr->letter_groups[7] = vowels_cyrillic;
tr->letter_bits_offset = OFFSET_CYRILLIC; tr->letter_bits_offset = OFFSET_CYRILLIC;


tr->langopts.stress_rule = STRESSPOSN_3R; // antipenultimate
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_2; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_2;
tr->langopts.numbers2 = 0x8a; // variant numbers before thousands,milliards tr->langopts.numbers2 = 0x8a; // variant numbers before thousands,milliards
} }
{ {
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_3; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_3;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x100; // devoice at end of word tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x100; // devoice at end of word
tr->langopts.stress_rule = STRESSPOSN_2R; // penultimate
tr->langopts.numbers = 1; tr->langopts.numbers = 1;
} }
break; break;
{ {
static const short stress_lengths_nl[8] = { 160, 135, 210, 210, 0, 0, 260, 280 }; static const short stress_lengths_nl[8] = { 160, 135, 210, 210, 0, 0, 260, 280 };


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.vowel_pause = 0x30; // ?? tr->langopts.vowel_pause = 0x30; // ??
tr->langopts.param[LOPT_DIERESES] = 1; tr->langopts.param[LOPT_DIERESES] = 1;
tr->langopts.param[LOPT_PREFIXES] = 1; tr->langopts.param[LOPT_PREFIXES] = 1;
static const short stress_lengths_no[8] = { 160, 140, 200, 200, 0, 0, 220, 230 }; static const short stress_lengths_no[8] = { 160, 140, 200, 200, 0, 0, 220, 230 };


SetupTranslator(tr, stress_lengths_no, NULL); SetupTranslator(tr, stress_lengths_no, NULL);
tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_ALLOW_SPACE | NUM_1900 | NUM_ORDINAL_DOT; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_ALLOW_SPACE | NUM_1900 | NUM_ORDINAL_DOT;
} }
break; break;
static const short stress_lengths_om[8] = { 200, 200, 200, 200, 0, 0, 200, 200 }; static const short stress_lengths_om[8] = { 200, 200, 200, 200, 0, 0, 200, 200 };


SetupTranslator(tr, stress_lengths_om, stress_amps_om); SetupTranslator(tr, stress_lengths_om, stress_amps_om);
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | 0x80000; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | 0x80000;
tr->langopts.numbers = NUM_OMIT_1_HUNDRED | NUM_HUNDRED_AND; tr->langopts.numbers = NUM_OMIT_1_HUNDRED | NUM_HUNDRED_AND;
tr->langopts.numbers2 = 0x200; // say "thousands" before its number tr->langopts.numbers2 = 0x200; // say "thousands" before its number
SetupTranslator(tr, stress_lengths_pl, stress_amps_pl); SetupTranslator(tr, stress_lengths_pl, stress_amps_pl);


tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2;
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY; // mark unstressed final syllables as diminished tr->langopts.stress_flags = S_FINAL_DIM_ONLY; // mark unstressed final syllables as diminished
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x9; tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x9;
tr->langopts.max_initial_consonants = 7; // for example: wchrzczony :) tr->langopts.max_initial_consonants = 7; // for example: wchrzczony :)
SetupTranslator(tr, stress_lengths_pt, stress_amps_pt); SetupTranslator(tr, stress_lengths_pt, stress_amps_pt);
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_INITIAL_2 | S_PRIORITY_STRESS; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_INITIAL_2 | S_PRIORITY_STRESS;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_DFRACTION_2 | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_ROMAN_CAPITALS; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_DFRACTION_2 | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_ROMAN_CAPITALS;
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS | NUM2_ORDINAL_NO_AND; tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS | NUM2_ORDINAL_NO_AND;


SetupTranslator(tr, stress_lengths_ro, stress_amps_ro); SetupTranslator(tr, stress_lengths_ro, stress_amps_ro);


tr->langopts.stress_rule = STRESSPOSN_1R;
tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED | S_FINAL_DIM_ONLY; tr->langopts.stress_flags = S_FINAL_VOWEL_UNSTRESSED | S_FINAL_DIM_ONLY;


tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2;
SetupTranslator(tr, stress_lengths_sk, stress_amps_sk); SetupTranslator(tr, stress_lengths_sk, stress_amps_sk);
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2;


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x3; tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x3;
tr->langopts.max_initial_consonants = 5; tr->langopts.max_initial_consonants = 5;
SetupTranslator(tr, stress_lengths_ta, stress_amps_ta); SetupTranslator(tr, stress_lengths_ta, stress_amps_ta);
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.spelling_stress = 1; tr->langopts.spelling_stress = 1;


break; break;
case L('s', 'l'): // Slovenian case L('s', 'l'): // Slovenian
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2;
tr->langopts.stress_rule = STRESSPOSN_2R; // Temporary
tr->langopts.stress_flags = S_NO_AUTO_2; tr->langopts.stress_flags = S_NO_AUTO_2;
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x103; tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x103;
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x76; // [v] don't count this character at start of word tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x76; // [v] don't count this character at start of word


SetupTranslator(tr, stress_lengths_sq, stress_amps_sq); SetupTranslator(tr, stress_lengths_sq, stress_amps_sq);


tr->langopts.stress_rule = STRESSPOSN_1R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_FINAL_VOWEL_UNSTRESSED; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_FINAL_VOWEL_UNSTRESSED;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_DFRACTION_4; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_DFRACTION_4;
tr->langopts.accents = 2; // "capital" after letter name tr->langopts.accents = 2; // "capital" after letter name
static const short stress_lengths_sv[8] = { 160, 135, 220, 220, 0, 0, 250, 280 }; static const short stress_lengths_sv[8] = { 160, 135, 220, 220, 0, 0, 250, 280 };
SetupTranslator(tr, stress_lengths_sv, stress_amps_sv); SetupTranslator(tr, stress_lengths_sv, stress_amps_sv);


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_1900; tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_1900;
tr->langopts.accents = 1; tr->langopts.accents = 1;
} }
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.vowel_pause = 1; tr->langopts.vowel_pause = 1;
tr->langopts.stress_rule = STRESSPOSN_2R;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2; tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.max_initial_consonants = 4; // for example: mwngi tr->langopts.max_initial_consonants = 4; // for example: mwngi


SetupTranslator(tr, stress_lengths_ta2, stress_amps_ta); SetupTranslator(tr, stress_lengths_ta2, stress_amps_ta);
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2; // use 'diminished' for unstressed final syllable tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2; // use 'diminished' for unstressed final syllable
tr->langopts.spelling_stress = 1; tr->langopts.spelling_stress = 1;
tr->langopts.break_numbers = 0x14a8; // 1000, 100,000 10,000,000 tr->langopts.break_numbers = 0x14a8; // 1000, 100,000 10,000,000
tr->letter_bits_offset = OFFSET_MALAYALAM; tr->letter_bits_offset = OFFSET_MALAYALAM;
tr->langopts.numbers = NUM_OMIT_1_THOUSAND | NUM_OMIT_1_HUNDRED; tr->langopts.numbers = NUM_OMIT_1_THOUSAND | NUM_OMIT_1_HUNDRED;
tr->langopts.numbers2 = NUM2_OMIT_1_HUNDRED_ONLY; tr->langopts.numbers2 = NUM2_OMIT_1_HUNDRED_ONLY;
tr->langopts.stress_rule = 13; // 1st syllable, unless 1st vowel is short and 2nd is long
} else if (name2 == L('k', 'n')) { } else if (name2 == L('k', 'n')) {
tr->letter_bits_offset = OFFSET_KANNADA; tr->letter_bits_offset = OFFSET_KANNADA;
tr->langopts.numbers = 0x1; tr->langopts.numbers = 0x1;
SetupTranslator(tr, stress_lengths_tr, stress_amps_tr); SetupTranslator(tr, stress_lengths_tr, stress_amps_tr);
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_9; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_9;


tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable
tr->langopts.stress_flags = S_NO_AUTO_2; // no automatic secondary stress tr->langopts.stress_flags = S_NO_AUTO_2; // no automatic secondary stress
tr->langopts.dotless_i = 1; tr->langopts.dotless_i = 1;
tr->langopts.param[LOPT_SUFFIX] = 1; tr->langopts.param[LOPT_SUFFIX] = 1;
{ {
SetCyrillicLetters(tr); SetCyrillicLetters(tr);
SetupTranslator(tr, stress_lengths_fr, stress_amps_fr); SetupTranslator(tr, stress_lengths_fr, stress_amps_fr);
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable
tr->langopts.stress_flags = S_NO_AUTO_2; // no automatic secondary stress tr->langopts.stress_flags = S_NO_AUTO_2; // no automatic secondary stress
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_4; tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_4;
} }
SetupTranslator(tr, stress_lengths_vi, stress_amps_vi); SetupTranslator(tr, stress_lengths_vi, stress_amps_vi);
tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable


tr->langopts.stress_rule = STRESSPOSN_1L;
tr->langopts.word_gap = 0x21; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word tr->langopts.word_gap = 0x21; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word
tr->letter_groups[0] = tr->letter_groups[7] = vowels_vi; tr->letter_groups[0] = tr->letter_groups[7] = vowels_vi;
tr->langopts.tone_language = 1; // Tone language, use CalcPitches_Tone() rather than CalcPitches() tr->langopts.tone_language = 1; // Tone language, use CalcPitches_Tone() rather than CalcPitches()
tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word tr->langopts.param[LOPT_UNPRONOUNCABLE] = 0x432; // [v] don't count this character at start of word
tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 1; tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 1;
tr->langopts.param[LOPT_REDUCE] = 2; tr->langopts.param[LOPT_REDUCE] = 2;
tr->langopts.stress_rule = 5;
tr->langopts.stress_flags = S_NO_AUTO_2; tr->langopts.stress_flags = S_NO_AUTO_2;


tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED;

Loading…
Cancel
Save