3 external dereference_object : 'a jvm_pointer -> unit = "dereference_object"
4 external get_null : unit -> 'a jvm_pointer = "getNull"
10 val init_document : node -> int -> t
14 type node = [`Node] jvm_pointer
17 external dereference_node : node -> unit = "dereference_object"
19 external node_get_preorder : node -> int = "node_getPreorder"
22 (*external node_set_preorder : node -> int -> unit = "node_setPreorder"*)
28 tag_cache : QName.t array
33 let dummy = get_null ()
37 let load_xml_file _ = assert false
38 let load_xml_string _ = assert false
39 let print_xml _ _ _ = assert false
44 external node_get_node_type : node -> int = "node_getNodeType"
46 let node_kind_of_int i =
52 | 7 -> ProcessingInstruction
55 | _ -> failwith ("Unimplemented document kind, please report " ^ string_of_int i)
59 external node_get_node_name : node -> string = "node_getNodeName"
62 assert (node != null);
63 node_kind_of_int (node_get_node_type node)
65 external node_get_first_child : node -> node = "node_getFirstChild"
67 let first_child _ node =
68 if node == nil then nil else
69 node_get_first_child node
71 external node_get_next_sibling : node -> node = "node_getNextSibling"
74 let next_sibling tree node =
76 if node == nil then nil else
77 node_get_next_sibling node
79 let parent _ _ = assert false
81 let data _ _ = assert false
84 if node == nil then QName.nil else
85 let pre = node_get_preorder node in
86 let label = tree.tag_cache.(pre) in
87 if label != QName.nil then label else
88 let label = node_get_node_name node in
91 match kind tree node with
92 | Document -> QName.document
94 | Attribute -> QName.attribute (QName.of_string label)
95 | ProcessingInstruction ->
96 QName.processing_instruction (QName.of_string label)
97 | _ -> QName.of_string label
100 tree.tag_cache.(pre) <- rlabel; rlabel
102 let preorder tree node =
103 if node == nil then -1 else
104 node_get_preorder node
107 dereference_object (t.root)
109 let init_document node i =
112 tag_cache = Array.create i QName.nil
115 Gc.finalise (finalize) s;
119 let print_node _ _ = assert false
120 let by_preorder _ _ = assert false
124 module Java_node_list : Node_list.S with type node = Java_tree.node
127 type node = Java_tree.node
128 type node_list = [`NodeList] jvm_pointer
130 external length : node_list -> int = "nodelist_getLength"
131 external create : unit -> node_list = "nodelist_new"
132 external add : node_list -> node -> node_list = "nodelist_add"
133 external item : node_list -> int -> node = "nodelist_item"
139 for i = 0 to length l - 1 do
145 module Runtime = Run.Make(Java_tree)(Java_node_list)
147 let _ = Callback.register "init_document" Java_tree.init_document
149 let xpath_compile p =
152 (Xpath.Parser.parse (Ulexing.from_utf8_string p))
154 Ata.print Format.err_formatter auto;
155 Format.pp_print_flush Format.err_formatter ();
158 let _ = Callback.register "xpath_compile" xpath_compile
160 let auto_evaluate auto tree list =
161 Runtime.eval auto tree list
163 let _ = Callback.register "auto_evaluate" auto_evaluate