You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
852 B
JavaScript
35 lines
852 B
JavaScript
/* eslint no-param-reassign: off */
|
|
|
|
module.exports = {
|
|
interpolation(token) {
|
|
let first = token;
|
|
const tokens = [token];
|
|
const validTypes = ['word', '{', '}'];
|
|
|
|
token = this.tokenizer.nextToken();
|
|
|
|
// look for @{ but not @[word]{
|
|
if (first[1].length > 1 || token[0] !== '{') {
|
|
this.tokenizer.back(token);
|
|
return false;
|
|
}
|
|
|
|
while (token && validTypes.includes(token[0])) {
|
|
tokens.push(token);
|
|
token = this.tokenizer.nextToken();
|
|
}
|
|
|
|
const words = tokens.map((tokn) => tokn[1]);
|
|
[first] = tokens;
|
|
const last = tokens.pop();
|
|
const start = [first[2], first[3]];
|
|
const end = [last[4] || last[2], last[5] || last[3]];
|
|
const newToken = ['word', words.join('')].concat(start, end);
|
|
|
|
this.tokenizer.back(token);
|
|
this.tokenizer.back(newToken);
|
|
|
|
return true;
|
|
}
|
|
};
|