X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fxpath%2Fast.ml;h=5b322a4af56a28c2d01c596756820aaa7ee4f128;hp=d70227bed900fd4421bf2892570e489200109685;hb=fe2ba1820282783ae8c10fbbbd2b65d3dc4c67f2;hpb=f49a93deba13602e16a3923695281e9a20215ac8 diff --git a/src/xpath/ast.ml b/src/xpath/ast.ml index d70227b..5b322a4 100644 --- a/src/xpath/ast.ml +++ b/src/xpath/ast.ml @@ -13,12 +13,6 @@ (* *) (***********************************************************************) -(* - Time-stamp: -*) - -open Utils - type path = single_path list and single_path = Absolute of step list | Relative of step list and step = axis * test * expr list @@ -30,7 +24,7 @@ and axis = Self | Attribute | Child | PrecedingSibling | Preceding | Following -and test = QNameSet.t +and test = QNameSet.t * Tree.NodeKind.t and binop = Eq | Neq | Lt | Gt | Lte | Gte | Or | And | Add | Sub | Mult | Div | Mod and unop = Neg @@ -52,7 +46,6 @@ let star = QNameSet.complement ( QNameSet.from_list [ QName.text; QName.document; - QName.cdata_section; QName.comment]) @@ -128,18 +121,25 @@ and print_axis fmt a = pp fmt "%s" begin | Following -> "following" end -and print_test fmt ts = - try - pp fmt "%s" (List.assoc ts - [ text,"text()"; - node,"node()"; - star, "*" ] ) - with - Not_found -> pp fmt "%s" - (if QNameSet.is_finite ts - then QName.to_string (QNameSet.choose ts) - else "" - ) +and print_test fmt (ts,kind) = + let open Tree.NodeKind in + match kind with + Text -> pp fmt "%s" "text()" + | Element | Attribute -> + pp fmt "%s" begin + if QNameSet.is_finite ts then + QName.to_string (QNameSet.choose ts) + else "*" + end + | Comment -> pp fmt "%s" "comment()" + | ProcessingInstruction -> + pp fmt "processing-instruction(%s)" + begin + if ts == star then "" + else "\"" ^ (QName.to_string (QNameSet.choose ts)) ^ "\"" + end + | Node -> pp fmt "%s" "node()" + | Document -> pp fmt "%s" "" and print_expr fmt = function | Number (`Int(i)) -> pp fmt "%i" i @@ -171,7 +171,8 @@ and print_expr fmt = function let invert_axis = function -| Self | Attribute as a -> a +| Self -> Self +| Attribute -> Parent (* Improve *) | Child -> Parent | Descendant (b) -> Ancestor (b) | FollowingSibling -> PrecedingSibling @@ -181,4 +182,3 @@ let invert_axis = function | Preceding -> Following | Following -> Preceding ;; -