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.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 {
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user