libxml-ruby 0.8.3 → 0.9.0

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.
Files changed (168) hide show
  1. data/CHANGES +18 -0
  2. data/RAKEFILE +15 -39
  3. data/README +48 -47
  4. data/ext/libxml/libxml.c +847 -22
  5. data/ext/libxml/ruby_libxml.h +71 -95
  6. data/ext/libxml/ruby_xml_attr.c +500 -500
  7. data/ext/libxml/ruby_xml_attributes.c +1 -1
  8. data/ext/libxml/ruby_xml_document.c +1144 -1135
  9. data/ext/libxml/ruby_xml_document.h +4 -11
  10. data/ext/libxml/ruby_xml_dtd.c +27 -0
  11. data/ext/libxml/ruby_xml_encoding.c +164 -0
  12. data/ext/libxml/ruby_xml_encoding.h +13 -0
  13. data/ext/libxml/ruby_xml_error.c +941 -0
  14. data/ext/libxml/ruby_xml_error.h +13 -0
  15. data/ext/libxml/ruby_xml_html_parser.c +71 -387
  16. data/ext/libxml/ruby_xml_html_parser.h +1 -17
  17. data/ext/libxml/ruby_xml_input.c +179 -0
  18. data/ext/libxml/ruby_xml_input.h +18 -0
  19. data/ext/libxml/ruby_xml_input_cbg.c +17 -3
  20. data/ext/libxml/ruby_xml_node.c +1566 -1582
  21. data/ext/libxml/ruby_xml_node.h +1 -4
  22. data/ext/libxml/ruby_xml_ns.c +14 -3
  23. data/ext/libxml/ruby_xml_parser.c +164 -1398
  24. data/ext/libxml/ruby_xml_parser.h +5 -17
  25. data/ext/libxml/ruby_xml_parser_context.c +131 -169
  26. data/ext/libxml/ruby_xml_parser_context.h +2 -9
  27. data/ext/libxml/ruby_xml_reader.c +910 -945
  28. data/ext/libxml/ruby_xml_relaxng.c +32 -3
  29. data/ext/libxml/ruby_xml_sax_parser.c +106 -364
  30. data/ext/libxml/ruby_xml_sax_parser.h +1 -37
  31. data/ext/libxml/ruby_xml_schema.c +174 -145
  32. data/ext/libxml/ruby_xml_xinclude.c +9 -5
  33. data/ext/libxml/ruby_xml_xpath.c +25 -6
  34. data/ext/libxml/ruby_xml_xpath.h +1 -2
  35. data/ext/libxml/ruby_xml_xpath_context.c +17 -19
  36. data/ext/libxml/ruby_xml_xpath_object.c +60 -56
  37. data/ext/libxml/ruby_xml_xpointer.c +11 -5
  38. data/ext/libxml/sax_parser_callbacks.inc +42 -37
  39. data/ext/libxml/version.h +3 -3
  40. data/ext/mingw/Rakefile +20 -27
  41. data/ext/mingw/build.rake +41 -0
  42. data/ext/vc/libxml_ruby.vcproj +23 -15
  43. data/lib/libxml.rb +8 -2
  44. data/lib/libxml/document.rb +16 -4
  45. data/lib/libxml/error.rb +84 -0
  46. data/lib/libxml/hpricot.rb +76 -0
  47. data/lib/libxml/html_parser.rb +61 -0
  48. data/lib/libxml/node.rb +36 -25
  49. data/lib/libxml/parser.rb +312 -33
  50. data/lib/libxml/parser_context.rb +17 -0
  51. data/lib/libxml/properties.rb +15 -2
  52. data/lib/libxml/reader.rb +15 -0
  53. data/lib/libxml/sax_callbacks.rb +179 -0
  54. data/lib/libxml/sax_parser.rb +42 -0
  55. data/lib/libxml/tree.rb +1 -2
  56. data/lib/libxml/xpath_object.rb +12 -0
  57. data/test/model/atom.xml +4 -0
  58. data/test/tc_attributes.rb +43 -19
  59. data/test/tc_document.rb +1 -1
  60. data/test/tc_document_write.rb +15 -8
  61. data/test/tc_dtd.rb +36 -20
  62. data/test/tc_encoding.rb +13 -0
  63. data/test/tc_error.rb +136 -0
  64. data/test/tc_node.rb +2 -3
  65. data/test/tc_node_copy.rb +1 -1
  66. data/test/tc_node_edit.rb +6 -0
  67. data/test/tc_ns.rb +18 -0
  68. data/test/tc_parser.rb +113 -228
  69. data/test/tc_parser_context.rb +1 -2
  70. data/test/tc_reader.rb +24 -14
  71. data/test/tc_relaxng.rb +18 -6
  72. data/test/tc_sax_parser.rb +48 -13
  73. data/test/tc_schema.rb +20 -8
  74. data/test/tc_well_formed.rb +2 -1
  75. data/test/tc_xml.rb +212 -0
  76. data/test/tc_xpath.rb +60 -46
  77. data/test/tc_xpointer.rb +7 -11
  78. data/test/test_suite.rb +4 -3
  79. metadata +26 -109
  80. data/doc/rdoc/classes/LibXML.html +0 -241
  81. data/doc/rdoc/classes/LibXML/XML.html +0 -185
  82. data/doc/rdoc/classes/LibXML/XML/Attr.html +0 -1010
  83. data/doc/rdoc/classes/LibXML/XML/Attributes.html +0 -526
  84. data/doc/rdoc/classes/LibXML/XML/Document.html +0 -1489
  85. data/doc/rdoc/classes/LibXML/XML/Dtd.html +0 -213
  86. data/doc/rdoc/classes/LibXML/XML/Error.html +0 -117
  87. data/doc/rdoc/classes/LibXML/XML/HTMLParser.html +0 -348
  88. data/doc/rdoc/classes/LibXML/XML/InputCallbacks.html +0 -160
  89. data/doc/rdoc/classes/LibXML/XML/NS.html +0 -381
  90. data/doc/rdoc/classes/LibXML/XML/Node.html +0 -3396
  91. data/doc/rdoc/classes/LibXML/XML/Node/FailedModify.html +0 -123
  92. data/doc/rdoc/classes/LibXML/XML/Node/Set.html +0 -440
  93. data/doc/rdoc/classes/LibXML/XML/Node/SetNamespace.html +0 -123
  94. data/doc/rdoc/classes/LibXML/XML/Node/UnknownType.html +0 -123
  95. data/doc/rdoc/classes/LibXML/XML/Parser.html +0 -2239
  96. data/doc/rdoc/classes/LibXML/XML/Parser/Context.html +0 -1255
  97. data/doc/rdoc/classes/LibXML/XML/Parser/ParseError.html +0 -123
  98. data/doc/rdoc/classes/LibXML/XML/Reader.html +0 -2264
  99. data/doc/rdoc/classes/LibXML/XML/RelaxNG.html +0 -237
  100. data/doc/rdoc/classes/LibXML/XML/SaxParser.html +0 -415
  101. data/doc/rdoc/classes/LibXML/XML/Schema.html +0 -308
  102. data/doc/rdoc/classes/LibXML/XML/State.html +0 -124
  103. data/doc/rdoc/classes/LibXML/XML/Tree.html +0 -111
  104. data/doc/rdoc/classes/LibXML/XML/XInclude.html +0 -123
  105. data/doc/rdoc/classes/LibXML/XML/XInclude/Error.html +0 -117
  106. data/doc/rdoc/classes/LibXML/XML/XMLParserOptions.html +0 -198
  107. data/doc/rdoc/classes/LibXML/XML/XPath.html +0 -184
  108. data/doc/rdoc/classes/LibXML/XML/XPath/Context.html +0 -404
  109. data/doc/rdoc/classes/LibXML/XML/XPath/InvalidPath.html +0 -172
  110. data/doc/rdoc/classes/LibXML/XML/XPath/Object.html +0 -627
  111. data/doc/rdoc/classes/LibXML/XML/XPointer.html +0 -170
  112. data/doc/rdoc/classes/LibXML/XML/XPointer/Context.html +0 -123
  113. data/doc/rdoc/classes/LibXML/XML/XPointer/Context/InvalidPath.html +0 -117
  114. data/doc/rdoc/classes/LibXML/XML/XPointer/InvalidExpression.html +0 -124
  115. data/doc/rdoc/classes/singleton.html +0 -114
  116. data/doc/rdoc/created.rid +0 -1
  117. data/doc/rdoc/files/CHANGES.html +0 -442
  118. data/doc/rdoc/files/LICENSE.html +0 -133
  119. data/doc/rdoc/files/README.html +0 -388
  120. data/doc/rdoc/files/VERSION.html +0 -107
  121. data/doc/rdoc/files/ext/libxml/cbg_c.html +0 -101
  122. data/doc/rdoc/files/ext/libxml/libxml_c.html +0 -101
  123. data/doc/rdoc/files/ext/libxml/ruby_xml_attr_c.html +0 -101
  124. data/doc/rdoc/files/ext/libxml/ruby_xml_attributes_c.html +0 -101
  125. data/doc/rdoc/files/ext/libxml/ruby_xml_document_c.html +0 -101
  126. data/doc/rdoc/files/ext/libxml/ruby_xml_dtd_c.html +0 -101
  127. data/doc/rdoc/files/ext/libxml/ruby_xml_html_parser_c.html +0 -101
  128. data/doc/rdoc/files/ext/libxml/ruby_xml_input_cbg_c.html +0 -101
  129. data/doc/rdoc/files/ext/libxml/ruby_xml_node_c.html +0 -101
  130. data/doc/rdoc/files/ext/libxml/ruby_xml_node_set_c.html +0 -101
  131. data/doc/rdoc/files/ext/libxml/ruby_xml_ns_c.html +0 -101
  132. data/doc/rdoc/files/ext/libxml/ruby_xml_parser_c.html +0 -101
  133. data/doc/rdoc/files/ext/libxml/ruby_xml_parser_context_c.html +0 -101
  134. data/doc/rdoc/files/ext/libxml/ruby_xml_reader_c.html +0 -101
  135. data/doc/rdoc/files/ext/libxml/ruby_xml_relaxng_c.html +0 -101
  136. data/doc/rdoc/files/ext/libxml/ruby_xml_sax_parser_c.html +0 -101
  137. data/doc/rdoc/files/ext/libxml/ruby_xml_schema_c.html +0 -101
  138. data/doc/rdoc/files/ext/libxml/ruby_xml_state_c.html +0 -101
  139. data/doc/rdoc/files/ext/libxml/ruby_xml_xinclude_c.html +0 -101
  140. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_c.html +0 -101
  141. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_context_c.html +0 -101
  142. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_object_c.html +0 -101
  143. data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_c.html +0 -101
  144. data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_context_c.html +0 -101
  145. data/doc/rdoc/files/lib/libxml/attr_rb.html +0 -108
  146. data/doc/rdoc/files/lib/libxml/attributes_rb.html +0 -108
  147. data/doc/rdoc/files/lib/libxml/document_rb.html +0 -108
  148. data/doc/rdoc/files/lib/libxml/node_rb.html +0 -108
  149. data/doc/rdoc/files/lib/libxml/node_set_rb.html +0 -108
  150. data/doc/rdoc/files/lib/libxml/parser_options_rb.html +0 -107
  151. data/doc/rdoc/files/lib/libxml/parser_rb.html +0 -101
  152. data/doc/rdoc/files/lib/libxml/properties_rb.html +0 -108
  153. data/doc/rdoc/files/lib/libxml/tree_rb.html +0 -107
  154. data/doc/rdoc/files/lib/libxml_rb.html +0 -124
  155. data/doc/rdoc/files/lib/xml/libxml_rb.html +0 -124
  156. data/doc/rdoc/files/lib/xml_rb.html +0 -134
  157. data/doc/rdoc/fr_class_index.html +0 -62
  158. data/doc/rdoc/fr_file_index.html +0 -66
  159. data/doc/rdoc/fr_method_index.html +0 -392
  160. data/doc/rdoc/index.html +0 -24
  161. data/doc/rdoc/rdoc-style.css +0 -208
  162. data/ext/libxml/ruby_xml_node_set.c +0 -172
  163. data/ext/libxml/ruby_xml_node_set.h +0 -20
  164. data/ext/libxml/ruby_xml_xpointer_context.c +0 -22
  165. data/ext/libxml/ruby_xml_xpointer_context.h +0 -18
  166. data/lib/libxml/node_set.rb +0 -27
  167. data/test/tc_node_set.rb +0 -24
  168. data/test/tc_node_set2.rb +0 -37
@@ -1,4 +1,4 @@
1
- /* $Id: ruby_xml_xpath.h 418 2008-07-14 16:44:59Z cfis $ */
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 461 2008-07-15 21:35:56Z cfis $ */
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
- ruby_xml_document_t *rxd;
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
- rb_raise(rb_eTypeError, "Supplied node must belong to a document.");
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, ruby_xml_document_t, rxd);
75
- DATA_PTR(self) = xmlXPathNewContext(rxd->doc);
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
- ruby_xml_document_t *rdoc;
130
- Data_Get_Struct(node, ruby_xml_document_t, rdoc);
131
- xnode = xmlDocGetRootElement(rdoc->doc);
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
- rb_raise(eXMLXPathInvalidPath,
257
- "Invalid XPath expression (expr could not be evaluated)");
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
- static VALUE
16
- ruby_xml_xpath_object_tabref(xmlXPathObjectPtr xpop, int apos) {
15
+ xmlDocPtr
16
+ ruby_xml_xpath_object_doc(xmlXPathObjectPtr xpop)
17
+ {
18
+ xmlDocPtr result = NULL;
19
+ xmlNodePtr *nodes = NULL;
17
20
 
18
- if (apos < 0 )
19
- apos=xpop->nodesetval->nodeNr+apos;
21
+ if (xpop->type != XPATH_NODESET)
22
+ return result;
20
23
 
21
- if (apos < 0 || apos+1 > xpop->nodesetval->nodeNr )
22
- return Qnil;
24
+ if (!xpop->nodesetval || !xpop->nodesetval->nodeTab)
25
+ return result;
23
26
 
24
- switch(xpop->nodesetval->nodeTab[apos]->type) {
25
- case XML_ATTRIBUTE_NODE:
26
- return ruby_xml_attr_wrap((xmlAttrPtr)xpop->nodesetval->nodeTab[apos]);
27
- break;
28
- default:
29
- return ruby_xml_node2_wrap(cXMLNode,
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
- for (i=0; i<xpop->nodesetval->nodeNr; i++) {
42
- xnp=xpop->nodesetval->nodeTab[i]->_private;
43
- if (xnp != NULL)
44
- rb_gc_mark((VALUE)xnp);
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 461 2008-07-15 21:35:56Z cfis $ */
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
- VALUE eXMLXPointerInvalidExpression;
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
- rb_raise(eXMLXPointerInvalidExpression, "Invalid xpointer expression");
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 120 2006-11-26 12:57:56Z roscopeco $ */
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 && handler != Qnil) {
15
- rb_funcall(handler, cbidOnInternalSubset, 3, rb_str_new2(name),
16
- rb_str_new2(extid), rb_str_new2(sysid));
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
101
- rb_funcall(handler,cbidOnCharacters,1,rb_str_new(chars, len));
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 && handler != Qnil) {
110
- rb_funcall(handler, cbidOnProcessingInstruction, 2,
111
- rb_str_new2(target),rb_str_new2(data));
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
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 && handler != Qnil) {
179
- rb_funcall(handler, cbidOnExternalSubset, 3, rb_str_new2(name),
180
- rb_str_new2(extid), rb_str_new2(sysid));
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