From be7c67b6fd286aae246e3c738576cd3b2c40e4b6 Mon Sep 17 00:00:00 2001 From: Dianne Skoll Date: Sun, 8 Dec 2024 11:54:49 -0500 Subject: [PATCH] Add ParseQuotedString function for eventually implementing TRANSLATE directive. --- src/main.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/src/main.c b/src/main.c index a35ad825..8c8d3989 100644 --- a/src/main.c +++ b/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 */