Freeform better.

This commit is contained in:
Neil 2022-02-15 20:33:07 -08:00
parent 7c2c4785e4
commit cfa2a3e12a
2 changed files with 8 additions and 7 deletions

View File

@ -137,7 +137,8 @@ int main(int argc, char **argv) {
(unsigned long)lex.line, lex_symbols[lex.symbol]); (unsigned long)lex.line, lex_symbols[lex.symbol]);
if(lex.symbol == TEXT || lex.symbol == ARG_KEYWORD if(lex.symbol == TEXT || lex.symbol == ARG_KEYWORD
|| lex.symbol == ARG_DATE || lex.symbol == ARG_DATE
|| lex.symbol == ARG_FREEFORM) { || lex.symbol == ARG_FREEFORM
|| lex.symbol == CAPTION) {
if(lex.s0 + INT_MAX < lex.s1) if(lex.s0 + INT_MAX < lex.s1)
{ errno = EILSEQ; goto catch; } { errno = EILSEQ; goto catch; }
printf(" <<%.*s>>", (int)(lex.s1 - lex.s0), lex.s0); printf(" <<%.*s>>", (int)(lex.s1 - lex.s0), lex.s0);
@ -152,7 +153,6 @@ int main(int argc, char **argv) {
int_array_clear(&days); int_array_clear(&days);
if(chdir("..") == -1) goto catch; if(chdir("..") == -1) goto catch;
break; /* fixme */
} }
int_array_clear(&months); int_array_clear(&months);

View File

@ -20,7 +20,7 @@ re2c:define:YYCTYPE = char;
int lex_looks_like_year(const char *const a, int *const year) { int lex_looks_like_year(const char *const a, int *const year) {
const char *YYCURSOR = a, *YYMARKER = a, *s0; const char *YYCURSOR = a, *YYMARKER = a, *s0;
/*!stags:re2c format = 'const char *@@;\n'; */ /*!stags:re2c format = 'const char *@@;\n'; */
(void)yyt2, (void)yyt3; (void)yyt2;
assert(a && year); assert(a && year);
/*!re2c /*!re2c
@s0 ("-"? [1-9][0-9]* | "0") "\x00" { @s0 ("-"? [1-9][0-9]* | "0") "\x00" {
@ -41,7 +41,7 @@ int lex_looks_like_year(const char *const a, int *const year) {
int lex_looks_like_month(const char *const a) { int lex_looks_like_month(const char *const a) {
const char *YYCURSOR = a, *YYMARKER = a, *s0; const char *YYCURSOR = a, *YYMARKER = a, *s0;
/*!stags:re2c format = 'const char *@@;\n'; */ /*!stags:re2c format = 'const char *@@;\n'; */
(void)yyt1, (void)yyt2, (void)yyt3; (void)yyt1, (void)yyt2;
assert(a); assert(a);
/*!re2c /*!re2c
@s0 [0-1][0-9] "\x00" { @s0 [0-1][0-9] "\x00" {
@ -55,7 +55,7 @@ int lex_looks_like_month(const char *const a) {
int lex_looks_like_day(const char *const a) { int lex_looks_like_day(const char *const a) {
const char *YYCURSOR = a, *YYMARKER = a, *s0; const char *YYCURSOR = a, *YYMARKER = a, *s0;
/*!stags:re2c format = 'const char *@@;\n'; */ /*!stags:re2c format = 'const char *@@;\n'; */
(void)yyt1, (void)yyt2, (void)yyt3; (void)yyt1, (void)yyt2;
assert(a); assert(a);
/*!re2c /*!re2c
@s0 [0-3][0-9] ".txt\x00" { @s0 [0-3][0-9] ".txt\x00" {
@ -219,8 +219,9 @@ scan:
return x->symbol = ARG_NATURAL, 1; } return x->symbol = ARG_NATURAL, 1; }
// fixme! // fixme!
<edict_freeform> ws* @s0 <edict_freeform> ws* @s0
[^ \t\n\r\v\f;[\]\x00][^\t\n\r\v\f;[\]\x00]*[^ \t\n\r\v\f;[\]\x00]* ([^] \ (sentinel | illegal | newline | ws | [;[\]]))
@s1 ws* ";"? / "]"? ([^] \ (sentinel | illegal | newline | [;[\]]))*
@s1 ws* ";"?
{ x->s0 = s0, x->s1 = s1; expect_pop(); { x->s0 = s0, x->s1 = s1; expect_pop();
return x->symbol = ARG_FREEFORM, 1; } return x->symbol = ARG_FREEFORM, 1; }
<edict, edict_end> "]" => text <edict, edict_end> "]" => text