libxml-ruby 5.0.0 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY +6 -3
- data/README.rdoc +7 -16
- data/ext/libxml/ruby_xml_dtd.c +85 -79
- data/ext/libxml/ruby_xml_version.h +3 -3
- data/lib/libxml/document.rb +2 -2
- data/test/test_document.rb +8 -0
- data/test/test_dtd.rb +4 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24e442a3a4f3343aaae6bc6b513309faccd90af0c9e985c6729d91821c9b29b4
|
4
|
+
data.tar.gz: 698be20e816f96b896c3b8bd7cc0bcf89e131d8b46466e16b9d804133b8f5af2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f90226185c4146bb9b0212d489e8913148408f09e315ebedbca43e44914534c595b89bd3238fa7bfabf9e21f1d3613e4b11980a82b8d4f844bbe07bd862b788
|
7
|
+
data.tar.gz: 9313c21dc1405b5d0b015120e37a2310a7d337ff0948b2f2ed54c105e276b090c246314315c937f25444fa187c4fe101b618a8dec24b774deba85cb8e0ad414f
|
data/HISTORY
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
= Release History
|
2
2
|
|
3
|
+
== 5.0.1 / 2024-01-08
|
4
|
+
|
5
|
+
* Fix broken Document#io method that was broken by switching Parsers to use keyword arguments
|
6
|
+
|
3
7
|
== 5.0.0 / 2024-01-07
|
4
8
|
|
5
9
|
* This release is major version bump because it removes access to global parser options
|
@@ -8,9 +12,8 @@
|
|
8
12
|
Specifically, instead of setting global parser options, pass them directly to either Parsers
|
9
13
|
or ParserContexts when creating them. Options are defined as constants in
|
10
14
|
LibXML::XML::Parser::Options and LibXML::HTML::Parser::Options
|
11
|
-
* Update Parser initialize methods to take
|
12
|
-
|
13
|
-
* Fix broken compiliation with libxml2 version 2.12.0 (due to libxml2 header changes)
|
15
|
+
* Update Parser initialize methods to take keyword parameters instead of a hash table (you may have to update your code due to this change)
|
16
|
+
* Fix broken compilation with libxml2 version 2.12.0 (due to libxml2 header changes)
|
14
17
|
* Add support for Ruby 3.3.*
|
15
18
|
* Remove support for Ruby 2.7.* (gem should still work but is no longer tested)
|
16
19
|
|
data/README.rdoc
CHANGED
@@ -11,7 +11,7 @@ We think libxml-ruby is the best XML library for Ruby because:
|
|
11
11
|
* Conformance - It passes all 1800+ tests from the OASIS XML Tests Suite
|
12
12
|
|
13
13
|
== Requirements
|
14
|
-
libxml-ruby requires Ruby
|
14
|
+
libxml-ruby requires Ruby 3.0.0 or higher. It depends on libxml2 to
|
15
15
|
function properly. libxml2, in turn, depends on:
|
16
16
|
|
17
17
|
* libm (math routines: very standard)
|
@@ -20,9 +20,9 @@ function properly. libxml2, in turn, depends on:
|
|
20
20
|
|
21
21
|
If you are running Linux or Unix you'll need a C compiler so the
|
22
22
|
extension can be compiled when it is installed. If you are running
|
23
|
-
Windows, then install the x64-
|
24
|
-
|
25
|
-
|
23
|
+
Windows, then install the x64-mingw-ucr gem or build it yourself using (Ruby
|
24
|
+
for Windows)[https://rubyinstaller.org/] or directly with msys2[https://msys2.github.io/]
|
25
|
+
and ucrt64.
|
26
26
|
|
27
27
|
== Installation
|
28
28
|
The easiest way to install libxml-ruby is via RubyGems. To install:
|
@@ -46,13 +46,9 @@ Or bundler:
|
|
46
46
|
<tt>bundle install libxml-ruby</tt>
|
47
47
|
|
48
48
|
If you are running Windows, then install the libxml-ruby-x64-mingw32 gem.
|
49
|
-
The gem includes prebuilt extensions for Ruby 2.3.
|
50
|
-
extensions are built using MinGW64 and libxml2 version 2.9.3,
|
51
|
-
iconv version 1.14 and zlib version 1.2.8. Note these binaries
|
52
|
-
are available in the <tt>lib\\libs</tt> directory. To use them, put them
|
53
|
-
on your <tt>PATH</tt>.
|
49
|
+
The gem includes prebuilt extensions for Ruby 3.2 and 3.3.
|
54
50
|
|
55
|
-
The gem also includes a Microsoft VC++
|
51
|
+
The gem also includes a Microsoft VC++ solution and XCode project - these
|
56
52
|
are very useful for debugging.
|
57
53
|
|
58
54
|
libxml-ruby's source codes lives on GitHub[https://github.com/xml4r/libxml-ruby].
|
@@ -128,11 +124,6 @@ For example:
|
|
128
124
|
|
129
125
|
For simplicity's sake, the documentation uses the xml module in its examples.
|
130
126
|
|
131
|
-
== Threading
|
132
|
-
libxml-ruby fully supports native, background Ruby threads. This of course
|
133
|
-
only applies to Ruby 1.9.x and higher since earlier versions of Ruby do not
|
134
|
-
support native threads.
|
135
|
-
|
136
127
|
== Tests
|
137
128
|
|
138
129
|
To run tests you first need to build the shared libary:
|
@@ -143,7 +134,7 @@ Once you have build the shared libary, you can then run tests using rake:
|
|
143
134
|
|
144
135
|
rake test
|
145
136
|
|
146
|
-
+
|
137
|
+
+Build status: {rdoc-image:https://github.com/xml4r/libxml-ruby/actions/workflows/mri.yml/badge.svg}[https://github.com/xml4r/libxml-ruby/actions/workflows/mri.yml]
|
147
138
|
|
148
139
|
== Performance
|
149
140
|
|
data/ext/libxml/ruby_xml_dtd.c
CHANGED
@@ -124,112 +124,118 @@ static VALUE rxml_dtd_type(VALUE self)
|
|
124
124
|
|
125
125
|
/*
|
126
126
|
* call-seq:
|
127
|
-
* XML::Dtd.new(
|
128
|
-
* XML::Dtd.new(
|
129
|
-
* XML::Dtd.new(
|
130
|
-
* XML::Dtd.new("name", "public", "system", document, false) -> internal subset dtd
|
131
|
-
* XML::Dtd.new("name", "public", "system", document, true) -> internal subset dtd
|
127
|
+
* XML::Dtd.new(dtd_string) -> dtd
|
128
|
+
* XML::Dtd.new(external_id, system_id) -> dtd
|
129
|
+
* XML::Dtd.new(external_id, system_id, name, document, internal) -> dtd
|
132
130
|
*
|
133
|
-
* Create a new Dtd from the specified public and system
|
134
|
-
*
|
131
|
+
* Create a new Dtd from the specified public and system identifiers:
|
132
|
+
*
|
133
|
+
* * The first usage creates a DTD from a string and requires 1 parameter.
|
134
|
+
* * The second usage loads and parses an external DTD and requires 2 parameters.
|
135
|
+
* * The third usage creates a new internal or external DTD and requires 3 parameters and 2 optional parameters.
|
136
|
+
* It then attaches the DTD to the specified document if it is not nil
|
137
|
+
*
|
138
|
+
* Parameters:
|
139
|
+
*
|
140
|
+
* dtd_string - A string that contains a complete DTD
|
141
|
+
* external_id - A string that specifies the DTD's external name. For example, "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
142
|
+
* system_id - A string that specififies the DTD's system name. For example, "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
|
143
|
+
* name - A string that specifies the DTD's name. For example "xhtml1".
|
144
|
+
* document - A xml document.
|
145
|
+
* internal - Boolean value indicating whether this is an internal or external DTD. Optional. If not specified
|
146
|
+
* then external is assumed.
|
135
147
|
*/
|
136
148
|
static VALUE rxml_dtd_initialize(int argc, VALUE *argv, VALUE self)
|
137
149
|
{
|
138
|
-
VALUE external, system, dtd_string;
|
139
|
-
xmlParserInputBufferPtr buffer;
|
140
|
-
xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
|
141
|
-
xmlChar *new_string;
|
142
150
|
xmlDtdPtr xdtd;
|
151
|
+
VALUE external, system;
|
143
152
|
|
144
|
-
// 1 argument -- string --> parsujeme jako dtd
|
145
|
-
// 2 arguments -- public, system --> bude se hledat
|
146
|
-
// 3 arguments -- public, system, name --> creates an external subset (any parameter may be nil)
|
147
|
-
// 4 arguments -- public, system, name, doc --> creates an external subset (any parameter may be nil)
|
148
|
-
// 5 arguments -- public, system, name, doc, true --> creates an internal subset (all but last parameter may be nil)
|
149
153
|
switch (argc)
|
150
154
|
{
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
155
|
+
case 3:
|
156
|
+
case 4:
|
157
|
+
case 5:
|
158
|
+
{
|
159
|
+
const xmlChar *xname = NULL, *xpublic = NULL, *xsystem = NULL;
|
160
|
+
xmlDocPtr xdoc = NULL;
|
157
161
|
|
158
|
-
|
162
|
+
VALUE name, doc, internal;
|
163
|
+
rb_scan_args(argc, argv, "32", &external, &system, &name, &doc, &internal);
|
159
164
|
|
160
|
-
|
161
|
-
|
162
|
-
xpublic = (const xmlChar*) StringValuePtr(external);
|
163
|
-
}
|
164
|
-
if (system != Qnil) {
|
165
|
-
Check_Type(system, T_STRING);
|
166
|
-
xsystem = (const xmlChar*) StringValuePtr(system);
|
167
|
-
}
|
168
|
-
if (name != Qnil) {
|
169
|
-
Check_Type(name, T_STRING);
|
170
|
-
xname = (const xmlChar*) StringValuePtr(name);
|
171
|
-
}
|
172
|
-
if (doc != Qnil) {
|
173
|
-
if (rb_obj_is_kind_of(doc, cXMLDocument) == Qfalse)
|
174
|
-
rb_raise(rb_eTypeError, "Must pass an LibXML::XML::Document object");
|
175
|
-
Data_Get_Struct(doc, xmlDoc, xdoc);
|
176
|
-
}
|
165
|
+
Check_Type(external, T_STRING);
|
166
|
+
xpublic = (const xmlChar*) StringValuePtr(external);
|
177
167
|
|
178
|
-
|
179
|
-
|
180
|
-
else
|
181
|
-
xdtd = xmlCreateIntSubset(xdoc, xname, xpublic, xsystem);
|
168
|
+
Check_Type(system, T_STRING);
|
169
|
+
xsystem = (const xmlChar*) StringValuePtr(system);
|
182
170
|
|
183
|
-
|
184
|
-
|
171
|
+
Check_Type(name, T_STRING);
|
172
|
+
xname = (const xmlChar*) StringValuePtr(name);
|
185
173
|
|
186
|
-
|
187
|
-
|
188
|
-
|
174
|
+
if (doc != Qnil)
|
175
|
+
{
|
176
|
+
if (rb_obj_is_kind_of(doc, cXMLDocument) == Qfalse)
|
177
|
+
rb_raise(rb_eTypeError, "Must pass an LibXML::XML::Document object");
|
178
|
+
Data_Get_Struct(doc, xmlDoc, xdoc);
|
179
|
+
}
|
189
180
|
|
190
|
-
|
191
|
-
|
192
|
-
|
181
|
+
if (internal == Qnil || internal == Qfalse)
|
182
|
+
xdtd = xmlNewDtd(xdoc, xname, xpublic, xsystem);
|
183
|
+
else
|
184
|
+
xdtd = xmlCreateIntSubset(xdoc, xname, xpublic, xsystem);
|
193
185
|
|
194
|
-
|
195
|
-
|
186
|
+
if (xdtd == NULL)
|
187
|
+
rxml_raise(xmlGetLastError());
|
196
188
|
|
197
|
-
|
198
|
-
|
189
|
+
/* The document will free the dtd so Ruby should not */
|
190
|
+
RDATA(self)->dfree = NULL;
|
191
|
+
DATA_PTR(self) = xdtd;
|
199
192
|
|
200
|
-
|
201
|
-
|
193
|
+
xmlSetTreeDoc((xmlNodePtr) xdtd, xdoc);
|
194
|
+
}
|
195
|
+
break;
|
202
196
|
|
203
|
-
|
204
|
-
|
197
|
+
case 2:
|
198
|
+
{
|
199
|
+
rb_scan_args(argc, argv, "20", &external, &system);
|
205
200
|
|
206
|
-
|
201
|
+
Check_Type(external, T_STRING);
|
202
|
+
Check_Type(system, T_STRING);
|
207
203
|
|
208
|
-
|
209
|
-
break;
|
204
|
+
xdtd = xmlParseDTD((xmlChar*) StringValuePtr(external), (xmlChar*) StringValuePtr(system));
|
210
205
|
|
211
|
-
|
212
|
-
|
213
|
-
Check_Type(dtd_string, T_STRING);
|
206
|
+
if (xdtd == NULL)
|
207
|
+
rxml_raise(xmlGetLastError());
|
214
208
|
|
215
|
-
|
216
|
-
buffer = xmlAllocParserInputBuffer(enc);
|
217
|
-
new_string = xmlStrdup((xmlChar*) StringValuePtr(dtd_string));
|
218
|
-
xmlParserInputBufferPush(buffer, xmlStrlen(new_string),
|
219
|
-
(const char*) new_string);
|
209
|
+
DATA_PTR(self) = xdtd;
|
220
210
|
|
221
|
-
|
211
|
+
xmlSetTreeDoc((xmlNodePtr) xdtd, NULL);
|
212
|
+
break;
|
213
|
+
}
|
214
|
+
case 1:
|
215
|
+
{
|
216
|
+
VALUE dtd_string;
|
217
|
+
rb_scan_args(argc, argv, "10", &dtd_string);
|
218
|
+
Check_Type(dtd_string, T_STRING);
|
222
219
|
|
223
|
-
|
224
|
-
|
220
|
+
/* Note that buffer is freed by xmlParserInputBufferPush*/
|
221
|
+
xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
|
222
|
+
xmlParserInputBufferPtr buffer = xmlAllocParserInputBuffer(enc);
|
223
|
+
xmlChar *new_string = xmlStrdup((xmlChar*) StringValuePtr(dtd_string));
|
224
|
+
xmlParserInputBufferPush(buffer, xmlStrlen(new_string),
|
225
|
+
(const char*) new_string);
|
225
226
|
|
226
|
-
|
227
|
+
xdtd = xmlIOParseDTD(NULL, buffer, enc);
|
227
228
|
|
228
|
-
|
229
|
-
|
229
|
+
if (xdtd == NULL)
|
230
|
+
rxml_raise(xmlGetLastError());
|
230
231
|
|
231
|
-
|
232
|
-
|
232
|
+
xmlFree(new_string);
|
233
|
+
|
234
|
+
DATA_PTR(self) = xdtd;
|
235
|
+
break;
|
236
|
+
}
|
237
|
+
default:
|
238
|
+
rb_raise(rb_eArgError, "wrong number of arguments");
|
233
239
|
}
|
234
240
|
|
235
241
|
return self;
|
@@ -1,9 +1,9 @@
|
|
1
1
|
/* Don't nuke this block! It is used for automatically updating the
|
2
2
|
* versions below. VERSION = string formatting, VERNUM = numbered
|
3
3
|
* version for inline testing: increment both or none at all.*/
|
4
|
-
#define RUBY_LIBXML_VERSION "5.0.
|
5
|
-
#define RUBY_LIBXML_VERNUM
|
4
|
+
#define RUBY_LIBXML_VERSION "5.0.1"
|
5
|
+
#define RUBY_LIBXML_VERNUM 501
|
6
6
|
#define RUBY_LIBXML_VER_MAJ 5
|
7
7
|
#define RUBY_LIBXML_VER_MIN 0
|
8
|
-
#define RUBY_LIBXML_VER_MIC
|
8
|
+
#define RUBY_LIBXML_VER_MIC 1
|
9
9
|
#define RUBY_LIBXML_VER_PATCH 0
|
data/lib/libxml/document.rb
CHANGED
@@ -51,8 +51,8 @@ module LibXML
|
|
51
51
|
# options - Parser options. Valid values are the constants defined on
|
52
52
|
# XML::Parser::Options. Mutliple options can be combined
|
53
53
|
# by using Bitwise OR (|).
|
54
|
-
def self.io(
|
55
|
-
Parser.io(
|
54
|
+
def self.io(io, base_uri: nil, encoding: nil, options: nil)
|
55
|
+
Parser.io(io, base_uri: base_uri, encoding: encoding, options: options).parse
|
56
56
|
end
|
57
57
|
|
58
58
|
# call-seq:
|
data/test/test_document.rb
CHANGED
@@ -129,4 +129,12 @@ class TestDocument < Minitest::Test
|
|
129
129
|
file = File.join(File.dirname(__FILE__), 'model/atom.xml')
|
130
130
|
schema_document = LibXML::XML::Document.file(file, options: LibXML::XML::Parser::Options::NONET)
|
131
131
|
end
|
132
|
+
|
133
|
+
def test_io
|
134
|
+
File.open(File.join(File.dirname(__FILE__), 'model/rubynet.xml')) do |io|
|
135
|
+
doc = LibXML::XML::Document.io(io)
|
136
|
+
assert_instance_of(LibXML::XML::Document, doc)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
132
140
|
end
|
data/test/test_dtd.rb
CHANGED
@@ -31,13 +31,13 @@ class TestDtd < Minitest::Test
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_internal_subset
|
34
|
-
xhtml_dtd = LibXML::XML::Dtd.new
|
34
|
+
xhtml_dtd = LibXML::XML::Dtd.new("-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil, nil, true)
|
35
35
|
assert xhtml_dtd.name.nil?
|
36
36
|
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
37
37
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
38
38
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
39
39
|
|
40
|
-
xhtml_dtd = LibXML::XML::Dtd.new
|
40
|
+
xhtml_dtd = LibXML::XML::Dtd.new("-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1", nil, true)
|
41
41
|
assert_equal "xhtml1", xhtml_dtd.name
|
42
42
|
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
43
43
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
@@ -45,13 +45,13 @@ class TestDtd < Minitest::Test
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def test_external_subset
|
48
|
-
xhtml_dtd = LibXML::XML::Dtd.new
|
48
|
+
xhtml_dtd = LibXML::XML::Dtd.new("-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", nil)
|
49
49
|
assert xhtml_dtd.name.nil?
|
50
50
|
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
51
51
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
52
52
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.system_id
|
53
53
|
|
54
|
-
xhtml_dtd = LibXML::XML::Dtd.new
|
54
|
+
xhtml_dtd = LibXML::XML::Dtd.new("-//W3C//DTD XHTML 1.0 Transitional//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "xhtml1")
|
55
55
|
assert_equal "xhtml1", xhtml_dtd.name
|
56
56
|
assert_equal "-//W3C//DTD XHTML 1.0 Transitional//EN", xhtml_dtd.external_id
|
57
57
|
assert_equal "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", xhtml_dtd.uri
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libxml-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ross Bamform
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2024-01-
|
17
|
+
date: 2024-01-08 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: rake-compiler
|
@@ -275,7 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
275
275
|
- !ruby/object:Gem::Version
|
276
276
|
version: '0'
|
277
277
|
requirements: []
|
278
|
-
rubygems_version: 3.
|
278
|
+
rubygems_version: 3.4.21
|
279
279
|
signing_key:
|
280
280
|
specification_version: 4
|
281
281
|
summary: Ruby Bindings for LibXML2
|