/*
- * Experimental Map Renderer -- MapCSS Lexer
+ * Hic Est Leo -- MapCSS Lexer
*
* (c) 2014--2015 Martin Mares <mj@ucw.cz>
*/
static struct fastbuf fbbuf;
static int lino;
-void css_error(char *err, ...)
+void css_error(const char *err, ...)
{
va_list args;
va_start(args, err);
{
struct mempool *mp = css_this->pool;
char *p;
- int c, next, len, tok;
+ int c, next, len, tok, nesting;
if (tok = css_this->pushed_token)
{
css_lval.s = p;
return RGB;
+ case '@':
+ if (next != '{')
+ return '@';
+ // Lua block
+ p = mp_start(mp, 1);
+ // FIXME p = mp_append_string(mp, p, "function () ");
+ nesting = 1;
+ bgetc(fb);
+ for (;;)
+ {
+ c = bgetc(fb);
+ if (c < 0)
+ css_error("Unterminated Lua block");
+ if (c == '{')
+ nesting++;
+ else if (c == '}')
+ {
+ nesting--;
+ if (!nesting)
+ break;
+ }
+ p = mp_append_char(mp, p, c);
+ }
+ css_lval.s = mp_end_string(mp, p);
+ return LUA;
+
// One-character operators
case '{':
case '}':