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