KDoc wiki links pair matcher and @tags highlighter

This commit is contained in:
Sergey Rostov
2013-05-25 19:05:01 +04:00
committed by Mikhael Bogdanov
parent 12e20378a2
commit bcc2c46e99
13 changed files with 267 additions and 63 deletions
@@ -4,6 +4,7 @@ import com.intellij.lexer.FlexLexer;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.text.CharArrayUtil;
import java.lang.Character;
%%
@@ -16,13 +17,21 @@ import com.intellij.util.text.CharArrayUtil;
this((java.io.Reader)null);
}
private final boolean isLastToken() {
private boolean isLastToken() {
return zzMarkedPos == zzBuffer.length();
}
private final Boolean yytextContainLineBreaks() {
private Boolean yytextContainLineBreaks() {
return CharArrayUtil.containLineBreaks(zzBuffer, zzStartRead, zzMarkedPos);
}
private boolean nextIsNotWhitespace() {
return zzMarkedPos <= zzBuffer.length() && !Character.isWhitespace(zzBuffer.charAt(zzMarkedPos + 1));
}
private boolean prevIsNotWhitespace() {
return zzMarkedPos != 0 && !Character.isWhitespace(zzBuffer.charAt(zzMarkedPos - 1));
}
%}
%function advance
@@ -31,12 +40,21 @@ import com.intellij.util.text.CharArrayUtil;
return;
%eof}
%state CONTENTS
%state LINE_BEGINNING
%state CONTENTS_BEGINNING
%state CONTENTS
%state CODE
%state CODE2
WHITE_SPACE_CHAR =[\ \t\f\n\r]
NOT_WHITE_SPACE_CHAR=[^\ \t\f\n\r]
DIGIT=[0-9]
ALPHA=[:jletter:]
TAG_NAME={ALPHA}({ALPHA}|{DIGIT})*
MARKDOWN_EMPHASIS=[\*_]
%%
@@ -45,22 +63,33 @@ NOT_WHITE_SPACE_CHAR=[^\ \t\f\n\r]
"*"+ "/" { if (isLastToken()) return KDocTokens.END;
else return KDocTokens.TEXT; }
<LINE_BEGINNING> "*"+ { yybegin(CONTENTS);
<LINE_BEGINNING> "*"+ { yybegin(CONTENTS_BEGINNING);
return KDocTokens.LEADING_ASTERISK; }
<CONTENTS, LINE_BEGINNING> {
<CONTENTS_BEGINNING> "@"{TAG_NAME} { yybegin(CONTENTS);
return KDocTokens.TAG_NAME; }
<LINE_BEGINNING, CONTENTS_BEGINNING, CONTENTS> {
{WHITE_SPACE_CHAR}+ {
if (yytextContainLineBreaks()) {
yybegin(LINE_BEGINNING);
return TokenType.WHITE_SPACE;
} else {
yybegin(CONTENTS);
yybegin(yystate() == CONTENTS_BEGINNING? CONTENTS_BEGINNING:CONTENTS);
return KDocTokens.TEXT; // internal white space
}
}
. { yybegin(CONTENTS);
return KDocTokens.TEXT; }
"\\"[\[\]] { yybegin(CONTENTS);
return KDocTokens.MARKDOWN_ESCAPED_CHAR; }
"[[" { yybegin(CONTENTS);
return KDocTokens.WIKI_LINK_OPEN; }
"]]" { yybegin(CONTENTS);
return KDocTokens.WIKI_LINK_CLOSE; }
. { yybegin(CONTENTS);
return KDocTokens.TEXT; }
}
. { return TokenType.BAD_CHARACTER; }
@@ -23,6 +23,7 @@ import com.intellij.lang.PsiParser;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.ILazyParseableElementType;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.kdoc.parser.KDocParser;
import org.jetbrains.jet.kdoc.psi.impl.KDocImpl;
@@ -53,4 +54,11 @@ public interface KDocTokens {
KDocToken LEADING_ASTERISK = new KDocToken("KDOC_LEADING_ASTERISK");
KDocToken TEXT = new KDocToken("KDOC_TEXT");
KDocToken TAG_NAME = new KDocToken("KDOC_TAG_NAME");
KDocToken WIKI_LINK_OPEN = new KDocToken("KDOC_WIKI_LINK_OPEN");
KDocToken WIKI_LINK_CLOSE = new KDocToken("KDOC_WIKI_LINK_CLOSE");
KDocToken MARKDOWN_ESCAPED_CHAR = new KDocToken("KDOC_MARKDOWN_ESCAPED_CHAR");
TokenSet CONTENT_TOKENS = TokenSet.create(START, END, LEADING_ASTERISK, TEXT, WIKI_LINK_OPEN, WIKI_LINK_CLOSE, MARKDOWN_ESCAPED_CHAR);
}
@@ -1,4 +1,4 @@
/* The following code was generated by JFlex 1.4.3 on 25.05.13 15:08 */
/* The following code was generated by JFlex 1.4.3 on 25.05.13 16:39 */
package org.jetbrains.jet.kdoc.lexer;
@@ -11,7 +11,7 @@ import com.intellij.util.text.CharArrayUtil;
/**
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 25.05.13 15:08 from the specification file
* on 25.05.13 16:39 from the specification file
* <tt>/Users/factitious/Documents/kotlin/compiler/frontend/src/org/jetbrains/jet/kdoc/lexer/KDoc.flex</tt>
*/
class _KDocLexer implements FlexLexer {
@@ -19,11 +19,12 @@ class _KDocLexer implements FlexLexer {
private static final int ZZ_BUFFERSIZE = 16384;
/** lexical states */
public static final int LINE_BEGINNING = 8;
public static final int STRONG_CONTENTS = 6;
public static final int CONTENTS = 2;
public static final int CODE = 8;
public static final int CONTENTS_BEGINNING = 4;
public static final int CODE2 = 10;
public static final int LINE_BEGINNING = 2;
public static final int CONTENTS = 6;
public static final int YYINITIAL = 0;
public static final int EMPHASIS_CONTENTS = 4;
/**
* ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
@@ -32,15 +33,74 @@ class _KDocLexer implements FlexLexer {
* l is of the form l = 2*k, k a non negative integer
*/
private static final int ZZ_LEXSTATE[] = {
0, 0, 1, 1, 1, 1, 1, 1, 2, 2
0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4
};
/**
* Translates characters to character classes
*/
private static final String ZZ_CMAP_PACKED =
"\11\0\1\1\1\4\1\0\2\1\22\0\1\1\11\0\1\3\4\0"+
"\1\2\uffd0\0";
"\11\0\1\1\1\12\1\0\2\1\22\0\1\1\3\0\1\3\5\0"+
"\1\4\4\0\1\5\12\2\6\0\1\6\32\3\1\11\1\7\1\10"+
"\1\0\1\3\1\0\32\3\47\0\4\3\4\0\1\3\12\0\1\3"+
"\4\0\1\3\5\0\27\3\1\0\37\3\1\0\u013f\3\31\0\162\3"+
"\4\0\14\3\16\0\5\3\11\0\1\3\213\0\1\3\13\0\1\3"+
"\1\0\3\3\1\0\1\3\1\0\24\3\1\0\54\3\1\0\46\3"+
"\1\0\5\3\4\0\202\3\10\0\105\3\1\0\46\3\2\0\2\3"+
"\6\0\20\3\41\0\46\3\2\0\1\3\7\0\47\3\110\0\33\3"+
"\5\0\3\3\56\0\32\3\5\0\13\3\43\0\2\3\1\0\143\3"+
"\1\0\1\3\17\0\2\3\7\0\2\3\12\0\3\3\2\0\1\3"+
"\20\0\1\3\1\0\36\3\35\0\3\3\60\0\46\3\13\0\1\3"+
"\u0152\0\66\3\3\0\1\3\22\0\1\3\7\0\12\3\43\0\10\3"+
"\2\0\2\3\2\0\26\3\1\0\7\3\1\0\1\3\3\0\4\3"+
"\3\0\1\3\36\0\2\3\1\0\3\3\16\0\4\3\21\0\6\3"+
"\4\0\2\3\2\0\26\3\1\0\7\3\1\0\2\3\1\0\2\3"+
"\1\0\2\3\37\0\4\3\1\0\1\3\23\0\3\3\20\0\11\3"+
"\1\0\3\3\1\0\26\3\1\0\7\3\1\0\2\3\1\0\5\3"+
"\3\0\1\3\22\0\1\3\17\0\2\3\17\0\1\3\23\0\10\3"+
"\2\0\2\3\2\0\26\3\1\0\7\3\1\0\2\3\1\0\5\3"+
"\3\0\1\3\36\0\2\3\1\0\3\3\17\0\1\3\21\0\1\3"+
"\1\0\6\3\3\0\3\3\1\0\4\3\3\0\2\3\1\0\1\3"+
"\1\0\2\3\3\0\2\3\3\0\3\3\3\0\10\3\1\0\3\3"+
"\77\0\1\3\13\0\10\3\1\0\3\3\1\0\27\3\1\0\12\3"+
"\1\0\5\3\46\0\2\3\43\0\10\3\1\0\3\3\1\0\27\3"+
"\1\0\12\3\1\0\5\3\3\0\1\3\40\0\1\3\1\0\2\3"+
"\43\0\10\3\1\0\3\3\1\0\27\3\1\0\20\3\46\0\2\3"+
"\43\0\22\3\3\0\30\3\1\0\11\3\1\0\1\3\2\0\7\3"+
"\72\0\60\3\1\0\2\3\13\0\10\3\72\0\2\3\1\0\1\3"+
"\2\0\2\3\1\0\1\3\2\0\1\3\6\0\4\3\1\0\7\3"+
"\1\0\3\3\1\0\1\3\1\0\1\3\2\0\2\3\1\0\4\3"+
"\1\0\2\3\11\0\1\3\2\0\5\3\1\0\1\3\25\0\2\3"+
"\42\0\1\3\77\0\10\3\1\0\42\3\35\0\4\3\164\0\42\3"+
"\1\0\5\3\1\0\2\3\45\0\6\3\112\0\46\3\12\0\51\3"+
"\7\0\132\3\5\0\104\3\5\0\122\3\6\0\7\3\1\0\77\3"+
"\1\0\1\3\1\0\4\3\2\0\7\3\1\0\1\3\1\0\4\3"+
"\2\0\47\3\1\0\1\3\1\0\4\3\2\0\37\3\1\0\1\3"+
"\1\0\4\3\2\0\7\3\1\0\1\3\1\0\4\3\2\0\7\3"+
"\1\0\7\3\1\0\27\3\1\0\37\3\1\0\1\3\1\0\4\3"+
"\2\0\7\3\1\0\47\3\1\0\23\3\105\0\125\3\14\0\u026c\3"+
"\2\0\10\3\12\0\32\3\5\0\113\3\3\0\3\3\17\0\15\3"+
"\1\0\4\3\16\0\22\3\16\0\22\3\16\0\15\3\1\0\3\3"+
"\17\0\64\3\43\0\1\3\3\0\2\3\103\0\130\3\10\0\51\3"+
"\127\0\35\3\63\0\36\3\2\0\5\3\u038b\0\154\3\224\0\234\3"+
"\4\0\132\3\6\0\26\3\2\0\6\3\2\0\46\3\2\0\6\3"+
"\2\0\10\3\1\0\1\3\1\0\1\3\1\0\1\3\1\0\37\3"+
"\2\0\65\3\1\0\7\3\1\0\1\3\3\0\3\3\1\0\7\3"+
"\3\0\4\3\2\0\6\3\4\0\15\3\5\0\3\3\1\0\7\3"+
"\102\0\2\3\23\0\1\3\34\0\1\3\15\0\1\3\40\0\22\3"+
"\120\0\1\3\4\0\1\3\2\0\12\3\1\0\1\3\3\0\5\3"+
"\6\0\1\3\1\0\1\3\1\0\1\3\1\0\4\3\1\0\3\3"+
"\1\0\7\3\3\0\3\3\5\0\5\3\26\0\44\3\u0e81\0\3\3"+
"\31\0\11\3\7\0\5\3\2\0\5\3\4\0\126\3\6\0\3\3"+
"\1\0\137\3\5\0\50\3\4\0\136\3\21\0\30\3\70\0\20\3"+
"\u0200\0\u19b6\3\112\0\u51a6\3\132\0\u048d\3\u0773\0\u2ba4\3\u215c\0\u012e\3"+
"\2\0\73\3\225\0\7\3\14\0\5\3\5\0\1\3\1\0\12\3"+
"\1\0\15\3\1\0\5\3\1\0\1\3\1\0\2\3\1\0\2\3"+
"\1\0\154\3\41\0\u016b\3\22\0\100\3\2\0\66\3\50\0\15\3"+
"\66\0\2\3\30\0\3\3\31\0\1\3\6\0\5\3\1\0\207\3"+
"\7\0\1\3\34\0\32\3\4\0\1\3\1\0\32\3\12\0\132\3"+
"\3\0\6\3\2\0\6\3\2\0\6\3\2\0\3\3\3\0\2\3"+
"\3\0\2\3\31\0";
/**
* Translates characters to character classes
@@ -53,11 +113,11 @@ class _KDocLexer implements FlexLexer {
private static final int [] ZZ_ACTION = zzUnpackAction();
private static final String ZZ_ACTION_PACKED_0 =
"\3\0\3\1\1\2\1\3\1\2\1\4\1\0\1\5"+
"\1\0\1\6";
"\5\0\3\1\1\2\1\3\1\4\5\2\1\0\1\5"+
"\1\0\1\6\1\7\1\10\1\11\1\12";
private static int [] zzUnpackAction() {
int [] result = new int[14];
int [] result = new int[24];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -82,11 +142,12 @@ class _KDocLexer implements FlexLexer {
private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 =
"\0\0\0\5\0\12\0\17\0\24\0\31\0\17\0\36"+
"\0\31\0\43\0\50\0\17\0\31\0\17";
"\0\0\0\13\0\26\0\41\0\54\0\67\0\102\0\115"+
"\0\67\0\130\0\143\0\156\0\171\0\204\0\102\0\217"+
"\0\102\0\67\0\232\0\67\0\67\0\67\0\245\0\67";
private static int [] zzUnpackRowMap() {
int [] result = new int[14];
int [] result = new int[24];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -109,13 +170,17 @@ class _KDocLexer implements FlexLexer {
private static final int [] ZZ_TRANS = zzUnpackTrans();
private static final String ZZ_TRANS_PACKED_0 =
"\2\4\1\5\1\6\1\0\1\7\1\10\1\7\1\11"+
"\1\10\1\7\1\10\1\7\1\12\1\10\10\0\1\13"+
"\3\0\1\14\1\15\2\0\1\10\2\0\1\10\2\0"+
"\1\14\1\12\4\0\1\16\1\0";
"\4\6\1\7\1\10\4\6\1\0\1\11\1\12\2\11"+
"\1\13\2\11\1\14\1\15\1\16\1\12\1\11\1\12"+
"\2\11\1\17\1\11\1\20\1\14\1\15\1\16\1\12"+
"\1\11\1\12\2\11\1\17\2\11\1\14\1\15\1\16"+
"\1\12\4\6\1\7\5\6\20\0\1\21\1\22\11\0"+
"\1\23\7\0\1\12\10\0\1\12\4\0\1\13\1\22"+
"\15\0\2\24\11\0\1\25\13\0\1\26\4\0\1\27"+
"\13\0\1\30\10\0\2\27\7\0";
private static int [] zzUnpackTrans() {
int [] result = new int[45];
int [] result = new int[176];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -156,11 +221,11 @@ class _KDocLexer implements FlexLexer {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\3\0\1\11\2\1\1\11\3\1\1\0\1\11\1\0"+
"\1\11";
"\5\0\1\11\2\1\1\11\7\1\1\0\1\11\1\0"+
"\3\11\1\1\1\11";
private static int [] zzUnpackAttribute() {
int [] result = new int[14];
int [] result = new int[24];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -223,14 +288,22 @@ class _KDocLexer implements FlexLexer {
this((java.io.Reader)null);
}
private final boolean isLastToken() {
private boolean isLastToken() {
return zzMarkedPos == zzBuffer.length();
}
private final Boolean yytextContainLineBreaks() {
private Boolean yytextContainLineBreaks() {
return CharArrayUtil.containLineBreaks(zzBuffer, zzStartRead, zzMarkedPos);
}
private boolean nextIsNotWhitespace() {
return zzMarkedPos <= zzBuffer.length() && !Character.isWhitespace(zzBuffer.charAt(zzMarkedPos + 1));
}
private boolean prevIsNotWhitespace() {
return zzMarkedPos != 0 && !Character.isWhitespace(zzBuffer.charAt(zzMarkedPos - 1));
}
_KDocLexer(java.io.Reader in) {
this.zzReader = in;
@@ -256,7 +329,7 @@ class _KDocLexer implements FlexLexer {
char [] map = new char[0x10000];
int i = 0; /* index in packed string */
int j = 0; /* index in unpacked array */
while (i < 24) {
while (i < 1206) {
int count = packed.charAt(i++);
char value = packed.charAt(i++);
do map[j++] = value; while (--count > 0);
@@ -479,40 +552,60 @@ class _KDocLexer implements FlexLexer {
zzMarkedPos = zzMarkedPosL;
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
case 6:
{ yybegin(CONTENTS);
return KDocTokens.START;
}
case 7: break;
case 5:
{ if (isLastToken()) return KDocTokens.END;
else return KDocTokens.TEXT;
}
case 8: break;
case 1:
{ return TokenType.BAD_CHARACTER;
}
case 9: break;
case 2:
{ yybegin(CONTENTS);
return KDocTokens.TEXT;
}
case 10: break;
case 4:
{ yybegin(CONTENTS);
return KDocTokens.LEADING_ASTERISK;
}
case 11: break;
case 3:
{ if (yytextContainLineBreaks()) {
yybegin(LINE_BEGINNING);
return TokenType.WHITE_SPACE;
} else {
yybegin(CONTENTS);
yybegin(yystate() == CONTENTS_BEGINNING? CONTENTS_BEGINNING:CONTENTS);
return KDocTokens.TEXT; // internal white space
}
}
case 11: break;
case 5:
{ if (isLastToken()) return KDocTokens.END;
else return KDocTokens.TEXT;
}
case 12: break;
case 9:
{ yybegin(CONTENTS);
return KDocTokens.TAG_NAME;
}
case 13: break;
case 7:
{ yybegin(CONTENTS);
return KDocTokens.WIKI_LINK_CLOSE;
}
case 14: break;
case 8:
{ yybegin(CONTENTS);
return KDocTokens.WIKI_LINK_OPEN;
}
case 15: break;
case 10:
{ yybegin(CONTENTS);
return KDocTokens.START;
}
case 16: break;
case 1:
{ return TokenType.BAD_CHARACTER;
}
case 17: break;
case 6:
{ yybegin(CONTENTS);
return KDocTokens.MARKDOWN_ESCAPED_CHAR;
}
case 18: break;
case 2:
{ yybegin(CONTENTS);
return KDocTokens.TEXT;
}
case 19: break;
case 4:
{ yybegin(CONTENTS_BEGINNING);
return KDocTokens.LEADING_ASTERISK;
}
case 20: break;
default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
+5
View File
@@ -0,0 +1,5 @@
/**
* @tag
* text @notATag
* @
*/
+17
View File
@@ -0,0 +1,17 @@
JetFile: AtTags.jet
KDoc
PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_TAG_NAME)('@tag')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' text @notATag')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' @')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')
NAMESPACE_HEADER
<empty list>
+4
View File
@@ -0,0 +1,4 @@
/**
* [[WikiLink]]
* Just \[[ and \]]
*/
+20
View File
@@ -0,0 +1,20 @@
JetFile: Markdown.jet
KDoc
PsiElement(KDOC_START)('/**')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' ')
PsiElement(KDOC_WIKI_LINK_OPEN)('[[')
PsiElement(KDOC_TEXT)('WikiLink')
PsiElement(KDOC_WIKI_LINK_CLOSE)(']]')
PsiWhiteSpace('\n ')
PsiElement(KDOC_LEADING_ASTERISK)('*')
PsiElement(KDOC_TEXT)(' Just ')
PsiElement(KDOC_MARKDOWN_ESCAPED_CHAR)('\[')
PsiElement(KDOC_TEXT)('[ and ')
PsiElement(KDOC_MARKDOWN_ESCAPED_CHAR)('\]')
PsiElement(KDOC_TEXT)(']')
PsiWhiteSpace('\n ')
PsiElement(KDOC_END)('*/')
NAMESPACE_HEADER
<empty list>
@@ -110,6 +110,8 @@ options.jet.attribute.descriptor.closure.braces=Function literal braces and arro
options.jet.attribute.descriptor.safe.access=Safe access dot
options.jet.attribute.descriptor.arrow=Arrow
options.jet.attribute.descriptor.kdoc.comment=KDoc comment
options.jet.attribute.descriptor.kdoc.tag=KDoc tag
options.jet.attribute.descriptor.kdoc.value=KDoc tag value
options.jet.attribute.descriptor.trait=Trait
options.jet.attribute.descriptor.annotation=Annotation
options.jet.attribute.descriptor.var=Var (mutable variable, parameter or property)
@@ -22,6 +22,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.kdoc.lexer.KDocTokens;
import org.jetbrains.jet.lexer.JetTokens;
public class JetPairMatcher implements PairedBraceMatcher {
@@ -29,7 +30,8 @@ public class JetPairMatcher implements PairedBraceMatcher {
new BracePair(JetTokens.LPAR, JetTokens.RPAR, false),
new BracePair(JetTokens.LONG_TEMPLATE_ENTRY_START, JetTokens.LONG_TEMPLATE_ENTRY_END, false),
new BracePair(JetTokens.LBRACE, JetTokens.RBRACE, true),
new BracePair(JetTokens.LBRACKET, JetTokens.RBRACKET, false)
new BracePair(JetTokens.LBRACKET, JetTokens.RBRACKET, false),
new BracePair(KDocTokens.WIKI_LINK_OPEN, KDocTokens.WIKI_LINK_CLOSE, false)
};
@Override
@@ -44,6 +46,8 @@ public class JetPairMatcher implements PairedBraceMatcher {
return false;
}
if (lbraceType == KDocTokens.WIKI_LINK_OPEN) return false;
return JetTokens.WHITE_SPACE_OR_COMMENT_BIT_SET.contains(contextType)
|| contextType == JetTokens.SEMICOLON
|| contextType == JetTokens.COMMA
@@ -54,7 +54,7 @@ public class JetColorSettingsPage implements ColorSettingsPage {
"\n" +
"/**\n" +
" * Doc comment here for `SomeClass`\n" +
" * @see Iterator#next()\n" +
" * <KDOC_TAG>@see</KDOC_TAG> Iterator#next()\n" +
" */\n" +
"[<ANNOTATION>Deprecated</ANNOTATION>]\n" +
"<BUILTIN_ANNOTATION>public</BUILTIN_ANNOTATION> class <CLASS>MyClass</CLASS><<BUILTIN_ANNOTATION>out</BUILTIN_ANNOTATION> <TYPE_PARAMETER>T</TYPE_PARAMETER> : <TRAIT>Iterable</TRAIT><<TYPE_PARAMETER>T</TYPE_PARAMETER>>>(var <INSTANCE_PROPERTY><MUTABLE_VARIABLE>prop1</MUTABLE_VARIABLE></INSTANCE_PROPERTY> : Int) {\n" +
@@ -126,6 +126,8 @@ public class JetColorSettingsPage implements ColorSettingsPage {
new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.block.comment"), JetHighlightingColors.BLOCK_COMMENT),
new AttributesDescriptor(JetBundle.message("options.jet.attribute.descriptor.kdoc.comment"), JetHighlightingColors.DOC_COMMENT),
new AttributesDescriptor(JetBundle.message("options.jet.attribute.descriptor.kdoc.tag"), JetHighlightingColors.KDOC_TAG),
new AttributesDescriptor(JetBundle.message("options.jet.attribute.descriptor.kdoc.value"), JetHighlightingColors.KDOC_TAG_VALUE),
new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.class"), JetHighlightingColors.CLASS),
new AttributesDescriptor(OptionsBundle.message("options.java.attribute.descriptor.type.parameter"), JetHighlightingColors.TYPE_PARAMETER),
@@ -23,7 +23,7 @@ import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lexer.JetLexer;
import org.jetbrains.jet.kdoc.lexer.KDocTokens;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.HashMap;
@@ -34,7 +34,7 @@ public class JetHighlighter extends SyntaxHighlighterBase {
@NotNull
public Lexer getHighlightingLexer() {
return new JetLexer();
return new JetHighlightingLexer();
}
@NotNull
@@ -83,6 +83,9 @@ public class JetHighlighter extends SyntaxHighlighterBase {
keys.put(JetTokens.BLOCK_COMMENT, JetHighlightingColors.BLOCK_COMMENT);
keys.put(JetTokens.DOC_COMMENT, JetHighlightingColors.DOC_COMMENT);
fillMap(keys, KDocTokens.CONTENT_TOKENS, JetHighlightingColors.DOC_COMMENT);
keys.put(KDocTokens.TAG_NAME, JetHighlightingColors.KDOC_TAG);
keys.put(TokenType.BAD_CHARACTER, JetHighlightingColors.BAD_CHARACTER);
}
}
@@ -44,6 +44,8 @@ public class JetHighlightingColors {
public static final TextAttributesKey LINE_COMMENT = createTextAttributesKey("KOTLIN_LINE_COMMENT", DefaultLanguageHighlighterColors.LINE_COMMENT);
public static final TextAttributesKey BLOCK_COMMENT = createTextAttributesKey("KOTLIN_BLOCK_COMMENT", DefaultLanguageHighlighterColors.BLOCK_COMMENT);
public static final TextAttributesKey DOC_COMMENT = createTextAttributesKey("KOTLIN_DOC_COMMENT", DefaultLanguageHighlighterColors.DOC_COMMENT);
public static final TextAttributesKey KDOC_TAG = createTextAttributesKey("KDOC_TAG_NAME", DefaultLanguageHighlighterColors.DOC_COMMENT_TAG);
public static final TextAttributesKey KDOC_TAG_VALUE = createTextAttributesKey("KDOC_TAG_VALUE", DefaultLanguageHighlighterColors.DOC_COMMENT_TAG_VALUE);
// class kinds
public static final TextAttributesKey CLASS = createTextAttributesKey("KOTLIN_CLASS", CodeInsightColors.CLASS_NAME_ATTRIBUTES);
@@ -0,0 +1,15 @@
package org.jetbrains.jet.plugin.highlighter;
import com.intellij.lexer.LayeredLexer;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.jet.kdoc.lexer.KDocLexer;
import org.jetbrains.jet.lexer.JetLexer;
import org.jetbrains.jet.lexer.JetTokens;
public class JetHighlightingLexer extends LayeredLexer {
public JetHighlightingLexer() {
super(new JetLexer());
registerSelfStoppingLayer(new KDocLexer(), new IElementType[]{JetTokens.DOC_COMMENT}, IElementType.EMPTY_ARRAY);
}
}