libxml-ruby 0.8.1-x86-mswin32-60 → 0.8.2-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 +21 -0
- data/RAKEFILE +213 -0
- data/README +32 -11
- data/doc/rdoc/classes/LibXML.html +4 -0
- data/doc/rdoc/classes/LibXML/XML.html +7 -0
- data/doc/rdoc/classes/LibXML/XML/Attr.html +187 -177
- data/doc/rdoc/classes/LibXML/XML/Attributes.html +62 -61
- data/doc/rdoc/classes/LibXML/XML/Document.html +318 -254
- data/doc/rdoc/classes/LibXML/XML/Dtd.html +62 -8
- data/doc/rdoc/classes/LibXML/XML/Error.html +6 -0
- data/doc/rdoc/classes/LibXML/XML/HTMLParser.html +59 -41
- data/doc/rdoc/classes/LibXML/XML/InputCallbacks.html +12 -6
- data/doc/rdoc/classes/LibXML/XML/NS.html +65 -50
- data/doc/rdoc/classes/LibXML/XML/Node.html +671 -630
- data/doc/rdoc/classes/LibXML/XML/Node/FailedModify.html +12 -0
- data/doc/rdoc/classes/LibXML/XML/Node/Set.html +64 -60
- data/doc/rdoc/classes/LibXML/XML/Node/SetNamespace.html +12 -0
- data/doc/rdoc/classes/LibXML/XML/Node/UnknownType.html +12 -0
- data/doc/rdoc/classes/LibXML/XML/Parser.html +407 -383
- data/doc/rdoc/classes/LibXML/XML/Parser/Context.html +241 -219
- data/doc/rdoc/classes/LibXML/XML/Parser/ParseError.html +12 -0
- data/doc/rdoc/classes/LibXML/XML/Reader.html +421 -331
- data/doc/rdoc/classes/LibXML/XML/RelaxNG.html +237 -0
- data/doc/rdoc/classes/LibXML/XML/SaxParser.html +79 -60
- data/doc/rdoc/classes/LibXML/XML/Schema.html +109 -22
- data/doc/rdoc/classes/LibXML/XML/State.html +6 -0
- data/doc/rdoc/classes/LibXML/XML/XInclude.html +6 -0
- data/doc/rdoc/classes/LibXML/XML/XInclude/Error.html +6 -0
- data/doc/rdoc/classes/LibXML/XML/XPath.html +4 -48
- data/doc/rdoc/classes/LibXML/XML/XPath/Context.html +6 -5
- data/doc/rdoc/classes/LibXML/XML/XPath/InvalidPath.html +61 -0
- data/doc/rdoc/classes/LibXML/XML/XPath/Object.html +12 -8
- data/doc/rdoc/classes/LibXML/XML/XPointer.html +14 -8
- data/doc/rdoc/classes/LibXML/XML/XPointer/Context.html +6 -0
- data/doc/rdoc/classes/LibXML/XML/XPointer/Context/InvalidPath.html +6 -0
- data/doc/rdoc/classes/LibXML/XML/XPointer/InvalidExpression.html +13 -0
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/CHANGES.html +38 -10
- data/doc/rdoc/files/LICENSE.html +1 -1
- data/doc/rdoc/files/README.html +57 -23
- data/doc/rdoc/files/VERSION.html +1 -1
- data/doc/rdoc/files/ext/libxml/cbg_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/libxml_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_attr_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_attributes_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_document_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_dtd_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_html_parser_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_input_cbg_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_node_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_node_set_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_ns_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_parser_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_parser_context_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_reader_c.html +1 -1
- data/doc/rdoc/{classes/XML.html → files/ext/libxml/ruby_xml_relaxng_c.html} +16 -35
- data/doc/rdoc/files/ext/libxml/ruby_xml_sax_parser_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_schema_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_state_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_xinclude_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_context_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_object_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_c.html +1 -1
- data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_context_c.html +1 -1
- data/doc/rdoc/files/lib/libxml/attr_rb.html +1 -1
- data/doc/rdoc/files/lib/libxml/attributes_rb.html +1 -1
- data/doc/rdoc/files/lib/libxml/document_rb.html +1 -1
- data/doc/rdoc/files/lib/libxml/node_rb.html +1 -1
- data/doc/rdoc/files/lib/libxml/node_set_rb.html +1 -1
- data/doc/rdoc/files/lib/libxml/parser_options_rb.html +1 -1
- data/doc/rdoc/files/lib/libxml/parser_rb.html +1 -1
- data/doc/rdoc/files/lib/libxml/properties_rb.html +1 -1
- data/doc/rdoc/files/lib/libxml/tree_rb.html +1 -1
- data/doc/rdoc/files/lib/libxml_rb.html +2 -2
- data/doc/rdoc/files/lib/xml/libxml_rb.html +12 -2
- data/doc/rdoc/files/lib/xml_rb.html +134 -0
- data/doc/rdoc/fr_class_index.html +1 -1
- data/doc/rdoc/fr_file_index.html +2 -0
- data/doc/rdoc/fr_method_index.html +349 -344
- data/ext/libxml/libxml.c +2 -1
- data/ext/libxml/ruby_libxml.h +1 -0
- data/ext/libxml/ruby_xml_attr.c +8 -2
- data/ext/libxml/ruby_xml_attributes.c +5 -5
- data/ext/libxml/ruby_xml_document.c +41 -2
- data/ext/libxml/ruby_xml_dtd.c +169 -169
- data/ext/libxml/ruby_xml_html_parser.c +449 -449
- data/ext/libxml/ruby_xml_input_cbg.c +165 -165
- data/ext/libxml/ruby_xml_node.c +1 -1
- data/ext/libxml/ruby_xml_node_set.c +172 -172
- data/ext/libxml/ruby_xml_ns.c +145 -145
- data/ext/libxml/ruby_xml_parser.c +1398 -1398
- data/ext/libxml/ruby_xml_parser_context.c +697 -697
- data/ext/libxml/ruby_xml_reader.c +44 -0
- data/ext/libxml/ruby_xml_reader.h +14 -14
- data/ext/libxml/ruby_xml_relaxng.c +97 -0
- data/ext/libxml/ruby_xml_relaxng.h +15 -0
- data/ext/libxml/ruby_xml_sax_parser.c +486 -486
- data/ext/libxml/ruby_xml_schema.c +1 -1
- data/ext/libxml/ruby_xml_state.c +4 -4
- data/ext/libxml/ruby_xml_xinclude.c +21 -21
- data/ext/libxml/ruby_xml_xpath.c +89 -89
- data/ext/libxml/ruby_xml_xpath_context.c +283 -283
- data/ext/libxml/ruby_xml_xpath_object.c +5 -5
- data/ext/libxml/ruby_xml_xpointer.c +104 -104
- data/ext/libxml/ruby_xml_xpointer_context.c +22 -22
- data/ext/libxml/version.h +2 -2
- data/ext/libxml/version.h.rej +17 -0
- data/ext/mingw/Rakefile +41 -0
- data/{mingw → lib}/libiconv-2.dll +0 -0
- data/lib/libxml.rb +15 -4
- data/lib/libxml2-2.dll +0 -0
- data/lib/libxml_ruby.dll.a +0 -0
- data/lib/libxml_ruby.so +0 -0
- data/lib/xml.rb +14 -0
- data/lib/xml/libxml.rb +4 -1
- data/test/etc_doc_to_s.rb +1 -1
- data/test/ets_copy_bug.rb +1 -1
- data/test/ets_copy_bug3.rb +1 -1
- data/test/ets_doc_file.rb +1 -1
- data/test/ets_doc_to_s.rb +1 -1
- data/test/ets_node_gc.rb +1 -1
- data/test/ets_tsr.rb +1 -1
- data/test/model/shiporder.rnc +28 -0
- data/test/model/shiporder.rng +86 -0
- data/test/{tc_xml_attributes.rb → tc_attributes.rb} +1 -10
- data/test/{tc_xml_document.rb → tc_document.rb} +1 -1
- data/test/{tc_xml_document_write.rb → tc_document_write.rb} +1 -1
- data/test/{tc_xml_dtd.rb → tc_dtd.rb} +1 -1
- data/test/{tc_xml_html_parser.rb → tc_html_parser.rb} +1 -1
- data/test/{tc_xml_node.rb → tc_node.rb} +1 -1
- data/test/{tc_xml_node_attr.rb → tc_node_attr.rb} +1 -1
- data/test/{tc_xml_node_cdata.rb → tc_node_cdata.rb} +24 -5
- data/test/{tc_xml_node_comment.rb → tc_node_comment.rb} +1 -1
- data/test/{tc_xml_node_copy.rb → tc_node_copy.rb} +1 -1
- data/test/{tc_xml_node_edit.rb → tc_node_edit.rb} +1 -1
- data/test/{tc_xml_node_set.rb → tc_node_set.rb} +1 -1
- data/test/{tc_xml_node_set2.rb → tc_node_set2.rb} +1 -1
- data/test/{tc_xml_node_text.rb → tc_node_text.rb} +1 -1
- data/test/{tc_xml_node_xlink.rb → tc_node_xlink.rb} +2 -2
- data/test/{tc_xml_parser.rb → tc_parser.rb} +1 -1
- data/test/{tc_xml_parser_context.rb → tc_parser_context.rb} +1 -1
- data/test/{tc_xml_properties.rb → tc_properties.rb} +1 -7
- data/test/{tc_xml_reader.rb → tc_reader.rb} +1 -1
- data/test/tc_relaxng.rb +39 -0
- data/test/{tc_xml_sax_parser.rb → tc_sax_parser.rb} +1 -1
- data/test/{tc_xml_schema.rb → tc_schema.rb} +1 -1
- data/test/{tc_xml_traversal.rb → tc_traversal.rb} +1 -1
- data/test/{tc_xml_xinclude.rb → tc_xinclude.rb} +1 -1
- data/test/{tc_xml_xpath.rb → tc_xpath.rb} +1 -1
- data/test/{tc_xml_xpath_context.rb → tc_xpath_context.rb} +1 -1
- data/test/{tc_xml_xpointer.rb → tc_xpointer.rb} +1 -1
- data/test/test_suite.rb +26 -25
- metadata +103 -100
- data/benchmark/depixelate.rb +0 -632
- data/benchmark/hamlet.xml +0 -9055
- data/benchmark/sock_entries.xml +0 -507
- data/benchmark/throughput.rb +0 -39
- data/benchmark/xml_benchmarks.rb +0 -227
- data/mingw/libxml2-2.dll +0 -0
- data/mingw/libxml_ruby.so +0 -0
- data/test/gc.log +0 -0
- data/vc/libxml_ruby.sln +0 -20
- data/vc/libxml_ruby.vcproj +0 -389
data/ext/libxml/libxml.c
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: libxml.c
|
1
|
+
/* $Id: libxml.c 489 2008-07-21 22:41:11Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -52,6 +52,7 @@ Init_libxml_ruby(void) {
|
|
52
52
|
ruby_init_input_callbacks();
|
53
53
|
ruby_init_xml_dtd();
|
54
54
|
ruby_init_xml_schema();
|
55
|
+
ruby_init_xml_relaxng();
|
55
56
|
ruby_init_xml_reader();
|
56
57
|
|
57
58
|
ruby_xml_parser_default_substitute_entities_set(cXMLParser, Qtrue);
|
data/ext/libxml/ruby_libxml.h
CHANGED
data/ext/libxml/ruby_xml_attr.c
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_attr.c
|
1
|
+
/* $Id: ruby_xml_attr.c 502 2008-07-22 01:45:31Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -9,7 +9,7 @@
|
|
9
9
|
* calling XML::Node#attributes method.
|
10
10
|
*
|
11
11
|
* Basic Usage:
|
12
|
-
* require '
|
12
|
+
* require 'xml'
|
13
13
|
*
|
14
14
|
* doc = XML::Document.new(<some_file>)
|
15
15
|
* attribute = doc.root.attributes.get_attribute_ns('http://www.w3.org/1999/xlink', 'href')
|
@@ -109,6 +109,9 @@ ruby_xml_attr_initialize(int argc, VALUE *argv, VALUE self) {
|
|
109
109
|
Check_Type(value, T_STRING);
|
110
110
|
|
111
111
|
Data_Get_Struct(node, xmlNode, xnode);
|
112
|
+
|
113
|
+
if (xnode->type != XML_ELEMENT_NODE)
|
114
|
+
rb_raise(rb_eArgError, "Attributes can only be created on element nodes.");
|
112
115
|
|
113
116
|
if NIL_P(ns)
|
114
117
|
{
|
@@ -120,6 +123,9 @@ ruby_xml_attr_initialize(int argc, VALUE *argv, VALUE self) {
|
|
120
123
|
Data_Get_Struct(ns, xmlNs, xns);
|
121
124
|
xattr = xmlNewNsProp(xnode, xns, (xmlChar*)StringValuePtr(name), (xmlChar*)StringValuePtr(value));
|
122
125
|
}
|
126
|
+
|
127
|
+
if (!xattr)
|
128
|
+
rb_raise(rb_eRuntimeError, "Could not create attribute.");
|
123
129
|
|
124
130
|
xattr->_private = (void *)self;
|
125
131
|
DATA_PTR(self) = xattr;
|
@@ -8,7 +8,7 @@
|
|
8
8
|
* Provides access to an elements attributes (XML::Attr).
|
9
9
|
*
|
10
10
|
* Basic Usage:
|
11
|
-
* require '
|
11
|
+
* require 'xml'
|
12
12
|
*
|
13
13
|
* doc = XML::Document.new(<some_file>)
|
14
14
|
* attributes = doc.root.attributes
|
@@ -249,10 +249,10 @@ ruby_xml_attributes_first(VALUE self) {
|
|
249
249
|
}
|
250
250
|
|
251
251
|
// Rdoc needs to know
|
252
|
-
#ifdef RDOC_NEVER_DEFINED
|
253
|
-
mLibXML = rb_define_module("LibXML");
|
254
|
-
mXML = rb_define_module_under(mLibXML, "XML");
|
255
|
-
#endif
|
252
|
+
#ifdef RDOC_NEVER_DEFINED
|
253
|
+
mLibXML = rb_define_module("LibXML");
|
254
|
+
mXML = rb_define_module_under(mLibXML, "XML");
|
255
|
+
#endif
|
256
256
|
|
257
257
|
void
|
258
258
|
ruby_init_xml_attributes(void) {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_document.c
|
1
|
+
/* $Id: ruby_xml_document.c 502 2008-07-22 01:45:31Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -8,7 +8,7 @@
|
|
8
8
|
* Reads or writes an XML document:
|
9
9
|
*
|
10
10
|
* Reading:
|
11
|
-
* require '
|
11
|
+
* require 'xml'
|
12
12
|
*
|
13
13
|
* doc = XML::Document.new()
|
14
14
|
* doc.root = XML::Node.new('root_node')
|
@@ -932,6 +932,10 @@ LibXML_validity_warning(void * ctxt, const char * msg, va_list ap)
|
|
932
932
|
* document.validate_schema(schema) -> (true|false)
|
933
933
|
*
|
934
934
|
* Validate this document against the specified XML::Schema.
|
935
|
+
*
|
936
|
+
* If a block is provided it is used as an error handler for validaten errors.
|
937
|
+
* The block is called with two argument, the message and a flag indication
|
938
|
+
* if the message is an error (true) or a warning (false).
|
935
939
|
*/
|
936
940
|
VALUE
|
937
941
|
ruby_xml_document_validate_schema(VALUE self, VALUE schema) {
|
@@ -957,6 +961,40 @@ ruby_xml_document_validate_schema(VALUE self, VALUE schema) {
|
|
957
961
|
}
|
958
962
|
}
|
959
963
|
|
964
|
+
/*
|
965
|
+
* call-seq:
|
966
|
+
* document.validate_schema(relaxng) -> (true|false)
|
967
|
+
*
|
968
|
+
* Validate this document against the specified XML::RelaxNG.
|
969
|
+
*
|
970
|
+
* If a block is provided it is used as an error handler for validaten errors.
|
971
|
+
* The block is called with two argument, the message and a flag indication
|
972
|
+
* if the message is an error (true) or a warning (false).
|
973
|
+
*/
|
974
|
+
VALUE
|
975
|
+
ruby_xml_document_validate_relaxng(VALUE self, VALUE relaxng) {
|
976
|
+
xmlRelaxNGValidCtxtPtr vptr;
|
977
|
+
ruby_xml_document_t *c_doc;
|
978
|
+
ruby_xml_relaxng *c_relaxng;
|
979
|
+
int is_invalid;
|
980
|
+
|
981
|
+
Data_Get_Struct(self, ruby_xml_document_t, c_doc);
|
982
|
+
Data_Get_Struct(relaxng, ruby_xml_relaxng, c_relaxng);
|
983
|
+
|
984
|
+
vptr = xmlRelaxNGNewValidCtxt(c_relaxng->relaxng);
|
985
|
+
|
986
|
+
xmlRelaxNGSetValidErrors(vptr, (xmlRelaxNGValidityErrorFunc)LibXML_validity_error,
|
987
|
+
(xmlRelaxNGValidityWarningFunc)LibXML_validity_warning, NULL);
|
988
|
+
|
989
|
+
is_invalid = xmlRelaxNGValidateDoc(vptr, c_doc->doc);
|
990
|
+
xmlRelaxNGFreeValidCtxt(vptr);
|
991
|
+
if (is_invalid) {
|
992
|
+
return Qfalse;
|
993
|
+
} else {
|
994
|
+
return Qtrue;
|
995
|
+
}
|
996
|
+
}
|
997
|
+
|
960
998
|
|
961
999
|
/*
|
962
1000
|
* call-seq:
|
@@ -1092,5 +1130,6 @@ ruby_init_xml_document(void) {
|
|
1092
1130
|
rb_define_method(cXMLDocument, "xinclude", ruby_xml_document_xinclude, 0);
|
1093
1131
|
rb_define_method(cXMLDocument, "validate", ruby_xml_document_validate_dtd, 1);
|
1094
1132
|
rb_define_method(cXMLDocument, "validate_schema", ruby_xml_document_validate_schema, 1);
|
1133
|
+
rb_define_method(cXMLDocument, "validate_relaxng", ruby_xml_document_validate_relaxng, 1);
|
1095
1134
|
rb_define_method(cXMLDocument, "reader", ruby_xml_document_reader, 0);
|
1096
1135
|
}
|
data/ext/libxml/ruby_xml_dtd.c
CHANGED
@@ -1,169 +1,169 @@
|
|
1
|
-
#include "ruby_libxml.h"
|
2
|
-
#include "ruby_xml_dtd.h"
|
3
|
-
|
4
|
-
VALUE cXMLDtd;
|
5
|
-
|
6
|
-
void
|
7
|
-
ruby_xml_dtd_free(ruby_xml_dtd *rxdtd) {
|
8
|
-
if (rxdtd->dtd != NULL) {
|
9
|
-
xmlFreeDtd(rxdtd->dtd);
|
10
|
-
rxdtd->dtd = NULL;
|
11
|
-
}
|
12
|
-
|
13
|
-
ruby_xfree(rxdtd);
|
14
|
-
}
|
15
|
-
|
16
|
-
static void
|
17
|
-
ruby_xml_dtd_mark(ruby_xml_dtd *rxdtd) {
|
18
|
-
return;
|
19
|
-
//if (rxdtd == NULL) return;
|
20
|
-
//if (!NIL_P(rxd->xmlver)) rb_gc_mark(rxd->xmlver);
|
21
|
-
}
|
22
|
-
|
23
|
-
/*
|
24
|
-
* call-seq:
|
25
|
-
* XML::Dtd.new("public system") -> dtd
|
26
|
-
* XML::Dtd.new("public", "system") -> dtd
|
27
|
-
*
|
28
|
-
* Create a new Dtd from the specified public and system
|
29
|
-
* identifiers.
|
30
|
-
*/
|
31
|
-
VALUE
|
32
|
-
ruby_xml_dtd_initialize(int argc, VALUE *argv, VALUE class) {
|
33
|
-
ruby_xml_dtd *rxdtd;
|
34
|
-
VALUE external, system, dtd_string;
|
35
|
-
xmlParserInputBufferPtr buffer;
|
36
|
-
xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
|
37
|
-
xmlChar *new_string;
|
38
|
-
|
39
|
-
// 1 argument -- string --> parsujeme jako dtd
|
40
|
-
// 2 argumenty -- public, system --> bude se hledat
|
41
|
-
switch (argc) {
|
42
|
-
case 2:
|
43
|
-
rb_scan_args(argc, argv, "20", &external, &system);
|
44
|
-
|
45
|
-
Check_Type(external, T_STRING);
|
46
|
-
Check_Type(system, T_STRING);
|
47
|
-
rxdtd = ALLOC(ruby_xml_dtd);
|
48
|
-
rxdtd->dtd = xmlParseDTD( (xmlChar*)StringValuePtr(external),
|
49
|
-
(xmlChar*)StringValuePtr(system) );
|
50
|
-
if (rxdtd->dtd == NULL) {
|
51
|
-
ruby_xfree(rxdtd);
|
52
|
-
return(Qfalse);
|
53
|
-
}
|
54
|
-
|
55
|
-
xmlSetTreeDoc( (xmlNodePtr)rxdtd->dtd, NULL );
|
56
|
-
return( Data_Wrap_Struct(cXMLDtd, ruby_xml_dtd_mark, ruby_xml_dtd_free, rxdtd) );
|
57
|
-
break;
|
58
|
-
|
59
|
-
/*
|
60
|
-
SV *
|
61
|
-
new(CLASS, external, system)
|
62
|
-
char * CLASS
|
63
|
-
char * external
|
64
|
-
char * system
|
65
|
-
ALIAS:
|
66
|
-
parse_uri = 1
|
67
|
-
PREINIT:
|
68
|
-
xmlDtdPtr dtd = NULL;
|
69
|
-
CODE:
|
70
|
-
LibXML_error = sv_2mortal(newSVpv("", 0));
|
71
|
-
dtd = xmlParseDTD((const xmlChar*)external, (const xmlChar*)system);
|
72
|
-
if ( dtd == NULL ) {
|
73
|
-
XSRETURN_UNDEF;
|
74
|
-
}
|
75
|
-
xmlSetTreeDoc((xmlNodePtr)dtd, NULL);
|
76
|
-
RETVAL = PmmNodeToSv( (xmlNodePtr) dtd, NULL );
|
77
|
-
OUTPUT:
|
78
|
-
RETVAL
|
79
|
-
*/
|
80
|
-
|
81
|
-
case 1:
|
82
|
-
|
83
|
-
rb_scan_args(argc, argv, "10", &dtd_string);
|
84
|
-
buffer = xmlAllocParserInputBuffer(enc);
|
85
|
-
//if ( !buffer) return Qnil
|
86
|
-
new_string = xmlStrdup((xmlChar*)StringValuePtr(dtd_string));
|
87
|
-
xmlParserInputBufferPush(buffer, xmlStrlen(new_string), (const char*)new_string);
|
88
|
-
|
89
|
-
rxdtd = ALLOC(ruby_xml_dtd);
|
90
|
-
rxdtd->dtd = xmlIOParseDTD(NULL, buffer, enc);
|
91
|
-
|
92
|
-
// NOTE: For some reason freeing this InputBuffer causes a segfault!
|
93
|
-
// xmlFreeParserInputBuffer(buffer);
|
94
|
-
xmlFree(new_string);
|
95
|
-
|
96
|
-
return( Data_Wrap_Struct(cXMLDtd, ruby_xml_dtd_mark, ruby_xml_dtd_free, rxdtd) );
|
97
|
-
|
98
|
-
break;
|
99
|
-
/*
|
100
|
-
SV * parse_string(CLASS, str, ...)
|
101
|
-
char * CLASS
|
102
|
-
char * str
|
103
|
-
PREINIT:
|
104
|
-
STRLEN n_a;
|
105
|
-
xmlDtdPtr res;
|
106
|
-
SV * encoding_sv;
|
107
|
-
xmlParserInputBufferPtr buffer;
|
108
|
-
xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
|
109
|
-
xmlChar * new_string;
|
110
|
-
STRLEN len;
|
111
|
-
CODE:
|
112
|
-
LibXML_init_error();
|
113
|
-
if (items > 2) {
|
114
|
-
encoding_sv = ST(2);
|
115
|
-
if (items > 3) {
|
116
|
-
croak("parse_string: too many parameters");
|
117
|
-
}
|
118
|
-
// warn("getting encoding...\n");
|
119
|
-
enc = xmlParseCharEncoding(SvPV(encoding_sv, n_a));
|
120
|
-
if (enc == XML_CHAR_ENCODING_ERROR) {
|
121
|
-
croak("Parse of encoding %s failed: %s", SvPV(encoding_sv, n_a), SvPV(LibXML_error, n_a));
|
122
|
-
}
|
123
|
-
}
|
124
|
-
buffer = xmlAllocParserInputBuffer(enc);
|
125
|
-
// buffer = xmlParserInputBufferCreateMem(str, xmlStrlen(str), enc);
|
126
|
-
if ( !buffer)
|
127
|
-
croak("cant create buffer!\n" );
|
128
|
-
|
129
|
-
new_string = xmlStrdup((const xmlChar*)str);
|
130
|
-
xmlParserInputBufferPush(buffer, xmlStrlen(new_string), (const char*)new_string);
|
131
|
-
|
132
|
-
res = xmlIOParseDTD(NULL, buffer, enc);
|
133
|
-
|
134
|
-
// NOTE: For some reason freeing this InputBuffer causes a segfault!
|
135
|
-
// xmlFreeParserInputBuffer(buffer);
|
136
|
-
xmlFree(new_string);
|
137
|
-
|
138
|
-
sv_2mortal( LibXML_error );
|
139
|
-
LibXML_croak_error();
|
140
|
-
|
141
|
-
if (res == NULL) {
|
142
|
-
croak("no DTD parsed!");
|
143
|
-
}
|
144
|
-
RETVAL = PmmNodeToSv((xmlNodePtr)res, NULL);
|
145
|
-
OUTPUT:
|
146
|
-
RETVAL
|
147
|
-
*/
|
148
|
-
|
149
|
-
default:
|
150
|
-
rb_raise(rb_eArgError, "wrong number of arguments (need 1 or 2)");
|
151
|
-
}
|
152
|
-
|
153
|
-
//docobj = ruby_xml_document_new2(cXMLDocument, xmlver);
|
154
|
-
return Qnil;
|
155
|
-
}
|
156
|
-
|
157
|
-
// Rdoc needs to know
|
158
|
-
#ifdef RDOC_NEVER_DEFINED
|
159
|
-
mLibXML = rb_define_module("LibXML");
|
160
|
-
mXML = rb_define_module_under(mLibXML, "XML");
|
161
|
-
#endif
|
162
|
-
|
163
|
-
void
|
164
|
-
ruby_init_xml_dtd(void) {
|
165
|
-
cXMLDtd = rb_define_class_under(mXML, "Dtd", rb_cObject);
|
166
|
-
rb_define_singleton_method(cXMLDtd, "new", ruby_xml_dtd_initialize, -1);
|
167
|
-
//rb_define_method(cXMLDocument, "xinclude", ruby_xml_document_xinclude, 0);
|
168
|
-
}
|
169
|
-
|
1
|
+
#include "ruby_libxml.h"
|
2
|
+
#include "ruby_xml_dtd.h"
|
3
|
+
|
4
|
+
VALUE cXMLDtd;
|
5
|
+
|
6
|
+
void
|
7
|
+
ruby_xml_dtd_free(ruby_xml_dtd *rxdtd) {
|
8
|
+
if (rxdtd->dtd != NULL) {
|
9
|
+
xmlFreeDtd(rxdtd->dtd);
|
10
|
+
rxdtd->dtd = NULL;
|
11
|
+
}
|
12
|
+
|
13
|
+
ruby_xfree(rxdtd);
|
14
|
+
}
|
15
|
+
|
16
|
+
static void
|
17
|
+
ruby_xml_dtd_mark(ruby_xml_dtd *rxdtd) {
|
18
|
+
return;
|
19
|
+
//if (rxdtd == NULL) return;
|
20
|
+
//if (!NIL_P(rxd->xmlver)) rb_gc_mark(rxd->xmlver);
|
21
|
+
}
|
22
|
+
|
23
|
+
/*
|
24
|
+
* call-seq:
|
25
|
+
* XML::Dtd.new("public system") -> dtd
|
26
|
+
* XML::Dtd.new("public", "system") -> dtd
|
27
|
+
*
|
28
|
+
* Create a new Dtd from the specified public and system
|
29
|
+
* identifiers.
|
30
|
+
*/
|
31
|
+
VALUE
|
32
|
+
ruby_xml_dtd_initialize(int argc, VALUE *argv, VALUE class) {
|
33
|
+
ruby_xml_dtd *rxdtd;
|
34
|
+
VALUE external, system, dtd_string;
|
35
|
+
xmlParserInputBufferPtr buffer;
|
36
|
+
xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
|
37
|
+
xmlChar *new_string;
|
38
|
+
|
39
|
+
// 1 argument -- string --> parsujeme jako dtd
|
40
|
+
// 2 argumenty -- public, system --> bude se hledat
|
41
|
+
switch (argc) {
|
42
|
+
case 2:
|
43
|
+
rb_scan_args(argc, argv, "20", &external, &system);
|
44
|
+
|
45
|
+
Check_Type(external, T_STRING);
|
46
|
+
Check_Type(system, T_STRING);
|
47
|
+
rxdtd = ALLOC(ruby_xml_dtd);
|
48
|
+
rxdtd->dtd = xmlParseDTD( (xmlChar*)StringValuePtr(external),
|
49
|
+
(xmlChar*)StringValuePtr(system) );
|
50
|
+
if (rxdtd->dtd == NULL) {
|
51
|
+
ruby_xfree(rxdtd);
|
52
|
+
return(Qfalse);
|
53
|
+
}
|
54
|
+
|
55
|
+
xmlSetTreeDoc( (xmlNodePtr)rxdtd->dtd, NULL );
|
56
|
+
return( Data_Wrap_Struct(cXMLDtd, ruby_xml_dtd_mark, ruby_xml_dtd_free, rxdtd) );
|
57
|
+
break;
|
58
|
+
|
59
|
+
/*
|
60
|
+
SV *
|
61
|
+
new(CLASS, external, system)
|
62
|
+
char * CLASS
|
63
|
+
char * external
|
64
|
+
char * system
|
65
|
+
ALIAS:
|
66
|
+
parse_uri = 1
|
67
|
+
PREINIT:
|
68
|
+
xmlDtdPtr dtd = NULL;
|
69
|
+
CODE:
|
70
|
+
LibXML_error = sv_2mortal(newSVpv("", 0));
|
71
|
+
dtd = xmlParseDTD((const xmlChar*)external, (const xmlChar*)system);
|
72
|
+
if ( dtd == NULL ) {
|
73
|
+
XSRETURN_UNDEF;
|
74
|
+
}
|
75
|
+
xmlSetTreeDoc((xmlNodePtr)dtd, NULL);
|
76
|
+
RETVAL = PmmNodeToSv( (xmlNodePtr) dtd, NULL );
|
77
|
+
OUTPUT:
|
78
|
+
RETVAL
|
79
|
+
*/
|
80
|
+
|
81
|
+
case 1:
|
82
|
+
|
83
|
+
rb_scan_args(argc, argv, "10", &dtd_string);
|
84
|
+
buffer = xmlAllocParserInputBuffer(enc);
|
85
|
+
//if ( !buffer) return Qnil
|
86
|
+
new_string = xmlStrdup((xmlChar*)StringValuePtr(dtd_string));
|
87
|
+
xmlParserInputBufferPush(buffer, xmlStrlen(new_string), (const char*)new_string);
|
88
|
+
|
89
|
+
rxdtd = ALLOC(ruby_xml_dtd);
|
90
|
+
rxdtd->dtd = xmlIOParseDTD(NULL, buffer, enc);
|
91
|
+
|
92
|
+
// NOTE: For some reason freeing this InputBuffer causes a segfault!
|
93
|
+
// xmlFreeParserInputBuffer(buffer);
|
94
|
+
xmlFree(new_string);
|
95
|
+
|
96
|
+
return( Data_Wrap_Struct(cXMLDtd, ruby_xml_dtd_mark, ruby_xml_dtd_free, rxdtd) );
|
97
|
+
|
98
|
+
break;
|
99
|
+
/*
|
100
|
+
SV * parse_string(CLASS, str, ...)
|
101
|
+
char * CLASS
|
102
|
+
char * str
|
103
|
+
PREINIT:
|
104
|
+
STRLEN n_a;
|
105
|
+
xmlDtdPtr res;
|
106
|
+
SV * encoding_sv;
|
107
|
+
xmlParserInputBufferPtr buffer;
|
108
|
+
xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
|
109
|
+
xmlChar * new_string;
|
110
|
+
STRLEN len;
|
111
|
+
CODE:
|
112
|
+
LibXML_init_error();
|
113
|
+
if (items > 2) {
|
114
|
+
encoding_sv = ST(2);
|
115
|
+
if (items > 3) {
|
116
|
+
croak("parse_string: too many parameters");
|
117
|
+
}
|
118
|
+
// warn("getting encoding...\n");
|
119
|
+
enc = xmlParseCharEncoding(SvPV(encoding_sv, n_a));
|
120
|
+
if (enc == XML_CHAR_ENCODING_ERROR) {
|
121
|
+
croak("Parse of encoding %s failed: %s", SvPV(encoding_sv, n_a), SvPV(LibXML_error, n_a));
|
122
|
+
}
|
123
|
+
}
|
124
|
+
buffer = xmlAllocParserInputBuffer(enc);
|
125
|
+
// buffer = xmlParserInputBufferCreateMem(str, xmlStrlen(str), enc);
|
126
|
+
if ( !buffer)
|
127
|
+
croak("cant create buffer!\n" );
|
128
|
+
|
129
|
+
new_string = xmlStrdup((const xmlChar*)str);
|
130
|
+
xmlParserInputBufferPush(buffer, xmlStrlen(new_string), (const char*)new_string);
|
131
|
+
|
132
|
+
res = xmlIOParseDTD(NULL, buffer, enc);
|
133
|
+
|
134
|
+
// NOTE: For some reason freeing this InputBuffer causes a segfault!
|
135
|
+
// xmlFreeParserInputBuffer(buffer);
|
136
|
+
xmlFree(new_string);
|
137
|
+
|
138
|
+
sv_2mortal( LibXML_error );
|
139
|
+
LibXML_croak_error();
|
140
|
+
|
141
|
+
if (res == NULL) {
|
142
|
+
croak("no DTD parsed!");
|
143
|
+
}
|
144
|
+
RETVAL = PmmNodeToSv((xmlNodePtr)res, NULL);
|
145
|
+
OUTPUT:
|
146
|
+
RETVAL
|
147
|
+
*/
|
148
|
+
|
149
|
+
default:
|
150
|
+
rb_raise(rb_eArgError, "wrong number of arguments (need 1 or 2)");
|
151
|
+
}
|
152
|
+
|
153
|
+
//docobj = ruby_xml_document_new2(cXMLDocument, xmlver);
|
154
|
+
return Qnil;
|
155
|
+
}
|
156
|
+
|
157
|
+
// Rdoc needs to know
|
158
|
+
#ifdef RDOC_NEVER_DEFINED
|
159
|
+
mLibXML = rb_define_module("LibXML");
|
160
|
+
mXML = rb_define_module_under(mLibXML, "XML");
|
161
|
+
#endif
|
162
|
+
|
163
|
+
void
|
164
|
+
ruby_init_xml_dtd(void) {
|
165
|
+
cXMLDtd = rb_define_class_under(mXML, "Dtd", rb_cObject);
|
166
|
+
rb_define_singleton_method(cXMLDtd, "new", ruby_xml_dtd_initialize, -1);
|
167
|
+
//rb_define_method(cXMLDocument, "xinclude", ruby_xml_document_xinclude, 0);
|
168
|
+
}
|
169
|
+
|