Add ParseQuotedString function for eventually implementing TRANSLATE directive.

This commit is contained in:
Dianne Skoll
2024-12-08 11:54:49 -05:00
parent a933c8bc69
commit be7c67b6fd

View File

@@ -596,6 +596,75 @@ int ParseNonSpaceChar(ParsePtr p, int *err, int peek)
return ch;
}
/***************************************************************/
/* */
/* ParseQuotedString */
/* */
/* Parse a double-quote-delimited string. */
/* */
/***************************************************************/
int ParseQuotedString(ParsePtr p, DynamicBuffer *dbuf)
{
int c, err;
DBufFree(dbuf);
c = ParseNonSpaceChar(p, &err, 0);
if (err) return err;
if (c != '"') {
return E_MISS_QUOTE;
}
c = ParseChar(p, &err, 0);
if (err) {
DBufFree(dbuf);
return err;
}
while (c != '"') {
if (c == '\\') {
c = ParseChar(p, &err, 0);
if (err) {
DBufFree(dbuf);
return err;
}
switch(c) {
case 'a':
err = DBufPutc(dbuf, '\a');
break;
case 'b':
err = DBufPutc(dbuf, '\b');
break;
case 'f':
err = DBufPutc(dbuf, '\f');
break;
case 'n':
err = DBufPutc(dbuf, '\n');
break;
case 'r':
err = DBufPutc(dbuf, '\r');
break;
case 't':
err = DBufPutc(dbuf, '\t');
break;
case 'v':
err = DBufPutc(dbuf, '\v');
break;
default:
err = DBufPutc(dbuf, c);
}
} else {
err = DBufPutc(dbuf, c);
}
if (err) {
DBufFree(dbuf);
return err;
}
c = ParseChar(p, &err, 0);
if (err) {
DBufFree(dbuf);
return err;
}
}
return OK;
}
/***************************************************************/
/* */
/* ParseToken */