xmlparser 0.6.81

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 (52) hide show
  1. data/MANIFEST +112 -0
  2. data/README +697 -0
  3. data/README.ja +789 -0
  4. data/Rakefile +34 -0
  5. data/ext/encoding.h +91 -0
  6. data/ext/xmlparser/mkrf_conf.rb +28 -0
  7. data/ext/xmlparser/xmlparser.c +2226 -0
  8. data/lib/sax.rb +1 -0
  9. data/lib/saxdriver.rb +1 -0
  10. data/lib/wget.rb +47 -0
  11. data/lib/xml/dom/builder-ja.rb +58 -0
  12. data/lib/xml/dom/builder.rb +310 -0
  13. data/lib/xml/dom/core.rb +3276 -0
  14. data/lib/xml/dom/digest.rb +94 -0
  15. data/lib/xml/dom/visitor.rb +182 -0
  16. data/lib/xml/dom2/attr.rb +213 -0
  17. data/lib/xml/dom2/cdatasection.rb +76 -0
  18. data/lib/xml/dom2/characterdata.rb +177 -0
  19. data/lib/xml/dom2/comment.rb +81 -0
  20. data/lib/xml/dom2/core.rb +19 -0
  21. data/lib/xml/dom2/document.rb +317 -0
  22. data/lib/xml/dom2/documentfragment.rb +82 -0
  23. data/lib/xml/dom2/documenttype.rb +102 -0
  24. data/lib/xml/dom2/dombuilder.rb +277 -0
  25. data/lib/xml/dom2/dombuilderfilter.rb +12 -0
  26. data/lib/xml/dom2/domentityresolver.rb +13 -0
  27. data/lib/xml/dom2/domentityresolverimpl.rb +37 -0
  28. data/lib/xml/dom2/domexception.rb +95 -0
  29. data/lib/xml/dom2/domimplementation.rb +61 -0
  30. data/lib/xml/dom2/dominputsource.rb +29 -0
  31. data/lib/xml/dom2/element.rb +533 -0
  32. data/lib/xml/dom2/entity.rb +110 -0
  33. data/lib/xml/dom2/entityreference.rb +107 -0
  34. data/lib/xml/dom2/namednodemap.rb +138 -0
  35. data/lib/xml/dom2/node.rb +587 -0
  36. data/lib/xml/dom2/nodelist.rb +231 -0
  37. data/lib/xml/dom2/notation.rb +86 -0
  38. data/lib/xml/dom2/processinginstruction.rb +155 -0
  39. data/lib/xml/dom2/text.rb +128 -0
  40. data/lib/xml/dom2/xpath.rb +398 -0
  41. data/lib/xml/encoding-ja.rb +42 -0
  42. data/lib/xml/parser.rb +13 -0
  43. data/lib/xml/parserns.rb +236 -0
  44. data/lib/xml/sax.rb +353 -0
  45. data/lib/xml/saxdriver.rb +370 -0
  46. data/lib/xml/xpath.rb +3284 -0
  47. data/lib/xml/xpath.ry +2352 -0
  48. data/lib/xmldigest.rb +1 -0
  49. data/lib/xmltree.rb +1 -0
  50. data/lib/xmltreebuilder.rb +1 -0
  51. data/lib/xmltreevisitor.rb +1 -0
  52. metadata +111 -0
@@ -0,0 +1,82 @@
1
+ ## -*- Ruby -*-
2
+ ## XML::DOM
3
+ ## 1998-2001 by yoshidam
4
+ ##
5
+
6
+ require 'xml/dom2/node'
7
+ require 'xml/dom2/domexception'
8
+
9
+ module XML
10
+ module DOM
11
+
12
+ =begin
13
+ == Class XML::DOM::DocumentFragment
14
+
15
+ === superclass
16
+ Node
17
+
18
+ =end
19
+ class DocumentFragment<Node
20
+
21
+ =begin
22
+ === Class Methods
23
+
24
+ --- DocumentFragment.new(*children)
25
+
26
+ creates a new DocumentFragment.
27
+ =end
28
+
29
+ def initialize(*children)
30
+ super(*children)
31
+ end
32
+
33
+ =begin
34
+ === Methods
35
+
36
+ --- DocumentFragment#nodeType
37
+
38
+ [DOM]
39
+ returns the nodeType.
40
+ =end
41
+ ## [DOM]
42
+ def nodeType
43
+ DOCUMENT_FRAGMENT_NODE
44
+ end
45
+
46
+ =begin
47
+ --- DocumentFragment#nodeName
48
+
49
+ [DOM]
50
+ returns the nodeName.
51
+ =end
52
+ ## [DOM]
53
+ def nodeName
54
+ "#document-fragment"
55
+ end
56
+
57
+ =begin
58
+ --- DocumentFragment#parentNode=(p)
59
+
60
+ returns the parent of this node.
61
+ =end
62
+ ## DocumentFragment should not have the parent node.
63
+ # def parentNode=(p)
64
+ # @children.each do |child|
65
+ # child.parentNode = p
66
+ # end if @children
67
+ # end
68
+
69
+ def _checkNode(node)
70
+ unless node.nodeType == ELEMENT_NODE ||
71
+ node.nodeType == PROCESSING_INSTRUCTION_NODE ||
72
+ node.nodeType == COMMENT_NODE ||
73
+ node.nodeType == TEXT_NODE ||
74
+ node.nodeType == CDATA_SECTION_NODE ||
75
+ node.nodeType == ENTITY_REFERENCE_NODE
76
+ raise DOMException.new(DOMException::HIERARCHY_REQUEST_ERR)
77
+ end
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,102 @@
1
+ ## -*- Ruby -*-
2
+ ## XML::DOM
3
+ ## 1998-2001 by yoshidam
4
+ ##
5
+
6
+ require 'xml/dom2/node'
7
+
8
+ module XML
9
+ module DOM
10
+
11
+ =begin
12
+ == Class XML::DOM::DocumentType
13
+
14
+ === superclass
15
+ Node
16
+ =end
17
+ class DocumentType<Node
18
+
19
+ =begin
20
+ === Class Methods
21
+
22
+ --- DocumentType.new(name, pubid, sysid, *children)
23
+
24
+ creates a new DocuemntType.
25
+ =end
26
+ def initialize(name, pubid, sysid, *children)
27
+ super(*children)
28
+ raise "parameter error" if !name
29
+ @name = name.freeze
30
+ @pubid = pubid.freeze
31
+ @sysid = sysid.freeze
32
+ end
33
+
34
+ =begin
35
+ === Methods
36
+
37
+ --- DocumentType#nodeType
38
+
39
+ [DOM]
40
+ returns the nodeType.
41
+ =end
42
+ ## [DOM]
43
+ def nodeType
44
+ DOCUMENT_TYPE_NODE
45
+ end
46
+
47
+ =begin
48
+ --- DocumentType#nodeName
49
+
50
+ [DOM]
51
+ returns the nodeName.
52
+ =end
53
+ ## [DOM]
54
+ def nodeName
55
+ @name
56
+ end
57
+
58
+ =begin
59
+ --- DocumentType#to_s
60
+
61
+ returns the string representation of the DocumentType.
62
+ =end
63
+ def to_s
64
+ ""
65
+ end
66
+
67
+ =begin
68
+ --- DocumentType#dump(depth = 0)
69
+
70
+ dumps the DocumentType.
71
+ =end
72
+ def dump(depth = 0)
73
+ print ' ' * depth * 2
74
+ print "<!DOCTYPE #{@name}>\n"
75
+ end
76
+
77
+ =begin
78
+ --- DocumentType#cloneNode(deep = true)
79
+
80
+ [DOM]
81
+ returns the copy of the DocumentType.
82
+ =end
83
+ ## [DOM]
84
+ def cloneNode(deep = true)
85
+ super(deep, @name, @pubid, @sysid)
86
+ end
87
+
88
+ ## [DOM]
89
+ ## def entities; @entities; end
90
+ ## def notations; @notations; end
91
+
92
+ ## [DOM2]
93
+ def publicId; @pubid; end
94
+
95
+ ## [DOM2]
96
+ def systemId; @sysid; end
97
+
98
+ ## [DOM2]
99
+ def internalSubset; end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,277 @@
1
+ ## -*- Ruby -*-
2
+ ## XML::DOM::DOMBuilder
3
+ ## 1999-2001 by yoshidam
4
+ ##
5
+ ##
6
+ ## builder = XML::DOM::DOMImplementation.instance.createDOMBuilder
7
+ ## doc = builder.parseURI("http://hoge/hoge.xml")
8
+ ## inputSource = XML::DOM::InputSource.new("http://hoge/hoge.xml")
9
+ ## doc = builder.parseDOMInputSource(inputSource)
10
+ ##
11
+ ##
12
+
13
+ require 'xml/parserns'
14
+ require 'xml/dom2/document'
15
+ require 'xml/dom2/domentityresolverimpl'
16
+
17
+ =begin
18
+ = XML::DOM::DOMBuilder
19
+
20
+ =end
21
+ module XML
22
+ module DOM
23
+
24
+ =begin
25
+ == Class XML::DOM::DOMBuilder
26
+
27
+ === superclass
28
+ XML::Parser
29
+
30
+ =end
31
+ class DOMBuilder<XML::ParserNS
32
+ NSSEP = '!'
33
+
34
+ attr :createCDATASection, true
35
+ attr :createEntityReference, true
36
+
37
+ =begin
38
+ === Class Methods
39
+
40
+ --- DOM::DOMBuilder.new(document = nil, *args)
41
+
42
+ Constructor of DOM builder.
43
+
44
+ usage:
45
+ parser = XML::DOM::DOMBuilder.new(document)
46
+
47
+ =end
48
+ ## new(document = nil, encoding = nil)
49
+ ## new(document = nil, parser, context, encoding = nil)
50
+
51
+ def self.new(document = nil, *args)
52
+ document ||= Document.new
53
+ if args[0].is_a?(self.class)
54
+ ret = super(*args)
55
+ ret.__initialize__(document, true)
56
+ else
57
+ ret = super(args[0], NSSEP)
58
+ ret.__initialize__(document, false)
59
+ end
60
+ ret.setReturnNSTriplet(true)
61
+ ret
62
+ end
63
+
64
+ def __initialize__(document, external = false)
65
+ @tree = nil
66
+ @entityResolver = DOMEntityResolverImpl.new
67
+ @createCDATASection = false
68
+ @createEntityReference = false
69
+ @document = document
70
+ @external = external
71
+ end
72
+
73
+
74
+ =begin
75
+ === Methods
76
+ --- DOMBuilder#parse(xml, parse_ext = false)
77
+
78
+ parse string or stream of XML contents.
79
+
80
+ xml: string or stream of XML contents
81
+ parse_ext: flag whether parse external entities or not
82
+
83
+ ex. doctree = parser.parse(xml, parse_ext)
84
+
85
+ =end
86
+ ## Parse
87
+ ## doctree = parser.parse(xml, parse_ext)
88
+ ## xml: string or stream of XML contents
89
+ ## parse_ext: flag whether parse external entities or not
90
+ def parse(xml, parse_ext = false)
91
+ if @external
92
+ @tree = @document.createDocumentFragment
93
+ else
94
+ @tree = @document
95
+ end
96
+ @parse_ext = parse_ext
97
+ @current = @tree
98
+ @inDocDecl = 0
99
+ @decl = ""
100
+ @inDecl = 0
101
+ @idRest = 0
102
+ @extID = nil
103
+ @cdata_f = false
104
+ @cdata_buf = ''
105
+ @nsdecl = []
106
+ super(xml)
107
+ @tree
108
+ end
109
+
110
+ def parseURI(uri)
111
+ uri =~ /^((\w+):\/\/.+\/).*$/ ## /
112
+ setBase($1) if $1
113
+ xml = @entityResolver.resolveEntity(nil, uri).byteStream.read
114
+ parse(xml, true)
115
+ end
116
+
117
+ def text
118
+ return if @cdata_buf == ''
119
+ textnode = @document.createTextNode(@cdata_buf)
120
+ @current.appendChild(textnode)
121
+ @cdata_buf = ''
122
+ end
123
+
124
+ def startElement(name, data)
125
+ text
126
+ if !name.index(NSSEP)
127
+ qname = name
128
+ uri = nil
129
+ else
130
+ uri, localname, prefix = name.split(NSSEP)
131
+ if prefix.nil?
132
+ qname = localname
133
+ else
134
+ qname = prefix + ':' + localname
135
+ end
136
+ end
137
+ elem = @document.createElementNS(uri, qname)
138
+
139
+ @nsdecl.each do |nsdecl|
140
+ elem.setAttributeNode(nsdecl)
141
+ end
142
+ @nsdecl = []
143
+
144
+ attr = {}
145
+ specified = getSpecifiedAttributes
146
+ ## not implemented
147
+ ## elem.idAttribute = getIdAttribute
148
+
149
+ data.each do |key, value|
150
+ if !key.index(NSSEP)
151
+ qname = key
152
+ uri = nil
153
+ else
154
+ uri, localname, prefix = key.split(NSSEP)
155
+ if prefix.nil?
156
+ qname = localname
157
+ else
158
+ qname = prefix + ':' + localname
159
+ end
160
+ end
161
+ attr = @document.createAttributeNS(uri, qname)
162
+ attr.appendChild(@document.createTextNode(value))
163
+ ## attr.specified = specified[key]
164
+ attr.specified = specified.include?(key)
165
+ elem.setAttributeNode(attr)
166
+ end
167
+
168
+ @current.appendChild(elem)
169
+ @current = elem
170
+ end
171
+
172
+ def endElement(name)
173
+ text
174
+ @current = @current.parentNode
175
+ end
176
+
177
+ def character(data)
178
+ ## if @cdata_f
179
+ @cdata_buf << data
180
+ ## else
181
+ ## cdata = @document.createTextNode(data)
182
+ ## @current.appendChild(cdata)
183
+ ## end
184
+ end
185
+
186
+ def processingInstruction(name, data)
187
+ text
188
+ pi = @document.createProcessingInstruction(name, data)
189
+ @current.appendChild(pi)
190
+ end
191
+
192
+ def externalEntityRef(context, base, systemId, publicId)
193
+ text
194
+ tree = nil
195
+ if @parse_ext
196
+ extp = self.class.new(@document, self, context)
197
+ extp.setBase(base) if base
198
+ file = systemId
199
+ if systemId !~ /^\/|^\.|^http:|^ftp:/ && !base.nil? # /
200
+ file = base + systemId
201
+ end
202
+ begin
203
+ xml = @entityResolver.resolveEntity(nil, file).byteStream.read
204
+ tree = extp.parse(xml, @parse_ext)
205
+ rescue XML::Parser::Error
206
+ raise XML::Parser::Error.new("#{systemId}(#{extp.line}): #{$!}")
207
+ rescue Errno::ENOENT
208
+ raise
209
+ end
210
+ extp.done
211
+ end
212
+ if @createEntityReference
213
+ entref = @document.createEntityReference(context)
214
+ @current.appendChild(entref)
215
+ entref.appendChild(tree) if tree
216
+ else
217
+ @current.appendChild(tree) if tree
218
+ end
219
+ end
220
+
221
+ def startCdata
222
+ return unless @createCDATASection
223
+ text
224
+ @cdata_f = true
225
+ ## @cdata_buf = ''
226
+ end
227
+
228
+ def endCdata
229
+ return unless @createCDATASection
230
+ cdata = @document.createCDATASection(@cdata_buf)
231
+ @current.appendChild(cdata)
232
+ @cdata_buf = ''
233
+ @cdata_f = false
234
+ end
235
+
236
+ def comment(data)
237
+ text
238
+ comment = @document.createComment(data)
239
+ @current.appendChild(comment)
240
+ end
241
+
242
+ def startDoctypeDecl(name, pubid, sysid, internal_subset)
243
+ doctype = @document.implementation.createDocumentType(name,
244
+ pubid, sysid)
245
+ @current.appendChild(doctype)
246
+ end
247
+
248
+ def startNamespaceDecl(prefix, uri)
249
+ qname = 'xmlns'
250
+ if prefix
251
+ qname << ':' + prefix
252
+ end
253
+ attr = @document.createAttributeNS(nil, qname)
254
+ attr.appendChild(@document.createTextNode(uri))
255
+ attr.specified = true
256
+ @nsdecl << attr
257
+ end
258
+
259
+ ## def endNamespaceDecl(prefix, uri)
260
+ ## end
261
+
262
+ ## def defaultHandler(data)
263
+ ## end
264
+
265
+
266
+
267
+ ## [DOM3?]
268
+ def entityResolver; @entityResolver; end
269
+ def entityResolver=(resolver)
270
+ raise ArgumentError, 'invalid value for DOMEntityResolver' unless
271
+ resolver.is_a?(DOMEntityResolver)
272
+ @entityResolver = resolver
273
+ end
274
+
275
+ end
276
+ end
277
+ end