| #include "langopts.h" | #include "langopts.h" | ||||
| #include "mnemonics.h" // for MNEM_TAB | #include "mnemonics.h" // for MNEM_TAB | ||||
| #include "translate.h" // for Translator | #include "translate.h" // for Translator | ||||
| #include "voice.h" // for CheckTranslator() | |||||
| #include "synthdata.h" // for n_tunes, tunes | #include "synthdata.h" // for n_tunes, tunes | ||||
| #include "voice.h" // for ReadNumbers, Read8Numbers | |||||
| static int CheckTranslator(Translator *tr, const MNEM_TAB *keyword_tab, int key); | static int CheckTranslator(Translator *tr, const MNEM_TAB *keyword_tab, int key); | ||||
| static int LookupTune(const char *name); | static int LookupTune(const char *name); | ||||
| extern const MNEM_TAB langopts_tab[]; | extern const MNEM_TAB langopts_tab[]; | ||||
| void LoadLanguageOptions(Translator *translator, int key, char *keyValue ) { | void LoadLanguageOptions(Translator *translator, int key, char *keyValue ) { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) { | |||||
| return; | |||||
| } | |||||
| int ix; | int ix; | ||||
| int n; | int n; | ||||
| switch (key) { | switch (key) { | ||||
| case V_DICTMIN: { | case V_DICTMIN: { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| if (sscanf(keyValue, "%d", &n) == 1) | if (sscanf(keyValue, "%d", &n) == 1) | ||||
| translator->dict_min_size = n; | translator->dict_min_size = n; | ||||
| } | } | ||||
| case V_DICTRULES: { // conditional dictionary rules and list entries | case V_DICTRULES: { // conditional dictionary rules and list entries | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| ReadNumbers(keyValue, &translator->dict_condition, 32, langopts_tab, key); | ReadNumbers(keyValue, &translator->dict_condition, 32, langopts_tab, key); | ||||
| break; | break; | ||||
| } | } | ||||
| case V_INTONATION: { | case V_INTONATION: { | ||||
| sscanf(keyValue, "%d", &option_tone_flags); | sscanf(keyValue, "%d", &option_tone_flags); | ||||
| if ((option_tone_flags & 0xff) != 0) { | if ((option_tone_flags & 0xff) != 0) { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| translator->langopts.intonation_group = option_tone_flags & 0xff; | translator->langopts.intonation_group = option_tone_flags & 0xff; | ||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| case V_NUMBERS: { | case V_NUMBERS: { | ||||
| // if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| // expect a list of numbers | // expect a list of numbers | ||||
| while (*keyValue != 0) { | while (*keyValue != 0) { | ||||
| while (isspace(*keyValue)) keyValue++; | while (isspace(*keyValue)) keyValue++; | ||||
| break; | break; | ||||
| } | } | ||||
| case V_LOWERCASE_SENTENCE: { | case V_LOWERCASE_SENTENCE: { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| translator->langopts.lowercase_sentence = true; | translator->langopts.lowercase_sentence = true; | ||||
| break; | break; | ||||
| } | } | ||||
| case V_STRESSADD: { // stressAdd | case V_STRESSADD: { // stressAdd | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| int stress_add_set = 0; | int stress_add_set = 0; | ||||
| int stress_add[8]; | int stress_add[8]; | ||||
| break; | break; | ||||
| } | } | ||||
| case V_STRESSAMP: { | case V_STRESSAMP: { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| int stress_amps_set = 0; | int stress_amps_set = 0; | ||||
| int stress_amps[8]; | int stress_amps[8]; | ||||
| break; | break; | ||||
| } | } | ||||
| case V_STRESSLENGTH: { | case V_STRESSLENGTH: { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| //printf("parsing: %s", keyValue); | //printf("parsing: %s", keyValue); | ||||
| int stress_lengths_set = 0; | int stress_lengths_set = 0; | ||||
| int stress_lengths[8]; | int stress_lengths[8]; | ||||
| break; | break; | ||||
| } | } | ||||
| case V_STRESSOPT: { | case V_STRESSOPT: { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| ReadNumbers(keyValue, &translator->langopts.stress_flags, 32, langopts_tab, key); | ReadNumbers(keyValue, &translator->langopts.stress_flags, 32, langopts_tab, key); | ||||
| break; | break; | ||||
| } | } | ||||
| case V_STRESSRULE: { | case V_STRESSRULE: { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| sscanf(keyValue, "%d %d %d", &translator->langopts.stress_rule, | sscanf(keyValue, "%d %d %d", &translator->langopts.stress_rule, | ||||
| &translator->langopts.unstressed_wd1, | &translator->langopts.unstressed_wd1, | ||||
| &translator->langopts.unstressed_wd2); | &translator->langopts.unstressed_wd2); | ||||
| break; | break; | ||||
| } | } | ||||
| case V_TUNES: { | case V_TUNES: { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| char names[8][40]; | char names[8][40]; | ||||
| n = sscanf(keyValue, "%s %s %s %s %s %s", names[0], names[1], names[2], names[3], names[4], names[5]); | n = sscanf(keyValue, "%s %s %s %s %s %s", names[0], names[1], names[2], names[3], names[4], names[5]); | ||||
| translator->langopts.intonation_group = 0; | translator->langopts.intonation_group = 0; | ||||
| break; | break; | ||||
| } | } | ||||
| case V_WORDGAP: { | case V_WORDGAP: { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| sscanf(keyValue, "%d %d", &translator->langopts.word_gap, &translator->langopts.vowel_pause); | sscanf(keyValue, "%d %d", &translator->langopts.word_gap, &translator->langopts.vowel_pause); | ||||
| break; | break; | ||||
| } | } | ||||
| break; | break; | ||||
| default: { | default: { | ||||
| if ((key & 0xff00) == 0x100) { | if ((key & 0xff00) == 0x100) { | ||||
| if (CheckTranslator(translator, langopts_tab, key) != 0) | |||||
| break; | |||||
| sscanf(keyValue, "%d", &translator->langopts.param[key &0xff]); | sscanf(keyValue, "%d", &translator->langopts.param[key &0xff]); | ||||
| } | } | ||||
| break; | break; |