]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/pxp/pxp/lexers/pxp_lex_dtd_string.src
Initial revision
[helm.git] / helm / DEVEL / pxp / pxp / lexers / pxp_lex_dtd_string.src
diff --git a/helm/DEVEL/pxp/pxp/lexers/pxp_lex_dtd_string.src b/helm/DEVEL/pxp/pxp/lexers/pxp_lex_dtd_string.src
new file mode 100644 (file)
index 0000000..1fb11e6
--- /dev/null
@@ -0,0 +1,70 @@
+(* $Id$
+ * ----------------------------------------------------------------------
+ *
+ *)
+
+
+{
+  open Pxp_types
+  open Pxp_lexer_types
+
+#insert open_pxp_lex_aux_*.src
+#insert pxp_lex_aux.src
+
+}
+
+#insert pxp_lex_defs_*.def
+(* The following scanner is used to determine the replacement text of
+ * internal entities:
+ *)
+
+rule scan_dtd_string = parse
+    '%' name ';'
+      { let s = Lexing.lexeme lexbuf in
+       PERef (String.sub s 1 (String.length s - 2)) }
+  | '%'
+      { raise(WF_error("The character '%' must be written as '%'")) }
+  | '&' name ';'
+      { let s = Lexing.lexeme lexbuf in
+       ERef (String.sub s 1 (String.length s - 2)) }
+  | "&#" ascii_digit+ ";"
+      { let s = Lexing.lexeme lexbuf in
+       CRef (int_of_string (String.sub s 2 (String.length s - 3))) }
+  | "&#x" ascii_hexdigit+ ";"
+      { let s = Lexing.lexeme lexbuf in
+       CRef (int_of_string ("0x" ^ String.sub s 3 (String.length s - 4))) }
+  | '&'
+      { raise(WF_error("The character '&' must be written as '&'")) }
+  | '\013' '\010'
+      { CRef(-1) }
+  | '\013'
+      { CRef(-2) }
+  | '\010'
+      { CRef(-3) }
+  | '\009'
+      { CharData "\009" }
+  | printable_character_except_amp_percent+
+      { CharData (Lexing.lexeme lexbuf) }
+  | eof
+      { Eof }
+  | _
+      { raise Netconversion.Malformed_code }
+
+(* ======================================================================
+ * History:
+ * 
+ * $Log$
+ * Revision 1.1  2000/11/17 09:57:32  lpadovan
+ * Initial revision
+ *
+ * Revision 1.3  2000/08/14 22:18:34  gerd
+ *     Bad_character_stream -> Netconversion.Malformed_code
+ *
+ * Revision 1.2  2000/05/29 23:53:12  gerd
+ *     Updated because Markup_* modules have been renamed to Pxp_*.
+ *
+ * Revision 1.1  2000/05/20 20:33:25  gerd
+ *     Initial revision.
+ *
+ * 
+ *)