nokogiri 1.4.7-x86-mingw32 → 1.5.0-x86-mingw32

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 (132) hide show
  1. data/CHANGELOG.ja.rdoc +59 -1
  2. data/CHANGELOG.rdoc +51 -2
  3. data/Manifest.txt +66 -66
  4. data/README.ja.rdoc +4 -0
  5. data/README.rdoc +31 -3
  6. data/Rakefile +111 -135
  7. data/bin/nokogiri +1 -2
  8. data/ext/nokogiri/extconf.rb +9 -3
  9. data/ext/nokogiri/nokogiri.c +21 -3
  10. data/ext/nokogiri/nokogiri.h +0 -2
  11. data/ext/nokogiri/xml_node.c +0 -6
  12. data/ext/nokogiri/xml_relax_ng.c +0 -7
  13. data/ext/nokogiri/xml_sax_parser.c +9 -4
  14. data/ext/nokogiri/xslt_stylesheet.c +5 -1
  15. data/lib/nokogiri.rb +19 -25
  16. data/lib/nokogiri/1.8/nokogiri.so +0 -0
  17. data/lib/nokogiri/1.9/nokogiri.so +0 -0
  18. data/lib/nokogiri/css.rb +0 -1
  19. data/lib/nokogiri/html.rb +1 -0
  20. data/lib/nokogiri/html/document.rb +9 -2
  21. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  22. data/lib/nokogiri/version.rb +76 -31
  23. data/lib/nokogiri/xml/attribute_decl.rb +1 -1
  24. data/lib/nokogiri/xml/builder.rb +7 -0
  25. data/lib/nokogiri/xml/document.rb +17 -1
  26. data/lib/nokogiri/xml/document_fragment.rb +14 -0
  27. data/lib/nokogiri/xml/dtd.rb +1 -1
  28. data/lib/nokogiri/xml/element_decl.rb +1 -1
  29. data/lib/nokogiri/xml/entity_decl.rb +1 -1
  30. data/lib/nokogiri/xml/node.rb +39 -15
  31. data/lib/nokogiri/xml/node/save_options.rb +14 -5
  32. data/lib/nokogiri/xml/node_set.rb +7 -0
  33. data/lib/nokogiri/xml/reader.rb +2 -2
  34. data/lib/nokogiri/xml/sax/document.rb +2 -2
  35. data/lib/nokogiri/xslt/stylesheet.rb +1 -1
  36. data/nokogiri_help_responses.md +40 -0
  37. data/tasks/cross_compile.rb +134 -155
  38. data/tasks/nokogiri.org.rb +18 -0
  39. data/tasks/test.rb +2 -2
  40. data/test/files/metacharset.html +10 -0
  41. data/test/files/noencoding.html +47 -0
  42. data/test/helper.rb +2 -1
  43. data/test/html/sax/test_parser.rb +22 -5
  44. data/test/html/test_document.rb +21 -2
  45. data/test/html/test_document_encoding.rb +9 -1
  46. data/test/html/test_document_fragment.rb +5 -3
  47. data/test/html/test_element_description.rb +4 -2
  48. data/test/test_memory_leak.rb +4 -39
  49. data/test/test_nokogiri.rb +14 -20
  50. data/test/test_reader.rb +12 -8
  51. data/test/xml/node/test_save_options.rb +10 -2
  52. data/test/xml/sax/test_parser.rb +14 -7
  53. data/test/xml/test_attribute_decl.rb +7 -3
  54. data/test/xml/test_builder.rb +17 -0
  55. data/test/xml/test_document.rb +31 -4
  56. data/test/xml/test_dtd.rb +13 -3
  57. data/test/xml/test_element_content.rb +1 -1
  58. data/test/xml/test_element_decl.rb +1 -1
  59. data/test/xml/test_entity_decl.rb +12 -10
  60. data/test/xml/test_namespace.rb +7 -5
  61. data/test/xml/test_node.rb +21 -10
  62. data/test/xml/test_node_reparenting.rb +16 -3
  63. data/test/xml/test_node_set.rb +34 -0
  64. data/test/xslt/test_custom_functions.rb +2 -2
  65. data/test/xslt/test_exception_handling.rb +37 -0
  66. metadata +110 -88
  67. data/lib/nokogiri/ffi/encoding_handler.rb +0 -42
  68. data/lib/nokogiri/ffi/html/document.rb +0 -28
  69. data/lib/nokogiri/ffi/html/element_description.rb +0 -81
  70. data/lib/nokogiri/ffi/html/entity_lookup.rb +0 -16
  71. data/lib/nokogiri/ffi/html/sax/parser_context.rb +0 -38
  72. data/lib/nokogiri/ffi/io_callbacks.rb +0 -42
  73. data/lib/nokogiri/ffi/libxml.rb +0 -420
  74. data/lib/nokogiri/ffi/structs/common_node.rb +0 -38
  75. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +0 -24
  76. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +0 -13
  77. data/lib/nokogiri/ffi/structs/xml_alloc.rb +0 -16
  78. data/lib/nokogiri/ffi/structs/xml_attr.rb +0 -20
  79. data/lib/nokogiri/ffi/structs/xml_attribute.rb +0 -27
  80. data/lib/nokogiri/ffi/structs/xml_buffer.rb +0 -16
  81. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +0 -11
  82. data/lib/nokogiri/ffi/structs/xml_document.rb +0 -117
  83. data/lib/nokogiri/ffi/structs/xml_dtd.rb +0 -28
  84. data/lib/nokogiri/ffi/structs/xml_element.rb +0 -26
  85. data/lib/nokogiri/ffi/structs/xml_element_content.rb +0 -17
  86. data/lib/nokogiri/ffi/structs/xml_entity.rb +0 -32
  87. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +0 -12
  88. data/lib/nokogiri/ffi/structs/xml_node.rb +0 -28
  89. data/lib/nokogiri/ffi/structs/xml_node_set.rb +0 -53
  90. data/lib/nokogiri/ffi/structs/xml_notation.rb +0 -11
  91. data/lib/nokogiri/ffi/structs/xml_ns.rb +0 -15
  92. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +0 -20
  93. data/lib/nokogiri/ffi/structs/xml_parser_input.rb +0 -19
  94. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +0 -14
  95. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +0 -51
  96. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +0 -124
  97. data/lib/nokogiri/ffi/structs/xml_schema.rb +0 -13
  98. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +0 -31
  99. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +0 -12
  100. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +0 -38
  101. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +0 -35
  102. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +0 -20
  103. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +0 -13
  104. data/lib/nokogiri/ffi/weak_bucket.rb +0 -40
  105. data/lib/nokogiri/ffi/xml/attr.rb +0 -41
  106. data/lib/nokogiri/ffi/xml/attribute_decl.rb +0 -27
  107. data/lib/nokogiri/ffi/xml/cdata.rb +0 -19
  108. data/lib/nokogiri/ffi/xml/comment.rb +0 -18
  109. data/lib/nokogiri/ffi/xml/document.rb +0 -174
  110. data/lib/nokogiri/ffi/xml/document_fragment.rb +0 -21
  111. data/lib/nokogiri/ffi/xml/dtd.rb +0 -67
  112. data/lib/nokogiri/ffi/xml/element_content.rb +0 -43
  113. data/lib/nokogiri/ffi/xml/element_decl.rb +0 -19
  114. data/lib/nokogiri/ffi/xml/entity_decl.rb +0 -36
  115. data/lib/nokogiri/ffi/xml/entity_reference.rb +0 -19
  116. data/lib/nokogiri/ffi/xml/namespace.rb +0 -44
  117. data/lib/nokogiri/ffi/xml/node.rb +0 -559
  118. data/lib/nokogiri/ffi/xml/node_set.rb +0 -150
  119. data/lib/nokogiri/ffi/xml/processing_instruction.rb +0 -20
  120. data/lib/nokogiri/ffi/xml/reader.rb +0 -236
  121. data/lib/nokogiri/ffi/xml/relax_ng.rb +0 -85
  122. data/lib/nokogiri/ffi/xml/sax/parser.rb +0 -143
  123. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +0 -79
  124. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +0 -51
  125. data/lib/nokogiri/ffi/xml/schema.rb +0 -109
  126. data/lib/nokogiri/ffi/xml/syntax_error.rb +0 -98
  127. data/lib/nokogiri/ffi/xml/text.rb +0 -18
  128. data/lib/nokogiri/ffi/xml/xpath.rb +0 -9
  129. data/lib/nokogiri/ffi/xml/xpath_context.rb +0 -153
  130. data/lib/nokogiri/ffi/xslt/stylesheet.rb +0 -77
  131. data/lib/nokogiri/version_warning.rb +0 -14
  132. data/test/ffi/test_document.rb +0 -35
@@ -1,20 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
-
4
- class XmlXpathParserContext < FFI::Struct # :nodoc:
5
-
6
- layout(
7
- :cur, :pointer,
8
- :base, :pointer,
9
- :error, :int,
10
- :context, :pointer
11
- )
12
-
13
- def context
14
- p = self[:context]
15
- LibXML::XmlXpathContextCast.new(p)
16
- end
17
- end
18
-
19
- end
20
- end
@@ -1,13 +0,0 @@
1
- module Nokogiri
2
- module LibXML # :nodoc:
3
- class XsltStylesheet < FFI::ManagedStruct # :nodoc:
4
-
5
- layout :dummy, :int, 0 # to avoid @layout warnings
6
-
7
- def self.release ptr
8
- LibXML.xsltFreeStylesheet(ptr)
9
- end
10
-
11
- end
12
- end
13
- end
@@ -1,40 +0,0 @@
1
- # :stopdoc:
2
- if ENV['NOKOGIRI_ID2REF'] || RUBY_PLATFORM !~ /java/
3
- Nokogiri::VERSION_INFO['refs'] = "id2ref"
4
- else
5
- require 'weakling'
6
- Nokogiri::VERSION_INFO['refs'] = "weakling"
7
- end
8
-
9
- module Nokogiri
10
- class WeakBucket
11
- if Nokogiri::VERSION_INFO['refs'] == "weakling"
12
- @@bucket = Weakling::IdHash.new
13
- @@semaphore = Mutex.new
14
-
15
- def WeakBucket.get_object(cstruct)
16
- @@semaphore.synchronize do
17
- @@bucket[cstruct.ruby_node_pointer]
18
- end
19
- end
20
-
21
- def WeakBucket.set_object(cstruct, object)
22
- @@semaphore.synchronize do
23
- cstruct.ruby_node_pointer = @@bucket.add(object)
24
- end
25
- end
26
-
27
- else
28
-
29
- def WeakBucket.get_object(cstruct)
30
- ptr = cstruct.ruby_node_pointer
31
- ptr != 0 ? ObjectSpace._id2ref(ptr) : nil
32
- end
33
-
34
- def WeakBucket.set_object(cstruct, object)
35
- cstruct.ruby_node_pointer = object.object_id
36
- end
37
- end
38
- end
39
- end
40
- # :startdoc:
@@ -1,41 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class Attr < Node
4
-
5
- def self.new(document, name, *rest) # :nodoc:
6
- node_ptr = LibXML.xmlNewDocProp(document.cstruct, name.to_s, nil)
7
- node_cstruct = LibXML::XmlNode.new(node_ptr)
8
- node_cstruct.keep_reference_from_document!
9
-
10
- node = Node.wrap(node_cstruct, self)
11
- node.send :initialize, document, name, *rest
12
- yield node if block_given?
13
- node
14
- end
15
-
16
- def value=(content) # :nodoc:
17
- unless cstruct[:children].null?
18
- LibXML.xmlFreeNodeList(cstruct[:children])
19
- end
20
- cstruct[:children] = cstruct[:last] = nil
21
- return unless content
22
-
23
- char_ptr = LibXML.xmlEncodeEntitiesReentrant(cstruct[:doc], content)
24
-
25
- cstruct[:children] = LibXML.xmlStringGetNodeList(cstruct[:doc], char_ptr)
26
- child_cstruct = cstruct[:children]
27
- while ! child_cstruct.null?
28
- child = Node.wrap(child_cstruct)
29
- child.cstruct[:parent] = cstruct
30
- child.cstruct[:doc] = cstruct[:doc]
31
- cstruct[:last] = child.cstruct
32
- child_cstruct = child.cstruct[:next]
33
- end
34
- LibXML.xmlFree(char_ptr)
35
-
36
- content
37
- end
38
-
39
- end
40
- end
41
- end
@@ -1,27 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- # :stopdoc:
4
- class AttributeDecl < Nokogiri::XML::Node
5
- def enumeration
6
- list = []
7
- return list if cstruct[:tree].null?
8
- head = LibXML::XmlEnumeration.new cstruct[:tree]
9
- loop do
10
- list << head[:name]
11
- break if head[:next].null?
12
- head = LibXML::XmlEnumeration.new head[:next]
13
- end
14
- list
15
- end
16
-
17
- def attribute_type
18
- cstruct[:atype]
19
- end
20
-
21
- def default
22
- cstruct[:default_value]
23
- end
24
- end
25
- # :startdoc:
26
- end
27
- end
@@ -1,19 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class CDATA < Text
4
-
5
- def self.new(document, content, *rest) # :nodoc:
6
- length = content.nil? ? 0 : content.length
7
- node_ptr = LibXML.xmlNewCDataBlock(document.cstruct[:doc], content, length)
8
- node_cstruct = LibXML::XmlNode.new(node_ptr)
9
- node_cstruct.keep_reference_from_document!
10
-
11
- node = Node.wrap(node_cstruct, self)
12
- node.send :initialize, document, content, *rest
13
- yield node if block_given?
14
- node
15
- end
16
-
17
- end
18
- end
19
- end
@@ -1,18 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class Comment < CharacterData
4
-
5
- def self.new(document, content, *rest) # :nodoc:
6
- node_ptr = LibXML.xmlNewDocComment(document.cstruct, content)
7
- node_cstruct = LibXML::XmlNode.new(node_ptr)
8
- node_cstruct.keep_reference_from_document!
9
-
10
- node = Node.wrap(node_ptr, self)
11
- node.send :initialize, document, content, *rest
12
- yield node if block_given?
13
- node
14
- end
15
-
16
- end
17
- end
18
- end
@@ -1,174 +0,0 @@
1
- # :stopdoc:
2
- module Nokogiri
3
- module XML
4
- class Document < Node
5
-
6
- attr_accessor :cstruct
7
-
8
- def url
9
- cstruct[:URL]
10
- end
11
-
12
- def root= new_root
13
- old_root = nil
14
-
15
- if new_root.nil?
16
- old_root_ptr = LibXML.xmlDocGetRootElement(cstruct)
17
- if (! old_root_ptr.null?)
18
- old_root = Node.wrap(old_root_ptr)
19
- LibXML.xmlUnlinkNode(old_root.cstruct)
20
- old_root.cstruct.keep_reference_from_document!
21
- end
22
- return new_root
23
- end
24
-
25
- if new_root.cstruct[:doc] != cstruct[:doc]
26
- old_root_ptr = LibXML.xmlDocGetRootElement(cstruct)
27
- new_root_ptr = LibXML.xmlDocCopyNode(new_root.cstruct, cstruct, 1)
28
- raise RuntimeError "Could not reparent node (xmlDocCopyNode)" if new_root_ptr.null?
29
- new_root = Node.wrap(new_root_ptr)
30
- end
31
- LibXML.xmlDocSetRootElement(cstruct, new_root.cstruct)
32
- if old_root_ptr && ! old_root_ptr.null?
33
- LibXML::XmlNode.new(old_root_ptr).keep_reference_from_document!
34
- end
35
- new_root
36
- end
37
-
38
- def root
39
- ptr = LibXML.xmlDocGetRootElement(cstruct)
40
- ptr.null? ? nil : Node.wrap(LibXML::XmlNode.new(ptr))
41
- end
42
-
43
- def encoding= encoding
44
- # TODO: if :encoding is already set, then it's probably getting leaked.
45
- cstruct[:encoding] = LibXML.xmlStrdup(encoding)
46
- end
47
-
48
- def encoding
49
- ptr = cstruct[:encoding]
50
- ptr.null? ? nil : ptr.read_string
51
- end
52
-
53
- def version
54
- cstruct[:version]
55
- end
56
-
57
- def self.read_io io, url, encoding, options
58
- wrap_with_error_handling do
59
- LibXML.xmlReadIO(IoCallbacks.reader(io), nil, nil, url, encoding, options)
60
- end
61
- end
62
-
63
- def self.read_memory(string, url, encoding, options)
64
- wrap_with_error_handling do
65
- LibXML.xmlReadMemory(string, string.length, url, encoding, options)
66
- end
67
- end
68
-
69
- def dup deep = 1
70
- dup_ptr = LibXML.xmlCopyDoc(cstruct, deep)
71
- return nil if dup_ptr.null?
72
-
73
- # xmlCopyDoc does not preserve document type. wtf?
74
- cstruct = LibXML::XmlDocumentCast.new(dup_ptr)
75
- cstruct[:type] = self.type
76
-
77
- self.class.wrap(dup_ptr)
78
- end
79
-
80
- def remove_namespaces!
81
- self.class.recursively_remove_namespaces_from_node(root)
82
- end
83
-
84
- def create_entity(name, entity_type=Nokogiri::XML::EntityDecl::INTERNAL_GENERAL,
85
- external_id=nil, system_id=nil, content=nil)
86
- LibXML.xmlResetLastError()
87
- ptr = LibXML.xmlAddDocEntity(cstruct, name, entity_type, external_id, system_id, content)
88
- if ptr.null?
89
- error = LibXML.xmlGetLastError()
90
- if error
91
- raise SyntaxError.wrap(error)
92
- else
93
- raise RuntimeError, "Could not create entity"
94
- end
95
- end
96
-
97
- Node.wrap(LibXML::XmlEntity.new(ptr))
98
- end
99
-
100
- class << self
101
- def new(*args)
102
- version = args.first || "1.0"
103
- doc = wrap(LibXML.xmlNewDoc(version))
104
- doc.send :initialize, *args
105
- doc
106
- end
107
-
108
- def wrap doc_struct
109
- if doc_struct.is_a?(FFI::Pointer)
110
- # cast native pointers up into a doc cstruct
111
- return nil if doc_struct.null?
112
- doc_struct = LibXML::XmlDocument.new(doc_struct)
113
- end
114
-
115
- doc = self.allocate
116
- doc.cstruct = doc_struct
117
- doc.cstruct.ruby_doc = doc
118
- doc.instance_eval { @decorators = nil; @node_cache = [] }
119
- doc.send :initialize
120
- doc
121
- end
122
- end
123
-
124
- private
125
-
126
- class << self
127
- def wrap_with_error_handling(&block)
128
- error_list = []
129
- LibXML.xmlInitParser()
130
- LibXML.xmlResetLastError()
131
- LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(error_list))
132
-
133
- ptr = yield
134
-
135
- LibXML.xmlSetStructuredErrorFunc(nil, nil)
136
-
137
- if ptr.null?
138
- error = LibXML.xmlGetLastError()
139
- if error
140
- raise SyntaxError.wrap(error)
141
- else
142
- raise RuntimeError, "Could not parse document"
143
- end
144
- end
145
-
146
- document = wrap(ptr)
147
- document.errors = error_list
148
- return document
149
- end
150
-
151
- def recursively_remove_namespaces_from_node(node)
152
- node.cstruct[:ns] = nil
153
- node.children.each do |child|
154
- recursively_remove_namespaces_from_node(child)
155
- end
156
- unless node.cstruct[:nsDef].nil?
157
- LibXML.xmlFreeNsList(node.cstruct[:nsDef])
158
- node.cstruct[:nsDef] = nil
159
- end
160
- unless node.cstruct[:properties].nil?
161
- prop_ptr = node.cstruct[:properties]
162
- while ! prop_ptr.null?
163
- prop_cstruct = LibXML::XmlAttr.new(node.cstruct[:properties])
164
- prop_cstruct[:ns] = nil unless prop_cstruct[:ns].nil?
165
- prop_ptr = prop_cstruct[:next]
166
- end
167
- end
168
- end
169
- end
170
-
171
- end
172
- end
173
- end
174
- # :startdoc:
@@ -1,21 +0,0 @@
1
- module Nokogiri
2
- module XML
3
- class DocumentFragment < Node
4
-
5
- def self.new(document, *rest) # :nodoc:
6
- node_ptr = LibXML.xmlNewDocFragment(document.cstruct)
7
- node_cstruct = LibXML::XmlNode.new(node_ptr)
8
- node_cstruct.keep_reference_from_document!
9
-
10
- node = Node.wrap(node_cstruct, self)
11
-
12
- node.send :initialize, document, *rest
13
- yield node if block_given?
14
-
15
- node
16
- end
17
-
18
- end
19
- end
20
- end
21
-
@@ -1,67 +0,0 @@
1
- # :stopdoc:
2
- module Nokogiri
3
- module XML
4
- class DTD < Node
5
- def validate document
6
- error_list = []
7
- ctxt = LibXML.xmlNewValidCtxt
8
-
9
- LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(error_list))
10
- LibXML.xmlValidateDtd ctxt, document.cstruct, cstruct
11
-
12
- LibXML.xmlSetStructuredErrorFunc nil, nil
13
-
14
- LibXML.xmlFreeValidCtxt ctxt
15
-
16
- error_list
17
- end
18
-
19
- def system_id
20
- cstruct[:system_id]
21
- end
22
-
23
- def external_id
24
- cstruct[:external_id]
25
- end
26
-
27
- def elements
28
- internal_attributes :elements
29
- end
30
-
31
- def entities
32
- internal_attributes :entities
33
- end
34
-
35
- def attributes
36
- internal_attributes :attributes
37
- end
38
-
39
- def notations
40
- attr_ptr = cstruct[:notations]
41
- return nil if attr_ptr.null?
42
-
43
- ahash = {}
44
- LibXML.xmlHashScan(attr_ptr, nil) do |payload, data, name|
45
- notation_cstruct = LibXML::XmlNotation.new(payload)
46
- ahash[name] = Notation.new(notation_cstruct[:name], notation_cstruct[:PublicID],
47
- notation_cstruct[:SystemID])
48
- end
49
- ahash
50
- end
51
-
52
- private
53
-
54
- def internal_attributes attr_name
55
- attr_ptr = cstruct[attr_name.to_sym]
56
- ahash = {}
57
- return ahash if attr_ptr.null?
58
-
59
- LibXML.xmlHashScan(attr_ptr, nil) do |payload, data, name|
60
- ahash[name] = Node.wrap(payload)
61
- end
62
- ahash
63
- end
64
- end
65
- end
66
- end
67
- # :startdoc: