| /* 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; |
| } |
| }; |