--- /dev/null
+(* $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.
+ *
+ *)