superfeedr-nokogiri 1.4.0.20091116183308

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 (270) hide show
  1. data/.autotest +27 -0
  2. data/CHANGELOG.ja.rdoc +330 -0
  3. data/CHANGELOG.rdoc +314 -0
  4. data/Manifest.txt +269 -0
  5. data/README.ja.rdoc +105 -0
  6. data/README.rdoc +118 -0
  7. data/Rakefile +244 -0
  8. data/bin/nokogiri +49 -0
  9. data/ext/nokogiri/extconf.rb +145 -0
  10. data/ext/nokogiri/html_document.c +145 -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 +32 -0
  15. data/ext/nokogiri/html_entity_lookup.h +8 -0
  16. data/ext/nokogiri/html_sax_parser_context.c +92 -0
  17. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  18. data/ext/nokogiri/nokogiri.c +89 -0
  19. data/ext/nokogiri/nokogiri.h +145 -0
  20. data/ext/nokogiri/xml_attr.c +92 -0
  21. data/ext/nokogiri/xml_attr.h +9 -0
  22. data/ext/nokogiri/xml_attribute_decl.c +67 -0
  23. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  24. data/ext/nokogiri/xml_cdata.c +54 -0
  25. data/ext/nokogiri/xml_cdata.h +9 -0
  26. data/ext/nokogiri/xml_comment.c +52 -0
  27. data/ext/nokogiri/xml_comment.h +9 -0
  28. data/ext/nokogiri/xml_document.c +388 -0
  29. data/ext/nokogiri/xml_document.h +24 -0
  30. data/ext/nokogiri/xml_document_fragment.c +46 -0
  31. data/ext/nokogiri/xml_document_fragment.h +10 -0
  32. data/ext/nokogiri/xml_dtd.c +192 -0
  33. data/ext/nokogiri/xml_dtd.h +10 -0
  34. data/ext/nokogiri/xml_element_content.c +123 -0
  35. data/ext/nokogiri/xml_element_content.h +10 -0
  36. data/ext/nokogiri/xml_element_decl.c +69 -0
  37. data/ext/nokogiri/xml_element_decl.h +9 -0
  38. data/ext/nokogiri/xml_entity_decl.c +97 -0
  39. data/ext/nokogiri/xml_entity_decl.h +10 -0
  40. data/ext/nokogiri/xml_entity_reference.c +50 -0
  41. data/ext/nokogiri/xml_entity_reference.h +9 -0
  42. data/ext/nokogiri/xml_io.c +31 -0
  43. data/ext/nokogiri/xml_io.h +11 -0
  44. data/ext/nokogiri/xml_namespace.c +74 -0
  45. data/ext/nokogiri/xml_namespace.h +12 -0
  46. data/ext/nokogiri/xml_node.c +1060 -0
  47. data/ext/nokogiri/xml_node.h +13 -0
  48. data/ext/nokogiri/xml_node_set.c +397 -0
  49. data/ext/nokogiri/xml_node_set.h +9 -0
  50. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  51. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  52. data/ext/nokogiri/xml_reader.c +593 -0
  53. data/ext/nokogiri/xml_reader.h +10 -0
  54. data/ext/nokogiri/xml_relax_ng.c +159 -0
  55. data/ext/nokogiri/xml_relax_ng.h +9 -0
  56. data/ext/nokogiri/xml_sax_parser.c +286 -0
  57. data/ext/nokogiri/xml_sax_parser.h +43 -0
  58. data/ext/nokogiri/xml_sax_parser_context.c +155 -0
  59. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  60. data/ext/nokogiri/xml_sax_push_parser.c +114 -0
  61. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  62. data/ext/nokogiri/xml_schema.c +156 -0
  63. data/ext/nokogiri/xml_schema.h +9 -0
  64. data/ext/nokogiri/xml_syntax_error.c +261 -0
  65. data/ext/nokogiri/xml_syntax_error.h +13 -0
  66. data/ext/nokogiri/xml_text.c +48 -0
  67. data/ext/nokogiri/xml_text.h +9 -0
  68. data/ext/nokogiri/xml_xpath.c +53 -0
  69. data/ext/nokogiri/xml_xpath.h +11 -0
  70. data/ext/nokogiri/xml_xpath_context.c +239 -0
  71. data/ext/nokogiri/xml_xpath_context.h +9 -0
  72. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  73. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  74. data/lib/nokogiri.rb +116 -0
  75. data/lib/nokogiri/css.rb +25 -0
  76. data/lib/nokogiri/css/generated_parser.rb +646 -0
  77. data/lib/nokogiri/css/generated_tokenizer.rb +142 -0
  78. data/lib/nokogiri/css/node.rb +99 -0
  79. data/lib/nokogiri/css/parser.rb +82 -0
  80. data/lib/nokogiri/css/parser.y +227 -0
  81. data/lib/nokogiri/css/syntax_error.rb +7 -0
  82. data/lib/nokogiri/css/tokenizer.rb +7 -0
  83. data/lib/nokogiri/css/tokenizer.rex +54 -0
  84. data/lib/nokogiri/css/xpath_visitor.rb +162 -0
  85. data/lib/nokogiri/decorators/slop.rb +33 -0
  86. data/lib/nokogiri/ffi/html/document.rb +28 -0
  87. data/lib/nokogiri/ffi/html/element_description.rb +85 -0
  88. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  89. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  90. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  91. data/lib/nokogiri/ffi/libxml.rb +356 -0
  92. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  93. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  94. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  95. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  96. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  97. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  98. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  99. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  100. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  101. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  102. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  103. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  104. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  105. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  106. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  107. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  108. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  109. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +19 -0
  110. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  111. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  112. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +15 -0
  113. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  114. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  115. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  116. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  117. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  118. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  119. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  120. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  121. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  122. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  123. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  124. data/lib/nokogiri/ffi/xml/document.rb +135 -0
  125. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  126. data/lib/nokogiri/ffi/xml/dtd.rb +69 -0
  127. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  128. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  129. data/lib/nokogiri/ffi/xml/entity_decl.rb +27 -0
  130. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  131. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  132. data/lib/nokogiri/ffi/xml/node.rb +444 -0
  133. data/lib/nokogiri/ffi/xml/node_set.rb +133 -0
  134. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  135. data/lib/nokogiri/ffi/xml/reader.rb +227 -0
  136. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  137. data/lib/nokogiri/ffi/xml/sax/parser.rb +142 -0
  138. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +67 -0
  139. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +39 -0
  140. data/lib/nokogiri/ffi/xml/schema.rb +92 -0
  141. data/lib/nokogiri/ffi/xml/syntax_error.rb +91 -0
  142. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  143. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  144. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  145. data/lib/nokogiri/ffi/xslt/stylesheet.rb +47 -0
  146. data/lib/nokogiri/html.rb +35 -0
  147. data/lib/nokogiri/html/builder.rb +35 -0
  148. data/lib/nokogiri/html/document.rb +88 -0
  149. data/lib/nokogiri/html/document_fragment.rb +15 -0
  150. data/lib/nokogiri/html/element_description.rb +23 -0
  151. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  152. data/lib/nokogiri/html/sax/parser.rb +48 -0
  153. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  154. data/lib/nokogiri/syntax_error.rb +4 -0
  155. data/lib/nokogiri/version.rb +33 -0
  156. data/lib/nokogiri/version_warning.rb +11 -0
  157. data/lib/nokogiri/xml.rb +67 -0
  158. data/lib/nokogiri/xml/attr.rb +14 -0
  159. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  160. data/lib/nokogiri/xml/builder.rb +405 -0
  161. data/lib/nokogiri/xml/cdata.rb +11 -0
  162. data/lib/nokogiri/xml/character_data.rb +7 -0
  163. data/lib/nokogiri/xml/document.rb +131 -0
  164. data/lib/nokogiri/xml/document_fragment.rb +69 -0
  165. data/lib/nokogiri/xml/dtd.rb +11 -0
  166. data/lib/nokogiri/xml/element_content.rb +36 -0
  167. data/lib/nokogiri/xml/element_decl.rb +13 -0
  168. data/lib/nokogiri/xml/entity_decl.rb +15 -0
  169. data/lib/nokogiri/xml/fragment_handler.rb +71 -0
  170. data/lib/nokogiri/xml/namespace.rb +13 -0
  171. data/lib/nokogiri/xml/node.rb +665 -0
  172. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  173. data/lib/nokogiri/xml/node_set.rb +307 -0
  174. data/lib/nokogiri/xml/notation.rb +6 -0
  175. data/lib/nokogiri/xml/parse_options.rb +85 -0
  176. data/lib/nokogiri/xml/pp.rb +2 -0
  177. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  178. data/lib/nokogiri/xml/pp/node.rb +56 -0
  179. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  180. data/lib/nokogiri/xml/reader.rb +74 -0
  181. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  182. data/lib/nokogiri/xml/sax.rb +4 -0
  183. data/lib/nokogiri/xml/sax/document.rb +160 -0
  184. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  185. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  186. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  187. data/lib/nokogiri/xml/schema.rb +61 -0
  188. data/lib/nokogiri/xml/syntax_error.rb +38 -0
  189. data/lib/nokogiri/xml/xpath.rb +10 -0
  190. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  191. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  192. data/lib/nokogiri/xslt.rb +48 -0
  193. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  194. data/lib/xsd/xmlparser/nokogiri.rb +71 -0
  195. data/tasks/test.rb +100 -0
  196. data/test/css/test_nthiness.rb +159 -0
  197. data/test/css/test_parser.rb +277 -0
  198. data/test/css/test_tokenizer.rb +183 -0
  199. data/test/css/test_xpath_visitor.rb +76 -0
  200. data/test/ffi/test_document.rb +35 -0
  201. data/test/files/2ch.html +108 -0
  202. data/test/files/address_book.rlx +12 -0
  203. data/test/files/address_book.xml +10 -0
  204. data/test/files/bar/bar.xsd +4 -0
  205. data/test/files/dont_hurt_em_why.xml +422 -0
  206. data/test/files/exslt.xml +8 -0
  207. data/test/files/exslt.xslt +35 -0
  208. data/test/files/foo/foo.xsd +4 -0
  209. data/test/files/po.xml +32 -0
  210. data/test/files/po.xsd +66 -0
  211. data/test/files/shift_jis.html +10 -0
  212. data/test/files/shift_jis.xml +5 -0
  213. data/test/files/snuggles.xml +3 -0
  214. data/test/files/staff.dtd +10 -0
  215. data/test/files/staff.xml +59 -0
  216. data/test/files/staff.xslt +32 -0
  217. data/test/files/tlm.html +850 -0
  218. data/test/files/valid_bar.xml +2 -0
  219. data/test/helper.rb +136 -0
  220. data/test/html/sax/test_parser.rb +64 -0
  221. data/test/html/sax/test_parser_context.rb +48 -0
  222. data/test/html/test_builder.rb +164 -0
  223. data/test/html/test_document.rb +390 -0
  224. data/test/html/test_document_encoding.rb +77 -0
  225. data/test/html/test_document_fragment.rb +132 -0
  226. data/test/html/test_element_description.rb +94 -0
  227. data/test/html/test_named_characters.rb +14 -0
  228. data/test/html/test_node.rb +228 -0
  229. data/test/html/test_node_encoding.rb +27 -0
  230. data/test/test_convert_xpath.rb +135 -0
  231. data/test/test_css_cache.rb +45 -0
  232. data/test/test_gc.rb +15 -0
  233. data/test/test_memory_leak.rb +77 -0
  234. data/test/test_nokogiri.rb +134 -0
  235. data/test/test_reader.rb +358 -0
  236. data/test/test_xslt_transforms.rb +131 -0
  237. data/test/xml/node/test_save_options.rb +20 -0
  238. data/test/xml/node/test_subclass.rb +44 -0
  239. data/test/xml/sax/test_parser.rb +307 -0
  240. data/test/xml/sax/test_parser_context.rb +56 -0
  241. data/test/xml/sax/test_push_parser.rb +131 -0
  242. data/test/xml/test_attr.rb +38 -0
  243. data/test/xml/test_attribute_decl.rb +82 -0
  244. data/test/xml/test_builder.rb +167 -0
  245. data/test/xml/test_cdata.rb +38 -0
  246. data/test/xml/test_comment.rb +29 -0
  247. data/test/xml/test_document.rb +607 -0
  248. data/test/xml/test_document_encoding.rb +26 -0
  249. data/test/xml/test_document_fragment.rb +138 -0
  250. data/test/xml/test_dtd.rb +82 -0
  251. data/test/xml/test_dtd_encoding.rb +33 -0
  252. data/test/xml/test_element_content.rb +56 -0
  253. data/test/xml/test_element_decl.rb +73 -0
  254. data/test/xml/test_entity_decl.rb +83 -0
  255. data/test/xml/test_entity_reference.rb +21 -0
  256. data/test/xml/test_namespace.rb +68 -0
  257. data/test/xml/test_node.rb +889 -0
  258. data/test/xml/test_node_attributes.rb +34 -0
  259. data/test/xml/test_node_encoding.rb +107 -0
  260. data/test/xml/test_node_set.rb +531 -0
  261. data/test/xml/test_parse_options.rb +52 -0
  262. data/test/xml/test_processing_instruction.rb +30 -0
  263. data/test/xml/test_reader_encoding.rb +126 -0
  264. data/test/xml/test_relax_ng.rb +60 -0
  265. data/test/xml/test_schema.rb +89 -0
  266. data/test/xml/test_syntax_error.rb +27 -0
  267. data/test/xml/test_text.rb +30 -0
  268. data/test/xml/test_unparented_node.rb +381 -0
  269. data/test/xml/test_xpath.rb +106 -0
  270. metadata +430 -0
@@ -0,0 +1,42 @@
1
+ module Nokogiri
2
+ module XML
3
+ class Node
4
+ ###
5
+ # Save options for serializing nodes
6
+ class SaveOptions
7
+ # Format serialized xml
8
+ FORMAT = 1
9
+ # Do not include delcarations
10
+ NO_DECLARATION = 2
11
+ # Do not include empty tags
12
+ NO_EMPTY_TAGS = 4
13
+ # Do not save XHTML
14
+ NO_XHTML = 8
15
+ # Save as XHTML
16
+ AS_XHTML = 16
17
+ # Save as XML
18
+ AS_XML = 32
19
+ # Save as HTML
20
+ AS_HTML = 64
21
+
22
+ # Integer representation of the SaveOptions
23
+ attr_reader :options
24
+
25
+ # Create a new SaveOptions object with +options+
26
+ def initialize options = 0; @options = options; end
27
+ constants.each do |constant|
28
+ class_eval %{
29
+ def #{constant.downcase}
30
+ @options |= #{constant}
31
+ self
32
+ end
33
+
34
+ def #{constant.downcase}?
35
+ #{constant} & @options == #{constant}
36
+ end
37
+ }
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,307 @@
1
+ module Nokogiri
2
+ module XML
3
+ ####
4
+ # A NodeSet contains a list of Nokogiri::XML::Node objects. Typically
5
+ # a NodeSet is return as a result of searching a Document via
6
+ # Nokogiri::XML::Node#css or Nokogiri::XML::Node#xpath
7
+ class NodeSet
8
+ include Enumerable
9
+
10
+ # The Document this NodeSet is associated with
11
+ attr_accessor :document
12
+
13
+ # Create a NodeSet with +document+ defaulting to +list+
14
+ def initialize document, list = []
15
+ @document = document
16
+ list.each { |x| self << x }
17
+ yield self if block_given?
18
+ end
19
+
20
+ ###
21
+ # Get the first element of the NodeSet.
22
+ def first n = nil
23
+ return self[0] unless n
24
+ list = []
25
+ 0.upto(n - 1) do |i|
26
+ list << self[i]
27
+ end
28
+ list
29
+ end
30
+
31
+ ###
32
+ # Get the last element of the NodeSet.
33
+ def last
34
+ self[length - 1]
35
+ end
36
+
37
+ ###
38
+ # Is this NodeSet empty?
39
+ def empty?
40
+ length == 0
41
+ end
42
+
43
+ ###
44
+ # Returns the index of the first node in self that is == to +node+. Returns nil if no match is found.
45
+ def index(node)
46
+ each_with_index { |member, j| return j if member == node }
47
+ nil
48
+ end
49
+
50
+ ###
51
+ # Insert +datum+ before the first Node in this NodeSet
52
+ def before datum
53
+ first.before datum
54
+ end
55
+
56
+ ###
57
+ # Insert +datum+ after the last Node in this NodeSet
58
+ def after datum
59
+ last.after datum
60
+ end
61
+
62
+ alias :<< :push
63
+ alias :remove :unlink
64
+
65
+ ###
66
+ # Search this document for +paths+
67
+ #
68
+ # For more information see Nokogiri::XML::Node#css and
69
+ # Nokogiri::XML::Node#xpath
70
+ def search *paths
71
+ handler = ![
72
+ Hash, String, Symbol
73
+ ].include?(paths.last.class) ? paths.pop : nil
74
+
75
+ ns = paths.last.is_a?(Hash) ? paths.pop : nil
76
+
77
+ sub_set = NodeSet.new(document)
78
+
79
+ paths.each do |path|
80
+ sub_set += send(
81
+ path =~ /^(\.\/|\/)/ ? :xpath : :css,
82
+ *(paths + [ns, handler]).compact
83
+ )
84
+ end
85
+
86
+ document.decorate(sub_set)
87
+ sub_set
88
+ end
89
+ alias :/ :search
90
+
91
+ ###
92
+ # Search this NodeSet for css +paths+
93
+ #
94
+ # For more information see Nokogiri::XML::Node#css
95
+ def css *paths
96
+ handler = ![
97
+ Hash, String, Symbol
98
+ ].include?(paths.last.class) ? paths.pop : nil
99
+
100
+ ns = paths.last.is_a?(Hash) ? paths.pop : nil
101
+
102
+ sub_set = NodeSet.new(document)
103
+
104
+ each do |node|
105
+ doc = node.document
106
+ search_ns = ns || doc.root ? doc.root.namespaces : {}
107
+
108
+ xpaths = paths.map { |rule|
109
+ [
110
+ CSS.xpath_for(rule.to_s, :prefix => ".//", :ns => search_ns),
111
+ CSS.xpath_for(rule.to_s, :prefix => "self::", :ns => search_ns)
112
+ ].join(' | ')
113
+ }
114
+
115
+ sub_set += node.xpath(*(xpaths + [search_ns, handler].compact))
116
+ end
117
+ document.decorate(sub_set)
118
+ sub_set
119
+ end
120
+
121
+ ###
122
+ # Search this NodeSet for XPath +paths+
123
+ #
124
+ # For more information see Nokogiri::XML::Node#xpath
125
+ def xpath *paths
126
+ handler = ![
127
+ Hash, String, Symbol
128
+ ].include?(paths.last.class) ? paths.pop : nil
129
+
130
+ ns = paths.last.is_a?(Hash) ? paths.pop : nil
131
+
132
+ sub_set = NodeSet.new(document)
133
+ each do |node|
134
+ sub_set += node.xpath(*(paths + [ns, handler].compact))
135
+ end
136
+ document.decorate(sub_set)
137
+ sub_set
138
+ end
139
+
140
+ ###
141
+ # If path is a string, search this document for +path+ returning the
142
+ # first Node. Otherwise, index in to the array with +path+.
143
+ def at path, ns = document.root ? document.root.namespaces : {}
144
+ return self[path] if path.is_a?(Numeric)
145
+ search(path, ns).first
146
+ end
147
+ alias :% :at
148
+
149
+ ###
150
+ # Append the class attribute +name+ to all Node objects in the NodeSet.
151
+ def add_class name
152
+ each do |el|
153
+ classes = el['class'].to_s.split(/\s+/)
154
+ el['class'] = classes.push(name).uniq.join " "
155
+ end
156
+ self
157
+ end
158
+
159
+ ###
160
+ # Remove the class attribute +name+ from all Node objects in the NodeSet.
161
+ # If +name+ is nil, remove the class attribute from all Nodes in the
162
+ # NodeSet.
163
+ def remove_class name = nil
164
+ each do |el|
165
+ if name
166
+ classes = el['class'].to_s.split(/\s+/)
167
+ if classes.empty?
168
+ el.delete 'class'
169
+ else
170
+ el['class'] = (classes - [name]).uniq.join " "
171
+ end
172
+ else
173
+ el.delete "class"
174
+ end
175
+ end
176
+ self
177
+ end
178
+
179
+ ###
180
+ # Set the attribute +key+ to +value+ or the return value of +blk+
181
+ # on all Node objects in the NodeSet.
182
+ def attr key, value = nil, &blk
183
+ unless Hash === key || key && (value || blk)
184
+ return first.attribute(key)
185
+ end
186
+
187
+ hash = key.is_a?(Hash) ? key : { key => value }
188
+
189
+ hash.each { |k,v| each { |el| el[k] = v || blk[el] } }
190
+
191
+ self
192
+ end
193
+ alias :set :attr
194
+ alias :attribute :attr
195
+
196
+ ###
197
+ # Remove the attributed named +name+ from all Node objects in the NodeSet
198
+ def remove_attr name
199
+ each { |el| el.delete name }
200
+ self
201
+ end
202
+
203
+ ###
204
+ # Iterate over each node, yielding to +block+
205
+ def each(&block)
206
+ 0.upto(length - 1) do |x|
207
+ yield self[x]
208
+ end
209
+ end
210
+
211
+ ###
212
+ # Get the inner text of all contained Node objects
213
+ def inner_text
214
+ collect{|j| j.inner_text}.join('')
215
+ end
216
+ alias :text :inner_text
217
+
218
+ ###
219
+ # Get the inner html of all contained Node objects
220
+ def inner_html
221
+ collect{|j| j.inner_html}.join('')
222
+ end
223
+
224
+ ###
225
+ # Wrap this NodeSet with +html+ or the results of the builder in +blk+
226
+ def wrap(html, &blk)
227
+ each do |j|
228
+ new_parent = Nokogiri.make(html, &blk)
229
+ j.add_next_sibling(new_parent)
230
+ new_parent.add_child(j)
231
+ end
232
+ self
233
+ end
234
+
235
+ ###
236
+ # Convert this NodeSet to a string.
237
+ def to_s
238
+ map { |x| x.to_s }.join
239
+ end
240
+
241
+ ###
242
+ # Convert this NodeSet to HTML
243
+ def to_html *args
244
+ map { |x| x.to_html(*args) }.join
245
+ end
246
+
247
+ ###
248
+ # Convert this NodeSet to XHTML
249
+ def to_xhtml *args
250
+ map { |x| x.to_xhtml(*args) }.join
251
+ end
252
+
253
+ ###
254
+ # Convert this NodeSet to XML
255
+ def to_xml *args
256
+ map { |x| x.to_xml(*args) }.join
257
+ end
258
+
259
+ alias :size :length
260
+ alias :to_ary :to_a
261
+
262
+ ###
263
+ # Removes the last element from set and returns it, or +nil+ if
264
+ # the set is empty
265
+ def pop
266
+ return nil if length == 0
267
+ delete last
268
+ end
269
+
270
+ ###
271
+ # Returns the first element of the NodeSet and removes it. Returns
272
+ # +nil+ if the set is empty.
273
+ def shift
274
+ return nil if length == 0
275
+ delete first
276
+ end
277
+
278
+ ###
279
+ # Equality -- Two NodeSets are equal if the contain the same number
280
+ # of elements and if each element is equal to the corresponding
281
+ # element in the other NodeSet
282
+ def == other
283
+ return false unless other.is_a?(Nokogiri::XML::NodeSet)
284
+ return false unless length == other.length
285
+ each_with_index do |node, i|
286
+ return false unless node == other[i]
287
+ end
288
+ true
289
+ end
290
+
291
+ ###
292
+ # Returns a new NodeSet containing all the children of all the nodes in
293
+ # the NodeSet
294
+ def children
295
+ inject(NodeSet.new(document)) { |set, node| set += node.children }
296
+ end
297
+
298
+ ###
299
+ # Return a nicely formated string representation
300
+ def inspect
301
+ "[#{map { |c| c.inspect }.join ', '}]"
302
+ end
303
+
304
+ alias :+ :|
305
+ end
306
+ end
307
+ end
@@ -0,0 +1,6 @@
1
+ module Nokogiri
2
+ module XML
3
+ class Notation < Struct.new(:name, :public_id, :system_id)
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,85 @@
1
+ module Nokogiri
2
+ module XML
3
+ ###
4
+ # Parse options for passing to Nokogiri.XML or Nokogiri.HTML
5
+ class ParseOptions
6
+ # Strict parsing
7
+ STRICT = 0
8
+ # Recover from errors
9
+ RECOVER = 1 << 0
10
+ # Substitute entities
11
+ NOENT = 1 << 1
12
+ # Load external subsets
13
+ DTDLOAD = 1 << 2
14
+ # Default DTD attributes
15
+ DTDATTR = 1 << 3
16
+ # validate with the DTD
17
+ DTDVALID = 1 << 4
18
+ # suppress error reports
19
+ NOERROR = 1 << 5
20
+ # suppress warning reports
21
+ NOWARNING = 1 << 6
22
+ # pedantic error reporting
23
+ PEDANTIC = 1 << 7
24
+ # remove blank nodes
25
+ NOBLANKS = 1 << 8
26
+ # use the SAX1 interface internally
27
+ SAX1 = 1 << 9
28
+ # Implement XInclude substitition
29
+ XINCLUDE = 1 << 10
30
+ # Forbid network access
31
+ NONET = 1 << 11
32
+ # Do not reuse the context dictionnary
33
+ NODICT = 1 << 12
34
+ # remove redundant namespaces declarations
35
+ NSCLEAN = 1 << 13
36
+ # merge CDATA as text nodes
37
+ NOCDATA = 1 << 14
38
+ # do not generate XINCLUDE START/END nodes
39
+ NOXINCNODE = 1 << 15
40
+
41
+ # the default options used for parsing XML documents
42
+ DEFAULT_XML = RECOVER
43
+ # the default options used for parsing HTML documents
44
+ DEFAULT_HTML = RECOVER | NOERROR | NOWARNING | NONET
45
+
46
+ attr_accessor :options
47
+ def initialize options = STRICT
48
+ @options = options
49
+ end
50
+
51
+ constants.each do |constant|
52
+ next if constant.to_sym == :STRICT
53
+ class_eval %{
54
+ def #{constant.downcase}
55
+ @options |= #{constant}
56
+ self
57
+ end
58
+
59
+ def #{constant.downcase}?
60
+ #{constant} & @options == #{constant}
61
+ end
62
+ }
63
+ end
64
+
65
+ def strict
66
+ @options &= ~RECOVER
67
+ self
68
+ end
69
+
70
+ def strict?
71
+ @options & RECOVER == STRICT
72
+ end
73
+
74
+ alias :to_i :options
75
+
76
+ def inspect
77
+ options = []
78
+ self.class.constants.each do |k|
79
+ options << k.downcase if send(:"#{k.downcase}?")
80
+ end
81
+ super.sub(/>$/, " " + options.join(', ') + ">")
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,2 @@
1
+ require 'nokogiri/xml/pp/node'
2
+ require 'nokogiri/xml/pp/character_data'
@@ -0,0 +1,18 @@
1
+ module Nokogiri
2
+ module XML
3
+ module PP
4
+ module CharacterData
5
+ def pretty_print pp # :nodoc:
6
+ nice_name = self.class.name.split('::').last
7
+ pp.group(2, "#(#{nice_name} ", ')') do
8
+ pp.pp text
9
+ end
10
+ end
11
+
12
+ def inspect # :nodoc:
13
+ "#<#{self.class.name}:#{sprintf("0x%x",object_id)} #{text.inspect}>"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end