Nokogiri_precompiled_aarch64_dedshit 1.14.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +44 -0
- data/LICENSE-DEPENDENCIES.md +2224 -0
- data/LICENSE.md +9 -0
- data/README.md +287 -0
- data/bin/nokogiri +131 -0
- data/dependencies.yml +41 -0
- data/ext/java/nokogiri/Html4Document.java +157 -0
- data/ext/java/nokogiri/Html4ElementDescription.java +133 -0
- data/ext/java/nokogiri/Html4EntityLookup.java +63 -0
- data/ext/java/nokogiri/Html4SaxParserContext.java +289 -0
- data/ext/java/nokogiri/Html4SaxPushParser.java +213 -0
- data/ext/java/nokogiri/NokogiriService.java +613 -0
- data/ext/java/nokogiri/XmlAttr.java +154 -0
- data/ext/java/nokogiri/XmlAttributeDecl.java +119 -0
- data/ext/java/nokogiri/XmlCdata.java +60 -0
- data/ext/java/nokogiri/XmlComment.java +77 -0
- data/ext/java/nokogiri/XmlDocument.java +705 -0
- data/ext/java/nokogiri/XmlDocumentFragment.java +163 -0
- data/ext/java/nokogiri/XmlDtd.java +516 -0
- data/ext/java/nokogiri/XmlElement.java +44 -0
- data/ext/java/nokogiri/XmlElementContent.java +412 -0
- data/ext/java/nokogiri/XmlElementDecl.java +148 -0
- data/ext/java/nokogiri/XmlEntityDecl.java +151 -0
- data/ext/java/nokogiri/XmlEntityReference.java +79 -0
- data/ext/java/nokogiri/XmlNamespace.java +193 -0
- data/ext/java/nokogiri/XmlNode.java +1938 -0
- data/ext/java/nokogiri/XmlNodeSet.java +463 -0
- data/ext/java/nokogiri/XmlProcessingInstruction.java +79 -0
- data/ext/java/nokogiri/XmlReader.java +615 -0
- data/ext/java/nokogiri/XmlRelaxng.java +133 -0
- data/ext/java/nokogiri/XmlSaxParserContext.java +329 -0
- data/ext/java/nokogiri/XmlSaxPushParser.java +288 -0
- data/ext/java/nokogiri/XmlSchema.java +423 -0
- data/ext/java/nokogiri/XmlSyntaxError.java +137 -0
- data/ext/java/nokogiri/XmlText.java +90 -0
- data/ext/java/nokogiri/XmlXpathContext.java +305 -0
- data/ext/java/nokogiri/XsltStylesheet.java +368 -0
- data/ext/java/nokogiri/internals/ClosedStreamException.java +13 -0
- data/ext/java/nokogiri/internals/HtmlDomParserContext.java +252 -0
- data/ext/java/nokogiri/internals/IgnoreSchemaErrorsErrorHandler.java +27 -0
- data/ext/java/nokogiri/internals/NokogiriBlockingQueueInputStream.java +178 -0
- data/ext/java/nokogiri/internals/NokogiriDomParser.java +99 -0
- data/ext/java/nokogiri/internals/NokogiriEntityResolver.java +140 -0
- data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +65 -0
- data/ext/java/nokogiri/internals/NokogiriHandler.java +339 -0
- data/ext/java/nokogiri/internals/NokogiriHelpers.java +817 -0
- data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +228 -0
- data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +110 -0
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +86 -0
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +107 -0
- data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +62 -0
- data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +165 -0
- data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +50 -0
- data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +37 -0
- data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +70 -0
- data/ext/java/nokogiri/internals/ParserContext.java +262 -0
- data/ext/java/nokogiri/internals/ReaderNode.java +564 -0
- data/ext/java/nokogiri/internals/SaveContextVisitor.java +865 -0
- data/ext/java/nokogiri/internals/SchemaErrorHandler.java +50 -0
- data/ext/java/nokogiri/internals/XalanDTMManagerPatch.java +174 -0
- data/ext/java/nokogiri/internals/XmlDeclHandler.java +11 -0
- data/ext/java/nokogiri/internals/XmlDomParserContext.java +265 -0
- data/ext/java/nokogiri/internals/XmlSaxParser.java +40 -0
- data/ext/java/nokogiri/internals/c14n/AttrCompare.java +122 -0
- data/ext/java/nokogiri/internals/c14n/C14nHelper.java +178 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalFilter.java +43 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalizationException.java +106 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer.java +278 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11.java +664 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11_OmitComments.java +45 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11_WithComments.java +45 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315.java +388 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315Excl.java +308 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclOmitComments.java +47 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclWithComments.java +51 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315OmitComments.java +51 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315WithComments.java +50 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalizerBase.java +660 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalizerPhysical.java +194 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalizerSpi.java +77 -0
- data/ext/java/nokogiri/internals/c14n/Constants.java +45 -0
- data/ext/java/nokogiri/internals/c14n/ElementProxy.java +325 -0
- data/ext/java/nokogiri/internals/c14n/HelperNodeList.java +106 -0
- data/ext/java/nokogiri/internals/c14n/IgnoreAllErrorHandler.java +86 -0
- data/ext/java/nokogiri/internals/c14n/InclusiveNamespaces.java +181 -0
- data/ext/java/nokogiri/internals/c14n/InvalidCanonicalizerException.java +87 -0
- data/ext/java/nokogiri/internals/c14n/NameSpaceSymbTable.java +452 -0
- data/ext/java/nokogiri/internals/c14n/NodeFilter.java +52 -0
- data/ext/java/nokogiri/internals/c14n/UtfHelpper.java +190 -0
- data/ext/java/nokogiri/internals/c14n/XMLUtils.java +540 -0
- data/ext/java/nokogiri/internals/dom2dtm/DOM2DTM.java +1712 -0
- data/ext/java/nokogiri/internals/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java +737 -0
- data/ext/nokogiri/depend +38 -0
- data/ext/nokogiri/extconf.rb +1086 -0
- data/ext/nokogiri/gumbo.c +594 -0
- data/ext/nokogiri/html4_document.c +167 -0
- data/ext/nokogiri/html4_element_description.c +294 -0
- data/ext/nokogiri/html4_entity_lookup.c +37 -0
- data/ext/nokogiri/html4_sax_parser_context.c +116 -0
- data/ext/nokogiri/html4_sax_push_parser.c +95 -0
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +265 -0
- data/ext/nokogiri/nokogiri.h +235 -0
- data/ext/nokogiri/test_global_handlers.c +42 -0
- data/ext/nokogiri/xml_attr.c +103 -0
- data/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/ext/nokogiri/xml_cdata.c +57 -0
- data/ext/nokogiri/xml_comment.c +62 -0
- data/ext/nokogiri/xml_document.c +689 -0
- data/ext/nokogiri/xml_document_fragment.c +44 -0
- data/ext/nokogiri/xml_dtd.c +210 -0
- data/ext/nokogiri/xml_element_content.c +128 -0
- data/ext/nokogiri/xml_element_decl.c +69 -0
- data/ext/nokogiri/xml_encoding_handler.c +104 -0
- data/ext/nokogiri/xml_entity_decl.c +112 -0
- data/ext/nokogiri/xml_entity_reference.c +50 -0
- data/ext/nokogiri/xml_namespace.c +186 -0
- data/ext/nokogiri/xml_node.c +2426 -0
- data/ext/nokogiri/xml_node_set.c +496 -0
- data/ext/nokogiri/xml_processing_instruction.c +54 -0
- data/ext/nokogiri/xml_reader.c +794 -0
- data/ext/nokogiri/xml_relax_ng.c +164 -0
- data/ext/nokogiri/xml_sax_parser.c +316 -0
- data/ext/nokogiri/xml_sax_parser_context.c +283 -0
- data/ext/nokogiri/xml_sax_push_parser.c +166 -0
- data/ext/nokogiri/xml_schema.c +260 -0
- data/ext/nokogiri/xml_syntax_error.c +85 -0
- data/ext/nokogiri/xml_text.c +48 -0
- data/ext/nokogiri/xml_xpath_context.c +415 -0
- data/ext/nokogiri/xslt_stylesheet.c +363 -0
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +111 -0
- data/gumbo-parser/THANKS +27 -0
- data/gumbo-parser/src/Makefile +34 -0
- data/gumbo-parser/src/README.md +41 -0
- data/gumbo-parser/src/ascii.c +75 -0
- data/gumbo-parser/src/ascii.h +115 -0
- data/gumbo-parser/src/attribute.c +42 -0
- data/gumbo-parser/src/attribute.h +17 -0
- data/gumbo-parser/src/char_ref.c +22225 -0
- data/gumbo-parser/src/char_ref.h +29 -0
- data/gumbo-parser/src/char_ref.rl +2154 -0
- data/gumbo-parser/src/error.c +626 -0
- data/gumbo-parser/src/error.h +148 -0
- data/gumbo-parser/src/foreign_attrs.c +104 -0
- data/gumbo-parser/src/foreign_attrs.gperf +27 -0
- data/gumbo-parser/src/insertion_mode.h +33 -0
- data/gumbo-parser/src/macros.h +91 -0
- data/gumbo-parser/src/nokogiri_gumbo.h +944 -0
- data/gumbo-parser/src/parser.c +4878 -0
- data/gumbo-parser/src/parser.h +41 -0
- data/gumbo-parser/src/replacement.h +33 -0
- data/gumbo-parser/src/string_buffer.c +103 -0
- data/gumbo-parser/src/string_buffer.h +68 -0
- data/gumbo-parser/src/string_piece.c +48 -0
- data/gumbo-parser/src/svg_attrs.c +174 -0
- data/gumbo-parser/src/svg_attrs.gperf +77 -0
- data/gumbo-parser/src/svg_tags.c +137 -0
- data/gumbo-parser/src/svg_tags.gperf +55 -0
- data/gumbo-parser/src/tag.c +223 -0
- data/gumbo-parser/src/tag_lookup.c +382 -0
- data/gumbo-parser/src/tag_lookup.gperf +170 -0
- data/gumbo-parser/src/tag_lookup.h +13 -0
- data/gumbo-parser/src/token_buffer.c +79 -0
- data/gumbo-parser/src/token_buffer.h +71 -0
- data/gumbo-parser/src/token_type.h +17 -0
- data/gumbo-parser/src/tokenizer.c +3463 -0
- data/gumbo-parser/src/tokenizer.h +112 -0
- data/gumbo-parser/src/tokenizer_states.h +339 -0
- data/gumbo-parser/src/utf8.c +245 -0
- data/gumbo-parser/src/utf8.h +164 -0
- data/gumbo-parser/src/util.c +66 -0
- data/gumbo-parser/src/util.h +34 -0
- data/gumbo-parser/src/vector.c +111 -0
- data/gumbo-parser/src/vector.h +45 -0
- data/lib/nokogiri/class_resolver.rb +67 -0
- data/lib/nokogiri/css/node.rb +54 -0
- data/lib/nokogiri/css/parser.rb +770 -0
- data/lib/nokogiri/css/parser.y +277 -0
- data/lib/nokogiri/css/parser_extras.rb +96 -0
- data/lib/nokogiri/css/syntax_error.rb +9 -0
- data/lib/nokogiri/css/tokenizer.rb +155 -0
- data/lib/nokogiri/css/tokenizer.rex +56 -0
- data/lib/nokogiri/css/xpath_visitor.rb +359 -0
- data/lib/nokogiri/css.rb +66 -0
- data/lib/nokogiri/decorators/slop.rb +44 -0
- data/lib/nokogiri/encoding_handler.rb +57 -0
- data/lib/nokogiri/extension.rb +32 -0
- data/lib/nokogiri/gumbo.rb +15 -0
- data/lib/nokogiri/html.rb +48 -0
- data/lib/nokogiri/html4/builder.rb +37 -0
- data/lib/nokogiri/html4/document.rb +214 -0
- data/lib/nokogiri/html4/document_fragment.rb +54 -0
- data/lib/nokogiri/html4/element_description.rb +25 -0
- data/lib/nokogiri/html4/element_description_defaults.rb +572 -0
- data/lib/nokogiri/html4/encoding_reader.rb +121 -0
- data/lib/nokogiri/html4/entity_lookup.rb +15 -0
- data/lib/nokogiri/html4/sax/parser.rb +63 -0
- data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
- data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
- data/lib/nokogiri/html4.rb +47 -0
- data/lib/nokogiri/html5/document.rb +168 -0
- data/lib/nokogiri/html5/document_fragment.rb +90 -0
- data/lib/nokogiri/html5/node.rb +98 -0
- data/lib/nokogiri/html5.rb +389 -0
- data/lib/nokogiri/jruby/dependencies.rb +3 -0
- data/lib/nokogiri/jruby/isorelax/isorelax/20030108/isorelax-20030108.jar +0 -0
- data/lib/nokogiri/jruby/net/sf/saxon/Saxon-HE/9.6.0-4/Saxon-HE-9.6.0-4.jar +0 -0
- data/lib/nokogiri/jruby/net/sourceforge/htmlunit/neko-htmlunit/2.63.0/neko-htmlunit-2.63.0.jar +0 -0
- data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
- data/lib/nokogiri/jruby/nu/validator/jing/20200702VNU/jing-20200702VNU.jar +0 -0
- data/lib/nokogiri/jruby/org/nokogiri/nekodtd/0.1.11.noko2/nekodtd-0.1.11.noko2.jar +0 -0
- data/lib/nokogiri/jruby/xalan/serializer/2.7.3/serializer-2.7.3.jar +0 -0
- data/lib/nokogiri/jruby/xalan/xalan/2.7.3/xalan-2.7.3.jar +0 -0
- data/lib/nokogiri/jruby/xerces/xercesImpl/2.12.2/xercesImpl-2.12.2.jar +0 -0
- data/lib/nokogiri/jruby/xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar +0 -0
- data/lib/nokogiri/syntax_error.rb +6 -0
- data/lib/nokogiri/version/constant.rb +6 -0
- data/lib/nokogiri/version/info.rb +223 -0
- data/lib/nokogiri/version.rb +4 -0
- data/lib/nokogiri/xml/attr.rb +66 -0
- data/lib/nokogiri/xml/attribute_decl.rb +20 -0
- data/lib/nokogiri/xml/builder.rb +487 -0
- data/lib/nokogiri/xml/cdata.rb +13 -0
- data/lib/nokogiri/xml/character_data.rb +9 -0
- data/lib/nokogiri/xml/document.rb +471 -0
- data/lib/nokogiri/xml/document_fragment.rb +205 -0
- data/lib/nokogiri/xml/dtd.rb +34 -0
- data/lib/nokogiri/xml/element_content.rb +38 -0
- data/lib/nokogiri/xml/element_decl.rb +15 -0
- data/lib/nokogiri/xml/entity_decl.rb +21 -0
- data/lib/nokogiri/xml/entity_reference.rb +20 -0
- data/lib/nokogiri/xml/namespace.rb +58 -0
- data/lib/nokogiri/xml/node/save_options.rb +68 -0
- data/lib/nokogiri/xml/node.rb +1563 -0
- data/lib/nokogiri/xml/node_set.rb +447 -0
- data/lib/nokogiri/xml/notation.rb +19 -0
- data/lib/nokogiri/xml/parse_options.rb +213 -0
- data/lib/nokogiri/xml/pp/character_data.rb +21 -0
- data/lib/nokogiri/xml/pp/node.rb +57 -0
- data/lib/nokogiri/xml/pp.rb +4 -0
- data/lib/nokogiri/xml/processing_instruction.rb +11 -0
- data/lib/nokogiri/xml/reader.rb +105 -0
- data/lib/nokogiri/xml/relax_ng.rb +38 -0
- data/lib/nokogiri/xml/sax/document.rb +167 -0
- data/lib/nokogiri/xml/sax/parser.rb +125 -0
- data/lib/nokogiri/xml/sax/parser_context.rb +21 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +61 -0
- data/lib/nokogiri/xml/sax.rb +6 -0
- data/lib/nokogiri/xml/schema.rb +73 -0
- data/lib/nokogiri/xml/searchable.rb +270 -0
- data/lib/nokogiri/xml/syntax_error.rb +72 -0
- data/lib/nokogiri/xml/text.rb +11 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +13 -0
- data/lib/nokogiri/xml/xpath.rb +21 -0
- data/lib/nokogiri/xml/xpath_context.rb +16 -0
- data/lib/nokogiri/xml.rb +76 -0
- data/lib/nokogiri/xslt/stylesheet.rb +27 -0
- data/lib/nokogiri/xslt.rb +65 -0
- data/lib/nokogiri.rb +120 -0
- data/lib/xsd/xmlparser/nokogiri.rb +106 -0
- metadata +391 -0
@@ -0,0 +1,363 @@
|
|
1
|
+
#include <nokogiri.h>
|
2
|
+
|
3
|
+
VALUE cNokogiriXsltStylesheet ;
|
4
|
+
|
5
|
+
static void
|
6
|
+
mark(nokogiriXsltStylesheetTuple *wrapper)
|
7
|
+
{
|
8
|
+
rb_gc_mark(wrapper->func_instances);
|
9
|
+
}
|
10
|
+
|
11
|
+
static void
|
12
|
+
dealloc(nokogiriXsltStylesheetTuple *wrapper)
|
13
|
+
{
|
14
|
+
xsltStylesheetPtr doc = wrapper->ss;
|
15
|
+
xsltFreeStylesheet(doc);
|
16
|
+
ruby_xfree(wrapper);
|
17
|
+
}
|
18
|
+
|
19
|
+
PRINTFLIKE_DECL(2, 3)
|
20
|
+
static void
|
21
|
+
xslt_generic_error_handler(void *ctx, const char *msg, ...)
|
22
|
+
{
|
23
|
+
VALUE message;
|
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
|
30
|
+
va_list args;
|
31
|
+
va_start(args, msg);
|
32
|
+
message = rb_vsprintf(msg, args);
|
33
|
+
va_end(args);
|
34
|
+
#endif
|
35
|
+
|
36
|
+
rb_str_concat((VALUE)ctx, message);
|
37
|
+
}
|
38
|
+
|
39
|
+
VALUE
|
40
|
+
Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
|
41
|
+
{
|
42
|
+
VALUE self;
|
43
|
+
nokogiriXsltStylesheetTuple *wrapper;
|
44
|
+
|
45
|
+
self = Data_Make_Struct(cNokogiriXsltStylesheet, nokogiriXsltStylesheetTuple,
|
46
|
+
mark, dealloc, wrapper);
|
47
|
+
|
48
|
+
ss->_private = (void *)self;
|
49
|
+
wrapper->ss = ss;
|
50
|
+
wrapper->func_instances = rb_ary_new();
|
51
|
+
|
52
|
+
return self;
|
53
|
+
}
|
54
|
+
|
55
|
+
/*
|
56
|
+
* call-seq:
|
57
|
+
* parse_stylesheet_doc(document)
|
58
|
+
*
|
59
|
+
* Parse a stylesheet from +document+.
|
60
|
+
*/
|
61
|
+
static VALUE
|
62
|
+
parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
|
63
|
+
{
|
64
|
+
xmlDocPtr xml, xml_cpy;
|
65
|
+
VALUE errstr, exception;
|
66
|
+
xsltStylesheetPtr ss ;
|
67
|
+
Data_Get_Struct(xmldocobj, xmlDoc, xml);
|
68
|
+
|
69
|
+
errstr = rb_str_new(0, 0);
|
70
|
+
xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
|
71
|
+
|
72
|
+
xml_cpy = xmlCopyDoc(xml, 1); /* 1 => recursive */
|
73
|
+
ss = xsltParseStylesheetDoc(xml_cpy);
|
74
|
+
|
75
|
+
xsltSetGenericErrorFunc(NULL, NULL);
|
76
|
+
|
77
|
+
if (!ss) {
|
78
|
+
xmlFreeDoc(xml_cpy);
|
79
|
+
exception = rb_exc_new3(rb_eRuntimeError, errstr);
|
80
|
+
rb_exc_raise(exception);
|
81
|
+
}
|
82
|
+
|
83
|
+
return Nokogiri_wrap_xslt_stylesheet(ss);
|
84
|
+
}
|
85
|
+
|
86
|
+
|
87
|
+
/*
|
88
|
+
* call-seq:
|
89
|
+
* serialize(document)
|
90
|
+
*
|
91
|
+
* Serialize +document+ to an xml string.
|
92
|
+
*/
|
93
|
+
static VALUE
|
94
|
+
serialize(VALUE self, VALUE xmlobj)
|
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 ;
|
108
|
+
}
|
109
|
+
|
110
|
+
/*
|
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
|
158
|
+
*
|
159
|
+
* doc = Nokogiri::XML::Document.parse(xml)
|
160
|
+
* stylesheet = Nokogiri::XSLT.parse(xslt)
|
161
|
+
*
|
162
|
+
* ⚠ Note that the +h1+ element is empty because no param has been provided!
|
163
|
+
*
|
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"
|
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
|
222
|
+
*/
|
223
|
+
static VALUE
|
224
|
+
transform(int argc, VALUE *argv, VALUE self)
|
225
|
+
{
|
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, ¶mobj);
|
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) ;
|
278
|
+
}
|
279
|
+
|
280
|
+
static void
|
281
|
+
method_caller(xmlXPathParserContextPtr ctxt, int nargs)
|
282
|
+
{
|
283
|
+
VALUE handler;
|
284
|
+
const char *function_name;
|
285
|
+
xsltTransformContextPtr transform;
|
286
|
+
const xmlChar *functionURI;
|
287
|
+
|
288
|
+
transform = xsltXPathGetTransformContext(ctxt);
|
289
|
+
functionURI = ctxt->context->functionURI;
|
290
|
+
handler = (VALUE)xsltGetExtData(transform, functionURI);
|
291
|
+
function_name = (const char *)(ctxt->context->function);
|
292
|
+
|
293
|
+
Nokogiri_marshal_xpath_funcall_and_return_values(ctxt, nargs, handler, (const char *)function_name);
|
294
|
+
}
|
295
|
+
|
296
|
+
static void *
|
297
|
+
initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
|
298
|
+
{
|
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;
|
319
|
+
}
|
320
|
+
|
321
|
+
static void
|
322
|
+
shutdownFunc(xsltTransformContextPtr ctxt,
|
323
|
+
const xmlChar *uri, void *data)
|
324
|
+
{
|
325
|
+
nokogiriXsltStylesheetTuple *wrapper;
|
326
|
+
|
327
|
+
Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
|
328
|
+
wrapper);
|
329
|
+
|
330
|
+
rb_ary_clear(wrapper->func_instances);
|
331
|
+
}
|
332
|
+
|
333
|
+
/*
|
334
|
+
* call-seq:
|
335
|
+
* register(uri, custom_handler_class)
|
336
|
+
*
|
337
|
+
* Register a class that implements custom XSLT transformation functions.
|
338
|
+
*/
|
339
|
+
static VALUE
|
340
|
+
registr(VALUE self, VALUE uri, VALUE obj)
|
341
|
+
{
|
342
|
+
VALUE modules = rb_iv_get(self, "@modules");
|
343
|
+
if (NIL_P(modules)) { rb_raise(rb_eRuntimeError, "wtf! @modules isn't set"); }
|
344
|
+
|
345
|
+
rb_hash_aset(modules, uri, obj);
|
346
|
+
xsltRegisterExtModule((unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc);
|
347
|
+
return self;
|
348
|
+
}
|
349
|
+
|
350
|
+
void
|
351
|
+
noko_init_xslt_stylesheet(void)
|
352
|
+
{
|
353
|
+
rb_define_singleton_method(mNokogiriXslt, "register", registr, 2);
|
354
|
+
rb_iv_set(mNokogiriXslt, "@modules", rb_hash_new());
|
355
|
+
|
356
|
+
cNokogiriXsltStylesheet = rb_define_class_under(mNokogiriXslt, "Stylesheet", rb_cObject);
|
357
|
+
|
358
|
+
rb_undef_alloc_func(cNokogiriXsltStylesheet);
|
359
|
+
|
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);
|
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 `Æ` 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,111 @@
|
|
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
|
+
# don't try to regenerate ragel or gperf files in CI, that should be a development-only action and
|
17
|
+
# the generated files should be committed to SCM
|
18
|
+
ifneq ($(CI),true)
|
19
|
+
src/foreign_attrs.c: src/foreign_attrs.gperf
|
20
|
+
gperf -m100 -n $< | ./gperf-filter.sed > $@
|
21
|
+
|
22
|
+
src/%.c: src/%.gperf
|
23
|
+
gperf -m100 $< | ./gperf-filter.sed > $@
|
24
|
+
|
25
|
+
src/%.c: src/%.rl
|
26
|
+
ragel -F1 -o $@ $<
|
27
|
+
endif
|
28
|
+
|
29
|
+
build/src:
|
30
|
+
mkdir -p $@
|
31
|
+
|
32
|
+
build/test:
|
33
|
+
mkdir -p $@
|
34
|
+
|
35
|
+
build/src/%.o: src/%.c build/src/flags | build/src
|
36
|
+
$(CC) -MMD $(CPPFLAGS) $(CFLAGS) $(SANITIZEFLAGS) -c -o $@ $<
|
37
|
+
|
38
|
+
build/test/%.o: test/%.cc build/test/flags | build/test
|
39
|
+
$(CXX) -MMD $(CPPFLAGS) $(CXXFLAGS) $(SANITIZEFLAGS) -c -o $@ $<
|
40
|
+
|
41
|
+
build/run_tests: $(gumbo_objs) $(test_objs) $(gtest_lib)
|
42
|
+
$(CXX) -o $@ $+ $(LDFLAGS) $(SANITIZEFLAGS)
|
43
|
+
|
44
|
+
check: build/run_tests
|
45
|
+
./build/run_tests
|
46
|
+
|
47
|
+
coverage:
|
48
|
+
$(RM) build/{src,test}/*.gcda
|
49
|
+
$(RM) build/*.info
|
50
|
+
$(MAKE) CPPFLAGS='-Isrc -DNDEBUG=1' \
|
51
|
+
CFLAGS='-std=c99 --coverage -g -O0' \
|
52
|
+
CXXFLAGS='-isystem googletest/include -std=c++11 --coverage -g -O0' \
|
53
|
+
LDFLAGS='--coverage' \
|
54
|
+
build/run_tests
|
55
|
+
lcov --no-external \
|
56
|
+
--initial \
|
57
|
+
--capture \
|
58
|
+
--base-directory . \
|
59
|
+
--directory build \
|
60
|
+
--output-file build/coverage-pre.info
|
61
|
+
awk -F '[:,]' \
|
62
|
+
'/^SF:/ { delete defs } /^FN:/ { defs[$$2]=1 } /^DA:/ { if ($$3 == 0 && $$2 in defs) next } { print }' \
|
63
|
+
build/coverage-pre.info > build/coverage-initial.info
|
64
|
+
./build/run_tests
|
65
|
+
lcov --no-external \
|
66
|
+
--capture \
|
67
|
+
--base-directory . \
|
68
|
+
--directory build \
|
69
|
+
--rc lcov_branch_coverage=1 \
|
70
|
+
--output-file build/coverage-test.info
|
71
|
+
lcov --add-tracefile build/coverage-initial.info \
|
72
|
+
--add-tracefile build/coverage-test.info \
|
73
|
+
--rc lcov_branch_coverage=1 \
|
74
|
+
--output-file build/coverage.info
|
75
|
+
lcov --remove build/coverage.info '$(CURDIR)/googletest/*' \
|
76
|
+
--rc lcov_branch_coverage=1 \
|
77
|
+
--output-file build/coverage.info
|
78
|
+
genhtml --branch-coverage \
|
79
|
+
--output-directory build/coverage \
|
80
|
+
build/coverage.info
|
81
|
+
|
82
|
+
clean:
|
83
|
+
$(RM) -r build
|
84
|
+
|
85
|
+
build/src/flags: | build/src
|
86
|
+
@echo 'old_CC := $(CC)' > $@
|
87
|
+
@echo 'old_CPPFLAGS := $(CPPFLAGS)' >> $@
|
88
|
+
@echo 'old_CFLAGS := $(CFLAGS)' >>$@
|
89
|
+
@echo 'old_SANITIZEFLAGS := $(SANITIZEFLAGS)' >> $@
|
90
|
+
@echo 'old_LDFLAGS := $(LDFLAGS)' >> $@
|
91
|
+
|
92
|
+
build/test/flags: | build/test
|
93
|
+
@echo 'old_CXX := $(CXX)' > $@
|
94
|
+
@echo 'old_CPPFLAGS := $(CPPFLAGS)' >> $@
|
95
|
+
@echo 'old_CXXFLAGS := $(CXXFLAGS)' >> $@
|
96
|
+
@echo 'old_SANITIZEFLAGS := $(SANITIZEFLAGS)' >> $@
|
97
|
+
@echo 'old_LDFLAGS := $(LDFLAGS)' >> $@
|
98
|
+
|
99
|
+
ifeq (,$(filter clean coverage,$(MAKECMDGOALS)))
|
100
|
+
# Ensure that the flags are up to date.
|
101
|
+
-include build/src/flags build/test/flags
|
102
|
+
ifneq ($(old_CC) | $(old_CPPFLAGS) | $(old_CFLAGS) | $(old_SANITIZEFLAGS) | $(old_LDFLAGS),$(CC) | $(CPPFLAGS) | $(CFLAGS) | $(SANITIZEFLAGS) | $(LDFLAGS))
|
103
|
+
.PHONY: build/src/flags
|
104
|
+
endif
|
105
|
+
ifneq ($(old_CXX) | $(old_CPPFLAGS) | $(old_CXXFLAGS) | $(old_SANITIZEFLAGS) | $(old_LDFLAGS),$(CXX) | $(CPPFLAGS) | $(CXXFLAGS) | $(SANITIZEFLAGS) | $(LDFLAGS))
|
106
|
+
.PHONY: build/test/flags
|
107
|
+
endif
|
108
|
+
|
109
|
+
# Include dependencies.
|
110
|
+
-include $(test_objs:.o=.d) $(gumbo_objs:.o=.d)
|
111
|
+
endif
|
data/gumbo-parser/THANKS
ADDED
@@ -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
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# this Makefile is used by ext/nokogiri/extconf.rb
|
2
|
+
# to enable a mini_portile2 recipe to build the gumbo parser
|
3
|
+
.PHONY: clean
|
4
|
+
|
5
|
+
CFLAGS += -std=c99 -Wall
|
6
|
+
|
7
|
+
# allow the ENV var to override this
|
8
|
+
RANLIB ?= ranlib
|
9
|
+
|
10
|
+
gumbo_objs := \
|
11
|
+
ascii.o \
|
12
|
+
attribute.o \
|
13
|
+
char_ref.o \
|
14
|
+
error.o \
|
15
|
+
foreign_attrs.o \
|
16
|
+
parser.o \
|
17
|
+
string_buffer.o \
|
18
|
+
string_piece.o \
|
19
|
+
svg_attrs.o \
|
20
|
+
svg_tags.o \
|
21
|
+
tag.o \
|
22
|
+
tag_lookup.o \
|
23
|
+
token_buffer.o \
|
24
|
+
tokenizer.o \
|
25
|
+
utf8.o \
|
26
|
+
util.o \
|
27
|
+
vector.o
|
28
|
+
|
29
|
+
libgumbo.a: $(gumbo_objs)
|
30
|
+
$(AR) $(ARFLAGS) $@ $(gumbo_objs)
|
31
|
+
- ($(RANLIB) $@ || true) >/dev/null 2>&1
|
32
|
+
|
33
|
+
clean:
|
34
|
+
rm -f $(gumbo_objs) libgumbo.a
|
@@ -0,0 +1,41 @@
|
|
1
|
+
libgumbo
|
2
|
+
========
|
3
|
+
|
4
|
+
This is an internal fork of the [libgumbo] library, which was copied and
|
5
|
+
later modified under the terms of the Apache 2.0 [license]. See `lua-gumbo`
|
6
|
+
commit [`0a04728`] for details of the original import.
|
7
|
+
|
8
|
+
Since importing the code, the following notable fixes and improvements
|
9
|
+
have been made:
|
10
|
+
|
11
|
+
* `91cef89`: Re-implement `adjust_foreign_attributes()` with a gperf hash
|
12
|
+
* `b11abe7`: Pass `TagSet` arrays into functions by reference instead of value
|
13
|
+
* `b73dc03`: Simplify `maybe_replace_codepoint()` function
|
14
|
+
* `d5d0bb3`: Remove special handling of `<menuitem>` tag
|
15
|
+
* `7bd5162`: Remove special handling of `<isindex>` tag
|
16
|
+
* `a5c1b0e`: Use `realloc(3)` instead of `malloc(3)` in `enlarge_vector_if_full()`
|
17
|
+
* `dcbebd7`: Use `realloc(3)` instead of `malloc(3)` in `maybe_resize_string_buffer()`
|
18
|
+
* `df15262`: Make `destroy_node()` function non-recursive
|
19
|
+
* `2df37f5`: Fix signedness of some format specifiers
|
20
|
+
* `176553e`: Add maximum element nesting limit
|
21
|
+
* `bed0f4a`: Annotate `gumbo_debug()` with `PRINTF` macro and fix warnings
|
22
|
+
* `7ffc218`: Annotate `print_message()` with `PRINTF` macro and fix warnings
|
23
|
+
* `1bd8ab5`, `9136507`, `53a1f9a`: Deduplicate some identical `TagSet` arrays
|
24
|
+
* `a7a9065`: Add some GCC/Clang function attributes
|
25
|
+
* `8d3d4e4`: Remove custom allocator support
|
26
|
+
* `8d3b006`: Fix recording of source positions for `</form>` end tags
|
27
|
+
* `1a8d763`: Replace linear search in `maybe_replace_codepoint()` with a lookup table
|
28
|
+
* `6dca79e`: Replace `strcasecmp()` and `strncasecmp()` with ascii-only equivalents
|
29
|
+
* `17ab1d2`: Fix `TAGSET_INCLUDES` macro to work properly with multiple bit flags
|
30
|
+
* `7e56d45`: Re-implement `gumbo_normalize_svg_tagname()` with a gperf hash
|
31
|
+
* `a518d35`: Replace linear array search in `adjust_svg_attributes()` with a gperf hash
|
32
|
+
* `a4a7433`: Fix duplicate `TagSet` initializer being ignored in `is_special_node()`
|
33
|
+
* `8137fcd`: Add support for `<dialog>` tag
|
34
|
+
* `4b35471`: Add missing `static` qualifiers to hide symbols that shouldn't be extern
|
35
|
+
* `df57c59`, `03101f3`, `ea62330`: Replace use of locale-dependant `ctype.h` functions
|
36
|
+
with custom, ASCII-only equivalents
|
37
|
+
|
38
|
+
|
39
|
+
[libgumbo]: https://github.com/google/gumbo-parser/tree/aa91b27b02c0c80c482e24348a457ed7c3c088e0/src
|
40
|
+
[license]: https://github.com/google/gumbo-parser/blob/aa91b27b02c0c80c482e24348a457ed7c3c088e0/COPYING
|
41
|
+
[`0a04728`]: https://gitlab.com/craigbarnes/lua-gumbo/commit/0a047282815af86f3367a7d95fefcfe5723ece48
|