diff --git a/dictsource/en_list b/dictsource/en_list index e70398d4..52b01cac 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -141,52 +141,53 @@ _dpt pOInt // ABBREVIATIONS //************** -abc eIbi:s'i: -ac eI'si: -adfs eIdi:Ef'Es -a.k.a aka2_! -agm eIdZi:'Em -ai eI;'aI -api apI2 -asap eIEseIpi: -awol eIw0l -cio si:aI'oU -ctrl k0ntr'oUl -dept dI2pA@tm@nt -diy di:aI'waI -eg fO@Egz'aamp@L -etc Et'sEtr@ -eur jU@ -hmm h@m -(http ://) eItSti:ti:'pi:_ -ibm aIbi:Em -ie aIi:_! $pause -i.e aIi:_! $pause -irc aI;A@s'i: -lbs paUndz -ltd lImItId -mc m@k -oem oUi:'Em -ok oU'keI -os oUEs -riscos rIskoUEs -sae EseI'i: -seac si:ak -st s@nt -th T -thu T3: // Thursday -?5 thu TIR // Thursday -ufo ju:Ef'oU -ui ,ju:'aI -uk ju:k'eI -url ju:A@'El -usa ju:Es'eI -wwii dVb@Lju:dVb@Lju:t'u: -xy EkswaI +abc $abbrev +ac $abbrev +adfs $abbrev +a.k.a aka2_! +agm $abbrev +ai $abbrev +api $abbrev +asap $abbrev +awol eIw0l +cio $abbrev +ctrl k0ntr'oUl +dept dI2pA@tm@nt +diy $abbrev +edt $abbrev +eg fO@Egz'aamp@L +est $abbrev +etc Et'sEtr@ +eur jU@ +hmm h@m +(http ://) eItSti:ti:'pi:_ +ibm $abbrev +ie aIi:_! $pause +i.e aIi:_! $pause +irc $abbrev +lbs paUndz +ltd lImItId +mc m@k +oem $abbrev +ok $abbrev +os $abbrev +riscos rIskoUEs +sae $abbrev +st s@nt +th T +thu T3: // Thursday +?5 thu TIR // Thursday +ufo $abbrev +ui $abbrev +uk $abbrev +url $abbrev +usa $abbrev +wwii dVb@Lju:dVb@Lju:t'u: +xy $abbrev -ii tu: $abbrev // roman numerals -iii Tri: $abbrev -iv fo@ $abbrev +ii tu: $abbrev // roman numerals +iii Tri: $abbrev +iv fo@ $abbrev nd $only @@ -194,14 +195,14 @@ rd $only th $only st $only -mr mIst3 $dot -mrs mIsIz $dot +mr mIst3 $dot +mrs mIsIz $dot //ms mIz $dot -dr d0kt3 $dot $capital -lt $dot -prof $dot -rev $dot -st $dot +dr d0kt3 $dot $capital +lt $dot +prof $dot +rev $dot +st $dot @@ -448,6 +449,7 @@ bastion basti@n batman batman belisha b@l'i:S@ bely bI2laI +beryl bEr@L basal beIs@L best bEst beta bi:t@ @@ -866,7 +868,6 @@ foretell fo@t'El forever $2 forewarn $2 formid fO@m'Id // formidable -forte fo@teI foyer fOIeI freelance fri:laans frigate frIg@t @@ -1327,6 +1328,7 @@ peculiar pI2kju:lI3 pedalo pEd@loU pejorative p@dZ0r@tIv penal pi:n@L +?4 penchant p0nS0n peninsula p@n'InsjUl@ penis pi:nI2s perfectly p3:fEktlI2 @@ -1672,6 +1674,7 @@ sundae sVndeI sundial sVndaI@l suite swi:t $onlys superb su:p'3:b +superfluous su:p'3:flu:@s superman su:p3man supplier s@plaI3 suppose $2 diff --git a/dictsource/en_rules b/dictsource/en_rules index cc8d1d64..4e3d2d43 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -317,6 +317,7 @@ c) ad (enc eId ad (eq ad _) ad (i ad + gl) ad (i ad adjec adZEk ad (le eId ad (junct_ ad @@ -479,7 +480,7 @@ _) al (i al _) al (ig a2l _) ali (Be a2laI - &) al (isC_ @l + &) ali (sC_ @li &) al (isCic @l _) al (k al _) all (@ a2l @@ -2677,6 +2678,7 @@ pl) ia (nt 'aI@ ill) ia (nt I2@ al) ia (nt I2@ + _p) ia (nA i@ iar aI@ @l) iar (_ i@ iara (_ I'A:r@ @@ -3754,6 +3756,7 @@ &) or (ous @ orough Vr@ eff) or (t 3 + f) orte (_ 'o@teI w) or (t_ o@ w) or (r V w) or (n o@ @@ -4473,6 +4476,7 @@ _) tri (vi trI tsch tS _) two tu: + ttu (r t@ @) tur (A tS@r @) tur (al_ tS=@r @) tur (y tS@r diff --git a/dictsource/hr_rules b/dictsource/hr_rules index 9f0cd497..ee58abe8 100644 --- a/dictsource/hr_rules +++ b/dictsource/hr_rules @@ -4,6 +4,7 @@ .group a a a aj (K aI + a (r A // don't reduce to [&] .group b b b @@ -70,7 +71,7 @@ o o ou oU oj (K oI - o (r 8 + &) o (r_ 8 .group p p p diff --git a/dictsource/no_list b/dictsource/no_list index a34d29e3..4ee94e0f 100755 --- a/dictsource/no_list +++ b/dictsource/no_list @@ -65,7 +65,7 @@ _9X n'It:i: _0C h'u-:nd@-*e:d@2 _1C 'Et||h'u-:nd@-*e:d@2 _0M1 t'u-:s@n -_0M1 'Et||t'u-:s@n +_1M1 'Et||t'u-:s@n _0M2 m'Illi:;,u:n@r _1M2 'e:n||m'Illi:;,u:n @@ -84,13 +84,13 @@ ei $u // pronouns -jeg $u+ +jeg jaI $u+ du $u+ han $u+ hun $u+ vi $u+ dere $u+ -de $u+ +de di: $u+ meg $u+ deg $u+ @@ -104,8 +104,7 @@ denne $u+ dette $u+ disse $u+ den $u+ -det $u+ -de $u+ +det de: $u+ // possessive adjectives @@ -135,7 +134,7 @@ i $u $brk // in av $u $brk // of, off, by bak $pause // behind etter $u $pause // after -for $u $pause // for +for fOr: $u $pause // for foran $pause // in front of fra $u $pause // from in $u $brk // in @@ -216,6 +215,9 @@ _å o: _i i: i i: $atend + + // MAIN WORD DICTIONARY //********************* +kom kOm diff --git a/dictsource/no_rules b/dictsource/no_rules index 7bdef36f..a691a25e 100644 --- a/dictsource/no_rules +++ b/dictsource/no_rules @@ -8,13 +8,17 @@ a A: a (C% A a (_ A + X) a (CCX A // single syllable with >= 2 final consonants ai AI au aU aa o: // å aa (C% O + X) aa (CCX O ae a: // æ ae (C% a + X) ae (CCX a + .group b b b @@ -36,10 +40,12 @@ d d dd d: r) d (_ + &) det (_ d@2 .group e e e: e (C% E + X) e (CCX E ei aI e (rC a // ?? &) e (_ @2 @@ -70,6 +76,7 @@ .group i i i: i (C% I + X) i (CCX I &) ig (_ I .group j @@ -102,10 +109,12 @@ .group o o u: o (C% O + X) o (CCX O oi OI oe Y: // ø oe (C% W + X) oe (CCX W oey Yy o (nd U @@ -155,6 +164,7 @@ .group u u u-: u (C% u- + X) u (CCX u- ui u-I .group v @@ -171,6 +181,7 @@ .group y y y: y (C% y + X) y (CCX y .group z z s @@ -180,24 +191,29 @@ .group å å o: å (C% O + X) å (CCX O .group æ æ E: æ (r a: æ (C% a + X) æ (CCX a .group ø ø Y: ø (C% W + X) ø (CCX W øy Yy .group ä ä E: ä (C% E + X) ä (CCX E .group ö ö Y: ö (C% W + X) ö (CCX W .group é 'e: diff --git a/phsource/compile_report b/phsource/compile_report index fd1d585f..5cd82796 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -14,13 +14,13 @@ fi 40 123 fr 33 115 fr_ca 11 115 - hi 50 128 + hi 49 127 hu 24 109 nl 25 112 pl 17 103 sk 25 120 cs 5 120 - hr 23 129 + hr 24 130 ru 36 120 it 28 112 es 6 112 @@ -233,7 +233,6 @@ 2 ufric/x base vi 4 ufric/x2 af nl pt 1 ufric/x_hr hr - 1 ufric/xx hr 1 ustop/c base 5 ustop/k base en fr hi sw 9 ustop/k_ base en fi fr hi hu it el sw @@ -346,6 +345,7 @@ 1 vdiph/u-i vi 1 vdiph/ui_2 af 2 vdiph/ui_3 cy + 1 vdiph/ui_4 hr 1 vdiph/Vi vi 1 vdiph/Vu af 2 vdiph/Vu_2 en_us en_wm @@ -411,9 +411,9 @@ 1 vowel/3_3 en_rp 3 vowel/3_en en en_wm af 2 vowel/@_4 nl hr - 2 vowel/8_2 en_us sv + 3 vowel/8_2 en_us hr sv 1 vowel/8_3 zh_yue - 10 vowel/a en_n cy de hu nl pl sk hr + 11 vowel/a en_n cy de hu nl pl sk hr 4 vowel/a# en_sc it pt 5 vowel/a_2 eo it pt_pt ro vi 4 vowel/a#_2 hr sv is sw @@ -463,7 +463,6 @@ 6 vowel/ii_en en en_n 5 vowel/@_low hi ro no 8 vowel/o en en_wm de hi it pt_pt sv - 1 vowel/o- hr 4 vowel/o_2 cy hi hu no 2 vowel/o-_2 en_n en_wm 2 vowel/o_3 en_sc @@ -487,7 +486,7 @@ 3 vowelr/r-voc hi sk 2 vowelr/V3_r en en_sc 1 vowelr/V_r en - 8 vowel/u en_n cy de eo fr hi cs + 7 vowel/u en_n cy de eo fr cs 5 vowel/u# en en_sc 3 vowel/u_2 fi sk ro 1 vowel/u#_2 sv diff --git a/phsource/l/_l b/phsource/l/_l index 1a01ce92..a3fc544d 100644 Binary files a/phsource/l/_l and b/phsource/l/_l differ diff --git a/phsource/l/l@ b/phsource/l/l@ index b1617619..b0f500e7 100644 Binary files a/phsource/l/l@ and b/phsource/l/l@ differ diff --git a/phsource/l/la b/phsource/l/la index 40821595..acc8c310 100644 Binary files a/phsource/l/la and b/phsource/l/la differ diff --git a/phsource/l/le b/phsource/l/le index 0579449b..c61ddffe 100644 Binary files a/phsource/l/le and b/phsource/l/le differ diff --git a/phsource/l/li b/phsource/l/li index f4a7bd48..2457c844 100644 Binary files a/phsource/l/li and b/phsource/l/li differ diff --git a/phsource/l/lo b/phsource/l/lo index 09aa1a82..943b4839 100644 Binary files a/phsource/l/lo and b/phsource/l/lo differ diff --git a/phsource/l/lu b/phsource/l/lu index f1968097..efc4a1b5 100644 Binary files a/phsource/l/lu and b/phsource/l/lu differ diff --git a/phsource/ph_croatian b/phsource/ph_croatian index de139454..937f7bf2 100644 --- a/phsource/ph_croatian +++ b/phsource/ph_croatian @@ -25,6 +25,13 @@ phoneme a endphoneme +phoneme A // 'a' before 'r', doesn't reduce to [&] + vowel starttype (a) endtype (a) + length 160 + formants vowel/a +endphoneme + + phoneme & vowel starttype (a) endtype (a) length 140 @@ -72,7 +79,7 @@ endphoneme phoneme 8 vowel starttype (o) endtype (o) length 140 - formants vowel/o- + formants vowel/8_2 endphoneme @@ -92,14 +99,14 @@ endphoneme phoneme aI vowel starttype (a) endtype (i) - length 230 + length 250 formants vdiph/ai endphoneme phoneme eI vowel starttype (e) endtype (i) - length 220 + length 250 formants vdiph/ei_2 linkout ; endphoneme @@ -115,12 +122,19 @@ endphoneme phoneme oI vowel starttype (o) endtype (i) - length 220 + length 250 formants vdiph/ooi_3 linkout ; endphoneme +phoneme uI + vowel starttype (u) endtype (i) + length 250 + formants vdiph/ui_4 + linkout ; +endphoneme + phoneme p vls blb stop @@ -170,14 +184,4 @@ phoneme x switchvoicing Q endphoneme -phoneme x2 // TEST - vls vel frc - vowelin f1=0 f2=2300 200 400 f3=-100 80 - vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 - length 100 - lengthmod 3 - wave ufric/xx%120 - switchvoicing Q -endphoneme - diff --git a/phsource/ph_hindi b/phsource/ph_hindi index 5eb28f87..9eae621f 100644 --- a/phsource/ph_hindi +++ b/phsource/ph_hindi @@ -5,7 +5,7 @@ phoneme : // Lengthen the previous vowel by "length" virtual - length 80 + length 100 endphoneme phoneme @ @@ -13,7 +13,7 @@ phoneme @ length 130 formants vowel/@_bck before H vowel/@_low - reduceto NULL 0 + reduceto @- 0 endphoneme phoneme V @@ -48,14 +48,14 @@ endphoneme phoneme i: vowel long starttype (i) endtype (i) - length 220 + length 230 formants vowel/i_fnt linkout ; endphoneme phoneme i // as [i:] but not marked as 'long' vowel starttype (i) endtype (i) - length 220 + length 230 formants vowel/i_fnt linkout ; endphoneme @@ -69,7 +69,7 @@ endphoneme phoneme e: vowel long starttype (e) endtype (e) - length 210 + length 220 formants vowel/e_2 endphoneme @@ -81,7 +81,7 @@ endphoneme phoneme E: vowel long starttype (e) endtype (e) - length 210 + length 220 formants vdiph/ee-e endphoneme @@ -100,7 +100,7 @@ endphoneme phoneme &: vowel long starttype (a) endtype (a) - length 210 + length 220 formants vowel/& endphoneme @@ -120,7 +120,7 @@ endphoneme phoneme o: vowel long starttype (o) endtype (o) - length 210 + length 220 formants vowel/o_2 endphoneme @@ -132,7 +132,7 @@ endphoneme phoneme O: vowel long starttype (o) endtype (o) - length 200 + length 210 formants vowel/oo_4 endphoneme @@ -165,16 +165,10 @@ endphoneme phoneme u: vowel long starttype (u) endtype (u) - length 220 + length 230 formants vowel/u_bck endphoneme -phoneme u2: - vowel long starttype (u) endtype (u) - length 220 - formants vowel/u -endphoneme - phoneme r- diff --git a/phsource/vdiph/ei_2 b/phsource/vdiph/ei_2 index 197f3696..fe97fdcd 100644 Binary files a/phsource/vdiph/ei_2 and b/phsource/vdiph/ei_2 differ diff --git a/phsource/vdiph/ooi_3 b/phsource/vdiph/ooi_3 index 177854be..33d98063 100644 Binary files a/phsource/vdiph/ooi_3 and b/phsource/vdiph/ooi_3 differ diff --git a/phsource/vowel/vowelchart.png b/phsource/vowel/vowelchart.png index de2e6417..146a9806 100644 Binary files a/phsource/vowel/vowelchart.png and b/phsource/vowel/vowelchart.png differ diff --git a/phsource/w/w2 b/phsource/w/w2 index 797e7d0a..cc4f2c37 100644 Binary files a/phsource/w/w2 and b/phsource/w/w2 differ diff --git a/src/compiledata.cpp b/src/compiledata.cpp index d0c5d7aa..5224086c 100755 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -75,6 +75,7 @@ extern void Write4Bytes(FILE *f, int value); extern void MakeVowelLists(void); +extern void FindPhonemesUsed(void); extern int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *fname); extern char voice_name[]; @@ -1824,6 +1825,76 @@ void Compile::Report(void) } + +static int ph_sorter(char **a, char **b) +{//====================================== + int ix; + int t1, t2; + char mnem1[6]; + + PHONEME_TAB *p1 = (PHONEME_TAB *)(*a); + PHONEME_TAB *p2 = (PHONEME_TAB *)(*b); + + t1 = p1->type; + if(t1 > phVOWEL) t1 = phVOWEL+1; + + t2 = p2->type; + if(t2 > phVOWEL) t2 = phVOWEL+1; + + if((ix = t1 - t2) != 0) + return(ix); + + strcpy(mnem1,WordToString(p1->mnemonic)); + return(strcasecmp(mnem1,WordToString(p2->mnemonic))); +} /* end of ph_sorter */ + + + +void PrintPhonemesUsed(FILE *f, const char *dictname) +{//================================================== + int ix; + PHONEME_TAB *ph; + PHONEME_TAB *ph_tab[N_PHONEME_TAB]; + int count = 0; + int n_ph = 0; + int section = 0; + + fprintf(f,"\n\nDictionary %s_dict\n",dictname); + fflush(f); + + for(ix=0; (ixtype > 1) + { + if((ph->type > phVOWEL) && (section == 0)) + { + section = 1; + count = 0; + fputc('\n',f); + } + if((count & 0x7) == 0) + fputc('\n',f); + fprintf(f,"%-4s ",WordToString(ph->mnemonic)); + count++; + } + } + fputc('\n',f); +} // end of PrintPhonemesUsed + + + wxString CompileAllDictionaries() {//============================== wxString filename; @@ -1834,6 +1905,7 @@ wxString CompileAllDictionaries() int errors = 0; int dict_count = 0; FILE *log; + FILE *f_phused; char dictname[80]; char fname_log[80]; char save_voice_name[80]; @@ -1866,6 +1938,13 @@ wxString CompileAllDictionaries() sprintf(fname_log,"%s%s",path_dsource,"dict_log"); log = fopen(fname_log,"w"); + sprintf(fname_log,"%s%s",path_dsource,"dict_phonemes"); + f_phused = fopen(fname_log,"w"); + + if(f_phused) + { + fprintf(f_phused,"Phonemes which are used in the *_rules and *_list files\n"); + } bool cont = dir.GetFirst(&filename, _T("*_rules"), wxDIR_FILES); while ( cont ) @@ -1883,10 +1962,19 @@ wxString CompileAllDictionaries() errors += err; } + if(f_phused != NULL) + { + memset(phoneme_tab_flags,0,sizeof(phoneme_tab_flags)); + FindPhonemesUsed(); + PrintPhonemesUsed(f_phused,dictname); + } + cont = dir.GetNext(&filename); } if(log != NULL) fclose(log); + if(f_phused != NULL) + fclose(f_phused); LoadVoice(save_voice_name,1); diff --git a/src/compiledict.cpp b/src/compiledict.cpp index f3c1e072..11eecd89 100755 --- a/src/compiledict.cpp +++ b/src/compiledict.cpp @@ -657,6 +657,9 @@ void copy_rule_string(char *string, int &state) case 'W': c = RULE_SPELLING; break; + case 'X': + c = RULE_NOVOWELS; + break; case 'L': // expect two digits c = *p++ - '0'; diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 7703b53b..e0491be4 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -1261,7 +1261,11 @@ void Translator::SetWordStress(char *output, unsigned int dictionary_flags, int else { // unstressed syllable within a word - v_stress = 1; /* change from 0 (unstressed) to 1 (diminished stress) */ + if((vowel_stress[v-1] != 1) || ((langopts.stress_flags & 0x10000) == 0)) + { + v_stress = 1; /* change from 0 (unstressed) to 1 (diminished stress) */ + vowel_stress[v] = v_stress; + } } } @@ -1383,7 +1387,7 @@ char *Translator::DecodeRule(const char *group, char *rule) static char output[60]; static char symbols[] = {' ',' ',' ',' ',' ',' ',' ',' ',' ', - '@','&','%','+','#','S','D','Z','A','B','C','H','F','G','Y','N','K','V','L','T'}; + '@','&','%','+','#','S','D','Z','A','B','C','H','F','G','Y','N','K','V','L','T','X','?','W'}; match_type = 0; @@ -1805,6 +1809,23 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec } break; + case RULE_NOVOWELS: + { + char *p = post_ptr + letter_xbytes; + while(letter_w != RULE_SPACE) + { + if(IsLetter(letter_w,LETTERGP_VOWEL2)) + { + failed = 1; + break; + } + p += utf8_in(&letter_w,p,0); + } + if(!failed) + match.points += (19-distance_right); + } + break; + case RULE_INC_SCORE: match.points += 20; // force an increase in points break; @@ -1932,6 +1953,13 @@ void Translator::MatchRule(char *word[], const char *group, char *rule, MatchRec failed = 1; break; + case RULE_NOVOWELS: + if(word_vowel_count== 0) + match.points += 19; + else + failed =1; + break; + case RULE_IFVERB: if(expect_verb) match.points += 1; @@ -2710,7 +2738,8 @@ int Translator::LookupDictList(char *word1, char *ph_out, unsigned int *flags, i int Translator::Lookup(char *word, char *ph_out) {//============================================= - return(LookupDictList(word,ph_out,NULL,0)); + unsigned int flags; + return(LookupDictList(word,ph_out,&flags,0)); } diff --git a/src/synthdata.cpp b/src/synthdata.cpp index c55e0dd0..4e65d386 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.24.11 17.May.07"; +const char *version_string = "1.24.12 18.May.07"; const int version_phdata = 0x012201; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index a7d0eacc..59250721 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -244,7 +244,7 @@ Translator *SelectTranslator(const char *name) static const wchar_t replace_chars_hi[11] = {0x966,0x967,0x968,0x969,0x96a,0x96b,0x96c,0x96d,0x96e,0x96f,0}; // digits 0-9 static const unsigned int replacement_chars_hi[11] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0}; static int stress_lengths_hi[8] = {190, 190, 210, 210, 0, 0, 230, 250}; - static int stress_amps_hi[8] = {17,14, 20,20, 20,24, 24,22 }; + static int stress_amps_hi[8] = {17,14, 20,19, 20,24, 24,22 }; tr = new Translator(); SetupTranslator(tr,stress_lengths_hi,stress_amps_hi); @@ -252,7 +252,7 @@ Translator *SelectTranslator(const char *name) tr->langopts.length_mods0 = tr->langopts.length_mods; // don't lengthen vowels in the last syllable tr->langopts.stress_rule = 6; // stress on last heaviest syllable - tr->langopts.stress_flags = 0x4; // use 'diminished' for unstressed final syllable + tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable tr->langopts.numbers = 0x811 + 0x40000; tr->letter_bits_offset = OFFSET_DEVANAGARI; tr->langopts.replace_chars = replace_chars_hi; @@ -392,7 +392,7 @@ Translator *SelectTranslator(const char *name) case L('n','o'): // Norwegian { static int stress_amps_no[] = {16,16, 20,20, 20,24, 24,22 }; - static int stress_lengths_no[8] = {160,140, 200,200, 0,0, 250,270}; + static int stress_lengths_no[8] = {160,140, 200,190, 0,0, 220,240}; tr = new Translator(); SetupTranslator(tr,stress_lengths_no,stress_amps_no); diff --git a/src/translate.h b/src/translate.h index 31ec6d4d..2368c8b8 100755 --- a/src/translate.h +++ b/src/translate.h @@ -122,9 +122,10 @@ #define RULE_NOTVOWEL 25 // K #define RULE_IFVERB 26 // V #define RULE_LETTERGP 27 // L + letter group number -#define RULE_ALT1 28 // word has $alt attribute -#define RULE_SPELLING 31 // while spelling letter-by-letter -#define RULE_LAST_RULE 28 +#define RULE_ALT1 28 // T word has $alt attribute +#define RULE_NOVOWELS 29 // X no vowels up to word boundary +#define RULE_SPELLING 31 // W while spelling letter-by-letter +#define RULE_LAST_RULE 31 #define LETTERGP_A 0 #define LETTERGP_B 1 @@ -258,6 +259,7 @@ typedef struct { // bit9=stress last syllable if it doesn't end in vowel or "s" or "n" LANG=Spanish // bit12= In a 2-syllable word, if one has primary stress then give the other secondary stress // bit13= If there is only one syllable before the primary stress, give it a secondary stress +// bit16= Don't diminish consecutive syllables within a word. int stress_flags; int unstressed_wd1; // stress for $u word of 1 syllable diff --git a/src/vowelchart.cpp b/src/vowelchart.cpp index e18b9992..5fb5b6ad 100644 --- a/src/vowelchart.cpp +++ b/src/vowelchart.cpp @@ -373,10 +373,12 @@ void VowelChart(int control, char *fname) -static void FindPhonemesUsed(void) -{//=============================== +void FindPhonemesUsed(void) +{//======================== int hash; char *p; + char *start; + char *group; char *next; unsigned char c; int count = 0; @@ -386,15 +388,24 @@ static void FindPhonemesUsed(void) p = translator->data_dictrules; while(*p != 0) { + if(*p == RULE_CONDITION) + p+=2; if(*p == RULE_GROUP_END) + { p++; + if(*p == 0) break; + } if(*p == RULE_GROUP_START) + { + group = p; p += (strlen(p)+1); + } while((((c = *p) != RULE_PHONEMES)) && (c != 0)) p++; count++; if(c == RULE_PHONEMES) { + start = p; p++; while(*p != 0) {