Confluence highlighter works

This commit is contained in:
Andrey Breslav
2011-07-12 19:08:37 +04:00
parent a09e06b3d4
commit 2f3c5b0912
6 changed files with 81 additions and 21 deletions
@@ -6,11 +6,13 @@ import com.atlassian.renderer.RenderContext;
import com.atlassian.renderer.v2.RenderMode;
import com.atlassian.renderer.v2.macro.BaseMacro;
import com.atlassian.renderer.v2.macro.MacroException;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import org.apache.velocity.VelocityContext;
import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
/**
@@ -29,6 +31,7 @@ public class JetMacro extends BaseMacro {
@Override
public String execute(Map map, String code, RenderContext renderContext) throws MacroException {
code = code.trim();
VelocityContext context = new VelocityContext(MacroUtils.defaultVelocityContext());
String renderedTemplate = VelocityUtils.getRenderedTemplate("template.velocity", context);
@@ -39,23 +42,49 @@ public class JetMacro extends BaseMacro {
"<div class=\"container\">"
);
_JetLexer jetLexer = new _JetLexer(new StringReader(code));
_JetLexer jetLexer = new _JetLexer(new StringReader(""));
jetLexer.reset(code, 0, code.length(), _JetLexer.YYINITIAL);
Map<IElementType, String> styleMap = new HashMap<IElementType, String>();
styleMap.put(JetTokens.BLOCK_COMMENT, "comment");
styleMap.put(JetTokens.DOC_COMMENT, "comment");
styleMap.put(JetTokens.EOL_COMMENT, "comment");
styleMap.put(JetTokens.WHITE_SPACE, "whitespace");
styleMap.put(JetTokens.INTEGER_LITERAL, "number");
styleMap.put(JetTokens.FLOAT_LITERAL, "number");
styleMap.put(JetTokens.OPEN_QUOTE, "string");
styleMap.put(JetTokens.REGULAR_STRING_PART, "string");
styleMap.put(JetTokens.ESCAPE_SEQUENCE, "escape");
styleMap.put(JetTokens.LONG_TEMPLATE_ENTRY_START, "escape");
styleMap.put(JetTokens.LONG_TEMPLATE_ENTRY_END, "escape");
styleMap.put(JetTokens.SHORT_TEMPLATE_ENTRY_START, "escape");
styleMap.put(JetTokens.ESCAPE_SEQUENCE, "escape");
styleMap.put(JetTokens.CLOSING_QUOTE, "string");
styleMap.put(JetTokens.CHARACTER_LITERAL, "string");
styleMap.put(JetTokens.LABEL_IDENTIFIER, "label");
styleMap.put(JetTokens.ATAT, "label");
styleMap.put(JetTokens.FIELD_IDENTIFIER, "field");
styleMap.put(JetTokens.RAW_STRING_LITERAL, "string");
styleMap.put(TokenType.BAD_CHARACTER, "bad");
while (true) {
try {
IElementType token = jetLexer.advance();
if (token == null) break;
CharSequence yytext = jetLexer.yytext();
String style;
String style = null;
if (token instanceof JetKeywordToken) {
style = "keyword";
} else if (token == JetTokens.BLOCK_COMMENT || token == JetTokens.DOC_COMMENT || token == JetTokens.EOL_COMMENT) {
style = "comment";
} else if (token == JetTokens.IDENTIFIER) {
style = "softkeyword";
} else if (token == JetTokens.WHITE_SPACE) {
style = "whitespace";
for (IElementType softKeyword : JetTokens.SOFT_KEYWORDS.asSet()) {
if (((JetKeywordToken) softKeyword).getValue().equals(yytext.toString())) {
style = "softkeyword";
break;
}
}
style = style == null ? "plain" : style;
} else if (styleMap.containsKey(token)) {
style = styleMap.get(token);
} else {
style = "plain";
}
@@ -62,7 +62,7 @@ public interface JetTokens {
JetKeywordToken CAPITALIZED_THIS_KEYWORD = JetKeywordToken.keyword("This");
JetToken AS_SAFE = new JetToken("as?");
JetToken AS_SAFE = JetKeywordToken.keyword("AS_SAFE");//new JetToken("as?");
JetToken IDENTIFIER = new JetToken("IDENTIFIER");
JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER");
@@ -150,7 +150,7 @@ public interface JetTokens {
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD
NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD, AS_SAFE
);
TokenSet SOFT_KEYWORDS = TokenSet.create(WRAPS_KEYWORD, IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
@@ -1,4 +1,4 @@
/* The following code was generated by JFlex 1.4.3 on 7/12/11 5:50 PM */
/* The following code was generated by JFlex 1.4.3 on 7/12/11 6:40 PM */
/* It's an automatically generated code. Do not modify it. */
package org.jetbrains.jet.lexer;
@@ -14,7 +14,7 @@ import org.jetbrains.jet.lexer.JetTokens;
/**
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 7/12/11 5:50 PM from the specification file
* on 7/12/11 6:40 PM from the specification file
* <tt>/Users/abreslav/work/jet/confluence/../idea/src/org/jetbrains/jet/lexer/Jet.flex</tt>
*/
class _JetLexer implements FlexLexer {
+32 -1
View File
@@ -5,4 +5,35 @@
.jet.keyword {
font-weight: bold;
color: #369;
}
}
.jet.softkeyword {
color: #369;
}
.jet.comment {
color : green;
}
.jet.number {
color : blue;
}
.jet.string {
color : #000099;
font-weight: bold;
}
.jet.escape {
font-weight: bold;
color : black;
}
.jet.label {
color : blue;
}
.jet.field {
color : blue;
font-weight: bold;
}
.jet.bad {
background-color : #FF9999;
color:black;
}
@@ -62,7 +62,7 @@ public interface JetTokens {
JetKeywordToken CAPITALIZED_THIS_KEYWORD = JetKeywordToken.keyword("This");
JetToken AS_SAFE = new JetToken("as?");
JetToken AS_SAFE = JetKeywordToken.keyword("AS_SAFE");//new JetToken("as?");
JetToken IDENTIFIER = new JetToken("IDENTIFIER");
JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER");
@@ -150,7 +150,7 @@ public interface JetTokens {
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD
NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD, AS_SAFE
);
TokenSet SOFT_KEYWORDS = TokenSet.create(WRAPS_KEYWORD, IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
+6 -6
View File
@@ -807,7 +807,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ')
OPERATION_REFERENCE
PsiElement(as?)('as?')
PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ')
TYPE_REFERENCE
NULLABLE_TYPE
@@ -829,7 +829,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ')
OPERATION_REFERENCE
PsiElement(as?)('as?')
PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
@@ -865,7 +865,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ')
OPERATION_REFERENCE
PsiElement(as?)('as?')
PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ')
TYPE_REFERENCE
FUNCTION_TYPE
@@ -1029,7 +1029,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ')
OPERATION_REFERENCE
PsiElement(as?)('as?')
PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ')
TYPE_REFERENCE
NULLABLE_TYPE
@@ -1058,7 +1058,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ')
OPERATION_REFERENCE
PsiElement(as?)('as?')
PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
@@ -1101,7 +1101,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ')
OPERATION_REFERENCE
PsiElement(as?)('as?')
PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ')
TYPE_REFERENCE
FUNCTION_TYPE