forked from lix-project/lix-website
50 lines
948 B
JavaScript
50 lines
948 B
JavaScript
|
"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;
|