source: frontend/node_modules/postcss-selector-parser/dist/tokenize.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 11 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 8.3 KB
Line 
1"use strict";
2
3exports.__esModule = true;
4exports.FIELDS = void 0;
5exports["default"] = tokenize;
6var t = _interopRequireWildcard(require("./tokenTypes"));
7var _unescapable, _wordDelimiters;
8function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
9function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10var unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);
11var wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);
12var hex = {};
13var hexChars = "0123456789abcdefABCDEF";
14for (var i = 0; i < hexChars.length; i++) {
15 hex[hexChars.charCodeAt(i)] = true;
16}
17
18/**
19 * Returns the last index of the bar css word
20 * @param {string} css The string in which the word begins
21 * @param {number} start The index into the string where word's first letter occurs
22 */
23function consumeWord(css, start) {
24 var next = start;
25 var code;
26 do {
27 code = css.charCodeAt(next);
28 if (wordDelimiters[code]) {
29 return next - 1;
30 } else if (code === t.backslash) {
31 next = consumeEscape(css, next) + 1;
32 } else {
33 // All other characters are part of the word
34 next++;
35 }
36 } while (next < css.length);
37 return next - 1;
38}
39
40/**
41 * Returns the last index of the escape sequence
42 * @param {string} css The string in which the sequence begins
43 * @param {number} start The index into the string where escape character (`\`) occurs.
44 */
45function consumeEscape(css, start) {
46 var next = start;
47 var code = css.charCodeAt(next + 1);
48 if (unescapable[code]) {
49 // just consume the escape char
50 } else if (hex[code]) {
51 var hexDigits = 0;
52 // consume up to 6 hex chars
53 do {
54 next++;
55 hexDigits++;
56 code = css.charCodeAt(next + 1);
57 } while (hex[code] && hexDigits < 6);
58 // if fewer than 6 hex chars, a trailing space ends the escape
59 if (hexDigits < 6 && code === t.space) {
60 next++;
61 }
62 } else {
63 // the next char is part of the current word
64 next++;
65 }
66 return next;
67}
68var FIELDS = {
69 TYPE: 0,
70 START_LINE: 1,
71 START_COL: 2,
72 END_LINE: 3,
73 END_COL: 4,
74 START_POS: 5,
75 END_POS: 6
76};
77exports.FIELDS = FIELDS;
78function tokenize(input) {
79 var tokens = [];
80 var css = input.css.valueOf();
81 var _css = css,
82 length = _css.length;
83 var offset = -1;
84 var line = 1;
85 var start = 0;
86 var end = 0;
87 var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;
88 function unclosed(what, fix) {
89 if (input.safe) {
90 // fyi: this is never set to true.
91 css += fix;
92 next = css.length - 1;
93 } else {
94 throw input.error('Unclosed ' + what, line, start - offset, start);
95 }
96 }
97 while (start < length) {
98 code = css.charCodeAt(start);
99 if (code === t.newline) {
100 offset = start;
101 line += 1;
102 }
103 switch (code) {
104 case t.space:
105 case t.tab:
106 case t.newline:
107 case t.cr:
108 case t.feed:
109 next = start;
110 do {
111 next += 1;
112 code = css.charCodeAt(next);
113 if (code === t.newline) {
114 offset = next;
115 line += 1;
116 }
117 } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);
118 tokenType = t.space;
119 endLine = line;
120 endColumn = next - offset - 1;
121 end = next;
122 break;
123 case t.plus:
124 case t.greaterThan:
125 case t.tilde:
126 case t.pipe:
127 next = start;
128 do {
129 next += 1;
130 code = css.charCodeAt(next);
131 } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);
132 tokenType = t.combinator;
133 endLine = line;
134 endColumn = start - offset;
135 end = next;
136 break;
137
138 // Consume these characters as single tokens.
139 case t.asterisk:
140 case t.ampersand:
141 case t.bang:
142 case t.comma:
143 case t.equals:
144 case t.dollar:
145 case t.caret:
146 case t.openSquare:
147 case t.closeSquare:
148 case t.colon:
149 case t.semicolon:
150 case t.openParenthesis:
151 case t.closeParenthesis:
152 next = start;
153 tokenType = code;
154 endLine = line;
155 endColumn = start - offset;
156 end = next + 1;
157 break;
158 case t.singleQuote:
159 case t.doubleQuote:
160 quote = code === t.singleQuote ? "'" : '"';
161 next = start;
162 do {
163 escaped = false;
164 next = css.indexOf(quote, next + 1);
165 if (next === -1) {
166 unclosed('quote', quote);
167 }
168 escapePos = next;
169 while (css.charCodeAt(escapePos - 1) === t.backslash) {
170 escapePos -= 1;
171 escaped = !escaped;
172 }
173 } while (escaped);
174 tokenType = t.str;
175 endLine = line;
176 endColumn = start - offset;
177 end = next + 1;
178 break;
179 default:
180 if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {
181 next = css.indexOf('*/', start + 2) + 1;
182 if (next === 0) {
183 unclosed('comment', '*/');
184 }
185 content = css.slice(start, next + 1);
186 lines = content.split('\n');
187 last = lines.length - 1;
188 if (last > 0) {
189 nextLine = line + last;
190 nextOffset = next - lines[last].length;
191 } else {
192 nextLine = line;
193 nextOffset = offset;
194 }
195 tokenType = t.comment;
196 line = nextLine;
197 endLine = nextLine;
198 endColumn = next - nextOffset;
199 } else if (code === t.slash) {
200 next = start;
201 tokenType = code;
202 endLine = line;
203 endColumn = start - offset;
204 end = next + 1;
205 } else {
206 next = consumeWord(css, start);
207 tokenType = t.word;
208 endLine = line;
209 endColumn = next - offset;
210 }
211 end = next + 1;
212 break;
213 }
214
215 // Ensure that the token structure remains consistent
216 tokens.push([tokenType,
217 // [0] Token type
218 line,
219 // [1] Starting line
220 start - offset,
221 // [2] Starting column
222 endLine,
223 // [3] Ending line
224 endColumn,
225 // [4] Ending column
226 start,
227 // [5] Start position / Source index
228 end // [6] End position
229 ]);
230
231 // Reset offset for the next token
232 if (nextOffset) {
233 offset = nextOffset;
234 nextOffset = null;
235 }
236 start = end;
237 }
238 return tokens;
239}
Note: See TracBrowser for help on using the repository browser.