Browse Source

Support unqouted attributes in SSML parser

master
Yury Popov 2 years ago
parent
commit
ac3de913f2
No account linked to committer's email address
1 changed files with 9 additions and 2 deletions
  1. 9
    2
      src/libespeak-ng/ssml.c

+ 9
- 2
src/libespeak-ng/ssml.c View File

@@ -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++;

Loading…
Cancel
Save