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.
49 lines
948 B
49 lines
948 B
"use strict"; |
|
const tokenize = require("postcss/lib/tokenize"); |
|
|
|
function templateTokenize () { |
|
const tokenizer = tokenize.apply(this, arguments); |
|
|
|
function nextToken () { |
|
const args = arguments; |
|
const returned = []; |
|
let token; |
|
let depth = 0; |
|
let line; |
|
let column; |
|
|
|
while ((token = tokenizer.nextToken.apply(tokenizer, args))) { |
|
if (token[0] !== "word") { |
|
if (token[0] === "{") { |
|
++depth; |
|
} else if (token[0] === "}") { |
|
--depth; |
|
} |
|
} |
|
if (depth || returned.length) { |
|
line = token[4] || token[2] || line; |
|
column = token[5] || token[3] || column; |
|
returned.push(token); |
|
} |
|
if (!depth) { |
|
break; |
|
} |
|
} |
|
if (returned.length) { |
|
token = [ |
|
"word", |
|
returned.map(token => token[1]).join(""), |
|
returned[0][2], |
|
returned[0][3], |
|
line, |
|
column, |
|
]; |
|
} |
|
return token; |
|
} |
|
return Object.assign({}, tokenizer, { |
|
nextToken, |
|
}); |
|
} |
|
|
|
module.exports = templateTokenize;
|
|
|