53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const ErrorReportingMixinBase = require('./mixin-base');
 | |
| const ErrorReportingTokenizerMixin = require('./tokenizer-mixin');
 | |
| const LocationInfoTokenizerMixin = require('../location-info/tokenizer-mixin');
 | |
| const Mixin = require('../../utils/mixin');
 | |
| 
 | |
| 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);
 | |
|             }
 | |
|         };
 | |
|     }
 | |
| }
 | |
| 
 | |
| module.exports = ErrorReportingParserMixin;
 |