nokogiri 1.10.3 → 1.12.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (218) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/LICENSE-DEPENDENCIES.md +1173 -884
  4. data/LICENSE.md +1 -1
  5. data/README.md +176 -96
  6. data/dependencies.yml +28 -26
  7. data/ext/nokogiri/depend +38 -358
  8. data/ext/nokogiri/extconf.rb +716 -414
  9. data/ext/nokogiri/gumbo.c +584 -0
  10. data/ext/nokogiri/html4_document.c +166 -0
  11. data/ext/nokogiri/html4_element_description.c +294 -0
  12. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  13. data/ext/nokogiri/html4_sax_parser_context.c +120 -0
  14. data/ext/nokogiri/html4_sax_push_parser.c +95 -0
  15. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  16. data/ext/nokogiri/nokogiri.c +228 -91
  17. data/ext/nokogiri/nokogiri.h +191 -89
  18. data/ext/nokogiri/test_global_handlers.c +40 -0
  19. data/ext/nokogiri/xml_attr.c +15 -15
  20. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  21. data/ext/nokogiri/xml_cdata.c +13 -18
  22. data/ext/nokogiri/xml_comment.c +19 -26
  23. data/ext/nokogiri/xml_document.c +267 -195
  24. data/ext/nokogiri/xml_document_fragment.c +13 -15
  25. data/ext/nokogiri/xml_dtd.c +54 -48
  26. data/ext/nokogiri/xml_element_content.c +31 -26
  27. data/ext/nokogiri/xml_element_decl.c +22 -22
  28. data/ext/nokogiri/xml_encoding_handler.c +28 -17
  29. data/ext/nokogiri/xml_entity_decl.c +32 -30
  30. data/ext/nokogiri/xml_entity_reference.c +16 -18
  31. data/ext/nokogiri/xml_namespace.c +60 -51
  32. data/ext/nokogiri/xml_node.c +493 -407
  33. data/ext/nokogiri/xml_node_set.c +174 -162
  34. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  35. data/ext/nokogiri/xml_reader.c +197 -172
  36. data/ext/nokogiri/xml_relax_ng.c +52 -28
  37. data/ext/nokogiri/xml_sax_parser.c +112 -112
  38. data/ext/nokogiri/xml_sax_parser_context.c +105 -86
  39. data/ext/nokogiri/xml_sax_push_parser.c +36 -27
  40. data/ext/nokogiri/xml_schema.c +112 -33
  41. data/ext/nokogiri/xml_syntax_error.c +42 -21
  42. data/ext/nokogiri/xml_text.c +13 -17
  43. data/ext/nokogiri/xml_xpath_context.c +158 -73
  44. data/ext/nokogiri/xslt_stylesheet.c +158 -164
  45. data/gumbo-parser/CHANGES.md +63 -0
  46. data/gumbo-parser/Makefile +101 -0
  47. data/gumbo-parser/THANKS +27 -0
  48. data/gumbo-parser/src/Makefile +34 -0
  49. data/gumbo-parser/src/README.md +41 -0
  50. data/gumbo-parser/src/ascii.c +75 -0
  51. data/gumbo-parser/src/ascii.h +115 -0
  52. data/gumbo-parser/src/attribute.c +42 -0
  53. data/gumbo-parser/src/attribute.h +17 -0
  54. data/gumbo-parser/src/char_ref.c +22225 -0
  55. data/gumbo-parser/src/char_ref.h +29 -0
  56. data/gumbo-parser/src/char_ref.rl +2154 -0
  57. data/gumbo-parser/src/error.c +626 -0
  58. data/gumbo-parser/src/error.h +148 -0
  59. data/gumbo-parser/src/foreign_attrs.c +104 -0
  60. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  61. data/gumbo-parser/src/gumbo.h +943 -0
  62. data/gumbo-parser/src/insertion_mode.h +33 -0
  63. data/gumbo-parser/src/macros.h +91 -0
  64. data/gumbo-parser/src/parser.c +4886 -0
  65. data/gumbo-parser/src/parser.h +41 -0
  66. data/gumbo-parser/src/replacement.h +33 -0
  67. data/gumbo-parser/src/string_buffer.c +103 -0
  68. data/gumbo-parser/src/string_buffer.h +68 -0
  69. data/gumbo-parser/src/string_piece.c +48 -0
  70. data/gumbo-parser/src/svg_attrs.c +174 -0
  71. data/gumbo-parser/src/svg_attrs.gperf +77 -0
  72. data/gumbo-parser/src/svg_tags.c +137 -0
  73. data/gumbo-parser/src/svg_tags.gperf +55 -0
  74. data/gumbo-parser/src/tag.c +222 -0
  75. data/gumbo-parser/src/tag_lookup.c +382 -0
  76. data/gumbo-parser/src/tag_lookup.gperf +169 -0
  77. data/gumbo-parser/src/tag_lookup.h +13 -0
  78. data/gumbo-parser/src/token_buffer.c +79 -0
  79. data/gumbo-parser/src/token_buffer.h +71 -0
  80. data/gumbo-parser/src/token_type.h +17 -0
  81. data/gumbo-parser/src/tokenizer.c +3463 -0
  82. data/gumbo-parser/src/tokenizer.h +112 -0
  83. data/gumbo-parser/src/tokenizer_states.h +339 -0
  84. data/gumbo-parser/src/utf8.c +245 -0
  85. data/gumbo-parser/src/utf8.h +164 -0
  86. data/gumbo-parser/src/util.c +68 -0
  87. data/gumbo-parser/src/util.h +30 -0
  88. data/gumbo-parser/src/vector.c +111 -0
  89. data/gumbo-parser/src/vector.h +45 -0
  90. data/lib/nokogiri/css/node.rb +1 -0
  91. data/lib/nokogiri/css/parser.rb +64 -63
  92. data/lib/nokogiri/css/parser.y +3 -3
  93. data/lib/nokogiri/css/parser_extras.rb +39 -36
  94. data/lib/nokogiri/css/syntax_error.rb +2 -1
  95. data/lib/nokogiri/css/tokenizer.rb +105 -103
  96. data/lib/nokogiri/css/xpath_visitor.rb +73 -43
  97. data/lib/nokogiri/css.rb +15 -14
  98. data/lib/nokogiri/decorators/slop.rb +1 -0
  99. data/lib/nokogiri/extension.rb +31 -0
  100. data/lib/nokogiri/gumbo.rb +14 -0
  101. data/lib/nokogiri/html.rb +32 -27
  102. data/lib/nokogiri/{html → html4}/builder.rb +3 -2
  103. data/lib/nokogiri/{html → html4}/document.rb +17 -30
  104. data/lib/nokogiri/{html → html4}/document_fragment.rb +18 -17
  105. data/lib/nokogiri/{html → html4}/element_description.rb +2 -1
  106. data/lib/nokogiri/{html → html4}/element_description_defaults.rb +2 -1
  107. data/lib/nokogiri/{html → html4}/entity_lookup.rb +2 -1
  108. data/lib/nokogiri/{html → html4}/sax/parser.rb +12 -14
  109. data/lib/nokogiri/html4/sax/parser_context.rb +19 -0
  110. data/lib/nokogiri/{html → html4}/sax/push_parser.rb +6 -5
  111. data/lib/nokogiri/html4.rb +40 -0
  112. data/lib/nokogiri/html5/document.rb +74 -0
  113. data/lib/nokogiri/html5/document_fragment.rb +80 -0
  114. data/lib/nokogiri/html5/node.rb +93 -0
  115. data/lib/nokogiri/html5.rb +473 -0
  116. data/lib/nokogiri/jruby/dependencies.rb +20 -0
  117. data/lib/nokogiri/syntax_error.rb +1 -0
  118. data/lib/nokogiri/version/constant.rb +5 -0
  119. data/lib/nokogiri/version/info.rb +215 -0
  120. data/lib/nokogiri/version.rb +3 -109
  121. data/lib/nokogiri/xml/attr.rb +1 -0
  122. data/lib/nokogiri/xml/attribute_decl.rb +1 -0
  123. data/lib/nokogiri/xml/builder.rb +74 -32
  124. data/lib/nokogiri/xml/cdata.rb +1 -0
  125. data/lib/nokogiri/xml/character_data.rb +1 -0
  126. data/lib/nokogiri/xml/document.rb +138 -41
  127. data/lib/nokogiri/xml/document_fragment.rb +5 -6
  128. data/lib/nokogiri/xml/dtd.rb +1 -0
  129. data/lib/nokogiri/xml/element_content.rb +1 -0
  130. data/lib/nokogiri/xml/element_decl.rb +1 -0
  131. data/lib/nokogiri/xml/entity_decl.rb +1 -0
  132. data/lib/nokogiri/xml/entity_reference.rb +1 -0
  133. data/lib/nokogiri/xml/namespace.rb +1 -0
  134. data/lib/nokogiri/xml/node/save_options.rb +2 -1
  135. data/lib/nokogiri/xml/node.rb +629 -293
  136. data/lib/nokogiri/xml/node_set.rb +1 -0
  137. data/lib/nokogiri/xml/notation.rb +1 -0
  138. data/lib/nokogiri/xml/parse_options.rb +12 -3
  139. data/lib/nokogiri/xml/pp/character_data.rb +1 -0
  140. data/lib/nokogiri/xml/pp/node.rb +1 -0
  141. data/lib/nokogiri/xml/pp.rb +3 -2
  142. data/lib/nokogiri/xml/processing_instruction.rb +1 -0
  143. data/lib/nokogiri/xml/reader.rb +9 -12
  144. data/lib/nokogiri/xml/relax_ng.rb +7 -2
  145. data/lib/nokogiri/xml/sax/document.rb +25 -30
  146. data/lib/nokogiri/xml/sax/parser.rb +1 -0
  147. data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
  148. data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
  149. data/lib/nokogiri/xml/sax.rb +5 -4
  150. data/lib/nokogiri/xml/schema.rb +13 -4
  151. data/lib/nokogiri/xml/searchable.rb +25 -16
  152. data/lib/nokogiri/xml/syntax_error.rb +1 -0
  153. data/lib/nokogiri/xml/text.rb +1 -0
  154. data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
  155. data/lib/nokogiri/xml/xpath.rb +4 -5
  156. data/lib/nokogiri/xml/xpath_context.rb +1 -0
  157. data/lib/nokogiri/xml.rb +36 -36
  158. data/lib/nokogiri/xslt/stylesheet.rb +2 -1
  159. data/lib/nokogiri/xslt.rb +17 -16
  160. data/lib/nokogiri.rb +32 -51
  161. data/lib/xsd/xmlparser/nokogiri.rb +1 -0
  162. data/patches/libxml2/{0002-Remove-script-macro-support.patch → 0001-Remove-script-macro-support.patch} +0 -0
  163. data/patches/libxml2/{0003-Update-entities-to-remove-handling-of-ssi.patch → 0002-Update-entities-to-remove-handling-of-ssi.patch} +0 -0
  164. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  165. data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
  166. data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
  167. data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
  168. data/patches/libxml2/0007-Fix-XPath-recursion-limit.patch +31 -0
  169. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
  170. data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
  171. data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
  172. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  173. metadata +151 -153
  174. data/ext/nokogiri/html_document.c +0 -170
  175. data/ext/nokogiri/html_document.h +0 -10
  176. data/ext/nokogiri/html_element_description.c +0 -279
  177. data/ext/nokogiri/html_element_description.h +0 -10
  178. data/ext/nokogiri/html_entity_lookup.c +0 -32
  179. data/ext/nokogiri/html_entity_lookup.h +0 -8
  180. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  181. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  182. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  183. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  184. data/ext/nokogiri/xml_attr.h +0 -9
  185. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  186. data/ext/nokogiri/xml_cdata.h +0 -9
  187. data/ext/nokogiri/xml_comment.h +0 -9
  188. data/ext/nokogiri/xml_document.h +0 -23
  189. data/ext/nokogiri/xml_document_fragment.h +0 -10
  190. data/ext/nokogiri/xml_dtd.h +0 -10
  191. data/ext/nokogiri/xml_element_content.h +0 -10
  192. data/ext/nokogiri/xml_element_decl.h +0 -9
  193. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  194. data/ext/nokogiri/xml_entity_decl.h +0 -10
  195. data/ext/nokogiri/xml_entity_reference.h +0 -9
  196. data/ext/nokogiri/xml_io.c +0 -61
  197. data/ext/nokogiri/xml_io.h +0 -11
  198. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  199. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  200. data/ext/nokogiri/xml_namespace.h +0 -14
  201. data/ext/nokogiri/xml_node.h +0 -13
  202. data/ext/nokogiri/xml_node_set.h +0 -12
  203. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  204. data/ext/nokogiri/xml_reader.h +0 -10
  205. data/ext/nokogiri/xml_relax_ng.h +0 -9
  206. data/ext/nokogiri/xml_sax_parser.h +0 -39
  207. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  208. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  209. data/ext/nokogiri/xml_schema.h +0 -9
  210. data/ext/nokogiri/xml_syntax_error.h +0 -13
  211. data/ext/nokogiri/xml_text.h +0 -9
  212. data/ext/nokogiri/xml_xpath_context.h +0 -10
  213. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  214. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  215. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  216. data/patches/libxslt/0001-Fix-security-framework-bypass.patch +0 -120
  217. data/ports/archives/libxml2-2.9.9.tar.gz +0 -0
  218. data/ports/archives/libxslt-1.1.33.tar.gz +0 -0
@@ -1,6 +1,9 @@
1
- #include <xml_relax_ng.h>
1
+ #include <nokogiri.h>
2
2
 
3
- static void dealloc(xmlRelaxNGPtr schema)
3
+ VALUE cNokogiriXmlRelaxNG;
4
+
5
+ static void
6
+ dealloc(xmlRelaxNGPtr schema)
4
7
  {
5
8
  NOKOGIRI_DEBUG_START(schema);
6
9
  xmlRelaxNGFree(schema);
@@ -13,7 +16,8 @@ static void dealloc(xmlRelaxNGPtr schema)
13
16
  *
14
17
  * Validate a Nokogiri::XML::Document against this RelaxNG schema.
15
18
  */
16
- static VALUE validate_document(VALUE self, VALUE document)
19
+ static VALUE
20
+ validate_document(VALUE self, VALUE document)
17
21
  {
18
22
  xmlDocPtr doc;
19
23
  xmlRelaxNGPtr schema;
@@ -27,7 +31,7 @@ static VALUE validate_document(VALUE self, VALUE document)
27
31
 
28
32
  valid_ctxt = xmlRelaxNGNewValidCtxt(schema);
29
33
 
30
- if(NULL == valid_ctxt) {
34
+ if (NULL == valid_ctxt) {
31
35
  /* we have a problem */
32
36
  rb_raise(rb_eRuntimeError, "Could not create a validation context");
33
37
  }
@@ -53,16 +57,25 @@ static VALUE validate_document(VALUE self, VALUE document)
53
57
  *
54
58
  * Create a new RelaxNG from the contents of +string+
55
59
  */
56
- static VALUE read_memory(VALUE klass, VALUE content)
60
+ static VALUE
61
+ read_memory(int argc, VALUE *argv, VALUE klass)
57
62
  {
58
- xmlRelaxNGParserCtxtPtr ctx = xmlRelaxNGNewMemParserCtxt(
59
- (const char *)StringValuePtr(content),
60
- (int)RSTRING_LEN(content)
61
- );
63
+ VALUE content;
64
+ VALUE parse_options;
65
+ xmlRelaxNGParserCtxtPtr ctx;
62
66
  xmlRelaxNGPtr schema;
63
- VALUE errors = rb_ary_new();
67
+ VALUE errors;
64
68
  VALUE rb_schema;
69
+ int scanned_args = 0;
70
+
71
+ scanned_args = rb_scan_args(argc, argv, "11", &content, &parse_options);
72
+ if (scanned_args == 1) {
73
+ parse_options = rb_const_get_at(rb_const_get_at(mNokogiriXml, rb_intern("ParseOptions")), rb_intern("DEFAULT_SCHEMA"));
74
+ }
65
75
 
76
+ ctx = xmlRelaxNGNewMemParserCtxt((const char *)StringValuePtr(content), (int)RSTRING_LEN(content));
77
+
78
+ errors = rb_ary_new();
66
79
  xmlSetStructuredErrorFunc((void *)errors, Nokogiri_error_array_pusher);
67
80
 
68
81
  #ifdef HAVE_XMLRELAXNGSETPARSERSTRUCTUREDERRORS
@@ -78,18 +91,20 @@ static VALUE read_memory(VALUE klass, VALUE content)
78
91
  xmlSetStructuredErrorFunc(NULL, NULL);
79
92
  xmlRelaxNGFreeParserCtxt(ctx);
80
93
 
81
- if(NULL == schema) {
94
+ if (NULL == schema) {
82
95
  xmlErrorPtr error = xmlGetLastError();
83
- if(error)
96
+ if (error) {
84
97
  Nokogiri_error_raise(NULL, error);
85
- else
98
+ } else {
86
99
  rb_raise(rb_eRuntimeError, "Could not parse document");
100
+ }
87
101
 
88
102
  return Qnil;
89
103
  }
90
104
 
91
105
  rb_schema = Data_Wrap_Struct(klass, 0, dealloc, schema);
92
106
  rb_iv_set(rb_schema, "@errors", errors);
107
+ rb_iv_set(rb_schema, "@parse_options", parse_options);
93
108
 
94
109
  return rb_schema;
95
110
  }
@@ -100,18 +115,26 @@ static VALUE read_memory(VALUE klass, VALUE content)
100
115
  *
101
116
  * Create a new RelaxNG schema from the Nokogiri::XML::Document +doc+
102
117
  */
103
- static VALUE from_document(VALUE klass, VALUE document)
118
+ static VALUE
119
+ from_document(int argc, VALUE *argv, VALUE klass)
104
120
  {
121
+ VALUE document;
122
+ VALUE parse_options;
105
123
  xmlDocPtr doc;
106
124
  xmlRelaxNGParserCtxtPtr ctx;
107
125
  xmlRelaxNGPtr schema;
108
126
  VALUE errors;
109
127
  VALUE rb_schema;
128
+ int scanned_args = 0;
129
+
130
+ scanned_args = rb_scan_args(argc, argv, "11", &document, &parse_options);
110
131
 
111
132
  Data_Get_Struct(document, xmlDoc, doc);
133
+ doc = doc->doc; /* In case someone passes us a node. ugh. */
112
134
 
113
- /* In case someone passes us a node. ugh. */
114
- doc = doc->doc;
135
+ if (scanned_args == 1) {
136
+ parse_options = rb_const_get_at(rb_const_get_at(mNokogiriXml, rb_intern("ParseOptions")), rb_intern("DEFAULT_SCHEMA"));
137
+ }
115
138
 
116
139
  ctx = xmlRelaxNGNewDocParserCtxt(doc);
117
140
 
@@ -129,33 +152,34 @@ static VALUE from_document(VALUE klass, VALUE document)
129
152
  schema = xmlRelaxNGParse(ctx);
130
153
 
131
154
  xmlSetStructuredErrorFunc(NULL, NULL);
155
+ xmlRelaxNGFreeParserCtxt(ctx);
132
156
 
133
- if(NULL == schema) {
157
+ if (NULL == schema) {
134
158
  xmlErrorPtr error = xmlGetLastError();
135
- if(error)
159
+ if (error) {
136
160
  Nokogiri_error_raise(NULL, error);
137
- else
161
+ } else {
138
162
  rb_raise(rb_eRuntimeError, "Could not parse document");
163
+ }
139
164
 
140
165
  return Qnil;
141
166
  }
142
167
 
143
168
  rb_schema = Data_Wrap_Struct(klass, 0, dealloc, schema);
144
169
  rb_iv_set(rb_schema, "@errors", errors);
170
+ rb_iv_set(rb_schema, "@parse_options", parse_options);
145
171
 
146
172
  return rb_schema;
147
173
  }
148
174
 
149
- VALUE cNokogiriXmlRelaxNG;
150
- void init_xml_relax_ng()
175
+ void
176
+ noko_init_xml_relax_ng()
151
177
  {
152
- VALUE nokogiri = rb_define_module("Nokogiri");
153
- VALUE xml = rb_define_module_under(nokogiri, "XML");
154
- VALUE klass = rb_define_class_under(xml, "RelaxNG", cNokogiriXmlSchema);
178
+ assert(cNokogiriXmlSchema);
179
+ cNokogiriXmlRelaxNG = rb_define_class_under(mNokogiriXml, "RelaxNG", cNokogiriXmlSchema);
155
180
 
156
- cNokogiriXmlRelaxNG = klass;
181
+ rb_define_singleton_method(cNokogiriXmlRelaxNG, "read_memory", read_memory, -1);
182
+ rb_define_singleton_method(cNokogiriXmlRelaxNG, "from_document", from_document, -1);
157
183
 
158
- rb_define_singleton_method(klass, "read_memory", read_memory, 1);
159
- rb_define_singleton_method(klass, "from_document", from_document, 1);
160
- rb_define_private_method(klass, "validate_document", validate_document, 1);
184
+ rb_define_private_method(cNokogiriXmlRelaxNG, "validate_document", validate_document, 1);
161
185
  }
@@ -1,23 +1,23 @@
1
- #include <xml_sax_parser.h>
1
+ #include <nokogiri.h>
2
2
 
3
- int vasprintf (char **strp, const char *fmt, va_list ap);
4
- void vasprintf_free (void *p);
3
+ VALUE cNokogiriXmlSaxParser ;
5
4
 
6
5
  static ID id_start_document, id_end_document, id_start_element, id_end_element;
7
6
  static ID id_start_element_namespace, id_end_element_namespace;
8
7
  static ID id_comment, id_characters, id_xmldecl, id_error, id_warning;
9
- static ID id_cdata_block, id_cAttribute;
8
+ static ID id_cdata_block;
10
9
  static ID id_processing_instruction;
11
10
 
12
- static void start_document(void * ctx)
11
+ static void
12
+ start_document(void *ctx)
13
13
  {
14
14
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
15
15
  VALUE doc = rb_iv_get(self, "@document");
16
16
 
17
17
  xmlParserCtxtPtr ctxt = NOKOGIRI_SAX_CTXT(ctx);
18
18
 
19
- if(NULL != ctxt && ctxt->html != 1) {
20
- if(ctxt->standalone != -1) { /* -1 means there was no declaration */
19
+ if (NULL != ctxt && ctxt->html != 1) {
20
+ if (ctxt->standalone != -1) { /* -1 means there was no declaration */
21
21
  VALUE encoding = Qnil ;
22
22
  VALUE standalone = Qnil;
23
23
  VALUE version;
@@ -29,8 +29,7 @@ static void start_document(void * ctx)
29
29
 
30
30
  version = ctxt->version ? NOKOGIRI_STR_NEW2(ctxt->version) : Qnil;
31
31
 
32
- switch(ctxt->standalone)
33
- {
32
+ switch (ctxt->standalone) {
34
33
  case 0:
35
34
  standalone = NOKOGIRI_STR_NEW2("no");
36
35
  break;
@@ -46,138 +45,140 @@ static void start_document(void * ctx)
46
45
  rb_funcall(doc, id_start_document, 0);
47
46
  }
48
47
 
49
- static void end_document(void * ctx)
48
+ static void
49
+ end_document(void *ctx)
50
50
  {
51
51
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
52
52
  VALUE doc = rb_iv_get(self, "@document");
53
53
  rb_funcall(doc, id_end_document, 0);
54
54
  }
55
55
 
56
- static void start_element(void * ctx, const xmlChar *name, const xmlChar **atts)
56
+ static void
57
+ start_element(void *ctx, const xmlChar *name, const xmlChar **atts)
57
58
  {
58
59
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
59
60
  VALUE doc = rb_iv_get(self, "@document");
60
61
  VALUE attributes = rb_ary_new();
61
- const xmlChar * attr;
62
+ const xmlChar *attr;
62
63
  int i = 0;
63
- if(atts) {
64
- while((attr = atts[i]) != NULL) {
65
- const xmlChar * val = atts[i+1];
64
+ if (atts) {
65
+ while ((attr = atts[i]) != NULL) {
66
+ const xmlChar *val = atts[i + 1];
66
67
  VALUE value = val != NULL ? NOKOGIRI_STR_NEW2(val) : Qnil;
67
68
  rb_ary_push(attributes, rb_ary_new3(2, NOKOGIRI_STR_NEW2(attr), value));
68
- i+=2;
69
+ i += 2;
69
70
  }
70
71
  }
71
72
 
72
- rb_funcall( doc,
73
- id_start_element,
74
- 2,
75
- NOKOGIRI_STR_NEW2(name),
76
- attributes
77
- );
73
+ rb_funcall(doc,
74
+ id_start_element,
75
+ 2,
76
+ NOKOGIRI_STR_NEW2(name),
77
+ attributes
78
+ );
78
79
  }
79
80
 
80
- static void end_element(void * ctx, const xmlChar *name)
81
+ static void
82
+ end_element(void *ctx, const xmlChar *name)
81
83
  {
82
84
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
83
85
  VALUE doc = rb_iv_get(self, "@document");
84
86
  rb_funcall(doc, id_end_element, 1, NOKOGIRI_STR_NEW2(name));
85
87
  }
86
88
 
87
- static VALUE attributes_as_list(
88
- VALUE self,
89
- int nb_attributes,
90
- const xmlChar ** attributes)
89
+ static VALUE
90
+ attributes_as_array(int attributes_len, const xmlChar **c_attributes)
91
91
  {
92
- VALUE list = rb_ary_new2((long)nb_attributes);
92
+ VALUE rb_array = rb_ary_new2((long)attributes_len);
93
+ VALUE cNokogiriXmlSaxParserAttribute;
93
94
 
94
- VALUE attr_klass = rb_const_get(cNokogiriXmlSaxParser, id_cAttribute);
95
- if (attributes) {
95
+ cNokogiriXmlSaxParserAttribute = rb_const_get_at(cNokogiriXmlSaxParser, rb_intern("Attribute"));
96
+ if (c_attributes) {
96
97
  /* Each attribute is an array of [localname, prefix, URI, value, end] */
97
98
  int i;
98
- for (i = 0; i < nb_attributes * 5; i += 5) {
99
- VALUE argv[4], attribute;
99
+ for (i = 0; i < attributes_len * 5; i += 5) {
100
+ VALUE rb_constructor_args[4], rb_attribute;
100
101
 
101
- argv[0] = RBSTR_OR_QNIL(attributes[i + 0]); /* localname */
102
- argv[1] = RBSTR_OR_QNIL(attributes[i + 1]); /* prefix */
103
- argv[2] = RBSTR_OR_QNIL(attributes[i + 2]); /* URI */
102
+ rb_constructor_args[0] = RBSTR_OR_QNIL(c_attributes[i + 0]); /* localname */
103
+ rb_constructor_args[1] = RBSTR_OR_QNIL(c_attributes[i + 1]); /* prefix */
104
+ rb_constructor_args[2] = RBSTR_OR_QNIL(c_attributes[i + 2]); /* URI */
104
105
 
105
106
  /* value */
106
- argv[3] = NOKOGIRI_STR_NEW((const char*)attributes[i+3],
107
- (attributes[i+4] - attributes[i+3]));
107
+ rb_constructor_args[3] = NOKOGIRI_STR_NEW((const char *)c_attributes[i + 3],
108
+ (c_attributes[i + 4] - c_attributes[i + 3]));
108
109
 
109
- attribute = rb_class_new_instance(4, argv, attr_klass);
110
- rb_ary_push(list, attribute);
110
+ rb_attribute = rb_class_new_instance(4, rb_constructor_args, cNokogiriXmlSaxParserAttribute);
111
+ rb_ary_push(rb_array, rb_attribute);
111
112
  }
112
113
  }
113
114
 
114
- return list;
115
+ return rb_array;
115
116
  }
116
117
 
117
118
  static void
118
- start_element_ns (
119
- void * ctx,
120
- const xmlChar * localname,
121
- const xmlChar * prefix,
122
- const xmlChar * uri,
119
+ start_element_ns(
120
+ void *ctx,
121
+ const xmlChar *localname,
122
+ const xmlChar *prefix,
123
+ const xmlChar *uri,
123
124
  int nb_namespaces,
124
- const xmlChar ** namespaces,
125
+ const xmlChar **namespaces,
125
126
  int nb_attributes,
126
127
  int nb_defaulted,
127
- const xmlChar ** attributes)
128
+ const xmlChar **attributes)
128
129
  {
129
130
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
130
131
  VALUE doc = rb_iv_get(self, "@document");
131
132
 
132
- VALUE attribute_list = attributes_as_list(self, nb_attributes, attributes);
133
+ VALUE attribute_ary = attributes_as_array(nb_attributes, attributes);
133
134
 
134
135
  VALUE ns_list = rb_ary_new2((long)nb_namespaces);
135
136
 
136
137
  if (namespaces) {
137
138
  int i;
138
- for (i = 0; i < nb_namespaces * 2; i += 2)
139
- {
139
+ for (i = 0; i < nb_namespaces * 2; i += 2) {
140
140
  rb_ary_push(ns_list,
141
- rb_ary_new3((long)2,
142
- RBSTR_OR_QNIL(namespaces[i + 0]),
143
- RBSTR_OR_QNIL(namespaces[i + 1])
144
- )
145
- );
141
+ rb_ary_new3((long)2,
142
+ RBSTR_OR_QNIL(namespaces[i + 0]),
143
+ RBSTR_OR_QNIL(namespaces[i + 1])
144
+ )
145
+ );
146
146
  }
147
147
  }
148
148
 
149
- rb_funcall( doc,
150
- id_start_element_namespace,
151
- 5,
152
- NOKOGIRI_STR_NEW2(localname),
153
- attribute_list,
154
- RBSTR_OR_QNIL(prefix),
155
- RBSTR_OR_QNIL(uri),
156
- ns_list
157
- );
149
+ rb_funcall(doc,
150
+ id_start_element_namespace,
151
+ 5,
152
+ NOKOGIRI_STR_NEW2(localname),
153
+ attribute_ary,
154
+ RBSTR_OR_QNIL(prefix),
155
+ RBSTR_OR_QNIL(uri),
156
+ ns_list
157
+ );
158
158
  }
159
159
 
160
160
  /**
161
161
  * end_element_ns was borrowed heavily from libxml-ruby.
162
162
  */
163
163
  static void
164
- end_element_ns (
165
- void * ctx,
166
- const xmlChar * localname,
167
- const xmlChar * prefix,
168
- const xmlChar * uri)
164
+ end_element_ns(
165
+ void *ctx,
166
+ const xmlChar *localname,
167
+ const xmlChar *prefix,
168
+ const xmlChar *uri)
169
169
  {
170
170
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
171
171
  VALUE doc = rb_iv_get(self, "@document");
172
172
 
173
173
  rb_funcall(doc, id_end_element_namespace, 3,
174
- NOKOGIRI_STR_NEW2(localname),
175
- RBSTR_OR_QNIL(prefix),
176
- RBSTR_OR_QNIL(uri)
177
- );
174
+ NOKOGIRI_STR_NEW2(localname),
175
+ RBSTR_OR_QNIL(prefix),
176
+ RBSTR_OR_QNIL(uri)
177
+ );
178
178
  }
179
179
 
180
- static void characters_func(void * ctx, const xmlChar * ch, int len)
180
+ static void
181
+ characters_func(void *ctx, const xmlChar *ch, int len)
181
182
  {
182
183
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
183
184
  VALUE doc = rb_iv_get(self, "@document");
@@ -185,7 +186,8 @@ static void characters_func(void * ctx, const xmlChar * ch, int len)
185
186
  rb_funcall(doc, id_characters, 1, str);
186
187
  }
187
188
 
188
- static void comment_func(void * ctx, const xmlChar * value)
189
+ static void
190
+ comment_func(void *ctx, const xmlChar *value)
189
191
  {
190
192
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
191
193
  VALUE doc = rb_iv_get(self, "@document");
@@ -193,11 +195,12 @@ static void comment_func(void * ctx, const xmlChar * value)
193
195
  rb_funcall(doc, id_comment, 1, str);
194
196
  }
195
197
 
196
- static void warning_func(void * ctx, const char *msg, ...)
198
+ static void
199
+ warning_func(void *ctx, const char *msg, ...)
197
200
  {
198
201
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
199
202
  VALUE doc = rb_iv_get(self, "@document");
200
- char * message;
203
+ char *message;
201
204
  VALUE ruby_message;
202
205
 
203
206
  va_list args;
@@ -206,15 +209,16 @@ static void warning_func(void * ctx, const char *msg, ...)
206
209
  va_end(args);
207
210
 
208
211
  ruby_message = NOKOGIRI_STR_NEW2(message);
209
- vasprintf_free(message);
212
+ free(message);
210
213
  rb_funcall(doc, id_warning, 1, ruby_message);
211
214
  }
212
215
 
213
- static void error_func(void * ctx, const char *msg, ...)
216
+ static void
217
+ error_func(void *ctx, const char *msg, ...)
214
218
  {
215
219
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
216
220
  VALUE doc = rb_iv_get(self, "@document");
217
- char * message;
221
+ char *message;
218
222
  VALUE ruby_message;
219
223
 
220
224
  va_list args;
@@ -223,11 +227,12 @@ static void error_func(void * ctx, const char *msg, ...)
223
227
  va_end(args);
224
228
 
225
229
  ruby_message = NOKOGIRI_STR_NEW2(message);
226
- vasprintf_free(message);
230
+ free(message);
227
231
  rb_funcall(doc, id_error, 1, ruby_message);
228
232
  }
229
233
 
230
- static void cdata_block(void * ctx, const xmlChar * value, int len)
234
+ static void
235
+ cdata_block(void *ctx, const xmlChar *value, int len)
231
236
  {
232
237
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
233
238
  VALUE doc = rb_iv_get(self, "@document");
@@ -235,7 +240,8 @@ static void cdata_block(void * ctx, const xmlChar * value, int len)
235
240
  rb_funcall(doc, id_cdata_block, 1, string);
236
241
  }
237
242
 
238
- static void processing_instruction(void * ctx, const xmlChar * name, const xmlChar * content)
243
+ static void
244
+ processing_instruction(void *ctx, const xmlChar *name, const xmlChar *content)
239
245
  {
240
246
  VALUE rb_content;
241
247
  VALUE self = NOKOGIRI_SAX_SELF(ctx);
@@ -243,27 +249,27 @@ static void processing_instruction(void * ctx, const xmlChar * name, const xmlCh
243
249
 
244
250
  rb_content = content ? NOKOGIRI_STR_NEW2(content) : Qnil;
245
251
 
246
- rb_funcall( doc,
247
- id_processing_instruction,
248
- 2,
249
- NOKOGIRI_STR_NEW2(name),
250
- rb_content
251
- );
252
+ rb_funcall(doc,
253
+ id_processing_instruction,
254
+ 2,
255
+ NOKOGIRI_STR_NEW2(name),
256
+ rb_content
257
+ );
252
258
  }
253
259
 
254
- static void deallocate(xmlSAXHandlerPtr handler)
260
+ static void
261
+ deallocate(xmlSAXHandlerPtr handler)
255
262
  {
256
263
  NOKOGIRI_DEBUG_START(handler);
257
264
  free(handler);
258
265
  NOKOGIRI_DEBUG_END(handler);
259
266
  }
260
267
 
261
- static VALUE allocate(VALUE klass)
268
+ static VALUE
269
+ allocate(VALUE klass)
262
270
  {
263
271
  xmlSAXHandlerPtr handler = calloc((size_t)1, sizeof(xmlSAXHandler));
264
272
 
265
- xmlSetStructuredErrorFunc(NULL, NULL);
266
-
267
273
  handler->startDocument = start_document;
268
274
  handler->endDocument = end_document;
269
275
  handler->startElement = start_element;
@@ -281,29 +287,23 @@ static VALUE allocate(VALUE klass)
281
287
  return Data_Wrap_Struct(klass, NULL, deallocate, handler);
282
288
  }
283
289
 
284
- VALUE cNokogiriXmlSaxParser ;
285
- void init_xml_sax_parser()
290
+ void
291
+ noko_init_xml_sax_parser()
286
292
  {
287
- VALUE nokogiri = rb_define_module("Nokogiri");
288
- VALUE xml = rb_define_module_under(nokogiri, "XML");
289
- VALUE sax = rb_define_module_under(xml, "SAX");
290
- VALUE klass = rb_define_class_under(sax, "Parser", rb_cObject);
291
-
292
- cNokogiriXmlSaxParser = klass;
293
+ cNokogiriXmlSaxParser = rb_define_class_under(mNokogiriXmlSax, "Parser", rb_cObject);
293
294
 
294
- rb_define_alloc_func(klass, allocate);
295
+ rb_define_alloc_func(cNokogiriXmlSaxParser, allocate);
295
296
 
296
297
  id_start_document = rb_intern("start_document");
297
- id_end_document = rb_intern("end_document");
298
- id_start_element = rb_intern("start_element");
299
- id_end_element = rb_intern("end_element");
300
- id_comment = rb_intern("comment");
301
- id_characters = rb_intern("characters");
302
- id_xmldecl = rb_intern("xmldecl");
303
- id_error = rb_intern("error");
304
- id_warning = rb_intern("warning");
305
- id_cdata_block = rb_intern("cdata_block");
306
- id_cAttribute = rb_intern("Attribute");
298
+ id_end_document = rb_intern("end_document");
299
+ id_start_element = rb_intern("start_element");
300
+ id_end_element = rb_intern("end_element");
301
+ id_comment = rb_intern("comment");
302
+ id_characters = rb_intern("characters");
303
+ id_xmldecl = rb_intern("xmldecl");
304
+ id_error = rb_intern("error");
305
+ id_warning = rb_intern("warning");
306
+ id_cdata_block = rb_intern("cdata_block");
307
307
  id_start_element_namespace = rb_intern("start_element_namespace");
308
308
  id_end_element_namespace = rb_intern("end_element_namespace");
309
309
  id_processing_instruction = rb_intern("processing_instruction");