12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- '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;
|