Confluence highlighter works
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user