Browse Source

FindReplacementChars: Pass in the source buffer (next characters) instead of next_in.

master
Reece H. Dunn 6 years ago
parent
commit
98e9122dfc
1 changed files with 7 additions and 6 deletions
  1. 7
    6
      src/libespeak-ng/translate.c

+ 7
- 6
src/libespeak-ng/translate.c View File

return 1; return 1;
} }


static const char *FindReplacementChars(Translator *tr, const char **pfrom, unsigned int c, unsigned int nextc, int *ignore_next_n)
static const char *FindReplacementChars(Translator *tr, const char **pfrom, unsigned int c, const char *next, int *ignore_next_n)
{ {
const char *from = *pfrom; const char *from = *pfrom;
while (*(unsigned int *)from != 0) { while (*(unsigned int *)from != 0) {
unsigned int fc = 0; // from character unsigned int fc = 0; // from character
unsigned int nc = c; // next character unsigned int nc = c; // next character
const char *match_next = next;


*pfrom = from; *pfrom = from;


if (*from == 0) return from + 1; if (*from == 0) return from + 1;


from += utf8_in((int *)&fc, from); from += utf8_in((int *)&fc, from);
nc = nextc;
match_next += utf8_in((int *)&nc, match_next);


nc = towlower2(nextc, tr);
nc = towlower2(nc, tr);
if (*from == 0 && nc == fc) { if (*from == 0 && nc == fc) {
*ignore_next_n = 1; *ignore_next_n = 1;
return from + 1; return from + 1;
} }


// handle .replace rule in xx_rules file // handle .replace rule in xx_rules file
static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in, int *insert, int *wordflags)
static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in, const char *next, int *insert, int *wordflags)
{ {
unsigned int new_c, c2 = ' ', c_lower; unsigned int new_c, c2 = ' ', c_lower;
int upper_case = 0; int upper_case = 0;
upper_case = 1; upper_case = 1;
} }


const char *to = FindReplacementChars(tr, &from, c_lower, next_in, &ignore_next_n);
const char *to = FindReplacementChars(tr, &from, c_lower, next, &ignore_next_n);
if (to == NULL) if (to == NULL)
return c; // no substitution return c; // no substitution


break; break;
} }
// handle .replace rule in xx_rules file // handle .replace rule in xx_rules file
return SubstituteChar(tr, c, next_in, insert, wordflags);
return SubstituteChar(tr, c, next_in, ptr, insert, wordflags);
} }


static const char *UCase_ga[] = { "bp", "bhf", "dt", "gc", "hA", "mb", "nd", "ng", "ts", "tA", "nA", NULL }; static const char *UCase_ga[] = { "bp", "bhf", "dt", "gc", "hA", "mb", "nd", "ng", "ts", "tA", "nA", NULL };

Loading…
Cancel
Save