Skip to content

Commit

Permalink
[ #13 #25 ] Maybe it's a bug fix.
Browse files Browse the repository at this point in the history
  • Loading branch information
ice1000 committed Jan 29, 2018
1 parent 37ff4e7 commit 3b7e916
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 18 deletions.
8 changes: 3 additions & 5 deletions grammar/julia-grammar.bnf
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,12 @@ string ::= cmd | STR | RAW_STR { extends=expr }
private cmd ::= BACK_QUOTE_SYM stringTemplateElement* BACK_QUOTE_SYM

stringTemplateElement::=
escapeSequence
STRING_UNICODE
| STRING_ESCAPE
| template
| stringTemplateRegularPart
| endOfLine
| REGULAR_STRING_PART_LITERAL

private template ::= INTERPOLATE_SYM symbol | STRING_INTERPOLATE_START expr RIGHT_BRACKET
escapeSequence ::= STRING_UNICODE | STRING_ESCAPE
stringTemplateRegularPart ::= REGULAR_STRING_PART_LITERAL

integer ::= INT_LITERAL { extends=expr }
floatLit ::= FLOAT_LITERAL | FLOAT_CONSTANT
Expand Down
28 changes: 17 additions & 11 deletions grammar/julia-lexer.flex
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ package org.ice1000.julia.lang;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.TokenType;
import com.intellij.util.containers.IntStack;
import com.intellij.util.containers.BooleanStack;
import org.ice1000.julia.lang.psi.JuliaTypes;

%%

%{
private IntStack stringTemplateStack = new IntStack(20);
private BooleanStack stringTemplateStack = new BooleanStack(25);
private int commentDepth = 0;
private int commentTokenStart = 0;
public JuliaLexer() { this((java.io.Reader) null); }
Expand Down Expand Up @@ -71,8 +71,8 @@ CHAR_LITERAL={INCOMPLETE_CHAR}'
REGEX_LITERAL=r('([^'\\]|\\.)*'|\"([^\"\\]|\\.)*\")
BYTE_ARRAY_LITERAL=b('([^'\\]|\\.)*'|\"([^\"\\]|\\.)*\")

REGULAR_STRING_PART_LITERAL=[^\$()`\n]
STRING_ESCAPE=\\[^\n]
REGULAR_STRING_PART_LITERAL=[^\$()`]+
STRING_ESCAPE=\\[^]
STRING_INTERPOLATE_START=\$\(

LINE_COMMENT=#(\n|[^\n=][^\n]*)
Expand Down Expand Up @@ -200,23 +200,25 @@ OTHERWISE=[^ \t\r\n]
}
}

<STRING_TEMPLATE> {STRING_UNICODE} { return JuliaTypes.STRING_UNICODE; }
<STRING_TEMPLATE> {REGULAR_STRING_PART_LITERAL} { return JuliaTypes.REGULAR_STRING_PART_LITERAL; }
<STRING_TEMPLATE> {STRING_INTERPOLATE_START} { yybegin(YYINITIAL); return JuliaTypes.STRING_INTERPOLATE_START; }
<STRING_TEMPLATE> {STRING_INTERPOLATE_START} {
stringTemplateStack.push(true);
yybegin(YYINITIAL);
return JuliaTypes.STRING_INTERPOLATE_START;
}

<STRING_TEMPLATE> {STRING_ESCAPE} { return JuliaTypes.STRING_ESCAPE; }
<STRING_TEMPLATE> {BACK_QUOTE_SYM} {
stringTemplateStack.push(1);
yybegin(YYINITIAL);
return JuliaTypes.BACK_QUOTE_SYM;
}

<YYINITIAL> {BACK_QUOTE_SYM} {
stringTemplateStack.push(1);
yybegin(STRING_TEMPLATE);
return JuliaTypes.BACK_QUOTE_SYM;
}

<STRING_TEMPLATE> {STRING_UNICODE} { return JuliaTypes.STRING_UNICODE; }

{EOL}+ { return JuliaTypes.EOL; }
{WHITE_SPACE}+ { return TokenType.WHITE_SPACE; }

Expand All @@ -234,8 +236,12 @@ OTHERWISE=[^ \t\r\n]
{CHAR_LITERAL} { return JuliaTypes.CHAR_LITERAL; }
{INCOMPLETE_CHAR} { return TokenType.BAD_CHARACTER; }

{LEFT_BRACKET} { return JuliaTypes.LEFT_BRACKET; }
{RIGHT_BRACKET} { return JuliaTypes.RIGHT_BRACKET; }
{LEFT_BRACKET} { stringTemplateStack.push(false); return JuliaTypes.LEFT_BRACKET; }
{RIGHT_BRACKET} {
if (stringTemplateStack.pop()) yybegin(STRING_TEMPLATE);
return JuliaTypes.RIGHT_BRACKET;
}

{LEFT_B_BRACKET} { return JuliaTypes.LEFT_B_BRACKET; }
{RIGHT_B_BRACKET} { return JuliaTypes.RIGHT_B_BRACKET; }
{LEFT_M_BRACKET} { return JuliaTypes.LEFT_M_BRACKET; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ class JuliaConsoleFolding : ConsoleFolding() {
return "julia ${lines[0].substring(fileNameIndex + 1)}"
}

override fun shouldFoldLine(output: String) = output.contains("julia ") && output.endsWith(".jl")
override fun shouldFoldLine(output: String) = "julia " in output && output.endsWith(".jl")
}
2 changes: 1 addition & 1 deletion src/org/ice1000/julia/lang/julia-highlighter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ object JuliaHighlighter : SyntaxHighlighter {
override fun getTokenHighlights(type: IElementType?): Array<TextAttributesKey> = when (type) {
JuliaTypes.STR,
JuliaTypes.RAW_STR,
JuliaTypes.STRING_TEMPLATE_REGULAR_PART -> STRING_KEY
JuliaTypes.REGULAR_STRING_PART_LITERAL -> STRING_KEY
JuliaTypes.INTERPOLATE_SYM,
JuliaTypes.STRING_UNICODE-> STRING_VALID_KEY
JuliaTypes.CHAR_LITERAL -> CHAR_KEY
Expand Down

0 comments on commit 3b7e916

Please sign in to comment.