aboutsummaryrefslogtreecommitdiff
path: root/node_modules/postcss-selector-parser/dist/tokenize.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/postcss-selector-parser/dist/tokenize.js')
-rw-r--r--node_modules/postcss-selector-parser/dist/tokenize.js231
1 files changed, 231 insertions, 0 deletions
diff --git a/node_modules/postcss-selector-parser/dist/tokenize.js b/node_modules/postcss-selector-parser/dist/tokenize.js
new file mode 100644
index 00000000..acc73b05
--- /dev/null
+++ b/node_modules/postcss-selector-parser/dist/tokenize.js
@@ -0,0 +1,231 @@
+'use strict';
+
+exports.__esModule = true;
+exports.default = tokenize;
+var singleQuote = 39,
+ doubleQuote = 34,
+ backslash = 92,
+ slash = 47,
+ newline = 10,
+ space = 32,
+ feed = 12,
+ tab = 9,
+ cr = 13,
+ plus = 43,
+ gt = 62,
+ tilde = 126,
+ pipe = 124,
+ comma = 44,
+ openBracket = 40,
+ closeBracket = 41,
+ openSq = 91,
+ closeSq = 93,
+ semicolon = 59,
+ asterisk = 42,
+ colon = 58,
+ ampersand = 38,
+ at = 64,
+ atEnd = /[ \n\t\r\{\(\)'"\\;/]/g,
+ wordEnd = /[ \n\t\r\(\)\*:;@!&'"\+\|~>,\[\]\\]|\/(?=\*)/g;
+
+function tokenize(input) {
+ 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;
+
+ var length = css.length;
+ var offset = -1;
+ var line = 1;
+ var pos = 0;
+
+ var unclosed = function unclosed(what, end) {
+ if (input.safe) {
+ css += end;
+ next = css.length - 1;
+ } else {
+ throw input.error('Unclosed ' + what, line, pos - offset, pos);
+ }
+ };
+
+ while (pos < length) {
+ code = css.charCodeAt(pos);
+
+ if (code === newline) {
+ offset = pos;
+ line += 1;
+ }
+
+ switch (code) {
+ case newline:
+ 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 === newline || code === tab || code === cr || code === feed);
+
+ tokens.push(['space', css.slice(pos, next), line, pos - offset, pos]);
+ pos = next - 1;
+ break;
+
+ case plus:
+ case gt:
+ case tilde:
+ case pipe:
+ next = pos;
+ do {
+ next += 1;
+ code = css.charCodeAt(next);
+ } while (code === plus || code === gt || code === tilde || code === pipe);
+ tokens.push(['combinator', css.slice(pos, next), line, pos - offset, pos]);
+ pos = next - 1;
+ break;
+
+ case asterisk:
+ tokens.push(['*', '*', line, pos - offset, pos]);
+ break;
+
+ case ampersand:
+ tokens.push(['&', '&', line, pos - offset, pos]);
+ break;
+
+ case comma:
+ tokens.push([',', ',', line, pos - offset, pos]);
+ break;
+
+ case openSq:
+ tokens.push(['[', '[', line, pos - offset, pos]);
+ break;
+
+ case closeSq:
+ tokens.push([']', ']', line, pos - offset, pos]);
+ break;
+
+ case colon:
+ tokens.push([':', ':', line, pos - offset, pos]);
+ break;
+
+ case semicolon:
+ tokens.push([';', ';', line, pos - offset, pos]);
+ break;
+
+ case openBracket:
+ tokens.push(['(', '(', line, pos - offset, pos]);
+ break;
+
+ case closeBracket:
+ tokens.push([')', ')', line, pos - offset, pos]);
+ break;
+
+ case singleQuote:
+ case doubleQuote:
+ quote = code === singleQuote ? "'" : '"';
+ next = pos;
+ do {
+ escaped = false;
+ next = css.indexOf(quote, next + 1);
+ if (next === -1) {
+ unclosed('quote', quote);
+ }
+ escapePos = next;
+ while (css.charCodeAt(escapePos - 1) === backslash) {
+ escapePos -= 1;
+ escaped = !escaped;
+ }
+ } while (escaped);
+
+ tokens.push(['string', css.slice(pos, next + 1), line, pos - offset, line, next - offset, pos]);
+ pos = next;
+ break;
+
+ case at:
+ atEnd.lastIndex = pos + 1;
+ atEnd.test(css);
+ if (atEnd.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = atEnd.lastIndex - 2;
+ }
+ tokens.push(['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset, pos]);
+ pos = next;
+ 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]);
+ pos = next;
+ break;
+
+ default:
+ if (code === slash && css.charCodeAt(pos + 1) === asterisk) {
+ next = css.indexOf('*/', pos + 2) + 1;
+ if (next === 0) {
+ unclosed('comment', '*/');
+ }
+
+ content = css.slice(pos, next + 1);
+ lines = content.split('\n');
+ last = lines.length - 1;
+
+ if (last > 0) {
+ nextLine = line + last;
+ nextOffset = next - lines[last].length;
+ } else {
+ nextLine = line;
+ nextOffset = offset;
+ }
+
+ tokens.push(['comment', content, line, pos - offset, nextLine, next - nextOffset, pos]);
+
+ offset = nextOffset;
+ line = nextLine;
+ pos = next;
+ } else {
+ 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]);
+ pos = next;
+ }
+
+ break;
+ }
+
+ pos++;
+ }
+
+ return tokens;
+}
+module.exports = exports['default']; \ No newline at end of file