public IElementType advance() throws java.io.IOException
  {
    int zzInput;
    int zzAction;

    // cached fields:
    int zzCurrentPosL;
    int zzMarkedPosL;
    int zzEndReadL = zzEndRead;
    CharSequence zzBufferL = zzBuffer;

    int [] zzTransL = ZZ_TRANS;
    int [] zzRowMapL = ZZ_ROWMAP;
    int [] zzAttrL = ZZ_ATTRIBUTE;

    while (true) {
      zzMarkedPosL = zzMarkedPos;

      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;

      zzState = ZZ_LEXSTATE[zzLexicalState];

      // set up zzAction for empty match case:
      int zzAttributes = zzAttrL[zzState];
      if ( (zzAttributes & 1) == 1 ) {
        zzAction = zzState;
      }


      zzForAction: {
        while (true) {

          if (zzCurrentPosL < zzEndReadL) {
            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL);
            zzCurrentPosL += Character.charCount(zzInput);
          }
          else if (zzAtEOF) {
            zzInput = YYEOF;
            break zzForAction;
          }
          else {
            // store back cached positions
            zzCurrentPos  = zzCurrentPosL;
            zzMarkedPos   = zzMarkedPosL;
            boolean eof = zzRefill();
            // get translated positions and possibly new buffer
            zzCurrentPosL  = zzCurrentPos;
            zzMarkedPosL   = zzMarkedPos;
            zzBufferL      = zzBuffer;
            zzEndReadL     = zzEndRead;
            if (eof) {
              zzInput = YYEOF;
              break zzForAction;
            }
            else {
              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL);
              zzCurrentPosL += Character.charCount(zzInput);
            }
          }
          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMap(zzInput) ];
          if (zzNext == -1) break zzForAction;
          zzState = zzNext;

          zzAttributes = zzAttrL[zzState];
          if ( (zzAttributes & 1) == 1 ) {
            zzAction = zzState;
            zzMarkedPosL = zzCurrentPosL;
            if ( (zzAttributes & 8) == 8 ) break zzForAction;
          }

        }
      }

      // store back cached position
      zzMarkedPos = zzMarkedPosL;

      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
        zzAtEOF = true;
        return null;
      }
      else {
        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
          case 1:
            { return myTokenTypes.badCharacter();
            }
          // fall through
          case 33: break;
          case 2:
            { yybegin(COMMENT_DATA); return myTokenTypes.commentData();
            }
          // fall through
          case 34: break;
          case 3:
            { return myTokenTypes.space();
            }
          // fall through
          case 35: break;
          case 4:
            { if (checkAhead('@')) {
    yybegin(INLINE_TAG_NAME);
    return myTokenTypes.inlineTagStart();
  }
  else {
    yybegin(COMMENT_DATA);
    return myTokenTypes.inlineTagStart();
  }
            }
          // fall through
          case 36: break;
          case 5:
            { yybegin(COMMENT_DATA); return myTokenTypes.inlineTagEnd();
            }
          // fall through
          case 37: break;
          case 6:
            { return myTokenTypes.commentData();
            }
          // fall through
          case 38: break;
          case 7:
            { if (checkAhead('<') || checkAhead('\"')) yybegin(COMMENT_DATA);
  else if (checkAhead('\u007b')) yybegin(COMMENT_DATA);  // lbrace - there's a error in JLex when typing lbrace directly
  else yybegin(DOC_TAG_VALUE);
  return myTokenTypes.space();
            }
          // fall through
          case 39: break;
          case 8:
            { yybegin(DOC_TAG_VALUE); return myTokenTypes.space();
            }
          // fall through
          case 40: break;
          case 9:
            { yybegin(COMMENT_DATA); return myTokenTypes.space();
            }
          // fall through
          case 41: break;
          case 10:
            { return myTokenTypes.tagValueSharp();
            }
          // fall through
          case 42: break;
          case 11:
            { return myTokenTypes.tagValueToken();
            }
          // fall through
          case 43: break;
          case 12:
            { yybegin(DOC_TAG_VALUE_IN_PAREN); return myTokenTypes.tagValueLParen();
            }
          // fall through
          case 44: break;
          case 13:
            { return myTokenTypes.tagValueComma();
            }
          // fall through
          case 45: break;
          case 14:
            { if (myJdk15Enabled) {
    yybegin(DOC_TAG_VALUE_IN_LTGT);
    return myTokenTypes.tagValueLT();
  }
  else {
    yybegin(COMMENT_DATA);
    return myTokenTypes.commentData();
  }
            }
          // fall through
          case 46: break;
          case 15:
            { yybegin(DOC_TAG_VALUE); return myTokenTypes.tagValueRParen();
            }
          // fall through
          case 47: break;
          case 16:
            { yybegin(COMMENT_DATA); return myTokenTypes.tagValueGT();
            }
          // fall through
          case 48: break;
          case 17:
            { yybegin(CODE_TAG); return myTokenTypes.commentData();
            }
          // fall through
          case 49: break;
          case 18:
            { yybegin(CODE_TAG); return myTokenTypes.space();
            }
          // fall through
          case 50: break;
          case 19:
            { yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.commentData();
            }
          // fall through
          case 51: break;
          case 20:
            { yybegin(SNIPPET_ATTRIBUTE_VALUE_DOUBLE_QUOTES); return myTokenTypes.tagValueQuote();
            }
          // fall through
          case 52: break;
          case 21:
            { yybegin(SNIPPET_ATTRIBUTE_VALUE_SINGLE_QUOTES); return myTokenTypes.tagValueQuote();
            }
          // fall through
          case 53: break;
          case 22:
            { return myTokenTypes.commentLeadingAsterisks();
            }
          // fall through
          case 54: break;
          case 23:
            { yybegin(SNIPPET_TAG_BODY_DATA); return myTokenTypes.tagValueColon();
            }
          // fall through
          case 55: break;
          case 24:
            { mySnippetBracesLevel++; return myTokenTypes.commentData();
            }
          // fall through
          case 56: break;
          case 25:
            { if (mySnippetBracesLevel > 0) {
          mySnippetBracesLevel--;
          return myTokenTypes.commentData();
        } else {
          yybegin(COMMENT_DATA);
          return myTokenTypes.inlineTagEnd();
        }
            }
          // fall through
          case 57: break;
          case 26:
            { yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.tagValueQuote();
            }
          // fall through
          case 58: break;
          case 27:
            { return myTokenTypes.commentEnd();
            }
          // fall through
          case 59: break;
          case 28:
            { yybegin(TAG_DOC_SPACE); return myTokenTypes.tagName();
            }
          // fall through
          case 60: break;
          case 29:
            { yybegin(COMMENT_DATA_START); return myTokenTypes.commentStart();
            }
          // fall through
          case 61: break;
          case 30:
            { yybegin(CODE_TAG_SPACE); return myTokenTypes.tagName();
            }
          // fall through
          case 62: break;
          case 31:
            { yybegin(PARAM_TAG_SPACE); return myTokenTypes.tagName();
            }
          // fall through
          case 63: break;
          case 32:
            { yybegin(SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON); return myTokenTypes.tagName();
            }
          // fall through
          case 64: break;
          default:
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }
public IElementType advance()