/* 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; } };