aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-css-plugin/src/main/resources/tokenize.js
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-css-plugin/src/main/resources/tokenize.js')
-rw-r--r--sonar-css-plugin/src/main/resources/tokenize.js374
1 files changed, 0 insertions, 374 deletions
diff --git a/sonar-css-plugin/src/main/resources/tokenize.js b/sonar-css-plugin/src/main/resources/tokenize.js
deleted file mode 100644
index bbf9b1b..0000000
--- a/sonar-css-plugin/src/main/resources/tokenize.js
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * SonarCSS
- * Copyright (C) 2018-2018 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/*
- * The MIT License (MIT)
- *
- * Copyright 2013 Andrey Sitnik <andrey@sitnik.ru>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-var SINGLE_QUOTE = '\''.charCodeAt(0);
-var DOUBLE_QUOTE = '"'.charCodeAt(0);
-var BACKSLASH = '\\'.charCodeAt(0);
-var SLASH = '/'.charCodeAt(0);
-var NEWLINE = '\n'.charCodeAt(0);
-var SPACE = ' '.charCodeAt(0);
-var FEED = '\f'.charCodeAt(0);
-var TAB = '\t'.charCodeAt(0);
-var CR = '\r'.charCodeAt(0);
-var OPEN_SQUARE = '['.charCodeAt(0);
-var CLOSE_SQUARE = ']'.charCodeAt(0);
-var OPEN_PARENTHESES = '('.charCodeAt(0);
-var CLOSE_PARENTHESES = ')'.charCodeAt(0);
-var OPEN_CURLY = '{'.charCodeAt(0);
-var CLOSE_CURLY = '}'.charCodeAt(0);
-var SEMICOLON = ';'.charCodeAt(0);
-var ASTERISK = '*'.charCodeAt(0);
-var COLON = ':'.charCodeAt(0);
-var AT = '@'.charCodeAt(0);
-
-var RE_AT_END = /[ \n\t\r\f\{\(\)'"\\;/\[\]#]/g;
-var RE_WORD_END = /[ \n\t\r\f\(\)\{\}:;@!'"\\\]\[#]|\/(?=\*)/g;
-var RE_BAD_BRACKET = /.[\\\/\("'\n]/;
-var RE_HEX_ESCAPE = /[a-f0-9]/i;
-
-function tokenize(css) {
- var input = {css: css, error: function() {}};
- var processor = tokenizer(input);
- var tokens = [];
- while (!processor.endOfFile()) {
- tokens.push(processor.nextToken());
- }
- return tokens;
-}
-
-function tokenizer(input ) {
- var options = {};
- var css = input.css.valueOf();
- var ignore = options.ignoreErrors;
-
- var code, next, quote, lines, last, content, escape,
- nextLine, nextOffset, escaped, escapePos, prev, n, currentToken;
-
- var length = css.length;
- var offset = -1;
- var line = 1;
- var pos = 0;
- var buffer = [];
- var returned = [];
-
- function unclosed(what) {
- throw input.error('Unclosed ' + what, line, pos - offset);
- }
-
- function endOfFile() {
- return returned.length === 0 && pos >= length;
- }
-
- function nextToken() {
- if ( returned.length ) return returned.pop();
- if ( pos >= length ) return;
-
- code = css.charCodeAt(pos);
- if ( code === NEWLINE || code === FEED ||
- code === CR && css.charCodeAt(pos + 1) !== 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 );
-
- currentToken = ['space', css.slice(pos, next)];
- pos = next - 1;
- break;
-
- case OPEN_SQUARE:
- currentToken = ['[', '[', line, pos - offset];
- break;
-
- case CLOSE_SQUARE:
- currentToken = [']', ']', line, pos - offset];
- break;
-
- case OPEN_CURLY:
- currentToken = ['{', '{', line, pos - offset];
- break;
-
- case CLOSE_CURLY:
- currentToken = ['}', '}', line, pos - offset];
- break;
-
- case COLON:
- currentToken = [':', ':', line, pos - offset];
- break;
-
- case SEMICOLON:
- currentToken = [';', ';', line, pos - offset];
- break;
-
- case OPEN_PARENTHESES:
- prev = buffer.length ? buffer.pop()[1] : '';
- n = css.charCodeAt(pos + 1);
- if ( prev === 'url' &&
- n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE &&
- n !== SPACE && n !== NEWLINE && n !== TAB &&
- n !== FEED && n !== CR ) {
- next = pos;
- do {
- escaped = false;
- next = css.indexOf(')', next + 1);
- if ( next === -1 ) {
- if ( ignore ) {
- next = pos;
- break;
- } else {
- unclosed('bracket');
- }
- }
- escapePos = next;
- while ( css.charCodeAt(escapePos - 1) === BACKSLASH ) {
- escapePos -= 1;
- escaped = !escaped;
- }
- } while ( escaped );
-
- currentToken = ['brackets', css.slice(pos, next + 1),
- line, pos - offset,
- line, next - offset
- ];
-
- pos = next;
-
- } else {
- next = css.indexOf(')', pos + 1);
- content = css.slice(pos, next + 1);
-
- if ( next === -1 || RE_BAD_BRACKET.test(content) ) {
- currentToken = ['(', '(', line, pos - offset];
- } else {
- currentToken = ['brackets', content,
- line, pos - offset,
- line, next - offset
- ];
- pos = next;
- }
- }
-
- break;
-
- case CLOSE_PARENTHESES:
- currentToken = [')', ')', line, pos - offset];
- break;
-
- case SINGLE_QUOTE:
- case DOUBLE_QUOTE:
- quote = code === SINGLE_QUOTE ? '\'' : '"';
- next = pos;
- do {
- escaped = false;
- next = css.indexOf(quote, next + 1);
- if ( next === -1 ) {
- if ( ignore ) {
- next = pos + 1;
- break;
- } else {
- unclosed('string');
- }
- }
- escapePos = next;
- while ( css.charCodeAt(escapePos - 1) === BACKSLASH ) {
- escapePos -= 1;
- escaped = !escaped;
- }
- } while ( escaped );
-
- 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;
- }
-
- currentToken = ['string', css.slice(pos, next + 1),
- line, pos - offset,
- nextLine, next - nextOffset
- ];
-
- offset = nextOffset;
- line = nextLine;
- pos = next;
- break;
-
- case AT:
- RE_AT_END.lastIndex = pos + 1;
- RE_AT_END.test(css);
- if ( RE_AT_END.lastIndex === 0 ) {
- next = css.length - 1;
- } else {
- next = RE_AT_END.lastIndex - 2;
- }
-
- currentToken = ['at-word', css.slice(pos, next + 1),
- line, pos - offset,
- line, next - offset
- ];
-
- 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;
- if ( RE_HEX_ESCAPE.test(css.charAt(next)) ) {
- while ( RE_HEX_ESCAPE.test(css.charAt(next + 1)) ) {
- next += 1;
- }
- if ( css.charCodeAt(next + 1) === SPACE ) {
- next += 1;
- }
- }
- }
-
- currentToken = ['word', css.slice(pos, next + 1),
- line, pos - offset,
- line, next - offset
- ];
-
- pos = next;
- break;
-
- default:
- if ( code === SLASH && css.charCodeAt(pos + 1) === ASTERISK ) {
- next = css.indexOf('*/', pos + 2) + 1;
- if ( next === 0 ) {
- if ( ignore ) {
- next = css.length;
- } else {
- 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;
- }
-
- currentToken = ['comment', content,
- line, pos - offset,
- nextLine, next - nextOffset
- ];
-
- offset = nextOffset;
- line = nextLine;
- pos = next;
-
- } else {
- RE_WORD_END.lastIndex = pos + 1;
- RE_WORD_END.test(css);
- if ( RE_WORD_END.lastIndex === 0 ) {
- next = css.length - 1;
- } else {
- next = RE_WORD_END.lastIndex - 2;
- }
-
- currentToken = ['word', css.slice(pos, next + 1),
- line, pos - offset,
- line, next - offset
- ];
-
- buffer.push(currentToken);
-
- pos = next;
- }
-
- break;
- }
-
- pos++;
- return currentToken;
- }
-
- function back(token) {
- returned.push(token);
- }
-
- return {
- back:back, nextToken:nextToken, endOfFile:endOfFile
- };
-}