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,27 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+ class XmlAttribute < FFI::Struct # :nodoc:
4
+ include CommonNode
5
+
6
+ layout(
7
+ :_private, :long,
8
+ :type, :int,
9
+ :name, :string,
10
+ :children, :pointer,
11
+ :last, :pointer,
12
+ :parent, :pointer,
13
+ :next, :pointer,
14
+ :prev, :pointer,
15
+ :doc, :pointer,
16
+
17
+ :nexth, :pointer,
18
+ :atype, :int,
19
+ :def, :int,
20
+ :default_value, :string,
21
+ :tree, :pointer,
22
+ :prefix, :string,
23
+ :elem, :string
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,16 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+ class XmlBuffer < FFI::ManagedStruct # :nodoc:
4
+
5
+ layout(
6
+ :content, :string,
7
+ :use, :int,
8
+ :size, :int
9
+ )
10
+
11
+ def self.release ptr
12
+ LibXML.xmlBufferFree(ptr)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,108 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+
4
+ module XmlDocumentMixin # :nodoc:
5
+ def self.included(base)
6
+ base.class_eval do
7
+
8
+ layout(
9
+ :_private, :pointer,
10
+ :type, :int,
11
+ :name, :string,
12
+ :children, :pointer,
13
+ :last, :pointer,
14
+ :parent, :pointer,
15
+ :next, :pointer,
16
+ :prev, :pointer,
17
+ :doc, :pointer,
18
+
19
+ :compression, :int,
20
+ :standalone, :int,
21
+ :intSubset, :pointer,
22
+ :extSubset, :pointer,
23
+ :oldNs, :pointer,
24
+ :version, :string,
25
+ :encoding, :pointer,
26
+ :ids, :pointer,
27
+ :refs, :pointer,
28
+ :URL, :string
29
+ )
30
+
31
+ end
32
+ end
33
+
34
+ def document
35
+ p = self[:doc]
36
+ p.null? ? nil : LibXML::XmlDocumentCast.new(p)
37
+ end
38
+
39
+ def ruby_doc
40
+ ptr = self[:_private]
41
+ return nil if ptr.null?
42
+ ObjectSpace._id2ref(ptr.get_long(0))
43
+ end
44
+
45
+ def ruby_doc=(object)
46
+ self[:_private].put_long(0, object.object_id)
47
+ end
48
+
49
+ def unlinked_nodes
50
+ LibXML::XmlNodeSetCast.new(self[:_private].get_pointer(FFI.type_size(:pointer)))
51
+ end
52
+
53
+ def alloc_tuple
54
+ self[:_private] = LibXML.calloc(FFI.type_size(:pointer), 2)
55
+ self[:_private].put_pointer(FFI.type_size(:pointer), LibXML.xmlXPathNodeSetCreate(nil))
56
+ end
57
+ end
58
+
59
+ #
60
+ # use at the point of creation, so we can be sure the document will be GCed properly
61
+ #
62
+ class XmlDocument < FFI::ManagedStruct # :nodoc:
63
+ include XmlDocumentMixin
64
+
65
+ def initialize(ptr)
66
+ super(ptr)
67
+ self.alloc_tuple
68
+ end
69
+
70
+ def self.release ptr
71
+ doc = LibXML::XmlDocumentCast.new(ptr)
72
+ func = LibXML.xmlDeregisterNodeDefault(nil)
73
+ begin
74
+ ns = LibXML::XmlNodeSetCast.new(doc[:_private].get_pointer(LibXML.pointer_offset(1)))
75
+
76
+ ns[:nodeNr].times do |j|
77
+ node_cstruct = LibXML::XmlNode.new(ns[:nodeTab].get_pointer(LibXML.pointer_offset(j)))
78
+ case node_cstruct[:type]
79
+ when Nokogiri::XML::Node::ATTRIBUTE_NODE
80
+ LibXML.xmlFreePropList(node_cstruct)
81
+ else
82
+ LibXML.xmlAddChild(doc, node_cstruct) if node_cstruct[:parent].null?
83
+ end
84
+ end
85
+ LibXML::XmlNodeSet.release(ns.pointer)
86
+
87
+ LibXML.free(doc[:_private])
88
+ rescue
89
+ puts "Nokogiri::LibXML::XmlDocument.release: exception: '#{$!}'"
90
+ ensure
91
+ LibXML.xmlFreeDoc(ptr)
92
+ LibXML.xmlDeregisterNodeDefault(func)
93
+ end
94
+ end
95
+ end
96
+
97
+ #
98
+ # use when we don't want to cause the doc to be GCed
99
+ #
100
+ class XmlDocumentCast < FFI::Struct # :nodoc:
101
+ include XmlDocumentMixin
102
+ end
103
+
104
+ HtmlDocument = XmlDocument # implemented identically in libxml2.6
105
+ HtmlDocumentCast = XmlDocumentCast # implemented identically in libxml2.6
106
+ end
107
+
108
+ end
@@ -0,0 +1,28 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+ class XmlDtd < FFI::Struct # :nodoc:
4
+
5
+ layout(
6
+ :_private, :long, # actually a pointer we're casting as an integer
7
+ :type, :int,
8
+ :name, :string,
9
+ :children, :pointer,
10
+ :last, :pointer,
11
+ :parent, :pointer,
12
+ :next, :pointer,
13
+ :prev, :pointer,
14
+ :doc, :pointer,
15
+
16
+ :notations, :pointer,
17
+ :elements, :pointer,
18
+ :attributes, :pointer,
19
+ :entities, :pointer,
20
+ :external_id, :string,
21
+ :system_id, :string
22
+ )
23
+
24
+ include CommonNode
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,26 @@
1
+ module Nokogiri
2
+ # :stopdoc:
3
+ module LibXML
4
+ class XmlElement < FFI::Struct
5
+ include CommonNode
6
+
7
+ layout(
8
+ :_private, :long,
9
+ :type, :int,
10
+ :name, :string,
11
+ :children, :pointer,
12
+ :last, :pointer,
13
+ :parent, :pointer,
14
+ :next, :pointer,
15
+ :prev, :pointer,
16
+ :doc, :pointer,
17
+
18
+ :etype, :int,
19
+ :content, :pointer,
20
+ :properties, :pointer,
21
+ :prefix, :string
22
+ )
23
+ end
24
+ end
25
+ # :startdoc:
26
+ end
@@ -0,0 +1,17 @@
1
+ # :stopdoc:
2
+ module Nokogiri
3
+ module LibXML
4
+ class XmlElementContent < FFI::Struct
5
+ layout(
6
+ :type, :int,
7
+ :ocur, :int, # This is misspelled in the header file
8
+ :name, :string,
9
+ :c1, :pointer,
10
+ :c2, :pointer,
11
+ :parent,:pointer,
12
+ :prefix,:string
13
+ )
14
+ end
15
+ end
16
+ end
17
+ # :startdoc:
@@ -0,0 +1,32 @@
1
+ module Nokogiri
2
+ # :stopdoc:
3
+ module LibXML
4
+ class XmlEntity < FFI::Struct
5
+ include CommonNode
6
+
7
+ layout(
8
+ :_private, :long,
9
+ :type, :int,
10
+ :name, :string,
11
+ :children, :pointer,
12
+ :last, :pointer,
13
+ :parent, :pointer,
14
+ :next, :pointer,
15
+ :prev, :pointer,
16
+ :doc, :pointer,
17
+
18
+ :orig, :string,
19
+ :content, :string,
20
+ :length, :int,
21
+ :etype, :int,
22
+ :external_id, :string,
23
+ :system_id, :string,
24
+ :nexte, :pointer,
25
+ :uri, :string,
26
+ :owner, :int,
27
+ :checked, :int
28
+ )
29
+ end
30
+ end
31
+ # :startdoc:
32
+ end
@@ -0,0 +1,12 @@
1
+ module Nokogiri
2
+ # :stopdoc:
3
+ module LibXML
4
+ class XmlEnumeration < FFI::Struct
5
+ layout(
6
+ :next, :pointer,
7
+ :name, :string
8
+ )
9
+ end
10
+ end
11
+ # :startdoc:
12
+ end
@@ -0,0 +1,28 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+ class XmlNode < FFI::Struct # :nodoc:
4
+
5
+ layout(
6
+ :_private, :long, # actually a pointer we're casting as an integer
7
+ :type, :int,
8
+ :name, :string,
9
+ :children, :pointer,
10
+ :last, :pointer,
11
+ :parent, :pointer,
12
+ :next, :pointer,
13
+ :prev, :pointer,
14
+ :doc, :pointer,
15
+
16
+ :ns, :pointer,
17
+ :content, :string,
18
+ :properties, :pointer,
19
+ :nsDef, :pointer,
20
+ :psvi, :pointer,
21
+ :line, :short
22
+ )
23
+
24
+ include CommonNode
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,53 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+
4
+ module XmlNodeSetMixin # :nodoc:
5
+ def self.included(base)
6
+ base.class_eval do
7
+
8
+ layout(
9
+ :nodeNr, :int,
10
+ :nodeMax, :int,
11
+ :nodeTab, :pointer
12
+ )
13
+
14
+ end
15
+ end
16
+
17
+ def document
18
+ p = self[:doc]
19
+ p.null? ? nil : LibXML::XmlDocumentCast.new(p)
20
+ end
21
+
22
+ def nodeAt(index)
23
+ self[:nodeTab].get_pointer(LibXML.pointer_offset(index))
24
+ end
25
+
26
+ def nodeTab
27
+ self[:nodeTab].read_array_of_pointer(self[:nodeNr])
28
+ end
29
+
30
+ def nodeTab=(array)
31
+ # TODO: do we need to check nodeMax and allocate more memory? probably.
32
+ self[:nodeTab].write_array_of_pointer(array)
33
+ end
34
+ end
35
+
36
+
37
+ class XmlNodeSet < FFI::ManagedStruct # :nodoc:
38
+ include XmlNodeSetMixin
39
+
40
+ def self.release ptr
41
+ ns = XmlNodeSetCast.new(ptr)
42
+ LibXML.xmlFree ns[:nodeTab] if ns[:nodeTab]
43
+ LibXML.xmlFree ptr
44
+ end
45
+ end
46
+
47
+
48
+ class XmlNodeSetCast < FFI::Struct # :nodoc:
49
+ include XmlNodeSetMixin
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,11 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+ class XmlNotation < FFI::Struct # :nodoc:
4
+ layout(
5
+ :name, :string,
6
+ :PublicID, :string,
7
+ :SystemID, :string
8
+ )
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+ class XmlNs < FFI::Struct # :nodoc:
4
+ layout(
5
+ :next, :pointer,
6
+ :type, :int,
7
+ :href, :string,
8
+ :prefix, :string,
9
+ :_private, :long # actually a pointer we're casting as an integer
10
+ )
11
+
12
+ include CommonNode
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module Nokogiri
2
+ # :stopdoc:
3
+ module LibXML
4
+ class XmlParserContext < FFI::Struct
5
+ layout(
6
+ :sax, :pointer,
7
+ :userData, :pointer,
8
+ :myDoc, :pointer,
9
+ :wellFormed, :int,
10
+ :replaceEntities, :int,
11
+ :version, :string,
12
+ :encoding, :string,
13
+ :standalone, :int,
14
+ :html, :int
15
+ )
16
+ end
17
+ end
18
+ # :startdoc:
19
+ end
@@ -0,0 +1,14 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+ class XmlRelaxNG < FFI::ManagedStruct # :nodoc:
4
+
5
+ layout :dummy, :int, 0 # to avoid @layout warnings
6
+
7
+ def self.release ptr
8
+ LibXML.xmlRelaxNGFree(ptr)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,51 @@
1
+ module Nokogiri
2
+ module LibXML # :nodoc:
3
+ class XmlSaxHandler < FFI::ManagedStruct # :nodoc:
4
+
5
+ XML_SAX2_MAGIC = 0xDEEDBEAF # see, the libxml2 authors DO have a sense of humor. i think.
6
+
7
+ layout(:internalSubset, :pointer,
8
+ :isStandalone, :pointer,
9
+ :hasInternalSubset, :pointer,
10
+ :hasExternalSubset, :pointer,
11
+ :resolveEntity, :pointer,
12
+ :getEntity, :pointer,
13
+ :entityDecl, :pointer,
14
+ :notationDecl, :pointer,
15
+ :attributeDecl, :pointer,
16
+ :elementDecl, :pointer,
17
+ :unparsedEntityDecl, :pointer,
18
+ :setDocumentLocator, :pointer,
19
+ :startDocument, :start_document_sax_func,
20
+ :endDocument, :end_document_sax_func ,
21
+ :startElement, :start_element_sax_func,
22
+ :endElement, :end_element_sax_func,
23
+ :reference, :pointer,
24
+ :characters, :characters_sax_func,
25
+ :ignorableWhitespace, :pointer,
26
+ :processingInstruction, :pointer,
27
+ :comment, :comment_sax_func,
28
+ :warning, :warning_sax_func,
29
+ :error, :error_sax_func,
30
+ :fatalError, :pointer,
31
+ :getParameterEntity, :pointer,
32
+ :cdataBlock, :cdata_block_sax_func,
33
+ :externalSubset, :pointer,
34
+ :initialized, :uint,
35
+ :_private, :pointer,
36
+ :startElementNs, :start_element_ns_sax2_func,
37
+ :endElementNs, :end_element_ns_sax2_func,
38
+ :serror, :syntax_error_handler
39
+ )
40
+
41
+ def self.allocate
42
+ new LibXML.calloc(1, LibXML::XmlSaxHandler.size)
43
+ end
44
+
45
+ def self.release ptr
46
+ LibXML.free(ptr)
47
+ end
48
+
49
+ end
50
+ end
51
+ end