summaryrefslogtreecommitdiff
path: root/bin/wiki/ImportarDesdeURL/node_modules/parse5/lib/extensions/position_tracking/preprocessor_mixin.js
diff options
context:
space:
mode:
Diffstat (limited to 'bin/wiki/ImportarDesdeURL/node_modules/parse5/lib/extensions/position_tracking/preprocessor_mixin.js')
-rw-r--r--bin/wiki/ImportarDesdeURL/node_modules/parse5/lib/extensions/position_tracking/preprocessor_mixin.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/bin/wiki/ImportarDesdeURL/node_modules/parse5/lib/extensions/position_tracking/preprocessor_mixin.js b/bin/wiki/ImportarDesdeURL/node_modules/parse5/lib/extensions/position_tracking/preprocessor_mixin.js
new file mode 100644
index 00000000..81995c67
--- /dev/null
+++ b/bin/wiki/ImportarDesdeURL/node_modules/parse5/lib/extensions/position_tracking/preprocessor_mixin.js
@@ -0,0 +1,72 @@
+'use strict';
+
+var Mixin = require('../../utils/mixin'),
+ inherits = require('util').inherits,
+ UNICODE = require('../../common/unicode');
+
+//Aliases
+var $ = UNICODE.CODE_POINTS;
+
+var PositionTrackingPreprocessorMixin = module.exports = function (preprocessor) {
+ // NOTE: avoid installing tracker twice
+ if (!preprocessor.__locTracker) {
+ preprocessor.__locTracker = this;
+
+ Mixin.call(this, preprocessor);
+
+ this.preprocessor = preprocessor;
+ this.isEol = false;
+ this.lineStartPos = 0;
+ this.droppedBufferSize = 0;
+
+ this.col = -1;
+ this.line = 1;
+ }
+
+ return preprocessor.__locTracker;
+};
+
+inherits(PositionTrackingPreprocessorMixin, Mixin);
+
+Object.defineProperty(PositionTrackingPreprocessorMixin.prototype, 'offset', {
+ get: function () {
+ return this.droppedBufferSize + this.preprocessor.pos;
+ }
+});
+
+PositionTrackingPreprocessorMixin.prototype._getOverriddenMethods = function (mxn, orig) {
+ return {
+ advance: function () {
+ var cp = orig.advance.call(this);
+
+ //NOTE: LF should be in the last column of the line
+ if (mxn.isEol) {
+ mxn.isEol = false;
+ mxn.line++;
+ mxn.lineStartPos = mxn.offset;
+ }
+
+ if (cp === $.LINE_FEED)
+ mxn.isEol = true;
+
+ mxn.col = mxn.offset - mxn.lineStartPos + 1;
+
+ return cp;
+ },
+
+ retreat: function () {
+ orig.retreat.call(this);
+ mxn.isEol = false;
+
+ mxn.col = mxn.offset - mxn.lineStartPos + 1;
+ },
+
+ dropParsedChunk: function () {
+ var prevPos = this.pos;
+
+ orig.dropParsedChunk.call(this);
+
+ mxn.droppedBufferSize += prevPos - this.pos;
+ }
+ };
+};