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.RenderMode;
import com.atlassian.renderer.v2.macro.BaseMacro; import com.atlassian.renderer.v2.macro.BaseMacro;
import com.atlassian.renderer.v2.macro.MacroException; import com.atlassian.renderer.v2.macro.MacroException;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IElementType;
import org.apache.velocity.VelocityContext; import org.apache.velocity.VelocityContext;
import java.io.IOException; import java.io.IOException;
import java.io.StringReader; import java.io.StringReader;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
@@ -29,6 +31,7 @@ public class JetMacro extends BaseMacro {
@Override @Override
public String execute(Map map, String code, RenderContext renderContext) throws MacroException { public String execute(Map map, String code, RenderContext renderContext) throws MacroException {
code = code.trim();
VelocityContext context = new VelocityContext(MacroUtils.defaultVelocityContext()); VelocityContext context = new VelocityContext(MacroUtils.defaultVelocityContext());
String renderedTemplate = VelocityUtils.getRenderedTemplate("template.velocity", context); String renderedTemplate = VelocityUtils.getRenderedTemplate("template.velocity", context);
@@ -39,23 +42,49 @@ public class JetMacro extends BaseMacro {
"<div class=\"container\">" "<div class=\"container\">"
); );
_JetLexer jetLexer = new _JetLexer(new StringReader(code)); _JetLexer jetLexer = new _JetLexer(new StringReader(""));
jetLexer.reset(code, 0, code.length(), _JetLexer.YYINITIAL); 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) { while (true) {
try { try {
IElementType token = jetLexer.advance(); IElementType token = jetLexer.advance();
if (token == null) break; if (token == null) break;
CharSequence yytext = jetLexer.yytext(); CharSequence yytext = jetLexer.yytext();
String style; String style = null;
if (token instanceof JetKeywordToken) { if (token instanceof JetKeywordToken) {
style = "keyword"; style = "keyword";
} else if (token == JetTokens.BLOCK_COMMENT || token == JetTokens.DOC_COMMENT || token == JetTokens.EOL_COMMENT) {
style = "comment";
} else if (token == JetTokens.IDENTIFIER) { } else if (token == JetTokens.IDENTIFIER) {
for (IElementType softKeyword : JetTokens.SOFT_KEYWORDS.asSet()) {
style = "softkeyword"; if (((JetKeywordToken) softKeyword).getValue().equals(yytext.toString())) {
} else if (token == JetTokens.WHITE_SPACE) { style = "softkeyword";
style = "whitespace"; break;
}
}
style = style == null ? "plain" : style;
} else if (styleMap.containsKey(token)) {
style = styleMap.get(token);
} else { } else {
style = "plain"; style = "plain";
} }
@@ -62,7 +62,7 @@ public interface JetTokens {
JetKeywordToken CAPITALIZED_THIS_KEYWORD = JetKeywordToken.keyword("This"); 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 IDENTIFIER = new JetToken("IDENTIFIER");
JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER"); JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER");
@@ -150,7 +150,7 @@ public interface JetTokens {
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_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, 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, 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. */ /* It's an automatically generated code. Do not modify it. */
package org.jetbrains.jet.lexer; package org.jetbrains.jet.lexer;
@@ -14,7 +14,7 @@ import org.jetbrains.jet.lexer.JetTokens;
/** /**
* This class is a scanner generated by * This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3 * <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> * <tt>/Users/abreslav/work/jet/confluence/../idea/src/org/jetbrains/jet/lexer/Jet.flex</tt>
*/ */
class _JetLexer implements FlexLexer { class _JetLexer implements FlexLexer {
+32 -1
View File
@@ -5,4 +5,35 @@
.jet.keyword { .jet.keyword {
font-weight: bold; font-weight: bold;
color: #369; 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"); 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 IDENTIFIER = new JetToken("IDENTIFIER");
JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER"); JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER");
@@ -150,7 +150,7 @@ public interface JetTokens {
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_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, 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, 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') PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(as?)('as?') PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_REFERENCE TYPE_REFERENCE
NULLABLE_TYPE NULLABLE_TYPE
@@ -829,7 +829,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t') PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(as?)('as?') PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
@@ -865,7 +865,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t') PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(as?)('as?') PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_REFERENCE TYPE_REFERENCE
FUNCTION_TYPE FUNCTION_TYPE
@@ -1029,7 +1029,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t') PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(as?)('as?') PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_REFERENCE TYPE_REFERENCE
NULLABLE_TYPE NULLABLE_TYPE
@@ -1058,7 +1058,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t') PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(as?)('as?') PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
@@ -1101,7 +1101,7 @@ JetFile: Precedence.jet
PsiElement(IDENTIFIER)('t') PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(as?)('as?') PsiElement(AS_SAFE)('as?')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_REFERENCE TYPE_REFERENCE
FUNCTION_TYPE FUNCTION_TYPE