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
data/lib/nokogiri/html.rb CHANGED
@@ -4,6 +4,7 @@ require 'nokogiri/html/document_fragment'
4
4
  require 'nokogiri/html/sax/parser_context'
5
5
  require 'nokogiri/html/sax/parser'
6
6
  require 'nokogiri/html/element_description'
7
+ require 'nokogiri/html/element_description_defaults'
7
8
 
8
9
  module Nokogiri
9
10
  class << self
Binary file
@@ -1,38 +1,88 @@
1
1
  module Nokogiri
2
2
  # The version of Nokogiri you are using
3
- VERSION = '1.4.3.1'
3
+ VERSION = '1.5.0'
4
4
 
5
- # More complete version information about libxml
6
- VERSION_INFO = {}
7
- VERSION_INFO['warnings'] = []
8
- VERSION_INFO['nokogiri'] = Nokogiri::VERSION
9
- VERSION_INFO['ruby'] = {}
10
- VERSION_INFO['ruby']['version'] = ::RUBY_VERSION
11
- VERSION_INFO['ruby']['platform'] = ::RUBY_PLATFORM
12
- VERSION_INFO['ruby']['engine'] = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'mri'
13
- VERSION_INFO['ruby']['jruby'] = ::JRUBY_VERSION if RUBY_PLATFORM == "java"
14
- if defined?(LIBXML_VERSION)
15
- VERSION_INFO['libxml'] = {}
16
- VERSION_INFO['libxml']['binding'] = 'extension'
17
- VERSION_INFO['libxml']['compiled'] = LIBXML_VERSION
18
- VERSION_INFO['libxml']['loaded'] = LIBXML_PARSER_VERSION.scan(/^(.*)(..)(..)$/).first.collect{|j|j.to_i}.join(".")
19
-
20
- if VERSION_INFO['libxml']['compiled'] != VERSION_INFO['libxml']['loaded']
21
- warning = "Nokogiri was built against LibXML version #{VERSION_INFO['libxml']['compiled']}, but has dynamically loaded #{VERSION_INFO['libxml']['loaded']}"
22
- VERSION_INFO['warnings'] << warning
5
+ class VersionInfo # :nodoc:
6
+ def jruby?
7
+ ::JRUBY_VERSION if RUBY_PLATFORM == "java"
8
+ end
9
+
10
+ def engine
11
+ defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'mri'
12
+ end
13
+
14
+ def loaded_parser_version
15
+ LIBXML_PARSER_VERSION.scan(/^(.*)(..)(..)$/).first.collect{ |j|
16
+ j.to_i
17
+ }.join(".")
18
+ end
19
+
20
+ def compiled_parser_version
21
+ LIBXML_VERSION
22
+ end
23
+
24
+ def libxml2?
25
+ defined?(LIBXML_VERSION)
26
+ end
27
+
28
+ def warnings
29
+ return [] unless libxml2?
30
+
31
+ if compiled_parser_version != loaded_parser_version
32
+ ["Nokogiri was built against LibXML version #{compiled_parser_version}, but has dynamically loaded #{loaded_parser_version}"]
33
+ else
34
+ []
35
+ end
36
+ end
37
+
38
+ def to_hash
39
+ hash_info = {}
40
+ hash_info['warnings'] = []
41
+ hash_info['nokogiri'] = Nokogiri::VERSION
42
+ hash_info['ruby'] = {}
43
+ hash_info['ruby']['version'] = ::RUBY_VERSION
44
+ hash_info['ruby']['platform'] = ::RUBY_PLATFORM
45
+ hash_info['ruby']['description'] = ::RUBY_DESCRIPTION
46
+ hash_info['ruby']['engine'] = engine
47
+ hash_info['ruby']['jruby'] = jruby? if jruby?
48
+
49
+ if libxml2?
50
+ hash_info['libxml'] = {}
51
+ hash_info['libxml']['binding'] = 'extension'
52
+ hash_info['libxml']['compiled'] = compiled_parser_version
53
+ hash_info['libxml']['loaded'] = loaded_parser_version
54
+ hash_info['warnings'] = warnings
55
+ end
56
+
57
+ hash_info
58
+ end
59
+
60
+ def to_markdown
61
+ begin
62
+ require 'psych'
63
+ rescue LoadError
64
+ end
65
+ require 'yaml'
66
+ "# Nokogiri (#{Nokogiri::VERSION})\n" +
67
+ YAML.dump(to_hash).each_line.map { |line| " #{line}" }.join
68
+ end
69
+
70
+ # FIXME: maybe switch to singleton?
71
+ @@instance = new
72
+ @@instance.warnings.each do |warning|
23
73
  warn "WARNING: #{warning}"
24
74
  end
75
+ def self.instance; @@instance; end
25
76
  end
26
77
 
27
- def self.uses_libxml? # :nodoc:
28
- !Nokogiri::VERSION_INFO['libxml'].nil?
29
- end
78
+ # More complete version information about libxml
79
+ VERSION_INFO = VersionInfo.instance.to_hash
30
80
 
31
- def self.ffi? # :nodoc:
32
- uses_libxml? && Nokogiri::VERSION_INFO['libxml']['binding'] == 'ffi'
81
+ def self.uses_libxml? # :nodoc:
82
+ VersionInfo.instance.libxml2?
33
83
  end
34
84
 
35
- def self.is_2_6_16? # :nodoc:
36
- Nokogiri::VERSION_INFO['libxml']['loaded'] <= '2.6.16'
85
+ def self.jruby? # :nodoc:
86
+ VersionInfo.instance.jruby?
37
87
  end
38
88
  end
@@ -8,7 +8,7 @@ module Nokogiri
8
8
  undef_method :content
9
9
  undef_method :namespace
10
10
  undef_method :namespace_definitions
11
- undef_method :line
11
+ undef_method :line if method_defined?(:line)
12
12
 
13
13
  def inspect
14
14
  "#<#{self.class.name}:#{sprintf("0x%x", object_id)} #{to_s.inspect}>"
@@ -327,6 +327,13 @@ module Nokogiri
327
327
  ###
328
328
  # Convert this Builder object to XML
329
329
  def to_xml(*args)
330
+ if Nokogiri.jruby?
331
+ options = args.first.is_a?(Hash) ? args.shift : {}
332
+ if !options[:save_with]
333
+ options[:save_with] = Node::SaveOptions::AS_BUILDER
334
+ end
335
+ args.insert(0, options)
336
+ end
330
337
  @doc.to_xml(*args)
331
338
  end
332
339
 
@@ -9,7 +9,7 @@ module Nokogiri
9
9
  # Nokogiri::XML::Node#xpath
10
10
  class Document < Nokogiri::XML::Node
11
11
  ##
12
- # Parse an XML file. +thing+ may be a String, or any object that
12
+ # Parse an XML file. +string_or_io+ may be a String, or any object that
13
13
  # responds to _read_ and _close_ such as an IO, or StringIO.
14
14
  # +url+ is resource where this document is located. +encoding+ is the
15
15
  # encoding that should be used when processing the document. +options+
@@ -113,6 +113,13 @@ module Nokogiri
113
113
  # </root>
114
114
  #
115
115
  # The hash returned will look like this: { 'xmlns:foo' => 'bar' }
116
+ #
117
+ # Non-prefixed default namespaces (as in "xmlns=") are not included
118
+ # in the hash.
119
+ #
120
+ # Note this is a very expensive operation in current implementation, as it
121
+ # traverses the entire graph, and also has to bring each node accross the
122
+ # libxml bridge into a ruby object.
116
123
  def collect_namespaces
117
124
  ns = {}
118
125
  traverse { |j| ns.merge!(j.namespaces) }
@@ -134,7 +141,21 @@ module Nokogiri
134
141
  end
135
142
 
136
143
  ##
137
- # Explore a document with shortcut methods.
144
+ # Explore a document with shortcut methods. See Nokogiri::Slop for details.
145
+ #
146
+ # Note that any nodes that have been instantiated before #slop!
147
+ # is called will not be decorated with sloppy behavior. So, if you're in
148
+ # irb, the preferred idiom is:
149
+ #
150
+ # irb> doc = Nokogiri::Slop my_markup
151
+ #
152
+ # and not
153
+ #
154
+ # irb> doc = Nokogiri::HTML my_markup
155
+ # ... followed by irb's implicit inspect (and therefore instantiation of every node) ...
156
+ # irb> doc.slop!
157
+ # ... which does absolutely nothing.
158
+ #
138
159
  def slop!
139
160
  unless decorators(XML::Node).include? Nokogiri::Decorators::Slop
140
161
  decorators(XML::Node) << Nokogiri::Decorators::Slop
@@ -184,7 +205,27 @@ module Nokogiri
184
205
  end
185
206
  alias :<< :add_child
186
207
 
208
+ ##
209
+ # +JRuby+
210
+ # Wraps Java's org.w3c.dom.document and returns Nokogiri::XML::Document
211
+ def self.wrap document
212
+ raise "JRuby only method" unless Nokogiri.jruby?
213
+ return wrapJavaDocument(document)
214
+ end
215
+
216
+ ##
217
+ # +JRuby+
218
+ # Returns Java's org.w3c.dom.document of this Document.
219
+ def to_java
220
+ raise "JRuby only method" unless Nokogiri.jruby?
221
+ return toJavaDocument()
222
+ end
223
+
187
224
  private
225
+ def implied_xpath_context
226
+ "/"
227
+ end
228
+
188
229
  def inspect_attributes
189
230
  [:name, :children]
190
231
  end
@@ -11,9 +11,9 @@ module Nokogiri
11
11
  return self unless tags
12
12
 
13
13
  children = if ctx
14
- ctx.parse(tags.strip)
14
+ ctx.parse(tags)
15
15
  else
16
- XML::Document.parse("<root>#{tags.strip}</root>") \
16
+ XML::Document.parse("<root>#{tags}</root>") \
17
17
  .xpath("/root/node()")
18
18
  end
19
19
  children.each { |child| child.parent = self }
@@ -35,6 +35,13 @@ module Nokogiri
35
35
  # Convert this DocumentFragment to html
36
36
  # See Nokogiri::XML::NodeSet#to_html
37
37
  def to_html *args
38
+ if Nokogiri.jruby?
39
+ options = args.first.is_a?(Hash) ? args.shift : {}
40
+ if !options[:save_with]
41
+ options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_HTML
42
+ end
43
+ args.insert(0, options)
44
+ end
38
45
  children.to_html(*args)
39
46
  end
40
47
 
@@ -42,6 +49,13 @@ module Nokogiri
42
49
  # Convert this DocumentFragment to xhtml
43
50
  # See Nokogiri::XML::NodeSet#to_xhtml
44
51
  def to_xhtml *args
52
+ if Nokogiri.jruby?
53
+ options = args.first.is_a?(Hash) ? args.shift : {}
54
+ if !options[:save_with]
55
+ options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_XHTML
56
+ end
57
+ args.insert(0, options)
58
+ end
45
59
  children.to_xhtml(*args)
46
60
  end
47
61
 
@@ -2,10 +2,21 @@ module Nokogiri
2
2
  module XML
3
3
  class DTD < Nokogiri::XML::Node
4
4
  undef_method :attribute_nodes
5
+ undef_method :values
5
6
  undef_method :content
6
7
  undef_method :namespace
7
8
  undef_method :namespace_definitions
8
- undef_method :line
9
+ undef_method :line if method_defined?(:line)
10
+
11
+ def keys
12
+ attributes.keys
13
+ end
14
+
15
+ def each &block
16
+ attributes.each { |key, value|
17
+ block.call([key, value])
18
+ }
19
+ end
9
20
  end
10
21
  end
11
22
  end
@@ -3,7 +3,7 @@ module Nokogiri
3
3
  class ElementDecl < Nokogiri::XML::Node
4
4
  undef_method :namespace
5
5
  undef_method :namespace_definitions
6
- undef_method :line
6
+ undef_method :line if method_defined?(:line)
7
7
 
8
8
  def inspect
9
9
  "#<#{self.class.name}:#{sprintf("0x%x", object_id)} #{to_s.inspect}>"
@@ -5,7 +5,7 @@ module Nokogiri
5
5
  undef_method :attributes
6
6
  undef_method :namespace
7
7
  undef_method :namespace_definitions
8
- undef_method :line
8
+ undef_method :line if method_defined?(:line)
9
9
 
10
10
  def self.new name, doc, *args
11
11
  doc.create_entity(name, *args)
@@ -6,7 +6,7 @@ module Nokogiri
6
6
  class SaveOptions
7
7
  # Format serialized xml
8
8
  FORMAT = 1
9
- # Do not include delcarations
9
+ # Do not include declarations
10
10
  NO_DECLARATION = 2
11
11
  # Do not include empty tags
12
12
  NO_EMPTY_TAGS = 4
@@ -19,11 +19,28 @@ module Nokogiri
19
19
  # Save as HTML
20
20
  AS_HTML = 64
21
21
 
22
+ if Nokogiri.jruby?
23
+ # Save builder created document
24
+ AS_BUILDER = 128
25
+ # the default for XML documents
26
+ DEFAULT_XML = AS_XML # https://github.com/tenderlove/nokogiri/issues/#issue/415
27
+ # the default for HTML document
28
+ DEFAULT_HTML = NO_DECLARATION | NO_EMPTY_TAGS | AS_HTML
29
+ else
30
+ # the default for XML documents
31
+ DEFAULT_XML = FORMAT | AS_XML
32
+ # the default for HTML document
33
+ DEFAULT_HTML = FORMAT | NO_DECLARATION | NO_EMPTY_TAGS | AS_HTML
34
+ end
35
+ # the default for XHTML document
36
+ DEFAULT_XHTML = FORMAT | NO_DECLARATION | NO_EMPTY_TAGS | AS_XHTML
37
+
22
38
  # Integer representation of the SaveOptions
23
39
  attr_reader :options
24
40
 
25
41
  # Create a new SaveOptions object with +options+
26
42
  def initialize options = 0; @options = options; end
43
+
27
44
  constants.each do |constant|
28
45
  class_eval %{
29
46
  def #{constant.downcase}
@@ -36,6 +53,8 @@ module Nokogiri
36
53
  end
37
54
  }
38
55
  end
56
+
57
+ alias :to_i :options
39
58
  end
40
59
  end
41
60
  end