flex source code of lexers is now available as part of CE source
[fedora-idea.git] / platform / lang-api / src / com / intellij / lexer / _JavaDocLexer.flex
blob143c67e4248db3a64c946c916bbea49a596442c5
1 /* It's an automatically generated code. Do not modify it. */
2 package com.intellij.lexer;
4 import com.intellij.psi.tree.IElementType;
5 import com.intellij.psi.*;
7 %%
9 %{
10   private boolean myJdk15Enabled;
11   private DocCommentTokenTypes myTokenTypes;
13   public _JavaDocLexer(boolean isJdk15Enabled, DocCommentTokenTypes tokenTypes) {
14     this((java.io.Reader)null);
15     myJdk15Enabled = isJdk15Enabled;
16     myTokenTypes = tokenTypes;
17   }
19   public boolean checkAhead(char c) {
20      if (zzMarkedPos >= zzBuffer.length()) return false;
21      return zzBuffer.charAt(zzMarkedPos) == c;
22   }
24   public void goTo(int offset) {
25     zzCurrentPos = zzMarkedPos = zzStartRead = offset;
26     zzPushbackPos = 0;
27     zzAtEOF = offset < zzEndRead;
28   }
31 %class _JavaDocLexer
32 %implements FlexLexer
33 %unicode
34 %function advance
35 %type IElementType
36 %eof{ return;
37 %eof}
39 %state COMMENT_DATA_START
40 %state COMMENT_DATA
41 %state TAG_DOC_SPACE
42 %state PARAM_TAG_SPACE
43 %state DOC_TAG_VALUE
44 %state DOC_TAG_VALUE_IN_PAREN
45 %state DOC_TAG_VALUE_IN_LTGT
46 %state INLINE_TAG_NAME
48 WHITE_DOC_SPACE_CHAR=[\ \t\f\n\r]
49 WHITE_DOC_SPACE_NO_LR=[\ \t\f]
50 DIGIT=[0-9]
51 ALPHA=[:jletter:]
52 IDENTIFIER={ALPHA}({ALPHA}|{DIGIT}|[":.-"])*
56 <YYINITIAL> "/**/" { return myTokenTypes.commentEnd(); }
57 <YYINITIAL> "/**" { yybegin(COMMENT_DATA_START); return myTokenTypes.commentStart(); }
58 <COMMENT_DATA_START> {WHITE_DOC_SPACE_CHAR}+ { return myTokenTypes.space(); }
59 <COMMENT_DATA>  {WHITE_DOC_SPACE_NO_LR}+ { return myTokenTypes.commentData(); }
60 <COMMENT_DATA>  [\n\r]+{WHITE_DOC_SPACE_CHAR}* { return myTokenTypes.space(); }
62 <DOC_TAG_VALUE> {WHITE_DOC_SPACE_CHAR}+ { yybegin(COMMENT_DATA); return myTokenTypes.space(); }
63 <DOC_TAG_VALUE, DOC_TAG_VALUE_IN_PAREN> ({ALPHA}|[_0-9\."$"\[\]])+ { return myTokenTypes.tagValueToken(); }
64 <DOC_TAG_VALUE> [\(] { yybegin(DOC_TAG_VALUE_IN_PAREN); return myTokenTypes.tagValueLParen(); }
65 <DOC_TAG_VALUE_IN_PAREN> [\)] { yybegin(DOC_TAG_VALUE); return myTokenTypes.tagValueRParen(); }
66 <DOC_TAG_VALUE> [#] { return myTokenTypes.tagValueSharp(); }
67 <DOC_TAG_VALUE, DOC_TAG_VALUE_IN_PAREN> [,] { return myTokenTypes.tagValueComma(); }
68 <DOC_TAG_VALUE_IN_PAREN> {WHITE_DOC_SPACE_CHAR}+ { return myTokenTypes.space(); }
70 <INLINE_TAG_NAME, COMMENT_DATA_START> "@param" { yybegin(PARAM_TAG_SPACE); return myTokenTypes.tagName(); }
71 <PARAM_TAG_SPACE>  {WHITE_DOC_SPACE_CHAR}+ {yybegin(DOC_TAG_VALUE); return myTokenTypes.space();}
72 <DOC_TAG_VALUE> [\<] { if (myJdk15Enabled) {yybegin(DOC_TAG_VALUE_IN_LTGT); return myTokenTypes.tagValueLT();} else { yybegin(COMMENT_DATA); return myTokenTypes.commentData(); } }
73 <DOC_TAG_VALUE_IN_LTGT> {IDENTIFIER} { return myTokenTypes.tagValueToken(); }
74 <DOC_TAG_VALUE_IN_LTGT> {IDENTIFIER} { return myTokenTypes.tagValueToken(); }
75 <DOC_TAG_VALUE_IN_LTGT> [\>] { yybegin(COMMENT_DATA); return myTokenTypes.tagValueGT(); }
77 <COMMENT_DATA_START, COMMENT_DATA> "{" {
78   if (checkAhead('@')){
79     yybegin(INLINE_TAG_NAME);
80     return myTokenTypes.inlineTagStart();
81   }
82   else{
83     yybegin(COMMENT_DATA);
84     return myTokenTypes.inlineTagStart();
85   }
87 <INLINE_TAG_NAME> "@"{IDENTIFIER} { yybegin(TAG_DOC_SPACE); return myTokenTypes.tagName(); }
88 <COMMENT_DATA_START, COMMENT_DATA, TAG_DOC_SPACE, DOC_TAG_VALUE> "}" { yybegin(COMMENT_DATA); return myTokenTypes.inlineTagEnd(); }
90 <COMMENT_DATA_START, COMMENT_DATA, DOC_TAG_VALUE> . { yybegin(COMMENT_DATA); return myTokenTypes.commentData(); }
91 <COMMENT_DATA_START> "@"{IDENTIFIER} { yybegin(TAG_DOC_SPACE); return myTokenTypes.tagName();  }
92 <TAG_DOC_SPACE>  {WHITE_DOC_SPACE_CHAR}+ {
94   if (checkAhead('<') || checkAhead('\"')) yybegin(COMMENT_DATA);
95   else if (checkAhead('\u007b') ) yybegin(COMMENT_DATA); //lbrace -  there's some error in JLex when typing lbrace directly
96   else yybegin(DOC_TAG_VALUE);
98  return myTokenTypes.space();
101 "*"+"/" { return myTokenTypes.commentEnd(); }
102 [^] { return myTokenTypes.badCharacter(); }