nokogiri 1.18.0.rc1-x86_64-linux-musl

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 (203) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +38 -0
  3. data/LICENSE-DEPENDENCIES.md +2224 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +293 -0
  6. data/bin/nokogiri +131 -0
  7. data/dependencies.yml +42 -0
  8. data/ext/nokogiri/depend +38 -0
  9. data/ext/nokogiri/extconf.rb +1173 -0
  10. data/ext/nokogiri/gumbo.c +610 -0
  11. data/ext/nokogiri/html4_document.c +171 -0
  12. data/ext/nokogiri/html4_element_description.c +299 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser.c +40 -0
  15. data/ext/nokogiri/html4_sax_parser_context.c +98 -0
  16. data/ext/nokogiri/html4_sax_push_parser.c +96 -0
  17. data/ext/nokogiri/include/libexslt/exslt.h +108 -0
  18. data/ext/nokogiri/include/libexslt/exsltconfig.h +70 -0
  19. data/ext/nokogiri/include/libexslt/exsltexports.h +63 -0
  20. data/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +336 -0
  21. data/ext/nokogiri/include/libxml2/libxml/HTMLtree.h +147 -0
  22. data/ext/nokogiri/include/libxml2/libxml/SAX.h +202 -0
  23. data/ext/nokogiri/include/libxml2/libxml/SAX2.h +171 -0
  24. data/ext/nokogiri/include/libxml2/libxml/c14n.h +115 -0
  25. data/ext/nokogiri/include/libxml2/libxml/catalog.h +182 -0
  26. data/ext/nokogiri/include/libxml2/libxml/chvalid.h +230 -0
  27. data/ext/nokogiri/include/libxml2/libxml/debugXML.h +217 -0
  28. data/ext/nokogiri/include/libxml2/libxml/dict.h +82 -0
  29. data/ext/nokogiri/include/libxml2/libxml/encoding.h +244 -0
  30. data/ext/nokogiri/include/libxml2/libxml/entities.h +166 -0
  31. data/ext/nokogiri/include/libxml2/libxml/globals.h +41 -0
  32. data/ext/nokogiri/include/libxml2/libxml/hash.h +251 -0
  33. data/ext/nokogiri/include/libxml2/libxml/list.h +137 -0
  34. data/ext/nokogiri/include/libxml2/libxml/nanoftp.h +186 -0
  35. data/ext/nokogiri/include/libxml2/libxml/nanohttp.h +98 -0
  36. data/ext/nokogiri/include/libxml2/libxml/parser.h +1390 -0
  37. data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +671 -0
  38. data/ext/nokogiri/include/libxml2/libxml/pattern.h +106 -0
  39. data/ext/nokogiri/include/libxml2/libxml/relaxng.h +219 -0
  40. data/ext/nokogiri/include/libxml2/libxml/schemasInternals.h +959 -0
  41. data/ext/nokogiri/include/libxml2/libxml/schematron.h +143 -0
  42. data/ext/nokogiri/include/libxml2/libxml/threads.h +87 -0
  43. data/ext/nokogiri/include/libxml2/libxml/tree.h +1382 -0
  44. data/ext/nokogiri/include/libxml2/libxml/uri.h +106 -0
  45. data/ext/nokogiri/include/libxml2/libxml/valid.h +477 -0
  46. data/ext/nokogiri/include/libxml2/libxml/xinclude.h +136 -0
  47. data/ext/nokogiri/include/libxml2/libxml/xlink.h +189 -0
  48. data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +438 -0
  49. data/ext/nokogiri/include/libxml2/libxml/xmlautomata.h +146 -0
  50. data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +962 -0
  51. data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +146 -0
  52. data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +188 -0
  53. data/ext/nokogiri/include/libxml2/libxml/xmlmodule.h +57 -0
  54. data/ext/nokogiri/include/libxml2/libxml/xmlreader.h +436 -0
  55. data/ext/nokogiri/include/libxml2/libxml/xmlregexp.h +215 -0
  56. data/ext/nokogiri/include/libxml2/libxml/xmlsave.h +102 -0
  57. data/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +249 -0
  58. data/ext/nokogiri/include/libxml2/libxml/xmlschemastypes.h +152 -0
  59. data/ext/nokogiri/include/libxml2/libxml/xmlstring.h +140 -0
  60. data/ext/nokogiri/include/libxml2/libxml/xmlunicode.h +366 -0
  61. data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +347 -0
  62. data/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +489 -0
  63. data/ext/nokogiri/include/libxml2/libxml/xpath.h +579 -0
  64. data/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +633 -0
  65. data/ext/nokogiri/include/libxml2/libxml/xpointer.h +138 -0
  66. data/ext/nokogiri/include/libxslt/attributes.h +39 -0
  67. data/ext/nokogiri/include/libxslt/documents.h +93 -0
  68. data/ext/nokogiri/include/libxslt/extensions.h +262 -0
  69. data/ext/nokogiri/include/libxslt/extra.h +72 -0
  70. data/ext/nokogiri/include/libxslt/functions.h +78 -0
  71. data/ext/nokogiri/include/libxslt/imports.h +75 -0
  72. data/ext/nokogiri/include/libxslt/keys.h +53 -0
  73. data/ext/nokogiri/include/libxslt/namespaces.h +68 -0
  74. data/ext/nokogiri/include/libxslt/numbersInternals.h +73 -0
  75. data/ext/nokogiri/include/libxslt/pattern.h +84 -0
  76. data/ext/nokogiri/include/libxslt/preproc.h +43 -0
  77. data/ext/nokogiri/include/libxslt/security.h +104 -0
  78. data/ext/nokogiri/include/libxslt/templates.h +77 -0
  79. data/ext/nokogiri/include/libxslt/transform.h +207 -0
  80. data/ext/nokogiri/include/libxslt/variables.h +118 -0
  81. data/ext/nokogiri/include/libxslt/xslt.h +110 -0
  82. data/ext/nokogiri/include/libxslt/xsltInternals.h +1995 -0
  83. data/ext/nokogiri/include/libxslt/xsltconfig.h +146 -0
  84. data/ext/nokogiri/include/libxslt/xsltexports.h +64 -0
  85. data/ext/nokogiri/include/libxslt/xsltlocale.h +44 -0
  86. data/ext/nokogiri/include/libxslt/xsltutils.h +343 -0
  87. data/ext/nokogiri/libxml2_polyfill.c +114 -0
  88. data/ext/nokogiri/nokogiri.c +294 -0
  89. data/ext/nokogiri/nokogiri.h +238 -0
  90. data/ext/nokogiri/test_global_handlers.c +40 -0
  91. data/ext/nokogiri/xml_attr.c +103 -0
  92. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  93. data/ext/nokogiri/xml_cdata.c +62 -0
  94. data/ext/nokogiri/xml_comment.c +57 -0
  95. data/ext/nokogiri/xml_document.c +784 -0
  96. data/ext/nokogiri/xml_document_fragment.c +29 -0
  97. data/ext/nokogiri/xml_dtd.c +208 -0
  98. data/ext/nokogiri/xml_element_content.c +131 -0
  99. data/ext/nokogiri/xml_element_decl.c +69 -0
  100. data/ext/nokogiri/xml_encoding_handler.c +112 -0
  101. data/ext/nokogiri/xml_entity_decl.c +112 -0
  102. data/ext/nokogiri/xml_entity_reference.c +50 -0
  103. data/ext/nokogiri/xml_namespace.c +181 -0
  104. data/ext/nokogiri/xml_node.c +2459 -0
  105. data/ext/nokogiri/xml_node_set.c +518 -0
  106. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  107. data/ext/nokogiri/xml_reader.c +777 -0
  108. data/ext/nokogiri/xml_relax_ng.c +149 -0
  109. data/ext/nokogiri/xml_sax_parser.c +403 -0
  110. data/ext/nokogiri/xml_sax_parser_context.c +390 -0
  111. data/ext/nokogiri/xml_sax_push_parser.c +206 -0
  112. data/ext/nokogiri/xml_schema.c +226 -0
  113. data/ext/nokogiri/xml_syntax_error.c +93 -0
  114. data/ext/nokogiri/xml_text.c +59 -0
  115. data/ext/nokogiri/xml_xpath_context.c +502 -0
  116. data/ext/nokogiri/xslt_stylesheet.c +421 -0
  117. data/gumbo-parser/CHANGES.md +63 -0
  118. data/gumbo-parser/Makefile +129 -0
  119. data/gumbo-parser/THANKS +27 -0
  120. data/lib/nokogiri/3.1/nokogiri.so +0 -0
  121. data/lib/nokogiri/3.2/nokogiri.so +0 -0
  122. data/lib/nokogiri/3.3/nokogiri.so +0 -0
  123. data/lib/nokogiri/3.4/nokogiri.so +0 -0
  124. data/lib/nokogiri/class_resolver.rb +67 -0
  125. data/lib/nokogiri/css/node.rb +58 -0
  126. data/lib/nokogiri/css/parser.rb +772 -0
  127. data/lib/nokogiri/css/parser.y +277 -0
  128. data/lib/nokogiri/css/parser_extras.rb +36 -0
  129. data/lib/nokogiri/css/selector_cache.rb +38 -0
  130. data/lib/nokogiri/css/syntax_error.rb +9 -0
  131. data/lib/nokogiri/css/tokenizer.rb +155 -0
  132. data/lib/nokogiri/css/tokenizer.rex +57 -0
  133. data/lib/nokogiri/css/xpath_visitor.rb +375 -0
  134. data/lib/nokogiri/css.rb +132 -0
  135. data/lib/nokogiri/decorators/slop.rb +42 -0
  136. data/lib/nokogiri/encoding_handler.rb +57 -0
  137. data/lib/nokogiri/extension.rb +32 -0
  138. data/lib/nokogiri/gumbo.rb +15 -0
  139. data/lib/nokogiri/html.rb +48 -0
  140. data/lib/nokogiri/html4/builder.rb +37 -0
  141. data/lib/nokogiri/html4/document.rb +235 -0
  142. data/lib/nokogiri/html4/document_fragment.rb +166 -0
  143. data/lib/nokogiri/html4/element_description.rb +25 -0
  144. data/lib/nokogiri/html4/element_description_defaults.rb +2040 -0
  145. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  146. data/lib/nokogiri/html4/entity_lookup.rb +15 -0
  147. data/lib/nokogiri/html4/sax/parser.rb +48 -0
  148. data/lib/nokogiri/html4/sax/parser_context.rb +15 -0
  149. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  150. data/lib/nokogiri/html4.rb +42 -0
  151. data/lib/nokogiri/html5/builder.rb +40 -0
  152. data/lib/nokogiri/html5/document.rb +199 -0
  153. data/lib/nokogiri/html5/document_fragment.rb +200 -0
  154. data/lib/nokogiri/html5/node.rb +103 -0
  155. data/lib/nokogiri/html5.rb +368 -0
  156. data/lib/nokogiri/jruby/dependencies.rb +3 -0
  157. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  158. data/lib/nokogiri/syntax_error.rb +6 -0
  159. data/lib/nokogiri/version/constant.rb +6 -0
  160. data/lib/nokogiri/version/info.rb +224 -0
  161. data/lib/nokogiri/version.rb +4 -0
  162. data/lib/nokogiri/xml/attr.rb +66 -0
  163. data/lib/nokogiri/xml/attribute_decl.rb +22 -0
  164. data/lib/nokogiri/xml/builder.rb +494 -0
  165. data/lib/nokogiri/xml/cdata.rb +13 -0
  166. data/lib/nokogiri/xml/character_data.rb +9 -0
  167. data/lib/nokogiri/xml/document.rb +514 -0
  168. data/lib/nokogiri/xml/document_fragment.rb +276 -0
  169. data/lib/nokogiri/xml/dtd.rb +34 -0
  170. data/lib/nokogiri/xml/element_content.rb +46 -0
  171. data/lib/nokogiri/xml/element_decl.rb +17 -0
  172. data/lib/nokogiri/xml/entity_decl.rb +23 -0
  173. data/lib/nokogiri/xml/entity_reference.rb +20 -0
  174. data/lib/nokogiri/xml/namespace.rb +57 -0
  175. data/lib/nokogiri/xml/node/save_options.rb +76 -0
  176. data/lib/nokogiri/xml/node.rb +1650 -0
  177. data/lib/nokogiri/xml/node_set.rb +449 -0
  178. data/lib/nokogiri/xml/notation.rb +19 -0
  179. data/lib/nokogiri/xml/parse_options.rb +213 -0
  180. data/lib/nokogiri/xml/pp/character_data.rb +21 -0
  181. data/lib/nokogiri/xml/pp/node.rb +73 -0
  182. data/lib/nokogiri/xml/pp.rb +4 -0
  183. data/lib/nokogiri/xml/processing_instruction.rb +11 -0
  184. data/lib/nokogiri/xml/reader.rb +139 -0
  185. data/lib/nokogiri/xml/relax_ng.rb +75 -0
  186. data/lib/nokogiri/xml/sax/document.rb +258 -0
  187. data/lib/nokogiri/xml/sax/parser.rb +199 -0
  188. data/lib/nokogiri/xml/sax/parser_context.rb +129 -0
  189. data/lib/nokogiri/xml/sax/push_parser.rb +64 -0
  190. data/lib/nokogiri/xml/sax.rb +54 -0
  191. data/lib/nokogiri/xml/schema.rb +140 -0
  192. data/lib/nokogiri/xml/searchable.rb +297 -0
  193. data/lib/nokogiri/xml/syntax_error.rb +94 -0
  194. data/lib/nokogiri/xml/text.rb +11 -0
  195. data/lib/nokogiri/xml/xpath/syntax_error.rb +13 -0
  196. data/lib/nokogiri/xml/xpath.rb +21 -0
  197. data/lib/nokogiri/xml/xpath_context.rb +49 -0
  198. data/lib/nokogiri/xml.rb +65 -0
  199. data/lib/nokogiri/xslt/stylesheet.rb +49 -0
  200. data/lib/nokogiri/xslt.rb +129 -0
  201. data/lib/nokogiri.rb +128 -0
  202. data/lib/xsd/xmlparser/nokogiri.rb +105 -0
  203. metadata +324 -0
@@ -0,0 +1,421 @@
1
+ #include <nokogiri.h>
2
+
3
+ VALUE cNokogiriXsltStylesheet;
4
+
5
+ static void
6
+ mark(void *data)
7
+ {
8
+ nokogiriXsltStylesheetTuple *wrapper = (nokogiriXsltStylesheetTuple *)data;
9
+ rb_gc_mark(wrapper->func_instances);
10
+ }
11
+
12
+ static void
13
+ dealloc(void *data)
14
+ {
15
+ nokogiriXsltStylesheetTuple *wrapper = (nokogiriXsltStylesheetTuple *)data;
16
+ xsltStylesheetPtr doc = wrapper->ss;
17
+ xsltFreeStylesheet(doc);
18
+ ruby_xfree(wrapper);
19
+ }
20
+
21
+ static const rb_data_type_t nokogiri_xslt_stylesheet_tuple_type = {
22
+ .wrap_struct_name = "nokogiriXsltStylesheetTuple",
23
+ .function = {
24
+ .dmark = mark,
25
+ .dfree = dealloc,
26
+ },
27
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY
28
+ };
29
+
30
+ PRINTFLIKE_DECL(2, 3)
31
+ static void
32
+ xslt_generic_error_handler(void *ctx, const char *msg, ...)
33
+ {
34
+ VALUE message;
35
+
36
+ #ifdef TRUFFLERUBY_NOKOGIRI_SYSTEM_LIBRARIES
37
+ /* It is not currently possible to pass var args from native
38
+ functions to sulong, so we work around the issue here. */
39
+ message = rb_sprintf("xslt_generic_error_handler: %s", msg);
40
+ #else
41
+ va_list args;
42
+ va_start(args, msg);
43
+ message = rb_vsprintf(msg, args);
44
+ va_end(args);
45
+ #endif
46
+
47
+ rb_str_concat((VALUE)ctx, message);
48
+ }
49
+
50
+ VALUE
51
+ Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
52
+ {
53
+ VALUE self;
54
+ nokogiriXsltStylesheetTuple *wrapper;
55
+
56
+ self = TypedData_Make_Struct(
57
+ cNokogiriXsltStylesheet,
58
+ nokogiriXsltStylesheetTuple,
59
+ &nokogiri_xslt_stylesheet_tuple_type,
60
+ wrapper
61
+ );
62
+
63
+ ss->_private = (void *)self;
64
+ wrapper->ss = ss;
65
+ wrapper->func_instances = rb_ary_new();
66
+
67
+ return self;
68
+ }
69
+
70
+ /*
71
+ * call-seq:
72
+ * parse_stylesheet_doc(document)
73
+ *
74
+ * Parse an XSLT::Stylesheet from +document+.
75
+ *
76
+ * [Parameters]
77
+ * - +document+ (Nokogiri::XML::Document) the document to be parsed.
78
+ *
79
+ * [Returns] Nokogiri::XSLT::Stylesheet
80
+ */
81
+ static VALUE
82
+ parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
83
+ {
84
+ xmlDocPtr xml, xml_cpy;
85
+ VALUE errstr, exception;
86
+ xsltStylesheetPtr ss ;
87
+
88
+ xml = noko_xml_document_unwrap(xmldocobj);
89
+
90
+ errstr = rb_str_new(0, 0);
91
+ xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
92
+
93
+ xml_cpy = xmlCopyDoc(xml, 1); /* 1 => recursive */
94
+ ss = xsltParseStylesheetDoc(xml_cpy);
95
+
96
+ xsltSetGenericErrorFunc(NULL, NULL);
97
+
98
+ if (!ss) {
99
+ xmlFreeDoc(xml_cpy);
100
+ exception = rb_exc_new3(rb_eRuntimeError, errstr);
101
+ rb_exc_raise(exception);
102
+ }
103
+
104
+ return Nokogiri_wrap_xslt_stylesheet(ss);
105
+ }
106
+
107
+
108
+ /*
109
+ * call-seq:
110
+ * serialize(document)
111
+ *
112
+ * Serialize +document+ to an xml string, as specified by the +method+ parameter in the Stylesheet.
113
+ */
114
+ static VALUE
115
+ rb_xslt_stylesheet_serialize(VALUE self, VALUE xmlobj)
116
+ {
117
+ xmlDocPtr xml ;
118
+ nokogiriXsltStylesheetTuple *wrapper;
119
+ xmlChar *doc_ptr ;
120
+ int doc_len ;
121
+ VALUE rval ;
122
+
123
+ xml = noko_xml_document_unwrap(xmlobj);
124
+ TypedData_Get_Struct(
125
+ self,
126
+ nokogiriXsltStylesheetTuple,
127
+ &nokogiri_xslt_stylesheet_tuple_type,
128
+ wrapper
129
+ );
130
+ xsltSaveResultToString(&doc_ptr, &doc_len, xml, wrapper->ss);
131
+ rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
132
+ xmlFree(doc_ptr);
133
+ return rval ;
134
+ }
135
+
136
+ /*
137
+ * call-seq:
138
+ * transform(document)
139
+ * transform(document, params = {})
140
+ *
141
+ * Transform an XML::Document as defined by an XSLT::Stylesheet.
142
+ *
143
+ * [Parameters]
144
+ * - +document+ (Nokogiri::XML::Document) the document to be transformed.
145
+ * - +params+ (Hash, Array) strings used as XSLT parameters.
146
+ *
147
+ * [Returns] Nokogiri::XML::Document
148
+ *
149
+ * *Example* of basic transformation:
150
+ *
151
+ * xslt = <<~XSLT
152
+ * <xsl:stylesheet version="1.0"
153
+ * xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
154
+ *
155
+ * <xsl:param name="title"/>
156
+ *
157
+ * <xsl:template match="/">
158
+ * <html>
159
+ * <body>
160
+ * <h1><xsl:value-of select="$title"/></h1>
161
+ * <ol>
162
+ * <xsl:for-each select="staff/employee">
163
+ * <li><xsl:value-of select="employeeId"></li>
164
+ * </xsl:for-each>
165
+ * </ol>
166
+ * </body>
167
+ * </html>
168
+ * </xsl:stylesheet>
169
+ * XSLT
170
+ *
171
+ * xml = <<~XML
172
+ * <?xml version="1.0"?>
173
+ * <staff>
174
+ * <employee>
175
+ * <employeeId>EMP0001</employeeId>
176
+ * <position>Accountant</position>
177
+ * </employee>
178
+ * <employee>
179
+ * <employeeId>EMP0002</employeeId>
180
+ * <position>Developer</position>
181
+ * </employee>
182
+ * </staff>
183
+ * XML
184
+ *
185
+ * doc = Nokogiri::XML::Document.parse(xml)
186
+ * stylesheet = Nokogiri::XSLT.parse(xslt)
187
+ *
188
+ * ⚠ Note that the +h1+ element is empty because no param has been provided!
189
+ *
190
+ * stylesheet.transform(doc).to_xml
191
+ * # => "<html><body>\n" +
192
+ * # "<h1></h1>\n" +
193
+ * # "<ol>\n" +
194
+ * # "<li>EMP0001</li>\n" +
195
+ * # "<li>EMP0002</li>\n" +
196
+ * # "</ol>\n" +
197
+ * # "</body></html>\n"
198
+ *
199
+ * *Example* of using an input parameter hash:
200
+ *
201
+ * ⚠ The title is populated, but note how we need to quote-escape the value.
202
+ *
203
+ * stylesheet.transform(doc, { "title" => "'Employee List'" }).to_xml
204
+ * # => "<html><body>\n" +
205
+ * # "<h1>Employee List</h1>\n" +
206
+ * # "<ol>\n" +
207
+ * # "<li>EMP0001</li>\n" +
208
+ * # "<li>EMP0002</li>\n" +
209
+ * # "</ol>\n" +
210
+ * # "</body></html>\n"
211
+ *
212
+ * *Example* using the XSLT.quote_params helper method to safely quote-escape strings:
213
+ *
214
+ * stylesheet.transform(doc, Nokogiri::XSLT.quote_params({ "title" => "Aaron's List" })).to_xml
215
+ * # => "<html><body>\n" +
216
+ * # "<h1>Aaron's List</h1>\n" +
217
+ * # "<ol>\n" +
218
+ * # "<li>EMP0001</li>\n" +
219
+ * # "<li>EMP0002</li>\n" +
220
+ * # "</ol>\n" +
221
+ * # "</body></html>\n"
222
+ *
223
+ * *Example* using an array of XSLT parameters
224
+ *
225
+ * You can also use an array if you want to.
226
+ *
227
+ * stylesheet.transform(doc, ["title", "'Employee List'"]).to_xml
228
+ * # => "<html><body>\n" +
229
+ * # "<h1>Employee List</h1>\n" +
230
+ * # "<ol>\n" +
231
+ * # "<li>EMP0001</li>\n" +
232
+ * # "<li>EMP0002</li>\n" +
233
+ * # "</ol>\n" +
234
+ * # "</body></html>\n"
235
+ *
236
+ * Or pass an array to XSLT.quote_params:
237
+ *
238
+ * stylesheet.transform(doc, Nokogiri::XSLT.quote_params(["title", "Aaron's List"])).to_xml
239
+ * # => "<html><body>\n" +
240
+ * # "<h1>Aaron's List</h1>\n" +
241
+ * # "<ol>\n" +
242
+ * # "<li>EMP0001</li>\n" +
243
+ * # "<li>EMP0002</li>\n" +
244
+ * # "</ol>\n" +
245
+ * # "</body></html>\n"
246
+ *
247
+ * See: Nokogiri::XSLT.quote_params
248
+ */
249
+ static VALUE
250
+ rb_xslt_stylesheet_transform(int argc, VALUE *argv, VALUE self)
251
+ {
252
+ VALUE rb_document, rb_param, rb_error_str;
253
+ xmlDocPtr c_document ;
254
+ xmlDocPtr c_result_document ;
255
+ nokogiriXsltStylesheetTuple *wrapper;
256
+ const char **params ;
257
+ long param_len, j ;
258
+ int parse_error_occurred ;
259
+ int defensive_copy_p = 0;
260
+
261
+ rb_scan_args(argc, argv, "11", &rb_document, &rb_param);
262
+ if (NIL_P(rb_param)) { rb_param = rb_ary_new2(0L) ; }
263
+ if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlDocument)) {
264
+ rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");
265
+ }
266
+
267
+ /* handle hashes as arguments. */
268
+ if (T_HASH == TYPE(rb_param)) {
269
+ rb_param = rb_funcall(rb_param, rb_intern("to_a"), 0);
270
+ rb_param = rb_funcall(rb_param, rb_intern("flatten"), 0);
271
+ }
272
+
273
+ Check_Type(rb_param, T_ARRAY);
274
+
275
+ c_document = noko_xml_document_unwrap(rb_document);
276
+ TypedData_Get_Struct(self, nokogiriXsltStylesheetTuple, &nokogiri_xslt_stylesheet_tuple_type, wrapper);
277
+
278
+ param_len = RARRAY_LEN(rb_param);
279
+ params = ruby_xcalloc((size_t)param_len + 1, sizeof(char *));
280
+ for (j = 0 ; j < param_len ; j++) {
281
+ VALUE entry = rb_ary_entry(rb_param, j);
282
+ const char *ptr = StringValueCStr(entry);
283
+ params[j] = ptr;
284
+ }
285
+ params[param_len] = 0 ;
286
+
287
+ xsltTransformContextPtr c_transform_context = xsltNewTransformContext(wrapper->ss, c_document);
288
+ if (xsltNeedElemSpaceHandling(c_transform_context) &&
289
+ noko_xml_document_has_wrapped_blank_nodes_p(c_document)) {
290
+ // see https://github.com/sparklemotion/nokogiri/issues/2800
291
+ c_document = xmlCopyDoc(c_document, 1);
292
+ defensive_copy_p = 1;
293
+ }
294
+ xsltFreeTransformContext(c_transform_context);
295
+
296
+ rb_error_str = rb_str_new(0, 0);
297
+ xsltSetGenericErrorFunc((void *)rb_error_str, xslt_generic_error_handler);
298
+ xmlSetGenericErrorFunc((void *)rb_error_str, xslt_generic_error_handler);
299
+
300
+ c_result_document = xsltApplyStylesheet(wrapper->ss, c_document, params);
301
+
302
+ ruby_xfree(params);
303
+ if (defensive_copy_p) {
304
+ xmlFreeDoc(c_document);
305
+ c_document = NULL;
306
+ }
307
+
308
+ xsltSetGenericErrorFunc(NULL, NULL);
309
+ xmlSetGenericErrorFunc(NULL, NULL);
310
+
311
+ parse_error_occurred = (Qfalse == rb_funcall(rb_error_str, rb_intern("empty?"), 0));
312
+
313
+ if (parse_error_occurred) {
314
+ rb_exc_raise(rb_exc_new3(rb_eRuntimeError, rb_error_str));
315
+ }
316
+
317
+ return noko_xml_document_wrap((VALUE)0, c_result_document) ;
318
+ }
319
+
320
+ static void
321
+ method_caller(xmlXPathParserContextPtr ctxt, int nargs)
322
+ {
323
+ VALUE handler;
324
+ const char *function_name;
325
+ xsltTransformContextPtr transform;
326
+ const xmlChar *functionURI;
327
+
328
+ transform = xsltXPathGetTransformContext(ctxt);
329
+ functionURI = ctxt->context->functionURI;
330
+ handler = (VALUE)xsltGetExtData(transform, functionURI);
331
+ function_name = (const char *)(ctxt->context->function);
332
+
333
+ Nokogiri_marshal_xpath_funcall_and_return_values(
334
+ ctxt,
335
+ nargs,
336
+ handler,
337
+ (const char *)function_name
338
+ );
339
+ }
340
+
341
+ static void *
342
+ initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
343
+ {
344
+ VALUE modules = rb_iv_get(mNokogiriXslt, "@modules");
345
+ VALUE obj = rb_hash_aref(modules, rb_str_new2((const char *)uri));
346
+ VALUE args = { Qfalse };
347
+ VALUE methods = rb_funcall(obj, rb_intern("instance_methods"), 1, args);
348
+ VALUE inst;
349
+ nokogiriXsltStylesheetTuple *wrapper;
350
+ int i;
351
+
352
+ for (i = 0; i < RARRAY_LEN(methods); i++) {
353
+ VALUE method_name = rb_obj_as_string(rb_ary_entry(methods, i));
354
+ xsltRegisterExtFunction(
355
+ ctxt,
356
+ (unsigned char *)StringValueCStr(method_name),
357
+ uri,
358
+ method_caller
359
+ );
360
+ }
361
+
362
+ TypedData_Get_Struct(
363
+ (VALUE)ctxt->style->_private,
364
+ nokogiriXsltStylesheetTuple,
365
+ &nokogiri_xslt_stylesheet_tuple_type,
366
+ wrapper
367
+ );
368
+ inst = rb_class_new_instance(0, NULL, obj);
369
+ rb_ary_push(wrapper->func_instances, inst);
370
+
371
+ return (void *)inst;
372
+ }
373
+
374
+ static void
375
+ shutdownFunc(xsltTransformContextPtr ctxt,
376
+ const xmlChar *uri, void *data)
377
+ {
378
+ nokogiriXsltStylesheetTuple *wrapper;
379
+
380
+ TypedData_Get_Struct(
381
+ (VALUE)ctxt->style->_private,
382
+ nokogiriXsltStylesheetTuple,
383
+ &nokogiri_xslt_stylesheet_tuple_type,
384
+ wrapper
385
+ );
386
+
387
+ rb_ary_clear(wrapper->func_instances);
388
+ }
389
+
390
+ /* docstring is in lib/nokogiri/xslt.rb */
391
+ static VALUE
392
+ rb_xslt_s_register(VALUE self, VALUE uri, VALUE obj)
393
+ {
394
+ VALUE modules = rb_iv_get(self, "@modules");
395
+ if (NIL_P(modules)) {
396
+ rb_raise(rb_eRuntimeError, "internal error: @modules not set");
397
+ }
398
+
399
+ rb_hash_aset(modules, uri, obj);
400
+ xsltRegisterExtModule(
401
+ (unsigned char *)StringValueCStr(uri),
402
+ initFunc,
403
+ shutdownFunc
404
+ );
405
+ return self;
406
+ }
407
+
408
+ void
409
+ noko_init_xslt_stylesheet(void)
410
+ {
411
+ rb_define_singleton_method(mNokogiriXslt, "register", rb_xslt_s_register, 2);
412
+ rb_iv_set(mNokogiriXslt, "@modules", rb_hash_new());
413
+
414
+ cNokogiriXsltStylesheet = rb_define_class_under(mNokogiriXslt, "Stylesheet", rb_cObject);
415
+
416
+ rb_undef_alloc_func(cNokogiriXsltStylesheet);
417
+
418
+ rb_define_singleton_method(cNokogiriXsltStylesheet, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
419
+ rb_define_method(cNokogiriXsltStylesheet, "serialize", rb_xslt_stylesheet_serialize, 1);
420
+ rb_define_method(cNokogiriXsltStylesheet, "transform", rb_xslt_stylesheet_transform, -1);
421
+ }
@@ -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.
@@ -0,0 +1,129 @@
1
+ .PHONY: all clean check coverage
2
+
3
+ gumbo_objs := $(patsubst %.c,build/%.o,$(wildcard src/*.c))
4
+ test_objs := $(patsubst %.cc,build/%.o,$(wildcard test/*.cc))
5
+ gtest_lib := googletest/make/gtest_main.a
6
+
7
+ # make SANITIZEFLAGS='-fsanitize=undefined -fsanitize=address'
8
+ SANITIZEFLAGS :=
9
+ CPPFLAGS := -Isrc
10
+ CFLAGS := -std=c99 -Os -Wall
11
+ CXXFLAGS := -isystem googletest/include -std=c++11 -Os -Wall
12
+ LDFLAGS := -pthread
13
+
14
+ all: check
15
+
16
+ oss-fuzz:
17
+ ./fuzzer/build-ossfuzz.sh
18
+
19
+ fuzzers: fuzzer-normal fuzzer-asan fuzzer-ubsan fuzzer-msan
20
+
21
+ fuzzer-normal:
22
+ ./fuzzer/build.sh
23
+
24
+ fuzzer-asan:
25
+ SANITIZER=asan ./fuzzer/build.sh
26
+
27
+ fuzzer-ubsan:
28
+ SANITIZER=ubsan ./fuzzer/build.sh
29
+
30
+ fuzzer-msan:
31
+ SANITIZER=msan ./fuzzer/build.sh
32
+
33
+ # don't try to regenerate ragel or gperf files in CI, that should be a development-only action and
34
+ # the generated files should be committed to SCM
35
+ ifneq ($(CI),true)
36
+ src/foreign_attrs.c: src/foreign_attrs.gperf
37
+ gperf -m100 -n $< | ./gperf-filter.sed > $@
38
+
39
+ src/%.c: src/%.gperf
40
+ gperf -m100 $< | ./gperf-filter.sed > $@
41
+
42
+ src/%.c: src/%.rl
43
+ ragel -F1 -o $@ $<
44
+ endif
45
+
46
+ build/src:
47
+ mkdir -p $@
48
+
49
+ build/test:
50
+ mkdir -p $@
51
+
52
+ build/src/%.o: src/%.c build/src/flags | build/src
53
+ $(CC) -MMD $(CPPFLAGS) $(CFLAGS) $(SANITIZEFLAGS) -c -o $@ $<
54
+
55
+ build/test/%.o: test/%.cc build/test/flags | build/test
56
+ $(CXX) -MMD $(CPPFLAGS) $(CXXFLAGS) $(SANITIZEFLAGS) -c -o $@ $<
57
+
58
+ build/run_tests: $(gumbo_objs) $(test_objs) $(gtest_lib)
59
+ $(CXX) -o $@ $+ $(LDFLAGS) $(SANITIZEFLAGS)
60
+
61
+ check: build/run_tests
62
+ ./build/run_tests
63
+
64
+ coverage:
65
+ $(RM) build/{src,test}/*.gcda
66
+ $(RM) build/*.info
67
+ $(MAKE) CPPFLAGS='-Isrc -DNDEBUG=1' \
68
+ CFLAGS='-std=c99 --coverage -g -O0' \
69
+ CXXFLAGS='-isystem googletest/include -std=c++11 --coverage -g -O0' \
70
+ LDFLAGS='--coverage' \
71
+ build/run_tests
72
+ lcov --no-external \
73
+ --initial \
74
+ --capture \
75
+ --base-directory . \
76
+ --directory build \
77
+ --output-file build/coverage-pre.info
78
+ awk -F '[:,]' \
79
+ '/^SF:/ { delete defs } /^FN:/ { defs[$$2]=1 } /^DA:/ { if ($$3 == 0 && $$2 in defs) next } { print }' \
80
+ build/coverage-pre.info > build/coverage-initial.info
81
+ ./build/run_tests
82
+ lcov --no-external \
83
+ --capture \
84
+ --base-directory . \
85
+ --directory build \
86
+ --rc lcov_branch_coverage=1 \
87
+ --output-file build/coverage-test.info
88
+ lcov --add-tracefile build/coverage-initial.info \
89
+ --add-tracefile build/coverage-test.info \
90
+ --rc lcov_branch_coverage=1 \
91
+ --output-file build/coverage.info
92
+ lcov --remove build/coverage.info '$(CURDIR)/googletest/*' \
93
+ --rc lcov_branch_coverage=1 \
94
+ --output-file build/coverage.info
95
+ genhtml --branch-coverage \
96
+ --output-directory build/coverage \
97
+ build/coverage.info
98
+
99
+ clean:
100
+ $(RM) -r build
101
+ $(RM) -r fuzzer/build fuzzer/src-* fuzzer/gumbo_corpus
102
+
103
+ build/src/flags: | build/src
104
+ @echo 'old_CC := $(CC)' > $@
105
+ @echo 'old_CPPFLAGS := $(CPPFLAGS)' >> $@
106
+ @echo 'old_CFLAGS := $(CFLAGS)' >>$@
107
+ @echo 'old_SANITIZEFLAGS := $(SANITIZEFLAGS)' >> $@
108
+ @echo 'old_LDFLAGS := $(LDFLAGS)' >> $@
109
+
110
+ build/test/flags: | build/test
111
+ @echo 'old_CXX := $(CXX)' > $@
112
+ @echo 'old_CPPFLAGS := $(CPPFLAGS)' >> $@
113
+ @echo 'old_CXXFLAGS := $(CXXFLAGS)' >> $@
114
+ @echo 'old_SANITIZEFLAGS := $(SANITIZEFLAGS)' >> $@
115
+ @echo 'old_LDFLAGS := $(LDFLAGS)' >> $@
116
+
117
+ ifeq (,$(filter clean coverage,$(MAKECMDGOALS)))
118
+ # Ensure that the flags are up to date.
119
+ -include build/src/flags build/test/flags
120
+ ifneq ($(old_CC) | $(old_CPPFLAGS) | $(old_CFLAGS) | $(old_SANITIZEFLAGS) | $(old_LDFLAGS),$(CC) | $(CPPFLAGS) | $(CFLAGS) | $(SANITIZEFLAGS) | $(LDFLAGS))
121
+ .PHONY: build/src/flags
122
+ endif
123
+ ifneq ($(old_CXX) | $(old_CPPFLAGS) | $(old_CXXFLAGS) | $(old_SANITIZEFLAGS) | $(old_LDFLAGS),$(CXX) | $(CPPFLAGS) | $(CXXFLAGS) | $(SANITIZEFLAGS) | $(LDFLAGS))
124
+ .PHONY: build/test/flags
125
+ endif
126
+
127
+ # Include dependencies.
128
+ -include $(test_objs:.o=.d) $(gumbo_objs:.o=.d)
129
+ endif
@@ -0,0 +1,27 @@
1
+ Gumbo HTML parser THANKS file
2
+
3
+ Gumbo was originally written by Jonathan Tang, but many people helped out through suggestions, question-answering, code reviews, bugfixes, and organizational support. Here is a list of these people. Help me keep it complete and exempt of errors.
4
+
5
+ Adam Barth
6
+ Adam Roben
7
+ Ben Noordhuis
8
+ Bowen Han
9
+ Constantinos Michael
10
+ Craig Barnes
11
+ Geoffrey Sneddon
12
+ Ian Hickson
13
+ Jack Deng
14
+ Joel Low
15
+ Jonathan Shneier
16
+ Kevin Hendricks
17
+ Mason Tang
18
+ Maxim Zakharov
19
+ Michal Zalewski
20
+ Neal Norwitz
21
+ Othar Hansson
22
+ Ryan Grove
23
+ Stefan Haustein
24
+ Steffen Meschkat
25
+ Steven Kabbes
26
+ Thiago Farina
27
+ Vicent Marti
Binary file
Binary file
Binary file
Binary file