]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/pxp/pxp/rtests/codewriter/compile.ml
Initial revision
[helm.git] / helm / DEVEL / pxp / pxp / rtests / codewriter / compile.ml
diff --git a/helm/DEVEL/pxp/pxp/rtests/codewriter/compile.ml b/helm/DEVEL/pxp/pxp/rtests/codewriter/compile.ml
new file mode 100644 (file)
index 0000000..1bd6e22
--- /dev/null
@@ -0,0 +1,131 @@
+(* $Id$
+ * ----------------------------------------------------------------------
+ *
+ *)
+
+
+open Pxp_document;;
+open Pxp_yacc;;
+open Pxp_types;;
+
+let error_happened = ref false;;
+
+let rec prerr_error e =
+  prerr_endline (string_of_exn e)
+;;
+
+
+class warner =
+  object 
+    method warn w =
+      prerr_endline ("WARNING: " ^ w)
+  end
+;;
+
+
+let compile in_filename out_filename print super_root pis comments =
+  let spec =
+    let e = new element_impl default_extension in
+    make_spec_from_mapping
+      ~super_root_exemplar:      e
+      ~default_pinstr_exemplar:  e
+      ~comment_exemplar:         e
+      ~data_exemplar:            (new data_impl default_extension)
+      ~default_element_exemplar: e
+      ~element_mapping:          (Hashtbl.create 1)
+      ()
+  in
+  let config =
+      { default_config with 
+         encoding = `Enc_utf8;
+         warner = new warner;
+         enable_super_root_node = super_root;
+         enable_pinstr_nodes = pis;
+         enable_comment_nodes = comments;
+      }
+  in
+  try 
+    let tree =
+      parse_document_entity
+        config
+       (from_file in_filename)
+       spec 
+    in
+    
+    let ch = open_out out_filename in
+    Pxp_codewriter.write_document ch tree;
+    output_string ch "(create_document (new Pxp_types.drop_warnings) Pxp_yacc.default_spec) # write (Pxp_types.Out_channel stdout) `Enc_utf8;;\n";
+    close_out ch;
+
+    if print then
+      tree # write (Out_channel stdout) `Enc_utf8;
+  with
+      e ->
+       error_happened := true;
+       prerr_error e
+;;
+
+
+let main() =
+  let in_file = ref "" in
+  let out_file = ref "" in
+  let print_file = ref false in
+  let super_root = ref false in
+  let pis = ref false in
+  let comments = ref false in
+  Arg.parse
+      [ "-in", (Arg.String (fun s -> in_file := s)),
+            " <file>      Set the XML file to read";
+       "-out", (Arg.String (fun s -> out_file := s)),
+            " <file>     Set the Ocaml file to write";
+       "-print", (Arg.Set print_file),
+              "          Print the XML file in standard form";
+       "-super-root", Arg.Set super_root,
+                   "     Generate a super root node";
+       "-pis", Arg.Set pis,
+            "            Generate wrapper nodes for processing instructions";
+       "-comments", Arg.Set comments,
+                 "       Generate nodes for comments";
+      ]
+      (fun x -> raise (Arg.Bad "Unexpected argument"))
+      "
+usage: compile [ options ]
+
+List of options:";
+  if !in_file = "" then begin
+    prerr_endline "No input file specified.";
+    exit 1
+  end;
+  if !out_file = "" then begin
+    prerr_endline "No output file specified.";
+    exit 1
+  end;
+  compile !in_file !out_file !print_file !super_root !pis !comments
+;;
+
+
+main();
+if !error_happened then exit(1);;
+
+(* ======================================================================
+ * History:
+ * 
+ * $Log$
+ * Revision 1.1  2000/11/17 09:57:35  lpadovan
+ * Initial revision
+ *
+ * Revision 1.4  2000/08/17 01:20:15  gerd
+ *     Update: Also tested whether super root nodes, pinstr nodes
+ * and comment nodes work.
+ *     Note: comment nodes are not fully tested yet.
+ *
+ * Revision 1.3  2000/08/16 23:44:19  gerd
+ *     Updates because of changes of the PXP API.
+ *
+ * Revision 1.2  2000/07/16 17:54:15  gerd
+ *     Updated because of PXP interface changes.
+ *
+ * Revision 1.1  2000/07/09 00:33:32  gerd
+ *     Initial revision.
+ *
+ *)