libxml-ruby 5.0.6 → 6.0.0
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.
- checksums.yaml +4 -4
- data/{HISTORY → CHANGELOG.md} +875 -930
- data/LICENSE +20 -20
- data/README.md +67 -0
- data/Rakefile +13 -34
- data/ext/libxml/extconf.rb +34 -20
- data/ext/libxml/libxml.c +2 -14
- data/ext/libxml/ruby_libxml.h +1 -1
- data/ext/libxml/ruby_xml_attr.c +27 -22
- data/ext/libxml/ruby_xml_attr.h +1 -0
- data/ext/libxml/ruby_xml_attr_decl.c +19 -12
- data/ext/libxml/ruby_xml_attributes.c +18 -9
- data/ext/libxml/ruby_xml_document.c +111 -98
- data/ext/libxml/ruby_xml_document.h +1 -0
- data/ext/libxml/ruby_xml_dtd.c +49 -19
- data/ext/libxml/ruby_xml_dtd.h +1 -0
- data/ext/libxml/ruby_xml_html_parser.c +1 -1
- data/ext/libxml/ruby_xml_html_parser_context.c +19 -6
- data/ext/libxml/ruby_xml_html_parser_context.h +1 -0
- data/ext/libxml/ruby_xml_input_cbg.c +45 -17
- data/ext/libxml/ruby_xml_io.c +3 -1
- data/ext/libxml/ruby_xml_namespace.c +20 -12
- data/ext/libxml/ruby_xml_namespace.h +1 -0
- data/ext/libxml/ruby_xml_namespaces.c +40 -20
- data/ext/libxml/ruby_xml_node.c +71 -32
- data/ext/libxml/ruby_xml_node.h +2 -0
- data/ext/libxml/ruby_xml_parser.c +1 -1
- data/ext/libxml/ruby_xml_parser_context.c +54 -47
- data/ext/libxml/ruby_xml_parser_context.h +1 -0
- data/ext/libxml/ruby_xml_reader.c +25 -15
- data/ext/libxml/ruby_xml_registry.c +31 -0
- data/ext/libxml/ruby_xml_registry.h +22 -0
- data/ext/libxml/ruby_xml_relaxng.c +21 -5
- data/ext/libxml/ruby_xml_relaxng.h +1 -0
- data/ext/libxml/ruby_xml_sax_parser.c +1 -1
- data/ext/libxml/ruby_xml_schema.c +18 -11
- data/ext/libxml/ruby_xml_schema.h +1 -0
- data/ext/libxml/ruby_xml_schema_attribute.c +7 -7
- data/ext/libxml/ruby_xml_schema_element.c +8 -8
- data/ext/libxml/ruby_xml_schema_facet.c +7 -7
- data/ext/libxml/ruby_xml_schema_type.c +12 -19
- data/ext/libxml/ruby_xml_version.h +4 -4
- data/ext/libxml/ruby_xml_writer.c +18 -6
- data/ext/libxml/ruby_xml_xpath.c +2 -2
- data/ext/libxml/ruby_xml_xpath.h +1 -1
- data/ext/libxml/ruby_xml_xpath_context.c +72 -26
- data/ext/libxml/ruby_xml_xpath_expression.c +11 -5
- data/ext/libxml/ruby_xml_xpath_expression.h +1 -0
- data/ext/libxml/ruby_xml_xpath_object.c +69 -54
- data/ext/libxml/ruby_xml_xpath_object.h +3 -1
- data/ext/vc/libxml_ruby/libxml_ruby.vcxproj +271 -0
- data/ext/xcode/libxml-ruby.xcodeproj/project.pbxproj +633 -0
- data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/ext/xcode/libxml-ruby.xcodeproj/xcshareddata/xcschemes/libxml-ruby.xcscheme +80 -0
- data/lib/libxml/document.rb +0 -29
- data/lib/libxml/error.rb +30 -3
- data/lib/libxml/html_parser.rb +0 -16
- data/lib/libxml/node.rb +1 -3
- data/lib/libxml/parser.rb +0 -8
- data/lib/libxml/schema/attribute.rb +27 -19
- data/lib/libxml/schema/element.rb +20 -0
- data/lib/libxml/schema/type.rb +44 -21
- data/lib/libxml/schema.rb +47 -47
- data/lib/libxml-ruby.rb +30 -30
- data/libxml-ruby.gemspec +12 -16
- data/test/c14n/result/1-1-without-comments/example-1 +3 -3
- data/test/c14n/result/1-1-without-comments/example-2 +10 -10
- data/test/c14n/result/1-1-without-comments/example-3 +13 -13
- data/test/c14n/result/1-1-without-comments/example-4 +8 -8
- data/test/c14n/result/1-1-without-comments/example-5 +2 -2
- data/test/c14n/result/with-comments/example-1 +5 -5
- data/test/c14n/result/with-comments/example-2 +10 -10
- data/test/c14n/result/with-comments/example-3 +13 -13
- data/test/c14n/result/with-comments/example-4 +8 -8
- data/test/c14n/result/with-comments/example-5 +3 -3
- data/test/c14n/result/without-comments/example-1 +3 -3
- data/test/c14n/result/without-comments/example-2 +10 -10
- data/test/c14n/result/without-comments/example-3 +13 -13
- data/test/c14n/result/without-comments/example-4 +8 -8
- data/test/c14n/result/without-comments/example-5 +2 -2
- data/test/test_attr.rb +179 -180
- data/test/test_attr_decl.rb +131 -131
- data/test/test_attributes.rb +135 -135
- data/test/test_canonicalize.rb +122 -120
- data/test/test_document.rb +2 -4
- data/test/test_dtd.rb +12 -4
- data/test/test_encoding_sax.rb +114 -114
- data/test/test_error.rb +1 -1
- data/test/test_html_parser.rb +6 -2
- data/test/test_html_parser_context.rb +22 -22
- data/test/test_input_callbacks.rb +36 -0
- data/test/test_namespace.rb +1 -1
- data/test/test_namespaces.rb +200 -200
- data/test/test_node.rb +16 -0
- data/test/test_node_cdata.rb +50 -50
- data/test/test_node_comment.rb +32 -32
- data/test/test_node_copy.rb +40 -40
- data/test/test_node_edit.rb +176 -158
- data/test/test_node_pi.rb +37 -37
- data/test/test_node_text.rb +69 -69
- data/test/test_node_xlink.rb +28 -28
- data/test/test_parser.rb +5 -41
- data/test/test_parser_context.rb +198 -198
- data/test/test_properties.rb +38 -38
- data/test/test_reader.rb +55 -6
- data/test/test_relaxng.rb +59 -53
- data/test/test_sax_parser.rb +345 -345
- data/test/test_schema.rb +28 -0
- data/test/test_traversal.rb +152 -152
- data/test/test_writer.rb +0 -31
- data/test/test_xinclude.rb +20 -20
- data/test/test_xml.rb +3 -7
- data/test/test_xpath.rb +244 -244
- data/test/test_xpath_context.rb +87 -87
- data/test/test_xpath_expression.rb +37 -37
- metadata +32 -25
- data/README.rdoc +0 -208
- data/ext/libxml/extconf.h +0 -4
- data/ext/libxml/ruby_xml_cbg.c +0 -85
- data/lib/libxml/hpricot.rb +0 -78
- data/lib/libxml.rb +0 -5
- data/lib/xml/libxml.rb +0 -10
- data/lib/xml.rb +0 -14
- data/script/benchmark/depixelate +0 -634
- data/script/benchmark/hamlet.xml +0 -9055
- data/script/benchmark/parsecount +0 -170
- data/script/benchmark/sock_entries.xml +0 -507
- data/script/benchmark/throughput +0 -41
- data/script/test +0 -6
- data/test/test_deprecated_require.rb +0 -12
data/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
Copyright (c) 2008-2013 Charlie Savage and contributors
|
|
2
|
-
Copyright (c) 2002-2007 Sean Chittenden and contributors
|
|
3
|
-
Copyright (c) 2001 Wai-Sun "Squidster" Chia
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
-
this software and associated documentation files (the "Software"), to deal in
|
|
7
|
-
the Software without restriction, including without limitation the rights to
|
|
8
|
-
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
9
|
-
of the Software, and to permit persons to whom the Software is furnished to do
|
|
10
|
-
so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
1
|
+
Copyright (c) 2008-2013 Charlie Savage and contributors
|
|
2
|
+
Copyright (c) 2002-2007 Sean Chittenden and contributors
|
|
3
|
+
Copyright (c) 2001 Wai-Sun "Squidster" Chia
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
7
|
+
the Software without restriction, including without limitation the rights to
|
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
9
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
10
|
+
so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# LibXML Ruby
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
The libxml gem provides Ruby language bindings for GNOME's Libxml2
|
|
5
|
+
XML toolkit. It is free software, released under the MIT License.
|
|
6
|
+
|
|
7
|
+
libxml-ruby let's you:
|
|
8
|
+
|
|
9
|
+
* Read xml files
|
|
10
|
+
* Write xml files
|
|
11
|
+
* Search xml files using XPath
|
|
12
|
+
* Validate XML files
|
|
13
|
+
|
|
14
|
+
Full documentation is available at [xml4r.github.io/libxml-ruby](https://xml4r.github.io/libxml-ruby/) including a getting started guide.
|
|
15
|
+
|
|
16
|
+
## Requirements
|
|
17
|
+
|
|
18
|
+
libxml-ruby requires Ruby 3.2 or higher.
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
The easiest way to install libxml-ruby is via RubyGems. To install:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
gem install libxml-ruby
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If the extension compile process cannot find libxml2, you may need to indicate
|
|
28
|
+
the location of the libxml2 configuration utility as it is used to find the
|
|
29
|
+
required header and include files. (If you need to indicate a location for the
|
|
30
|
+
libxml2 library or header files different than reported by `xml2-config`,
|
|
31
|
+
see the additional configuration options.)
|
|
32
|
+
|
|
33
|
+
This may be done with RubyGems:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
gem install libxml-ruby -- --with-xml2-config=/path/to/xml2-config
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Or bundler:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
bundle config build.libxml-ruby --with-xml2-config=/path/to/xml2-config
|
|
43
|
+
bundle install
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Full documentation is available at [xml4r.github.io/libxml-ruby](https://xml4r.github.io/libxml-ruby/) including a [getting started](https://xml4r.github.io/libxml-ruby/getting_started/) guide.
|
|
47
|
+
|
|
48
|
+
## Tests
|
|
49
|
+
|
|
50
|
+
To run tests you first need to build the shared library:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
rake compile
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Once you have built the shared library, you can then run tests using rake:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
rake test
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Support
|
|
63
|
+
If you have any questions about using libxml-ruby, please report an issue
|
|
64
|
+
on [GitHub](https://github.com/xml4r/libxml-ruby/issues).
|
|
65
|
+
|
|
66
|
+
## License
|
|
67
|
+
See [LICENSE](LICENSE) for license information.
|
data/Rakefile
CHANGED
|
@@ -21,25 +21,6 @@ Rake::ExtensionTask.new do |ext|
|
|
|
21
21
|
ext.name = SO_NAME
|
|
22
22
|
ext.ext_dir = "ext/libxml"
|
|
23
23
|
ext.lib_dir = "lib/#{RUBY_VERSION.sub(/\.\d+$/, '')}"
|
|
24
|
-
if RUBY_PLATFORM.match(/mingw/)
|
|
25
|
-
ext.config_options <<
|
|
26
|
-
if (dir = ENV['WINDOWS_XML2_INCLUDE'])
|
|
27
|
-
"--with-xml2-include=#{dir}"
|
|
28
|
-
else
|
|
29
|
-
case RUBY_PLATFORM
|
|
30
|
-
when 'i386-mingw32'
|
|
31
|
-
'--with-xml2-include=C:/msys64/mingw32/include/libxml2'
|
|
32
|
-
when 'x64-mingw32'
|
|
33
|
-
'--with-xml2-include=C:/msys64/mingw64/include/libxml2'
|
|
34
|
-
when 'x64-mingw-ucrt'
|
|
35
|
-
'--with-xml2-include=C:/msys64/ucrt64/include/libxml2'
|
|
36
|
-
else
|
|
37
|
-
raise "Unknown Windows Ruby, please set ENV['WINDOWS_XML2_INCLUDE']"
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
else
|
|
41
|
-
ext.config_options << '--with-xml2-include=/usr/include/libxml2'
|
|
42
|
-
end
|
|
43
24
|
end
|
|
44
25
|
|
|
45
26
|
# Setup generic gem
|
|
@@ -49,21 +30,20 @@ Gem::PackageTask.new(spec) do |pkg|
|
|
|
49
30
|
end
|
|
50
31
|
|
|
51
32
|
# Setup Windows Gem
|
|
52
|
-
if RUBY_PLATFORM.match(/
|
|
53
|
-
binaries = (FileList['lib/**/*.so'
|
|
54
|
-
'lib/**/*dll'])
|
|
33
|
+
if RUBY_PLATFORM.match(/mingw/)
|
|
34
|
+
binaries = (FileList['lib/**/*.so'])
|
|
55
35
|
|
|
56
36
|
# Windows specification
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
37
|
+
mingw_spec = spec.clone
|
|
38
|
+
mingw_spec.platform = Gem::Platform::CURRENT
|
|
39
|
+
mingw_spec.files += binaries.to_a
|
|
40
|
+
mingw_spec.instance_variable_set(:@cache_file, nil)
|
|
61
41
|
|
|
62
42
|
# Unset extensions
|
|
63
|
-
|
|
43
|
+
mingw_spec.extensions = nil
|
|
64
44
|
|
|
65
45
|
# Rake task to build the windows package
|
|
66
|
-
Gem::PackageTask.new(
|
|
46
|
+
Gem::PackageTask.new(mingw_spec) do |pkg|
|
|
67
47
|
pkg.package_dir = 'pkg'
|
|
68
48
|
pkg.need_tar = false
|
|
69
49
|
end
|
|
@@ -74,20 +54,19 @@ desc 'Generate rdoc documentation'
|
|
|
74
54
|
RDoc::Task.new("rdoc") do |rdoc|
|
|
75
55
|
rdoc.rdoc_dir = 'rdoc'
|
|
76
56
|
rdoc.title = 'LibXML'
|
|
77
|
-
rdoc.generator = '
|
|
57
|
+
rdoc.generator = 'aliki'
|
|
78
58
|
|
|
79
59
|
# Show source inline with line numbers
|
|
80
60
|
rdoc.options << '--line-numbers'
|
|
81
61
|
rdoc.options << '--charset=utf-8'
|
|
82
62
|
# Make the readme file the start page for the generated html
|
|
83
|
-
rdoc.main = 'README.
|
|
84
|
-
rdoc.rdoc_files.include('
|
|
85
|
-
'ext/**/libxml.c',
|
|
63
|
+
rdoc.main = 'README.md'
|
|
64
|
+
rdoc.rdoc_files.include('ext/**/libxml.c',
|
|
86
65
|
'ext/**/ruby_xml.c',
|
|
87
66
|
'ext/**/*.c',
|
|
88
67
|
'lib/**/*.rb',
|
|
89
|
-
'README.
|
|
90
|
-
'
|
|
68
|
+
'README.md',
|
|
69
|
+
'CHANGELOG.md',
|
|
91
70
|
'LICENSE')
|
|
92
71
|
end
|
|
93
72
|
|
data/ext/libxml/extconf.rb
CHANGED
|
@@ -23,32 +23,46 @@ if xc
|
|
|
23
23
|
end
|
|
24
24
|
else
|
|
25
25
|
dir_config('xml2')
|
|
26
|
+
pkg_config('libxml-2.0')
|
|
26
27
|
end
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
include_dirs = []
|
|
30
|
+
lib_dirs = []
|
|
31
|
+
|
|
32
|
+
if (msystem_prefix = ENV['MSYSTEM_PREFIX']) && !msystem_prefix.empty?
|
|
33
|
+
include_dirs.concat([
|
|
34
|
+
"#{msystem_prefix}/include/libxml2",
|
|
35
|
+
"#{msystem_prefix}/include"
|
|
36
|
+
])
|
|
37
|
+
lib_dirs << "#{msystem_prefix}/lib"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
include_dirs.concat([
|
|
41
|
+
'/opt/include/libxml2',
|
|
42
|
+
'/opt/local/include/libxml2',
|
|
43
|
+
'/opt/homebrew/opt/libxml2/include/libxml2',
|
|
44
|
+
'/usr/local/include/libxml2',
|
|
45
|
+
'/usr/include/libxml2',
|
|
46
|
+
'/usr/local/include',
|
|
47
|
+
'/usr/local/opt/libxml2/include/libxml2'
|
|
48
|
+
])
|
|
49
|
+
|
|
50
|
+
lib_dirs.concat([
|
|
51
|
+
'/opt/lib',
|
|
52
|
+
'/opt/local/lib',
|
|
53
|
+
'/opt/homebrew/opt/libxml2/lib',
|
|
54
|
+
'/usr/lib',
|
|
55
|
+
'/usr/local/lib',
|
|
56
|
+
'/usr/local/opt/libxml2/lib'
|
|
57
|
+
])
|
|
58
|
+
|
|
59
|
+
found_header = find_header('libxml/xmlversion.h', *include_dirs)
|
|
36
60
|
|
|
37
61
|
found_lib = find_library('xml2', 'xmlParseDoc',
|
|
38
|
-
|
|
39
|
-
'/opt/local/lib',
|
|
40
|
-
'/opt/homebrew/opt/libxml2/lib',
|
|
41
|
-
'/usr/lib',
|
|
42
|
-
'/usr/local/lib',
|
|
43
|
-
'/usr/local/opt/libxml2/lib')
|
|
62
|
+
*lib_dirs)
|
|
44
63
|
|
|
45
64
|
found_lib ||= find_library('libxml2', 'xmlParseDoc',
|
|
46
|
-
|
|
47
|
-
'/opt/local/lib',
|
|
48
|
-
'/opt/homebrew/opt/libxml2/lib',
|
|
49
|
-
'/usr/lib',
|
|
50
|
-
'/usr/local/lib',
|
|
51
|
-
'/usr/local/opt/libxml2/lib')
|
|
65
|
+
*lib_dirs)
|
|
52
66
|
|
|
53
67
|
if !found_header || !found_lib
|
|
54
68
|
crash(<<~EOL)
|
data/ext/libxml/libxml.c
CHANGED
|
@@ -9,18 +9,6 @@
|
|
|
9
9
|
|
|
10
10
|
VALUE mLibXML;
|
|
11
11
|
|
|
12
|
-
static void rxml_init_memory(void)
|
|
13
|
-
{
|
|
14
|
-
/* Disable for now - broke attributes.
|
|
15
|
-
xmlGcMemSetup(
|
|
16
|
-
(xmlFreeFunc)ruby_xfree,
|
|
17
|
-
(xmlMallocFunc)ruby_xmalloc,
|
|
18
|
-
(xmlMallocFunc)ruby_xmalloc,
|
|
19
|
-
(xmlReallocFunc)ruby_xrealloc,
|
|
20
|
-
(xmlStrdupFunc)ruby_strdup
|
|
21
|
-
);*/
|
|
22
|
-
}
|
|
23
|
-
|
|
24
12
|
void Init_libxml_ruby(void)
|
|
25
13
|
{
|
|
26
14
|
/* The libxml gem provides Ruby language bindings for GNOME's Libxml2
|
|
@@ -40,12 +28,12 @@ void Init_libxml_ruby(void)
|
|
|
40
28
|
* copyright and distribution information.
|
|
41
29
|
*/
|
|
42
30
|
|
|
43
|
-
//
|
|
31
|
+
// Setup for threading. http://xmlsoft.org/threads.html
|
|
44
32
|
xmlInitParser();
|
|
45
33
|
|
|
46
34
|
mLibXML = rb_define_module("LibXML");
|
|
47
35
|
|
|
48
|
-
|
|
36
|
+
rxml_init_registry();
|
|
49
37
|
rxml_init_xml();
|
|
50
38
|
rxml_init_io();
|
|
51
39
|
rxml_init_error();
|
data/ext/libxml/ruby_libxml.h
CHANGED
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
#include "ruby_xml_html_parser_options.h"
|
|
25
25
|
#include "ruby_xml_html_parser_context.h"
|
|
26
26
|
#include "ruby_xml_reader.h"
|
|
27
|
-
#include "ruby_xml_writer.h"
|
|
28
27
|
#include "ruby_xml_sax2_handler.h"
|
|
29
28
|
#include "ruby_xml_sax_parser.h"
|
|
30
29
|
#include "ruby_xml_writer.h"
|
|
@@ -37,6 +36,7 @@
|
|
|
37
36
|
#include "ruby_xml_dtd.h"
|
|
38
37
|
#include "ruby_xml_schema.h"
|
|
39
38
|
#include "ruby_xml_relaxng.h"
|
|
39
|
+
#include "ruby_xml_registry.h"
|
|
40
40
|
|
|
41
41
|
extern VALUE mLibXML;
|
|
42
42
|
|
data/ext/libxml/ruby_xml_attr.c
CHANGED
|
@@ -32,22 +32,29 @@
|
|
|
32
32
|
|
|
33
33
|
VALUE cXMLAttr;
|
|
34
34
|
|
|
35
|
-
void rxml_attr_mark(
|
|
35
|
+
static void rxml_attr_mark(void *data)
|
|
36
36
|
{
|
|
37
|
+
xmlAttrPtr xattr = (xmlAttrPtr) data;
|
|
37
38
|
/* This can happen if Ruby does a GC run after creating the
|
|
38
39
|
new attribute but before initializing it. */
|
|
39
40
|
if (xattr != NULL)
|
|
40
41
|
rxml_node_mark((xmlNodePtr) xattr);
|
|
41
42
|
}
|
|
42
43
|
|
|
44
|
+
const rb_data_type_t rxml_attr_type = {
|
|
45
|
+
"LibXML::XML::Attr",
|
|
46
|
+
{rxml_attr_mark, NULL, 0},
|
|
47
|
+
&rxml_node_data_type, 0, RUBY_TYPED_FREE_IMMEDIATELY
|
|
48
|
+
};
|
|
49
|
+
|
|
43
50
|
VALUE rxml_attr_wrap(xmlAttrPtr xattr)
|
|
44
51
|
{
|
|
45
|
-
return
|
|
52
|
+
return TypedData_Wrap_Struct(cXMLAttr, &rxml_attr_type, xattr);
|
|
46
53
|
}
|
|
47
54
|
|
|
48
55
|
static VALUE rxml_attr_alloc(VALUE klass)
|
|
49
56
|
{
|
|
50
|
-
return
|
|
57
|
+
return TypedData_Wrap_Struct(klass, &rxml_attr_type, NULL);
|
|
51
58
|
}
|
|
52
59
|
|
|
53
60
|
/*
|
|
@@ -78,7 +85,7 @@ static VALUE rxml_attr_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
78
85
|
Check_Type(name, T_STRING);
|
|
79
86
|
Check_Type(value, T_STRING);
|
|
80
87
|
|
|
81
|
-
|
|
88
|
+
TypedData_Get_Struct(node, xmlNode, &rxml_node_data_type, xnode);
|
|
82
89
|
|
|
83
90
|
if (xnode->type != XML_ELEMENT_NODE)
|
|
84
91
|
rb_raise(rb_eArgError, "Attributes can only be created on element nodes.");
|
|
@@ -90,14 +97,14 @@ static VALUE rxml_attr_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
90
97
|
else
|
|
91
98
|
{
|
|
92
99
|
xmlNsPtr xns;
|
|
93
|
-
|
|
100
|
+
TypedData_Get_Struct(ns, xmlNs, &rxml_namespace_type, xns);
|
|
94
101
|
xattr = xmlNewNsProp(xnode, xns, (xmlChar*)StringValuePtr(name), (xmlChar*)StringValuePtr(value));
|
|
95
102
|
}
|
|
96
103
|
|
|
97
104
|
if (!xattr)
|
|
98
105
|
rb_raise(rb_eRuntimeError, "Could not create attribute.");
|
|
99
106
|
|
|
100
|
-
|
|
107
|
+
RTYPEDDATA_DATA( self) = xattr;
|
|
101
108
|
return self;
|
|
102
109
|
}
|
|
103
110
|
|
|
@@ -110,7 +117,7 @@ static VALUE rxml_attr_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
110
117
|
static VALUE rxml_attr_child_get(VALUE self)
|
|
111
118
|
{
|
|
112
119
|
xmlAttrPtr xattr;
|
|
113
|
-
|
|
120
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
114
121
|
if (xattr->children == NULL)
|
|
115
122
|
return Qnil;
|
|
116
123
|
else
|
|
@@ -129,11 +136,11 @@ static VALUE rxml_attr_child_get(VALUE self)
|
|
|
129
136
|
static VALUE rxml_attr_doc_get(VALUE self)
|
|
130
137
|
{
|
|
131
138
|
xmlAttrPtr xattr;
|
|
132
|
-
|
|
139
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
133
140
|
if (xattr->doc == NULL)
|
|
134
141
|
return Qnil;
|
|
135
142
|
else
|
|
136
|
-
return
|
|
143
|
+
return rxml_registry_lookup(xattr->doc);
|
|
137
144
|
}
|
|
138
145
|
|
|
139
146
|
/*
|
|
@@ -145,7 +152,7 @@ static VALUE rxml_attr_doc_get(VALUE self)
|
|
|
145
152
|
static VALUE rxml_attr_last_get(VALUE self)
|
|
146
153
|
{
|
|
147
154
|
xmlAttrPtr xattr;
|
|
148
|
-
|
|
155
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
149
156
|
if (xattr->last == NULL)
|
|
150
157
|
return Qnil;
|
|
151
158
|
else
|
|
@@ -161,7 +168,7 @@ static VALUE rxml_attr_last_get(VALUE self)
|
|
|
161
168
|
static VALUE rxml_attr_name_get(VALUE self)
|
|
162
169
|
{
|
|
163
170
|
xmlAttrPtr xattr;
|
|
164
|
-
|
|
171
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
165
172
|
|
|
166
173
|
if (xattr->name == NULL)
|
|
167
174
|
return Qnil;
|
|
@@ -178,7 +185,7 @@ static VALUE rxml_attr_name_get(VALUE self)
|
|
|
178
185
|
static VALUE rxml_attr_next_get(VALUE self)
|
|
179
186
|
{
|
|
180
187
|
xmlAttrPtr xattr;
|
|
181
|
-
|
|
188
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
182
189
|
if (xattr->next == NULL)
|
|
183
190
|
return Qnil;
|
|
184
191
|
else
|
|
@@ -194,7 +201,7 @@ static VALUE rxml_attr_next_get(VALUE self)
|
|
|
194
201
|
static VALUE rxml_attr_node_type(VALUE self)
|
|
195
202
|
{
|
|
196
203
|
xmlAttrPtr xattr;
|
|
197
|
-
|
|
204
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
198
205
|
return INT2NUM(xattr->type);
|
|
199
206
|
}
|
|
200
207
|
|
|
@@ -207,7 +214,7 @@ static VALUE rxml_attr_node_type(VALUE self)
|
|
|
207
214
|
static VALUE rxml_attr_ns_get(VALUE self)
|
|
208
215
|
{
|
|
209
216
|
xmlAttrPtr xattr;
|
|
210
|
-
|
|
217
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
211
218
|
if (xattr->ns == NULL)
|
|
212
219
|
return Qnil;
|
|
213
220
|
else
|
|
@@ -223,7 +230,7 @@ static VALUE rxml_attr_ns_get(VALUE self)
|
|
|
223
230
|
static VALUE rxml_attr_parent_get(VALUE self)
|
|
224
231
|
{
|
|
225
232
|
xmlAttrPtr xattr;
|
|
226
|
-
|
|
233
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
227
234
|
if (xattr->parent == NULL)
|
|
228
235
|
return Qnil;
|
|
229
236
|
else
|
|
@@ -239,7 +246,7 @@ static VALUE rxml_attr_parent_get(VALUE self)
|
|
|
239
246
|
static VALUE rxml_attr_prev_get(VALUE self)
|
|
240
247
|
{
|
|
241
248
|
xmlAttrPtr xattr;
|
|
242
|
-
|
|
249
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
243
250
|
if (xattr->prev == NULL)
|
|
244
251
|
return Qnil;
|
|
245
252
|
else
|
|
@@ -258,12 +265,10 @@ static VALUE rxml_attr_prev_get(VALUE self)
|
|
|
258
265
|
static VALUE rxml_attr_remove_ex(VALUE self)
|
|
259
266
|
{
|
|
260
267
|
xmlAttrPtr xattr;
|
|
261
|
-
|
|
268
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
262
269
|
xmlRemoveProp(xattr);
|
|
263
270
|
|
|
264
|
-
|
|
265
|
-
RDATA(self)->dfree = NULL;
|
|
266
|
-
RDATA(self)->dmark = NULL;
|
|
271
|
+
RTYPEDDATA_DATA(self) = NULL;
|
|
267
272
|
|
|
268
273
|
return Qnil;
|
|
269
274
|
}
|
|
@@ -280,7 +285,7 @@ VALUE rxml_attr_value_get(VALUE self)
|
|
|
280
285
|
xmlChar *value;
|
|
281
286
|
VALUE result = Qnil;
|
|
282
287
|
|
|
283
|
-
|
|
288
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
284
289
|
value = xmlNodeGetContent((xmlNodePtr)xattr);
|
|
285
290
|
|
|
286
291
|
if (value != NULL)
|
|
@@ -302,7 +307,7 @@ VALUE rxml_attr_value_set(VALUE self, VALUE val)
|
|
|
302
307
|
xmlAttrPtr xattr;
|
|
303
308
|
|
|
304
309
|
Check_Type(val, T_STRING);
|
|
305
|
-
|
|
310
|
+
TypedData_Get_Struct(self, xmlAttr, &rxml_attr_type, xattr);
|
|
306
311
|
|
|
307
312
|
if (xattr->ns)
|
|
308
313
|
xmlSetNsProp(xattr->parent, xattr->ns, xattr->name,
|
data/ext/libxml/ruby_xml_attr.h
CHANGED
|
@@ -13,14 +13,21 @@
|
|
|
13
13
|
|
|
14
14
|
VALUE cXMLAttrDecl;
|
|
15
15
|
|
|
16
|
-
void rxml_attr_decl_mark(
|
|
16
|
+
static void rxml_attr_decl_mark(void *data)
|
|
17
17
|
{
|
|
18
|
-
|
|
18
|
+
xmlAttributePtr xattr = (xmlAttributePtr)data;
|
|
19
|
+
rxml_node_mark((xmlNodePtr)xattr);
|
|
19
20
|
}
|
|
20
21
|
|
|
22
|
+
static const rb_data_type_t rxml_attr_decl_type = {
|
|
23
|
+
"LibXML::XML::AttrDecl",
|
|
24
|
+
{rxml_attr_decl_mark, NULL, 0},
|
|
25
|
+
&rxml_attr_type, 0, RUBY_TYPED_FREE_IMMEDIATELY
|
|
26
|
+
};
|
|
27
|
+
|
|
21
28
|
VALUE rxml_attr_decl_wrap(xmlAttributePtr xattr)
|
|
22
29
|
{
|
|
23
|
-
return
|
|
30
|
+
return TypedData_Wrap_Struct(cXMLAttrDecl, &rxml_attr_decl_type, xattr);
|
|
24
31
|
}
|
|
25
32
|
|
|
26
33
|
/*
|
|
@@ -32,11 +39,11 @@ VALUE rxml_attr_decl_wrap(xmlAttributePtr xattr)
|
|
|
32
39
|
static VALUE rxml_attr_decl_doc_get(VALUE self)
|
|
33
40
|
{
|
|
34
41
|
xmlAttributePtr xattr;
|
|
35
|
-
|
|
42
|
+
TypedData_Get_Struct(self, xmlAttribute, &rxml_attr_decl_type, xattr);
|
|
36
43
|
if (xattr->doc == NULL)
|
|
37
44
|
return Qnil;
|
|
38
45
|
else
|
|
39
|
-
return
|
|
46
|
+
return rxml_registry_lookup(xattr->doc);
|
|
40
47
|
}
|
|
41
48
|
|
|
42
49
|
|
|
@@ -49,7 +56,7 @@ static VALUE rxml_attr_decl_doc_get(VALUE self)
|
|
|
49
56
|
static VALUE rxml_attr_decl_name_get(VALUE self)
|
|
50
57
|
{
|
|
51
58
|
xmlAttributePtr xattr;
|
|
52
|
-
|
|
59
|
+
TypedData_Get_Struct(self, xmlAttribute, &rxml_attr_decl_type, xattr);
|
|
53
60
|
|
|
54
61
|
if (xattr->name == NULL)
|
|
55
62
|
return Qnil;
|
|
@@ -66,7 +73,7 @@ static VALUE rxml_attr_decl_name_get(VALUE self)
|
|
|
66
73
|
static VALUE rxml_attr_decl_next_get(VALUE self)
|
|
67
74
|
{
|
|
68
75
|
xmlAttributePtr xattr;
|
|
69
|
-
|
|
76
|
+
TypedData_Get_Struct(self, xmlAttribute, &rxml_attr_decl_type, xattr);
|
|
70
77
|
if (xattr->next == NULL)
|
|
71
78
|
return Qnil;
|
|
72
79
|
else
|
|
@@ -81,8 +88,8 @@ static VALUE rxml_attr_decl_next_get(VALUE self)
|
|
|
81
88
|
*/
|
|
82
89
|
static VALUE rxml_attr_decl_node_type(VALUE self)
|
|
83
90
|
{
|
|
84
|
-
|
|
85
|
-
|
|
91
|
+
xmlAttributePtr xattr;
|
|
92
|
+
TypedData_Get_Struct(self, xmlAttribute, &rxml_attr_decl_type, xattr);
|
|
86
93
|
return INT2NUM(xattr->type);
|
|
87
94
|
}
|
|
88
95
|
|
|
@@ -96,7 +103,7 @@ static VALUE rxml_attr_decl_node_type(VALUE self)
|
|
|
96
103
|
static VALUE rxml_attr_decl_parent_get(VALUE self)
|
|
97
104
|
{
|
|
98
105
|
xmlAttributePtr xattr;
|
|
99
|
-
|
|
106
|
+
TypedData_Get_Struct(self, xmlAttribute, &rxml_attr_decl_type, xattr);
|
|
100
107
|
|
|
101
108
|
if (xattr->parent == NULL)
|
|
102
109
|
return Qnil;
|
|
@@ -114,7 +121,7 @@ static VALUE rxml_attr_decl_parent_get(VALUE self)
|
|
|
114
121
|
static VALUE rxml_attr_decl_prev_get(VALUE self)
|
|
115
122
|
{
|
|
116
123
|
xmlAttributePtr xattr;
|
|
117
|
-
|
|
124
|
+
TypedData_Get_Struct(self, xmlAttribute, &rxml_attr_decl_type, xattr);
|
|
118
125
|
|
|
119
126
|
if (xattr->prev == NULL)
|
|
120
127
|
return Qnil;
|
|
@@ -132,7 +139,7 @@ VALUE rxml_attr_decl_value_get(VALUE self)
|
|
|
132
139
|
{
|
|
133
140
|
xmlAttributePtr xattr;
|
|
134
141
|
|
|
135
|
-
|
|
142
|
+
TypedData_Get_Struct(self, xmlAttribute, &rxml_attr_decl_type, xattr);
|
|
136
143
|
|
|
137
144
|
if (xattr->defaultValue)
|
|
138
145
|
return rxml_new_cstr(xattr->defaultValue, NULL);
|
|
@@ -32,17 +32,26 @@
|
|
|
32
32
|
|
|
33
33
|
VALUE cXMLAttributes;
|
|
34
34
|
|
|
35
|
-
void rxml_attributes_mark(
|
|
35
|
+
void rxml_attributes_mark(void *data)
|
|
36
36
|
{
|
|
37
|
-
rxml_node_mark(
|
|
37
|
+
rxml_node_mark((xmlNodePtr)data);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
static const rb_data_type_t rxml_attributes_data_type = {
|
|
41
|
+
.wrap_struct_name = "LibXML::XML::Attributes",
|
|
42
|
+
.function = {
|
|
43
|
+
.dmark = rxml_attributes_mark,
|
|
44
|
+
.dfree = NULL,
|
|
45
|
+
},
|
|
46
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
47
|
+
};
|
|
48
|
+
|
|
40
49
|
/*
|
|
41
50
|
* Creates a new attributes instance. Not exposed to ruby.
|
|
42
51
|
*/
|
|
43
52
|
VALUE rxml_attributes_new(xmlNodePtr xnode)
|
|
44
53
|
{
|
|
45
|
-
return
|
|
54
|
+
return TypedData_Wrap_Struct(cXMLAttributes, &rxml_attributes_data_type, xnode);
|
|
46
55
|
}
|
|
47
56
|
|
|
48
57
|
/*
|
|
@@ -56,7 +65,7 @@ VALUE rxml_attributes_new(xmlNodePtr xnode)
|
|
|
56
65
|
VALUE rxml_attributes_node_get(VALUE self)
|
|
57
66
|
{
|
|
58
67
|
xmlNodePtr xnode;
|
|
59
|
-
|
|
68
|
+
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
|
|
60
69
|
return rxml_node_wrap(xnode);
|
|
61
70
|
}
|
|
62
71
|
|
|
@@ -80,7 +89,7 @@ static VALUE rxml_attributes_get_attribute(VALUE self, VALUE name)
|
|
|
80
89
|
|
|
81
90
|
name = rb_obj_as_string(name);
|
|
82
91
|
|
|
83
|
-
|
|
92
|
+
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
|
|
84
93
|
|
|
85
94
|
xattr = xmlHasProp(xnode, (xmlChar*) StringValuePtr(name));
|
|
86
95
|
|
|
@@ -114,7 +123,7 @@ static VALUE rxml_attributes_get_attribute_ns(VALUE self, VALUE namespace,
|
|
|
114
123
|
|
|
115
124
|
name = rb_obj_as_string(name);
|
|
116
125
|
|
|
117
|
-
|
|
126
|
+
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
|
|
118
127
|
|
|
119
128
|
xattr = xmlHasNsProp(xnode, (xmlChar*) StringValuePtr(name),
|
|
120
129
|
(xmlChar*) StringValuePtr(namespace));
|
|
@@ -191,7 +200,7 @@ static VALUE rxml_attributes_each(VALUE self)
|
|
|
191
200
|
{
|
|
192
201
|
xmlNodePtr xnode;
|
|
193
202
|
xmlAttrPtr xattr;
|
|
194
|
-
|
|
203
|
+
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
|
|
195
204
|
|
|
196
205
|
xattr = xnode->properties;
|
|
197
206
|
|
|
@@ -222,7 +231,7 @@ static VALUE rxml_attributes_length(VALUE self)
|
|
|
222
231
|
int length = 0;
|
|
223
232
|
xmlNodePtr xnode;
|
|
224
233
|
xmlAttrPtr xattr;
|
|
225
|
-
|
|
234
|
+
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
|
|
226
235
|
|
|
227
236
|
xattr = xnode->properties;
|
|
228
237
|
|
|
@@ -246,7 +255,7 @@ static VALUE rxml_attributes_length(VALUE self)
|
|
|
246
255
|
static VALUE rxml_attributes_first(VALUE self)
|
|
247
256
|
{
|
|
248
257
|
xmlNodePtr xnode;
|
|
249
|
-
|
|
258
|
+
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
|
|
250
259
|
|
|
251
260
|
if (xnode->type == XML_ELEMENT_NODE)
|
|
252
261
|
{
|