- external prev_text : t -> [`Tree] node -> [`Text ] node = "caml_xml_tree_prev_text"
-
-
- external my_text : t -> [`Tree] node -> [`Text ] node = "caml_xml_tree_my_text"
- external next_text : t -> [`Tree] node -> [`Text ] node = "caml_xml_tree_next_text"
- external doc_ids : t -> [`Tree ] node -> [`Text ] node * [`Text ] node = "caml_xml_tree_doc_ids"
- external text_xml_id : t -> [`Text ] node -> int = "caml_xml_tree_text_xml_id"
- external node_xml_id : t -> [`Tree ] node -> int = "caml_xml_tree_node_xml_id"
- external is_ancestor : t -> [`Tree ] node -> [`Tree ] node -> bool = "caml_xml_tree_is_ancestor"
- external tagged_desc : t -> [`Tree ] node -> Tag.t -> [`Tree ] node = "caml_xml_tree_tagged_desc"
- external tagged_foll : t -> [`Tree ] node -> Tag.t -> [`Tree ] node = "caml_xml_tree_tagged_foll"
- external subtree_tags : t -> [`Tree ] node -> Tag.t -> int = "caml_xml_tree_subtree_tags"
- external tagged_below : t -> [`Tree ] node -> Ptset.int_vector -> Ptset.int_vector -> [`Tree ] node = "caml_xml_tree_tagged_below"
- external tagged_desc_only : t -> [`Tree ] node -> Ptset.int_vector -> [`Tree ] node = "caml_xml_tree_tagged_desc_only"
- external tagged_next : t -> [`Tree ] node -> Ptset.int_vector -> Ptset.int_vector -> [`Tree ] node -> [`Tree ] node = "caml_xml_tree_tagged_next"
- external tagged_foll_only : t -> [`Tree ] node -> Ptset.int_vector -> [`Tree ] node -> [`Tree ] node = "caml_xml_tree_tagged_foll_only"
- external tagged_desc_or_foll_only : t -> [`Tree ] node -> Ptset.int_vector -> [`Tree ] node -> [`Tree ] node = "caml_xml_tree_tagged_foll_only"
-
- let test_jump tree tag =
- let rec loop id ctx =
- if id != nil
- then
- let first = tagged_desc tree id tag
- and next = tagged_desc tree id tag
- in
- loop first id;
- loop next ctx
- in
- loop (root tree) (root tree)
-
-
- let test_xml_tree ppf tags v =
- let pr x = Format.fprintf ppf x in
- let rec aux id =
- if (is_nil id)
- then ()
- else
- begin
- pr "Node %i, (Tag) %i='%s' (GetTagName), NodeXMLId (Preorder)=%i\n%!"
- (int_of_node id)
- (tag_id v id)
- (Tag.to_string (tag_id v id))
- (node_xml_id v id);
- pr "DocID of PrevText,MyText,NextText : (%i = %s,%i = %s,%i = %s) ParentDoc(my_text)=%i PrevDoc(next_text)=%i\n%!"
- (int_of_node (prev_text v id))
- (Text.get_text v (prev_text v id))
- (int_of_node (my_text v id))
- (Text.get_text v (my_text v id))
- (int_of_node (next_text v id))
- (Text.get_text v (next_text v id))
- (int_of_node(parent_doc v (my_text v id)))
- (int_of_node(prev_doc v (next_text v id)));
- let i1,i2 = doc_ids v id in
- pr "Testing DocIds below (%i,%i)*\n%!"
- (int_of_node i1) (int_of_node i2);
- pr "Testing Tagged*\n%!";
- Ptset.iter (fun t ->
- let str = Tag.to_string t in
- if Tag.pcdata <> t
- then begin
- pr "Tag: %s : \n%!" str;
- pr "TaggedDesc = %i%!, " (tagged_desc v id t);
- pr "TaggedFoll = %i\n%!" (tagged_foll v id t);
- pr "SubtreeTags = %i\n%!" (subtree_tags v id t);
- end) tags;
- pr "----------------------------\n";
- aux(first_child v id);
- aux(next_sibling v id);
- end
- in
- aux (root v)
-
-
-
-
-
-
- let print_skel t =
- let rec aux id =
- if (is_nil id)
- then Printf.eprintf "#\n"
- else
- begin
- Printf.eprintf "Node %i has tag '%i=%s' DocOrder=%i, DocID of PrevText,MyText,NextText : (%i = %s,%i = %s,%i = %s) parent_doc(my_text)=%i\n%!"
- (int_of_node id)
- (tag_id t id)
- (Tag.to_string (tag_id t id))
- (node_xml_id t id)
- (int_of_node (prev_text t id))
- (Text.get_text t (prev_text t id))
- (int_of_node (my_text t id))
- (Text.get_text t (my_text t id))
- (int_of_node (next_text t id))
- (Text.get_text t (next_text t id))
- (int_of_node(parent_doc t (my_text t id)));
-
- aux(first_child t id);
- aux(next_sibling t id);
- end
- in
- aux (root t)
-
- let traversal t =
- let rec aux id =
- if not (is_nil id)
- then
- begin
- (* ignore (tag t id);
- ignore (Text.get_text t (prev_text t id));
- if (is_leaf t id)
- then ignore (Text.get_text t (my_text t id));
- if (is_last t id)
- then ignore (Text.get_text t (next_text t id)); *)
- aux (first_child t id);
- aux (next_sibling t id);
- end
- in
- aux (root t)
+external tree_prev_text : tree -> [`Tree] node -> [`Text ] node = "caml_xml_tree_prev_text"
+
+external tree_my_text : tree -> [`Tree] node -> [`Text ] node = "caml_xml_tree_my_text"
+external tree_next_text : tree -> [`Tree] node -> [`Text ] node = "caml_xml_tree_next_text"
+external tree_doc_ids : tree -> [`Tree ] node -> [`Text ] node * [`Text ] node = "caml_xml_tree_doc_ids"
+
+let text_size tree = int_of_node (snd ( tree_doc_ids tree (Obj.magic 0) ))
+
+external tree_text_xml_id : tree -> [`Text ] node -> int = "caml_xml_tree_text_xml_id"
+external tree_node_xml_id : tree -> [`Tree ] node -> int = "caml_xml_tree_node_xml_id"
+external tree_is_ancestor : tree -> [`Tree ] node -> [`Tree ] node -> bool = "caml_xml_tree_is_ancestor"
+external tree_tagged_desc : tree -> [`Tree ] node -> Tag.t -> [`Tree ] node = "caml_xml_tree_tagged_desc"
+external tree_tagged_foll_below : tree -> [`Tree ] node -> Tag.t -> [`Tree ] node -> [`Tree ] node = "caml_xml_tree_tagged_foll_below"
+external tree_subtree_tags : tree -> [`Tree ] node -> Tag.t -> int = "caml_xml_tree_subtree_tags"
+external tree_select_below : tree -> [`Tree ] node -> Ptset.int_vector -> Ptset.int_vector -> [`Tree ] node = "caml_xml_tree_select_below"
+external tree_select_desc_only : tree -> [`Tree ] node -> Ptset.int_vector -> [`Tree ] node = "caml_xml_tree_select_desc_only"
+external tree_select_next : tree -> [`Tree ] node -> Ptset.int_vector -> Ptset.int_vector -> [`Tree ] node -> [`Tree ] node = "caml_xml_tree_select_next"
+external tree_select_foll_only : tree -> [`Tree ] node -> Ptset.int_vector -> [`Tree ] node -> [`Tree ] node = "caml_xml_tree_select_foll_only"
+external tree_select_desc_or_foll_only : tree -> [`Tree ] node -> Ptset.int_vector -> [`Tree ] node -> [`Tree ] node = "caml_xml_tree_select_foll_only"
+
+type descr =
+ | Nil
+ | Node of [`Tree] node
+ | Text of [`Text] node * [`Tree] node
+
+type t = { doc : tree;
+ node : descr;
+ ttable : (Tag.t,(Ptset.t*Ptset.t)) Hashtbl.t;
+ }