nokogiri 1.2.3-x86-mswin32-60 → 1.4.5-x86-mswin32-60

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 (319) hide show
  1. data/.autotest +18 -7
  2. data/.gemtest +0 -0
  3. data/CHANGELOG.ja.rdoc +297 -3
  4. data/CHANGELOG.rdoc +289 -0
  5. data/Manifest.txt +148 -37
  6. data/README.ja.rdoc +20 -20
  7. data/README.rdoc +53 -22
  8. data/Rakefile +127 -211
  9. data/bin/nokogiri +54 -0
  10. data/ext/nokogiri/depend +358 -0
  11. data/ext/nokogiri/extconf.rb +89 -54
  12. data/ext/nokogiri/html_document.c +34 -27
  13. data/ext/nokogiri/html_document.h +1 -1
  14. data/ext/nokogiri/html_element_description.c +276 -0
  15. data/ext/nokogiri/html_element_description.h +10 -0
  16. data/ext/nokogiri/html_entity_lookup.c +7 -5
  17. data/ext/nokogiri/html_entity_lookup.h +1 -1
  18. data/ext/nokogiri/html_sax_parser_context.c +94 -0
  19. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  20. data/ext/nokogiri/{native.c → nokogiri.c} +31 -7
  21. data/ext/nokogiri/{native.h → nokogiri.h} +68 -41
  22. data/ext/nokogiri/xml_attr.c +20 -9
  23. data/ext/nokogiri/xml_attr.h +1 -1
  24. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  25. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  26. data/ext/nokogiri/xml_cdata.c +21 -9
  27. data/ext/nokogiri/xml_cdata.h +1 -1
  28. data/ext/nokogiri/xml_comment.c +18 -6
  29. data/ext/nokogiri/xml_comment.h +1 -1
  30. data/ext/nokogiri/xml_document.c +247 -68
  31. data/ext/nokogiri/xml_document.h +5 -3
  32. data/ext/nokogiri/xml_document_fragment.c +15 -7
  33. data/ext/nokogiri/xml_document_fragment.h +1 -1
  34. data/ext/nokogiri/xml_dtd.c +110 -10
  35. data/ext/nokogiri/xml_dtd.h +3 -1
  36. data/ext/nokogiri/xml_element_content.c +123 -0
  37. data/ext/nokogiri/xml_element_content.h +10 -0
  38. data/ext/nokogiri/xml_element_decl.c +69 -0
  39. data/ext/nokogiri/xml_element_decl.h +9 -0
  40. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  41. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  42. data/ext/nokogiri/xml_entity_decl.c +110 -0
  43. data/ext/nokogiri/xml_entity_decl.h +10 -0
  44. data/ext/nokogiri/xml_entity_reference.c +16 -5
  45. data/ext/nokogiri/xml_entity_reference.h +1 -1
  46. data/ext/nokogiri/xml_io.c +40 -8
  47. data/ext/nokogiri/xml_io.h +2 -1
  48. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  49. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  50. data/ext/nokogiri/xml_namespace.c +84 -0
  51. data/ext/nokogiri/xml_namespace.h +13 -0
  52. data/ext/nokogiri/xml_node.c +782 -225
  53. data/ext/nokogiri/xml_node.h +2 -4
  54. data/ext/nokogiri/xml_node_set.c +253 -34
  55. data/ext/nokogiri/xml_node_set.h +2 -2
  56. data/ext/nokogiri/xml_processing_instruction.c +17 -5
  57. data/ext/nokogiri/xml_processing_instruction.h +1 -1
  58. data/ext/nokogiri/xml_reader.c +277 -85
  59. data/ext/nokogiri/xml_reader.h +1 -1
  60. data/ext/nokogiri/xml_relax_ng.c +168 -0
  61. data/ext/nokogiri/xml_relax_ng.h +9 -0
  62. data/ext/nokogiri/xml_sax_parser.c +183 -111
  63. data/ext/nokogiri/xml_sax_parser.h +30 -1
  64. data/ext/nokogiri/xml_sax_parser_context.c +199 -0
  65. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  66. data/ext/nokogiri/xml_sax_push_parser.c +42 -12
  67. data/ext/nokogiri/xml_sax_push_parser.h +1 -1
  68. data/ext/nokogiri/xml_schema.c +205 -0
  69. data/ext/nokogiri/xml_schema.h +9 -0
  70. data/ext/nokogiri/xml_syntax_error.c +28 -173
  71. data/ext/nokogiri/xml_syntax_error.h +2 -1
  72. data/ext/nokogiri/xml_text.c +16 -6
  73. data/ext/nokogiri/xml_text.h +1 -1
  74. data/ext/nokogiri/xml_xpath_context.c +104 -47
  75. data/ext/nokogiri/xml_xpath_context.h +1 -1
  76. data/ext/nokogiri/xslt_stylesheet.c +161 -19
  77. data/ext/nokogiri/xslt_stylesheet.h +1 -1
  78. data/lib/nokogiri.rb +47 -8
  79. data/lib/nokogiri/1.8/nokogiri.so +0 -0
  80. data/lib/nokogiri/1.9/nokogiri.so +0 -0
  81. data/lib/nokogiri/css.rb +6 -3
  82. data/lib/nokogiri/css/node.rb +14 -12
  83. data/lib/nokogiri/css/parser.rb +665 -62
  84. data/lib/nokogiri/css/parser.y +20 -10
  85. data/lib/nokogiri/css/parser_extras.rb +91 -0
  86. data/lib/nokogiri/css/tokenizer.rb +148 -5
  87. data/lib/nokogiri/css/tokenizer.rex +10 -9
  88. data/lib/nokogiri/css/xpath_visitor.rb +47 -44
  89. data/lib/nokogiri/decorators/slop.rb +8 -4
  90. data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
  91. data/lib/nokogiri/ffi/html/document.rb +28 -0
  92. data/lib/nokogiri/ffi/html/element_description.rb +81 -0
  93. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  94. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  95. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  96. data/lib/nokogiri/ffi/libxml.rb +420 -0
  97. data/lib/nokogiri/ffi/structs/common_node.rb +38 -0
  98. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  99. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  100. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  101. data/lib/nokogiri/ffi/structs/xml_attr.rb +20 -0
  102. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  103. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  104. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
  105. data/lib/nokogiri/ffi/structs/xml_document.rb +117 -0
  106. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  107. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  108. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  109. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  110. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  111. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  112. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  113. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  114. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  115. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +20 -0
  116. data/lib/nokogiri/ffi/structs/xml_parser_input.rb +19 -0
  117. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  118. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  119. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
  120. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  121. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  122. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  123. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +38 -0
  124. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  125. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  126. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  127. data/lib/nokogiri/ffi/weak_bucket.rb +40 -0
  128. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  129. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  130. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  131. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  132. data/lib/nokogiri/ffi/xml/document.rb +174 -0
  133. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  134. data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
  135. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  136. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  137. data/lib/nokogiri/ffi/xml/entity_decl.rb +36 -0
  138. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  139. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  140. data/lib/nokogiri/ffi/xml/node.rb +559 -0
  141. data/lib/nokogiri/ffi/xml/node_set.rb +150 -0
  142. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  143. data/lib/nokogiri/ffi/xml/reader.rb +236 -0
  144. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  145. data/lib/nokogiri/ffi/xml/sax/parser.rb +143 -0
  146. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +79 -0
  147. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +51 -0
  148. data/lib/nokogiri/ffi/xml/schema.rb +109 -0
  149. data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
  150. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  151. data/lib/nokogiri/ffi/xml/xpath.rb +9 -0
  152. data/lib/nokogiri/ffi/xml/xpath_context.rb +153 -0
  153. data/lib/nokogiri/ffi/xslt/stylesheet.rb +77 -0
  154. data/lib/nokogiri/html.rb +13 -47
  155. data/lib/nokogiri/html/builder.rb +27 -1
  156. data/lib/nokogiri/html/document.rb +201 -7
  157. data/lib/nokogiri/html/document_fragment.rb +41 -0
  158. data/lib/nokogiri/html/element_description.rb +23 -0
  159. data/lib/nokogiri/html/entity_lookup.rb +2 -0
  160. data/lib/nokogiri/html/sax/parser.rb +34 -3
  161. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  162. data/lib/nokogiri/nokogiri.rb +1 -0
  163. data/lib/nokogiri/version.rb +40 -1
  164. data/lib/nokogiri/version_warning.rb +14 -0
  165. data/lib/nokogiri/xml.rb +32 -53
  166. data/lib/nokogiri/xml/attr.rb +5 -0
  167. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  168. data/lib/nokogiri/xml/builder.rb +349 -29
  169. data/lib/nokogiri/xml/cdata.rb +3 -1
  170. data/lib/nokogiri/xml/character_data.rb +7 -0
  171. data/lib/nokogiri/xml/document.rb +166 -14
  172. data/lib/nokogiri/xml/document_fragment.rb +76 -1
  173. data/lib/nokogiri/xml/dtd.rb +16 -3
  174. data/lib/nokogiri/xml/element_content.rb +36 -0
  175. data/lib/nokogiri/xml/element_decl.rb +13 -0
  176. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  177. data/lib/nokogiri/xml/namespace.rb +13 -0
  178. data/lib/nokogiri/xml/node.rb +561 -166
  179. data/lib/nokogiri/xml/node/save_options.rb +22 -2
  180. data/lib/nokogiri/xml/node_set.rb +202 -40
  181. data/lib/nokogiri/xml/parse_options.rb +93 -0
  182. data/lib/nokogiri/xml/pp.rb +2 -0
  183. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  184. data/lib/nokogiri/xml/pp/node.rb +56 -0
  185. data/lib/nokogiri/xml/processing_instruction.rb +2 -0
  186. data/lib/nokogiri/xml/reader.rb +93 -8
  187. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  188. data/lib/nokogiri/xml/sax.rb +1 -7
  189. data/lib/nokogiri/xml/sax/document.rb +107 -2
  190. data/lib/nokogiri/xml/sax/parser.rb +57 -7
  191. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  192. data/lib/nokogiri/xml/sax/push_parser.rb +13 -1
  193. data/lib/nokogiri/xml/schema.rb +63 -0
  194. data/lib/nokogiri/xml/syntax_error.rb +25 -1
  195. data/lib/nokogiri/xml/text.rb +4 -1
  196. data/lib/nokogiri/xml/xpath.rb +1 -1
  197. data/lib/nokogiri/xml/xpath/syntax_error.rb +3 -0
  198. data/lib/nokogiri/xml/xpath_context.rb +2 -0
  199. data/lib/nokogiri/xslt.rb +26 -2
  200. data/lib/nokogiri/xslt/stylesheet.rb +19 -0
  201. data/lib/xsd/xmlparser/nokogiri.rb +45 -9
  202. data/tasks/cross_compile.rb +173 -0
  203. data/tasks/test.rb +25 -69
  204. data/test/css/test_nthiness.rb +3 -4
  205. data/test/css/test_parser.rb +75 -20
  206. data/test/css/test_tokenizer.rb +23 -1
  207. data/test/css/test_xpath_visitor.rb +10 -1
  208. data/test/decorators/test_slop.rb +16 -0
  209. data/test/ffi/test_document.rb +35 -0
  210. data/test/files/2ch.html +108 -0
  211. data/test/files/address_book.rlx +12 -0
  212. data/test/files/address_book.xml +10 -0
  213. data/test/files/bar/bar.xsd +4 -0
  214. data/test/files/encoding.html +82 -0
  215. data/test/files/encoding.xhtml +84 -0
  216. data/test/files/foo/foo.xsd +4 -0
  217. data/test/files/po.xml +32 -0
  218. data/test/files/po.xsd +66 -0
  219. data/test/files/shift_jis.html +10 -0
  220. data/test/files/shift_jis.xml +5 -0
  221. data/test/files/snuggles.xml +3 -0
  222. data/test/files/staff.dtd +10 -0
  223. data/test/files/valid_bar.xml +2 -0
  224. data/test/helper.rb +101 -23
  225. data/test/html/sax/test_parser.rb +81 -2
  226. data/test/html/sax/test_parser_context.rb +48 -0
  227. data/test/html/test_builder.rb +39 -8
  228. data/test/html/test_document.rb +186 -23
  229. data/test/html/test_document_encoding.rb +78 -1
  230. data/test/html/test_document_fragment.rb +253 -0
  231. data/test/html/test_element_description.rb +98 -0
  232. data/test/html/test_named_characters.rb +1 -1
  233. data/test/html/test_node.rb +124 -36
  234. data/test/html/test_node_encoding.rb +27 -0
  235. data/test/test_convert_xpath.rb +1 -52
  236. data/test/test_css_cache.rb +2 -13
  237. data/test/test_encoding_handler.rb +46 -0
  238. data/test/test_memory_leak.rb +88 -19
  239. data/test/test_nokogiri.rb +38 -5
  240. data/test/test_reader.rb +188 -6
  241. data/test/test_soap4r_sax.rb +52 -0
  242. data/test/test_xslt_transforms.rb +183 -83
  243. data/test/xml/node/test_save_options.rb +1 -1
  244. data/test/xml/node/test_subclass.rb +44 -0
  245. data/test/xml/sax/test_parser.rb +175 -4
  246. data/test/xml/sax/test_parser_context.rb +113 -0
  247. data/test/xml/sax/test_push_parser.rb +90 -2
  248. data/test/xml/test_attr.rb +35 -1
  249. data/test/xml/test_attribute_decl.rb +82 -0
  250. data/test/xml/test_builder.rb +186 -1
  251. data/test/xml/test_cdata.rb +32 -1
  252. data/test/xml/test_comment.rb +13 -1
  253. data/test/xml/test_document.rb +415 -43
  254. data/test/xml/test_document_encoding.rb +1 -1
  255. data/test/xml/test_document_fragment.rb +173 -5
  256. data/test/xml/test_dtd.rb +61 -6
  257. data/test/xml/test_dtd_encoding.rb +3 -1
  258. data/test/xml/test_element_content.rb +56 -0
  259. data/test/xml/test_element_decl.rb +73 -0
  260. data/test/xml/test_entity_decl.rb +120 -0
  261. data/test/xml/test_entity_reference.rb +5 -1
  262. data/test/xml/test_namespace.rb +68 -0
  263. data/test/xml/test_node.rb +546 -201
  264. data/test/xml/test_node_attributes.rb +34 -0
  265. data/test/xml/test_node_encoding.rb +33 -3
  266. data/test/xml/test_node_reparenting.rb +321 -0
  267. data/test/xml/test_node_set.rb +538 -2
  268. data/test/xml/test_parse_options.rb +52 -0
  269. data/test/xml/test_processing_instruction.rb +6 -1
  270. data/test/xml/test_reader_encoding.rb +1 -1
  271. data/test/xml/test_relax_ng.rb +60 -0
  272. data/test/xml/test_schema.rb +94 -0
  273. data/test/xml/test_syntax_error.rb +12 -0
  274. data/test/xml/test_text.rb +35 -1
  275. data/test/xml/test_unparented_node.rb +5 -5
  276. data/test/xml/test_xpath.rb +142 -11
  277. data/test/xslt/test_custom_functions.rb +94 -0
  278. metadata +328 -92
  279. data/ext/nokogiri/html_sax_parser.c +0 -57
  280. data/ext/nokogiri/html_sax_parser.h +0 -11
  281. data/ext/nokogiri/iconv.dll +0 -0
  282. data/ext/nokogiri/libexslt.dll +0 -0
  283. data/ext/nokogiri/libxml2.dll +0 -0
  284. data/ext/nokogiri/libxslt.dll +0 -0
  285. data/ext/nokogiri/native.so +0 -0
  286. data/ext/nokogiri/xml_xpath.c +0 -53
  287. data/ext/nokogiri/xml_xpath.h +0 -11
  288. data/ext/nokogiri/zlib1.dll +0 -0
  289. data/lib/action-nokogiri.rb +0 -30
  290. data/lib/nokogiri/css/generated_parser.rb +0 -713
  291. data/lib/nokogiri/css/generated_tokenizer.rb +0 -144
  292. data/lib/nokogiri/decorators.rb +0 -2
  293. data/lib/nokogiri/decorators/hpricot.rb +0 -3
  294. data/lib/nokogiri/decorators/hpricot/node.rb +0 -56
  295. data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -54
  296. data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -28
  297. data/lib/nokogiri/hpricot.rb +0 -51
  298. data/lib/nokogiri/xml/comment.rb +0 -6
  299. data/lib/nokogiri/xml/element.rb +0 -6
  300. data/lib/nokogiri/xml/entity_declaration.rb +0 -9
  301. data/lib/nokogiri/xml/fragment_handler.rb +0 -34
  302. data/test/hpricot/files/basic.xhtml +0 -17
  303. data/test/hpricot/files/boingboing.html +0 -2266
  304. data/test/hpricot/files/cy0.html +0 -3653
  305. data/test/hpricot/files/immob.html +0 -400
  306. data/test/hpricot/files/pace_application.html +0 -1320
  307. data/test/hpricot/files/tenderlove.html +0 -16
  308. data/test/hpricot/files/uswebgen.html +0 -220
  309. data/test/hpricot/files/utf8.html +0 -1054
  310. data/test/hpricot/files/week9.html +0 -1723
  311. data/test/hpricot/files/why.xml +0 -19
  312. data/test/hpricot/load_files.rb +0 -11
  313. data/test/hpricot/test_alter.rb +0 -68
  314. data/test/hpricot/test_builder.rb +0 -20
  315. data/test/hpricot/test_parser.rb +0 -426
  316. data/test/hpricot/test_paths.rb +0 -15
  317. data/test/hpricot/test_preserved.rb +0 -77
  318. data/test/hpricot/test_xml.rb +0 -30
  319. data/test/test_gc.rb +0 -15
@@ -0,0 +1,16 @@
1
+ module Nokogiri
2
+ module XML
3
+ module SAX
4
+ ###
5
+ # Context for XML SAX parsers. This class is usually not instantiated
6
+ # by the user. Instead, you should be looking at
7
+ # Nokogiri::XML::SAX::Parser
8
+ class ParserContext
9
+ def self.new thing, encoding = 'UTF-8'
10
+ [:read, :close].all? { |x| thing.respond_to?(x) } ?
11
+ io(thing, Parser::ENCODINGS[encoding]) : memory(thing)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -23,9 +23,15 @@ module Nokogiri
23
23
  # parser << "/div>"
24
24
  # parser.finish
25
25
  class PushParser
26
+
27
+ # The Nokogiri::XML::SAX::Document on which the PushParser will be
28
+ # operating
26
29
  attr_accessor :document
27
30
 
28
- def initialize(doc = XML::SAX::Document.new, file_name = nil, encoding = 'ASCII')
31
+ ###
32
+ # Create a new PushParser with +doc+ as the SAX Document, providing
33
+ # an optional +file_name+ and +encoding+
34
+ def initialize(doc = XML::SAX::Document.new, file_name = nil, encoding = 'UTF-8')
29
35
  @document = doc
30
36
  @encoding = encoding
31
37
  @sax_parser = XML::SAX::Parser.new(doc)
@@ -34,11 +40,17 @@ module Nokogiri
34
40
  initialize_native(@sax_parser, file_name)
35
41
  end
36
42
 
43
+ ###
44
+ # Write a +chunk+ of XML to the PushParser. Any callback methods
45
+ # that can be called will be called immediately.
37
46
  def write chunk, last_chunk = false
38
47
  native_write(chunk, last_chunk)
39
48
  end
40
49
  alias :<< :write
41
50
 
51
+ ###
52
+ # Finish the parsing. This method is only necessary for
53
+ # Nokogiri::XML::SAX::Document#end_document to be called.
42
54
  def finish
43
55
  write '', true
44
56
  end
@@ -0,0 +1,63 @@
1
+ module Nokogiri
2
+ module XML
3
+ class << self
4
+ ###
5
+ # Create a new Nokogiri::XML::Schema object using a +string_or_io+
6
+ # object.
7
+ def Schema string_or_io
8
+ Schema.new(string_or_io)
9
+ end
10
+ end
11
+
12
+ ###
13
+ # Nokogiri::XML::Schema is used for validating XML against a schema
14
+ # (usually from an xsd file).
15
+ #
16
+ # == Synopsis
17
+ #
18
+ # Validate an XML document against a Schema. Loop over the errors that
19
+ # are returned and print them out:
20
+ #
21
+ # xsd = Nokogiri::XML::Schema(File.read(PO_SCHEMA_FILE))
22
+ # doc = Nokogiri::XML(File.read(PO_XML_FILE))
23
+ #
24
+ # xsd.validate(doc).each do |error|
25
+ # puts error.message
26
+ # end
27
+ #
28
+ # The list of errors are Nokogiri::XML::SyntaxError objects.
29
+ class Schema
30
+ # Errors while parsing the schema file
31
+ attr_accessor :errors
32
+
33
+ ###
34
+ # Create a new Nokogiri::XML::Schema object using a +string_or_io+
35
+ # object.
36
+ def self.new string_or_io
37
+ from_document Nokogiri::XML(string_or_io)
38
+ end
39
+
40
+ ###
41
+ # Validate +thing+ against this schema. +thing+ can be a
42
+ # Nokogiri::XML::Document object, or a filename. An Array of
43
+ # Nokogiri::XML::SyntaxError objects found while validating the
44
+ # +thing+ is returned.
45
+ def validate thing
46
+ if thing.is_a?(Nokogiri::XML::Document)
47
+ validate_document(thing)
48
+ elsif File.file?(thing)
49
+ validate_file(thing)
50
+ else
51
+ raise ArgumentError, "Must provide Nokogiri::Xml::Document or the name of an existing file"
52
+ end
53
+ end
54
+
55
+ ###
56
+ # Returns true if +thing+ is a valid Nokogiri::XML::Document or
57
+ # file.
58
+ def valid? thing
59
+ validate(thing).length == 0
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,23 +1,47 @@
1
1
  module Nokogiri
2
2
  module XML
3
+ ###
4
+ # This class provides information about XML SyntaxErrors. These
5
+ # exceptions are typically stored on Nokogiri::XML::Document#errors.
3
6
  class SyntaxError < ::Nokogiri::SyntaxError
7
+ attr_reader :domain
8
+ attr_reader :code
9
+ attr_reader :level
10
+ attr_reader :file
11
+ attr_reader :line
12
+ attr_reader :str1
13
+ attr_reader :str2
14
+ attr_reader :str3
15
+ attr_reader :int1
16
+ attr_reader :column
17
+
18
+ ###
19
+ # return true if this is a non error
4
20
  def none?
5
21
  level == 0
6
22
  end
7
23
 
24
+ ###
25
+ # return true if this is a warning
8
26
  def warning?
9
27
  level == 1
10
28
  end
11
29
 
30
+ ###
31
+ # return true if this is an error
12
32
  def error?
13
33
  level == 2
14
34
  end
15
35
 
36
+ ###
37
+ # return true if this error is fatal
16
38
  def fatal?
17
39
  level == 3
18
40
  end
19
41
 
20
- alias :to_s :message
42
+ def to_s
43
+ super.chomp
44
+ end
21
45
  end
22
46
  end
23
47
  end
@@ -1,6 +1,9 @@
1
1
  module Nokogiri
2
2
  module XML
3
- class Text < Node
3
+ class Text < Nokogiri::XML::CharacterData
4
+ def content=(string)
5
+ self.native_content = string.to_s
6
+ end
4
7
  end
5
8
  end
6
9
  end
@@ -3,8 +3,8 @@ require 'nokogiri/xml/xpath/syntax_error'
3
3
  module Nokogiri
4
4
  module XML
5
5
  class XPath
6
+ # The Nokogiri::XML::Document tied to this XPath instance
6
7
  attr_accessor :document
7
-
8
8
  end
9
9
  end
10
10
  end
@@ -2,6 +2,9 @@ module Nokogiri
2
2
  module XML
3
3
  class XPath
4
4
  class SyntaxError < XML::SyntaxError
5
+ def to_s
6
+ [super.chomp, str1].compact.join(': ')
7
+ end
5
8
  end
6
9
  end
7
10
  end
@@ -2,6 +2,8 @@ module Nokogiri
2
2
  module XML
3
3
  class XPathContext
4
4
 
5
+ ###
6
+ # Register namespaces in +namespaces+
5
7
  def register_namespaces(namespaces)
6
8
  namespaces.each do |k, v|
7
9
  k = k.gsub(/.*:/,'') # strip off 'xmlns:' or 'xml:'
data/lib/nokogiri/xslt.rb CHANGED
@@ -1,12 +1,36 @@
1
1
  require 'nokogiri/xslt/stylesheet'
2
2
 
3
3
  module Nokogiri
4
+ class << self
5
+ ###
6
+ # Create a Nokogiri::XSLT::Stylesheet with +stylesheet+.
7
+ #
8
+ # Example:
9
+ #
10
+ # xslt = Nokogiri::XSLT(File.read(ARGV[0]))
11
+ #
12
+ def XSLT stylesheet, modules = {}
13
+ XSLT.parse(stylesheet, modules)
14
+ end
15
+ end
16
+
17
+ ###
18
+ # See Nokogiri::XSLT::Stylesheet for creating and maniuplating
19
+ # Stylesheet object.
4
20
  module XSLT
5
21
  class << self
6
- def parse(string)
22
+ ###
23
+ # Parse the stylesheet in +string+, register any +modules+
24
+ def parse string, modules = {}
25
+ modules.each do |url, klass|
26
+ XSLT.register url, klass
27
+ end
28
+
7
29
  Stylesheet.parse_stylesheet_doc(XML.parse(string))
8
30
  end
9
-
31
+
32
+ ###
33
+ # Quote parameters in +params+ for stylesheet safety
10
34
  def quote_params params
11
35
  parray = (params.instance_of?(Hash) ? params.to_a.flatten : params).dup
12
36
  parray.each_with_index do |v,i|
@@ -1,6 +1,25 @@
1
1
  module Nokogiri
2
2
  module XSLT
3
+ ###
4
+ # A Stylesheet represents an XSLT Stylesheet object. Stylesheet creation
5
+ # is done through Nokogiri.XSLT. Here is an example of transforming
6
+ # an XML::Document with a Stylesheet:
7
+ #
8
+ # doc = Nokogiri::XML(File.read('some_file.xml'))
9
+ # xslt = Nokogir::XSLT(File.read('some_transformer.xslt'))
10
+ #
11
+ # puts xslt.transform(doc)
12
+ #
13
+ # See Nokogiri::XSLT::Stylesheet#transform for more transformation
14
+ # information.
3
15
  class Stylesheet
16
+ ###
17
+ # Apply an XSLT stylesheet to an XML::Document.
18
+ # +params+ is an array of strings used as XSLT parameters.
19
+ # returns serialized document
20
+ def apply_to document, params = []
21
+ serialize(transform(document, params))
22
+ end
4
23
  end
5
24
  end
6
25
  end
@@ -1,7 +1,7 @@
1
1
  require 'nokogiri'
2
2
 
3
- module XSD
4
- module XMLParser
3
+ module XSD # :nodoc:
4
+ module XMLParser # :nodoc:
5
5
  ###
6
6
  # Nokogiri XML parser for soap4r.
7
7
  #
@@ -13,41 +13,77 @@ module XSD
13
13
  # Example (using UW ITS Web Services):
14
14
  #
15
15
  # require 'rubygems'
16
- # gem 'soap4r'
17
16
  # require 'nokogiri'
18
- # require 'xsd/xmlparser/nokogiri'
17
+ # gem 'soap4r'
19
18
  # require 'defaultDriver'
20
- #
19
+ # require 'xsd/xmlparser/nokogiri'
20
+ #
21
21
  # obj = AvlPortType.new
22
- # obj.getLatestByRoute(obj.getAgencies, 8).each do |event|
23
- # ...
22
+ # obj.getLatestByRoute(obj.getAgencies.first, 8).each do |bus|
23
+ # p "#{bus.routeID}, #{bus.longitude}, #{bus.latitude}"
24
24
  # end
25
+ #
25
26
  class Nokogiri < XSD::XMLParser::Parser
27
+ ###
28
+ # Create a new XSD parser with +host+ and +opt+
26
29
  def initialize host, opt = {}
27
30
  super
28
31
  @parser = ::Nokogiri::XML::SAX::Parser.new(self, @charset || 'UTF-8')
29
32
  end
30
33
 
34
+ ###
35
+ # Start parsing +string_or_readable+
31
36
  def do_parse string_or_readable
32
37
  @parser.parse(string_or_readable)
33
38
  end
34
39
 
40
+ ###
41
+ # Handle the start_element event with +name+ and +attrs+
35
42
  def start_element name, attrs = []
36
- super(name, Hash[*attrs])
43
+ super(name, Hash[*attrs.flatten])
44
+ end
45
+
46
+ ###
47
+ # Handle the end_element event with +name+
48
+ def end_element name
49
+ super
37
50
  end
38
51
 
52
+ ###
53
+ # Handle errors with message +msg+
39
54
  def error msg
40
55
  raise ParseError.new(msg)
41
56
  end
42
57
  alias :warning :error
43
58
 
59
+ ###
60
+ # Handle cdata_blocks containing +string+
44
61
  def cdata_block string
45
62
  characters string
46
63
  end
47
64
 
48
- %w{ start_document end_document comment }.each do |name|
65
+ def start_element_namespace name, attrs = [], prefix = nil, uri = nil, ns = []
66
+ ###
67
+ # Deal with SAX v1 interface
68
+ name = [prefix, name].compact.join(':')
69
+ attributes = ns.map { |ns_prefix,ns_uri|
70
+ [['xmlns', ns_prefix].compact.join(':'), ns_uri]
71
+ } + attrs.map { |attr|
72
+ [[attr.prefix, attr.localname].compact.join(':'), attr.value]
73
+ }.flatten
74
+ start_element name, attributes
75
+ end
76
+
77
+ def end_element_namespace name, prefix = nil, uri = nil
78
+ ###
79
+ # Deal with SAX v1 interface
80
+ end_element [prefix, name].compact.join(':')
81
+ end
82
+
83
+ %w{ xmldecl start_document end_document comment }.each do |name|
49
84
  class_eval %{ def #{name}(*args); end }
50
85
  end
86
+
51
87
  add_factory(self)
52
88
  end
53
89
  end
@@ -0,0 +1,173 @@
1
+ require 'rake/extensioncompiler'
2
+ HOST = Rake::ExtensionCompiler.mingw_host
3
+ TARGET = 'i386-pc-mingw32'
4
+
5
+ ZLIB = 'zlib-1.2.5'
6
+ ICONV = 'libiconv-1.13.1'
7
+ LIBXML = 'libxml2-2.7.7'
8
+ LIBXSLT = 'libxslt-1.1.26'
9
+ RAKE_COMPILER_PKGCONFIG = File.expand_path(File.join(Dir.pwd, "tmp/cross/lib/pkgconfig/"))
10
+
11
+ ### Build zlib ###
12
+ file "tmp/cross/download/#{ZLIB}" do |t|
13
+ FileUtils.mkdir_p('tmp/cross/download')
14
+
15
+ file = ZLIB
16
+ url = "http://zlib.net/#{file}.tar.gz"
17
+
18
+ Dir.chdir('tmp/cross/download') do
19
+ sh "wget #{url} || curl -O #{url}"
20
+ sh "tar zxvf #{file}.tar.gz"
21
+ end
22
+
23
+ Dir.chdir t.name do
24
+ mk = File.read('win32/Makefile.gcc')
25
+ File.open('win32/Makefile.gcc', 'wb') do |f|
26
+ f.puts "BINARY_PATH = #{CROSS_DIR}/bin"
27
+ f.puts "LIBRARY_PATH = #{CROSS_DIR}/lib"
28
+ f.puts "INCLUDE_PATH = #{CROSS_DIR}/include"
29
+
30
+ f.puts mk.sub(/^PREFIX\s*=\s*$/, "PREFIX = #{HOST}-") #.
31
+ #sub(/^SHARED_MODE=0$/, 'SHARED_MODE=1').
32
+ #sub(/^IMPLIB\s*=.*$/, 'IMPLIB=libz.dll.a')
33
+ end
34
+ end
35
+ end
36
+
37
+ file 'tmp/cross/lib/libz.a' => "tmp/cross/download/#{ZLIB}" do |t|
38
+ Dir.chdir t.prerequisites.first do
39
+ sh 'make -f win32/Makefile.gcc'
40
+ sh 'make -f win32/Makefile.gcc install'
41
+ end
42
+ end
43
+ ### End build zlib ###
44
+
45
+ ### Build iconv ###
46
+ file "tmp/cross/download/#{ICONV}" do |t|
47
+ FileUtils.mkdir_p('tmp/cross/download')
48
+
49
+ file = ICONV
50
+ url = "http://ftp.gnu.org/pub/gnu/libiconv/#{file}.tar.gz"
51
+
52
+ Dir.chdir('tmp/cross/download') do
53
+ sh "wget #{url} || curl -O #{url}"
54
+ sh "tar zxvf #{file}.tar.gz"
55
+ end
56
+
57
+ Dir.chdir t.name do
58
+ sh "./configure --disable-shared --enable-static --host=#{HOST} --target=#{TARGET} --prefix=#{CROSS_DIR} CPPFLAGS='-mno-cygwin -Wall' CFLAGS='-mno-cygwin -O2 -g' CXXFLAGS='-mno-cygwin -O2 -g' LDFLAGS=-mno-cygwin"
59
+ end
60
+ end
61
+
62
+ file 'tmp/cross/bin/iconv.exe' => "tmp/cross/download/#{ICONV}" do |t|
63
+ Dir.chdir t.prerequisites.first do
64
+ sh 'make'
65
+ sh 'make install'
66
+ end
67
+ end
68
+ ### End build iconv ###
69
+
70
+ ### Build libxml2 ###
71
+ file "tmp/cross/download/#{LIBXML}" do |t|
72
+ FileUtils.mkdir_p('tmp/cross/download')
73
+
74
+ file = LIBXML
75
+ url = "ftp://ftp.xmlsoft.org/libxml2/#{file}.tar.gz"
76
+
77
+ Dir.chdir('tmp/cross/download') do
78
+ sh "wget #{url} || curl -O #{url}"
79
+ sh "tar zxvf #{file}.tar.gz"
80
+ end
81
+
82
+ Dir.chdir t.name do
83
+ sh "CFLAGS='-DIN_LIBXML' ./configure --host=#{HOST} --target=#{TARGET} --enable-static --disable-shared --prefix=#{CROSS_DIR} --with-zlib=#{CROSS_DIR} --with-iconv=#{CROSS_DIR} --without-python --without-readline"
84
+ end
85
+ end
86
+
87
+ file 'tmp/cross/bin/xml2-config' => "tmp/cross/download/#{LIBXML}" do |t|
88
+ Dir.chdir t.prerequisites.first do
89
+ sh 'make LDFLAGS="-avoid-version"'
90
+ sh 'make install'
91
+ end
92
+ end
93
+ ### End build libxml2 ###
94
+
95
+ ### Build libxslt ###
96
+ file "tmp/cross/download/#{LIBXSLT}" do |t|
97
+ FileUtils.mkdir_p('tmp/cross/download')
98
+
99
+ file = LIBXSLT
100
+ url = "ftp://ftp.xmlsoft.org/libxml2/#{file}.tar.gz"
101
+
102
+ Dir.chdir('tmp/cross/download') do
103
+ sh "wget #{url} || curl -O #{url}"
104
+ sh "tar zxvf #{file}.tar.gz"
105
+ end
106
+
107
+ Dir.chdir t.name do
108
+ sh "CFLAGS='-DIN_LIBXML' ./configure --host=#{HOST} --target=#{TARGET} --enable-static --disable-shared --prefix=#{CROSS_DIR} --with-libxml-prefix=#{CROSS_DIR} --without-python --without-crypto"
109
+ end
110
+ end
111
+
112
+ file 'tmp/cross/bin/xslt-config' => "tmp/cross/download/#{LIBXSLT}" do |t|
113
+ Dir.chdir t.prerequisites.first do
114
+ sh 'make LDFLAGS="-avoid-version"'
115
+ sh 'make install'
116
+ end
117
+ end
118
+ ### End build libxslt ###
119
+
120
+ file 'lib/nokogiri/nokogiri.rb' => 'cross:check' do
121
+ File.open("lib/#{HOE.name}/#{HOE.name}.rb", 'wb') do |f|
122
+ f.write <<-eoruby
123
+ require "#{HOE.name}/\#{RUBY_VERSION.sub(/\\.\\d+$/, '')}/#{HOE.name}"
124
+ eoruby
125
+ end
126
+ end
127
+
128
+ namespace :cross do
129
+ task :iconv => 'tmp/cross/bin/iconv.exe'
130
+ task :zlib => 'tmp/cross/lib/libz.a'
131
+ task :libxml2 => ['cross:zlib', 'cross:iconv', 'tmp/cross/bin/xml2-config']
132
+ task :libxslt => ['cross:libxml2', 'tmp/cross/bin/xslt-config']
133
+
134
+ task :check => ["cross:libxslt"] do
135
+ unless File.directory?(RAKE_COMPILER_PKGCONFIG)
136
+ raise RuntimeError.new("looks like rake-compiler changed where pkgconfig info is kept. (#{RAKE_COMPILER_PKGCONFIG})")
137
+ end
138
+ end
139
+
140
+ task :file_list do
141
+ HOE.spec.extensions = []
142
+ HOE.spec.files += Dir["lib/#{HOE.name}/#{HOE.name}.rb"]
143
+ HOE.spec.files += Dir["lib/#{HOE.name}/1.{8,9}/#{HOE.name}.so"]
144
+ end
145
+ end
146
+
147
+ CLOBBER.include("lib/nokogiri/nokogiri.{so,dylib,rb,bundle}")
148
+ CLOBBER.include("lib/nokogiri/1.{8,9}")
149
+
150
+ if Rake::Task.task_defined?(:cross)
151
+ Rake::Task[:cross].prerequisites << "lib/nokogiri/nokogiri.rb"
152
+ Rake::Task[:cross].prerequisites << "cross:file_list"
153
+ end
154
+
155
+ desc "build a windows gem without all the ceremony."
156
+ task "gem:windows" do
157
+ rake_compiler_config = YAML.load_file("#{ENV['HOME']}/.rake-compiler/config.yml")
158
+
159
+ # check that rake-compiler config contains the right patchlevels of 1.8.6 and 1.9.1. see #279.
160
+ ["1.8.6-p383", "1.9.1-p243"].each do |version|
161
+ majmin, patchlevel = version.split("-")
162
+ rbconfig = "rbconfig-#{majmin}"
163
+ unless rake_compiler_config.key?(rbconfig) && rake_compiler_config[rbconfig] =~ /-#{patchlevel}/
164
+ raise "rake-compiler '#{rbconfig}' not #{patchlevel}. try running 'env --unset=HOST rake-compiler cross-ruby VERSION=#{version}'"
165
+ end
166
+ end
167
+
168
+ # verify that --export-all is in the 1.9.1 rbconfig. see #279,#374,#375.
169
+ rbconfig_191 = rake_compiler_config["rbconfig-1.9.1"]
170
+ raise "rbconfig #{rbconfig_191} needs --export-all in its DLDFLAGS value" if File.read(rbconfig_191).grep(/CONFIG\["DLDFLAGS"\].*--export-all/).empty?
171
+
172
+ system("env PKG_CONFIG_PATH=#{RAKE_COMPILER_PKGCONFIG} RUBY_CC_VERSION=1.8.6:1.9.1 rake cross native gem") || raise("build failed!")
173
+ end