blob: 460d1d78e8d4a7f528451c882b3d28bdd2018e44 [file] [log] [blame]
/* It's an automatically generated code. Do not modify it. */
package com.intellij.lang.java.lexer;
import com.intellij.lexer.DocCommentTokenTypes;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
@SuppressWarnings("ALL")
%%
%{
private boolean myJdk15Enabled;
private DocCommentTokenTypes myTokenTypes;
public _JavaDocLexer(boolean isJdk15Enabled, DocCommentTokenTypes tokenTypes) {
this((java.io.Reader)null);
myJdk15Enabled = isJdk15Enabled;
myTokenTypes = tokenTypes;
}
public boolean checkAhead(char c) {
if (zzMarkedPos >= zzBuffer.length()) return false;
return zzBuffer.charAt(zzMarkedPos) == c;
}
public void goTo(int offset) {
zzCurrentPos = zzMarkedPos = zzStartRead = offset;
zzPushbackPos = 0;
zzAtEOF = offset < zzEndRead;
}
%}
%class _JavaDocLexer
%implements FlexLexer
%unicode
%function advance
%type IElementType
%eof{ return;
%eof}
%state COMMENT_DATA_START
%state COMMENT_DATA
%state TAG_DOC_SPACE
%state PARAM_TAG_SPACE
%state DOC_TAG_VALUE
%state DOC_TAG_VALUE_IN_PAREN
%state DOC_TAG_VALUE_IN_LTGT
%state INLINE_TAG_NAME
WHITE_DOC_SPACE_CHAR=[\ \t\f\n\r]
WHITE_DOC_SPACE_NO_LR=[\ \t\f]
DIGIT=[0-9]
ALPHA=[:jletter:]
IDENTIFIER={ALPHA}({ALPHA}|{DIGIT}|[":.-"])*
%%
<YYINITIAL> "/**" { yybegin(COMMENT_DATA_START); return myTokenTypes.commentStart(); }
<COMMENT_DATA_START> {WHITE_DOC_SPACE_CHAR}+ { return myTokenTypes.space(); }
<COMMENT_DATA> {WHITE_DOC_SPACE_NO_LR}+ { return myTokenTypes.commentData(); }
<COMMENT_DATA> [\n\r]+{WHITE_DOC_SPACE_CHAR}* { return myTokenTypes.space(); }
<DOC_TAG_VALUE> {WHITE_DOC_SPACE_CHAR}+ { yybegin(COMMENT_DATA); return myTokenTypes.space(); }
<DOC_TAG_VALUE, DOC_TAG_VALUE_IN_PAREN> ({ALPHA}|[_0-9\."$"\[\]])+ { return myTokenTypes.tagValueToken(); }
<DOC_TAG_VALUE> [\(] { yybegin(DOC_TAG_VALUE_IN_PAREN); return myTokenTypes.tagValueLParen(); }
<DOC_TAG_VALUE_IN_PAREN> [\)] { yybegin(DOC_TAG_VALUE); return myTokenTypes.tagValueRParen(); }
<DOC_TAG_VALUE> [#] { return myTokenTypes.tagValueSharp(); }
<DOC_TAG_VALUE, DOC_TAG_VALUE_IN_PAREN> [,] { return myTokenTypes.tagValueComma(); }
<DOC_TAG_VALUE_IN_PAREN> {WHITE_DOC_SPACE_CHAR}+ { return myTokenTypes.space(); }
<INLINE_TAG_NAME, COMMENT_DATA_START> "@param" { yybegin(PARAM_TAG_SPACE); return myTokenTypes.tagName(); }
<PARAM_TAG_SPACE> {WHITE_DOC_SPACE_CHAR}+ {yybegin(DOC_TAG_VALUE); return myTokenTypes.space();}
<DOC_TAG_VALUE> [\<] {
if (myJdk15Enabled) {
yybegin(DOC_TAG_VALUE_IN_LTGT);
return myTokenTypes.tagValueLT();
}
else {
yybegin(COMMENT_DATA);
return myTokenTypes.commentData();
}
}
<DOC_TAG_VALUE_IN_LTGT> {IDENTIFIER} { return myTokenTypes.tagValueToken(); }
<DOC_TAG_VALUE_IN_LTGT> {IDENTIFIER} { return myTokenTypes.tagValueToken(); }
<DOC_TAG_VALUE_IN_LTGT> [\>] { yybegin(COMMENT_DATA); return myTokenTypes.tagValueGT(); }
<COMMENT_DATA_START, COMMENT_DATA> "{" {
if (checkAhead('@')) {
yybegin(INLINE_TAG_NAME);
return myTokenTypes.inlineTagStart();
}
else{
yybegin(COMMENT_DATA);
return myTokenTypes.inlineTagStart();
}
}
<INLINE_TAG_NAME> "@"{IDENTIFIER} { yybegin(TAG_DOC_SPACE); return myTokenTypes.tagName(); }
<COMMENT_DATA_START, COMMENT_DATA, TAG_DOC_SPACE, DOC_TAG_VALUE> "}" { yybegin(COMMENT_DATA); return myTokenTypes.inlineTagEnd(); }
<COMMENT_DATA_START, COMMENT_DATA, DOC_TAG_VALUE> . { yybegin(COMMENT_DATA); return myTokenTypes.commentData(); }
<COMMENT_DATA_START> "@"{IDENTIFIER} { yybegin(TAG_DOC_SPACE); return myTokenTypes.tagName(); }
<TAG_DOC_SPACE> {WHITE_DOC_SPACE_CHAR}+ {
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();
}
"*"+"/" { return myTokenTypes.commentEnd(); }
[^] { return myTokenTypes.badCharacter(); }