nokogiri 1.4.3.1-java → 1.5.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.
Files changed (231) hide show
  1. data/.gemtest +0 -0
  2. data/CHANGELOG.ja.rdoc +113 -0
  3. data/CHANGELOG.rdoc +113 -1
  4. data/Manifest.txt +72 -68
  5. data/README.ja.rdoc +4 -4
  6. data/README.rdoc +31 -7
  7. data/Rakefile +110 -132
  8. data/bin/nokogiri +7 -3
  9. data/ext/java/nokogiri/EncodingHandler.java +124 -0
  10. data/ext/java/nokogiri/HtmlDocument.java +119 -0
  11. data/ext/java/nokogiri/HtmlElementDescription.java +145 -0
  12. data/ext/java/nokogiri/HtmlEntityLookup.java +79 -0
  13. data/ext/java/nokogiri/HtmlSaxParserContext.java +259 -0
  14. data/ext/java/nokogiri/NokogiriService.java +590 -0
  15. data/ext/java/nokogiri/XmlAttr.java +180 -0
  16. data/ext/java/nokogiri/XmlAttributeDecl.java +130 -0
  17. data/ext/java/nokogiri/XmlCdata.java +84 -0
  18. data/ext/java/nokogiri/XmlComment.java +86 -0
  19. data/ext/java/nokogiri/XmlDocument.java +519 -0
  20. data/ext/java/nokogiri/XmlDocumentFragment.java +223 -0
  21. data/ext/java/nokogiri/XmlDtd.java +469 -0
  22. data/ext/java/nokogiri/XmlElement.java +195 -0
  23. data/ext/java/nokogiri/XmlElementContent.java +382 -0
  24. data/ext/java/nokogiri/XmlElementDecl.java +152 -0
  25. data/ext/java/nokogiri/XmlEntityDecl.java +162 -0
  26. data/ext/java/nokogiri/XmlEntityReference.java +97 -0
  27. data/ext/java/nokogiri/XmlNamespace.java +183 -0
  28. data/ext/java/nokogiri/XmlNode.java +1378 -0
  29. data/ext/java/nokogiri/XmlNodeSet.java +267 -0
  30. data/ext/java/nokogiri/XmlProcessingInstruction.java +99 -0
  31. data/ext/java/nokogiri/XmlReader.java +408 -0
  32. data/ext/java/nokogiri/XmlRelaxng.java +144 -0
  33. data/ext/java/nokogiri/XmlSaxParserContext.java +367 -0
  34. data/ext/java/nokogiri/XmlSaxPushParser.java +184 -0
  35. data/ext/java/nokogiri/XmlSchema.java +324 -0
  36. data/ext/java/nokogiri/XmlSyntaxError.java +119 -0
  37. data/ext/java/nokogiri/XmlText.java +119 -0
  38. data/ext/java/nokogiri/XmlXpathContext.java +199 -0
  39. data/ext/java/nokogiri/XsltStylesheet.java +197 -0
  40. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +204 -0
  41. data/ext/java/nokogiri/internals/NokogiriDocumentCache.java +73 -0
  42. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +86 -0
  43. data/ext/java/nokogiri/internals/NokogiriHandler.java +327 -0
  44. data/ext/java/nokogiri/internals/NokogiriHelpers.java +639 -0
  45. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +167 -0
  46. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +130 -0
  47. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +74 -0
  48. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +121 -0
  49. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +79 -0
  50. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +141 -0
  51. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +73 -0
  52. data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +67 -0
  53. data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +86 -0
  54. data/ext/java/nokogiri/internals/ParserContext.java +276 -0
  55. data/ext/java/nokogiri/internals/PushInputStream.java +411 -0
  56. data/ext/java/nokogiri/internals/ReaderNode.java +531 -0
  57. data/ext/java/nokogiri/internals/SaveContextVisitor.java +567 -0
  58. data/ext/java/nokogiri/internals/SchemaErrorHandler.java +76 -0
  59. data/ext/java/nokogiri/internals/XmlDeclHandler.java +42 -0
  60. data/ext/java/nokogiri/internals/XmlDomParser.java +76 -0
  61. data/ext/java/nokogiri/internals/XmlDomParserContext.java +244 -0
  62. data/ext/java/nokogiri/internals/XmlSaxParser.java +65 -0
  63. data/ext/java/nokogiri/internals/XsltExtensionFunction.java +72 -0
  64. data/ext/nokogiri/depend +358 -32
  65. data/ext/nokogiri/extconf.rb +10 -6
  66. data/ext/nokogiri/nokogiri.c +23 -3
  67. data/ext/nokogiri/nokogiri.h +7 -2
  68. data/ext/nokogiri/xml_document.c +9 -0
  69. data/ext/nokogiri/xml_dtd.c +2 -2
  70. data/ext/nokogiri/xml_io.c +32 -7
  71. data/ext/nokogiri/xml_node.c +45 -25
  72. data/ext/nokogiri/xml_node_set.c +1 -1
  73. data/ext/nokogiri/xml_relax_ng.c +0 -7
  74. data/ext/nokogiri/xml_sax_parser.c +14 -7
  75. data/ext/nokogiri/xml_sax_parser_context.c +40 -0
  76. data/ext/nokogiri/xml_xpath_context.c +33 -2
  77. data/ext/nokogiri/xslt_stylesheet.c +128 -6
  78. data/lib/isorelax.jar +0 -0
  79. data/lib/jing.jar +0 -0
  80. data/lib/nekodtd.jar +0 -0
  81. data/lib/nekohtml.jar +0 -0
  82. data/lib/nokogiri/css/parser.rb +665 -70
  83. data/lib/nokogiri/css/parser.y +3 -1
  84. data/lib/nokogiri/css/parser_extras.rb +91 -0
  85. data/lib/nokogiri/css/tokenizer.rb +148 -3
  86. data/lib/nokogiri/css/tokenizer.rex +1 -1
  87. data/lib/nokogiri/css/xpath_visitor.rb +15 -7
  88. data/lib/nokogiri/css.rb +5 -3
  89. data/lib/nokogiri/decorators/slop.rb +5 -3
  90. data/lib/nokogiri/html/document.rb +142 -19
  91. data/lib/nokogiri/html/document_fragment.rb +19 -17
  92. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  93. data/lib/nokogiri/html/sax/parser.rb +6 -2
  94. data/lib/nokogiri/html.rb +1 -0
  95. data/lib/nokogiri/nokogiri.jar +0 -0
  96. data/lib/nokogiri/version.rb +76 -26
  97. data/lib/nokogiri/xml/attribute_decl.rb +1 -1
  98. data/lib/nokogiri/xml/builder.rb +7 -0
  99. data/lib/nokogiri/xml/document.rb +43 -2
  100. data/lib/nokogiri/xml/document_fragment.rb +16 -2
  101. data/lib/nokogiri/xml/dtd.rb +12 -1
  102. data/lib/nokogiri/xml/element_decl.rb +1 -1
  103. data/lib/nokogiri/xml/entity_decl.rb +1 -1
  104. data/lib/nokogiri/xml/node/save_options.rb +20 -1
  105. data/lib/nokogiri/xml/node.rb +198 -78
  106. data/lib/nokogiri/xml/node_set.rb +10 -3
  107. data/lib/nokogiri/xml/parse_options.rb +8 -0
  108. data/lib/nokogiri/xml/reader.rb +42 -6
  109. data/lib/nokogiri/xml/sax/document.rb +4 -2
  110. data/lib/nokogiri/xml/schema.rb +7 -1
  111. data/lib/nokogiri/xslt/stylesheet.rb +1 -1
  112. data/lib/nokogiri/xslt.rb +9 -5
  113. data/lib/nokogiri.rb +19 -25
  114. data/lib/xercesImpl.jar +0 -0
  115. data/nokogiri_help_responses.md +40 -0
  116. data/tasks/cross_compile.rb +130 -136
  117. data/tasks/nokogiri.org.rb +18 -0
  118. data/tasks/test.rb +2 -2
  119. data/test/css/test_parser.rb +29 -18
  120. data/test/css/test_tokenizer.rb +8 -0
  121. data/test/decorators/test_slop.rb +16 -0
  122. data/test/files/encoding.html +82 -0
  123. data/test/files/encoding.xhtml +84 -0
  124. data/test/files/metacharset.html +10 -0
  125. data/test/files/noencoding.html +47 -0
  126. data/test/helper.rb +5 -1
  127. data/test/html/sax/test_parser.rb +65 -3
  128. data/test/html/test_document.rb +75 -1
  129. data/test/html/test_document_encoding.rb +61 -0
  130. data/test/html/test_document_fragment.rb +50 -5
  131. data/test/html/test_element_description.rb +4 -2
  132. data/test/html/test_node.rb +9 -0
  133. data/test/test_memory_leak.rb +20 -35
  134. data/test/test_nokogiri.rb +14 -20
  135. data/test/test_reader.rb +23 -6
  136. data/test/test_xslt_transforms.rb +6 -2
  137. data/test/xml/node/test_save_options.rb +10 -2
  138. data/test/xml/sax/test_parser.rb +39 -8
  139. data/test/xml/sax/test_parser_context.rb +50 -0
  140. data/test/xml/sax/test_push_parser.rb +18 -1
  141. data/test/xml/test_attribute_decl.rb +7 -3
  142. data/test/xml/test_builder.rb +17 -0
  143. data/test/xml/test_document.rb +34 -5
  144. data/test/xml/test_document_fragment.rb +14 -2
  145. data/test/xml/test_dtd.rb +28 -3
  146. data/test/xml/test_element_content.rb +1 -1
  147. data/test/xml/test_element_decl.rb +1 -1
  148. data/test/xml/test_entity_decl.rb +12 -10
  149. data/test/xml/test_namespace.rb +7 -5
  150. data/test/xml/test_node.rb +65 -13
  151. data/test/xml/test_node_reparenting.rb +72 -31
  152. data/test/xml/test_node_set.rb +57 -0
  153. data/test/xml/test_schema.rb +5 -0
  154. data/test/xml/test_xpath.rb +32 -0
  155. data/test/xslt/test_custom_functions.rb +94 -0
  156. data/test/xslt/test_exception_handling.rb +37 -0
  157. metadata +512 -517
  158. data/deps.rip +0 -5
  159. data/ext/nokogiri/libcharset-1.dll +0 -0
  160. data/ext/nokogiri/libexslt.dll +0 -0
  161. data/ext/nokogiri/libiconv-2.dll +0 -0
  162. data/ext/nokogiri/libxml2.dll +0 -0
  163. data/ext/nokogiri/libxslt.dll +0 -0
  164. data/ext/nokogiri/zlib1.dll +0 -0
  165. data/lib/nokogiri/css/generated_parser.rb +0 -676
  166. data/lib/nokogiri/css/generated_tokenizer.rb +0 -146
  167. data/lib/nokogiri/ffi/encoding_handler.rb +0 -42
  168. data/lib/nokogiri/ffi/html/document.rb +0 -28
  169. data/lib/nokogiri/ffi/html/element_description.rb +0 -81
  170. data/lib/nokogiri/ffi/html/entity_lookup.rb +0 -16
  171. data/lib/nokogiri/ffi/html/sax/parser_context.rb +0 -38
  172. data/lib/nokogiri/ffi/io_callbacks.rb +0 -42
  173. data/lib/nokogiri/ffi/libxml.rb +0 -411
  174. data/lib/nokogiri/ffi/structs/common_node.rb +0 -38
  175. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +0 -24
  176. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +0 -13
  177. data/lib/nokogiri/ffi/structs/xml_alloc.rb +0 -16
  178. data/lib/nokogiri/ffi/structs/xml_attr.rb +0 -19
  179. data/lib/nokogiri/ffi/structs/xml_attribute.rb +0 -27
  180. data/lib/nokogiri/ffi/structs/xml_buffer.rb +0 -16
  181. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +0 -11
  182. data/lib/nokogiri/ffi/structs/xml_document.rb +0 -117
  183. data/lib/nokogiri/ffi/structs/xml_dtd.rb +0 -28
  184. data/lib/nokogiri/ffi/structs/xml_element.rb +0 -26
  185. data/lib/nokogiri/ffi/structs/xml_element_content.rb +0 -17
  186. data/lib/nokogiri/ffi/structs/xml_entity.rb +0 -32
  187. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +0 -12
  188. data/lib/nokogiri/ffi/structs/xml_node.rb +0 -28
  189. data/lib/nokogiri/ffi/structs/xml_node_set.rb +0 -53
  190. data/lib/nokogiri/ffi/structs/xml_notation.rb +0 -11
  191. data/lib/nokogiri/ffi/structs/xml_ns.rb +0 -15
  192. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +0 -19
  193. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +0 -14
  194. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +0 -51
  195. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +0 -124
  196. data/lib/nokogiri/ffi/structs/xml_schema.rb +0 -13
  197. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +0 -31
  198. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +0 -12
  199. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +0 -38
  200. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +0 -35
  201. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +0 -20
  202. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +0 -13
  203. data/lib/nokogiri/ffi/weak_bucket.rb +0 -40
  204. data/lib/nokogiri/ffi/xml/attr.rb +0 -41
  205. data/lib/nokogiri/ffi/xml/attribute_decl.rb +0 -27
  206. data/lib/nokogiri/ffi/xml/cdata.rb +0 -19
  207. data/lib/nokogiri/ffi/xml/comment.rb +0 -18
  208. data/lib/nokogiri/ffi/xml/document.rb +0 -166
  209. data/lib/nokogiri/ffi/xml/document_fragment.rb +0 -21
  210. data/lib/nokogiri/ffi/xml/dtd.rb +0 -67
  211. data/lib/nokogiri/ffi/xml/element_content.rb +0 -43
  212. data/lib/nokogiri/ffi/xml/element_decl.rb +0 -19
  213. data/lib/nokogiri/ffi/xml/entity_decl.rb +0 -36
  214. data/lib/nokogiri/ffi/xml/entity_reference.rb +0 -19
  215. data/lib/nokogiri/ffi/xml/namespace.rb +0 -44
  216. data/lib/nokogiri/ffi/xml/node.rb +0 -554
  217. data/lib/nokogiri/ffi/xml/node_set.rb +0 -149
  218. data/lib/nokogiri/ffi/xml/processing_instruction.rb +0 -20
  219. data/lib/nokogiri/ffi/xml/reader.rb +0 -236
  220. data/lib/nokogiri/ffi/xml/relax_ng.rb +0 -85
  221. data/lib/nokogiri/ffi/xml/sax/parser.rb +0 -135
  222. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +0 -67
  223. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +0 -51
  224. data/lib/nokogiri/ffi/xml/schema.rb +0 -109
  225. data/lib/nokogiri/ffi/xml/syntax_error.rb +0 -98
  226. data/lib/nokogiri/ffi/xml/text.rb +0 -18
  227. data/lib/nokogiri/ffi/xml/xpath.rb +0 -9
  228. data/lib/nokogiri/ffi/xml/xpath_context.rb +0 -148
  229. data/lib/nokogiri/ffi/xslt/stylesheet.rb +0 -53
  230. data/lib/nokogiri/version_warning.rb +0 -14
  231. data/test/ffi/test_document.rb +0 -35
@@ -1,35 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
-
4
- class XmlXpathObject < FFI::ManagedStruct # :nodoc:
5
-
6
- XPATH_UNDEFINED = 0
7
- XPATH_NODESET = 1
8
- XPATH_BOOLEAN = 2
9
- XPATH_NUMBER = 3
10
- XPATH_STRING = 4
11
- XPATH_POINT = 5
12
- XPATH_RANGE = 6
13
- XPATH_LOCATIONSET = 7
14
- XPATH_USERS = 8
15
- XPATH_XSLT_TREE = 9
16
-
17
- layout(
18
- :type, :int,
19
- :nodesetval, :pointer,
20
- :boolval, :int,
21
- :floatval, :double,
22
- :stringval, :string,
23
- :user, :pointer,
24
- :index, :int,
25
- :user2, :pointer,
26
- :index2, :int
27
- )
28
-
29
- def self.release ptr
30
- LibXML.xmlXPathFreeNodeSetList(ptr) # despite the name, this frees the xpath but not the contained node set
31
- end
32
- end
33
-
34
- end
35
- end
@@ -1,20 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
-
4
- class XmlXpathParserContext < FFI::Struct # :nodoc:
5
-
6
- layout(
7
- :cur, :pointer,
8
- :base, :pointer,
9
- :error, :int,
10
- :context, :pointer
11
- )
12
-
13
- def context
14
- p = self[:context]
15
- LibXML::XmlXpathContextCast.new(p)
16
- end
17
- end
18
-
19
- end
20
- end
@@ -1,13 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
- class XsltStylesheet < FFI::ManagedStruct # :nodoc:
4
-
5
- layout :dummy, :int, 0 # to avoid @layout warnings
6
-
7
- def self.release ptr
8
- LibXML.xsltFreeStylesheet(ptr)
9
- end
10
-
11
- end
12
- end
13
- end
@@ -1,40 +0,0 @@
1
- # :stopdoc:
2
- if ENV['NOKOGIRI_ID2REF'] || RUBY_PLATFORM !~ /java/
3
- Nokogiri::VERSION_INFO['refs'] = "id2ref"
4
- else
5
- require 'weakling'
6
- Nokogiri::VERSION_INFO['refs'] = "weakling"
7
- end
8
- require 'singleton'
9
-
10
- module Nokogiri
11
- class WeakBucket
12
- include Singleton
13
-
14
- if Nokogiri::VERSION_INFO['refs'] == "weakling"
15
- attr_accessor :bucket
16
-
17
- def initialize
18
- @bucket = Weakling::IdHash.new
19
- end
20
-
21
- def WeakBucket.get_object(cstruct)
22
- instance.bucket[cstruct.ruby_node_pointer]
23
- end
24
-
25
- def WeakBucket.set_object(cstruct, object)
26
- cstruct.ruby_node_pointer = instance.bucket.add(object)
27
- end
28
- else
29
- def WeakBucket.get_object(cstruct)
30
- ptr = cstruct.ruby_node_pointer
31
- ptr != 0 ? ObjectSpace._id2ref(ptr) : nil
32
- end
33
-
34
- def WeakBucket.set_object(cstruct, object)
35
- cstruct.ruby_node_pointer = object.object_id
36
- end
37
- end
38
- end
39
- end
40
- # :startdoc:
@@ -1,41 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class Attr < Node
4
-
5
- def self.new(document, name, *rest) # :nodoc:
6
- node_ptr = LibXML.xmlNewDocProp(document.cstruct, name.to_s, nil)
7
- node_cstruct = LibXML::XmlNode.new(node_ptr)
8
- node_cstruct.keep_reference_from_document!
9
-
10
- node = Node.wrap(node_cstruct, self)
11
- node.send :initialize, document, name, *rest
12
- yield node if block_given?
13
- node
14
- end
15
-
16
- def value=(content) # :nodoc:
17
- unless cstruct[:children].null?
18
- LibXML.xmlFreeNodeList(cstruct[:children])
19
- end
20
- cstruct[:children] = cstruct[:last] = nil
21
- return unless content
22
-
23
- char_ptr = LibXML.xmlEncodeEntitiesReentrant(cstruct[:doc], content)
24
-
25
- cstruct[:children] = LibXML.xmlStringGetNodeList(cstruct[:doc], char_ptr)
26
- child_cstruct = cstruct[:children]
27
- while ! child_cstruct.null?
28
- child = Node.wrap(child_cstruct)
29
- child.cstruct[:parent] = cstruct
30
- child.cstruct[:doc] = cstruct[:doc]
31
- cstruct[:last] = child.cstruct
32
- child_cstruct = child.cstruct[:next]
33
- end
34
- LibXML.xmlFree(char_ptr)
35
-
36
- content
37
- end
38
-
39
- end
40
- end
41
- end
@@ -1,27 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- # :stopdoc:
4
- class AttributeDecl < Nokogiri::XML::Node
5
- def enumeration
6
- list = []
7
- return list if cstruct[:tree].null?
8
- head = LibXML::XmlEnumeration.new cstruct[:tree]
9
- loop do
10
- list << head[:name]
11
- break if head[:next].null?
12
- head = LibXML::XmlEnumeration.new head[:next]
13
- end
14
- list
15
- end
16
-
17
- def attribute_type
18
- cstruct[:atype]
19
- end
20
-
21
- def default
22
- cstruct[:default_value]
23
- end
24
- end
25
- # :startdoc:
26
- end
27
- end
@@ -1,19 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class CDATA < Text
4
-
5
- def self.new(document, content, *rest) # :nodoc:
6
- length = content.nil? ? 0 : content.length
7
- node_ptr = LibXML.xmlNewCDataBlock(document.cstruct[:doc], content, length)
8
- node_cstruct = LibXML::XmlNode.new(node_ptr)
9
- node_cstruct.keep_reference_from_document!
10
-
11
- node = Node.wrap(node_cstruct, self)
12
- node.send :initialize, document, content, *rest
13
- yield node if block_given?
14
- node
15
- end
16
-
17
- end
18
- end
19
- end
@@ -1,18 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class Comment < CharacterData
4
-
5
- def self.new(document, content, *rest) # :nodoc:
6
- node_ptr = LibXML.xmlNewDocComment(document.cstruct, content)
7
- node_cstruct = LibXML::XmlNode.new(node_ptr)
8
- node_cstruct.keep_reference_from_document!
9
-
10
- node = Node.wrap(node_ptr, self)
11
- node.send :initialize, document, content, *rest
12
- yield node if block_given?
13
- node
14
- end
15
-
16
- end
17
- end
18
- end
@@ -1,166 +0,0 @@
1
- # :stopdoc:
2
- module Nokogiri
3
- module XML
4
- class Document < Node
5
-
6
- attr_accessor :cstruct
7
-
8
- def url
9
- cstruct[:URL]
10
- end
11
-
12
- def root= new_root
13
- old_root = nil
14
-
15
- if new_root.nil?
16
- old_root_ptr = LibXML.xmlDocGetRootElement(cstruct)
17
- if (! old_root_ptr.null?)
18
- old_root = Node.wrap(old_root_ptr)
19
- LibXML.xmlUnlinkNode(old_root.cstruct)
20
- old_root.cstruct.keep_reference_from_document!
21
- end
22
- return new_root
23
- end
24
-
25
- if new_root.cstruct[:doc] != cstruct[:doc]
26
- old_root_ptr = LibXML.xmlDocGetRootElement(cstruct)
27
- new_root_ptr = LibXML.xmlDocCopyNode(new_root.cstruct, cstruct, 1)
28
- raise RuntimeError "Could not reparent node (xmlDocCopyNode)" if new_root_ptr.null?
29
- new_root = Node.wrap(new_root_ptr)
30
- end
31
- LibXML.xmlDocSetRootElement(cstruct, new_root.cstruct)
32
- if old_root_ptr && ! old_root_ptr.null?
33
- LibXML::XmlNode.new(old_root_ptr).keep_reference_from_document!
34
- end
35
- new_root
36
- end
37
-
38
- def root
39
- ptr = LibXML.xmlDocGetRootElement(cstruct)
40
- ptr.null? ? nil : Node.wrap(LibXML::XmlNode.new(ptr))
41
- end
42
-
43
- def encoding= encoding
44
- # TODO: if :encoding is already set, then it's probably getting leaked.
45
- cstruct[:encoding] = LibXML.xmlStrdup(encoding)
46
- end
47
-
48
- def encoding
49
- ptr = cstruct[:encoding]
50
- ptr.null? ? nil : ptr.read_string
51
- end
52
-
53
- def version
54
- cstruct[:version]
55
- end
56
-
57
- def self.read_io io, url, encoding, options
58
- wrap_with_error_handling do
59
- LibXML.xmlReadIO(IoCallbacks.reader(io), nil, nil, url, encoding, options)
60
- end
61
- end
62
-
63
- def self.read_memory(string, url, encoding, options)
64
- wrap_with_error_handling do
65
- LibXML.xmlReadMemory(string, string.length, url, encoding, options)
66
- end
67
- end
68
-
69
- def dup deep = 1
70
- dup_ptr = LibXML.xmlCopyDoc(cstruct, deep)
71
- return nil if dup_ptr.null?
72
-
73
- # xmlCopyDoc does not preserve document type. wtf?
74
- cstruct = LibXML::XmlDocumentCast.new(dup_ptr)
75
- cstruct[:type] = self.type
76
-
77
- self.class.wrap(dup_ptr)
78
- end
79
-
80
- def remove_namespaces!
81
- self.class.recursively_remove_namespaces_from_node(root)
82
- end
83
-
84
- def create_entity(name, entity_type=Nokogiri::XML::EntityDecl::INTERNAL_GENERAL,
85
- external_id=nil, system_id=nil, content=nil)
86
- LibXML.xmlResetLastError()
87
- ptr = LibXML.xmlAddDocEntity(cstruct, name, entity_type, external_id, system_id, content)
88
- if ptr.null?
89
- error = LibXML.xmlGetLastError()
90
- if error
91
- raise SyntaxError.wrap(error)
92
- else
93
- raise RuntimeError, "Could not create entity"
94
- end
95
- end
96
-
97
- Node.wrap(LibXML::XmlEntity.new(ptr))
98
- end
99
-
100
- class << self
101
- def new(*args)
102
- version = args.first || "1.0"
103
- doc = wrap(LibXML.xmlNewDoc(version))
104
- doc.send :initialize, *args
105
- doc
106
- end
107
-
108
- def wrap doc_struct
109
- if doc_struct.is_a?(FFI::Pointer)
110
- # cast native pointers up into a doc cstruct
111
- return nil if doc_struct.null?
112
- doc_struct = LibXML::XmlDocument.new(doc_struct)
113
- end
114
-
115
- doc = self.allocate
116
- doc.cstruct = doc_struct
117
- doc.cstruct.ruby_doc = doc
118
- doc.instance_eval { @decorators = nil; @node_cache = [] }
119
- doc.send :initialize
120
- doc
121
- end
122
- end
123
-
124
- private
125
-
126
- class << self
127
- def wrap_with_error_handling(&block)
128
- error_list = []
129
- LibXML.xmlInitParser()
130
- LibXML.xmlResetLastError()
131
- LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(error_list))
132
-
133
- ptr = yield
134
-
135
- LibXML.xmlSetStructuredErrorFunc(nil, nil)
136
-
137
- if ptr.null?
138
- error = LibXML.xmlGetLastError()
139
- if error
140
- raise SyntaxError.wrap(error)
141
- else
142
- raise RuntimeError, "Could not parse document"
143
- end
144
- end
145
-
146
- document = wrap(ptr)
147
- document.errors = error_list
148
- return document
149
- end
150
-
151
- def recursively_remove_namespaces_from_node(node)
152
- node.cstruct[:ns] = nil
153
- node.children.each do |child|
154
- recursively_remove_namespaces_from_node(child)
155
- end
156
- unless node.cstruct[:nsDef].nil?
157
- LibXML.xmlFreeNsList(node.cstruct[:nsDef])
158
- node.cstruct[:nsDef] = nil
159
- end
160
- end
161
- end
162
-
163
- end
164
- end
165
- end
166
- # :startdoc:
@@ -1,21 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class DocumentFragment < Node
4
-
5
- def self.new(document, *rest) # :nodoc:
6
- node_ptr = LibXML.xmlNewDocFragment(document.cstruct)
7
- node_cstruct = LibXML::XmlNode.new(node_ptr)
8
- node_cstruct.keep_reference_from_document!
9
-
10
- node = Node.wrap(node_cstruct, self)
11
-
12
- node.send :initialize, document, *rest
13
- yield node if block_given?
14
-
15
- node
16
- end
17
-
18
- end
19
- end
20
- end
21
-
@@ -1,67 +0,0 @@
1
- # :stopdoc:
2
- module Nokogiri
3
- module XML
4
- class DTD < Node
5
- def validate document
6
- error_list = []
7
- ctxt = LibXML.xmlNewValidCtxt
8
-
9
- LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(error_list))
10
- LibXML.xmlValidateDtd ctxt, document.cstruct, cstruct
11
-
12
- LibXML.xmlSetStructuredErrorFunc nil, nil
13
-
14
- LibXML.xmlFreeValidCtxt ctxt
15
-
16
- error_list
17
- end
18
-
19
- def system_id
20
- cstruct[:system_id]
21
- end
22
-
23
- def external_id
24
- cstruct[:external_id]
25
- end
26
-
27
- def elements
28
- internal_attributes :elements
29
- end
30
-
31
- def entities
32
- internal_attributes :entities
33
- end
34
-
35
- def attributes
36
- internal_attributes :attributes
37
- end
38
-
39
- def notations
40
- attr_ptr = cstruct[:notations]
41
- return nil if attr_ptr.null?
42
-
43
- ahash = {}
44
- LibXML.xmlHashScan(attr_ptr, nil) do |payload, data, name|
45
- notation_cstruct = LibXML::XmlNotation.new(payload)
46
- ahash[name] = Notation.new(notation_cstruct[:name], notation_cstruct[:PublicID],
47
- notation_cstruct[:SystemID])
48
- end
49
- ahash
50
- end
51
-
52
- private
53
-
54
- def internal_attributes attr_name
55
- attr_ptr = cstruct[attr_name.to_sym]
56
- return nil if attr_ptr.null?
57
-
58
- ahash = {}
59
- LibXML.xmlHashScan(attr_ptr, nil) do |payload, data, name|
60
- ahash[name] = Node.wrap(payload)
61
- end
62
- ahash
63
- end
64
- end
65
- end
66
- end
67
- # :startdoc:
@@ -1,43 +0,0 @@
1
- # :stopdoc:
2
- module Nokogiri
3
- module XML
4
- class ElementContent
5
- attr_accessor :cstruct
6
-
7
- def self.wrap pointer, document
8
- return nil if pointer.null?
9
-
10
- c = ElementContent.allocate
11
- c.cstruct = LibXML::XmlElementContent.new pointer
12
- c.instance_variable_set :@document, document
13
- c
14
- end
15
-
16
- def type
17
- cstruct[:type]
18
- end
19
-
20
- def prefix
21
- cstruct[:prefix]
22
- end
23
-
24
- def occur
25
- cstruct[:ocur]
26
- end
27
-
28
- def name
29
- cstruct[:name]
30
- end
31
-
32
- private
33
- def c1
34
- self.class.wrap cstruct[:c1], document
35
- end
36
-
37
- def c2
38
- self.class.wrap cstruct[:c2], document
39
- end
40
- end
41
- end
42
- end
43
- # :startdoc:
@@ -1,19 +0,0 @@
1
- # :stopdoc:
2
- module Nokogiri
3
- module XML
4
- class ElementDecl < Nokogiri::XML::Node
5
- def element_type
6
- cstruct[:etype]
7
- end
8
-
9
- def prefix
10
- cstruct[:prefix]
11
- end
12
-
13
- def content
14
- ElementContent.wrap cstruct[:content], document
15
- end
16
- end
17
- end
18
- end
19
- # :startdoc:
@@ -1,36 +0,0 @@
1
- # :stopdoc:
2
- module Nokogiri
3
- module XML
4
- class EntityDecl < Nokogiri::XML::Node
5
-
6
- # from libxml/entities.h
7
- INTERNAL_GENERAL = 1
8
- EXTERNAL_GENERAL_PARSED = 2
9
- EXTERNAL_GENERAL_UNPARSED = 3
10
- INTERNAL_PARAMETER = 4
11
- EXTERNAL_PARAMETER = 5
12
- INTERNAL_PREDEFINED = 6
13
-
14
- def content
15
- cstruct[:content]
16
- end
17
-
18
- def entity_type
19
- cstruct[:etype]
20
- end
21
-
22
- def external_id
23
- cstruct[:external_id]
24
- end
25
-
26
- def system_id
27
- cstruct[:system_id]
28
- end
29
-
30
- def original_content
31
- cstruct[:orig]
32
- end
33
- end
34
- end
35
- end
36
- # :startdoc:
@@ -1,19 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class EntityReference < Node
4
-
5
- def self.new(document, name, *rest) # :nodoc:
6
- node_ptr = LibXML.xmlNewReference(document.cstruct, name)
7
- node_cstruct = LibXML::XmlNode.new(node_ptr)
8
- node_cstruct.keep_reference_from_document!
9
-
10
- node = Node.wrap(node_cstruct, self)
11
- node.send :initialize, document, name, *rest
12
- yield node if block_given?
13
- node
14
- end
15
-
16
- end
17
- end
18
- end
19
-
@@ -1,44 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class Namespace
4
- # :stopdoc:
5
-
6
- attr_accessor :cstruct
7
- attr_accessor :document
8
-
9
- def prefix
10
- cstruct[:prefix].nil? ? nil : cstruct[:prefix] # TODO: encoding?
11
- end
12
-
13
- def href
14
- cstruct[:href].nil? ? nil : cstruct[:href] # TODO: encoding?
15
- end
16
-
17
- class << self
18
- def wrap(document, node_struct)
19
- if node_struct.is_a?(FFI::Pointer)
20
- # cast native pointers up into a node cstruct
21
- return nil if node_struct.null?
22
- node_struct = LibXML::XmlNs.new(node_struct)
23
- end
24
-
25
- ruby_node = node_struct.ruby_node
26
- return ruby_node unless ruby_node.nil?
27
-
28
- ns = Nokogiri::XML::Namespace.allocate
29
- ns.document = document.ruby_doc
30
- ns.cstruct = node_struct
31
-
32
- ns.cstruct.ruby_node = ns
33
-
34
- cache = ns.document.instance_variable_get(:@node_cache)
35
- cache << ns
36
-
37
- ns
38
- end
39
- end
40
-
41
- # :startdoc:
42
- end
43
- end
44
- end