libxml-ruby 2.6.0 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d223220c2ac2bc8aeecf2785092b229ec32d00ec
4
- data.tar.gz: 5b822d3621a0d3129d22530bdfccb0374e6fe5b4
5
- SHA512:
6
- metadata.gz: c179969f566e2a65c31ae9c8ceae5d3a9e96d95c8ee58efc1703e074f4f3fbf3921afa5c82557fece14c3a945b27fd4ee4290d426c507d23d526c22f411d204e
7
- data.tar.gz: ae744217d7767fa8d49376d0cb2866b5365ca4fd05d49beb0dcc1e2818667a0b84f54249b50617dc9f0d3bb904b198d69c8668509b4fbe3411ec94deee38b1ac
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZWI3MjQyNWIwYzA5YWMxZmE4MjlhN2FjOGVmZTM2MDZkNWVmOTZlYg==
5
+ data.tar.gz: !binary |-
6
+ YzdhYzE3MmVjMWM2YmZiYWRiOGZhMzQ1NjMyODdmMDI1YmIyOTM0Nw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ N2NiZTI5YmRkY2IzODEyZGNiYjAxZGExOWY2MTRhZGIxYTQ0MTcwNzlhZjE5
10
+ NjRlMGM1NzVjOTAxOTNlNjIwODIxNmNiZTlhZTVjNGQ2NDYzZDQ5Mzg3YmZm
11
+ MDZlNjViNDBiMTY4ZDgzZjc1MGEyYTczM2E0MDkxZDdmOTA3MDU=
12
+ data.tar.gz: !binary |-
13
+ NDQ2MDNiZjRiZDg1YTg2Yjc0YjA0NzU5M2EwNzNhNTJmN2QyMzIzZDU3MWY2
14
+ OThmZmRiZTFmZWRmYmRjN2U2OTlmZTliZDljMjEzMWM0MDhjNmU2OWI3MTMy
15
+ YWZkZDM5NTI5MGExZGZjYjUyZDM4NDcyMGRmNjQxOTZhMDA5NmU=
data/HISTORY CHANGED
@@ -1,5 +1,19 @@
1
1
  = Release History
2
2
 
3
+ == 2.7.0 / 2013-08-03 Charlie Savage
4
+
5
+ * Do not call Ruby code during a GC cycle (Dirkjan Bussink)
6
+ * Fix thread error handling (Geoffrey Giesemann)
7
+ * Set libxml error handler when a libxml-ruby error handler is set (Geoffrey Giesemann)
8
+ * Fix tests for nil TypeErrors (Geoffrey Giesemann)
9
+ * Fix segmentation fault for issue #62. The deregisternode function was incorrectly
10
+ NULLing out a node's mark and free functions for nodes removed from a document tree (Charlie Savage)
11
+ * Cleanup writer code (Charlie Savage)
12
+ * Fix equality check of LibXML::XML::Error against other objects (Michał Szajbe)
13
+ * Fix XML::Writer.set_quote_char UT, wrong expected string (#63). (julp)
14
+ * Fix potential segfault when GC occurs while creating ns from xpath (Timothy Elliott)
15
+ * Fix segmentation fault after failing to load external schema (#59). (Clifford Heath)
16
+
3
17
  == 2.6.0 / 2013-02-16 Charlie Savage
4
18
 
5
19
  * Fix uninitialized constant LibXML::XML::Error::I18N (NameError) that occurred
@@ -1,5 +1,5 @@
1
- #ifndef EXTCONF_H
2
- #define EXTCONF_H
3
- #define HAVE_ZLIB_H 1
4
- #define HAVE_LIBXML_XMLVERSION_H 1
5
- #endif
1
+ #ifndef EXTCONF_H
2
+ #define EXTCONF_H
3
+ #define HAVE_ZLIB_H 1
4
+ #define HAVE_LIBXML_XMLVERSION_H 1
5
+ #endif
@@ -4,17 +4,19 @@ require 'rbconfig'
4
4
 
5
5
  require 'mkmf'
6
6
 
7
- if defined?(CFLAGS)
8
- if CFLAGS.index(CONFIG['CCDLFLAGS'])
9
- $CFLAGS = CFLAGS + ' ' + CONFIG['CCDLFLAGS']
10
- else
11
- $CFLAGS = CFLAGS
12
- end
13
- else
14
- $CFLAGS = CONFIG['CFLAGS']
15
- end
16
- $LDFLAGS = CONFIG['LDFLAGS']
17
- $LIBPATH.push(Config::CONFIG['libdir'])
7
+ #if defined?(CFLAGS)
8
+ # if CFLAGS.index(CONFIG['CCDLFLAGS'])
9
+ # $CFLAGS = CFLAGS + ' ' + CONFIG['CCDLFLAGS']
10
+ # else
11
+ # $CFLAGS = CFLAGS
12
+ # end
13
+ #else
14
+ # $CFLAGS = CONFIG['CFLAGS']
15
+ #end
16
+ #$LDFLAGS = CONFIG['LDFLAGS']
17
+ #$LDFLAGS = "-L/usr/local/lib"
18
+ #$LIBPATH.push(Config::CONFIG['libdir'])
19
+ $LDFLAGS = "-Lc:/mingw/local/lib"
18
20
 
19
21
  def crash(str)
20
22
  printf(" extconf failure: %s\n", str)
@@ -58,6 +58,7 @@
58
58
  #include "ruby_xml_writer.h"
59
59
  #include "ruby_xml_sax2_handler.h"
60
60
  #include "ruby_xml_sax_parser.h"
61
+ #include "ruby_xml_writer.h"
61
62
  #include "ruby_xml_xinclude.h"
62
63
  #include "ruby_xml_xpath.h"
63
64
  #include "ruby_xml_xpath_expression.h"
@@ -47,7 +47,6 @@ void rxml_dtd_mark(xmlDtdPtr xdtd)
47
47
 
48
48
  if (xdtd->_private == NULL)
49
49
  {
50
- rb_warning("XmlNode is not bound! (%s:%d)", __FILE__, __LINE__);
51
50
  return;
52
51
  }
53
52
 
@@ -123,13 +122,25 @@ static VALUE rxml_dtd_uri_get(VALUE self)
123
122
  xmlDtdPtr xdtd;
124
123
  Data_Get_Struct(self, xmlDtd, xdtd);
125
124
 
126
-
127
125
  if (xdtd->SystemID == NULL)
128
126
  return (Qnil);
129
127
  else
130
128
  return (rxml_new_cstr((const char*) xdtd->SystemID, NULL));
131
129
  }
132
130
 
131
+ /*
132
+ * call-seq:
133
+ * node.type -> num
134
+ *
135
+ * Obtain this node's type identifier.
136
+ */
137
+ static VALUE rxml_dtd_type(VALUE self)
138
+ {
139
+ xmlDtdPtr xdtd;
140
+ Data_Get_Struct(self, xmlDtd, xdtd);
141
+ return (INT2NUM(xdtd->type));
142
+ }
143
+
133
144
  /*
134
145
  * call-seq:
135
146
  * XML::Dtd.new("DTD string") -> dtd
@@ -251,7 +262,7 @@ void rxml_init_dtd()
251
262
  rb_define_method(cXMLDtd, "external_id", rxml_dtd_external_id_get, 0);
252
263
  rb_define_method(cXMLDtd, "name", rxml_dtd_name_get, 0);
253
264
  rb_define_method(cXMLDtd, "uri", rxml_dtd_uri_get, 0);
254
-
265
+ rb_define_method(cXMLDtd, "node_type", rxml_dtd_type, 0);
255
266
  rb_define_alias(cXMLDtd, "system_id", "uri");
256
267
  }
257
268
 
@@ -37,15 +37,6 @@ static ID ERROR_HANDLER_ID;
37
37
  * XML::Error.reset_handler
38
38
  */
39
39
 
40
- static void rxml_set_handler(VALUE self, VALUE block)
41
- {
42
- #ifdef RB_CVAR_SET_4ARGS
43
- rb_cvar_set(self, ERROR_HANDLER_ID, block, 0);
44
- #else
45
- rb_cvar_set(self, ERROR_HANDLER_ID, block);
46
- #endif
47
- }
48
-
49
40
  /*
50
41
  * call-seq:
51
42
  * Error.get_error_handler
@@ -59,41 +50,6 @@ static VALUE rxml_error_get_handler()
59
50
  return block;
60
51
  }
61
52
 
62
- /*
63
- * call-seq:
64
- * Error.set_error_handler {|error| ... }
65
- *
66
- * Registers a block that will be called with an instance of
67
- * XML::Error when libxml generates warning, error or fatal
68
- * error messages.
69
- */
70
- static VALUE rxml_error_set_handler(VALUE self)
71
- {
72
- VALUE block;
73
-
74
- if (rb_block_given_p() == Qfalse)
75
- rb_raise(rb_eRuntimeError, "No block given");
76
-
77
- block = rb_block_proc();
78
-
79
- /* Embed the block within the Error class to avoid it to be collected.
80
- Previous handler will be overwritten if it exists. */
81
- rxml_set_handler(self, block);
82
-
83
- return self;
84
- }
85
-
86
- /*
87
- * call-seq:
88
- * Error.reset_error_handler
89
- *
90
- * Removes the current error handler. */
91
- static VALUE rxml_error_reset_handler(VALUE self)
92
- {
93
- rxml_set_handler(self, Qnil);
94
- return self;
95
- }
96
-
97
53
  VALUE rxml_error_wrap(xmlErrorPtr xerror)
98
54
  {
99
55
  VALUE result = Qnil;
@@ -155,6 +111,53 @@ static void structuredErrorFunc(void *userData, xmlErrorPtr xerror)
155
111
  }
156
112
  }
157
113
 
114
+ static void rxml_set_handler(VALUE self, VALUE block)
115
+ {
116
+ #ifdef RB_CVAR_SET_4ARGS
117
+ rb_cvar_set(self, ERROR_HANDLER_ID, block, 0);
118
+ #else
119
+ rb_cvar_set(self, ERROR_HANDLER_ID, block);
120
+ #endif
121
+
122
+ /* Intercept libxml error handlers */
123
+ xmlSetStructuredErrorFunc(NULL, structuredErrorFunc);
124
+ }
125
+
126
+ /*
127
+ * call-seq:
128
+ * Error.set_error_handler {|error| ... }
129
+ *
130
+ * Registers a block that will be called with an instance of
131
+ * XML::Error when libxml generates warning, error or fatal
132
+ * error messages.
133
+ */
134
+ static VALUE rxml_error_set_handler(VALUE self)
135
+ {
136
+ VALUE block;
137
+
138
+ if (rb_block_given_p() == Qfalse)
139
+ rb_raise(rb_eRuntimeError, "No block given");
140
+
141
+ block = rb_block_proc();
142
+
143
+ /* Embed the block within the Error class to avoid it to be collected.
144
+ Previous handler will be overwritten if it exists. */
145
+ rxml_set_handler(self, block);
146
+
147
+ return self;
148
+ }
149
+
150
+ /*
151
+ * call-seq:
152
+ * Error.reset_error_handler
153
+ *
154
+ * Removes the current error handler. */
155
+ static VALUE rxml_error_reset_handler(VALUE self)
156
+ {
157
+ rxml_set_handler(self, Qnil);
158
+ return self;
159
+ }
160
+
158
161
  void rxml_raise(xmlErrorPtr xerror)
159
162
  {
160
163
  /* Wrap error up as Ruby object and send it off to ruby */
@@ -167,9 +170,6 @@ void rxml_init_error()
167
170
  CALL_METHOD = rb_intern("call");
168
171
  ERROR_HANDLER_ID = rb_intern("@@__error_handler_callback__");
169
172
 
170
- /* Intercept libxml error handlers */
171
- xmlSetStructuredErrorFunc(NULL, structuredErrorFunc);
172
-
173
173
  /* Error class */
174
174
  eXMLError = rb_define_class_under(mXML, "Error", rb_eStandardError);
175
175
  rb_define_singleton_method(eXMLError, "get_handler", rxml_error_get_handler, 0);
@@ -46,7 +46,7 @@ static void rxml_node_deregisterNode(xmlNodePtr xnode)
46
46
  if (xnode->_private)
47
47
  {
48
48
  /* Node was wrapped. Set the _private member to free and
49
- then dislabe the dfree function so that Ruby will not
49
+ then disable the dfree function so that Ruby will not
50
50
  try to free the node a second time. */
51
51
  VALUE node = (VALUE) xnode->_private;
52
52
  RDATA(node)->data = NULL;
@@ -619,12 +619,12 @@ static VALUE rxml_node_to_s(int argc, VALUE *argv, VALUE self)
619
619
  xmlNodeDumpOutput(output, xnode->doc, xnode, level, indent, xencoding);
620
620
  xmlOutputBufferFlush(output);
621
621
 
622
- #ifdef LIBXML2_NEW_BUFFER
623
- if (output->conv)
624
- result = rxml_new_cstr((const char*) xmlBufContent(output->conv), xencoding);
625
- else
626
- result = rxml_new_cstr((const char*) xmlBufContent(output->buffer), xencoding);
627
- #else
622
+ #ifdef LIBXML2_NEW_BUFFER
623
+ if (output->conv)
624
+ result = rxml_new_cstr((const char*) xmlBufContent(output->conv), xencoding);
625
+ else
626
+ result = rxml_new_cstr((const char*) xmlBufContent(output->buffer), xencoding);
627
+ #else
628
628
  if (output->conv)
629
629
  result = rxml_new_cstr((const char*) output->conv->content, xencoding);
630
630
  else
@@ -1144,8 +1144,14 @@ static VALUE rxml_node_remove_ex(VALUE self)
1144
1144
  namespaces, etc. For a node to live on its own, it
1145
1145
  needs to get its own copies of this information.*/
1146
1146
  xresult = xmlDocCopyNode(xnode, NULL, 1);
1147
-
1148
- /* Now free the original node. */
1147
+
1148
+ /* This ruby node object no longer points at the node.*/
1149
+ xnode->_private = NULL;
1150
+ RDATA(self)->data = NULL;
1151
+
1152
+ /* Now free the original node. This will call the deregister node
1153
+ callback which would reset the mark and free function except for
1154
+ the fact we set the _private field to null above*/
1149
1155
  xmlFreeNode(xnode);
1150
1156
 
1151
1157
  /* Now wrap the new node */
@@ -89,6 +89,9 @@ static VALUE rxml_schema_init_from_document(VALUE class, VALUE document)
89
89
  xschema = xmlSchemaParse(xparser);
90
90
  xmlSchemaFreeParserCtxt(xparser);
91
91
 
92
+ if (xschema == NULL)
93
+ return Qnil;
94
+
92
95
  return Data_Wrap_Struct(cXMLSchema, NULL, rxml_schema_free, xschema);
93
96
  }
94
97
 
@@ -1,9 +1,9 @@
1
1
  /* Don't nuke this block! It is used for automatically updating the
2
2
  * versions below. VERSION = string formatting, VERNUM = numbered
3
3
  * version for inline testing: increment both or none at all.*/
4
- #define RUBY_LIBXML_VERSION "2.6.0"
5
- #define RUBY_LIBXML_VERNUM 260
4
+ #define RUBY_LIBXML_VERSION "2.7.0"
5
+ #define RUBY_LIBXML_VERNUM 270
6
6
  #define RUBY_LIBXML_VER_MAJ 2
7
- #define RUBY_LIBXML_VER_MIN 6
7
+ #define RUBY_LIBXML_VER_MIN 7
8
8
  #define RUBY_LIBXML_VER_MIC 0
9
9
  #define RUBY_LIBXML_VER_PATCH 0
@@ -1,4 +1,8 @@
1
- #include <libxml/xmlversion.h>
1
+ #include "ruby_libxml.h"
2
+ #include "ruby_xml_writer.h"
3
+
4
+ VALUE cXMLWriter;
5
+ static VALUE sEncoding, sStandalone;
2
6
 
3
7
  #ifdef LIBXML_WRITER_ENABLED
4
8
 
@@ -12,13 +16,8 @@
12
16
  * For a more in depth tutorial, albeit in C, see http://xmlsoft.org/xmlwriter.html
13
17
  */
14
18
 
15
- # include <libxml/xmlwriter.h>
19
+ #include <libxml/xmlwriter.h>
16
20
 
17
- # include "ruby_libxml.h"
18
- # include "ruby_xml_writer.h"
19
-
20
- VALUE cXMLWriter;
21
- static VALUE sEncoding, sStandalone;
22
21
 
23
22
  typedef enum {
24
23
  RXMLW_OUTPUT_NONE,
@@ -29,42 +28,42 @@ typedef enum {
29
28
 
30
29
  typedef struct {
31
30
  VALUE output;
32
- # ifdef HAVE_RUBY_ENCODING_H
31
+ #ifdef HAVE_RUBY_ENCODING_H
33
32
  rb_encoding *encoding;
34
- # endif /* HAVE_RUBY_ENCODING_H */
33
+ #endif /* HAVE_RUBY_ENCODING_H */
35
34
  xmlBufferPtr buffer;
36
35
  xmlTextWriterPtr writer;
37
36
  rxmlw_output_type output_type;
38
37
  } rxml_writer_object;
39
38
 
40
- # ifdef HAVE_RUBY_ENCODING_H
39
+ #ifdef HAVE_RUBY_ENCODING_H
41
40
 
42
- # define /*VALUE*/ rxml_writer_c_to_ruby_string(/*const xmlChar **/ string, /*long*/ string_len) \
41
+ #define /*VALUE*/ rxml_writer_c_to_ruby_string(/*const xmlChar **/ string, /*long*/ string_len) \
43
42
  rb_external_str_new_with_enc(string, string_len, rb_utf8_encoding())
44
43
 
45
- # define /*VALUE*/ rxml_writer_ruby_string_to_utf8(/*VALUE*/ string) \
44
+ #define /*VALUE*/ rxml_writer_ruby_string_to_utf8(/*VALUE*/ string) \
46
45
  rb_str_conv_enc(string, rb_enc_get(string), rb_utf8_encoding())
47
46
  // rb_str_export_to_enc(string, rb_utf8_encoding())
48
47
 
49
- # define /*void*/ rxml_writer_free_utf8_string(/*VALUE*/ orig, /*VALUE*/ utf8) \
48
+ #define /*void*/ rxml_writer_free_utf8_string(/*VALUE*/ orig, /*VALUE*/ utf8) \
50
49
  do { \
51
50
  if (orig != utf8) { \
52
51
  rb_str_free(utf8); \
53
52
  } \
54
53
  } while (0);
55
54
 
56
- # else
55
+ #else
57
56
 
58
- # define /*VALUE*/ rxml_writer_c_to_ruby_string(/*const xmlChar **/ string, /*long*/ string_len) \
57
+ #define /*VALUE*/ rxml_writer_c_to_ruby_string(/*const xmlChar **/ string, /*long*/ string_len) \
59
58
  rb_str_new(string, string_len)
60
59
 
61
- # define /*VALUE*/ rxml_writer_ruby_string_to_utf8(/*VALUE*/ string) \
60
+ #define /*VALUE*/ rxml_writer_ruby_string_to_utf8(/*VALUE*/ string) \
62
61
  string
63
62
 
64
- # define /*void*/ rxml_writer_free_utf8_string(/*VALUE*/ orig, /*VALUE*/ utf8) \
63
+ #define /*void*/ rxml_writer_free_utf8_string(/*VALUE*/ orig, /*VALUE*/ utf8) \
65
64
  /* NOP */
66
65
 
67
- # endif /* HAVE_RUBY_ENCODING_H */
66
+ #endif /* HAVE_RUBY_ENCODING_H */
68
67
 
69
68
  static void rxml_writer_free(rxml_writer_object *rwo)
70
69
  {
@@ -123,9 +122,9 @@ xmlCharEncodingHandlerPtr xmlFindCharEncodingHandler(const char * name);
123
122
  rwo = ALLOC(rxml_writer_object);
124
123
  rwo->output = io;
125
124
  rwo->buffer = NULL;
126
- # ifdef HAVE_RUBY_ENCODING_H
125
+ #ifdef HAVE_RUBY_ENCODING_H
127
126
  rwo->encoding = NULL;
128
- # endif /* HAVE_RUBY_ENCODING_H */
127
+ #endif /* HAVE_RUBY_ENCODING_H */
129
128
  rwo->output_type = RXMLW_OUTPUT_IO;
130
129
  if (NULL == (out = xmlOutputBufferCreateIO(rxml_write_callback, NULL, (void *) io, NULL))) {
131
130
  rxml_raise(&xmlLastError);
@@ -151,9 +150,9 @@ static VALUE rxml_writer_file(VALUE klass, VALUE filename)
151
150
  rwo = ALLOC(rxml_writer_object);
152
151
  rwo->output = Qnil;
153
152
  rwo->buffer = NULL;
154
- # ifdef HAVE_RUBY_ENCODING_H
153
+ #ifdef HAVE_RUBY_ENCODING_H
155
154
  rwo->encoding = NULL;
156
- # endif /* HAVE_RUBY_ENCODING_H */
155
+ #endif /* HAVE_RUBY_ENCODING_H */
157
156
  rwo->output_type = RXMLW_OUTPUT_NONE;
158
157
  if (NULL == (rwo->writer = xmlNewTextWriterFilename(StringValueCStr(filename), 0))) {
159
158
  rxml_raise(&xmlLastError);
@@ -173,9 +172,9 @@ static VALUE rxml_writer_string(VALUE klass)
173
172
 
174
173
  rwo = ALLOC(rxml_writer_object);
175
174
  rwo->output = Qnil;
176
- # ifdef HAVE_RUBY_ENCODING_H
175
+ #ifdef HAVE_RUBY_ENCODING_H
177
176
  rwo->encoding = NULL;
178
- # endif /* HAVE_RUBY_ENCODING_H */
177
+ #endif /* HAVE_RUBY_ENCODING_H */
179
178
  rwo->output_type = RXMLW_OUTPUT_STRING;
180
179
  if (NULL == (rwo->buffer = xmlBufferCreate())) {
181
180
  rxml_raise(&xmlLastError);
@@ -201,9 +200,9 @@ static VALUE rxml_writer_doc(VALUE klass)
201
200
  rwo = ALLOC(rxml_writer_object);
202
201
  rwo->buffer = NULL;
203
202
  rwo->output = Qnil;
204
- # ifdef HAVE_RUBY_ENCODING_H
203
+ #ifdef HAVE_RUBY_ENCODING_H
205
204
  rwo->encoding = NULL;
206
- # endif /* HAVE_RUBY_ENCODING_H */
205
+ #endif /* HAVE_RUBY_ENCODING_H */
207
206
  rwo->output_type = RXMLW_OUTPUT_DOC;
208
207
  if (NULL == (rwo->writer = xmlNewTextWriterDoc(&doc, 0))) {
209
208
  rxml_raise(&xmlLastError);
@@ -238,11 +237,11 @@ static VALUE rxml_writer_flush(int argc, VALUE *argv, VALUE self)
238
237
  if (NULL != rwo->buffer) {
239
238
  VALUE content;
240
239
 
241
- # ifdef HAVE_RUBY_ENCODING_H
240
+ #ifdef HAVE_RUBY_ENCODING_H
242
241
  content = rb_external_str_new_with_enc(rwo->buffer->content, rwo->buffer->use, rwo->encoding);
243
- # else
242
+ #else
244
243
  content = rb_str_new(rwo->buffer->content, rwo->buffer->use);
245
- # endif /* HAVE_RUBY_ENCODING_H */
244
+ #endif /* HAVE_RUBY_ENCODING_H */
246
245
  if (NIL_P(empty) || RTEST(empty)) { /* nil = default value = true */
247
246
  xmlBufferEmpty(rwo->buffer);
248
247
  }
@@ -301,7 +300,7 @@ static VALUE numeric_rxml_writer_void(VALUE obj, int (*fn)(xmlTextWriterPtr))
301
300
  return (-1 == ret ? Qfalse : Qtrue);
302
301
  }
303
302
 
304
- # define numeric_rxml_writer_string(/*VALUE*/ obj, /*VALUE*/ name_or_content, /*int (**/fn/*)(xmlTextWriterPtr, const xmlChar *)*/) \
303
+ #define numeric_rxml_writer_string(/*VALUE*/ obj, /*VALUE*/ name_or_content, /*int (**/fn/*)(xmlTextWriterPtr, const xmlChar *)*/) \
305
304
  numeric_rxml_writer_va_strings(obj, Qundef, 1, fn, name_or_content)
306
305
 
307
306
  /**
@@ -312,7 +311,7 @@ static VALUE numeric_rxml_writer_void(VALUE obj, int (*fn)(xmlTextWriterPtr))
312
311
  * - validate names
313
312
  * and so on
314
313
  **/
315
- # define XMLWRITER_MAX_STRING_ARGS 5
314
+ #define XMLWRITER_MAX_STRING_ARGS 5
316
315
  static VALUE numeric_rxml_writer_va_strings(VALUE obj, VALUE pe, size_t strings_count, int (*fn)(ANYARGS), ...)
317
316
  {
318
317
  va_list ap;
@@ -392,20 +391,20 @@ static VALUE numeric_rxml_writer_va_strings(VALUE obj, VALUE pe, size_t strings_
392
391
  break;
393
392
  }
394
393
  }
395
- # ifdef HAVE_RUBY_ENCODING_H
394
+ #ifdef HAVE_RUBY_ENCODING_H
396
395
  while (--strings_count > 0) {
397
396
  if (!NIL_P(orig[strings_count])) {
398
397
  rxml_writer_free_utf8_string(orig[strings_count], utf8[strings_count]);
399
398
  }
400
399
  }
401
- # endif /* HAVE_RUBY_ENCODING_H */
400
+ #endif /* HAVE_RUBY_ENCODING_H */
402
401
 
403
402
  return (-1 == ret ? Qfalse : Qtrue);
404
403
  }
405
404
 
406
405
  /* ===== public instance methods ===== */
407
406
 
408
- # if LIBXML_VERSION >= 20605
407
+ #if LIBXML_VERSION >= 20605
409
408
  /* call-seq:
410
409
  * writer.set_indent(indentation) -> (true|false)
411
410
  *
@@ -437,7 +436,7 @@ static VALUE rxml_writer_set_indent_string(VALUE self, VALUE indentation)
437
436
  {
438
437
  return numeric_rxml_writer_string(self, indentation, xmlTextWriterSetIndentString);
439
438
  }
440
- # endif /* LIBXML_VERSION >= 20605 */
439
+ #endif /* LIBXML_VERSION >= 20605 */
441
440
 
442
441
  /* ===== public full tag interface ===== */
443
442
 
@@ -491,7 +490,7 @@ static VALUE rxml_writer_write_element(int argc, VALUE *argv, VALUE self)
491
490
  }
492
491
  }
493
492
 
494
- # define ARRAY_SIZE(array) \
493
+ #define ARRAY_SIZE(array) \
495
494
  (sizeof(array) / sizeof((array)[0]))
496
495
 
497
496
  /* call-seq:
@@ -635,7 +634,7 @@ static VALUE rxml_writer_end_attribute(VALUE self)
635
634
  return numeric_rxml_writer_void(self, xmlTextWriterEndAttribute);
636
635
  }
637
636
 
638
- # if LIBXML_VERSION >= 20607
637
+ #if LIBXML_VERSION >= 20607
639
638
  /* call-seq:
640
639
  * writer.start_comment -> (true|false)
641
640
  *
@@ -657,7 +656,7 @@ static VALUE rxml_writer_end_comment(VALUE self)
657
656
  {
658
657
  return numeric_rxml_writer_void(self, xmlTextWriterEndComment);
659
658
  }
660
- # endif /* LIBXML_VERSION >= 20607 */
659
+ #endif /* LIBXML_VERSION >= 20607 */
661
660
 
662
661
  /* call-seq:
663
662
  * writer.start_element(name) -> (true|false)
@@ -769,9 +768,9 @@ static VALUE rxml_writer_start_document(int argc, VALUE *argv, VALUE self)
769
768
  }
770
769
  }
771
770
  rwo = rxml_textwriter_get(self);
772
- # ifdef HAVE_RUBY_ENCODING_H
771
+ #ifdef HAVE_RUBY_ENCODING_H
773
772
  rwo->encoding = rxml_figure_encoding(xencoding);
774
- # endif /* !HAVE_RUBY_ENCODING_H */
773
+ #endif /* !HAVE_RUBY_ENCODING_H */
775
774
  ret = xmlTextWriterStartDocument(rwo->writer, NULL, xencoding, xstandalone);
776
775
 
777
776
  return (-1 == ret ? Qfalse : Qtrue);
@@ -909,13 +908,13 @@ static VALUE rxml_writer_end_dtd_element(VALUE self)
909
908
  *
910
909
  * Examples:
911
910
  * writer.write_dtd 'html'
912
- * # => <!DOCTYPE html>
911
+ * #=> <!DOCTYPE html>
913
912
  * writer.write_dtd 'docbook', nil, 'http://www.docbook.org/xml/5.0/dtd/docbook.dtd'
914
- * # => <!DOCTYPE docbook SYSTEM "http://www.docbook.org/xml/5.0/dtd/docbook.dtd">
913
+ * #=> <!DOCTYPE docbook SYSTEM "http://www.docbook.org/xml/5.0/dtd/docbook.dtd">
915
914
  * writer.write_dtd 'html', '-//W3C//DTD XHTML 1.1//EN', 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'
916
- * # => <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
915
+ * #=> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
917
916
  * writer.write_dtd 'person', nil, nil, '<!ELEMENT person (firstname,lastname)><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)>'
918
- * # => <!DOCTYPE person [<!ELEMENT person (firstname,lastname)><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)>]>
917
+ * #=> <!DOCTYPE person [<!ELEMENT person (firstname,lastname)><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)>]>
919
918
  */
920
919
  static VALUE rxml_writer_write_dtd(int argc, VALUE *argv, VALUE self)
921
920
  {
@@ -931,7 +930,7 @@ static VALUE rxml_writer_write_dtd(int argc, VALUE *argv, VALUE self)
931
930
  *
932
931
  * Writes a DTD attribute list, all at once. Returns +false+ on failure.
933
932
  * writer.write_dtd_attlist 'id', 'ID #IMPLIED'
934
- * # => <!ATTLIST id ID #IMPLIED>
933
+ * #=> <!ATTLIST id ID #IMPLIED>
935
934
  */
936
935
  static VALUE rxml_writer_write_dtd_attlist(VALUE self, VALUE name, VALUE content)
937
936
  {
@@ -943,7 +942,7 @@ static VALUE rxml_writer_write_dtd_attlist(VALUE self, VALUE name, VALUE content
943
942
  *
944
943
  * Writes a full DTD element, all at once. Returns +false+ on failure.
945
944
  * writer.write_dtd_element 'person', '(firstname,lastname)'
946
- * # => <!ELEMENT person (firstname,lastname)>
945
+ * #=> <!ELEMENT person (firstname,lastname)>
947
946
  */
948
947
  static VALUE rxml_writer_write_dtd_element(VALUE self, VALUE name, VALUE content)
949
948
  {
@@ -994,9 +993,9 @@ static VALUE rxml_writer_write_dtd_external_entity_contents(VALUE self, VALUE pu
994
993
  *
995
994
  * Examples:
996
995
  * writer.write_dtd_entity 'Shape', '(rect|circle|poly|default)', true
997
- * # => <!ENTITY % Shape "(rect|circle|poly|default)">
996
+ * #=> <!ENTITY % Shape "(rect|circle|poly|default)">
998
997
  * writer.write_dtd_entity 'delta', '&#948;', false
999
- * # => <!ENTITY delta "&#948;">
998
+ * #=> <!ENTITY delta "&#948;">
1000
999
  */
1001
1000
  static VALUE rxml_writer_write_dtd_internal_entity(VALUE self, VALUE name, VALUE content, VALUE pe)
1002
1001
  {
@@ -1013,7 +1012,7 @@ static VALUE rxml_writer_write_dtd_notation(VALUE self, VALUE name, VALUE pubid,
1013
1012
  return numeric_rxml_writer_va_strings(self, Qundef, 3, xmlTextWriterWriteDTDNotation, name, pubid, sysid);
1014
1013
  }
1015
1014
 
1016
- # if LIBXML_VERSION >= 20900
1015
+ #if LIBXML_VERSION >= 20900
1017
1016
  /* call-seq:
1018
1017
  * writer.set_quote_char(...) -> (true|false)
1019
1018
  *
@@ -1035,7 +1034,10 @@ static VALUE rxml_writer_set_quote_char(VALUE self, VALUE quotechar)
1035
1034
 
1036
1035
  return (-1 == ret ? Qfalse : Qtrue);
1037
1036
  }
1038
- # endif /* LIBXML_VERSION >= 20900 */
1037
+ #endif /* LIBXML_VERSION >= 20900 */
1038
+
1039
+ #endif /* LIBXML_WRITER_ENABLED */
1040
+
1039
1041
 
1040
1042
  /* grep -P 'xmlTextWriter(Start|End|Write)(?!DTD|V?Format)[^(]+' /usr/include/libxml2/libxml/xmlwriter.h */
1041
1043
  void rxml_init_writer(void)
@@ -1045,19 +1047,20 @@ void rxml_init_writer(void)
1045
1047
 
1046
1048
  cXMLWriter = rb_define_class_under(mXML, "Writer", rb_cObject);
1047
1049
 
1050
+ #ifdef LIBXML_WRITER_ENABLED
1048
1051
  rb_define_singleton_method(cXMLWriter, "io", rxml_writer_io, 1);
1049
1052
  rb_define_singleton_method(cXMLWriter, "file", rxml_writer_file, 1);
1050
1053
  rb_define_singleton_method(cXMLWriter, "document", rxml_writer_doc, 0);
1051
1054
  rb_define_singleton_method(cXMLWriter, "string", rxml_writer_string, 0);
1052
1055
 
1053
1056
  /* misc */
1054
- # if LIBXML_VERSION >= 20605
1057
+ #if LIBXML_VERSION >= 20605
1055
1058
  rb_define_method(cXMLWriter, "set_indent", rxml_writer_set_indent, 1);
1056
1059
  rb_define_method(cXMLWriter, "set_indent_string", rxml_writer_set_indent_string, 1);
1057
- # endif /* LIBXML_VERSION >= 20605 */
1058
- # if LIBXML_VERSION >= 20900
1060
+ #endif /* LIBXML_VERSION >= 20605 */
1061
+ #if LIBXML_VERSION >= 20900
1059
1062
  rb_define_method(cXMLWriter, "set_quote_char", rxml_writer_set_quote_char, 1);
1060
- # endif /* LIBXML_VERSION >= 20900 */
1063
+ #endif /* LIBXML_VERSION >= 20900 */
1061
1064
  rb_define_method(cXMLWriter, "flush", rxml_writer_flush, -1);
1062
1065
  rb_define_method(cXMLWriter, "start_dtd", rxml_writer_start_dtd, -1);
1063
1066
  rb_define_method(cXMLWriter, "start_dtd_entity", rxml_writer_start_dtd_entity, -1);
@@ -1091,10 +1094,10 @@ void rxml_init_writer(void)
1091
1094
  rb_define_method(cXMLWriter, "full_end_element", rxml_writer_full_end_element, 0);
1092
1095
  rb_define_method(cXMLWriter, "start_document", rxml_writer_start_document, -1);
1093
1096
  rb_define_method(cXMLWriter, "end_document", rxml_writer_end_document, 0);
1094
- # if LIBXML_VERSION >= 20607
1097
+ #if LIBXML_VERSION >= 20607
1095
1098
  rb_define_method(cXMLWriter, "start_comment", rxml_writer_start_comment, 0);
1096
1099
  rb_define_method(cXMLWriter, "end_comment", rxml_writer_end_comment, 0);
1097
- # endif /* LIBXML_VERSION >= 20607 */
1100
+ #endif /* LIBXML_VERSION >= 20607 */
1098
1101
  rb_define_method(cXMLWriter, "start_pi", rxml_writer_start_pi, 1);
1099
1102
  rb_define_method(cXMLWriter, "end_pi", rxml_writer_end_pi, 0);
1100
1103
 
@@ -1110,6 +1113,6 @@ void rxml_init_writer(void)
1110
1113
  rb_define_method(cXMLWriter, "result", rxml_writer_result, 0);
1111
1114
 
1112
1115
  rb_undef_method(CLASS_OF(cXMLWriter), "new");
1116
+ #endif
1113
1117
  }
1114
1118
 
1115
- #endif /* LIBXML_WRITER_ENABLED */