Apt package installation querying of dispatcher
[hcoop/domtool2.git] / src / domtool.lex
index 5130ad9..80c06c7 100644 (file)
@@ -14,7 +14,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*)
+ *)
 
 (* Lexer for Domtool configuration files *)
 
@@ -54,7 +54,7 @@ val strStart = ref 0
 %%
 %header (functor DomtoolLexFn(structure Tokens : Domtool_TOKENS));
 %full
-%s COMMENT STRING;
+%s COMMENT STRING DOC;
 
 id = [a-z_][A-Za-z0-9_]*;
 cid = [A-Z][A-Za-z0-9_]*;
@@ -92,6 +92,14 @@ lineComment = #[^\n]*\n;
                          str := #"\n" :: !str; continue());
 <STRING> .            => (str := String.sub (yytext, 0) :: !str; continue());
 
+<INITIAL> "{{"        => (YYBEGIN DOC; strStart := yypos; str := []; continue());
+<DOC> "}}"            => (YYBEGIN INITIAL;
+                         Tokens.DOC (String.implode (List.rev (!str)), !strStart, yypos + 1));
+<DOC> "\n"            => (lineNum := !lineNum + 1;
+                         linePos := yypos :: ! linePos;
+                         str := #"\n" :: !str; continue());
+<DOC> .               => (str := String.sub (yytext, 0) :: !str; continue());
+
 <INITIAL> "("         => (Tokens.LPAREN (yypos, yypos + size yytext));
 <INITIAL> ")"         => (Tokens.RPAREN (yypos, yypos + size yytext));
 
@@ -107,6 +115,7 @@ lineComment = #[^\n]*\n;
 
 <INITIAL> "="         => (Tokens.EQ (yypos, yypos + size yytext));
 <INITIAL> ","         => (Tokens.COMMA (yypos, yypos + size yytext));
+<INITIAL> "\\\\"      => (Tokens.BSLASHBSLASH (yypos, yypos + size yytext));
 <INITIAL> "\\"        => (Tokens.BSLASH (yypos, yypos + size yytext));
 <INITIAL> ":"         => (Tokens.COLON (yypos, yypos + size yytext));
 <INITIAL> ";"         => (Tokens.SEMI (yypos, yypos + size yytext));
@@ -117,6 +126,13 @@ lineComment = #[^\n]*\n;
 <INITIAL> "let"       => (Tokens.LET (yypos, yypos + size yytext));
 <INITIAL> "in"        => (Tokens.IN (yypos, yypos + size yytext));
 <INITIAL> "end"       => (Tokens.END (yypos, yypos + size yytext));
+<INITIAL> "with"      => (Tokens.WITH (yypos, yypos + size yytext));
+<INITIAL> "where"     => (Tokens.WHERE (yypos, yypos + size yytext));
+
+<INITIAL> "extern"    => (Tokens.EXTERN (yypos, yypos + size yytext));
+<INITIAL> "type"      => (Tokens.TYPE (yypos, yypos + size yytext));
+<INITIAL> "val"       => (Tokens.VAL (yypos, yypos + size yytext));
+<INITIAL> "context"   => (Tokens.CONTEXT (yypos, yypos + size yytext));
 
 <INITIAL> "Root"      => (Tokens.ROOT (yypos, yypos + size yytext));