mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-16 06:18:47 +02:00
Add ParseQuotedString function for eventually implementing TRANSLATE directive.
This commit is contained in:
69
src/main.c
69
src/main.c
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user