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