@@ -121,11 +121,6 @@ ALPHABET *AlphabetFromChar(int c)
static void Translator_Russian ( Translator * tr ) ;
static void SetLetterVowel ( Translator * tr , int c )
{
tr - > letter_bits [ c ] = ( tr - > letter_bits [ c ] & 0x40 ) | 0x81 ; // keep value for group 6 (front vowels e,i,y)
}
static void ResetLetterBits ( Translator * tr , int groups )
{
// Clear all the specified groups
@@ -479,11 +474,9 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_af [ 8 ] = { 170 , 140 , 220 , 220 , 0 , 0 , 250 , 270 } ;
SetupTranslator ( tr , stress_lengths_af , NULL ) ;
tr - > langopts . stress_rule = STRESSPOSN_1L ;
tr - > langopts . vowel_pause = 0x30 ;
tr - > langopts . param [ LOPT_DIERESES ] = 1 ;
tr - > langopts . param [ LOPT_PREFIXES ] = 1 ;
SetLetterVowel ( tr , ' y ' ) ; // add 'y' to vowels
tr - > langopts . numbers = NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_SINGLE_AND | NUM_ROMAN | NUM_1900 ;
tr - > langopts . accents = 1 ;
@@ -493,7 +486,6 @@ Translator *SelectTranslator(const char *name)
{
SetupTranslator ( tr , stress_lengths_fr , stress_amps_fr ) ;
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 . 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
@@ -512,12 +504,10 @@ Translator *SelectTranslator(const char *name)
case L ( ' b ' , ' g ' ) : // Bulgarian
{
SetCyrillicLetters ( tr ) ;
SetLetterVowel ( tr , 0x2a ) ;
tr - > encoding = ESPEAKNG_ENCODING_ISO_8859_5 ;
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_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 . thousands_sep = ' ' ; // don't allow dot as thousands separator
}
@@ -533,7 +523,6 @@ Translator *SelectTranslator(const char *name)
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 . stress_rule = STRESSPOSN_1L ;
tr - > langopts . stress_flags = S_MID_DIM | S_FINAL_DIM ; // use 'diminished' for unstressed final syllable
tr - > letter_bits_offset = OFFSET_BENGALI ;
SetIndicLetters ( tr ) ; // call this after setting OFFSET_BENGALI
@@ -571,7 +560,6 @@ Translator *SelectTranslator(const char *name)
SetupTranslator ( tr , stress_lengths_cy , stress_amps_cy ) ;
tr - > encoding = ESPEAKNG_ENCODING_ISO_8859_14 ;
tr - > langopts . stress_rule = STRESSPOSN_2R ;
// 'diminished' is an unstressed final syllable
tr - > langopts . stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 ;
@@ -581,8 +569,6 @@ Translator *SelectTranslator(const char *name)
tr - > langopts . numbers = NUM_OMIT_1_HUNDRED ;
SetLetterVowel ( tr , ' w ' ) ; // add letter to vowels and remove from consonants
SetLetterVowel ( tr , ' y ' ) ;
}
break ;
case L ( ' d ' , ' a ' ) : // Danish
@@ -590,9 +576,7 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_da [ 8 ] = { 160 , 140 , 200 , 200 , 0 , 0 , 220 , 230 } ;
SetupTranslator ( tr , stress_lengths_da , NULL ) ;
tr - > langopts . stress_rule = STRESSPOSN_1L ;
tr - > langopts . param [ LOPT_PREFIXES ] = 1 ;
SetLetterVowel ( tr , ' y ' ) ;
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 ;
}
break ;
@@ -601,7 +585,6 @@ Translator *SelectTranslator(const char *name)
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 } ;
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 . vowel_pause = 0x30 ;
tr - > langopts . param [ LOPT_PREFIXES ] = 1 ;
@@ -609,7 +592,6 @@ Translator *SelectTranslator(const char *name)
tr - > langopts . param [ LOPT_LONG_VOWEL_THRESHOLD ] = 175 / 2 ;
tr - > langopts . numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_ALLOW_SPACE | NUM_ORDINAL_DOT | NUM_ROMAN ;
SetLetterVowel ( tr , ' y ' ) ;
tr - > langopts . param [ LOPT_UNPRONOUNCABLE ] = 2 ; // use de_rules for unpronouncable rules
}
break ;
@@ -631,7 +613,6 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_en [ 8 ] = { 182 , 140 , 220 , 220 , 0 , 0 , 248 , 275 } ;
SetupTranslator ( tr , stress_lengths_en , NULL ) ;
tr - > langopts . stress_rule = STRESSPOSN_1L ;
tr - > langopts . stress_flags = 0x08 ;
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
@@ -667,7 +648,6 @@ Translator *SelectTranslator(const char *name)
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 . stress_rule = STRESSPOSN_2R ;
tr - > langopts . stress_flags = S_FINAL_DIM_ONLY ; // mark unstressed final syllables as diminished
tr - > langopts . unstressed_wd1 = 0 ;
tr - > langopts . unstressed_wd2 = 2 ;
@@ -694,7 +674,6 @@ Translator *SelectTranslator(const char *name)
tr - > char_plus_apostrophe = eo_char_apostrophe ;
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 . unstressed_wd2 = 2 ;
@@ -714,7 +693,6 @@ Translator *SelectTranslator(const char *name)
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 . stress_rule = STRESSPOSN_2R ;
// stress last syllable if it doesn't end in vowel or "s" or "n"
// 'diminished' is an unstressed final syllable
@@ -740,7 +718,6 @@ Translator *SelectTranslator(const char *name)
tr - > langopts . roman_suffix = utf8_ordinal ;
} else if ( name2 = = L_pap ) {
// 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 ;
} else
tr - > langopts . param [ LOPT_UNPRONOUNCABLE ] = 2 ; // use es_rules for unpronouncable rules
@@ -751,7 +728,6 @@ Translator *SelectTranslator(const char *name)
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 } ;
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 . 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 ;
@@ -795,13 +771,11 @@ Translator *SelectTranslator(const char *name)
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 ;
SetLetterVowel ( tr , ' y ' ) ;
tr - > langopts . spelling_stress = 1 ;
tr - > langopts . intonation_group = 3 ; // less intonation, don't raise pitch at comma
}
@@ -809,14 +783,12 @@ Translator *SelectTranslator(const char *name)
case L ( ' f ' , ' r ' ) : // french
{
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 . 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 . accents = 2 ; // Say "Capital" after the letter.
tr - > langopts . numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_OMIT_1_HUNDRED | NUM_NOPAUSE | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_AFTER | NUM_VIGESIMAL | NUM_DFRACTION_4 ;
SetLetterVowel ( tr , ' y ' ) ;
}
break ;
case L ( ' g ' , ' a ' ) : // irish
@@ -850,7 +822,6 @@ Translator *SelectTranslator(const char *name)
tr - > encoding = ESPEAKNG_ENCODING_ISCII ;
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 . numbers = NUM_SWAP_TENS ;
tr - > langopts . break_numbers = 0x14aa8 ; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi
@@ -861,7 +832,6 @@ Translator *SelectTranslator(const char *name)
else if ( name2 = = L ( ' g ' , ' u ' ) ) {
SetupTranslator ( tr , stress_lengths_equal , stress_amps_equal ) ;
tr - > letter_bits_offset = OFFSET_GUJARATI ;
tr - > langopts . stress_rule = STRESSPOSN_2R ;
} else if ( name2 = = L ( ' n ' , ' e ' ) ) {
SetupTranslator ( tr , stress_lengths_equal , stress_amps_equal ) ;
tr - > langopts . break_numbers = 0x2aaaa8 ;
@@ -888,7 +858,6 @@ Translator *SelectTranslator(const char *name)
SetupTranslator ( tr , stress_lengths_hr , stress_amps_hr ) ;
tr - > encoding = ESPEAKNG_ENCODING_ISO_8859_2 ;
tr - > langopts . stress_rule = STRESSPOSN_1L ;
tr - > langopts . stress_flags = S_FINAL_NO_2 ;
tr - > langopts . param [ LOPT_REGRESSIVE_VOICING ] = 0x3 ;
tr - > langopts . max_initial_consonants = 5 ;
@@ -900,8 +869,6 @@ Translator *SelectTranslator(const char *name)
tr - > langopts . replace_chars = replace_cyrillic_latin ;
tr - > langopts . our_alphabet = OFFSET_CYRILLIC ; // don't say "cyrillic" before letter names
SetLetterVowel ( tr , ' y ' ) ;
SetLetterVowel ( tr , ' r ' ) ;
}
break ;
case L ( ' h ' , ' t ' ) : // Haitian Creole
@@ -918,7 +885,6 @@ Translator *SelectTranslator(const char *name)
tr - > encoding = ESPEAKNG_ENCODING_ISO_8859_2 ;
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 . unstressed_wd1 = 2 ;
tr - > langopts . param [ LOPT_IT_DOUBLING ] = 1 ;
@@ -929,7 +895,6 @@ Translator *SelectTranslator(const char *name)
tr - > langopts . decimal_sep = ' , ' ;
tr - > langopts . max_roman = 899 ;
tr - > langopts . min_roman = 1 ;
SetLetterVowel ( tr , ' y ' ) ;
tr - > langopts . spelling_stress = 1 ;
SetLengthMods ( tr , 3 ) ; // all equal
}
@@ -945,7 +910,6 @@ Translator *SelectTranslator(const char *name)
static const char hy_consonants2 [ ] = { 0x45 , 0 } ;
SetupTranslator ( tr , stress_lengths_hy , NULL ) ;
tr - > langopts . stress_rule = STRESSPOSN_1R ; // default stress on final syllable
tr - > letter_bits_offset = OFFSET_ARMENIAN ;
memset ( tr - > letter_bits , 0 , sizeof ( tr - > letter_bits ) ) ;
@@ -965,7 +929,6 @@ Translator *SelectTranslator(const char *name)
static const unsigned char stress_amps_id [ 8 ] = { 16 , 18 , 18 , 18 , 20 , 22 , 22 , 21 } ;
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 . stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 ;
tr - > langopts . accents = 2 ; // "capital" after letter name
@@ -977,7 +940,6 @@ Translator *SelectTranslator(const char *name)
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 ) ;
tr - > langopts . stress_rule = STRESSPOSN_1L ;
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_REDUCE ] = 2 ;
@@ -986,7 +948,6 @@ Translator *SelectTranslator(const char *name)
SetLetterBits ( tr , 4 , " kpst " ) ; // Letter group F
SetLetterBits ( tr , 3 , " jvr " ) ; // Letter group H
tr - > letter_groups [ 1 ] = is_lettergroup_B ;
SetLetterVowel ( tr , ' y ' ) ;
tr - > langopts . numbers = NUM_DECIMAL_COMMA | NUM_SINGLE_AND | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_1900 ;
tr - > langopts . numbers2 = 0x2 ;
}
@@ -997,7 +958,6 @@ Translator *SelectTranslator(const char *name)
static const unsigned char stress_amps_it [ 8 ] = { 17 , 15 , 18 , 16 , 20 , 22 , 22 , 22 } ;
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 . stress_rule = STRESSPOSN_2R ;
tr - > langopts . stress_flags = S_NO_AUTO_2 | S_FINAL_DIM_ONLY | S_PRIORITY_STRESS ;
tr - > langopts . vowel_pause = 1 ;
tr - > langopts . unstressed_wd1 = 0 ;
@@ -1011,7 +971,6 @@ Translator *SelectTranslator(const char *name)
tr - > langopts . numbers2 = NUM2_NO_TEEN_ORDINALS ;
tr - > langopts . roman_suffix = utf8_ordinal ;
tr - > langopts . accents = 2 ; // Say "Capital" after the letter.
SetLetterVowel ( tr , ' y ' ) ;
}
break ;
case L_jbo : // Lojban
@@ -1020,11 +979,9 @@ Translator *SelectTranslator(const char *name)
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 ) ;
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 - > punct_within_word = jbo_punct_within_word ;
tr - > langopts . param [ LOPT_CAPS_IN_WORD ] = 2 ; // capitals indicate stressed syllables
SetLetterVowel ( tr , ' y ' ) ;
tr - > langopts . max_lengthmod = 368 ;
}
break ;
@@ -1041,7 +998,6 @@ Translator *SelectTranslator(const char *name)
SetLetterBits ( tr , LETTERGP_C , ka_consonants ) ;
SetLetterBits ( tr , LETTERGP_VOWEL2 , ka_vowels ) ;
tr - > langopts . stress_rule = STRESSPOSN_1L ;
tr - > langopts . stress_flags = S_FINAL_NO_2 ;
tr - > letter_bits_offset = OFFSET_GEORGIAN ;
tr - > langopts . max_initial_consonants = 7 ;
@@ -1077,7 +1033,6 @@ Translator *SelectTranslator(const char *name)
case L ( ' k ' , ' l ' ) : // Greenlandic
{
SetupTranslator ( tr , stress_lengths_equal , stress_amps_equal ) ;
tr - > langopts . stress_rule = 12 ;
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 ;
}
@@ -1094,7 +1049,6 @@ Translator *SelectTranslator(const char *name)
SetLetterBits ( tr , LETTERGP_Y , ko_ivowels ) ;
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 . numbers = NUM_OMIT_1_HUNDRED ;
tr - > langopts . numbers2 = NUM2_MYRIADS ;
@@ -1110,8 +1064,6 @@ Translator *SelectTranslator(const char *name)
SetupTranslator ( tr , stress_lengths_ku , stress_amps_ku ) ;
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 . max_initial_consonants = 2 ;
}
@@ -1122,10 +1074,6 @@ Translator *SelectTranslator(const char *name)
case L ( ' l ' , ' a ' ) : // Latin
{
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 . numbers = NUM_ROMAN ;
tr - > langopts . max_roman = 5000 ;
@@ -1134,7 +1082,6 @@ Translator *SelectTranslator(const char *name)
case L ( ' l ' , ' t ' ) : // Lithuanian
{
tr - > encoding = ESPEAKNG_ENCODING_ISO_8859_4 ;
tr - > langopts . stress_rule = STRESSPOSN_2R ;
tr - > langopts . stress_flags = S_NO_AUTO_2 ;
tr - > langopts . unstressed_wd1 = 0 ;
tr - > langopts . unstressed_wd2 = 2 ;
@@ -1151,7 +1098,6 @@ Translator *SelectTranslator(const char *name)
SetupTranslator ( tr , stress_lengths_lv , stress_amps_lv ) ;
tr - > langopts . stress_rule = STRESSPOSN_1L ;
tr - > langopts . spelling_stress = 1 ;
tr - > encoding = ESPEAKNG_ENCODING_ISO_8859_4 ;
tr - > langopts . numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_4 | NUM_ORDINAL_DOT ;
@@ -1173,7 +1119,6 @@ Translator *SelectTranslator(const char *name)
tr - > letter_groups [ 0 ] = tr - > letter_groups [ 7 ] = vowels_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 . numbers2 = 0x8a ; // variant numbers before thousands,milliards
}
@@ -1182,7 +1127,6 @@ Translator *SelectTranslator(const char *name)
{
tr - > encoding = ESPEAKNG_ENCODING_ISO_8859_3 ;
tr - > langopts . param [ LOPT_REGRESSIVE_VOICING ] = 0x100 ; // devoice at end of word
tr - > langopts . stress_rule = STRESSPOSN_2R ; // penultimate
tr - > langopts . numbers = 1 ;
}
break ;
@@ -1190,12 +1134,10 @@ Translator *SelectTranslator(const char *name)
{
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 . param [ LOPT_DIERESES ] = 1 ;
tr - > langopts . param [ LOPT_PREFIXES ] = 1 ;
tr - > langopts . param [ LOPT_REGRESSIVE_VOICING ] = 0x100 ; // devoice at end of word
SetLetterVowel ( tr , ' y ' ) ;
tr - > langopts . numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ALLOW_SPACE | NUM_1900 | NUM_ORDINAL_DOT ;
tr - > langopts . ordinal_indicator = " e " ;
@@ -1208,8 +1150,6 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_no [ 8 ] = { 160 , 140 , 200 , 200 , 0 , 0 , 220 , 230 } ;
SetupTranslator ( tr , stress_lengths_no , NULL ) ;
tr - > langopts . stress_rule = STRESSPOSN_1L ;
SetLetterVowel ( tr , ' y ' ) ;
tr - > langopts . numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_ALLOW_SPACE | NUM_1900 | NUM_ORDINAL_DOT ;
}
break ;
@@ -1219,7 +1159,6 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_om [ 8 ] = { 200 , 200 , 200 , 200 , 0 , 0 , 200 , 200 } ;
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 . numbers = NUM_OMIT_1_HUNDRED | NUM_HUNDRED_AND ;
tr - > langopts . numbers2 = 0x200 ; // say "thousands" before its number
@@ -1233,14 +1172,12 @@ Translator *SelectTranslator(const char *name)
SetupTranslator ( tr , stress_lengths_pl , stress_amps_pl ) ;
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 . param [ LOPT_REGRESSIVE_VOICING ] = 0x9 ;
tr - > langopts . max_initial_consonants = 7 ; // for example: wchrzczony :)
tr - > langopts . numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_2 ;
tr - > langopts . numbers2 = NUM2_THOUSANDS_VAR3 ;
tr - > langopts . param [ LOPT_COMBINE_WORDS ] = 4 + 0x100 ; // combine 'nie' (marked with $alt2) with some 1-syllable (and 2-syllable) words (marked with $alt)
SetLetterVowel ( tr , ' y ' ) ;
}
break ;
case L ( ' p ' , ' t ' ) : // Portuguese
@@ -1251,12 +1188,10 @@ Translator *SelectTranslator(const char *name)
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 . 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 . 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 . max_roman = 5000 ;
SetLetterVowel ( tr , ' y ' ) ;
ResetLetterBits ( tr , 0x2 ) ;
SetLetterBits ( tr , 1 , " bcdfgjkmnpqstvxz " ) ; // B hard consonants, excluding h,l,r,w,y
tr - > langopts . param [ LOPT_ALT ] = 2 ; // call ApplySpecialAttributes2() if a word has $alt or $alt2
@@ -1270,7 +1205,6 @@ Translator *SelectTranslator(const char *name)
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 - > encoding = ESPEAKNG_ENCODING_ISO_8859_2 ;
@@ -1299,7 +1233,6 @@ Translator *SelectTranslator(const char *name)
SetupTranslator ( tr , stress_lengths_sk , stress_amps_sk ) ;
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 . param [ LOPT_REGRESSIVE_VOICING ] = 0x3 ;
tr - > langopts . max_initial_consonants = 5 ;
@@ -1314,8 +1247,6 @@ Translator *SelectTranslator(const char *name)
if ( name2 = = L ( ' c ' , ' s ' ) )
tr - > langopts . numbers2 = 0x108 ; // variant numbers before milliards
SetLetterVowel ( tr , ' y ' ) ;
SetLetterVowel ( tr , ' r ' ) ;
ResetLetterBits ( tr , 0x20 ) ;
SetLetterBits ( tr , 5 , sk_voiced ) ;
}
@@ -1325,7 +1256,6 @@ Translator *SelectTranslator(const char *name)
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 . stress_rule = STRESSPOSN_1L ;
tr - > langopts . stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 ;
tr - > langopts . spelling_stress = 1 ;
@@ -1347,7 +1277,6 @@ Translator *SelectTranslator(const char *name)
break ;
case L ( ' s ' , ' l ' ) : // Slovenian
tr - > encoding = ESPEAKNG_ENCODING_ISO_8859_2 ;
tr - > langopts . stress_rule = STRESSPOSN_2R ; // Temporary
tr - > langopts . stress_flags = S_NO_AUTO_2 ;
tr - > langopts . param [ LOPT_REGRESSIVE_VOICING ] = 0x103 ;
tr - > langopts . param [ LOPT_UNPRONOUNCABLE ] = 0x76 ; // [v] don't count this character at start of word
@@ -1366,9 +1295,7 @@ Translator *SelectTranslator(const char *name)
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 ;
SetLetterVowel ( tr , ' y ' ) ;
tr - > langopts . numbers = NUM_DECIMAL_COMMA | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_DFRACTION_4 ;
tr - > langopts . accents = 2 ; // "capital" after letter name
}
@@ -1379,8 +1306,6 @@ Translator *SelectTranslator(const char *name)
static const short stress_lengths_sv [ 8 ] = { 160 , 135 , 220 , 220 , 0 , 0 , 250 , 280 } ;
SetupTranslator ( tr , stress_lengths_sv , stress_amps_sv ) ;
tr - > langopts . stress_rule = STRESSPOSN_1L ;
SetLetterVowel ( tr , ' y ' ) ;
tr - > langopts . numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_1900 ;
tr - > langopts . accents = 1 ;
}
@@ -1395,7 +1320,6 @@ Translator *SelectTranslator(const char *name)
tr - > langopts . length_mods0 = tr - > langopts . length_mods ; // don't lengthen vowels in the last syllable
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 . max_initial_consonants = 4 ; // for example: mwngi
@@ -1412,7 +1336,6 @@ Translator *SelectTranslator(const char *name)
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 . stress_rule = STRESSPOSN_1L ;
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 . break_numbers = 0x14a8 ; // 1000, 100,000 10,000,000
@@ -1429,7 +1352,6 @@ Translator *SelectTranslator(const char *name)
tr - > letter_bits_offset = OFFSET_MALAYALAM ;
tr - > langopts . numbers = NUM_OMIT_1_THOUSAND | NUM_OMIT_1_HUNDRED ;
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 ' ) ) {
tr - > letter_bits_offset = OFFSET_KANNADA ;
tr - > langopts . numbers = 0x1 ;
@@ -1451,7 +1373,6 @@ Translator *SelectTranslator(const char *name)
SetupTranslator ( tr , stress_lengths_tr , stress_amps_tr ) ;
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 . dotless_i = 1 ;
tr - > langopts . param [ LOPT_SUFFIX ] = 1 ;
@@ -1467,7 +1388,6 @@ Translator *SelectTranslator(const char *name)
{
SetCyrillicLetters ( tr ) ;
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 . numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_DFRACTION_4 ;
}
@@ -1510,7 +1430,6 @@ Translator *SelectTranslator(const char *name)
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 . 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 - > letter_groups [ 0 ] = tr - > letter_groups [ 7 ] = vowels_vi ;
tr - > langopts . tone_language = 1 ; // Tone language, use CalcPitches_Tone() rather than CalcPitches()
@@ -1585,7 +1504,6 @@ static void Translator_Russian(Translator *tr)
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_REDUCE ] = 2 ;
tr - > langopts . stress_rule = 5 ;
tr - > langopts . stress_flags = S_NO_AUTO_2 ;
tr - > langopts . numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED ;