oga 1.2.3-java → 1.3.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/doc/css_selectors.md +1 -1
  3. data/lib/liboga.jar +0 -0
  4. data/lib/oga.rb +6 -1
  5. data/lib/oga/blacklist.rb +0 -10
  6. data/lib/oga/css/lexer.rb +530 -255
  7. data/lib/oga/css/parser.rb +232 -230
  8. data/lib/oga/entity_decoder.rb +0 -4
  9. data/lib/oga/html/entities.rb +0 -4
  10. data/lib/oga/html/parser.rb +0 -4
  11. data/lib/oga/html/sax_parser.rb +0 -4
  12. data/lib/oga/lru.rb +0 -26
  13. data/lib/oga/oga.rb +0 -8
  14. data/lib/oga/ruby/generator.rb +225 -0
  15. data/lib/oga/ruby/node.rb +189 -0
  16. data/lib/oga/version.rb +1 -1
  17. data/lib/oga/whitelist.rb +0 -6
  18. data/lib/oga/xml/attribute.rb +13 -20
  19. data/lib/oga/xml/cdata.rb +0 -4
  20. data/lib/oga/xml/character_node.rb +0 -8
  21. data/lib/oga/xml/comment.rb +0 -4
  22. data/lib/oga/xml/default_namespace.rb +0 -2
  23. data/lib/oga/xml/doctype.rb +0 -8
  24. data/lib/oga/xml/document.rb +10 -14
  25. data/lib/oga/xml/element.rb +1 -52
  26. data/lib/oga/xml/entities.rb +0 -26
  27. data/lib/oga/xml/expanded_name.rb +12 -0
  28. data/lib/oga/xml/html_void_elements.rb +0 -2
  29. data/lib/oga/xml/lexer.rb +0 -86
  30. data/lib/oga/xml/namespace.rb +0 -10
  31. data/lib/oga/xml/node.rb +18 -34
  32. data/lib/oga/xml/node_set.rb +0 -50
  33. data/lib/oga/xml/parser.rb +13 -50
  34. data/lib/oga/xml/processing_instruction.rb +0 -8
  35. data/lib/oga/xml/pull_parser.rb +0 -18
  36. data/lib/oga/xml/querying.rb +58 -19
  37. data/lib/oga/xml/sax_parser.rb +0 -18
  38. data/lib/oga/xml/text.rb +0 -12
  39. data/lib/oga/xml/traversal.rb +0 -4
  40. data/lib/oga/xml/xml_declaration.rb +0 -8
  41. data/lib/oga/xpath/compiler.rb +1568 -0
  42. data/lib/oga/xpath/conversion.rb +102 -0
  43. data/lib/oga/xpath/lexer.rb +1844 -1238
  44. data/lib/oga/xpath/parser.rb +182 -153
  45. metadata +7 -3
  46. data/lib/oga/xpath/evaluator.rb +0 -1800
@@ -5,7 +5,6 @@ require 'll/setup'
5
5
 
6
6
  module Oga
7
7
  module XPath
8
- ##
9
8
  # AST parser for XPath expressions. The AST is built using `AST::Node`
10
9
  # instances.
11
10
  #
@@ -49,74 +48,76 @@ class Parser < LL::Driver
49
48
  ].freeze
50
49
 
51
50
  CONFIG.rules = [
52
- [3, 0, 8, 34], # 0
53
- [3, 1, 4, 35, 6, 0, 0, 3], # 1
51
+ [3, 0, 8, 32], # 0
52
+ [3, 1, 4, 33, 6, 0, 0, 3], # 1
54
53
  [3, 2, 0, 3, 1, 16], # 2
55
- [3, 3, 4, 36, 6, 0, 0, 5], # 3
54
+ [3, 3, 4, 34, 6, 0, 0, 5], # 3
56
55
  [3, 4, 0, 5, 1, 15], # 4
57
- [3, 5, 4, 37, 6, 0, 0, 7], # 5
56
+ [3, 5, 4, 35, 6, 0, 0, 7], # 5
58
57
  [3, 6, 0, 7, 1, 20], # 6
59
58
  [3, 7, 0, 7, 1, 21], # 7
60
- [3, 8, 4, 38, 6, 0, 0, 9], # 8
59
+ [3, 8, 4, 36, 6, 0, 0, 9], # 8
61
60
  [3, 9, 0, 9, 1, 22], # 9
62
61
  [3, 10, 0, 9, 1, 23], # 10
63
62
  [3, 11, 0, 9, 1, 24], # 11
64
63
  [3, 12, 0, 9, 1, 25], # 12
65
- [3, 13, 4, 39, 6, 0, 0, 11], # 13
64
+ [3, 13, 4, 37, 6, 0, 0, 11], # 13
66
65
  [3, 14, 0, 11, 1, 17], # 14
67
66
  [3, 15, 0, 11, 1, 26], # 15
68
- [3, 16, 8, 40, 0, 13], # 16
67
+ [3, 16, 8, 38, 0, 13], # 16
69
68
  [3, 17, 0, 11, 1, 18], # 17
70
69
  [3, 18, 0, 11, 1, 19], # 18
71
70
  [3, 19, 0, 11, 1, 27], # 19
72
- [3, 20, 4, 41, 6, 0, 0, 15], # 20
71
+ [3, 20, 4, 39, 6, 0, 0, 15], # 20
73
72
  [3, 21, 0, 15, 1, 14], # 21
74
- [3, 22, 0, 16], # 22
75
- [3, 23, 0, 19], # 23
76
- [3, 24, 0, 31], # 24
77
- [3, 25, 0, 32], # 25
78
- [3, 26, 0, 33], # 26
73
+ [3, 22, 0, 17], # 22
74
+ [3, 23, 0, 16], # 23
75
+ [3, 24, 0, 29], # 24
76
+ [3, 25, 0, 30], # 25
77
+ [3, 26, 0, 31], # 26
79
78
  [3, 27, 1, 11, 0, 1, 1, 10], # 27
80
- [3, 28, 0, 17], # 28
81
- [3, 29, 4, 42, 6, 0, 0, 20], # 29
82
- [3, 30, 0, 20, 1, 12], # 30
83
- [3, 31, 8, 43, 1, 12], # 31
84
- [3, 32, 0, 21], # 32
85
- [3, 33, 0, 29], # 33
86
- [3, 34, 0, 22, 1, 6], # 34
87
- [3, 35, 0, 24], # 35
88
- [3, 36, 1, 11, 0, 27, 1, 10], # 36
89
- [3, 37, 8, 44, 1, 6, 1, 2], # 37
90
- [3, 38, 8, 45], # 38
91
- [3, 39, 1, 9, 0, 1, 1, 8], # 39
92
- [3, 40, 1, 7], # 40
93
- [3, 41, 8, 46, 1, 6], # 41
94
- [3, 42, 1, 6, 1, 2], # 42
95
- [3, 43, 4, 47, 6, 0, 0, 1], # 43
96
- [3, 44, 2, 0], # 44
97
- [3, 45, 0, 1, 1, 3], # 45
98
- [3, 46, 8, 48, 0, 30, 1, 1], # 46
99
- [3, 47, 0, 25], # 47
100
- [3, 48, 0, 24], # 48
101
- [3, 49, 1, 13], # 49
102
- [3, 50, 1, 5], # 50
103
- [3, 51, 1, 4], # 51
104
- [3, 52, 1, 28], # 52
105
- [3, 53, 0, 1], # 53
106
- [3, 54, 0, 2], # 54
107
- [3, 55, 0, 4], # 55
108
- [3, 56, 0, 6], # 56
109
- [3, 57, 0, 8], # 57
110
- [3, 58, 0, 10], # 58
111
- [3, 59, 0, 12], # 59
112
- [3, 60, 0, 14], # 60
113
- [3, 61, 0, 18], # 61
114
- [3, 62, 0, 17], # 62
115
- [3, 63, 0, 23], # 63
116
- [3, 64, 0, 23], # 64
117
- [3, 65, 0, 26], # 65
118
- [3, 66, 0, 28], # 66
119
- [3, 67, 0, 23], # 67
79
+ [3, 28, 8, 40, 1, 12], # 28
80
+ [3, 29, 0, 18], # 29
81
+ [3, 30, 0, 27], # 30
82
+ [3, 31, 0, 19, 1, 6], # 31
83
+ [3, 32, 8, 42, 8, 41, 0, 22], # 32
84
+ [3, 33, 1, 11, 0, 25, 1, 10], # 33
85
+ [3, 34, 8, 44, 8, 43, 1, 6, 1, 2], # 34
86
+ [3, 35, 8, 46, 8, 45], # 35
87
+ [3, 36, 0, 17, 1, 12], # 36
88
+ [3, 37, 1, 9, 0, 1, 1, 8], # 37
89
+ [3, 38, 1, 7], # 38
90
+ [3, 39, 8, 47, 1, 6], # 39
91
+ [3, 40, 1, 6, 1, 2], # 40
92
+ [3, 41, 4, 48, 6, 0, 0, 1], # 41
93
+ [3, 42, 2, 0], # 42
94
+ [3, 43, 0, 1, 1, 3], # 43
95
+ [3, 44, 8, 50, 8, 49, 0, 28, 1, 1], # 44
96
+ [3, 45, 0, 23], # 45
97
+ [3, 46, 0, 22], # 46
98
+ [3, 47, 1, 13], # 47
99
+ [3, 48, 1, 5], # 48
100
+ [3, 49, 1, 4], # 49
101
+ [3, 50, 1, 28], # 50
102
+ [3, 51, 0, 1], # 51
103
+ [3, 52, 0, 2], # 52
104
+ [3, 53, 0, 4], # 53
105
+ [3, 54, 0, 6], # 54
106
+ [3, 55, 0, 8], # 55
107
+ [3, 56, 0, 10], # 56
108
+ [3, 57, 0, 12], # 57
109
+ [3, 58, 0, 14], # 58
110
+ [3, 59, 0, 17], # 59
111
+ [3, 60, 0, 21], # 60
112
+ [3, 61, 0, 20], # 61
113
+ [3, 62, 0, 21], # 62
114
+ [3, 63, 0, 20], # 63
115
+ [3, 64, 0, 21], # 64
116
+ [3, 65, 0, 20], # 65
117
+ [3, 66, 0, 24], # 66
118
+ [3, 67, 0, 26], # 67
119
+ [3, 68, 0, 21], # 68
120
+ [3, 69, 0, 20], # 69
120
121
  ].freeze
121
122
 
122
123
  CONFIG.table = [
@@ -136,39 +137,41 @@ class Parser < LL::Driver
136
137
  [-1, 20, -1, -1, 20, 20, 20, 20, -1, -1, 20, -1, 20, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20], # 13
137
138
  [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 14
138
139
  [-1, 22, -1, -1, 25, 25, 22, 22, -1, -1, 27, -1, 23, 24, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26], # 15
139
- [-1, 28, -1, -1, -1, -1, 28, 28, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 16
140
- [-1, 29, -1, -1, -1, -1, 29, 29, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 17
141
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 18
142
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 19
143
- [-1, 33, -1, -1, -1, -1, 32, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 20
144
- [-1, -1, -1, -1, -1, -1, 34, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 21
145
- [38, 38, 37, 38, 38, 38, 38, 38, 38, 38, 36, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38], # 22
146
- [-1, -1, -1, -1, -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 23
147
- [-1, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 24
148
- [-1, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 25
149
- [-1, -1, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 26
150
- [44, 43, 44, 44, 43, 43, 43, 43, 44, 44, 43, 44, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 43], # 27
151
- [-1, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 28
152
- [-1, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 29
153
- [-1, -1, -1, -1, -1, -1, 47, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 30
154
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 31
155
- [-1, -1, -1, -1, 51, 50, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 32
156
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 52], # 33
157
- [-1, 53, -1, -1, 53, 53, 53, 53, -1, -1, 53, -1, 53, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 53], # 34
158
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 35
159
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 36
160
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, 56, -1, -1, -1, -1, -1, -1, -1], # 37
161
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 57, 57, 57, 57, -1, -1, -1], # 38
162
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1], # 39
163
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, 59, -1, -1, -1, -1, -1, -1, -1, 59, -1], # 40
164
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 41
140
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 28, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 16
141
+ [-1, 30, -1, -1, -1, -1, 29, 29, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 17
142
+ [-1, -1, -1, -1, -1, -1, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 18
143
+ [35, 35, 34, 35, 35, 35, 35, 35, 35, 35, 33, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35], # 19
144
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 20
145
+ [-1, -1, -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 21
146
+ [-1, -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 22
147
+ [-1, -1, -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 23
148
+ [-1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 24
149
+ [42, 41, 42, 42, 41, 41, 41, 41, 42, 42, 41, 42, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 41], # 25
150
+ [-1, -1, -1, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 26
151
+ [-1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 27
152
+ [-1, -1, -1, -1, -1, -1, 45, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 28
153
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 29
154
+ [-1, -1, -1, -1, 49, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 30
155
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 50], # 31
156
+ [-1, 51, -1, -1, 51, 51, 51, 51, -1, -1, 51, -1, 51, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 51], # 32
157
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 33
158
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 34
159
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 54, 54, -1, -1, -1, -1, -1, -1, -1], # 35
160
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, 55, 55, 55, -1, -1, -1], # 36
161
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, 56, -1, -1], # 37
162
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 57, 57, -1, -1, -1, -1, -1, -1, -1, 57, -1], # 38
163
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 39
164
+ [-1, 59, -1, -1, -1, -1, 59, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 40
165
+ [-1, -1, -1, -1, -1, -1, -1, -1, 60, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 41
165
166
  [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 42
166
- [-1, 62, -1, -1, -1, -1, 62, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 43
167
- [-1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 44
167
+ [-1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 43
168
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 44
168
169
  [-1, -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 45
169
- [-1, -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 46
170
- [-1, -1, -1, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 47
171
- [-1, -1, -1, -1, -1, -1, -1, -1, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 48
170
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 46
171
+ [-1, -1, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 47
172
+ [-1, -1, -1, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 48
173
+ [-1, -1, -1, -1, -1, -1, -1, -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 49
174
+ [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 50
172
175
  ].freeze
173
176
 
174
177
  CONFIG.actions = [
@@ -200,25 +203,25 @@ class Parser < LL::Driver
200
203
  [:_rule_25, 1], # 25
201
204
  [:_rule_26, 1], # 26
202
205
  [:_rule_27, 3], # 27
203
- [:_rule_28, 1], # 28
204
- [:_rule_29, 2], # 29
205
- [:_rule_30, 2], # 30
206
+ [:_rule_28, 2], # 28
207
+ [:_rule_29, 1], # 29
208
+ [:_rule_30, 1], # 30
206
209
  [:_rule_31, 2], # 31
207
- [:_rule_32, 1], # 32
208
- [:_rule_33, 1], # 33
209
- [:_rule_34, 2], # 34
210
- [:_rule_35, 1], # 35
211
- [:_rule_36, 3], # 36
210
+ [:_rule_32, 3], # 32
211
+ [:_rule_33, 3], # 33
212
+ [:_rule_34, 4], # 34
213
+ [:_rule_35, 2], # 35
214
+ [:_rule_36, 2], # 36
212
215
  [:_rule_37, 3], # 37
213
216
  [:_rule_38, 1], # 38
214
- [:_rule_39, 3], # 39
215
- [:_rule_40, 1], # 40
217
+ [:_rule_39, 2], # 39
218
+ [:_rule_40, 2], # 40
216
219
  [:_rule_41, 2], # 41
217
- [:_rule_42, 2], # 42
220
+ [:_rule_42, 0], # 42
218
221
  [:_rule_43, 2], # 43
219
- [:_rule_44, 0], # 44
220
- [:_rule_45, 2], # 45
221
- [:_rule_46, 3], # 46
222
+ [:_rule_44, 4], # 44
223
+ [:_rule_45, 1], # 45
224
+ [:_rule_46, 1], # 46
222
225
  [:_rule_47, 1], # 47
223
226
  [:_rule_48, 1], # 48
224
227
  [:_rule_49, 1], # 49
@@ -240,44 +243,36 @@ class Parser < LL::Driver
240
243
  [:_rule_65, 1], # 65
241
244
  [:_rule_66, 1], # 66
242
245
  [:_rule_67, 1], # 67
246
+ [:_rule_68, 1], # 68
247
+ [:_rule_69, 1], # 69
243
248
  ].freeze
244
249
 
245
- ##
246
250
  # @return [Oga::LRU]
247
- #
248
251
  CACHE = LRU.new
249
252
 
250
- ##
251
253
  # @param [String] data
252
254
  # @return [AST::Node]
253
- #
254
255
  def self.parse_with_cache(data)
255
- return CACHE.get_or_set(data) { new(data).parse }
256
+ CACHE.get_or_set(data) { new(data).parse }
256
257
  end
257
258
 
258
- ##
259
259
  # @param [String] data The input to parse.
260
- #
261
260
  def initialize(data)
262
261
  @lexer = Lexer.new(data)
263
262
  end
264
263
 
265
- ##
266
264
  # Creates a new XPath node.
267
265
  #
268
266
  # @param [Symbol] type
269
267
  # @param [Array] children
270
268
  # @return [AST::Node]
271
- #
272
269
  def s(type, *children)
273
- return AST::Node.new(type, children)
270
+ AST::Node.new(type, children)
274
271
  end
275
272
 
276
- ##
277
273
  # Yields the next token from the lexer.
278
274
  #
279
275
  # @yieldparam [Array]
280
- #
281
276
  def each_token
282
277
  @lexer.advance do |type, value, line|
283
278
  @line = line if line
@@ -288,9 +283,7 @@ class Parser < LL::Driver
288
283
  yield [-1, -1]
289
284
  end
290
285
 
291
- ##
292
286
  # @param [Array] val
293
- #
294
287
  def combine_operators(val)
295
288
  ret = val[0]
296
289
 
@@ -298,12 +291,10 @@ class Parser < LL::Driver
298
291
  ret = s(expr[0], ret, expr[1])
299
292
  end
300
293
 
301
- return ret
294
+ ret
302
295
  end
303
296
 
304
- ##
305
297
  # @param [Array] val
306
- #
307
298
  def combine_optional_operator(val)
308
299
  ret = val[0]
309
300
 
@@ -427,34 +418,29 @@ class Parser < LL::Driver
427
418
  end
428
419
 
429
420
  def _rule_28(val)
430
- val[0].length > 1 ? s(:path, *val[0]) : val[0][0]
421
+
422
+ if val[1]
423
+ s(:absolute_path, val[1])
424
+ else
425
+ s(:absolute_path)
426
+ end
427
+
431
428
  end
432
429
 
433
430
  def _rule_29(val)
434
- [val[0], *val[1]]
435
- end
436
-
437
- def _rule_30(val)
438
- val[1]
439
- end
440
-
441
- def _rule_31(val)
442
- s(:absolute_path, *val[1])
443
- end
444
-
445
- def _rule_32(val)
446
431
  val[0]
447
432
  end
448
433
 
449
- def _rule_33(val)
434
+ def _rule_30(val)
450
435
  val[0]
451
436
  end
452
437
 
453
- def _rule_34(val)
438
+ def _rule_31(val)
454
439
 
455
440
  type = val[1][0]
456
441
  args = val[1][1]
457
442
  pred = val[1][2]
443
+ more = val[1][3]
458
444
 
459
445
  if type.equal?(:test)
460
446
  # Whenever a bare test is used (e.g. just "A") this actually means
@@ -472,92 +458,127 @@ class Parser < LL::Driver
472
458
  node = s(:predicate, node, pred)
473
459
  end
474
460
 
461
+ if more
462
+ node = node.updated(nil, node.children + [more])
463
+ end
464
+
475
465
  node
476
466
 
477
467
  end
478
468
 
479
- def _rule_35(val)
480
- s(:axis, 'child', val[0])
469
+ def _rule_32(val)
470
+
471
+ pred = val[1]
472
+ more = val[2]
473
+ node = s(:axis, 'child', val[0])
474
+
475
+ if pred
476
+ node = s(:predicate, node, pred)
477
+ end
478
+
479
+ if more
480
+ node = node.updated(nil, node.children + [more])
481
+ end
482
+
483
+ node
484
+
481
485
  end
482
486
 
483
- def _rule_36(val)
487
+ def _rule_33(val)
484
488
  [:call, val[1]]
485
489
  end
486
490
 
487
- def _rule_37(val)
488
- [:test, val[1], val[2]]
491
+ def _rule_34(val)
492
+ [:test, val[1], val[2], val[3]]
489
493
  end
490
494
 
491
- def _rule_38(val)
492
- [:test, nil, val[0]]
495
+ def _rule_35(val)
496
+ [:test, nil, val[0], val[1]]
493
497
  end
494
498
 
495
- def _rule_39(val)
499
+ def _rule_36(val)
496
500
  val[1]
497
501
  end
498
502
 
499
- def _rule_40(val)
503
+ def _rule_37(val)
504
+ val[1]
505
+ end
506
+
507
+ def _rule_38(val)
500
508
  s(:type_test, val[0])
501
509
  end
502
510
 
503
- def _rule_41(val)
511
+ def _rule_39(val)
504
512
 
505
513
  val[1] ? s(:test, val[0], val[1]) : s(:test, nil, val[0])
506
514
 
507
515
  end
508
516
 
509
- def _rule_42(val)
517
+ def _rule_40(val)
510
518
  val[1]
511
519
  end
512
520
 
513
- def _rule_43(val)
521
+ def _rule_41(val)
514
522
  [val[0], *val[1]]
515
523
  end
516
524
 
517
- def _rule_44(val)
525
+ def _rule_42(val)
518
526
  val
519
527
  end
520
528
 
521
- def _rule_45(val)
529
+ def _rule_43(val)
522
530
  val[1]
523
531
  end
524
532
 
525
- def _rule_46(val)
533
+ def _rule_44(val)
526
534
 
527
- ret = s(:axis, val[0], val[1])
535
+ ret = s(:axis, val[0], val[1])
536
+ more = val[3]
528
537
 
529
538
  if val[2]
530
539
  ret = s(:predicate, ret, val[2])
531
540
  end
532
541
 
542
+ if more
543
+ ret = ret.updated(nil, ret.children + [more])
544
+ end
545
+
533
546
  ret
534
547
 
535
548
  end
536
549
 
537
- def _rule_47(val)
550
+ def _rule_45(val)
538
551
  val[0]
539
552
  end
540
553
 
541
- def _rule_48(val)
554
+ def _rule_46(val)
542
555
  val[0]
543
556
  end
544
557
 
545
- def _rule_49(val)
558
+ def _rule_47(val)
546
559
  s(:string, val[0])
547
560
  end
548
561
 
549
- def _rule_50(val)
562
+ def _rule_48(val)
550
563
  s(:int, val[0])
551
564
  end
552
565
 
553
- def _rule_51(val)
566
+ def _rule_49(val)
554
567
  s(:float, val[0])
555
568
  end
556
569
 
557
- def _rule_52(val)
570
+ def _rule_50(val)
558
571
  s(:var, val[0])
559
572
  end
560
573
 
574
+ def _rule_51(val)
575
+ val[0]
576
+ end
577
+
578
+ def _rule_52(val)
579
+ val[0]
580
+ end
581
+
561
582
  def _rule_53(val)
562
583
  val[0]
563
584
  end
@@ -617,6 +638,14 @@ class Parser < LL::Driver
617
638
  def _rule_67(val)
618
639
  val[0]
619
640
  end
641
+
642
+ def _rule_68(val)
643
+ val[0]
644
+ end
645
+
646
+ def _rule_69(val)
647
+ val[0]
648
+ end
620
649
  end
621
650
  end
622
651
  end