From c6abe4626c40d4925d6233cf0ca1c30cd49a22cd Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 14 Sep 2019 23:45:38 +0200 Subject: Handle *bold* in parser, rather than as a separate stage --- libstorycode/storycode.l | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) (limited to 'libstorycode/storycode.l') diff --git a/libstorycode/storycode.l b/libstorycode/storycode.l index b1bd81a..b4dbb03 100644 --- a/libstorycode/storycode.l +++ b/libstorycode/storycode.l @@ -30,18 +30,23 @@ #include "storycode_parse.h" int lineno = 0; + int sqb_caller = 0; %} %option prefix="sc" %option noyywrap nounput noinput -%s string %s geom %s font +%s filename %s paraspace %s pad %s align %s col %s sqb +%x stringesc +%x runtext +%s image +%s image_filename %% @@ -54,7 +59,6 @@ ENDOFPRESENTATION { return SC_EOP; } BP { return SC_BP; } GEOMETRY { BEGIN(geom); return SC_GEOMETRY; } TEXT { return SC_TEXTFRAME; } -IMAGE { return SC_IMAGEFRAME; } FOOTER { return SC_FOOTER; } FONT[ ] { BEGIN(font); return SC_FONT; } PAD { BEGIN(pad); return SC_PAD; } @@ -69,19 +73,36 @@ BGCOL { BEGIN(col); return SC_BGCOL; } (?i:left) { return SC_LEFT; } (?i:center) { return SC_CENTER; } (?i:right) { return SC_RIGHT; } -.*\n { sclval.str = strdup(yytext); + +.*\n { sclval.str = strdup(yytext); sclval.str[yyleng-1] = '\0'; BEGIN(0); lineno++; - return SC_STRING; } -"[" { BEGIN(sqb); return SC_SQOPEN; } -"]" { BEGIN(0); return SC_SQCLOSE; } -:[ ] { BEGIN(string); } -:\n { sclval.str = strdup(""); lineno++; return SC_STRING; } + return SC_FONTNAME; } + +IMAGE { BEGIN(image); return SC_IMAGEFRAME; } +:[ ] { BEGIN(image_filename); return SC_TEXT_START; } +[^\n]* { sclval.str = strdup(yytext); + lineno++; + return SC_FILENAME; } + +:[ ] { BEGIN(runtext); return SC_TEXT_START; } +[\\] { BEGIN(stringesc); } +[.] { sclval.str = strdup(yytext); BEGIN(runtext); return SC_RUN_TEXT; } +[\*] { return '*'; } +[^\*\n]* { sclval.str = strdup(yytext); + sclval.str[yyleng] = '\0'; + lineno++; + return SC_RUN_TEXT; } +\n { BEGIN(0); lineno++; } + +\n { BEGIN(0); lineno++; } + +"[" { sqb_caller = YY_START; BEGIN(sqb); return SC_SQOPEN; } +"]" { BEGIN(sqb_caller); return SC_SQCLOSE; } [{] { return '{'; } [}] { return '}'; } [. ] {} -\n { BEGIN(0); lineno++; } [0-9\.]+ { sclval.val = atof(yytext); return SC_VALUE; } [uf] { sclval.character = yytext[0]; return SC_UNIT; } [+] { return '+'; } -- cgit v1.2.3