1 (******************************************************************************)
2 (* SXSI : XPath evaluator *)
3 (* Kim Nguyen (Kim.Nguyen@nicta.com.au) *)
4 (* Copyright NICTA 2008 *)
5 (* Distributed under the terms of the LGPL (see LICENCE) *)
6 (******************************************************************************)
7 (* maybe utf8 string... *)
13 external null_pool : unit -> pool = "caml_xml_tree_nullt"
14 external null_tag : unit -> t = "caml_xml_tree_nullt"
15 external register_tag : pool -> string -> t = "caml_xml_tree_register_tag"
16 external tag_name : pool -> t -> string = "caml_xml_tree_get_tag_name"
18 let nullt = null_tag ()
19 (* Defined in XMLTree.cpp *)
24 let document_node_close = 4
25 let attribute_close = 5
27 let attribute_data_close= 7
30 let pool = Weak.create 1
32 let init p = Weak.set pool 0 (Some p)
34 let get_pool () = match Weak.get pool 0 with
36 | None -> failwith "Tag.ml: Uninitialized Document"
38 let tag s = match s with
42 | "<@$>" -> attribute_data
43 | _ -> register_tag (get_pool()) s
52 if t == pcdata then "<$>"
53 else if t == attribute_data then "<@$>"
54 else if t == attribute then "<@>"
55 else if t == nullt then "<!NIL!>"
56 else tag_name (get_pool()) t
59 let print ppf t = Format.fprintf ppf "%s" (to_string t)
60 (* Check internal invariants *)
62 if (t != tag (to_string t))
63 then failwith "module Tag: internal check failed"