|
|
|
|
|
|
|
|
{ |
|
|
{ |
|
|
unsigned int flags[2]; |
|
|
unsigned int flags[2]; |
|
|
char phonemes[55]; |
|
|
char phonemes[55]; |
|
|
char phonemes2[55]; |
|
|
|
|
|
char *string1 = (char *)string; |
|
|
char *string1 = (char *)string; |
|
|
|
|
|
|
|
|
flags[0] = flags[1] = 0; |
|
|
flags[0] = flags[1] = 0; |
|
|
if (LookupDictList(tr, &string1, phonemes, flags, 0, NULL)) { |
|
|
if (LookupDictList(tr, &string1, phonemes, flags, 0, NULL)) { |
|
|
|
|
|
char phonemes2[55]; |
|
|
SetWordStress(tr, phonemes, flags, -1, 0); |
|
|
SetWordStress(tr, phonemes, flags, -1, 0); |
|
|
DecodePhonemes(phonemes, phonemes2); |
|
|
DecodePhonemes(phonemes, phonemes2); |
|
|
sprintf(text_out, "[\002%s]]", phonemes2); |
|
|
sprintf(text_out, "[\002%s]]", phonemes2); |
|
|
|
|
|
|
|
|
unsigned int flags[2]; |
|
|
unsigned int flags[2]; |
|
|
char single_letter[24]; |
|
|
char single_letter[24]; |
|
|
char phonemes[60]; |
|
|
char phonemes[60]; |
|
|
char phonemes2[60]; |
|
|
|
|
|
const char *lang_name = NULL; |
|
|
const char *lang_name = NULL; |
|
|
char *string; |
|
|
char *string; |
|
|
static char buf[60]; |
|
|
static char buf[60]; |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (phonemes[0]) { |
|
|
if (phonemes[0]) { |
|
|
|
|
|
char phonemes2[60]; |
|
|
if (lang_name) { |
|
|
if (lang_name) { |
|
|
SetWordStress(translator2, phonemes, flags, -1, 0); |
|
|
SetWordStress(translator2, phonemes, flags, -1, 0); |
|
|
DecodePhonemes(phonemes, phonemes2); |
|
|
DecodePhonemes(phonemes, phonemes2); |
|
|
|
|
|
|
|
|
// c1: the punctuation character |
|
|
// c1: the punctuation character |
|
|
// c2: the following character |
|
|
// c2: the following character |
|
|
|
|
|
|
|
|
int punct_count; |
|
|
|
|
|
|
|
|
|
|
|
const char *punctname = NULL; |
|
|
const char *punctname = NULL; |
|
|
int soundicon; |
|
|
int soundicon; |
|
|
int attributes; |
|
|
int attributes; |
|
|
|
|
|
|
|
|
int len; |
|
|
int len; |
|
|
int bufix1; |
|
|
int bufix1; |
|
|
char buf[200]; |
|
|
char buf[200]; |
|
|
char buf2[80]; |
|
|
|
|
|
char ph_buf[30]; |
|
|
char ph_buf[30]; |
|
|
|
|
|
|
|
|
c2 = *c2_ptr; |
|
|
c2 = *c2_ptr; |
|
|
|
|
|
|
|
|
if (punctname == NULL) |
|
|
if (punctname == NULL) |
|
|
return -1; |
|
|
return -1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ((*bufix == 0) || (end_clause == 0) || (tr->langopts.param[LOPT_ANNOUNCE_PUNCT] & 2)) { |
|
|
if ((*bufix == 0) || (end_clause == 0) || (tr->langopts.param[LOPT_ANNOUNCE_PUNCT] & 2)) { |
|
|
punct_count = 1; |
|
|
|
|
|
|
|
|
int punct_count = 1; |
|
|
while (!Eof() && (c2 == c1) && (c1 != '<')) { // don't eat extra '<', it can miss XML tags |
|
|
while (!Eof() && (c2 == c1) && (c1 != '<')) { // don't eat extra '<', it can miss XML tags |
|
|
punct_count++; |
|
|
punct_count++; |
|
|
c2 = GetC(); |
|
|
c2 = GetC(); |
|
|
|
|
|
|
|
|
if (embedded_value[EMBED_S] < 300) |
|
|
if (embedded_value[EMBED_S] < 300) |
|
|
sprintf(buf, "\001+10S"); // Speak punctuation name faster, unless we are already speaking fast. It would upset Sonic SpeedUp |
|
|
sprintf(buf, "\001+10S"); // Speak punctuation name faster, unless we are already speaking fast. It would upset Sonic SpeedUp |
|
|
|
|
|
|
|
|
|
|
|
char buf2[80]; |
|
|
while (punct_count-- > 0) { |
|
|
while (punct_count-- > 0) { |
|
|
sprintf(buf2, " %s", punctname); |
|
|
sprintf(buf2, " %s", punctname); |
|
|
strcat(buf, buf2); |
|
|
strcat(buf, buf2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int ix; |
|
|
int ix; |
|
|
int len; |
|
|
int len; |
|
|
void *vp; |
|
|
|
|
|
|
|
|
|
|
|
if (wide) { |
|
|
if (wide) { |
|
|
len = (wcslen((const wchar_t *)name)+1)*sizeof(wchar_t); |
|
|
len = (wcslen((const wchar_t *)name)+1)*sizeof(wchar_t); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (namedata_ix+len >= n_namedata) { |
|
|
if (namedata_ix+len >= n_namedata) { |
|
|
// allocate more space for marker names |
|
|
// allocate more space for marker names |
|
|
|
|
|
void *vp; |
|
|
if ((vp = realloc(namedata, namedata_ix+len + 1000)) == NULL) |
|
|
if ((vp = realloc(namedata, namedata_ix+len + 1000)) == NULL) |
|
|
return -1; // failed to allocate, original data is unchanged but ignore this new name |
|
|
return -1; // failed to allocate, original data is unchanged but ignore this new name |
|
|
// !!! Bug?? If the allocated data shifts position, then pointers given to user application will be invalid |
|
|
// !!! Bug?? If the allocated data shifts position, then pointers given to user application will be invalid |
|
|
|
|
|
|
|
|
int c1 = ' '; // current character |
|
|
int c1 = ' '; // current character |
|
|
int c2; // next character |
|
|
int c2; // next character |
|
|
int cprev = ' '; // previous character |
|
|
int cprev = ' '; // previous character |
|
|
int cprev2 = ' '; |
|
|
|
|
|
int c_next; |
|
|
int c_next; |
|
|
int parag; |
|
|
int parag; |
|
|
int ix = 0; |
|
|
int ix = 0; |
|
|
|
|
|
|
|
|
return CLAUSE_NONE; |
|
|
return CLAUSE_NONE; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
cprev2 = cprev; |
|
|
|
|
|
|
|
|
int cprev2 = cprev; |
|
|
cprev = c1; |
|
|
cprev = c1; |
|
|
c1 = c2; |
|
|
c1 = c2; |
|
|
|
|
|
|