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.
- checksums.yaml +4 -4
- data/doc/css_selectors.md +1 -1
- data/lib/liboga.jar +0 -0
- data/lib/oga.rb +6 -1
- data/lib/oga/blacklist.rb +0 -10
- data/lib/oga/css/lexer.rb +530 -255
- data/lib/oga/css/parser.rb +232 -230
- data/lib/oga/entity_decoder.rb +0 -4
- data/lib/oga/html/entities.rb +0 -4
- data/lib/oga/html/parser.rb +0 -4
- data/lib/oga/html/sax_parser.rb +0 -4
- data/lib/oga/lru.rb +0 -26
- data/lib/oga/oga.rb +0 -8
- data/lib/oga/ruby/generator.rb +225 -0
- data/lib/oga/ruby/node.rb +189 -0
- data/lib/oga/version.rb +1 -1
- data/lib/oga/whitelist.rb +0 -6
- data/lib/oga/xml/attribute.rb +13 -20
- data/lib/oga/xml/cdata.rb +0 -4
- data/lib/oga/xml/character_node.rb +0 -8
- data/lib/oga/xml/comment.rb +0 -4
- data/lib/oga/xml/default_namespace.rb +0 -2
- data/lib/oga/xml/doctype.rb +0 -8
- data/lib/oga/xml/document.rb +10 -14
- data/lib/oga/xml/element.rb +1 -52
- data/lib/oga/xml/entities.rb +0 -26
- data/lib/oga/xml/expanded_name.rb +12 -0
- data/lib/oga/xml/html_void_elements.rb +0 -2
- data/lib/oga/xml/lexer.rb +0 -86
- data/lib/oga/xml/namespace.rb +0 -10
- data/lib/oga/xml/node.rb +18 -34
- data/lib/oga/xml/node_set.rb +0 -50
- data/lib/oga/xml/parser.rb +13 -50
- data/lib/oga/xml/processing_instruction.rb +0 -8
- data/lib/oga/xml/pull_parser.rb +0 -18
- data/lib/oga/xml/querying.rb +58 -19
- data/lib/oga/xml/sax_parser.rb +0 -18
- data/lib/oga/xml/text.rb +0 -12
- data/lib/oga/xml/traversal.rb +0 -4
- data/lib/oga/xml/xml_declaration.rb +0 -8
- data/lib/oga/xpath/compiler.rb +1568 -0
- data/lib/oga/xpath/conversion.rb +102 -0
- data/lib/oga/xpath/lexer.rb +1844 -1238
- data/lib/oga/xpath/parser.rb +182 -153
- metadata +7 -3
- data/lib/oga/xpath/evaluator.rb +0 -1800
data/lib/oga/xpath/parser.rb
CHANGED
@@ -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,
|
53
|
-
[3, 1, 4,
|
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,
|
54
|
+
[3, 3, 4, 34, 6, 0, 0, 5], # 3
|
56
55
|
[3, 4, 0, 5, 1, 15], # 4
|
57
|
-
[3, 5, 4,
|
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,
|
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,
|
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,
|
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,
|
71
|
+
[3, 20, 4, 39, 6, 0, 0, 15], # 20
|
73
72
|
[3, 21, 0, 15, 1, 14], # 21
|
74
|
-
[3, 22, 0,
|
75
|
-
[3, 23, 0,
|
76
|
-
[3, 24, 0,
|
77
|
-
[3, 25, 0,
|
78
|
-
[3, 26, 0,
|
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,
|
81
|
-
[3, 29,
|
82
|
-
[3, 30, 0,
|
83
|
-
[3, 31,
|
84
|
-
[3, 32, 0,
|
85
|
-
[3, 33, 0,
|
86
|
-
[3, 34,
|
87
|
-
[3, 35,
|
88
|
-
[3, 36,
|
89
|
-
[3, 37,
|
90
|
-
[3, 38,
|
91
|
-
[3, 39,
|
92
|
-
[3, 40, 1,
|
93
|
-
[3, 41,
|
94
|
-
[3, 42,
|
95
|
-
[3, 43,
|
96
|
-
[3, 44,
|
97
|
-
[3, 45, 0,
|
98
|
-
[3, 46,
|
99
|
-
[3, 47,
|
100
|
-
[3, 48,
|
101
|
-
[3, 49, 1,
|
102
|
-
[3, 50, 1,
|
103
|
-
[3, 51,
|
104
|
-
[3, 52,
|
105
|
-
[3, 53, 0,
|
106
|
-
[3, 54, 0,
|
107
|
-
[3, 55, 0,
|
108
|
-
[3, 56, 0,
|
109
|
-
[3, 57, 0,
|
110
|
-
[3, 58, 0,
|
111
|
-
[3, 59, 0,
|
112
|
-
[3, 60, 0,
|
113
|
-
[3, 61, 0,
|
114
|
-
[3, 62, 0,
|
115
|
-
[3, 63, 0,
|
116
|
-
[3, 64, 0,
|
117
|
-
[3, 65, 0,
|
118
|
-
[3, 66, 0,
|
119
|
-
[3, 67, 0,
|
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,
|
140
|
-
[-1,
|
141
|
-
[-1, -1, -1, -1, -1, -1,
|
142
|
-
[
|
143
|
-
[-1,
|
144
|
-
[-1, -1, -1, -1, -1, -1,
|
145
|
-
[
|
146
|
-
[-1, -1, -1, -1, -1, -1, -1, -1,
|
147
|
-
[-1, -1, -1, -1, -1, -1, -1,
|
148
|
-
[
|
149
|
-
[-1, -1,
|
150
|
-
[
|
151
|
-
[-1, -1, -1,
|
152
|
-
[-1,
|
153
|
-
[-1, -1, -1, -1, -1, -1,
|
154
|
-
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
155
|
-
[-1,
|
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
|
157
|
-
[-1,
|
158
|
-
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
159
|
-
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
160
|
-
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
161
|
-
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
162
|
-
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
163
|
-
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
164
|
-
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
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,
|
167
|
-
[-1, -1, -1, -1, -1, -1, -1, -1,
|
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,
|
170
|
-
[-1, -1, -1,
|
171
|
-
[-1, -1, -1, -1, -1, -1, -1, -1,
|
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,
|
204
|
-
[:_rule_29,
|
205
|
-
[:_rule_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,
|
208
|
-
[:_rule_33,
|
209
|
-
[:_rule_34,
|
210
|
-
[:_rule_35,
|
211
|
-
[:_rule_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,
|
215
|
-
[:_rule_40,
|
217
|
+
[:_rule_39, 2], # 39
|
218
|
+
[:_rule_40, 2], # 40
|
216
219
|
[:_rule_41, 2], # 41
|
217
|
-
[:_rule_42,
|
220
|
+
[:_rule_42, 0], # 42
|
218
221
|
[:_rule_43, 2], # 43
|
219
|
-
[:_rule_44,
|
220
|
-
[:_rule_45,
|
221
|
-
[:_rule_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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
434
|
+
def _rule_30(val)
|
450
435
|
val[0]
|
451
436
|
end
|
452
437
|
|
453
|
-
def
|
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
|
480
|
-
|
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
|
487
|
+
def _rule_33(val)
|
484
488
|
[:call, val[1]]
|
485
489
|
end
|
486
490
|
|
487
|
-
def
|
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
|
492
|
-
[:test, nil, val[0]]
|
495
|
+
def _rule_35(val)
|
496
|
+
[:test, nil, val[0], val[1]]
|
493
497
|
end
|
494
498
|
|
495
|
-
def
|
499
|
+
def _rule_36(val)
|
496
500
|
val[1]
|
497
501
|
end
|
498
502
|
|
499
|
-
def
|
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
|
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
|
517
|
+
def _rule_40(val)
|
510
518
|
val[1]
|
511
519
|
end
|
512
520
|
|
513
|
-
def
|
521
|
+
def _rule_41(val)
|
514
522
|
[val[0], *val[1]]
|
515
523
|
end
|
516
524
|
|
517
|
-
def
|
525
|
+
def _rule_42(val)
|
518
526
|
val
|
519
527
|
end
|
520
528
|
|
521
|
-
def
|
529
|
+
def _rule_43(val)
|
522
530
|
val[1]
|
523
531
|
end
|
524
532
|
|
525
|
-
def
|
533
|
+
def _rule_44(val)
|
526
534
|
|
527
|
-
ret
|
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
|
550
|
+
def _rule_45(val)
|
538
551
|
val[0]
|
539
552
|
end
|
540
553
|
|
541
|
-
def
|
554
|
+
def _rule_46(val)
|
542
555
|
val[0]
|
543
556
|
end
|
544
557
|
|
545
|
-
def
|
558
|
+
def _rule_47(val)
|
546
559
|
s(:string, val[0])
|
547
560
|
end
|
548
561
|
|
549
|
-
def
|
562
|
+
def _rule_48(val)
|
550
563
|
s(:int, val[0])
|
551
564
|
end
|
552
565
|
|
553
|
-
def
|
566
|
+
def _rule_49(val)
|
554
567
|
s(:float, val[0])
|
555
568
|
end
|
556
569
|
|
557
|
-
def
|
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
|