nokogiri 1.4.7 → 1.5.0.beta.1

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 (164) hide show
  1. data/CHANGELOG.ja.rdoc +8 -83
  2. data/CHANGELOG.rdoc +6 -80
  3. data/Manifest.txt +4 -74
  4. data/README.ja.rdoc +5 -1
  5. data/README.rdoc +8 -22
  6. data/Rakefile +79 -60
  7. data/bin/nokogiri +1 -6
  8. data/deps.rip +5 -0
  9. data/ext/nokogiri/extconf.rb +32 -53
  10. data/ext/nokogiri/nokogiri.c +0 -2
  11. data/ext/nokogiri/nokogiri.h +0 -9
  12. data/ext/nokogiri/xml_document.c +0 -14
  13. data/ext/nokogiri/xml_dtd.c +2 -2
  14. data/ext/nokogiri/xml_io.c +7 -32
  15. data/ext/nokogiri/xml_node.c +31 -103
  16. data/ext/nokogiri/xml_node_set.c +8 -8
  17. data/ext/nokogiri/xml_reader.c +1 -20
  18. data/ext/nokogiri/xml_sax_parser.c +3 -5
  19. data/ext/nokogiri/xml_sax_parser_context.c +0 -40
  20. data/ext/nokogiri/xml_xpath_context.c +2 -35
  21. data/ext/nokogiri/xslt_stylesheet.c +6 -124
  22. data/lib/nokogiri.rb +7 -3
  23. data/lib/nokogiri/css.rb +3 -6
  24. data/lib/nokogiri/css/generated_parser.rb +669 -0
  25. data/lib/nokogiri/css/generated_tokenizer.rb +145 -0
  26. data/lib/nokogiri/css/parser.rb +70 -665
  27. data/lib/nokogiri/css/parser.y +1 -6
  28. data/lib/nokogiri/css/tokenizer.rb +3 -148
  29. data/lib/nokogiri/css/tokenizer.rex +1 -1
  30. data/lib/nokogiri/css/xpath_visitor.rb +14 -16
  31. data/lib/nokogiri/decorators/slop.rb +3 -5
  32. data/lib/nokogiri/html.rb +3 -2
  33. data/lib/nokogiri/html/document.rb +18 -134
  34. data/lib/nokogiri/html/document_fragment.rb +21 -26
  35. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  36. data/lib/nokogiri/html/sax/parser.rb +2 -6
  37. data/lib/nokogiri/version.rb +4 -9
  38. data/lib/nokogiri/xml/attribute_decl.rb +1 -1
  39. data/lib/nokogiri/xml/builder.rb +1 -1
  40. data/lib/nokogiri/xml/document.rb +3 -27
  41. data/lib/nokogiri/xml/document_fragment.rb +2 -9
  42. data/lib/nokogiri/xml/dtd.rb +1 -12
  43. data/lib/nokogiri/xml/element_decl.rb +1 -1
  44. data/lib/nokogiri/xml/entity_decl.rb +1 -1
  45. data/lib/nokogiri/xml/node.rb +75 -172
  46. data/lib/nokogiri/xml/node/save_options.rb +0 -10
  47. data/lib/nokogiri/xml/node_set.rb +3 -28
  48. data/lib/nokogiri/xml/parse_options.rb +0 -8
  49. data/lib/nokogiri/xml/reader.rb +6 -44
  50. data/lib/nokogiri/xml/sax/document.rb +5 -9
  51. data/lib/nokogiri/xml/schema.rb +1 -7
  52. data/lib/nokogiri/xslt.rb +5 -9
  53. data/tasks/cross_compile.rb +12 -27
  54. data/tasks/test.rb +0 -0
  55. data/test/css/test_parser.rb +19 -40
  56. data/test/css/test_tokenizer.rb +0 -8
  57. data/test/helper.rb +1 -4
  58. data/test/html/sax/test_parser.rb +21 -47
  59. data/test/html/sax/test_parser_context.rb +2 -2
  60. data/test/html/test_document.rb +3 -58
  61. data/test/html/test_document_encoding.rb +0 -53
  62. data/test/html/test_document_fragment.rb +13 -82
  63. data/test/html/test_element_description.rb +4 -2
  64. data/test/html/test_node.rb +0 -9
  65. data/test/test_memory_leak.rb +2 -57
  66. data/test/test_nokogiri.rb +14 -20
  67. data/test/test_reader.rb +7 -47
  68. data/test/test_xslt_transforms.rb +5 -8
  69. data/test/xml/sax/test_parser.rb +17 -34
  70. data/test/xml/sax/test_parser_context.rb +0 -50
  71. data/test/xml/sax/test_push_parser.rb +1 -18
  72. data/test/xml/test_attr.rb +4 -31
  73. data/test/xml/test_attribute_decl.rb +7 -3
  74. data/test/xml/test_builder.rb +5 -5
  75. data/test/xml/test_cdata.rb +3 -3
  76. data/test/xml/test_document.rb +18 -15
  77. data/test/xml/test_document_fragment.rb +20 -19
  78. data/test/xml/test_dtd.rb +13 -18
  79. data/test/xml/test_element_content.rb +1 -1
  80. data/test/xml/test_element_decl.rb +1 -1
  81. data/test/xml/test_entity_decl.rb +12 -10
  82. data/test/xml/test_namespace.rb +7 -5
  83. data/test/xml/test_node.rb +15 -54
  84. data/test/xml/test_node_reparenting.rb +42 -85
  85. data/test/xml/test_node_set.rb +2 -61
  86. data/test/xml/test_schema.rb +0 -5
  87. data/test/xml/test_text.rb +2 -11
  88. data/test/xml/test_unparented_node.rb +1 -1
  89. data/test/xml/test_xpath.rb +7 -43
  90. metadata +131 -155
  91. data/.gemtest +0 -0
  92. data/ext/nokogiri/depend +0 -358
  93. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  94. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  95. data/lib/nokogiri/css/parser_extras.rb +0 -91
  96. data/lib/nokogiri/ffi/encoding_handler.rb +0 -42
  97. data/lib/nokogiri/ffi/html/document.rb +0 -28
  98. data/lib/nokogiri/ffi/html/element_description.rb +0 -81
  99. data/lib/nokogiri/ffi/html/entity_lookup.rb +0 -16
  100. data/lib/nokogiri/ffi/html/sax/parser_context.rb +0 -38
  101. data/lib/nokogiri/ffi/io_callbacks.rb +0 -42
  102. data/lib/nokogiri/ffi/libxml.rb +0 -420
  103. data/lib/nokogiri/ffi/structs/common_node.rb +0 -38
  104. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +0 -24
  105. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +0 -13
  106. data/lib/nokogiri/ffi/structs/xml_alloc.rb +0 -16
  107. data/lib/nokogiri/ffi/structs/xml_attr.rb +0 -20
  108. data/lib/nokogiri/ffi/structs/xml_attribute.rb +0 -27
  109. data/lib/nokogiri/ffi/structs/xml_buffer.rb +0 -16
  110. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +0 -11
  111. data/lib/nokogiri/ffi/structs/xml_document.rb +0 -117
  112. data/lib/nokogiri/ffi/structs/xml_dtd.rb +0 -28
  113. data/lib/nokogiri/ffi/structs/xml_element.rb +0 -26
  114. data/lib/nokogiri/ffi/structs/xml_element_content.rb +0 -17
  115. data/lib/nokogiri/ffi/structs/xml_entity.rb +0 -32
  116. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +0 -12
  117. data/lib/nokogiri/ffi/structs/xml_node.rb +0 -28
  118. data/lib/nokogiri/ffi/structs/xml_node_set.rb +0 -53
  119. data/lib/nokogiri/ffi/structs/xml_notation.rb +0 -11
  120. data/lib/nokogiri/ffi/structs/xml_ns.rb +0 -15
  121. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +0 -20
  122. data/lib/nokogiri/ffi/structs/xml_parser_input.rb +0 -19
  123. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +0 -14
  124. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +0 -51
  125. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +0 -124
  126. data/lib/nokogiri/ffi/structs/xml_schema.rb +0 -13
  127. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +0 -31
  128. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +0 -12
  129. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +0 -38
  130. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +0 -35
  131. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +0 -20
  132. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +0 -13
  133. data/lib/nokogiri/ffi/weak_bucket.rb +0 -40
  134. data/lib/nokogiri/ffi/xml/attr.rb +0 -41
  135. data/lib/nokogiri/ffi/xml/attribute_decl.rb +0 -27
  136. data/lib/nokogiri/ffi/xml/cdata.rb +0 -19
  137. data/lib/nokogiri/ffi/xml/comment.rb +0 -18
  138. data/lib/nokogiri/ffi/xml/document.rb +0 -174
  139. data/lib/nokogiri/ffi/xml/document_fragment.rb +0 -21
  140. data/lib/nokogiri/ffi/xml/dtd.rb +0 -67
  141. data/lib/nokogiri/ffi/xml/element_content.rb +0 -43
  142. data/lib/nokogiri/ffi/xml/element_decl.rb +0 -19
  143. data/lib/nokogiri/ffi/xml/entity_decl.rb +0 -36
  144. data/lib/nokogiri/ffi/xml/entity_reference.rb +0 -19
  145. data/lib/nokogiri/ffi/xml/namespace.rb +0 -44
  146. data/lib/nokogiri/ffi/xml/node.rb +0 -559
  147. data/lib/nokogiri/ffi/xml/node_set.rb +0 -150
  148. data/lib/nokogiri/ffi/xml/processing_instruction.rb +0 -20
  149. data/lib/nokogiri/ffi/xml/reader.rb +0 -236
  150. data/lib/nokogiri/ffi/xml/relax_ng.rb +0 -85
  151. data/lib/nokogiri/ffi/xml/sax/parser.rb +0 -143
  152. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +0 -79
  153. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +0 -51
  154. data/lib/nokogiri/ffi/xml/schema.rb +0 -109
  155. data/lib/nokogiri/ffi/xml/syntax_error.rb +0 -98
  156. data/lib/nokogiri/ffi/xml/text.rb +0 -18
  157. data/lib/nokogiri/ffi/xml/xpath.rb +0 -9
  158. data/lib/nokogiri/ffi/xml/xpath_context.rb +0 -153
  159. data/lib/nokogiri/ffi/xslt/stylesheet.rb +0 -77
  160. data/test/decorators/test_slop.rb +0 -16
  161. data/test/ffi/test_document.rb +0 -35
  162. data/test/files/encoding.html +0 -82
  163. data/test/files/encoding.xhtml +0 -84
  164. data/test/xslt/test_custom_functions.rb +0 -94
@@ -1,38 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
- module CommonNode # :nodoc:
4
- def document
5
- p = self[:doc]
6
- p.null? ? nil : LibXML::XmlDocumentCast.new(p)
7
- end
8
-
9
- def ruby_node_pointer
10
- self[:_private]
11
- end
12
-
13
- def ruby_node_pointer=(value)
14
- self[:_private] = value
15
- end
16
-
17
- def ruby_node
18
- Nokogiri::WeakBucket.get_object(self)
19
- end
20
-
21
- def ruby_node= object
22
- Nokogiri::WeakBucket.set_object(self, object)
23
- end
24
-
25
- def keep_reference_from_document! # equivalent to NOKOGIRI_ROOT_NODE
26
- doc = self.document
27
- raise "no document to add reference to" unless doc
28
- LibXML.xmlXPathNodeSetAdd(doc.unlinked_nodes, self)
29
- end
30
-
31
- def keep_reference_from!(document) # equivalent to NOKOGIRI_ROOT_NSDEF
32
- raise "no document to add reference to" unless document
33
- LibXML.xmlXPathNodeSetAdd(document.unlinked_nodes, self)
34
- end
35
- end
36
- end
37
- end
38
-
@@ -1,24 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
- class HtmlElemDesc < FFI::Struct # :nodoc:
4
-
5
- layout(
6
- :name, :string,
7
- :startTag, :char,
8
- :endTag, :char,
9
- :saveEndTag, :char,
10
- :empty, :char,
11
- :depr, :char,
12
- :dtd, :char,
13
- :isinline, :char,
14
- :desc, :string,
15
- :subelts, :pointer,
16
- :defaultsubelt, :string,
17
- :attrs_opt, :pointer,
18
- :attrs_depr, :pointer,
19
- :attrs_req, :pointer
20
- )
21
-
22
- end
23
- end
24
- end
@@ -1,13 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
- class HtmlEntityDesc < FFI::Struct # :nodoc:
4
-
5
- layout(
6
- :value, :int,
7
- :name, :char,
8
- :desc, :char
9
- )
10
-
11
- end
12
- end
13
- end
@@ -1,16 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
- #
4
- # this class only exists to create a xmlFree() finalizer
5
- #
6
- class XmlAlloc < FFI::ManagedStruct # :nodoc:
7
-
8
- layout :dummy, :int, 0 # to avoid @layout warnings
9
-
10
- def self.release ptr
11
- LibXML.xmlFree(ptr)
12
- end
13
-
14
- end
15
- end
16
- end
@@ -1,20 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
- class XmlAttr < FFI::Struct # :nodoc:
4
-
5
- layout(
6
- :_private, :pointer,
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
- :ns, :pointer
16
- )
17
-
18
- end
19
- end
20
- end
@@ -1,27 +0,0 @@
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
@@ -1,16 +0,0 @@
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
@@ -1,11 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
- class XmlCharEncodingHandler < FFI::Struct # :nodoc:
4
- layout(
5
- :name, :string,
6
- :input, :pointer,
7
- :output, :pointer
8
- )
9
- end
10
- end
11
- end
@@ -1,117 +0,0 @@
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_node_pointer
40
- tuple = self[:_private]
41
- tuple.null? ? 0 : tuple.get_long(0)
42
- end
43
-
44
- def ruby_node_pointer=(value)
45
- self[:_private].put_long(0, value)
46
- end
47
-
48
- def ruby_doc
49
- Nokogiri::WeakBucket.get_object(self)
50
- end
51
-
52
- def ruby_doc=(object)
53
- Nokogiri::WeakBucket.set_object(self, object)
54
- end
55
-
56
- def unlinked_nodes
57
- LibXML::XmlNodeSetCast.new(self[:_private].get_pointer(LibXML.pointer_offset(1)))
58
- end
59
-
60
- def alloc_tuple
61
- self[:_private] = LibXML.calloc(LibXML::POINTER_SIZE, 2)
62
- self[:_private].put_pointer(LibXML.pointer_offset(1), LibXML.xmlXPathNodeSetCreate(nil))
63
- end
64
- end
65
-
66
- #
67
- # use at the point of creation, so we can be sure the document will be GCed properly
68
- #
69
- class XmlDocument < FFI::ManagedStruct # :nodoc:
70
- include XmlDocumentMixin
71
-
72
- def initialize(ptr)
73
- super(ptr)
74
- self.alloc_tuple
75
- end
76
-
77
- def self.release ptr
78
- doc = LibXML::XmlDocumentCast.new(ptr)
79
- func = LibXML.xmlDeregisterNodeDefault(nil)
80
- begin
81
- ns = LibXML::XmlNodeSetCast.new(doc[:_private].get_pointer(LibXML.pointer_offset(1)))
82
-
83
- ns[:nodeNr].times do |j|
84
- node_cstruct = LibXML::XmlNode.new(ns[:nodeTab].get_pointer(LibXML.pointer_offset(j)))
85
- case node_cstruct[:type]
86
- when Nokogiri::XML::Node::ATTRIBUTE_NODE
87
- LibXML.xmlFreePropList(node_cstruct)
88
- when Nokogiri::XML::Node::NAMESPACE_DECL
89
- LibXML.xmlFree(node_cstruct)
90
- else
91
- LibXML.xmlAddChild(doc, node_cstruct) if node_cstruct[:parent].null?
92
- end
93
- end
94
- LibXML::XmlNodeSet.release(ns.pointer)
95
-
96
- LibXML.free(doc[:_private])
97
- rescue
98
- puts "Nokogiri::LibXML::XmlDocument.release: exception: '#{$!}'"
99
- ensure
100
- LibXML.xmlFreeDoc(ptr)
101
- LibXML.xmlDeregisterNodeDefault(func)
102
- end
103
- end
104
- end
105
-
106
- #
107
- # use when we don't want to cause the doc to be GCed
108
- #
109
- class XmlDocumentCast < FFI::Struct # :nodoc:
110
- include XmlDocumentMixin
111
- end
112
-
113
- HtmlDocument = XmlDocument # implemented identically in libxml2.6
114
- HtmlDocumentCast = XmlDocumentCast # implemented identically in libxml2.6
115
- end
116
-
117
- end
@@ -1,28 +0,0 @@
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
@@ -1,26 +0,0 @@
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
@@ -1,17 +0,0 @@
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:
@@ -1,32 +0,0 @@
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
@@ -1,12 +0,0 @@
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
@@ -1,28 +0,0 @@
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