|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /* eslint-disable no-param-reassign */
-
- const tokenizer = require('postcss/lib/tokenize');
- const Input = require('postcss/lib/input');
-
- module.exports = {
- isInlineComment(token) {
- if (token[0] === 'word' && token[1].slice(0, 2) === '//') {
- const first = token;
- const bits = [];
- let last;
-
- while (token) {
- if (/\r?\n/.test(token[1])) {
- // If there are quotes, fix tokenizer creating one token from start quote to end quote
- if (/['"].*\r?\n/.test(token[1])) {
- // Add string before newline to inline comment token
- bits.push(token[1].substring(0, token[1].indexOf('\n')));
-
- // Get remaining input and retokenize
- let remainingInput = token[1].substring(token[1].indexOf('\n'));
- remainingInput += this.input.css.valueOf().substring(this.tokenizer.position());
-
- // Replace tokenizer to retokenize the rest of the string
- this.input = new Input(remainingInput);
- this.tokenizer = tokenizer(this.input);
- } else {
- // If the tokenizer went to the next line go back
- this.tokenizer.back(token);
- }
- break;
- }
-
- bits.push(token[1]);
- last = token;
- token = this.tokenizer.nextToken({ ignoreUnclosed: true });
- }
-
- const newToken = ['comment', bits.join(''), first[2], first[3], last[2], last[3]];
-
- this.inlineComment(newToken);
- return true;
- } else if (token[1] === '/') {
- // issue #135
- const next = this.tokenizer.nextToken({ ignoreUnclosed: true });
-
- if (next[0] === 'comment' && /^\/\*/.test(next[1])) {
- next[0] = 'word';
- next[1] = next[1].slice(1);
- token[1] = '//';
- this.tokenizer.back(next);
- return module.exports.isInlineComment.bind(this)(token);
- }
- }
-
- return false;
- }
- };
|