code: void addBasic(Token token) {
      if (basicStart == -1) {
        basicStart = buffer.length();
        basicStartOfWhitespace = -1;
        basicHasNewline = false;
      }
      switch (token.kind) {
        case SoyFileParserConstants.TOKEN_WS:
          if (token.image.indexOf('\r') != -1 || token.image.indexOf('\n') != -1) {
            basicHasNewline = true;
          }
          if (basicStartOfWhitespace == -1 && whitespaceMode == WhitespaceMode.JOIN) {
            basicStartOfWhitespace = buffer.length();
            endLineAtStartOfWhitespace = offsets.endLine();
            endColumnAtStartOfWhitespace = offsets.endColumn();
          }
          break;
        case SoyFileParserConstants.TOKEN_NOT_WS:
          maybeCollapseWhitespace(token.image);
          break;
        default:
          throw new AssertionError(
              SoyFileParserConstants.tokenImage[token.kind] + " is not a basic text token");
      }
      append(token, token.image);
    }
docs: Append a basic token. 'Basic' tokens are text literals.