libxml-ruby 0.8.3-x86-mswin32-60 → 0.9.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 +18 -0
- data/RAKEFILE +15 -39
- data/README +48 -47
- data/ext/libxml/libxml.c +847 -22
- data/ext/libxml/ruby_libxml.h +71 -95
- data/ext/libxml/ruby_xml_attr.c +500 -500
- data/ext/libxml/ruby_xml_attributes.c +1 -1
- data/ext/libxml/ruby_xml_document.c +1144 -1135
- data/ext/libxml/ruby_xml_document.h +4 -11
- data/ext/libxml/ruby_xml_dtd.c +27 -0
- data/ext/libxml/ruby_xml_encoding.c +164 -0
- data/ext/libxml/ruby_xml_encoding.h +13 -0
- data/ext/libxml/ruby_xml_error.c +941 -0
- data/ext/libxml/ruby_xml_error.h +13 -0
- data/ext/libxml/ruby_xml_html_parser.c +71 -387
- data/ext/libxml/ruby_xml_html_parser.h +1 -17
- data/ext/libxml/ruby_xml_input.c +179 -0
- data/ext/libxml/ruby_xml_input.h +18 -0
- data/ext/libxml/ruby_xml_input_cbg.c +17 -3
- data/ext/libxml/ruby_xml_node.c +1566 -1582
- data/ext/libxml/ruby_xml_node.h +1 -4
- data/ext/libxml/ruby_xml_ns.c +14 -3
- data/ext/libxml/ruby_xml_parser.c +164 -1398
- data/ext/libxml/ruby_xml_parser.h +5 -17
- data/ext/libxml/ruby_xml_parser_context.c +131 -169
- data/ext/libxml/ruby_xml_parser_context.h +2 -9
- data/ext/libxml/ruby_xml_reader.c +910 -945
- data/ext/libxml/ruby_xml_relaxng.c +32 -3
- data/ext/libxml/ruby_xml_sax_parser.c +106 -364
- data/ext/libxml/ruby_xml_sax_parser.h +1 -37
- data/ext/libxml/ruby_xml_schema.c +174 -145
- data/ext/libxml/ruby_xml_xinclude.c +9 -5
- data/ext/libxml/ruby_xml_xpath.c +25 -6
- data/ext/libxml/ruby_xml_xpath.h +1 -2
- data/ext/libxml/ruby_xml_xpath_context.c +17 -19
- data/ext/libxml/ruby_xml_xpath_object.c +60 -56
- data/ext/libxml/ruby_xml_xpointer.c +11 -5
- data/ext/libxml/sax_parser_callbacks.inc +42 -37
- data/ext/libxml/version.h +3 -3
- data/ext/mingw/Rakefile +20 -27
- data/ext/mingw/build.rake +41 -0
- data/{lib → ext/mingw}/libiconv-2.dll +0 -0
- data/ext/mingw/libxml2-2.dll +0 -0
- data/ext/mingw/libxml_ruby.dll.a +0 -0
- data/ext/mingw/libxml_ruby.so +0 -0
- data/ext/vc/libxml_ruby.vcproj +23 -15
- data/lib/libxml.rb +8 -2
- data/lib/libxml/document.rb +16 -4
- data/lib/libxml/error.rb +84 -0
- data/lib/libxml/hpricot.rb +76 -0
- data/lib/libxml/html_parser.rb +61 -0
- data/lib/libxml/node.rb +36 -25
- data/lib/libxml/parser.rb +312 -33
- data/lib/libxml/parser_context.rb +17 -0
- data/lib/libxml/properties.rb +15 -2
- data/lib/libxml/reader.rb +15 -0
- data/lib/libxml/sax_callbacks.rb +179 -0
- data/lib/libxml/sax_parser.rb +42 -0
- data/lib/libxml/tree.rb +1 -2
- data/lib/libxml/xpath_object.rb +12 -0
- data/test/model/atom.xml +4 -0
- data/test/tc_attributes.rb +43 -19
- data/test/tc_document.rb +1 -1
- data/test/tc_document_write.rb +15 -8
- data/test/tc_dtd.rb +36 -20
- data/test/tc_encoding.rb +13 -0
- data/test/tc_error.rb +136 -0
- data/test/tc_node.rb +2 -3
- data/test/tc_node_copy.rb +1 -1
- data/test/tc_node_edit.rb +6 -0
- data/test/tc_ns.rb +18 -0
- data/test/tc_parser.rb +113 -228
- data/test/tc_parser_context.rb +1 -2
- data/test/tc_reader.rb +24 -14
- data/test/tc_relaxng.rb +18 -6
- data/test/tc_sax_parser.rb +48 -13
- data/test/tc_schema.rb +20 -8
- data/test/tc_well_formed.rb +2 -1
- data/test/tc_xml.rb +212 -0
- data/test/tc_xpath.rb +60 -46
- data/test/tc_xpointer.rb +7 -11
- data/test/test_suite.rb +4 -3
- metadata +32 -115
- data/doc/rdoc/classes/LibXML.html +0 -241
- data/doc/rdoc/classes/LibXML/XML.html +0 -185
- data/doc/rdoc/classes/LibXML/XML/Attr.html +0 -1010
- data/doc/rdoc/classes/LibXML/XML/Attributes.html +0 -526
- data/doc/rdoc/classes/LibXML/XML/Document.html +0 -1489
- data/doc/rdoc/classes/LibXML/XML/Dtd.html +0 -213
- data/doc/rdoc/classes/LibXML/XML/Error.html +0 -117
- data/doc/rdoc/classes/LibXML/XML/HTMLParser.html +0 -348
- data/doc/rdoc/classes/LibXML/XML/InputCallbacks.html +0 -160
- data/doc/rdoc/classes/LibXML/XML/NS.html +0 -381
- data/doc/rdoc/classes/LibXML/XML/Node.html +0 -3396
- data/doc/rdoc/classes/LibXML/XML/Node/FailedModify.html +0 -123
- data/doc/rdoc/classes/LibXML/XML/Node/Set.html +0 -440
- data/doc/rdoc/classes/LibXML/XML/Node/SetNamespace.html +0 -123
- data/doc/rdoc/classes/LibXML/XML/Node/UnknownType.html +0 -123
- data/doc/rdoc/classes/LibXML/XML/Parser.html +0 -2239
- data/doc/rdoc/classes/LibXML/XML/Parser/Context.html +0 -1255
- data/doc/rdoc/classes/LibXML/XML/Parser/ParseError.html +0 -123
- data/doc/rdoc/classes/LibXML/XML/Reader.html +0 -2264
- data/doc/rdoc/classes/LibXML/XML/RelaxNG.html +0 -237
- data/doc/rdoc/classes/LibXML/XML/SaxParser.html +0 -415
- data/doc/rdoc/classes/LibXML/XML/Schema.html +0 -308
- data/doc/rdoc/classes/LibXML/XML/State.html +0 -124
- data/doc/rdoc/classes/LibXML/XML/Tree.html +0 -111
- data/doc/rdoc/classes/LibXML/XML/XInclude.html +0 -123
- data/doc/rdoc/classes/LibXML/XML/XInclude/Error.html +0 -117
- data/doc/rdoc/classes/LibXML/XML/XMLParserOptions.html +0 -198
- data/doc/rdoc/classes/LibXML/XML/XPath.html +0 -184
- data/doc/rdoc/classes/LibXML/XML/XPath/Context.html +0 -404
- data/doc/rdoc/classes/LibXML/XML/XPath/InvalidPath.html +0 -172
- data/doc/rdoc/classes/LibXML/XML/XPath/Object.html +0 -627
- data/doc/rdoc/classes/LibXML/XML/XPointer.html +0 -170
- data/doc/rdoc/classes/LibXML/XML/XPointer/Context.html +0 -123
- data/doc/rdoc/classes/LibXML/XML/XPointer/Context/InvalidPath.html +0 -117
- data/doc/rdoc/classes/LibXML/XML/XPointer/InvalidExpression.html +0 -124
- data/doc/rdoc/classes/singleton.html +0 -114
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/CHANGES.html +0 -442
- data/doc/rdoc/files/LICENSE.html +0 -133
- data/doc/rdoc/files/README.html +0 -388
- data/doc/rdoc/files/VERSION.html +0 -107
- data/doc/rdoc/files/ext/libxml/cbg_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/libxml_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_attr_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_attributes_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_document_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_dtd_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_html_parser_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_input_cbg_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_node_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_node_set_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_ns_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_parser_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_parser_context_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_reader_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_relaxng_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_sax_parser_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_schema_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_state_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_xinclude_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_context_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_object_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_c.html +0 -101
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_context_c.html +0 -101
- data/doc/rdoc/files/lib/libxml/attr_rb.html +0 -108
- data/doc/rdoc/files/lib/libxml/attributes_rb.html +0 -108
- data/doc/rdoc/files/lib/libxml/document_rb.html +0 -108
- data/doc/rdoc/files/lib/libxml/node_rb.html +0 -108
- data/doc/rdoc/files/lib/libxml/node_set_rb.html +0 -108
- data/doc/rdoc/files/lib/libxml/parser_options_rb.html +0 -107
- data/doc/rdoc/files/lib/libxml/parser_rb.html +0 -101
- data/doc/rdoc/files/lib/libxml/properties_rb.html +0 -108
- data/doc/rdoc/files/lib/libxml/tree_rb.html +0 -107
- data/doc/rdoc/files/lib/libxml_rb.html +0 -124
- data/doc/rdoc/files/lib/xml/libxml_rb.html +0 -124
- data/doc/rdoc/files/lib/xml_rb.html +0 -134
- data/doc/rdoc/fr_class_index.html +0 -62
- data/doc/rdoc/fr_file_index.html +0 -66
- data/doc/rdoc/fr_method_index.html +0 -392
- data/doc/rdoc/index.html +0 -24
- data/doc/rdoc/rdoc-style.css +0 -208
- data/ext/libxml/ruby_xml_node_set.c +0 -172
- data/ext/libxml/ruby_xml_node_set.h +0 -20
- data/ext/libxml/ruby_xml_xpointer_context.c +0 -22
- data/ext/libxml/ruby_xml_xpointer_context.h +0 -18
- data/lib/libxml/node_set.rb +0 -27
- data/lib/libxml2-2.dll +0 -0
- data/lib/libxml_ruby.dll.a +0 -0
- data/lib/libxml_ruby.so +0 -0
- data/test/tc_node_set.rb +0 -24
- data/test/tc_node_set2.rb +0 -37
data/ext/libxml/ruby_xml_xpath.h
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_xpath.h
|
1
|
+
/* $Id: ruby_xml_xpath.h 528 2008-11-15 23:43:48Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -6,7 +6,6 @@
|
|
6
6
|
#define __RUBY_XML_XPATH__
|
7
7
|
|
8
8
|
extern VALUE mXPath;
|
9
|
-
extern VALUE eXMLXPathInvalidPath;
|
10
9
|
|
11
10
|
typedef struct ruby_xml_xpath {
|
12
11
|
VALUE xd;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_xpath_context.c
|
1
|
+
/* $Id: ruby_xml_xpath_context.c 566 2008-11-18 06:53:36Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -50,7 +50,7 @@ ruby_xml_xpath_context_alloc(VALUE klass) {
|
|
50
50
|
*/
|
51
51
|
VALUE
|
52
52
|
ruby_xml_xpath_context_initialize(VALUE self, VALUE node) {
|
53
|
-
|
53
|
+
xmlDocPtr xdoc;
|
54
54
|
VALUE document;
|
55
55
|
#ifndef LIBXML_XPATH_ENABLED
|
56
56
|
rb_raise(rb_eTypeError, "libxml was not compiled with XPath support.");
|
@@ -60,7 +60,7 @@ ruby_xml_xpath_context_initialize(VALUE self, VALUE node) {
|
|
60
60
|
{
|
61
61
|
document = rb_funcall(node, rb_intern("doc"), 0);
|
62
62
|
if NIL_P(document)
|
63
|
-
|
63
|
+
rb_raise(rb_eTypeError, "Supplied node must belong to a document.");
|
64
64
|
}
|
65
65
|
else if (rb_obj_is_kind_of(node, cXMLDocument) == Qtrue)
|
66
66
|
{
|
@@ -71,8 +71,8 @@ ruby_xml_xpath_context_initialize(VALUE self, VALUE node) {
|
|
71
71
|
rb_raise(rb_eTypeError, "Supplied argument must be a document or node.");
|
72
72
|
}
|
73
73
|
|
74
|
-
Data_Get_Struct(document,
|
75
|
-
DATA_PTR(self) = xmlXPathNewContext(
|
74
|
+
Data_Get_Struct(document, xmlDoc, xdoc);
|
75
|
+
DATA_PTR(self) = xmlXPathNewContext(xdoc);
|
76
76
|
|
77
77
|
/* Save the doc as an attribute, this will expose it to Ruby's GC. */
|
78
78
|
rb_iv_set(self, "@doc", document);
|
@@ -126,9 +126,9 @@ ruby_xml_xpath_context_register_namespaces_from_node(VALUE self, VALUE node) {
|
|
126
126
|
|
127
127
|
if (rb_obj_is_kind_of(node, cXMLDocument) == Qtrue)
|
128
128
|
{
|
129
|
-
|
130
|
-
Data_Get_Struct(node,
|
131
|
-
xnode = xmlDocGetRootElement(
|
129
|
+
xmlDocPtr xdoc;
|
130
|
+
Data_Get_Struct(node, xmlDoc, xdoc);
|
131
|
+
xnode = xmlDocGetRootElement(xdoc);
|
132
132
|
}
|
133
133
|
else if (rb_obj_is_kind_of(node, cXMLNode) == Qtrue)
|
134
134
|
{
|
@@ -253,31 +253,29 @@ ruby_xml_xpath_context_find(VALUE self, VALUE xpath_expr) {
|
|
253
253
|
xobject = xmlXPathEval((xmlChar*)StringValuePtr(xpath_expr), xctxt);
|
254
254
|
|
255
255
|
if (xobject == NULL)
|
256
|
-
|
257
|
-
|
258
|
-
|
256
|
+
{
|
257
|
+
/* xmlLastError is differnet than xctxt->lastError. Use
|
258
|
+
xmlLastError since it has the message set while xctxt->lastError
|
259
|
+
does not. */
|
260
|
+
xmlErrorPtr xerror = xmlGetLastError();
|
261
|
+
ruby_xml_raise(xerror);
|
262
|
+
}
|
263
|
+
|
259
264
|
result = ruby_xml_xpath_object_wrap(xobject);
|
260
265
|
rb_iv_set(result, "@context", self);
|
261
266
|
return result;
|
262
267
|
}
|
263
268
|
|
264
269
|
|
265
|
-
// Rdoc needs to know
|
266
|
-
#ifdef RDOC_NEVER_DEFINED
|
267
|
-
mLibXML = rb_define_module("LibXML");
|
268
|
-
mXML = rb_define_module_under(mLibXML, "XML");
|
269
|
-
mXPath = rb_define_module_under(mXML, "XPath");
|
270
|
-
#endif
|
271
|
-
|
272
270
|
void
|
273
271
|
ruby_init_xml_xpath_context(void) {
|
274
272
|
cXMLXPathContext = rb_define_class_under(mXPath, "Context", rb_cObject);
|
275
273
|
rb_define_alloc_func(cXMLXPathContext, ruby_xml_xpath_context_alloc);
|
274
|
+
rb_define_attr(cXMLXPathContext, "doc", 1, 0);
|
276
275
|
rb_define_method(cXMLXPathContext, "initialize", ruby_xml_xpath_context_initialize, 1);
|
277
276
|
rb_define_method(cXMLXPathContext, "register_namespaces", ruby_xml_xpath_context_register_namespaces, 1);
|
278
277
|
rb_define_method(cXMLXPathContext, "register_namespaces_from_node", ruby_xml_xpath_context_register_namespaces_from_node, 1);
|
279
278
|
rb_define_method(cXMLXPathContext, "register_namespace", ruby_xml_xpath_context_register_namespace, 2);
|
280
279
|
rb_define_method(cXMLXPathContext, "node=", ruby_xml_xpath_context_node_set, 1);
|
281
280
|
rb_define_method(cXMLXPathContext, "find", ruby_xml_xpath_context_find, 1);
|
282
|
-
rb_define_attr(cXMLXPathContext, "doc", 1, 0);
|
283
281
|
}
|
@@ -12,36 +12,41 @@
|
|
12
12
|
VALUE cXMLXPathObject;
|
13
13
|
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
xmlDocPtr
|
16
|
+
ruby_xml_xpath_object_doc(xmlXPathObjectPtr xpop)
|
17
|
+
{
|
18
|
+
xmlDocPtr result = NULL;
|
19
|
+
xmlNodePtr *nodes = NULL;
|
17
20
|
|
18
|
-
if (
|
19
|
-
|
21
|
+
if (xpop->type != XPATH_NODESET)
|
22
|
+
return result;
|
20
23
|
|
21
|
-
if (
|
22
|
-
return
|
24
|
+
if (!xpop->nodesetval || !xpop->nodesetval->nodeTab)
|
25
|
+
return result;
|
23
26
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
xpop->nodesetval->nodeTab[apos]);
|
31
|
-
}
|
27
|
+
nodes = xpop->nodesetval->nodeTab;
|
28
|
+
|
29
|
+
if (!(*nodes))
|
30
|
+
return result;
|
31
|
+
|
32
|
+
return (*nodes)->doc;
|
32
33
|
}
|
33
34
|
|
34
35
|
void
|
35
36
|
ruby_xml_xpath_object_mark(xmlXPathObjectPtr xpop)
|
36
37
|
{
|
37
|
-
void * xnp;
|
38
38
|
int i;
|
39
39
|
|
40
|
-
if ( xpop->type == XPATH_NODESET && xpop->nodesetval != NULL )
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
if ( xpop->type == XPATH_NODESET && xpop->nodesetval != NULL )
|
41
|
+
{
|
42
|
+
xmlDocPtr xdoc = ruby_xml_xpath_object_doc(xpop);
|
43
|
+
if (xdoc && xdoc->_private)
|
44
|
+
rb_gc_mark((VALUE)xdoc->_private);
|
45
|
+
|
46
|
+
for (i=0; i<xpop->nodesetval->nodeNr; i++)
|
47
|
+
{
|
48
|
+
if (xpop->nodesetval->nodeTab[i]->_private)
|
49
|
+
rb_gc_mark((VALUE)xpop->nodesetval->nodeTab[i]->_private);
|
45
50
|
}
|
46
51
|
}
|
47
52
|
}
|
@@ -49,12 +54,24 @@ ruby_xml_xpath_object_mark(xmlXPathObjectPtr xpop)
|
|
49
54
|
void
|
50
55
|
ruby_xml_xpath_object_free(xmlXPathObjectPtr xpop)
|
51
56
|
{
|
57
|
+
/* Before freeing this xpath object, get the
|
58
|
+
document it is dependent on if its a nodeset. */
|
59
|
+
xmlDocPtr xdoc = ruby_xml_xpath_object_doc(xpop);
|
60
|
+
|
61
|
+
/* Now free the xpath result */
|
52
62
|
xmlXPathFreeObject(xpop);
|
63
|
+
|
64
|
+
/* Now decrement the document object if this was a
|
65
|
+
XPATH_NODESET. Note this could free the document,
|
66
|
+
which is why we do it after freeing xpop.*/
|
67
|
+
if (xdoc)
|
68
|
+
ruby_xml_document_decr(xdoc);
|
53
69
|
}
|
54
70
|
|
55
71
|
VALUE
|
56
72
|
ruby_xml_xpath_object_wrap(xmlXPathObjectPtr xpop)
|
57
73
|
{
|
74
|
+
xmlDocPtr xdoc;
|
58
75
|
VALUE rval;
|
59
76
|
|
60
77
|
if ( xpop==NULL )
|
@@ -62,6 +79,10 @@ ruby_xml_xpath_object_wrap(xmlXPathObjectPtr xpop)
|
|
62
79
|
|
63
80
|
switch(xpop->type) {
|
64
81
|
case XPATH_NODESET:
|
82
|
+
xdoc = ruby_xml_xpath_object_doc(xpop);
|
83
|
+
if (xdoc)
|
84
|
+
ruby_xml_document_incr(xdoc);
|
85
|
+
|
65
86
|
rval = Data_Wrap_Struct(cXMLXPathObject,
|
66
87
|
ruby_xml_xpath_object_mark,
|
67
88
|
ruby_xml_xpath_object_free,
|
@@ -93,6 +114,24 @@ ruby_xml_xpath_object_wrap(xmlXPathObjectPtr xpop)
|
|
93
114
|
return rval;
|
94
115
|
}
|
95
116
|
|
117
|
+
static VALUE
|
118
|
+
ruby_xml_xpath_object_tabref(xmlXPathObjectPtr xpop, int apos) {
|
119
|
+
|
120
|
+
if (apos < 0 )
|
121
|
+
apos=xpop->nodesetval->nodeNr+apos;
|
122
|
+
|
123
|
+
if (apos < 0 || apos+1 > xpop->nodesetval->nodeNr )
|
124
|
+
return Qnil;
|
125
|
+
|
126
|
+
switch(xpop->nodesetval->nodeTab[apos]->type) {
|
127
|
+
case XML_ATTRIBUTE_NODE:
|
128
|
+
return ruby_xml_attr_wrap((xmlAttrPtr)xpop->nodesetval->nodeTab[apos]);
|
129
|
+
break;
|
130
|
+
default:
|
131
|
+
return ruby_xml_node2_wrap(cXMLNode,
|
132
|
+
xpop->nodesetval->nodeTab[apos]);
|
133
|
+
}
|
134
|
+
}
|
96
135
|
|
97
136
|
/*
|
98
137
|
* call-seq:
|
@@ -120,29 +159,6 @@ ruby_xml_xpath_object_to_a(VALUE self)
|
|
120
159
|
return(set_ary);
|
121
160
|
}
|
122
161
|
|
123
|
-
/*
|
124
|
-
* call-seq:
|
125
|
-
* xpath_object.set -> Node::Set
|
126
|
-
*
|
127
|
-
* Obtain the previous type object which is really
|
128
|
-
* just a proxy back to this object. Unless the
|
129
|
-
* type is not a NODESET, in which case it is nil.
|
130
|
-
*/
|
131
|
-
VALUE
|
132
|
-
ruby_xml_xpath_object_set(VALUE self)
|
133
|
-
{
|
134
|
-
xmlXPathObjectPtr xpop;
|
135
|
-
VALUE r;
|
136
|
-
|
137
|
-
Data_Get_Struct(self,xmlXPathObject,xpop);
|
138
|
-
r=Qnil;
|
139
|
-
|
140
|
-
if (xpop->type == XPATH_NODESET)
|
141
|
-
r=ruby_xml_node_set_new2(self);
|
142
|
-
|
143
|
-
return r;
|
144
|
-
}
|
145
|
-
|
146
162
|
/*
|
147
163
|
* call-seq:
|
148
164
|
* xpath_object.empty? -> (true|false)
|
@@ -300,19 +316,11 @@ ruby_xml_xpath_object_debug(VALUE self) {
|
|
300
316
|
return Qnil;
|
301
317
|
}
|
302
318
|
|
303
|
-
|
304
|
-
// Rdoc needs to know
|
305
|
-
#ifdef RDOC_NEVER_DEFINED
|
306
|
-
mLibXML = rb_define_module("LibXML");
|
307
|
-
mXML = rb_define_module_under(mLibXML, "XML");
|
308
|
-
mXPath = rb_define_module_under(mXML, "XPath");
|
309
|
-
#endif
|
310
|
-
|
311
319
|
void
|
312
320
|
ruby_init_xml_xpath_object(void) {
|
313
321
|
cXMLXPathObject = rb_define_class_under(mXPath, "Object", rb_cObject);
|
314
322
|
rb_include_module(cXMLXPathObject, rb_mEnumerable);
|
315
|
-
|
323
|
+
rb_define_attr(cXMLXPathObject, "context", 1, 0);
|
316
324
|
rb_define_method(cXMLXPathObject, "each", ruby_xml_xpath_object_each, 0);
|
317
325
|
rb_define_method(cXMLXPathObject, "xpath_type", ruby_xml_xpath_object_get_type, 0);
|
318
326
|
rb_define_method(cXMLXPathObject, "empty?", ruby_xml_xpath_object_empty_q, 0);
|
@@ -322,9 +330,5 @@ ruby_init_xml_xpath_object(void) {
|
|
322
330
|
rb_define_method(cXMLXPathObject, "to_a", ruby_xml_xpath_object_to_a, 0);
|
323
331
|
rb_define_method(cXMLXPathObject, "[]", ruby_xml_xpath_object_aref, 1);
|
324
332
|
rb_define_method(cXMLXPathObject, "string", ruby_xml_xpath_object_string, 0);
|
325
|
-
rb_define_attr(cXMLXPathObject, "context", 1, 0);
|
326
333
|
rb_define_method(cXMLXPathObject, "debug", ruby_xml_xpath_object_debug, 0);
|
327
|
-
|
328
|
-
/* Give the NodeSet type, but it is pointless */
|
329
|
-
rb_define_method(cXMLXPathObject, "set", ruby_xml_xpath_object_set, 0);
|
330
334
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_xpointer.c
|
1
|
+
/* $Id: ruby_xml_xpointer.c 566 2008-11-18 06:53:36Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -6,7 +6,15 @@
|
|
6
6
|
#include "ruby_xml_xpointer.h"
|
7
7
|
|
8
8
|
VALUE cXMLXPointer;
|
9
|
-
|
9
|
+
|
10
|
+
/*
|
11
|
+
* Document-class: LibXML::XML::XPointer
|
12
|
+
*
|
13
|
+
* The XML::Pointer class provides a standards based API for searching an xml document.
|
14
|
+
* XPointer is based on the XML Path Language (XML::XPath) and is documented
|
15
|
+
* at http://www.w3.org/TR/WD-xptr.
|
16
|
+
*/
|
17
|
+
|
10
18
|
|
11
19
|
VALUE
|
12
20
|
ruby_xml_xpointer_point(VALUE class, VALUE rnode, VALUE xptr_str) {
|
@@ -31,7 +39,7 @@ ruby_xml_xpointer_point(VALUE class, VALUE rnode, VALUE xptr_str) {
|
|
31
39
|
|
32
40
|
xpop = xmlXPtrEval((xmlChar*)StringValuePtr(xptr_str), xctxt);
|
33
41
|
if (!xpop)
|
34
|
-
|
42
|
+
ruby_xml_raise(&xmlLastError);
|
35
43
|
|
36
44
|
result = ruby_xml_xpath_object_wrap(xpop);
|
37
45
|
rb_iv_set(result, "@context", context);
|
@@ -98,7 +106,5 @@ ruby_xml_xpointer_range(VALUE class, VALUE rstart, VALUE rend) {
|
|
98
106
|
void
|
99
107
|
ruby_init_xml_xpointer(void) {
|
100
108
|
cXMLXPointer = rb_define_class_under(mXML, "XPointer", rb_cObject);
|
101
|
-
eXMLXPointerInvalidExpression = rb_define_class_under(cXMLXPointer, "InvalidExpression", eXMLError);
|
102
|
-
|
103
109
|
rb_define_singleton_method(cXMLXPointer, "range", ruby_xml_xpointer_range, 2);
|
104
110
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: sax_parser_callbacks.inc
|
1
|
+
/* $Id: sax_parser_callbacks.inc 544 2008-11-16 09:50:27Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -11,49 +11,51 @@ static void internal_subset_func(ruby_xml_sax_parser *cbp,
|
|
11
11
|
const char *sysid) {
|
12
12
|
VALUE handler = cbp->callbackHandler;
|
13
13
|
|
14
|
-
if (handler
|
15
|
-
|
16
|
-
|
14
|
+
if (handler != Qnil) {
|
15
|
+
VALUE rname = name ? rb_str_new2(name) : Qnil;
|
16
|
+
VALUE rextid = extid ? rb_str_new2(extid) : Qnil;
|
17
|
+
VALUE rsysid = sysid ? rb_str_new2(sysid) : Qnil;
|
18
|
+
rb_funcall(handler, cbidOnInternalSubset, 3, rname, rextid, rsysid);
|
17
19
|
}
|
18
20
|
}
|
19
21
|
|
20
22
|
static void is_standalone_func(ruby_xml_sax_parser *cbp) {
|
21
23
|
VALUE handler = cbp->callbackHandler;
|
22
24
|
|
23
|
-
if (handler
|
24
|
-
rb_funcall(handler,cbidOnIsStandalone,0);
|
25
|
+
if (handler != Qnil) {
|
26
|
+
rb_funcall(handler, cbidOnIsStandalone,0);
|
25
27
|
}
|
26
28
|
}
|
27
29
|
|
28
30
|
static void has_internal_subset_func(ruby_xml_sax_parser *cbp) {
|
29
31
|
VALUE handler = cbp->callbackHandler;
|
30
32
|
|
31
|
-
if (handler
|
32
|
-
rb_funcall(handler,cbidOnHasInternalSubset,0);
|
33
|
+
if (handler != Qnil) {
|
34
|
+
rb_funcall(handler, cbidOnHasInternalSubset, 0);
|
33
35
|
}
|
34
36
|
}
|
35
37
|
|
36
38
|
static void has_external_subset_func(ruby_xml_sax_parser *cbp) {
|
37
39
|
VALUE handler = cbp->callbackHandler;
|
38
40
|
|
39
|
-
if (handler
|
40
|
-
rb_funcall(handler,cbidOnHasExternalSubset,0);
|
41
|
+
if (handler != Qnil) {
|
42
|
+
rb_funcall(handler, cbidOnHasExternalSubset, 0);
|
41
43
|
}
|
42
44
|
}
|
43
45
|
|
44
46
|
static void start_document_func(ruby_xml_sax_parser *cbp) {
|
45
47
|
VALUE handler = cbp->callbackHandler;
|
46
48
|
|
47
|
-
if (handler
|
48
|
-
rb_funcall(handler,cbidOnStartDocument,0);
|
49
|
+
if (handler != Qnil) {
|
50
|
+
rb_funcall(handler, cbidOnStartDocument, 0);
|
49
51
|
}
|
50
52
|
}
|
51
53
|
|
52
54
|
static void end_document_func(ruby_xml_sax_parser *cbp) {
|
53
55
|
VALUE handler = cbp->callbackHandler;
|
54
56
|
|
55
|
-
if (handler
|
56
|
-
rb_funcall(handler,cbidOnEndDocument,0);
|
57
|
+
if (handler != Qnil) {
|
58
|
+
rb_funcall(handler, cbidOnEndDocument, 0);
|
57
59
|
}
|
58
60
|
}
|
59
61
|
|
@@ -70,17 +72,16 @@ static void start_element_func(ruby_xml_sax_parser *cbp,
|
|
70
72
|
}
|
71
73
|
}
|
72
74
|
|
73
|
-
if (handler
|
74
|
-
rb_funcall(handler,cbidOnStartElement,2,rb_str_new2(name),ahsh);
|
75
|
+
if (handler != Qnil) {
|
76
|
+
rb_funcall(handler, cbidOnStartElement, 2, rb_str_new2(name), ahsh);
|
75
77
|
}
|
76
78
|
}
|
77
79
|
|
78
|
-
static void end_element_func(ruby_xml_sax_parser *cbp,
|
79
|
-
const char *name) {
|
80
|
+
static void end_element_func(ruby_xml_sax_parser *cbp, const char *name) {
|
80
81
|
VALUE handler = cbp->callbackHandler;
|
81
82
|
|
82
|
-
if (handler
|
83
|
-
rb_funcall(handler,cbidOnEndElement,1,rb_str_new2(name));
|
83
|
+
if (handler != Qnil) {
|
84
|
+
rb_funcall(handler, cbidOnEndElement, 1, rb_str_new2(name));
|
84
85
|
}
|
85
86
|
}
|
86
87
|
|
@@ -88,8 +89,8 @@ static void reference_func(ruby_xml_sax_parser *cbp,
|
|
88
89
|
const char *name) {
|
89
90
|
VALUE handler = cbp->callbackHandler;
|
90
91
|
|
91
|
-
if (handler
|
92
|
-
rb_funcall(handler,cbidOnReference,1,rb_str_new2(name));
|
92
|
+
if (handler != Qnil) {
|
93
|
+
rb_funcall(handler, cbidOnReference,1,rb_str_new2(name));
|
93
94
|
}
|
94
95
|
}
|
95
96
|
|
@@ -97,8 +98,9 @@ static void characters_func(ruby_xml_sax_parser *cbp,
|
|
97
98
|
const char *chars, int len) {
|
98
99
|
VALUE handler = cbp->callbackHandler;
|
99
100
|
|
100
|
-
if (handler
|
101
|
-
|
101
|
+
if (handler != Qnil) {
|
102
|
+
VALUE rchars = rb_str_new(chars, len);
|
103
|
+
rb_funcall(handler, cbidOnCharacters, 1, rchars);
|
102
104
|
}
|
103
105
|
}
|
104
106
|
|
@@ -106,9 +108,10 @@ static void processing_instruction_func(ruby_xml_sax_parser *cbp,
|
|
106
108
|
const char *target, const char *data) {
|
107
109
|
VALUE handler = cbp->callbackHandler;
|
108
110
|
|
109
|
-
if (handler
|
110
|
-
|
111
|
-
|
111
|
+
if (handler != Qnil) {
|
112
|
+
VALUE rtarget = target ? rb_str_new2(target) : Qnil;
|
113
|
+
VALUE rdata = data ? rb_str_new2(data) : Qnil;
|
114
|
+
rb_funcall(handler, cbidOnProcessingInstruction, 2, rtarget, rdata);
|
112
115
|
}
|
113
116
|
}
|
114
117
|
|
@@ -116,8 +119,8 @@ static void comment_func(ruby_xml_sax_parser *cbp,
|
|
116
119
|
const char *msg) {
|
117
120
|
VALUE handler = cbp->callbackHandler;
|
118
121
|
|
119
|
-
if (handler
|
120
|
-
rb_funcall(handler,cbidOnComment,1,rb_str_new2(msg));
|
122
|
+
if (handler != Qnil) {
|
123
|
+
rb_funcall(handler, cbidOnComment,1,rb_str_new2(msg));
|
121
124
|
}
|
122
125
|
}
|
123
126
|
|
@@ -137,7 +140,7 @@ static void warning_func(ruby_xml_sax_parser *cbp,
|
|
137
140
|
const char *msg, ...) {
|
138
141
|
VALUE handler = cbp->callbackHandler;
|
139
142
|
|
140
|
-
if (handler
|
143
|
+
if (handler != Qnil) {
|
141
144
|
FORMAT_AND_CALL(cbidOnXmlParserWarning);
|
142
145
|
}
|
143
146
|
}
|
@@ -146,7 +149,7 @@ static void error_func(ruby_xml_sax_parser *cbp,
|
|
146
149
|
const char *msg, ...) {
|
147
150
|
VALUE handler = cbp->callbackHandler;
|
148
151
|
|
149
|
-
if (handler
|
152
|
+
if (handler != Qnil) {
|
150
153
|
FORMAT_AND_CALL(cbidOnXmlParserError);
|
151
154
|
}
|
152
155
|
}
|
@@ -155,7 +158,7 @@ static void fatal_error_func(ruby_xml_sax_parser *cbp,
|
|
155
158
|
const char *msg, ...) {
|
156
159
|
VALUE handler = cbp->callbackHandler;
|
157
160
|
|
158
|
-
if (handler
|
161
|
+
if (handler != Qnil) {
|
159
162
|
FORMAT_AND_CALL(cbidOnXmlParserFatalError);
|
160
163
|
}
|
161
164
|
}
|
@@ -164,8 +167,8 @@ static void cdata_block_func(ruby_xml_sax_parser *cbp,
|
|
164
167
|
const char *value, int len) {
|
165
168
|
VALUE handler = cbp->callbackHandler;
|
166
169
|
|
167
|
-
if (handler
|
168
|
-
rb_funcall(handler,cbidOnCdataBlock,1,rb_str_new(value, len));
|
170
|
+
if (handler != Qnil) {
|
171
|
+
rb_funcall(handler, cbidOnCdataBlock,1,rb_str_new(value, len));
|
169
172
|
}
|
170
173
|
}
|
171
174
|
|
@@ -175,9 +178,11 @@ static void external_subset_func(ruby_xml_sax_parser *cbp,
|
|
175
178
|
const char *sysid) {
|
176
179
|
VALUE handler = cbp->callbackHandler;
|
177
180
|
|
178
|
-
if (handler
|
179
|
-
|
180
|
-
|
181
|
+
if (handler != Qnil) {
|
182
|
+
VALUE rname = name ? rb_str_new2(name) : Qnil;
|
183
|
+
VALUE rextid = extid ? rb_str_new2(extid) : Qnil;
|
184
|
+
VALUE rsysid = sysid ? rb_str_new2(sysid) : Qnil;
|
185
|
+
rb_funcall(handler, cbidOnExternalSubset, 3, rname, rextid, rsysid);
|
181
186
|
}
|
182
187
|
}
|
183
188
|
|