Various improvements made while working on relwiki
[bpt/mlt.git] / src / mlt.lex
index c64ea0c..62c8cc0 100644 (file)
@@ -68,14 +68,17 @@ id = ([A-Za-z_][A-Za-z0-9_]*)|([:]+);
 intconst = [0-9]+;
 realconst = [0-9]+\.[0-9]*;
 ws = [\ \t\012];
-bo = [^<]+;
+bo = [^<\n]+;
 
 %%
 
-\n                    => (if isLinCom () then (linComEnd (); YYBEGIN INITIAL) else ();
+<CODE> \n             => (if isLinCom () then (linComEnd (); YYBEGIN INITIAL) else ();
                           lineNum := !lineNum + 1;
                           linePos := yypos :: ! linePos;
                           continue ());
+<INITIAL> \n          => (lineNum := !lineNum + 1;
+                          linePos := yypos :: ! linePos;
+                          Tokens.HTML (yytext, yypos, yypos + size yytext));
 
 <INITIAL> {ws}+       => (Tokens.HTML (" ", yypos, yypos + size yytext); lex ());
 
@@ -144,9 +147,12 @@ bo = [^<]+;
 <CODE> "@"         => (Tokens.AT (yypos, yypos + size yytext));
 
 <CODE> "if"        => (Tokens.IF (yypos, yypos + 2));
+<CODE> "iff"       => (Tokens.IFF (yypos, yypos + 3));
 <CODE> "then"      => (Tokens.THEN (yypos, yypos + 4));
 <CODE> "else"      => (Tokens.ELSE (yypos, yypos + 4));
+<CODE> "elseif"    => (Tokens.ELSEIF (yypos, yypos + 6));
 <CODE> "foreach"   => (Tokens.FOREACH (yypos, yypos + 7));
+<CODE> "for"       => (Tokens.FOR (yypos, yypos + 3));
 <CODE> "in"        => (Tokens.IN (yypos, yypos + 2));
 <CODE> "case"      => (Tokens.CASE (yypos, yypos + 4));
 <CODE> "as"        => (Tokens.AS (yypos, yypos + 2));
@@ -166,8 +172,11 @@ bo = [^<]+;
 <CODE> "do"        => (Tokens.DO (yypos, yypos + 2));
 <CODE> "end"       => (Tokens.END (yypos, yypos + 3));
 <CODE> "raise"     => (Tokens.RAISE (yypos, yypos + 5));
+<CODE> "let"       => (Tokens.LET (yypos, yypos + 3));
+<CODE> "in"        => (Tokens.IN (yypos, yypos + 2));
 
 <CODE> "::"        => (Tokens.CONS (yypos, yypos + 2));
+<CODE> "o"         => (Tokens.O (yypos, yypos + 1));
 <CODE> {id}        => (Tokens.IDENT (yytext, yypos, yypos + size yytext));
 <CODE> {intconst}  => (case Int.fromString yytext of
                             SOME x => Tokens.INT (x, yypos, yypos + size yytext)