From ee1557ece2f2280c22211f4bdfd6cd173011243b Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Sun, 12 Apr 2020 11:24:00 +0100 Subject: [PATCH] Add defines for the numbers2 thousandplex bit flags. --- src/libespeak-ng/tr_languages.c | 16 ++++++++-------- src/libespeak-ng/translate.h | 8 ++++++-- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/libespeak-ng/tr_languages.c b/src/libespeak-ng/tr_languages.c index 477ca728..bb7d3e21 100644 --- a/src/libespeak-ng/tr_languages.c +++ b/src/libespeak-ng/tr_languages.c @@ -683,7 +683,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA; - tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; // variant form of numbers before thousands + tr->langopts.numbers2 = NUM2_THOUSANDPLEX_VAR_THOUSANDS | NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; if (name2 == L3('g', 'r', 'c')) { // ancient greek @@ -913,7 +913,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.accents = 1; tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_DECIMAL_COMMA | NUM_THOUS_SPACE | NUM_DFRACTION_2 | NUM_ROMAN_CAPITALS; - tr->langopts.numbers2 = 0xa + NUM2_THOUSANDS_VAR5; // variant numbers before thousands,milliards + tr->langopts.numbers2 = NUM2_THOUSANDPLEX_VAR_THOUSANDS | NUM2_THOUSANDPLEX_VAR_MILLIARDS | NUM2_THOUSANDS_VAR5; tr->langopts.our_alphabet = OFFSET_CYRILLIC; // don't say "cyrillic" before letter names SetLetterVowel(tr, 'y'); @@ -1004,7 +1004,7 @@ Translator *SelectTranslator(const char *name) 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; + tr->langopts.numbers2 = NUM2_THOUSANDPLEX_VAR_THOUSANDS; } break; case L('i', 't'): // Italian @@ -1191,7 +1191,7 @@ Translator *SelectTranslator(const char *name) 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 + tr->langopts.numbers2 = NUM2_THOUSANDPLEX_VAR_THOUSANDS | NUM2_THOUSANDPLEX_VAR_MILLIARDS | NUM2_THOUSANDS_VAR2; } break; case L('m', 't'): // Maltese @@ -1291,7 +1291,7 @@ Translator *SelectTranslator(const char *name) tr->encoding = ESPEAKNG_ENCODING_ISO_8859_2; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_DFRACTION_3 | NUM_AND_UNITS | NUM_ROMAN; - tr->langopts.numbers2 = 0x1e; // variant numbers before all thousandplex + tr->langopts.numbers2 = NUM2_THOUSANDPLEX_VAR_ALL; } break; case L('r', 'u'): // Russian @@ -1328,7 +1328,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.decimal_sep = ','; if (name2 == L('c', 's')) - tr->langopts.numbers2 = 0x108; // variant numbers before milliards + tr->langopts.numbers2 = NUM2_THOUSANDPLEX_VAR_MILLIARDS | NUM2_THOUSANDS_VAR4; SetLetterVowel(tr, 'y'); SetLetterVowel(tr, 'r'); @@ -1371,7 +1371,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.param[LOPT_IT_LENGTHEN] = 1; // remove lengthen indicator from unstressed syllables tr->letter_bits[(int)'r'] |= 0x80; // add 'r' to letter group 7, vowels for Unpronouncable test tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT | NUM_ROMAN; - tr->langopts.numbers2 = 0x100; // plural forms of millions etc + tr->langopts.numbers2 = NUM2_THOUSANDS_VAR4; tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator break; case L('s', 'q'): // Albanian @@ -1609,5 +1609,5 @@ static void Translator_Russian(Translator *tr) tr->langopts.stress_flags = S_NO_AUTO_2; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED; - tr->langopts.numbers2 = 0x2 + NUM2_THOUSANDS_VAR1; // variant numbers before thousands + tr->langopts.numbers2 = NUM2_THOUSANDPLEX_VAR_THOUSANDS | NUM2_THOUSANDS_VAR1; // variant numbers before thousands } diff --git a/src/libespeak-ng/translate.h b/src/libespeak-ng/translate.h index 30b66e70..434c7f1b 100644 --- a/src/libespeak-ng/translate.h +++ b/src/libespeak-ng/translate.h @@ -475,7 +475,7 @@ typedef struct { int numbers; -#define NUM2_GROUP_NUMBER_VAR_BITS 0x0000000f // use variant form of numbers before thousands,millions,etc. +#define NUM2_THOUSANDPLEX_VAR_BITS 0x0000001e // use variant form of numbers before thousands, millions, etc. #define NUM2_THOUSANDS_VAR_BITS 0x000001c0 // use different forms of thousand, million, etc (M MA MB) #define NUM2_SWAP_THOUSANDS 0x00000200 // say "thousand" and "million" before its number, not after #define NUM2_ORDINAL_NO_AND 0x00000800 // don't say 'and' between tens and units for ordinal numbers @@ -489,10 +489,14 @@ typedef struct { #define NUM2_ORDINAL_DROP_VOWEL 0x00080000 // drop final vowel from cardial number before adding ordinal suffix (currently only tens and units) #define NUM2_ZERO_TENS 0x00100000 // say zero tens +#define NUM2_THOUSANDPLEX_VAR_THOUSANDS 0x00000002 +#define NUM2_THOUSANDPLEX_VAR_MILLIARDS 0x00000008 +#define NUM2_THOUSANDPLEX_VAR_ALL 0x0000001e + #define NUM2_THOUSANDS_VAR1 0x00000040 #define NUM2_THOUSANDS_VAR2 0x00000080 #define NUM2_THOUSANDS_VAR3 0x000000c0 -#define NUM2_THOUSANDS_VAR4 0x00000100 +#define NUM2_THOUSANDS_VAR4 0x00000100 // plural forms for millions, etc. #define NUM2_THOUSANDS_VAR5 0x00000140 int numbers2;