libxml-jruby-modified 1.0.1-jruby

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/History.txt +4 -0
  3. data/Manifest.txt +91 -0
  4. data/README.txt +50 -0
  5. data/Rakefile +20 -0
  6. data/lib/libxml-jruby/xml/attr.rb +46 -0
  7. data/lib/libxml-jruby/xml/attributes.rb +68 -0
  8. data/lib/libxml-jruby/xml/document.rb +48 -0
  9. data/lib/libxml-jruby/xml/dtd.rb +25 -0
  10. data/lib/libxml-jruby/xml/node.rb +285 -0
  11. data/lib/libxml-jruby/xml/ns.rb +19 -0
  12. data/lib/libxml-jruby/xml/parser.rb +121 -0
  13. data/lib/libxml-jruby/xml/xpath.rb +98 -0
  14. data/lib/libxml-jruby/xml.rb +1 -0
  15. data/lib/libxml-jruby.rb +82 -0
  16. data/lib/libxml.rb +1 -0
  17. data/lib/xml/libxml.rb +8 -0
  18. data/lib/xml.rb +13 -0
  19. data/libxml-jruby-1.0.1-java.gem +0 -0
  20. data/libxml-jruby.gemspec +15 -0
  21. data/script/benchmark/depixelate.rb +633 -0
  22. data/script/benchmark/hamlet.xml +9055 -0
  23. data/script/benchmark/sock_entries.xml +507 -0
  24. data/script/benchmark/throughput.rb +40 -0
  25. data/script/benchmark/xml_benchmarks.rb +228 -0
  26. data/script/test +6 -0
  27. data/tasks/ann.rake +81 -0
  28. data/tasks/bones.rake +21 -0
  29. data/tasks/gem.rake +126 -0
  30. data/tasks/git.rake +41 -0
  31. data/tasks/manifest.rake +49 -0
  32. data/tasks/notes.rake +28 -0
  33. data/tasks/post_load.rake +39 -0
  34. data/tasks/rdoc.rake +51 -0
  35. data/tasks/rubyforge.rake +57 -0
  36. data/tasks/setup.rb +268 -0
  37. data/tasks/spec.rake +55 -0
  38. data/tasks/svn.rake +48 -0
  39. data/tasks/test.rake +38 -0
  40. data/test/etc_doc_to_s.rb +19 -0
  41. data/test/ets_copy_bug.rb +21 -0
  42. data/test/ets_copy_bug3.rb +38 -0
  43. data/test/ets_doc_file.rb +15 -0
  44. data/test/ets_doc_to_s.rb +21 -0
  45. data/test/ets_gpx.rb +26 -0
  46. data/test/ets_node_gc.rb +21 -0
  47. data/test/ets_test.xml +2 -0
  48. data/test/ets_tsr.rb +9 -0
  49. data/test/model/books.xml +147 -0
  50. data/test/model/default_validation_bug.rb +0 -0
  51. data/test/model/merge_bug_data.xml +58 -0
  52. data/test/model/rubynet.xml +78 -0
  53. data/test/model/rubynet_project +1 -0
  54. data/test/model/saxtest.xml +5 -0
  55. data/test/model/shiporder.rnc +28 -0
  56. data/test/model/shiporder.rng +86 -0
  57. data/test/model/shiporder.xml +23 -0
  58. data/test/model/shiporder.xsd +31 -0
  59. data/test/model/simple.xml +7 -0
  60. data/test/model/soap.xml +27 -0
  61. data/test/model/xinclude.xml +5 -0
  62. data/test/tc_attributes.rb +110 -0
  63. data/test/tc_deprecated_require.rb +13 -0
  64. data/test/tc_document.rb +97 -0
  65. data/test/tc_document_write.rb +139 -0
  66. data/test/tc_dtd.rb +70 -0
  67. data/test/tc_html_parser.rb +63 -0
  68. data/test/tc_node.rb +108 -0
  69. data/test/tc_node_attr.rb +176 -0
  70. data/test/tc_node_cdata.rb +51 -0
  71. data/test/tc_node_comment.rb +32 -0
  72. data/test/tc_node_copy.rb +40 -0
  73. data/test/tc_node_edit.rb +98 -0
  74. data/test/tc_node_set.rb +24 -0
  75. data/test/tc_node_set2.rb +37 -0
  76. data/test/tc_node_text.rb +17 -0
  77. data/test/tc_node_xlink.rb +28 -0
  78. data/test/tc_ns.rb +18 -0
  79. data/test/tc_parser.rb +308 -0
  80. data/test/tc_parser_context.rb +126 -0
  81. data/test/tc_properties.rb +37 -0
  82. data/test/tc_reader.rb +112 -0
  83. data/test/tc_relaxng.rb +39 -0
  84. data/test/tc_sax_parser.rb +113 -0
  85. data/test/tc_schema.rb +39 -0
  86. data/test/tc_traversal.rb +220 -0
  87. data/test/tc_well_formed.rb +11 -0
  88. data/test/tc_xinclude.rb +26 -0
  89. data/test/tc_xpath.rb +130 -0
  90. data/test/tc_xpath_context.rb +72 -0
  91. data/test/tc_xpointer.rb +78 -0
  92. data/test/test_libxml-jruby.rb +0 -0
  93. data/test/test_suite.rb +31 -0
  94. data/test/ts_working.rb +31 -0
  95. metadata +135 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7714ecb6e6600cdfb12044930d4c3e9e88e14f6d
4
+ data.tar.gz: 2e6402e19cc79c8e2da3373e42d4c75958e9ee07
5
+ SHA512:
6
+ metadata.gz: c345ede6da0a54010fb37dce1540beb546aeb122da597c28c8ac23c2a65767691488d60de1742825de8cf383b82200c66789e7458f3333cac95d5a30f231c8ec
7
+ data.tar.gz: b4b86e9d31cf49eba7566cc273e745ca3cf965ba5557a5ae7c30358b9979473ea29fc5c63af064210cb1545891495ee82e70bd40abf17b8e6518c14caa336bec
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ == 1.0.0 / 2008-09-20
2
+
3
+ * 1 major enhancement
4
+ * Birthday!
data/Manifest.txt ADDED
@@ -0,0 +1,91 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ lib/libxml-jruby.rb
6
+ lib/libxml-jruby/xml.rb
7
+ lib/libxml-jruby/xml/attr.rb
8
+ lib/libxml-jruby/xml/attributes.rb
9
+ lib/libxml-jruby/xml/document.rb
10
+ lib/libxml-jruby/xml/dtd.rb
11
+ lib/libxml-jruby/xml/node.rb
12
+ lib/libxml-jruby/xml/ns.rb
13
+ lib/libxml-jruby/xml/parser.rb
14
+ lib/libxml-jruby/xml/xpath.rb
15
+ lib/libxml.rb
16
+ lib/xml.rb
17
+ lib/xml/libxml.rb
18
+ script/benchmark/depixelate.rb
19
+ script/benchmark/hamlet.xml
20
+ script/benchmark/sock_entries.xml
21
+ script/benchmark/throughput.rb
22
+ script/benchmark/xml_benchmarks.rb
23
+ script/test
24
+ tasks/ann.rake
25
+ tasks/bones.rake
26
+ tasks/gem.rake
27
+ tasks/git.rake
28
+ tasks/manifest.rake
29
+ tasks/notes.rake
30
+ tasks/post_load.rake
31
+ tasks/rdoc.rake
32
+ tasks/rubyforge.rake
33
+ tasks/setup.rb
34
+ tasks/spec.rake
35
+ tasks/svn.rake
36
+ tasks/test.rake
37
+ test/etc_doc_to_s.rb
38
+ test/ets_copy_bug.rb
39
+ test/ets_copy_bug3.rb
40
+ test/ets_doc_file.rb
41
+ test/ets_doc_to_s.rb
42
+ test/ets_gpx.rb
43
+ test/ets_node_gc.rb
44
+ test/ets_test.xml
45
+ test/ets_tsr.rb
46
+ test/model/books.xml
47
+ test/model/default_validation_bug.rb
48
+ test/model/merge_bug_data.xml
49
+ test/model/rubynet.xml
50
+ test/model/rubynet_project
51
+ test/model/saxtest.xml
52
+ test/model/shiporder.rnc
53
+ test/model/shiporder.rng
54
+ test/model/shiporder.xml
55
+ test/model/shiporder.xsd
56
+ test/model/simple.xml
57
+ test/model/soap.xml
58
+ test/model/xinclude.xml
59
+ test/tc_attributes.rb
60
+ test/tc_deprecated_require.rb
61
+ test/tc_document.rb
62
+ test/tc_document_write.rb
63
+ test/tc_dtd.rb
64
+ test/tc_html_parser.rb
65
+ test/tc_node.rb
66
+ test/tc_node_attr.rb
67
+ test/tc_node_cdata.rb
68
+ test/tc_node_comment.rb
69
+ test/tc_node_copy.rb
70
+ test/tc_node_edit.rb
71
+ test/tc_node_set.rb
72
+ test/tc_node_set2.rb
73
+ test/tc_node_text.rb
74
+ test/tc_node_xlink.rb
75
+ test/tc_ns.rb
76
+ test/tc_parser.rb
77
+ test/tc_parser_context.rb
78
+ test/tc_properties.rb
79
+ test/tc_reader.rb
80
+ test/tc_relaxng.rb
81
+ test/tc_sax_parser.rb
82
+ test/tc_schema.rb
83
+ test/tc_traversal.rb
84
+ test/tc_well_formed.rb
85
+ test/tc_xinclude.rb
86
+ test/tc_xpath.rb
87
+ test/tc_xpath_context.rb
88
+ test/tc_xpointer.rb
89
+ test/test_libxml-jruby.rb
90
+ test/test_suite.rb
91
+ test/ts_working.rb
data/README.txt ADDED
@@ -0,0 +1,50 @@
1
+ libxml-jruby
2
+ by Michael Guterl
3
+ http://diminishing.org
4
+
5
+ == DESCRIPTION:
6
+
7
+ LibXMLJRuby is a LibXMLRuby compatibility layer that mimcs the LibXMLRuby
8
+ interface as closely as possible. LibXMLJRuby does not use libxml at all
9
+ it just delegates the methods to the appropriate underlying Java class.
10
+
11
+ == FEATURES/PROBLEMS:
12
+
13
+ * FIXME (list of features or problems)
14
+
15
+ == SYNOPSIS:
16
+
17
+ FIXME (code sample of usage)
18
+
19
+ == REQUIREMENTS:
20
+
21
+ * FIXME (list of requirements)
22
+
23
+ == INSTALL:
24
+
25
+ jruby -S gem install dylanvaughn-libxml-jruby --source=http://gems.github.com
26
+
27
+ == LICENSE:
28
+
29
+ (The MIT License)
30
+
31
+ Copyright (c) 2008 FIXME (different license?)
32
+
33
+ Permission is hereby granted, free of charge, to any person obtaining
34
+ a copy of this software and associated documentation files (the
35
+ 'Software'), to deal in the Software without restriction, including
36
+ without limitation the rights to use, copy, modify, merge, publish,
37
+ distribute, sublicense, and/or sell copies of the Software, and to
38
+ permit persons to whom the Software is furnished to do so, subject to
39
+ the following conditions:
40
+
41
+ The above copyright notice and this permission notice shall be
42
+ included in all copies or substantial portions of the Software.
43
+
44
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
45
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
46
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
47
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
48
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
49
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
50
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ # Look in the tasks/setup.rb file for the various options that can be
2
+ # configured in this Rakefile. The .rake files in the tasks directory
3
+ # are where the options are used.
4
+
5
+ load 'tasks/setup.rb'
6
+
7
+ ensure_in_path 'lib'
8
+ require 'libxml-jruby'
9
+
10
+ task :default => 'spec:run'
11
+
12
+ PROJ.name = 'libxml-jruby'
13
+ PROJ.authors = 'Michael Guterl'
14
+ PROJ.email = 'mguterl@gmail.com'
15
+ PROJ.url = 'FIXME (project homepage)'
16
+ PROJ.rubyforge.name = 'libxml-jruby'
17
+
18
+ PROJ.spec.opts << '--color'
19
+
20
+ # EOF
@@ -0,0 +1,46 @@
1
+ module LibXMLJRuby
2
+ module XML
3
+ class Attr < Node
4
+ class << self
5
+ def from_java(java_obj)
6
+ return nil unless java_obj
7
+ a = allocate
8
+ a.java_obj = java_obj
9
+ a
10
+ end
11
+ end
12
+
13
+ attr_accessor :java_obj
14
+
15
+ def initialize(node, name, value, ns = nil)
16
+ self.java_obj = node.java_obj
17
+ java_obj.set_attribute(name, value)
18
+ end
19
+
20
+ def remove!
21
+ java_obj.owner_element.remove_attribute(name)
22
+ end
23
+
24
+ def parent?
25
+ !!parent
26
+ end
27
+
28
+ def parent
29
+ XML::Node.from_java(java_obj.owner_element)
30
+ end
31
+
32
+ def name
33
+ java_obj.respond_to?(:name) ? java_obj.name : java_obj.node_name
34
+ end
35
+
36
+ def value
37
+ java_obj.value
38
+ end
39
+
40
+ def value=(value)
41
+ raise TypeError if value.nil?
42
+ java_obj.value = value
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,68 @@
1
+ module LibXMLJRuby
2
+ module XML
3
+ class Attributes
4
+ include Enumerable
5
+
6
+ class << self
7
+ def from_java(java_obj)
8
+ attrs = XML::Attributes.new
9
+ attrs.java_obj = java_obj
10
+ attrs
11
+ end
12
+ end
13
+
14
+ attr_accessor :java_obj
15
+
16
+ def initialize
17
+ @attribute_cache = {}
18
+ end
19
+
20
+ def each
21
+ i = 0
22
+ while(i < length)
23
+ yield get_attribute(java_obj.attributes.item(i).name)
24
+ i += 1
25
+ end
26
+ end
27
+
28
+ def length
29
+ java_obj.attributes.length
30
+ end
31
+
32
+ def [](name)
33
+ attr = get_attribute(name)
34
+ attr ? attr.value : nil
35
+ end
36
+
37
+ def []=(name, value)
38
+ attr = get_attribute(name)
39
+ if attr
40
+ attr.value = value
41
+ else
42
+ java_obj.setAttribute(name.to_s, value.to_s)
43
+ end
44
+ end
45
+
46
+ def get_attribute_ns(name, ns)
47
+ attr = java_obj.get_attribute_node_ns(name, ns)
48
+ attr ? nil : XML::Attr.from_java(attr)
49
+ end
50
+
51
+ def get_attribute(name)
52
+ if @attribute_cache[name.to_s]
53
+ @attribute_cache[name.to_s]
54
+ elsif java_obj && java_obj.attributes
55
+ attr = java_obj.attributes.get_named_item(name.to_s)
56
+ if attr
57
+ @attribute_cache[name.to_s] = XML::Attr.from_java(attr)
58
+ @attribute_cache[name.to_s]
59
+ else
60
+ nil
61
+ end
62
+ else
63
+ nil
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,48 @@
1
+ module LibXMLJRuby
2
+ module XML
3
+ class Document
4
+ class << self
5
+ def file(filename)
6
+ XML::Parser.file(filename).parse
7
+ end
8
+
9
+ def from_java(java_obj)
10
+ d = new
11
+ d.java_obj = java_obj
12
+ d
13
+ end
14
+ end
15
+
16
+ attr_accessor :java_obj # org.w3c.dom.Document
17
+
18
+ def initialize(xml_version = 1.0)
19
+ @xml_version = xml_version
20
+ @xpath_cache = {}
21
+ end
22
+
23
+ def validate(dtd)
24
+ dtd.validate(self)
25
+ end
26
+
27
+ def find(expr, nslist = nil)
28
+ @xpath_cache[[expr, nslist]] ||= XML::XPath::Object.new(expr, self, nslist)
29
+ end
30
+
31
+ def find_first(expr, nslist = nil)
32
+ find(expr, nslist).first
33
+ end
34
+
35
+ def child?
36
+ java_obj.hasChildNodes
37
+ end
38
+
39
+ def parent?
40
+ !!java_obj.parent_node
41
+ end
42
+
43
+ def root
44
+ @root ||= Node.from_java(java_obj.document_element)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,25 @@
1
+ module LibXMLJRuby
2
+ module XML
3
+ class Dtd
4
+ def initialize(schema)
5
+ @schema = schema
6
+ end
7
+
8
+ def validate(doc)
9
+ validator.validate(doc)
10
+ end
11
+
12
+ def schema_factory
13
+ SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema")
14
+ end
15
+
16
+ def schema
17
+ schema = schema_factory.newSchema(StreamSource.new(ByteArrayInputStream.new(@schema.to_java_bytes)))
18
+ end
19
+
20
+ def validator
21
+ schema.newValidator
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,285 @@
1
+ module LibXMLJRuby
2
+ module XML
3
+ class Node
4
+ ATTRIBUTE_NODE = org.w3c.dom.Node.ATTRIBUTE_NODE
5
+ CDATA_SECTION_NODE = org.w3c.dom.Node.CDATA_SECTION_NODE
6
+ COMMENT_NODE = org.w3c.dom.Node.COMMENT_NODE
7
+ DOCUMENT_FRAG_NODE = org.w3c.dom.Node.DOCUMENT_FRAGMENT_NODE
8
+ DOCUMENT_NODE = org.w3c.dom.Node.DOCUMENT_NODE
9
+ DOCUMENT_TYPE_NODE = org.w3c.dom.Node.DOCUMENT_TYPE_NODE
10
+ ELEMENT_NODE = org.w3c.dom.Node.ELEMENT_NODE
11
+ ENTITY_NODE = org.w3c.dom.Node.ENTITY_NODE
12
+ ENTITY_REFERENCE_NODE = org.w3c.dom.Node.ENTITY_REFERENCE_NODE
13
+ NOTATION_NODE = org.w3c.dom.Node.NOTATION_NODE
14
+ PROCESSING_INSTRUCTION_NODE = org.w3c.dom.Node.PROCESSING_INSTRUCTION_NODE
15
+ TEXT_NODE = org.w3c.dom.Node.TEXT_NODE
16
+
17
+ class << self
18
+ def from_java(java_obj)
19
+ return nil if java_obj.nil?
20
+ n = allocate
21
+ n.java_obj = java_obj
22
+ n
23
+ end
24
+ end
25
+
26
+ include Enumerable
27
+
28
+ attr_accessor :java_obj # org.w3c.dom.Element(Node?)
29
+
30
+ def initialize(name, content = nil)
31
+ jdoc = DocumentBuilderFactory.new_instance.new_document_builder.new_document
32
+ self.java_obj = jdoc.createElement(name)
33
+ self.content = content
34
+ end
35
+
36
+ def name
37
+ java_obj.node_name ||= @name
38
+ end
39
+
40
+ def content
41
+ java_obj.text_content ||= @content
42
+ end
43
+
44
+ def name=(name)
45
+ @name = name
46
+ java_obj.node_name = @name if @name
47
+ end
48
+
49
+ def base
50
+ b = java_obj.getAttributeNS('xml', 'base')
51
+ b.empty? ? nil : b
52
+ end
53
+
54
+ def content=(content)
55
+ @content = content
56
+ java_obj.node_value = @value if @value
57
+ end
58
+
59
+ def child_add(node)
60
+ java_obj.getOwnerDocument.adoptNode(node.java_obj)
61
+ java_obj.appendChild(node.java_obj) # should this be importNode?
62
+ end
63
+
64
+ def copy(deep = false)
65
+ XML::Node.from_java(java_obj.cloneNode(deep))
66
+ end
67
+
68
+ def <<(node)
69
+
70
+ end
71
+
72
+ def each(&block)
73
+ children.each(&block)
74
+ end
75
+
76
+ def each_element
77
+ if block_given?
78
+ each do |node|
79
+ yield(node) if node.node_type == ELEMENT_NODE
80
+ end
81
+ else
82
+ select do |node|
83
+ node.node_type == org.w3c.dom.Node.ELEMENT_NODE
84
+ end
85
+ end
86
+ end
87
+
88
+ def find(expr)
89
+ XML::XPath::Object.new(expr, java_obj)
90
+ end
91
+
92
+ def find_first(expr)
93
+ raise TypeError if java_obj.nil?
94
+ find(expr).first
95
+ end
96
+
97
+ def node_type
98
+ java_obj.node_type
99
+ end
100
+
101
+ def node_type_name
102
+ case node_type
103
+ # Most common choices first
104
+ when ATTRIBUTE_NODE
105
+ 'attribute'
106
+ when DOCUMENT_NODE
107
+ 'document_xml'
108
+ when ELEMENT_NODE
109
+ 'element'
110
+ when TEXT_NODE
111
+ 'text'
112
+
113
+ # Now the rest
114
+ when ATTRIBUTE_DECL
115
+ 'attribute_decl'
116
+ when CDATA_SECTION_NODE
117
+ 'cdata'
118
+ when COMMENT_NODE
119
+ 'comment'
120
+ when DOCB_DOCUMENT_NODE
121
+ 'document_docbook'
122
+ when DOCUMENT_FRAG_NODE
123
+ 'fragment'
124
+ when DOCUMENT_TYPE_NODE
125
+ 'doctype'
126
+ when DTD_NODE
127
+ 'dtd'
128
+ when ELEMENT_DECL
129
+ 'elem_decl'
130
+ when ENTITY_DECL
131
+ 'entity_decl'
132
+ when ENTITY_NODE
133
+ 'entity'
134
+ when ENTITY_REF_NODE
135
+ 'entity_ref'
136
+ when HTML_DOCUMENT_NODE
137
+ 'document_html'
138
+ when NAMESPACE_DECL
139
+ 'namespace'
140
+ when NOTATION_NODE
141
+ 'notation'
142
+ when PI_NODE
143
+ 'pi'
144
+ when XINCLUDE_START
145
+ 'xinclude_start'
146
+ when XINCLUDE_END
147
+ 'xinclude_end'
148
+ else
149
+ raise(UnknownType, "Unknown node type: %n", node.node_type);
150
+ end
151
+ end
152
+
153
+ def first
154
+ child
155
+ end
156
+
157
+ def children
158
+ @children ||= XML::Node::Set.from_java(java_obj.getChildNodes).to_a
159
+ end
160
+
161
+ def child?
162
+ !!child
163
+ end
164
+
165
+ def prev?
166
+ !!prev
167
+ end
168
+
169
+ def next?
170
+ !!self.next
171
+ end
172
+
173
+ def parent?
174
+ !!parent
175
+ end
176
+
177
+ def parent
178
+ @parent ||= XML::Node.from_java(java_obj.parent_node)
179
+ end
180
+
181
+ def prev
182
+ @prev ||= XML::Node.from_java(java_obj.previous_sibling)
183
+ end
184
+
185
+ def last
186
+ @last ||= XML::Node.from_java(java_obj.last_child)
187
+ end
188
+
189
+ def child
190
+ @child ||= XML::Node.from_java(java_obj.first_child)
191
+ end
192
+
193
+ def next
194
+ @next ||= XML::Node.from_java(java_obj.next_sibling)
195
+ end
196
+
197
+ def attributes
198
+ @attributes ||= XML::Attributes.from_java(java_obj)
199
+ end
200
+
201
+ def [](name)
202
+ attributes[name]
203
+ end
204
+
205
+ def []=(name, value)
206
+ attributes[name] = value
207
+ end
208
+
209
+ def ==(other)
210
+ eql?(other)
211
+ end
212
+
213
+ def eql?(other)
214
+ return false if other.nil?
215
+ raise TypeError unless self.class === other
216
+ (java_obj.eql?(other.java_obj) || self.to_s == other.to_s)
217
+ end
218
+
219
+ def equal?(other)
220
+ self.class === other && java_obj.equal?(other.java_obj)
221
+ end
222
+
223
+ def doc
224
+ @doc ||= XML::Document.from_java(java_obj.owner_document)
225
+ end
226
+
227
+ def to_s
228
+ transformer = TransformerFactory.newInstance.newTransformer
229
+ result = StreamResult.new(StringWriter.new)
230
+ source = DOMSource.new(java_obj)
231
+ transformer.transform(source, result)
232
+ result.getWriter.toString
233
+ end
234
+
235
+ def document?
236
+ doc == self
237
+ end
238
+
239
+ alias :properties :attributes
240
+
241
+ class Set
242
+ class << self
243
+ def from_java(java_obj)
244
+ s = new
245
+ s.java_obj = java_obj
246
+ s
247
+ end
248
+ end
249
+
250
+ include Enumerable
251
+
252
+ attr_accessor :java_obj
253
+
254
+ def initialize
255
+ @java_obj = java_obj
256
+ @node_cache = {}
257
+ end
258
+
259
+ def length
260
+ java_obj.length
261
+ end
262
+
263
+ def empty?
264
+ java_obj.length < 1
265
+ end
266
+
267
+ def [](index)
268
+ @node_cache[index] ||= XML::Node.from_java(java_obj.item(index))
269
+ end
270
+
271
+ def first
272
+ self[0]
273
+ end
274
+
275
+ def each
276
+ i = 0
277
+ while(i < java_obj.length)
278
+ yield self[i]
279
+ i += 1
280
+ end
281
+ end
282
+ end
283
+ end
284
+ end
285
+ end
@@ -0,0 +1,19 @@
1
+ module LibXMLJRuby
2
+ module XML
3
+ class NS
4
+ class << self
5
+ def from_java(java_obj)
6
+
7
+ end
8
+ end
9
+
10
+ def initialize(node, href, prefix)
11
+ @node, @href, @prefix = node, href, prefix
12
+ end
13
+
14
+ attr_reader :href, :prefix
15
+ def href?; !!href; end
16
+ def prefix?; !!prefix; end
17
+ end
18
+ end
19
+ end