UNPKG

28.8 kBJSONView Raw
1{"dependencies":[{"name":"/Users/tevans3/Development/atjson/packages/@atjson/source-prism/package.json","includedInParent":true,"mtime":1553111837746},{"name":"/Users/tevans3/Development/atjson/node_modules/parse5/package.json","includedInParent":true,"mtime":1515875027000},{"name":"../../utils/mixin","loc":{"line":3,"column":20}},{"name":"../../tokenizer","loc":{"line":4,"column":24}},{"name":"../position_tracking/preprocessor_mixin","loc":{"line":5,"column":48}},{"name":"util","loc":{"line":6,"column":23}}],"generated":{"js":"'use strict';\n\nvar Mixin = require('../../utils/mixin'),\n Tokenizer = require('../../tokenizer'),\n PositionTrackingPreprocessorMixin = require('../position_tracking/preprocessor_mixin'),\n inherits = require('util').inherits;\n\nvar LocationInfoTokenizerMixin = module.exports = function (tokenizer) {\n Mixin.call(this, tokenizer);\n\n this.tokenizer = tokenizer;\n this.posTracker = new PositionTrackingPreprocessorMixin(tokenizer.preprocessor);\n this.currentAttrLocation = null;\n this.currentTokenLocation = null;\n};\n\ninherits(LocationInfoTokenizerMixin, Mixin);\n\nLocationInfoTokenizerMixin.prototype._getCurrentLocation = function () {\n return {\n line: this.posTracker.line,\n col: this.posTracker.col,\n startOffset: this.posTracker.offset,\n endOffset: -1\n };\n};\n\nLocationInfoTokenizerMixin.prototype._attachCurrentAttrLocationInfo = function () {\n this.currentAttrLocation.endOffset = this.posTracker.offset;\n\n var currentToken = this.tokenizer.currentToken,\n currentAttr = this.tokenizer.currentAttr;\n\n if (!currentToken.location.attrs)\n currentToken.location.attrs = Object.create(null);\n\n currentToken.location.attrs[currentAttr.name] = this.currentAttrLocation;\n};\n\nLocationInfoTokenizerMixin.prototype._getOverriddenMethods = function (mxn, orig) {\n var methods = {\n _createStartTagToken: function () {\n orig._createStartTagToken.call(this);\n this.currentToken.location = mxn.currentTokenLocation;\n },\n\n _createEndTagToken: function () {\n orig._createEndTagToken.call(this);\n this.currentToken.location = mxn.currentTokenLocation;\n },\n\n _createCommentToken: function () {\n orig._createCommentToken.call(this);\n this.currentToken.location = mxn.currentTokenLocation;\n },\n\n _createDoctypeToken: function (initialName) {\n orig._createDoctypeToken.call(this, initialName);\n this.currentToken.location = mxn.currentTokenLocation;\n },\n\n _createCharacterToken: function (type, ch) {\n orig._createCharacterToken.call(this, type, ch);\n this.currentCharacterToken.location = mxn.currentTokenLocation;\n },\n\n _createAttr: function (attrNameFirstCh) {\n orig._createAttr.call(this, attrNameFirstCh);\n mxn.currentAttrLocation = mxn._getCurrentLocation();\n },\n\n _leaveAttrName: function (toState) {\n orig._leaveAttrName.call(this, toState);\n mxn._attachCurrentAttrLocationInfo();\n },\n\n _leaveAttrValue: function (toState) {\n orig._leaveAttrValue.call(this, toState);\n mxn._attachCurrentAttrLocationInfo();\n },\n\n _emitCurrentToken: function () {\n //NOTE: if we have pending character token make it's end location equal to the\n //current token's start location.\n if (this.currentCharacterToken)\n this.currentCharacterToken.location.endOffset = this.currentToken.location.startOffset;\n\n this.currentToken.location.endOffset = mxn.posTracker.offset + 1;\n orig._emitCurrentToken.call(this);\n },\n\n _emitCurrentCharacterToken: function () {\n //NOTE: if we have character token and it's location wasn't set in the _emitCurrentToken(),\n //then set it's location at the current preprocessor position.\n //We don't need to increment preprocessor position, since character token\n //emission is always forced by the start of the next character token here.\n //So, we already have advanced position.\n if (this.currentCharacterToken && this.currentCharacterToken.location.endOffset === -1)\n this.currentCharacterToken.location.endOffset = mxn.posTracker.offset;\n\n orig._emitCurrentCharacterToken.call(this);\n }\n };\n\n //NOTE: patch initial states for each mode to obtain token start position\n Object.keys(Tokenizer.MODE).forEach(function (modeName) {\n var state = Tokenizer.MODE[modeName];\n\n methods[state] = function (cp) {\n mxn.currentTokenLocation = mxn._getCurrentLocation();\n orig[state].call(this, cp);\n };\n });\n\n return methods;\n};\n\n","map":{"mappings":[{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":1,"column":0},"generated":{"line":1,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":2,"column":0},"generated":{"line":2,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":3,"column":0},"generated":{"line":3,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":4,"column":0},"generated":{"line":4,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":5,"column":0},"generated":{"line":5,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":6,"column":0},"generated":{"line":6,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":7,"column":0},"generated":{"line":7,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":8,"column":0},"generated":{"line":8,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":9,"column":0},"generated":{"line":9,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":10,"column":0},"generated":{"line":10,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":11,"column":0},"generated":{"line":11,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":12,"column":0},"generated":{"line":12,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":13,"column":0},"generated":{"line":13,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":14,"column":0},"generated":{"line":14,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":15,"column":0},"generated":{"line":15,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":16,"column":0},"generated":{"line":16,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":17,"column":0},"generated":{"line":17,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":18,"column":0},"generated":{"line":18,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":19,"column":0},"generated":{"line":19,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":20,"column":0},"generated":{"line":20,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":21,"column":0},"generated":{"line":21,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":22,"column":0},"generated":{"line":22,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":23,"column":0},"generated":{"line":23,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":24,"column":0},"generated":{"line":24,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":25,"column":0},"generated":{"line":25,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":26,"column":0},"generated":{"line":26,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":27,"column":0},"generated":{"line":27,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":28,"column":0},"generated":{"line":28,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":29,"column":0},"generated":{"line":29,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":30,"column":0},"generated":{"line":30,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":31,"column":0},"generated":{"line":31,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":32,"column":0},"generated":{"line":32,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":33,"column":0},"generated":{"line":33,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":34,"column":0},"generated":{"line":34,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":35,"column":0},"generated":{"line":35,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":36,"column":0},"generated":{"line":36,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":37,"column":0},"generated":{"line":37,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":38,"column":0},"generated":{"line":38,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":39,"column":0},"generated":{"line":39,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":40,"column":0},"generated":{"line":40,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":41,"column":0},"generated":{"line":41,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":42,"column":0},"generated":{"line":42,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":43,"column":0},"generated":{"line":43,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":44,"column":0},"generated":{"line":44,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":45,"column":0},"generated":{"line":45,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":46,"column":0},"generated":{"line":46,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":47,"column":0},"generated":{"line":47,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":48,"column":0},"generated":{"line":48,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":49,"column":0},"generated":{"line":49,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":50,"column":0},"generated":{"line":50,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":51,"column":0},"generated":{"line":51,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":52,"column":0},"generated":{"line":52,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":53,"column":0},"generated":{"line":53,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":54,"column":0},"generated":{"line":54,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":55,"column":0},"generated":{"line":55,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":56,"column":0},"generated":{"line":56,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":57,"column":0},"generated":{"line":57,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":58,"column":0},"generated":{"line":58,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":59,"column":0},"generated":{"line":59,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":60,"column":0},"generated":{"line":60,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":61,"column":0},"generated":{"line":61,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":62,"column":0},"generated":{"line":62,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":63,"column":0},"generated":{"line":63,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":64,"column":0},"generated":{"line":64,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":65,"column":0},"generated":{"line":65,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":66,"column":0},"generated":{"line":66,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":67,"column":0},"generated":{"line":67,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":68,"column":0},"generated":{"line":68,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":69,"column":0},"generated":{"line":69,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":70,"column":0},"generated":{"line":70,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":71,"column":0},"generated":{"line":71,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":72,"column":0},"generated":{"line":72,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":73,"column":0},"generated":{"line":73,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":74,"column":0},"generated":{"line":74,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":75,"column":0},"generated":{"line":75,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":76,"column":0},"generated":{"line":76,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":77,"column":0},"generated":{"line":77,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":78,"column":0},"generated":{"line":78,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":79,"column":0},"generated":{"line":79,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":80,"column":0},"generated":{"line":80,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":81,"column":0},"generated":{"line":81,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":82,"column":0},"generated":{"line":82,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":83,"column":0},"generated":{"line":83,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":84,"column":0},"generated":{"line":84,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":85,"column":0},"generated":{"line":85,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":86,"column":0},"generated":{"line":86,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":87,"column":0},"generated":{"line":87,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":88,"column":0},"generated":{"line":88,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":89,"column":0},"generated":{"line":89,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":90,"column":0},"generated":{"line":90,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":91,"column":0},"generated":{"line":91,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":92,"column":0},"generated":{"line":92,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":93,"column":0},"generated":{"line":93,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":94,"column":0},"generated":{"line":94,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":95,"column":0},"generated":{"line":95,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":96,"column":0},"generated":{"line":96,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":97,"column":0},"generated":{"line":97,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":98,"column":0},"generated":{"line":98,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":99,"column":0},"generated":{"line":99,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":100,"column":0},"generated":{"line":100,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":101,"column":0},"generated":{"line":101,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":102,"column":0},"generated":{"line":102,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":103,"column":0},"generated":{"line":103,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":104,"column":0},"generated":{"line":104,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":105,"column":0},"generated":{"line":105,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":106,"column":0},"generated":{"line":106,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":107,"column":0},"generated":{"line":107,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":108,"column":0},"generated":{"line":108,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":109,"column":0},"generated":{"line":109,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":110,"column":0},"generated":{"line":110,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":111,"column":0},"generated":{"line":111,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":112,"column":0},"generated":{"line":112,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":113,"column":0},"generated":{"line":113,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":114,"column":0},"generated":{"line":114,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":115,"column":0},"generated":{"line":115,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":116,"column":0},"generated":{"line":116,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":117,"column":0},"generated":{"line":117,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js","original":{"line":118,"column":0},"generated":{"line":118,"column":0}}],"sources":{"../../../../node_modules/parse5/lib/extensions/location_info/tokenizer_mixin.js":"'use strict';\n\nvar Mixin = require('../../utils/mixin'),\n Tokenizer = require('../../tokenizer'),\n PositionTrackingPreprocessorMixin = require('../position_tracking/preprocessor_mixin'),\n inherits = require('util').inherits;\n\nvar LocationInfoTokenizerMixin = module.exports = function (tokenizer) {\n Mixin.call(this, tokenizer);\n\n this.tokenizer = tokenizer;\n this.posTracker = new PositionTrackingPreprocessorMixin(tokenizer.preprocessor);\n this.currentAttrLocation = null;\n this.currentTokenLocation = null;\n};\n\ninherits(LocationInfoTokenizerMixin, Mixin);\n\nLocationInfoTokenizerMixin.prototype._getCurrentLocation = function () {\n return {\n line: this.posTracker.line,\n col: this.posTracker.col,\n startOffset: this.posTracker.offset,\n endOffset: -1\n };\n};\n\nLocationInfoTokenizerMixin.prototype._attachCurrentAttrLocationInfo = function () {\n this.currentAttrLocation.endOffset = this.posTracker.offset;\n\n var currentToken = this.tokenizer.currentToken,\n currentAttr = this.tokenizer.currentAttr;\n\n if (!currentToken.location.attrs)\n currentToken.location.attrs = Object.create(null);\n\n currentToken.location.attrs[currentAttr.name] = this.currentAttrLocation;\n};\n\nLocationInfoTokenizerMixin.prototype._getOverriddenMethods = function (mxn, orig) {\n var methods = {\n _createStartTagToken: function () {\n orig._createStartTagToken.call(this);\n this.currentToken.location = mxn.currentTokenLocation;\n },\n\n _createEndTagToken: function () {\n orig._createEndTagToken.call(this);\n this.currentToken.location = mxn.currentTokenLocation;\n },\n\n _createCommentToken: function () {\n orig._createCommentToken.call(this);\n this.currentToken.location = mxn.currentTokenLocation;\n },\n\n _createDoctypeToken: function (initialName) {\n orig._createDoctypeToken.call(this, initialName);\n this.currentToken.location = mxn.currentTokenLocation;\n },\n\n _createCharacterToken: function (type, ch) {\n orig._createCharacterToken.call(this, type, ch);\n this.currentCharacterToken.location = mxn.currentTokenLocation;\n },\n\n _createAttr: function (attrNameFirstCh) {\n orig._createAttr.call(this, attrNameFirstCh);\n mxn.currentAttrLocation = mxn._getCurrentLocation();\n },\n\n _leaveAttrName: function (toState) {\n orig._leaveAttrName.call(this, toState);\n mxn._attachCurrentAttrLocationInfo();\n },\n\n _leaveAttrValue: function (toState) {\n orig._leaveAttrValue.call(this, toState);\n mxn._attachCurrentAttrLocationInfo();\n },\n\n _emitCurrentToken: function () {\n //NOTE: if we have pending character token make it's end location equal to the\n //current token's start location.\n if (this.currentCharacterToken)\n this.currentCharacterToken.location.endOffset = this.currentToken.location.startOffset;\n\n this.currentToken.location.endOffset = mxn.posTracker.offset + 1;\n orig._emitCurrentToken.call(this);\n },\n\n _emitCurrentCharacterToken: function () {\n //NOTE: if we have character token and it's location wasn't set in the _emitCurrentToken(),\n //then set it's location at the current preprocessor position.\n //We don't need to increment preprocessor position, since character token\n //emission is always forced by the start of the next character token here.\n //So, we already have advanced position.\n if (this.currentCharacterToken && this.currentCharacterToken.location.endOffset === -1)\n this.currentCharacterToken.location.endOffset = mxn.posTracker.offset;\n\n orig._emitCurrentCharacterToken.call(this);\n }\n };\n\n //NOTE: patch initial states for each mode to obtain token start position\n Object.keys(Tokenizer.MODE).forEach(function (modeName) {\n var state = Tokenizer.MODE[modeName];\n\n methods[state] = function (cp) {\n mxn.currentTokenLocation = mxn._getCurrentLocation();\n orig[state].call(this, cp);\n };\n });\n\n return methods;\n};\n\n"},"lineCount":118}},"hash":"2473695bb423f276a0001d9cb399ef5a","cacheData":{"env":{}}}
\No newline at end of file