interpolation.js 771 B

123456789101112131415161718192021222324252627282930
  1. /* eslint no-param-reassign: off */
  2. module.exports = {
  3. interpolation(token) {
  4. const tokens = [token, this.tokenizer.nextToken()];
  5. const validTypes = ['word', '}'];
  6. // look for @{ but not @[word]{
  7. if (tokens[0][1].length > 1 || tokens[1][0] !== '{') {
  8. this.tokenizer.back(tokens[1]);
  9. return false;
  10. }
  11. token = this.tokenizer.nextToken();
  12. while (token && validTypes.includes(token[0])) {
  13. tokens.push(token);
  14. token = this.tokenizer.nextToken();
  15. }
  16. const words = tokens.map((tokn) => tokn[1]);
  17. const [first] = tokens;
  18. const last = tokens.pop();
  19. const newToken = ['word', words.join(''), first[2], last[2]];
  20. this.tokenizer.back(token);
  21. this.tokenizer.back(newToken);
  22. return true;
  23. }
  24. };