KT-1385 support multi line strings with templates

This commit is contained in:
Andrey Breslav
2012-02-24 14:25:12 +04:00
parent 565aea36d9
commit f049d27fa3
13 changed files with 460 additions and 400 deletions
@@ -87,7 +87,6 @@ public interface JetNodeTypes {
JetNodeType BOOLEAN_CONSTANT = new JetNodeType("BOOLEAN_CONSTANT", JetConstantExpression.class);
JetNodeType FLOAT_CONSTANT = new JetNodeType("FLOAT_CONSTANT", JetConstantExpression.class);
JetNodeType CHARACTER_CONSTANT = new JetNodeType("CHARACTER_CONSTANT", JetConstantExpression.class);
JetNodeType RAW_STRING_CONSTANT = new JetNodeType("STRING_CONSTANT", JetConstantExpression.class);
JetNodeType INTEGER_CONSTANT = new JetNodeType("INTEGER_CONSTANT", JetConstantExpression.class);
JetNodeType STRING_TEMPLATE = new JetNodeType("STRING_TEMPLATE", JetStringTemplateExpression.class);
@@ -48,7 +48,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
private static final TokenSet TYPE_ARGUMENT_LIST_STOPPERS = TokenSet.create(
INTEGER_LITERAL, FLOAT_LITERAL, CHARACTER_LITERAL, OPEN_QUOTE, RAW_STRING_LITERAL,
INTEGER_LITERAL, FLOAT_LITERAL, CHARACTER_LITERAL, OPEN_QUOTE,
PACKAGE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, TRAIT_KEYWORD, CLASS_KEYWORD, THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD,
FUN_KEYWORD, FOR_KEYWORD, NULL_KEYWORD,
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD,
@@ -70,7 +70,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
// literal constant
TRUE_KEYWORD, FALSE_KEYWORD,
OPEN_QUOTE, RAW_STRING_LITERAL,
OPEN_QUOTE,
INTEGER_LITERAL, CHARACTER_LITERAL, FLOAT_LITERAL,
NULL_KEYWORD,
@@ -701,9 +701,6 @@ public class JetExpressionParsing extends AbstractJetParsing {
if (at(TRUE_KEYWORD) || at(FALSE_KEYWORD)) {
parseOneTokenExpression(BOOLEAN_CONSTANT);
}
else if (at(RAW_STRING_LITERAL)) {
parseOneTokenExpression(RAW_STRING_CONSTANT);
}
else if (at(INTEGER_LITERAL)) {
parseOneTokenExpression(INTEGER_CONSTANT);
}
@@ -161,9 +161,6 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
else if (elementType == JetNodeTypes.CHARACTER_CONSTANT) {
value = compileTimeConstantResolver.getCharValue(text, context.expectedType);
}
else if (elementType == JetNodeTypes.RAW_STRING_CONSTANT) {
value = compileTimeConstantResolver.getRawStringValue(text, context.expectedType);
}
else if (elementType == JetNodeTypes.NULL) {
value = compileTimeConstantResolver.getNullValue(context.expectedType);
}
@@ -111,9 +111,6 @@ public class ExpressionTypingUtils {
else if (constantType == JetNodeTypes.CHARACTER_CONSTANT) {
return semanticServices.getStandardLibrary().getCharType();
}
else if (constantType == JetNodeTypes.RAW_STRING_CONSTANT) {
return semanticServices.getStandardLibrary().getStringType();
}
else if (constantType == JetNodeTypes.NULL) {
return JetStandardClasses.getNullableNothingType();
}
@@ -45,7 +45,7 @@ import org.jetbrains.jet.lexer.JetTokens;
%eof{ return;
%eof}
%xstate STRING SHORT_TEMPLATE_ENTRY
%xstate STRING RAW_STRING SHORT_TEMPLATE_ENTRY
%state LONG_TEMPLATE_ENTRY
DIGIT=[0-9]
@@ -110,25 +110,31 @@ LONG_TEMPLATE_ENTRY_END=\}
// String templates
\" { pushState(STRING); return JetTokens.OPEN_QUOTE; }
{THREE_QUO} { pushState(RAW_STRING); return JetTokens.OPEN_QUOTE; }
<RAW_STRING> \n { return JetTokens.REGULAR_STRING_PART; }
<RAW_STRING> \" { return JetTokens.REGULAR_STRING_PART; }
<RAW_STRING> \\ { return JetTokens.REGULAR_STRING_PART; }
<RAW_STRING> {THREE_QUO} { popState(); return JetTokens.CLOSING_QUOTE; }
<STRING> \" { popState(); return JetTokens.CLOSING_QUOTE; }
<STRING> \n { popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE; }
<STRING> {REGULAR_STRING_PART} { return JetTokens.REGULAR_STRING_PART; }
<STRING> {ESCAPE_SEQUENCE} { return JetTokens.ESCAPE_SEQUENCE; }
<STRING> {SHORT_TEMPLATE_ENTRY} {
pushState(SHORT_TEMPLATE_ENTRY);
yypushback(yylength() - 1);
return JetTokens.SHORT_TEMPLATE_ENTRY_START;
}
\" { pushState(STRING); return JetTokens.OPEN_QUOTE; }
<STRING> \n { popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE; }
<STRING> \" { popState(); return JetTokens.CLOSING_QUOTE; }
<STRING> {ESCAPE_SEQUENCE} { return JetTokens.ESCAPE_SEQUENCE; }
<STRING, RAW_STRING> {REGULAR_STRING_PART} { return JetTokens.REGULAR_STRING_PART; }
<STRING, RAW_STRING> {SHORT_TEMPLATE_ENTRY} {
pushState(SHORT_TEMPLATE_ENTRY);
yypushback(yylength() - 1);
return JetTokens.SHORT_TEMPLATE_ENTRY_START;
}
// Only *this* keyword is itself an expression valid in this position
// *null*, *true* and *false* are also keywords and expression, but it does not make sense to put them
// in a string template for it'd be easier to just type them in without a dollar
<SHORT_TEMPLATE_ENTRY> "this" { popState(); return JetTokens.THIS_KEYWORD; }
<SHORT_TEMPLATE_ENTRY> {IDENTIFIER} { popState(); return JetTokens.IDENTIFIER; }
<STRING> {LONELY_DOLLAR} { return JetTokens.REGULAR_STRING_PART; }
<STRING> {LONG_TEMPLATE_ENTRY_START} { pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START; }
<STRING, RAW_STRING> {LONELY_DOLLAR} { return JetTokens.REGULAR_STRING_PART; }
<STRING, RAW_STRING> {LONG_TEMPLATE_ENTRY_START} { pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START; }
<LONG_TEMPLATE_ENTRY> "{" { lBraceCount++; return JetTokens.LBRACE; }
<LONG_TEMPLATE_ENTRY> "}" {
@@ -158,9 +164,6 @@ LONG_TEMPLATE_ENTRY_END=\}
{CHARACTER_LITERAL} { return JetTokens.CHARACTER_LITERAL; }
//{STRING_LITERAL} { return JetTokens.STRING_LITERAL; }
// TODO: Decide what to do with """ ... """"
{RAW_STRING_LITERAL} { return JetTokens.RAW_STRING_LITERAL; }
"continue" { return JetTokens.CONTINUE_KEYWORD ;}
"package" { return JetTokens.PACKAGE_KEYWORD ;}
"return" { return JetTokens.RETURN_KEYWORD ;}
@@ -45,8 +45,6 @@ public interface JetTokens {
JetToken LONG_TEMPLATE_ENTRY_END = new JetToken("LONG_TEMPLATE_ENTRY_END");
JetToken DANGLING_NEWLINE = new JetToken("DANGLING_NEWLINE");
JetToken RAW_STRING_LITERAL = new JetToken("RAW_STRING_LITERAL");
JetKeywordToken PACKAGE_KEYWORD = JetKeywordToken.keyword("package");
JetKeywordToken AS_KEYWORD = JetKeywordToken.keyword("as");
JetKeywordToken TYPE_KEYWORD = JetKeywordToken.keyword("type");
@@ -185,7 +183,7 @@ public interface JetTokens {
TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT);
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART, RAW_STRING_LITERAL);
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, MUL, PLUS,
MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
SAFE_ACCESS, ELVIS,
@@ -1,35 +1,20 @@
/*
* Copyright 2010-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* The following code was generated by JFlex 1.4.3 on 1/31/12 3:47 PM */
/* The following code was generated by JFlex 1.4.3 on 2/24/12 1:22 PM */
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
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 1/31/12 3:47 PM from the specification file
* <tt>/home/geevee/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex</tt>
* on 2/24/12 1:22 PM from the specification file
* <tt>/Users/abreslav/work/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex</tt>
*/
class _JetLexer implements FlexLexer {
/** initial size of the lookahead buffer */
@@ -38,8 +23,9 @@ class _JetLexer implements FlexLexer {
/** lexical states */
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;
public static final int LONG_TEMPLATE_ENTRY = 8;
public static final int RAW_STRING = 4;
public static final int SHORT_TEMPLATE_ENTRY = 6;
/**
* ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
@@ -48,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, 3, 3
0, 0, 1, 1, 2, 2, 3, 3, 4, 4
};
/**
@@ -134,29 +120,29 @@ class _JetLexer implements FlexLexer {
private static final int [] ZZ_ACTION = zzUnpackAction();
private static final String ZZ_ACTION_PACKED_0 =
"\4\0\1\1\1\2\1\3\1\4\2\1\1\5\1\6"+
"\5\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"+
"\20\3\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+
"\2\1\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+
"\1\34\1\35\1\36\1\35\1\0\1\37\1\40\1\0"+
"\1\40\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"+
"\3\3\1\57\1\60\1\61\7\3\1\62\10\3\1\63"+
"\1\0\1\64\1\0\1\65\1\0\1\66\1\67\1\70"+
"\1\71\1\72\1\73\1\74\1\75\1\76\1\0\1\77"+
"\2\100\1\0\1\40\1\101\1\43\1\3\2\0\1\50"+
"\1\102\4\0\1\103\4\3\1\104\10\3\1\105\4\3"+
"\1\106\1\107\2\3\1\110\1\111\1\112\1\113\1\114"+
"\1\115\1\116\1\117\2\0\2\40\1\44\1\45\1\0"+
"\2\102\1\43\2\0\1\120\1\3\1\121\1\3\1\122"+
"\4\3\1\123\1\124\4\3\1\125\1\3\1\126\1\127"+
"\1\76\1\0\1\130\1\50\2\0\1\131\1\132\1\133"+
"\1\3\1\134\3\3\1\135\1\136\1\137\1\0\1\103"+
"\1\34\1\35\1\36\1\35\1\0\1\37\2\35\1\40"+
"\1\0\1\40\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\3\3\1\57\1\60\1\61\7\3\1\62\10\3"+
"\1\63\1\0\1\64\1\0\1\65\1\0\1\66\1\67"+
"\1\70\1\71\1\72\1\73\1\74\1\75\1\76\1\0"+
"\1\77\2\100\2\0\1\40\1\101\1\43\1\3\2\0"+
"\1\50\1\102\4\0\1\103\4\3\1\104\10\3\1\105"+
"\4\3\1\106\1\107\2\3\1\110\1\111\1\112\1\113"+
"\1\114\1\115\1\116\1\117\2\0\2\40\1\44\1\45"+
"\1\0\2\102\1\43\1\0\1\120\1\3\1\121\1\3"+
"\1\122\4\3\1\123\1\124\4\3\1\125\1\3\1\126"+
"\1\127\1\76\1\0\1\130\1\50\1\0\1\131\1\132"+
"\1\133\1\3\1\134\3\3\1\135\1\136\1\137\1\0"+
"\1\3\1\140\1\3\1\141\1\3\1\142\1\143";
private static int [] zzUnpackAction() {
int [] result = new int[228];
int [] result = new int[229];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -183,36 +169,36 @@ 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\u0440\0\u0100\0\u0100\0\u0480\0\u04c0\0\u0500\0\u0540"+
"\0\u0400\0\u0440\0\u0480\0\u0140\0\u0140\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\u0100\0\u0900"+
"\0\u0940\0\u0100\0\u0980\0\u09c0\0\u0a00\0\u0a40\0\u0100\0\u0100"+
"\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u0a80\0\u0100\0\u0ac0"+
"\0\u0b00\0\u0100\0\u0b40\0\u0b80\0\u0bc0\0\u0100\0\u0100\0\u0c00"+
"\0\u0c40\0\u0c80\0\u0cc0\0\u0d00\0\u0d40\0\u0d80\0\u0100\0\u0dc0"+
"\0\u0e00\0\u0100\0\u0100\0\u0e40\0\u0e80\0\u0ec0\0\u0f00\0\u0100"+
"\0\u0100\0\u0100\0\u0100\0\u0100\0\u0f40\0\u0f80\0\u0fc0\0\u1000"+
"\0\u1040\0\u0180\0\u0180\0\u0180\0\u1080\0\u10c0\0\u1100\0\u1140"+
"\0\u1180\0\u11c0\0\u1200\0\u1240\0\u1280\0\u12c0\0\u1300\0\u1340"+
"\0\u1380\0\u13c0\0\u1400\0\u1440\0\u0180\0\u1480\0\u14c0\0\u1500"+
"\0\u0100\0\u1540\0\u0100\0\u0100\0\u1580\0\u0100\0\u0100\0\u0100"+
"\0\u0100\0\u0100\0\u15c0\0\u1600\0\u0100\0\u0100\0\u1640\0\u1680"+
"\0\u16c0\0\u0100\0\u1700\0\u0100\0\u1740\0\u1780\0\u17c0\0\u1800"+
"\0\u1840\0\u1880\0\u18c0\0\u1900\0\u1940\0\u1980\0\u19c0\0\u1a00"+
"\0\u1a40\0\u0180\0\u1a80\0\u1ac0\0\u1b00\0\u1b40\0\u1b80\0\u1bc0"+
"\0\u1c00\0\u1c40\0\u0100\0\u1c80\0\u1cc0\0\u1d00\0\u1d40\0\u0180"+
"\0\u0180\0\u1d80\0\u1dc0\0\u0180\0\u0180\0\u1e00\0\u1e00\0\u0100"+
"\0\u0100\0\u0100\0\u0100\0\u1e40\0\u1e80\0\u0100\0\u1ec0\0\u0100"+
"\0\u0100\0\u1f00\0\u1f40\0\u0100\0\u1f80\0\u1700\0\u1fc0\0\u0180"+
"\0\u2000\0\u0180\0\u2040\0\u0180\0\u2080\0\u20c0\0\u2100\0\u2140"+
"\0\u0180\0\u0180\0\u2180\0\u21c0\0\u2200\0\u2240\0\u0180\0\u2280"+
"\0\u0180\0\u0100\0\u0100\0\u22c0\0\u0b40\0\u0100\0\u2300\0\u2340"+
"\0\u0180\0\u0180\0\u0180\0\u2380\0\u0180\0\u23c0\0\u2400\0\u2440"+
"\0\u0180\0\u0180\0\u0180\0\u2480\0\u0100\0\u24c0\0\u0180\0\u2500"+
"\0\u0180\0\u2540\0\u0180\0\u0180";
"\0\u0780\0\u07c0\0\u0800\0\u0840\0\u0880\0\u08c0\0\u0900\0\u0140"+
"\0\u0940\0\u0980\0\u0140\0\u09c0\0\u0a00\0\u0a40\0\u0a80\0\u0140"+
"\0\u0140\0\u0140\0\u0140\0\u0140\0\u0140\0\u0140\0\u0ac0\0\u0140"+
"\0\u0b00\0\u0b40\0\u0140\0\u0140\0\u0b80\0\u0bc0\0\u0c00\0\u0c40"+
"\0\u0140\0\u0140\0\u0c80\0\u0cc0\0\u0d00\0\u0d40\0\u0d80\0\u0dc0"+
"\0\u0e00\0\u0140\0\u0e40\0\u0e80\0\u0140\0\u0140\0\u0ec0\0\u0f00"+
"\0\u0f40\0\u0f80\0\u0140\0\u0140\0\u0140\0\u0140\0\u0140\0\u0fc0"+
"\0\u1000\0\u1040\0\u1080\0\u10c0\0\u01c0\0\u01c0\0\u01c0\0\u1100"+
"\0\u1140\0\u1180\0\u11c0\0\u1200\0\u1240\0\u1280\0\u12c0\0\u1300"+
"\0\u1340\0\u1380\0\u13c0\0\u1400\0\u1440\0\u1480\0\u14c0\0\u01c0"+
"\0\u1500\0\u1540\0\u1580\0\u0140\0\u15c0\0\u0140\0\u0140\0\u1600"+
"\0\u0140\0\u0140\0\u0140\0\u0140\0\u0140\0\u1640\0\u1680\0\u0140"+
"\0\u0140\0\u16c0\0\u1700\0\u1740\0\u1780\0\u0140\0\u17c0\0\u0140"+
"\0\u1800\0\u1840\0\u1880\0\u18c0\0\u1900\0\u1940\0\u1980\0\u19c0"+
"\0\u0140\0\u1a00\0\u1a40\0\u1a80\0\u1ac0\0\u01c0\0\u1b00\0\u1b40"+
"\0\u1b80\0\u1bc0\0\u1c00\0\u1c40\0\u1c80\0\u1cc0\0\u0140\0\u1d00"+
"\0\u1d40\0\u1d80\0\u1dc0\0\u01c0\0\u01c0\0\u1e00\0\u1e40\0\u01c0"+
"\0\u01c0\0\u1e80\0\u1e80\0\u0140\0\u0140\0\u0140\0\u0140\0\u1ec0"+
"\0\u1f00\0\u0140\0\u1f40\0\u0140\0\u0140\0\u1f80\0\u1fc0\0\u0140"+
"\0\u2000\0\u17c0\0\u01c0\0\u2040\0\u01c0\0\u2080\0\u01c0\0\u20c0"+
"\0\u2100\0\u2140\0\u2180\0\u01c0\0\u01c0\0\u21c0\0\u2200\0\u2240"+
"\0\u2280\0\u01c0\0\u22c0\0\u01c0\0\u0140\0\u0140\0\u2300\0\u0bc0"+
"\0\u0140\0\u2340\0\u01c0\0\u01c0\0\u01c0\0\u2380\0\u01c0\0\u23c0"+
"\0\u2400\0\u2440\0\u01c0\0\u01c0\0\u01c0\0\u2480\0\u24c0\0\u01c0"+
"\0\u2500\0\u01c0\0\u2540\0\u01c0\0\u01c0";
private static int [] zzUnpackRowMap() {
int [] result = new int[228];
int [] result = new int[229];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -235,239 +221,239 @@ class _JetLexer implements FlexLexer {
private static final int [] ZZ_TRANS = zzUnpackTrans();
private static final String ZZ_TRANS_PACKED_0 =
"\1\5\1\6\1\7\1\10\1\7\1\5\1\11\1\10"+
"\1\12\1\13\1\14\1\15\1\16\2\7\1\17\1\7"+
"\1\20\1\7\1\21\1\5\1\22\1\7\1\23\1\24"+
"\1\25\1\7\1\26\1\27\1\30\1\31\1\32\1\33"+
"\1\34\1\35\2\7\1\36\1\37\1\7\1\40\1\7"+
"\1\41\1\7\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\1\64\1\65\7\66\1\67"+
"\1\70\13\66\1\71\1\72\52\66\2\0\1\73\1\0"+
"\1\73\1\0\1\74\6\0\2\73\1\0\1\73\1\0"+
"\1\73\3\0\1\73\2\0\1\75\25\73\21\0\1\5"+
"\1\6\1\7\1\10\1\7\1\5\1\11\1\10\1\12"+
"\1\13\1\14\1\15\1\16\2\7\1\17\1\7\1\20"+
"\1\7\1\21\1\5\1\22\1\7\1\76\1\77\1\25"+
"\1\7\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+
"\1\35\2\7\1\36\1\37\1\7\1\40\1\7\1\41"+
"\1\7\1\42\1\43\1\44\1\45\1\46\1\47\1\50"+
"\1\6\1\7\1\10\1\11\1\10\1\6\1\12\1\11"+
"\1\13\1\14\1\15\1\16\1\17\2\10\1\20\1\10"+
"\1\21\1\10\1\22\1\6\1\23\1\10\1\24\1\25"+
"\1\26\1\10\1\27\1\30\1\31\1\32\1\33\1\34"+
"\1\35\1\36\2\10\1\37\1\40\1\10\1\41\1\10"+
"\1\42\1\10\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\1\64\1\65\101\0\1\6\12\0"+
"\1\6\2\0\1\100\1\101\17\0\1\101\40\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\26\7\24\0\1\10\3\0\1\10"+
"\70\0\6\102\2\0\70\102\2\0\1\103\1\0\1\103"+
"\1\0\1\104\6\0\2\103\1\0\1\103\1\0\1\103"+
"\3\0\1\103\2\0\26\103\23\0\1\105\1\0\1\105"+
"\1\0\1\106\2\0\1\107\3\0\2\105\1\0\1\105"+
"\1\0\1\105\3\0\1\105\2\0\26\105\33\0\1\110"+
"\1\111\47\0\1\112\77\0\1\113\15\0\1\114\12\0"+
"\1\114\1\115\1\116\1\100\1\101\17\0\1\101\5\0"+
"\1\116\32\0\1\117\12\0\1\117\2\0\1\120\101\0"+
"\1\121\40\0\1\122\1\123\14\0\7\21\1\0\13\21"+
"\1\124\1\125\53\21\25\0\1\126\53\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\1\7\1\127\12\7\1\130\5\7\1\131"+
"\3\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\3\7\1\132"+
"\2\7\1\133\12\7\1\134\4\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\135\2\0\26\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\5\7\1\136\12\7\1\137\5\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\15\7\1\140\10\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\141\2\0\26\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\20\7\1\142\5\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\11\7\1\143\14\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\3\7\1\144\22\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\7\7\1\145\16\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\14\7\1\146\11\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\1\7\1\147\24\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\150\2\0"+
"\5\7\1\151\3\7\1\152\14\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\1\7\1\153\24\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\11\7\1\154\14\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\5\7\1\155\20\7\54\0\1\156\27\0"+
"\1\157\75\0\1\160\1\0\1\161\75\0\1\162\1\0"+
"\1\163\76\0\1\164\1\165\77\0\1\166\1\0\1\167"+
"\100\0\1\170\100\0\1\171\73\0\1\172\14\0\7\66"+
"\2\0\13\66\2\0\52\66\2\0\1\173\1\0\1\173"+
"\1\0\1\174\6\0\2\173\1\0\1\173\1\0\1\173"+
"\3\0\1\173\1\175\1\0\26\173\21\0\7\176\1\0"+
"\16\176\1\177\51\176\1\0\2\73\1\0\2\73\6\0"+
"\3\73\1\0\1\73\1\0\1\73\3\0\1\73\2\0"+
"\26\73\21\0\6\200\2\0\70\200\1\0\2\73\1\0"+
"\2\73\6\0\3\73\1\0\1\73\1\0\1\73\3\0"+
"\1\73\2\0\1\73\1\201\24\73\22\0\1\117\12\0"+
"\1\117\2\0\1\202\61\0\1\203\12\0\1\203\4\0"+
"\1\203\43\0\1\203\12\0\6\102\1\204\1\0\70\102"+
"\1\0\2\103\1\0\2\103\6\0\3\103\1\0\1\103"+
"\1\0\1\103\3\0\1\103\2\0\26\103\21\0\6\205"+
"\2\0\70\205\1\0\2\105\1\0\2\105\6\0\3\105"+
"\1\0\1\105\1\0\1\105\3\0\1\105\2\0\26\105"+
"\21\0\6\206\2\0\70\206\7\110\1\0\70\110\13\207"+
"\1\210\64\207\1\0\1\114\12\0\1\114\2\0\1\211"+
"\1\101\17\0\1\101\40\0\2\115\11\0\1\115\1\0"+
"\1\115\1\212\1\115\1\0\1\213\12\0\1\115\2\0"+
"\1\115\1\213\1\115\3\0\1\115\3\0\1\115\3\0"+
"\1\115\22\0\1\116\12\0\1\116\2\0\1\214\61\0"+
"\1\117\12\0\1\117\3\0\1\101\17\0\1\101\37\0"+
"\7\21\1\0\70\21\25\0\1\215\53\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\2\7\1\216\11\7\1\217\11\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\220\2\0\11\7\1\221\10\7\1\222"+
"\3\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\10\7\1\223"+
"\15\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\10\7\1\224"+
"\15\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\6\7\1\225"+
"\17\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\11\7\1\226"+
"\14\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\16\7\1\227"+
"\7\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\20\7\1\230"+
"\5\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\3\7\1\231"+
"\22\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\4\7\1\232"+
"\21\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\26\7\5\0"+
"\1\233\14\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\1\234\25\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\7\7\1\235\16\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\2\7\1\236\4\7"+
"\1\237\16\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\6\7"+
"\1\240\17\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\14\7"+
"\1\241\11\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\20\7"+
"\1\242\5\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\2\7"+
"\1\243\23\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\14\7"+
"\1\244\3\7\1\245\5\7\55\0\1\246\2\0\1\247"+
"\123\0\1\250\74\0\1\251\101\0\1\252\100\0\1\253"+
"\15\0\2\173\1\0\2\173\6\0\3\173\1\0\1\173"+
"\1\0\1\173\3\0\1\173\2\0\26\173\21\0\6\254"+
"\2\0\70\254\1\0\2\255\11\0\1\255\1\0\1\255"+
"\1\0\1\255\14\0\1\255\2\0\1\255\1\0\1\255"+
"\3\0\1\255\3\0\1\255\3\0\1\255\21\0\6\200"+
"\1\256\1\0\70\200\1\0\2\73\1\0\2\73\6\0"+
"\3\73\1\0\1\73\1\0\1\73\3\0\1\73\2\0"+
"\2\73\1\257\23\73\22\0\1\203\12\0\1\203\63\0"+
"\6\205\1\260\1\0\70\205\6\206\1\261\1\0\70\206"+
"\13\207\1\262\64\207\12\263\1\264\1\210\64\263\1\0"+
"\1\117\12\0\1\117\64\0\2\265\11\0\1\265\1\0"+
"\1\265\1\202\1\265\14\0\1\265\2\0\1\265\1\0"+
"\1\265\3\0\1\265\3\0\1\265\3\0\1\265\22\0"+
"\1\203\12\0\1\203\4\0\1\266\43\0\1\266\31\0"+
"\1\202\60\0\25\215\1\267\52\215\1\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\3\7\1\270\22\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\5\7\1\271\20\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\7\7\1\272\16\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\2\7\1\273\23\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\7\7\1\274\16\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\7\7\1\275\16\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\1\276\25\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\3\7\1\277\22\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\7\7\1\300\16\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\20\7\1\301\5\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\7\7\1\302\16\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\12\7\1\303\13\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\304"+
"\2\0\26\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\11\7"+
"\1\305\14\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\20\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\3\0\1\7\2\0\6\7"+
"\1\307\17\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\3\7"+
"\1\310\22\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\3\7"+
"\1\311\22\7\22\0\2\312\1\0\2\312\6\0\3\312"+
"\1\0\1\312\1\0\1\312\3\0\1\312\2\0\26\312"+
"\21\0\6\254\1\313\1\0\70\254\1\0\2\314\11\0"+
"\1\314\1\0\1\314\1\0\1\314\14\0\1\314\2\0"+
"\1\314\1\0\1\314\3\0\1\314\3\0\1\314\3\0"+
"\1\314\22\0\2\73\1\0\2\73\6\0\3\73\1\0"+
"\1\73\1\0\1\73\3\0\1\73\2\0\3\73\1\315"+
"\22\73\21\0\12\207\1\316\1\262\64\207\13\263\1\317"+
"\64\263\1\0\2\265\11\0\1\265\1\0\1\265\1\0"+
"\1\265\1\0\1\213\12\0\1\265\2\0\1\265\1\213"+
"\1\265\3\0\1\265\3\0\1\265\3\0\1\265\21\0"+
"\25\215\1\320\52\215\1\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\17\7\1\321\6\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\1\322\25\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\14\7"+
"\1\323\11\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\2\7"+
"\1\324\23\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\3\7"+
"\1\325\22\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\4\7"+
"\1\326\21\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\11\7"+
"\1\327\14\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\14\7"+
"\1\330\11\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\12\7"+
"\1\331\13\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\7\7"+
"\1\332\16\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\7\7"+
"\1\333\16\7\22\0\2\334\11\0\1\334\1\0\1\334"+
"\1\0\1\334\14\0\1\334\2\0\1\334\1\0\1\334"+
"\3\0\1\334\3\0\1\334\3\0\1\334\21\0\12\263"+
"\1\264\1\317\64\263\25\215\1\335\52\215\1\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\6\7\1\336\17\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\1\337\25\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\13\7\1\340\12\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\6\7\1\341\17\7\22\0\2\176\11\0"+
"\1\176\1\0\1\176\1\0\1\176\14\0\1\176\2\0"+
"\1\176\1\0\1\176\3\0\1\176\3\0\1\176\3\0"+
"\1\176\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\342\2\0\26\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\7\7\1\343\16\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\7\7\1\344\16\7\21\0";
"\1\61\1\62\1\63\1\64\1\65\1\66\7\67\1\70"+
"\1\71\13\67\1\72\1\73\61\67\1\74\1\71\13\67"+
"\1\74\1\75\52\67\2\0\1\76\1\0\1\76\1\0"+
"\1\77\6\0\2\76\1\0\1\76\1\0\1\76\3\0"+
"\1\76\2\0\1\100\25\76\21\0\1\6\1\7\1\10"+
"\1\11\1\10\1\6\1\12\1\11\1\13\1\14\1\15"+
"\1\16\1\17\2\10\1\20\1\10\1\21\1\10\1\22"+
"\1\6\1\23\1\10\1\101\1\102\1\26\1\10\1\27"+
"\1\30\1\31\1\32\1\33\1\34\1\35\1\36\2\10"+
"\1\37\1\40\1\10\1\41\1\10\1\42\1\10\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"+
"\1\64\1\65\1\66\101\0\1\7\12\0\1\7\2\0"+
"\1\103\1\104\17\0\1\104\40\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\26\10\24\0\1\11\3\0\1\11\70\0\6\105"+
"\2\0\70\105\2\0\1\106\1\0\1\106\1\0\1\107"+
"\6\0\2\106\1\0\1\106\1\0\1\106\3\0\1\106"+
"\2\0\26\106\23\0\1\110\1\0\1\110\1\0\1\111"+
"\2\0\1\112\3\0\2\110\1\0\1\110\1\0\1\110"+
"\3\0\1\110\2\0\26\110\33\0\1\113\1\114\47\0"+
"\1\115\77\0\1\116\15\0\1\117\12\0\1\117\1\120"+
"\1\121\1\103\1\104\17\0\1\104\5\0\1\121\32\0"+
"\1\122\12\0\1\122\2\0\1\123\101\0\1\124\40\0"+
"\1\125\1\126\14\0\7\22\1\0\13\22\1\127\1\130"+
"\53\22\25\0\1\131\53\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\1\10\1\132\12\10\1\133\5\10\1\134\3\10\22\0"+
"\2\10\1\0\2\10\6\0\3\10\1\0\1\10\1\0"+
"\1\10\3\0\1\10\2\0\3\10\1\135\2\10\1\136"+
"\12\10\1\137\4\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\140\2\0"+
"\26\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\5\10\1\141"+
"\12\10\1\142\5\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\15\10\1\143\10\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\144\2\0"+
"\26\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\20\10\1\145"+
"\5\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\11\10\1\146"+
"\14\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\3\10\1\147"+
"\22\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\7\10\1\150"+
"\16\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\14\10\1\151"+
"\11\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\1\10\1\152"+
"\24\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\153\2\0\5\10\1\154"+
"\3\10\1\155\14\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\1\10\1\156\24\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\11\10\1\157\14\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\5\10\1\160\20\10\54\0\1\161\27\0\1\162\75\0"+
"\1\163\1\0\1\164\75\0\1\165\1\0\1\166\76\0"+
"\1\167\1\170\77\0\1\171\1\0\1\172\100\0\1\173"+
"\100\0\1\174\73\0\1\175\14\0\7\67\2\0\13\67"+
"\2\0\52\67\2\0\1\176\1\0\1\176\1\0\1\177"+
"\6\0\2\176\1\0\1\176\1\0\1\176\3\0\1\176"+
"\1\200\1\0\26\176\21\0\7\201\1\0\16\201\1\202"+
"\51\201\25\0\1\203\53\0\2\76\1\0\2\76\6\0"+
"\3\76\1\0\1\76\1\0\1\76\3\0\1\76\2\0"+
"\26\76\21\0\6\204\2\0\70\204\1\0\2\76\1\0"+
"\2\76\6\0\3\76\1\0\1\76\1\0\1\76\3\0"+
"\1\76\2\0\1\76\1\205\24\76\22\0\1\122\12\0"+
"\1\122\2\0\1\206\61\0\1\207\12\0\1\207\4\0"+
"\1\207\43\0\1\207\12\0\6\105\1\210\1\0\70\105"+
"\1\0\2\106\1\0\2\106\6\0\3\106\1\0\1\106"+
"\1\0\1\106\3\0\1\106\2\0\26\106\21\0\6\211"+
"\2\0\70\211\1\0\2\110\1\0\2\110\6\0\3\110"+
"\1\0\1\110\1\0\1\110\3\0\1\110\2\0\26\110"+
"\21\0\6\212\2\0\70\212\7\113\1\0\70\113\13\213"+
"\1\214\64\213\1\0\1\117\12\0\1\117\2\0\1\215"+
"\1\104\17\0\1\104\40\0\2\120\11\0\1\120\1\0"+
"\1\120\1\216\1\120\1\0\1\217\12\0\1\120\2\0"+
"\1\120\1\217\1\120\3\0\1\120\3\0\1\120\3\0"+
"\1\120\22\0\1\121\12\0\1\121\2\0\1\220\61\0"+
"\1\122\12\0\1\122\3\0\1\104\17\0\1\104\37\0"+
"\7\22\1\0\70\22\25\0\1\221\53\0\2\10\1\0"+
"\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+
"\1\10\2\0\2\10\1\222\11\10\1\223\11\10\22\0"+
"\2\10\1\0\2\10\6\0\3\10\1\0\1\10\1\0"+
"\1\10\3\0\1\224\2\0\11\10\1\225\10\10\1\226"+
"\3\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\10\10\1\227"+
"\15\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\10\10\1\230"+
"\15\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\6\10\1\231"+
"\17\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\11\10\1\232"+
"\14\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\16\10\1\233"+
"\7\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\20\10\1\234"+
"\5\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\3\10\1\235"+
"\22\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\4\10\1\236"+
"\21\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\26\10\5\0"+
"\1\237\14\0\2\10\1\0\2\10\6\0\3\10\1\0"+
"\1\10\1\0\1\10\3\0\1\10\2\0\1\240\25\10"+
"\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+
"\1\0\1\10\3\0\1\10\2\0\7\10\1\241\16\10"+
"\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+
"\1\0\1\10\3\0\1\10\2\0\2\10\1\242\4\10"+
"\1\243\16\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\6\10"+
"\1\244\17\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\14\10"+
"\1\245\11\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\20\10"+
"\1\246\5\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\2\10"+
"\1\247\23\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\14\10"+
"\1\250\3\10\1\251\5\10\55\0\1\252\2\0\1\253"+
"\123\0\1\254\74\0\1\255\101\0\1\256\100\0\1\257"+
"\15\0\2\176\1\0\2\176\6\0\3\176\1\0\1\176"+
"\1\0\1\176\3\0\1\176\2\0\26\176\21\0\6\260"+
"\2\0\70\260\1\0\2\261\11\0\1\261\1\0\1\261"+
"\1\0\1\261\14\0\1\261\2\0\1\261\1\0\1\261"+
"\3\0\1\261\3\0\1\261\3\0\1\261\46\0\1\73"+
"\52\0\6\204\1\262\1\0\70\204\1\0\2\76\1\0"+
"\2\76\6\0\3\76\1\0\1\76\1\0\1\76\3\0"+
"\1\76\2\0\2\76\1\263\23\76\22\0\1\207\12\0"+
"\1\207\63\0\6\211\1\264\1\0\70\211\6\212\1\265"+
"\1\0\70\212\13\213\1\266\64\213\12\267\1\270\1\214"+
"\64\267\1\0\1\122\12\0\1\122\64\0\2\271\11\0"+
"\1\271\1\0\1\271\1\206\1\271\14\0\1\271\2\0"+
"\1\271\1\0\1\271\3\0\1\271\3\0\1\271\3\0"+
"\1\271\22\0\1\207\12\0\1\207\4\0\1\272\43\0"+
"\1\272\31\0\1\206\61\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\3\10\1\273\22\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\5\10\1\274\20\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\7\10\1\275\16\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\2\10\1\276\23\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\7\10\1\277\16\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\7\10\1\300\16\10\22\0\2\10\1\0\2\10\6\0"+
"\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+
"\1\301\25\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\3\10"+
"\1\302\22\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\7\10"+
"\1\303\16\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\20\10"+
"\1\304\5\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\7\10"+
"\1\305\16\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\10\2\0\12\10"+
"\1\306\13\10\22\0\2\10\1\0\2\10\6\0\3\10"+
"\1\0\1\10\1\0\1\10\3\0\1\307\2\0\26\10"+
"\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+
"\1\0\1\10\3\0\1\10\2\0\11\10\1\310\14\10"+
"\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+
"\1\0\1\10\3\0\1\10\2\0\20\10\1\311\5\10"+
"\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+
"\1\0\1\10\3\0\1\10\2\0\6\10\1\312\17\10"+
"\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+
"\1\0\1\10\3\0\1\10\2\0\3\10\1\313\22\10"+
"\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+
"\1\0\1\10\3\0\1\10\2\0\3\10\1\314\22\10"+
"\22\0\2\315\1\0\2\315\6\0\3\315\1\0\1\315"+
"\1\0\1\315\3\0\1\315\2\0\26\315\21\0\6\260"+
"\1\316\1\0\70\260\1\0\2\317\11\0\1\317\1\0"+
"\1\317\1\0\1\317\14\0\1\317\2\0\1\317\1\0"+
"\1\317\3\0\1\317\3\0\1\317\3\0\1\317\22\0"+
"\2\76\1\0\2\76\6\0\3\76\1\0\1\76\1\0"+
"\1\76\3\0\1\76\2\0\3\76\1\320\22\76\21\0"+
"\12\213\1\321\1\266\64\213\13\267\1\322\64\267\1\0"+
"\2\271\11\0\1\271\1\0\1\271\1\0\1\271\1\0"+
"\1\217\12\0\1\271\2\0\1\271\1\217\1\271\3\0"+
"\1\271\3\0\1\271\3\0\1\271\22\0\2\10\1\0"+
"\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+
"\1\10\2\0\17\10\1\323\6\10\22\0\2\10\1\0"+
"\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+
"\1\10\2\0\1\324\25\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\14\10\1\325\11\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\2\10\1\326\23\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\3\10\1\327\22\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\4\10\1\330\21\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\11\10\1\331\14\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\14\10\1\332\11\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\12\10\1\333\13\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\7\10\1\334\16\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\7\10\1\335\16\10\22\0\2\336\11\0\1\336"+
"\1\0\1\336\1\0\1\336\14\0\1\336\2\0\1\336"+
"\1\0\1\336\3\0\1\336\3\0\1\336\3\0\1\336"+
"\21\0\12\267\1\270\1\322\64\267\1\0\2\10\1\0"+
"\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+
"\1\10\2\0\6\10\1\337\17\10\22\0\2\10\1\0"+
"\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+
"\1\10\2\0\1\340\25\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\13\10\1\341\12\10\22\0\2\10\1\0\2\10"+
"\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+
"\2\0\6\10\1\342\17\10\22\0\2\201\11\0\1\201"+
"\1\0\1\201\1\0\1\201\14\0\1\201\2\0\1\201"+
"\1\0\1\201\3\0\1\201\3\0\1\201\3\0\1\201"+
"\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+
"\1\0\1\10\3\0\1\343\2\0\26\10\22\0\2\10"+
"\1\0\2\10\6\0\3\10\1\0\1\10\1\0\1\10"+
"\3\0\1\10\2\0\7\10\1\344\16\10\22\0\2\10"+
"\1\0\2\10\6\0\3\10\1\0\1\10\1\0\1\10"+
"\3\0\1\10\2\0\7\10\1\345\16\10\21\0";
private static int [] zzUnpackTrans() {
int [] result = new int[9600];
@@ -511,19 +497,19 @@ class _JetLexer implements FlexLexer {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\4\0\1\11\15\1\2\11\22\1\1\11\2\1\1\11"+
"\4\1\7\11\1\1\1\11\1\1\1\0\1\11\1\1"+
"\5\0\1\11\15\1\2\11\22\1\1\11\2\1\1\11"+
"\4\1\7\11\1\1\1\11\1\1\1\0\2\11\2\1"+
"\1\0\1\1\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\0\1\1\1\0\1\11\1\0\2\11"+
"\1\1\5\11\1\1\1\0\2\11\1\1\1\0\1\1"+
"\1\11\1\1\1\11\2\0\2\1\4\0\16\1\1\11"+
"\14\1\4\11\2\0\1\11\1\1\2\11\1\0\1\1"+
"\1\11\1\1\2\0\22\1\2\11\1\0\1\1\1\11"+
"\2\0\13\1\1\0\1\11\7\1";
"\1\1\5\11\1\1\1\0\2\11\1\1\2\0\1\1"+
"\1\11\1\1\1\11\2\0\2\1\4\0\1\11\15\1"+
"\1\11\14\1\4\11\2\0\1\11\1\1\2\11\1\0"+
"\1\1\1\11\1\1\1\0\22\1\2\11\1\0\1\1"+
"\1\11\1\0\13\1\1\0\7\1";
private static int [] zzUnpackAttribute() {
int [] result = new int[228];
int [] result = new int[229];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -895,73 +881,73 @@ class _JetLexer implements FlexLexer {
{ return JetTokens.PLUS ;
}
case 108: break;
case 67:
{ return JetTokens.RAW_STRING_LITERAL;
}
case 109: break;
case 57:
{ return JetTokens.PLUSEQ ;
}
case 110: break;
case 109: break;
case 88:
{ popState(); return JetTokens.THIS_KEYWORD;
}
case 111: break;
case 110: break;
case 28:
{ return JetTokens.COMMA ;
}
case 112: break;
case 111: break;
case 17:
{ return JetTokens.GT ;
}
case 113: break;
case 112: break;
case 4:
{ return JetTokens.WHITE_SPACE;
}
case 114: break;
case 113: break;
case 25:
{ return JetTokens.RPAR ;
}
case 115: break;
case 114: break;
case 55:
{ return JetTokens.DOUBLE_ARROW;
}
case 116: break;
case 115: break;
case 81:
{ return JetTokens.TRUE_KEYWORD ;
}
case 117: break;
case 116: break;
case 77:
{ return JetTokens.IDE_TEMPLATE_START ;
}
case 118: break;
case 117: break;
case 36:
{ return JetTokens.FIELD_IDENTIFIER;
}
case 119: break;
case 118: break;
case 59:
{ return JetTokens.ANDAND ;
}
case 120: break;
case 119: break;
case 63:
{ pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START;
}
case 121: break;
case 120: break;
case 66:
{ return JetTokens.DOC_COMMENT;
}
case 122: break;
case 121: break;
case 35:
{ return JetTokens.FLOAT_LITERAL;
}
case 123: break;
case 122: break;
case 39:
{ return JetTokens.EOL_COMMENT;
}
case 124: break;
case 123: break;
case 85:
{ return JetTokens.WHEN_KEYWORD ;
}
case 124: break;
case 67:
{ pushState(RAW_STRING); return JetTokens.OPEN_QUOTE;
}
case 125: break;
case 26:
{ return JetTokens.COLON ;
@@ -1103,135 +1089,135 @@ class _JetLexer implements FlexLexer {
{ return TokenType.BAD_CHARACTER;
}
case 160: break;
case 62:
{ pushState(SHORT_TEMPLATE_ENTRY);
yypushback(yylength() - 1);
return JetTokens.SHORT_TEMPLATE_ENTRY_START;
}
case 161: break;
case 74:
{ return JetTokens.NOT_IS;
}
case 161: break;
case 162: break;
case 7:
{ return JetTokens.MUL ;
}
case 162: break;
case 163: break;
case 23:
{ return JetTokens.RBRACKET ;
}
case 163: break;
case 164: break;
case 58:
{ return JetTokens.PLUSPLUS ;
}
case 164: break;
case 165: break;
case 80:
{ return JetTokens.THIS_KEYWORD ;
}
case 165: break;
case 166: break;
case 8:
{ return JetTokens.DOT ;
}
case 166: break;
case 167: break;
case 27:
{ return JetTokens.SEMICOLON ;
}
case 167: break;
case 168: break;
case 49:
{ return JetTokens.IF_KEYWORD ;
}
case 168: break;
case 169: break;
case 64:
{ return JetTokens.ESCAPE_SEQUENCE;
}
case 169: break;
case 170: break;
case 31:
{ popState(); return JetTokens.CLOSING_QUOTE;
}
case 170: break;
case 171: break;
case 18:
{ return JetTokens.EQ ;
}
case 171: break;
case 172: break;
case 5:
{ return JetTokens.AT ;
}
case 172: break;
case 173: break;
case 69:
{ return JetTokens.AS_SAFE;
}
case 173: break;
case 174: break;
case 24:
{ return JetTokens.LPAR ;
}
case 174: break;
case 175: break;
case 9:
{ return JetTokens.MINUS ;
}
case 175: break;
case 176: break;
case 95:
{ return JetTokens.FALSE_KEYWORD ;
}
case 176: break;
case 177: break;
case 82:
{ return JetTokens.TYPE_KEYWORD ;
}
case 177: break;
case 178: break;
case 70:
{ return JetTokens.FUN_KEYWORD ;
}
case 178: break;
case 179: break;
case 47:
{ return JetTokens.IS_KEYWORD ;
}
case 179: break;
case 180: break;
case 30:
{ popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE;
}
case 180: break;
case 181: break;
case 33:
{ lBraceCount++; return JetTokens.LBRACE;
}
case 181: break;
case 182: break;
case 87:
{ yypushback(3); return JetTokens.EXCL;
}
case 182: break;
case 183: break;
case 41:
{ return JetTokens.DIVEQ ;
}
case 183: break;
case 184: break;
case 84:
{ return JetTokens.ELSE_KEYWORD ;
}
case 184: break;
case 185: break;
case 50:
{ return JetTokens.AS_KEYWORD ;
}
case 185: break;
case 186: break;
case 48:
{ return JetTokens.IN_KEYWORD ;
}
case 186: break;
case 187: break;
case 56:
{ return JetTokens.EQEQ ;
}
case 187: break;
case 188: break;
case 79:
{ return JetTokens.EQEQEQ ;
}
case 188: break;
case 189: break;
case 73:
{ return JetTokens.VAL_KEYWORD ;
}
case 189: break;
case 190: break;
case 86:
{ return JetTokens.CAPITALIZED_THIS_KEYWORD ;
}
case 190: break;
case 191: break;
case 42:
{ return JetTokens.MULTEQ ;
}
case 191: break;
case 62:
{ pushState(SHORT_TEMPLATE_ENTRY);
yypushback(yylength() - 1);
return JetTokens.SHORT_TEMPLATE_ENTRY_START;
}
case 192: break;
case 12:
{ return JetTokens.LBRACE ;
@@ -0,0 +1,31 @@
fun box() : String {
val s = "abc"
val test1 = """$s"""
if (test1 != "abc") return "Fail 1: $test1"
val test2 = """${s}"""
if (test2 != "abc") return "Fail 2: $test2"
val test3 = """ "$s" """
if (test3 != " \"abc\" ") return "Fail 3: $test3"
val test4 = """ "${s}" """
if (test4 != " \"abc\" ") return "Fail 4: $test4"
val test5 =
"""
${s.length}
"""
if (test5 != "\n 3\n") return "Fail 5: $test5"
val test6 = """\n"""
if (test6 != "\\n") return "Fail 6: $test6"
val test7 = """\${'$'}foo"""
if (test7 != "\\\$foo") return "Fail 7: $test7"
val test8 = """$ foo"""
if (test8 != "$ foo") return "Fail 8: $test8"
return "OK"
}
@@ -0,0 +1,43 @@
fun box() : String {
val s = "abc"
val test1 = """$s"""
if (test1 != "abc") return "Fail 1: $test1"
val test2 = """${s}"""
if (test2 != "abc") return "Fail 2: $test2"
val test3 = """ "$s" """
if (test3 != " \"abc\" ") return "Fail 3: $test3"
val test4 = """ "${s}" """
if (test4 != " \"abc\" ") return "Fail 4: $test4"
val test5 =
"""
${s.length}
"""
if (test5 != "\n 3\n") return "Fail 5: $test5"
val test6 = """\n"""
if (test6 != "\\n") return "Fail 6: $test6"
val test7 = """\${'$'}foo"""
if (test7 != "\\\$foo") return "Fail 7: $test7"
val test8 = """$ foo"""
if (test8 != "$ foo") return "Fail 8: $test8"
return "OK"
}
fun new() : String {
return """
sdfasdf
${<!UNRESOLVED_REFERENCE!>a<!>}
ds"asdfas
$<!UNRESOLVED_REFERENCE!>b<!>
asgfaf
"""
}
+5 -2
View File
@@ -105,8 +105,11 @@ JetFile: SimpleExpressions.jet
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
STRING_CONSTANT
PsiElement(RAW_STRING_LITERAL)('"""dsf"""')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('dsf')
PsiElement(CLOSING_QUOTE)('"""')
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
+5 -2
View File
@@ -259,8 +259,11 @@ JetFile: When.jet
PsiElement(is)('is')
PsiWhiteSpace(' ')
EXPRESSION_PATTERN
STRING_CONSTANT
PsiElement(RAW_STRING_LITERAL)('"""ddd"""')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY
PsiElement(REGULAR_STRING_PART)('ddd')
PsiElement(CLOSING_QUOTE)('"""')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
@@ -73,6 +73,10 @@ public class StringsTest extends CodegenTestCase {
blackBoxFile("rawStrings.jet");
}
public void testMultilineStringsWithTemplates() throws Exception {
blackBoxFile("multilineStringsWithTemplates.jet");
}
public void testKt881() throws Exception {
blackBoxFile("regressions/kt881.jet");
}
@@ -192,7 +192,6 @@ public class JetHighlighter extends SyntaxHighlighterBase {
keys1.put(JetTokens.ESCAPE_SEQUENCE, JET_STRING_ESCAPE);
keys1.put(JetTokens.CHARACTER_LITERAL, JET_STRING);
keys1.put(JetTokens.RAW_STRING_LITERAL, JET_STRING);
keys1.put(JetTokens.EOL_COMMENT, JET_COMMENT);
keys1.put(JetTokens.BLOCK_COMMENT, JET_COMMENT);