rubyjedi-oga 1.0.3
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 +7 -0
- data/.yardopts +13 -0
- data/LICENSE +362 -0
- data/README.md +317 -0
- data/doc/css/common.css +77 -0
- data/doc/css_selectors.md +935 -0
- data/doc/manually_creating_documents.md +67 -0
- data/doc/migrating_from_nokogiri.md +169 -0
- data/doc/xml_namespaces.md +63 -0
- data/ext/c/extconf.rb +11 -0
- data/ext/c/lexer.c +2595 -0
- data/ext/c/lexer.h +16 -0
- data/ext/c/lexer.rl +198 -0
- data/ext/c/liboga.c +6 -0
- data/ext/c/liboga.h +11 -0
- data/ext/java/Liboga.java +14 -0
- data/ext/java/org/liboga/xml/Lexer.java +1363 -0
- data/ext/java/org/liboga/xml/Lexer.rl +223 -0
- data/ext/ragel/base_lexer.rl +633 -0
- data/lib/oga.rb +57 -0
- data/lib/oga/blacklist.rb +40 -0
- data/lib/oga/css/lexer.rb +743 -0
- data/lib/oga/css/parser.rb +976 -0
- data/lib/oga/entity_decoder.rb +21 -0
- data/lib/oga/html/entities.rb +2150 -0
- data/lib/oga/html/parser.rb +25 -0
- data/lib/oga/html/sax_parser.rb +18 -0
- data/lib/oga/lru.rb +160 -0
- data/lib/oga/oga.rb +57 -0
- data/lib/oga/version.rb +3 -0
- data/lib/oga/whitelist.rb +20 -0
- data/lib/oga/xml/attribute.rb +136 -0
- data/lib/oga/xml/cdata.rb +17 -0
- data/lib/oga/xml/character_node.rb +37 -0
- data/lib/oga/xml/comment.rb +17 -0
- data/lib/oga/xml/default_namespace.rb +13 -0
- data/lib/oga/xml/doctype.rb +82 -0
- data/lib/oga/xml/document.rb +108 -0
- data/lib/oga/xml/element.rb +428 -0
- data/lib/oga/xml/entities.rb +122 -0
- data/lib/oga/xml/html_void_elements.rb +15 -0
- data/lib/oga/xml/lexer.rb +550 -0
- data/lib/oga/xml/namespace.rb +48 -0
- data/lib/oga/xml/node.rb +219 -0
- data/lib/oga/xml/node_set.rb +333 -0
- data/lib/oga/xml/parser.rb +631 -0
- data/lib/oga/xml/processing_instruction.rb +37 -0
- data/lib/oga/xml/pull_parser.rb +175 -0
- data/lib/oga/xml/querying.rb +56 -0
- data/lib/oga/xml/sax_parser.rb +192 -0
- data/lib/oga/xml/text.rb +66 -0
- data/lib/oga/xml/traversal.rb +50 -0
- data/lib/oga/xml/xml_declaration.rb +65 -0
- data/lib/oga/xpath/evaluator.rb +1798 -0
- data/lib/oga/xpath/lexer.rb +1958 -0
- data/lib/oga/xpath/parser.rb +622 -0
- data/oga.gemspec +45 -0
- metadata +227 -0
@@ -0,0 +1,631 @@
|
|
1
|
+
# This file is automatically generated by ruby-ll. Manually changing this file
|
2
|
+
# is not recommended as any changes will be lost the next time this parser is
|
3
|
+
# re-generated.
|
4
|
+
require 'll/setup'
|
5
|
+
|
6
|
+
module Oga
|
7
|
+
module XML
|
8
|
+
##
|
9
|
+
# DOM parser for both XML and HTML.
|
10
|
+
#
|
11
|
+
# This parser does not produce a dedicated AST, instead it emits XML nodes
|
12
|
+
# directly. Basic usage of this parser is as following:
|
13
|
+
#
|
14
|
+
# parser = Oga::XML::Parser.new('<foo></foo>')
|
15
|
+
# document = parser.parse
|
16
|
+
#
|
17
|
+
# To enable HTML parsing you'd use the following instead:
|
18
|
+
#
|
19
|
+
# parser = Oga::XML::Parser.new('<foo></foo>', :html => true)
|
20
|
+
# document = parser.parse
|
21
|
+
#
|
22
|
+
# In both cases you can use either a String or an IO as the parser input. IO
|
23
|
+
# instances will result in lower memory overhead, especially when parsing large
|
24
|
+
# files.
|
25
|
+
#
|
26
|
+
class Parser < LL::Driver
|
27
|
+
CONFIG = LL::DriverConfig.new
|
28
|
+
|
29
|
+
CONFIG.terminals = [
|
30
|
+
:$EOF, # 0
|
31
|
+
:T_TEXT, # 1
|
32
|
+
:T_STRING_SQUOTE, # 2
|
33
|
+
:T_STRING_DQUOTE, # 3
|
34
|
+
:T_STRING_BODY, # 4
|
35
|
+
:T_DOCTYPE_START, # 5
|
36
|
+
:T_DOCTYPE_END, # 6
|
37
|
+
:T_DOCTYPE_TYPE, # 7
|
38
|
+
:T_DOCTYPE_NAME, # 8
|
39
|
+
:T_DOCTYPE_INLINE, # 9
|
40
|
+
:T_COMMENT_START, # 10
|
41
|
+
:T_COMMENT_BODY, # 11
|
42
|
+
:T_COMMENT_END, # 12
|
43
|
+
:T_CDATA_START, # 13
|
44
|
+
:T_CDATA_BODY, # 14
|
45
|
+
:T_CDATA_END, # 15
|
46
|
+
:T_ELEM_NAME, # 16
|
47
|
+
:T_ELEM_NS, # 17
|
48
|
+
:T_ELEM_END, # 18
|
49
|
+
:T_ATTR, # 19
|
50
|
+
:T_ATTR_NS, # 20
|
51
|
+
:T_XML_DECL_START, # 21
|
52
|
+
:T_XML_DECL_END, # 22
|
53
|
+
:T_PROC_INS_START, # 23
|
54
|
+
:T_PROC_INS_NAME, # 24
|
55
|
+
:T_PROC_INS_BODY, # 25
|
56
|
+
:T_PROC_INS_END, # 26
|
57
|
+
].freeze
|
58
|
+
|
59
|
+
CONFIG.rules = [
|
60
|
+
[3, 0, 0, 1], # 0
|
61
|
+
[3, 1, 4, 23, 6, 0], # 1
|
62
|
+
[3, 2, 0, 3], # 2
|
63
|
+
[3, 3, 0, 7], # 3
|
64
|
+
[3, 4, 0, 9], # 4
|
65
|
+
[3, 5, 0, 11], # 5
|
66
|
+
[3, 6, 0, 19], # 6
|
67
|
+
[3, 7, 0, 15], # 7
|
68
|
+
[3, 8, 0, 18], # 8
|
69
|
+
[3, 9, 0, 4, 1, 8, 1, 5], # 9
|
70
|
+
[3, 10, 1, 6], # 10
|
71
|
+
[3, 11, 0, 6, 1, 7], # 11
|
72
|
+
[3, 12, 1, 6, 0, 5], # 12
|
73
|
+
[3, 13, 5, 24, 6, 0], # 13
|
74
|
+
[3, 14, 1, 6, 8, 25, 0, 21], # 14
|
75
|
+
[3, 15, 1, 6], # 15
|
76
|
+
[3, 16, 1, 15, 0, 8, 1, 13], # 16
|
77
|
+
[3, 17, 0, 8, 1, 14], # 17
|
78
|
+
[3, 18, 2, 0], # 18
|
79
|
+
[3, 19, 1, 12, 0, 10, 1, 10], # 19
|
80
|
+
[3, 20, 0, 10, 1, 11], # 20
|
81
|
+
[3, 21, 2, 0], # 21
|
82
|
+
[3, 22, 1, 26, 0, 12, 1, 24, 1, 23], # 22
|
83
|
+
[3, 23, 0, 12, 1, 25], # 23
|
84
|
+
[3, 24, 2, 0], # 24
|
85
|
+
[3, 25, 1, 16], # 25
|
86
|
+
[3, 26, 1, 16, 1, 17], # 26
|
87
|
+
[3, 27, 0, 16, 0, 13], # 27
|
88
|
+
[3, 28, 1, 18, 0, 1, 0, 14], # 28
|
89
|
+
[3, 29, 4, 26, 6, 0], # 29
|
90
|
+
[3, 30, 8, 27, 1, 19, 1, 20], # 30
|
91
|
+
[3, 31, 8, 28, 1, 19], # 31
|
92
|
+
[3, 32, 1, 22, 0, 16, 1, 21], # 32
|
93
|
+
[3, 33, 0, 20, 1, 1], # 33
|
94
|
+
[3, 34, 0, 20, 1, 1], # 34
|
95
|
+
[3, 35, 2, 0], # 35
|
96
|
+
[3, 36, 1, 3, 0, 22, 1, 3], # 36
|
97
|
+
[3, 37, 1, 2, 0, 22, 1, 2], # 37
|
98
|
+
[3, 38, 0, 22, 1, 4], # 38
|
99
|
+
[3, 39, 2, 0], # 39
|
100
|
+
[3, 40, 0, 2], # 40
|
101
|
+
[3, 41, 1, 9], # 41
|
102
|
+
[3, 42, 0, 21], # 42
|
103
|
+
[3, 43, 0, 17], # 43
|
104
|
+
[3, 44, 0, 21], # 44
|
105
|
+
[3, 45, 0, 21], # 45
|
106
|
+
].freeze
|
107
|
+
|
108
|
+
CONFIG.table = [
|
109
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # 0
|
110
|
+
[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
|
111
|
+
[-1, 6, -1, -1, -1, 2, -1, -1, -1, -1, 4, -1, -1, 3, -1, -1, 7, 7, -1, -1, -1, 8, -1, 5, -1, -1, -1], # 2
|
112
|
+
[-1, -1, -1, -1, -1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 3
|
113
|
+
[12, 12, 12, 12, 12, 12, 10, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], # 4
|
114
|
+
[13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13], # 5
|
115
|
+
[-1, -1, 14, 14, -1, -1, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 6
|
116
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 7
|
117
|
+
[18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18], # 8
|
118
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 9
|
119
|
+
[21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21], # 10
|
120
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, -1], # 11
|
121
|
+
[24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 24], # 12
|
122
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, 26, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 13
|
123
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 27, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 14
|
124
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 28, 28, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 15
|
125
|
+
[29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29], # 16
|
126
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 31, 30, -1, -1, -1, -1, -1, -1], # 17
|
127
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32, -1, -1, -1, -1, -1], # 18
|
128
|
+
[-1, 33, -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], # 19
|
129
|
+
[35, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35], # 20
|
130
|
+
[-1, -1, 37, 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 21
|
131
|
+
[39, 39, 39, 39, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39], # 22
|
132
|
+
[-1, 40, -1, -1, -1, 40, -1, -1, -1, -1, 40, -1, -1, 40, -1, -1, 40, 40, -1, -1, -1, 40, -1, 40, -1, -1, -1], # 23
|
133
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 24
|
134
|
+
[-1, -1, 42, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 25
|
135
|
+
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 43, -1, -1, -1, -1, -1, -1], # 26
|
136
|
+
[-1, -1, 44, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 27
|
137
|
+
[-1, -1, 45, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], # 28
|
138
|
+
].freeze
|
139
|
+
|
140
|
+
CONFIG.actions = [
|
141
|
+
[:_rule_0, 1], # 0
|
142
|
+
[:_rule_1, 1], # 1
|
143
|
+
[:_rule_2, 1], # 2
|
144
|
+
[:_rule_3, 1], # 3
|
145
|
+
[:_rule_4, 1], # 4
|
146
|
+
[:_rule_5, 1], # 5
|
147
|
+
[:_rule_6, 1], # 6
|
148
|
+
[:_rule_7, 1], # 7
|
149
|
+
[:_rule_8, 1], # 8
|
150
|
+
[:_rule_9, 3], # 9
|
151
|
+
[:_rule_10, 1], # 10
|
152
|
+
[:_rule_11, 2], # 11
|
153
|
+
[:_rule_12, 2], # 12
|
154
|
+
[:_rule_13, 1], # 13
|
155
|
+
[:_rule_14, 3], # 14
|
156
|
+
[:_rule_15, 1], # 15
|
157
|
+
[:_rule_16, 3], # 16
|
158
|
+
[:_rule_17, 2], # 17
|
159
|
+
[:_rule_18, 0], # 18
|
160
|
+
[:_rule_19, 3], # 19
|
161
|
+
[:_rule_20, 2], # 20
|
162
|
+
[:_rule_21, 0], # 21
|
163
|
+
[:_rule_22, 4], # 22
|
164
|
+
[:_rule_23, 2], # 23
|
165
|
+
[:_rule_24, 0], # 24
|
166
|
+
[:_rule_25, 1], # 25
|
167
|
+
[:_rule_26, 2], # 26
|
168
|
+
[:_rule_27, 2], # 27
|
169
|
+
[:_rule_28, 3], # 28
|
170
|
+
[:_rule_29, 1], # 29
|
171
|
+
[:_rule_30, 3], # 30
|
172
|
+
[:_rule_31, 2], # 31
|
173
|
+
[:_rule_32, 3], # 32
|
174
|
+
[:_rule_33, 2], # 33
|
175
|
+
[:_rule_34, 2], # 34
|
176
|
+
[:_rule_35, 0], # 35
|
177
|
+
[:_rule_36, 3], # 36
|
178
|
+
[:_rule_37, 3], # 37
|
179
|
+
[:_rule_38, 2], # 38
|
180
|
+
[:_rule_39, 0], # 39
|
181
|
+
[:_rule_40, 1], # 40
|
182
|
+
[:_rule_41, 1], # 41
|
183
|
+
[:_rule_42, 1], # 42
|
184
|
+
[:_rule_43, 1], # 43
|
185
|
+
[:_rule_44, 1], # 44
|
186
|
+
[:_rule_45, 1], # 45
|
187
|
+
].freeze
|
188
|
+
|
189
|
+
##
|
190
|
+
# Hash mapping token types and dedicated error labels.
|
191
|
+
#
|
192
|
+
# @return [Hash]
|
193
|
+
#
|
194
|
+
TOKEN_ERROR_MAPPING = {
|
195
|
+
:T_STRING => 'string',
|
196
|
+
:T_TEXT => 'text',
|
197
|
+
:T_DOCTYPE_START => 'doctype start',
|
198
|
+
:T_DOCTYPE_END => 'doctype closing tag',
|
199
|
+
:T_DOCTYPE_TYPE => 'doctype type',
|
200
|
+
:T_DOCTYPE_NAME => 'doctype name',
|
201
|
+
:T_DOCTYPE_INLINE => 'inline doctype rules',
|
202
|
+
:T_CDATA => 'CDATA',
|
203
|
+
:T_COMMENT => 'comment',
|
204
|
+
:T_ELEM_START => 'element start',
|
205
|
+
:T_ELEM_NAME => 'element name',
|
206
|
+
:T_ELEM_NS => 'element namespace',
|
207
|
+
:T_ELEM_END => 'element closing tag',
|
208
|
+
:T_ATTR => 'attribute',
|
209
|
+
:T_ATTR_NS => 'attribute namespace',
|
210
|
+
:T_XML_DECL_START => 'XML declaration start',
|
211
|
+
:T_XML_DECL_END => 'XML declaration end',
|
212
|
+
:T_PROC_INS_START => 'processing-instruction start',
|
213
|
+
:T_PROC_INS_NAME => 'processing-instruction name',
|
214
|
+
:T_PROC_INS_END => 'processing-instruction closing tag',
|
215
|
+
-1 => 'end of input'
|
216
|
+
}
|
217
|
+
|
218
|
+
##
|
219
|
+
# @param [String|IO] data The input to parse.
|
220
|
+
# @param [Hash] options
|
221
|
+
# @see [Oga::XML::Lexer#initialize]
|
222
|
+
#
|
223
|
+
def initialize(data, options = {})
|
224
|
+
@data = data
|
225
|
+
@lexer = Lexer.new(data, options)
|
226
|
+
|
227
|
+
reset
|
228
|
+
end
|
229
|
+
|
230
|
+
##
|
231
|
+
# Resets the internal state of the parser.
|
232
|
+
#
|
233
|
+
def reset
|
234
|
+
@line = 1
|
235
|
+
|
236
|
+
@lexer.reset
|
237
|
+
end
|
238
|
+
|
239
|
+
##
|
240
|
+
# Yields the next token from the lexer.
|
241
|
+
#
|
242
|
+
# @yieldparam [Array]
|
243
|
+
#
|
244
|
+
def each_token
|
245
|
+
@lexer.advance do |type, value, line|
|
246
|
+
@line = line if line
|
247
|
+
|
248
|
+
yield [type, value]
|
249
|
+
end
|
250
|
+
|
251
|
+
yield [-1, -1]
|
252
|
+
end
|
253
|
+
|
254
|
+
##
|
255
|
+
# @param [Fixnum] stack_type
|
256
|
+
# @param [Fixnum] stack_value
|
257
|
+
# @param [Symbol] token_type
|
258
|
+
# @param [String] token_value
|
259
|
+
#
|
260
|
+
def parser_error(stack_type, stack_value, token_type, token_value)
|
261
|
+
case id_to_type(stack_type)
|
262
|
+
when :rule
|
263
|
+
message = "Unexpected #{token_type} for rule #{stack_value}"
|
264
|
+
when :terminal
|
265
|
+
expected = id_to_terminal(stack_value)
|
266
|
+
expected = TOKEN_ERROR_MAPPING[expected] || expected
|
267
|
+
got = TOKEN_ERROR_MAPPING[token_type] || token_type
|
268
|
+
message = "Unexpected #{got}, expected #{expected} instead"
|
269
|
+
when :eof
|
270
|
+
message = 'Unexpected end of input'
|
271
|
+
end
|
272
|
+
|
273
|
+
message += " on line #{@line}"
|
274
|
+
|
275
|
+
raise LL::ParserError, message
|
276
|
+
end
|
277
|
+
|
278
|
+
##
|
279
|
+
# @see [LL::Driver#parse]
|
280
|
+
#
|
281
|
+
def parse
|
282
|
+
retval = super
|
283
|
+
|
284
|
+
reset
|
285
|
+
|
286
|
+
return retval
|
287
|
+
end
|
288
|
+
|
289
|
+
##
|
290
|
+
# @param [Array] children
|
291
|
+
# @return [Oga::XML::Document]
|
292
|
+
#
|
293
|
+
def on_document(children = [])
|
294
|
+
document = Document.new(:type => @lexer.html? ? :html : :xml)
|
295
|
+
|
296
|
+
children.each do |child|
|
297
|
+
if child.is_a?(Doctype)
|
298
|
+
document.doctype = child
|
299
|
+
|
300
|
+
elsif child.is_a?(XmlDeclaration)
|
301
|
+
document.xml_declaration = child
|
302
|
+
|
303
|
+
else
|
304
|
+
document.children << child
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
return document
|
309
|
+
end
|
310
|
+
|
311
|
+
##
|
312
|
+
# @param [Hash] options
|
313
|
+
#
|
314
|
+
def on_doctype(options = {})
|
315
|
+
return Doctype.new(options)
|
316
|
+
end
|
317
|
+
|
318
|
+
##
|
319
|
+
# @param [String] text
|
320
|
+
# @return [Oga::XML::Cdata]
|
321
|
+
#
|
322
|
+
def on_cdata(text = nil)
|
323
|
+
return Cdata.new(:text => text)
|
324
|
+
end
|
325
|
+
|
326
|
+
##
|
327
|
+
# @param [String] text
|
328
|
+
# @return [Oga::XML::Comment]
|
329
|
+
#
|
330
|
+
def on_comment(text = nil)
|
331
|
+
return Comment.new(:text => text)
|
332
|
+
end
|
333
|
+
|
334
|
+
##
|
335
|
+
# @param [String] name
|
336
|
+
# @param [String] text
|
337
|
+
# @return [Oga::XML::ProcessingInstruction]
|
338
|
+
#
|
339
|
+
def on_proc_ins(name, text = nil)
|
340
|
+
return ProcessingInstruction.new(:name => name, :text => text)
|
341
|
+
end
|
342
|
+
|
343
|
+
##
|
344
|
+
# @param [Array] attributes
|
345
|
+
# @return [Oga::XML::XmlDeclaration]
|
346
|
+
#
|
347
|
+
def on_xml_decl(attributes = [])
|
348
|
+
options = {}
|
349
|
+
|
350
|
+
attributes.each do |attr|
|
351
|
+
options[attr.name.to_sym] = attr.value
|
352
|
+
end
|
353
|
+
|
354
|
+
return XmlDeclaration.new(options)
|
355
|
+
end
|
356
|
+
|
357
|
+
##
|
358
|
+
# @param [String] text
|
359
|
+
# @return [Oga::XML::Text]
|
360
|
+
#
|
361
|
+
def on_text(text)
|
362
|
+
return Text.new(:text => text)
|
363
|
+
end
|
364
|
+
|
365
|
+
##
|
366
|
+
# @param [String] namespace
|
367
|
+
# @param [String] name
|
368
|
+
# @param [Hash] attributes
|
369
|
+
# @return [Oga::XML::Element]
|
370
|
+
#
|
371
|
+
def on_element(namespace, name, attributes = {})
|
372
|
+
element = Element.new(
|
373
|
+
:namespace_name => namespace,
|
374
|
+
:name => name,
|
375
|
+
:attributes => attributes
|
376
|
+
)
|
377
|
+
|
378
|
+
return element
|
379
|
+
end
|
380
|
+
|
381
|
+
##
|
382
|
+
# @param [Oga::XML::Element] element
|
383
|
+
# @param [Array] children
|
384
|
+
# @return [Oga::XML::Element]
|
385
|
+
#
|
386
|
+
def on_element_children(element, children = [])
|
387
|
+
element.children = children
|
388
|
+
|
389
|
+
return element
|
390
|
+
end
|
391
|
+
|
392
|
+
##
|
393
|
+
# @param [Oga::XML::Element] element
|
394
|
+
# @return [Oga::XML::Element]
|
395
|
+
#
|
396
|
+
def after_element(element)
|
397
|
+
return element
|
398
|
+
end
|
399
|
+
|
400
|
+
##
|
401
|
+
# @param [String] name
|
402
|
+
# @param [String] ns_name
|
403
|
+
# @param [String] value
|
404
|
+
# @return [Oga::XML::Attribute]
|
405
|
+
#
|
406
|
+
def on_attribute(name, ns_name = nil, value = nil)
|
407
|
+
return Attribute.new(
|
408
|
+
:namespace_name => ns_name,
|
409
|
+
:name => name,
|
410
|
+
:value => value
|
411
|
+
)
|
412
|
+
end
|
413
|
+
|
414
|
+
##
|
415
|
+
# @param [Array] attrs
|
416
|
+
#
|
417
|
+
def on_attributes(attrs)
|
418
|
+
return attrs
|
419
|
+
end
|
420
|
+
|
421
|
+
def _rule_0(val)
|
422
|
+
on_document(val[0])
|
423
|
+
end
|
424
|
+
|
425
|
+
def _rule_1(val)
|
426
|
+
val[0]
|
427
|
+
end
|
428
|
+
|
429
|
+
def _rule_2(val)
|
430
|
+
val[0]
|
431
|
+
end
|
432
|
+
|
433
|
+
def _rule_3(val)
|
434
|
+
val[0]
|
435
|
+
end
|
436
|
+
|
437
|
+
def _rule_4(val)
|
438
|
+
val[0]
|
439
|
+
end
|
440
|
+
|
441
|
+
def _rule_5(val)
|
442
|
+
val[0]
|
443
|
+
end
|
444
|
+
|
445
|
+
def _rule_6(val)
|
446
|
+
val[0]
|
447
|
+
end
|
448
|
+
|
449
|
+
def _rule_7(val)
|
450
|
+
val[0]
|
451
|
+
end
|
452
|
+
|
453
|
+
def _rule_8(val)
|
454
|
+
val[0]
|
455
|
+
end
|
456
|
+
|
457
|
+
def _rule_9(val)
|
458
|
+
|
459
|
+
name = val[1]
|
460
|
+
follow = val[2]
|
461
|
+
|
462
|
+
on_doctype(
|
463
|
+
:name => name,
|
464
|
+
:type => follow[0],
|
465
|
+
:public_id => follow[1],
|
466
|
+
:system_id => follow[2],
|
467
|
+
:inline_rules => follow[3]
|
468
|
+
)
|
469
|
+
|
470
|
+
end
|
471
|
+
|
472
|
+
def _rule_10(val)
|
473
|
+
[]
|
474
|
+
end
|
475
|
+
|
476
|
+
def _rule_11(val)
|
477
|
+
[val[0], *val[1]]
|
478
|
+
end
|
479
|
+
|
480
|
+
def _rule_12(val)
|
481
|
+
[nil, nil, nil, val[0]]
|
482
|
+
end
|
483
|
+
|
484
|
+
def _rule_13(val)
|
485
|
+
val[0].inject(:+)
|
486
|
+
end
|
487
|
+
|
488
|
+
def _rule_14(val)
|
489
|
+
[val[0], val[1]]
|
490
|
+
end
|
491
|
+
|
492
|
+
def _rule_15(val)
|
493
|
+
nil
|
494
|
+
end
|
495
|
+
|
496
|
+
def _rule_16(val)
|
497
|
+
on_cdata(val[1])
|
498
|
+
end
|
499
|
+
|
500
|
+
def _rule_17(val)
|
501
|
+
val[0] + val[1]
|
502
|
+
end
|
503
|
+
|
504
|
+
def _rule_18(val)
|
505
|
+
''
|
506
|
+
end
|
507
|
+
|
508
|
+
def _rule_19(val)
|
509
|
+
on_comment(val[1])
|
510
|
+
end
|
511
|
+
|
512
|
+
def _rule_20(val)
|
513
|
+
val[0] + val[1]
|
514
|
+
end
|
515
|
+
|
516
|
+
def _rule_21(val)
|
517
|
+
''
|
518
|
+
end
|
519
|
+
|
520
|
+
def _rule_22(val)
|
521
|
+
|
522
|
+
on_proc_ins(val[1], val[2])
|
523
|
+
|
524
|
+
end
|
525
|
+
|
526
|
+
def _rule_23(val)
|
527
|
+
val[0] + val[1]
|
528
|
+
end
|
529
|
+
|
530
|
+
def _rule_24(val)
|
531
|
+
''
|
532
|
+
end
|
533
|
+
|
534
|
+
def _rule_25(val)
|
535
|
+
[nil, val[0]]
|
536
|
+
end
|
537
|
+
|
538
|
+
def _rule_26(val)
|
539
|
+
val
|
540
|
+
end
|
541
|
+
|
542
|
+
def _rule_27(val)
|
543
|
+
|
544
|
+
on_element(val[0][0], val[0][1], val[1])
|
545
|
+
|
546
|
+
end
|
547
|
+
|
548
|
+
def _rule_28(val)
|
549
|
+
|
550
|
+
if val[0]
|
551
|
+
on_element_children(val[0], val[1])
|
552
|
+
end
|
553
|
+
|
554
|
+
after_element(val[0])
|
555
|
+
|
556
|
+
end
|
557
|
+
|
558
|
+
def _rule_29(val)
|
559
|
+
on_attributes(val[0])
|
560
|
+
end
|
561
|
+
|
562
|
+
def _rule_30(val)
|
563
|
+
on_attribute(val[1], val[0], val[2])
|
564
|
+
end
|
565
|
+
|
566
|
+
def _rule_31(val)
|
567
|
+
on_attribute(val[0], nil, val[1])
|
568
|
+
end
|
569
|
+
|
570
|
+
def _rule_32(val)
|
571
|
+
on_xml_decl(val[1])
|
572
|
+
end
|
573
|
+
|
574
|
+
def _rule_33(val)
|
575
|
+
|
576
|
+
text = val[1] ? val[0] + val[1] : val[0]
|
577
|
+
|
578
|
+
on_text(text)
|
579
|
+
|
580
|
+
end
|
581
|
+
|
582
|
+
def _rule_34(val)
|
583
|
+
val[1] ? val[0] + val[1] : val[0]
|
584
|
+
end
|
585
|
+
|
586
|
+
def _rule_35(val)
|
587
|
+
nil
|
588
|
+
end
|
589
|
+
|
590
|
+
def _rule_36(val)
|
591
|
+
val[1]
|
592
|
+
end
|
593
|
+
|
594
|
+
def _rule_37(val)
|
595
|
+
val[1]
|
596
|
+
end
|
597
|
+
|
598
|
+
def _rule_38(val)
|
599
|
+
val[0] + val[1]
|
600
|
+
end
|
601
|
+
|
602
|
+
def _rule_39(val)
|
603
|
+
''
|
604
|
+
end
|
605
|
+
|
606
|
+
def _rule_40(val)
|
607
|
+
val[0]
|
608
|
+
end
|
609
|
+
|
610
|
+
def _rule_41(val)
|
611
|
+
val[0]
|
612
|
+
end
|
613
|
+
|
614
|
+
def _rule_42(val)
|
615
|
+
val[0]
|
616
|
+
end
|
617
|
+
|
618
|
+
def _rule_43(val)
|
619
|
+
val[0]
|
620
|
+
end
|
621
|
+
|
622
|
+
def _rule_44(val)
|
623
|
+
val[0]
|
624
|
+
end
|
625
|
+
|
626
|
+
def _rule_45(val)
|
627
|
+
val[0]
|
628
|
+
end
|
629
|
+
end
|
630
|
+
end
|
631
|
+
end
|