You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
/* 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;
|
|
}
|
|
};
|