libxml-ruby 0.6.0-x86-mswin32-60 → 0.7.0-x86-mswin32-60
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.
- data/CHANGES +42 -0
- data/README +123 -117
- data/doc/classes/XML.html +226 -0
- data/doc/classes/XML/Attr.html +969 -0
- data/doc/classes/XML/Attributes.html +487 -0
- data/doc/classes/XML/Document.html +1423 -0
- data/doc/classes/XML/Dtd.html +159 -0
- data/doc/classes/XML/Error.html +111 -0
- data/doc/classes/XML/HTMLParser.html +330 -0
- data/doc/classes/XML/InputCallbacks.html +154 -0
- data/doc/classes/XML/NS.html +366 -0
- data/doc/classes/XML/Node.html +3292 -0
- data/doc/classes/XML/Node/FailedModify.html +111 -0
- data/doc/classes/XML/Node/Set.html +435 -0
- data/doc/classes/XML/Node/SetNamespace.html +111 -0
- data/doc/classes/XML/Node/UnknownType.html +111 -0
- data/doc/classes/XML/Parser.html +2178 -0
- data/doc/classes/XML/Parser/Context.html +1233 -0
- data/doc/classes/XML/Parser/ParseError.html +111 -0
- data/doc/classes/XML/Reader.html +2173 -0
- data/doc/classes/XML/SaxParser.html +396 -0
- data/doc/classes/XML/SiblingEnum.html +142 -0
- data/doc/classes/XML/State.html +118 -0
- data/doc/classes/XML/Tree.html +224 -0
- data/doc/classes/XML/XInclude.html +117 -0
- data/doc/classes/XML/XInclude/Error.html +111 -0
- data/doc/classes/XML/XMLParserOptions.html +198 -0
- data/doc/classes/XML/XPath.html +269 -0
- data/doc/classes/XML/XPath/Context.html +193 -0
- data/doc/classes/XML/XPath/InvalidPath.html +111 -0
- data/doc/classes/XML/XPath/Object.html +439 -0
- data/doc/classes/XML/XPointer.html +164 -0
- data/doc/classes/XML/XPointer/Context.html +117 -0
- data/doc/classes/XML/XPointer/Context/InvalidPath.html +111 -0
- data/doc/classes/XML/XPointer/InvalidExpression.html +111 -0
- data/doc/classes/singleton.html +114 -0
- data/doc/created.rid +1 -0
- data/doc/files/CHANGES.html +375 -0
- data/doc/files/LICENSE.html +133 -0
- data/doc/files/README.html +279 -0
- data/doc/files/VERSION.html +107 -0
- data/doc/files/ext/libxml/cbg_c.html +101 -0
- data/doc/files/ext/libxml/libxml_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_attr_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_attributes_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_document_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_dtd_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_html_parser_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_input_cbg_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_node_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_node_set_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_ns_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_parser_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_parser_context_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_reader_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_sax_parser_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_schema_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_state_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_tree_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_xinclude_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_xpath_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_xpath_context_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_xpath_object_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_xpointer_c.html +101 -0
- data/doc/files/ext/libxml/ruby_xml_xpointer_context_c.html +101 -0
- data/doc/files/lib/libxml_rb.html +115 -0
- data/doc/files/lib/xml/libxml_rb.html +114 -0
- data/doc/fr_class_index.html +60 -0
- data/doc/fr_file_index.html +56 -0
- data/doc/fr_method_index.html +373 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/ext/libxml/cbg.c +76 -76
- data/ext/libxml/extconf.rb +308 -308
- data/ext/libxml/libxml.c +58 -62
- data/ext/libxml/ruby_libxml.h +1 -0
- data/ext/libxml/ruby_xml_attr.c +201 -113
- data/ext/libxml/ruby_xml_attr.h +6 -9
- data/ext/libxml/ruby_xml_attributes.c +268 -0
- data/ext/libxml/ruby_xml_attributes.h +17 -0
- data/ext/libxml/ruby_xml_document.c +80 -66
- data/ext/libxml/ruby_xml_dtd.c +2 -2
- data/ext/libxml/ruby_xml_dtd.h +17 -17
- data/ext/libxml/ruby_xml_html_parser.c +18 -19
- data/ext/libxml/ruby_xml_html_parser.h +29 -29
- data/ext/libxml/ruby_xml_input_cbg.c +6 -0
- data/ext/libxml/ruby_xml_input_cbg.h +20 -20
- data/ext/libxml/ruby_xml_node.c +438 -536
- data/ext/libxml/ruby_xml_node.h +17 -27
- data/ext/libxml/ruby_xml_node_set.c +10 -9
- data/ext/libxml/ruby_xml_node_set.h +20 -20
- data/ext/libxml/ruby_xml_ns.c +60 -69
- data/ext/libxml/ruby_xml_ns.h +12 -21
- data/ext/libxml/ruby_xml_parser.c +54 -53
- data/ext/libxml/ruby_xml_parser.h +31 -31
- data/ext/libxml/ruby_xml_parser_context.c +37 -91
- data/ext/libxml/ruby_xml_parser_context.h +20 -22
- data/ext/libxml/ruby_xml_reader.h +14 -14
- data/ext/libxml/ruby_xml_sax_parser.c +55 -55
- data/ext/libxml/ruby_xml_sax_parser.h +56 -56
- data/ext/libxml/ruby_xml_schema.c +44 -51
- data/ext/libxml/ruby_xml_schema.h +16 -16
- data/ext/libxml/ruby_xml_state.c +35 -96
- data/ext/libxml/ruby_xml_state.h +2 -3
- data/ext/libxml/ruby_xml_tree.h +12 -12
- data/ext/libxml/ruby_xml_xinclude.h +13 -13
- data/ext/libxml/ruby_xml_xpath.c +57 -18
- data/ext/libxml/ruby_xml_xpath.h +23 -23
- data/ext/libxml/ruby_xml_xpath_context.c +11 -7
- data/ext/libxml/ruby_xml_xpath_context.h +20 -20
- data/ext/libxml/ruby_xml_xpath_object.c +9 -16
- data/ext/libxml/ruby_xml_xpath_object.h +4 -10
- data/ext/libxml/ruby_xml_xpointer.c +11 -11
- data/ext/libxml/ruby_xml_xpointer.h +27 -27
- data/ext/libxml/ruby_xml_xpointer_context.h +18 -18
- data/ext/libxml/version.h +2 -2
- data/lib/libxml.rb +134 -125
- data/lib/libxml_ruby.so +0 -0
- data/mingw/libiconv-2.dll +0 -0
- data/mingw/libxml2-2.dll +0 -0
- data/mingw/libxml_ruby.so +0 -0
- data/test/ets_copy_bug.rb +1 -1
- data/test/ets_copy_bug2.rb +16 -27
- data/test/ets_doc_to_s.rb +1 -1
- data/test/ets_gpx.rb +1 -1
- data/test/ets_node_gc.rb +1 -1
- data/test/ets_tsr.rb +1 -1
- data/test/tc_well_formed.rb +1 -1
- data/test/tc_xml_attributes.rb +106 -0
- data/test/tc_xml_document.rb +10 -10
- data/test/tc_xml_document_write3.rb +1 -1
- data/test/tc_xml_dtd.rb +49 -0
- data/test/tc_xml_html_parser.rb +3 -3
- data/test/tc_xml_node.rb +69 -33
- data/test/tc_xml_node_attr.rb +170 -0
- data/test/{tc_xml_node8.rb → tc_xml_node_cdata.rb} +2 -2
- data/test/{tc_xml_node9.rb → tc_xml_node_comment.rb} +3 -3
- data/test/tc_xml_node_edit.rb +91 -0
- data/test/tc_xml_parser.rb +97 -50
- data/test/tc_xml_parser_context.rb +61 -23
- data/test/tc_xml_schema.rb +39 -0
- data/test/tc_xml_xinclude.rb +5 -6
- data/test/tc_xml_xpath.rb +51 -27
- data/test/test_suite.rb +27 -0
- data/vc/{libxml.sln → libxml_ruby.sln} +5 -5
- data/vc/{libxml.vcproj → libxml_ruby.vcproj} +9 -1
- metadata +106 -54
- data/mingw/mingw.rake +0 -36
- data/test/dtd-test.rb +0 -24
- data/test/merge_bug.rb +0 -55
- data/test/schema-test.rb +0 -74
- data/test/tc_xml_node2.rb +0 -25
- data/test/tc_xml_node3.rb +0 -27
- data/test/tc_xml_node4.rb +0 -86
- data/test/tc_xml_node5.rb +0 -52
- data/test/tc_xml_node6.rb +0 -27
- data/test/tc_xml_node7.rb +0 -35
- data/test/tc_xml_parser2.rb +0 -16
- data/test/tc_xml_parser3.rb +0 -23
- data/test/tc_xml_parser4.rb +0 -33
- data/test/tc_xml_parser5.rb +0 -27
- data/test/tc_xml_parser6.rb +0 -23
- data/test/tc_xml_parser7.rb +0 -28
- data/test/tc_xml_parser8.rb +0 -32
- data/test/tc_xml_parser9.rb +0 -11
- data/test/tc_xml_xpath2.rb +0 -14
- data/work/vc/debug/libxml.exp +0 -0
- data/work/vc/debug/libxml.ilk +0 -0
- data/work/vc/debug/libxml.lib +0 -0
- data/work/vc/debug/libxml.pdb +0 -0
- data/work/vc/debug/libxml.so +0 -0
data/ext/libxml/ruby_xml_attr.h
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_attr.h
|
1
|
+
/* $Id: ruby_xml_attr.h 351 2008-07-09 19:55:21Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -7,13 +7,10 @@
|
|
7
7
|
|
8
8
|
extern VALUE cXMLAttr;
|
9
9
|
|
10
|
-
typedef struct ruby_xml_attr {
|
11
|
-
xmlAttrPtr attr;
|
12
|
-
} ruby_xml_attr_t;
|
13
|
-
|
14
|
-
VALUE ruby_xml_attr_new(VALUE class, xmlAttrPtr xnode);
|
15
|
-
void ruby_xml_attr_free(ruby_xml_attr_t *rxn);
|
16
|
-
VALUE ruby_xml_attr_wrap(VALUE class, xmlAttrPtr xnode);
|
17
10
|
void ruby_init_xml_attr(void);
|
18
|
-
VALUE
|
11
|
+
VALUE ruby_xml_attr_new(xmlAttrPtr xattr);
|
12
|
+
VALUE ruby_xml_attr_value_get(VALUE self);
|
13
|
+
VALUE ruby_xml_attr_value_set(VALUE self, VALUE val);
|
14
|
+
void ruby_xml_attr_free(xmlAttrPtr xattr);
|
15
|
+
VALUE ruby_xml_attr_wrap(xmlAttrPtr xattr);
|
19
16
|
#endif
|
@@ -0,0 +1,268 @@
|
|
1
|
+
/* $Id: ruby_xml_attributes.c 300 2008-07-01 19:14:15Z cfis $ */
|
2
|
+
|
3
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
+
|
5
|
+
/*
|
6
|
+
* Document-class: XML::Attributes
|
7
|
+
*
|
8
|
+
* Provides access to an elements attributes (XML::Attr).
|
9
|
+
*
|
10
|
+
* Basic Usage:
|
11
|
+
* require 'libxml'
|
12
|
+
*
|
13
|
+
* doc = XML::Document.new(<some_file>)
|
14
|
+
* attributes = doc.root.attributes
|
15
|
+
*
|
16
|
+
* attributes.each do |attribute|
|
17
|
+
* ..
|
18
|
+
* end
|
19
|
+
*
|
20
|
+
* attributes['foo'] = 'bar'
|
21
|
+
* attribute = attributes.get_attribute['foo']
|
22
|
+
* attribute.value == 'foo'
|
23
|
+
*
|
24
|
+
* To access a namespaced attribute:
|
25
|
+
*
|
26
|
+
* XLINK_URI = 'http://www.w3.org/1999/xlink'
|
27
|
+
*
|
28
|
+
* attribute = attributes.get_attribute_ns(XLINK_URI, 'title')
|
29
|
+
* attribute.value = 'My title'
|
30
|
+
*/
|
31
|
+
|
32
|
+
#include "ruby_libxml.h"
|
33
|
+
#include "ruby_xml_attributes.h"
|
34
|
+
|
35
|
+
VALUE cXMLAttributes;
|
36
|
+
|
37
|
+
void
|
38
|
+
ruby_xml_attributes_mark(xmlNodePtr xnode) {
|
39
|
+
ruby_xml_node_mark_common(xnode);
|
40
|
+
}
|
41
|
+
|
42
|
+
/*
|
43
|
+
* Creates a new attributes instance. Not exposed to ruby.
|
44
|
+
*/
|
45
|
+
VALUE
|
46
|
+
ruby_xml_attributes_new(xmlNodePtr xnode)
|
47
|
+
{
|
48
|
+
return Data_Wrap_Struct(cXMLAttributes,
|
49
|
+
ruby_xml_attributes_mark, NULL,
|
50
|
+
xnode);
|
51
|
+
}
|
52
|
+
|
53
|
+
/*
|
54
|
+
* call-seq:
|
55
|
+
* attributes.node -> XML::Node
|
56
|
+
*
|
57
|
+
* Return the node that owns this attributes list.
|
58
|
+
*
|
59
|
+
* doc.root.attributes.node == doc.root
|
60
|
+
*/
|
61
|
+
VALUE
|
62
|
+
ruby_xml_attributes_node_get(VALUE self) {
|
63
|
+
xmlNodePtr xnode;
|
64
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
65
|
+
return(ruby_xml_node2_wrap(cXMLNode, xnode));
|
66
|
+
}
|
67
|
+
|
68
|
+
|
69
|
+
/*
|
70
|
+
* call-seq:
|
71
|
+
* attributes.get_attribute("name") -> XML::Attr
|
72
|
+
*
|
73
|
+
* Returns the specified attribute.
|
74
|
+
*
|
75
|
+
* name: The name of the attribute, not including a namespace.
|
76
|
+
*
|
77
|
+
* doc.root.attributes.get_attribute("foo")
|
78
|
+
*/
|
79
|
+
VALUE
|
80
|
+
ruby_xml_attributes_get_attribute(VALUE self, VALUE name) {
|
81
|
+
xmlNodePtr xnode;
|
82
|
+
xmlAttrPtr xattr;
|
83
|
+
|
84
|
+
name = check_string_or_symbol(name);
|
85
|
+
|
86
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
87
|
+
|
88
|
+
xattr = xmlHasProp(xnode, (xmlChar*)StringValuePtr(name));
|
89
|
+
|
90
|
+
if (xattr)
|
91
|
+
return(ruby_xml_attr_wrap(xattr));
|
92
|
+
else
|
93
|
+
return(Qnil);
|
94
|
+
}
|
95
|
+
|
96
|
+
/*
|
97
|
+
* call-seq:
|
98
|
+
* attributes.get_attribute_ns("namespace", "name") -> XML::Attr
|
99
|
+
*
|
100
|
+
* Returns the specified attribute.
|
101
|
+
*
|
102
|
+
* namespace: The URI of the attribute's namespace.
|
103
|
+
* name: The name of the attribute, not including a namespace.
|
104
|
+
*
|
105
|
+
* doc.root.attributes.get_attribute_ns('http://www.w3.org/1999/xlink', 'href')
|
106
|
+
*/
|
107
|
+
VALUE
|
108
|
+
ruby_xml_attributes_get_attribute_ns(VALUE self, VALUE namespace, VALUE name) {
|
109
|
+
xmlNodePtr xnode;
|
110
|
+
xmlAttrPtr xattr;
|
111
|
+
|
112
|
+
name = check_string_or_symbol(name);
|
113
|
+
|
114
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
115
|
+
|
116
|
+
xattr = xmlHasNsProp(xnode, (xmlChar*)StringValuePtr(name), (xmlChar*)StringValuePtr(namespace));
|
117
|
+
|
118
|
+
if (xattr)
|
119
|
+
return(ruby_xml_attr_wrap(xattr));
|
120
|
+
else
|
121
|
+
return(Qnil);
|
122
|
+
}
|
123
|
+
|
124
|
+
/*
|
125
|
+
* call-seq:
|
126
|
+
* attributes["name"] -> String
|
127
|
+
*
|
128
|
+
* Fetches an attribute value. If you want to access the underlying
|
129
|
+
* Attribute itself use get_attribute.
|
130
|
+
*
|
131
|
+
* name: The name of the attribute, not including any namespaces.
|
132
|
+
*
|
133
|
+
* doc.root.attributes['att'] -> 'some value'
|
134
|
+
*/
|
135
|
+
VALUE
|
136
|
+
ruby_xml_attributes_attribute_get(VALUE self, VALUE name) {
|
137
|
+
VALUE xattr = ruby_xml_attributes_get_attribute(self, name);
|
138
|
+
if NIL_P(xattr)
|
139
|
+
return(Qnil);
|
140
|
+
else
|
141
|
+
return ruby_xml_attr_value_get(xattr);
|
142
|
+
}
|
143
|
+
|
144
|
+
/*
|
145
|
+
* call-seq:
|
146
|
+
* attributes["name"] = "value"
|
147
|
+
*
|
148
|
+
* Sets an attribute value. If you want to get the Attribute itself,
|
149
|
+
* use get_attribute.
|
150
|
+
*
|
151
|
+
* name: The name of the attribute, not including any namespaces.
|
152
|
+
* value: The new value of the namespace.
|
153
|
+
*
|
154
|
+
* doc.root.attributes['att'] = 'some value'
|
155
|
+
*/
|
156
|
+
VALUE
|
157
|
+
ruby_xml_attributes_attribute_set(VALUE self, VALUE name, VALUE value) {
|
158
|
+
VALUE xattr = ruby_xml_attributes_get_attribute(self, name);
|
159
|
+
if NIL_P(xattr)
|
160
|
+
{
|
161
|
+
VALUE args[3];
|
162
|
+
|
163
|
+
args[0] = ruby_xml_attributes_node_get(self);
|
164
|
+
args[1] = name;
|
165
|
+
args[2] = value;
|
166
|
+
|
167
|
+
return rb_class_new_instance(sizeof(args)/sizeof(VALUE), args, cXMLAttr);
|
168
|
+
}
|
169
|
+
else
|
170
|
+
{
|
171
|
+
return ruby_xml_attr_value_set(xattr, value);
|
172
|
+
}
|
173
|
+
}
|
174
|
+
|
175
|
+
|
176
|
+
/*
|
177
|
+
* call-seq:
|
178
|
+
* attributes.each {block} -> XML::Attr
|
179
|
+
*
|
180
|
+
* Iterates over each attribute.
|
181
|
+
*
|
182
|
+
* doc.root.attributes.each {|attribute| puts attribute.name}
|
183
|
+
*/
|
184
|
+
VALUE
|
185
|
+
ruby_xml_attributes_each(VALUE self) {
|
186
|
+
xmlNodePtr xnode;
|
187
|
+
xmlAttrPtr xattr;
|
188
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
189
|
+
|
190
|
+
xattr = xnode->properties;
|
191
|
+
|
192
|
+
while (xattr)
|
193
|
+
{
|
194
|
+
VALUE attr = ruby_xml_attr_wrap(xattr);
|
195
|
+
rb_yield(attr);
|
196
|
+
xattr = xattr->next;
|
197
|
+
}
|
198
|
+
|
199
|
+
return self;
|
200
|
+
}
|
201
|
+
|
202
|
+
/*
|
203
|
+
* call-seq:
|
204
|
+
* attributes.length -> Integer
|
205
|
+
*
|
206
|
+
* Returns the number of attributes.
|
207
|
+
*
|
208
|
+
* doc.root.attributes.length
|
209
|
+
*/
|
210
|
+
VALUE
|
211
|
+
ruby_xml_attributes_length(VALUE self) {
|
212
|
+
int length = 0;
|
213
|
+
xmlNodePtr xnode;
|
214
|
+
xmlAttrPtr xattr;
|
215
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
216
|
+
|
217
|
+
xattr = xnode->properties;
|
218
|
+
|
219
|
+
while (xattr)
|
220
|
+
{
|
221
|
+
length++;
|
222
|
+
xattr = xattr->next;
|
223
|
+
}
|
224
|
+
|
225
|
+
return INT2NUM(length);
|
226
|
+
}
|
227
|
+
|
228
|
+
/*
|
229
|
+
* call-seq:
|
230
|
+
* attributes.first -> XML::Attr
|
231
|
+
*
|
232
|
+
* Returns the first attribute.
|
233
|
+
*
|
234
|
+
* doc.root.attributes.first
|
235
|
+
*/
|
236
|
+
VALUE
|
237
|
+
ruby_xml_attributes_first(VALUE self) {
|
238
|
+
xmlNodePtr xnode;
|
239
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
240
|
+
|
241
|
+
if (xnode->type == XML_ELEMENT_NODE) {
|
242
|
+
xmlAttrPtr xattr = xnode->properties;
|
243
|
+
|
244
|
+
if (xattr) {
|
245
|
+
return(ruby_xml_attr_wrap(xattr));
|
246
|
+
}
|
247
|
+
}
|
248
|
+
return(Qnil);
|
249
|
+
}
|
250
|
+
|
251
|
+
// Rdoc needs to know
|
252
|
+
#ifdef RDOC_NEVER_DEFINED
|
253
|
+
mXML = rb_define_module("XML");
|
254
|
+
#endif
|
255
|
+
|
256
|
+
void
|
257
|
+
ruby_init_xml_attributes(void) {
|
258
|
+
cXMLAttributes = rb_define_class_under(mXML, "Attributes", rb_cObject);
|
259
|
+
rb_include_module(cXMLAttributes, rb_const_get(rb_cObject, rb_intern("Enumerable")));
|
260
|
+
rb_define_method(cXMLAttributes, "node", ruby_xml_attributes_node_get, 0);
|
261
|
+
rb_define_method(cXMLAttributes, "get_attribute", ruby_xml_attributes_get_attribute, 1);
|
262
|
+
rb_define_method(cXMLAttributes, "get_attribute_ns", ruby_xml_attributes_get_attribute_ns, 2);
|
263
|
+
rb_define_method(cXMLAttributes, "[]", ruby_xml_attributes_attribute_get, 1);
|
264
|
+
rb_define_method(cXMLAttributes, "[]=", ruby_xml_attributes_attribute_set, 2);
|
265
|
+
rb_define_method(cXMLAttributes, "each", ruby_xml_attributes_each, 0);
|
266
|
+
rb_define_method(cXMLAttributes, "length", ruby_xml_attributes_length, 0);
|
267
|
+
rb_define_method(cXMLAttributes, "first", ruby_xml_attributes_first, 0);
|
268
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
/* $Id: ruby_xml_attributes.h 282 2008-07-01 06:44:30Z cfis $ */
|
2
|
+
|
3
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
+
|
5
|
+
#ifndef __RUBY_XML_ATTRIBUTES__
|
6
|
+
#define __RUBY_XML_ATTRIBUTES__
|
7
|
+
|
8
|
+
extern VALUE cXMLAttributesibutes;
|
9
|
+
|
10
|
+
void ruby_init_xml_attributes(void);
|
11
|
+
VALUE ruby_xml_attributes_new(xmlNodePtr xnode);
|
12
|
+
|
13
|
+
VALUE ruby_xml_attributes_attribute_get(VALUE self, VALUE name);
|
14
|
+
VALUE ruby_xml_attributes_attribute_set(VALUE self, VALUE name, VALUE value);
|
15
|
+
|
16
|
+
|
17
|
+
#endif
|
@@ -1,16 +1,36 @@
|
|
1
|
-
/* $Id: ruby_xml_document.c
|
1
|
+
/* $Id: ruby_xml_document.c 359 2008-07-09 20:24:21Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
5
|
+
/*
|
6
|
+
* Document-class: XML::Document
|
7
|
+
*
|
8
|
+
* Reads or writes an XML document:
|
9
|
+
*
|
10
|
+
* Reading:
|
11
|
+
* require 'libxml'
|
12
|
+
*
|
13
|
+
* doc = XML::Document.new()
|
14
|
+
* doc.root = XML::Node.new('root_node')
|
15
|
+
* doc.root << XML::Node.new('elem1')
|
16
|
+
* doc.save('output.xml', format)
|
17
|
+
*
|
18
|
+
* Writing:
|
19
|
+
* require 'libxml'
|
20
|
+
* doc = XML::Document.file('output.xml')
|
21
|
+
* root = doc.root
|
22
|
+
*/
|
23
|
+
|
5
24
|
#include <stdarg.h>
|
6
25
|
#include "ruby_libxml.h"
|
7
26
|
#include "ruby_xml_document.h"
|
8
27
|
|
28
|
+
|
9
29
|
VALUE cXMLDocument;
|
10
30
|
|
11
31
|
/*
|
12
32
|
* call-seq:
|
13
|
-
* document.compression
|
33
|
+
* document.compression -> num
|
14
34
|
*
|
15
35
|
* Obtain this document's compression mode identifier.
|
16
36
|
*/
|
@@ -67,7 +87,7 @@ ruby_xml_document_compression_set(VALUE self, VALUE num) {
|
|
67
87
|
|
68
88
|
/*
|
69
89
|
* call-seq:
|
70
|
-
* document.compression?
|
90
|
+
* document.compression? -> (true|false)
|
71
91
|
*
|
72
92
|
* Determine whether this document is compressed.
|
73
93
|
*/
|
@@ -90,7 +110,7 @@ ruby_xml_document_compression_q(VALUE self) {
|
|
90
110
|
|
91
111
|
/*
|
92
112
|
* call-seq:
|
93
|
-
* document.child
|
113
|
+
* document.child -> node
|
94
114
|
*
|
95
115
|
* Get this document's child node.
|
96
116
|
*/
|
@@ -109,7 +129,7 @@ ruby_xml_document_child_get(VALUE self) {
|
|
109
129
|
|
110
130
|
/*
|
111
131
|
* call-seq:
|
112
|
-
* document.child?
|
132
|
+
* document.child? -> (true|false)
|
113
133
|
*
|
114
134
|
* Determine whether this document has a child node.
|
115
135
|
*/
|
@@ -127,7 +147,7 @@ ruby_xml_document_child_q(VALUE self) {
|
|
127
147
|
|
128
148
|
/*
|
129
149
|
* call-seq:
|
130
|
-
* document.dump([stream])
|
150
|
+
* document.dump([stream]) -> true
|
131
151
|
*
|
132
152
|
* Dump this document's XML to the specified IO stream.
|
133
153
|
* If no stream is specified, stdout is used.
|
@@ -166,7 +186,7 @@ ruby_xml_document_dump(int argc, VALUE *argv, VALUE self) {
|
|
166
186
|
|
167
187
|
/*
|
168
188
|
* call-seq:
|
169
|
-
* document.debug_dump([stream])
|
189
|
+
* document.debug_dump([stream]) -> true
|
170
190
|
*
|
171
191
|
* Debug version of dump.
|
172
192
|
*/
|
@@ -209,7 +229,7 @@ ruby_xml_document_debug_dump(int argc, VALUE *argv, VALUE self) {
|
|
209
229
|
|
210
230
|
/*
|
211
231
|
* call-seq:
|
212
|
-
* document.debug_dump_head([stream])
|
232
|
+
* document.debug_dump_head([stream]) -> true
|
213
233
|
*
|
214
234
|
* Debug-dump this document's header to the specified IO stream.
|
215
235
|
* If no stream is specified, stdout is used.
|
@@ -253,7 +273,7 @@ ruby_xml_document_debug_dump_head(int argc, VALUE *argv, VALUE self) {
|
|
253
273
|
|
254
274
|
/*
|
255
275
|
* call-seq:
|
256
|
-
* document.format_dump([stream], [spacing])
|
276
|
+
* document.format_dump([stream], [spacing]) -> true
|
257
277
|
*
|
258
278
|
* Dump this document's formatted XML to the specified IO stream.
|
259
279
|
* If no stream is specified, stdout is used. If spacing is
|
@@ -310,7 +330,7 @@ ruby_xml_document_format_dump(int argc, VALUE *argv, VALUE self) {
|
|
310
330
|
|
311
331
|
/*
|
312
332
|
* call-seq:
|
313
|
-
* document.debug_format_dump([stream])
|
333
|
+
* document.debug_format_dump([stream]) -> true
|
314
334
|
*
|
315
335
|
* *Deprecated* in favour of format_dump.
|
316
336
|
*/
|
@@ -323,7 +343,7 @@ ruby_xml_document_debug_format_dump(int argc, VALUE *argv, VALUE self) {
|
|
323
343
|
|
324
344
|
/*
|
325
345
|
* call-seq:
|
326
|
-
* document.encoding
|
346
|
+
* document.encoding -> "encoding"
|
327
347
|
*
|
328
348
|
* Obtain the encoding specified by this document.
|
329
349
|
*/
|
@@ -357,7 +377,7 @@ ruby_xml_document_encoding_set(VALUE self, VALUE encoding) {
|
|
357
377
|
|
358
378
|
/*
|
359
379
|
* call-seq:
|
360
|
-
* document.filename
|
380
|
+
* document.filename -> "filename"
|
361
381
|
*
|
362
382
|
* Obtain the filename this document was read from.
|
363
383
|
*/
|
@@ -386,10 +406,31 @@ ruby_xml_document_filename_get(VALUE self) {
|
|
386
406
|
|
387
407
|
/*
|
388
408
|
* call-seq:
|
389
|
-
* document.find(xpath_expr, [namespace])
|
409
|
+
* document.find(xpath_expr, [namespace]) -> XML::Node::Set
|
390
410
|
*
|
391
411
|
* Find nodes matching the specified xpath expression, optionally
|
392
|
-
* using the specified namespace. Returns an XML::Node::Set.
|
412
|
+
* using the specified namespace. Returns an XML::Node::Set. For
|
413
|
+
* more information about working with namespaces, please refer
|
414
|
+
* to the XML::XPath documentation.
|
415
|
+
*
|
416
|
+
* IMPORTANT - The returned XML::Node::Set must be freed before
|
417
|
+
* its associated document. In a running Ruby program this will
|
418
|
+
* happen automatically via Ruby's mark and sweep garbage collector.
|
419
|
+
* However, if the program exits, Ruby does not guarantee the order
|
420
|
+
* in which objects are freed
|
421
|
+
* (see http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/17700).
|
422
|
+
* As a result, the associated document may be freed before the node
|
423
|
+
* list, which will cause a segmentation fault.
|
424
|
+
*
|
425
|
+
* To avoid this, use the following (non-ruby like) coding style:
|
426
|
+
*
|
427
|
+
* nodes = doc.find('/header')
|
428
|
+
* nodes.each do |node|
|
429
|
+
* ... do stuff ...
|
430
|
+
* end
|
431
|
+
*
|
432
|
+
* nodes = nil
|
433
|
+
* GC.start
|
393
434
|
*/
|
394
435
|
VALUE
|
395
436
|
ruby_xml_document_find(int argc, VALUE *argv, VALUE self) {
|
@@ -438,12 +479,12 @@ void
|
|
438
479
|
ruby_xml_document_mark(ruby_xml_document_t *rxd) {
|
439
480
|
// will mark parsers and source types
|
440
481
|
// I do not thing doc->parent has anything useful in it.
|
441
|
-
|
482
|
+
rb_gc_mark(LIBXML_STATE);
|
442
483
|
}
|
443
484
|
|
444
485
|
/*
|
445
486
|
* call-seq:
|
446
|
-
* XML::Document.new(xml_version = 1.0)
|
487
|
+
* XML::Document.new(xml_version = 1.0) -> document
|
447
488
|
*
|
448
489
|
* Create a new XML::Document, optionally specifying the
|
449
490
|
* XML version.
|
@@ -470,7 +511,7 @@ ruby_xml_document_new(int argc, VALUE *argv, VALUE class) {
|
|
470
511
|
|
471
512
|
/*
|
472
513
|
* call-seq:
|
473
|
-
* document.last
|
514
|
+
* document.last -> node
|
474
515
|
*
|
475
516
|
* Obtain the last node.
|
476
517
|
*/
|
@@ -489,7 +530,7 @@ ruby_xml_document_last_get(VALUE self) {
|
|
489
530
|
|
490
531
|
/*
|
491
532
|
* call-seq:
|
492
|
-
* document.last?
|
533
|
+
* document.last? -> (true|false)
|
493
534
|
*
|
494
535
|
* Determine whether there is a last node.
|
495
536
|
*/
|
@@ -541,7 +582,7 @@ ruby_xml_document_new_native(VALUE class, VALUE xmlver) {
|
|
541
582
|
|
542
583
|
/*
|
543
584
|
* call-seq:
|
544
|
-
* XML::Document.file(filename)
|
585
|
+
* XML::Document.file(filename) -> document
|
545
586
|
*
|
546
587
|
* Create a new XML::Document by parsing the specified
|
547
588
|
* file.
|
@@ -558,7 +599,7 @@ ruby_xml_document_new_file(VALUE class, VALUE filename) {
|
|
558
599
|
|
559
600
|
/*
|
560
601
|
* call-seq:
|
561
|
-
* document.next
|
602
|
+
* document.next -> node
|
562
603
|
*
|
563
604
|
* Obtain the next node.
|
564
605
|
*/
|
@@ -577,7 +618,7 @@ ruby_xml_document_next_get(VALUE self) {
|
|
577
618
|
|
578
619
|
/*
|
579
620
|
* call-seq:
|
580
|
-
* document.next?
|
621
|
+
* document.next? -> (true|false)
|
581
622
|
*
|
582
623
|
* Determine whether there is a next node.
|
583
624
|
*/
|
@@ -595,7 +636,7 @@ ruby_xml_document_next_q(VALUE self) {
|
|
595
636
|
|
596
637
|
/*
|
597
638
|
* call-seq:
|
598
|
-
* document.parent
|
639
|
+
* document.parent -> node
|
599
640
|
*
|
600
641
|
* Obtain the parent node.
|
601
642
|
*/
|
@@ -614,7 +655,7 @@ ruby_xml_document_parent_get(VALUE self) {
|
|
614
655
|
|
615
656
|
/*
|
616
657
|
* call-seq:
|
617
|
-
* document.parent?
|
658
|
+
* document.parent? -> (true|false)
|
618
659
|
*
|
619
660
|
* Determine whether there is a parent node.
|
620
661
|
*/
|
@@ -632,7 +673,7 @@ ruby_xml_document_parent_q(VALUE self) {
|
|
632
673
|
|
633
674
|
/*
|
634
675
|
* call-seq:
|
635
|
-
* document.prev
|
676
|
+
* document.prev -> node
|
636
677
|
*
|
637
678
|
* Obtain the previous node.
|
638
679
|
*/
|
@@ -651,7 +692,7 @@ ruby_xml_document_prev_get(VALUE self) {
|
|
651
692
|
|
652
693
|
/*
|
653
694
|
* call-seq:
|
654
|
-
* document.prev?
|
695
|
+
* document.prev? -> (true|false)
|
655
696
|
*
|
656
697
|
* Determine whether there is a previous node.
|
657
698
|
*/
|
@@ -669,31 +710,7 @@ ruby_xml_document_prev_q(VALUE self) {
|
|
669
710
|
|
670
711
|
/*
|
671
712
|
* call-seq:
|
672
|
-
* document
|
673
|
-
*
|
674
|
-
* Obtain the named property.
|
675
|
-
*/
|
676
|
-
VALUE
|
677
|
-
ruby_xml_document_property_get(VALUE self, VALUE key) {
|
678
|
-
return(ruby_xml_node_property_get(ruby_xml_document_root_get(self), key));
|
679
|
-
}
|
680
|
-
|
681
|
-
|
682
|
-
/*
|
683
|
-
* call-seq:
|
684
|
-
* document["key"] = "value"
|
685
|
-
*
|
686
|
-
* Set the named property.
|
687
|
-
*/
|
688
|
-
VALUE
|
689
|
-
ruby_xml_document_property_set(VALUE self, VALUE key, VALUE val) {
|
690
|
-
return(ruby_xml_node_property_set(ruby_xml_document_root_get(self), key, val));
|
691
|
-
}
|
692
|
-
|
693
|
-
|
694
|
-
/*
|
695
|
-
* call-seq:
|
696
|
-
* document.root => node
|
713
|
+
* document.root -> node
|
697
714
|
*
|
698
715
|
* Obtain the root node.
|
699
716
|
*/
|
@@ -721,19 +738,18 @@ ruby_xml_document_root_get(VALUE self) {
|
|
721
738
|
VALUE
|
722
739
|
ruby_xml_document_root_set(VALUE self, VALUE node) {
|
723
740
|
ruby_xml_document_t *rxd;
|
724
|
-
|
725
|
-
xmlNodePtr root;
|
741
|
+
xmlNodePtr xroot, xnode;
|
726
742
|
|
727
743
|
if (rb_obj_is_kind_of(node, cXMLNode) == Qfalse)
|
728
744
|
rb_raise(rb_eTypeError, "must pass an XML::Node type object");
|
729
745
|
|
730
746
|
Data_Get_Struct(self, ruby_xml_document_t, rxd);
|
731
|
-
Data_Get_Struct(node,
|
732
|
-
|
733
|
-
if (
|
747
|
+
Data_Get_Struct(node, xmlNode, xnode);
|
748
|
+
xroot = xmlDocSetRootElement(rxd->doc, xnode);
|
749
|
+
if (xroot == NULL)
|
734
750
|
return(Qnil);
|
735
751
|
|
736
|
-
return ruby_xml_node2_wrap(cXMLNode,
|
752
|
+
return ruby_xml_node2_wrap(cXMLNode, xroot);
|
737
753
|
}
|
738
754
|
|
739
755
|
|
@@ -780,7 +796,7 @@ ruby_xml_document_save(int argc, VALUE *argv, VALUE self) {
|
|
780
796
|
|
781
797
|
/*
|
782
798
|
* call-seq:
|
783
|
-
* document.standalone?
|
799
|
+
* document.standalone? -> (true|false)
|
784
800
|
*
|
785
801
|
* Determine whether this is a standalone document.
|
786
802
|
*/
|
@@ -797,7 +813,7 @@ ruby_xml_document_standalone_q(VALUE self) {
|
|
797
813
|
|
798
814
|
/*
|
799
815
|
* call-seq:
|
800
|
-
* document.to_s({format=true,encoding)
|
816
|
+
* document.to_s({format=true,encoding) -> "xml"
|
801
817
|
*
|
802
818
|
* Coerce this document to a string representation
|
803
819
|
* of it's XML. The default is to pretty format, but this
|
@@ -858,7 +874,7 @@ ruby_xml_document_to_s(int argc, VALUE *argv, VALUE self) {
|
|
858
874
|
|
859
875
|
/*
|
860
876
|
* call-seq:
|
861
|
-
* document.url
|
877
|
+
* document.url -> "url"
|
862
878
|
*
|
863
879
|
* Obtain this document's source URL, if any.
|
864
880
|
*/
|
@@ -875,7 +891,7 @@ ruby_xml_document_url_get(VALUE self) {
|
|
875
891
|
|
876
892
|
/*
|
877
893
|
* call-seq:
|
878
|
-
* document.version
|
894
|
+
* document.version -> "version"
|
879
895
|
*
|
880
896
|
* Obtain the XML version specified by this document.
|
881
897
|
*/
|
@@ -892,7 +908,7 @@ ruby_xml_document_version_get(VALUE self) {
|
|
892
908
|
|
893
909
|
/*
|
894
910
|
* call-seq:
|
895
|
-
* document.xinclude
|
911
|
+
* document.xinclude -> num
|
896
912
|
*
|
897
913
|
* Process xinclude directives in this document.
|
898
914
|
*/
|
@@ -942,7 +958,7 @@ LibXML_validity_warning(void * ctxt, const char * msg, va_list ap)
|
|
942
958
|
|
943
959
|
/*
|
944
960
|
* call-seq:
|
945
|
-
* document.
|
961
|
+
* document.validate_schema(schema) -> (true|false)
|
946
962
|
*
|
947
963
|
* Validate this document against the specified XML::Schema.
|
948
964
|
*/
|
@@ -973,7 +989,7 @@ ruby_xml_document_validate_schema(VALUE self, VALUE schema) {
|
|
973
989
|
|
974
990
|
/*
|
975
991
|
* call-seq:
|
976
|
-
* document.validate(
|
992
|
+
* document.validate(dtd) -> (true|false)
|
977
993
|
*
|
978
994
|
* Validate this document against the specified XML::DTD.
|
979
995
|
*/
|
@@ -1048,7 +1064,7 @@ validate(self, ...)
|
|
1048
1064
|
|
1049
1065
|
/*
|
1050
1066
|
* call-seq:
|
1051
|
-
* document.reader
|
1067
|
+
* document.reader -> reader
|
1052
1068
|
*
|
1053
1069
|
* Create a XML::Reader from the document. This is a shortcut to
|
1054
1070
|
* XML::Reader.walker().
|
@@ -1073,8 +1089,6 @@ ruby_init_xml_document(void) {
|
|
1073
1089
|
//rb_raise(eXMLNodeFailedModify, "unable to add a child to the document");
|
1074
1090
|
//eDTDValidityWarning = rb_define_class_under(cXMLNode, "ValidityWarning", eXMLError);
|
1075
1091
|
//eDTDValidityError = rb_define_class_under(cXMLNode, "ValidityWarning", eXMLError);
|
1076
|
-
rb_define_method(cXMLDocument, "[]", ruby_xml_document_property_get, 1);
|
1077
|
-
rb_define_method(cXMLDocument, "[]=", ruby_xml_document_property_set, 2);
|
1078
1092
|
rb_define_method(cXMLDocument, "child", ruby_xml_document_child_get, 0);
|
1079
1093
|
rb_define_method(cXMLDocument, "child?", ruby_xml_document_child_q, 0);
|
1080
1094
|
rb_define_method(cXMLDocument, "compression", ruby_xml_document_compression_get, 0);
|