From ee61fa7e1065135fe7749ca072618b45b015dd41 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 12 Jul 2011 13:37:18 +0400 Subject: [PATCH] JET-142 Support string templates: Make '$' in short entries a separate token --- .../lang/parsing/JetExpressionParsing.java | 9 +- .../jet/lang/psi/JetSimpleNameExpression.java | 5 +- .../jet/lang/types/JetTypeInferrer.java | 3 +- idea/src/org/jetbrains/jet/lexer/Jet.flex | 20 +- .../org/jetbrains/jet/lexer/JetTokens.java | 2 +- .../org/jetbrains/jet/lexer/_JetLexer.java | 835 +++++++++--------- .../jetbrains/jet/plugin/JetHighlighter.java | 1 + idea/testData/checker/StringTemplates.jet | 2 +- idea/testData/psi/StringTemplates.txt | 18 +- idea/testData/psi/examples/Builder.txt | 9 +- idea/testData/resolve/StringTemplates.jet | 8 +- 11 files changed, 471 insertions(+), 441 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index 9084406a721..dc41f16c643 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -577,7 +577,7 @@ public class JetExpressionParsing extends AbstractJetParsing { /* * stringTemplateElement * : RegularStringPart - * : ShortTemplateEntry + * : ShortTemplateEntrySTART SimpleName * : EscapeSequence * : longTemplate * ; @@ -597,11 +597,12 @@ public class JetExpressionParsing extends AbstractJetParsing { advance(); // ESCAPE_SEQUENCE mark.done(ESCAPE_STRING_TEMPLATE_ENTRY); } - else if (at(SHORT_TEMPLATE_ENTRY)) { + else if (at(SHORT_TEMPLATE_ENTRY_START)) { PsiBuilder.Marker entry = mark(); + advance(); // SHORT_TEMPLATE_ENTRY_START PsiBuilder.Marker reference = mark(); - advance(); // SHORT_TEMPLATE_ENTRY + expect(IDENTIFIER, "Expecting a name"); reference.done(REFERENCE_EXPRESSION); entry.done(SHORT_STRING_TEMPLATE_ENTRY); @@ -613,7 +614,7 @@ public class JetExpressionParsing extends AbstractJetParsing { parseExpression(); - expect(LONG_TEMPLATE_ENTRY_END, "Expecting '}'", TokenSet.create(CLOSING_QUOTE, DANGLING_NEWLINE, REGULAR_STRING_PART, ESCAPE_SEQUENCE, SHORT_TEMPLATE_ENTRY)); + expect(LONG_TEMPLATE_ENTRY_END, "Expecting '}'", TokenSet.create(CLOSING_QUOTE, DANGLING_NEWLINE, REGULAR_STRING_PART, ESCAPE_SEQUENCE, SHORT_TEMPLATE_ENTRY_START)); longTemplateEntry.done(LONG_STRING_TEMPLATE_ENTRY); } else { diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java index d71507e1383..26d06be9093 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java @@ -29,7 +29,7 @@ import java.util.List; * @author max */ public class JetSimpleNameExpression extends JetReferenceExpression { - public static final TokenSet REFERENCE_TOKENS = TokenSet.orSet(JetTokens.LABELS, TokenSet.create(JetTokens.IDENTIFIER, JetTokens.FIELD_IDENTIFIER, JetTokens.THIS_KEYWORD, JetTokens.SHORT_TEMPLATE_ENTRY)); + public static final TokenSet REFERENCE_TOKENS = TokenSet.orSet(JetTokens.LABELS, TokenSet.create(JetTokens.IDENTIFIER, JetTokens.FIELD_IDENTIFIER, JetTokens.THIS_KEYWORD)); public JetSimpleNameExpression(@NotNull ASTNode node) { super(node); @@ -42,9 +42,6 @@ public class JetSimpleNameExpression extends JetReferenceExpression { return null; } String text = referencedNameElement.getNode().getText(); - if (referencedNameElement.getNode().getElementType() == JetTokens.SHORT_TEMPLATE_ENTRY) { - text = text.substring(1); // Strip the '$' - } if (text.startsWith("`") && text.endsWith("`") && text.length() >= 2) { return text.substring(1, text.length()-1); } diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index c9914843aee..afe32649cc5 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -7,7 +7,6 @@ import com.google.common.collect.Sets; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.tree.IElementType; -import com.intellij.psi.tree.TokenSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetNodeTypes; @@ -866,7 +865,7 @@ public class JetTypeInferrer { } } else { - assert TokenSet.create(JetTokens.IDENTIFIER, JetTokens.SHORT_TEMPLATE_ENTRY).contains(expression.getReferencedNameElementType()); + assert JetTokens.IDENTIFIER == expression.getReferencedNameElementType(); if (referencedName != null) { VariableDescriptor variable = context.scope.getVariable(referencedName); if (variable != null) { diff --git a/idea/src/org/jetbrains/jet/lexer/Jet.flex b/idea/src/org/jetbrains/jet/lexer/Jet.flex index 540b41dde74..4cdf54401fd 100644 --- a/idea/src/org/jetbrains/jet/lexer/Jet.flex +++ b/idea/src/org/jetbrains/jet/lexer/Jet.flex @@ -46,8 +46,8 @@ import org.jetbrains.jet.lexer.JetTokens; %eof{ return; %eof} -%xstate STRING -%state LONG_TEMPLATE +%xstate STRING SHORT_TEMPLATE_ENTRY +%state LONG_TEMPLATE_ENTRY DIGIT=[0-9] HEX_DIGIT=[0-9A-Fa-f] @@ -117,12 +117,18 @@ LONG_TEMPLATE_ENTRY_END=\} \n { popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE; } {REGULAR_STRING_PART} { return JetTokens.REGULAR_STRING_PART; } {ESCAPE_SEQUENCE} { return JetTokens.ESCAPE_SEQUENCE; } - {SHORT_TEMPLATE_ENTRY} { return JetTokens.SHORT_TEMPLATE_ENTRY; } - {LONELY_DOLLAR} { return JetTokens.REGULAR_STRING_PART; } - {LONG_TEMPLATE_ENTRY_START} { pushState(LONG_TEMPLATE); return JetTokens.LONG_TEMPLATE_ENTRY_START; } + {SHORT_TEMPLATE_ENTRY} { + pushState(SHORT_TEMPLATE_ENTRY); + yypushback(yylength() - 1); + return JetTokens.SHORT_TEMPLATE_ENTRY_START; + } + {IDENTIFIER} { popState(); return JetTokens.IDENTIFIER; } - "{" { lBraceCount++; return JetTokens.LBRACE; } - "}" { + {LONELY_DOLLAR} { return JetTokens.REGULAR_STRING_PART; } + {LONG_TEMPLATE_ENTRY_START} { pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START; } + + "{" { lBraceCount++; return JetTokens.LBRACE; } + "}" { if (lBraceCount == 0) { popState(); return JetTokens.LONG_TEMPLATE_ENTRY_END; diff --git a/idea/src/org/jetbrains/jet/lexer/JetTokens.java b/idea/src/org/jetbrains/jet/lexer/JetTokens.java index 59dbafd9366..cbb0f7bb9cf 100644 --- a/idea/src/org/jetbrains/jet/lexer/JetTokens.java +++ b/idea/src/org/jetbrains/jet/lexer/JetTokens.java @@ -25,8 +25,8 @@ public interface JetTokens { JetToken CLOSING_QUOTE = new JetToken("CLOSING_QUOTE"); JetToken OPEN_QUOTE = new JetToken("OPEN_QUOTE"); JetToken REGULAR_STRING_PART = new JetToken("REGULAR_STRING_PART"); - JetToken SHORT_TEMPLATE_ENTRY = new JetToken("SHORT_TEMPLATE_ENTRY"); JetToken ESCAPE_SEQUENCE = new JetToken("ESCAPE_SEQUENCE"); + JetToken SHORT_TEMPLATE_ENTRY_START = new JetToken("SHORT_TEMPLATE_ENTRY_START"); JetToken LONG_TEMPLATE_ENTRY_START = new JetToken("LONG_TEMPLATE_ENTRY_START"); JetToken LONG_TEMPLATE_ENTRY_END = new JetToken("LONG_TEMPLATE_ENTRY_END"); JetToken DANGLING_NEWLINE = new JetToken("DANGLING_NEWLINE"); diff --git a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java index cb0dc0fd86e..68b8a48275b 100644 --- a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java +++ b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java @@ -1,19 +1,20 @@ -/* The following code was generated by JFlex 1.4.3 on 7/11/11 10:31 PM */ +/* The following code was generated by JFlex 1.4.3 on 7/12/11 1:25 PM */ /* It's an automatically generated code. Do not modify it. */ package org.jetbrains.jet.lexer; -import com.intellij.lexer.FlexLexer; -import com.intellij.psi.TokenType; +import java.util.*; +import com.intellij.lexer.*; +import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; -import java.util.Stack; +import org.jetbrains.jet.lexer.JetTokens; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 7/11/11 10:31 PM from the specification file + * on 7/12/11 1:25 PM from the specification file * /Users/abreslav/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex */ class _JetLexer implements FlexLexer { @@ -21,9 +22,10 @@ class _JetLexer implements FlexLexer { private static final int ZZ_BUFFERSIZE = 16384; /** lexical states */ - public static final int LONG_TEMPLATE = 4; public static final int STRING = 2; public static final int YYINITIAL = 0; + public static final int LONG_TEMPLATE_ENTRY = 6; + public static final int SHORT_TEMPLATE_ENTRY = 4; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l @@ -32,7 +34,7 @@ class _JetLexer implements FlexLexer { * l is of the form l = 2*k, k a non negative integer */ private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2 + 0, 0, 1, 1, 2, 2, 3, 3 }; /** @@ -118,27 +120,28 @@ class _JetLexer implements FlexLexer { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\3\0\1\1\1\2\1\3\1\4\2\1\1\5\1\6"+ + "\4\0\1\1\1\2\1\3\1\4\2\1\1\5\1\6"+ "\1\7\1\2\1\10\1\11\1\12\1\13\1\14\1\15"+ "\16\3\1\16\1\17\1\20\1\21\1\22\1\23\2\1"+ "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ - "\1\34\2\35\1\36\1\0\1\37\1\40\1\41\1\0"+ - "\1\42\1\0\1\43\1\0\1\44\1\0\1\45\1\46"+ - "\1\47\1\50\1\51\1\42\2\2\1\42\1\52\1\53"+ - "\1\54\1\55\2\12\1\0\2\3\1\56\7\3\1\57"+ - "\1\60\1\61\10\3\1\62\1\63\1\64\1\0\1\65"+ - "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ - "\1\76\1\77\1\0\1\100\1\101\1\102\1\42\1\3"+ - "\2\0\1\47\1\103\4\0\1\104\2\3\1\105\5\3"+ - "\1\106\10\3\1\107\1\110\1\3\1\111\1\112\1\113"+ - "\1\114\1\115\1\116\1\0\1\43\1\44\1\0\2\103"+ - "\1\42\2\0\1\3\1\117\1\120\3\3\1\121\1\122"+ - "\1\3\1\123\2\3\1\124\2\3\1\125\1\77\1\47"+ - "\2\0\2\3\1\126\1\3\1\127\1\3\1\130\1\131"+ - "\1\132\1\104\2\3\1\133\1\134\3\3\1\135\1\136"; + "\1\34\2\35\1\36\1\0\1\37\1\40\1\0\1\41"+ + "\1\42\1\0\1\43\1\0\1\44\1\0\1\45\1\0"+ + "\1\46\1\47\1\50\1\51\1\52\1\43\2\2\1\43"+ + "\1\53\1\54\1\55\1\56\2\12\1\0\2\3\1\57"+ + "\7\3\1\60\1\61\1\62\10\3\1\63\1\64\1\65"+ + "\1\0\1\66\1\67\1\70\1\71\1\72\1\73\1\74"+ + "\1\75\1\76\1\77\1\100\1\0\1\101\1\102\1\0"+ + "\1\103\1\43\1\3\2\0\1\50\1\104\4\0\1\105"+ + "\2\3\1\106\5\3\1\107\10\3\1\110\1\111\1\3"+ + "\1\112\1\113\1\114\1\115\1\116\1\117\1\0\1\40"+ + "\1\44\1\45\1\0\2\104\1\43\2\0\1\3\1\120"+ + "\1\121\3\3\1\122\1\123\1\3\1\124\2\3\1\125"+ + "\2\3\1\126\1\100\1\50\2\0\2\3\1\127\1\3"+ + "\1\130\1\3\1\131\1\132\1\133\1\105\2\3\1\134"+ + "\1\135\3\3\1\136\1\137"; private static int [] zzUnpackAction() { - int [] result = new int[205]; + int [] result = new int[210]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -165,33 +168,34 @@ class _JetLexer implements FlexLexer { private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\100\0\200\0\300\0\u0100\0\u0140\0\u0180\0\u01c0"+ "\0\u0200\0\u0240\0\u0280\0\u02c0\0\u0300\0\u0340\0\u0380\0\u03c0"+ - "\0\u0400\0\300\0\300\0\u0440\0\u0480\0\u04c0\0\u0500\0\u0540"+ + "\0\u0400\0\u0440\0\u0100\0\u0100\0\u0480\0\u04c0\0\u0500\0\u0540"+ "\0\u0580\0\u05c0\0\u0600\0\u0640\0\u0680\0\u06c0\0\u0700\0\u0740"+ "\0\u0780\0\u07c0\0\u0800\0\u0840\0\u0880\0\u08c0\0\u0900\0\u0940"+ - "\0\u0980\0\300\0\u09c0\0\300\0\300\0\300\0\300\0\300"+ - "\0\300\0\300\0\u0a00\0\u0a40\0\300\0\u0a80\0\300\0\300"+ - "\0\300\0\u0ac0\0\u0b00\0\u0b40\0\u0b80\0\u0bc0\0\u0c00\0\u0c40"+ - "\0\300\0\u0c80\0\u0cc0\0\300\0\300\0\u0d00\0\u0d40\0\u0d80"+ - "\0\u0dc0\0\300\0\300\0\300\0\300\0\300\0\u0e00\0\u0e40"+ - "\0\u0e80\0\u0ec0\0\u0f00\0\u0f40\0\u0f80\0\u0fc0\0\u1000\0\u1040"+ - "\0\u1080\0\u10c0\0\u0140\0\u0140\0\u0140\0\u1100\0\u1140\0\u1180"+ - "\0\u11c0\0\u1200\0\u1240\0\u1280\0\u12c0\0\u0140\0\u1300\0\300"+ - "\0\u1340\0\u1380\0\300\0\300\0\300\0\300\0\300\0\300"+ - "\0\300\0\300\0\300\0\u13c0\0\u1400\0\300\0\300\0\300"+ - "\0\u1440\0\300\0\u1480\0\u14c0\0\u1500\0\u1540\0\u1580\0\u15c0"+ - "\0\u1600\0\u1640\0\u1680\0\u16c0\0\u1700\0\300\0\u1740\0\u1780"+ - "\0\u17c0\0\u1800\0\u1840\0\u0140\0\u1880\0\u18c0\0\u1900\0\u1940"+ - "\0\u1980\0\u19c0\0\u1a00\0\u1a40\0\u0140\0\u0140\0\u1a80\0\u0140"+ - "\0\u0140\0\300\0\300\0\300\0\300\0\u1ac0\0\300\0\300"+ - "\0\u1b00\0\u1b40\0\300\0\u1b80\0\u1440\0\u1bc0\0\u1c00\0\u0140"+ - "\0\u0140\0\u1c40\0\u1c80\0\u1cc0\0\u0140\0\u0140\0\u1d00\0\u0140"+ - "\0\u1d40\0\u1d80\0\u0140\0\u1dc0\0\u1e00\0\u0140\0\300\0\300"+ - "\0\u1e40\0\u1e80\0\u1ec0\0\u1f00\0\u0140\0\u1f40\0\u0140\0\u1f80"+ - "\0\u0140\0\u0140\0\u0140\0\300\0\u1fc0\0\u2000\0\u0140\0\u0140"+ - "\0\u2040\0\u2080\0\u20c0\0\u0140\0\u0140"; + "\0\u0980\0\u09c0\0\u0100\0\u0a00\0\u0100\0\u0100\0\u0100\0\u0100"+ + "\0\u0100\0\u0100\0\u0100\0\u0a40\0\u0a80\0\u0100\0\u0ac0\0\u0100"+ + "\0\u0b00\0\u0b40\0\u0100\0\u0100\0\u0b80\0\u0bc0\0\u0c00\0\u0c40"+ + "\0\u0c80\0\u0cc0\0\u0d00\0\u0100\0\u0d40\0\u0d80\0\u0100\0\u0100"+ + "\0\u0dc0\0\u0e00\0\u0e40\0\u0e80\0\u0100\0\u0100\0\u0100\0\u0100"+ + "\0\u0100\0\u0ec0\0\u0f00\0\u0f40\0\u0f80\0\u0fc0\0\u1000\0\u1040"+ + "\0\u1080\0\u10c0\0\u1100\0\u1140\0\u1180\0\u0180\0\u0180\0\u0180"+ + "\0\u11c0\0\u1200\0\u1240\0\u1280\0\u12c0\0\u1300\0\u1340\0\u1380"+ + "\0\u0180\0\u13c0\0\u0100\0\u1400\0\u1440\0\u0100\0\u0100\0\u0100"+ + "\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u1480\0\u14c0"+ + "\0\u0100\0\u0100\0\u1500\0\u0100\0\u1540\0\u0100\0\u1580\0\u15c0"+ + "\0\u1600\0\u1640\0\u1680\0\u16c0\0\u1700\0\u1740\0\u1780\0\u17c0"+ + "\0\u1800\0\u0100\0\u1840\0\u1880\0\u18c0\0\u1900\0\u1940\0\u0180"+ + "\0\u1980\0\u19c0\0\u1a00\0\u1a40\0\u1a80\0\u1ac0\0\u1b00\0\u1b40"+ + "\0\u0180\0\u0180\0\u1b80\0\u0180\0\u0180\0\u0100\0\u0100\0\u0100"+ + "\0\u0100\0\u1bc0\0\u0100\0\u0100\0\u0100\0\u1c00\0\u1c40\0\u0100"+ + "\0\u1c80\0\u1540\0\u1cc0\0\u1d00\0\u0180\0\u0180\0\u1d40\0\u1d80"+ + "\0\u1dc0\0\u0180\0\u0180\0\u1e00\0\u0180\0\u1e40\0\u1e80\0\u0180"+ + "\0\u1ec0\0\u1f00\0\u0180\0\u0100\0\u0100\0\u1f40\0\u1f80\0\u1fc0"+ + "\0\u2000\0\u0180\0\u2040\0\u0180\0\u2080\0\u0180\0\u0180\0\u0180"+ + "\0\u0100\0\u20c0\0\u2100\0\u0180\0\u0180\0\u2140\0\u2180\0\u21c0"+ + "\0\u0180\0\u0180"; private static int [] zzUnpackRowMap() { - int [] result = new int[205]; + int [] result = new int[210]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -214,201 +218,207 @@ class _JetLexer implements FlexLexer { private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = - "\1\4\1\5\1\6\1\7\1\6\1\4\1\10\1\11"+ - "\1\12\1\13\1\14\1\7\1\15\2\6\1\16\1\6"+ - "\1\17\1\6\1\20\1\4\1\21\1\22\1\23\1\24"+ - "\1\25\1\6\1\26\2\6\1\27\1\30\1\31\1\32"+ - "\1\6\1\33\1\34\1\6\1\35\3\6\1\36\1\6"+ - "\1\37\1\40\1\41\1\42\1\43\1\44\1\45\1\46"+ - "\1\47\1\50\1\51\1\52\1\53\1\54\1\55\1\56"+ - "\1\57\1\60\1\61\1\62\7\63\1\64\3\63\1\65"+ - "\10\63\1\66\1\67\52\63\1\4\1\5\1\6\1\7"+ - "\1\6\1\4\1\10\1\11\1\12\1\13\1\14\1\7"+ - "\1\15\2\6\1\16\1\6\1\17\1\6\1\20\1\4"+ - "\1\21\1\70\1\71\1\24\1\25\1\6\1\26\2\6"+ - "\1\27\1\30\1\31\1\32\1\6\1\33\1\34\1\6"+ - "\1\35\3\6\1\36\1\6\1\37\1\40\1\41\1\42"+ - "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52"+ - "\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62"+ - "\101\0\1\5\12\0\1\5\2\0\1\72\1\73\12\0"+ - "\1\73\45\0\2\6\1\0\2\6\6\0\3\6\1\0"+ - "\1\6\1\0\1\6\5\0\27\6\24\0\1\7\7\0"+ - "\1\7\66\0\1\74\1\0\1\74\10\0\2\74\1\0"+ - "\1\74\1\0\1\74\5\0\27\74\23\0\1\75\1\0"+ - "\1\75\1\0\1\76\6\0\2\75\1\0\1\75\1\0"+ - "\1\75\5\0\27\75\23\0\1\77\1\0\1\77\1\0"+ - "\1\100\1\0\1\101\4\0\2\77\1\0\1\77\1\0"+ - "\1\77\5\0\27\77\32\0\1\102\1\103\44\0\1\104"+ - "\77\0\1\105\21\0\1\106\12\0\1\106\1\107\1\110"+ - "\1\72\1\73\12\0\1\73\10\0\1\110\34\0\1\111"+ - "\12\0\1\111\2\0\1\112\101\0\1\113\35\0\1\114"+ - "\4\0\1\115\13\0\13\20\1\0\7\20\1\116\1\117"+ - "\53\20\25\0\1\120\53\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\1\6\1\121"+ - "\10\6\1\122\14\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\4\6\1\123"+ - "\22\6\22\0\2\6\1\0\2\6\6\0\3\6\1\0"+ - "\1\6\1\0\1\6\5\0\20\6\1\124\6\6\22\0"+ - "\2\6\1\0\2\6\6\0\3\6\1\0\1\6\1\0"+ - "\1\6\5\0\7\6\1\125\10\6\1\126\6\6\22\0"+ - "\2\6\1\0\2\6\6\0\3\6\1\0\1\6\1\0"+ - "\1\6\5\0\14\6\1\127\12\6\22\0\2\6\1\0"+ - "\2\6\6\0\3\6\1\0\1\6\1\0\1\6\5\0"+ - "\13\6\1\130\3\6\1\131\3\6\1\132\3\6\22\0"+ - "\2\6\1\0\2\6\6\0\3\6\1\0\1\6\1\0"+ - "\1\6\5\0\1\133\3\6\1\134\15\6\1\135\4\6"+ - "\22\0\2\6\1\0\2\6\6\0\3\6\1\0\1\6"+ - "\1\0\1\6\5\0\3\6\1\136\23\6\22\0\2\6"+ - "\1\0\2\6\6\0\3\6\1\0\1\6\1\0\1\6"+ - "\5\0\13\6\1\137\13\6\22\0\2\6\1\0\2\6"+ - "\6\0\3\6\1\0\1\6\1\0\1\6\5\0\17\6"+ - "\1\140\7\6\22\0\2\6\1\0\2\6\6\0\3\6"+ - "\1\0\1\6\1\0\1\6\5\0\1\6\1\141\5\6"+ - "\1\142\2\6\1\143\14\6\22\0\2\6\1\0\2\6"+ - "\6\0\3\6\1\0\1\6\1\0\1\6\5\0\17\6"+ - "\1\144\7\6\22\0\2\6\1\0\2\6\6\0\3\6"+ - "\1\0\1\6\1\0\1\6\5\0\1\6\1\145\25\6"+ - "\22\0\2\6\1\0\2\6\6\0\3\6\1\0\1\6"+ - "\1\0\1\6\5\0\7\6\1\146\17\6\100\0\1\147"+ - "\4\0\1\150\54\0\1\151\15\0\1\152\37\0\1\153"+ - "\47\0\1\154\67\0\1\155\2\0\1\156\74\0\1\157"+ - "\77\0\1\160\105\0\1\161\100\0\1\162\70\0\1\163"+ - "\20\0\7\63\1\0\3\63\1\0\10\63\2\0\52\63"+ - "\2\0\1\164\1\0\1\164\1\0\1\165\6\0\2\164"+ - "\1\0\1\164\1\0\1\164\3\0\1\166\1\0\27\164"+ - "\21\0\13\167\1\0\64\167\1\0\1\111\12\0\1\111"+ - "\2\0\1\170\61\0\1\171\12\0\1\171\4\0\1\171"+ - "\40\0\1\171\16\0\2\74\1\0\2\74\1\172\5\0"+ - "\3\74\1\0\1\74\1\0\1\74\5\0\27\74\22\0"+ - "\2\75\1\0\2\75\6\0\3\75\1\0\1\75\1\0"+ - "\1\75\5\0\27\75\23\0\1\173\1\0\1\173\10\0"+ - "\2\173\1\0\1\173\1\0\1\173\5\0\27\173\22\0"+ - "\2\77\1\0\2\77\6\0\3\77\1\0\1\77\1\0"+ - "\1\77\5\0\27\77\23\0\1\174\1\0\1\174\10\0"+ - "\2\174\1\0\1\174\1\0\1\174\5\0\27\174\21\0"+ - "\13\102\1\0\64\102\12\175\1\176\65\175\1\0\1\106"+ - "\12\0\1\106\2\0\1\177\1\73\12\0\1\73\45\0"+ - "\2\107\11\0\1\107\1\0\1\107\1\200\1\107\1\0"+ - "\1\201\6\0\1\107\1\0\1\107\1\0\1\201\1\107"+ - "\5\0\1\107\5\0\1\107\3\0\1\107\22\0\1\110"+ - "\12\0\1\110\2\0\1\202\61\0\1\111\12\0\1\111"+ - "\3\0\1\73\12\0\1\73\44\0\13\20\1\0\64\20"+ - "\25\0\1\203\53\0\2\6\1\0\2\6\6\0\3\6"+ - "\1\0\1\6\1\0\1\6\5\0\2\6\1\204\24\6"+ - "\22\0\2\6\1\0\2\6\6\0\3\6\1\0\1\6"+ - "\1\0\1\6\5\0\20\6\1\205\6\6\22\0\2\6"+ - "\1\0\2\6\6\0\3\6\1\0\1\6\1\0\1\6"+ - "\5\0\27\6\2\0\1\206\17\0\2\6\1\0\2\6"+ - "\6\0\3\6\1\0\1\6\1\0\1\6\5\0\4\6"+ - "\1\207\22\6\22\0\2\6\1\0\2\6\6\0\3\6"+ - "\1\0\1\6\1\0\1\6\5\0\1\210\26\6\22\0"+ - "\2\6\1\0\2\6\6\0\3\6\1\0\1\6\1\0"+ - "\1\6\5\0\1\6\1\211\25\6\22\0\2\6\1\0"+ - "\2\6\6\0\3\6\1\0\1\6\1\0\1\6\5\0"+ - "\15\6\1\212\11\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\12\6\1\213"+ - "\10\6\1\214\3\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\11\6\1\215"+ - "\1\6\1\216\13\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\5\6\1\217"+ - "\21\6\22\0\2\6\1\0\2\6\6\0\3\6\1\0"+ - "\1\6\1\0\1\6\5\0\10\6\1\220\16\6\22\0"+ - "\2\6\1\0\2\6\6\0\3\6\1\0\1\6\1\0"+ - "\1\6\5\0\3\6\1\221\23\6\22\0\2\6\1\0"+ - "\2\6\6\0\3\6\1\0\1\6\1\0\1\6\5\0"+ - "\3\6\1\222\5\6\1\223\15\6\22\0\2\6\1\0"+ - "\2\6\6\0\3\6\1\0\1\6\1\0\1\6\5\0"+ - "\20\6\1\224\6\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\13\6\1\225"+ - "\13\6\22\0\2\6\1\0\2\6\6\0\3\6\1\0"+ - "\1\6\1\0\1\6\5\0\1\226\26\6\22\0\2\6"+ - "\1\0\2\6\6\0\3\6\1\0\1\6\1\0\1\6"+ - "\5\0\11\6\1\227\15\6\22\0\2\6\1\0\2\6"+ - "\6\0\3\6\1\0\1\6\1\0\1\6\5\0\13\6"+ - "\1\230\4\6\1\231\6\6\100\0\1\232\50\0\1\233"+ - "\3\0\1\234\122\0\1\235\21\0\2\164\1\0\2\164"+ - "\6\0\3\164\1\0\1\164\1\0\1\164\5\0\27\164"+ - "\23\0\1\236\1\0\1\236\10\0\2\236\1\0\1\236"+ - "\1\0\1\236\5\0\27\236\22\0\1\171\12\0\1\171"+ - "\64\0\2\173\1\0\2\173\1\237\5\0\3\173\1\0"+ - "\1\173\1\0\1\173\5\0\27\173\22\0\2\174\1\0"+ - "\2\174\1\240\5\0\3\174\1\0\1\174\1\0\1\174"+ - "\5\0\27\174\21\0\12\175\1\241\65\175\11\242\1\243"+ - "\1\176\65\242\1\0\1\111\12\0\1\111\64\0\2\244"+ - "\11\0\1\244\1\0\1\244\1\170\1\244\10\0\1\244"+ - "\1\0\1\244\2\0\1\244\5\0\1\244\5\0\1\244"+ - "\3\0\1\244\22\0\1\171\12\0\1\171\4\0\1\245"+ - "\40\0\1\245\34\0\1\170\60\0\25\203\1\246\52\203"+ - "\1\0\2\6\1\0\2\6\6\0\3\6\1\0\1\6"+ - "\1\0\1\6\5\0\3\6\1\247\23\6\22\0\2\6"+ - "\1\0\2\6\6\0\3\6\1\0\1\6\1\0\1\6"+ - "\5\0\20\6\1\250\6\6\22\0\2\6\1\0\2\6"+ - "\6\0\3\6\1\0\1\6\1\0\1\6\5\0\3\6"+ - "\1\251\23\6\22\0\2\6\1\0\2\6\6\0\3\6"+ - "\1\0\1\6\1\0\1\6\5\0\10\6\1\252\16\6"+ - "\22\0\2\6\1\0\2\6\6\0\3\6\1\0\1\6"+ - "\1\0\1\6\5\0\4\6\1\253\22\6\22\0\2\6"+ - "\1\0\2\6\6\0\3\6\1\0\1\6\1\0\1\6"+ - "\5\0\3\6\1\254\23\6\22\0\2\6\1\0\2\6"+ - "\6\0\3\6\1\0\1\6\1\0\1\6\5\0\3\6"+ - "\1\255\23\6\22\0\2\6\1\0\2\6\6\0\3\6"+ - "\1\0\1\6\1\0\1\6\5\0\4\6\1\256\22\6"+ - "\22\0\2\6\1\0\2\6\6\0\3\6\1\0\1\6"+ - "\1\0\1\6\5\0\7\6\1\257\17\6\22\0\2\6"+ - "\1\0\2\6\6\0\3\6\1\0\1\6\1\0\1\6"+ - "\5\0\3\6\1\260\23\6\22\0\2\6\1\0\2\6"+ - "\6\0\3\6\1\0\1\6\1\0\1\6\5\0\12\6"+ - "\1\261\14\6\22\0\2\6\1\0\2\6\6\0\3\6"+ - "\1\0\1\6\1\0\1\6\5\0\1\6\1\262\25\6"+ - "\22\0\2\6\1\0\2\6\6\0\3\6\1\0\1\6"+ - "\1\0\1\6\5\0\1\263\26\6\22\0\2\6\1\0"+ - "\2\6\6\0\3\6\1\0\1\6\1\0\1\6\5\0"+ - "\20\6\1\264\6\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\4\6\1\265"+ - "\22\6\22\0\2\6\1\0\2\6\6\0\3\6\1\0"+ - "\1\6\1\0\1\6\5\0\4\6\1\266\22\6\22\0"+ - "\2\236\1\0\2\236\1\267\5\0\3\236\1\0\1\236"+ - "\1\0\1\236\5\0\27\236\21\0\11\175\1\270\1\241"+ - "\65\175\12\242\1\271\65\242\1\0\2\244\11\0\1\244"+ - "\1\0\1\244\1\0\1\244\1\0\1\201\6\0\1\244"+ - "\1\0\1\244\1\0\1\201\1\244\5\0\1\244\5\0"+ - "\1\244\3\0\1\244\21\0\25\203\1\272\52\203\1\0"+ - "\2\6\1\0\2\6\6\0\3\6\1\0\1\6\1\0"+ - "\1\6\5\0\4\6\1\273\22\6\22\0\2\6\1\0"+ - "\2\6\6\0\3\6\1\0\1\6\1\0\1\6\5\0"+ - "\11\6\1\274\15\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\4\6\1\275"+ - "\22\6\22\0\2\6\1\0\2\6\6\0\3\6\1\0"+ - "\1\6\1\0\1\6\5\0\6\6\1\276\20\6\22\0"+ - "\2\6\1\0\2\6\6\0\3\6\1\0\1\6\1\0"+ - "\1\6\5\0\16\6\1\277\10\6\22\0\2\6\1\0"+ - "\2\6\6\0\3\6\1\0\1\6\1\0\1\6\5\0"+ - "\13\6\1\300\13\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\21\6\1\301"+ - "\5\6\22\0\2\6\1\0\2\6\6\0\3\6\1\0"+ - "\1\6\1\0\1\6\5\0\3\6\1\302\23\6\22\0"+ - "\2\6\1\0\2\6\6\0\3\6\1\0\1\6\1\0"+ - "\1\6\5\0\3\6\1\303\23\6\21\0\11\242\1\243"+ - "\1\271\65\242\25\203\1\304\52\203\1\0\2\6\1\0"+ - "\2\6\6\0\3\6\1\0\1\6\1\0\1\6\5\0"+ - "\5\6\1\305\21\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\1\306\26\6"+ - "\22\0\2\6\1\0\2\6\6\0\3\6\1\0\1\6"+ - "\1\0\1\6\5\0\10\6\1\307\16\6\22\0\2\6"+ - "\1\0\2\6\6\0\3\6\1\0\1\6\1\0\1\6"+ - "\5\0\1\310\26\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\1\6\1\311"+ - "\25\6\22\0\2\6\1\0\2\6\6\0\3\6\1\0"+ - "\1\6\1\0\1\6\5\0\12\6\1\312\14\6\22\0"+ - "\2\6\1\0\2\6\6\0\3\6\1\0\1\6\1\0"+ - "\1\6\5\0\6\6\1\313\20\6\22\0\2\6\1\0"+ - "\2\6\6\0\3\6\1\0\1\6\1\0\1\6\5\0"+ - "\3\6\1\314\23\6\22\0\2\6\1\0\2\6\6\0"+ - "\3\6\1\0\1\6\1\0\1\6\5\0\3\6\1\315"+ - "\23\6\21\0"; + "\1\5\1\6\1\7\1\10\1\7\1\5\1\11\1\12"+ + "\1\13\1\14\1\15\1\10\1\16\2\7\1\17\1\7"+ + "\1\20\1\7\1\21\1\5\1\22\1\23\1\24\1\25"+ + "\1\26\1\7\1\27\2\7\1\30\1\31\1\32\1\33"+ + "\1\7\1\34\1\35\1\7\1\36\3\7\1\37\1\7"+ + "\1\40\1\41\1\42\1\43\1\44\1\45\1\46\1\47"+ + "\1\50\1\51\1\52\1\53\1\54\1\55\1\56\1\57"+ + "\1\60\1\61\1\62\1\63\7\64\1\65\3\64\1\66"+ + "\10\64\1\67\1\70\52\64\2\0\1\71\1\0\1\71"+ + "\1\0\1\72\6\0\2\71\1\0\1\71\1\0\1\71"+ + "\5\0\27\71\21\0\1\5\1\6\1\7\1\10\1\7"+ + "\1\5\1\11\1\12\1\13\1\14\1\15\1\10\1\16"+ + "\2\7\1\17\1\7\1\20\1\7\1\21\1\5\1\22"+ + "\1\73\1\74\1\25\1\26\1\7\1\27\2\7\1\30"+ + "\1\31\1\32\1\33\1\7\1\34\1\35\1\7\1\36"+ + "\3\7\1\37\1\7\1\40\1\41\1\42\1\43\1\44"+ + "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ + "\1\55\1\56\1\57\1\60\1\61\1\62\1\63\101\0"+ + "\1\6\12\0\1\6\2\0\1\75\1\76\12\0\1\76"+ + "\45\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+ + "\1\0\1\7\5\0\27\7\24\0\1\10\7\0\1\10"+ + "\66\0\1\77\1\0\1\77\10\0\2\77\1\0\1\77"+ + "\1\0\1\77\5\0\27\77\23\0\1\100\1\0\1\100"+ + "\1\0\1\101\6\0\2\100\1\0\1\100\1\0\1\100"+ + "\5\0\27\100\23\0\1\102\1\0\1\102\1\0\1\103"+ + "\1\0\1\104\4\0\2\102\1\0\1\102\1\0\1\102"+ + "\5\0\27\102\32\0\1\105\1\106\44\0\1\107\77\0"+ + "\1\110\21\0\1\111\12\0\1\111\1\112\1\113\1\75"+ + "\1\76\12\0\1\76\10\0\1\113\34\0\1\114\12\0"+ + "\1\114\2\0\1\115\101\0\1\116\35\0\1\117\4\0"+ + "\1\120\13\0\13\21\1\0\7\21\1\121\1\122\53\21"+ + "\25\0\1\123\53\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\1\7\1\124\10\7"+ + "\1\125\14\7\22\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\4\7\1\126\22\7"+ + "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+ + "\1\0\1\7\5\0\20\7\1\127\6\7\22\0\2\7"+ + "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+ + "\5\0\7\7\1\130\10\7\1\131\6\7\22\0\2\7"+ + "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+ + "\5\0\14\7\1\132\12\7\22\0\2\7\1\0\2\7"+ + "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\13\7"+ + "\1\133\3\7\1\134\3\7\1\135\3\7\22\0\2\7"+ + "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+ + "\5\0\1\136\3\7\1\137\15\7\1\140\4\7\22\0"+ + "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+ + "\1\7\5\0\3\7\1\141\23\7\22\0\2\7\1\0"+ + "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+ + "\13\7\1\142\13\7\22\0\2\7\1\0\2\7\6\0"+ + "\3\7\1\0\1\7\1\0\1\7\5\0\17\7\1\143"+ + "\7\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+ + "\1\7\1\0\1\7\5\0\1\7\1\144\5\7\1\145"+ + "\2\7\1\146\14\7\22\0\2\7\1\0\2\7\6\0"+ + "\3\7\1\0\1\7\1\0\1\7\5\0\17\7\1\147"+ + "\7\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+ + "\1\7\1\0\1\7\5\0\1\7\1\150\25\7\22\0"+ + "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+ + "\1\7\5\0\7\7\1\151\17\7\100\0\1\152\4\0"+ + "\1\153\54\0\1\154\15\0\1\155\37\0\1\156\47\0"+ + "\1\157\67\0\1\160\2\0\1\161\74\0\1\162\77\0"+ + "\1\163\105\0\1\164\100\0\1\165\70\0\1\166\20\0"+ + "\7\64\1\0\3\64\1\0\10\64\2\0\52\64\2\0"+ + "\1\167\1\0\1\167\1\0\1\170\6\0\2\167\1\0"+ + "\1\167\1\0\1\167\3\0\1\171\1\0\27\167\21\0"+ + "\13\172\1\0\64\172\1\0\2\71\1\0\2\71\6\0"+ + "\3\71\1\0\1\71\1\0\1\71\5\0\27\71\23\0"+ + "\1\173\1\0\1\173\10\0\2\173\1\0\1\173\1\0"+ + "\1\173\5\0\27\173\22\0\1\114\12\0\1\114\2\0"+ + "\1\174\61\0\1\175\12\0\1\175\4\0\1\175\40\0"+ + "\1\175\16\0\2\77\1\0\2\77\1\176\5\0\3\77"+ + "\1\0\1\77\1\0\1\77\5\0\27\77\22\0\2\100"+ + "\1\0\2\100\6\0\3\100\1\0\1\100\1\0\1\100"+ + "\5\0\27\100\23\0\1\177\1\0\1\177\10\0\2\177"+ + "\1\0\1\177\1\0\1\177\5\0\27\177\22\0\2\102"+ + "\1\0\2\102\6\0\3\102\1\0\1\102\1\0\1\102"+ + "\5\0\27\102\23\0\1\200\1\0\1\200\10\0\2\200"+ + "\1\0\1\200\1\0\1\200\5\0\27\200\21\0\13\105"+ + "\1\0\64\105\12\201\1\202\65\201\1\0\1\111\12\0"+ + "\1\111\2\0\1\203\1\76\12\0\1\76\45\0\2\112"+ + "\11\0\1\112\1\0\1\112\1\204\1\112\1\0\1\205"+ + "\6\0\1\112\1\0\1\112\1\0\1\205\1\112\5\0"+ + "\1\112\5\0\1\112\3\0\1\112\22\0\1\113\12\0"+ + "\1\113\2\0\1\206\61\0\1\114\12\0\1\114\3\0"+ + "\1\76\12\0\1\76\44\0\13\21\1\0\64\21\25\0"+ + "\1\207\53\0\2\7\1\0\2\7\6\0\3\7\1\0"+ + "\1\7\1\0\1\7\5\0\2\7\1\210\24\7\22\0"+ + "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+ + "\1\7\5\0\20\7\1\211\6\7\22\0\2\7\1\0"+ + "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+ + "\27\7\2\0\1\212\17\0\2\7\1\0\2\7\6\0"+ + "\3\7\1\0\1\7\1\0\1\7\5\0\4\7\1\213"+ + "\22\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+ + "\1\7\1\0\1\7\5\0\1\214\26\7\22\0\2\7"+ + "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+ + "\5\0\1\7\1\215\25\7\22\0\2\7\1\0\2\7"+ + "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\15\7"+ + "\1\216\11\7\22\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\12\7\1\217\10\7"+ + "\1\220\3\7\22\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\11\7\1\221\1\7"+ + "\1\222\13\7\22\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\5\7\1\223\21\7"+ + "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+ + "\1\0\1\7\5\0\10\7\1\224\16\7\22\0\2\7"+ + "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+ + "\5\0\3\7\1\225\23\7\22\0\2\7\1\0\2\7"+ + "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\3\7"+ + "\1\226\5\7\1\227\15\7\22\0\2\7\1\0\2\7"+ + "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\20\7"+ + "\1\230\6\7\22\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\13\7\1\231\13\7"+ + "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+ + "\1\0\1\7\5\0\1\232\26\7\22\0\2\7\1\0"+ + "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+ + "\11\7\1\233\15\7\22\0\2\7\1\0\2\7\6\0"+ + "\3\7\1\0\1\7\1\0\1\7\5\0\13\7\1\234"+ + "\4\7\1\235\6\7\100\0\1\236\50\0\1\237\3\0"+ + "\1\240\122\0\1\241\21\0\2\167\1\0\2\167\6\0"+ + "\3\167\1\0\1\167\1\0\1\167\5\0\27\167\23\0"+ + "\1\242\1\0\1\242\10\0\2\242\1\0\1\242\1\0"+ + "\1\242\5\0\27\242\22\0\2\173\1\0\2\173\1\243"+ + "\5\0\3\173\1\0\1\173\1\0\1\173\5\0\27\173"+ + "\22\0\1\175\12\0\1\175\64\0\2\177\1\0\2\177"+ + "\1\244\5\0\3\177\1\0\1\177\1\0\1\177\5\0"+ + "\27\177\22\0\2\200\1\0\2\200\1\245\5\0\3\200"+ + "\1\0\1\200\1\0\1\200\5\0\27\200\21\0\12\201"+ + "\1\246\65\201\11\247\1\250\1\202\65\247\1\0\1\114"+ + "\12\0\1\114\64\0\2\251\11\0\1\251\1\0\1\251"+ + "\1\174\1\251\10\0\1\251\1\0\1\251\2\0\1\251"+ + "\5\0\1\251\5\0\1\251\3\0\1\251\22\0\1\175"+ + "\12\0\1\175\4\0\1\252\40\0\1\252\34\0\1\174"+ + "\60\0\25\207\1\253\52\207\1\0\2\7\1\0\2\7"+ + "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\3\7"+ + "\1\254\23\7\22\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\20\7\1\255\6\7"+ + "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+ + "\1\0\1\7\5\0\3\7\1\256\23\7\22\0\2\7"+ + "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+ + "\5\0\10\7\1\257\16\7\22\0\2\7\1\0\2\7"+ + "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\4\7"+ + "\1\260\22\7\22\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\3\7\1\261\23\7"+ + "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+ + "\1\0\1\7\5\0\3\7\1\262\23\7\22\0\2\7"+ + "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+ + "\5\0\4\7\1\263\22\7\22\0\2\7\1\0\2\7"+ + "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\7\7"+ + "\1\264\17\7\22\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\3\7\1\265\23\7"+ + "\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+ + "\1\0\1\7\5\0\12\7\1\266\14\7\22\0\2\7"+ + "\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+ + "\5\0\1\7\1\267\25\7\22\0\2\7\1\0\2\7"+ + "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\1\270"+ + "\26\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+ + "\1\7\1\0\1\7\5\0\20\7\1\271\6\7\22\0"+ + "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+ + "\1\7\5\0\4\7\1\272\22\7\22\0\2\7\1\0"+ + "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+ + "\4\7\1\273\22\7\22\0\2\242\1\0\2\242\1\274"+ + "\5\0\3\242\1\0\1\242\1\0\1\242\5\0\27\242"+ + "\21\0\11\201\1\275\1\246\65\201\12\247\1\276\65\247"+ + "\1\0\2\251\11\0\1\251\1\0\1\251\1\0\1\251"+ + "\1\0\1\205\6\0\1\251\1\0\1\251\1\0\1\205"+ + "\1\251\5\0\1\251\5\0\1\251\3\0\1\251\21\0"+ + "\25\207\1\277\52\207\1\0\2\7\1\0\2\7\6\0"+ + "\3\7\1\0\1\7\1\0\1\7\5\0\4\7\1\300"+ + "\22\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+ + "\1\7\1\0\1\7\5\0\11\7\1\301\15\7\22\0"+ + "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+ + "\1\7\5\0\4\7\1\302\22\7\22\0\2\7\1\0"+ + "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+ + "\6\7\1\303\20\7\22\0\2\7\1\0\2\7\6\0"+ + "\3\7\1\0\1\7\1\0\1\7\5\0\16\7\1\304"+ + "\10\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+ + "\1\7\1\0\1\7\5\0\13\7\1\305\13\7\22\0"+ + "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+ + "\1\7\5\0\21\7\1\306\5\7\22\0\2\7\1\0"+ + "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+ + "\3\7\1\307\23\7\22\0\2\7\1\0\2\7\6\0"+ + "\3\7\1\0\1\7\1\0\1\7\5\0\3\7\1\310"+ + "\23\7\21\0\11\247\1\250\1\276\65\247\25\207\1\311"+ + "\52\207\1\0\2\7\1\0\2\7\6\0\3\7\1\0"+ + "\1\7\1\0\1\7\5\0\5\7\1\312\21\7\22\0"+ + "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+ + "\1\7\5\0\1\313\26\7\22\0\2\7\1\0\2\7"+ + "\6\0\3\7\1\0\1\7\1\0\1\7\5\0\10\7"+ + "\1\314\16\7\22\0\2\7\1\0\2\7\6\0\3\7"+ + "\1\0\1\7\1\0\1\7\5\0\1\315\26\7\22\0"+ + "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+ + "\1\7\5\0\1\7\1\316\25\7\22\0\2\7\1\0"+ + "\2\7\6\0\3\7\1\0\1\7\1\0\1\7\5\0"+ + "\12\7\1\317\14\7\22\0\2\7\1\0\2\7\6\0"+ + "\3\7\1\0\1\7\1\0\1\7\5\0\6\7\1\320"+ + "\20\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+ + "\1\7\1\0\1\7\5\0\3\7\1\321\23\7\22\0"+ + "\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+ + "\1\7\5\0\3\7\1\322\23\7\21\0"; private static int [] zzUnpackTrans() { - int [] result = new int[8448]; + int [] result = new int[8704]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -449,16 +459,17 @@ class _JetLexer implements FlexLexer { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\1\11\15\1\2\11\26\1\1\11\1\1\7\11"+ - "\2\1\1\11\1\0\3\11\1\0\1\1\1\0\1\1"+ - "\1\0\1\1\1\0\1\11\2\1\2\11\4\1\5\11"+ - "\1\1\1\0\27\1\1\11\1\0\1\1\11\11\1\1"+ - "\1\0\3\11\1\1\1\11\2\0\2\1\4\0\3\1"+ - "\1\11\23\1\4\11\1\0\2\11\1\0\1\1\1\11"+ - "\1\1\2\0\20\1\2\11\2\0\11\1\1\11\11\1"; + "\4\0\1\11\15\1\2\11\26\1\1\11\1\1\7\11"+ + "\2\1\1\11\1\0\1\11\1\1\1\0\2\11\1\0"+ + "\1\1\1\0\1\1\1\0\1\1\1\0\1\11\2\1"+ + "\2\11\4\1\5\11\1\1\1\0\27\1\1\11\1\0"+ + "\1\1\11\11\1\1\1\0\2\11\1\0\1\11\1\1"+ + "\1\11\2\0\2\1\4\0\3\1\1\11\23\1\4\11"+ + "\1\0\3\11\1\0\1\1\1\11\1\1\2\0\20\1"+ + "\2\11\2\0\11\1\1\11\11\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[205]; + int [] result = new int[210]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -792,24 +803,24 @@ class _JetLexer implements FlexLexer { case 3: { return JetTokens.IDENTIFIER; } - case 95: break; + case 96: break; case 11: { pushState(STRING); return JetTokens.OPEN_QUOTE; } - case 96: break; - case 71: + case 97: break; + case 72: { return JetTokens.FOR_KEYWORD ; } - case 97: break; - case 92: + case 98: break; + case 93: { return JetTokens.RETURN_KEYWORD ; } - case 98: break; - case 79: + case 99: break; + case 80: { return JetTokens.NULL_KEYWORD ; } - case 99: break; - case 33: + case 100: break; + case 34: { if (lBraceCount == 0) { popState(); return JetTokens.LONG_TEMPLATE_ENTRY_END; @@ -817,359 +828,365 @@ class _JetLexer implements FlexLexer { lBraceCount--; return JetTokens.RBRACE; } - case 100: break; + case 101: break; case 18: { return JetTokens.LT ; } - case 101: break; - case 50: + case 102: break; + case 51: { return JetTokens.DO_KEYWORD ; } - case 102: break; + case 103: break; case 17: { return JetTokens.PLUS ; } - case 103: break; - case 68: + case 104: break; + case 69: { return JetTokens.RAW_STRING_LITERAL; } - case 104: break; - case 56: + case 105: break; + case 57: { return JetTokens.PLUSEQ ; } - case 105: break; + case 106: break; case 27: { return JetTokens.COMMA ; } - case 106: break; + case 107: break; case 19: { return JetTokens.GT ; } - case 107: break; + case 108: break; case 4: { return JetTokens.WHITE_SPACE; } - case 108: break; + case 109: break; case 25: { return JetTokens.RPAR ; } - case 109: break; - case 52: + case 110: break; + case 53: { return JetTokens.DOUBLE_ARROW; } - case 110: break; - case 81: + case 111: break; + case 82: { return JetTokens.TRUE_KEYWORD ; } - case 111: break; - case 35: + case 112: break; + case 36: { return JetTokens.FIELD_IDENTIFIER; } - case 112: break; - case 60: + case 113: break; + case 61: { return JetTokens.ANDAND ; } - case 113: break; - case 67: - { return JetTokens.DOC_COMMENT; - } case 114: break; - case 34: - { return JetTokens.FLOAT_LITERAL; + case 65: + { pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START; } case 115: break; - case 38: - { return JetTokens.EOL_COMMENT; + case 68: + { return JetTokens.DOC_COMMENT; } case 116: break; - case 84: - { return JetTokens.WHEN_KEYWORD ; + case 35: + { return JetTokens.FLOAT_LITERAL; } case 117: break; + case 39: + { return JetTokens.EOL_COMMENT; + } + case 118: break; + case 85: + { return JetTokens.WHEN_KEYWORD ; + } + case 119: break; case 20: { return JetTokens.COLON ; } - case 118: break; - case 58: + case 120: break; + case 59: { return JetTokens.LTEQ ; } - case 119: break; - case 45: + case 121: break; + case 46: { return JetTokens.ARROW ; } - case 120: break; + case 122: break; + case 32: + { popState(); return JetTokens.IDENTIFIER; + } + case 123: break; case 22: { return JetTokens.LBRACKET ; } - case 121: break; - case 66: + case 124: break; + case 67: { yypushback(2); return JetTokens.INTEGER_LITERAL; } - case 122: break; + case 125: break; case 10: { return JetTokens.CHARACTER_LITERAL; } - case 123: break; - case 73: + case 126: break; + case 74: { return JetTokens.VAR_KEYWORD ; } - case 124: break; - case 59: + case 127: break; + case 60: { return JetTokens.GTEQ ; } - case 125: break; + case 128: break; case 2: { return JetTokens.INTEGER_LITERAL; } - case 126: break; + case 129: break; case 13: { return JetTokens.RBRACE ; } - case 127: break; - case 86: + case 130: break; + case 87: { return JetTokens.CLASS_KEYWORD ; } - case 128: break; + case 131: break; case 15: { return JetTokens.EXCL ; } - case 129: break; - case 70: + case 132: break; + case 71: { return JetTokens.TRY_KEYWORD ; } - case 130: break; - case 53: + case 133: break; + case 54: { return JetTokens.EXCLEQ ; } - case 131: break; - case 44: + case 134: break; + case 45: { return JetTokens.MINUSEQ ; } - case 132: break; - case 87: + case 135: break; + case 88: { return JetTokens.THROW_KEYWORD ; } - case 133: break; - case 89: + case 136: break; + case 90: { return JetTokens.WHILE_KEYWORD ; } - case 134: break; - case 43: + case 137: break; + case 44: { return JetTokens.MINUSMINUS; } - case 135: break; - case 93: + case 138: break; + case 94: { return JetTokens.CONTINUE_KEYWORD ; } - case 136: break; - case 76: + case 139: break; + case 77: { return JetTokens.NOT_IN; } - case 137: break; - case 37: + case 140: break; + case 38: { return JetTokens.ATAT ; } - case 138: break; + case 141: break; case 6: { return JetTokens.DIV ; } - case 139: break; - case 55: + case 142: break; + case 56: { return JetTokens.ELVIS ; } - case 140: break; - case 36: + case 143: break; + case 37: { return JetTokens.LABEL_IDENTIFIER; } - case 141: break; + case 144: break; case 29: { return JetTokens.REGULAR_STRING_PART; } - case 142: break; + case 145: break; case 16: { return JetTokens.QUEST ; } - case 143: break; - case 61: + case 146: break; + case 62: { return JetTokens.OROR ; } - case 144: break; + case 147: break; case 21: { return JetTokens.PERC ; } - case 145: break; - case 78: + case 148: break; + case 79: { return JetTokens.EXCLEQEQEQ; } - case 146: break; - case 62: + case 149: break; + case 63: { return JetTokens.PERCEQ ; } - case 147: break; - case 42: + case 150: break; + case 43: { return JetTokens.RANGE ; } - case 148: break; - case 64: - { pushState(LONG_TEMPLATE); return JetTokens.LONG_TEMPLATE_ENTRY_START; - } - case 149: break; + case 151: break; case 1: { return TokenType.BAD_CHARACTER; } - case 150: break; - case 54: + case 152: break; + case 55: { return JetTokens.SAFE_ACCESS; } - case 151: break; - case 94: + case 153: break; + case 95: { return JetTokens.NAMESPACE_KEYWORD ; } - case 152: break; - case 77: + case 154: break; + case 78: { return JetTokens.NOT_IS; } - case 153: break; + case 155: break; case 7: { return JetTokens.MUL ; } - case 154: break; + case 156: break; case 23: { return JetTokens.RBRACKET ; } - case 155: break; - case 57: + case 157: break; + case 58: { return JetTokens.PLUSPLUS ; } - case 156: break; - case 63: - { return JetTokens.SHORT_TEMPLATE_ENTRY; - } - case 157: break; - case 82: + case 158: break; + case 83: { return JetTokens.THIS_KEYWORD ; } - case 158: break; + case 159: break; case 8: { return JetTokens.DOT ; } - case 159: break; + case 160: break; case 26: { return JetTokens.SEMICOLON ; } - case 160: break; - case 49: + case 161: break; + case 50: { return JetTokens.IF_KEYWORD ; } - case 161: break; - case 65: + case 162: break; + case 66: { return JetTokens.ESCAPE_SEQUENCE; } - case 162: break; + case 163: break; case 31: { popState(); return JetTokens.CLOSING_QUOTE; } - case 163: break; + case 164: break; case 14: { return JetTokens.EQ ; } - case 164: break; + case 165: break; case 5: { return JetTokens.AT ; } - case 165: break; - case 69: + case 166: break; + case 70: { return JetTokens.AS_SAFE; } - case 166: break; + case 167: break; case 24: { return JetTokens.LPAR ; } - case 167: break; + case 168: break; case 9: { return JetTokens.MINUS ; } - case 168: break; - case 90: + case 169: break; + case 91: { return JetTokens.FALSE_KEYWORD ; } - case 169: break; - case 83: + case 170: break; + case 84: { return JetTokens.TYPE_KEYWORD ; } - case 170: break; - case 72: + case 171: break; + case 73: { return JetTokens.FUN_KEYWORD ; } - case 171: break; - case 48: + case 172: break; + case 49: { return JetTokens.IS_KEYWORD ; } - case 172: break; + case 173: break; case 30: { popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE; } - case 173: break; - case 32: + case 174: break; + case 33: { lBraceCount++; return JetTokens.LBRACE; } - case 174: break; - case 40: + case 175: break; + case 41: { return JetTokens.DIVEQ ; } - case 175: break; - case 80: - { return JetTokens.ELSE_KEYWORD ; - } case 176: break; - case 46: - { return JetTokens.AS_KEYWORD ; + case 81: + { return JetTokens.ELSE_KEYWORD ; } case 177: break; case 47: - { return JetTokens.IN_KEYWORD ; + { return JetTokens.AS_KEYWORD ; } case 178: break; - case 51: - { return JetTokens.EQEQ ; + case 48: + { return JetTokens.IN_KEYWORD ; } case 179: break; - case 75: - { return JetTokens.EQEQEQ ; + case 52: + { return JetTokens.EQEQ ; } case 180: break; - case 74: - { return JetTokens.VAL_KEYWORD ; + case 76: + { return JetTokens.EQEQEQ ; } case 181: break; - case 85: - { return JetTokens.CAPITALIZED_THIS_KEYWORD ; + case 75: + { return JetTokens.VAL_KEYWORD ; } case 182: break; - case 41: - { return JetTokens.MULTEQ ; + case 86: + { return JetTokens.CAPITALIZED_THIS_KEYWORD ; } case 183: break; + case 42: + { return JetTokens.MULTEQ ; + } + case 184: break; + case 64: + { pushState(SHORT_TEMPLATE_ENTRY); + yypushback(yylength() - 1); + return JetTokens.SHORT_TEMPLATE_ENTRY_START; + } + case 185: break; case 12: { return JetTokens.LBRACE ; } - case 184: break; - case 91: + case 186: break; + case 92: { return JetTokens.OBJECT_KEYWORD ; } - case 185: break; - case 88: + case 187: break; + case 89: { return JetTokens.BREAK_KEYWORD ; } - case 186: break; - case 39: + case 188: break; + case 40: { return JetTokens.BLOCK_COMMENT; } - case 187: break; + case 189: break; case 28: { return JetTokens.HASH ; } - case 188: break; + case 190: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/idea/src/org/jetbrains/jet/plugin/JetHighlighter.java b/idea/src/org/jetbrains/jet/plugin/JetHighlighter.java index b467da05d19..dd79d0cf126 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetHighlighter.java +++ b/idea/src/org/jetbrains/jet/plugin/JetHighlighter.java @@ -121,6 +121,7 @@ public class JetHighlighter extends SyntaxHighlighterBase { keys1.put(JetTokens.REGULAR_STRING_PART, JET_STRING); keys1.put(JetTokens.LONG_TEMPLATE_ENTRY_END, JET_STRING_ESCAPE); keys1.put(JetTokens.LONG_TEMPLATE_ENTRY_START, JET_STRING_ESCAPE); + keys1.put(JetTokens.SHORT_TEMPLATE_ENTRY_START, JET_STRING_ESCAPE); keys1.put(JetTokens.ESCAPE_SEQUENCE, JET_STRING_ESCAPE); diff --git a/idea/testData/checker/StringTemplates.jet b/idea/testData/checker/StringTemplates.jet index a83865b1975..9c00360b365 100644 --- a/idea/testData/checker/StringTemplates.jet +++ b/idea/testData/checker/StringTemplates.jet @@ -12,7 +12,7 @@ fun demo() { "$.$.asdf$\t" "asd\$" "asd$a\x" - "asd$a$asd$ $xxx" + "asd$a$asd$ $xxx" "fosdfasdo${1 + bar + 100}}sdsdfgdsfsdf" "foo${bar + map {foo}}sdfsdf" "foo${bar + map { "foo" }}sdfsdf" diff --git a/idea/testData/psi/StringTemplates.txt b/idea/testData/psi/StringTemplates.txt index ba9ccd091cf..f393dac23ea 100644 --- a/idea/testData/psi/StringTemplates.txt +++ b/idea/testData/psi/StringTemplates.txt @@ -158,15 +158,17 @@ JetFile: StringTemplates.jet STRING_TEMPLATE PsiElement(OPEN_QUOTE)('"') SHORT_STRING_TEMPLATE_ENTRY + PsiElement(SHORT_TEMPLATE_ENTRY_START)('$') REFERENCE_EXPRESSION - PsiElement(SHORT_TEMPLATE_ENTRY)('$abc') + PsiElement(IDENTIFIER)('abc') PsiElement(CLOSING_QUOTE)('"') PsiWhiteSpace('\n ') STRING_TEMPLATE PsiElement(OPEN_QUOTE)('"') SHORT_STRING_TEMPLATE_ENTRY + PsiElement(SHORT_TEMPLATE_ENTRY_START)('$') REFERENCE_EXPRESSION - PsiElement(SHORT_TEMPLATE_ENTRY)('$abc') + PsiElement(IDENTIFIER)('abc') ESCAPE_STRING_TEMPLATE_ENTRY PsiElement(ESCAPE_SEQUENCE)('\"') PsiErrorElement:Expecting '"' @@ -207,8 +209,9 @@ JetFile: StringTemplates.jet LITERAL_STRING_TEMPLATE_ENTRY PsiElement(REGULAR_STRING_PART)('asd') SHORT_STRING_TEMPLATE_ENTRY + PsiElement(SHORT_TEMPLATE_ENTRY_START)('$') REFERENCE_EXPRESSION - PsiElement(SHORT_TEMPLATE_ENTRY)('$a') + PsiElement(IDENTIFIER)('a') PsiElement(CLOSING_QUOTE)('"') PsiWhiteSpace('\n ') STRING_TEMPLATE @@ -216,11 +219,13 @@ JetFile: StringTemplates.jet LITERAL_STRING_TEMPLATE_ENTRY PsiElement(REGULAR_STRING_PART)('asd') SHORT_STRING_TEMPLATE_ENTRY + PsiElement(SHORT_TEMPLATE_ENTRY_START)('$') REFERENCE_EXPRESSION - PsiElement(SHORT_TEMPLATE_ENTRY)('$a') + PsiElement(IDENTIFIER)('a') SHORT_STRING_TEMPLATE_ENTRY + PsiElement(SHORT_TEMPLATE_ENTRY_START)('$') REFERENCE_EXPRESSION - PsiElement(SHORT_TEMPLATE_ENTRY)('$asd') + PsiElement(IDENTIFIER)('asd') LITERAL_STRING_TEMPLATE_ENTRY PsiElement(REGULAR_STRING_PART)('$') PsiElement(CLOSING_QUOTE)('"') @@ -342,8 +347,9 @@ JetFile: StringTemplates.jet LITERAL_STRING_TEMPLATE_ENTRY PsiElement(REGULAR_STRING_PART)('foo') SHORT_STRING_TEMPLATE_ENTRY + PsiElement(SHORT_TEMPLATE_ENTRY_START)('$') REFERENCE_EXPRESSION - PsiElement(SHORT_TEMPLATE_ENTRY)('$sdf') + PsiElement(IDENTIFIER)('sdf') LONG_STRING_TEMPLATE_ENTRY PsiElement(LONG_TEMPLATE_ENTRY_START)('${') PsiWhiteSpace(' ') diff --git a/idea/testData/psi/examples/Builder.txt b/idea/testData/psi/examples/Builder.txt index 5975af7f822..759507358f2 100644 --- a/idea/testData/psi/examples/Builder.txt +++ b/idea/testData/psi/examples/Builder.txt @@ -62,8 +62,9 @@ JetFile: Builder.jet STRING_TEMPLATE PsiElement(OPEN_QUOTE)('"') SHORT_STRING_TEMPLATE_ENTRY + PsiElement(SHORT_TEMPLATE_ENTRY_START)('$') REFERENCE_EXPRESSION - PsiElement(SHORT_TEMPLATE_ENTRY)('$libs') + PsiElement(IDENTIFIER)('libs') LITERAL_STRING_TEMPLATE_ENTRY PsiElement(REGULAR_STRING_PART)('/groovy-...') PsiElement(CLOSING_QUOTE)('"') @@ -108,8 +109,9 @@ JetFile: Builder.jet STRING_TEMPLATE PsiElement(OPEN_QUOTE)('"') SHORT_STRING_TEMPLATE_ENTRY + PsiElement(SHORT_TEMPLATE_ENTRY_START)('$') REFERENCE_EXPRESSION - PsiElement(SHORT_TEMPLATE_ENTRY)('$gantHome') + PsiElement(IDENTIFIER)('gantHome') LITERAL_STRING_TEMPLATE_ENTRY PsiElement(REGULAR_STRING_PART)('/lib') PsiElement(CLOSING_QUOTE)('"') @@ -209,8 +211,9 @@ JetFile: Builder.jet STRING_TEMPLATE PsiElement(OPEN_QUOTE)('"') SHORT_STRING_TEMPLATE_ENTRY + PsiElement(SHORT_TEMPLATE_ENTRY_START)('$') REFERENCE_EXPRESSION - PsiElement(SHORT_TEMPLATE_ENTRY)('$projectHome') + PsiElement(IDENTIFIER)('projectHome') LITERAL_STRING_TEMPLATE_ENTRY PsiElement(REGULAR_STRING_PART)('/antLayout/src') PsiElement(CLOSING_QUOTE)('"') diff --git a/idea/testData/resolve/StringTemplates.jet b/idea/testData/resolve/StringTemplates.jet index 76ba565259f..1cd0d97d10d 100644 --- a/idea/testData/resolve/StringTemplates.jet +++ b/idea/testData/resolve/StringTemplates.jet @@ -7,15 +7,15 @@ fun demo() { ~buzz~fun buzz(f : fun () : Any?) : Int = 1 ~sdf~val sdf = 1 ~foo~val foo = 3; - "`abc`$abc" + "$`abc`abc" "$" "$.$.asdf$\t" "asd\$" - "asd`a`$a" - "asd`a`$a`asd`$asd$" + "asd$`a`a" + "asd$`a`a$`asd`asd$" "fosdfasdo${1 + `bar`bar + 100}}sdsdfgdsfsdf" "foo${`bar`bar + `map`map {`foo`foo}}sdfsdf" "foo${`bar`bar + `map`map { "foo" }}sdfsdf" "foo${`bar`bar + `map`map { - "foo`sdf`$sdf${ `buzz`buzz{}}" }}sdfsdf" + "foo$`sdf`sdf${ `buzz`buzz{}}" }}sdfsdf" } \ No newline at end of file