nokogiri 1.3.0-x86-mswin32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (256) hide show
  1. data/.autotest +27 -0
  2. data/CHANGELOG.ja.rdoc +233 -0
  3. data/CHANGELOG.rdoc +222 -0
  4. data/Manifest.txt +247 -0
  5. data/README.ja.rdoc +103 -0
  6. data/README.rdoc +117 -0
  7. data/Rakefile +205 -0
  8. data/bin/nokogiri +47 -0
  9. data/ext/nokogiri/extconf.rb +89 -0
  10. data/ext/nokogiri/html_document.c +183 -0
  11. data/ext/nokogiri/html_document.h +10 -0
  12. data/ext/nokogiri/html_element_description.c +272 -0
  13. data/ext/nokogiri/html_element_description.h +10 -0
  14. data/ext/nokogiri/html_entity_lookup.c +30 -0
  15. data/ext/nokogiri/html_entity_lookup.h +8 -0
  16. data/ext/nokogiri/html_sax_parser.c +57 -0
  17. data/ext/nokogiri/html_sax_parser.h +11 -0
  18. data/ext/nokogiri/iconv.dll +0 -0
  19. data/ext/nokogiri/libexslt.dll +0 -0
  20. data/ext/nokogiri/libxml2.dll +0 -0
  21. data/ext/nokogiri/libxslt.dll +0 -0
  22. data/ext/nokogiri/nokogiri.c +81 -0
  23. data/ext/nokogiri/nokogiri.h +149 -0
  24. data/ext/nokogiri/xml_attr.c +92 -0
  25. data/ext/nokogiri/xml_attr.h +9 -0
  26. data/ext/nokogiri/xml_cdata.c +53 -0
  27. data/ext/nokogiri/xml_cdata.h +9 -0
  28. data/ext/nokogiri/xml_comment.c +51 -0
  29. data/ext/nokogiri/xml_comment.h +9 -0
  30. data/ext/nokogiri/xml_document.c +308 -0
  31. data/ext/nokogiri/xml_document.h +21 -0
  32. data/ext/nokogiri/xml_document_fragment.c +48 -0
  33. data/ext/nokogiri/xml_document_fragment.h +10 -0
  34. data/ext/nokogiri/xml_dtd.c +102 -0
  35. data/ext/nokogiri/xml_dtd.h +8 -0
  36. data/ext/nokogiri/xml_entity_reference.c +50 -0
  37. data/ext/nokogiri/xml_entity_reference.h +9 -0
  38. data/ext/nokogiri/xml_io.c +24 -0
  39. data/ext/nokogiri/xml_io.h +10 -0
  40. data/ext/nokogiri/xml_namespace.c +69 -0
  41. data/ext/nokogiri/xml_namespace.h +12 -0
  42. data/ext/nokogiri/xml_node.c +928 -0
  43. data/ext/nokogiri/xml_node.h +14 -0
  44. data/ext/nokogiri/xml_node_set.c +386 -0
  45. data/ext/nokogiri/xml_node_set.h +9 -0
  46. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  47. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  48. data/ext/nokogiri/xml_reader.c +572 -0
  49. data/ext/nokogiri/xml_reader.h +10 -0
  50. data/ext/nokogiri/xml_relax_ng.c +106 -0
  51. data/ext/nokogiri/xml_relax_ng.h +9 -0
  52. data/ext/nokogiri/xml_sax_parser.c +336 -0
  53. data/ext/nokogiri/xml_sax_parser.h +10 -0
  54. data/ext/nokogiri/xml_sax_push_parser.c +86 -0
  55. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  56. data/ext/nokogiri/xml_schema.c +107 -0
  57. data/ext/nokogiri/xml_schema.h +9 -0
  58. data/ext/nokogiri/xml_syntax_error.c +203 -0
  59. data/ext/nokogiri/xml_syntax_error.h +12 -0
  60. data/ext/nokogiri/xml_text.c +47 -0
  61. data/ext/nokogiri/xml_text.h +9 -0
  62. data/ext/nokogiri/xml_xpath.c +53 -0
  63. data/ext/nokogiri/xml_xpath.h +11 -0
  64. data/ext/nokogiri/xml_xpath_context.c +252 -0
  65. data/ext/nokogiri/xml_xpath_context.h +9 -0
  66. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  67. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  68. data/ext/nokogiri/zlib1.dll +0 -0
  69. data/lib/action-nokogiri.rb +36 -0
  70. data/lib/nokogiri.rb +110 -0
  71. data/lib/nokogiri/1.8/nokogiri.so +0 -0
  72. data/lib/nokogiri/1.9/nokogiri.so +0 -0
  73. data/lib/nokogiri/css.rb +25 -0
  74. data/lib/nokogiri/css/generated_parser.rb +748 -0
  75. data/lib/nokogiri/css/generated_tokenizer.rb +144 -0
  76. data/lib/nokogiri/css/node.rb +107 -0
  77. data/lib/nokogiri/css/parser.rb +82 -0
  78. data/lib/nokogiri/css/parser.y +227 -0
  79. data/lib/nokogiri/css/syntax_error.rb +7 -0
  80. data/lib/nokogiri/css/tokenizer.rb +11 -0
  81. data/lib/nokogiri/css/tokenizer.rex +54 -0
  82. data/lib/nokogiri/css/xpath_visitor.rb +172 -0
  83. data/lib/nokogiri/decorators.rb +2 -0
  84. data/lib/nokogiri/decorators/hpricot.rb +3 -0
  85. data/lib/nokogiri/decorators/hpricot/node.rb +56 -0
  86. data/lib/nokogiri/decorators/hpricot/node_set.rb +54 -0
  87. data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +30 -0
  88. data/lib/nokogiri/decorators/slop.rb +33 -0
  89. data/lib/nokogiri/ffi/html/document.rb +37 -0
  90. data/lib/nokogiri/ffi/html/element_description.rb +85 -0
  91. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  92. data/lib/nokogiri/ffi/html/sax/parser.rb +21 -0
  93. data/lib/nokogiri/ffi/io_callbacks.rb +32 -0
  94. data/lib/nokogiri/ffi/libxml.rb +314 -0
  95. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  96. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  97. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  98. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  99. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  100. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  101. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  102. data/lib/nokogiri/ffi/structs/xml_dtd.rb +26 -0
  103. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  104. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  105. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  106. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  107. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  108. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  109. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +14 -0
  110. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  111. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  112. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  113. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  114. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  115. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  116. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  117. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  118. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  119. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  120. data/lib/nokogiri/ffi/xml/document.rb +107 -0
  121. data/lib/nokogiri/ffi/xml/document_fragment.rb +26 -0
  122. data/lib/nokogiri/ffi/xml/dtd.rb +42 -0
  123. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  124. data/lib/nokogiri/ffi/xml/namespace.rb +38 -0
  125. data/lib/nokogiri/ffi/xml/node.rb +380 -0
  126. data/lib/nokogiri/ffi/xml/node_set.rb +130 -0
  127. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  128. data/lib/nokogiri/ffi/xml/reader.rb +217 -0
  129. data/lib/nokogiri/ffi/xml/relax_ng.rb +51 -0
  130. data/lib/nokogiri/ffi/xml/sax/parser.rb +148 -0
  131. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +38 -0
  132. data/lib/nokogiri/ffi/xml/schema.rb +55 -0
  133. data/lib/nokogiri/ffi/xml/syntax_error.rb +76 -0
  134. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  135. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  136. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  137. data/lib/nokogiri/ffi/xslt/stylesheet.rb +47 -0
  138. data/lib/nokogiri/hpricot.rb +62 -0
  139. data/lib/nokogiri/html.rb +34 -0
  140. data/lib/nokogiri/html/builder.rb +35 -0
  141. data/lib/nokogiri/html/document.rb +71 -0
  142. data/lib/nokogiri/html/document_fragment.rb +15 -0
  143. data/lib/nokogiri/html/element_description.rb +23 -0
  144. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  145. data/lib/nokogiri/html/sax/parser.rb +47 -0
  146. data/lib/nokogiri/nokogiri.rb +1 -0
  147. data/lib/nokogiri/syntax_error.rb +4 -0
  148. data/lib/nokogiri/version.rb +29 -0
  149. data/lib/nokogiri/version_warning.rb +11 -0
  150. data/lib/nokogiri/xml.rb +62 -0
  151. data/lib/nokogiri/xml/attr.rb +9 -0
  152. data/lib/nokogiri/xml/builder.rb +254 -0
  153. data/lib/nokogiri/xml/cdata.rb +11 -0
  154. data/lib/nokogiri/xml/document.rb +100 -0
  155. data/lib/nokogiri/xml/document_fragment.rb +49 -0
  156. data/lib/nokogiri/xml/dtd.rb +11 -0
  157. data/lib/nokogiri/xml/entity_declaration.rb +11 -0
  158. data/lib/nokogiri/xml/fragment_handler.rb +55 -0
  159. data/lib/nokogiri/xml/namespace.rb +7 -0
  160. data/lib/nokogiri/xml/node.rb +745 -0
  161. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  162. data/lib/nokogiri/xml/node_set.rb +238 -0
  163. data/lib/nokogiri/xml/notation.rb +6 -0
  164. data/lib/nokogiri/xml/parse_options.rb +80 -0
  165. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  166. data/lib/nokogiri/xml/reader.rb +66 -0
  167. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  168. data/lib/nokogiri/xml/sax.rb +3 -0
  169. data/lib/nokogiri/xml/sax/document.rb +143 -0
  170. data/lib/nokogiri/xml/sax/parser.rb +101 -0
  171. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  172. data/lib/nokogiri/xml/schema.rb +65 -0
  173. data/lib/nokogiri/xml/syntax_error.rb +34 -0
  174. data/lib/nokogiri/xml/xpath.rb +10 -0
  175. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  176. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  177. data/lib/nokogiri/xslt.rb +48 -0
  178. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  179. data/lib/xsd/xmlparser/nokogiri.rb +64 -0
  180. data/tasks/test.rb +161 -0
  181. data/test/css/test_nthiness.rb +160 -0
  182. data/test/css/test_parser.rb +277 -0
  183. data/test/css/test_tokenizer.rb +176 -0
  184. data/test/css/test_xpath_visitor.rb +76 -0
  185. data/test/ffi/test_document.rb +35 -0
  186. data/test/files/address_book.rlx +12 -0
  187. data/test/files/address_book.xml +10 -0
  188. data/test/files/dont_hurt_em_why.xml +422 -0
  189. data/test/files/exslt.xml +8 -0
  190. data/test/files/exslt.xslt +35 -0
  191. data/test/files/po.xml +32 -0
  192. data/test/files/po.xsd +66 -0
  193. data/test/files/staff.xml +59 -0
  194. data/test/files/staff.xslt +32 -0
  195. data/test/files/tlm.html +850 -0
  196. data/test/helper.rb +123 -0
  197. data/test/hpricot/files/basic.xhtml +17 -0
  198. data/test/hpricot/files/boingboing.html +2266 -0
  199. data/test/hpricot/files/cy0.html +3653 -0
  200. data/test/hpricot/files/immob.html +400 -0
  201. data/test/hpricot/files/pace_application.html +1320 -0
  202. data/test/hpricot/files/tenderlove.html +16 -0
  203. data/test/hpricot/files/uswebgen.html +220 -0
  204. data/test/hpricot/files/utf8.html +1054 -0
  205. data/test/hpricot/files/week9.html +1723 -0
  206. data/test/hpricot/files/why.xml +19 -0
  207. data/test/hpricot/load_files.rb +11 -0
  208. data/test/hpricot/test_alter.rb +68 -0
  209. data/test/hpricot/test_builder.rb +20 -0
  210. data/test/hpricot/test_parser.rb +426 -0
  211. data/test/hpricot/test_paths.rb +15 -0
  212. data/test/hpricot/test_preserved.rb +77 -0
  213. data/test/hpricot/test_xml.rb +30 -0
  214. data/test/html/sax/test_parser.rb +52 -0
  215. data/test/html/test_builder.rb +156 -0
  216. data/test/html/test_document.rb +361 -0
  217. data/test/html/test_document_encoding.rb +46 -0
  218. data/test/html/test_document_fragment.rb +97 -0
  219. data/test/html/test_element_description.rb +95 -0
  220. data/test/html/test_named_characters.rb +14 -0
  221. data/test/html/test_node.rb +165 -0
  222. data/test/test_convert_xpath.rb +186 -0
  223. data/test/test_css_cache.rb +56 -0
  224. data/test/test_gc.rb +15 -0
  225. data/test/test_memory_leak.rb +77 -0
  226. data/test/test_nokogiri.rb +127 -0
  227. data/test/test_reader.rb +316 -0
  228. data/test/test_xslt_transforms.rb +131 -0
  229. data/test/xml/node/test_save_options.rb +20 -0
  230. data/test/xml/node/test_subclass.rb +44 -0
  231. data/test/xml/sax/test_parser.rb +169 -0
  232. data/test/xml/sax/test_push_parser.rb +92 -0
  233. data/test/xml/test_attr.rb +38 -0
  234. data/test/xml/test_builder.rb +73 -0
  235. data/test/xml/test_cdata.rb +38 -0
  236. data/test/xml/test_comment.rb +23 -0
  237. data/test/xml/test_document.rb +397 -0
  238. data/test/xml/test_document_encoding.rb +26 -0
  239. data/test/xml/test_document_fragment.rb +76 -0
  240. data/test/xml/test_dtd.rb +42 -0
  241. data/test/xml/test_dtd_encoding.rb +31 -0
  242. data/test/xml/test_entity_reference.rb +21 -0
  243. data/test/xml/test_namespace.rb +43 -0
  244. data/test/xml/test_node.rb +808 -0
  245. data/test/xml/test_node_attributes.rb +34 -0
  246. data/test/xml/test_node_encoding.rb +84 -0
  247. data/test/xml/test_node_set.rb +368 -0
  248. data/test/xml/test_parse_options.rb +52 -0
  249. data/test/xml/test_processing_instruction.rb +30 -0
  250. data/test/xml/test_reader_encoding.rb +126 -0
  251. data/test/xml/test_relax_ng.rb +60 -0
  252. data/test/xml/test_schema.rb +65 -0
  253. data/test/xml/test_text.rb +18 -0
  254. data/test/xml/test_unparented_node.rb +381 -0
  255. data/test/xml/test_xpath.rb +106 -0
  256. metadata +409 -0
@@ -0,0 +1,55 @@
1
+ module Nokogiri
2
+ module XML
3
+ class Schema
4
+
5
+ attr_accessor :cstruct # :nodoc:
6
+
7
+ def validate_document(document) # :nodoc:
8
+ errors = []
9
+
10
+ ctx = LibXML.xmlSchemaNewValidCtxt(cstruct)
11
+ raise RuntimeError.new("Could not create a validation context") if ctx.null?
12
+
13
+ LibXML.xmlSchemaSetValidStructuredErrors(ctx,
14
+ SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
15
+
16
+ LibXML.xmlSchemaValidateDoc(ctx, document.cstruct)
17
+
18
+ LibXML.xmlSchemaFreeValidCtxt(ctx)
19
+
20
+ errors
21
+ end
22
+ private :validate_document
23
+
24
+ def self.read_memory(content) # :nodoc:
25
+ ctx = LibXML.xmlSchemaNewMemParserCtxt(content, content.length)
26
+
27
+ errors = []
28
+
29
+ LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
30
+ LibXML.xmlSchemaSetParserStructuredErrors(ctx, SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
31
+
32
+ schema_ptr = LibXML.xmlSchemaParse(ctx)
33
+
34
+ LibXML.xmlSetStructuredErrorFunc(nil, nil)
35
+ LibXML.xmlSchemaFreeParserCtxt(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::XmlSchema.new schema_ptr
48
+ schema.errors = errors
49
+ schema
50
+ end
51
+
52
+ end
53
+ end
54
+ end
55
+
@@ -0,0 +1,76 @@
1
+ module Nokogiri
2
+ module XML
3
+ class SyntaxError < ::Nokogiri::SyntaxError
4
+
5
+ attr_accessor :cstruct # :nodoc:
6
+
7
+ def domain # :nodoc:
8
+ cstruct[:domain]
9
+ end
10
+
11
+ def code # :nodoc:
12
+ cstruct[:code]
13
+ end
14
+
15
+ def message # :nodoc:
16
+ cstruct[:message]
17
+ end
18
+ undef_method :inspect
19
+ alias_method :inspect, :message
20
+ undef_method :to_s
21
+ alias_method :to_s, :message
22
+
23
+ def level # :nodoc:
24
+ cstruct[:level]
25
+ end
26
+
27
+ def file # :nodoc:
28
+ cstruct[:file].null? ? nil : cstruct[:file]
29
+ end
30
+
31
+ def line # :nodoc:
32
+ cstruct[:line]
33
+ end
34
+
35
+ def str1 # :nodoc:
36
+ cstruct[:str1].null? ? nil : cstruct[:str1]
37
+ end
38
+
39
+ def str2 # :nodoc:
40
+ cstruct[:str].null? ? nil : cstruct[:str]
41
+ end
42
+
43
+ def str3 # :nodoc:
44
+ cstruct[:str3].null? ? nil : cstruct[:str3]
45
+ end
46
+
47
+ def int1 # :nodoc:
48
+ cstruct[:int1]
49
+ end
50
+
51
+ def column # :nodoc:
52
+ cstruct[:int2]
53
+ end
54
+ alias_method :int2, :column
55
+
56
+ class << self
57
+ def error_array_pusher(array) # :nodoc:
58
+ Proc.new do |_ignored_, error|
59
+ array << wrap(error) if array
60
+ end
61
+ end
62
+
63
+ def wrap(error_ptr) # :nodoc:
64
+ error_struct = LibXML::XmlSyntaxError.allocate
65
+ LibXML.xmlCopyError(error_ptr, error_struct)
66
+ error_cstruct = LibXML::XmlSyntaxError.new(error_struct)
67
+ error = self.new # will generate XML::XPath::SyntaxError or XML::SyntaxError
68
+ error.cstruct = error_cstruct
69
+ error
70
+ end
71
+ end
72
+
73
+ end
74
+ end
75
+
76
+ end
@@ -0,0 +1,18 @@
1
+ module Nokogiri
2
+ module XML
3
+ class Text < Node
4
+
5
+ def self.new(string, document, *rest) # :nodoc:
6
+ node_ptr = LibXML.xmlNewText(string)
7
+ node_cstruct = LibXML::XmlNode.new(node_ptr)
8
+ node_cstruct[:doc] = document.cstruct
9
+
10
+ node = Node.wrap(node_cstruct, self)
11
+ node.send :initialize, string, document, *rest
12
+ yield node if block_given?
13
+ node
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ module Nokogiri
2
+ module XML
3
+ class XPath
4
+
5
+ attr_accessor :cstruct # :nodoc:
6
+
7
+ def node_set # :nodoc:
8
+ ptr = cstruct[:nodesetval] if cstruct[:nodesetval]
9
+ ptr = LibXML.xmlXPathNodeSetCreate(nil) if ptr.null?
10
+
11
+ set = XML::NodeSet.new(@document)
12
+ set.cstruct = LibXML::XmlNodeSet.new(ptr)
13
+ set.document = @document
14
+ set
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,135 @@
1
+ module Nokogiri
2
+ module XML
3
+ class XPathContext
4
+
5
+ attr_accessor :cstruct # :nodoc:
6
+
7
+ def register_ns(prefix, uri) # :nodoc:
8
+ LibXML.xmlXPathRegisterNs(cstruct, prefix, uri)
9
+ end
10
+
11
+ def evaluate(search_path, xpath_handler=nil) # :nodoc:
12
+ lookup = nil # to keep lambda in scope long enough to avoid a possible GC tragedy
13
+ query = search_path.to_s
14
+
15
+ if xpath_handler
16
+ lookup = lambda do |ctx, name, uri|
17
+ return nil unless xpath_handler.respond_to?(name)
18
+ ruby_funcall name, xpath_handler
19
+ end
20
+ LibXML.xmlXPathRegisterFuncLookup(cstruct, lookup, nil);
21
+ end
22
+
23
+ exception_handler = lambda do |ctx, error|
24
+ raise XPath::SyntaxError.wrap(error)
25
+ end
26
+ LibXML.xmlResetLastError()
27
+ LibXML.xmlSetStructuredErrorFunc(nil, exception_handler)
28
+
29
+ generic_exception_handler = lambda do |ctx, msg|
30
+ raise RuntimeError.new(msg) # TODO: varargs
31
+ end
32
+ LibXML.xmlSetGenericErrorFunc(nil, generic_exception_handler)
33
+
34
+ xpath_ptr = LibXML.xmlXPathEvalExpression(query, cstruct)
35
+
36
+ LibXML.xmlSetStructuredErrorFunc(nil, nil)
37
+ LibXML.xmlSetGenericErrorFunc(nil, nil)
38
+
39
+ if xpath_ptr.null?
40
+ error = LibXML.xmlGetLastError()
41
+ raise XPath::SyntaxError.wrap(error)
42
+ end
43
+
44
+ xpath = XML::XPath.new
45
+ xpath.cstruct = LibXML::XmlXpathObject.new(xpath_ptr)
46
+ xpath.document = cstruct[:doc]
47
+ xpath
48
+ end
49
+
50
+ def self.new(node) # :nodoc:
51
+ LibXML.xmlXPathInit()
52
+
53
+ ptr = LibXML.xmlXPathNewContext(node.cstruct[:doc])
54
+
55
+ ctx = allocate
56
+ ctx.cstruct = LibXML::XmlXpathContext.new(ptr)
57
+ ctx.cstruct[:node] = node.cstruct
58
+ ctx
59
+ end
60
+
61
+ private
62
+
63
+ #
64
+ # returns a lambda that will call the handler function with marshalled parameters
65
+ #
66
+ def ruby_funcall(name, xpath_handler) # :nodoc:
67
+ lambda do |ctx, nargs|
68
+ parser_context = LibXML::XmlXpathParserContext.new(ctx)
69
+ context = parser_context.context
70
+ doc = context.doc.ruby_doc
71
+
72
+ params = []
73
+
74
+ nargs.times do |j|
75
+ obj = LibXML::XmlXpathObject.new(LibXML.valuePop(ctx))
76
+ case obj[:type]
77
+ when LibXML::XmlXpathObject::XPATH_STRING
78
+ params.unshift obj[:stringval]
79
+ when LibXML::XmlXpathObject::XPATH_BOOLEAN
80
+ params.unshift obj[:boolval] == 1
81
+ when LibXML::XmlXpathObject::XPATH_NUMBER
82
+ params.unshift obj[:floatval]
83
+ when LibXML::XmlXpathObject::XPATH_NODESET
84
+ ns_ptr = LibXML::XmlNodeSet.new(obj[:nodesetval])
85
+ set = NodeSet.allocate
86
+ set.cstruct = ns_ptr
87
+ params.unshift set
88
+ else
89
+ char_ptr = params.unshift LibXML.xmlXPathCastToString(obj)
90
+ string = char_ptr.read_string
91
+ LibXML.xmlFree(char_ptr)
92
+ string
93
+ end
94
+ end
95
+
96
+ result = xpath_handler.send(name, *params)
97
+
98
+ case result.class.to_s
99
+ when Fixnum.to_s, Float.to_s, Bignum.to_s
100
+ LibXML.xmlXPathReturnNumber(ctx, result)
101
+ when String.to_s
102
+ LibXML.xmlXPathReturnString(
103
+ ctx,
104
+ LibXML.xmlXPathWrapCString(result)
105
+ )
106
+ when TrueClass.to_s
107
+ LibXML.xmlXPathReturnTrue(ctx)
108
+ when FalseClass.to_s
109
+ LibXML.xmlXPathReturnFalse(ctx)
110
+ when NilClass.to_s
111
+ ;
112
+ when Array.to_s
113
+ node_set = XML::NodeSet.new(doc, result)
114
+ LibXML.xmlXPathReturnNodeSet(
115
+ ctx,
116
+ LibXML.xmlXPathNodeSetMerge(nil, node_set.cstruct)
117
+ )
118
+ else
119
+ if result.is_a?(XML::NodeSet)
120
+ LibXML.xmlXPathReturnNodeSet(
121
+ ctx,
122
+ LibXML.xmlXPathNodeSetMerge(nil, result.cstruct)
123
+ )
124
+ else
125
+ raise RuntimeError.new("Invalid return type #{result.class.inspect}")
126
+ end
127
+ end
128
+
129
+ nil
130
+ end # lambda
131
+ end # ruby_funcall
132
+
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,47 @@
1
+ module Nokogiri
2
+ module XSLT
3
+ class Stylesheet
4
+
5
+ attr_accessor :cstruct # :nodoc:
6
+
7
+ def self.parse_stylesheet_doc(document) # :nodoc:
8
+ LibXML.exsltRegisterAll
9
+
10
+ generic_exception_handler = lambda do |ctx, msg|
11
+ raise RuntimeError.new(msg) # TODO: varargs
12
+ end
13
+ LibXML.xsltSetGenericErrorFunc(nil, generic_exception_handler)
14
+
15
+ ss = LibXML.xsltParseStylesheetDoc(LibXML.xmlCopyDoc(document.cstruct, 1)) # 1 => recursive
16
+
17
+ LibXML.xsltSetGenericErrorFunc(nil, nil)
18
+
19
+ obj = allocate
20
+ obj.cstruct = LibXML::XsltStylesheet.new(ss)
21
+ obj
22
+ end
23
+
24
+ def serialize(document) # :nodoc:
25
+ buf_ptr = FFI::MemoryPointer.new :pointer
26
+ buf_len = FFI::MemoryPointer.new :int
27
+ LibXML.xsltSaveResultToString(buf_ptr, buf_len, document.cstruct, cstruct)
28
+ buf = Nokogiri::LibXML::XmlAlloc.new(buf_ptr.read_pointer)
29
+ buf.pointer.read_string(buf_len.read_int)
30
+ end
31
+
32
+ def transform(document, params=[]) # :nodoc:
33
+ param_arr = FFI::MemoryPointer.new(:pointer, params.length + 1)
34
+ params.each_with_index do |param, j|
35
+ param_arr[j].put_pointer(0, FFI::MemoryPointer.from_string(param.to_s))
36
+ end
37
+ param_arr[params.length].put_pointer(0,nil)
38
+
39
+ ptr = LibXML.xsltApplyStylesheet(cstruct, document.cstruct, param_arr)
40
+ raise(RuntimeError, "could not perform xslt transform on document") if ptr.null?
41
+
42
+ XML::Document.wrap(ptr)
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,62 @@
1
+ require 'nokogiri'
2
+
3
+ module Nokogiri
4
+ module Hpricot
5
+ # STag compatibility proxy
6
+ STag = String
7
+ # Elem compatibility proxy
8
+ Elem = XML::Node
9
+ # NamedCharacters compatibility proxy
10
+ NamedCharacters = Nokogiri::HTML::NamedCharacters
11
+ class << self
12
+ # parse proxy
13
+ def parse(*args)
14
+ doc = Nokogiri.parse(*args)
15
+ add_decorators(doc)
16
+ end
17
+
18
+ # XML proxy
19
+ def XML(string)
20
+ doc = Nokogiri::XML::Document.parse(string)
21
+ add_decorators(doc)
22
+ end
23
+
24
+ # HTML proxy
25
+ def HTML(string)
26
+ doc = Nokogiri::HTML::Document.parse(string)
27
+ add_decorators(doc)
28
+ end
29
+
30
+ # make proxy
31
+ def make string
32
+ doc = XML::Document.new
33
+ ns = XML::NodeSet.new(doc)
34
+ ns << XML::Text.new(string, doc)
35
+ ns
36
+ end
37
+
38
+ # Add compatibility decorators
39
+ def add_decorators(doc)
40
+ doc.decorators(XML::Node) << Decorators::Hpricot::Node
41
+ doc.decorators(XML::NodeSet) << Decorators::Hpricot::NodeSet
42
+ doc.decorate!
43
+ doc
44
+ end
45
+ end
46
+ end
47
+
48
+ class << self
49
+ ###
50
+ # Parse a document and apply the Hpricot decorators for Hpricot
51
+ # compatibility mode.
52
+ def Hpricot(*args, &block)
53
+ if block_given?
54
+ builder = Nokogiri::HTML::Builder.new(&block)
55
+ Nokogiri::Hpricot.add_decorators(builder.doc)
56
+ else
57
+ doc = Nokogiri.parse(*args)
58
+ Nokogiri::Hpricot.add_decorators(doc)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,34 @@
1
+ require 'nokogiri/html/entity_lookup'
2
+ require 'nokogiri/html/document'
3
+ require 'nokogiri/html/document_fragment'
4
+ require 'nokogiri/html/sax/parser'
5
+ require 'nokogiri/html/element_description'
6
+
7
+ module Nokogiri
8
+ class << self
9
+ ###
10
+ # Parse HTML. Convenience method for Nokogiri::HTML::Document.parse
11
+ def HTML thing, url = nil, encoding = nil, options = 2145, &block
12
+ Nokogiri::HTML::Document.parse(thing, url, encoding, options, &block)
13
+ end
14
+ end
15
+
16
+ module HTML
17
+ class << self
18
+ ###
19
+ # Parse HTML. Convenience method for Nokogiri::HTML::Document.parse
20
+ def parse thing, url = nil, encoding = nil, options = 2145, &block
21
+ Document.parse(thing, url, encoding, options, &block)
22
+ end
23
+
24
+ ####
25
+ # Parse a fragment from +string+ in to a NodeSet.
26
+ def fragment string
27
+ HTML::DocumentFragment.parse(string)
28
+ end
29
+ end
30
+
31
+ # Instance of Nokogiri::HTML::EntityLookup
32
+ NamedCharacters = EntityLookup.new
33
+ end
34
+ end