blob: 92fee514e2445b40fa0f9d5bfca992256c880048 [file] [log] [blame]
/* 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;
}
};