aboutsummaryrefslogtreecommitdiff
path: root/libstorycode/storycode.l
diff options
context:
space:
mode:
Diffstat (limited to 'libstorycode/storycode.l')
-rw-r--r--libstorycode/storycode.l39
1 files changed, 30 insertions, 9 deletions
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; }
<align,sqb>(?i:left) { return SC_LEFT; }
<align,sqb>(?i:center) { return SC_CENTER; }
<align,sqb>(?i:right) { return SC_RIGHT; }
-<string,font>.*\n { sclval.str = strdup(yytext);
+
+<font>.*\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; }
-<INITIAL>:[ ] { BEGIN(string); }
-:\n { sclval.str = strdup(""); lineno++; return SC_STRING; }
+ return SC_FONTNAME; }
+
+<INITIAL>IMAGE { BEGIN(image); return SC_IMAGEFRAME; }
+<image>:[ ] { BEGIN(image_filename); return SC_TEXT_START; }
+<image_filename>[^\n]* { sclval.str = strdup(yytext);
+ lineno++;
+ return SC_FILENAME; }
+
+<INITIAL>:[ ] { BEGIN(runtext); return SC_TEXT_START; }
+<runtext>[\\] { BEGIN(stringesc); }
+<stringesc>[.] { sclval.str = strdup(yytext); BEGIN(runtext); return SC_RUN_TEXT; }
+<runtext>[\*] { return '*'; }
+<runtext>[^\*\n]* { sclval.str = strdup(yytext);
+ sclval.str[yyleng] = '\0';
+ lineno++;
+ return SC_RUN_TEXT; }
+<runtext>\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 '+'; }