Allow the @id syntax in XPath expressions.
[tatoo.git] / src / xpath / xpath_internal_parser.mly
index a05beb2..3651d2c 100644 (file)
@@ -15,7 +15,7 @@
 (***********************************************************************)
 
 (*
-  Time-stamp: <Last modified on 2013-02-14 14:18:34 CET by Kim Nguyen>
+  Time-stamp: <Last modified on 2013-03-10 14:31:48 CET by Kim Nguyen>
 *)
 
   open Ast
@@ -23,6 +23,7 @@
 %}
 
 %token <string> TAG
+%token <string> ATTNAME
 %token <string> STRING
 %token <int>  INT
 %token <float> FLOAT
@@ -68,7 +69,7 @@ simple_path:
 
 absolute_path:
   SLASH relative_path { $2 }
-| SLASHSLASH relative_path { (Descendant true, node, []) :: $2 }
+| SLASHSLASH relative_path { $2 @ [(Descendant true, node, [])] }
 ;
 
 relative_path:
@@ -84,7 +85,16 @@ step:
 ;
 
 axis_test:
-  AXIS COLONCOLON test  { $1, $3 }
+  AXIS COLONCOLON test  { let a, t = $1, $3 in
+                          if a == Attribute && Utils.QNameSet.is_finite t then
+                            (a, Utils.QNameSet.fold
+                              (fun t a ->
+                                Utils.QNameSet.add
+                                  (Utils.QName.add_attribute_prefix t) a)
+                              t Utils.QNameSet.empty)
+                          else
+                            (a, t)
+                        }
 | test                  { Child, $1 }
 | AXIS            {
   let _ = Format.flush_str_formatter () in
@@ -92,6 +102,8 @@ axis_test:
   let a = Format.flush_str_formatter () in
   Child, Utils.QNameSet.singleton (Utils.QName.of_string a)
 }
+| ATTNAME             {  (Attribute,
+                          Utils.QNameSet.singleton (Utils.QName.of_string $1)) }
 ;
 
 test:
@@ -142,4 +154,3 @@ arg_list1:
   expr                     { [ $1 ] }
 | arg_list1 COMMA expr     { $3 :: $1 }
 ;
-