| @@ -123,7 +123,8 @@ | |||
| m) a (lt_ A:l | |||
| ker) am (ik 'A:m | |||
| @) an (_ 'A:n | |||
| @) ance (_ 'A~s | |||
| s) ance (_ 'A~s | |||
| s) ancen (_ 'A~s@n | |||
| fr) ance (_ 'A~s@ | |||
| ein) an (der 'an | |||
| @) ant (_ 'ant | |||
| @@ -823,6 +824,7 @@ formal) ie =I@ | |||
| _) natur (C@P5 nA:t'u:r | |||
| _) na (tür n%A: | |||
| nce (_ _^_EN | |||
| nces (_ _^_EN | |||
| _) ne (b ne: | |||
| nebeneina (nd n,e:b@n_|aIn'a | |||
| _) neben (@P5 n'e:b@n | |||
| @@ -1035,6 +1037,7 @@ formal) ie =I@ | |||
| schwer Sve:r | |||
| _) sechs (P5 z'Eks | |||
| seku (nden ze:k'U | |||
| _) selbst (@@P6 z'Elpst | |||
| service (_S7 z%Ervi:s | |||
| shop _^_EN | |||
| @@ -1245,7 +1248,7 @@ formal) ie =I@ | |||
| _) w (lad v | |||
| _) w (rA v | |||
| @) wert (_ vErt | |||
| @) wert (_ ve:rt | |||
| _) wh _^_EN | |||
| &) ware (_ _^_EN | |||
| _) wasch (@P5 v'aS | |||
| @@ -609,7 +609,7 @@ s. t T t. th th. v x | |||
| z Z z. | |||
| Dictionary bg_dict 2011-04-20 | |||
| Dictionary bg_dict 2011-04-25 | |||
| @ a e i o u | |||
| @@ -4379,7 +4379,7 @@ | |||
| prede (ces pri:dI | |||
| _) pre (diP3 pr%i | |||
| _) pre (dic pr%I | |||
| _) pre (emp pr%I | |||
| _) pre (em pr%i: | |||
| _) pre (fec pri: | |||
| _) pre (feren prE | |||
| pre (fix pri: | |||
| @@ -360,6 +360,8 @@ _மன்மதக்) க (ுகை g | |||
| _) க் (ரௌண்ட g | |||
| _) க்வ (A kw | |||
| _) க் (வாலியர g | |||
| _) கி (ராம்ப k | |||
| _) க (ஞ்சா gV | |||
| //endsort | |||
| //sort | |||
| @@ -582,6 +584,9 @@ _துப்பாக்கி) க்க (ுண்ட gg | |||
| என்சை) க்லோப (ீடியா klo:p | |||
| க் (ஸ k | |||
| _மெ) க்ஸிக (ோ ksik | |||
| _ராஜ்) க (ிரண k | |||
| இராம) க (ாவிய k | |||
| _மெரு) க (ூட்ட g | |||
| //endsort | |||
| @@ -1350,6 +1355,9 @@ _நடுரோ) ட் (ல t. | |||
| _) த (ோஹா d | |||
| _) தௌலதாப (ாத daUlVd.a:b | |||
| _) த (்ராட்சை d | |||
| _) த (வக்கால dV | |||
| _) த (ருமங் dV | |||
| _) த (ருமப் dV | |||
| //endsort | |||
| //sort | |||
| @@ -1460,6 +1468,12 @@ _காமசூ) த் (ர t | |||
| த) த (்ரூப t | |||
| பா) த (்ரூம t | |||
| _மை) த் (ரேய t | |||
| L03) த்த (ின dd | |||
| L03) த்த (ிசை dd | |||
| L03) த்த (ூச dd | |||
| L03) த்த (ேவன dd | |||
| L03) த்த (ேவர dd | |||
| L03) த்த (ேவத dd | |||
| //endsort | |||
| @@ -2111,6 +2125,10 @@ _சந்திர_) ப (ோஸ b | |||
| _) ப் (ளவுஸ b | |||
| _) ப் (ளோரிடா f | |||
| _) ப் (ளௌஸ b | |||
| _) பு (ரோகித p | |||
| _) ப (ீன்ஸ b | |||
| _) ப (ிஜிலி b | |||
| _) ப (ேமானி b | |||
| //endsort | |||
| //sort | |||
| @@ -2478,6 +2496,8 @@ _சந்தேக) ப்ப (ுத்தி bb | |||
| ஏரோ) ப் (ளேன p | |||
| _) ப் (ளோரன்ஸ f | |||
| ப் (ஸ p | |||
| _அ) ப (ின்_ b | |||
| _குமார) ப (ாளைய p | |||
| //endsort | |||
| // If ப+ appearing in the middle of a word is followed by ட+ | |||
| @@ -368,8 +368,8 @@ l/l_ [l] base | |||
| [l/] fr | |||
| l/l_@ [l/3] base | |||
| [l/] fr | |||
| l/l@ [l#] base | |||
| [”¦] base | |||
| l/l@ [hös] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [K] nso | |||
| @@ -402,16 +402,16 @@ l/L2_oL [l/2] base | |||
| l/L2_uL [l/2] base | |||
| l/l_3 [l/] de | |||
| l/l_4 [ll] sq | |||
| l/la [l#] base | |||
| [”¦] base | |||
| l/la [hös] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [K] nso | |||
| [K] tn | |||
| l/l_a [l/3] base | |||
| [l/] fr | |||
| l/le [l#] base | |||
| [”¦] base | |||
| l/le [hös] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [K] nso | |||
| @@ -422,8 +422,8 @@ l/L_eL_af [&] af | |||
| [&:] af | |||
| l/l_front [L] sq | |||
| l/l_front_ [l/4] sq | |||
| l/li [l#] base | |||
| [”¦] base | |||
| l/li [hös] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [l] zh | |||
| @@ -436,8 +436,8 @@ ll/ll [L] bg | |||
| ll/_ll [L] bg | |||
| l/l_long [l] base | |||
| [l] fr | |||
| l/lo [l#] base | |||
| [”¦] base | |||
| l/lo [hös] base | |||
| [l#] base | |||
| [l/2] fr | |||
| [K] nso | |||
| [K] tn | |||
| @@ -446,8 +446,8 @@ l/l_o [l/3] base | |||
| l^/l_rfx [l.] base | |||
| [l] ru | |||
| [l^] ru | |||
| l/lu [l#] base | |||
| [”¦] base | |||
| l/lu [hös] base | |||
| [l#] base | |||
| [l] fr | |||
| [l/2] fr | |||
| [K] nso | |||
| @@ -1,5 +1,5 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2010 by Jonathan Duddington * | |||
| * Copyright (C) 2005 to 2011 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| @@ -523,15 +523,19 @@ unsigned short ipa1[96] = { | |||
| }; | |||
| static void WritePhMnemonic(char *phon_out, int *ix, PHONEME_TAB *ph, PHONEME_LIST *plist) | |||
| static void WritePhMnemonic(char **buf, PHONEME_TAB *ph, PHONEME_LIST *plist) | |||
| {//======================================================================================= | |||
| int c; | |||
| int mnem; | |||
| int len; | |||
| int first; | |||
| int ix = 0; | |||
| char *phon_out; | |||
| unsigned int ipa_control=0; // first byte of ipa string may control the phoneme name interpretation. 0x20 = ignore this phoneme | |||
| PHONEME_DATA phdata; | |||
| phon_out = *buf; | |||
| if(option_phonemes == 3) | |||
| { | |||
| // has an ipa name been defined for this phoneme ? | |||
| @@ -551,11 +555,14 @@ static void WritePhMnemonic(char *phon_out, int *ix, PHONEME_TAB *ph, PHONEME_LI | |||
| { | |||
| if((ipa_control = phdata.ipa_string[0]) > 0x20) | |||
| { | |||
| strcpy(&phon_out[*ix], phdata.ipa_string); | |||
| *ix += len; | |||
| strcpy(&phon_out[ix], phdata.ipa_string); | |||
| ix += len; | |||
| } | |||
| if(ipa_control >= 0x20) | |||
| { | |||
| *buf += ix; | |||
| return; // 0x20 = ignore phoneme | |||
| } | |||
| } | |||
| } | |||
| @@ -581,14 +588,16 @@ static void WritePhMnemonic(char *phon_out, int *ix, PHONEME_TAB *ph, PHONEME_LI | |||
| if((c >= 0x20) && (c < 128)) | |||
| c = ipa1[c-0x20]; | |||
| *ix += utf8_out(c, &phon_out[*ix]); | |||
| ix += utf8_out(c, &phon_out[ix]); | |||
| } | |||
| else | |||
| { | |||
| phon_out[(*ix)++]= c; | |||
| phon_out[ix++]= c; | |||
| } | |||
| first = 0; | |||
| } | |||
| *buf += ix; | |||
| } // end of WritePhMnemonic | |||
| @@ -600,21 +609,27 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out) | |||
| */ | |||
| int ix; | |||
| int len; | |||
| int max_len; | |||
| int phon_out_ix=0; | |||
| int stress; | |||
| unsigned int c; | |||
| char *p; | |||
| char *buf; | |||
| char phon_buf[30]; | |||
| PHONEME_LIST *plist; | |||
| static const char *stress_chars = "==,,''"; | |||
| if(phon_out != NULL) | |||
| { | |||
| for(ix=1; ix<(n_phoneme_list-2) && (phon_out_ix < (n_phon_out - 6)); ix++) | |||
| for(ix=1; ix<(n_phoneme_list-2); ix++) | |||
| { | |||
| buf = phon_buf; | |||
| plist = &phoneme_list[ix]; | |||
| if(plist->newword) | |||
| phon_out[phon_out_ix++] = ' '; | |||
| *buf++ = ' '; | |||
| if(plist->synthflags & SFLAG_SYLLABLE) | |||
| { | |||
| @@ -636,7 +651,7 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out) | |||
| if(c != 0) | |||
| { | |||
| phon_out_ix += utf8_out(c, &phon_out[phon_out_ix]); | |||
| buf += utf8_out(c, buf); | |||
| } | |||
| } | |||
| } | |||
| @@ -646,31 +661,44 @@ void GetTranslatedPhonemeString(char *phon_out, int n_phon_out) | |||
| // the tone_ph field contains a phoneme table number | |||
| p = phoneme_tab_list[plist->tone_ph].name; | |||
| sprintf(&phon_out[phon_out_ix], "(%s)", p); | |||
| phon_out_ix += (strlen(p) + 2); | |||
| sprintf(buf, "(%s)", p); | |||
| buf += (strlen(p) + 2); | |||
| } | |||
| else | |||
| { | |||
| WritePhMnemonic(phon_out, &phon_out_ix, plist->ph, plist); | |||
| WritePhMnemonic(&buf, plist->ph, plist); | |||
| if(plist->synthflags & SFLAG_LENGTHEN) | |||
| { | |||
| WritePhMnemonic(phon_out, &phon_out_ix, phoneme_tab[phonLENGTHEN], NULL); | |||
| WritePhMnemonic(&buf, phoneme_tab[phonLENGTHEN], NULL); | |||
| } | |||
| if((plist->synthflags & SFLAG_SYLLABLE) && (plist->type != phVOWEL)) | |||
| { | |||
| // syllablic consonant | |||
| WritePhMnemonic(phon_out, &phon_out_ix, phoneme_tab[phonSYLLABIC], NULL); | |||
| WritePhMnemonic(&buf, phoneme_tab[phonSYLLABIC], NULL); | |||
| } | |||
| if(plist->tone_ph > 0) | |||
| { | |||
| WritePhMnemonic(phon_out, &phon_out_ix, phoneme_tab[plist->tone_ph], NULL); | |||
| WritePhMnemonic(&buf, phoneme_tab[plist->tone_ph], NULL); | |||
| } | |||
| } | |||
| } | |||
| if(phon_out_ix >= n_phon_out) | |||
| phon_out_ix = n_phon_out - 1; | |||
| len = buf - phon_buf; | |||
| max_len = (n_phon_out - phon_out_ix - 5); // allow for " ..." and zero byte terminator | |||
| if(len > max_len) | |||
| { | |||
| strcpy(&phon_buf[max_len], " ..."); | |||
| len = max_len + 4; | |||
| } | |||
| phon_buf[len] = 0; | |||
| strcpy(&phon_out[phon_out_ix], phon_buf); | |||
| phon_out_ix += len; | |||
| if(len > max_len) | |||
| { | |||
| break; | |||
| } | |||
| } | |||
| phon_out[phon_out_ix] = 0; | |||
| } | |||
| } // end of GetTranslatedPhonemeString | |||
| @@ -1,5 +1,5 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||
| * Copyright (C) 2005 to 2011 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| @@ -171,7 +171,7 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| // set consonant clusters to all voiced or all unvoiced | |||
| // Regressive | |||
| int type; | |||
| int word_end_devoice = 0; | |||
| int stop_propagation = 0; | |||
| voicing = 0; | |||
| for(j=n_ph_list2-1; j>=0; j--) | |||
| @@ -189,13 +189,10 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| if(regression & 0x2) | |||
| { | |||
| // LANG=Russian, [v] amd [v;] don't cause regression, or [R^] | |||
| // [v] amd [v;] don't cause regression, or [R^] | |||
| if((ph->mnemonic == 'v') || (ph->mnemonic == ((';'<<8)+'v')) || ((ph->mnemonic & 0xff)== 'R')) | |||
| { | |||
| if(word_end_devoice == 1) | |||
| voicing = 0; | |||
| else | |||
| type = phLIQUID; | |||
| stop_propagation = 1; | |||
| } | |||
| } | |||
| @@ -237,8 +234,12 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| voicing = 0; | |||
| } | |||
| } | |||
| if(stop_propagation) | |||
| { | |||
| voicing = 0; | |||
| stop_propagation = 0; | |||
| } | |||
| word_end_devoice = 0; | |||
| if(plist2[j].sourceix) | |||
| { | |||
| if(regression & 0x04) | |||
| @@ -252,7 +253,6 @@ void MakePhonemeList(Translator *tr, int post_pause, int start_sentence) | |||
| if(voicing == 0) | |||
| { | |||
| voicing = 1; | |||
| word_end_devoice = 1; | |||
| } | |||
| } | |||
| } | |||
| @@ -2691,10 +2691,11 @@ if(option_ssml) parag=1; | |||
| } | |||
| *charix_top = ix; | |||
| if(((ix > (n_buf-20)) && !IsAlpha(c1) && !iswdigit(c1)) || (ix >= (n_buf-2))) | |||
| if(((ix > (n_buf-75)) && !IsAlpha(c1) && !iswdigit(c1)) || (ix >= (n_buf-4))) | |||
| { | |||
| // clause too long, getting near end of buffer, so break here | |||
| // try to break at a word boundary (unless we actually reach the end of buffer). | |||
| // (n_buf-4) is to allow for 3 bytes of multibyte character plus terminator. | |||
| buf[ix] = ' '; | |||
| buf[ix+1] = 0; | |||
| UngetC(c2); | |||
| @@ -35,7 +35,7 @@ | |||
| #include "translate.h" | |||
| #include "wave.h" | |||
| const char *version_string = "1.45.04 25.Apr.11"; | |||
| const char *version_string = "1.45.21 27.Apr.11"; | |||
| const int version_phdata = 0x014500; | |||
| int option_device_number = -1; | |||
| @@ -103,7 +103,7 @@ static int embedded_read; | |||
| unsigned int embedded_list[N_EMBEDDED_LIST]; | |||
| // the source text of a single clause (UTF8 bytes) | |||
| #define N_TR_SOURCE 700 | |||
| #define N_TR_SOURCE 800 | |||
| static char source[N_TR_SOURCE+40]; // extra space for embedded command & voice change info at end | |||
| int n_replace_phonemes; | |||
| @@ -1783,7 +1783,7 @@ static int TranslateWord2(Translator *tr, char *word, WORD_TAB *wtab, int pre_pa | |||
| strcpy(ph_buf,word_phonemes); | |||
| flags2[0] = TranslateWord(translator, p2+1, 0, wtab+1); | |||
| if(flags2[0] & FLAG_WAS_UNPRONOUNCABLE) | |||
| if((flags2[0] & FLAG_WAS_UNPRONOUNCABLE) || (word_phonemes[0] == phonSWITCH)) | |||
| ok = 0; | |||
| if(sylimit & 0x100) | |||
| @@ -265,7 +265,7 @@ extern const int param_defaults[N_SPEECH_PARAM]; | |||
| #define LOPT_PREFIXES 3 | |||
| // non-zero, change voiced/unoiced to match last consonant in a cluster | |||
| // bit 1=LANG=ru, don't propagate over [v] | |||
| // bit 1=LANG=cz,bg don't propagate over [v] | |||
| // bit 2=don't propagate acress word boundaries | |||
| // bit 3=LANG=pl, propagate over liquids and nasals | |||
| // bit 4=devoice word-final consonants | |||
| @@ -494,7 +494,7 @@ typedef struct | |||
| int transpose_min; | |||
| char dictionary_name[40]; | |||
| char phon_out[300]; | |||
| char phon_out[400]; | |||
| char phonemes_repeat[20]; | |||
| int phonemes_repeat_count; | |||
| int phoneme_tab_ix; | |||