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_dtd.c
CHANGED
@@ -22,8 +22,8 @@ ruby_xml_dtd_mark(ruby_xml_dtd *rxdtd) {
|
|
22
22
|
|
23
23
|
/*
|
24
24
|
* call-seq:
|
25
|
-
* XML::Dtd.new("public system")
|
26
|
-
* XML::Dtd.new("public", "system")
|
25
|
+
* XML::Dtd.new("public system") -> dtd
|
26
|
+
* XML::Dtd.new("public", "system") -> dtd
|
27
27
|
*
|
28
28
|
* Create a new Dtd from the specified public and system
|
29
29
|
* identifiers.
|
data/ext/libxml/ruby_xml_dtd.h
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
#ifndef __RUBY_XML_DTD__
|
2
|
-
#define __RUBY_XML_DTD__
|
3
|
-
|
4
|
-
extern VALUE cXMLDtd;
|
5
|
-
|
6
|
-
typedef struct rxp_dtd {
|
7
|
-
xmlDtdPtr dtd; /* DTD interface */
|
8
|
-
//int data_type; /* The data type referenced by *data */
|
9
|
-
//void *data; /* Pointer to an external structure of options */
|
10
|
-
//int is_ptr; /* Determines if this object owns its data or points to it someplace else */
|
11
|
-
//VALUE xmlver; /* T_STRING with the xml version */
|
12
|
-
} ruby_xml_dtd;
|
13
|
-
|
14
|
-
void ruby_init_xml_dtd(void);
|
15
|
-
void ruby_dtd_free(ruby_xml_dtd *rxdtd);
|
16
|
-
|
17
|
-
#endif
|
1
|
+
#ifndef __RUBY_XML_DTD__
|
2
|
+
#define __RUBY_XML_DTD__
|
3
|
+
|
4
|
+
extern VALUE cXMLDtd;
|
5
|
+
|
6
|
+
typedef struct rxp_dtd {
|
7
|
+
xmlDtdPtr dtd; /* DTD interface */
|
8
|
+
//int data_type; /* The data type referenced by *data */
|
9
|
+
//void *data; /* Pointer to an external structure of options */
|
10
|
+
//int is_ptr; /* Determines if this object owns its data or points to it someplace else */
|
11
|
+
//VALUE xmlver; /* T_STRING with the xml version */
|
12
|
+
} ruby_xml_dtd;
|
13
|
+
|
14
|
+
void ruby_init_xml_dtd(void);
|
15
|
+
void ruby_dtd_free(ruby_xml_dtd *rxdtd);
|
16
|
+
|
17
|
+
#endif
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_html_parser.c
|
1
|
+
/* $Id: ruby_xml_html_parser.c 339 2008-07-09 08:36:26Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -14,7 +14,7 @@ VALUE cXMLHTMLParser;
|
|
14
14
|
|
15
15
|
/*
|
16
16
|
* call-seq:
|
17
|
-
* parser.filename
|
17
|
+
* parser.filename -> "filename"
|
18
18
|
*
|
19
19
|
* Obtain the filename this parser will read from.
|
20
20
|
*/
|
@@ -63,7 +63,7 @@ ruby_xml_html_parser_filename_set(VALUE self, VALUE filename) {
|
|
63
63
|
return(Qnil);
|
64
64
|
}
|
65
65
|
|
66
|
-
rxp->ctxt =
|
66
|
+
rxp->ctxt = ruby_xml_parser_context_new();
|
67
67
|
data = (rx_file_data *)rxp->data;
|
68
68
|
data->filename = filename;
|
69
69
|
|
@@ -105,7 +105,7 @@ ruby_xml_html_parser_free(ruby_xml_html_parser *rxp) {
|
|
105
105
|
|
106
106
|
/*
|
107
107
|
* call-seq:
|
108
|
-
* parser.io
|
108
|
+
* parser.io -> IO
|
109
109
|
*
|
110
110
|
* Obtain the IO instance this parser works with.
|
111
111
|
*/
|
@@ -159,7 +159,7 @@ ruby_xml_html_parser_io_set(VALUE self, VALUE io) {
|
|
159
159
|
return(Qnil);
|
160
160
|
}
|
161
161
|
|
162
|
-
rxp->ctxt =
|
162
|
+
rxp->ctxt = ruby_xml_parser_context_new();
|
163
163
|
data = (rx_io_data *)rxp->data;
|
164
164
|
data->io = io;
|
165
165
|
|
@@ -181,9 +181,10 @@ ruby_xml_html_parser_io_set(VALUE self, VALUE io) {
|
|
181
181
|
void
|
182
182
|
ruby_xml_html_parser_mark(ruby_xml_html_parser *rxp) {
|
183
183
|
if (rxp == NULL) return;
|
184
|
-
if (!NIL_P(rxp->ctxt))
|
184
|
+
if (!NIL_P(rxp->ctxt))
|
185
|
+
rb_gc_mark(rxp->ctxt);
|
185
186
|
|
186
|
-
|
187
|
+
rb_gc_mark(LIBXML_STATE);
|
187
188
|
|
188
189
|
switch(rxp->data_type) {
|
189
190
|
case RUBY_LIBXML_SRC_TYPE_NULL:
|
@@ -208,7 +209,7 @@ ruby_xml_html_parser_mark(ruby_xml_html_parser *rxp) {
|
|
208
209
|
|
209
210
|
/*
|
210
211
|
* call-seq:
|
211
|
-
* XML::HTMLParser.new
|
212
|
+
* XML::HTMLParser.new -> parser
|
212
213
|
*
|
213
214
|
* Create a new parser instance with no pre-determined source.
|
214
215
|
*/
|
@@ -229,7 +230,7 @@ ruby_xml_html_parser_new(VALUE class) {
|
|
229
230
|
|
230
231
|
/*
|
231
232
|
* call-seq:
|
232
|
-
* XML::HTMLParser.file
|
233
|
+
* XML::HTMLParser.file -> parser
|
233
234
|
*
|
234
235
|
* Create a new parser instance that will read the specified file.
|
235
236
|
*/
|
@@ -255,7 +256,7 @@ ruby_xml_html_parser_new_file(VALUE class, VALUE filename) {
|
|
255
256
|
|
256
257
|
/*
|
257
258
|
* call-seq:
|
258
|
-
* XML::HTMLParser.io
|
259
|
+
* XML::HTMLParser.io -> parser
|
259
260
|
*
|
260
261
|
* Create a new parser instance that will read from the
|
261
262
|
* specified IO object.
|
@@ -282,7 +283,7 @@ ruby_xml_html_parser_new_io(VALUE class, VALUE io) {
|
|
282
283
|
|
283
284
|
/*
|
284
285
|
* call-seq:
|
285
|
-
* XML::HTMLParser.string
|
286
|
+
* XML::HTMLParser.string -> parser
|
286
287
|
*
|
287
288
|
* Create a new parser instance that will parse the given
|
288
289
|
* string.
|
@@ -308,7 +309,7 @@ ruby_xml_html_parser_new_string(VALUE class, VALUE str) {
|
|
308
309
|
|
309
310
|
/*
|
310
311
|
* call-seq:
|
311
|
-
* parser.parse
|
312
|
+
* parser.parse -> document
|
312
313
|
*
|
313
314
|
* Parse the input XML and create an XML::Document with
|
314
315
|
* it's content. If an error occurs, XML::Parser::ParseError
|
@@ -350,7 +351,7 @@ ruby_xml_html_parser_parse(VALUE self) {
|
|
350
351
|
|
351
352
|
/*
|
352
353
|
* call-seq:
|
353
|
-
* parser.context
|
354
|
+
* parser.context -> context
|
354
355
|
*
|
355
356
|
* Obtain the XML::Parser::Context associated with this
|
356
357
|
* parser.
|
@@ -369,7 +370,7 @@ ruby_xml_html_parser_context_get(VALUE self) {
|
|
369
370
|
|
370
371
|
/*
|
371
372
|
* call-seq:
|
372
|
-
* parser.string
|
373
|
+
* parser.string -> "string"
|
373
374
|
*
|
374
375
|
* Obtain the string this parser works with.
|
375
376
|
*/
|
@@ -410,7 +411,7 @@ ruby_xml_html_parser_str_set(VALUE self, VALUE str) {
|
|
410
411
|
return(Qnil);
|
411
412
|
}
|
412
413
|
|
413
|
-
rxp->ctxt =
|
414
|
+
rxp->ctxt = ruby_xml_parser_context_new();
|
414
415
|
data = (rx_string_data *)rxp->data;
|
415
416
|
data->str = str;
|
416
417
|
|
@@ -430,13 +431,11 @@ void
|
|
430
431
|
ruby_init_html_parser(void) {
|
431
432
|
cXMLHTMLParser = rb_define_class_under(mXML, "HTMLParser", rb_cObject);
|
432
433
|
|
434
|
+
rb_define_singleton_method(cXMLHTMLParser, "new", ruby_xml_html_parser_new, 0);
|
435
|
+
rb_define_singleton_method(cXMLHTMLParser, "string", ruby_xml_html_parser_new_string, 1);
|
433
436
|
/*
|
434
437
|
rb_define_singleton_method(cXMLHTMLParser, "file", ruby_xml_html_parser_new_file, 1);
|
435
438
|
rb_define_singleton_method(cXMLHTMLParser, "io", ruby_xml_html_parser_new_io, 1);
|
436
|
-
*/
|
437
|
-
rb_define_singleton_method(cXMLHTMLParser, "new", ruby_xml_html_parser_new, 0);
|
438
|
-
rb_define_singleton_method(cXMLHTMLParser, "string", ruby_xml_html_parser_new_string, 1);
|
439
|
-
/*
|
440
439
|
rb_define_method(cXMLHTMLParser, "filename", ruby_xml_html_parser_filename_get, 0);
|
441
440
|
rb_define_method(cXMLHTMLParser, "filename=", ruby_xml_html_parser_filename_set, 1);
|
442
441
|
rb_define_method(cXMLHTMLParser, "io", ruby_xml_html_parser_io_get, 0);
|
@@ -1,29 +1,29 @@
|
|
1
|
-
/* $Id: ruby_xml_html_parser.h 111 2006-11-20 01:39:14Z roscopeco $ */
|
2
|
-
|
3
|
-
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
-
|
5
|
-
#ifndef __RUBY_XML_HTML_PARSER__
|
6
|
-
#define __RUBY_XML_HTML_PARSER__
|
7
|
-
|
8
|
-
extern int ruby_xml_html_parser_count;
|
9
|
-
extern VALUE cXMLHTMLParser;
|
10
|
-
|
11
|
-
typedef struct ruby_xml_html_parser {
|
12
|
-
VALUE ctxt;
|
13
|
-
int parsed;
|
14
|
-
void *data;
|
15
|
-
int data_type;
|
16
|
-
} ruby_xml_html_parser;
|
17
|
-
|
18
|
-
/*
|
19
|
-
* VALUE ruby_xml_html_parser_filename_get(VALUE self);
|
20
|
-
VALUE ruby_xml_html_parser_filename_set(VALUE self, VALUE filename);
|
21
|
-
VALUE ruby_xml_html_parser_new(VALUE class);
|
22
|
-
*/
|
23
|
-
VALUE ruby_xml_html_parser_parse(VALUE self);
|
24
|
-
VALUE ruby_xml_html_parser_str_get(VALUE self);
|
25
|
-
VALUE ruby_xml_html_parser_str_set(VALUE self, VALUE str);
|
26
|
-
|
27
|
-
void ruby_init_html_parser(void);
|
28
|
-
|
29
|
-
#endif
|
1
|
+
/* $Id: ruby_xml_html_parser.h 111 2006-11-20 01:39:14Z roscopeco $ */
|
2
|
+
|
3
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
+
|
5
|
+
#ifndef __RUBY_XML_HTML_PARSER__
|
6
|
+
#define __RUBY_XML_HTML_PARSER__
|
7
|
+
|
8
|
+
extern int ruby_xml_html_parser_count;
|
9
|
+
extern VALUE cXMLHTMLParser;
|
10
|
+
|
11
|
+
typedef struct ruby_xml_html_parser {
|
12
|
+
VALUE ctxt;
|
13
|
+
int parsed;
|
14
|
+
void *data;
|
15
|
+
int data_type;
|
16
|
+
} ruby_xml_html_parser;
|
17
|
+
|
18
|
+
/*
|
19
|
+
* VALUE ruby_xml_html_parser_filename_get(VALUE self);
|
20
|
+
VALUE ruby_xml_html_parser_filename_set(VALUE self, VALUE filename);
|
21
|
+
VALUE ruby_xml_html_parser_new(VALUE class);
|
22
|
+
*/
|
23
|
+
VALUE ruby_xml_html_parser_parse(VALUE self);
|
24
|
+
VALUE ruby_xml_html_parser_str_get(VALUE self);
|
25
|
+
VALUE ruby_xml_html_parser_str_set(VALUE self, VALUE str);
|
26
|
+
|
27
|
+
void ruby_init_html_parser(void);
|
28
|
+
|
29
|
+
#endif
|
@@ -71,6 +71,12 @@ int ic_close (void *context) {
|
|
71
71
|
return 1;
|
72
72
|
}
|
73
73
|
|
74
|
+
/*
|
75
|
+
* call-seq:
|
76
|
+
* register
|
77
|
+
*
|
78
|
+
* Register a new set of I/O callback for handling parser input.
|
79
|
+
*/
|
74
80
|
VALUE input_callbacks_register_input_callbacks() {
|
75
81
|
xmlRegisterInputCallbacks( ic_match, ic_open, ic_read, ic_close );
|
76
82
|
return(Qtrue);
|
@@ -1,20 +1,20 @@
|
|
1
|
-
#ifndef _INPUT_CBG_
|
2
|
-
#define _INPUT_CBG_
|
3
|
-
|
4
|
-
void ruby_init_input_callbacks(void);
|
5
|
-
|
6
|
-
typedef struct ic_doc_context {
|
7
|
-
char *buffer;
|
8
|
-
char *bpos;
|
9
|
-
int remaining;
|
10
|
-
} ic_doc_context;
|
11
|
-
|
12
|
-
typedef struct ic_scheme {
|
13
|
-
char *scheme_name;
|
14
|
-
VALUE class;
|
15
|
-
int name_len;
|
16
|
-
|
17
|
-
struct ic_scheme *next_scheme;
|
18
|
-
} ic_scheme;
|
19
|
-
|
20
|
-
#endif
|
1
|
+
#ifndef _INPUT_CBG_
|
2
|
+
#define _INPUT_CBG_
|
3
|
+
|
4
|
+
void ruby_init_input_callbacks(void);
|
5
|
+
|
6
|
+
typedef struct ic_doc_context {
|
7
|
+
char *buffer;
|
8
|
+
char *bpos;
|
9
|
+
int remaining;
|
10
|
+
} ic_doc_context;
|
11
|
+
|
12
|
+
typedef struct ic_scheme {
|
13
|
+
char *scheme_name;
|
14
|
+
VALUE class;
|
15
|
+
int name_len;
|
16
|
+
|
17
|
+
struct ic_scheme *next_scheme;
|
18
|
+
} ic_scheme;
|
19
|
+
|
20
|
+
#endif
|
data/ext/libxml/ruby_xml_node.c
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_node.c
|
1
|
+
/* $Id: ruby_xml_node.c 351 2008-07-09 19:55:21Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -10,7 +10,7 @@ VALUE eXMLNodeSetNamespace;
|
|
10
10
|
VALUE eXMLNodeFailedModify;
|
11
11
|
VALUE eXMLNodeUnknownType;
|
12
12
|
|
13
|
-
|
13
|
+
VALUE
|
14
14
|
check_string_or_symbol( VALUE val ) {
|
15
15
|
if( TYPE(val) != T_STRING && TYPE(val) != T_SYMBOL ) {
|
16
16
|
rb_raise(rb_eTypeError, "wrong argument type %s (expected String or Symbol)",
|
@@ -21,15 +21,15 @@ check_string_or_symbol( VALUE val ) {
|
|
21
21
|
|
22
22
|
/*
|
23
23
|
* call-seq:
|
24
|
-
* node.attribute?
|
24
|
+
* node.attribute? -> (true|false)
|
25
25
|
*
|
26
26
|
* Determine whether this is an attribute node,
|
27
27
|
*/
|
28
28
|
VALUE
|
29
29
|
ruby_xml_node_attribute_q(VALUE self) {
|
30
|
-
|
31
|
-
Data_Get_Struct(self,
|
32
|
-
if (
|
30
|
+
xmlNodePtr xnode;
|
31
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
32
|
+
if (xnode->type == XML_ATTRIBUTE_NODE)
|
33
33
|
return(Qtrue);
|
34
34
|
else
|
35
35
|
return(Qfalse);
|
@@ -38,15 +38,15 @@ ruby_xml_node_attribute_q(VALUE self) {
|
|
38
38
|
|
39
39
|
/*
|
40
40
|
* call-seq:
|
41
|
-
* node.attribute_decl?
|
41
|
+
* node.attribute_decl? -> (true|false)
|
42
42
|
*
|
43
43
|
* Determine whether this is an attribute declaration node,
|
44
44
|
*/
|
45
45
|
VALUE
|
46
46
|
ruby_xml_node_attribute_decl_q(VALUE self) {
|
47
|
-
|
48
|
-
Data_Get_Struct(self,
|
49
|
-
if (
|
47
|
+
xmlNodePtr xnode;
|
48
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
49
|
+
if (xnode->type == XML_ATTRIBUTE_DECL)
|
50
50
|
return(Qtrue);
|
51
51
|
else
|
52
52
|
return(Qfalse);
|
@@ -55,22 +55,22 @@ ruby_xml_node_attribute_decl_q(VALUE self) {
|
|
55
55
|
|
56
56
|
/*
|
57
57
|
* call-seq:
|
58
|
-
* node.base
|
58
|
+
* node.base -> "uri"
|
59
59
|
*
|
60
60
|
* Obtain this node's base URI.
|
61
61
|
*/
|
62
62
|
VALUE
|
63
63
|
ruby_xml_node_base_get(VALUE self) {
|
64
|
-
|
64
|
+
xmlNodePtr xnode;
|
65
65
|
xmlChar* base_uri;
|
66
66
|
VALUE result = Qnil;
|
67
67
|
|
68
|
-
Data_Get_Struct(self,
|
68
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
69
69
|
|
70
|
-
if (
|
70
|
+
if (xnode->doc == NULL)
|
71
71
|
return(result);
|
72
72
|
|
73
|
-
base_uri = xmlNodeGetBase(
|
73
|
+
base_uri = xmlNodeGetBase(xnode->doc, xnode);
|
74
74
|
if (base_uri) {
|
75
75
|
result = rb_str_new2((const char*)base_uri);
|
76
76
|
xmlFree(base_uri);
|
@@ -90,29 +90,29 @@ ruby_xml_node_base_get(VALUE self) {
|
|
90
90
|
*/
|
91
91
|
VALUE
|
92
92
|
ruby_xml_node_base_set(VALUE self, VALUE uri) {
|
93
|
-
|
93
|
+
xmlNodePtr xnode;
|
94
94
|
|
95
95
|
Check_Type(uri, T_STRING);
|
96
|
-
Data_Get_Struct(self,
|
97
|
-
if (
|
96
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
97
|
+
if (xnode->doc == NULL)
|
98
98
|
return(Qnil);
|
99
99
|
|
100
|
-
xmlNodeSetBase(
|
100
|
+
xmlNodeSetBase(xnode, (xmlChar*)StringValuePtr(uri));
|
101
101
|
return(Qtrue);
|
102
102
|
}
|
103
103
|
|
104
104
|
|
105
105
|
/*
|
106
106
|
* call-seq:
|
107
|
-
* node.cdata?
|
107
|
+
* node.cdata? -> (true|false)
|
108
108
|
*
|
109
109
|
* Determine whether this is a #CDATA node
|
110
110
|
*/
|
111
111
|
VALUE
|
112
112
|
ruby_xml_node_cdata_q(VALUE self) {
|
113
|
-
|
114
|
-
Data_Get_Struct(self,
|
115
|
-
if (
|
113
|
+
xmlNodePtr xnode;
|
114
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
115
|
+
if (xnode->type == XML_CDATA_SECTION_NODE)
|
116
116
|
return(Qtrue);
|
117
117
|
else
|
118
118
|
return(Qfalse);
|
@@ -121,15 +121,15 @@ ruby_xml_node_cdata_q(VALUE self) {
|
|
121
121
|
|
122
122
|
/*
|
123
123
|
* call-seq:
|
124
|
-
* node.comment?
|
124
|
+
* node.comment? -> (true|false)
|
125
125
|
*
|
126
126
|
* Determine whether this is a comment node
|
127
127
|
*/
|
128
128
|
VALUE
|
129
129
|
ruby_xml_node_comment_q(VALUE self) {
|
130
|
-
|
131
|
-
Data_Get_Struct(self,
|
132
|
-
if (
|
130
|
+
xmlNodePtr xnode;
|
131
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
132
|
+
if (xnode->type == XML_COMMENT_NODE)
|
133
133
|
return(Qtrue);
|
134
134
|
else
|
135
135
|
return(Qfalse);
|
@@ -138,52 +138,18 @@ ruby_xml_node_comment_q(VALUE self) {
|
|
138
138
|
|
139
139
|
/*
|
140
140
|
* call-seq:
|
141
|
-
* node
|
142
|
-
*
|
143
|
-
* Add the specified string or XML::Node to this node's
|
144
|
-
* content.
|
145
|
-
*/
|
146
|
-
VALUE
|
147
|
-
ruby_xml_node_content_add(VALUE self, VALUE obj) {
|
148
|
-
ruby_xml_node *node;
|
149
|
-
VALUE str;
|
150
|
-
|
151
|
-
Data_Get_Struct(self, ruby_xml_node, node);
|
152
|
-
/* XXX This should only be legal for a CDATA type node, I think,
|
153
|
-
* resulting in a merge of content, as if a string were passed
|
154
|
-
* danj 070827
|
155
|
-
*/
|
156
|
-
if (rb_obj_is_kind_of(obj, cXMLNode)) {
|
157
|
-
ruby_xml_node_child_set(self, obj);
|
158
|
-
return(self);
|
159
|
-
} else if (TYPE(obj) == T_STRING) {
|
160
|
-
xmlNodeAddContent(node->node, (xmlChar*)StringValuePtr(obj));
|
161
|
-
return(self);
|
162
|
-
} else {
|
163
|
-
str = rb_obj_as_string(obj);
|
164
|
-
if (NIL_P(str) || TYPE(str) != T_STRING)
|
165
|
-
rb_raise(rb_eTypeError, "invalid argument: must be string or XML::Node");
|
166
|
-
|
167
|
-
xmlNodeAddContent(node->node, (xmlChar*)StringValuePtr(str));
|
168
|
-
return(self);
|
169
|
-
}
|
170
|
-
}
|
171
|
-
|
172
|
-
|
173
|
-
/*
|
174
|
-
* call-seq:
|
175
|
-
* node.content => "string"
|
141
|
+
* node.content -> "string"
|
176
142
|
*
|
177
143
|
* Obtain this node's content as a string.
|
178
144
|
*/
|
179
145
|
VALUE
|
180
146
|
ruby_xml_node_content_get(VALUE self) {
|
181
|
-
|
147
|
+
xmlNodePtr xnode;
|
182
148
|
xmlChar *content;
|
183
|
-
VALUE result;
|
149
|
+
VALUE result = Qnil;
|
184
150
|
|
185
|
-
Data_Get_Struct(self,
|
186
|
-
content = xmlNodeGetContent(
|
151
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
152
|
+
content = xmlNodeGetContent(xnode);
|
187
153
|
if (content) {
|
188
154
|
result = rb_str_new2((const char *) content);
|
189
155
|
xmlFree(content);
|
@@ -200,19 +166,19 @@ ruby_xml_node_content_get(VALUE self) {
|
|
200
166
|
*/
|
201
167
|
VALUE
|
202
168
|
ruby_xml_node_content_set(VALUE self, VALUE content) {
|
203
|
-
|
169
|
+
xmlNodePtr xnode;
|
204
170
|
|
205
171
|
Check_Type(content, T_STRING);
|
206
|
-
Data_Get_Struct(self,
|
172
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
207
173
|
// XXX docs indicate need for escaping entites, need to be done? danj
|
208
|
-
xmlNodeSetContent(
|
174
|
+
xmlNodeSetContent(xnode, (xmlChar*)StringValuePtr(content));
|
209
175
|
return(Qtrue);
|
210
176
|
}
|
211
177
|
|
212
178
|
|
213
179
|
/*
|
214
180
|
* call-seq:
|
215
|
-
* node.content_stripped
|
181
|
+
* node.content_stripped -> "string"
|
216
182
|
*
|
217
183
|
* Obtain this node's stripped content.
|
218
184
|
*
|
@@ -221,16 +187,16 @@ ruby_xml_node_content_set(VALUE self, VALUE content) {
|
|
221
187
|
*/
|
222
188
|
VALUE
|
223
189
|
ruby_xml_node_content_stripped_get(VALUE self) {
|
224
|
-
|
190
|
+
xmlNodePtr xnode;
|
225
191
|
xmlChar* content;
|
226
192
|
VALUE result = Qnil;
|
227
193
|
|
228
|
-
Data_Get_Struct(self,
|
194
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
229
195
|
|
230
|
-
if (!
|
196
|
+
if (!xnode->content)
|
231
197
|
return result;
|
232
198
|
|
233
|
-
content = xmlNodeGetContent(
|
199
|
+
content = xmlNodeGetContent(xnode);
|
234
200
|
if (content) {
|
235
201
|
result = rb_str_new2((const char*)content);
|
236
202
|
xmlFree(content);
|
@@ -240,18 +206,18 @@ ruby_xml_node_content_stripped_get(VALUE self) {
|
|
240
206
|
|
241
207
|
/*
|
242
208
|
* call-seq:
|
243
|
-
* node.child
|
209
|
+
* node.child -> node
|
244
210
|
*
|
245
211
|
* Obtain this node's first child node, if any.
|
246
212
|
*/
|
247
213
|
VALUE
|
248
214
|
ruby_xml_node_child_get(VALUE self) {
|
249
|
-
|
215
|
+
xmlNodePtr xnode;
|
250
216
|
xmlNodePtr tmp;
|
251
217
|
|
252
|
-
Data_Get_Struct(self,
|
218
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
253
219
|
|
254
|
-
switch (
|
220
|
+
switch (xnode->type) {
|
255
221
|
case XML_ELEMENT_NODE:
|
256
222
|
case XML_ENTITY_REF_NODE:
|
257
223
|
case XML_ENTITY_NODE:
|
@@ -263,11 +229,11 @@ ruby_xml_node_child_get(VALUE self) {
|
|
263
229
|
#endif
|
264
230
|
case XML_HTML_DOCUMENT_NODE:
|
265
231
|
case XML_DTD_NODE:
|
266
|
-
tmp =
|
232
|
+
tmp = xnode->children;
|
267
233
|
break;
|
268
234
|
case XML_ATTRIBUTE_NODE:
|
269
235
|
{
|
270
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
236
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
271
237
|
tmp = attr->children;
|
272
238
|
break;
|
273
239
|
}
|
@@ -285,18 +251,18 @@ ruby_xml_node_child_get(VALUE self) {
|
|
285
251
|
|
286
252
|
/*
|
287
253
|
* call-seq:
|
288
|
-
* node.child?
|
254
|
+
* node.child? -> (true|false)
|
289
255
|
*
|
290
256
|
* Determine whether this node has at least one child.
|
291
257
|
*/
|
292
258
|
VALUE
|
293
259
|
ruby_xml_node_child_q(VALUE self) {
|
294
|
-
|
260
|
+
xmlNodePtr xnode;
|
295
261
|
xmlNodePtr node;
|
296
|
-
Data_Get_Struct(self,
|
262
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
297
263
|
|
298
264
|
node = NULL;
|
299
|
-
switch (
|
265
|
+
switch (xnode->type) {
|
300
266
|
case XML_ELEMENT_NODE:
|
301
267
|
case XML_ENTITY_REF_NODE:
|
302
268
|
case XML_ENTITY_NODE:
|
@@ -308,11 +274,11 @@ ruby_xml_node_child_q(VALUE self) {
|
|
308
274
|
#endif
|
309
275
|
case XML_HTML_DOCUMENT_NODE:
|
310
276
|
case XML_DTD_NODE:
|
311
|
-
node =
|
277
|
+
node = xnode->children;
|
312
278
|
break;
|
313
279
|
case XML_ATTRIBUTE_NODE:
|
314
280
|
{
|
315
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
281
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
316
282
|
node = attr->children;
|
317
283
|
break;
|
318
284
|
}
|
@@ -331,38 +297,20 @@ ruby_xml_node_child_q(VALUE self) {
|
|
331
297
|
* former raises on implicit copy, latter does not.
|
332
298
|
*/
|
333
299
|
VALUE
|
334
|
-
ruby_xml_node_child_set_aux(VALUE self, VALUE rnode
|
335
|
-
|
336
|
-
xmlNodePtr chld, ret;
|
337
|
-
int copied=0;
|
300
|
+
ruby_xml_node_child_set_aux(VALUE self, VALUE rnode) {
|
301
|
+
xmlNodePtr pnode, chld, ret;
|
338
302
|
|
339
303
|
if (rb_obj_is_kind_of(rnode, cXMLNode) == Qfalse)
|
340
304
|
rb_raise(rb_eTypeError, "Must pass an XML::Node object");
|
341
305
|
|
342
|
-
Data_Get_Struct(self,
|
343
|
-
Data_Get_Struct(rnode,
|
306
|
+
Data_Get_Struct(self, xmlNode, pnode);
|
307
|
+
Data_Get_Struct(rnode, xmlNode, chld);
|
344
308
|
|
345
|
-
chld
|
346
|
-
|
347
|
-
* with a copy, so that the ruby instance is not left with a dangling reference
|
348
|
-
*/
|
349
|
-
if ( chld->type == XML_TEXT_NODE ) {
|
350
|
-
chld = xmlCopyNode(chld,1);
|
351
|
-
copied=1;
|
352
|
-
}
|
353
|
-
|
354
|
-
if ( chld->parent != NULL || chld->doc != NULL ) {
|
355
|
-
/* raise before copying if applicable */
|
356
|
-
if ( do_raise == 1 )
|
357
|
-
rb_raise(rb_eRuntimeError, "implicit copy not legal for child= or <<");
|
358
|
-
chld=xmlCopyNode(chld,1);
|
359
|
-
copied=1;
|
360
|
-
}
|
309
|
+
if ( chld->parent != NULL || chld->doc != NULL )
|
310
|
+
rb_raise(rb_eRuntimeError, "Cannot move a node from one document to another with child= or <<. First copy the node before moving it.");
|
361
311
|
|
362
|
-
ret = xmlAddChild(pnode
|
312
|
+
ret = xmlAddChild(pnode, chld);
|
363
313
|
if (ret == NULL) {
|
364
|
-
if ( copied == 1 )
|
365
|
-
xmlFreeNode(chld);
|
366
314
|
rb_raise(eXMLNodeFailedModify, "unable to add a child to the document");
|
367
315
|
} else if ( ret==chld ) {
|
368
316
|
/* child was added whole to parent and we need to return it as a new object */
|
@@ -381,7 +329,41 @@ ruby_xml_node_child_set_aux(VALUE self, VALUE rnode, int do_raise) {
|
|
381
329
|
*/
|
382
330
|
VALUE
|
383
331
|
ruby_xml_node_child_set(VALUE self, VALUE rnode) {
|
384
|
-
return ruby_xml_node_child_set_aux(self,rnode
|
332
|
+
return ruby_xml_node_child_set_aux(self, rnode);
|
333
|
+
}
|
334
|
+
|
335
|
+
|
336
|
+
/*
|
337
|
+
* call-seq:
|
338
|
+
* node << ("string" | node) -> node
|
339
|
+
*
|
340
|
+
* Add the specified string or XML::Node to this node's
|
341
|
+
* content.
|
342
|
+
*/
|
343
|
+
VALUE
|
344
|
+
ruby_xml_node_content_add(VALUE self, VALUE obj) {
|
345
|
+
xmlNodePtr xnode;
|
346
|
+
VALUE str;
|
347
|
+
|
348
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
349
|
+
/* XXX This should only be legal for a CDATA type node, I think,
|
350
|
+
* resulting in a merge of content, as if a string were passed
|
351
|
+
* danj 070827
|
352
|
+
*/
|
353
|
+
if (rb_obj_is_kind_of(obj, cXMLNode)) {
|
354
|
+
ruby_xml_node_child_set(self, obj);
|
355
|
+
return(self);
|
356
|
+
} else if (TYPE(obj) == T_STRING) {
|
357
|
+
xmlNodeAddContent(xnode, (xmlChar*)StringValuePtr(obj));
|
358
|
+
return(self);
|
359
|
+
} else {
|
360
|
+
str = rb_obj_as_string(obj);
|
361
|
+
if (NIL_P(str) || TYPE(str) != T_STRING)
|
362
|
+
rb_raise(rb_eTypeError, "invalid argument: must be string or XML::Node");
|
363
|
+
|
364
|
+
xmlNodeAddContent(xnode, (xmlChar*)StringValuePtr(str));
|
365
|
+
return(self);
|
366
|
+
}
|
385
367
|
}
|
386
368
|
|
387
369
|
/*
|
@@ -392,23 +374,23 @@ ruby_xml_node_child_set(VALUE self, VALUE rnode) {
|
|
392
374
|
*/
|
393
375
|
VALUE
|
394
376
|
ruby_xml_node_child_add(VALUE self, VALUE rnode) {
|
395
|
-
return ruby_xml_node_child_set_aux(self,rnode
|
377
|
+
return ruby_xml_node_child_set_aux(self, rnode);
|
396
378
|
}
|
397
379
|
|
398
380
|
/*
|
399
381
|
* call-seq:
|
400
|
-
* node.doc
|
382
|
+
* node.doc -> document
|
401
383
|
*
|
402
384
|
* Obtain the XML::Document this node belongs to.
|
403
385
|
*/
|
404
386
|
VALUE
|
405
387
|
ruby_xml_node_doc(VALUE self) {
|
406
|
-
|
388
|
+
xmlNodePtr xnode;
|
407
389
|
xmlDocPtr doc=NULL;
|
408
390
|
|
409
|
-
Data_Get_Struct(self,
|
391
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
410
392
|
|
411
|
-
switch (
|
393
|
+
switch (xnode->type) {
|
412
394
|
case XML_DOCUMENT_NODE:
|
413
395
|
#ifdef LIBXML_DOCB_ENABLED
|
414
396
|
case XML_DOCB_DOCUMENT_NODE:
|
@@ -418,7 +400,7 @@ ruby_xml_node_doc(VALUE self) {
|
|
418
400
|
break;
|
419
401
|
case XML_ATTRIBUTE_NODE:
|
420
402
|
{
|
421
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
403
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
422
404
|
doc = attr->doc;
|
423
405
|
break;
|
424
406
|
}
|
@@ -426,7 +408,7 @@ ruby_xml_node_doc(VALUE self) {
|
|
426
408
|
doc = NULL;
|
427
409
|
break;
|
428
410
|
default:
|
429
|
-
doc =
|
411
|
+
doc = xnode->doc;
|
430
412
|
break;
|
431
413
|
}
|
432
414
|
|
@@ -442,16 +424,16 @@ ruby_xml_node_doc(VALUE self) {
|
|
442
424
|
|
443
425
|
/*
|
444
426
|
* call-seq:
|
445
|
-
* node.docbook?
|
427
|
+
* node.docbook? -> (true|false)
|
446
428
|
*
|
447
429
|
* Determine whether this is a docbook node.
|
448
430
|
*/
|
449
431
|
VALUE
|
450
432
|
ruby_xml_node_docbook_doc_q(VALUE self) {
|
451
433
|
#ifdef LIBXML_DOCB_ENABLED
|
452
|
-
|
453
|
-
Data_Get_Struct(self,
|
454
|
-
if (
|
434
|
+
xmlNodePtr xnode;
|
435
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
436
|
+
if (xnode->type == XML_DOCB_DOCUMENT_NODE)
|
455
437
|
return(Qtrue);
|
456
438
|
else
|
457
439
|
return(Qfalse);
|
@@ -464,15 +446,15 @@ ruby_xml_node_docbook_doc_q(VALUE self) {
|
|
464
446
|
|
465
447
|
/*
|
466
448
|
* call-seq:
|
467
|
-
* node.doctype?
|
449
|
+
* node.doctype? -> (true|false)
|
468
450
|
*
|
469
451
|
* Determine whether this is a DOCTYPE node.
|
470
452
|
*/
|
471
453
|
VALUE
|
472
454
|
ruby_xml_node_doctype_q(VALUE self) {
|
473
|
-
|
474
|
-
Data_Get_Struct(self,
|
475
|
-
if (
|
455
|
+
xmlNodePtr xnode;
|
456
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
457
|
+
if (xnode->type == XML_DOCUMENT_TYPE_NODE)
|
476
458
|
return(Qtrue);
|
477
459
|
else
|
478
460
|
return(Qfalse);
|
@@ -481,15 +463,15 @@ ruby_xml_node_doctype_q(VALUE self) {
|
|
481
463
|
|
482
464
|
/*
|
483
465
|
* call-seq:
|
484
|
-
* node.document?
|
466
|
+
* node.document? -> (true|false)
|
485
467
|
*
|
486
468
|
* Determine whether this is a document node.
|
487
469
|
*/
|
488
470
|
VALUE
|
489
471
|
ruby_xml_node_document_q(VALUE self) {
|
490
|
-
|
491
|
-
Data_Get_Struct(self,
|
492
|
-
if (
|
472
|
+
xmlNodePtr xnode;
|
473
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
474
|
+
if (xnode->type == XML_DOCUMENT_NODE)
|
493
475
|
return(Qtrue);
|
494
476
|
else
|
495
477
|
return(Qfalse);
|
@@ -498,15 +480,15 @@ ruby_xml_node_document_q(VALUE self) {
|
|
498
480
|
|
499
481
|
/*
|
500
482
|
* call-seq:
|
501
|
-
* node.dtd?
|
483
|
+
* node.dtd? -> (true|false)
|
502
484
|
*
|
503
485
|
* Determine whether this is a DTD node.
|
504
486
|
*/
|
505
487
|
VALUE
|
506
488
|
ruby_xml_node_dtd_q(VALUE self) {
|
507
|
-
|
508
|
-
Data_Get_Struct(self,
|
509
|
-
if (
|
489
|
+
xmlNodePtr xnode;
|
490
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
491
|
+
if (xnode->type == XML_DTD_NODE)
|
510
492
|
return(Qtrue);
|
511
493
|
else
|
512
494
|
return(Qfalse);
|
@@ -515,22 +497,22 @@ ruby_xml_node_dtd_q(VALUE self) {
|
|
515
497
|
|
516
498
|
/*
|
517
499
|
* call-seq:
|
518
|
-
* node.dump
|
500
|
+
* node.dump -> (true|nil)
|
519
501
|
*
|
520
502
|
* Dump this node to stdout.
|
521
503
|
*/
|
522
504
|
VALUE
|
523
505
|
ruby_xml_node_dump(VALUE self) {
|
524
|
-
|
506
|
+
xmlNodePtr xnode;
|
525
507
|
xmlBufferPtr buf;
|
526
508
|
|
527
|
-
Data_Get_Struct(self,
|
509
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
528
510
|
|
529
|
-
if (
|
511
|
+
if (xnode->doc == NULL)
|
530
512
|
return(Qnil);
|
531
513
|
|
532
514
|
buf = xmlBufferCreate();
|
533
|
-
xmlNodeDump(buf,
|
515
|
+
xmlNodeDump(buf, xnode->doc, xnode, 0, 1);
|
534
516
|
xmlBufferDump(stdout, buf);
|
535
517
|
xmlBufferFree(buf);
|
536
518
|
return(Qtrue);
|
@@ -539,35 +521,35 @@ ruby_xml_node_dump(VALUE self) {
|
|
539
521
|
|
540
522
|
/*
|
541
523
|
* call-seq:
|
542
|
-
* node.debug_dump
|
524
|
+
* node.debug_dump -> (true|nil)
|
543
525
|
*
|
544
526
|
* Dump this node to stdout, including any debugging
|
545
527
|
* information.
|
546
528
|
*/
|
547
529
|
VALUE
|
548
530
|
ruby_xml_node_debug_dump(VALUE self) {
|
549
|
-
|
550
|
-
Data_Get_Struct(self,
|
531
|
+
xmlNodePtr xnode;
|
532
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
551
533
|
|
552
|
-
if (
|
534
|
+
if (xnode->doc == NULL)
|
553
535
|
return(Qnil);
|
554
536
|
|
555
|
-
xmlElemDump(stdout,
|
537
|
+
xmlElemDump(stdout, xnode->doc, xnode);
|
556
538
|
return(Qtrue);
|
557
539
|
}
|
558
540
|
|
559
541
|
|
560
542
|
/*
|
561
543
|
* call-seq:
|
562
|
-
* node.element?
|
544
|
+
* node.element? -> (true|false)
|
563
545
|
*
|
564
546
|
* Determine whether this is an element node.
|
565
547
|
*/
|
566
548
|
VALUE
|
567
549
|
ruby_xml_node_element_q(VALUE self) {
|
568
|
-
|
569
|
-
Data_Get_Struct(self,
|
570
|
-
if (
|
550
|
+
xmlNodePtr xnode;
|
551
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
552
|
+
if (xnode->type == XML_ELEMENT_NODE)
|
571
553
|
return(Qtrue);
|
572
554
|
else
|
573
555
|
return(Qfalse);
|
@@ -576,15 +558,15 @@ ruby_xml_node_element_q(VALUE self) {
|
|
576
558
|
|
577
559
|
/*
|
578
560
|
* call-seq:
|
579
|
-
* node.element_decl?
|
561
|
+
* node.element_decl? -> (true|false)
|
580
562
|
*
|
581
563
|
* Determine whether this is an element declaration node.
|
582
564
|
*/
|
583
565
|
VALUE
|
584
566
|
ruby_xml_node_element_decl_q(VALUE self) {
|
585
|
-
|
586
|
-
Data_Get_Struct(self,
|
587
|
-
if (
|
567
|
+
xmlNodePtr xnode;
|
568
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
569
|
+
if (xnode->type == XML_ELEMENT_DECL)
|
588
570
|
return(Qtrue);
|
589
571
|
else
|
590
572
|
return(Qfalse);
|
@@ -593,32 +575,32 @@ ruby_xml_node_element_decl_q(VALUE self) {
|
|
593
575
|
|
594
576
|
/*
|
595
577
|
* call-seq:
|
596
|
-
* node.empty?
|
578
|
+
* node.empty? -> (true|false)
|
597
579
|
*
|
598
580
|
* Determine whether this node is empty.
|
599
581
|
*/
|
600
582
|
VALUE
|
601
583
|
ruby_xml_node_empty_q(VALUE self) {
|
602
|
-
|
603
|
-
Data_Get_Struct(self,
|
604
|
-
if (
|
584
|
+
xmlNodePtr xnode;
|
585
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
586
|
+
if (xnode == NULL)
|
605
587
|
return(Qnil);
|
606
588
|
|
607
|
-
return((xmlIsBlankNode(
|
589
|
+
return((xmlIsBlankNode(xnode) == 1) ? Qtrue : Qfalse);
|
608
590
|
}
|
609
591
|
|
610
592
|
|
611
593
|
/*
|
612
594
|
* call-seq:
|
613
|
-
* node.entity?
|
595
|
+
* node.entity? -> (true|false)
|
614
596
|
*
|
615
597
|
* Determine whether this is an entity node.
|
616
598
|
*/
|
617
599
|
VALUE
|
618
600
|
ruby_xml_node_entity_q(VALUE self) {
|
619
|
-
|
620
|
-
Data_Get_Struct(self,
|
621
|
-
if (
|
601
|
+
xmlNodePtr xnode;
|
602
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
603
|
+
if (xnode->type == XML_ENTITY_NODE)
|
622
604
|
return(Qtrue);
|
623
605
|
else
|
624
606
|
return(Qfalse);
|
@@ -627,15 +609,15 @@ ruby_xml_node_entity_q(VALUE self) {
|
|
627
609
|
|
628
610
|
/*
|
629
611
|
* call-seq:
|
630
|
-
* node.entity_ref?
|
612
|
+
* node.entity_ref? -> (true|false)
|
631
613
|
*
|
632
614
|
* Determine whether this is an entity reference node.
|
633
615
|
*/
|
634
616
|
VALUE
|
635
617
|
ruby_xml_node_entity_ref_q(VALUE self) {
|
636
|
-
|
637
|
-
Data_Get_Struct(self,
|
638
|
-
if (
|
618
|
+
xmlNodePtr xnode;
|
619
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
620
|
+
if (xnode->type == XML_ENTITY_REF_NODE)
|
639
621
|
return(Qtrue);
|
640
622
|
else
|
641
623
|
return(Qfalse);
|
@@ -647,26 +629,26 @@ VALUE ruby_xml_node_to_s(VALUE self);
|
|
647
629
|
* call-seq:
|
648
630
|
* node.eql?(other_node) => (true|false)
|
649
631
|
*
|
650
|
-
* Test equality between the two nodes.
|
651
|
-
*
|
652
|
-
*/
|
632
|
+
* Test equality between the two nodes. Two nodes are equal
|
633
|
+
* if they are the same node or have the same XML representation.*/
|
653
634
|
VALUE
|
654
635
|
ruby_xml_node_eql_q(VALUE self, VALUE other) {
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
636
|
+
if (self == other)
|
637
|
+
{
|
638
|
+
return Qtrue;
|
639
|
+
}
|
640
|
+
else
|
641
|
+
{
|
642
|
+
VALUE self_xml = ruby_xml_node_to_s(self);
|
643
|
+
VALUE other_xml = ruby_xml_node_to_s(other);
|
644
|
+
return(rb_funcall(self_xml, rb_intern("=="), 1, other_xml));
|
645
|
+
}
|
664
646
|
}
|
665
647
|
|
666
648
|
|
667
649
|
/*
|
668
650
|
* call-seq:
|
669
|
-
* node.find(xpath_expr, namespace = [any])
|
651
|
+
* node.find(xpath_expr, namespace = [any]) -> nodeset
|
670
652
|
*
|
671
653
|
* Find nodes matching the specified xpath expression, optionally
|
672
654
|
* using the specified namespaces. Returns an XML::Node::Set.
|
@@ -681,7 +663,7 @@ ruby_xml_node_find(int argc, VALUE *argv, VALUE self) {
|
|
681
663
|
|
682
664
|
/*
|
683
665
|
* call-seq:
|
684
|
-
* node.find_first(xpath_expr, namespace = [any])
|
666
|
+
* node.find_first(xpath_expr, namespace = [any]) -> nodeset
|
685
667
|
*
|
686
668
|
* Find the first node matching the specified xpath expression, optionally
|
687
669
|
* using the specified namespaces. Returns an XML::Node.
|
@@ -694,49 +676,32 @@ ruby_xml_node_find_first(int argc, VALUE *argv, VALUE self) {
|
|
694
676
|
|
695
677
|
/*
|
696
678
|
* call-seq:
|
697
|
-
* node.fragment?
|
679
|
+
* node.fragment? -> (true|false)
|
698
680
|
*
|
699
681
|
* Determine whether this node is a fragment.
|
700
682
|
*/
|
701
683
|
VALUE
|
702
684
|
ruby_xml_node_fragment_q(VALUE self) {
|
703
|
-
|
704
|
-
Data_Get_Struct(self,
|
705
|
-
if (
|
685
|
+
xmlNodePtr xnode;
|
686
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
687
|
+
if (xnode->type == XML_DOCUMENT_FRAG_NODE)
|
706
688
|
return(Qtrue);
|
707
689
|
else
|
708
690
|
return(Qfalse);
|
709
691
|
}
|
710
692
|
|
711
|
-
/*
|
712
|
-
* call-seq:
|
713
|
-
* node.hash => fixnum
|
714
|
-
*
|
715
|
-
* Returns the hash-code for this node. This is the hash of the XML
|
716
|
-
* representation in order to be consistent with eql.
|
717
|
-
*/
|
718
|
-
VALUE
|
719
|
-
ruby_xml_node_hash(VALUE self) {
|
720
|
-
ruby_xml_node *rxn;
|
721
|
-
VALUE thisxml;
|
722
|
-
Data_Get_Struct(self, ruby_xml_node, rxn);
|
723
|
-
thisxml = ruby_xml_node_to_s(self);
|
724
|
-
|
725
|
-
return(rb_funcall(thisxml, rb_intern("hash"), 0));
|
726
|
-
}
|
727
|
-
|
728
693
|
|
729
694
|
/*
|
730
695
|
* call-seq:
|
731
|
-
* node.html_doc?
|
696
|
+
* node.html_doc? -> (true|false)
|
732
697
|
*
|
733
698
|
* Determine whether this node is an html document node.
|
734
699
|
*/
|
735
700
|
VALUE
|
736
701
|
ruby_xml_node_html_doc_q(VALUE self) {
|
737
|
-
|
738
|
-
Data_Get_Struct(self,
|
739
|
-
if (
|
702
|
+
xmlNodePtr xnode;
|
703
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
704
|
+
if (xnode->type == XML_HTML_DOCUMENT_NODE)
|
740
705
|
return(Qtrue);
|
741
706
|
else
|
742
707
|
return(Qfalse);
|
@@ -744,7 +709,7 @@ ruby_xml_node_html_doc_q(VALUE self) {
|
|
744
709
|
|
745
710
|
/*
|
746
711
|
* call-seq:
|
747
|
-
* XML::Node.new_cdata(content = nil)
|
712
|
+
* XML::Node.new_cdata(content = nil) -> node
|
748
713
|
*
|
749
714
|
* Create a new #CDATA node, optionally setting
|
750
715
|
* the node's content.
|
@@ -780,7 +745,7 @@ ruby_xml_node_new_cdata(int argc, VALUE *argv, VALUE class) {
|
|
780
745
|
|
781
746
|
/*
|
782
747
|
* call-seq:
|
783
|
-
* XML::Node.new_comment(content = nil)
|
748
|
+
* XML::Node.new_comment(content = nil) -> node
|
784
749
|
*
|
785
750
|
* Create a new comment node, optionally setting
|
786
751
|
* the node's content.
|
@@ -818,19 +783,19 @@ ruby_xml_node_new_comment(int argc, VALUE *argv, VALUE class) {
|
|
818
783
|
|
819
784
|
/*
|
820
785
|
* call-seq:
|
821
|
-
* node.lang
|
786
|
+
* node.lang -> "string"
|
822
787
|
*
|
823
788
|
* Obtain the language set for this node, if any.
|
824
789
|
* This is set in XML via the xml:lang attribute.
|
825
790
|
*/
|
826
791
|
VALUE
|
827
792
|
ruby_xml_node_lang_get(VALUE self) {
|
828
|
-
|
793
|
+
xmlNodePtr xnode;
|
829
794
|
xmlChar *lang;
|
830
795
|
VALUE result = Qnil;
|
831
796
|
|
832
|
-
Data_Get_Struct(self,
|
833
|
-
lang = xmlNodeGetLang(
|
797
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
798
|
+
lang = xmlNodeGetLang(xnode);
|
834
799
|
|
835
800
|
if (lang) {
|
836
801
|
result = rb_str_new2((const char*)lang);
|
@@ -852,11 +817,11 @@ ruby_xml_node_lang_get(VALUE self) {
|
|
852
817
|
*/
|
853
818
|
VALUE
|
854
819
|
ruby_xml_node_lang_set(VALUE self, VALUE lang) {
|
855
|
-
|
820
|
+
xmlNodePtr xnode;
|
856
821
|
|
857
822
|
Check_Type(lang, T_STRING);
|
858
|
-
Data_Get_Struct(self,
|
859
|
-
xmlNodeSetLang(
|
823
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
824
|
+
xmlNodeSetLang(xnode, (xmlChar*)StringValuePtr(lang));
|
860
825
|
|
861
826
|
return(Qtrue);
|
862
827
|
}
|
@@ -864,18 +829,18 @@ ruby_xml_node_lang_set(VALUE self, VALUE lang) {
|
|
864
829
|
|
865
830
|
/*
|
866
831
|
* call-seq:
|
867
|
-
* node.last
|
832
|
+
* node.last -> node
|
868
833
|
*
|
869
834
|
* Obtain the last child node of this node, if any.
|
870
835
|
*/
|
871
836
|
VALUE
|
872
837
|
ruby_xml_node_last_get(VALUE self) {
|
873
|
-
|
838
|
+
xmlNodePtr xnode;
|
874
839
|
xmlNodePtr node;
|
875
840
|
|
876
|
-
Data_Get_Struct(self,
|
841
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
877
842
|
|
878
|
-
switch (
|
843
|
+
switch (xnode->type) {
|
879
844
|
case XML_ELEMENT_NODE:
|
880
845
|
case XML_ENTITY_REF_NODE:
|
881
846
|
case XML_ENTITY_NODE:
|
@@ -887,11 +852,11 @@ ruby_xml_node_last_get(VALUE self) {
|
|
887
852
|
#endif
|
888
853
|
case XML_HTML_DOCUMENT_NODE:
|
889
854
|
case XML_DTD_NODE:
|
890
|
-
node =
|
855
|
+
node = xnode->last;
|
891
856
|
break;
|
892
857
|
case XML_ATTRIBUTE_NODE:
|
893
858
|
{
|
894
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
859
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
895
860
|
node = attr->last;
|
896
861
|
}
|
897
862
|
default:
|
@@ -908,18 +873,18 @@ ruby_xml_node_last_get(VALUE self) {
|
|
908
873
|
|
909
874
|
/*
|
910
875
|
* call-seq:
|
911
|
-
* node.last?
|
876
|
+
* node.last? -> (true|false)
|
912
877
|
*
|
913
878
|
* Determine whether this node has a last child node.
|
914
879
|
*/
|
915
880
|
VALUE
|
916
881
|
ruby_xml_node_last_q(VALUE self) {
|
917
|
-
|
882
|
+
xmlNodePtr xnode;
|
918
883
|
xmlNodePtr node;
|
919
884
|
|
920
|
-
Data_Get_Struct(self,
|
885
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
921
886
|
|
922
|
-
switch (
|
887
|
+
switch (xnode->type) {
|
923
888
|
case XML_ELEMENT_NODE:
|
924
889
|
case XML_ENTITY_REF_NODE:
|
925
890
|
case XML_ENTITY_NODE:
|
@@ -931,11 +896,11 @@ ruby_xml_node_last_q(VALUE self) {
|
|
931
896
|
#endif
|
932
897
|
case XML_HTML_DOCUMENT_NODE:
|
933
898
|
case XML_DTD_NODE:
|
934
|
-
node =
|
899
|
+
node = xnode->last;
|
935
900
|
break;
|
936
901
|
case XML_ATTRIBUTE_NODE:
|
937
902
|
{
|
938
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
903
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
939
904
|
node = attr->last;
|
940
905
|
}
|
941
906
|
default:
|
@@ -952,7 +917,7 @@ ruby_xml_node_last_q(VALUE self) {
|
|
952
917
|
|
953
918
|
/*
|
954
919
|
* call-seq:
|
955
|
-
* node.line_num
|
920
|
+
* node.line_num -> num
|
956
921
|
*
|
957
922
|
* Obtain the line number (in the XML document) that this
|
958
923
|
* node was read from. If +default_line_numbers+ is set
|
@@ -960,14 +925,14 @@ ruby_xml_node_last_q(VALUE self) {
|
|
960
925
|
*/
|
961
926
|
VALUE
|
962
927
|
ruby_xml_node_line_num(VALUE self) {
|
963
|
-
|
928
|
+
xmlNodePtr xnode;
|
964
929
|
long line_num;
|
965
|
-
Data_Get_Struct(self,
|
930
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
966
931
|
|
967
932
|
if (!xmlLineNumbersDefaultValue)
|
968
933
|
rb_warn("Line numbers were not retained: use XML::Parser::default_line_numbers=true");
|
969
934
|
|
970
|
-
line_num = xmlGetLineNo(
|
935
|
+
line_num = xmlGetLineNo(xnode);
|
971
936
|
if (line_num == -1)
|
972
937
|
return(Qnil);
|
973
938
|
else
|
@@ -977,17 +942,17 @@ ruby_xml_node_line_num(VALUE self) {
|
|
977
942
|
|
978
943
|
/*
|
979
944
|
* call-seq:
|
980
|
-
* node.xlink?
|
945
|
+
* node.xlink? -> (true|false)
|
981
946
|
*
|
982
947
|
* Determine whether this node is an xlink node.
|
983
948
|
*/
|
984
949
|
VALUE
|
985
950
|
ruby_xml_node_xlink_q(VALUE self) {
|
986
|
-
|
951
|
+
xmlNodePtr xnode;
|
987
952
|
xlinkType xlt;
|
988
953
|
|
989
|
-
Data_Get_Struct(self,
|
990
|
-
xlt = xlinkIsLink(
|
954
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
955
|
+
xlt = xlinkIsLink(xnode->doc, xnode);
|
991
956
|
|
992
957
|
if (xlt == XLINK_TYPE_NONE)
|
993
958
|
return(Qfalse);
|
@@ -998,7 +963,7 @@ ruby_xml_node_xlink_q(VALUE self) {
|
|
998
963
|
|
999
964
|
/*
|
1000
965
|
* call-seq:
|
1001
|
-
* node.xlink_type
|
966
|
+
* node.xlink_type -> num
|
1002
967
|
*
|
1003
968
|
* Obtain the type identifier for this xlink, if applicable.
|
1004
969
|
* If this is not an xlink node (see +xlink?+), will return
|
@@ -1006,11 +971,11 @@ ruby_xml_node_xlink_q(VALUE self) {
|
|
1006
971
|
*/
|
1007
972
|
VALUE
|
1008
973
|
ruby_xml_node_xlink_type(VALUE self) {
|
1009
|
-
|
974
|
+
xmlNodePtr xnode;
|
1010
975
|
xlinkType xlt;
|
1011
976
|
|
1012
|
-
Data_Get_Struct(self,
|
1013
|
-
xlt = xlinkIsLink(
|
977
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
978
|
+
xlt = xlinkIsLink(xnode->doc, xnode);
|
1014
979
|
|
1015
980
|
if (xlt == XLINK_TYPE_NONE)
|
1016
981
|
return(Qnil);
|
@@ -1021,7 +986,7 @@ ruby_xml_node_xlink_type(VALUE self) {
|
|
1021
986
|
|
1022
987
|
/*
|
1023
988
|
* call-seq:
|
1024
|
-
* node.xlink_type_name
|
989
|
+
* node.xlink_type_name -> "string"
|
1025
990
|
*
|
1026
991
|
* Obtain the type name for this xlink, if applicable.
|
1027
992
|
* If this is not an xlink node (see +xlink?+), will return
|
@@ -1029,11 +994,11 @@ ruby_xml_node_xlink_type(VALUE self) {
|
|
1029
994
|
*/
|
1030
995
|
VALUE
|
1031
996
|
ruby_xml_node_xlink_type_name(VALUE self) {
|
1032
|
-
|
997
|
+
xmlNodePtr xnode;
|
1033
998
|
xlinkType xlt;
|
1034
999
|
|
1035
|
-
Data_Get_Struct(self,
|
1036
|
-
xlt = xlinkIsLink(
|
1000
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1001
|
+
xlt = xlinkIsLink(xnode->doc, xnode);
|
1037
1002
|
|
1038
1003
|
switch(xlt) {
|
1039
1004
|
case XLINK_TYPE_NONE:
|
@@ -1051,46 +1016,46 @@ ruby_xml_node_xlink_type_name(VALUE self) {
|
|
1051
1016
|
|
1052
1017
|
/*
|
1053
1018
|
* call-seq:
|
1054
|
-
* node.name
|
1019
|
+
* node.name -> "string"
|
1055
1020
|
*
|
1056
1021
|
* Obtain this node's name.
|
1057
1022
|
*/
|
1058
1023
|
VALUE
|
1059
1024
|
ruby_xml_node_name_get(VALUE self) {
|
1060
|
-
|
1025
|
+
xmlNodePtr xnode;
|
1061
1026
|
const xmlChar *name;
|
1062
1027
|
|
1063
|
-
Data_Get_Struct(self,
|
1028
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1064
1029
|
|
1065
|
-
switch (
|
1030
|
+
switch (xnode->type) {
|
1066
1031
|
case XML_DOCUMENT_NODE:
|
1067
1032
|
#ifdef LIBXML_DOCB_ENABLED
|
1068
1033
|
case XML_DOCB_DOCUMENT_NODE:
|
1069
1034
|
#endif
|
1070
1035
|
case XML_HTML_DOCUMENT_NODE:
|
1071
1036
|
{
|
1072
|
-
xmlDocPtr doc = (xmlDocPtr)
|
1037
|
+
xmlDocPtr doc = (xmlDocPtr) xnode;
|
1073
1038
|
name = doc->URL;
|
1074
1039
|
break;
|
1075
1040
|
}
|
1076
1041
|
case XML_ATTRIBUTE_NODE:
|
1077
1042
|
{
|
1078
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
1043
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
1079
1044
|
name = attr->name;
|
1080
1045
|
break;
|
1081
1046
|
}
|
1082
1047
|
case XML_NAMESPACE_DECL:
|
1083
1048
|
{
|
1084
|
-
xmlNsPtr ns = (xmlNsPtr)
|
1049
|
+
xmlNsPtr ns = (xmlNsPtr) xnode;
|
1085
1050
|
name = ns->prefix;
|
1086
1051
|
break;
|
1087
1052
|
}
|
1088
1053
|
default:
|
1089
|
-
name =
|
1054
|
+
name = xnode->name;
|
1090
1055
|
break;
|
1091
1056
|
}
|
1092
1057
|
|
1093
|
-
if (
|
1058
|
+
if (xnode->name == NULL)
|
1094
1059
|
return(Qnil);
|
1095
1060
|
else
|
1096
1061
|
return(rb_str_new2((const char*)name));
|
@@ -1105,40 +1070,40 @@ ruby_xml_node_name_get(VALUE self) {
|
|
1105
1070
|
*/
|
1106
1071
|
VALUE
|
1107
1072
|
ruby_xml_node_name_set(VALUE self, VALUE name) {
|
1108
|
-
|
1073
|
+
xmlNodePtr xnode;
|
1109
1074
|
|
1110
1075
|
Check_Type(name, T_STRING);
|
1111
|
-
Data_Get_Struct(self,
|
1112
|
-
xmlNodeSetName(
|
1076
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1077
|
+
xmlNodeSetName(xnode, (xmlChar*)StringValuePtr(name));
|
1113
1078
|
return(Qtrue);
|
1114
1079
|
}
|
1115
1080
|
|
1116
1081
|
|
1117
1082
|
/*
|
1118
1083
|
* call-seq:
|
1119
|
-
* node.namespace
|
1084
|
+
* node.namespace -> [namespace, ..., namespace]
|
1120
1085
|
*
|
1121
1086
|
* Obtain an array of +XML::NS+ objects representing
|
1122
1087
|
* this node's xmlns attributes
|
1123
1088
|
*/
|
1124
1089
|
VALUE
|
1125
1090
|
ruby_xml_node_namespace_get(VALUE self) {
|
1126
|
-
|
1091
|
+
xmlNodePtr xnode;
|
1127
1092
|
xmlNsPtr *nsList, *cur;
|
1128
1093
|
VALUE arr, ns;
|
1129
1094
|
|
1130
|
-
Data_Get_Struct(self,
|
1131
|
-
if (
|
1095
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1096
|
+
if (xnode == NULL)
|
1132
1097
|
return(Qnil);
|
1133
1098
|
|
1134
|
-
nsList = xmlGetNsList(
|
1099
|
+
nsList = xmlGetNsList(xnode->doc, xnode);
|
1135
1100
|
|
1136
1101
|
if (nsList == NULL)
|
1137
1102
|
return(Qnil);
|
1138
1103
|
|
1139
1104
|
arr = rb_ary_new();
|
1140
1105
|
for (cur = nsList; *cur != NULL; cur++) {
|
1141
|
-
ns =
|
1106
|
+
ns = ruby_xml_ns_wrap(*cur);
|
1142
1107
|
if (ns == Qnil)
|
1143
1108
|
continue;
|
1144
1109
|
else
|
@@ -1152,21 +1117,19 @@ ruby_xml_node_namespace_get(VALUE self) {
|
|
1152
1117
|
|
1153
1118
|
/*
|
1154
1119
|
* call-seq:
|
1155
|
-
* node.namespace_node
|
1120
|
+
* node.namespace_node -> namespace.
|
1156
1121
|
*
|
1157
1122
|
* Obtain this node's namespace node.
|
1158
1123
|
*/
|
1159
1124
|
VALUE
|
1160
1125
|
ruby_xml_node_namespace_get_node(VALUE self) {
|
1161
|
-
|
1126
|
+
xmlNodePtr xnode;
|
1162
1127
|
|
1163
|
-
Data_Get_Struct(self,
|
1164
|
-
if (
|
1128
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1129
|
+
if (xnode->ns == NULL)
|
1165
1130
|
return(Qnil);
|
1166
1131
|
else
|
1167
|
-
return
|
1168
|
-
ruby_xml_document_wrap(node->node->doc),
|
1169
|
-
node->node->ns);
|
1132
|
+
return ruby_xml_ns_wrap(xnode->ns);
|
1170
1133
|
}
|
1171
1134
|
|
1172
1135
|
// TODO namespace_set can take varargs (in fact, must if used
|
@@ -1185,12 +1148,11 @@ ruby_xml_node_namespace_get_node(VALUE self) {
|
|
1185
1148
|
VALUE
|
1186
1149
|
ruby_xml_node_namespace_set(int argc, VALUE *argv, VALUE self) {
|
1187
1150
|
VALUE rns, rprefix;
|
1188
|
-
|
1189
|
-
|
1190
|
-
xmlNsPtr ns;
|
1151
|
+
xmlNodePtr xnode;
|
1152
|
+
xmlNsPtr xns;
|
1191
1153
|
char *cp, *href;
|
1192
1154
|
|
1193
|
-
Data_Get_Struct(self,
|
1155
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1194
1156
|
switch (argc) {
|
1195
1157
|
case 1:
|
1196
1158
|
rns = argv[0];
|
@@ -1204,8 +1166,8 @@ ruby_xml_node_namespace_set(int argc, VALUE *argv, VALUE self) {
|
|
1204
1166
|
href = &cp[1]; /* skip the : */
|
1205
1167
|
}
|
1206
1168
|
} else if (rb_obj_is_kind_of(rns, cXMLNS) == Qtrue) {
|
1207
|
-
Data_Get_Struct(self,
|
1208
|
-
xmlSetNs(
|
1169
|
+
Data_Get_Struct(self, xmlNs, xns);
|
1170
|
+
xmlSetNs(xnode, xns);
|
1209
1171
|
return(rns);
|
1210
1172
|
} else
|
1211
1173
|
rb_raise(rb_eTypeError, "must pass a string or an XML::Ns object");
|
@@ -1220,11 +1182,11 @@ ruby_xml_node_namespace_set(int argc, VALUE *argv, VALUE self) {
|
|
1220
1182
|
href = StringValuePtr(argv[1]);
|
1221
1183
|
}
|
1222
1184
|
|
1223
|
-
|
1224
|
-
if (
|
1185
|
+
xns = xmlNewNs(xnode, (xmlChar*)href, (xmlChar*)StringValuePtr(rprefix));
|
1186
|
+
if (xns == NULL)
|
1225
1187
|
rb_raise(eXMLNodeSetNamespace, "unable to set the namespace");
|
1226
1188
|
else
|
1227
|
-
return
|
1189
|
+
return ruby_xml_ns_wrap(xns);
|
1228
1190
|
break;
|
1229
1191
|
|
1230
1192
|
default:
|
@@ -1238,16 +1200,16 @@ ruby_xml_node_namespace_set(int argc, VALUE *argv, VALUE self) {
|
|
1238
1200
|
|
1239
1201
|
/*
|
1240
1202
|
* call-seq:
|
1241
|
-
* node.namespace?
|
1203
|
+
* node.namespace? -> (true|false)
|
1242
1204
|
*
|
1243
1205
|
* Determine whether this node *is* (not has) a namespace
|
1244
1206
|
* node.
|
1245
1207
|
*/
|
1246
1208
|
VALUE
|
1247
1209
|
ruby_xml_node_namespace_q(VALUE self) {
|
1248
|
-
|
1249
|
-
Data_Get_Struct(self,
|
1250
|
-
if (
|
1210
|
+
xmlNodePtr xnode;
|
1211
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1212
|
+
if (xnode->type == XML_NAMESPACE_DECL)
|
1251
1213
|
return(Qtrue);
|
1252
1214
|
else
|
1253
1215
|
return(Qfalse);
|
@@ -1265,71 +1227,64 @@ ruby_xml_node_namespace_q(VALUE self) {
|
|
1265
1227
|
* If the xmlNode has no parent or document, then call xmlFree.
|
1266
1228
|
*/
|
1267
1229
|
void
|
1268
|
-
ruby_xml_node2_free(
|
1269
|
-
|
1270
|
-
if (rxn == NULL ) return;
|
1230
|
+
ruby_xml_node2_free(xmlNodePtr xnode) {
|
1271
1231
|
|
1272
|
-
if (
|
1273
|
-
|
1232
|
+
if (xnode != NULL) {
|
1233
|
+
xnode->_private=NULL;
|
1274
1234
|
|
1275
|
-
if (
|
1235
|
+
if (xnode->doc==NULL && xnode->parent==NULL) {
|
1276
1236
|
#ifdef NODE_DEBUG
|
1277
|
-
fprintf(stderr,"ruby_xml_node2_free ruby_xfree rxn=0x%x xn=0x%x o=0x%x\n",(long)rxn,(long)
|
1237
|
+
fprintf(stderr,"ruby_xml_node2_free ruby_xfree rxn=0x%x xn=0x%x o=0x%x\n",(long)rxn,(long)xnode,(long)xnode->_private);
|
1278
1238
|
#endif
|
1279
|
-
xmlFreeNode(
|
1239
|
+
xmlFreeNode(xnode);
|
1280
1240
|
}
|
1281
|
-
|
1282
|
-
rxn->node=NULL;
|
1283
1241
|
}
|
1284
|
-
|
1285
|
-
ruby_xfree(rxn);
|
1286
1242
|
}
|
1287
1243
|
|
1288
1244
|
void
|
1289
|
-
ruby_xml_node_mark_common(xmlNodePtr
|
1290
|
-
if (
|
1245
|
+
ruby_xml_node_mark_common(xmlNodePtr xnode) {
|
1246
|
+
if (xnode->parent == NULL ) {
|
1291
1247
|
#ifdef NODE_DEBUG
|
1292
1248
|
fprintf(stderr,"mark no parent r=0x%x *n=0x%x\n",rxn,node);
|
1293
1249
|
#endif
|
1294
|
-
} else if (
|
1295
|
-
if (
|
1250
|
+
} else if (xnode->doc != NULL ) {
|
1251
|
+
if (xnode->doc->_private == NULL) {
|
1296
1252
|
rb_bug("XmlNode Doc is not bound! (%s:%d)",
|
1297
1253
|
__FILE__,__LINE__);
|
1298
1254
|
}
|
1299
|
-
rb_gc_mark((VALUE)
|
1255
|
+
rb_gc_mark((VALUE)xnode->doc->_private);
|
1300
1256
|
} else {
|
1301
|
-
while (
|
1302
|
-
|
1303
|
-
if (
|
1257
|
+
while (xnode->parent != NULL )
|
1258
|
+
xnode = xnode->parent;
|
1259
|
+
if (xnode->_private == NULL )
|
1304
1260
|
rb_warning("XmlNode Root Parent is not bound! (%s:%d)",
|
1305
1261
|
__FILE__,__LINE__);
|
1306
1262
|
else {
|
1307
1263
|
#ifdef NODE_DEBUG
|
1308
1264
|
fprintf(stderr,"mark rxn=0x%x xn=0x%x o=0x%x doc=0x%x\n",(long)rxn,(long)node,(long)node->_private,node->doc);
|
1309
1265
|
#endif
|
1310
|
-
rb_gc_mark((VALUE)
|
1266
|
+
rb_gc_mark((VALUE)xnode->_private);
|
1311
1267
|
}
|
1312
1268
|
}
|
1313
1269
|
}
|
1314
1270
|
|
1315
1271
|
void
|
1316
|
-
ruby_xml_node2_mark(
|
1317
|
-
if (
|
1272
|
+
ruby_xml_node2_mark(xmlNodePtr xnode) {
|
1273
|
+
if (xnode == NULL ) return;
|
1318
1274
|
|
1319
|
-
if (
|
1275
|
+
if (xnode->_private == NULL ) {
|
1320
1276
|
rb_warning("XmlNode is not bound! (%s:%d)",
|
1321
1277
|
__FILE__,__LINE__);
|
1322
1278
|
return;
|
1323
1279
|
}
|
1324
1280
|
|
1325
|
-
ruby_xml_node_mark_common(
|
1281
|
+
ruby_xml_node_mark_common(xnode);
|
1326
1282
|
}
|
1327
1283
|
|
1328
1284
|
VALUE
|
1329
1285
|
ruby_xml_node2_wrap(VALUE class, xmlNodePtr xnode)
|
1330
1286
|
{
|
1331
1287
|
VALUE obj;
|
1332
|
-
ruby_xml_node *rxn;
|
1333
1288
|
|
1334
1289
|
// This node is already wrapped
|
1335
1290
|
if (xnode->_private != NULL) {
|
@@ -1340,10 +1295,10 @@ ruby_xml_node2_wrap(VALUE class, xmlNodePtr xnode)
|
|
1340
1295
|
return (VALUE)xnode->_private;
|
1341
1296
|
}
|
1342
1297
|
|
1343
|
-
obj=
|
1344
|
-
|
1298
|
+
obj=Data_Wrap_Struct(class,
|
1299
|
+
ruby_xml_node2_mark, ruby_xml_node2_free,
|
1300
|
+
xnode);
|
1345
1301
|
|
1346
|
-
rxn->node=xnode;
|
1347
1302
|
xnode->_private=(void*)obj;
|
1348
1303
|
#ifdef NODE_DEBUG
|
1349
1304
|
fprintf(stderr,"wrap rn=0x%x n*=0x%x d*=0x%x\n",
|
@@ -1365,8 +1320,7 @@ ruby_xml_node2_new_native(VALUE class, VALUE ns, VALUE name)
|
|
1365
1320
|
xnode=xmlNewNode(xns,(xmlChar*)StringValuePtr(name));
|
1366
1321
|
xnode->_private=NULL;
|
1367
1322
|
|
1368
|
-
obj=
|
1369
|
-
ruby_xml_node2_wrap(class,xnode);
|
1323
|
+
obj= ruby_xml_node2_wrap(class,xnode);
|
1370
1324
|
|
1371
1325
|
rb_obj_call_init(obj,0,NULL);
|
1372
1326
|
return obj;
|
@@ -1386,8 +1340,8 @@ ruby_xml_node2_new_string(VALUE class, VALUE ns, VALUE name, VALUE val)
|
|
1386
1340
|
}
|
1387
1341
|
/*
|
1388
1342
|
* call-seq:
|
1389
|
-
* XML::Node.new(name, content = nil)
|
1390
|
-
* XML::Node.new_element(name, content = nil)
|
1343
|
+
* XML::Node.new(name, content = nil) -> node
|
1344
|
+
* XML::Node.new_element(name, content = nil) -> node
|
1391
1345
|
*
|
1392
1346
|
* Create a new element node with the specified name, optionally setting
|
1393
1347
|
* the node's content.
|
@@ -1415,17 +1369,17 @@ ruby_xml_node2_new_string_bc(int argc, VALUE *argv, VALUE class)
|
|
1415
1369
|
|
1416
1370
|
/*
|
1417
1371
|
* call-seq:
|
1418
|
-
* node.next
|
1372
|
+
* node.next -> node
|
1419
1373
|
*
|
1420
1374
|
* Obtain the next sibling node, if any.
|
1421
1375
|
*/
|
1422
1376
|
VALUE
|
1423
1377
|
ruby_xml_node_next_get(VALUE self) {
|
1424
|
-
|
1378
|
+
xmlNodePtr xnode;
|
1425
1379
|
xmlNodePtr node;
|
1426
|
-
Data_Get_Struct(self,
|
1380
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1427
1381
|
|
1428
|
-
switch (
|
1382
|
+
switch (xnode->type) {
|
1429
1383
|
case XML_DOCUMENT_NODE:
|
1430
1384
|
#ifdef LIBXML_DOCB_ENABLED
|
1431
1385
|
case XML_DOCB_DOCUMENT_NODE:
|
@@ -1435,18 +1389,18 @@ ruby_xml_node_next_get(VALUE self) {
|
|
1435
1389
|
break;
|
1436
1390
|
case XML_ATTRIBUTE_NODE:
|
1437
1391
|
{
|
1438
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
1392
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
1439
1393
|
node = (xmlNodePtr) attr->next;
|
1440
1394
|
break;
|
1441
1395
|
}
|
1442
1396
|
case XML_NAMESPACE_DECL:
|
1443
1397
|
{
|
1444
|
-
xmlNsPtr ns = (xmlNsPtr)
|
1398
|
+
xmlNsPtr ns = (xmlNsPtr) xnode;
|
1445
1399
|
node = (xmlNodePtr) ns->next;
|
1446
1400
|
break;
|
1447
1401
|
}
|
1448
1402
|
default:
|
1449
|
-
node =
|
1403
|
+
node = xnode->next;
|
1450
1404
|
break;
|
1451
1405
|
}
|
1452
1406
|
|
@@ -1460,17 +1414,17 @@ ruby_xml_node_next_get(VALUE self) {
|
|
1460
1414
|
|
1461
1415
|
/*
|
1462
1416
|
* call-seq:
|
1463
|
-
* node.next?
|
1417
|
+
* node.next? -> (true|false)
|
1464
1418
|
*
|
1465
1419
|
* Determine whether this node has a next sibling.
|
1466
1420
|
*/
|
1467
1421
|
VALUE
|
1468
1422
|
ruby_xml_node_next_q(VALUE self) {
|
1469
|
-
|
1423
|
+
xmlNodePtr xnode;
|
1470
1424
|
xmlNodePtr node;
|
1471
|
-
Data_Get_Struct(self,
|
1425
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1472
1426
|
|
1473
|
-
switch (
|
1427
|
+
switch (xnode->type) {
|
1474
1428
|
case XML_DOCUMENT_NODE:
|
1475
1429
|
#ifdef LIBXML_DOCB_ENABLED
|
1476
1430
|
case XML_DOCB_DOCUMENT_NODE:
|
@@ -1480,18 +1434,18 @@ ruby_xml_node_next_q(VALUE self) {
|
|
1480
1434
|
break;
|
1481
1435
|
case XML_ATTRIBUTE_NODE:
|
1482
1436
|
{
|
1483
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
1437
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
1484
1438
|
node = (xmlNodePtr) attr->next;
|
1485
1439
|
break;
|
1486
1440
|
}
|
1487
1441
|
case XML_NAMESPACE_DECL:
|
1488
1442
|
{
|
1489
|
-
xmlNsPtr ns = (xmlNsPtr)
|
1443
|
+
xmlNsPtr ns = (xmlNsPtr) xnode;
|
1490
1444
|
node = (xmlNodePtr) ns->next;
|
1491
1445
|
break;
|
1492
1446
|
}
|
1493
1447
|
default:
|
1494
|
-
node =
|
1448
|
+
node = xnode->next;
|
1495
1449
|
break;
|
1496
1450
|
}
|
1497
1451
|
|
@@ -1510,16 +1464,15 @@ ruby_xml_node_next_q(VALUE self) {
|
|
1510
1464
|
*/
|
1511
1465
|
VALUE
|
1512
1466
|
ruby_xml_node_next_set(VALUE self, VALUE rnode) {
|
1513
|
-
|
1514
|
-
xmlNodePtr ret;
|
1467
|
+
xmlNodePtr cnode, pnode, ret;
|
1515
1468
|
|
1516
1469
|
if (rb_obj_is_kind_of(rnode, cXMLNode) == Qfalse)
|
1517
1470
|
rb_raise(rb_eTypeError, "Must pass an XML::Node object");
|
1518
1471
|
|
1519
|
-
Data_Get_Struct(self,
|
1520
|
-
Data_Get_Struct(rnode,
|
1472
|
+
Data_Get_Struct(self, xmlNode, pnode);
|
1473
|
+
Data_Get_Struct(rnode, xmlNode, cnode);
|
1521
1474
|
|
1522
|
-
ret = xmlAddNextSibling(pnode
|
1475
|
+
ret = xmlAddNextSibling(pnode, cnode);
|
1523
1476
|
if (ret == NULL)
|
1524
1477
|
rb_raise(eXMLNodeFailedModify, "unable to add a sibling to the document");
|
1525
1478
|
|
@@ -1529,15 +1482,15 @@ ruby_xml_node_next_set(VALUE self, VALUE rnode) {
|
|
1529
1482
|
|
1530
1483
|
/*
|
1531
1484
|
* call-seq:
|
1532
|
-
* node.notation?
|
1485
|
+
* node.notation? -> (true|false)
|
1533
1486
|
*
|
1534
1487
|
* Determine whether this is a notation node
|
1535
1488
|
*/
|
1536
1489
|
VALUE
|
1537
1490
|
ruby_xml_node_notation_q(VALUE self) {
|
1538
|
-
|
1539
|
-
Data_Get_Struct(self,
|
1540
|
-
if (
|
1491
|
+
xmlNodePtr xnode;
|
1492
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1493
|
+
if (xnode->type == XML_NOTATION_NODE)
|
1541
1494
|
return(Qtrue);
|
1542
1495
|
else
|
1543
1496
|
return(Qfalse);
|
@@ -1546,15 +1499,15 @@ ruby_xml_node_notation_q(VALUE self) {
|
|
1546
1499
|
|
1547
1500
|
/*
|
1548
1501
|
* call-seq:
|
1549
|
-
* node.ns?
|
1502
|
+
* node.ns? -> (true|false)
|
1550
1503
|
*
|
1551
1504
|
* Determine whether this node is a namespace node.
|
1552
1505
|
*/
|
1553
1506
|
VALUE
|
1554
1507
|
ruby_xml_node_ns_q(VALUE self) {
|
1555
|
-
|
1556
|
-
Data_Get_Struct(self,
|
1557
|
-
if (
|
1508
|
+
xmlNodePtr xnode;
|
1509
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1510
|
+
if (xnode->ns == NULL)
|
1558
1511
|
return(Qfalse);
|
1559
1512
|
else
|
1560
1513
|
return(Qtrue);
|
@@ -1563,33 +1516,33 @@ ruby_xml_node_ns_q(VALUE self) {
|
|
1563
1516
|
|
1564
1517
|
/*
|
1565
1518
|
* call-seq:
|
1566
|
-
* node.ns_def
|
1519
|
+
* node.ns_def -> namespace
|
1567
1520
|
*
|
1568
1521
|
* Obtain this node's default namespace.
|
1569
1522
|
*/
|
1570
1523
|
VALUE
|
1571
1524
|
ruby_xml_node_ns_def_get(VALUE self) {
|
1572
|
-
|
1573
|
-
Data_Get_Struct(self,
|
1574
|
-
if (
|
1525
|
+
xmlNodePtr xnode;
|
1526
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1527
|
+
if (xnode->nsDef == NULL)
|
1575
1528
|
return(Qnil);
|
1576
1529
|
else
|
1577
|
-
return(
|
1530
|
+
return(ruby_xml_ns_wrap(xnode->nsDef));
|
1578
1531
|
}
|
1579
1532
|
|
1580
1533
|
|
1581
1534
|
/*
|
1582
1535
|
* call-seq:
|
1583
|
-
* node.ns_def?
|
1536
|
+
* node.ns_def? -> (true|false)
|
1584
1537
|
*
|
1585
1538
|
* Obtain an array of +XML::NS+ objects representing
|
1586
1539
|
* this node's xmlns attributes
|
1587
1540
|
*/
|
1588
1541
|
VALUE
|
1589
1542
|
ruby_xml_node_ns_def_q(VALUE self) {
|
1590
|
-
|
1591
|
-
Data_Get_Struct(self,
|
1592
|
-
if (
|
1543
|
+
xmlNodePtr xnode;
|
1544
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1545
|
+
if (xnode->nsDef == NULL)
|
1593
1546
|
return(Qfalse);
|
1594
1547
|
else
|
1595
1548
|
return(Qtrue);
|
@@ -1598,18 +1551,18 @@ ruby_xml_node_ns_def_q(VALUE self) {
|
|
1598
1551
|
|
1599
1552
|
/*
|
1600
1553
|
* call-seq:
|
1601
|
-
* node.parent
|
1554
|
+
* node.parent -> node
|
1602
1555
|
*
|
1603
1556
|
* Obtain this node's parent node, if any.
|
1604
1557
|
*/
|
1605
1558
|
VALUE
|
1606
1559
|
ruby_xml_node_parent_get(VALUE self) {
|
1607
|
-
|
1560
|
+
xmlNodePtr xnode;
|
1608
1561
|
xmlNodePtr node;
|
1609
1562
|
|
1610
|
-
Data_Get_Struct(self,
|
1563
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1611
1564
|
|
1612
|
-
switch (
|
1565
|
+
switch (xnode->type) {
|
1613
1566
|
case XML_DOCUMENT_NODE:
|
1614
1567
|
case XML_HTML_DOCUMENT_NODE:
|
1615
1568
|
#ifdef LIBXML_DOCB_ENABLED
|
@@ -1619,7 +1572,7 @@ ruby_xml_node_parent_get(VALUE self) {
|
|
1619
1572
|
break;
|
1620
1573
|
case XML_ATTRIBUTE_NODE:
|
1621
1574
|
{
|
1622
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
1575
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
1623
1576
|
node = attr->parent;
|
1624
1577
|
}
|
1625
1578
|
case XML_ENTITY_DECL:
|
@@ -1629,7 +1582,7 @@ ruby_xml_node_parent_get(VALUE self) {
|
|
1629
1582
|
node = NULL;
|
1630
1583
|
break;
|
1631
1584
|
default:
|
1632
|
-
node =
|
1585
|
+
node = xnode->parent;
|
1633
1586
|
break;
|
1634
1587
|
}
|
1635
1588
|
|
@@ -1642,18 +1595,18 @@ ruby_xml_node_parent_get(VALUE self) {
|
|
1642
1595
|
|
1643
1596
|
/*
|
1644
1597
|
* call-seq:
|
1645
|
-
* node.parent?
|
1598
|
+
* node.parent? -> (true|false)
|
1646
1599
|
*
|
1647
1600
|
* Determine whether this node has a parent node.
|
1648
1601
|
*/
|
1649
1602
|
VALUE
|
1650
1603
|
ruby_xml_node_parent_q(VALUE self) {
|
1651
|
-
|
1604
|
+
xmlNodePtr xnode;
|
1652
1605
|
xmlNodePtr node;
|
1653
1606
|
|
1654
|
-
Data_Get_Struct(self,
|
1607
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1655
1608
|
|
1656
|
-
switch (
|
1609
|
+
switch (xnode->type) {
|
1657
1610
|
case XML_DOCUMENT_NODE:
|
1658
1611
|
case XML_HTML_DOCUMENT_NODE:
|
1659
1612
|
#ifdef LIBXML_DOCB_ENABLED
|
@@ -1663,7 +1616,7 @@ ruby_xml_node_parent_q(VALUE self) {
|
|
1663
1616
|
break;
|
1664
1617
|
case XML_ATTRIBUTE_NODE:
|
1665
1618
|
{
|
1666
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
1619
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
1667
1620
|
node = attr->parent;
|
1668
1621
|
}
|
1669
1622
|
case XML_ENTITY_DECL:
|
@@ -1673,7 +1626,7 @@ ruby_xml_node_parent_q(VALUE self) {
|
|
1673
1626
|
node = NULL;
|
1674
1627
|
break;
|
1675
1628
|
default:
|
1676
|
-
node =
|
1629
|
+
node = xnode->parent;
|
1677
1630
|
break;
|
1678
1631
|
}
|
1679
1632
|
|
@@ -1686,17 +1639,17 @@ ruby_xml_node_parent_q(VALUE self) {
|
|
1686
1639
|
|
1687
1640
|
/*
|
1688
1641
|
* call-seq:
|
1689
|
-
* node.path
|
1642
|
+
* node.path -> path
|
1690
1643
|
*
|
1691
1644
|
* Obtain this node's path.
|
1692
1645
|
*/
|
1693
1646
|
VALUE
|
1694
1647
|
ruby_xml_node_path(VALUE self) {
|
1695
|
-
|
1648
|
+
xmlNodePtr xnode;
|
1696
1649
|
xmlChar *path;
|
1697
1650
|
|
1698
|
-
Data_Get_Struct(self,
|
1699
|
-
path = xmlGetNodePath(
|
1651
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1652
|
+
path = xmlGetNodePath(xnode);
|
1700
1653
|
|
1701
1654
|
if (path == NULL)
|
1702
1655
|
return(Qnil);
|
@@ -1707,15 +1660,15 @@ ruby_xml_node_path(VALUE self) {
|
|
1707
1660
|
|
1708
1661
|
/*
|
1709
1662
|
* call-seq:
|
1710
|
-
* node.pi?
|
1663
|
+
* node.pi? -> (true|false)
|
1711
1664
|
*
|
1712
1665
|
* Determine whether this is a processing instruction node.
|
1713
1666
|
*/
|
1714
1667
|
VALUE
|
1715
1668
|
ruby_xml_node_pi_q(VALUE self) {
|
1716
|
-
|
1717
|
-
Data_Get_Struct(self,
|
1718
|
-
if (
|
1669
|
+
xmlNodePtr xnode;
|
1670
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1671
|
+
if (xnode->type == XML_PI_NODE)
|
1719
1672
|
return(Qtrue);
|
1720
1673
|
else
|
1721
1674
|
return(Qfalse);
|
@@ -1724,7 +1677,7 @@ ruby_xml_node_pi_q(VALUE self) {
|
|
1724
1677
|
|
1725
1678
|
/*
|
1726
1679
|
* call-seq:
|
1727
|
-
* node.pointer
|
1680
|
+
* node.pointer -> node_set
|
1728
1681
|
*
|
1729
1682
|
* Evaluates an XPointer expression relative to this node.
|
1730
1683
|
*/
|
@@ -1736,17 +1689,17 @@ ruby_xml_node_pointer(VALUE self, VALUE xptr_str) {
|
|
1736
1689
|
|
1737
1690
|
/*
|
1738
1691
|
* call-seq:
|
1739
|
-
* node.prev
|
1692
|
+
* node.prev -> node
|
1740
1693
|
*
|
1741
1694
|
* Obtain the previous sibling, if any.
|
1742
1695
|
*/
|
1743
1696
|
VALUE
|
1744
1697
|
ruby_xml_node_prev_get(VALUE self) {
|
1745
|
-
|
1698
|
+
xmlNodePtr xnode;
|
1746
1699
|
xmlNodePtr node;
|
1747
|
-
Data_Get_Struct(self,
|
1700
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1748
1701
|
|
1749
|
-
switch (
|
1702
|
+
switch (xnode->type) {
|
1750
1703
|
case XML_DOCUMENT_NODE:
|
1751
1704
|
#ifdef LIBXML_DOCB_ENABLED
|
1752
1705
|
case XML_DOCB_DOCUMENT_NODE:
|
@@ -1757,12 +1710,12 @@ ruby_xml_node_prev_get(VALUE self) {
|
|
1757
1710
|
break;
|
1758
1711
|
case XML_ATTRIBUTE_NODE:
|
1759
1712
|
{
|
1760
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
1713
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
1761
1714
|
node = (xmlNodePtr) attr->prev;
|
1762
1715
|
}
|
1763
1716
|
break;
|
1764
1717
|
default:
|
1765
|
-
node =
|
1718
|
+
node = xnode->prev;
|
1766
1719
|
break;
|
1767
1720
|
}
|
1768
1721
|
|
@@ -1775,18 +1728,18 @@ ruby_xml_node_prev_get(VALUE self) {
|
|
1775
1728
|
|
1776
1729
|
/*
|
1777
1730
|
* call-seq:
|
1778
|
-
* node.prev?
|
1731
|
+
* node.prev? -> (true|false)
|
1779
1732
|
*
|
1780
1733
|
* Determines whether this node has a previous sibling node.
|
1781
1734
|
*/
|
1782
1735
|
VALUE
|
1783
1736
|
ruby_xml_node_prev_q(VALUE self) {
|
1784
|
-
|
1737
|
+
xmlNodePtr xnode;
|
1785
1738
|
xmlNodePtr node;
|
1786
1739
|
|
1787
|
-
Data_Get_Struct(self,
|
1740
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1788
1741
|
|
1789
|
-
switch (
|
1742
|
+
switch (xnode->type) {
|
1790
1743
|
case XML_DOCUMENT_NODE:
|
1791
1744
|
#ifdef LIBXML_DOCB_ENABLED
|
1792
1745
|
case XML_DOCB_DOCUMENT_NODE:
|
@@ -1797,12 +1750,12 @@ ruby_xml_node_prev_q(VALUE self) {
|
|
1797
1750
|
break;
|
1798
1751
|
case XML_ATTRIBUTE_NODE:
|
1799
1752
|
{
|
1800
|
-
xmlAttrPtr attr = (xmlAttrPtr)
|
1753
|
+
xmlAttrPtr attr = (xmlAttrPtr) xnode;
|
1801
1754
|
node = (xmlNodePtr) attr->prev;
|
1802
1755
|
}
|
1803
1756
|
break;
|
1804
1757
|
default:
|
1805
|
-
node =
|
1758
|
+
node = xnode->prev;
|
1806
1759
|
break;
|
1807
1760
|
}
|
1808
1761
|
|
@@ -1821,16 +1774,15 @@ ruby_xml_node_prev_q(VALUE self) {
|
|
1821
1774
|
*/
|
1822
1775
|
VALUE
|
1823
1776
|
ruby_xml_node_prev_set(VALUE self, VALUE rnode) {
|
1824
|
-
|
1825
|
-
xmlNodePtr ret;
|
1777
|
+
xmlNodePtr cnode, pnode, ret;
|
1826
1778
|
|
1827
1779
|
if (rb_obj_is_kind_of(rnode, cXMLNode) == Qfalse)
|
1828
1780
|
rb_raise(rb_eTypeError, "Must pass an XML::Node object");
|
1829
1781
|
|
1830
|
-
Data_Get_Struct(self,
|
1831
|
-
Data_Get_Struct(rnode,
|
1782
|
+
Data_Get_Struct(self, xmlNode, pnode);
|
1783
|
+
Data_Get_Struct(rnode, xmlNode, cnode);
|
1832
1784
|
|
1833
|
-
ret = xmlAddPrevSibling(pnode
|
1785
|
+
ret = xmlAddPrevSibling(pnode, cnode);
|
1834
1786
|
if (ret == NULL)
|
1835
1787
|
rb_raise(eXMLNodeFailedModify, "unable to add a sibling to the document");
|
1836
1788
|
|
@@ -1840,105 +1792,61 @@ ruby_xml_node_prev_set(VALUE self, VALUE rnode) {
|
|
1840
1792
|
|
1841
1793
|
/*
|
1842
1794
|
* call-seq:
|
1843
|
-
* node.
|
1844
|
-
* node["name"] => "string"
|
1795
|
+
* node.attributes -> attributes
|
1845
1796
|
*
|
1846
|
-
*
|
1797
|
+
* Returns the XML::Attributes for this node.
|
1847
1798
|
*/
|
1848
1799
|
VALUE
|
1849
|
-
|
1850
|
-
|
1851
|
-
xmlChar *p;
|
1852
|
-
VALUE result = Qnil;
|
1853
|
-
|
1854
|
-
prop = check_string_or_symbol( prop );
|
1855
|
-
|
1856
|
-
Data_Get_Struct(self, ruby_xml_node, rxn);
|
1857
|
-
p = xmlGetProp(rxn->node, (xmlChar*)StringValuePtr(prop));
|
1800
|
+
ruby_xml_node_attributes_get(VALUE self) {
|
1801
|
+
xmlNodePtr xnode;
|
1858
1802
|
|
1859
|
-
|
1860
|
-
|
1861
|
-
|
1803
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1804
|
+
|
1805
|
+
if (xnode->type == XML_ELEMENT_NODE) {
|
1806
|
+
return ruby_xml_attributes_new(xnode);
|
1807
|
+
} else {
|
1808
|
+
return(Qnil);
|
1862
1809
|
}
|
1863
|
-
|
1864
|
-
return result;
|
1865
1810
|
}
|
1866
1811
|
|
1867
|
-
|
1868
1812
|
/*
|
1869
1813
|
* call-seq:
|
1870
|
-
* node
|
1814
|
+
* node.property("name") -> "string"
|
1815
|
+
* node["name"] -> "string"
|
1871
1816
|
*
|
1872
|
-
*
|
1817
|
+
* Obtain the named property.
|
1873
1818
|
*/
|
1874
1819
|
VALUE
|
1875
|
-
|
1876
|
-
|
1877
|
-
|
1878
|
-
|
1879
|
-
key = check_string_or_symbol( key );
|
1880
|
-
Data_Get_Struct(self, ruby_xml_node, node);
|
1881
|
-
|
1882
|
-
if( val == Qnil ) {
|
1883
|
-
attr = xmlSetProp(node->node, (xmlChar*)StringValuePtr(key), NULL);
|
1884
|
-
if (attr->_private == NULL)
|
1885
|
-
xmlRemoveProp( attr );
|
1886
|
-
else
|
1887
|
-
xmlUnlinkNode( attr );
|
1888
|
-
return Qnil;
|
1889
|
-
} else {
|
1890
|
-
Check_Type(val, T_STRING);
|
1891
|
-
}
|
1892
|
-
|
1893
|
-
attr = xmlSetProp(node->node, (xmlChar*)StringValuePtr(key), (xmlChar*)StringValuePtr(val));
|
1894
|
-
if (attr == NULL) {
|
1895
|
-
attr = xmlNewProp(node->node, (xmlChar*)StringValuePtr(key), (xmlChar*)StringValuePtr(val));
|
1896
|
-
if (attr == NULL)
|
1897
|
-
return(Qnil);
|
1898
|
-
}
|
1899
|
-
return(ruby_xml_attr_new(cXMLAttr, attr));
|
1820
|
+
ruby_xml_node_property_get(VALUE self, VALUE name) {
|
1821
|
+
VALUE attributes = ruby_xml_node_attributes_get(self);
|
1822
|
+
return ruby_xml_attributes_attribute_get(attributes, name);
|
1900
1823
|
}
|
1901
1824
|
|
1902
|
-
|
1903
1825
|
/*
|
1904
1826
|
* call-seq:
|
1905
|
-
* node
|
1827
|
+
* node["name"] = "string"
|
1906
1828
|
*
|
1907
|
-
*
|
1829
|
+
* Set the named property.
|
1908
1830
|
*/
|
1909
1831
|
VALUE
|
1910
|
-
|
1911
|
-
|
1912
|
-
|
1913
|
-
|
1914
|
-
Data_Get_Struct(self, ruby_xml_node, node);
|
1915
|
-
|
1916
|
-
if (node->node->type == XML_ELEMENT_NODE) {
|
1917
|
-
attr = node->node->properties;
|
1918
|
-
|
1919
|
-
if (attr == NULL) {
|
1920
|
-
return(Qnil);
|
1921
|
-
} else {
|
1922
|
-
return(ruby_xml_attr_wrap(cXMLAttr, attr));
|
1923
|
-
}
|
1924
|
-
} else {
|
1925
|
-
return(Qnil);
|
1926
|
-
}
|
1832
|
+
ruby_xml_node_property_set(VALUE self, VALUE name, VALUE value) {
|
1833
|
+
VALUE attributes = ruby_xml_node_attributes_get(self);
|
1834
|
+
return ruby_xml_attributes_attribute_set(attributes, name, value);
|
1927
1835
|
}
|
1928
1836
|
|
1929
1837
|
|
1930
1838
|
/*
|
1931
1839
|
* call-seq:
|
1932
|
-
* node.
|
1840
|
+
* node.attributes? -> (true|false)
|
1933
1841
|
*
|
1934
1842
|
* Determine whether this node has properties
|
1935
1843
|
* (attributes).
|
1936
1844
|
*/
|
1937
1845
|
VALUE
|
1938
|
-
|
1939
|
-
|
1940
|
-
Data_Get_Struct(self,
|
1941
|
-
if (
|
1846
|
+
ruby_xml_node_attributes_q(VALUE self) {
|
1847
|
+
xmlNodePtr xnode;
|
1848
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1849
|
+
if (xnode->type == XML_ELEMENT_NODE && xnode->properties != NULL)
|
1942
1850
|
return(Qtrue);
|
1943
1851
|
else
|
1944
1852
|
return(Qfalse);
|
@@ -1947,75 +1855,71 @@ ruby_xml_node_properties_q(VALUE self) {
|
|
1947
1855
|
|
1948
1856
|
/*
|
1949
1857
|
* call-seq:
|
1950
|
-
* node.remove!
|
1858
|
+
* node.remove! -> nil
|
1951
1859
|
*
|
1952
1860
|
* Removes this node from it's parent.
|
1953
1861
|
*/
|
1954
1862
|
VALUE
|
1955
1863
|
ruby_xml_node_remove_ex(VALUE self) {
|
1956
|
-
|
1957
|
-
Data_Get_Struct(self,
|
1958
|
-
xmlUnlinkNode(
|
1864
|
+
xmlNodePtr xnode;
|
1865
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1866
|
+
xmlUnlinkNode(xnode);
|
1959
1867
|
return(Qnil);
|
1960
1868
|
}
|
1961
1869
|
|
1962
1870
|
|
1963
1871
|
/*
|
1964
1872
|
* call-seq:
|
1965
|
-
* node.search_href
|
1873
|
+
* node.search_href -> namespace
|
1966
1874
|
*
|
1967
1875
|
* Search for a namespace by href.
|
1968
1876
|
*/
|
1969
1877
|
VALUE
|
1970
1878
|
ruby_xml_node_search_href(VALUE self, VALUE href) {
|
1971
|
-
|
1879
|
+
xmlNodePtr xnode;
|
1972
1880
|
|
1973
1881
|
Check_Type(href, T_STRING);
|
1974
|
-
Data_Get_Struct(self,
|
1975
|
-
return(
|
1976
|
-
xmlSearchNsByHref(node->node->doc, node->node,
|
1882
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1883
|
+
return(ruby_xml_ns_wrap(xmlSearchNsByHref(xnode->doc, xnode,
|
1977
1884
|
(xmlChar*)StringValuePtr(href))));
|
1978
1885
|
}
|
1979
1886
|
|
1980
1887
|
|
1981
1888
|
/*
|
1982
1889
|
* call-seq:
|
1983
|
-
* node.search_ns
|
1890
|
+
* node.search_ns -> namespace
|
1984
1891
|
*
|
1985
1892
|
* Search for a namespace by namespace.
|
1986
1893
|
*/
|
1987
1894
|
VALUE
|
1988
1895
|
ruby_xml_node_search_ns(VALUE self, VALUE ns) {
|
1989
|
-
|
1896
|
+
xmlNodePtr xnode;
|
1990
1897
|
|
1991
1898
|
Check_Type(ns, T_STRING);
|
1992
|
-
Data_Get_Struct(self,
|
1993
|
-
return(
|
1994
|
-
|
1995
|
-
xmlSearchNs(node->node->doc, node->node,
|
1996
|
-
(xmlChar*)StringValuePtr(ns))));
|
1899
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1900
|
+
return(ruby_xml_ns_wrap(xmlSearchNs(xnode->doc, xnode,
|
1901
|
+
(xmlChar*)StringValuePtr(ns))));
|
1997
1902
|
}
|
1998
1903
|
|
1999
1904
|
|
2000
1905
|
/*
|
2001
1906
|
* call-seq:
|
2002
|
-
* node.sibling(node)
|
1907
|
+
* node.sibling(node) -> node
|
2003
1908
|
*
|
2004
1909
|
* Add the specified node as a sibling of this node.
|
2005
1910
|
*/
|
2006
1911
|
VALUE
|
2007
1912
|
ruby_xml_node_sibling_set(VALUE self, VALUE rnode) {
|
2008
|
-
|
2009
|
-
xmlNodePtr ret;
|
1913
|
+
xmlNodePtr cnode, pnode, ret;
|
2010
1914
|
VALUE obj;
|
2011
1915
|
|
2012
1916
|
if (rb_obj_is_kind_of(rnode, cXMLNode) == Qfalse)
|
2013
1917
|
rb_raise(rb_eTypeError, "Must pass an XML::Node object");
|
2014
1918
|
|
2015
|
-
Data_Get_Struct(self,
|
2016
|
-
Data_Get_Struct(rnode,
|
1919
|
+
Data_Get_Struct(self, xmlNode, pnode);
|
1920
|
+
Data_Get_Struct(rnode, xmlNode, cnode);
|
2017
1921
|
|
2018
|
-
ret = xmlAddSibling(pnode
|
1922
|
+
ret = xmlAddSibling(pnode, cnode);
|
2019
1923
|
if (ret == NULL)
|
2020
1924
|
rb_raise(eXMLNodeFailedModify, "unable to add a sibling to the document");
|
2021
1925
|
if (ret->_private==NULL)
|
@@ -2029,16 +1933,16 @@ ruby_xml_node_sibling_set(VALUE self, VALUE rnode) {
|
|
2029
1933
|
|
2030
1934
|
/*
|
2031
1935
|
* call-seq:
|
2032
|
-
* node.space_preserve
|
1936
|
+
* node.space_preserve -> (true|false)
|
2033
1937
|
*
|
2034
1938
|
* Determine whether this node preserves whitespace.
|
2035
1939
|
*/
|
2036
1940
|
VALUE
|
2037
1941
|
ruby_xml_node_space_preserve_get(VALUE self) {
|
2038
|
-
|
1942
|
+
xmlNodePtr xnode;
|
2039
1943
|
|
2040
|
-
Data_Get_Struct(self,
|
2041
|
-
return(INT2NUM(xmlNodeGetSpacePreserve(
|
1944
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1945
|
+
return(INT2NUM(xmlNodeGetSpacePreserve(xnode)));
|
2042
1946
|
}
|
2043
1947
|
|
2044
1948
|
|
@@ -2050,13 +1954,13 @@ ruby_xml_node_space_preserve_get(VALUE self) {
|
|
2050
1954
|
*/
|
2051
1955
|
VALUE
|
2052
1956
|
ruby_xml_node_space_preserve_set(VALUE self, VALUE bool) {
|
2053
|
-
|
2054
|
-
Data_Get_Struct(self,
|
1957
|
+
xmlNodePtr xnode;
|
1958
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
2055
1959
|
|
2056
1960
|
if (TYPE(bool) == T_FALSE)
|
2057
|
-
xmlNodeSetSpacePreserve(
|
1961
|
+
xmlNodeSetSpacePreserve(xnode, 1);
|
2058
1962
|
else
|
2059
|
-
xmlNodeSetSpacePreserve(
|
1963
|
+
xmlNodeSetSpacePreserve(xnode, 0);
|
2060
1964
|
|
2061
1965
|
return(Qnil);
|
2062
1966
|
}
|
@@ -2064,37 +1968,37 @@ ruby_xml_node_space_preserve_set(VALUE self, VALUE bool) {
|
|
2064
1968
|
|
2065
1969
|
/*
|
2066
1970
|
* call-seq:
|
2067
|
-
* node.text?
|
1971
|
+
* node.text? -> (true|false)
|
2068
1972
|
*
|
2069
1973
|
* Determine whether this node has text.
|
2070
1974
|
*/
|
2071
1975
|
VALUE
|
2072
1976
|
ruby_xml_node_text_q(VALUE self) {
|
2073
|
-
|
2074
|
-
Data_Get_Struct(self,
|
2075
|
-
if (
|
1977
|
+
xmlNodePtr xnode;
|
1978
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
1979
|
+
if (xnode == NULL)
|
2076
1980
|
return(Qnil);
|
2077
1981
|
|
2078
|
-
return((xmlNodeIsText(
|
1982
|
+
return((xmlNodeIsText(xnode) == 1) ? Qtrue : Qfalse);
|
2079
1983
|
}
|
2080
1984
|
|
2081
1985
|
|
2082
1986
|
/*
|
2083
1987
|
* call-seq:
|
2084
|
-
* node.to_s
|
1988
|
+
* node.to_s -> "string"
|
2085
1989
|
*
|
2086
1990
|
* Coerce this node to a string representation of
|
2087
1991
|
* it's XML.
|
2088
1992
|
*/
|
2089
1993
|
VALUE
|
2090
1994
|
ruby_xml_node_to_s(VALUE self) {
|
2091
|
-
|
1995
|
+
xmlNodePtr xnode;
|
2092
1996
|
xmlBufferPtr buf;
|
2093
1997
|
VALUE result;
|
2094
1998
|
|
2095
|
-
Data_Get_Struct(self,
|
1999
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
2096
2000
|
buf = xmlBufferCreate();
|
2097
|
-
xmlNodeDump(buf,
|
2001
|
+
xmlNodeDump(buf, xnode->doc, xnode, 0, 1);
|
2098
2002
|
result = rb_str_new2((const char*)buf->content);
|
2099
2003
|
|
2100
2004
|
xmlBufferFree(buf);
|
@@ -2104,30 +2008,30 @@ ruby_xml_node_to_s(VALUE self) {
|
|
2104
2008
|
|
2105
2009
|
/*
|
2106
2010
|
* call-seq:
|
2107
|
-
* node.type
|
2011
|
+
* node.type -> num
|
2108
2012
|
*
|
2109
2013
|
* Obtain this node's type identifier.
|
2110
2014
|
*/
|
2111
2015
|
VALUE
|
2112
2016
|
ruby_xml_node_type(VALUE self) {
|
2113
|
-
|
2114
|
-
Data_Get_Struct(self,
|
2115
|
-
return(INT2NUM(
|
2017
|
+
xmlNodePtr xnode;
|
2018
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
2019
|
+
return(INT2NUM(xnode->type));
|
2116
2020
|
}
|
2117
2021
|
|
2118
2022
|
|
2119
2023
|
/*
|
2120
2024
|
* call-seq:
|
2121
|
-
* node.type_name
|
2025
|
+
* node.type_name -> num
|
2122
2026
|
*
|
2123
2027
|
* Obtain this node's type name.
|
2124
2028
|
*/
|
2125
2029
|
VALUE
|
2126
2030
|
ruby_xml_node_type_name(VALUE self) {
|
2127
|
-
|
2128
|
-
Data_Get_Struct(self,
|
2031
|
+
xmlNodePtr xnode;
|
2032
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
2129
2033
|
|
2130
|
-
switch(
|
2034
|
+
switch(xnode->type) {
|
2131
2035
|
case XML_ELEMENT_NODE:
|
2132
2036
|
return(rb_str_new2("element"));
|
2133
2037
|
case XML_ATTRIBUTE_NODE:
|
@@ -2173,7 +2077,7 @@ ruby_xml_node_type_name(VALUE self) {
|
|
2173
2077
|
return(rb_str_new2("document_docbook"));
|
2174
2078
|
#endif
|
2175
2079
|
default:
|
2176
|
-
rb_raise(eXMLNodeUnknownType, "Unknown node type: %n",
|
2080
|
+
rb_raise(eXMLNodeUnknownType, "Unknown node type: %n", xnode->type);
|
2177
2081
|
return(Qfalse);
|
2178
2082
|
}
|
2179
2083
|
}
|
@@ -2181,15 +2085,15 @@ ruby_xml_node_type_name(VALUE self) {
|
|
2181
2085
|
|
2182
2086
|
/*
|
2183
2087
|
* call-seq:
|
2184
|
-
* node.xinclude_end?
|
2088
|
+
* node.xinclude_end? -> num
|
2185
2089
|
*
|
2186
2090
|
* Determine whether this node is an xinclude end node.
|
2187
2091
|
*/
|
2188
2092
|
VALUE
|
2189
2093
|
ruby_xml_node_xinclude_end_q(VALUE self) {
|
2190
|
-
|
2191
|
-
Data_Get_Struct(self,
|
2192
|
-
if (
|
2094
|
+
xmlNodePtr xnode;
|
2095
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
2096
|
+
if (xnode->type == XML_XINCLUDE_END)
|
2193
2097
|
return(Qtrue);
|
2194
2098
|
else
|
2195
2099
|
return(Qfalse);
|
@@ -2198,15 +2102,15 @@ ruby_xml_node_xinclude_end_q(VALUE self) {
|
|
2198
2102
|
|
2199
2103
|
/*
|
2200
2104
|
* call-seq:
|
2201
|
-
* node.xinclude_start?
|
2105
|
+
* node.xinclude_start? -> num
|
2202
2106
|
*
|
2203
2107
|
* Determine whether this node is an xinclude start node.
|
2204
2108
|
*/
|
2205
2109
|
VALUE
|
2206
2110
|
ruby_xml_node_xinclude_start_q(VALUE self) {
|
2207
|
-
|
2208
|
-
Data_Get_Struct(self,
|
2209
|
-
if (
|
2111
|
+
xmlNodePtr xnode;
|
2112
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
2113
|
+
if (xnode->type == XML_XINCLUDE_START)
|
2210
2114
|
return(Qtrue);
|
2211
2115
|
else
|
2212
2116
|
return(Qfalse);
|
@@ -2215,30 +2119,28 @@ ruby_xml_node_xinclude_start_q(VALUE self) {
|
|
2215
2119
|
|
2216
2120
|
/*
|
2217
2121
|
* call-seq:
|
2218
|
-
* node.copy
|
2122
|
+
* node.copy -> node
|
2219
2123
|
*
|
2220
2124
|
* Create a copy of this node.
|
2221
2125
|
*/
|
2222
2126
|
VALUE
|
2223
2127
|
ruby_xml_node_copy(VALUE self, VALUE deep) {
|
2224
|
-
|
2225
|
-
|
2226
|
-
|
2227
|
-
|
2228
|
-
|
2229
|
-
|
2128
|
+
xmlNodePtr xnode;
|
2129
|
+
xmlNodePtr xcopy;
|
2130
|
+
int recursive = (deep==Qnil || deep==Qfalse) ? 0 : 1;
|
2131
|
+
Data_Get_Struct(self, xmlNode, xnode);
|
2132
|
+
|
2133
|
+
xcopy = xmlCopyNode(xnode, recursive);
|
2230
2134
|
|
2231
|
-
if (
|
2135
|
+
if (xcopy)
|
2136
|
+
return ruby_xml_node2_wrap(cXMLNode, xcopy);
|
2137
|
+
else
|
2232
2138
|
return Qnil;
|
2233
|
-
|
2234
|
-
obj=ruby_xml_node2_wrap(cXMLNode,copy);
|
2235
|
-
copy->_private = (void*) obj;
|
2236
|
-
return obj;
|
2237
2139
|
}
|
2238
2140
|
|
2239
2141
|
/*
|
2240
2142
|
* call-seq:
|
2241
|
-
* XML::Node.new_text(content = nil)
|
2143
|
+
* XML::Node.new_text(content = nil) -> node
|
2242
2144
|
*
|
2243
2145
|
* Create a new text node, optionally setting
|
2244
2146
|
* the node's content.
|
@@ -2272,12 +2174,13 @@ ruby_xml_node_registerNode(xmlNodePtr node)
|
|
2272
2174
|
}
|
2273
2175
|
|
2274
2176
|
void
|
2275
|
-
ruby_xml_node_deregisterNode(xmlNodePtr
|
2177
|
+
ruby_xml_node_deregisterNode(xmlNodePtr xnode)
|
2276
2178
|
{
|
2277
|
-
|
2278
|
-
|
2279
|
-
|
2280
|
-
|
2179
|
+
VALUE node;
|
2180
|
+
|
2181
|
+
if (xnode->_private==NULL ) return;
|
2182
|
+
node = (VALUE)xnode->_private;
|
2183
|
+
DATA_PTR(node) = NULL;
|
2281
2184
|
}
|
2282
2185
|
|
2283
2186
|
// Rdoc needs to know
|
@@ -2327,6 +2230,8 @@ ruby_init_xml_node(void) {
|
|
2327
2230
|
rb_define_method(cXMLNode, "[]=", ruby_xml_node_property_set, 2);
|
2328
2231
|
rb_define_method(cXMLNode, "attribute?", ruby_xml_node_attribute_q, 0);
|
2329
2232
|
rb_define_method(cXMLNode, "attribute_decl?", ruby_xml_node_attribute_decl_q, 0);
|
2233
|
+
rb_define_method(cXMLNode, "attributes", ruby_xml_node_attributes_get, 0);
|
2234
|
+
rb_define_method(cXMLNode, "attributes?", ruby_xml_node_attributes_q, 0);
|
2330
2235
|
rb_define_method(cXMLNode, "base", ruby_xml_node_base_get, 0);
|
2331
2236
|
rb_define_method(cXMLNode, "base=", ruby_xml_node_base_set, 1);
|
2332
2237
|
rb_define_method(cXMLNode, "blank?", ruby_xml_node_empty_q, 0);
|
@@ -2358,7 +2263,6 @@ ruby_init_xml_node(void) {
|
|
2358
2263
|
rb_define_method(cXMLNode, "find", ruby_xml_node_find, -1);
|
2359
2264
|
rb_define_method(cXMLNode, "find_first", ruby_xml_node_find_first, -1);
|
2360
2265
|
rb_define_method(cXMLNode, "fragment?", ruby_xml_node_fragment_q, 0);
|
2361
|
-
rb_define_method(cXMLNode, "hash", ruby_xml_node_hash, 0);
|
2362
2266
|
rb_define_method(cXMLNode, "html_doc?", ruby_xml_node_html_doc_q, 0);
|
2363
2267
|
rb_define_method(cXMLNode, "lang", ruby_xml_node_lang_get, 0);
|
2364
2268
|
rb_define_method(cXMLNode, "lang=", ruby_xml_node_lang_set, 1);
|
@@ -2389,9 +2293,6 @@ ruby_init_xml_node(void) {
|
|
2389
2293
|
rb_define_method(cXMLNode, "prev", ruby_xml_node_prev_get, 0);
|
2390
2294
|
rb_define_method(cXMLNode, "prev?", ruby_xml_node_prev_q, 0);
|
2391
2295
|
rb_define_method(cXMLNode, "prev=", ruby_xml_node_prev_set, 1);
|
2392
|
-
rb_define_method(cXMLNode, "property", ruby_xml_node_property_get, 1);
|
2393
|
-
rb_define_method(cXMLNode, "properties", ruby_xml_node_properties_get, 0);
|
2394
|
-
rb_define_method(cXMLNode, "properties?", ruby_xml_node_properties_q, 0);
|
2395
2296
|
rb_define_method(cXMLNode, "remove!", ruby_xml_node_remove_ex, 0);
|
2396
2297
|
rb_define_method(cXMLNode, "search_ns", ruby_xml_node_search_ns, 1);
|
2397
2298
|
rb_define_method(cXMLNode, "search_href", ruby_xml_node_search_href, 1);
|
@@ -2405,6 +2306,7 @@ ruby_init_xml_node(void) {
|
|
2405
2306
|
rb_define_method(cXMLNode, "xlink?", ruby_xml_node_xlink_q, 0);
|
2406
2307
|
rb_define_method(cXMLNode, "xlink_type", ruby_xml_node_xlink_type, 0);
|
2407
2308
|
rb_define_method(cXMLNode, "xlink_type_name", ruby_xml_node_xlink_type_name, 0);
|
2408
|
-
|
2309
|
+
|
2409
2310
|
rb_define_alias(cXMLNode, "==", "eql?");
|
2311
|
+
rb_define_alias(cXMLNode, "properties?", "attributes?");
|
2410
2312
|
}
|