diff options
author | 8rain1ag <asleeppiano@outlook.com> | 2020-02-05 00:13:18 +0300 |
---|---|---|
committer | 8rain1ag <asleeppiano@outlook.com> | 2020-02-05 00:13:18 +0300 |
commit | 5d526501aba7b338a6ff6ac64c21b3bf1d38db30 (patch) | |
tree | 119b31ebb3c0fde7fb7da5d17e4e1f9f47a999bd /assets/node_modules/postcss-selector-parser/dist/tokenize.js |
Initial commit
Diffstat (limited to 'assets/node_modules/postcss-selector-parser/dist/tokenize.js')
-rw-r--r-- | assets/node_modules/postcss-selector-parser/dist/tokenize.js | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/assets/node_modules/postcss-selector-parser/dist/tokenize.js b/assets/node_modules/postcss-selector-parser/dist/tokenize.js new file mode 100644 index 0000000..00bec7f --- /dev/null +++ b/assets/node_modules/postcss-selector-parser/dist/tokenize.js @@ -0,0 +1,217 @@ +'use strict'; + +exports.__esModule = true; +exports.default = tokenize; + +var _tokenTypes = require('./tokenTypes'); + +var t = _interopRequireWildcard(_tokenTypes); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var wordEnd = /[ \n\t\r\(\)\*:;!&'"\+\|~>,=$^\[\]\\]|\/(?=\*)/g; + +function tokenize(input) { + var tokens = []; + var css = input.css.valueOf(); + var _css = css, + length = _css.length; + + var offset = -1; + var line = 1; + var start = 0; + var end = 0; + + var code = void 0, + content = void 0, + endColumn = void 0, + endLine = void 0, + escaped = void 0, + escapePos = void 0, + last = void 0, + lines = void 0, + next = void 0, + nextLine = void 0, + nextOffset = void 0, + quote = void 0, + tokenType = void 0; + + function unclosed(what, fix) { + if (input.safe) { + // fyi: this is never set to true. + css += fix; + next = css.length - 1; + } else { + throw input.error('Unclosed ' + what, line, start - offset, start); + } + } + + while (start < length) { + code = css.charCodeAt(start); + + if (code === t.newline) { + offset = start; + line += 1; + } + + switch (code) { + case t.newline: + case t.space: + case t.tab: + case t.cr: + case t.feed: + next = start; + do { + next += 1; + code = css.charCodeAt(next); + if (code === t.newline) { + offset = next; + line += 1; + } + } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed); + + tokenType = t.space; + endLine = line; + endColumn = start - offset; + end = next; + break; + + case t.plus: + case t.greaterThan: + case t.tilde: + case t.pipe: + next = start; + do { + next += 1; + code = css.charCodeAt(next); + } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe); + + tokenType = t.combinator; + endLine = line; + endColumn = start - offset; + end = next; + break; + + // Consume these characters as single tokens. + case t.asterisk: + case t.ampersand: + case t.comma: + case t.equals: + case t.dollar: + case t.caret: + case t.openSquare: + case t.closeSquare: + case t.colon: + case t.semicolon: + case t.openParenthesis: + case t.closeParenthesis: + next = start; + tokenType = code; + endLine = line; + endColumn = start - offset; + end = next + 1; + break; + + case t.singleQuote: + case t.doubleQuote: + quote = code === t.singleQuote ? "'" : '"'; + next = start; + do { + escaped = false; + next = css.indexOf(quote, next + 1); + if (next === -1) { + unclosed('quote', quote); + } + escapePos = next; + while (css.charCodeAt(escapePos - 1) === t.backslash) { + escapePos -= 1; + escaped = !escaped; + } + } while (escaped); + + tokenType = t.str; + endLine = line; + endColumn = start - offset; + end = next + 1; + break; + + case t.backslash: + next = start; + escaped = true; + while (css.charCodeAt(next + 1) === t.backslash) { + next += 1; + escaped = !escaped; + } + code = css.charCodeAt(next + 1); + if (escaped && code !== t.slash && code !== t.space && code !== t.newline && code !== t.tab && code !== t.cr && code !== t.feed) { + next += 1; + } + + tokenType = t.word; + endLine = line; + endColumn = next - offset; + end = next + 1; + break; + + default: + if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) { + next = css.indexOf('*/', start + 2) + 1; + if (next === 0) { + unclosed('comment', '*/'); + } + + content = css.slice(start, 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; + } + + tokenType = t.comment; + line = nextLine; + endLine = nextLine; + endColumn = next - nextOffset; + } else { + wordEnd.lastIndex = start + 1; + wordEnd.test(css); + if (wordEnd.lastIndex === 0) { + next = css.length - 1; + } else { + next = wordEnd.lastIndex - 2; + } + + tokenType = t.word; + endLine = line; + endColumn = next - offset; + } + + end = next + 1; + break; + } + + // Ensure that the token structure remains consistent + tokens.push([tokenType, // [0] Token type + line, // [1] Starting line + start - offset, // [2] Starting column + endLine, // [3] Ending line + endColumn, // [4] Ending column + start, // [5] Start position / Source index + end]); + + // Reset offset for the next token + if (nextOffset) { + offset = nextOffset; + nextOffset = null; + } + + start = end; + } + + return tokens; +} +module.exports = exports['default'];
\ No newline at end of file |