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,94 @@
1
+ ## -*- Ruby -*-
2
+ ## DOMHASH test implementation
3
+ ## 1999 by yoshidam
4
+ ##
5
+ ## Apr 20, 1999 Change for draft-hiroshi-dom-hash-01.txt
6
+ ##
7
+
8
+ require 'xml/dom/core'
9
+ require 'md5'
10
+ require 'uconv'
11
+
12
+ module XML
13
+ module DOM
14
+
15
+ def self.tou16(str)
16
+ Uconv.u16swap(Uconv.u8tou16(str))
17
+ end
18
+
19
+ class Node
20
+ def getDigest(force = false)
21
+ nil
22
+ end
23
+ end
24
+
25
+ class Text
26
+ def getDigest(force = false)
27
+ (!force && @digest) ||
28
+ @digest = MD5.new([TEXT_NODE].pack("N") + DOM.tou16(nodeValue)).digest
29
+ end
30
+ end
31
+
32
+ ## class Comment
33
+ ## def getDigest(force = false)
34
+ ## (!force && @digest) ||
35
+ ## @digest = MD5.new([COMMENT_NODE].pack("N") + DOM.tou16(data)).digest
36
+ ## end
37
+ ## end
38
+
39
+ class ProcessingInstruction
40
+ def getDigest(force = false)
41
+ (!force && @digest) ||
42
+ @digest = MD5.new([PROCESSING_INSTRUCTION_NODE].pack("N") +
43
+ DOM.tou16(target) + "\0\0" + DOM.tou16(data)).digest
44
+ end
45
+ end
46
+
47
+ class Attr
48
+ def getDigest(force = false)
49
+ (!force && @digest) ||
50
+ @digest = MD5.new([ATTRIBUTE_NODE].pack("N") +
51
+ DOM.tou16(nodeName) + "\0\0" + DOM.tou16(nodeValue)).digest
52
+ end
53
+ end
54
+
55
+ class NamedNodeMap
56
+ include Enumerable
57
+ end
58
+
59
+ class NodeList
60
+ include Enumerable
61
+ end
62
+
63
+ class Element
64
+ def getDigest(force = false)
65
+ return @digest if (!force && @digest)
66
+ attr = attributes
67
+ children = childNodes
68
+ attr_digests = ""
69
+ children_digests = ""
70
+ if attr
71
+ attr_array = attr.sort {|a, b|
72
+ DOM.tou16(a.nodeName) <=> DOM.tou16(b.nodeName)}
73
+ attr_array.each {|a|
74
+ attr_digests << a.getDigest(force)
75
+ }
76
+ end
77
+ children_num = 0
78
+ children.each {|c|
79
+ next if c.nodeType == COMMENT_NODE
80
+ children_num += 1
81
+ children_digests << c.getDigest(force)
82
+ }
83
+ @digest = MD5.new([ELEMENT_NODE].pack("N") +
84
+ DOM.tou16(nodeName) +
85
+ "\0\0" +
86
+ [attr.length].pack("N") +
87
+ attr_digests +
88
+ [children_num].pack("N") +
89
+ children_digests).digest
90
+ end
91
+ end
92
+
93
+ end
94
+ end
@@ -0,0 +1,182 @@
1
+ ## -*- Ruby -*-
2
+ ## XML::DOM::Visitor
3
+ ## 1998 by yoshidam
4
+ ##
5
+ ## Oct 23, 1998 yoshidam Fix each
6
+ ##
7
+
8
+
9
+ =begin
10
+ = XML::DOM::Visitor
11
+
12
+ == Module XML
13
+
14
+ =end
15
+ module XML
16
+
17
+ =begin
18
+ == Module XML::DOM (XML::SimpleTree)
19
+
20
+ =end
21
+ module DOM
22
+
23
+ =begin
24
+ == Class XML::DOM::Visitor
25
+
26
+ Skelton class of Visitor.
27
+
28
+ You can override the following methods and implement the other
29
+ "visit_TYPE" methods.
30
+
31
+ You should implement some "visit_name_NAME" methods and
32
+ "method_missing" method for accept_name.
33
+
34
+ =end
35
+ ## Skeleton visitor
36
+ class Visitor
37
+ ## You can override the following methods and implement the other
38
+ ## "visit_TYPE" methods.
39
+ ## You should implement some "visit_name_NAME" methods and
40
+ ## "method_missing" method for accept_name.
41
+
42
+ =begin
43
+ === Methods
44
+
45
+ --- Visitor#visit_Document(grove, *rest)
46
+
47
+ callback method.
48
+ =end
49
+ def visit_Document(grove, *rest)
50
+ grove.children_accept(self, *rest)
51
+ end
52
+
53
+ =begin
54
+ --- Visitor#visit_Element(element, *rest)
55
+
56
+ callback method.
57
+ =end
58
+ def visit_Element(element, *rest)
59
+ element.children_accept(self, *rest)
60
+ end
61
+
62
+ =begin
63
+ --- Visitor#visit_Text(text, *rest)
64
+
65
+ callback method.
66
+ =end
67
+ def visit_Text(text, *rest)
68
+ end
69
+
70
+ =begin
71
+ --- Visitor#visit_CDATASection(text, *rest)
72
+
73
+ callback method.
74
+ =end
75
+ def visit_CDATASection(text, *rest)
76
+ end
77
+
78
+ =begin
79
+ --- Visitor#visit_Comment(comment, *rest)
80
+
81
+ callback method.
82
+ =end
83
+ def visit_Comment(comment, *rest)
84
+ end
85
+
86
+ =begin
87
+ --- Visitor#visit_ProcessingInstruction(pi, *rest)
88
+
89
+ callback method.
90
+ =end
91
+ def visit_ProcessingInstruction(pi, *rest)
92
+ end
93
+
94
+ end
95
+
96
+ =begin
97
+
98
+ == Class XML::DOM::Node
99
+
100
+ XML::Grove::Visitor like interfaces.
101
+ =end
102
+ class Node
103
+
104
+ =begin
105
+ --- Node#accept(visitor, *rest)
106
+
107
+ call back visit_* method.
108
+ =end
109
+ ## XML::Grove::Visitor like interfaces
110
+ def accept(visitor, *rest)
111
+ typename = self.class.to_s.sub(/.*?([^:]+)$/, '\1')
112
+ visitor.send("visit_" + typename, self, *rest)
113
+ end
114
+
115
+ =begin
116
+ --- Node#accept_name(visitor, *rest)
117
+
118
+ call back visit_name_* method.
119
+ =end
120
+ def accept_name(visitor, *rest)
121
+ if nodeType == ELEMENT_NODE
122
+ name_method = "visit_name_" + nodeName
123
+ visitor.send(name_method, self, *rest)
124
+ else
125
+ self.accept(visitor, *rest)
126
+ end
127
+ end
128
+
129
+ =begin
130
+ --- Node#children_accept(visitor, *rest)
131
+
132
+ for each children, call back visit_* methods.
133
+ =end
134
+ def children_accept(visitor, *rest)
135
+ ret = []
136
+ @children && @children.each { |node|
137
+ ret.push(node.accept(visitor, *rest))
138
+ }
139
+ ret
140
+ end
141
+
142
+ =begin
143
+ --- Node#children_accept_name(visitor, *rest)
144
+
145
+ for each children, call back visit_name_* method.
146
+ =end
147
+ def children_accept_name(visitor, *rest)
148
+ ret = []
149
+ @children && @children.each { |node|
150
+ ret.push(node.accept_name(visitor, *rest))
151
+ }
152
+ ret
153
+ end
154
+
155
+ =begin
156
+ --- Node#each
157
+
158
+ iterator interface.
159
+ =end
160
+ ## Iterator interface
161
+ include Enumerable
162
+ def each
163
+ sibstack = []
164
+ siblings = [ self ]
165
+ while true
166
+ if siblings.length == 0
167
+ break if sibstack.length == 0
168
+ siblings = sibstack.pop
169
+ next
170
+ end
171
+ node = siblings.shift
172
+ yield(node)
173
+ children = node.childNodes
174
+ if !children.nil?
175
+ sibstack.push(siblings)
176
+ siblings = children.to_a.dup
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end
182
+ end
@@ -0,0 +1,213 @@
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::Attr
14
+
15
+ === superclass
16
+ Node
17
+
18
+ =end
19
+ class Attr<Node
20
+ ## new(name, [text1, text2, ...]) or
21
+ ## new(name, text1, text2, ...)
22
+ ## name: String
23
+ ## text?: String or Node
24
+
25
+ =begin
26
+ === Class Methods
27
+
28
+ --- Attr.new(name = nil, *text)
29
+
30
+ create a new Attr.
31
+ =end
32
+ def initialize(name, *text)
33
+ super(text)
34
+ raise "parameter error" if !name
35
+ @name = nil
36
+ @prefix = nil
37
+ @localname = nil
38
+ @uri = nil
39
+ @ownerElement = nil
40
+ if name.is_a?(Array)
41
+ ## namespaces
42
+ raise "parameter error" if name.length != 2
43
+ @localname = name[1]
44
+ if name[1].index(':')
45
+ @prefix, @localname = name[1].split(':')
46
+ end
47
+ @name = name[1] ## qualified name
48
+ @uri = name[0] ## namespace URI
49
+ else
50
+ @name = name
51
+ end
52
+ @name.freeze
53
+ @prefix.freeze
54
+ @localname.freeze
55
+ @uri.freeze
56
+ end
57
+
58
+ =begin
59
+ === Methods
60
+
61
+ --- Attr#nodeType()
62
+
63
+ [DOM]
64
+ returns the nodeType.
65
+ =end
66
+ ## [DOM]
67
+ def nodeType
68
+ ATTRIBUTE_NODE
69
+ end
70
+
71
+ =begin
72
+ --- Attr#nodeName()
73
+
74
+ [DOM]
75
+ returns the nodeName.
76
+ =end
77
+ ## [DOM]
78
+ def nodeName
79
+ @name
80
+ end
81
+
82
+ =begin
83
+ --- Attr#nodeValue()
84
+
85
+ [DOM]
86
+ returns the nodeValue.
87
+ =end
88
+ ## [DOM]
89
+ def nodeValue
90
+ ret = ""
91
+ @children.each do |child|
92
+ ret << child.nodeValue
93
+ end if @children
94
+ ret
95
+ end
96
+
97
+ =begin
98
+ --- Attr#nodeValue=(text)
99
+
100
+ [DOM]
101
+ returns the value of this node.
102
+ =end
103
+ ## [DOM]
104
+ def nodeValue=(text)
105
+ self.childNodes = [text]
106
+ end
107
+
108
+ =begin
109
+ --- Attr#to_s()
110
+
111
+ return the string representation of the Attr.
112
+ =end
113
+ def to_s
114
+ value = ""
115
+ nodeValue.scan(/./um) do |c|
116
+ code = c.unpack("U")[0]
117
+ if code == 9 || code == 10 || code == 13
118
+ value << sprintf("&#x%X;", code)
119
+ elsif c == "&"
120
+ value << "&amp;"
121
+ elsif c == "\""
122
+ value << "&quot;"
123
+ elsif c == "<"
124
+ value << "&lt;"
125
+ else
126
+ value << c
127
+ end
128
+ end
129
+ "#{@name}=\"#{value}\""
130
+ end
131
+
132
+ =begin
133
+ --- Attr#dump(depth = 0)
134
+
135
+ dump the Attr.
136
+ =end
137
+ def dump(depth = 0)
138
+ print ' ' * depth * 2
139
+ print "// #{self.to_s}\n"
140
+ end
141
+
142
+ =begin
143
+ --- Attr#cloneNode(deep = true)
144
+
145
+ [DOM]
146
+ returns the copy of the Attr.
147
+ =end
148
+ ## [DOM]
149
+ def cloneNode(deep = true)
150
+ super(deep, @name)
151
+ end
152
+
153
+ =begin
154
+ --- Attr#name()
155
+
156
+ [DOM]
157
+ alias of nodeName.
158
+ =end
159
+ ## [DOM]
160
+ alias name nodeName
161
+
162
+ =begin
163
+ --- Attr#value()
164
+
165
+ alias of nodeValue.
166
+
167
+ --- Attr#value=(value)
168
+
169
+ [DOM]
170
+ alias of nodeValue=.
171
+ =end
172
+ ## [DOM]
173
+ alias value nodeValue
174
+ alias value= nodeValue= ##
175
+
176
+ ## [DOM]
177
+ def specified; @specified; end
178
+ def specified=(is_specified); @specified = is_specified; end
179
+
180
+ ## [DOM2]
181
+ def namespaceURI; @uri; end
182
+
183
+ ## [DOM2]
184
+ def prefix; @prefix; end
185
+
186
+ ## [DOM2]
187
+ def prefix=(prefix);
188
+ ## to be checked
189
+
190
+ @ownerElement.removeAttributeNode(self) if @ownerElement
191
+ @prefix = prefix
192
+ @name = @prefix + ':' + @localname
193
+ @ownerElement.setAttributeNode(self) if @ownerElement
194
+ @prefix.freeze
195
+ @name.freeze
196
+ end
197
+
198
+ ## [DOM2]
199
+ def localname; @localname; end
200
+
201
+ ## [DOM2]
202
+ def ownerElement; @ownerElement; end
203
+ def ownerElement=(elem); @ownerElement = elem; end
204
+
205
+ def _checkNode(node)
206
+ unless node.nodeType == TEXT_NODE ||
207
+ node.nodeType == ENTITY_REFERENCE_NODE
208
+ raise DOMException.new(DOMException::HIERARCHY_REQUEST_ERR)
209
+ end
210
+ end
211
+ end
212
+ end
213
+ end