libxml-ruby 0.6.0-x86-mswin32-60 → 0.7.0-x86-mswin32-60
Sign up to get free protection for your applications and to get access to all the features.
- 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);
|