From d2968fd07108397f19d3dcd3ee1ba9ecc862af1f Mon Sep 17 00:00:00 2001 From: Luke Gareth Ribchester Date: Sat, 4 May 2024 16:55:34 +0200 Subject: [PATCH] feat(editor): implement quote handling (#65) * feat(editor): implement quote handling Signed-off-by: Luke Gareth Ribchester * docs(changelog): update entry Signed-off-by: Luke Gareth Ribchester * docs(changelog): update entry Signed-off-by: Luke Gareth Ribchester --------- Signed-off-by: Luke Gareth Ribchester --- CHANGELOG.md | 4 + gradle.properties | 2 +- .../io/kadena/pact/language/PactLexer.java | 534 +++++++++--------- .../pact/ide/editor/PactQuoteHandler.kt | 8 + .../kotlin/io/kadena/pact/language/Pact.bnf | 2 +- .../kotlin/io/kadena/pact/language/Pact.flex | 2 +- .../kadena/pact/language/psi/PactTokenSets.kt | 4 + src/main/resources/META-INF/plugin.xml | 5 + 8 files changed, 291 insertions(+), 270 deletions(-) create mode 100644 src/main/kotlin/io/kadena/pact/ide/editor/PactQuoteHandler.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f21c85..4500f8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ ## [Unreleased] +### Added + +- Enhanced string handling + ## [0.3.0] - 2024-05-03 ### Added diff --git a/gradle.properties b/gradle.properties index 76599d0..5e75e82 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ pluginGroup = io.kadena.pact pluginName = Pact pluginRepositoryUrl = https://github.com/lukeribchester/pact-intellij # SemVer format -> https://semver.org -pluginVersion = 0.3.0 +pluginVersion = 0.3.1 # Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html pluginSinceBuild = 232 diff --git a/src/main/gen/io/kadena/pact/language/PactLexer.java b/src/main/gen/io/kadena/pact/language/PactLexer.java index aca38ff..b9fd4de 100644 --- a/src/main/gen/io/kadena/pact/language/PactLexer.java +++ b/src/main/gen/io/kadena/pact/language/PactLexer.java @@ -67,24 +67,24 @@ public static int ZZ_CMAP(int ch) { private static final String ZZ_ACTION_PACKED_0 = "\2\0\1\1\1\2\1\3\11\4\1\5\6\4\1\6"+ - "\2\4\2\1\1\7\1\10\1\11\1\1\1\12\1\13"+ - "\1\14\1\15\1\16\1\17\1\20\1\1\1\21\1\22"+ - "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\2\32"+ - "\1\3\14\4\1\0\1\4\1\33\10\4\4\0\1\34"+ - "\1\0\1\35\1\36\1\37\1\40\1\41\1\42\1\43"+ - "\1\4\1\44\10\4\1\45\7\4\1\46\2\4\1\47"+ - "\1\4\4\0\1\34\1\0\1\4\1\44\1\50\3\4"+ - "\1\51\1\4\1\52\10\4\1\53\1\54\6\4\3\0"+ - "\1\55\1\0\1\35\1\56\2\4\1\57\2\4\1\60"+ - "\6\4\1\61\6\4\1\62\1\4\3\0\1\63\7\4"+ - "\1\64\3\4\1\65\4\4\1\66\1\67\1\0\1\70"+ - "\1\4\1\71\10\4\1\72\2\4\1\0\6\4\1\73"+ - "\1\4\1\74\1\4\1\75\1\4\1\76\3\4\1\77"+ - "\1\100\1\4\1\101\5\4\1\102\2\4\1\103\2\4"+ - "\1\104\14\4\1\105\3\4\1\106\1\107"; + "\2\4\1\1\1\7\1\10\1\11\1\12\1\1\1\13"+ + "\1\14\1\15\1\16\1\17\1\20\1\21\1\1\1\22"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ + "\2\33\1\3\14\4\1\0\1\4\1\34\10\4\3\0"+ + "\1\7\1\0\1\35\1\36\1\37\1\40\1\41\1\42"+ + "\1\43\1\4\1\44\10\4\1\45\7\4\1\46\2\4"+ + "\1\47\1\4\5\0\1\4\1\44\1\50\3\4\1\51"+ + "\1\4\1\52\10\4\1\53\1\54\6\4\3\0\1\55"+ + "\1\0\1\35\1\56\2\4\1\57\2\4\1\60\6\4"+ + "\1\61\6\4\1\62\1\4\3\0\1\63\7\4\1\64"+ + "\3\4\1\65\4\4\1\66\1\67\1\0\1\70\1\4"+ + "\1\71\10\4\1\72\2\4\1\0\6\4\1\73\1\4"+ + "\1\74\1\4\1\75\1\4\1\76\3\4\1\77\1\100"+ + "\1\4\1\101\5\4\1\102\2\4\1\103\2\4\1\104"+ + "\14\4\1\105\3\4\1\106\1\107"; private static int [] zzUnpackAction() { - int [] result = new int[256]; + int [] result = new int[254]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -118,32 +118,32 @@ private static int zzUnpackAction(String packed, int offset, int [] result) { "\0\u0740\0\u077a\0\u07b4\0\u07ee\0\u0828\0\u0862\0\u089c\0\u08d6"+ "\0\u0910\0\u094a\0\u0984\0\u09be\0\u09f8\0\u0a32\0\u05e4\0\u0a6c"+ "\0\u02b8\0\u0aa6\0\u0ae0\0\u0b1a\0\u0b54\0\u0b8e\0\u0bc8\0\u0c02"+ - "\0\u0c3c\0\u0c76\0\u0cb0\0\u0cea\0\u0570\0\164\0\u0d24\0\u0d5e"+ - "\0\u0d98\0\164\0\164\0\164\0\164\0\164\0\u0dd2\0\u0e0c"+ - "\0\u0e46\0\u0e80\0\u0eba\0\u0ef4\0\u0f2e\0\u0f68\0\u0fa2\0\u0fdc"+ - "\0\164\0\u1016\0\u1050\0\u108a\0\u10c4\0\u10fe\0\u1138\0\u1172"+ - "\0\u02b8\0\u11ac\0\u11e6\0\u02b8\0\u1220\0\u125a\0\u1294\0\u12ce"+ - "\0\u1308\0\u0570\0\u1342\0\u137c\0\164\0\u02b8\0\u13b6\0\u13f0"+ - "\0\u142a\0\u1464\0\u149e\0\164\0\u14d8\0\u1512\0\u154c\0\u1586"+ - "\0\u15c0\0\u15fa\0\u1634\0\u166e\0\u02b8\0\164\0\u16a8\0\u16e2"+ - "\0\u171c\0\u1756\0\u1790\0\u17ca\0\u1804\0\u183e\0\u1878\0\164"+ - "\0\u18b2\0\u18b2\0\u02b8\0\u18ec\0\u1926\0\u02b8\0\u1960\0\u199a"+ - "\0\u02b8\0\u19d4\0\u1a0e\0\u1a48\0\u1a82\0\u1abc\0\u1af6\0\u02b8"+ - "\0\u1b30\0\u1b6a\0\u1ba4\0\u1bde\0\u1c18\0\u1c52\0\u02b8\0\u1c8c"+ - "\0\u1cc6\0\u1d00\0\u1d3a\0\u02b8\0\u1d74\0\u1dae\0\u1de8\0\u1e22"+ - "\0\u1e5c\0\u1e96\0\u1ed0\0\u02b8\0\u1f0a\0\u1f44\0\u1f7e\0\u02b8"+ - "\0\u1fb8\0\u1ff2\0\u202c\0\u2066\0\164\0\164\0\u20a0\0\u20da"+ - "\0\u2114\0\u02b8\0\u214e\0\u2188\0\u21c2\0\u21fc\0\u2236\0\u2270"+ - "\0\u22aa\0\u22e4\0\u02b8\0\u231e\0\u2358\0\u2392\0\u23cc\0\u2406"+ - "\0\u2440\0\u247a\0\u24b4\0\u24ee\0\u02b8\0\u2528\0\u02b8\0\u2562"+ - "\0\u02b8\0\u259c\0\164\0\u25d6\0\u2610\0\u264a\0\u02b8\0\u02b8"+ - "\0\u2684\0\u02b8\0\u26be\0\u26f8\0\u2732\0\u276c\0\u27a6\0\u02b8"+ - "\0\u27e0\0\u281a\0\u02b8\0\u2854\0\u288e\0\u02b8\0\u28c8\0\u2902"+ - "\0\u293c\0\u2976\0\u29b0\0\u29ea\0\u2a24\0\u2a5e\0\u2a98\0\u2ad2"+ - "\0\u2b0c\0\u2b46\0\u02b8\0\u2b80\0\u2bba\0\u2bf4\0\u02b8\0\u02b8"; + "\0\u0c3c\0\u0c76\0\u0cb0\0\u0cea\0\164\0\u0d24\0\u0d5e\0\u0d98"+ + "\0\164\0\164\0\164\0\164\0\164\0\u0dd2\0\u0e0c\0\u0e46"+ + "\0\u0e80\0\u0eba\0\u0ef4\0\u0f2e\0\u0f68\0\u0fa2\0\u0fdc\0\164"+ + "\0\u1016\0\u1050\0\u108a\0\u10c4\0\u10fe\0\u1138\0\u1172\0\u02b8"+ + "\0\u11ac\0\u11e6\0\u02b8\0\u1220\0\u125a\0\u1294\0\u12ce\0\u1308"+ + "\0\u1342\0\u137c\0\164\0\u02b8\0\u13b6\0\u13f0\0\u142a\0\u1464"+ + "\0\u149e\0\164\0\u14d8\0\u1512\0\u154c\0\u1586\0\u15c0\0\u15fa"+ + "\0\u1634\0\u166e\0\u02b8\0\164\0\u16a8\0\u16e2\0\u171c\0\u1756"+ + "\0\u1790\0\u17ca\0\u1804\0\u183e\0\u1878\0\164\0\u18b2\0\u18b2"+ + "\0\u02b8\0\u18ec\0\u1926\0\u02b8\0\u1960\0\u199a\0\u02b8\0\u19d4"+ + "\0\u1a0e\0\u1a48\0\u1a82\0\u1abc\0\u1af6\0\u02b8\0\u1b30\0\u1b6a"+ + "\0\u1ba4\0\u1bde\0\u1c18\0\u1c52\0\u02b8\0\u1c8c\0\u1cc6\0\u1d00"+ + "\0\u1d3a\0\u02b8\0\u1d74\0\u1dae\0\u1de8\0\u1e22\0\u1e5c\0\u1e96"+ + "\0\u1ed0\0\u02b8\0\u1f0a\0\u1f44\0\u1f7e\0\u02b8\0\u1fb8\0\u1ff2"+ + "\0\u202c\0\u2066\0\164\0\164\0\u20a0\0\u20da\0\u2114\0\u02b8"+ + "\0\u214e\0\u2188\0\u21c2\0\u21fc\0\u2236\0\u2270\0\u22aa\0\u22e4"+ + "\0\u02b8\0\u231e\0\u2358\0\u2392\0\u23cc\0\u2406\0\u2440\0\u247a"+ + "\0\u24b4\0\u24ee\0\u02b8\0\u2528\0\u02b8\0\u2562\0\u02b8\0\u259c"+ + "\0\164\0\u25d6\0\u2610\0\u264a\0\u02b8\0\u02b8\0\u2684\0\u02b8"+ + "\0\u26be\0\u26f8\0\u2732\0\u276c\0\u27a6\0\u02b8\0\u27e0\0\u281a"+ + "\0\u02b8\0\u2854\0\u288e\0\u02b8\0\u28c8\0\u2902\0\u293c\0\u2976"+ + "\0\u29b0\0\u29ea\0\u2a24\0\u2a5e\0\u2a98\0\u2ad2\0\u2b0c\0\u2b46"+ + "\0\u02b8\0\u2b80\0\u2bba\0\u2bf4\0\u02b8\0\u02b8"; private static int [] zzUnpackRowMap() { - int [] result = new int[256]; + int [] result = new int[254]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -202,230 +202,230 @@ private static int zzUnpackRowMap(String packed, int offset, int [] result) { "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\12\15"+ "\1\111\6\15\1\0\6\15\4\0\1\15\1\0\1\15"+ "\1\0\2\15\32\0\1\112\10\0\1\113\4\0\1\114"+ - "\43\0\37\115\1\116\1\117\31\115\42\0\1\34\1\120"+ - "\70\0\1\120\35\0\11\121\1\0\7\121\1\0\6\121"+ - "\6\0\1\121\1\0\1\121\75\0\1\122\1\123\71\0"+ - "\1\124\71\0\1\125\71\0\1\126\17\0\1\4\3\61"+ - "\67\0\1\62\75\0\2\15\1\127\16\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\15\15"+ - "\1\130\3\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\16\15\1\131\2\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\13\15"+ - "\1\132\5\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\5\15\1\133\13\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\7\15"+ - "\1\134\11\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\2\15\1\135\16\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\3\15"+ - "\1\136\15\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\15\15\1\137\3\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\1\15"+ - "\1\140\17\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\21\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\7\0\1\141\20\0\2\15"+ - "\1\142\16\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\15\15\1\143\1\15\1\144\1\15"+ + "\43\0\2\32\1\0\34\32\1\115\1\116\31\32\42\0"+ + "\1\34\1\117\70\0\1\117\35\0\11\120\1\0\7\120"+ + "\1\0\6\120\6\0\1\120\1\0\1\120\75\0\1\121"+ + "\1\122\71\0\1\123\71\0\1\124\71\0\1\125\17\0"+ + "\1\4\3\61\67\0\1\62\75\0\2\15\1\126\16\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\14\15\1\145\4\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\20\15\1\146\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\6\15\1\147\12\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\21\15\1\0\1\150\1\15"+ - "\1\151\3\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\20\15\1\152\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\5\15\1\153\13\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\2\15\1\154\16\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\15\15\1\155\3\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\47\0"+ - "\1\156\60\0\1\157\7\0\1\160\61\0\1\161\55\0"+ - "\37\115\1\162\1\117\31\115\10\0\1\163\31\0\1\120"+ - "\1\0\1\163\33\0\21\121\1\0\6\121\4\0\1\121"+ - "\1\0\1\121\1\0\2\121\30\0\3\15\1\164\15\15"+ + "\30\0\15\15\1\127\3\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\16\15\1\130\2\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\21\15\1\165\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\20\15\1\166\1\0\6\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\1\167\20\15"+ + "\30\0\13\15\1\131\5\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\5\15\1\132\13\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\6\15\1\170\12\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\6\15\1\171\12\15"+ + "\30\0\7\15\1\133\11\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\2\15\1\134\16\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\14\15\1\172\4\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\14\15\1\173\4\15"+ + "\30\0\3\15\1\135\15\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\15\15\1\136\3\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\21\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\7\0\1\174\20\0\3\15\1\175\15\15"+ - "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\16\15\1\176\2\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\2\15\1\177\16\15"+ - "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\16\15\1\200\2\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\1\15\1\201\17\15"+ - "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\21\15\1\0\1\202\5\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\14\15\1\203\4\15\1\0"+ - "\1\15\1\204\4\15\4\0\1\15\1\0\1\15\1\0"+ - "\2\15\30\0\2\15\1\205\16\15\1\0\6\15\4\0"+ + "\30\0\1\15\1\137\17\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\21\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\7\0\1\140"+ + "\20\0\2\15\1\141\16\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\15\15\1\142\1\15"+ + "\1\143\1\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\14\15\1\144\4\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\20\15"+ + "\1\145\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\6\15\1\146\12\15\1\0\6\15\4\0"+ "\1\15\1\0\1\15\1\0\2\15\30\0\21\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\7\0"+ - "\1\206\20\0\3\15\1\207\4\15\1\210\3\15\1\211"+ - "\1\212\3\15\1\0\1\213\5\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\21\15\1\0\4\15\1\214"+ - "\1\15\4\0\1\15\1\0\1\15\1\0\2\15\32\0"+ - "\1\215\107\0\1\216\55\0\1\217\75\0\1\220\72\0"+ - "\1\221\21\0\1\221\1\222\35\0\3\15\1\223\15\15"+ + "\1\147\1\15\1\150\3\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\20\15\1\151\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\5\15\1\152"+ + "\13\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\2\15\1\153\16\15\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\15\15\1\154"+ + "\3\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\47\0\1\155\60\0\1\156\7\0\1\157\61\0"+ + "\1\160\55\0\1\32\1\0\2\32\1\0\65\32\10\0"+ + "\1\161\31\0\1\117\1\0\1\161\33\0\21\120\1\0"+ + "\6\120\4\0\1\120\1\0\1\120\1\0\2\120\30\0"+ + "\3\15\1\162\15\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\21\15\1\163\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\20\15\1\164"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\20\15\1\224\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\7\15\1\225\11\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\7\15\1\226\11\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\11\15\1\227\7\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\2\15\1\230\16\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\2\15\1\231\16\15\1\0"+ + "\30\0\1\165\20\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\6\15\1\166\12\15\1\0"+ "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\15\15\1\232\3\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\7\15\1\233\11\15\1\0"+ + "\6\15\1\167\12\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\14\15\1\170\4\15\1\0"+ "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\7\15\1\234\11\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\2\15\1\235\16\15\1\0"+ + "\14\15\1\171\4\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\21\15\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\7\0\1\172\20\0"+ + "\3\15\1\173\15\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\16\15\1\174\2\15\1\0"+ "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\1\15\1\236\17\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\2\15\1\237\16\15\1\0"+ + "\2\15\1\175\16\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\16\15\1\176\2\15\1\0"+ "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\4\15\1\240\14\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\10\15\1\241\10\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\6\15\1\242\7\15\1\243\2\15\1\0\6\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\7\15\1\244"+ - "\6\15\1\245\2\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\16\15\1\246\2\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\4\15\1\247\14\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\11\15\1\250\7\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\34\0"+ - "\1\251\67\0\1\252\105\0\1\253\107\0\1\222\35\0"+ - "\16\15\1\254\2\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\10\15\1\255\10\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\21\15\1\0\3\15\1\256\2\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\4\15\1\257\14\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\2\15\1\260\16\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\5\15\1\261\13\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\12\15\1\262\6\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\13\15\1\263\5\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\2\15\1\264\16\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\7\15\1\265\11\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\21\15\1\0\4\15\1\266\1\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\4\15\1\267\14\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\14\15\1\270\4\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\6\15\1\271\12\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\10\15\1\272\10\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\1\273\20\15\1\0\6\15"+ + "\1\15\1\177\17\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\21\15\1\0\1\200\5\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\14\15"+ + "\1\201\4\15\1\0\1\15\1\202\4\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\2\15\1\203\16\15"+ + "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ + "\30\0\21\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\7\0\1\204\20\0\3\15\1\205\4\15"+ + "\1\206\3\15\1\207\1\210\3\15\1\0\1\211\5\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\21\15"+ + "\1\0\4\15\1\212\1\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\32\0\1\213\107\0\1\214\55\0\1\215"+ + "\75\0\1\216\72\0\1\217\21\0\1\217\1\220\35\0"+ + "\3\15\1\221\15\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\20\15\1\222\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\7\15"+ + "\1\223\11\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\7\15\1\224\11\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\11\15"+ + "\1\225\7\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\2\15\1\226\16\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\2\15"+ + "\1\227\16\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\15\15\1\230\3\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\7\15"+ + "\1\231\11\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\7\15\1\232\11\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\2\15"+ + "\1\233\16\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\1\15\1\234\17\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\2\15"+ + "\1\235\16\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\4\15\1\236\14\15\1\0\6\15"+ "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\10\15"+ - "\1\274\10\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\45\0\1\275\55\0\1\276\113\0\1\277"+ - "\46\0\2\15\1\300\16\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\12\15\1\301\6\15"+ + "\1\237\10\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\6\15\1\240\7\15\1\241\2\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\20\15\1\302\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\11\15\1\303\7\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\16\15\1\304\2\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\16\15\1\305\2\15\1\0"+ + "\30\0\7\15\1\242\6\15\1\243\2\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\16\15"+ + "\1\244\2\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\4\15\1\245\14\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\11\15"+ + "\1\246\7\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\34\0\1\247\67\0\1\250\105\0\1\251"+ + "\107\0\1\220\35\0\16\15\1\252\2\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\10\15"+ + "\1\253\10\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\21\15\1\0\3\15\1\254\2\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\4\15"+ + "\1\255\14\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\2\15\1\256\16\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\5\15"+ + "\1\257\13\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\12\15\1\260\6\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\13\15"+ + "\1\261\5\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\2\15\1\262\16\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\7\15"+ + "\1\263\11\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\21\15\1\0\4\15\1\264\1\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\4\15"+ + "\1\265\14\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\14\15\1\266\4\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\6\15"+ + "\1\267\12\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\10\15\1\270\10\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\1\271"+ + "\20\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\10\15\1\272\10\15\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\45\0\1\273\55\0"+ + "\1\274\113\0\1\275\46\0\2\15\1\276\16\15\1\0"+ "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\2\15\1\306\16\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\15\15\1\307\3\15\1\0"+ + "\12\15\1\277\6\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\20\15\1\300\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\11\15"+ + "\1\301\7\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\16\15\1\302\2\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\16\15"+ + "\1\303\2\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\2\15\1\304\16\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\15\15"+ + "\1\305\3\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\2\15\1\306\16\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\3\15"+ + "\1\307\15\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\14\15\1\310\4\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\15\15"+ + "\1\311\3\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\1\15\1\312\17\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\16\15"+ + "\1\313\2\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\32\0\1\314\67\0\11\15\1\315\7\15"+ + "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ + "\30\0\15\15\1\316\3\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\21\15\1\0\1\317"+ + "\5\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ + "\10\15\1\320\10\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\4\15\1\321\14\15\1\0"+ "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\2\15\1\310\16\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\3\15\1\311\15\15\1\0"+ + "\4\15\1\322\14\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\21\15\1\0\2\15\1\323"+ + "\3\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ + "\13\15\1\324\5\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\15\15\1\325\3\15\1\0"+ "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\14\15\1\312\4\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\15\15\1\313\3\15\1\0"+ + "\2\15\1\326\16\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\2\15\1\327\16\15\1\0"+ "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\1\15\1\314\17\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\16\15\1\315\2\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\32\0"+ - "\1\316\67\0\11\15\1\317\7\15\1\0\6\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\15\15\1\320"+ + "\14\15\1\330\4\15\1\0\6\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\50\0\1\331\51\0\6\15\1\332"+ + "\12\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\21\15\1\0\4\15\1\333\1\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\3\15\1\334"+ + "\15\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\2\15\1\335\16\15\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\15\15\1\336"+ "\3\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ - "\2\15\30\0\21\15\1\0\1\321\5\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\10\15\1\322\10\15"+ + "\2\15\30\0\15\15\1\337\3\15\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\16\15\1\340"+ + "\2\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\7\15\1\341\11\15\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\16\15\1\342"+ + "\2\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\4\15\1\343\14\15\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\11\15\1\344"+ + "\7\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\2\15\1\345\16\15\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\3\15\1\346"+ + "\15\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\15\15\1\347\3\15\1\0\6\15\4\0"+ + "\1\15\1\0\1\15\1\0\2\15\30\0\1\350\20\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\4\15\1\323\14\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\4\15\1\324\14\15"+ + "\30\0\2\15\1\351\16\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\7\15\1\352\11\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\21\15\1\0\2\15\1\325\3\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\13\15\1\326\5\15"+ + "\30\0\7\15\1\353\11\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\21\15\1\0\2\15"+ + "\1\354\3\15\4\0\1\15\1\0\1\15\1\0\2\15"+ + "\30\0\12\15\1\355\6\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\6\15\1\356\12\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\15\15\1\327\3\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\2\15\1\330\16\15"+ + "\30\0\11\15\1\357\7\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\1\15\1\360\17\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\2\15\1\331\16\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\14\15\1\332\4\15"+ + "\30\0\1\15\1\361\17\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\21\15\1\0\1\15"+ + "\1\362\4\15\4\0\1\15\1\0\1\15\1\0\2\15"+ + "\30\0\12\15\1\363\6\15\1\0\6\15\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\30\0\1\15\1\364\17\15"+ "\1\0\6\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\50\0\1\333\51\0\6\15\1\334\12\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\21\15"+ - "\1\0\4\15\1\335\1\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\3\15\1\336\15\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\2\15"+ - "\1\337\16\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\15\15\1\340\3\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\15\15"+ - "\1\341\3\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\16\15\1\342\2\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\7\15"+ - "\1\343\11\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\16\15\1\344\2\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\4\15"+ - "\1\345\14\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\11\15\1\346\7\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\2\15"+ - "\1\347\16\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\3\15\1\350\15\15\1\0\6\15"+ - "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\15\15"+ - "\1\351\3\15\1\0\6\15\4\0\1\15\1\0\1\15"+ - "\1\0\2\15\30\0\1\352\20\15\1\0\6\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\2\15\1\353"+ - "\16\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ - "\2\15\30\0\7\15\1\354\11\15\1\0\6\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\7\15\1\355"+ - "\11\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ - "\2\15\30\0\21\15\1\0\2\15\1\356\3\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\12\15\1\357"+ - "\6\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ - "\2\15\30\0\6\15\1\360\12\15\1\0\6\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\11\15\1\361"+ - "\7\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ - "\2\15\30\0\1\15\1\362\17\15\1\0\6\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\1\15\1\363"+ - "\17\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ - "\2\15\30\0\21\15\1\0\1\15\1\364\4\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\12\15\1\365"+ - "\6\15\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ - "\2\15\30\0\1\15\1\366\17\15\1\0\6\15\4\0"+ - "\1\15\1\0\1\15\1\0\2\15\30\0\21\15\1\0"+ - "\1\367\5\15\4\0\1\15\1\0\1\15\1\0\2\15"+ - "\30\0\15\15\1\370\3\15\1\0\6\15\4\0\1\15"+ - "\1\0\1\15\1\0\2\15\30\0\1\371\20\15\1\0"+ + "\30\0\21\15\1\0\1\365\5\15\4\0\1\15\1\0"+ + "\1\15\1\0\2\15\30\0\15\15\1\366\3\15\1\0"+ "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\16\15\1\372\2\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\21\15\1\0\2\15\1\373"+ - "\3\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\16\15\1\374\2\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\7\15\1\375\11\15\1\0"+ - "\6\15\4\0\1\15\1\0\1\15\1\0\2\15\30\0"+ - "\10\15\1\376\10\15\1\0\6\15\4\0\1\15\1\0"+ - "\1\15\1\0\2\15\30\0\20\15\1\377\1\0\6\15"+ + "\1\367\20\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\16\15\1\370\2\15\1\0\6\15"+ "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\21\15"+ - "\1\0\5\15\1\u0100\4\0\1\15\1\0\1\15\1\0"+ - "\2\15\22\0"; + "\1\0\2\15\1\371\3\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\16\15\1\372\2\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\7\15"+ + "\1\373\11\15\1\0\6\15\4\0\1\15\1\0\1\15"+ + "\1\0\2\15\30\0\10\15\1\374\10\15\1\0\6\15"+ + "\4\0\1\15\1\0\1\15\1\0\2\15\30\0\20\15"+ + "\1\375\1\0\6\15\4\0\1\15\1\0\1\15\1\0"+ + "\2\15\30\0\21\15\1\0\5\15\1\376\4\0\1\15"+ + "\1\0\1\15\1\0\2\15\22\0"; private static int [] zzUnpackTrans() { int [] result = new int[11310]; @@ -467,14 +467,14 @@ private static int zzUnpackTrans(String packed, int offset, int [] result) { private static final String ZZ_ATTRIBUTE_PACKED_0 = "\2\0\1\11\22\1\1\11\10\1\2\11\1\1\4\11"+ - "\3\1\7\11\17\1\1\0\12\1\4\0\1\11\1\0"+ - "\2\1\5\11\12\1\1\11\14\1\4\0\1\1\1\0"+ - "\1\1\1\11\6\1\1\11\11\1\1\11\6\1\3\0"+ - "\1\11\1\0\27\1\3\0\21\1\2\11\1\0\16\1"+ - "\1\0\14\1\1\11\45\1"; + "\3\1\7\11\17\1\1\0\12\1\3\0\1\11\1\0"+ + "\2\1\5\11\12\1\1\11\14\1\5\0\1\1\1\11"+ + "\6\1\1\11\11\1\1\11\6\1\3\0\1\11\1\0"+ + "\27\1\3\0\21\1\2\11\1\0\16\1\1\0\14\1"+ + "\1\11\45\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[256]; + int [] result = new int[254]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -818,112 +818,112 @@ else if (zzAtEOF) { // fall through case 77: break; case 7: - { yybegin(YYINITIAL); return PactTypes.PLUS; + { yybegin(YYINITIAL); return PactTypes.STR; } // fall through case 78: break; case 8: - { yybegin(YYINITIAL); return PactTypes.INTEGER; + { yybegin(YYINITIAL); return PactTypes.PLUS; } // fall through case 79: break; case 9: - { yybegin(YYINITIAL); return PactTypes.DOT; + { yybegin(YYINITIAL); return PactTypes.INTEGER; } // fall through case 80: break; case 10: - { yybegin(YYINITIAL); return PactTypes.DIVIDE; + { yybegin(YYINITIAL); return PactTypes.DOT; } // fall through case 81: break; case 11: - { yybegin(YYINITIAL); return PactTypes.POW; + { yybegin(YYINITIAL); return PactTypes.DIVIDE; } // fall through case 82: break; case 12: - { yybegin(YYINITIAL); return PactTypes.COLON; + { yybegin(YYINITIAL); return PactTypes.POW; } // fall through case 83: break; case 13: - { yybegin(YYINITIAL); return PactTypes.EQUAL; + { yybegin(YYINITIAL); return PactTypes.COLON; } // fall through case 84: break; case 14: - { yybegin(YYINITIAL); return PactTypes.BITWISE_AND; + { yybegin(YYINITIAL); return PactTypes.EQUAL; } // fall through case 85: break; case 15: - { yybegin(YYINITIAL); return PactTypes.BITWISE_OR; + { yybegin(YYINITIAL); return PactTypes.BITWISE_AND; } // fall through case 86: break; case 16: - { yybegin(YYINITIAL); return PactTypes.BITWISE_REVERSE; + { yybegin(YYINITIAL); return PactTypes.BITWISE_OR; } // fall through case 87: break; case 17: - { yybegin(YYINITIAL); return PactTypes.LESS_THAN; + { yybegin(YYINITIAL); return PactTypes.BITWISE_REVERSE; } // fall through case 88: break; case 18: - { yybegin(YYINITIAL); return PactTypes.GREATER_THAN; + { yybegin(YYINITIAL); return PactTypes.LESS_THAN; } // fall through case 89: break; case 19: - { yybegin(YYINITIAL); return PactTypes.PAREN_OPEN; + { yybegin(YYINITIAL); return PactTypes.GREATER_THAN; } // fall through case 90: break; case 20: - { yybegin(YYINITIAL); return PactTypes.PAREN_CLOSE; + { yybegin(YYINITIAL); return PactTypes.PAREN_OPEN; } // fall through case 91: break; case 21: - { yybegin(YYINITIAL); return PactTypes.BRACE_OPEN; + { yybegin(YYINITIAL); return PactTypes.PAREN_CLOSE; } // fall through case 92: break; case 22: - { yybegin(YYINITIAL); return PactTypes.BRACE_CLOSE; + { yybegin(YYINITIAL); return PactTypes.BRACE_OPEN; } // fall through case 93: break; case 23: - { yybegin(YYINITIAL); return PactTypes.BRACKET_OPEN; + { yybegin(YYINITIAL); return PactTypes.BRACE_CLOSE; } // fall through case 94: break; case 24: - { yybegin(YYINITIAL); return PactTypes.BRACKET_CLOSE; + { yybegin(YYINITIAL); return PactTypes.BRACKET_OPEN; } // fall through case 95: break; case 25: - { yybegin(YYINITIAL); return PactTypes.COMMA; + { yybegin(YYINITIAL); return PactTypes.BRACKET_CLOSE; } // fall through case 96: break; case 26: - { yybegin(WAITING_VALUE); return TokenType.WHITE_SPACE; + { yybegin(YYINITIAL); return PactTypes.COMMA; } // fall through case 97: break; case 27: - { yybegin(YYINITIAL); return PactTypes.KEYWORD_IF; + { yybegin(WAITING_VALUE); return TokenType.WHITE_SPACE; } // fall through case 98: break; case 28: - { yybegin(YYINITIAL); return PactTypes.STR; + { yybegin(YYINITIAL); return PactTypes.KEYWORD_IF; } // fall through case 99: break; diff --git a/src/main/kotlin/io/kadena/pact/ide/editor/PactQuoteHandler.kt b/src/main/kotlin/io/kadena/pact/ide/editor/PactQuoteHandler.kt new file mode 100644 index 0000000..191fc57 --- /dev/null +++ b/src/main/kotlin/io/kadena/pact/ide/editor/PactQuoteHandler.kt @@ -0,0 +1,8 @@ +package io.kadena.pact.ide.editor + +import com.intellij.codeInsight.editorActions.SimpleTokenSetQuoteHandler +import io.kadena.pact.language.psi.PactTokenSets + + +class PactQuoteHandler : SimpleTokenSetQuoteHandler(PactTokenSets.STRINGS) { +} diff --git a/src/main/kotlin/io/kadena/pact/language/Pact.bnf b/src/main/kotlin/io/kadena/pact/language/Pact.bnf index fcd1ea2..e7c99ac 100644 --- a/src/main/kotlin/io/kadena/pact/language/Pact.bnf +++ b/src/main/kotlin/io/kadena/pact/language/Pact.bnf @@ -63,7 +63,7 @@ KEYWORD_MODEL_ANNOTATION="@model" /* Literals */ - STR="regexp:(\"([^\"\\]|\\\"|\\)*\")" + STR="regexp:(\"([^\"\\\n]|\\.|\\\n)*\"?)" INTEGER="regexp:([+-]?[0-9]+)" FLOATING_POINT="regexp:([+-]?([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?)" TRUE="true" diff --git a/src/main/kotlin/io/kadena/pact/language/Pact.flex b/src/main/kotlin/io/kadena/pact/language/Pact.flex index e6211ba..5d680ea 100644 --- a/src/main/kotlin/io/kadena/pact/language/Pact.flex +++ b/src/main/kotlin/io/kadena/pact/language/Pact.flex @@ -65,7 +65,7 @@ KEYWORD_MANAGED_ANNOTATION="@managed" KEYWORD_MODEL_ANNOTATION="@model" /* Literals */ -STR=(\"([^\"\\]|\\\"|\\)*\") +STR=(\"([^\"\\\n]|\\.|\\\n)*\"?) INTEGER=([+-]?[0-9]+) FLOATING_POINT=([+-]?([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?) TRUE="true" diff --git a/src/main/kotlin/io/kadena/pact/language/psi/PactTokenSets.kt b/src/main/kotlin/io/kadena/pact/language/psi/PactTokenSets.kt index 3f04905..f3b59c5 100644 --- a/src/main/kotlin/io/kadena/pact/language/psi/PactTokenSets.kt +++ b/src/main/kotlin/io/kadena/pact/language/psi/PactTokenSets.kt @@ -5,6 +5,10 @@ import com.intellij.psi.tree.TokenSet interface PactTokenSets { companion object { + /* Comments */ val COMMENTS: TokenSet = TokenSet.create(PactTypes.COMMENT) + + /* Literals */ + val STRINGS: TokenSet = TokenSet.create(PactTypes.STR) } } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 5738e48..32ee5ab 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -43,5 +43,10 @@ + + +