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.
34 lines
852 B
34 lines
852 B
/* 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; |
|
} |
|
};
|
|
|