Conflicts: dictsource/dict_phonemes phsource/compile_reportmaster
haszo) n (jár n | haszo) n (jár n | ||||
boszorká) ny (jelet n^ | boszorká) ny (jelet n^ | ||||
káno) n (jog n | káno) n (jog n | ||||
legé) ny (jár n^ | |||||
szé) n (jelek n | |||||
teljesítmé) ny (j n^ | |||||
.group o | .group o | ||||
o o | o o | ||||
szen) tj (akab tj | szen) tj (akab tj | ||||
közérze) tj (aví tj | közérze) tj (aví tj | ||||
ké) tj (átszm tj | ké) tj (átszm tj | ||||
szavaza) tj (og tj | |||||
szavaza) tj (eg tj | |||||
.group ts | .group ts | ||||
ts (_S2 tS //general rule with word end of ts letters | ts (_S2 tS //general rule with word end of ts letters | ||||
_cha) tsz (ob t|s | _cha) tsz (ob t|s | ||||
robo) ts (of t|S | robo) ts (of t|S | ||||
merényle) ts (or t|S | merényle) ts (or t|S | ||||
szavaza) ts (o t|S | |||||
szige) ts (ej t|S | |||||
szige) ts (o t|S | |||||
.group tt | .group tt |
endphoneme | endphoneme | ||||
phoneme x // [r] for Portugal | |||||
liquid | |||||
trill | |||||
ipa ʁ | |||||
lengthmod 7 | |||||
Vowelin f1=0 f2=1500 -400 400 f3=-400 80 | |||||
IF nextPh(isNotVowel) THEN | |||||
ChangePhoneme(r/) | |||||
ENDIF | |||||
FMT(vwl_fr/@R) addWav(r3/rx, 120) | |||||
endphoneme | |||||
phoneme R // for Portugal this is same the as [r] | |||||
import_phoneme pt/r | |||||
endphoneme | |||||
phoneme s# // This is [s] for Brazil, [S] for Portugal | phoneme s# // This is [s] for Brazil, [S] for Portugal | ||||
CALL base/S | CALL base/S |
if(ph_buf[0] == 0) | if(ph_buf[0] == 0) | ||||
{ | { | ||||
if(al_offset == translator->langopts.alt_alphabet) | |||||
if((al_offset != 0) && (al_offset == translator->langopts.alt_alphabet)) | |||||
language = translator->langopts.alt_alphabet_lang; | language = translator->langopts.alt_alphabet_lang; | ||||
else | else | ||||
if((alphabet != NULL) && (alphabet->language != 0) && !(al_flags & AL_NOT_LETTERS)) | if((alphabet != NULL) && (alphabet->language != 0) && !(al_flags & AL_NOT_LETTERS)) | ||||
// Numbers | // Numbers | ||||
static char ph_ordinal2[12]; | static char ph_ordinal2[12]; | ||||
static char ph_ordinal2x[12]; | |||||
static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB *wtab, int roman) | static int CheckDotOrdinal(Translator *tr, char *word, char *word_end, WORD_TAB *wtab, int roman) | ||||
if(control & 4) | if(control & 4) | ||||
{ | { | ||||
sprintf(string,"_%d%cx",value,ord_type); // LANG=hu, special word for 1. 2. when there are no higher digits | sprintf(string,"_%d%cx",value,ord_type); // LANG=hu, special word for 1. 2. when there are no higher digits | ||||
found = Lookup(tr, string, ph_digits); | |||||
if((found = Lookup(tr, string, ph_digits)) != 0) | |||||
{ | |||||
if(ph_ordinal2x[0] != 0) | |||||
strcpy(ph_ordinal, ph_ordinal2x); // alternate pronunciation (lang=an) | |||||
} | |||||
} | } | ||||
if(found == 0) | if(found == 0) | ||||
{ | { | ||||
else | else | ||||
{ | { | ||||
if((is_ordinal) && | |||||
((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL))) | |||||
if(is_ordinal) | |||||
{ | { | ||||
sprintf(string,"_%dX%c", tens, ord_type); | sprintf(string,"_%dX%c", tens, ord_type); | ||||
if(Lookup(tr, string, ph_tens) != 0) | if(Lookup(tr, string, ph_tens) != 0) | ||||
{ | { | ||||
Lookup(tr, "_0and", ph_and); | Lookup(tr, "_0and", ph_and); | ||||
if((is_ordinal) && (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)) | |||||
if((is_ordinal) && (tr->langopts.numbers2 & NUM2_ORDINAL_NO_AND)) | |||||
ph_and[0] = 0; | ph_and[0] = 0; | ||||
if(tr->langopts.numbers & NUM_SWAP_TENS) | if(tr->langopts.numbers & NUM_SWAP_TENS) | ||||
ordinal = 2; | ordinal = 2; | ||||
flags[0] |= FLAG_SKIPWORDS; | flags[0] |= FLAG_SKIPWORDS; | ||||
skipwords = 1; | skipwords = 1; | ||||
sprintf(string,"_x#%s",suffix); | |||||
Lookup(tr, string, ph_ordinal2x); // is there an alternate pronunciation? | |||||
} | } | ||||
} | } | ||||
} | } | ||||
if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' ')) | if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' ')) | ||||
utf8_in(&next_char,p); | utf8_in(&next_char,p); | ||||
if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0))) | |||||
if(!iswalpha(next_char) && (thousands_exact==0)) | |||||
// if(!iswalpha(next_char) && !((wtab[thousandplex].flags & FLAG_HYPHEN_AFTER) && (thousands_exact != 0))) | |||||
strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc. | strcat(ph_out,str_pause); // don't add pause for 100s, 6th, etc. | ||||
} | } | ||||
#include "translate.h" | #include "translate.h" | ||||
#include "wave.h" | #include "wave.h" | ||||
const char *version_string = "1.47.03 21.Mar.13"; | |||||
const char *version_string = "1.47.03a 21.Mar.13"; | |||||
const int version_phdata = 0x014701; | const int version_phdata = 0x014701; | ||||
int option_device_number = -1; | int option_device_number = -1; |
tr->langopts.max_initial_consonants = 3; | tr->langopts.max_initial_consonants = 3; | ||||
tr->langopts.replace_chars = NULL; | tr->langopts.replace_chars = NULL; | ||||
tr->langopts.ascii_language[0] = 0; // Non-Latin alphabet languages, use this language to speak Latin words, default is English | tr->langopts.ascii_language[0] = 0; // Non-Latin alphabet languages, use this language to speak Latin words, default is English | ||||
tr->langopts.alt_alphabet_lang = L('e','n'); | |||||
SetLengthMods(tr,201); | SetLengthMods(tr,201); | ||||
// tr->langopts.length_mods = length_mods_en; | // tr->langopts.length_mods = length_mods_en; | ||||
tr->langopts.param[LOPT_SONORANT_MIN] = 130; // limit the shortening of sonorants before short vowels | 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.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA; | ||||
tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL; // variant form of numbers before thousands | |||||
tr->langopts.numbers2 = 0x2 | NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; // variant form of numbers before thousands | |||||
if(name2 == L_grc) | if(name2 == L_grc) | ||||
{ | { | ||||
tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | ||||
tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_AFTER; | tr->langopts.numbers = NUM_SINGLE_STRESS | NUM_DECIMAL_COMMA | NUM_AND_UNITS | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_AFTER; | ||||
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL; | |||||
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; | |||||
if(name2 == L('c','a')) | if(name2 == L('c','a')) | ||||
{ | { | ||||
if(name2 == L('a','n')) | if(name2 == L('a','n')) | ||||
{ | { | ||||
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2; | tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2; | ||||
tr->langopts.numbers2 = 0; | |||||
tr->langopts.numbers2 = NUM2_ORDINAL_NO_AND; | |||||
} | } | ||||
else | else | ||||
if(name2 == L_pap) | if(name2 == L_pap) | ||||
tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final 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; | tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_DFRACTION_2 | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_ROMAN; | ||||
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS; | |||||
tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS | NUM2_ORDINAL_NO_AND; | |||||
SetLetterVowel(tr,'y'); | SetLetterVowel(tr,'y'); | ||||
ResetLetterBits(tr,0x2); | ResetLetterBits(tr,0x2); | ||||
SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y | SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y |
#define NUM2_THOUSANDS_VAR4 0x100 | #define NUM2_THOUSANDS_VAR4 0x100 | ||||
#define NUM2_THOUSANDS_VAR5 0x140 | #define NUM2_THOUSANDS_VAR5 0x140 | ||||
#define NUM2_ORDINAL_NO_AND 0x800 | |||||
#define NUM2_MULTIPLE_ORDINAL 0x1000 | #define NUM2_MULTIPLE_ORDINAL 0x1000 | ||||
#define NUM2_NO_TEEN_ORDINALS 0x2000 | #define NUM2_NO_TEEN_ORDINALS 0x2000 | ||||
#define NUM2_MYRIADS 0x4000 | #define NUM2_MYRIADS 0x4000 | ||||
// bits 1-4 use variant form of numbers before thousands,millions,etc. | // bits 1-4 use variant form of numbers before thousands,millions,etc. | ||||
// bits 6-8 use different forms of thousand, million, etc (M MA MB) | // bits 6-8 use different forms of thousand, million, etc (M MA MB) | ||||
// bit9=(LANG=rw) say "thousand" and "million" before its number, not after | // bit9=(LANG=rw) say "thousand" and "million" before its number, not after | ||||
// bit11=(LANG=es,an) don't say 'and' between tens and units for ordinal numbers | |||||
// bit12=(LANG=el,es) use ordinal form of hundreds and tens as well as units | // bit12=(LANG=el,es) use ordinal form of hundreds and tens as well as units | ||||
// bit13=(LANG=pt) don't use 11-19 numbers to make ordinals | // bit13=(LANG=pt) don't use 11-19 numbers to make ordinals | ||||
// bit14=(LANG=ko) use myriads (groups of 4 digits) not thousands (groups of 3) | // bit14=(LANG=ko) use myriads (groups of 4 digits) not thousands (groups of 3) |