UNPKG

parse5-ns

Version:

My non-standard fork of parse5, the HTML parser and serializer.

49 lines (39 loc) 1.73 kB
import { ErrorReportingMixinBase } from './mixin-base.js'; import { ErrorReportingTokenizerMixin } from './tokenizer-mixin.js'; import { LocationInfoTokenizerMixin } from '../location-info/tokenizer-mixin.js'; import { Mixin } from '../../utils/mixin.js'; export class ErrorReportingParserMixin extends ErrorReportingMixinBase { constructor(parser, opts) { super(parser, opts); this.opts = opts; this.ctLoc = null; this.locBeforeToken = false; } _setErrorLocation(err) { if (this.ctLoc) { err.startLine = this.ctLoc.startLine; err.startCol = this.ctLoc.startCol; err.startOffset = this.ctLoc.startOffset; err.endLine = this.locBeforeToken ? this.ctLoc.startLine : this.ctLoc.endLine; err.endCol = this.locBeforeToken ? this.ctLoc.startCol : this.ctLoc.endCol; err.endOffset = this.locBeforeToken ? this.ctLoc.startOffset : this.ctLoc.endOffset; } } _getOverriddenMethods(mxn, orig) { return { _bootstrap(document, fragmentContext) { orig._bootstrap.call(this, document, fragmentContext); Mixin.install(this.tokenizer, ErrorReportingTokenizerMixin, mxn.opts); Mixin.install(this.tokenizer, LocationInfoTokenizerMixin); }, _processInputToken(token) { mxn.ctLoc = token.location; orig._processInputToken.call(this, token); }, _err(code, options) { mxn.locBeforeToken = options && options.beforeToken; mxn._reportError(code); }, }; } }