token()

in translate/src/modules/translationform/utils/editFieldModes.ts [8:80]


    token(stream, state) {
      const ch = stream.next();
      switch (state.at(-1)) {
        case 'expression':
          switch (ch) {
            case '"':
              state.push('literal');
              return 'quote';
            case '{':
              state.push('expression');
              return 'brace';
            case '}':
              state.pop();
              return 'brace';
            default:
              stream.eatWhile(/[^"{}]+/);
              return 'name';
          }

        case 'literal':
          switch (ch) {
            case '"':
              state.pop();
              return 'quote';
            case '{':
              state.push('expression');
              return 'brace';
            // These will mis-highlight actual } or > in literals,
            // but that's a rare enough occurrence when balanced
            // with the improved editing experience.
            case '}':
              state.pop();
              state.pop();
              return 'brace';
            case '>':
              state.pop();
              state.pop();
              return 'bracket';
            default:
              stream.eatWhile(/[^"{}>]+/);
              return 'literal';
          }

        case 'tag':
          switch (ch) {
            case '"':
              state.push('literal');
              return 'quote';
            case '{':
              state.push('expression');
              return 'brace';
            case '>':
              state.pop();
              return 'bracket';
            default:
              stream.eatWhile(/[^"{>]+/);
              return 'tagName';
          }

        default:
          switch (ch) {
            case '{':
              state.push('expression');
              return 'brace';
            case '<':
              state.push('tag');
              return 'bracket';
            default:
              stream.eatWhile(/[^<{]+/);
              return 'string';
          }
      }
    },