Sha256: cd0f19b65bb7a5611da8895b8b339fd427719e6bd4bfa835a0a35f75dd5cebcf

Contents?: true

Size: 1.67 KB

Versions: 22

Compression:

Stored size: 1.67 KB

Contents

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

Version data entries

22 entries across 22 versions & 2 rubygems

Version Path
appmap-0.72.2 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.72.1 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.72.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.71.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.70.2 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.70.1 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.70.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.69.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.68.2 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.68.1 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.68.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.67.1 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.67.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.66.2 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.66.1 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.66.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.65.1 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.65.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.64.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js
appmap-0.63.0 ./node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js