X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Ftree.ml;h=434d19598bfe2430e7b06343168f4d770ee7d113;hb=07a2770a48f51b2e09b3be2d1608516b2377618e;hp=1cfc77a6b3d9f10f88810f86bd59891380da60b7;hpb=9d7d15ded27768ac0e60360f500b7b4fe898fb43;p=tatoo.git diff --git a/src/tree.ml b/src/tree.ml index 1cfc77a..434d195 100644 --- a/src/tree.ml +++ b/src/tree.ml @@ -261,8 +261,55 @@ let rec print_xml out tree_ node = let root t = t.root let first_child _ n = n.first_child +let first_child_x _ n = + if n.first_child.tag == QName.attribute_map + then n.first_child.next_sibling + else n.first_child let next_sibling _ n = n.next_sibling let parent _ n = n.parent +(* Begin Lucca Hirschi *) +let is_leaf t n = (not (n.tag == QName.attribute_map)) && + (first_child t n == nil) && (next_sibling t n == nil) +let is_attribute t n = n.tag == QName.attribute_map +(* End *) let tag _ n = n.tag let data _ n = n.data let preorder _ n = n.preorder + +(*Lucca Hirschi: *) +let rec print_xml_preorder out tree_ node = + if node != nil then + let () = + if node.tag == QName.text then + begin + output_escape_string out node.data; + output_string out ("'"^(string_of_int(preorder tree_ node))); + end + else + let tag = QName.to_string node.tag in + output_char out '<'; + output_string out tag; + output_string out (" '"^(string_of_int(preorder tree_ node))); + let fchild = + if node.first_child.tag == QName.attribute_map then + let () = + let ffn = node.first_child.first_child in + print_attributes out tree_ ffn; + in + node.first_child.next_sibling + else + node.first_child + in + if fchild == nil then output_string out "/>" + else begin + output_char out '>'; + print_xml_preorder out tree_ fchild; + output_string out "' + end + in + print_xml_preorder out tree_ node.next_sibling + +let debug_node fmt t n = + Parser.debug_node fmt n