UNPKG

@readme/markdown

Version:

ReadMe's React-based Markdown parser

1,752 lines (1,418 loc) 1.04 MB
module.exports = /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 130); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports) { module.exports = extend var hasOwnProperty = Object.prototype.hasOwnProperty; function extend() { var target = {} for (var i = 0; i < arguments.length; i++) { var source = arguments[i] for (var key in source) { if (hasOwnProperty.call(source, key)) { target[key] = source[key] } } } return target } /***/ }), /* 1 */ /***/ (function(module, exports) { module.exports = require("react"); /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = all var one = __webpack_require__(48) function all(h, parent) { var nodes = parent.children || [] var length = nodes.length var values = [] var index = -1 var result var head while (++index < length) { result = one(h, nodes[index], parent) if (result) { if (index && nodes[index - 1].type === 'break') { if (result.value) { result.value = result.value.replace(/^\s+/, '') } head = result.children && result.children[0] if (head && head.value) { head.value = head.value.replace(/^\s+/, '') } } values = values.concat(result) } } return values } /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = u function u(type, props, value) { var node if ( (value === null || value === undefined) && (typeof props !== 'object' || Array.isArray(props)) ) { value = props props = {} } node = Object.assign({type: String(type)}, props) if (Array.isArray(value)) { node.children = value } else if (value !== null && value !== undefined) { node.value = String(value) } return node } /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! * repeat-string <https://github.com/jonschlinkert/repeat-string> * * Copyright (c) 2014-2015, Jon Schlinkert. * Licensed under the MIT License. */ /** * Results cache */ var res = ''; var cache; /** * Expose `repeat` */ module.exports = repeat; /** * Repeat the given `string` the specified `number` * of times. * * **Example:** * * ```js * var repeat = require('repeat-string'); * repeat('A', 5); * //=> AAAAA * ``` * * @param {String} `string` The string to repeat * @param {Number} `number` The number of times to repeat the string * @return {String} Repeated string * @api public */ function repeat(str, num) { if (typeof str !== 'string') { throw new TypeError('expected a string'); } // cover common, quick use cases if (num === 1) return str; if (num === 2) return str + str; var max = str.length * num; if (cache !== str || typeof cache === 'undefined') { cache = str; res = ''; } else if (res.length >= max) { return res.substr(0, max); } while (max > res.length && num > 1) { if (num & 1) { res += str; } num >>= 1; str += str; } res += str; res = res.substr(0, max); return res; } /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = whitespace var fromCode = String.fromCharCode var re = /\s/ // Check if the given character code, or the character code at the first // character, is a whitespace character. function whitespace(character) { return re.test( typeof character === 'number' ? fromCode(character) : character.charAt(0) ) } /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (false) { var throwOnDirectAccess, ReactIs; } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = __webpack_require__(351)(); } /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var Mixin = /*#__PURE__*/function () { function Mixin(host) { _classCallCheck(this, Mixin); var originalMethods = {}; var overriddenMethods = this._getOverriddenMethods(this, originalMethods); for (var _i = 0, _Object$keys = Object.keys(overriddenMethods); _i < _Object$keys.length; _i++) { var key = _Object$keys[_i]; if (typeof overriddenMethods[key] === 'function') { originalMethods[key] = host[key]; host[key] = overriddenMethods[key]; } } } _createClass(Mixin, [{ key: "_getOverriddenMethods", value: function _getOverriddenMethods() { throw new Error('Not implemented'); } }]); return Mixin; }(); Mixin.install = function (host, Ctor, opts) { if (!host.__mixins) { host.__mixins = []; } for (var i = 0; i < host.__mixins.length; i++) { if (host.__mixins[i].constructor === Ctor) { return host.__mixins[i]; } } var mixin = new Ctor(host, opts); host.__mixins.push(mixin); return mixin; }; module.exports = Mixin; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = decimal // Check if the given character code, or the character code at the first // character, is decimal. function decimal(character) { var code = typeof character === 'string' ? character.charCodeAt(0) : character return code >= 48 && code <= 57 /* 0-9 */ } /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = factory var noop = Function.prototype var own = {}.hasOwnProperty // Handle values based on a property. function factory(key, options) { var settings = options || {} function one(value) { var fn = one.invalid var handlers = one.handlers if (value && own.call(value, key)) { fn = own.call(handlers, value[key]) ? handlers[value[key]] : one.unknown } return (fn || noop).apply(this, arguments) } one.handlers = settings.handlers || {} one.invalid = settings.invalid one.unknown = settings.unknown return one } /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var merge = __webpack_require__(56) var xlink = __webpack_require__(58) var xml = __webpack_require__(61) var xmlns = __webpack_require__(62) var aria = __webpack_require__(65) var svg = __webpack_require__(218) module.exports = merge([xml, xlink, xmlns, aria, svg]) /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = wrap var u = __webpack_require__(3) // Wrap `nodes` with line feeds between each entry. // Optionally adds line feeds at the start and end. function wrap(nodes, loose) { var result = [] var index = -1 var length = nodes.length if (loose) { result.push(u('text', '\n')) } while (++index < length) { if (index) { result.push(u('text', '\n')) } result.push(nodes[index]) } if (loose && nodes.length !== 0) { result.push(u('text', '\n')) } return result } /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _NS$HTML, _NS$MATHML, _NS$SVG, _exports$SPECIAL_ELEM; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var NS = exports.NAMESPACES = { HTML: 'http://www.w3.org/1999/xhtml', MATHML: 'http://www.w3.org/1998/Math/MathML', SVG: 'http://www.w3.org/2000/svg', XLINK: 'http://www.w3.org/1999/xlink', XML: 'http://www.w3.org/XML/1998/namespace', XMLNS: 'http://www.w3.org/2000/xmlns/' }; exports.ATTRS = { TYPE: 'type', ACTION: 'action', ENCODING: 'encoding', PROMPT: 'prompt', NAME: 'name', COLOR: 'color', FACE: 'face', SIZE: 'size' }; exports.DOCUMENT_MODE = { NO_QUIRKS: 'no-quirks', QUIRKS: 'quirks', LIMITED_QUIRKS: 'limited-quirks' }; var $ = exports.TAG_NAMES = { A: 'a', ADDRESS: 'address', ANNOTATION_XML: 'annotation-xml', APPLET: 'applet', AREA: 'area', ARTICLE: 'article', ASIDE: 'aside', B: 'b', BASE: 'base', BASEFONT: 'basefont', BGSOUND: 'bgsound', BIG: 'big', BLOCKQUOTE: 'blockquote', BODY: 'body', BR: 'br', BUTTON: 'button', CAPTION: 'caption', CENTER: 'center', CODE: 'code', COL: 'col', COLGROUP: 'colgroup', DD: 'dd', DESC: 'desc', DETAILS: 'details', DIALOG: 'dialog', DIR: 'dir', DIV: 'div', DL: 'dl', DT: 'dt', EM: 'em', EMBED: 'embed', FIELDSET: 'fieldset', FIGCAPTION: 'figcaption', FIGURE: 'figure', FONT: 'font', FOOTER: 'footer', FOREIGN_OBJECT: 'foreignObject', FORM: 'form', FRAME: 'frame', FRAMESET: 'frameset', H1: 'h1', H2: 'h2', H3: 'h3', H4: 'h4', H5: 'h5', H6: 'h6', HEAD: 'head', HEADER: 'header', HGROUP: 'hgroup', HR: 'hr', HTML: 'html', I: 'i', IMG: 'img', IMAGE: 'image', INPUT: 'input', IFRAME: 'iframe', KEYGEN: 'keygen', LABEL: 'label', LI: 'li', LINK: 'link', LISTING: 'listing', MAIN: 'main', MALIGNMARK: 'malignmark', MARQUEE: 'marquee', MATH: 'math', MENU: 'menu', META: 'meta', MGLYPH: 'mglyph', MI: 'mi', MO: 'mo', MN: 'mn', MS: 'ms', MTEXT: 'mtext', NAV: 'nav', NOBR: 'nobr', NOFRAMES: 'noframes', NOEMBED: 'noembed', NOSCRIPT: 'noscript', OBJECT: 'object', OL: 'ol', OPTGROUP: 'optgroup', OPTION: 'option', P: 'p', PARAM: 'param', PLAINTEXT: 'plaintext', PRE: 'pre', RB: 'rb', RP: 'rp', RT: 'rt', RTC: 'rtc', RUBY: 'ruby', S: 's', SCRIPT: 'script', SECTION: 'section', SELECT: 'select', SOURCE: 'source', SMALL: 'small', SPAN: 'span', STRIKE: 'strike', STRONG: 'strong', STYLE: 'style', SUB: 'sub', SUMMARY: 'summary', SUP: 'sup', TABLE: 'table', TBODY: 'tbody', TEMPLATE: 'template', TEXTAREA: 'textarea', TFOOT: 'tfoot', TD: 'td', TH: 'th', THEAD: 'thead', TITLE: 'title', TR: 'tr', TRACK: 'track', TT: 'tt', U: 'u', UL: 'ul', SVG: 'svg', VAR: 'var', WBR: 'wbr', XMP: 'xmp' }; exports.SPECIAL_ELEMENTS = (_exports$SPECIAL_ELEM = {}, _defineProperty(_exports$SPECIAL_ELEM, NS.HTML, (_NS$HTML = {}, _defineProperty(_NS$HTML, $.ADDRESS, true), _defineProperty(_NS$HTML, $.APPLET, true), _defineProperty(_NS$HTML, $.AREA, true), _defineProperty(_NS$HTML, $.ARTICLE, true), _defineProperty(_NS$HTML, $.ASIDE, true), _defineProperty(_NS$HTML, $.BASE, true), _defineProperty(_NS$HTML, $.BASEFONT, true), _defineProperty(_NS$HTML, $.BGSOUND, true), _defineProperty(_NS$HTML, $.BLOCKQUOTE, true), _defineProperty(_NS$HTML, $.BODY, true), _defineProperty(_NS$HTML, $.BR, true), _defineProperty(_NS$HTML, $.BUTTON, true), _defineProperty(_NS$HTML, $.CAPTION, true), _defineProperty(_NS$HTML, $.CENTER, true), _defineProperty(_NS$HTML, $.COL, true), _defineProperty(_NS$HTML, $.COLGROUP, true), _defineProperty(_NS$HTML, $.DD, true), _defineProperty(_NS$HTML, $.DETAILS, true), _defineProperty(_NS$HTML, $.DIR, true), _defineProperty(_NS$HTML, $.DIV, true), _defineProperty(_NS$HTML, $.DL, true), _defineProperty(_NS$HTML, $.DT, true), _defineProperty(_NS$HTML, $.EMBED, true), _defineProperty(_NS$HTML, $.FIELDSET, true), _defineProperty(_NS$HTML, $.FIGCAPTION, true), _defineProperty(_NS$HTML, $.FIGURE, true), _defineProperty(_NS$HTML, $.FOOTER, true), _defineProperty(_NS$HTML, $.FORM, true), _defineProperty(_NS$HTML, $.FRAME, true), _defineProperty(_NS$HTML, $.FRAMESET, true), _defineProperty(_NS$HTML, $.H1, true), _defineProperty(_NS$HTML, $.H2, true), _defineProperty(_NS$HTML, $.H3, true), _defineProperty(_NS$HTML, $.H4, true), _defineProperty(_NS$HTML, $.H5, true), _defineProperty(_NS$HTML, $.H6, true), _defineProperty(_NS$HTML, $.HEAD, true), _defineProperty(_NS$HTML, $.HEADER, true), _defineProperty(_NS$HTML, $.HGROUP, true), _defineProperty(_NS$HTML, $.HR, true), _defineProperty(_NS$HTML, $.HTML, true), _defineProperty(_NS$HTML, $.IFRAME, true), _defineProperty(_NS$HTML, $.IMG, true), _defineProperty(_NS$HTML, $.INPUT, true), _defineProperty(_NS$HTML, $.LI, true), _defineProperty(_NS$HTML, $.LINK, true), _defineProperty(_NS$HTML, $.LISTING, true), _defineProperty(_NS$HTML, $.MAIN, true), _defineProperty(_NS$HTML, $.MARQUEE, true), _defineProperty(_NS$HTML, $.MENU, true), _defineProperty(_NS$HTML, $.META, true), _defineProperty(_NS$HTML, $.NAV, true), _defineProperty(_NS$HTML, $.NOEMBED, true), _defineProperty(_NS$HTML, $.NOFRAMES, true), _defineProperty(_NS$HTML, $.NOSCRIPT, true), _defineProperty(_NS$HTML, $.OBJECT, true), _defineProperty(_NS$HTML, $.OL, true), _defineProperty(_NS$HTML, $.P, true), _defineProperty(_NS$HTML, $.PARAM, true), _defineProperty(_NS$HTML, $.PLAINTEXT, true), _defineProperty(_NS$HTML, $.PRE, true), _defineProperty(_NS$HTML, $.SCRIPT, true), _defineProperty(_NS$HTML, $.SECTION, true), _defineProperty(_NS$HTML, $.SELECT, true), _defineProperty(_NS$HTML, $.SOURCE, true), _defineProperty(_NS$HTML, $.STYLE, true), _defineProperty(_NS$HTML, $.SUMMARY, true), _defineProperty(_NS$HTML, $.TABLE, true), _defineProperty(_NS$HTML, $.TBODY, true), _defineProperty(_NS$HTML, $.TD, true), _defineProperty(_NS$HTML, $.TEMPLATE, true), _defineProperty(_NS$HTML, $.TEXTAREA, true), _defineProperty(_NS$HTML, $.TFOOT, true), _defineProperty(_NS$HTML, $.TH, true), _defineProperty(_NS$HTML, $.THEAD, true), _defineProperty(_NS$HTML, $.TITLE, true), _defineProperty(_NS$HTML, $.TR, true), _defineProperty(_NS$HTML, $.TRACK, true), _defineProperty(_NS$HTML, $.UL, true), _defineProperty(_NS$HTML, $.WBR, true), _defineProperty(_NS$HTML, $.XMP, true), _NS$HTML)), _defineProperty(_exports$SPECIAL_ELEM, NS.MATHML, (_NS$MATHML = {}, _defineProperty(_NS$MATHML, $.MI, true), _defineProperty(_NS$MATHML, $.MO, true), _defineProperty(_NS$MATHML, $.MN, true), _defineProperty(_NS$MATHML, $.MS, true), _defineProperty(_NS$MATHML, $.MTEXT, true), _defineProperty(_NS$MATHML, $.ANNOTATION_XML, true), _NS$MATHML)), _defineProperty(_exports$SPECIAL_ELEM, NS.SVG, (_NS$SVG = {}, _defineProperty(_NS$SVG, $.TITLE, true), _defineProperty(_NS$SVG, $.FOREIGN_OBJECT, true), _defineProperty(_NS$SVG, $.DESC, true), _NS$SVG)), _exports$SPECIAL_ELEM); /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var merge = __webpack_require__(56) var xlink = __webpack_require__(58) var xml = __webpack_require__(61) var xmlns = __webpack_require__(62) var aria = __webpack_require__(65) var html = __webpack_require__(217) module.exports = merge([xml, xlink, xmlns, aria, html]) /***/ }), /* 14 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var normalize = __webpack_require__(32) var Schema = __webpack_require__(57) var DefinedInfo = __webpack_require__(59) module.exports = create function create(definition) { var space = definition.space var mustUseProperty = definition.mustUseProperty || [] var attributes = definition.attributes || {} var props = definition.properties var transform = definition.transform var property = {} var normal = {} var prop var info for (prop in props) { info = new DefinedInfo( prop, transform(attributes, prop), props[prop], space ) if (mustUseProperty.indexOf(prop) !== -1) { info.mustUseProperty = true } property[prop] = info normal[normalize(prop)] = prop normal[normalize(info.attribute)] = prop } return new Schema(property, normal, space) } /***/ }), /* 15 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var normalize = __webpack_require__(32) var DefinedInfo = __webpack_require__(59) var Info = __webpack_require__(60) var data = 'data' module.exports = find var valid = /^data[-\w.:]+$/i var dash = /-[a-z]/g var cap = /[A-Z]/g function find(schema, value) { var normal = normalize(value) var prop = value var Type = Info if (normal in schema.normal) { return schema.property[schema.normal[normal]] } if (normal.length > 4 && normal.slice(0, 4) === data && valid.test(value)) { // Attribute or property. if (value.charAt(4) === '-') { prop = datasetToProperty(value) } else { value = datasetToAttribute(value) } Type = DefinedInfo } return new Type(prop, value) } function datasetToProperty(attribute) { var value = attribute.slice(5).replace(dash, camelcase) return data + value.charAt(0).toUpperCase() + value.slice(1) } function datasetToAttribute(property) { var value = property.slice(4) if (dash.test(value)) { return property } value = value.replace(cap, kebab) if (value.charAt(0) !== '-') { value = '-' + value } return data + value } function kebab($0) { return '-' + $0.toLowerCase() } function camelcase($0) { return $0.charAt(1).toUpperCase() } /***/ }), /* 16 */ /***/ (function(module, exports) { exports = module.exports = trim; function trim(str){ return str.replace(/^\s*|\s*$/g, ''); } exports.left = function(str){ return str.replace(/^\s*/, ''); }; exports.right = function(str){ return str.replace(/\s*$/, ''); }; /***/ }), /* 17 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = visit var visitParents = __webpack_require__(148) var CONTINUE = visitParents.CONTINUE var SKIP = visitParents.SKIP var EXIT = visitParents.EXIT visit.CONTINUE = CONTINUE visit.SKIP = SKIP visit.EXIT = EXIT function visit(tree, test, visitor, reverse) { if (typeof test === 'function' && typeof visitor !== 'function') { reverse = visitor visitor = test test = null } visitParents(tree, test, overload, reverse) function overload(node, parents) { var parent = parents[parents.length - 1] var index = parent ? parent.children.indexOf(node) : null return visitor(node, index, parent) } } /***/ }), /* 18 */ /***/ (function(module) { module.exports = JSON.parse("{\"html\":\"http://www.w3.org/1999/xhtml\",\"mathml\":\"http://www.w3.org/1998/Math/MathML\",\"svg\":\"http://www.w3.org/2000/svg\",\"xlink\":\"http://www.w3.org/1999/xlink\",\"xml\":\"http://www.w3.org/XML/1998/namespace\",\"xmlns\":\"http://www.w3.org/2000/xmlns/\"}"); /***/ }), /* 19 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = convert function convert(test) { if (typeof test === 'string') { return typeFactory(test) } if (test === null || test === undefined) { return ok } if (typeof test === 'object') { return ('length' in test ? anyFactory : matchesFactory)(test) } if (typeof test === 'function') { return test } throw new Error('Expected function, string, or object as test') } function convertAll(tests) { var results = [] var length = tests.length var index = -1 while (++index < length) { results[index] = convert(tests[index]) } return results } // Utility assert each property in `test` is represented in `node`, and each // values are strictly equal. function matchesFactory(test) { return matches function matches(node) { var key for (key in test) { if (node[key] !== test[key]) { return false } } return true } } function anyFactory(tests) { var checks = convertAll(tests) var length = checks.length return matches function matches() { var index = -1 while (++index < length) { if (checks[index].apply(this, arguments)) { return true } } return false } } // Utility to convert a string into a function which checks a given node’s type // for said string. function typeFactory(test) { return type function type(node) { return Boolean(node && node.type === test) } } // Utility to return true. function ok() { return true } /***/ }), /* 20 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var encodeCache = {}; // Create a lookup array where anything but characters in `chars` string // and alphanumeric chars is percent-encoded. // function getEncodeCache(exclude) { var i, ch, cache = encodeCache[exclude]; if (cache) { return cache; } cache = encodeCache[exclude] = []; for (i = 0; i < 128; i++) { ch = String.fromCharCode(i); if (/^[0-9a-z]$/i.test(ch)) { // always allow unencoded alphanumeric characters cache.push(ch); } else { cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2)); } } for (i = 0; i < exclude.length; i++) { cache[exclude.charCodeAt(i)] = exclude[i]; } return cache; } // Encode unsafe characters with percent-encoding, skipping already // encoded sequences. // // - string - string to encode // - exclude - list of characters to ignore (in addition to a-zA-Z0-9) // - keepEscaped - don't encode '%' in a correct escape sequence (default: true) // function encode(string, exclude, keepEscaped) { var i, l, code, nextCode, cache, result = ''; if (typeof exclude !== 'string') { // encode(string, keepEscaped) keepEscaped = exclude; exclude = encode.defaultChars; } if (typeof keepEscaped === 'undefined') { keepEscaped = true; } cache = getEncodeCache(exclude); for (i = 0, l = string.length; i < l; i++) { code = string.charCodeAt(i); if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) { if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) { result += string.slice(i, i + 3); i += 2; continue; } } if (code < 128) { result += cache[code]; continue; } if (code >= 0xD800 && code <= 0xDFFF) { if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) { nextCode = string.charCodeAt(i + 1); if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) { result += encodeURIComponent(string[i] + string[i + 1]); i++; continue; } } result += '%EF%BF%BD'; continue; } result += encodeURIComponent(string[i]); } return result; } encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; encode.componentChars = "-_.!~*'()"; module.exports = encode; /***/ }), /* 21 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var Preprocessor = __webpack_require__(203); var unicode = __webpack_require__(29); var neTree = __webpack_require__(204); var ERR = __webpack_require__(30); //Aliases var $ = unicode.CODE_POINTS; var $$ = unicode.CODE_POINT_SEQUENCES; //C1 Unicode control character reference replacements var C1_CONTROLS_REFERENCE_REPLACEMENTS = { 0x80: 0x20ac, 0x82: 0x201a, 0x83: 0x0192, 0x84: 0x201e, 0x85: 0x2026, 0x86: 0x2020, 0x87: 0x2021, 0x88: 0x02c6, 0x89: 0x2030, 0x8a: 0x0160, 0x8b: 0x2039, 0x8c: 0x0152, 0x8e: 0x017d, 0x91: 0x2018, 0x92: 0x2019, 0x93: 0x201c, 0x94: 0x201d, 0x95: 0x2022, 0x96: 0x2013, 0x97: 0x2014, 0x98: 0x02dc, 0x99: 0x2122, 0x9a: 0x0161, 0x9b: 0x203a, 0x9c: 0x0153, 0x9e: 0x017e, 0x9f: 0x0178 }; // Named entity tree flags var HAS_DATA_FLAG = 1 << 0; var DATA_DUPLET_FLAG = 1 << 1; var HAS_BRANCHES_FLAG = 1 << 2; var MAX_BRANCH_MARKER_VALUE = HAS_DATA_FLAG | DATA_DUPLET_FLAG | HAS_BRANCHES_FLAG; //States var DATA_STATE = 'DATA_STATE'; var RCDATA_STATE = 'RCDATA_STATE'; var RAWTEXT_STATE = 'RAWTEXT_STATE'; var SCRIPT_DATA_STATE = 'SCRIPT_DATA_STATE'; var PLAINTEXT_STATE = 'PLAINTEXT_STATE'; var TAG_OPEN_STATE = 'TAG_OPEN_STATE'; var END_TAG_OPEN_STATE = 'END_TAG_OPEN_STATE'; var TAG_NAME_STATE = 'TAG_NAME_STATE'; var RCDATA_LESS_THAN_SIGN_STATE = 'RCDATA_LESS_THAN_SIGN_STATE'; var RCDATA_END_TAG_OPEN_STATE = 'RCDATA_END_TAG_OPEN_STATE'; var RCDATA_END_TAG_NAME_STATE = 'RCDATA_END_TAG_NAME_STATE'; var RAWTEXT_LESS_THAN_SIGN_STATE = 'RAWTEXT_LESS_THAN_SIGN_STATE'; var RAWTEXT_END_TAG_OPEN_STATE = 'RAWTEXT_END_TAG_OPEN_STATE'; var RAWTEXT_END_TAG_NAME_STATE = 'RAWTEXT_END_TAG_NAME_STATE'; var SCRIPT_DATA_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_LESS_THAN_SIGN_STATE'; var SCRIPT_DATA_END_TAG_OPEN_STATE = 'SCRIPT_DATA_END_TAG_OPEN_STATE'; var SCRIPT_DATA_END_TAG_NAME_STATE = 'SCRIPT_DATA_END_TAG_NAME_STATE'; var SCRIPT_DATA_ESCAPE_START_STATE = 'SCRIPT_DATA_ESCAPE_START_STATE'; var SCRIPT_DATA_ESCAPE_START_DASH_STATE = 'SCRIPT_DATA_ESCAPE_START_DASH_STATE'; var SCRIPT_DATA_ESCAPED_STATE = 'SCRIPT_DATA_ESCAPED_STATE'; var SCRIPT_DATA_ESCAPED_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_STATE'; var SCRIPT_DATA_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_DASH_STATE'; var SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE'; var SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE'; var SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE'; var SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE'; var SCRIPT_DATA_DOUBLE_ESCAPED_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_STATE'; var SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE'; var SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE'; var SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE'; var SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE'; var BEFORE_ATTRIBUTE_NAME_STATE = 'BEFORE_ATTRIBUTE_NAME_STATE'; var ATTRIBUTE_NAME_STATE = 'ATTRIBUTE_NAME_STATE'; var AFTER_ATTRIBUTE_NAME_STATE = 'AFTER_ATTRIBUTE_NAME_STATE'; var BEFORE_ATTRIBUTE_VALUE_STATE = 'BEFORE_ATTRIBUTE_VALUE_STATE'; var ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE'; var ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE'; var ATTRIBUTE_VALUE_UNQUOTED_STATE = 'ATTRIBUTE_VALUE_UNQUOTED_STATE'; var AFTER_ATTRIBUTE_VALUE_QUOTED_STATE = 'AFTER_ATTRIBUTE_VALUE_QUOTED_STATE'; var SELF_CLOSING_START_TAG_STATE = 'SELF_CLOSING_START_TAG_STATE'; var BOGUS_COMMENT_STATE = 'BOGUS_COMMENT_STATE'; var MARKUP_DECLARATION_OPEN_STATE = 'MARKUP_DECLARATION_OPEN_STATE'; var COMMENT_START_STATE = 'COMMENT_START_STATE'; var COMMENT_START_DASH_STATE = 'COMMENT_START_DASH_STATE'; var COMMENT_STATE = 'COMMENT_STATE'; var COMMENT_LESS_THAN_SIGN_STATE = 'COMMENT_LESS_THAN_SIGN_STATE'; var COMMENT_LESS_THAN_SIGN_BANG_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_STATE'; var COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE'; var COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE'; var COMMENT_END_DASH_STATE = 'COMMENT_END_DASH_STATE'; var COMMENT_END_STATE = 'COMMENT_END_STATE'; var COMMENT_END_BANG_STATE = 'COMMENT_END_BANG_STATE'; var DOCTYPE_STATE = 'DOCTYPE_STATE'; var BEFORE_DOCTYPE_NAME_STATE = 'BEFORE_DOCTYPE_NAME_STATE'; var DOCTYPE_NAME_STATE = 'DOCTYPE_NAME_STATE'; var AFTER_DOCTYPE_NAME_STATE = 'AFTER_DOCTYPE_NAME_STATE'; var AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE = 'AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE'; var BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE'; var DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE'; var DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE'; var AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE'; var BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE = 'BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE'; var AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE = 'AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE'; var BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE'; var DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE'; var DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE'; var AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE'; var BOGUS_DOCTYPE_STATE = 'BOGUS_DOCTYPE_STATE'; var CDATA_SECTION_STATE = 'CDATA_SECTION_STATE'; var CDATA_SECTION_BRACKET_STATE = 'CDATA_SECTION_BRACKET_STATE'; var CDATA_SECTION_END_STATE = 'CDATA_SECTION_END_STATE'; var CHARACTER_REFERENCE_STATE = 'CHARACTER_REFERENCE_STATE'; var NAMED_CHARACTER_REFERENCE_STATE = 'NAMED_CHARACTER_REFERENCE_STATE'; var AMBIGUOUS_AMPERSAND_STATE = 'AMBIGUOS_AMPERSAND_STATE'; var NUMERIC_CHARACTER_REFERENCE_STATE = 'NUMERIC_CHARACTER_REFERENCE_STATE'; var HEXADEMICAL_CHARACTER_REFERENCE_START_STATE = 'HEXADEMICAL_CHARACTER_REFERENCE_START_STATE'; var DECIMAL_CHARACTER_REFERENCE_START_STATE = 'DECIMAL_CHARACTER_REFERENCE_START_STATE'; var HEXADEMICAL_CHARACTER_REFERENCE_STATE = 'HEXADEMICAL_CHARACTER_REFERENCE_STATE'; var DECIMAL_CHARACTER_REFERENCE_STATE = 'DECIMAL_CHARACTER_REFERENCE_STATE'; var NUMERIC_CHARACTER_REFERENCE_END_STATE = 'NUMERIC_CHARACTER_REFERENCE_END_STATE'; //Utils //OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline //this functions if they will be situated in another module due to context switch. //Always perform inlining check before modifying this functions ('node --trace-inlining'). function isWhitespace(cp) { return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED; } function isAsciiDigit(cp) { return cp >= $.DIGIT_0 && cp <= $.DIGIT_9; } function isAsciiUpper(cp) { return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z; } function isAsciiLower(cp) { return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z; } function isAsciiLetter(cp) { return isAsciiLower(cp) || isAsciiUpper(cp); } function isAsciiAlphaNumeric(cp) { return isAsciiLetter(cp) || isAsciiDigit(cp); } function isAsciiUpperHexDigit(cp) { return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_F; } function isAsciiLowerHexDigit(cp) { return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_F; } function isAsciiHexDigit(cp) { return isAsciiDigit(cp) || isAsciiUpperHexDigit(cp) || isAsciiLowerHexDigit(cp); } function toAsciiLowerCodePoint(cp) { return cp + 0x0020; } //NOTE: String.fromCharCode() function can handle only characters from BMP subset. //So, we need to workaround this manually. //(see: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode#Getting_it_to_work_with_higher_values) function toChar(cp) { if (cp <= 0xffff) { return String.fromCharCode(cp); } cp -= 0x10000; return String.fromCharCode(cp >>> 10 & 0x3ff | 0xd800) + String.fromCharCode(0xdc00 | cp & 0x3ff); } function toAsciiLowerChar(cp) { return String.fromCharCode(toAsciiLowerCodePoint(cp)); } function findNamedEntityTreeBranch(nodeIx, cp) { var branchCount = neTree[++nodeIx]; var lo = ++nodeIx; var hi = lo + branchCount - 1; while (lo <= hi) { var mid = lo + hi >>> 1; var midCp = neTree[mid]; if (midCp < cp) { lo = mid + 1; } else if (midCp > cp) { hi = mid - 1; } else { return neTree[mid + branchCount]; } } return -1; } //Tokenizer var Tokenizer = /*#__PURE__*/function () { function Tokenizer() { _classCallCheck(this, Tokenizer); this.preprocessor = new Preprocessor(); this.tokenQueue = []; this.allowCDATA = false; this.state = DATA_STATE; this.returnState = ''; this.charRefCode = -1; this.tempBuff = []; this.lastStartTagName = ''; this.consumedAfterSnapshot = -1; this.active = false; this.currentCharacterToken = null; this.currentToken = null; this.currentAttr = null; } //Errors _createClass(Tokenizer, [{ key: "_err", value: function _err() {// NOTE: err reporting is noop by default. Enabled by mixin. } }, { key: "_errOnNextCodePoint", value: function _errOnNextCodePoint(err) { this._consume(); this._err(err); this._unconsume(); } //API }, { key: "getNextToken", value: function getNextToken() { while (!this.tokenQueue.length && this.active) { this.consumedAfterSnapshot = 0; var cp = this._consume(); if (!this._ensureHibernation()) { this[this.state](cp); } } return this.tokenQueue.shift(); } }, { key: "write", value: function write(chunk, isLastChunk) { this.active = true; this.preprocessor.write(chunk, isLastChunk); } }, { key: "insertHtmlAtCurrentPos", value: function insertHtmlAtCurrentPos(chunk) { this.active = true; this.preprocessor.insertHtmlAtCurrentPos(chunk); } //Hibernation }, { key: "_ensureHibernation", value: function _ensureHibernation() { if (this.preprocessor.endOfChunkHit) { for (; this.consumedAfterSnapshot > 0; this.consumedAfterSnapshot--) { this.preprocessor.retreat(); } this.active = false; this.tokenQueue.push({ type: Tokenizer.HIBERNATION_TOKEN }); return true; } return false; } //Consumption }, { key: "_consume", value: function _consume() { this.consumedAfterSnapshot++; return this.preprocessor.advance(); } }, { key: "_unconsume", value: function _unconsume() { this.consumedAfterSnapshot--; this.preprocessor.retreat(); } }, { key: "_reconsumeInState", value: function _reconsumeInState(state) { this.state = state; this._unconsume(); } }, { key: "_consumeSequenceIfMatch", value: function _consumeSequenceIfMatch(pattern, startCp, caseSensitive) { var consumedCount = 0; var isMatch = true; var patternLength = pattern.length; var patternPos = 0; var cp = startCp; var patternCp = void 0; for (; patternPos < patternLength; patternPos++) { if (patternPos > 0) { cp = this._consume(); consumedCount++; } if (cp === $.EOF) { isMatch = false; break; } patternCp = pattern[patternPos]; if (cp !== patternCp && (caseSensitive || cp !== toAsciiLowerCodePoint(patternCp))) { isMatch = false; break; } } if (!isMatch) { while (consumedCount--) { this._unconsume(); } } return isMatch; } //Temp buffer }, { key: "_isTempBufferEqualToScriptString", value: function _isTempBufferEqualToScriptString() { if (this.tempBuff.length !== $$.SCRIPT_STRING.length) { return false; } for (var i = 0; i < this.tempBuff.length; i++) { if (this.tempBuff[i] !== $$.SCRIPT_STRING[i]) { return false; } } return true; } //Token creation }, { key: "_createStartTagToken", value: function _createStartTagToken() { this.currentToken = { type: Tokenizer.START_TAG_TOKEN, tagName: '', selfClosing: false, ackSelfClosing: false, attrs: [] }; } }, { key: "_createEndTagToken", value: function _createEndTagToken() { this.currentToken = { type: Tokenizer.END_TAG_TOKEN, tagName: '', selfClosing: false, attrs: [] }; } }, { key: "_createCommentToken", value: function _createCommentToken() { this.currentToken = { type: Tokenizer.COMMENT_TOKEN, data: '' }; } }, { key: "_createDoctypeToken", value: function _createDoctypeToken(initialName) { this.currentToken = { type: Tokenizer.DOCTYPE_TOKEN, name: initialName, forceQuirks: false, publicId: null, systemId: null }; } }, { key: "_createCharacterToken", value: function _createCharacterToken(type, ch) { this.currentCharacterToken = { type: type, chars: ch }; } }, { key: "_createEOFToken", value: function _createEOFToken() { this.currentToken = { type: Tokenizer.EOF_TOKEN }; } //Tag attributes }, { key: "_createAttr", value: function _createAttr(attrNameFirstCh) { this.currentAttr = { name: attrNameFirstCh, value: '' }; } }, { key: "_leaveAttrName", value: function _leaveAttrName(toState) { if (Tokenizer.getTokenAttr(this.currentToken, this.currentAttr.name) === null) { this.currentToken.attrs.push(this.currentAttr); } else { this._err(ERR.duplicateAttribute); } this.state = toState; } }, { key: "_leaveAttrValue", value: function _leaveAttrValue(toState) { this.state = toState; } //Token emission }, { key: "_emitCurrentToken", value: function _emitCurrentToken() { this._emitCurrentCharacterToken(); var ct = this.currentToken; this.currentToken = null; //NOTE: store emited start tag's tagName to determine is the following end tag token is appropriate. if (ct.type === Tokenizer.START_TAG_TOKEN) { this.lastStartTagName = ct.tagName; } else if (ct.type === Tokenizer.END_TAG_TOKEN) { if (ct.attrs.length > 0) { this._err(ERR.endTagWithAttributes); } if (ct.selfClosing) { this._err(ERR.endTagWithTrailingSolidus); } } this.tokenQueue.push(ct); } }, { key: "_emitCurrentCharacterToken", value: function _emitCurrentCharacterToken() { if (this.currentCharacterToken) { this.tokenQueue.push(this.currentCharacterToken); this.currentCharacterToken = null; } } }, { key: "_emitEOFToken", value: function _emitEOFToken() { this._createEOFToken(); this._emitCurrentToken(); } //Characters emission //OPTIMIZATION: specification uses only one type of character tokens (one token per character). //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters. //If we have a sequence of characters that belong to the same group, parser can process it //as a single solid character token. //So, there are 3 types of character tokens in parse5: //1)NULL_CHARACTER_TOKEN - \u0000-character sequences (e.g. '\u0000\u0000\u0000') //2)WHITESPACE_CHARACTER_TOKEN - any whitespace/new-line character sequences (e.g. '\n \r\t \f') //3)CHARACTER_TOKEN - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^') }, { key: "_appendCharToCurrentCharacterToken", value: function _appendCharToCurrentCharacterToken(type, ch) { if (this.currentCharacterToken && this.currentCharacterToken.type !== type) { this._emitCurrentCharacterToken(); } if (this.currentCharacterToken) { this.currentCharacterToken.chars += ch; } else { this._createCharacterToken(type, ch); } } }, { key: "_emitCodePoint", value: function _emitCodePoint(cp) { var type = Tokenizer.CHARACTER_TOKEN; if (isWhitespace(cp)) { type = Tokenizer.WHITESPACE_CHARACTER_TOKEN; } else if (cp === $.NULL) { type = Tokenizer.NULL_CHARACTER_TOKEN; } this._appendCharToCurrentCharacterToken(type, toChar(cp)); } }, { key: "_emitSeveralCodePoints", value: function _emitSeveralCodePoints(codePoints) { for (var i = 0; i < codePoints.length; i++) { this._emitCodePoint(codePoints[i]); } } //NOTE: used then we emit character explicitly. This is always a non-whitespace and a non-null character. //So we can avoid additional checks here. }, { key: "_emitChars", value: function _emitChars(ch) { this._appendCharToCurrentCharacterToken(Tokenizer.CHARACTER_TOKEN, ch); } // Character reference helpers }, { key: "_matchNamedCharacterReference", value: function _matchNamedCharacterReference(startCp) { var result = null; var excess = 1; var i = findNamedEntityTreeBranch(0, startCp); this.tempBuff.push(startCp); while (i > -1) { var current = neTree[i]; var inNode = current < MAX_BRANCH_MARKER_VALUE; var nodeWithData = inNode && current & HAS_DATA_FLAG; if (nodeWithData) { //NOTE: we use greedy search, so we continue lookup at this point result = current & DATA_DUPLET_FLAG ? [neTree[++i], neTree[++i]] : [neTree[++i]]; excess = 0; } var cp = this._consume(); this.tempBuff.push(cp); excess++; if (cp === $.EOF) { break; } if (inNode) { i = current & HAS_BRANCHES_FLAG ? findNamedEntityTreeBranch(i, cp) : -1; } else { i = cp === current ? ++i : -1; } } while (excess--) { this.tempBuff.pop(); this._unconsume(); } return result; } }, { key: "_isCharacterReferenceInAttribute", value: function _isCharacterReferenceInAttribute() { return this.returnState === ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE || this.returnState === ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE || this.returnState === ATTRIBUTE_VALUE_UNQUOTED_STATE; } }, { key: "_isCharacterReferenceAttributeQuirk", value: function _isCharacterReferenceAttributeQuirk(withSemicolon) { if (!withSemicolon && this._isCharacterReferenceInAttribute()) { var nextCp = this._consume(); this._unconsume(); return nextCp === $.EQUALS_SIGN || isAsciiAlphaNumeric(nextCp); } return false; } }, { key: "_flushCodePointsConsumedAsCharacterReference", value: function _flushCodePointsConsumedAsCharacterReference() { if (this._isCharacterReferenceInAttribute()) { for (var i = 0; i < this.tempBuff.length; i++) { this.currentAttr.value += toChar(this.tempBuff[i]); } } else { this._emitSeveralCodePoints(this.tempBuff); } this.tempBuff = []; } // State machine // Data state //------------------------------------------------------------------ }, { key: DATA_STATE, value: function value(cp) { this.preprocessor.dropParsedChunk(); if (cp === $.LESS_THAN_SIGN) { this.state = TAG_OPEN_STATE; } else if (cp === $.AMPERSAND) { this.returnState = DATA_STATE; this.state = CHARACTER_REFERENCE_STATE; } else if (cp === $.NULL) { this._err(ERR.unexpectedNullCharacter); this._emitCodePoint(cp); } else if (cp === $.EOF) { this._emitEOFToken(); } else { this._emitCodePoint(cp); } } // RCDATA state //------------------------------------------------------------------ }, { key: RCDATA_STATE, value: function value(cp) { this.preprocessor.dropParsedChunk(); if (cp === $.AMPERSAND) { this.returnState = RCDATA_STATE; this.state = CHARACTER_REFERENCE_STATE; } else if (cp === $.LESS_THAN_SIGN) { this.state = RCDATA_LESS_THAN_SIGN_STATE; } else if (cp === $.NULL) { this._err(ERR.unexpectedNullCharacter); this._emitChars(unicode.REPLACEMENT_CHARACTER); } else if (cp === $.EOF) { this._emitEOFToken(); } else { this._emitCodePoint(cp); } } // RAWTEXT state //------------------------------------------------------------------ }, { key: RAWTEXT_STATE, value: function value(cp) { this.preprocessor.dropParsedChunk(); if (cp === $.LESS_THAN_SIGN) { this.state = RAWTEXT_LESS_THAN_SIGN_STATE; } else if (cp === $.NULL) { this._err(ERR.unexpectedNullCharacter); this._emitChars(unicode.REPLACEMENT_CHARACTER); } else if (cp === $.EOF) { this._emitEOFToken(); } else { this._emitCodePoint(cp); } } // Script data state //------------------------------------------------------------------ }, { key: SCRIPT_DATA_STATE, value: function value(cp) { this.preprocessor.dropParsedChunk(); if (cp === $.LESS_THAN_SIGN) { this.state = SCRIPT_DATA_LESS_THAN_SIGN_STATE; } else if (cp === $.NULL) { this._err(ERR.unexpectedNullCharacter); this._emitChars(unicode.REPLACEMENT_CHARACTER); } else if (cp === $.EOF) { this._emitEOFToken(); } else { this._emitCodePoint(cp); } } // PLAINTEXT state //------------------------------------------------------------------ }, { key: PLAINTEXT_STATE, value: function value(cp) { this.preprocessor.dropParsedChunk(); if (cp === $.NULL) { this._err(ERR.unexpectedNullCharacter); this._emitChars(unicode.REPLACEMENT_CHARACTER); } else if (cp === $.EOF) { this._emitEOFToken(); } else { this._emitCodePoint(cp); } } // Tag open state //----------