(* $Id: pxp_codewriter.ml 662 2004-05-25 20:57:28Z gerd $
* ----------------------------------------------------------------------
* PXP: The polymorphic XML parser for Objective Caml.
* Copyright by Gerd Stolpmann. See LICENSE for details.
*)
open Pxp_document
open Pxp_yacc
open Pxp_dtd
open Pxp_core_types
open Pxp_marshal
(*
let write_local_dtd out (dtd : dtd) =
output_string out "let dtd = Pxp_yacc.parse_dtd_entity\n";
output_string out " config\n";
output_string out " (Pxp_yacc.from_string\n";
output_string out " ~fixenc: `Enc_utf8\n";
output_string out " \"";
let b = Buffer.create 100 in
dtd # write (Out_buffer b) `Enc_utf8 false;
output_string out (String.escaped (Buffer.contents b));
output_string out "\"";
output_string out " ) in\n";
let root = dtd # root in
( match root with
None -> ()
| Some r ->
output_string out "dtd # set_root \"";
output_string out (String.escaped r);
output_string out "\"\n";
);
output_string out "dtd\n"
;;
*)
let rec write_local_subtree out n =
(* Outputs the term generating the subtree *)
output_string out "let cmds = ref [\n";
subtree_to_cmd_sequence
(fun cmd ->
let s = Marshal.to_string cmd [] in
output_string out "\"";
output_string out (String.escaped s);
output_string out "\";\n";
)
n;
output_string out "] in\n";
output_string out "Pxp_marshal.subtree_from_cmd_sequence\n";
output_string out " ?enable_namespace_processing\n";
output_string out " (fun () -> match !cmds with\n";
output_string out " cmd :: cmds' -> cmds := cmds'; Marshal.from_string cmd 0\n";
output_string out " | [] -> assert false\n";
output_string out " )\n";
output_string out " dtd\n";
output_string out " spec\n"
;;
let write_local_document out (d : 'ext document) =
output_string out "let cmds = ref [\n";
document_to_cmd_sequence
(fun cmd ->
let s = Marshal.to_string cmd [] in
output_string out "\"";
output_string out (String.escaped s);
output_string out "\";\n";
)
d;
output_string out "] in\n";
output_string out "Pxp_marshal.document_from_cmd_sequence\n";
output_string out " (fun () -> match !cmds with\n";
output_string out " cmd :: cmds' -> cmds := cmds'; Marshal.from_string cmd 0\n";
output_string out " | [] -> assert false\n";
output_string out " )\n";
output_string out " config\n";
output_string out " spec\n";
;;
let write_document out d =
output_string out "let create_document config spec =\n";
write_local_document out d;
output_string out ";;\n"
;;
(*
let write_dtd out dtd =
output_string out "let create_dtd config =\n";
write_local_dtd out dtd;
output_string out ";;\n"
;;
*)
let write_subtree out t =
output_string out "let create_subtree ?enable_namespace_processing dtd spec =\n";
write_local_subtree out t;
output_string out ";;\n"
;;