libxml-ruby 0.6.0 → 0.7.0
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/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
|
}
|