]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/www/lambdadelta/bin/xhtbl/textLexer.mll
- xhtbl: now double quotes can appear in string literals
[helm.git] / helm / www / lambdadelta / bin / xhtbl / textLexer.mll
index 7557e7bb80f5ee317f34a18620fabc67b19bb697..0f61349c370398241db06b174427f847d347a51a 100644 (file)
@@ -1,21 +1,20 @@
 {
    module S  = String
+   
    module O  = Options
    module TP = TextParser
    
-   let trim s = S.sub s 1 (S.length s - 2)
-   
    let out s = if !O.debug_lexer then prerr_endline s
 }
 
 let SPC = ['\r' '\n' '\t' ' ']+
-let QT  = '"'
-let STR = QT [^'"']* QT
+let QT  = "\""
 let NUM = ['0'-'9']+
 
 rule token = parse
    | SPC      { token lexbuf                    }
-   | STR as s { out s; TP.TEXT (trim s)         }
+   | QT       { let s = str lexbuf in 
+                out s; TP.TEXT s                }
    | NUM as s { out s; TP.NUM (int_of_string s) }
    | "{"      { out "{"; TP.OC                  }
    | "}"      { out "}"; TP.CC                  }
@@ -28,8 +27,13 @@ rule token = parse
    | "class"  { out "class"; TP.CSS             }
    | "(*"     { block lexbuf; token lexbuf      }
    | eof      { TP.EOF                          }
+and str = parse
+   | QT       { ""                              }
+   | "\\\""   { "\"" ^ str lexbuf               }
+   | _ as c   { S.make 1 c ^ str lexbuf         }
 and block = parse
    | "*)"     { ()                              }
    | "(*"     { block lexbuf; block lexbuf      }
-   | STR      { block lexbuf                    }
+   | QT       { let _ = str lexbuf in
+                block lexbuf                    }
    | _        { block lexbuf                    }