UNPKG

@desertnet/html-parser

Version:

HTML parser and non-strict validator

159 lines (130 loc) 8.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Class for recording syntactic and semantic HTML errors. */ var HTMLParseError = function () { function HTMLParseError() { _classCallCheck(this, HTMLParseError); /** * @private * @type {string} message */ this._message = "Unknown parse error"; /** * @private * @type {Array.<Foundation.Scanner.Token>} */ this._tokens = []; } /** * @param {string} message */ _createClass(HTMLParseError, [{ key: "addToken", /** * @param {Foundation.Scanner.Token} token */ value: function addToken(token) { this._tokens.push(token); this._tokens.sort(function (a, b) { return a.index < b.index ? -1 : 1; }); } /** * @param {Foundation.HTML.Parser.HTMLNode} node */ }, { key: "addTokensFromNode", value: function addTokensFromNode(node) { var _this = this; node.tokens.forEach(function (token) { return _this.addToken(token); }); } /** * The offset in the source string where the error begins. * @public * @return {number} */ }, { key: "assertTokensHaveBeenAdded", /** * @private */ value: function assertTokensHaveBeenAdded() { if (this._tokens.length === 0) { throw new Error("No tokens added to error object."); } } /** * @private * @return {Array.<Foundation.Scanner.Token>} */ }, { key: "message", set: function set(message) { this._message = message; } /** * @public * @return {string} */ , get: function get() { return this._message; } }, { key: "startIndex", get: function get() { this.assertTokensHaveBeenAdded(); return this._tokens[0].index; } /** * The offset in the source string where the error stops. * @public * @return {number} */ }, { key: "endIndex", get: function get() { this.assertTokensHaveBeenAdded(); var lastToken = this._tokens[this._tokens.length - 1]; return lastToken.index + lastToken.value.length; } /** * The line number in the source string where the error begins. * @public * @return {number} */ }, { key: "line", get: function get() { this.assertTokensHaveBeenAdded(); return this._tokens[0].line; } /** * The column number of the line in the source string where the error begins. * @public * @return {number} */ }, { key: "column", get: function get() { this.assertTokensHaveBeenAdded(); return this._tokens[0].column; } }, { key: "tokens", get: function get() { return this._tokens.slice(0); } }]); return HTMLParseError; }(); exports.default = HTMLParseError; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9IVE1MUGFyc2VFcnJvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7OztJQUdxQixjO0FBQ25CLDRCQUFlO0FBQUE7O0FBQ2I7Ozs7QUFJQSxTQUFLLFFBQUwsR0FBZ0IscUJBQWhCOztBQUVBOzs7O0FBSUEsU0FBSyxPQUFMLEdBQWUsRUFBZjtBQUNEOztBQUVEOzs7Ozs7Ozs7QUFlQTs7OzZCQUdVLEssRUFBTztBQUNmLFdBQUssT0FBTCxDQUFhLElBQWIsQ0FBa0IsS0FBbEI7QUFDQSxXQUFLLE9BQUwsQ0FBYSxJQUFiLENBQWtCLFVBQUMsQ0FBRCxFQUFJLENBQUo7QUFBQSxlQUFXLEVBQUUsS0FBRixHQUFVLEVBQUUsS0FBYixHQUFzQixDQUFDLENBQXZCLEdBQTJCLENBQXJDO0FBQUEsT0FBbEI7QUFDRDs7QUFFRDs7Ozs7O3NDQUdtQixJLEVBQU07QUFBQTs7QUFDdkIsV0FBSyxNQUFMLENBQVksT0FBWixDQUFvQjtBQUFBLGVBQVMsTUFBSyxRQUFMLENBQWMsS0FBZCxDQUFUO0FBQUEsT0FBcEI7QUFDRDs7QUFFRDs7Ozs7Ozs7OztBQXlDQTs7O2dEQUc2QjtBQUMzQixVQUFJLEtBQUssT0FBTCxDQUFhLE1BQWIsS0FBd0IsQ0FBNUIsRUFBK0I7QUFDN0IsY0FBTSxJQUFJLEtBQUosQ0FBVSxrQ0FBVixDQUFOO0FBQ0Q7QUFDRjs7QUFFRDs7Ozs7OztzQkE3RWEsTyxFQUFTO0FBQ3BCLFdBQUssUUFBTCxHQUFnQixPQUFoQjtBQUNEOztBQUVEOzs7Ozt3QkFJZTtBQUNiLGFBQU8sS0FBSyxRQUFaO0FBQ0Q7Ozt3QkFzQmlCO0FBQ2hCLFdBQUsseUJBQUw7QUFDQSxhQUFPLEtBQUssT0FBTCxDQUFhLENBQWIsRUFBZ0IsS0FBdkI7QUFDRDs7QUFFRDs7Ozs7Ozs7d0JBS2dCO0FBQ2QsV0FBSyx5QkFBTDtBQUNBLFVBQUksWUFBWSxLQUFLLE9BQUwsQ0FBYSxLQUFLLE9BQUwsQ0FBYSxNQUFiLEdBQXNCLENBQW5DLENBQWhCO0FBQ0EsYUFBTyxVQUFVLEtBQVYsR0FBa0IsVUFBVSxLQUFWLENBQWdCLE1BQXpDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7O3dCQUtZO0FBQ1YsV0FBSyx5QkFBTDtBQUNBLGFBQU8sS0FBSyxPQUFMLENBQWEsQ0FBYixFQUFnQixJQUF2QjtBQUNEOztBQUVEOzs7Ozs7Ozt3QkFLYztBQUNaLFdBQUsseUJBQUw7QUFDQSxhQUFPLEtBQUssT0FBTCxDQUFhLENBQWIsRUFBZ0IsTUFBdkI7QUFDRDs7O3dCQWVhO0FBQ1osYUFBTyxLQUFLLE9BQUwsQ0FBYSxLQUFiLENBQW1CLENBQW5CLENBQVA7QUFDRDs7Ozs7O2tCQXJHa0IsYyIsImZpbGUiOiJIVE1MUGFyc2VFcnJvci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhc3MgZm9yIHJlY29yZGluZyBzeW50YWN0aWMgYW5kIHNlbWFudGljIEhUTUwgZXJyb3JzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIVE1MUGFyc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICAgKi9cbiAgICB0aGlzLl9tZXNzYWdlID0gXCJVbmtub3duIHBhcnNlIGVycm9yXCI7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtBcnJheS48Rm91bmRhdGlvbi5TY2FubmVyLlRva2VuPn1cbiAgICAgKi9cbiAgICB0aGlzLl90b2tlbnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKi9cbiAgc2V0IG1lc3NhZ2UgKG1lc3NhZ2UpIHtcbiAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdldCBtZXNzYWdlICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0ZvdW5kYXRpb24uU2Nhbm5lci5Ub2tlbn0gdG9rZW5cbiAgICovXG4gIGFkZFRva2VuICh0b2tlbikge1xuICAgIHRoaXMuX3Rva2Vucy5wdXNoKHRva2VuKTtcbiAgICB0aGlzLl90b2tlbnMuc29ydCgoYSwgYikgPT4gKGEuaW5kZXggPCBiLmluZGV4KSA/IC0xIDogMSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtGb3VuZGF0aW9uLkhUTUwuUGFyc2VyLkhUTUxOb2RlfSBub2RlXG4gICAqL1xuICBhZGRUb2tlbnNGcm9tTm9kZSAobm9kZSkge1xuICAgIG5vZGUudG9rZW5zLmZvckVhY2godG9rZW4gPT4gdGhpcy5hZGRUb2tlbih0b2tlbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBzdHJpbmcgd2hlcmUgdGhlIGVycm9yIGJlZ2lucy5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgc3RhcnRJbmRleCAoKSB7XG4gICAgdGhpcy5hc3NlcnRUb2tlbnNIYXZlQmVlbkFkZGVkKCk7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2Vuc1swXS5pbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb2Zmc2V0IGluIHRoZSBzb3VyY2Ugc3RyaW5nIHdoZXJlIHRoZSBlcnJvciBzdG9wcy5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgZW5kSW5kZXggKCkge1xuICAgIHRoaXMuYXNzZXJ0VG9rZW5zSGF2ZUJlZW5BZGRlZCgpO1xuICAgIHZhciBsYXN0VG9rZW4gPSB0aGlzLl90b2tlbnNbdGhpcy5fdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBsYXN0VG9rZW4uaW5kZXggKyBsYXN0VG9rZW4udmFsdWUubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5lIG51bWJlciBpbiB0aGUgc291cmNlIHN0cmluZyB3aGVyZSB0aGUgZXJyb3IgYmVnaW5zLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIGdldCBsaW5lICgpIHtcbiAgICB0aGlzLmFzc2VydFRva2Vuc0hhdmVCZWVuQWRkZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5zWzBdLmxpbmU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIGxpbmUgaW4gdGhlIHNvdXJjZSBzdHJpbmcgd2hlcmUgdGhlIGVycm9yIGJlZ2lucy5cbiAgICogQHB1YmxpY1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgY29sdW1uICgpIHtcbiAgICB0aGlzLmFzc2VydFRva2Vuc0hhdmVCZWVuQWRkZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5zWzBdLmNvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXNzZXJ0VG9rZW5zSGF2ZUJlZW5BZGRlZCAoKSB7XG4gICAgaWYgKHRoaXMuX3Rva2Vucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHRva2VucyBhZGRlZCB0byBlcnJvciBvYmplY3QuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHtBcnJheS48Rm91bmRhdGlvbi5TY2FubmVyLlRva2VuPn1cbiAgICovXG4gIGdldCB0b2tlbnMgKCkge1xuICAgIHJldHVybiB0aGlzLl90b2tlbnMuc2xpY2UoMCk7XG4gIH1cbn1cbiJdfQ==