type table = int array
type t = {
table : table;
- kind : Bytes.t;
+ summary : Bytes.t;
tags : QName.t array;
data : string array;
}
let tag t n =
Array.unsafe_get t.tags (idx n)
+let summary t n =
+ Obj.magic (String.unsafe_get t.summary (idx n))
let kind t n : Tree.NodeKind.t =
- Obj.magic (String.unsafe_get t.kind (idx n))
+ Tree.NodeSummary.kind (summary t n)
let preorder t n =
(idx n) - 2
print_xml (next_sibling tree node) out tree node
-let mk_node table_a data_a kind_a tags_a i kind tag data pre_fc pre_ns pre_p =
+let mk_node table_a data_a kind_a tags_a i summary tag data pre_fc pre_ns pre_p =
try
data_a.(i+2) <- data;
tags_a.(i+2) <- tag;
- Bytes.unsafe_set kind_a (i+2) (Obj.magic kind);
+ Bytes.unsafe_set kind_a (i+2) (Char.chr (summary land 0xff));
let n = (i+2) * 3 in
let fc = (pre_fc + 2) * 3 in
let ns = (pre_ns + 2) * 3 in
let table = Array.make len ~-1 (* int16_unsigned c_layout len *) in
let data = Array.make (s + 2) "" in
let tags = Array.make (s+2) dummy_tag in
- let kind = Bytes.make (s+2) '\000' in
- mk_node table data kind tags ~-2 Tree.NodeKind.Element dummy_tag "" dummy dummy dummy;
- mk_node table data kind tags ~-1 Tree.NodeKind.Element QName.nil "" nil nil nil;
+ let summaries = Bytes.make (s+2) '\000' in
+ mk_node table data summaries tags ~-2 Tree.NodeSummary.dummy dummy_tag "" dummy dummy dummy;
+ mk_node table data summaries tags ~-1 Tree.NodeSummary.dummy QName.nil "" nil nil nil;
for i = 0 to s - 1 do
let node = Naive_tree.by_preorder t i in
- mk_node table data kind tags i (Naive_tree.kind t node)
+ mk_node table data summaries tags i
+ (Naive_tree.summary t node)
(Naive_tree.tag t node)
(Naive_tree.data t node)
(Naive_tree.preorder t (Naive_tree.first_child t node))
(Naive_tree.preorder t (Naive_tree.next_sibling t node))
(Naive_tree.preorder t (Naive_tree.parent t node))
done;
- { data; table; tags ; kind }
+ { data; table; tags ; summary = summaries }
let load_xml_string s = of_naive (Naive_tree.load_xml_string s)
let load_xml_file f = of_naive (Naive_tree.load_xml_file f)