From 07e117ee4e90392a1f53cec758d5e497608abfef Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Mon, 27 Mar 2017 15:59:03 +0300 Subject: [PATCH] [groovy] lexer: gstring literals as single token --- .../groovy/lang/lexer/_GroovyLexer.java | 559 +++++++++--------- .../plugins/groovy/lang/lexer/groovy.flex | 39 +- .../lang/parser/ExpressionsParsingTest.groovy | 2 + .../expressions/gstring/triple/triple4.test | 13 + 4 files changed, 303 insertions(+), 310 deletions(-) create mode 100644 plugins/groovy/testdata/parsing/groovy/expressions/gstring/triple/triple4.test diff --git a/plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java b/plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java index 0042b519d518..d9d715a47fd9 100644 --- a/plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java +++ b/plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java @@ -221,25 +221,25 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { "\1\157\2\52\1\160\7\52\1\161\2\52\1\162\10\52"+ "\1\163\1\164\3\52\1\165\1\52\1\166\1\52\1\133"+ "\2\154\1\62\1\0\1\134\1\170\1\171\1\172\7\7"+ - "\1\173\1\7\1\14\1\0\1\14\4\0\6\7\1\174"+ + "\1\173\1\7\1\14\1\0\1\14\3\0\6\7\1\174"+ "\1\175\3\7\1\176\1\7\1\177\1\7\1\200\1\7"+ "\1\201\3\7\1\202\1\170\1\171\1\172\7\52\1\173"+ "\7\52\1\174\1\175\3\52\1\176\1\52\1\177\1\52"+ "\1\200\1\52\1\201\3\52\1\202\1\133\1\0\1\154"+ - "\1\0\2\7\1\203\3\7\1\204\2\7\1\0\3\7"+ - "\1\205\1\7\1\206\1\7\1\207\2\7\1\210\1\7"+ - "\1\211\1\212\1\213\1\7\2\52\1\203\3\52\1\204"+ - "\5\52\1\205\1\52\1\206\1\52\1\207\2\52\1\210"+ - "\1\52\1\211\1\212\1\213\1\52\1\0\1\214\3\7"+ - "\1\215\1\216\1\217\1\220\1\221\7\7\1\214\3\52"+ - "\1\215\1\216\1\217\1\220\1\221\7\52\4\7\1\222"+ - "\1\223\1\224\2\7\1\225\4\52\1\222\1\223\1\224"+ - "\2\52\1\225\2\7\1\226\1\227\1\7\1\230\2\52"+ - "\1\226\1\227\1\52\1\230\1\231\1\232\1\7\1\231"+ - "\1\232\1\52\1\7\1\52\2\233"; + "\1\0\2\7\1\203\3\7\1\204\5\7\1\205\1\7"+ + "\1\206\1\7\1\207\2\7\1\210\1\7\1\211\1\212"+ + "\1\213\1\7\2\52\1\203\3\52\1\204\5\52\1\205"+ + "\1\52\1\206\1\52\1\207\2\52\1\210\1\52\1\211"+ + "\1\212\1\213\1\52\1\0\1\214\3\7\1\215\1\216"+ + "\1\217\1\220\1\221\7\7\1\214\3\52\1\215\1\216"+ + "\1\217\1\220\1\221\7\52\4\7\1\222\1\223\1\224"+ + "\2\7\1\225\4\52\1\222\1\223\1\224\2\52\1\225"+ + "\2\7\1\226\1\227\1\7\1\230\2\52\1\226\1\227"+ + "\1\52\1\230\1\231\1\232\1\7\1\231\1\232\1\52"+ + "\1\7\1\52\2\233"; private static int [] zzUnpackAction() { - int [] result = new int[681]; + int [] result = new int[679]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -313,46 +313,45 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { "\0\u5340\0\u538a\0\u53d4\0\u057e\0\u541e\0\u5468\0\u54b2\0\u54fc"+ "\0\u5546\0\u5590\0\u057e\0\u55da\0\u057e\0\u5624\0\u566e\0\u56b8"+ "\0\u5702\0\u057e\0\u574c\0\u5796\0\u57e0\0\u582a\0\u5874\0\u58be"+ - "\0\u5908\0\u5952\0\u599c\0\u59e6\0\u5a30\0\u5a7a\0\u5ac4\0\u5b0e"+ - "\0\u5b58\0\u5ba2\0\u5bec\0\u5c36\0\u057e\0\u5c80\0\u5cca\0\u057e"+ - "\0\u5d14\0\u5d5e\0\u5da8\0\u5df2\0\u5e3c\0\u5e86\0\u5ed0\0\u5f1a"+ - "\0\u057e\0\u057e\0\u5f64\0\u5fae\0\u5ff8\0\u057e\0\u6042\0\u057e"+ - "\0\u608c\0\u0378\0\u60d6\0\u6120\0\u616a\0\u1236\0\u61b4\0\u61fe"+ - "\0\u6248\0\u6292\0\u62dc\0\u6326\0\u1236\0\u6370\0\u1236\0\u63ba"+ - "\0\u6404\0\u1236\0\u644e\0\u6498\0\u64e2\0\u652c\0\u6576\0\u65c0"+ - "\0\u660a\0\u1236\0\u6654\0\u669e\0\u1236\0\u66e8\0\u6732\0\u677c"+ - "\0\u67c6\0\u6810\0\u685a\0\u68a4\0\u68ee\0\u1236\0\u1236\0\u6938"+ - "\0\u6982\0\u69cc\0\u1236\0\u6a16\0\u1236\0\u6a60\0\u6aaa\0\u6af4"+ - "\0\u0378\0\u0378\0\u5262\0\u6b3e\0\u057e\0\u6b88\0\u057e\0\u6bd2"+ - "\0\u6c1c\0\u6c66\0\u6cb0\0\u6cfa\0\u6d44\0\u6d8e\0\u057e\0\u6dd8"+ - "\0\u6e22\0\u6e6c\0\u6eb6\0\u6f00\0\u6f4a\0\u6f94\0\u6fde\0\u7028"+ - "\0\u7072\0\u70bc\0\u7106\0\u7150\0\u719a\0\u057e\0\u057e\0\u71e4"+ - "\0\u722e\0\u7278\0\u057e\0\u72c2\0\u057e\0\u730c\0\u057e\0\u7356"+ - "\0\u73a0\0\u73ea\0\u7434\0\u747e\0\u057e\0\u1236\0\u74c8\0\u1236"+ - "\0\u7512\0\u755c\0\u75a6\0\u75f0\0\u763a\0\u7684\0\u76ce\0\u1236"+ - "\0\u7718\0\u7762\0\u77ac\0\u77f6\0\u7840\0\u788a\0\u78d4\0\u1236"+ - "\0\u1236\0\u791e\0\u7968\0\u79b2\0\u1236\0\u79fc\0\u1236\0\u7a46"+ - "\0\u1236\0\u7a90\0\u7ada\0\u7b24\0\u7b6e\0\u7bb8\0\u1236\0\u0378"+ - "\0\u6aaa\0\u7c02\0\u6b3e\0\u7c4c\0\u7c96\0\u057e\0\u7ce0\0\u7d2a"+ - "\0\u7d74\0\u057e\0\u7dbe\0\u7e08\0\u7e52\0\u7e9c\0\u7ee6\0\u7f30"+ - "\0\u057e\0\u7f7a\0\u057e\0\u7fc4\0\u057e\0\u800e\0\u8058\0\u057e"+ - "\0\u80a2\0\u057e\0\u057e\0\u057e\0\u80ec\0\u8136\0\u8180\0\u1236"+ - "\0\u81ca\0\u8214\0\u825e\0\u1236\0\u82a8\0\u82f2\0\u833c\0\u8386"+ - "\0\u83d0\0\u1236\0\u841a\0\u1236\0\u8464\0\u1236\0\u84ae\0\u84f8"+ - "\0\u1236\0\u8542\0\u1236\0\u1236\0\u1236\0\u858c\0\u7c02\0\u057e"+ - "\0\u85d6\0\u8620\0\u866a\0\u057e\0\u057e\0\u057e\0\u057e\0\u057e"+ - "\0\u86b4\0\u86fe\0\u8748\0\u8792\0\u87dc\0\u8826\0\u8870\0\u1236"+ - "\0\u88ba\0\u8904\0\u894e\0\u1236\0\u1236\0\u1236\0\u1236\0\u1236"+ - "\0\u8998\0\u89e2\0\u8a2c\0\u8a76\0\u8ac0\0\u8b0a\0\u8b54\0\u8b9e"+ - "\0\u8be8\0\u8c32\0\u8c7c\0\u057e\0\u057e\0\u057e\0\u8cc6\0\u8d10"+ - "\0\u057e\0\u8d5a\0\u8da4\0\u8dee\0\u8e38\0\u1236\0\u1236\0\u1236"+ - "\0\u8e82\0\u8ecc\0\u1236\0\u8f16\0\u8f60\0\u057e\0\u057e\0\u8faa"+ - "\0\u057e\0\u8ff4\0\u903e\0\u1236\0\u1236\0\u9088\0\u1236\0\u057e"+ - "\0\u057e\0\u90d2\0\u1236\0\u1236\0\u911c\0\u9166\0\u91b0\0\u057e"+ - "\0\u1236"; + "\0\u5908\0\u5952\0\u3d48\0\u599c\0\u59e6\0\u5a30\0\u5a7a\0\u5ac4"+ + "\0\u5b0e\0\u5b58\0\u5ba2\0\u5bec\0\u057e\0\u5c36\0\u5c80\0\u057e"+ + "\0\u5cca\0\u5d14\0\u5d5e\0\u5da8\0\u5df2\0\u5e3c\0\u5e86\0\u5ed0"+ + "\0\u057e\0\u057e\0\u5f1a\0\u5f64\0\u5fae\0\u057e\0\u5ff8\0\u057e"+ + "\0\u6042\0\u0378\0\u608c\0\u60d6\0\u6120\0\u1236\0\u616a\0\u61b4"+ + "\0\u61fe\0\u6248\0\u6292\0\u62dc\0\u1236\0\u6326\0\u1236\0\u6370"+ + "\0\u63ba\0\u1236\0\u6404\0\u644e\0\u6498\0\u64e2\0\u652c\0\u6576"+ + "\0\u65c0\0\u1236\0\u660a\0\u6654\0\u1236\0\u669e\0\u66e8\0\u6732"+ + "\0\u677c\0\u67c6\0\u6810\0\u685a\0\u68a4\0\u1236\0\u1236\0\u68ee"+ + "\0\u6938\0\u6982\0\u1236\0\u69cc\0\u1236\0\u6a16\0\u6a60\0\u6aaa"+ + "\0\u0378\0\u0378\0\u5262\0\u6af4\0\u057e\0\u6b3e\0\u057e\0\u6b88"+ + "\0\u6bd2\0\u6c1c\0\u6c66\0\u6cb0\0\u6cfa\0\u6d44\0\u057e\0\u6d8e"+ + "\0\u6dd8\0\u6e22\0\u6e6c\0\u6eb6\0\u6f00\0\u6f4a\0\u6f94\0\u6fde"+ + "\0\u7028\0\u7072\0\u70bc\0\u7106\0\u057e\0\u057e\0\u7150\0\u719a"+ + "\0\u71e4\0\u057e\0\u722e\0\u057e\0\u7278\0\u057e\0\u72c2\0\u730c"+ + "\0\u7356\0\u73a0\0\u73ea\0\u057e\0\u1236\0\u7434\0\u1236\0\u747e"+ + "\0\u74c8\0\u7512\0\u755c\0\u75a6\0\u75f0\0\u763a\0\u1236\0\u7684"+ + "\0\u76ce\0\u7718\0\u7762\0\u77ac\0\u77f6\0\u7840\0\u1236\0\u1236"+ + "\0\u788a\0\u78d4\0\u791e\0\u1236\0\u7968\0\u1236\0\u79b2\0\u1236"+ + "\0\u79fc\0\u7a46\0\u7a90\0\u7ada\0\u7b24\0\u1236\0\u0378\0\u6a60"+ + "\0\u7b6e\0\u6af4\0\u7bb8\0\u7c02\0\u057e\0\u7c4c\0\u7c96\0\u7ce0"+ + "\0\u057e\0\u7d2a\0\u7d74\0\u7dbe\0\u7e08\0\u7e52\0\u057e\0\u7e9c"+ + "\0\u057e\0\u7ee6\0\u057e\0\u7f30\0\u7f7a\0\u057e\0\u7fc4\0\u057e"+ + "\0\u057e\0\u057e\0\u800e\0\u8058\0\u80a2\0\u1236\0\u80ec\0\u8136"+ + "\0\u8180\0\u1236\0\u81ca\0\u8214\0\u825e\0\u82a8\0\u82f2\0\u1236"+ + "\0\u833c\0\u1236\0\u8386\0\u1236\0\u83d0\0\u841a\0\u1236\0\u8464"+ + "\0\u1236\0\u1236\0\u1236\0\u84ae\0\u7b6e\0\u057e\0\u84f8\0\u8542"+ + "\0\u858c\0\u057e\0\u057e\0\u057e\0\u057e\0\u057e\0\u85d6\0\u8620"+ + "\0\u866a\0\u86b4\0\u86fe\0\u8748\0\u8792\0\u1236\0\u87dc\0\u8826"+ + "\0\u8870\0\u1236\0\u1236\0\u1236\0\u1236\0\u1236\0\u88ba\0\u8904"+ + "\0\u894e\0\u8998\0\u89e2\0\u8a2c\0\u8a76\0\u8ac0\0\u8b0a\0\u8b54"+ + "\0\u8b9e\0\u057e\0\u057e\0\u057e\0\u8be8\0\u8c32\0\u057e\0\u8c7c"+ + "\0\u8cc6\0\u8d10\0\u8d5a\0\u1236\0\u1236\0\u1236\0\u8da4\0\u8dee"+ + "\0\u1236\0\u8e38\0\u8e82\0\u057e\0\u057e\0\u8ecc\0\u057e\0\u8f16"+ + "\0\u8f60\0\u1236\0\u1236\0\u8faa\0\u1236\0\u057e\0\u057e\0\u8ff4"+ + "\0\u1236\0\u1236\0\u903e\0\u9088\0\u90d2\0\u057e\0\u1236"; private static int [] zzUnpackRowMap() { - int [] result = new int[681]; + int [] result = new int[679]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -737,245 +736,243 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { "\103\232\2\0\2\232\2\u0184\1\u01ea\105\0\1\u0112\1\232"+ "\2\u0184\1\u01ea\103\0\157\u0114\1\u01eb\44\u0114\1\235\2\u0116"+ "\1\u01ec\2\u0116\1\u0117\103\235\2\0\2\235\2\u0189\1\u01ed"+ - "\105\0\1\u0116\1\235\2\u0189\1\u01ed\103\0\6\u018b\1\u018c"+ - "\35\u018b\1\0\1\u018b\1\u01ee\163\u018b\1\0\35\u018b\1\0"+ - "\1\u018b\1\u01ef\43\u018b\13\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\1\26\1\u01f0\16\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\1\26\1\u01f1\16\26\35\0"+ - "\14\26\1\u01f2\1\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\10\26\1\u01f3\5\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\6\26\1\u01f4\11\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\6\26\1\u01f5\11\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\4\26\1\u01f6"+ - "\13\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\15\26\1\u01f7\2\26\35\0\10\26\1\u01f8\5\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\10\26\1\u01f9"+ - "\5\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\2\26\1\u01fa"+ - "\15\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\6\26\1\u01fb\11\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\15\26\1\u01fc\2\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\5\26\1\u01fd\12\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\2\26\1\u01fe"+ - "\15\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\5\26\1\u01ff\12\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\4\26\1\u0200\13\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\17\26\1\u0201\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\6\26\1\u0202\11\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\13\26"+ - "\1\u0203\4\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\5\26\1\u0204\12\26\35\0\14\26\1\u0205\1\26"+ - "\2\0\7\26\1\0\2\26\3\0\20\26\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\5\122\1\u0206\12\122"+ - "\35\0\6\122\1\u0207\7\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\14\122\1\u0208\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\14\122\1\u0209\1\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\6\122\1\u020a\11\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\1\122"+ - "\1\u020b\16\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\6\122\1\u020c\11\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\12\122\1\u020d\5\122\35\0\6\122"+ - "\1\u020e\7\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\11\122"+ - "\1\u020f\6\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\3\122\1\u0210\14\122\35\0\14\122\1\u0211\1\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\1\122\1\u0212\16\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\1\122"+ - "\1\u0213\16\122\35\0\14\122\1\u0214\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\10\122\1\u0215\5\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\6\122\1\u0216\11\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\6\122"+ - "\1\u0217\11\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\4\122\1\u0218\13\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\15\122\1\u0219\2\122\35\0\10\122"+ - "\1\u021a\5\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\10\122\1\u021b\5\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\2\122\1\u021c\15\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\6\122\1\u021d\11\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\15\122\1\u021e\2\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\5\122"+ - "\1\u021f\12\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\2\122\1\u0220\15\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\5\122\1\u0221\12\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\4\122\1\u0222\13\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\17\122"+ - "\1\u0223\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\6\122\1\u0224\11\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\13\122\1\u0225\4\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\5\122\1\u0226\12\122\35\0"+ - "\14\122\1\u0227\1\122\2\0\7\122\1\0\1\122\4\0"+ - "\20\122\22\0\7\u016a\1\u0228\1\u0229\101\u016a\10\u01d8\1\u022a"+ - "\101\u01d8\7\u016d\1\u016e\1\u022b\101\u016d\13\0\6\26\1\u022c"+ - "\7\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\7\26\1\u022d"+ - "\10\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\5\26\1\u022e\12\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\11\26\1\u022f\6\26\35\0\4\26\1\u0230"+ - "\11\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\6\26\1\u0231\7\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\14\26\1\u0232\1\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\12\26\1\u0233\3\26\2\0"+ + "\105\0\1\u0116\1\235\2\u0189\1\u01ed\103\0\120\u018b\1\0"+ + "\35\u018b\1\0\1\u018b\1\u01ee\43\u018b\13\0\16\26\2\0"+ + "\7\26\1\0\2\26\3\0\1\26\1\u01ef\16\26\35\0"+ + "\16\26\2\0\7\26\1\0\2\26\3\0\1\26\1\u01f0"+ + "\16\26\35\0\14\26\1\u01f1\1\26\2\0\7\26\1\0"+ + "\2\26\3\0\20\26\35\0\10\26\1\u01f2\5\26\2\0"+ "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\1\26\1\u0234\16\26\22\0"+ - "\2\232\1\u0112\1\232\2\u0112\1\u0183\36\232\1\u0111\44\232"+ - "\1\0\2\u0184\1\u0185\1\0\1\u0184\104\0\45\u0114\1\u0111"+ - "\44\u0114\2\235\1\u0116\1\235\2\u0116\1\u0188\35\235\1\0"+ - "\1\235\1\u0115\43\235\1\0\2\u0189\1\u018a\1\0\1\u0189"+ - "\104\0\6\u018b\1\0\35\u018b\1\0\1\u018b\1\u0235\51\u018b"+ - "\1\0\35\u018b\1\0\1\u018b\1\0\43\u018b\13\0\2\26"+ - "\1\u0236\13\26\2\0\7\26\1\0\2\26\3\0\20\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\5\26"+ - "\1\u0237\12\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\2\26\1\u0238\15\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\2\26\1\u0239\15\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\1\26\1\u023a\16\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\5\26"+ - "\1\u023b\12\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\11\26\1\u023c\6\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\2\26\1\u023d\15\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\5\26\1\u023e\12\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\6\26"+ - "\1\u023f\11\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\15\26\1\u0240\2\26\35\0\10\26\1\u0241\5\26"+ - "\2\0\7\26\1\0\2\26\3\0\20\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\4\26\1\u0242\13\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\11\26"+ - "\1\u0243\6\26\35\0\14\26\1\u0244\1\26\2\0\7\26"+ - "\1\0\2\26\3\0\20\26\35\0\10\26\1\u0245\5\26"+ - "\2\0\7\26\1\0\2\26\3\0\20\26\35\0\6\122"+ - "\1\u0246\7\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\7\122"+ - "\1\u0247\10\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\5\122\1\u0248\12\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\11\122\1\u0249\6\122\35\0\4\122"+ - "\1\u024a\11\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\6\122\1\u024b\7\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\14\122\1\u024c\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\12\122\1\u024d\3\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\1\122\1\u024e\16\122"+ - "\35\0\2\122\1\u024f\13\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\5\122\1\u0250\12\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\2\122\1\u0251\15\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\2\122\1\u0252\15\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\1\122"+ - "\1\u0253\16\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\5\122\1\u0254\12\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\11\122\1\u0255\6\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\2\122\1\u0256\15\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\5\122"+ - "\1\u0257\12\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\6\122\1\u0258\11\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\15\122\1\u0259\2\122\35\0\10\122"+ - "\1\u025a\5\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\4\122"+ - "\1\u025b\13\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\11\122\1\u025c\6\122\35\0\14\122\1\u025d\1\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\10\122"+ - "\1\u025e\5\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\22\0\7\u01d8\1\u01d9\1\u025f\101\u01d8\13\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\14\26\1\u0260\3\26\35\0"+ - "\14\26\1\u0261\1\26\2\0\7\26\1\0\2\26\3\0"+ + "\7\26\1\0\2\26\3\0\6\26\1\u01f3\11\26\35\0"+ + "\16\26\2\0\7\26\1\0\2\26\3\0\6\26\1\u01f4"+ + "\11\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ + "\4\26\1\u01f5\13\26\35\0\16\26\2\0\7\26\1\0"+ + "\2\26\3\0\15\26\1\u01f6\2\26\35\0\10\26\1\u01f7"+ + "\5\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ + "\10\26\1\u01f8\5\26\2\0\7\26\1\0\2\26\3\0"+ "\20\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\2\26\1\u0262\15\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\1\26\1\u0263\16\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\5\26\1\u0264\12\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\4\26\1\u0265"+ - "\13\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\11\26\1\u0266\6\26\22\0\6\u018b\1\0\35\u018b\1\0"+ - "\1\u018b\1\u0115\43\u018b\13\0\14\26\1\u0267\1\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\14\26\1\u0268"+ - "\1\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\5\26\1\u0269"+ + "\2\26\1\u01f9\15\26\35\0\16\26\2\0\7\26\1\0"+ + "\2\26\3\0\6\26\1\u01fa\11\26\35\0\16\26\2\0"+ + "\7\26\1\0\2\26\3\0\15\26\1\u01fb\2\26\35\0"+ + "\16\26\2\0\7\26\1\0\2\26\3\0\5\26\1\u01fc"+ "\12\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\2\26\1\u026a\15\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\12\26\1\u026b\5\26\35\0\4\26\1\u026c"+ - "\11\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\10\26\1\u026d"+ - "\7\26\35\0\14\26\1\u026e\1\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\6\26\1\u026f\7\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\14\122\1\u0270\3\122\35\0"+ - "\14\122\1\u0271\1\122\2\0\7\122\1\0\1\122\4\0"+ - "\20\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\2\122\1\u0272\15\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\1\122\1\u0273\16\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\5\122\1\u0274\12\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\4\122\1\u0275"+ - "\13\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\11\122\1\u0276\6\122\35\0\14\122\1\u0277\1\122\2\0"+ - "\7\122\1\0\1\122\4\0\20\122\35\0\14\122\1\u0278"+ + "\2\26\1\u01fd\15\26\35\0\16\26\2\0\7\26\1\0"+ + "\2\26\3\0\5\26\1\u01fe\12\26\35\0\16\26\2\0"+ + "\7\26\1\0\2\26\3\0\4\26\1\u01ff\13\26\35\0"+ + "\16\26\2\0\7\26\1\0\2\26\3\0\17\26\1\u0200"+ + "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\6\26"+ + "\1\u0201\11\26\35\0\16\26\2\0\7\26\1\0\2\26"+ + "\3\0\13\26\1\u0202\4\26\35\0\16\26\2\0\7\26"+ + "\1\0\2\26\3\0\5\26\1\u0203\12\26\35\0\14\26"+ + "\1\u0204\1\26\2\0\7\26\1\0\2\26\3\0\20\26"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\5\122"+ + "\1\u0205\12\122\35\0\6\122\1\u0206\7\122\2\0\7\122"+ + "\1\0\1\122\4\0\20\122\35\0\14\122\1\u0207\1\122"+ + "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\14\122"+ + "\1\u0208\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\6\122"+ + "\1\u0209\11\122\35\0\16\122\2\0\7\122\1\0\1\122"+ + "\4\0\1\122\1\u020a\16\122\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\6\122\1\u020b\11\122\35\0\16\122"+ + "\2\0\7\122\1\0\1\122\4\0\12\122\1\u020c\5\122"+ + "\35\0\6\122\1\u020d\7\122\2\0\7\122\1\0\1\122"+ + "\4\0\20\122\35\0\16\122\2\0\7\122\1\0\1\122"+ + "\4\0\11\122\1\u020e\6\122\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\3\122\1\u020f\14\122\35\0\14\122"+ + "\1\u0210\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\1\122"+ + "\1\u0211\16\122\35\0\16\122\2\0\7\122\1\0\1\122"+ + "\4\0\1\122\1\u0212\16\122\35\0\14\122\1\u0213\1\122"+ + "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\10\122"+ + "\1\u0214\5\122\2\0\7\122\1\0\1\122\4\0\20\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\6\122"+ + "\1\u0215\11\122\35\0\16\122\2\0\7\122\1\0\1\122"+ + "\4\0\6\122\1\u0216\11\122\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\4\122\1\u0217\13\122\35\0\16\122"+ + "\2\0\7\122\1\0\1\122\4\0\15\122\1\u0218\2\122"+ + "\35\0\10\122\1\u0219\5\122\2\0\7\122\1\0\1\122"+ + "\4\0\20\122\35\0\10\122\1\u021a\5\122\2\0\7\122"+ + "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\2\122\1\u021b\15\122\35\0\16\122"+ + "\2\0\7\122\1\0\1\122\4\0\6\122\1\u021c\11\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\15\122"+ + "\1\u021d\2\122\35\0\16\122\2\0\7\122\1\0\1\122"+ + "\4\0\5\122\1\u021e\12\122\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\2\122\1\u021f\15\122\35\0\16\122"+ + "\2\0\7\122\1\0\1\122\4\0\5\122\1\u0220\12\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\4\122"+ + "\1\u0221\13\122\35\0\16\122\2\0\7\122\1\0\1\122"+ + "\4\0\17\122\1\u0222\35\0\16\122\2\0\7\122\1\0"+ + "\1\122\4\0\6\122\1\u0223\11\122\35\0\16\122\2\0"+ + "\7\122\1\0\1\122\4\0\13\122\1\u0224\4\122\35\0"+ + "\16\122\2\0\7\122\1\0\1\122\4\0\5\122\1\u0225"+ + "\12\122\35\0\14\122\1\u0226\1\122\2\0\7\122\1\0"+ + "\1\122\4\0\20\122\22\0\7\u016a\1\u0227\1\u0228\101\u016a"+ + "\10\u01d8\1\u0229\101\u01d8\7\u016d\1\u016e\1\u022a\101\u016d\13\0"+ + "\6\26\1\u022b\7\26\2\0\7\26\1\0\2\26\3\0"+ + "\20\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ + "\7\26\1\u022c\10\26\35\0\16\26\2\0\7\26\1\0"+ + "\2\26\3\0\5\26\1\u022d\12\26\35\0\16\26\2\0"+ + "\7\26\1\0\2\26\3\0\11\26\1\u022e\6\26\35\0"+ + "\4\26\1\u022f\11\26\2\0\7\26\1\0\2\26\3\0"+ + "\20\26\35\0\6\26\1\u0230\7\26\2\0\7\26\1\0"+ + "\2\26\3\0\20\26\35\0\14\26\1\u0231\1\26\2\0"+ + "\7\26\1\0\2\26\3\0\20\26\35\0\12\26\1\u0232"+ + "\3\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ + "\16\26\2\0\7\26\1\0\2\26\3\0\1\26\1\u0233"+ + "\16\26\22\0\2\232\1\u0112\1\232\2\u0112\1\u0183\36\232"+ + "\1\u0111\44\232\1\0\2\u0184\1\u0185\1\0\1\u0184\104\0"+ + "\45\u0114\1\u0111\44\u0114\2\235\1\u0116\1\235\2\u0116\1\u0188"+ + "\35\235\1\0\1\235\1\u0115\43\235\1\0\2\u0189\1\u018a"+ + "\1\0\1\u0189\104\0\6\u018b\1\0\35\u018b\1\0\1\u018b"+ + "\1\u0115\43\u018b\13\0\2\26\1\u0234\13\26\2\0\7\26"+ + "\1\0\2\26\3\0\20\26\35\0\16\26\2\0\7\26"+ + "\1\0\2\26\3\0\5\26\1\u0235\12\26\35\0\16\26"+ + "\2\0\7\26\1\0\2\26\3\0\2\26\1\u0236\15\26"+ + "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\2\26"+ + "\1\u0237\15\26\35\0\16\26\2\0\7\26\1\0\2\26"+ + "\3\0\1\26\1\u0238\16\26\35\0\16\26\2\0\7\26"+ + "\1\0\2\26\3\0\5\26\1\u0239\12\26\35\0\16\26"+ + "\2\0\7\26\1\0\2\26\3\0\11\26\1\u023a\6\26"+ + "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\2\26"+ + "\1\u023b\15\26\35\0\16\26\2\0\7\26\1\0\2\26"+ + "\3\0\5\26\1\u023c\12\26\35\0\16\26\2\0\7\26"+ + "\1\0\2\26\3\0\6\26\1\u023d\11\26\35\0\16\26"+ + "\2\0\7\26\1\0\2\26\3\0\15\26\1\u023e\2\26"+ + "\35\0\10\26\1\u023f\5\26\2\0\7\26\1\0\2\26"+ + "\3\0\20\26\35\0\16\26\2\0\7\26\1\0\2\26"+ + "\3\0\4\26\1\u0240\13\26\35\0\16\26\2\0\7\26"+ + "\1\0\2\26\3\0\11\26\1\u0241\6\26\35\0\14\26"+ + "\1\u0242\1\26\2\0\7\26\1\0\2\26\3\0\20\26"+ + "\35\0\10\26\1\u0243\5\26\2\0\7\26\1\0\2\26"+ + "\3\0\20\26\35\0\6\122\1\u0244\7\122\2\0\7\122"+ + "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\7\122\1\u0245\10\122\35\0\16\122"+ + "\2\0\7\122\1\0\1\122\4\0\5\122\1\u0246\12\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\11\122"+ + "\1\u0247\6\122\35\0\4\122\1\u0248\11\122\2\0\7\122"+ + "\1\0\1\122\4\0\20\122\35\0\6\122\1\u0249\7\122"+ + "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\14\122"+ + "\1\u024a\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ + "\35\0\12\122\1\u024b\3\122\2\0\7\122\1\0\1\122"+ + "\4\0\20\122\35\0\16\122\2\0\7\122\1\0\1\122"+ + "\4\0\1\122\1\u024c\16\122\35\0\2\122\1\u024d\13\122"+ + "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\16\122"+ + "\2\0\7\122\1\0\1\122\4\0\5\122\1\u024e\12\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\2\122"+ + "\1\u024f\15\122\35\0\16\122\2\0\7\122\1\0\1\122"+ + "\4\0\2\122\1\u0250\15\122\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\1\122\1\u0251\16\122\35\0\16\122"+ + "\2\0\7\122\1\0\1\122\4\0\5\122\1\u0252\12\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\11\122"+ + "\1\u0253\6\122\35\0\16\122\2\0\7\122\1\0\1\122"+ + "\4\0\2\122\1\u0254\15\122\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\5\122\1\u0255\12\122\35\0\16\122"+ + "\2\0\7\122\1\0\1\122\4\0\6\122\1\u0256\11\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\15\122"+ + "\1\u0257\2\122\35\0\10\122\1\u0258\5\122\2\0\7\122"+ + "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\4\122\1\u0259\13\122\35\0\16\122"+ + "\2\0\7\122\1\0\1\122\4\0\11\122\1\u025a\6\122"+ + "\35\0\14\122\1\u025b\1\122\2\0\7\122\1\0\1\122"+ + "\4\0\20\122\35\0\10\122\1\u025c\5\122\2\0\7\122"+ + "\1\0\1\122\4\0\20\122\22\0\7\u01d8\1\u01d9\1\u025d"+ + "\101\u01d8\13\0\16\26\2\0\7\26\1\0\2\26\3\0"+ + "\14\26\1\u025e\3\26\35\0\14\26\1\u025f\1\26\2\0"+ + "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ + "\7\26\1\0\2\26\3\0\2\26\1\u0260\15\26\35\0"+ + "\16\26\2\0\7\26\1\0\2\26\3\0\1\26\1\u0261"+ + "\16\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ + "\5\26\1\u0262\12\26\35\0\16\26\2\0\7\26\1\0"+ + "\2\26\3\0\4\26\1\u0263\13\26\35\0\16\26\2\0"+ + "\7\26\1\0\2\26\3\0\11\26\1\u0264\6\26\35\0"+ + "\14\26\1\u0265\1\26\2\0\7\26\1\0\2\26\3\0"+ + "\20\26\35\0\14\26\1\u0266\1\26\2\0\7\26\1\0"+ + "\2\26\3\0\20\26\35\0\16\26\2\0\7\26\1\0"+ + "\2\26\3\0\5\26\1\u0267\12\26\35\0\16\26\2\0"+ + "\7\26\1\0\2\26\3\0\2\26\1\u0268\15\26\35\0"+ + "\16\26\2\0\7\26\1\0\2\26\3\0\12\26\1\u0269"+ + "\5\26\35\0\4\26\1\u026a\11\26\2\0\7\26\1\0"+ + "\2\26\3\0\20\26\35\0\16\26\2\0\7\26\1\0"+ + "\2\26\3\0\10\26\1\u026b\7\26\35\0\14\26\1\u026c"+ + "\1\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ + "\6\26\1\u026d\7\26\2\0\7\26\1\0\2\26\3\0"+ + "\20\26\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ + "\14\122\1\u026e\3\122\35\0\14\122\1\u026f\1\122\2\0"+ + "\7\122\1\0\1\122\4\0\20\122\35\0\16\122\2\0"+ + "\7\122\1\0\1\122\4\0\2\122\1\u0270\15\122\35\0"+ + "\16\122\2\0\7\122\1\0\1\122\4\0\1\122\1\u0271"+ + "\16\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ + "\5\122\1\u0272\12\122\35\0\16\122\2\0\7\122\1\0"+ + "\1\122\4\0\4\122\1\u0273\13\122\35\0\16\122\2\0"+ + "\7\122\1\0\1\122\4\0\11\122\1\u0274\6\122\35\0"+ + "\14\122\1\u0275\1\122\2\0\7\122\1\0\1\122\4\0"+ + "\20\122\35\0\14\122\1\u0276\1\122\2\0\7\122\1\0"+ + "\1\122\4\0\20\122\35\0\16\122\2\0\7\122\1\0"+ + "\1\122\4\0\5\122\1\u0277\12\122\35\0\16\122\2\0"+ + "\7\122\1\0\1\122\4\0\2\122\1\u0278\15\122\35\0"+ + "\16\122\2\0\7\122\1\0\1\122\4\0\12\122\1\u0279"+ + "\5\122\35\0\4\122\1\u027a\11\122\2\0\7\122\1\0"+ + "\1\122\4\0\20\122\35\0\16\122\2\0\7\122\1\0"+ + "\1\122\4\0\10\122\1\u027b\7\122\35\0\14\122\1\u027c"+ "\1\122\2\0\7\122\1\0\1\122\4\0\20\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\5\122\1\u0279"+ - "\12\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\2\122\1\u027a\15\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\12\122\1\u027b\5\122\35\0\4\122\1\u027c"+ - "\11\122\2\0\7\122\1\0\1\122\4\0\20\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\10\122\1\u027d"+ - "\7\122\35\0\14\122\1\u027e\1\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\35\0\6\122\1\u027f\7\122\2\0"+ - "\7\122\1\0\1\122\4\0\20\122\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\11\26\1\u0280\6\26\35\0"+ + "\6\122\1\u027d\7\122\2\0\7\122\1\0\1\122\4\0"+ + "\20\122\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ + "\11\26\1\u027e\6\26\35\0\14\26\1\u027f\1\26\2\0"+ + "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ + "\7\26\1\0\2\26\3\0\2\26\1\u0280\15\26\35\0"+ "\14\26\1\u0281\1\26\2\0\7\26\1\0\2\26\3\0"+ "\20\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\2\26\1\u0282\15\26\35\0\14\26\1\u0283\1\26\2\0"+ + "\5\26\1\u0282\12\26\35\0\14\26\1\u0283\1\26\2\0"+ "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\5\26\1\u0284\12\26\35\0"+ - "\14\26\1\u0285\1\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\1\u0286\17\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\11\26\1\u0287\6\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\11\26\1\u0288\6\26\35\0\14\26"+ - "\1\u0289\1\26\2\0\7\26\1\0\2\26\3\0\20\26"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\11\122"+ - "\1\u028a\6\122\35\0\14\122\1\u028b\1\122\2\0\7\122"+ + "\7\26\1\0\2\26\3\0\1\u0284\17\26\35\0\16\26"+ + "\2\0\7\26\1\0\2\26\3\0\11\26\1\u0285\6\26"+ + "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\11\26"+ + "\1\u0286\6\26\35\0\14\26\1\u0287\1\26\2\0\7\26"+ + "\1\0\2\26\3\0\20\26\35\0\16\122\2\0\7\122"+ + "\1\0\1\122\4\0\11\122\1\u0288\6\122\35\0\14\122"+ + "\1\u0289\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\2\122"+ + "\1\u028a\15\122\35\0\14\122\1\u028b\1\122\2\0\7\122"+ "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\2\122\1\u028c\15\122\35\0\14\122"+ + "\1\0\1\122\4\0\5\122\1\u028c\12\122\35\0\14\122"+ "\1\u028d\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\5\122"+ - "\1\u028e\12\122\35\0\14\122\1\u028f\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\1\u0290\17\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\11\122\1\u0291\6\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\11\122\1\u0292"+ - "\6\122\35\0\14\122\1\u0293\1\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\5\26\1\u0294\12\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\10\26\1\u0295\7\26\35\0"+ - "\14\26\1\u0296\1\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\12\26\1\u0297\3\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\10\26\1\u0298\5\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\5\26\1\u0299\12\26\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\5\122\1\u029a"+ - "\12\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\10\122\1\u029b\7\122\35\0\14\122\1\u029c\1\122\2\0"+ - "\7\122\1\0\1\122\4\0\20\122\35\0\12\122\1\u029d"+ - "\3\122\2\0\7\122\1\0\1\122\4\0\20\122\35\0"+ - "\10\122\1\u029e\5\122\2\0\7\122\1\0\1\122\4\0"+ - "\20\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\5\122\1\u029f\12\122\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\4\26\1\u02a0\13\26\35\0\4\26\1\u02a1"+ - "\11\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\16\26\1\u02a2"+ - "\1\26\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\4\122\1\u02a3\13\122\35\0\4\122\1\u02a4\11\122\2\0"+ + "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\1\u028e"+ + "\17\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ + "\11\122\1\u028f\6\122\35\0\16\122\2\0\7\122\1\0"+ + "\1\122\4\0\11\122\1\u0290\6\122\35\0\14\122\1\u0291"+ + "\1\122\2\0\7\122\1\0\1\122\4\0\20\122\35\0"+ + "\16\26\2\0\7\26\1\0\2\26\3\0\5\26\1\u0292"+ + "\12\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ + "\10\26\1\u0293\7\26\35\0\14\26\1\u0294\1\26\2\0"+ + "\7\26\1\0\2\26\3\0\20\26\35\0\12\26\1\u0295"+ + "\3\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ + "\10\26\1\u0296\5\26\2\0\7\26\1\0\2\26\3\0"+ + "\20\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ + "\5\26\1\u0297\12\26\35\0\16\122\2\0\7\122\1\0"+ + "\1\122\4\0\5\122\1\u0298\12\122\35\0\16\122\2\0"+ + "\7\122\1\0\1\122\4\0\10\122\1\u0299\7\122\35\0"+ + "\14\122\1\u029a\1\122\2\0\7\122\1\0\1\122\4\0"+ + "\20\122\35\0\12\122\1\u029b\3\122\2\0\7\122\1\0"+ + "\1\122\4\0\20\122\35\0\10\122\1\u029c\5\122\2\0"+ "\7\122\1\0\1\122\4\0\20\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\16\122\1\u02a5\1\122\35\0"+ - "\14\26\1\u02a6\1\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\14\122\1\u02a7\1\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\35\0\12\26\1\u02a8\3\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\12\122\1\u02a9"+ - "\3\122\2\0\7\122\1\0\1\122\4\0\20\122\22\0"; + "\7\122\1\0\1\122\4\0\5\122\1\u029d\12\122\35\0"+ + "\16\26\2\0\7\26\1\0\2\26\3\0\4\26\1\u029e"+ + "\13\26\35\0\4\26\1\u029f\11\26\2\0\7\26\1\0"+ + "\2\26\3\0\20\26\35\0\16\26\2\0\7\26\1\0"+ + "\2\26\3\0\16\26\1\u02a0\1\26\35\0\16\122\2\0"+ + "\7\122\1\0\1\122\4\0\4\122\1\u02a1\13\122\35\0"+ + "\4\122\1\u02a2\11\122\2\0\7\122\1\0\1\122\4\0"+ + "\20\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ + "\16\122\1\u02a3\1\122\35\0\14\26\1\u02a4\1\26\2\0"+ + "\7\26\1\0\2\26\3\0\20\26\35\0\14\122\1\u02a5"+ + "\1\122\2\0\7\122\1\0\1\122\4\0\20\122\35\0"+ + "\12\26\1\u02a6\3\26\2\0\7\26\1\0\2\26\3\0"+ + "\20\26\35\0\12\122\1\u02a7\3\122\2\0\7\122\1\0"+ + "\1\122\4\0\20\122\22\0"; private static int [] zzUnpackTrans() { - int [] result = new int[37370]; + int [] result = new int[37148]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -1024,11 +1021,11 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { "\1\0\23\1\3\11\3\1\1\11\2\0\36\1\5\11"+ "\1\0\1\11\61\1\2\11\1\0\15\1\2\0\3\1"+ "\3\0\2\1\6\0\34\1\1\11\56\1\2\11\1\0"+ - "\16\1\1\0\1\1\4\0\70\1\1\11\1\0\1\1"+ - "\1\0\11\1\1\0\51\1\1\0\112\1"; + "\16\1\1\0\1\1\3\0\70\1\1\11\1\0\1\1"+ + "\1\0\62\1\1\0\112\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[681]; + int [] result = new int[679]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex index 9f798852a033..2716b02c736b 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex @@ -121,38 +121,20 @@ mIDENT_NOBUCKS = {mLETTER} ({mLETTER} | {mDIGIT})* mSTRING_NL = {mONE_NL} mSTRING_ESC = \\ [^] | \\ ({WHITE_SPACE})+ (\n|\r) -//////////////////////////////////////////////////////////////////////////// +mSINGLE_QUOTED_CONTENT = {mSTRING_ESC} | [^'\\\r\n] +mSINGLE_QUOTED_LITERAL = \' {mSINGLE_QUOTED_CONTENT}* \'? -mSINGLE_QUOTED_STRING_BEGIN = "\'" ( {mSTRING_ESC} - | "\"" - | [^\\\'\r\n] - | "$")* -mSINGLE_QUOTED_STRING = {mSINGLE_QUOTED_STRING_BEGIN} \' -mTRIPLE_QUOTED_STRING = \'\'\' ({mSTRING_ESC} - | [^\\'] - | {mSTRING_NL} - | \'(\')?[^'] )* (\'{1,3} | \\)? +mTRIPLE_SINGLE_QUOTED_CONTENT = {mSINGLE_QUOTED_CONTENT} | {mSTRING_NL} | \'(\')?[^'] +mTRIPLE_SINGLE_QUOTED_LITERAL = \'\'\' {mTRIPLE_SINGLE_QUOTED_CONTENT}* (\'{0,3} | \\?) -mSTRING_LITERAL = {mTRIPLE_QUOTED_STRING} | {mSINGLE_QUOTED_STRING} +mDOUBLE_QUOTED_CONTENT = {mSTRING_ESC} | [^\"\\$\n\r] +mDOUBLE_QUOTED_LITERAL = \" {mDOUBLE_QUOTED_CONTENT}* \" -// Single-double-quoted GStrings -mGSTRING_SINGLE_CONTENT = ({mSTRING_ESC} - | [^\\\"\r\n"$"] - | "\'" )+ - -// Triple-double-quoted GStrings -mGSTRING_TRIPLE_CONTENT = ({mSTRING_ESC} - | \' - | \" (\")? [^\""$"\\] - | [^\\\""$"] - | {mSTRING_NL})+ - -mGSTRING_TRIPLE_CTOR_END = {mGSTRING_TRIPLE_CONTENT} \"\"\" - -mGSTRING_LITERAL = \"\" - | \" ([^\\\"\n\r"$"] | {mSTRING_ESC})? {mGSTRING_SINGLE_CONTENT} \" - | \"\"\" {mGSTRING_TRIPLE_CTOR_END} +mTRIPLE_DOUBLE_QUOTED_CONTENT = {mDOUBLE_QUOTED_CONTENT} | {mSTRING_NL} | \"(\")?[^\"\\$] +mTRIPLE_DOUBLE_QUOTED_LITERAL = \"\"\" {mTRIPLE_DOUBLE_QUOTED_CONTENT}* \"\"\" +mSTRING_LITERAL = {mSINGLE_QUOTED_LITERAL} | {mTRIPLE_SINGLE_QUOTED_LITERAL} +mGSTRING_LITERAL = {mDOUBLE_QUOTED_LITERAL} | {mTRIPLE_DOUBLE_QUOTED_LITERAL} %% @@ -405,7 +387,6 @@ mGSTRING_LITERAL = \"\" //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// {mSTRING_LITERAL} { return storeToken(mSTRING_LITERAL); } -{mSINGLE_QUOTED_STRING_BEGIN} { return storeToken(mSTRING_LITERAL); } {mGSTRING_LITERAL} { return storeToken(mGSTRING_LITERAL); } \"\"\" { yybeginstate(IN_TRIPLE_GSTRING); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy index 7879e95ac01b..e7cd4fb70d8d 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy @@ -170,6 +170,8 @@ class ExpressionsParsingTest extends GroovyParsingTestCase { void testgstring$triple$triple3() throws Throwable { doTest() } + void testgstring$triple$triple4() throws Throwable { doTest() } + void testgstring$triple$quote_and_slash() throws Throwable { doTest() } void testgstring$ugly_lexer() throws Throwable { doTest() } diff --git a/plugins/groovy/testdata/parsing/groovy/expressions/gstring/triple/triple4.test b/plugins/groovy/testdata/parsing/groovy/expressions/gstring/triple/triple4.test new file mode 100644 index 000000000000..cecb18e9740c --- /dev/null +++ b/plugins/groovy/testdata/parsing/groovy/expressions/gstring/triple/triple4.test @@ -0,0 +1,13 @@ +"""""" +"""\$""" +"""\"""" +----- +Groovy script + Literal + PsiElement(Gstring)('""""""') + PsiElement(new line)('\n') + Literal + PsiElement(Gstring)('"""\$"""') + PsiElement(new line)('\n') + Literal + PsiElement(Gstring)('"""\""""') \ No newline at end of file