| Index: node_modules/vulcanize/node_modules/whacko/node_modules/parse5/README.md
 | 
| diff --git a/node_modules/vulcanize/node_modules/whacko/node_modules/parse5/README.md b/node_modules/vulcanize/node_modules/whacko/node_modules/parse5/README.md
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..d964c709ca9a3b05c4676543260e5da2eb8f96bc
 | 
| --- /dev/null
 | 
| +++ b/node_modules/vulcanize/node_modules/whacko/node_modules/parse5/README.md
 | 
| @@ -0,0 +1,228 @@
 | 
| +<p align="center">
 | 
| +  <img src="https://raw.github.com/inikulin/parse5/master/logo.png" alt="parse5" />
 | 
| +</p>
 | 
| +
 | 
| +[](https://travis-ci.org/inikulin/parse5)
 | 
| +
 | 
| +*WHATWG HTML5 specification-compliant, fast and ready for production HTML parsing/serialization toolset for Node.*
 | 
| +
 | 
| +To build [TestCafé](http://testcafe.devexpress.com/) we needed fast and ready for production HTML parser, which will parse HTML as a modern browser's parser.
 | 
| +Existing solutions were either too slow or their output was too inaccurate. So, this is how parse5 was born.
 | 
| +
 | 
| +**Included tools:**
 | 
| +*   [Parser](#class-parser) - HTML to DOM-tree parser.
 | 
| +*   [SimpleApiParser](#class-simpleapiparser) - [SAX](http://en.wikipedia.org/wiki/Simple_API_for_XML)-style parser for HTML.
 | 
| +*   [Serializer](#class-serializer) - DOM-tree to HTML code serializer.
 | 
| +
 | 
| +##Install
 | 
| +```
 | 
| +$ npm install parse5
 | 
| +```
 | 
| +
 | 
| +
 | 
| +##Usage
 | 
| +```js
 | 
| +var Parser = require('parse5').Parser;
 | 
| +
 | 
| +//Instantiate parser
 | 
| +var parser = new Parser();
 | 
| +
 | 
| +//Then feed it with an HTML document
 | 
| +var document = parser.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>')
 | 
| +
 | 
| +//Now let's parse HTML-snippet
 | 
| +var fragment = parser.parseFragment('<title>Parse5 is fucking awesome!</title><h1>42</h1>');
 | 
| +
 | 
| +```
 | 
| +
 | 
| +##Is it fast?
 | 
| +Check out [this benchmark](https://github.com/inikulin/node-html-parser-bench).
 | 
| +
 | 
| +```
 | 
| +Starting benchmark. Fasten your seatbelts...
 | 
| +html5 (https://github.com/aredridel/html5) x 0.18 ops/sec ±5.92% (5 runs sampled)
 | 
| +htmlparser (https://github.com/tautologistics/node-htmlparser/) x 3.83 ops/sec ±42.43% (14 runs sampled)
 | 
| +htmlparser2 (https://github.com/fb55/htmlparser2) x 4.05 ops/sec ±39.27% (15 runs sampled)
 | 
| +parse5 (https://github.com/inikulin/parse5) x 3.04 ops/sec ±51.81% (13 runs sampled)
 | 
| +Fastest is htmlparser2 (https://github.com/fb55/htmlparser2),parse5 (https://github.com/inikulin/parse5)
 | 
| +```
 | 
| +
 | 
| +So, parse5 is as fast as simple specification incompatible parsers and ~15-times(!) faster than the current specification compatible parser available for the node.
 | 
| +
 | 
| +
 | 
| +##API reference
 | 
| +
 | 
| +###Enum: TreeAdapters
 | 
| +Provides built-in tree adapters which can be passed as an optional argument to the `Parser` and `Serializer` constructors.
 | 
| +
 | 
| +####• TreeAdapters.default
 | 
| +Default tree format for parse5.
 | 
| +
 | 
| +
 | 
| +####• TreeAdapters.htmlparser2
 | 
| +Quite popular [htmlparser2](https://github.com/fb55/htmlparser2) tree format (e.g. used in [cheerio](https://github.com/MatthewMueller/cheerio) and [jsdom](https://github.com/tmpvar/jsdom)).
 | 
| +
 | 
| +---------------------------------------
 | 
| +
 | 
| +
 | 
| +###Class: Parser
 | 
| +Provides HTML parsing functionality.
 | 
| +
 | 
| +####• Parser.ctor([treeAdapter])
 | 
| +Creates new reusable instance of the `Parser`. Optional `treeAdapter` argument specifies resulting tree format. If `treeAdapter` argument is not specified, `default` tree adapter will be used.
 | 
| +
 | 
| +*Example:*
 | 
| +```js
 | 
| +var parse5 = require('parse5');
 | 
| +
 | 
| +//Instantiate new parser with default tree adapter
 | 
| +var parser1 = new parse5.Parser();
 | 
| +
 | 
| +//Instantiate new parser with htmlparser2 tree adapter
 | 
| +var parser2 = new parse5.Parser(parse5.TreeAdapters.htmlparser2);
 | 
| +```
 | 
| +
 | 
| +
 | 
| +
 | 
| +####• Parser.parse(html)
 | 
| +Parses specified `html` string. Returns `document` node.
 | 
| +
 | 
| +*Example:*
 | 
| +```js
 | 
| +var document = parser.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
 | 
| +```
 | 
| +
 | 
| +
 | 
| +####• Parser.parseFragment(htmlFragment, [contextElement])
 | 
| +Parses given `htmlFragment`. Returns `documentFragment` node. Optional `contextElement` argument specifies context in which given `htmlFragment` will be parsed (consider it as setting `contextElement.innerHTML` property). If `contextElement` argument is not specified then `<template>` element will be used as a context and fragment will be parsed in 'forgiving' manner.
 | 
| +
 | 
| +*Example:*
 | 
| +```js
 | 
| +var documentFragment = parser.parseFragment('<table></table>');
 | 
| +
 | 
| +//Parse html fragment in context of the parsed <table> element
 | 
| +var trFragment = parser.parseFragment('<tr><td>Shake it, baby</td></tr>', documentFragment.childNodes[0]);
 | 
| +```
 | 
| +
 | 
| +---------------------------------------
 | 
| +
 | 
| +
 | 
| +###Class: SimpleApiParser
 | 
| +Provides [SAX](https://en.wikipedia.org/wiki/Simple_API_for_XML)-style HTML parsing functionality.
 | 
| +
 | 
| +####• SimpleApiParser.ctor(handlers)
 | 
| +Creates new reusable instance of the `SimpleApiParser`. `handlers` argument specifies object that contains parser's event handlers. Possible events and their signatures are shown in the example.
 | 
| +
 | 
| +*Example:*
 | 
| +```js
 | 
| +var parse5 = require('parse5');
 | 
| +
 | 
| +var parser = new parse5.SimpleApiParser({
 | 
| +    doctype: function(name, publicId, systemId) {
 | 
| +        //Handle doctype here
 | 
| +    },
 | 
| +
 | 
| +    startTag: function(tagName, attrs, selfClosing) {
 | 
| +        //Handle start tags here
 | 
| +    },
 | 
| +
 | 
| +    endTag: function(tagName) {
 | 
| +        //Handle end tags here
 | 
| +    },
 | 
| +
 | 
| +    text: function(text) {
 | 
| +        //Handle texts here
 | 
| +    },
 | 
| +
 | 
| +    comment: function(text) {
 | 
| +        //Handle comments here
 | 
| +    }
 | 
| +});
 | 
| +```
 | 
| +
 | 
| +####• SimpleApiParser.parse(html)
 | 
| +Raises parser events for the given `html`.
 | 
| +
 | 
| +*Example:*
 | 
| +```js
 | 
| +var parse5 = require('parse5');
 | 
| +
 | 
| +var parser = new parse5.SimpleApiParser({
 | 
| +    text: function(text) {
 | 
| +        console.log(text);
 | 
| +    }
 | 
| +});
 | 
| +
 | 
| +parser.parse('<body>Yo!</body>');
 | 
| +```
 | 
| +
 | 
| +---------------------------------------
 | 
| +
 | 
| +###Class: Serializer
 | 
| +Provides tree-to-HTML serialization functionality.
 | 
| +**Note:** prior to v1.2.0 this class was called `TreeSerializer`. However, it's still accessible as `parse5.TreeSerializer` for backward compatibility.
 | 
| +
 | 
| +####• Serializer.ctor([treeAdapter])
 | 
| +Creates new reusable instance of the `Serializer`. Optional `treeAdapter` argument specifies input tree format. If `treeAdapter` argument is not specified, `default` tree adapter will be used.
 | 
| +
 | 
| +*Example:*
 | 
| +```js
 | 
| +var parse5 = require('parse5');
 | 
| +
 | 
| +//Instantiate new serializer with default tree adapter
 | 
| +var serializer1 = new parse5.Serializer();
 | 
| +
 | 
| +//Instantiate new serializer with htmlparser2 tree adapter
 | 
| +var serializer2 = new parse5.Serializer(parse5.TreeAdapters.htmlparser2);
 | 
| +```
 | 
| +
 | 
| +
 | 
| +####• Serializer.serialize(node)
 | 
| +Serializes the given `node`. Returns HTML string.
 | 
| +
 | 
| +*Example:*
 | 
| +```js
 | 
| +var document = parser.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
 | 
| +
 | 
| +//Serialize document
 | 
| +var html = serializer.serialize(document);
 | 
| +
 | 
| +//Serialize <body> element content
 | 
| +var bodyInnerHtml = serializer.serialize(document.childNodes[0].childNodes[1]);
 | 
| +```
 | 
| +
 | 
| +---------------------------------------
 | 
| +
 | 
| +
 | 
| +##Testing
 | 
| +Test data is adopted from [html5lib project](https://github.com/html5lib). Parser is covered by more than 8000 test cases.
 | 
| +To run tests:
 | 
| +```
 | 
| +$ npm test
 | 
| +```
 | 
| +
 | 
| +
 | 
| +##Custom tree adapter
 | 
| +You can create a custom tree adapter so parse5 can work with your own DOM-tree implementation.
 | 
| +Just pass your adapter implementation to the parser's constructor as an argument:
 | 
| +
 | 
| +```js
 | 
| +var Parser = require('parse5').Parser;
 | 
| +
 | 
| +var myTreeAdapter = {
 | 
| +   //Adapter methods...
 | 
| +};
 | 
| +
 | 
| +//Instantiate parser
 | 
| +var parser = new Parser(myTreeAdapter);
 | 
| +```
 | 
| +
 | 
| +Sample implementation can be found [here](https://github.com/inikulin/parse5/blob/master/lib/tree_adapters/default.js).
 | 
| +The custom tree adapter should implement all methods exposed via `exports` in the sample implementation.
 | 
| +
 | 
| +##Questions or suggestions?
 | 
| +If you have any questions, please feel free to create an issue [here on github](https://github.com/inikulin/parse5/issues).
 | 
| +
 | 
| +
 | 
| +##Author
 | 
| +[Ivan Nikulin](https://github.com/inikulin) (ifaaan@gmail.com)
 | 
| 
 |