summaryrefslogtreecommitdiffstats
path: root/node_modules/scss-tokenizer/lib
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/scss-tokenizer/lib
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/scss-tokenizer/lib')
-rw-r--r--node_modules/scss-tokenizer/lib/entry.js21
-rw-r--r--node_modules/scss-tokenizer/lib/input.js57
-rw-r--r--node_modules/scss-tokenizer/lib/previous-map.js105
-rw-r--r--node_modules/scss-tokenizer/lib/tokenize-comment.js148
-rw-r--r--node_modules/scss-tokenizer/lib/tokenize-interpolant.js303
-rw-r--r--node_modules/scss-tokenizer/lib/tokenize-string.js130
-rw-r--r--node_modules/scss-tokenizer/lib/tokenize.js302
7 files changed, 1066 insertions, 0 deletions
diff --git a/node_modules/scss-tokenizer/lib/entry.js b/node_modules/scss-tokenizer/lib/entry.js
new file mode 100644
index 0000000..282c6b6
--- /dev/null
+++ b/node_modules/scss-tokenizer/lib/entry.js
@@ -0,0 +1,21 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _input = require('./input');
+
+var _input2 = _interopRequireDefault(_input);
+
+var _tokenize = require('./tokenize');
+
+var _tokenize2 = _interopRequireDefault(_tokenize);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var scss = {};
+scss.tokenize = function (css) {
+ var input = new _input2.default(css);
+ return (0, _tokenize2.default)(input);
+};
+
+exports.default = scss; \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/input.js b/node_modules/scss-tokenizer/lib/input.js
new file mode 100644
index 0000000..ffbc009
--- /dev/null
+++ b/node_modules/scss-tokenizer/lib/input.js
@@ -0,0 +1,57 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _previousMap = require('./previous-map');
+
+var _previousMap2 = _interopRequireDefault(_previousMap);
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var sequence = 0;
+
+var Input = function () {
+ function Input(css) {
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, Input);
+
+ this.css = css.toString();
+
+ if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') {
+ this.css = this.css.slice(1);
+ }
+
+ if (opts.from) this.file = _path2.default.resolve(opts.from);
+
+ var map = new _previousMap2.default(this.css, opts, this.id);
+ if (map.text) {
+ this.map = map;
+ var file = map.consumer().file;
+ if (!this.file && file) this.file = this.mapResolve(file);
+ }
+
+ if (this.file) {
+ this.from = this.file;
+ } else {
+ sequence += 1;
+ this.id = '<input css ' + sequence + '>';
+ this.from = this.id;
+ }
+ if (this.map) this.map.file = this.from;
+ }
+
+ Input.prototype.mapResolve = function mapResolve(file) {
+ return _path2.default.resolve(this.map.consumer().sourceRoot || '.', file);
+ };
+
+ return Input;
+}();
+
+exports.default = Input; \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/previous-map.js b/node_modules/scss-tokenizer/lib/previous-map.js
new file mode 100644
index 0000000..034e9ca
--- /dev/null
+++ b/node_modules/scss-tokenizer/lib/previous-map.js
@@ -0,0 +1,105 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _jsBase = require('js-base64');
+
+var _sourceMap = require('source-map');
+
+var _sourceMap2 = _interopRequireDefault(_sourceMap);
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+var _fs = require('fs');
+
+var _fs2 = _interopRequireDefault(_fs);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var PreviousMap = function () {
+ function PreviousMap(css, opts) {
+ _classCallCheck(this, PreviousMap);
+
+ this.loadAnnotation(css);
+ this.inline = this.startWith(this.annotation, 'data:');
+
+ var prev = opts.map ? opts.map.prev : undefined;
+ var text = this.loadMap(opts.from, prev);
+ if (text) this.text = text;
+ }
+
+ PreviousMap.prototype.consumer = function consumer() {
+ if (!this.consumerCache) {
+ this.consumerCache = new _sourceMap2.default.SourceMapConsumer(this.text);
+ }
+ return this.consumerCache;
+ };
+
+ PreviousMap.prototype.withContent = function withContent() {
+ return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
+ };
+
+ PreviousMap.prototype.startWith = function startWith(string, start) {
+ if (!string) return false;
+ return string.substr(0, start.length) === start;
+ };
+
+ PreviousMap.prototype.loadAnnotation = function loadAnnotation(css) {
+ var match = css.match(/\/\*\s*# sourceMappingURL=(.*)\s*\*\//);
+ if (match) this.annotation = match[1].trim();
+ };
+
+ PreviousMap.prototype.decodeInline = function decodeInline(text) {
+ var uri = 'data:application/json,';
+ var base64 = 'data:application/json;base64,';
+
+ if (this.startWith(text, uri)) {
+ return decodeURIComponent(text.substr(uri.length));
+ } else if (this.startWith(text, base64)) {
+ return _jsBase.Base64.decode(text.substr(base64.length));
+ } else {
+ var encoding = text.match(/data:application\/json;([^,]+),/)[1];
+ throw new Error('Unsupported source map encoding ' + encoding);
+ }
+ };
+
+ PreviousMap.prototype.loadMap = function loadMap(file, prev) {
+ if (prev === false) return false;
+
+ if (prev) {
+ if (typeof prev === 'string') {
+ return prev;
+ } else if (prev instanceof _sourceMap2.default.SourceMapConsumer) {
+ return _sourceMap2.default.SourceMapGenerator.fromSourceMap(prev).toString();
+ } else if (prev instanceof _sourceMap2.default.SourceMapGenerator) {
+ return prev.toString();
+ } else if ((typeof prev === 'undefined' ? 'undefined' : _typeof(prev)) === 'object' && prev.mappings) {
+ return JSON.stringify(prev);
+ } else {
+ throw new Error('Unsupported previous source map format: ' + prev.toString());
+ }
+ } else if (this.inline) {
+ return this.decodeInline(this.annotation);
+ } else if (this.annotation) {
+ var map = this.annotation;
+ if (file) map = _path2.default.join(_path2.default.dirname(file), map);
+
+ this.root = _path2.default.dirname(map);
+ if (_fs2.default.existsSync && _fs2.default.existsSync(map)) {
+ return _fs2.default.readFileSync(map, 'utf-8').toString().trim();
+ } else {
+ return false;
+ }
+ }
+ };
+
+ return PreviousMap;
+}();
+
+exports.default = PreviousMap; \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/tokenize-comment.js b/node_modules/scss-tokenizer/lib/tokenize-comment.js
new file mode 100644
index 0000000..ade9717
--- /dev/null
+++ b/node_modules/scss-tokenizer/lib/tokenize-comment.js
@@ -0,0 +1,148 @@
+'use strict';
+
+exports.__esModule = true;
+exports.default = tokenize;
+
+var _input = require('./input');
+
+var _input2 = _interopRequireDefault(_input);
+
+var _tokenizeString = require('./tokenize-string');
+
+var _tokenizeString2 = _interopRequireDefault(_tokenizeString);
+
+var _tokenizeInterpolant2 = require('./tokenize-interpolant');
+
+var _tokenizeInterpolant3 = _interopRequireDefault(_tokenizeInterpolant2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var newline = '\n'.charCodeAt(0),
+ space = ' '.charCodeAt(0),
+ feed = '\f'.charCodeAt(0),
+ tab = '\t'.charCodeAt(0),
+ cr = '\r'.charCodeAt(0),
+ hash = '#'.charCodeAt(0),
+ backslash = '\\'.charCodeAt(0),
+ slash = '/'.charCodeAt(0),
+ openCurly = '{'.charCodeAt(0),
+ closeCurly = '}'.charCodeAt(0),
+ asterisk = '*'.charCodeAt(0),
+ wordEnd = /[ \n\t\r\(\)\{\},:;@!'"\\]|\*(?=\/)|#(?={)/g;
+
+function tokenize(input, l, p) {
+ var tokens = [];
+ var css = input.css.valueOf();
+
+ var code = void 0,
+ next = void 0,
+ lines = void 0,
+ last = void 0,
+ content = void 0,
+ escape = void 0,
+ nextLine = void 0,
+ nextOffset = void 0,
+ escaped = void 0,
+ escapePos = void 0,
+ inInterpolant = void 0,
+ inComment = void 0,
+ inString = void 0;
+
+ var length = css.length;
+ var offset = -1;
+ var line = l || 1;
+ var pos = p || 0;
+
+ loop: while (pos < length) {
+ code = css.charCodeAt(pos);
+
+ if (code === newline) {
+ offset = pos;
+ line += 1;
+ }
+
+ switch (code) {
+ case space:
+ case tab:
+ case cr:
+ case feed:
+ next = pos;
+ do {
+ next += 1;
+ code = css.charCodeAt(next);
+ if (code === newline) {
+ offset = next;
+ line += 1;
+ }
+ } while (code === space || code === tab || code === cr || code === feed);
+
+ tokens.push(['space', css.slice(pos, next)]);
+ pos = next - 1;
+ break;
+
+ case newline:
+ tokens.push(['newline', '\n', line, pos - offset]);
+ break;
+
+ case closeCurly:
+ tokens.push(['endInterpolant', '}', line, pos - offset]);
+ break;
+
+ case backslash:
+ next = pos;
+ escape = true;
+ while (css.charCodeAt(next + 1) === backslash) {
+ next += 1;
+ escape = !escape;
+ }
+ code = css.charCodeAt(next + 1);
+ if (escape && code !== slash && code !== space && code !== newline && code !== tab && code !== cr && code !== feed) {
+ next += 1;
+ }
+ tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ default:
+
+ if (code === asterisk && css.charCodeAt(pos + 1) === slash) {
+ next = pos;
+ pos = next - 1;
+ break loop;
+ }
+
+ if (code === hash && css.charCodeAt(pos + 1) === openCurly) {
+ tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]);
+ next = pos + 1;
+
+ var _tokenizeInterpolant = (0, _tokenizeInterpolant3.default)(input, line, next + 1),
+ t = _tokenizeInterpolant.tokens,
+ _p = _tokenizeInterpolant.pos;
+
+ tokens = tokens.concat(t);
+ next = _p;
+
+ pos = next;
+ break;
+ }
+
+ wordEnd.lastIndex = pos + 1;
+ wordEnd.test(css);
+ if (wordEnd.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = wordEnd.lastIndex - 2;
+ }
+
+ tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+
+ pos = next;
+
+ break;
+ }
+
+ pos++;
+ }
+
+ return { tokens: tokens, line: line, pos: pos, offset: offset };
+} \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/tokenize-interpolant.js b/node_modules/scss-tokenizer/lib/tokenize-interpolant.js
new file mode 100644
index 0000000..415771f
--- /dev/null
+++ b/node_modules/scss-tokenizer/lib/tokenize-interpolant.js
@@ -0,0 +1,303 @@
+'use strict';
+
+exports.__esModule = true;
+exports.default = tokenize;
+
+var _input = require('./input');
+
+var _input2 = _interopRequireDefault(_input);
+
+var _tokenizeString2 = require('./tokenize-string');
+
+var _tokenizeString3 = _interopRequireDefault(_tokenizeString2);
+
+var _tokenizeComment2 = require('./tokenize-comment');
+
+var _tokenizeComment3 = _interopRequireDefault(_tokenizeComment2);
+
+var _tokenizeInterpolant2 = require('./tokenize-interpolant');
+
+var _tokenizeInterpolant3 = _interopRequireDefault(_tokenizeInterpolant2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var singleQuote = "'".charCodeAt(0),
+ doubleQuote = '"'.charCodeAt(0),
+ dollar = '$'.charCodeAt(0),
+ hash = '#'.charCodeAt(0),
+ backslash = '\\'.charCodeAt(0),
+ slash = '/'.charCodeAt(0),
+ newline = '\n'.charCodeAt(0),
+ space = ' '.charCodeAt(0),
+ feed = '\f'.charCodeAt(0),
+ tab = '\t'.charCodeAt(0),
+ cr = '\r'.charCodeAt(0),
+ openBracket = '('.charCodeAt(0),
+ closeBracket = ')'.charCodeAt(0),
+ openCurly = '{'.charCodeAt(0),
+ closeCurly = '}'.charCodeAt(0),
+ semicolon = ';'.charCodeAt(0),
+ asterisk = '*'.charCodeAt(0),
+ colon = ':'.charCodeAt(0),
+ at = '@'.charCodeAt(0),
+ comma = ','.charCodeAt(0),
+ plus = '+'.charCodeAt(0),
+ minus = '-'.charCodeAt(0),
+ decComb = '>'.charCodeAt(0),
+ adjComb = '~'.charCodeAt(0),
+ number = /[+-]?(\d+(\.\d+)?|\.\d+)|(e[+-]\d+)/gi,
+ sQuoteEnd = /(.*?)[^\\](?=((#{)|'))/gm,
+ dQuoteEnd = /(.*?)[^\\](?=((#{)|"))/gm,
+ wordEnd = /[ \n\t\r\(\)\{\},:;@!'"\\]|\/(?=\*)|#(?={)/g,
+ ident = /-?([a-z_]|\\[^\\])([a-z-_0-9]|\\[^\\])*/gi;
+
+function tokenize(input, l, p) {
+ var tokens = [];
+ var css = input.css.valueOf();
+
+ var code = void 0,
+ next = void 0,
+ quote = void 0,
+ lines = void 0,
+ last = void 0,
+ content = void 0,
+ escape = void 0,
+ nextLine = void 0,
+ nextOffset = void 0,
+ escaped = void 0,
+ escapePos = void 0,
+ inInterpolant = void 0,
+ inComment = void 0,
+ inString = void 0;
+
+ var length = css.length;
+ var offset = -1;
+ var line = l || 1;
+ var pos = p || 0;
+
+ loop: while (pos < length) {
+ code = css.charCodeAt(pos);
+
+ if (code === newline) {
+ offset = pos;
+ line += 1;
+ }
+
+ switch (code) {
+ case space:
+ case tab:
+ case cr:
+ case feed:
+ next = pos;
+ do {
+ next += 1;
+ code = css.charCodeAt(next);
+ if (code === newline) {
+ offset = next;
+ line += 1;
+ }
+ } while (code === space || code === tab || code === cr || code === feed);
+
+ tokens.push(['space', css.slice(pos, next)]);
+ pos = next - 1;
+ break;
+
+ case newline:
+ tokens.push(['newline', '\n', line, pos - offset]);
+ break;
+
+ case plus:
+ tokens.push(['+', '+', line, pos - offset]);
+ break;
+
+ case minus:
+ tokens.push(['-', '-', line, pos - offset]);
+ break;
+
+ case decComb:
+ tokens.push(['>', '>', line, pos - offset]);
+ break;
+
+ case adjComb:
+ tokens.push(['~', '~', line, pos - offset]);
+ break;
+
+ case openCurly:
+ tokens.push(['{', '{', line, pos - offset]);
+ break;
+
+ case closeCurly:
+ if (inInterpolant) {
+ inInterpolant = false;
+ tokens.push(['endInterpolant', '}', line, pos - offset]);
+ } else {
+ break loop;
+ }
+ break;
+
+ case comma:
+ tokens.push([',', ',', line, pos - offset]);
+ break;
+
+ case dollar:
+ tokens.push(['$', '$', line, pos - offset]);
+ break;
+
+ case colon:
+ tokens.push([':', ':', line, pos - offset]);
+ break;
+
+ case semicolon:
+ tokens.push([';', ';', line, pos - offset]);
+ break;
+
+ case openBracket:
+ tokens.push(['(', '(', line, pos - offset]);
+ break;
+
+ case closeBracket:
+ tokens.push([')', ')', line, pos - offset]);
+ break;
+
+ case singleQuote:
+ case doubleQuote:
+ quote = code === singleQuote ? "'" : '"';
+ tokens.push([quote, quote, line, pos - offset]);
+ next = pos + 1;
+
+ var _tokenizeString = (0, _tokenizeString3.default)(input, line, next, quote),
+ t = _tokenizeString.tokens,
+ _p = _tokenizeString.pos;
+
+ tokens = tokens.concat(t);
+ next = _p;
+
+ pos = next;
+ break;
+
+ case at:
+ tokens.push(['@', '@', line, pos - offset]);
+ break;
+
+ case backslash:
+ next = pos;
+ escape = true;
+ while (css.charCodeAt(next + 1) === backslash) {
+ next += 1;
+ escape = !escape;
+ }
+ code = css.charCodeAt(next + 1);
+ if (escape && code !== space && code !== newline && code !== tab && code !== cr && code !== feed) {
+ next += 1;
+ }
+ tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ default:
+ ident.lastIndex = pos;
+ number.lastIndex = pos;
+ wordEnd.lastIndex = pos;
+
+ if (code === slash && css.charCodeAt(pos + 1) === asterisk) {
+ inComment = true;
+ tokens.push(['startComment', '/*', line, pos + 1 - offset]);
+ next = pos + 1;
+
+ var _tokenizeComment = (0, _tokenizeComment3.default)(input, line, next + 1),
+ _t = _tokenizeComment.tokens,
+ _l = _tokenizeComment.line,
+ _p2 = _tokenizeComment.pos,
+ o = _tokenizeComment.offset;
+
+ tokens = tokens.concat(_t);
+ next = _p2;
+ line = _l;
+ offset = o;
+
+ pos = next;
+ break;
+ }
+
+ if (code === asterisk && css.charCodeAt(pos + 1) !== slash) {
+ tokens.push(['*', '*', line, pos - offset]);
+ break;
+ }
+
+ if (inComment && code === asterisk && css.charCodeAt(pos + 1) === slash) {
+ inComment = false;
+ tokens.push(['endComment', '*/', line, pos + 1 - offset]);
+ pos += 2;
+ break;
+ }
+
+ if (code === slash && css.charCodeAt(pos + 1) !== slash) {
+ tokens.push(['/', '/', line, pos - offset]);
+ pos += 2;
+ break;
+ }
+
+ if (code === hash && css.charCodeAt(pos + 1) === openCurly) {
+ inInterpolant = true;
+ tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]);
+ next = pos + 1;
+
+ var _tokenizeInterpolant = (0, _tokenizeInterpolant3.default)(input, line, next + 1),
+ _t2 = _tokenizeInterpolant.tokens,
+ _p3 = _tokenizeInterpolant.pos;
+
+ tokens = tokens.concat(_t2);
+ next = _p3;
+
+ pos = next;
+ break;
+ }
+
+ if (code === slash && css.charCodeAt(pos + 1) === slash) {
+ next = css.indexOf('\n\n', pos + 2);
+ next = next > 0 ? next : css.length;
+
+ tokens.push(['scssComment', css.slice(pos, next), line, pos - offset, line, next - offset]);
+
+ pos = next;
+ break;
+ }
+
+ if (ident.test(css) && (ident.lastIndex = pos || 1) && ident.exec(css).index === pos) {
+ next = ident.lastIndex - 1;
+
+ tokens.push(['ident', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+
+ pos = next;
+ break;
+ }
+
+ if (number.test(css) && (number.lastIndex = pos || 1) && number.exec(css).index === pos) {
+ next = number.lastIndex - 1;
+
+ tokens.push(['number', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+
+ pos = next;
+ break;
+ }
+
+ wordEnd.lastIndex = pos + 1;
+ wordEnd.test(css);
+ if (wordEnd.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = wordEnd.lastIndex - 2;
+ }
+
+ tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+
+ pos = next;
+
+ break;
+ }
+
+ pos++;
+ }
+
+ return { tokens: tokens, pos: pos };
+} \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/tokenize-string.js b/node_modules/scss-tokenizer/lib/tokenize-string.js
new file mode 100644
index 0000000..55e7af5
--- /dev/null
+++ b/node_modules/scss-tokenizer/lib/tokenize-string.js
@@ -0,0 +1,130 @@
+'use strict';
+
+exports.__esModule = true;
+exports.default = tokenize;
+
+var _input = require('./input');
+
+var _input2 = _interopRequireDefault(_input);
+
+var _tokenizeString = require('./tokenize-string');
+
+var _tokenizeString2 = _interopRequireDefault(_tokenizeString);
+
+var _tokenizeInterpolant2 = require('./tokenize-interpolant');
+
+var _tokenizeInterpolant3 = _interopRequireDefault(_tokenizeInterpolant2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var singleQuote = "'".charCodeAt(0),
+ doubleQuote = '"'.charCodeAt(0),
+ newline = '\n'.charCodeAt(0),
+ space = ' '.charCodeAt(0),
+ feed = '\f'.charCodeAt(0),
+ tab = '\t'.charCodeAt(0),
+ cr = '\r'.charCodeAt(0),
+ hash = '#'.charCodeAt(0),
+ backslash = '\\'.charCodeAt(0),
+ slash = '/'.charCodeAt(0),
+ openCurly = '{'.charCodeAt(0),
+ closeCurly = '}'.charCodeAt(0),
+ interpolantEnd = /([.\s]*?)[^\\](?=(}))/gm,
+ sQuoteEnd = /([.\s]*?)[^\\](?=((#{)|'))/gm,
+ dQuoteEnd = /([.\s]*?)[^\\](?=((#{)|"))/gm;
+
+function tokenize(input, l, p, quote) {
+ var tokens = [];
+ var css = input.css.valueOf();
+
+ var code = void 0,
+ next = void 0,
+ lines = void 0,
+ last = void 0,
+ content = void 0,
+ escape = void 0,
+ nextLine = void 0,
+ nextOffset = void 0,
+ escaped = void 0,
+ escapePos = void 0,
+ inInterpolant = void 0,
+ inComment = void 0,
+ inString = void 0;
+
+ var length = css.length;
+ var offset = -1;
+ var line = l || 1;
+ var pos = p || 0;
+
+ var quoteEnd = quote === "'" ? sQuoteEnd : dQuoteEnd;
+ var quoteChar = quote.charCodeAt(0);
+
+ loop: while (pos < length) {
+ code = css.charCodeAt(pos);
+
+ if (code === newline) {
+ offset = pos;
+ line += 1;
+ }
+
+ switch (code) {
+
+ case closeCurly:
+ tokens.push(['endInterpolant', '}', line, pos - offset]);
+ break;
+
+ case quoteChar:
+ tokens.push([quote, quote, line, pos - offset]);
+ break loop;
+
+ case backslash:
+ next = pos;
+ escape = true;
+ while (css.charCodeAt(next + 1) === backslash) {
+ next += 1;
+ escape = !escape;
+ }
+ code = css.charCodeAt(next + 1);
+ if (escape && code !== slash && code !== space && code !== newline && code !== tab && code !== cr && code !== feed) {
+ next += 1;
+ }
+ tokens.push(['string', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ default:
+ if (code === hash && css.charCodeAt(pos + 1) === openCurly) {
+ tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]);
+ next = pos + 1;
+
+ var _tokenizeInterpolant = (0, _tokenizeInterpolant3.default)(input, line, next + 1),
+ t = _tokenizeInterpolant.tokens,
+ _p = _tokenizeInterpolant.pos;
+
+ tokens = tokens.concat(t);
+ next = _p;
+
+ pos = next;
+ } else {
+ quoteEnd.lastIndex = pos;
+ quoteEnd.test(css);
+
+ if (quoteEnd.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = quoteEnd.lastIndex - 1;
+ }
+
+ tokens.push(['string', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+
+ pos = next;
+ }
+
+ break;
+ }
+
+ pos++;
+ }
+
+ return { tokens: tokens, pos: pos };
+} \ No newline at end of file
diff --git a/node_modules/scss-tokenizer/lib/tokenize.js b/node_modules/scss-tokenizer/lib/tokenize.js
new file mode 100644
index 0000000..4be34fe
--- /dev/null
+++ b/node_modules/scss-tokenizer/lib/tokenize.js
@@ -0,0 +1,302 @@
+'use strict';
+
+exports.__esModule = true;
+exports.default = tokenize;
+
+var _input = require('./input');
+
+var _input2 = _interopRequireDefault(_input);
+
+var _tokenizeString2 = require('./tokenize-string');
+
+var _tokenizeString3 = _interopRequireDefault(_tokenizeString2);
+
+var _tokenizeComment2 = require('./tokenize-comment');
+
+var _tokenizeComment3 = _interopRequireDefault(_tokenizeComment2);
+
+var _tokenizeInterpolant2 = require('./tokenize-interpolant');
+
+var _tokenizeInterpolant3 = _interopRequireDefault(_tokenizeInterpolant2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var singleQuote = "'".charCodeAt(0),
+ doubleQuote = '"'.charCodeAt(0),
+ dollar = '$'.charCodeAt(0),
+ hash = '#'.charCodeAt(0),
+ backslash = '\\'.charCodeAt(0),
+ slash = '/'.charCodeAt(0),
+ newline = '\n'.charCodeAt(0),
+ space = ' '.charCodeAt(0),
+ feed = '\f'.charCodeAt(0),
+ tab = '\t'.charCodeAt(0),
+ cr = '\r'.charCodeAt(0),
+ openBracket = '('.charCodeAt(0),
+ closeBracket = ')'.charCodeAt(0),
+ openCurly = '{'.charCodeAt(0),
+ closeCurly = '}'.charCodeAt(0),
+ semicolon = ';'.charCodeAt(0),
+ asterisk = '*'.charCodeAt(0),
+ colon = ':'.charCodeAt(0),
+ at = '@'.charCodeAt(0),
+ comma = ','.charCodeAt(0),
+ plus = '+'.charCodeAt(0),
+ minus = '-'.charCodeAt(0),
+ decComb = '>'.charCodeAt(0),
+ adjComb = '~'.charCodeAt(0),
+ number = /[+-]?(\d+(\.\d+)?|\.\d+)|(e[+-]\d+)/gi,
+ sQuoteEnd = /(.*?)[^\\](?=((#{)|'))/gm,
+ dQuoteEnd = /(.*?)[^\\](?=((#{)|"))/gm,
+ wordEnd = /[ \n\t\r\(\)\{\},:;@!'"\\]|\/(?=\*)|#(?={)/g,
+ ident = /-?([a-z_]|\\[^\\])([a-z-_0-9]|\\[^\\])*/gi;
+
+function tokenize(input, l, p) {
+ var tokens = [];
+ var css = input.css.valueOf();
+
+ var code = void 0,
+ next = void 0,
+ quote = void 0,
+ lines = void 0,
+ last = void 0,
+ content = void 0,
+ escape = void 0,
+ nextLine = void 0,
+ nextOffset = void 0,
+ escaped = void 0,
+ escapePos = void 0,
+ inInterpolant = void 0,
+ inComment = void 0,
+ inString = void 0;
+
+ var length = css.length;
+ var offset = -1;
+ var line = l || 1;
+ var pos = p || 0;
+
+ while (pos < length) {
+ code = css.charCodeAt(pos);
+
+ if (code === newline) {
+ offset = pos;
+ line += 1;
+ }
+
+ switch (code) {
+ case space:
+ case tab:
+ case cr:
+ case feed:
+ next = pos;
+ do {
+ next += 1;
+ code = css.charCodeAt(next);
+ if (code === newline) {
+ offset = next;
+ line += 1;
+ }
+ } while (code === space || code === tab || code === cr || code === feed);
+
+ tokens.push(['space', css.slice(pos, next)]);
+ pos = next - 1;
+ break;
+
+ case newline:
+ tokens.push(['newline', '\n', line, pos - offset]);
+ break;
+
+ case plus:
+ tokens.push(['+', '+', line, pos - offset]);
+ break;
+
+ case minus:
+ tokens.push(['-', '-', line, pos - offset]);
+ break;
+
+ case decComb:
+ tokens.push(['>', '>', line, pos - offset]);
+ break;
+
+ case adjComb:
+ tokens.push(['~', '~', line, pos - offset]);
+ break;
+
+ case openCurly:
+ tokens.push(['{', '{', line, pos - offset]);
+ break;
+
+ case closeCurly:
+ if (inInterpolant) {
+ inInterpolant = false;
+ tokens.push(['endInterpolant', '}', line, pos - offset]);
+ } else {
+ tokens.push(['}', '}', line, pos - offset]);
+ }
+ break;
+
+ case comma:
+ tokens.push([',', ',', line, pos - offset]);
+ break;
+
+ case dollar:
+ tokens.push(['$', '$', line, pos - offset]);
+ break;
+
+ case colon:
+ tokens.push([':', ':', line, pos - offset]);
+ break;
+
+ case semicolon:
+ tokens.push([';', ';', line, pos - offset]);
+ break;
+
+ case openBracket:
+ tokens.push(['(', '(', line, pos - offset]);
+ break;
+
+ case closeBracket:
+ tokens.push([')', ')', line, pos - offset]);
+ break;
+
+ case singleQuote:
+ case doubleQuote:
+ quote = code === singleQuote ? "'" : '"';
+ tokens.push([quote, quote, line, pos - offset]);
+ next = pos + 1;
+
+ var _tokenizeString = (0, _tokenizeString3.default)(input, line, next, quote),
+ t = _tokenizeString.tokens,
+ _p = _tokenizeString.pos;
+
+ tokens = tokens.concat(t);
+ next = _p;
+
+ pos = next;
+ break;
+
+ case at:
+ tokens.push(['@', '@', line, pos - offset]);
+ break;
+
+ case backslash:
+ next = pos;
+ escape = true;
+ while (css.charCodeAt(next + 1) === backslash) {
+ next += 1;
+ escape = !escape;
+ }
+ code = css.charCodeAt(next + 1);
+ if (escape && code !== space && code !== newline && code !== tab && code !== cr && code !== feed) {
+ next += 1;
+ }
+ tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+ pos = next;
+ break;
+
+ default:
+ ident.lastIndex = pos;
+ number.lastIndex = pos;
+ wordEnd.lastIndex = pos;
+
+ if (code === slash && css.charCodeAt(pos + 1) === asterisk) {
+ inComment = true;
+ tokens.push(['startComment', '/*', line, pos + 1 - offset]);
+ next = pos + 1;
+
+ var _tokenizeComment = (0, _tokenizeComment3.default)(input, line, next + 1),
+ _t = _tokenizeComment.tokens,
+ _l = _tokenizeComment.line,
+ _p2 = _tokenizeComment.pos,
+ o = _tokenizeComment.offset;
+
+ tokens = tokens.concat(_t);
+ next = _p2;
+ line = _l;
+ offset = o;
+
+ pos = next;
+ break;
+ }
+
+ if (code === asterisk && css.charCodeAt(pos + 1) !== slash) {
+ tokens.push(['*', '*', line, pos - offset]);
+ break;
+ }
+
+ if (inComment && code === asterisk && css.charCodeAt(pos + 1) === slash) {
+ inComment = false;
+ tokens.push(['endComment', '*/', line, pos + 1 - offset]);
+ pos += 2;
+ break;
+ }
+
+ if (code === slash && css.charCodeAt(pos + 1) !== slash) {
+ tokens.push(['/', '/', line, pos - offset]);
+ break;
+ }
+
+ if (code === hash && css.charCodeAt(pos + 1) === openCurly) {
+ inInterpolant = true;
+ tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]);
+ next = pos + 1;
+
+ var _tokenizeInterpolant = (0, _tokenizeInterpolant3.default)(input, line, next + 1),
+ _t2 = _tokenizeInterpolant.tokens,
+ _p3 = _tokenizeInterpolant.pos;
+
+ tokens = tokens.concat(_t2);
+ next = _p3;
+
+ pos = next;
+ break;
+ }
+
+ if (code === slash && css.charCodeAt(pos + 1) === slash) {
+ next = css.indexOf('\n', pos + 2);
+ next = (next > 0 ? next : css.length) - 1;
+
+ tokens.push(['scssComment', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+
+ pos = next;
+ break;
+ }
+
+ if (ident.test(css) && (ident.lastIndex = pos || 1) && ident.exec(css).index === pos) {
+ next = ident.lastIndex - 1;
+
+ tokens.push(['ident', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+
+ pos = next;
+ break;
+ }
+
+ if (number.test(css) && (number.lastIndex = pos || 1) && number.exec(css).index === pos) {
+ next = number.lastIndex - 1;
+
+ tokens.push(['number', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+
+ pos = next;
+ break;
+ }
+
+ wordEnd.lastIndex = pos + 1;
+ wordEnd.test(css);
+ if (wordEnd.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = wordEnd.lastIndex - 2;
+ }
+
+ tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
+
+ pos = next;
+
+ break;
+ }
+
+ pos++;
+ }
+
+ return tokens;
+} \ No newline at end of file