X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser.re;h=d5d10787c1a1a42d8e71b66e65b0f14f531d019a;hp=2cdb1e84bf0dbcc59b5b0f7eabe86376dbca024b;hb=370510d04a5e22140e1e7f90f5d1f0002e6dbee6;hpb=4926283fa0589f3f9c25616304672018dba77429 diff --git a/src/parser.re b/src/parser.re index 2cdb1e8..d5d1078 100644 --- a/src/parser.re +++ b/src/parser.re @@ -455,19 +455,40 @@ struct psi_plist *psi_parser_scan(struct psi_parser *P, struct psi_parser_input character: ; /*!re2c - "'" { if (escaped) goto character; cur -= 1; NEWTOKEN(PSI_T_QUOTED_CHAR); cur += 1; token->flags = char_width; goto start; } EOL { NEWLINE(); goto character; } "\\" { escaped = !escaped; } - * { goto character; } + "'" { + if (escaped) { + escaped = false; + goto character; + } + cur -= 1; + NEWTOKEN(PSI_T_QUOTED_CHAR); + cur += 1; + token->flags = char_width; + goto start; + } + * { escaped = false; goto character; } */ + string: ; /*!re2c - "\"" { if (escaped) goto string; cur -= 1; NEWTOKEN(PSI_T_QUOTED_STRING); cur += 1; token->flags = char_width; goto start; } EOL { NEWLINE(); goto string; } "\\" { escaped = !escaped; goto string; } - * { goto string; } + "\"" { + if (escaped) { + escaped = false; + goto string; + } + cur -= 1; + NEWTOKEN(PSI_T_QUOTED_STRING); + cur += 1; + token->flags = char_width; + goto start; + } + * { escaped = false; goto string; } */