You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'use strict';
const Mixin = require('../../utils/mixin');
class PositionTrackingPreprocessorMixin extends Mixin { constructor(preprocessor) { super(preprocessor);
this.preprocessor = preprocessor; this.isEol = false; this.lineStartPos = 0; this.droppedBufferSize = 0;
this.offset = 0; this.col = 0; this.line = 1; }
_getOverriddenMethods(mxn, orig) { return { advance() { const pos = this.pos + 1; const ch = this.html[pos];
//NOTE: LF should be in the last column of the line
if (mxn.isEol) { mxn.isEol = false; mxn.line++; mxn.lineStartPos = pos; }
if (ch === '\n' || (ch === '\r' && this.html[pos + 1] !== '\n')) { mxn.isEol = true; }
mxn.col = pos - mxn.lineStartPos + 1; mxn.offset = mxn.droppedBufferSize + pos;
return orig.advance.call(this); },
retreat() { orig.retreat.call(this);
mxn.isEol = false; mxn.col = this.pos - mxn.lineStartPos + 1; },
dropParsedChunk() { const prevPos = this.pos;
orig.dropParsedChunk.call(this);
const reduction = prevPos - this.pos;
mxn.lineStartPos -= reduction; mxn.droppedBufferSize += reduction; mxn.offset = mxn.droppedBufferSize + this.pos; } }; } }
module.exports = PositionTrackingPreprocessorMixin;
|