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,20 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class ProcessingInstruction < Node
4
-
5
- attr_accessor :cstruct # :nodoc:
6
-
7
- def self.new(document, name, content, *rest) # :nodoc:
8
- node_ptr = LibXML.xmlNewDocPI(document.cstruct, name.to_s, content.to_s)
9
- node_cstruct = LibXML::XmlNode.new(node_ptr)
10
- node_cstruct.keep_reference_from_document!
11
-
12
- node = Node.wrap(node_cstruct, self)
13
- node.send :initialize, document, name, content, *rest
14
- yield node if block_given?
15
- node
16
- end
17
-
18
- end
19
- end
20
- end
@@ -1,236 +0,0 @@
1
- # :stopdoc:
2
- module Nokogiri
3
- module XML
4
- class Reader
5
-
6
- attr_accessor :cstruct
7
- attr_accessor :reader_callback
8
-
9
- def default?
10
- LibXML.xmlTextReaderIsDefault(cstruct) == 1
11
- end
12
-
13
- def value?
14
- LibXML.xmlTextReaderHasValue(cstruct) == 1
15
- end
16
-
17
- def attributes?
18
- # this implementation of xmlTextReaderHasAttributes explicitly includes
19
- # namespaces and properties, because some earlier versions ignore
20
- # namespaces.
21
- node_ptr = LibXML.xmlTextReaderCurrentNode(cstruct)
22
- return false if node_ptr.null?
23
- node = LibXML::XmlNode.new node_ptr
24
- node[:type] == Node::ELEMENT_NODE && (!node[:properties].null? || !node[:nsDef].null?)
25
- end
26
-
27
- def namespaces
28
- return {} unless attributes?
29
-
30
- ptr = LibXML.xmlTextReaderExpand(cstruct)
31
- return nil if ptr.null?
32
-
33
- Reader.node_namespaces(ptr)
34
- end
35
-
36
- def attr_nodes
37
- return {} unless attributes?
38
-
39
- ptr = LibXML.xmlTextReaderExpand(cstruct)
40
- return nil if ptr.null?
41
- node_struct = LibXML::XmlNode.new(ptr)
42
-
43
- Node.node_properties node_struct
44
- end
45
-
46
- def attribute_at(index)
47
- return nil if index.nil?
48
- index = index.to_i
49
- attr_ptr = LibXML.xmlTextReaderGetAttributeNo(cstruct, index)
50
- return nil if attr_ptr.null?
51
-
52
- attr = attr_ptr.read_string
53
- LibXML.xmlFree attr_ptr
54
- attr
55
- end
56
-
57
- def attribute(name)
58
- return nil if name.nil?
59
- attr_ptr = LibXML.xmlTextReaderGetAttribute(cstruct, name.to_s)
60
- if attr_ptr.null?
61
- # this section is an attempt to workaround older versions of libxml that
62
- # don't handle namespaces properly in all attribute-and-friends functions
63
- prefix_ptr = FFI::Buffer.new :pointer
64
- localname = LibXML.xmlSplitQName2(name, prefix_ptr)
65
- prefix = prefix_ptr.get_pointer(0)
66
- if ! localname.null?
67
- attr_ptr = LibXML.xmlTextReaderLookupNamespace(cstruct, localname.read_string)
68
- LibXML.xmlFree(localname)
69
- else
70
- if prefix.null? || prefix.read_string.length == 0
71
- attr_ptr = LibXML.xmlTextReaderLookupNamespace(cstruct, nil)
72
- else
73
- attr_ptr = LibXML.xmlTextReaderLookupNamespace(cstruct, prefix.read_string)
74
- end
75
- end
76
- LibXML.xmlFree(prefix)
77
- end
78
- return nil if attr_ptr.null?
79
-
80
- attr = attr_ptr.read_string
81
- LibXML.xmlFree(attr_ptr)
82
- attr
83
- end
84
-
85
- def attribute_count
86
- count = LibXML.xmlTextReaderAttributeCount(cstruct)
87
- count == -1 ? nil : count
88
- end
89
-
90
- def depth
91
- val = LibXML.xmlTextReaderDepth(cstruct)
92
- val == -1 ? nil : val
93
- end
94
-
95
- def xml_version
96
- val = LibXML.xmlTextReaderConstXmlVersion(cstruct)
97
- val.null? ? nil : val.read_string
98
- end
99
-
100
- def lang
101
- val = LibXML.xmlTextReaderConstXmlLang(cstruct)
102
- val.null? ? nil : val.read_string
103
- end
104
-
105
- def value
106
- val = LibXML.xmlTextReaderConstValue(cstruct)
107
- val.null? ? nil : val.read_string
108
- end
109
-
110
- def prefix
111
- val = LibXML.xmlTextReaderConstPrefix(cstruct)
112
- val.null? ? nil : val.read_string
113
- end
114
-
115
- def namespace_uri
116
- val = LibXML.xmlTextReaderConstNamespaceUri(cstruct)
117
- val.null? ? nil : val.read_string
118
- end
119
-
120
- def local_name
121
- val = LibXML.xmlTextReaderConstLocalName(cstruct)
122
- val.null? ? nil : val.read_string
123
- end
124
-
125
- def name
126
- val = LibXML.xmlTextReaderConstName(cstruct)
127
- val.null? ? nil : val.read_string
128
- end
129
-
130
- def base_uri
131
- val = LibXML.xmlTextReaderConstBaseUri(cstruct)
132
- val.null? ? nil : val.read_string
133
- end
134
-
135
- def state
136
- LibXML.xmlTextReaderReadState(cstruct)
137
- end
138
-
139
- def read
140
- error_list = self.errors
141
-
142
- LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(error_list))
143
- ret = LibXML.xmlTextReaderRead(cstruct)
144
- LibXML.xmlSetStructuredErrorFunc(nil, nil)
145
-
146
- return self if ret == 1
147
- return nil if ret == 0
148
-
149
- error = LibXML.xmlGetLastError()
150
- if error
151
- raise SyntaxError.wrap(error)
152
- else
153
- raise RuntimeError, "Error pulling: #{ret}"
154
- end
155
-
156
- nil
157
- end
158
-
159
- def inner_xml
160
- string_ptr = LibXML.xmlTextReaderReadInnerXml(cstruct)
161
- return nil if string_ptr.null?
162
- string = string_ptr.read_string
163
- LibXML.xmlFree(string_ptr)
164
- string
165
- end
166
-
167
- def outer_xml
168
- string_ptr = LibXML.xmlTextReaderReadOuterXml(cstruct)
169
- return nil if string_ptr.null?
170
- string = string_ptr.read_string
171
- LibXML.xmlFree(string_ptr)
172
- string
173
- end
174
-
175
- def node_type
176
- LibXML.xmlTextReaderNodeType(cstruct)
177
- end
178
-
179
- def empty_element?
180
- LibXML.xmlTextReaderIsEmptyElement(cstruct) != 0
181
- end
182
-
183
- def self.from_memory(buffer, url=nil, encoding=nil, options=0)
184
- raise(ArgumentError, "string cannot be nil") if buffer.nil?
185
-
186
- memory = FFI::MemoryPointer.new(buffer.length) # we need to manage native memory lifecycle
187
- memory.put_bytes(0, buffer)
188
- reader_ptr = LibXML.xmlReaderForMemory(memory, memory.total, url, encoding, options)
189
- raise(RuntimeError, "couldn't create a reader") if reader_ptr.null?
190
-
191
- reader = allocate
192
- reader.cstruct = LibXML::XmlTextReader.new(reader_ptr)
193
- reader.send(:initialize, memory, url, encoding)
194
- reader
195
- end
196
-
197
- def self.from_io(io, url=nil, encoding=nil, options=0)
198
- raise(ArgumentError, "io cannot be nil") if io.nil?
199
-
200
- cb = IoCallbacks.reader(io) # we will keep a reference to prevent it from being GC'd
201
- reader_ptr = LibXML.xmlReaderForIO(cb, nil, nil, url, encoding, options)
202
- raise "couldn't create a parser" if reader_ptr.null?
203
-
204
- reader = allocate
205
- reader.cstruct = LibXML::XmlTextReader.new(reader_ptr)
206
- reader.send(:initialize, io, url, encoding)
207
- reader.reader_callback = cb
208
- reader
209
- end
210
-
211
- private
212
-
213
- class << self
214
- def node_namespaces(ptr)
215
- cstruct = LibXML::XmlNode.new(ptr)
216
- ahash = {}
217
- return ahash unless cstruct[:type] == Node::ELEMENT_NODE
218
- ns = cstruct[:nsDef]
219
- while ! ns.null?
220
- ns_cstruct = LibXML::XmlNs.new(ns)
221
- prefix = ns_cstruct[:prefix]
222
- key = if prefix.nil? || prefix.empty?
223
- "xmlns"
224
- else
225
- "xmlns:#{prefix}"
226
- end
227
- ahash[key] = ns_cstruct[:href] # TODO: encoding?
228
- ns = ns_cstruct[:next] # TODO: encoding?
229
- end
230
- ahash
231
- end
232
- end
233
- end
234
- end
235
- end
236
- # :startdoc:
@@ -1,85 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class RelaxNG < Schema
4
- # :stopdoc:
5
- def validate_document document
6
- errors = []
7
-
8
- ctx = LibXML.xmlRelaxNGNewValidCtxt(cstruct)
9
- raise RuntimeError.new("Could not create a validation context") if ctx.null?
10
-
11
- LibXML.xmlRelaxNGSetValidStructuredErrors(ctx,
12
- SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
13
-
14
- LibXML.xmlRelaxNGValidateDoc(ctx, document.cstruct)
15
-
16
- LibXML.xmlRelaxNGFreeValidCtxt(ctx)
17
-
18
- errors
19
- end
20
- private :validate_document
21
-
22
- def self.read_memory content
23
- content_copy = FFI::MemoryPointer.from_string(content)
24
- ctx = LibXML.xmlRelaxNGNewMemParserCtxt(content_copy, content.length)
25
-
26
- errors = []
27
-
28
- LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
29
- LibXML.xmlRelaxNGSetParserStructuredErrors(
30
- ctx, SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
31
-
32
- schema_ptr = LibXML.xmlRelaxNGParse(ctx)
33
-
34
- LibXML.xmlSetStructuredErrorFunc(nil, nil)
35
- LibXML.xmlRelaxNGFreeParserCtxt(ctx)
36
-
37
- if schema_ptr.null?
38
- error = LibXML.xmlGetLastError
39
- if error
40
- raise SyntaxError.wrap(error)
41
- else
42
- raise RuntimeError, "Could not parse document"
43
- end
44
- end
45
-
46
- schema = allocate
47
- schema.cstruct = LibXML::XmlRelaxNG.new schema_ptr
48
- schema.errors = errors
49
- schema
50
- end
51
-
52
- def self.from_document document
53
- ctx = LibXML.xmlRelaxNGNewDocParserCtxt document.document.cstruct
54
-
55
- errors = []
56
-
57
- LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
58
- LibXML.xmlRelaxNGSetParserStructuredErrors(
59
- ctx, SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
60
-
61
- schema_ptr = LibXML.xmlRelaxNGParse(ctx)
62
-
63
- LibXML.xmlSetStructuredErrorFunc(nil, nil)
64
- LibXML.xmlRelaxNGFreeParserCtxt(ctx) unless Nokogiri.is_2_6_16?
65
-
66
- if schema_ptr.null?
67
- error = LibXML.xmlGetLastError
68
- if error
69
- raise SyntaxError.wrap(error)
70
- else
71
- raise RuntimeError, "Could not parse document"
72
- end
73
- end
74
-
75
- LibXML.xmlRelaxNGFreeParserCtxt(ctx) if Nokogiri.is_2_6_16?
76
-
77
- schema = allocate
78
- schema.cstruct = LibXML::XmlRelaxNG.new schema_ptr
79
- schema.errors = errors
80
- schema
81
- end
82
- # :startdoc:
83
- end
84
- end
85
- end
@@ -1,135 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- module SAX
4
- class Parser
5
- # :stopdoc:
6
-
7
- attr_accessor :cstruct
8
-
9
- def self.new(doc = XML::SAX::Document.new, encoding = 'UTF-8')
10
- parser = allocate
11
- parser.document = doc
12
- parser.encoding = encoding
13
- parser.cstruct = LibXML::XmlSaxHandler.allocate
14
- parser.send(:setup_lambdas)
15
- parser.instance_variable_set(:@ctxt, nil)
16
- parser
17
- end
18
-
19
- private
20
-
21
- def setup_lambdas
22
- @closures = {} # we need to keep references to the closures to avoid GC
23
-
24
- [ :startDocument, :endDocument, :startElement, :endElement, :characters,
25
- :comment, :warning, :error, :cdataBlock, :startElementNs, :endElementNs ].each do |sym|
26
- @closures[sym] = lambda { |*args| send("__internal__#{sym}", *args) } # "i'm your private dancer", etc.
27
- end
28
-
29
- @closures.each { |k,v| cstruct[k] = v }
30
-
31
- cstruct[:initialized] = Nokogiri::LibXML::XmlSaxHandler::XML_SAX2_MAGIC
32
- end
33
-
34
- def __internal__startDocument(_)
35
- if @ctxt && @ctxt[:html] == 0 && @ctxt[:standalone] != -1
36
- standalone = {
37
- 0 => 'no',
38
- 1 => 'yes',
39
- }[@ctxt[:standalone]]
40
-
41
- @document.xmldecl @ctxt[:version], @ctxt[:encoding], standalone
42
- end
43
- @document.start_document
44
- end
45
-
46
- def __internal__endDocument(_)
47
- @document.end_document
48
- end
49
-
50
- def __internal__startElement(_, name, attributes)
51
- attrs = attributes.null? ? [] : attributes.get_array_of_string(0)
52
- @document.start_element name, attrs
53
- end
54
-
55
- def __internal__endElement(_, name)
56
- @document.end_element name
57
- end
58
-
59
- def __internal__characters(_, data, data_length)
60
- @document.characters data.slice(0, data_length)
61
- end
62
-
63
- def __internal__comment(_, data)
64
- @document.comment data
65
- end
66
-
67
- def __internal__warning(_, msg)
68
- # TODO: vasprintf here
69
- @document.warning(msg)
70
- end
71
-
72
- def __internal__error(_, msg)
73
- # TODO: vasprintf here
74
- @document.error(msg)
75
- end
76
-
77
- def __internal__cdataBlock(_, data, data_length)
78
- @document.cdata_block data.slice(0, data_length)
79
- end
80
-
81
- def __internal__startElementNs(_, localname, prefix, uri, nb_namespaces, namespaces, nb_attributes, nb_defaulted, attributes)
82
- localname = localname.null? ? nil : localname.read_string
83
- prefix = prefix .null? ? nil : prefix .read_string
84
- uri = uri .null? ? nil : uri .read_string
85
-
86
- attr_list = []
87
- ns_list = []
88
-
89
- if ! attributes.null?
90
- # Each attribute is an array of [localname, prefix, URI, value, end]
91
- (0..(nb_attributes-1)*5).step(5) do |j|
92
- key = attributes.get_pointer(LibXML.pointer_offset(j)).read_string
93
- attr_prefix = attributes.get_pointer(LibXML.pointer_offset(j + 1))
94
- attr_prefix = attr_prefix.null? ? nil : attr_prefix.read_string
95
- attr_uri = attributes.get_pointer(LibXML.pointer_offset(j + 2))
96
- attr_uri = attr_uri.null? ? nil : attr_uri.read_string
97
- value_length = attributes.get_pointer(LibXML.pointer_offset(j+4)).address \
98
- - attributes.get_pointer(LibXML.pointer_offset(j+3)).address
99
- value = attributes.get_pointer(LibXML.pointer_offset(j+3)).get_string(0, value_length)
100
- attr_list << Attribute.new(key, attr_prefix, attr_uri, value)
101
- end
102
- end
103
-
104
- if ! namespaces.null?
105
- (0..(nb_namespaces-1)*2).step(2) do |j|
106
- key = namespaces.get_pointer(LibXML.pointer_offset(j))
107
- key = key.null? ? nil : key.read_string
108
- value = namespaces.get_pointer(LibXML.pointer_offset(j+1))
109
- value = value.null? ? nil : value.read_string
110
- ns_list << [key, value]
111
- end
112
- end
113
-
114
- @document.start_element_namespace(
115
- localname,
116
- attr_list,
117
- prefix,
118
- uri,
119
- ns_list
120
- )
121
- end
122
-
123
- def __internal__endElementNs(_, localname, prefix, uri)
124
- localname = localname.null? ? nil : localname.read_string
125
- prefix = prefix .null? ? nil : prefix .read_string
126
- uri = uri .null? ? nil : uri .read_string
127
-
128
- @document.end_element_namespace(localname, prefix, uri)
129
- end
130
-
131
- # :startdoc:
132
- end
133
- end
134
- end
135
- end
@@ -1,67 +0,0 @@
1
- # :stopdoc:
2
- module Nokogiri
3
- module XML
4
- module SAX
5
- class ParserContext
6
- attr_accessor :cstruct
7
- attr_accessor :reader_callback
8
-
9
- def self.memory data
10
- raise(ArgumentError, 'data cannot be nil') if data.nil?
11
- raise('data cannot be empty') if data.length == 0
12
- ctx = LibXML::XmlParserContext.new(
13
- LibXML.xmlCreateMemoryParserCtxt data, data.length
14
- )
15
- pc = allocate
16
- pc.cstruct = ctx
17
- pc
18
- end
19
-
20
- def self.io io, encoding
21
- reader_callback = IoCallbacks.reader(io) # keep a reference to prevent it from being GC'd
22
- sax_ctx = LibXML.xmlCreateIOParserCtxt(
23
- nil,
24
- nil,
25
- reader_callback,
26
- nil,
27
- nil,
28
- encoding
29
- )
30
- pc = allocate
31
- pc.cstruct = LibXML::XmlParserContext.new sax_ctx
32
- pc.reader_callback = reader_callback
33
- pc
34
- end
35
-
36
- def self.file filename
37
- ctx = LibXML.xmlCreateFileParserCtxt filename
38
- pc = allocate
39
- pc.cstruct = LibXML::XmlParserContext.new ctx
40
- pc
41
- end
42
-
43
- def parse_with sax_handler, type = :xml
44
- raise ArgumentError unless XML::SAX::Parser === sax_handler
45
- sax = sax_handler.cstruct
46
- cstruct[:sax] = sax
47
-
48
- sax_handler.instance_variable_set(:@ctxt, cstruct)
49
-
50
- LibXML.send(:"#{type}ParseDocument", cstruct)
51
-
52
- cstruct[:sax] = nil
53
- LibXML.xmlFreeDoc cstruct[:myDoc] unless cstruct[:myDoc].null?
54
- end
55
-
56
- def replace_entities=(value)
57
- self.cstruct[:replaceEntities] = value ? 1 : 0
58
- end
59
-
60
- def replace_entities
61
- self.cstruct[:replaceEntities] == 0 ? false : true
62
- end
63
- end
64
- end
65
- end
66
- end
67
- # :startdoc:
@@ -1,51 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- module SAX
4
- class PushParser
5
-
6
- attr_accessor :cstruct # :nodoc:
7
-
8
- def options
9
- cstruct[:options]
10
- end
11
-
12
- def options=(user_options)
13
- if LibXML.xmlCtxtUseOptions(cstruct, user_options) != 0
14
- raise RuntimeError, "Cannot set XML parser context options"
15
- end
16
- nil
17
- end
18
-
19
- private
20
-
21
- def native_write(chunk, last_chunk) # :nodoc:
22
- size = 0
23
- unless chunk.nil?
24
- chunk = chunk.to_s
25
- size = chunk.length
26
- end
27
-
28
- if LibXML.xmlParseChunk(cstruct, chunk, size, last_chunk ? 1 : 0) != 0
29
- if (cstruct[:options] & XML::ParseOptions::RECOVER) == 0
30
- error = LibXML.xmlCtxtGetLastError(cstruct)
31
- raise Nokogiri::XML::SyntaxError.wrap(error)
32
- end
33
- end
34
-
35
- self
36
- end
37
-
38
- def initialize_native(sax, filename) # :nodoc:
39
- filename = filename.to_s unless filename.nil?
40
- ctx_ptr = LibXML.xmlCreatePushParserCtxt(
41
- sax.cstruct, nil, nil, 0, filename
42
- )
43
- raise(RuntimeError, "Could not create a parser context") if ctx_ptr.null?
44
- self.cstruct = LibXML::XmlSaxPushParserContext.new(ctx_ptr) ;
45
- self
46
- end
47
-
48
- end
49
- end
50
- end
51
- end
@@ -1,109 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class Schema
4
- # :stopdoc:
5
-
6
- attr_accessor :cstruct
7
-
8
- def validate_document document
9
- errors = []
10
-
11
- ctx = LibXML.xmlSchemaNewValidCtxt(cstruct)
12
- raise RuntimeError.new("Could not create a validation context") if ctx.null?
13
-
14
- LibXML.xmlSchemaSetValidStructuredErrors(ctx,
15
- SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
16
-
17
- LibXML.xmlSchemaValidateDoc(ctx, document.cstruct)
18
-
19
- LibXML.xmlSchemaFreeValidCtxt(ctx)
20
-
21
- errors
22
- end
23
- private :validate_document
24
-
25
- def validate_file filename
26
- errors = []
27
-
28
- ctx = LibXML.xmlSchemaNewValidCtxt(cstruct)
29
- raise RuntimeError.new("Could not create a validation context") if ctx.null?
30
-
31
- LibXML.xmlSchemaSetValidStructuredErrors(ctx,
32
- SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
33
-
34
- LibXML.xmlSchemaValidateFile(ctx, filename, 0)
35
-
36
- LibXML.xmlSchemaFreeValidCtxt(ctx)
37
-
38
- errors
39
- end
40
- private :validate_document
41
-
42
- def self.read_memory content
43
- content_copy = FFI::MemoryPointer.from_string(content)
44
- ctx = LibXML.xmlSchemaNewMemParserCtxt(content_copy, content.length)
45
-
46
- errors = []
47
-
48
- LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
49
- LibXML.xmlSchemaSetParserStructuredErrors(ctx, SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
50
-
51
- schema_ptr = LibXML.xmlSchemaParse(ctx)
52
-
53
- LibXML.xmlSetStructuredErrorFunc(nil, nil)
54
- LibXML.xmlSchemaFreeParserCtxt(ctx)
55
-
56
- if schema_ptr.null?
57
- error = LibXML.xmlGetLastError
58
- if error
59
- raise SyntaxError.wrap(error)
60
- else
61
- raise RuntimeError, "Could not parse document"
62
- end
63
- end
64
-
65
- schema = allocate
66
- schema.cstruct = LibXML::XmlSchema.new schema_ptr
67
- schema.errors = errors
68
- schema
69
- end
70
-
71
- def self.from_document document
72
- ctx = LibXML.xmlSchemaNewDocParserCtxt(document.document.cstruct)
73
-
74
- errors = []
75
-
76
- LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
77
- unless Nokogiri.is_2_6_16?
78
- LibXML.xmlSchemaSetParserStructuredErrors(
79
- ctx,
80
- SyntaxError.error_array_pusher(errors),
81
- nil
82
- )
83
- end
84
-
85
- schema_ptr = LibXML.xmlSchemaParse(ctx)
86
-
87
- LibXML.xmlSetStructuredErrorFunc(nil, nil)
88
- LibXML.xmlSchemaFreeParserCtxt(ctx)
89
-
90
- if schema_ptr.null?
91
- error = LibXML.xmlGetLastError
92
- if error
93
- raise SyntaxError.wrap(error)
94
- else
95
- raise RuntimeError, "Could not parse document"
96
- end
97
- end
98
-
99
- schema = allocate
100
- schema.cstruct = LibXML::XmlSchema.new schema_ptr
101
- schema.errors = errors
102
- schema
103
- end
104
-
105
- # :startdoc:
106
- end
107
- end
108
- end
109
-