diff --git a/src/libespeak-ng/ssml.c b/src/libespeak-ng/ssml.c index 18ab3a11..55bed523 100644 --- a/src/libespeak-ng/ssml.c +++ b/src/libespeak-ng/ssml.c @@ -135,10 +135,15 @@ static int attrcopy_utf8(char *buf, const wchar_t *pw, int len) int ix = 0; if (pw != NULL) { + wchar_t quote = pw[-1]; + if ((quote != '"') && (quote != '\'')) quote = 0; + unsigned int c; int prev_c = 0; while ((ix < (len-4)) && ((c = *pw++) != 0)) { - if ((c == '"') && (prev_c != '\\')) + if ((quote == 0) && (isspace(c) || (c == '/'))) + break; + if ((quote != 0) && (c == quote) && (prev_c != '\\')) break; // " indicates end of attribute, unless preceded by backstroke int n = utf8_out(c, &buf[ix]); @@ -299,8 +304,10 @@ static const wchar_t *GetSsmlAttribute(wchar_t *pw, const char *name) while (iswspace(*pw)) pw++; if ((*pw == '"') || (*pw == '\'')) // allow single-quotes ? return pw+1; - else + else if (iswspace(*pw) || (*pw == '/')) // end of attribute return empty; + else + return pw; } } pw++;