Browse Source

Use defines for the different number breaking systems to improve readability.

master
Reece H. Dunn 6 years ago
parent
commit
61672f5e24
2 changed files with 22 additions and 12 deletions
  1. 10
    11
      src/libespeak-ng/tr_languages.c
  2. 12
    1
      src/libespeak-ng/translate.h

+ 10
- 11
src/libespeak-ng/tr_languages.c View File

tr->langopts.min_roman = 2; tr->langopts.min_roman = 2;
tr->langopts.thousands_sep = ','; tr->langopts.thousands_sep = ',';
tr->langopts.decimal_sep = '.'; tr->langopts.decimal_sep = '.';
tr->langopts.break_numbers = BREAK_THOUSANDS; // 1000, 1000,000 1,000,000 etc
tr->langopts.break_numbers = BREAK_THOUSANDS;
tr->langopts.max_digits = 14; tr->langopts.max_digits = 14;


// index by 0=. 1=, 2=?, 3=! 4=none, 5=emphasized // index by 0=. 1=, 2=?, 3=! 4=none, 5=emphasized
SetLetterBits(tr, LETTERGP_C, bn_consonants2); SetLetterBits(tr, LETTERGP_C, bn_consonants2);


tr->langopts.numbers = NUM_SWAP_TENS; tr->langopts.numbers = NUM_SWAP_TENS;
tr->langopts.break_numbers = 0x24924aa8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi
tr->langopts.break_numbers = BREAK_LAKH_BN;


if (name2 == L3('b', 'p', 'y')) { if (name2 == L3('b', 'p', 'y')) {
tr->langopts.numbers = 1; tr->langopts.numbers = 1;
tr->langopts.stress_rule = STRESSPOSN_1L; 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
SetLetterBitsRange(tr, LETTERGP_B, 0x26, 0x30); // vowel signs, and virama SetLetterBitsRange(tr, LETTERGP_B, 0x26, 0x30); // vowel signs, and virama
tr->langopts.break_numbers = 0x14a8; // 1000, 100,000 10,000,000
tr->langopts.break_numbers = BREAK_LAKH_DV;
tr->langopts.numbers = 1; tr->langopts.numbers = 1;
} }
break; break;
tr->langopts.stress_rule = 6; // stress on last heaviest syllable, excluding final 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 = BREAK_LAKH_HI;
tr->letter_bits_offset = OFFSET_DEVANAGARI; tr->letter_bits_offset = OFFSET_DEVANAGARI;


if (name2 == L('p', 'a')) if (name2 == L('p', 'a'))
tr->langopts.stress_rule = STRESSPOSN_2R; 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 = BREAK_LAKH;
tr->langopts.max_digits = 22; tr->langopts.max_digits = 22;
tr->langopts.numbers2 |= NUM2_ENGLISH_NUMERALS; tr->langopts.numbers2 |= NUM2_ENGLISH_NUMERALS;
} else if (name2 == L('o', 'r')) } else if (name2 == L('o', 'r'))
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;
tr->langopts.break_numbers = 0x1111110;
tr->langopts.break_numbers = BREAK_MYRIADS;
tr->langopts.max_digits = 20; tr->langopts.max_digits = 20;
} }
break; break;
tr->langopts.suffix_add_e = tr->letter_bits_offset + 0x4a; // virama tr->langopts.suffix_add_e = tr->letter_bits_offset + 0x4a; // virama
tr->langopts.numbers = NUM_OMIT_1_THOUSAND | NUM_SINGLE_STRESS_L | NUM_DFRACTION_7; tr->langopts.numbers = NUM_OMIT_1_THOUSAND | NUM_SINGLE_STRESS_L | NUM_DFRACTION_7;
tr->langopts.numbers2 = NUM2_PERCENT_BEFORE; tr->langopts.numbers2 = NUM2_PERCENT_BEFORE;
tr->langopts.break_numbers = 0x14aa8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi
tr->langopts.break_numbers = BREAK_LAKH_HI;
} }
break; break;
case L('s', 'l'): // Slovenian case L('s', 'l'): // Slovenian




tr->langopts.numbers = NUM_AND_UNITS | NUM_HUNDRED_AND | NUM_SINGLE_AND | NUM_OMIT_1_HUNDRED; tr->langopts.numbers = NUM_AND_UNITS | NUM_HUNDRED_AND | NUM_SINGLE_AND | NUM_OMIT_1_HUNDRED;
tr->langopts.break_numbers = 0x49249268; // for languages which have numbers for 100,000 and 1,000,000
} }
break; break;
case L('t', 'a'): // Tamil case L('t', 'a'): // Tamil
tr->langopts.stress_rule = STRESSPOSN_1L; 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 = BREAK_LAKH_DV;


if (name2 == L('t', 'a')) { if (name2 == L('t', 'a')) {
SetupTranslator(tr, stress_lengths_ta, NULL); SetupTranslator(tr, stress_lengths_ta, NULL);
tr->letter_bits_offset = OFFSET_ARABIC; tr->letter_bits_offset = OFFSET_ARABIC;
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_SWAP_TENS; tr->langopts.numbers = NUM_SWAP_TENS;
tr->langopts.break_numbers = 0x52a8; // for languages which have numbers for 100,000 and 100,00,000, eg Hindi
tr->langopts.break_numbers = BREAK_LAKH_UR;
} }
break; break;
case L('v', 'i'): // Vietnamese case L('v', 'i'): // Vietnamese
tr->langopts.listx = 1; // compile zh_listx after zh_list tr->langopts.listx = 1; // compile zh_listx after zh_list
tr->langopts.numbers = 1; tr->langopts.numbers = 1;
tr->langopts.numbers2 = NUM2_ZERO_TENS; tr->langopts.numbers2 = NUM2_ZERO_TENS;
tr->langopts.break_numbers = 0x00018;
tr->langopts.break_numbers = BREAK_INDIVIDUAL;
} }
break; break;
} }

+ 12
- 1
src/libespeak-ng/translate.h View File

// bit20=(LANG=zh) say zero tens // bit20=(LANG=zh) say zero tens
int numbers2; int numbers2;


#define BREAK_THOUSANDS 0x49249248
// Bit 2^n is set if 10^n separates a number grouping (max n=31).
// 0 1 2 3
// n = 01234567890123456789012345678901
#define BREAK_THOUSANDS 0x49249248 // b b b b b b b b b b b // 10,000,000,000,000,000,000,000,000,000,000
#define BREAK_MYRIADS 0x11111110 // b b b b b b b b // 1000,0000,0000,0000,0000,0000,0000,0000
#define BREAK_LAKH 0xaaaaaaa8 // b b b b b b b b b b b b b b b b // 10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
#define BREAK_LAKH_BN 0x24924aa8 // b b b b b b b b b b b b // 100,000,000,000,000,000,000,00,00,00,00,000
#define BREAK_LAKH_DV 0x000014a8 // b b b b b b // 100,00,000,00,00,000
#define BREAK_LAKH_HI 0x00014aa8 // b b b b b b b b // 100,00,000,00,00,00,00,000
#define BREAK_LAKH_UR 0x000052a8 // b b b b b b b // 100,00,000,00,00,00,000
#define BREAK_INDIVIDUAL 0x00000018 // b bb // 100,0,000

int break_numbers; // which digits to break the number into thousands, millions, etc (Hindi has 100,000 not 1,000,000) int break_numbers; // which digits to break the number into thousands, millions, etc (Hindi has 100,000 not 1,000,000)
int max_roman; int max_roman;
int min_roman; int min_roman;

Loading…
Cancel
Save