nokogiri 1.10.10 → 1.14.3-aarch64-linux

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 (251) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +44 -0
  3. data/LICENSE-DEPENDENCIES.md +1632 -1022
  4. data/LICENSE.md +1 -1
  5. data/README.md +185 -96
  6. data/bin/nokogiri +63 -50
  7. data/dependencies.yml +33 -66
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +819 -421
  10. data/ext/nokogiri/gumbo.c +594 -0
  11. data/ext/nokogiri/html4_document.c +166 -0
  12. data/ext/nokogiri/html4_element_description.c +294 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser_context.c +114 -0
  15. data/ext/nokogiri/html4_sax_push_parser.c +95 -0
  16. data/ext/nokogiri/include/libexslt/exslt.h +108 -0
  17. data/ext/nokogiri/include/libexslt/exsltconfig.h +70 -0
  18. data/ext/nokogiri/include/libexslt/exsltexports.h +63 -0
  19. data/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +306 -0
  20. data/ext/nokogiri/include/libxml2/libxml/HTMLtree.h +147 -0
  21. data/ext/nokogiri/include/libxml2/libxml/SAX.h +204 -0
  22. data/ext/nokogiri/include/libxml2/libxml/SAX2.h +172 -0
  23. data/ext/nokogiri/include/libxml2/libxml/c14n.h +128 -0
  24. data/ext/nokogiri/include/libxml2/libxml/catalog.h +182 -0
  25. data/ext/nokogiri/include/libxml2/libxml/chvalid.h +230 -0
  26. data/ext/nokogiri/include/libxml2/libxml/debugXML.h +217 -0
  27. data/ext/nokogiri/include/libxml2/libxml/dict.h +81 -0
  28. data/ext/nokogiri/include/libxml2/libxml/encoding.h +232 -0
  29. data/ext/nokogiri/include/libxml2/libxml/entities.h +153 -0
  30. data/ext/nokogiri/include/libxml2/libxml/globals.h +499 -0
  31. data/ext/nokogiri/include/libxml2/libxml/hash.h +236 -0
  32. data/ext/nokogiri/include/libxml2/libxml/list.h +137 -0
  33. data/ext/nokogiri/include/libxml2/libxml/nanoftp.h +186 -0
  34. data/ext/nokogiri/include/libxml2/libxml/nanohttp.h +81 -0
  35. data/ext/nokogiri/include/libxml2/libxml/parser.h +1244 -0
  36. data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +656 -0
  37. data/ext/nokogiri/include/libxml2/libxml/pattern.h +100 -0
  38. data/ext/nokogiri/include/libxml2/libxml/relaxng.h +218 -0
  39. data/ext/nokogiri/include/libxml2/libxml/schemasInternals.h +958 -0
  40. data/ext/nokogiri/include/libxml2/libxml/schematron.h +142 -0
  41. data/ext/nokogiri/include/libxml2/libxml/threads.h +91 -0
  42. data/ext/nokogiri/include/libxml2/libxml/tree.h +1312 -0
  43. data/ext/nokogiri/include/libxml2/libxml/uri.h +94 -0
  44. data/ext/nokogiri/include/libxml2/libxml/valid.h +463 -0
  45. data/ext/nokogiri/include/libxml2/libxml/xinclude.h +129 -0
  46. data/ext/nokogiri/include/libxml2/libxml/xlink.h +189 -0
  47. data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +368 -0
  48. data/ext/nokogiri/include/libxml2/libxml/xmlautomata.h +146 -0
  49. data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +947 -0
  50. data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +77 -0
  51. data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +226 -0
  52. data/ext/nokogiri/include/libxml2/libxml/xmlmodule.h +57 -0
  53. data/ext/nokogiri/include/libxml2/libxml/xmlreader.h +428 -0
  54. data/ext/nokogiri/include/libxml2/libxml/xmlregexp.h +222 -0
  55. data/ext/nokogiri/include/libxml2/libxml/xmlsave.h +88 -0
  56. data/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +246 -0
  57. data/ext/nokogiri/include/libxml2/libxml/xmlschemastypes.h +152 -0
  58. data/ext/nokogiri/include/libxml2/libxml/xmlstring.h +140 -0
  59. data/ext/nokogiri/include/libxml2/libxml/xmlunicode.h +202 -0
  60. data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +503 -0
  61. data/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +488 -0
  62. data/ext/nokogiri/include/libxml2/libxml/xpath.h +575 -0
  63. data/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +632 -0
  64. data/ext/nokogiri/include/libxml2/libxml/xpointer.h +137 -0
  65. data/ext/nokogiri/include/libxslt/attributes.h +38 -0
  66. data/ext/nokogiri/include/libxslt/documents.h +93 -0
  67. data/ext/nokogiri/include/libxslt/extensions.h +262 -0
  68. data/ext/nokogiri/include/libxslt/extra.h +72 -0
  69. data/ext/nokogiri/include/libxslt/functions.h +78 -0
  70. data/ext/nokogiri/include/libxslt/imports.h +75 -0
  71. data/ext/nokogiri/include/libxslt/keys.h +53 -0
  72. data/ext/nokogiri/include/libxslt/namespaces.h +68 -0
  73. data/ext/nokogiri/include/libxslt/numbersInternals.h +73 -0
  74. data/ext/nokogiri/include/libxslt/pattern.h +84 -0
  75. data/ext/nokogiri/include/libxslt/preproc.h +43 -0
  76. data/ext/nokogiri/include/libxslt/security.h +104 -0
  77. data/ext/nokogiri/include/libxslt/templates.h +77 -0
  78. data/ext/nokogiri/include/libxslt/transform.h +207 -0
  79. data/ext/nokogiri/include/libxslt/variables.h +118 -0
  80. data/ext/nokogiri/include/libxslt/xslt.h +110 -0
  81. data/ext/nokogiri/include/libxslt/xsltInternals.h +1982 -0
  82. data/ext/nokogiri/include/libxslt/xsltconfig.h +179 -0
  83. data/ext/nokogiri/include/libxslt/xsltexports.h +64 -0
  84. data/ext/nokogiri/include/libxslt/xsltlocale.h +76 -0
  85. data/ext/nokogiri/include/libxslt/xsltutils.h +310 -0
  86. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  87. data/ext/nokogiri/nokogiri.c +228 -104
  88. data/ext/nokogiri/nokogiri.h +204 -90
  89. data/ext/nokogiri/test_global_handlers.c +40 -0
  90. data/ext/nokogiri/xml_attr.c +17 -17
  91. data/ext/nokogiri/xml_attribute_decl.c +22 -22
  92. data/ext/nokogiri/xml_cdata.c +15 -20
  93. data/ext/nokogiri/xml_comment.c +19 -26
  94. data/ext/nokogiri/xml_document.c +306 -225
  95. data/ext/nokogiri/xml_document_fragment.c +12 -16
  96. data/ext/nokogiri/xml_dtd.c +64 -58
  97. data/ext/nokogiri/xml_element_content.c +33 -28
  98. data/ext/nokogiri/xml_element_decl.c +26 -26
  99. data/ext/nokogiri/xml_encoding_handler.c +45 -20
  100. data/ext/nokogiri/xml_entity_decl.c +37 -35
  101. data/ext/nokogiri/xml_entity_reference.c +16 -18
  102. data/ext/nokogiri/xml_namespace.c +136 -61
  103. data/ext/nokogiri/xml_node.c +1344 -672
  104. data/ext/nokogiri/xml_node_set.c +178 -168
  105. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  106. data/ext/nokogiri/xml_reader.c +316 -190
  107. data/ext/nokogiri/xml_relax_ng.c +52 -30
  108. data/ext/nokogiri/xml_sax_parser.c +130 -124
  109. data/ext/nokogiri/xml_sax_parser_context.c +110 -89
  110. data/ext/nokogiri/xml_sax_push_parser.c +36 -29
  111. data/ext/nokogiri/xml_schema.c +98 -50
  112. data/ext/nokogiri/xml_syntax_error.c +42 -21
  113. data/ext/nokogiri/xml_text.c +14 -18
  114. data/ext/nokogiri/xml_xpath_context.c +263 -148
  115. data/ext/nokogiri/xslt_stylesheet.c +271 -178
  116. data/gumbo-parser/CHANGES.md +63 -0
  117. data/gumbo-parser/Makefile +111 -0
  118. data/gumbo-parser/THANKS +27 -0
  119. data/lib/nokogiri/2.7/nokogiri.so +0 -0
  120. data/lib/nokogiri/3.0/nokogiri.so +0 -0
  121. data/lib/nokogiri/3.1/nokogiri.so +0 -0
  122. data/lib/nokogiri/3.2/nokogiri.so +0 -0
  123. data/lib/nokogiri/class_resolver.rb +67 -0
  124. data/lib/nokogiri/css/node.rb +10 -8
  125. data/lib/nokogiri/css/parser.rb +397 -377
  126. data/lib/nokogiri/css/parser.y +250 -245
  127. data/lib/nokogiri/css/parser_extras.rb +54 -49
  128. data/lib/nokogiri/css/syntax_error.rb +3 -1
  129. data/lib/nokogiri/css/tokenizer.rb +5 -3
  130. data/lib/nokogiri/css/tokenizer.rex +3 -2
  131. data/lib/nokogiri/css/xpath_visitor.rb +223 -94
  132. data/lib/nokogiri/css.rb +56 -17
  133. data/lib/nokogiri/decorators/slop.rb +9 -7
  134. data/lib/nokogiri/encoding_handler.rb +57 -0
  135. data/lib/nokogiri/extension.rb +32 -0
  136. data/lib/nokogiri/gumbo.rb +15 -0
  137. data/lib/nokogiri/html.rb +38 -27
  138. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  139. data/lib/nokogiri/html4/document.rb +214 -0
  140. data/lib/nokogiri/html4/document_fragment.rb +54 -0
  141. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  142. data/lib/nokogiri/html4/element_description_defaults.rb +572 -0
  143. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  144. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  145. data/lib/nokogiri/{html → html4}/sax/parser.rb +17 -16
  146. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  147. data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
  148. data/lib/nokogiri/html4.rb +47 -0
  149. data/lib/nokogiri/html5/document.rb +168 -0
  150. data/lib/nokogiri/html5/document_fragment.rb +90 -0
  151. data/lib/nokogiri/html5/node.rb +98 -0
  152. data/lib/nokogiri/html5.rb +389 -0
  153. data/lib/nokogiri/jruby/dependencies.rb +3 -0
  154. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  155. data/lib/nokogiri/syntax_error.rb +2 -0
  156. data/lib/nokogiri/version/constant.rb +6 -0
  157. data/lib/nokogiri/version/info.rb +223 -0
  158. data/lib/nokogiri/version.rb +3 -108
  159. data/lib/nokogiri/xml/attr.rb +55 -3
  160. data/lib/nokogiri/xml/attribute_decl.rb +3 -1
  161. data/lib/nokogiri/xml/builder.rb +75 -34
  162. data/lib/nokogiri/xml/cdata.rb +3 -1
  163. data/lib/nokogiri/xml/character_data.rb +2 -0
  164. data/lib/nokogiri/xml/document.rb +312 -126
  165. data/lib/nokogiri/xml/document_fragment.rb +93 -48
  166. data/lib/nokogiri/xml/dtd.rb +4 -2
  167. data/lib/nokogiri/xml/element_content.rb +2 -0
  168. data/lib/nokogiri/xml/element_decl.rb +3 -1
  169. data/lib/nokogiri/xml/entity_decl.rb +4 -2
  170. data/lib/nokogiri/xml/entity_reference.rb +2 -0
  171. data/lib/nokogiri/xml/namespace.rb +45 -0
  172. data/lib/nokogiri/xml/node/save_options.rb +15 -8
  173. data/lib/nokogiri/xml/node.rb +1067 -406
  174. data/lib/nokogiri/xml/node_set.rb +135 -59
  175. data/lib/nokogiri/xml/notation.rb +13 -0
  176. data/lib/nokogiri/xml/parse_options.rb +145 -52
  177. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  178. data/lib/nokogiri/xml/pp/node.rb +27 -26
  179. data/lib/nokogiri/xml/pp.rb +4 -2
  180. data/lib/nokogiri/xml/processing_instruction.rb +4 -1
  181. data/lib/nokogiri/xml/reader.rb +21 -28
  182. data/lib/nokogiri/xml/relax_ng.rb +8 -2
  183. data/lib/nokogiri/xml/sax/document.rb +45 -49
  184. data/lib/nokogiri/xml/sax/parser.rb +39 -36
  185. data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
  186. data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
  187. data/lib/nokogiri/xml/sax.rb +6 -4
  188. data/lib/nokogiri/xml/schema.rb +19 -9
  189. data/lib/nokogiri/xml/searchable.rb +112 -72
  190. data/lib/nokogiri/xml/syntax_error.rb +6 -4
  191. data/lib/nokogiri/xml/text.rb +2 -0
  192. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  193. data/lib/nokogiri/xml/xpath.rb +15 -4
  194. data/lib/nokogiri/xml/xpath_context.rb +3 -3
  195. data/lib/nokogiri/xml.rb +38 -37
  196. data/lib/nokogiri/xslt/stylesheet.rb +3 -1
  197. data/lib/nokogiri/xslt.rb +29 -20
  198. data/lib/nokogiri.rb +48 -72
  199. data/lib/xsd/xmlparser/nokogiri.rb +29 -25
  200. metadata +146 -307
  201. data/ext/nokogiri/html_document.c +0 -170
  202. data/ext/nokogiri/html_document.h +0 -10
  203. data/ext/nokogiri/html_element_description.c +0 -279
  204. data/ext/nokogiri/html_element_description.h +0 -10
  205. data/ext/nokogiri/html_entity_lookup.c +0 -32
  206. data/ext/nokogiri/html_entity_lookup.h +0 -8
  207. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  208. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  209. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  210. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  211. data/ext/nokogiri/xml_attr.h +0 -9
  212. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  213. data/ext/nokogiri/xml_cdata.h +0 -9
  214. data/ext/nokogiri/xml_comment.h +0 -9
  215. data/ext/nokogiri/xml_document.h +0 -23
  216. data/ext/nokogiri/xml_document_fragment.h +0 -10
  217. data/ext/nokogiri/xml_dtd.h +0 -10
  218. data/ext/nokogiri/xml_element_content.h +0 -10
  219. data/ext/nokogiri/xml_element_decl.h +0 -9
  220. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  221. data/ext/nokogiri/xml_entity_decl.h +0 -10
  222. data/ext/nokogiri/xml_entity_reference.h +0 -9
  223. data/ext/nokogiri/xml_io.c +0 -61
  224. data/ext/nokogiri/xml_io.h +0 -11
  225. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  226. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  227. data/ext/nokogiri/xml_namespace.h +0 -14
  228. data/ext/nokogiri/xml_node.h +0 -13
  229. data/ext/nokogiri/xml_node_set.h +0 -12
  230. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  231. data/ext/nokogiri/xml_reader.h +0 -10
  232. data/ext/nokogiri/xml_relax_ng.h +0 -9
  233. data/ext/nokogiri/xml_sax_parser.h +0 -39
  234. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  235. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  236. data/ext/nokogiri/xml_schema.h +0 -9
  237. data/ext/nokogiri/xml_syntax_error.h +0 -13
  238. data/ext/nokogiri/xml_text.h +0 -9
  239. data/ext/nokogiri/xml_xpath_context.h +0 -10
  240. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  241. data/lib/nokogiri/html/document.rb +0 -335
  242. data/lib/nokogiri/html/document_fragment.rb +0 -49
  243. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  244. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  245. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  246. data/patches/libxml2/0002-Remove-script-macro-support.patch +0 -40
  247. data/patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch +0 -44
  248. data/patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch +0 -25
  249. data/patches/libxml2/0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch +0 -32
  250. data/ports/archives/libxml2-2.9.10.tar.gz +0 -0
  251. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
@@ -1,46 +1,43 @@
1
- #include <xslt_stylesheet.h>
1
+ #include <nokogiri.h>
2
2
 
3
- #include <libxslt/xsltInternals.h>
4
- #include <libxslt/xsltutils.h>
5
- #include <libxslt/transform.h>
6
- #include <libexslt/exslt.h>
7
-
8
- VALUE xslt;
9
-
10
- int vasprintf (char **strp, const char *fmt, va_list ap);
11
- void vasprintf_free (void *p);
3
+ VALUE cNokogiriXsltStylesheet ;
12
4
 
13
- static void mark(nokogiriXsltStylesheetTuple *wrapper)
5
+ static void
6
+ mark(nokogiriXsltStylesheetTuple *wrapper)
14
7
  {
15
8
  rb_gc_mark(wrapper->func_instances);
16
9
  }
17
10
 
18
- static void dealloc(nokogiriXsltStylesheetTuple *wrapper)
11
+ static void
12
+ dealloc(nokogiriXsltStylesheetTuple *wrapper)
19
13
  {
20
- xsltStylesheetPtr doc = wrapper->ss;
21
-
22
- NOKOGIRI_DEBUG_START(doc);
23
- xsltFreeStylesheet(doc); /* commented out for now. */
24
- NOKOGIRI_DEBUG_END(doc);
25
-
26
- free(wrapper);
14
+ xsltStylesheetPtr doc = wrapper->ss;
15
+ xsltFreeStylesheet(doc);
16
+ ruby_xfree(wrapper);
27
17
  }
28
18
 
29
- static void xslt_generic_error_handler(void * ctx, const char *msg, ...)
19
+ PRINTFLIKE_DECL(2, 3)
20
+ static void
21
+ xslt_generic_error_handler(void *ctx, const char *msg, ...)
30
22
  {
31
- char * message;
23
+ VALUE message;
32
24
 
25
+ #ifdef TRUFFLERUBY_NOKOGIRI_SYSTEM_LIBRARIES
26
+ /* It is not currently possible to pass var args from native
27
+ functions to sulong, so we work around the issue here. */
28
+ message = rb_sprintf("xslt_generic_error_handler: %s", msg);
29
+ #else
33
30
  va_list args;
34
31
  va_start(args, msg);
35
- vasprintf(&message, msg, args);
32
+ message = rb_vsprintf(msg, args);
36
33
  va_end(args);
34
+ #endif
37
35
 
38
- rb_str_cat2((VALUE)ctx, message);
39
-
40
- vasprintf_free(message);
36
+ rb_str_concat((VALUE)ctx, message);
41
37
  }
42
38
 
43
- VALUE Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
39
+ VALUE
40
+ Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
44
41
  {
45
42
  VALUE self;
46
43
  nokogiriXsltStylesheetTuple *wrapper;
@@ -61,29 +58,29 @@ VALUE Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
61
58
  *
62
59
  * Parse a stylesheet from +document+.
63
60
  */
64
- static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
61
+ static VALUE
62
+ parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
65
63
  {
66
- xmlDocPtr xml, xml_cpy;
67
- VALUE errstr, exception;
68
- xsltStylesheetPtr ss ;
69
- Data_Get_Struct(xmldocobj, xmlDoc, xml);
70
- exsltRegisterAll();
64
+ xmlDocPtr xml, xml_cpy;
65
+ VALUE errstr, exception;
66
+ xsltStylesheetPtr ss ;
67
+ Data_Get_Struct(xmldocobj, xmlDoc, xml);
71
68
 
72
- errstr = rb_str_new(0, 0);
73
- xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
69
+ errstr = rb_str_new(0, 0);
70
+ xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
74
71
 
75
- xml_cpy = xmlCopyDoc(xml, 1); /* 1 => recursive */
76
- ss = xsltParseStylesheetDoc(xml_cpy);
72
+ xml_cpy = xmlCopyDoc(xml, 1); /* 1 => recursive */
73
+ ss = xsltParseStylesheetDoc(xml_cpy);
77
74
 
78
- xsltSetGenericErrorFunc(NULL, NULL);
75
+ xsltSetGenericErrorFunc(NULL, NULL);
79
76
 
80
- if (!ss) {
81
- xmlFreeDoc(xml_cpy);
82
- exception = rb_exc_new3(rb_eRuntimeError, errstr);
83
- rb_exc_raise(exception);
84
- }
77
+ if (!ss) {
78
+ xmlFreeDoc(xml_cpy);
79
+ exception = rb_exc_new3(rb_eRuntimeError, errstr);
80
+ rb_exc_raise(exception);
81
+ }
85
82
 
86
- return Nokogiri_wrap_xslt_stylesheet(ss);
83
+ return Nokogiri_wrap_xslt_stylesheet(ss);
87
84
  }
88
85
 
89
86
 
@@ -93,144 +90,244 @@ static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
93
90
  *
94
91
  * Serialize +document+ to an xml string.
95
92
  */
96
- static VALUE serialize(VALUE self, VALUE xmlobj)
97
- {
98
- xmlDocPtr xml ;
99
- nokogiriXsltStylesheetTuple *wrapper;
100
- xmlChar* doc_ptr ;
101
- int doc_len ;
102
- VALUE rval ;
103
-
104
- Data_Get_Struct(xmlobj, xmlDoc, xml);
105
- Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
106
- xsltSaveResultToString(&doc_ptr, &doc_len, xml, wrapper->ss);
107
- rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
108
- xmlFree(doc_ptr);
109
- return rval ;
110
- }
111
-
112
- static void swallow_superfluous_xml_errors(void * userdata, xmlErrorPtr error, ...)
93
+ static VALUE
94
+ serialize(VALUE self, VALUE xmlobj)
113
95
  {
96
+ xmlDocPtr xml ;
97
+ nokogiriXsltStylesheetTuple *wrapper;
98
+ xmlChar *doc_ptr ;
99
+ int doc_len ;
100
+ VALUE rval ;
101
+
102
+ Data_Get_Struct(xmlobj, xmlDoc, xml);
103
+ Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
104
+ xsltSaveResultToString(&doc_ptr, &doc_len, xml, wrapper->ss);
105
+ rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
106
+ xmlFree(doc_ptr);
107
+ return rval ;
114
108
  }
115
109
 
116
110
  /*
117
- * call-seq:
118
- * transform(document, params = [])
111
+ * call-seq:
112
+ * transform(document)
113
+ * transform(document, params = {})
114
+ *
115
+ * Apply an XSLT stylesheet to an XML::Document.
116
+ *
117
+ * [Parameters]
118
+ * - +document+ (Nokogiri::XML::Document) the document to be transformed.
119
+ * - +params+ (Hash, Array) strings used as XSLT parameters.
120
+ *
121
+ * [Returns] Nokogiri::XML::Document
122
+ *
123
+ * *Example* of basic transformation:
124
+ *
125
+ * xslt = <<~XSLT
126
+ * <xsl:stylesheet version="1.0"
127
+ * xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
128
+ *
129
+ * <xsl:param name="title"/>
130
+ *
131
+ * <xsl:template match="/">
132
+ * <html>
133
+ * <body>
134
+ * <h1><xsl:value-of select="$title"/></h1>
135
+ * <ol>
136
+ * <xsl:for-each select="staff/employee">
137
+ * <li><xsl:value-of select="employeeId"></li>
138
+ * </xsl:for-each>
139
+ * </ol>
140
+ * </body>
141
+ * </html>
142
+ * </xsl:stylesheet>
143
+ * XSLT
144
+ *
145
+ * xml = <<~XML
146
+ * <?xml version="1.0"?>
147
+ * <staff>
148
+ * <employee>
149
+ * <employeeId>EMP0001</employeeId>
150
+ * <position>Accountant</position>
151
+ * </employee>
152
+ * <employee>
153
+ * <employeeId>EMP0002</employeeId>
154
+ * <position>Developer</position>
155
+ * </employee>
156
+ * </staff>
157
+ * XML
119
158
  *
120
- * Apply an XSLT stylesheet to an XML::Document.
121
- * +params+ is an array of strings used as XSLT parameters.
122
- * returns Nokogiri::XML::Document
159
+ * doc = Nokogiri::XML::Document.parse(xml)
160
+ * stylesheet = Nokogiri::XSLT.parse(xslt)
123
161
  *
124
- * Example:
162
+ * ⚠ Note that the +h1+ element is empty because no param has been provided!
125
163
  *
126
- * doc = Nokogiri::XML(File.read(ARGV[0]))
127
- * xslt = Nokogiri::XSLT(File.read(ARGV[1]))
128
- * puts xslt.transform(doc, ['key', 'value'])
164
+ * stylesheet.transform(doc).to_xml
165
+ * # => "<html><body>\n" +
166
+ * # "<h1></h1>\n" +
167
+ * # "<ol>\n" +
168
+ * # "<li>EMP0001</li>\n" +
169
+ * # "<li>EMP0002</li>\n" +
170
+ * # "</ol>\n" +
171
+ * # "</body></html>\n"
129
172
  *
173
+ * *Example* of using an input parameter hash:
174
+ *
175
+ * ⚠ The title is populated, but note how we need to quote-escape the value.
176
+ *
177
+ * stylesheet.transform(doc, { "title" => "'Employee List'" }).to_xml
178
+ * # => "<html><body>\n" +
179
+ * # "<h1>Employee List</h1>\n" +
180
+ * # "<ol>\n" +
181
+ * # "<li>EMP0001</li>\n" +
182
+ * # "<li>EMP0002</li>\n" +
183
+ * # "</ol>\n" +
184
+ * # "</body></html>\n"
185
+ *
186
+ * *Example* using the XSLT.quote_params helper method to safely quote-escape strings:
187
+ *
188
+ * stylesheet.transform(doc, Nokogiri::XSLT.quote_params({ "title" => "Aaron's List" })).to_xml
189
+ * # => "<html><body>\n" +
190
+ * # "<h1>Aaron's List</h1>\n" +
191
+ * # "<ol>\n" +
192
+ * # "<li>EMP0001</li>\n" +
193
+ * # "<li>EMP0002</li>\n" +
194
+ * # "</ol>\n" +
195
+ * # "</body></html>\n"
196
+ *
197
+ * *Example* using an array of XSLT parameters
198
+ *
199
+ * You can also use an array if you want to.
200
+ *
201
+ * stylesheet.transform(doc, ["title", "'Employee List'"]).to_xml
202
+ * # => "<html><body>\n" +
203
+ * # "<h1>Employee List</h1>\n" +
204
+ * # "<ol>\n" +
205
+ * # "<li>EMP0001</li>\n" +
206
+ * # "<li>EMP0002</li>\n" +
207
+ * # "</ol>\n" +
208
+ * # "</body></html>\n"
209
+ *
210
+ * Or pass an array to XSLT.quote_params:
211
+ *
212
+ * stylesheet.transform(doc, Nokogiri::XSLT.quote_params(["title", "Aaron's List"])).to_xml
213
+ * # => "<html><body>\n" +
214
+ * # "<h1>Aaron's List</h1>\n" +
215
+ * # "<ol>\n" +
216
+ * # "<li>EMP0001</li>\n" +
217
+ * # "<li>EMP0002</li>\n" +
218
+ * # "</ol>\n" +
219
+ * # "</body></html>\n"
220
+ *
221
+ * See: Nokogiri::XSLT.quote_params
130
222
  */
131
- static VALUE transform(int argc, VALUE* argv, VALUE self)
223
+ static VALUE
224
+ transform(int argc, VALUE *argv, VALUE self)
132
225
  {
133
- VALUE xmldoc, paramobj, errstr, exception ;
134
- xmlDocPtr xml ;
135
- xmlDocPtr result ;
136
- nokogiriXsltStylesheetTuple *wrapper;
137
- const char** params ;
138
- long param_len, j ;
139
- int parse_error_occurred ;
140
-
141
- rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
142
- if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
143
- if (!rb_obj_is_kind_of(xmldoc, cNokogiriXmlDocument))
144
- rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");
145
-
146
- /* handle hashes as arguments. */
147
- if(T_HASH == TYPE(paramobj)) {
148
- paramobj = rb_funcall(paramobj, rb_intern("to_a"), 0);
149
- paramobj = rb_funcall(paramobj, rb_intern("flatten"), 0);
150
- }
151
-
152
- Check_Type(paramobj, T_ARRAY);
153
-
154
- Data_Get_Struct(xmldoc, xmlDoc, xml);
155
- Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
156
-
157
- param_len = RARRAY_LEN(paramobj);
158
- params = calloc((size_t)param_len+1, sizeof(char*));
159
- for (j = 0 ; j < param_len ; j++) {
160
- VALUE entry = rb_ary_entry(paramobj, j);
161
- const char * ptr = StringValueCStr(entry);
162
- params[j] = ptr;
163
- }
164
- params[param_len] = 0 ;
165
-
166
- errstr = rb_str_new(0, 0);
167
- xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
168
- xmlSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
169
-
170
- result = xsltApplyStylesheet(wrapper->ss, xml, params);
171
- free(params);
172
-
173
- xsltSetGenericErrorFunc(NULL, NULL);
174
- xmlSetGenericErrorFunc(NULL, NULL);
175
-
176
- parse_error_occurred = (Qfalse == rb_funcall(errstr, rb_intern("empty?"), 0));
177
-
178
- if (parse_error_occurred) {
179
- exception = rb_exc_new3(rb_eRuntimeError, errstr);
180
- rb_exc_raise(exception);
181
- }
182
-
183
- return Nokogiri_wrap_xml_document((VALUE)0, result) ;
226
+ VALUE xmldoc, paramobj, errstr, exception ;
227
+ xmlDocPtr xml ;
228
+ xmlDocPtr result ;
229
+ nokogiriXsltStylesheetTuple *wrapper;
230
+ const char **params ;
231
+ long param_len, j ;
232
+ int parse_error_occurred ;
233
+
234
+ rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
235
+ if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
236
+ if (!rb_obj_is_kind_of(xmldoc, cNokogiriXmlDocument)) {
237
+ rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");
238
+ }
239
+
240
+ /* handle hashes as arguments. */
241
+ if (T_HASH == TYPE(paramobj)) {
242
+ paramobj = rb_funcall(paramobj, rb_intern("to_a"), 0);
243
+ paramobj = rb_funcall(paramobj, rb_intern("flatten"), 0);
244
+ }
245
+
246
+ Check_Type(paramobj, T_ARRAY);
247
+
248
+ Data_Get_Struct(xmldoc, xmlDoc, xml);
249
+ Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
250
+
251
+ param_len = RARRAY_LEN(paramobj);
252
+ params = ruby_xcalloc((size_t)param_len + 1, sizeof(char *));
253
+ for (j = 0 ; j < param_len ; j++) {
254
+ VALUE entry = rb_ary_entry(paramobj, j);
255
+ const char *ptr = StringValueCStr(entry);
256
+ params[j] = ptr;
257
+ }
258
+ params[param_len] = 0 ;
259
+
260
+ errstr = rb_str_new(0, 0);
261
+ xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
262
+ xmlSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
263
+
264
+ result = xsltApplyStylesheet(wrapper->ss, xml, params);
265
+ ruby_xfree(params);
266
+
267
+ xsltSetGenericErrorFunc(NULL, NULL);
268
+ xmlSetGenericErrorFunc(NULL, NULL);
269
+
270
+ parse_error_occurred = (Qfalse == rb_funcall(errstr, rb_intern("empty?"), 0));
271
+
272
+ if (parse_error_occurred) {
273
+ exception = rb_exc_new3(rb_eRuntimeError, errstr);
274
+ rb_exc_raise(exception);
275
+ }
276
+
277
+ return noko_xml_document_wrap((VALUE)0, result) ;
184
278
  }
185
279
 
186
- static void method_caller(xmlXPathParserContextPtr ctxt, int nargs)
280
+ static void
281
+ method_caller(xmlXPathParserContextPtr ctxt, int nargs)
187
282
  {
188
- VALUE handler;
189
- const char *function_name;
190
- xsltTransformContextPtr transform;
191
- const xmlChar *functionURI;
283
+ VALUE handler;
284
+ const char *function_name;
285
+ xsltTransformContextPtr transform;
286
+ const xmlChar *functionURI;
192
287
 
193
- transform = xsltXPathGetTransformContext(ctxt);
194
- functionURI = ctxt->context->functionURI;
195
- handler = (VALUE)xsltGetExtData(transform, functionURI);
196
- function_name = (const char*)(ctxt->context->function);
288
+ transform = xsltXPathGetTransformContext(ctxt);
289
+ functionURI = ctxt->context->functionURI;
290
+ handler = (VALUE)xsltGetExtData(transform, functionURI);
291
+ function_name = (const char *)(ctxt->context->function);
197
292
 
198
- Nokogiri_marshal_xpath_funcall_and_return_values(ctxt, nargs, handler, (const char*)function_name);
293
+ Nokogiri_marshal_xpath_funcall_and_return_values(ctxt, nargs, handler, (const char *)function_name);
199
294
  }
200
295
 
201
- static void * initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
296
+ static void *
297
+ initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
202
298
  {
203
- VALUE modules = rb_iv_get(xslt, "@modules");
204
- VALUE obj = rb_hash_aref(modules, rb_str_new2((const char *)uri));
205
- VALUE args = { Qfalse };
206
- VALUE methods = rb_funcall(obj, rb_intern("instance_methods"), 1, args);
207
- VALUE inst;
208
- nokogiriXsltStylesheetTuple *wrapper;
209
- int i;
210
-
211
- for(i = 0; i < RARRAY_LEN(methods); i++) {
212
- VALUE method_name = rb_obj_as_string(rb_ary_entry(methods, i));
213
- xsltRegisterExtFunction(ctxt,
214
- (unsigned char *)StringValueCStr(method_name), uri, method_caller);
215
- }
216
-
217
- Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
218
- wrapper);
219
- inst = rb_class_new_instance(0, NULL, obj);
220
- rb_ary_push(wrapper->func_instances, inst);
221
-
222
- return (void *)inst;
299
+ VALUE modules = rb_iv_get(mNokogiriXslt, "@modules");
300
+ VALUE obj = rb_hash_aref(modules, rb_str_new2((const char *)uri));
301
+ VALUE args = { Qfalse };
302
+ VALUE methods = rb_funcall(obj, rb_intern("instance_methods"), 1, args);
303
+ VALUE inst;
304
+ nokogiriXsltStylesheetTuple *wrapper;
305
+ int i;
306
+
307
+ for (i = 0; i < RARRAY_LEN(methods); i++) {
308
+ VALUE method_name = rb_obj_as_string(rb_ary_entry(methods, i));
309
+ xsltRegisterExtFunction(ctxt,
310
+ (unsigned char *)StringValueCStr(method_name), uri, method_caller);
311
+ }
312
+
313
+ Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
314
+ wrapper);
315
+ inst = rb_class_new_instance(0, NULL, obj);
316
+ rb_ary_push(wrapper->func_instances, inst);
317
+
318
+ return (void *)inst;
223
319
  }
224
320
 
225
- static void shutdownFunc(xsltTransformContextPtr ctxt,
226
- const xmlChar *uri, void *data)
321
+ static void
322
+ shutdownFunc(xsltTransformContextPtr ctxt,
323
+ const xmlChar *uri, void *data)
227
324
  {
228
- nokogiriXsltStylesheetTuple *wrapper;
325
+ nokogiriXsltStylesheetTuple *wrapper;
229
326
 
230
- Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
231
- wrapper);
327
+ Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
328
+ wrapper);
232
329
 
233
- rb_ary_clear(wrapper->func_instances);
330
+ rb_ary_clear(wrapper->func_instances);
234
331
  }
235
332
 
236
333
  /*
@@ -239,32 +336,28 @@ static void shutdownFunc(xsltTransformContextPtr ctxt,
239
336
  *
240
337
  * Register a class that implements custom XSLT transformation functions.
241
338
  */
242
- static VALUE registr(VALUE self, VALUE uri, VALUE obj)
339
+ static VALUE
340
+ registr(VALUE self, VALUE uri, VALUE obj)
243
341
  {
244
- VALUE modules = rb_iv_get(self, "@modules");
245
- if(NIL_P(modules)) rb_raise(rb_eRuntimeError, "wtf! @modules isn't set");
342
+ VALUE modules = rb_iv_get(self, "@modules");
343
+ if (NIL_P(modules)) { rb_raise(rb_eRuntimeError, "wtf! @modules isn't set"); }
246
344
 
247
- rb_hash_aset(modules, uri, obj);
248
- xsltRegisterExtModule((unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc);
249
- return self;
345
+ rb_hash_aset(modules, uri, obj);
346
+ xsltRegisterExtModule((unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc);
347
+ return self;
250
348
  }
251
349
 
252
- VALUE cNokogiriXsltStylesheet ;
253
- void init_xslt_stylesheet()
350
+ void
351
+ noko_init_xslt_stylesheet(void)
254
352
  {
255
- VALUE nokogiri;
256
- VALUE klass;
257
-
258
- nokogiri = rb_define_module("Nokogiri");
259
- xslt = rb_define_module_under(nokogiri, "XSLT");
260
- klass = rb_define_class_under(xslt, "Stylesheet", rb_cObject);
353
+ rb_define_singleton_method(mNokogiriXslt, "register", registr, 2);
354
+ rb_iv_set(mNokogiriXslt, "@modules", rb_hash_new());
261
355
 
262
- rb_iv_set(xslt, "@modules", rb_hash_new());
356
+ cNokogiriXsltStylesheet = rb_define_class_under(mNokogiriXslt, "Stylesheet", rb_cObject);
263
357
 
264
- cNokogiriXsltStylesheet = klass;
358
+ rb_undef_alloc_func(cNokogiriXsltStylesheet);
265
359
 
266
- rb_define_singleton_method(klass, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
267
- rb_define_singleton_method(xslt, "register", registr, 2);
268
- rb_define_method(klass, "serialize", serialize, 1);
269
- rb_define_method(klass, "transform", transform, -1);
360
+ rb_define_singleton_method(cNokogiriXsltStylesheet, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
361
+ rb_define_method(cNokogiriXsltStylesheet, "serialize", serialize, 1);
362
+ rb_define_method(cNokogiriXsltStylesheet, "transform", transform, -1);
270
363
  }
@@ -0,0 +1,63 @@
1
+ ## Gumbo 0.10.1 (2015-04-30)
2
+
3
+ Same as 0.10.0, but with the version number bumped because the last version-number commit to v0.9.4 makes GitHub think that v0.9.4 is the latest version and so it's not highlighted on the webpage.
4
+
5
+ ## Gumbo 0.10.0 (2015-04-30)
6
+
7
+ * Full support for `<template>` tag (kevinhendricks, nostrademons).
8
+ * Some fixes for `<rtc>`/`<rt>` handling (kevinhendricks, vmg).
9
+ * All html5lib-trunk tests pass now! (kevinhendricks, vmg, nostrademons)
10
+ * Support for fragment parsing (vmg)
11
+ * A couple additional example programs (kevinhendricks)
12
+ * Performance improvements totaling an estimated 30-40% total improvement (vmg, nostrademons).
13
+
14
+ ## Gumbo 0.9.4 (2015-04-30)
15
+
16
+ * Additional Visual Studio fixes (lowjoel, nostrademons)
17
+ * Fixed some unused variable warnings.
18
+ * Fix for glibtoolize vs. libtoolize build errors on Mac.
19
+ * Fixed `CDATA` end tag handling.
20
+
21
+ ## Gumbo 0.9.3 (2015-02-17)
22
+
23
+ * Bugfix for `&AElig;` entities (rgrove)
24
+ * Fix `CDATA` handling; `CDATA` sections now generate a `GUMBO_NODE_CDATA` node rather
25
+ than plain text.
26
+ * Fix `get_title example` to handle whitespace nodes (gsnedders)
27
+ * Visual Studio compilation fixes (fishioon)
28
+ * Take the namespace into account when determining whether a node matches a
29
+ certain tag (aroben)
30
+ * Replace the varargs tag functions with a tagset bytevector, for a 20-30%
31
+ speedup in overall parse time (kevinhendricks, vmg)
32
+ * Add MacOS X support to Travis CI, and fix the deployment/DLL issues this
33
+ uncovered (nostrademons, kevinhendricks, vmg)
34
+
35
+ ## Gumbo 0.9.2 (2014-09-21)
36
+
37
+ * Performance improvements: Ragel-based char ref decoder and DFA-based UTF8
38
+ decoder, totaling speedups of up to 300%.
39
+ * Added benchmarking program and some sample data.
40
+ * Fixed a compiler error under Visual Studio.
41
+ * Fix an error in the ctypes bindings that could lead to memory corruption in
42
+ the Python bindings.
43
+ * Fix duplicate attributes when parsing `<isindex>` tags.
44
+ * Don't leave semicolons behind when consuming entity references (rgrove)
45
+ * Internally rename some functions in preparation for an amalgamation file
46
+ (jdeng)
47
+ * Add proper cflags for gyp builds (skabbes)
48
+
49
+ ## Gumbo 0.9.1 (2014-08-07)
50
+
51
+ * First version listed on PyPi.
52
+ * Autotools files excluded from GitHub and generated via autogen.sh. (endgame)
53
+ * Numerous compiler warnings fixed. (bnoordhuis, craigbarnes)
54
+ * Google security audit passed.
55
+ * Gyp support (tfarina)
56
+ * Naming convention for structs changed to avoid C reserved words.
57
+ * Fix several integer and buffer overflows (Maxime2)
58
+ * Some Visual Studio compiler support (bugparty)
59
+ * Python3 compatibility for the ctypes bindings.
60
+
61
+ ## Gumbo 0.9.0 (2013-08-13)
62
+
63
+ * Initial release open-sourced by Google.