Change sound of Portugal 'rr' and initial 'r'. Fixed for Aragonese ordinal numbers. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@330 d46cf337-b52f-0410-862d-fd96e6ae7743master
| @@ -115,7 +115,6 @@ _dpt kon | |||
| _#º o | |||
| _#ª a | |||
| _1ox prim'Er | |||
| _2ox seQ'und | |||
| _3ox tErT'Er | |||
| @@ -167,6 +166,9 @@ _9Co nweUTEnt'en | |||
| _0M1o mil'en | |||
| _0M2o mil^on'en | |||
| _1M2o mil^on'en | |||
| _0M4o bil^on'en | |||
| _1M4o bil^on'en | |||
| // characters | |||
| $ d'olar | |||
| @@ -277,13 +279,6 @@ hu $u | |||
| sant $u | |||
| donya $u | |||
| don $u | |||
| he $u | |||
| has $u | |||
| ha $u | |||
| han $u | |||
| heba $u | |||
| hebas $u | |||
| heban $u | |||
| se'n sen $u | |||
| @@ -519,4 +514,4 @@ unix j'uniks | |||
| whatsapp was'app | |||
| windows w'indows | |||
| mobile _^_EN | |||
| //mobile _^_EN | |||
| @@ -35,7 +35,7 @@ n^ p p` r s S t t` | |||
| tS tS` v w x z Z | |||
| Dictionary an_dict 2013-03-19 | |||
| Dictionary an_dict 2013-03-21 | |||
| a aI aU e E eI eU i | |||
| o O oI u U | |||
| @@ -1035,6 +1035,9 @@ szivárvá) ny (játsz n^ | |||
| haszo) n (jár n | |||
| boszorká) ny (jelet n^ | |||
| káno) n (jog n | |||
| legé) ny (jár n^ | |||
| szé) n (jelek n | |||
| teljesítmé) ny (j n^ | |||
| .group o | |||
| o o | |||
| @@ -2013,6 +2016,8 @@ _tisztele) tj (el tj | |||
| szen) tj (akab tj | |||
| közérze) tj (aví tj | |||
| ké) tj (átszm tj | |||
| szavaza) tj (og tj | |||
| szavaza) tj (eg tj | |||
| .group ts | |||
| ts (_S2 tS //general rule with word end of ts letters | |||
| @@ -2230,6 +2235,9 @@ felira) ts (áv t|S | |||
| _cha) tsz (ob t|s | |||
| robo) ts (of 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 | |||
| @@ -49,7 +49,7 @@ consonants 11 119 | |||
| ca 11 127 | |||
| an 4 125 | |||
| pt 29 140 | |||
| pt-pt 18 140 | |||
| pt-pt 20 140 | |||
| ro 36 148 | |||
| el 10 125 | |||
| grc 12 129 | |||
| @@ -721,6 +721,7 @@ r3/rx [*] base | |||
| [r] et | |||
| [r/] fr | |||
| [R] fr-ca | |||
| [x] pt-pt | |||
| [*;] ro | |||
| [r#] is | |||
| [r/] tn | |||
| @@ -2548,6 +2549,7 @@ vwl_fr/r [r] fr | |||
| vwl_fr/r_ [r/] fr | |||
| vwl_fr/r_@ [r/] fr | |||
| vwl_fr/r@ fr post_r | |||
| vwl_fr/@R [x] pt-pt | |||
| vwl_fr/r@2 fr post_r | |||
| vwl_fr/@R2 [R] fr-ca | |||
| vwl_fr/ra fr post_r | |||
| @@ -133,6 +133,23 @@ phoneme w | |||
| 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 | |||
| CALL base/S | |||
| @@ -691,7 +691,7 @@ int TranslateLetter(Translator *tr, char *word, char *phonemes, int control) | |||
| 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; | |||
| else | |||
| if((alphabet != NULL) && (alphabet->language != 0) && !(al_flags & AL_NOT_LETTERS)) | |||
| @@ -876,6 +876,7 @@ void SetSpellingStress(Translator *tr, char *phonemes, int control, int n_chars) | |||
| // Numbers | |||
| 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) | |||
| @@ -1302,7 +1303,11 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out | |||
| if(control & 4) | |||
| { | |||
| 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) | |||
| { | |||
| @@ -1362,8 +1367,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out | |||
| 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); | |||
| if(Lookup(tr, string, ph_tens) != 0) | |||
| @@ -1457,7 +1461,7 @@ static int LookupNum2(Translator *tr, int value, const int control, char *ph_out | |||
| { | |||
| 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; | |||
| if(tr->langopts.numbers & NUM_SWAP_TENS) | |||
| @@ -1884,6 +1888,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
| ordinal = 2; | |||
| flags[0] |= FLAG_SKIPWORDS; | |||
| skipwords = 1; | |||
| sprintf(string,"_x#%s",suffix); | |||
| Lookup(tr, string, ph_ordinal2x); // is there an alternate pronunciation? | |||
| } | |||
| } | |||
| } | |||
| @@ -2179,7 +2185,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned | |||
| if((tr->langopts.numbers & NUM_NOPAUSE) && (next_char == ' ')) | |||
| 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. | |||
| } | |||
| @@ -35,7 +35,7 @@ | |||
| #include "translate.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; | |||
| int option_device_number = -1; | |||
| @@ -290,7 +290,7 @@ static const char transpose_map_latin[] = { | |||
| tr->langopts.max_initial_consonants = 3; | |||
| 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.alt_alphabet_lang = L('e','n'); | |||
| SetLengthMods(tr,201); | |||
| // tr->langopts.length_mods = length_mods_en; | |||
| @@ -679,7 +679,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; // 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) | |||
| { | |||
| @@ -733,7 +733,7 @@ Translator *SelectTranslator(const char *name) | |||
| 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.numbers2 = NUM2_MULTIPLE_ORDINAL; | |||
| tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_ORDINAL_NO_AND; | |||
| if(name2 == L('c','a')) | |||
| { | |||
| @@ -745,7 +745,7 @@ Translator *SelectTranslator(const char *name) | |||
| if(name2 == L('a','n')) | |||
| { | |||
| 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 | |||
| if(name2 == L_pap) | |||
| @@ -1278,7 +1278,7 @@ SetLengthMods(tr,3); // all equal | |||
| 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; | |||
| 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'); | |||
| ResetLetterBits(tr,0x2); | |||
| SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y | |||
| @@ -503,6 +503,7 @@ typedef struct { | |||
| #define NUM2_THOUSANDS_VAR4 0x100 | |||
| #define NUM2_THOUSANDS_VAR5 0x140 | |||
| #define NUM2_ORDINAL_NO_AND 0x800 | |||
| #define NUM2_MULTIPLE_ORDINAL 0x1000 | |||
| #define NUM2_NO_TEEN_ORDINALS 0x2000 | |||
| #define NUM2_MYRIADS 0x4000 | |||
| @@ -511,6 +512,7 @@ typedef struct { | |||
| // 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) | |||
| // 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 | |||
| // 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) | |||