94901d50d71ed7638c1b30c4d3d62a5a1fbf9764
[colloquium.git] / libstorycode / storycode.l
1 /*
2  * storycode.l
3  *
4  * Copyright © 2019 Thomas White <taw@bitwiz.org.uk>
5  *
6  * This file is part of Colloquium.
7  *
8  * Colloquium is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22
23 %{
24   #define YYDEBUG 1
25
26   #include "narrative.h"
27   #include "slide.h"
28   #include "stylesheet.h"
29
30   #include "storycode_parse.h"
31
32   int lineno = 0;
33 %}
34
35 %option prefix="sc"
36 %option noyywrap nounput noinput
37 %s string
38 %s geom
39 %s font
40 %s paraspace
41 %s pad
42 %s align
43 %s col
44 %s sqb
45
46 %%
47
48 STYLES            { return SC_STYLES; }
49 PRESTITLE         { return SC_PRESTITLE; }
50 SLIDETITLE        { return SC_SLIDETITLE; }
51 NARRATIVE         { return SC_NARRATIVE; }
52 SLIDE             { return SC_SLIDE; }
53 BP                { return SC_BP; }
54 GEOMETRY          { BEGIN(geom); return SC_GEOMETRY; }
55 TEXT              { return SC_TEXTFRAME; }
56 IMAGE             { return SC_IMAGEFRAME; }
57 FOOTER            { return SC_FOOTER; }
58 FONT[ ]           { BEGIN(font); return SC_FONT; }
59 PAD               { BEGIN(pad); return SC_PAD; }
60 PARASPACE         { BEGIN(paraspace); return SC_PARASPACE; }
61 ALIGN             { BEGIN(align); return SC_ALIGN; }
62 FGCOL             { BEGIN(col); return SC_FGCOL; }
63 BGCOL             { BEGIN(col); return SC_BGCOL; }
64 <col>VERT         { return SC_VERT; }
65 <col>VERTICAL     { return SC_VERT; }
66 <col>HORIZ        { return SC_HORIZ; }
67 <col>HORIZONTAL   { return SC_HORIZ; }
68 <align,sqb>(?i:left)   { return SC_LEFT; }
69 <align,sqb>(?i:center) { return SC_CENTER; }
70 <align,sqb>(?i:right)  { return SC_RIGHT; }
71 <string,font>.*\n { sclval.str = strdup(yytext);
72                     sclval.str[yyleng-1] = '\0';
73                     BEGIN(0);
74                     lineno++;
75                     return SC_STRING; }
76 "["               { BEGIN(sqb); return SC_SQOPEN; }
77 "]"               { BEGIN(0); return SC_SQCLOSE; }
78 <INITIAL>:[ ]     { BEGIN(string); }
79 :\n               { sclval.str = strdup(""); lineno++; return SC_STRING; }
80 [{]               { return '{'; }
81 [}]               { return '}'; }
82 [. ]              {}
83 \n                { BEGIN(0); lineno++; }
84 [0-9\.]+          { sclval.val = atof(yytext); return SC_VALUE; }
85 [uf]              { sclval.character = yytext[0]; return SC_UNIT; }
86 [+]               { return '+'; }
87 [x]               { return 'x'; }
88 [,]               { return ','; }
89 <col>#[[:xdigit:]]{6}    { sclval.str = strdup(yytext); return SC_HEXCOL; }
90
91
92 %%