diff --git a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java index 01115b5d5a33..aee404e6512d 100644 --- a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java +++ b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */ +/* The following code was generated by JFlex 1.7.0 tweaked for IntelliJ platform */ /* It's an automatically generated code. Do not modify it. */ package org.intellij.lang.regexp; @@ -16,7 +16,7 @@ import static org.intellij.lang.regexp.RegExpCapability.*; /** * This class is a scanner generated by - * JFlex 1.7.0-SNAPSHOT + * JFlex 1.7.0 * from the specification file regexp-lexer.flex */ class _RegExLexer implements FlexLexer { @@ -63,147 +63,132 @@ class _RegExLexer implements FlexLexer { /** * Translates characters to character classes + * Chosen bits are [11, 6, 4] + * Total runtime size is 14272 bytes */ - private static final String ZZ_CMAP_PACKED = - "\10\0\2\61\1\76\1\0\1\61\1\76\22\0\1\14\1\75\1\0"+ - "\1\72\1\16\1\0\1\71\1\64\1\2\1\3\1\20\1\21\1\56"+ - "\1\13\1\1\1\0\1\53\3\55\4\54\2\47\1\67\1\0\1\63"+ - "\1\70\1\74\1\17\1\0\1\30\1\30\1\37\1\35\1\45\1\46"+ - "\1\31\1\57\1\40\2\73\1\44\1\66\1\60\1\73\1\42\1\50"+ - "\1\65\1\34\1\73\1\43\1\33\1\33\1\33\1\73\1\32\1\6"+ - "\1\10\1\7\1\23\1\12\1\0\1\25\1\26\1\36\1\35\1\25"+ - "\1\25\1\27\1\57\1\40\1\73\1\62\1\43\1\73\1\24\1\73"+ - "\1\41\1\73\1\24\1\33\1\24\1\52\1\33\1\33\1\51\1\73"+ - "\1\31\1\4\1\22\1\5\54\0\1\11\12\0\1\11\4\0\1\11"+ - "\5\0\27\11\1\0\37\11\1\0\u01ca\11\4\0\14\11\16\0\5\11"+ - "\7\0\1\11\1\0\1\11\201\0\5\11\1\0\2\11\2\0\4\11"+ - "\1\0\1\11\6\0\1\11\1\0\3\11\1\0\1\11\1\0\24\11"+ - "\1\0\123\11\1\0\213\11\10\0\246\11\1\0\46\11\2\0\1\11"+ - "\7\0\47\11\110\0\33\11\5\0\3\11\55\0\53\11\25\0\12\15"+ - "\4\0\2\11\1\0\143\11\1\0\1\11\17\0\2\11\7\0\2\11"+ - "\12\15\3\11\2\0\1\11\20\0\1\11\1\0\36\11\35\0\131\11"+ - "\13\0\1\11\16\0\12\15\41\11\11\0\2\11\4\0\1\11\5\0"+ - "\26\11\4\0\1\11\11\0\1\11\3\0\1\11\27\0\31\11\107\0"+ - "\25\11\117\0\66\11\3\0\1\11\22\0\1\11\7\0\12\11\4\0"+ - "\12\15\1\0\20\11\4\0\10\11\2\0\2\11\2\0\26\11\1\0"+ - "\7\11\1\0\1\11\3\0\4\11\3\0\1\11\20\0\1\11\15\0"+ - "\2\11\1\0\3\11\4\0\12\15\2\11\23\0\6\11\4\0\2\11"+ - "\2\0\26\11\1\0\7\11\1\0\2\11\1\0\2\11\1\0\2\11"+ - "\37\0\4\11\1\0\1\11\7\0\12\15\2\0\3\11\20\0\11\11"+ - "\1\0\3\11\1\0\26\11\1\0\7\11\1\0\2\11\1\0\5\11"+ - "\3\0\1\11\22\0\1\11\17\0\2\11\4\0\12\15\11\0\1\11"+ - "\13\0\10\11\2\0\2\11\2\0\26\11\1\0\7\11\1\0\2\11"+ - "\1\0\5\11\3\0\1\11\36\0\2\11\1\0\3\11\4\0\12\15"+ - "\1\0\1\11\21\0\1\11\1\0\6\11\3\0\3\11\1\0\4\11"+ - "\3\0\2\11\1\0\1\11\1\0\2\11\3\0\2\11\3\0\3\11"+ - "\3\0\14\11\26\0\1\11\25\0\12\15\25\0\10\11\1\0\3\11"+ - "\1\0\27\11\1\0\20\11\3\0\1\11\32\0\3\11\5\0\2\11"+ - "\4\0\12\15\25\0\10\11\1\0\3\11\1\0\27\11\1\0\12\11"+ - "\1\0\5\11\3\0\1\11\40\0\1\11\1\0\2\11\4\0\12\15"+ - "\1\0\2\11\22\0\10\11\1\0\3\11\1\0\51\11\2\0\1\11"+ - "\20\0\1\11\20\0\3\11\4\0\12\15\12\0\6\11\5\0\22\11"+ - "\3\0\30\11\1\0\11\11\1\0\1\11\2\0\7\11\37\0\12\15"+ - "\21\0\60\11\1\0\2\11\14\0\7\11\11\0\12\15\47\0\2\11"+ - "\1\0\1\11\2\0\2\11\1\0\1\11\2\0\1\11\6\0\4\11"+ - "\1\0\7\11\1\0\3\11\1\0\1\11\1\0\1\11\2\0\2\11"+ - "\1\0\4\11\1\0\2\11\11\0\1\11\2\0\5\11\1\0\1\11"+ - "\11\0\12\15\2\0\4\11\40\0\1\11\37\0\12\15\26\0\10\11"+ - "\1\0\44\11\33\0\5\11\163\0\53\11\24\0\1\11\12\15\6\0"+ - "\6\11\4\0\4\11\3\0\1\11\3\0\2\11\7\0\3\11\4\0"+ - "\15\11\14\0\1\11\1\0\12\15\6\0\46\11\1\0\1\11\5\0"+ - "\1\11\2\0\53\11\1\0\u014d\11\1\0\4\11\2\0\7\11\1\0"+ - "\1\11\1\0\4\11\2\0\51\11\1\0\4\11\2\0\41\11\1\0"+ - "\4\11\2\0\7\11\1\0\1\11\1\0\4\11\2\0\17\11\1\0"+ - "\71\11\1\0\4\11\2\0\103\11\45\0\20\11\20\0\126\11\2\0"+ - "\6\11\3\0\u026c\11\2\0\21\11\1\0\32\11\5\0\113\11\6\0"+ - "\10\11\7\0\15\11\1\0\4\11\16\0\22\11\16\0\22\11\16\0"+ - "\15\11\1\0\3\11\17\0\64\11\43\0\1\11\4\0\1\11\3\0"+ - "\12\15\46\0\12\15\6\0\130\11\10\0\51\11\1\0\1\11\5\0"+ - "\106\11\12\0\37\11\47\0\12\15\36\11\2\0\5\11\13\0\54\11"+ - "\4\0\32\11\6\0\12\15\46\0\27\11\11\0\65\11\53\0\12\15"+ - "\6\0\12\15\15\0\1\11\135\0\57\11\21\0\7\11\4\0\12\15"+ - "\51\0\36\11\15\0\2\11\12\15\54\11\32\0\44\11\34\0\12\15"+ - "\3\0\3\11\12\15\44\11\153\0\4\11\1\0\4\11\3\0\2\11"+ - "\11\0\300\11\100\0\u0116\11\2\0\6\11\2\0\46\11\2\0\6\11"+ - "\2\0\10\11\1\0\1\11\1\0\1\11\1\0\1\11\1\0\37\11"+ - "\2\0\65\11\1\0\7\11\1\0\1\11\3\0\3\11\1\0\7\11"+ - "\3\0\4\11\2\0\6\11\4\0\15\11\5\0\3\11\1\0\7\11"+ - "\164\0\1\11\15\0\1\11\20\0\15\11\145\0\1\11\4\0\1\11"+ - "\2\0\12\11\1\0\1\11\3\0\5\11\6\0\1\11\1\0\1\11"+ - "\1\0\1\11\1\0\4\11\1\0\13\11\2\0\4\11\5\0\5\11"+ - "\4\0\1\11\64\0\2\11\u0a7b\0\57\11\1\0\57\11\1\0\205\11"+ - "\6\0\4\11\3\0\2\11\14\0\46\11\1\0\1\11\5\0\1\11"+ - "\2\0\70\11\7\0\1\11\20\0\27\11\11\0\7\11\1\0\7\11"+ - "\1\0\7\11\1\0\7\11\1\0\7\11\1\0\7\11\1\0\7\11"+ - "\1\0\7\11\120\0\1\11\u01d5\0\2\11\52\0\5\11\5\0\2\11"+ - "\4\0\126\11\6\0\3\11\1\0\132\11\1\0\4\11\5\0\51\11"+ - "\3\0\136\11\21\0\33\11\65\0\20\11\u0200\0\u19b6\11\112\0\u51d6\11"+ - "\52\0\u048d\11\103\0\56\11\2\0\u010d\11\3\0\20\11\12\15\2\11"+ - "\24\0\57\11\20\0\37\11\2\0\106\11\61\0\11\11\2\0\147\11"+ - "\2\0\43\11\2\0\10\11\77\0\13\11\1\0\3\11\1\0\4\11"+ - "\1\0\27\11\35\0\64\11\16\0\62\11\34\0\12\15\30\0\6\11"+ - "\3\0\1\11\1\0\1\11\2\0\12\15\34\11\12\0\27\11\31\0"+ - "\35\11\7\0\57\11\34\0\1\11\12\15\6\0\5\11\1\0\12\11"+ - "\12\15\5\11\1\0\51\11\27\0\3\11\1\0\10\11\4\0\12\15"+ - "\6\0\27\11\3\0\1\11\3\0\62\11\1\0\1\11\3\0\2\11"+ - "\2\0\5\11\2\0\1\11\1\0\1\11\30\0\3\11\2\0\13\11"+ - "\7\0\3\11\14\0\6\11\2\0\6\11\2\0\6\11\11\0\7\11"+ - "\1\0\7\11\1\0\53\11\1\0\12\11\12\0\163\11\15\0\12\15"+ - "\6\0\u2ba4\11\14\0\27\11\4\0\61\11\u2104\0\u016e\11\2\0\152\11"+ - "\46\0\7\11\14\0\5\11\5\0\1\11\1\0\12\11\1\0\15\11"+ - "\1\0\5\11\1\0\1\11\1\0\2\11\1\0\2\11\1\0\154\11"+ - "\41\0\u016b\11\22\0\100\11\2\0\66\11\50\0\14\11\164\0\5\11"+ - "\1\0\207\11\23\0\12\15\7\0\32\11\6\0\32\11\13\0\131\11"+ - "\3\0\6\11\2\0\6\11\2\0\6\11\2\0\3\11\43\0\14\11"+ - "\1\0\32\11\1\0\23\11\1\0\2\11\1\0\17\11\2\0\16\11"+ - "\42\0\173\11\u0185\0\35\11\3\0\61\11\57\0\40\11\20\0\21\11"+ - "\1\0\10\11\6\0\46\11\12\0\36\11\2\0\44\11\4\0\10\11"+ - "\60\0\236\11\2\0\12\15\126\0\50\11\10\0\64\11\234\0\u0137\11"+ - "\11\0\26\11\12\0\10\11\230\0\6\11\2\0\1\11\1\0\54\11"+ - "\1\0\2\11\3\0\1\11\2\0\27\11\12\0\27\11\11\0\37\11"+ - "\101\0\23\11\1\0\2\11\12\0\26\11\12\0\32\11\106\0\70\11"+ - "\6\0\2\11\100\0\1\11\17\0\4\11\1\0\3\11\1\0\33\11"+ - "\54\0\35\11\3\0\35\11\43\0\10\11\1\0\34\11\33\0\66\11"+ - "\12\0\26\11\12\0\23\11\15\0\22\11\156\0\111\11\67\0\63\11"+ - "\15\0\63\11\u0310\0\65\11\56\0\12\15\23\0\55\11\40\0\31\11"+ - "\7\0\12\15\11\0\44\11\17\0\12\15\20\0\43\11\3\0\1\11"+ - "\14\0\60\11\16\0\4\11\13\0\12\15\1\11\1\0\1\11\43\0"+ - "\22\11\1\0\31\11\124\0\7\11\1\0\1\11\1\0\4\11\1\0"+ - "\17\11\1\0\12\11\7\0\57\11\21\0\12\15\13\0\10\11\2\0"+ - "\2\11\2\0\26\11\1\0\7\11\1\0\2\11\1\0\5\11\3\0"+ - "\1\11\22\0\1\11\14\0\5\11\u011e\0\60\11\24\0\2\11\1\0"+ - "\1\11\10\0\12\15\246\0\57\11\51\0\4\11\44\0\60\11\24\0"+ - "\1\11\13\0\12\15\46\0\53\11\25\0\12\15\66\0\32\11\26\0"+ - "\12\15\u0166\0\100\11\12\15\25\0\1\11\u01c0\0\71\11\u0507\0\u039a\11"+ - "\346\0\304\11\u0abc\0\u042f\11\u0fd1\0\u0247\11\u21b9\0\u0239\11\7\0\37\11"+ - "\1\0\12\15\146\0\36\11\22\0\60\11\20\0\4\11\14\0\12\15"+ - "\11\0\25\11\5\0\23\11\u0370\0\105\11\13\0\1\11\102\0\15\11"+ - "\u4060\0\2\11\u0bfe\0\153\11\5\0\15\11\3\0\11\11\7\0\12\11"+ - "\u1766\0\125\11\1\0\107\11\1\0\2\11\2\0\1\11\2\0\2\11"+ - "\2\0\4\11\1\0\14\11\1\0\1\11\1\0\7\11\1\0\101\11"+ - "\1\0\4\11\2\0\10\11\1\0\7\11\1\0\34\11\1\0\4\11"+ - "\1\0\5\11\1\0\1\11\3\0\7\11\1\0\u0154\11\2\0\31\11"+ - "\1\0\31\11\1\0\37\11\1\0\31\11\1\0\37\11\1\0\31\11"+ - "\1\0\37\11\1\0\31\11\1\0\37\11\1\0\31\11\1\0\10\11"+ - "\2\0\62\15\u1000\0\305\11\u053b\0\4\11\1\0\33\11\1\0\2\11"+ - "\1\0\1\11\2\0\1\11\1\0\12\11\1\0\4\11\1\0\1\11"+ - "\1\0\1\11\6\0\1\11\4\0\1\11\1\0\1\11\1\0\1\11"+ - "\1\0\3\11\1\0\2\11\1\0\1\11\2\0\1\11\1\0\1\11"+ - "\1\0\1\11\1\0\1\11\1\0\1\11\1\0\2\11\1\0\1\11"+ - "\2\0\4\11\1\0\7\11\1\0\4\11\1\0\4\11\1\0\1\11"+ - "\1\0\12\11\1\0\21\11\5\0\3\11\1\0\5\11\1\0\21\11"+ - "\u1144\0\ua6d7\11\51\0\u1035\11\13\0\336\11\2\0\u1682\11\u295e\0\u021e\11"+ - "\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05f0\0"; + public static int ZZ_CMAP(int ch) { + return ZZ_CMAP_A[(ZZ_CMAP_Y[(ZZ_CMAP_Z[ch>>10]<<6)|((ch>>4)&0x3f)]<<4)|(ch&0xf)]; + } - /** - * Translates characters to character classes - */ - private static final int ZZ_SX = 0x0700; - private static final int ZZ_MX = 0x10000; - private static final int ZZ_LX = 0x110000; - private static char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED, ZZ_SX); - private static class M { static final char [] MAP = zzUnpackCMap(ZZ_CMAP_PACKED, ZZ_MX); } - private static class L { static final char [] MAP = zzUnpackCMap(ZZ_CMAP_PACKED, ZZ_LX); } + /* The ZZ_CMAP_Z table has 1088 entries */ + static final char ZZ_CMAP_Z[] = zzUnpackCMap( + "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\2\11\1\12\1\13\6\14\1\15\23\14\1\16"+ + "\1\14\1\17\1\20\12\14\1\21\10\11\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1"+ + "\32\1\33\1\34\1\35\2\11\1\14\1\36\3\11\1\37\10\11\1\40\1\41\5\14\1\42\1\43"+ + "\11\11\1\44\2\11\1\45\5\11\1\46\4\11\1\47\1\50\4\11\51\14\1\51\3\14\1\52\1"+ + "\53\4\14\1\54\12\11\1\55\u0381\11"); + + /* The ZZ_CMAP_Y table has 2944 entries */ + static final char ZZ_CMAP_Y[] = zzUnpackCMap( + "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\2\1\1\10\1\11\1\12\1\13\1\12\1\13\34\12\1"+ + "\14\1\15\1\16\10\1\1\17\1\20\1\12\1\21\4\12\1\22\10\12\1\23\12\12\1\24\1\12"+ + "\1\25\1\24\1\12\1\26\4\1\1\12\1\27\1\30\2\1\2\12\1\27\1\1\1\31\1\24\5\12\1"+ + "\32\1\33\1\34\1\1\1\35\1\12\1\1\1\36\5\12\1\37\1\40\1\41\1\12\1\27\1\42\1"+ + "\12\1\43\1\44\1\1\1\12\1\45\4\1\1\12\1\46\4\1\1\47\2\12\1\50\1\1\1\51\1\52"+ + "\1\24\1\53\1\54\1\55\1\56\1\57\1\60\1\52\1\15\1\61\1\54\1\55\1\62\1\1\1\63"+ + "\1\64\1\65\1\66\1\21\1\55\1\67\1\1\1\70\1\52\1\71\1\72\1\54\1\55\1\67\1\1"+ + "\1\60\1\52\1\40\1\73\1\74\1\75\1\76\1\1\1\70\1\64\1\1\1\77\1\35\1\55\1\50"+ + "\1\1\1\100\1\52\1\1\1\101\1\35\1\55\1\102\1\1\1\57\1\52\1\103\1\77\1\35\1"+ + "\12\1\104\1\57\1\105\1\52\1\106\1\107\1\110\1\12\1\111\1\112\1\1\1\64\1\1"+ + "\1\24\2\12\1\113\1\112\1\114\2\1\1\115\1\116\1\117\1\120\1\121\1\122\2\1\1"+ + "\70\1\1\1\114\1\1\1\123\1\12\1\124\1\1\1\125\7\1\2\12\1\27\1\126\1\114\1\127"+ + "\1\130\1\131\1\132\1\114\2\12\1\133\2\12\1\134\24\12\1\135\1\136\2\12\1\135"+ + "\2\12\1\137\1\140\1\13\3\12\1\140\3\12\1\27\2\1\1\12\1\1\5\12\1\141\1\24\45"+ + "\12\1\142\1\12\1\24\1\27\4\12\1\27\1\143\1\144\1\15\1\12\1\15\1\12\1\15\1"+ + "\144\1\70\3\12\1\145\1\1\1\146\1\114\2\1\1\114\5\12\1\26\1\147\1\12\1\150"+ + "\4\12\1\37\1\12\1\151\2\1\1\64\1\12\1\152\1\153\2\12\1\154\1\12\1\76\1\114"+ + "\2\1\1\12\1\112\3\12\1\153\2\1\2\114\1\155\5\1\1\107\2\12\1\145\1\156\1\114"+ + "\2\1\1\157\1\12\1\160\1\41\2\12\1\37\1\1\2\12\1\145\1\1\1\161\1\41\1\12\1"+ + "\152\1\45\5\1\1\162\1\163\14\12\4\1\21\12\1\141\2\12\1\141\1\164\1\12\1\152"+ + "\3\12\1\165\1\166\1\167\1\124\1\166\7\1\1\170\1\1\1\124\6\1\1\171\1\172\1"+ + "\173\1\174\1\175\3\1\1\176\147\1\2\12\1\151\2\12\1\151\10\12\1\177\1\200\2"+ + "\12\1\133\3\12\1\201\1\1\1\12\1\112\4\202\4\1\1\126\35\1\1\203\2\1\1\204\1"+ + "\24\4\12\1\205\1\24\4\12\1\134\1\107\1\12\1\152\1\24\4\12\1\151\1\1\1\12\1"+ + "\27\3\1\1\12\40\1\133\12\1\37\4\1\135\12\1\37\2\1\10\12\1\124\4\1\2\12\1\152"+ + "\20\12\1\124\1\12\1\206\1\1\2\12\1\151\1\126\1\12\1\152\4\12\1\37\2\1\1\207"+ + "\1\210\5\12\1\211\1\12\1\151\1\26\3\1\1\207\1\212\1\12\1\30\1\1\3\12\1\145"+ + "\1\210\2\12\1\145\1\1\1\114\1\1\1\213\1\41\1\12\1\37\1\12\1\112\1\1\1\12\1"+ + "\124\1\47\2\12\1\30\1\126\1\114\1\214\1\215\2\12\1\45\1\1\1\216\1\114\1\12"+ + "\1\217\3\12\1\220\1\221\1\222\1\27\1\65\1\223\1\224\1\202\2\12\1\134\1\37"+ + "\7\12\1\30\1\114\72\12\1\145\1\12\1\225\2\12\1\154\20\1\26\12\1\152\6\12\1"+ + "\76\2\1\1\112\1\226\1\55\1\227\1\230\6\12\1\15\1\1\1\157\25\12\1\152\1\1\4"+ + "\12\1\210\2\12\1\26\2\1\1\154\7\1\1\214\7\12\1\124\1\1\1\114\1\24\1\27\1\24"+ + "\1\27\1\231\4\12\1\151\1\232\1\233\2\1\1\234\1\12\1\13\1\235\2\152\2\1\7\12"+ + "\1\27\30\1\1\12\1\124\3\12\1\70\2\1\2\12\1\1\1\12\1\236\2\12\1\37\1\12\1\152"+ + "\2\12\1\237\3\1\11\12\1\152\1\114\2\12\1\237\1\12\1\154\2\12\1\26\3\12\1\145"+ + "\11\1\23\12\1\112\1\12\1\37\1\26\11\1\1\240\2\12\1\241\1\12\1\37\1\12\1\112"+ + "\1\12\1\151\4\1\1\12\1\242\1\12\1\37\1\12\1\76\4\1\3\12\1\243\4\1\1\70\1\244"+ + "\1\12\1\145\2\1\1\12\1\124\1\12\1\124\2\1\1\123\1\12\1\153\1\1\3\12\1\37\1"+ + "\12\1\37\1\12\1\30\1\12\1\15\6\1\4\12\1\45\3\1\3\12\1\30\3\12\1\30\60\1\1"+ + "\157\2\12\1\26\2\1\1\64\1\1\1\157\2\12\2\1\1\12\1\45\1\114\1\157\1\12\1\112"+ + "\1\64\1\1\2\12\1\245\1\157\2\12\1\30\1\246\1\247\2\1\1\12\1\21\1\154\5\1\1"+ + "\250\1\251\1\45\2\12\1\151\1\1\1\114\1\72\1\54\1\55\1\67\1\1\1\252\1\15\11"+ + "\1\3\12\1\153\1\253\1\114\2\1\3\12\1\1\1\254\1\114\12\1\2\12\1\151\2\1\1\255"+ + "\2\1\3\12\1\1\1\256\1\114\2\1\2\12\1\27\1\1\1\114\3\1\1\12\1\76\1\1\1\114"+ + "\26\1\4\12\1\114\1\126\34\1\3\12\1\45\20\1\1\55\1\12\1\151\1\1\1\70\1\114"+ + "\1\1\1\210\1\12\67\1\71\12\1\76\16\1\14\12\1\145\53\1\2\12\1\151\75\1\44\12"+ + "\1\112\33\1\43\12\1\45\1\12\1\151\1\114\6\1\1\12\1\152\1\1\3\12\1\1\1\145"+ + "\1\114\1\157\1\257\1\12\67\1\4\12\1\153\1\70\3\1\1\157\4\1\1\70\1\1\76\12"+ + "\1\124\1\1\57\12\1\30\20\1\1\15\77\1\6\12\1\27\1\124\1\45\1\76\66\1\5\12\1"+ + "\214\3\12\1\144\1\260\1\261\1\262\3\12\1\263\1\264\1\12\1\265\1\266\1\35\24"+ + "\12\1\267\1\12\1\35\1\134\1\12\1\134\1\12\1\214\1\12\1\214\1\151\1\12\1\151"+ + "\1\12\1\55\1\12\1\55\1\12\1\270\3\271\14\12\1\153\3\1\4\12\1\145\1\114\112"+ + "\1\1\262\1\12\1\272\1\273\1\274\1\275\1\276\1\277\1\300\1\154\1\301\1\154"+ + "\24\1\55\12\1\112\2\1\103\12\1\153\15\12\1\152\150\12\1\15\25\1\41\12\1\152"+ + "\36\1"); + + /* The ZZ_CMAP_A table has 3104 entries */ + static final char ZZ_CMAP_A[] = zzUnpackCMap( + "\10\0\2\61\1\76\1\0\1\61\1\76\22\0\1\14\1\75\1\0\1\72\1\16\1\0\1\71\1\64\1"+ + "\2\1\3\1\20\1\21\1\56\1\13\1\1\1\0\1\53\3\55\4\54\2\47\1\70\1\0\1\63\1\67"+ + "\1\74\1\17\1\0\2\30\1\37\1\35\1\45\1\46\1\31\1\57\1\40\2\73\1\44\1\66\1\60"+ + "\1\73\1\42\1\50\1\65\1\34\1\73\1\43\3\33\1\73\1\32\1\6\1\10\1\7\1\23\1\12"+ + "\1\0\1\25\1\26\1\36\1\35\2\25\1\27\1\57\1\40\1\73\1\62\1\43\1\73\1\24\1\73"+ + "\1\41\1\73\1\24\1\33\1\24\1\52\2\33\1\51\1\73\1\31\1\4\1\22\1\5\14\0\1\11"+ + "\12\0\1\11\4\0\1\11\5\0\27\11\1\0\12\11\4\0\14\11\16\0\5\11\7\0\1\11\1\0\1"+ + "\11\1\0\5\11\1\0\2\11\2\0\4\11\1\0\1\11\6\0\1\11\1\0\3\11\1\0\1\11\1\0\4\11"+ + "\1\0\23\11\1\0\13\11\10\0\6\11\1\0\26\11\2\0\1\11\6\0\10\11\10\0\13\11\5\0"+ + "\3\11\15\0\12\15\4\0\6\11\1\0\1\11\17\0\2\11\7\0\2\11\12\15\3\11\2\0\2\11"+ + "\1\0\16\11\15\0\11\11\13\0\1\11\16\0\12\15\6\11\4\0\2\11\4\0\1\11\5\0\6\11"+ + "\4\0\1\11\11\0\1\11\3\0\1\11\7\0\11\11\7\0\5\11\1\0\10\11\6\0\26\11\3\0\1"+ + "\11\2\0\1\11\7\0\12\11\4\0\12\15\1\11\4\0\10\11\2\0\2\11\2\0\26\11\1\0\7\11"+ + "\1\0\1\11\3\0\4\11\3\0\1\11\20\0\1\11\15\0\2\11\1\0\1\11\5\0\6\11\4\0\2\11"+ + "\1\0\2\11\1\0\2\11\1\0\2\11\17\0\4\11\1\0\1\11\7\0\12\15\2\0\3\11\20\0\11"+ + "\11\1\0\2\11\1\0\2\11\1\0\5\11\3\0\1\11\2\0\1\11\30\0\1\11\13\0\10\11\2\0"+ + "\1\11\3\0\1\11\1\0\6\11\3\0\3\11\1\0\4\11\3\0\2\11\1\0\1\11\1\0\2\11\3\0\2"+ + "\11\3\0\3\11\3\0\14\11\13\0\10\11\1\0\2\11\10\0\3\11\5\0\1\11\4\0\10\11\1"+ + "\0\6\11\1\0\5\11\3\0\1\11\3\0\2\11\15\0\13\11\2\0\1\11\6\0\3\11\10\0\1\11"+ + "\12\0\6\11\5\0\22\11\3\0\10\11\1\0\11\11\1\0\1\11\2\0\7\11\11\0\1\11\1\0\2"+ + "\11\14\0\12\15\7\0\2\11\1\0\1\11\2\0\2\11\1\0\1\11\2\0\1\11\6\0\4\11\1\0\7"+ + "\11\1\0\3\11\1\0\1\11\1\0\1\11\2\0\2\11\1\0\4\11\1\0\2\11\11\0\1\11\2\0\5"+ + "\11\1\0\1\11\11\0\12\15\2\0\14\11\1\0\24\11\13\0\5\11\22\0\7\11\4\0\4\11\3"+ + "\0\1\11\3\0\2\11\7\0\3\11\4\0\15\11\14\0\1\11\1\0\6\11\1\0\1\11\5\0\1\11\2"+ + "\0\13\11\1\0\15\11\1\0\4\11\2\0\7\11\1\0\1\11\1\0\4\11\2\0\1\11\1\0\4\11\2"+ + "\0\7\11\1\0\1\11\1\0\4\11\2\0\16\11\2\0\6\11\2\0\15\11\2\0\1\11\1\0\10\11"+ + "\7\0\15\11\1\0\6\11\23\0\1\11\4\0\1\11\3\0\5\11\2\0\22\11\1\0\1\11\5\0\17"+ + "\11\1\0\16\11\2\0\5\11\13\0\14\11\13\0\1\11\15\0\7\11\7\0\16\11\15\0\2\11"+ + "\12\15\3\0\3\11\11\0\4\11\1\0\4\11\3\0\2\11\11\0\10\11\1\0\1\11\1\0\1\11\1"+ + "\0\1\11\1\0\6\11\1\0\7\11\1\0\1\11\3\0\3\11\1\0\7\11\3\0\4\11\2\0\6\11\5\0"+ + "\1\11\15\0\1\11\2\0\1\11\4\0\1\11\2\0\12\11\1\0\1\11\3\0\5\11\6\0\1\11\1\0"+ + "\1\11\1\0\1\11\1\0\4\11\1\0\13\11\2\0\4\11\5\0\5\11\4\0\1\11\4\0\2\11\13\0"+ + "\5\11\6\0\4\11\3\0\2\11\14\0\10\11\7\0\10\11\1\0\7\11\6\0\2\11\12\0\5\11\5"+ + "\0\2\11\3\0\7\11\6\0\3\11\12\15\2\11\13\0\11\11\2\0\27\11\2\0\7\11\1\0\3\11"+ + "\1\0\4\11\1\0\4\11\2\0\6\11\3\0\1\11\1\0\1\11\2\0\5\11\1\0\12\11\12\15\5\11"+ + "\1\0\3\11\1\0\10\11\4\0\7\11\3\0\1\11\3\0\2\11\1\0\1\11\3\0\2\11\2\0\5\11"+ + "\2\0\1\11\1\0\1\11\30\0\3\11\3\0\6\11\2\0\6\11\2\0\6\11\11\0\7\11\4\0\5\11"+ + "\3\0\5\11\5\0\1\11\1\0\10\11\1\0\5\11\1\0\1\11\1\0\2\11\1\0\2\11\1\0\12\11"+ + "\6\0\12\11\2\0\6\11\2\0\6\11\2\0\6\11\2\0\3\11\3\0\14\11\1\0\16\11\1\0\2\11"+ + "\1\0\2\11\1\0\10\11\6\0\4\11\4\0\16\11\2\0\1\11\1\0\14\11\1\0\2\11\3\0\1\11"+ + "\2\0\4\11\1\0\2\11\12\0\10\11\6\0\6\11\1\0\3\11\1\0\12\11\3\0\1\11\12\0\4"+ + "\11\13\0\12\15\1\11\1\0\1\11\3\0\7\11\1\0\1\11\1\0\4\11\1\0\17\11\1\0\2\11"+ + "\14\0\3\11\7\0\4\11\11\0\2\11\1\0\1\11\20\0\4\11\10\0\1\11\13\0\10\11\5\0"+ + "\3\11\2\0\1\11\2\0\2\11\2\0\4\11\1\0\14\11\1\0\1\11\1\0\7\11\1\0\21\11\1\0"+ + "\4\11\2\0\10\11\1\0\7\11\1\0\14\11\1\0\4\11\1\0\5\11\1\0\1\11\3\0\14\11\2"+ + "\0\13\11\1\0\10\11\2\0\22\15\1\0\2\11\1\0\1\11\2\0\1\11\1\0\12\11\1\0\4\11"+ + "\1\0\1\11\1\0\1\11\6\0\1\11\4\0\1\11\1\0\1\11\1\0\1\11\1\0\3\11\1\0\2\11\1"+ + "\0\1\11\2\0\1\11\1\0\1\11\1\0\1\11\1\0\1\11\1\0\1\11\1\0\2\11\1\0\1\11\2\0"+ + "\4\11\1\0\7\11\1\0\4\11\1\0\4\11\1\0\1\11\1\0\12\11\1\0\5\11\1\0\3\11\1\0"+ + "\5\11\1\0\5\11"); /** * Translates DFA states to action switch labels. @@ -214,25 +199,25 @@ class _RegExLexer implements FlexLexer { "\13\0\1\1\10\0\1\2\1\3\1\4\1\5\1\6"+ "\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16"+ "\1\17\1\20\1\21\1\22\1\23\1\2\1\24\1\25"+ - "\1\26\1\27\1\30\1\31\2\32\1\33\1\34\1\35"+ - "\1\33\1\36\1\37\1\40\1\12\1\41\1\42\1\43"+ - "\1\2\1\44\1\45\1\24\1\46\1\47\1\50\1\51"+ - "\1\52\1\53\1\26\1\54\1\55\1\56\1\57\3\56"+ - "\1\26\1\56\1\26\1\56\1\60\1\61\2\0\1\62"+ + "\1\26\1\27\1\30\1\31\1\32\2\33\1\34\1\35"+ + "\1\36\1\34\1\37\1\40\1\41\1\12\1\42\1\43"+ + "\1\44\1\2\1\45\1\46\1\24\1\47\1\50\1\51"+ + "\1\52\1\53\1\54\1\26\1\55\1\56\1\57\1\60"+ + "\3\57\1\26\1\57\1\26\1\57\1\61\1\62\2\0"+ "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72"+ - "\1\12\1\72\1\73\2\74\1\75\1\76\1\12\1\77"+ - "\1\100\1\101\1\102\1\103\1\104\1\105\1\12\1\106"+ + "\1\73\1\12\1\73\1\74\2\75\1\76\1\77\1\12"+ + "\1\100\1\101\1\102\1\103\1\104\1\105\1\106\1\12"+ "\1\107\1\110\1\111\1\112\1\113\1\114\1\115\1\116"+ - "\1\117\1\120\1\121\1\0\1\122\2\26\1\123\2\60"+ - "\1\124\1\0\1\125\1\126\1\127\1\130\1\0\1\131"+ - "\1\132\1\133\1\0\1\134\4\0\1\135\1\136\1\137"+ - "\1\77\1\140\1\141\1\142\1\143\2\144\1\145\1\146"+ - "\1\147\1\150\1\151\1\152\1\153\1\154\1\0\1\155"+ - "\1\156\1\0\1\157\2\0\1\77\1\160\1\143\2\144"+ - "\1\161\1\162\1\143\1\163\1\164"; + "\1\117\1\120\1\121\1\122\1\0\1\123\2\26\1\124"+ + "\2\61\1\125\1\0\1\126\1\127\1\130\1\131\1\0"+ + "\1\132\1\133\1\134\1\0\1\135\4\0\1\136\1\137"+ + "\1\140\1\100\1\141\1\142\1\143\1\144\2\145\1\146"+ + "\1\147\1\150\1\151\1\152\1\153\1\154\1\155\1\0"+ + "\1\156\1\157\1\0\1\160\2\0\1\100\1\161\1\144"+ + "\2\145\1\162\1\163\1\144\1\164\1\165"; private static int [] zzUnpackAction() { - int [] result = new int[179]; + int [] result = new int[180]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -262,27 +247,27 @@ class _RegExLexer implements FlexLexer { "\0\u03f0\0\u042f\0\u046e\0\u04ad\0\u04ec\0\u04ec\0\u052b\0\u04ec"+ "\0\u056a\0\u04ec\0\u05a9\0\u04ec\0\u05e8\0\u04ec\0\u04ec\0\u04ec"+ "\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u0627\0\u04ec"+ - "\0\u04ec\0\u0666\0\u06a5\0\u04ec\0\u04ec\0\u04ec\0\u0627\0\u04ec"+ - "\0\u06e4\0\u04ec\0\u0723\0\u04ec\0\u0762\0\u04ec\0\u07a1\0\u04ec"+ - "\0\u04ec\0\u04ec\0\u07e0\0\u04ec\0\u04ec\0\u081f\0\u04ec\0\u04ec"+ - "\0\u04ec\0\u085e\0\u089d\0\u04ec\0\u08dc\0\u04ec\0\u04ec\0\u04ec"+ - "\0\u04ec\0\u091b\0\u095a\0\u0999\0\u09d8\0\u0a17\0\u0a56\0\u0a95"+ - "\0\u0ad4\0\u0b13\0\u0b52\0\u0b91\0\u04ec\0\u04ec\0\u04ec\0\u0bd0"+ - "\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u0c0f\0\u0c4e\0\u04ec\0\u04ec"+ - "\0\u0c8d\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u0ccc\0\u04ec\0\u0d0b"+ - "\0\u0d4a\0\u0d89\0\u04ec\0\u04ec\0\u0dc8\0\u04ec\0\u04ec\0\u04ec"+ + "\0\u04ec\0\u0666\0\u04ec\0\u06a5\0\u04ec\0\u04ec\0\u04ec\0\u0627"+ + "\0\u04ec\0\u06e4\0\u04ec\0\u0723\0\u04ec\0\u0762\0\u04ec\0\u07a1"+ + "\0\u04ec\0\u04ec\0\u04ec\0\u07e0\0\u04ec\0\u04ec\0\u081f\0\u04ec"+ + "\0\u04ec\0\u04ec\0\u085e\0\u089d\0\u04ec\0\u08dc\0\u04ec\0\u04ec"+ + "\0\u04ec\0\u04ec\0\u091b\0\u095a\0\u0999\0\u09d8\0\u0a17\0\u0a56"+ + "\0\u0a95\0\u0ad4\0\u0b13\0\u0b52\0\u0b91\0\u04ec\0\u04ec\0\u04ec"+ + "\0\u0bd0\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u0c0f\0\u0c4e\0\u04ec"+ + "\0\u04ec\0\u0c8d\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u0ccc\0\u04ec"+ + "\0\u0d0b\0\u0d4a\0\u0d89\0\u04ec\0\u04ec\0\u0dc8\0\u04ec\0\u04ec"+ "\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u04ec"+ - "\0\u04ec\0\u0e07\0\u04ec\0\u0e46\0\u04ec\0\u04ec\0\u04ec\0\u0e85"+ - "\0\u04ec\0\u0ec4\0\u0f03\0\u04ec\0\u04ec\0\u04ec\0\u0f42\0\u04ec"+ - "\0\u04ec\0\u04ec\0\u0f81\0\u04ec\0\u0fc0\0\u0fff\0\u103e\0\u107d"+ - "\0\u04ec\0\u04ec\0\u04ec\0\u10bc\0\u04ec\0\u10fb\0\u04ec\0\u113a"+ - "\0\u1179\0\u11b8\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u04ec"+ - "\0\u04ec\0\u04ec\0\u11f7\0\u04ec\0\u04ec\0\u1236\0\u04ec\0\u1275"+ - "\0\u12b4\0\u04ec\0\u04ec\0\u12f3\0\u1332\0\u04ec\0\u04ec\0\u04ec"+ - "\0\u1371\0\u04ec\0\u04ec"; + "\0\u04ec\0\u04ec\0\u0e07\0\u04ec\0\u0e46\0\u04ec\0\u04ec\0\u04ec"+ + "\0\u0e85\0\u04ec\0\u0ec4\0\u0f03\0\u04ec\0\u04ec\0\u04ec\0\u0f42"+ + "\0\u04ec\0\u04ec\0\u04ec\0\u0f81\0\u04ec\0\u0fc0\0\u0fff\0\u103e"+ + "\0\u107d\0\u04ec\0\u04ec\0\u04ec\0\u10bc\0\u04ec\0\u10fb\0\u04ec"+ + "\0\u113a\0\u1179\0\u11b8\0\u04ec\0\u04ec\0\u04ec\0\u04ec\0\u04ec"+ + "\0\u04ec\0\u04ec\0\u04ec\0\u11f7\0\u04ec\0\u04ec\0\u1236\0\u04ec"+ + "\0\u1275\0\u12b4\0\u04ec\0\u04ec\0\u12f3\0\u1332\0\u04ec\0\u04ec"+ + "\0\u04ec\0\u1371\0\u04ec\0\u04ec"; private static int [] zzUnpackRowMap() { - int [] result = new int[179]; + int [] result = new int[180]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -310,96 +295,96 @@ class _RegExLexer implements FlexLexer { "\1\43\1\44\35\25\1\45\10\25\1\46\3\25\1\45"+ "\10\25\1\47\66\25\5\50\1\51\3\50\1\52\11\50"+ "\1\44\23\52\1\50\3\52\4\50\2\52\1\50\1\52"+ - "\2\50\2\52\4\50\1\52\10\50\1\51\7\50\1\53"+ - "\31\50\1\53\3\50\3\53\1\54\20\50\23\0\1\55"+ - "\53\0\10\56\1\57\66\56\6\60\1\61\1\62\1\63"+ - "\3\60\1\64\44\60\1\64\14\60\1\64\6\25\1\65"+ - "\1\66\1\67\2\25\1\70\1\71\44\25\1\72\7\25"+ - "\1\73\1\74\3\25\1\72\4\50\1\75\3\50\1\76"+ - "\21\50\1\77\1\50\1\77\2\50\1\77\2\50\1\77"+ - "\1\50\1\77\13\50\1\77\5\50\1\77\14\50\1\75"+ - "\3\50\1\76\66\50\3\100\1\101\5\100\1\102\1\100"+ - "\1\103\10\100\23\102\1\100\3\102\4\100\2\102\1\100"+ - "\1\102\2\100\2\102\1\104\3\100\1\102\3\100\76\14"+ - "\1\0\10\100\3\105\3\100\1\105\5\100\23\105\1\100"+ - "\3\105\4\100\2\105\1\100\1\105\2\100\2\105\4\100"+ - "\1\105\1\106\12\100\3\105\3\100\1\105\5\100\23\105"+ - "\1\100\3\105\4\100\2\105\1\100\1\105\1\100\1\107"+ - "\2\105\4\100\1\105\6\100\1\101\4\100\3\105\3\100"+ - "\1\105\5\100\23\105\1\100\3\105\4\100\2\105\1\100"+ - "\1\105\2\100\2\105\4\100\1\105\6\100\1\101\4\100"+ - "\3\105\2\100\1\53\1\105\5\100\23\105\1\53\3\105"+ - "\3\53\1\100\2\105\1\100\1\105\2\100\2\105\4\100"+ - "\1\105\3\100\11\110\1\52\11\110\1\44\23\52\1\110"+ - "\3\52\4\110\2\52\1\110\1\52\1\111\1\110\2\52"+ - "\1\112\3\110\1\52\1\111\2\110\1\113\1\114\7\113"+ - "\1\115\12\113\23\115\1\113\3\115\4\113\2\115\1\113"+ - "\1\115\2\113\2\115\4\113\1\115\3\113\11\116\1\117"+ - "\12\116\23\117\1\116\3\117\4\116\2\117\1\116\1\117"+ - "\2\116\2\117\1\116\1\120\2\116\1\117\3\116\4\0"+ - "\1\121\210\0\1\122\74\0\1\123\31\0\1\123\3\0"+ - "\3\123\1\124\43\0\1\125\53\0\1\126\3\127\1\130"+ - "\1\131\1\127\1\126\1\127\2\126\1\132\1\133\1\126"+ - "\6\127\2\134\1\135\1\136\3\137\3\140\1\141\2\142"+ - "\2\143\3\144\1\145\1\146\1\147\1\150\1\151\1\152"+ - "\2\146\1\126\1\153\1\154\1\133\1\155\2\126\1\140"+ - "\1\145\4\126\1\145\2\126\1\133\45\0\1\156\33\0"+ - "\2\52\5\0\5\52\6\0\32\52\1\0\2\52\1\0"+ - "\1\52\2\0\2\52\4\0\1\52\20\0\1\53\31\0"+ - "\1\53\3\0\3\53\22\0\1\157\21\0\1\160\43\0"+ - "\1\161\1\157\15\0\1\162\13\0\1\163\24\0\1\164"+ - "\27\0\1\165\21\0\1\166\43\0\2\165\6\0\6\126"+ - "\3\127\2\126\1\132\1\167\7\126\3\134\4\145\3\140"+ - "\1\141\2\142\2\143\3\144\1\145\1\146\1\147\1\150"+ - "\1\151\1\152\2\146\1\126\1\153\1\154\1\167\1\145"+ - "\2\126\2\145\4\126\1\145\2\126\1\167\71\0\1\170"+ - "\5\0\6\126\1\127\1\126\1\127\2\126\1\132\10\126"+ - "\2\134\5\145\3\140\1\141\2\142\2\143\3\144\1\145"+ - "\1\146\1\147\1\150\1\151\1\152\2\146\1\126\1\153"+ - "\1\154\1\126\1\145\2\126\2\145\4\126\1\145\3\126"+ - "\11\0\1\102\12\0\23\102\1\0\3\102\4\0\2\102"+ - "\1\0\1\102\2\0\2\102\4\0\1\102\14\0\1\103"+ - "\12\0\23\103\1\0\3\103\4\0\2\103\1\0\1\103"+ - "\2\0\2\103\4\0\1\103\13\0\7\105\5\0\32\105"+ - "\1\0\2\105\1\0\1\105\2\0\2\105\4\0\1\105"+ - "\12\0\1\171\70\0\1\172\76\0\1\172\5\0\1\173"+ - "\70\0\1\172\7\0\1\174\1\0\1\174\1\0\1\175"+ - "\6\0\23\174\1\175\3\174\3\175\1\0\2\174\1\0"+ - "\1\174\2\0\2\174\4\0\1\174\73\0\1\172\10\0"+ - "\2\52\5\0\5\52\6\0\32\52\1\0\2\52\1\0"+ - "\1\52\2\0\2\52\1\0\1\172\2\0\1\52\12\0"+ - "\1\176\60\0\1\172\13\0\1\177\17\0\2\200\1\0"+ - "\1\200\4\0\3\200\5\0\3\200\3\0\3\200\23\0"+ - "\1\201\37\0\1\202\20\0\1\203\1\204\2\0\1\205"+ - "\1\206\1\0\1\207\1\0\1\210\1\211\6\0\1\212"+ - "\7\0\1\123\31\0\1\123\3\0\3\123\1\213\25\0"+ - "\1\214\7\0\1\215\31\0\1\215\3\0\3\215\36\0"+ - "\1\216\31\0\1\216\3\0\3\216\1\217\24\0\1\220"+ - "\155\0\1\221\1\222\12\0\77\223\47\0\1\224\3\0"+ - "\3\224\25\0\1\225\20\0\2\226\1\0\1\226\4\0"+ - "\3\226\5\0\3\226\3\0\3\226\25\0\1\227\20\0"+ - "\2\230\1\0\1\230\4\0\3\230\5\0\3\230\3\0"+ - "\3\230\74\0\1\231\1\232\1\231\104\0\1\233\1\234"+ - "\21\0\1\235\100\0\1\174\1\0\1\174\1\0\1\175"+ - "\6\0\23\174\1\175\3\174\3\175\1\0\2\174\1\0"+ - "\1\174\2\0\2\174\4\0\1\174\10\0\1\236\17\0"+ - "\2\200\1\0\1\200\4\0\3\200\5\0\3\200\3\0"+ - "\3\200\104\0\1\237\4\0\1\240\76\0\1\241\4\0"+ - "\1\242\1\0\3\243\1\0\73\243\5\0\1\212\7\0"+ - "\1\213\31\0\1\213\3\0\3\213\26\0\1\244\7\0"+ - "\1\215\31\0\1\215\3\0\3\215\26\0\1\245\7\0"+ - "\1\216\31\0\1\216\3\0\3\216\1\246\25\0\1\247"+ - "\7\0\1\250\31\0\1\250\3\0\3\250\50\0\1\251"+ - "\116\0\1\252\3\0\3\252\46\0\2\253\1\0\1\253"+ - "\4\0\3\253\5\0\3\253\3\0\3\253\46\0\2\254"+ - "\1\0\1\254\4\0\3\254\5\0\3\254\3\0\3\254"+ - "\74\0\3\255\74\0\3\256\21\0\3\243\1\257\73\243"+ - "\5\0\1\245\7\0\1\246\31\0\1\246\3\0\3\246"+ - "\26\0\1\260\7\0\1\250\31\0\1\250\3\0\3\250"+ - "\26\0\1\137\116\0\2\261\1\0\1\261\4\0\3\261"+ - "\5\0\3\261\3\0\3\261\74\0\3\262\46\0\2\263"+ - "\1\0\1\263\4\0\3\263\5\0\3\263\3\0\3\263"+ - "\21\0"; + "\2\50\2\52\1\53\3\50\1\52\10\50\1\51\7\50"+ + "\1\54\31\50\1\54\3\50\3\54\1\55\20\50\23\0"+ + "\1\56\53\0\10\57\1\60\66\57\6\61\1\62\1\63"+ + "\1\64\3\61\1\65\44\61\1\65\14\61\1\65\6\25"+ + "\1\66\1\67\1\70\2\25\1\71\1\72\44\25\1\73"+ + "\7\25\1\74\1\75\3\25\1\73\4\50\1\76\3\50"+ + "\1\77\21\50\1\100\1\50\1\100\2\50\1\100\2\50"+ + "\1\100\1\50\1\100\13\50\1\100\5\50\1\100\14\50"+ + "\1\76\3\50\1\77\66\50\3\101\1\102\5\101\1\103"+ + "\1\101\1\104\10\101\23\103\1\101\3\103\4\101\2\103"+ + "\1\101\1\103\2\101\2\103\1\101\1\105\2\101\1\103"+ + "\3\101\76\14\1\0\10\101\3\106\3\101\1\106\5\101"+ + "\23\106\1\101\3\106\4\101\2\106\1\101\1\106\2\101"+ + "\2\106\4\101\1\106\1\107\12\101\3\106\3\101\1\106"+ + "\5\101\23\106\1\101\3\106\4\101\2\106\1\101\1\106"+ + "\1\101\1\110\2\106\4\101\1\106\6\101\1\102\4\101"+ + "\3\106\3\101\1\106\5\101\23\106\1\101\3\106\4\101"+ + "\2\106\1\101\1\106\2\101\2\106\4\101\1\106\6\101"+ + "\1\102\4\101\3\106\2\101\1\54\1\106\5\101\23\106"+ + "\1\54\3\106\3\54\1\101\2\106\1\101\1\106\2\101"+ + "\2\106\4\101\1\106\3\101\11\111\1\52\11\111\1\44"+ + "\23\52\1\111\3\52\4\111\2\52\1\111\1\52\1\112"+ + "\1\111\2\52\1\111\1\113\2\111\1\52\1\112\2\111"+ + "\1\114\1\115\7\114\1\116\12\114\23\116\1\114\3\116"+ + "\4\114\2\116\1\114\1\116\2\114\2\116\4\114\1\116"+ + "\3\114\11\117\1\120\12\117\23\120\1\117\3\120\4\117"+ + "\2\120\1\117\1\120\2\117\2\120\1\121\3\117\1\120"+ + "\3\117\4\0\1\122\210\0\1\123\74\0\1\124\31\0"+ + "\1\124\3\0\3\124\1\125\43\0\1\126\53\0\1\127"+ + "\3\130\1\131\1\132\1\130\1\127\1\130\2\127\1\133"+ + "\1\134\1\127\6\130\2\135\1\136\1\137\3\140\3\141"+ + "\1\142\2\143\2\144\3\145\1\146\1\147\1\150\1\151"+ + "\1\152\1\153\2\147\1\127\1\154\1\155\1\134\1\156"+ + "\2\127\1\141\1\146\4\127\1\146\2\127\1\134\45\0"+ + "\1\157\33\0\2\52\5\0\5\52\6\0\32\52\1\0"+ + "\2\52\1\0\1\52\2\0\2\52\4\0\1\52\20\0"+ + "\1\54\31\0\1\54\3\0\3\54\22\0\1\160\21\0"+ + "\1\161\43\0\1\160\1\162\15\0\1\163\13\0\1\164"+ + "\24\0\1\165\27\0\1\166\21\0\1\167\43\0\2\166"+ + "\6\0\6\127\3\130\2\127\1\133\1\170\7\127\3\135"+ + "\4\146\3\141\1\142\2\143\2\144\3\145\1\146\1\147"+ + "\1\150\1\151\1\152\1\153\2\147\1\127\1\154\1\155"+ + "\1\170\1\146\2\127\2\146\4\127\1\146\2\127\1\170"+ + "\71\0\1\171\5\0\6\127\1\130\1\127\1\130\2\127"+ + "\1\133\10\127\2\135\5\146\3\141\1\142\2\143\2\144"+ + "\3\145\1\146\1\147\1\150\1\151\1\152\1\153\2\147"+ + "\1\127\1\154\1\155\1\127\1\146\2\127\2\146\4\127"+ + "\1\146\3\127\11\0\1\103\12\0\23\103\1\0\3\103"+ + "\4\0\2\103\1\0\1\103\2\0\2\103\4\0\1\103"+ + "\14\0\1\104\12\0\23\104\1\0\3\104\4\0\2\104"+ + "\1\0\1\104\2\0\2\104\4\0\1\104\13\0\7\106"+ + "\5\0\32\106\1\0\2\106\1\0\1\106\2\0\2\106"+ + "\4\0\1\106\12\0\1\172\70\0\1\173\76\0\1\173"+ + "\5\0\1\174\70\0\1\173\7\0\1\175\1\0\1\175"+ + "\1\0\1\176\6\0\23\175\1\176\3\175\3\176\1\0"+ + "\2\175\1\0\1\175\2\0\2\175\4\0\1\175\72\0"+ + "\1\173\11\0\2\52\5\0\5\52\6\0\32\52\1\0"+ + "\2\52\1\0\1\52\2\0\2\52\1\173\3\0\1\52"+ + "\12\0\1\177\57\0\1\173\14\0\1\200\17\0\2\201"+ + "\1\0\1\201\4\0\3\201\5\0\3\201\3\0\3\201"+ + "\23\0\1\202\37\0\1\203\20\0\1\204\1\205\2\0"+ + "\1\206\1\207\1\0\1\210\1\0\1\211\1\212\6\0"+ + "\1\213\7\0\1\124\31\0\1\124\3\0\3\124\1\214"+ + "\25\0\1\215\7\0\1\216\31\0\1\216\3\0\3\216"+ + "\36\0\1\217\31\0\1\217\3\0\3\217\1\220\24\0"+ + "\1\221\155\0\1\222\1\223\12\0\77\224\47\0\1\225"+ + "\3\0\3\225\25\0\1\226\20\0\2\227\1\0\1\227"+ + "\4\0\3\227\5\0\3\227\3\0\3\227\25\0\1\230"+ + "\20\0\2\231\1\0\1\231\4\0\3\231\5\0\3\231"+ + "\3\0\3\231\74\0\1\232\1\233\1\232\104\0\1\234"+ + "\1\235\21\0\1\236\100\0\1\175\1\0\1\175\1\0"+ + "\1\176\6\0\23\175\1\176\3\175\3\176\1\0\2\175"+ + "\1\0\1\175\2\0\2\175\4\0\1\175\10\0\1\237"+ + "\17\0\2\201\1\0\1\201\4\0\3\201\5\0\3\201"+ + "\3\0\3\201\104\0\1\240\3\0\1\241\76\0\1\242"+ + "\5\0\1\243\1\0\3\244\1\0\73\244\5\0\1\213"+ + "\7\0\1\214\31\0\1\214\3\0\3\214\26\0\1\245"+ + "\7\0\1\216\31\0\1\216\3\0\3\216\26\0\1\246"+ + "\7\0\1\217\31\0\1\217\3\0\3\217\1\247\25\0"+ + "\1\250\7\0\1\251\31\0\1\251\3\0\3\251\50\0"+ + "\1\252\116\0\1\253\3\0\3\253\46\0\2\254\1\0"+ + "\1\254\4\0\3\254\5\0\3\254\3\0\3\254\46\0"+ + "\2\255\1\0\1\255\4\0\3\255\5\0\3\255\3\0"+ + "\3\255\74\0\3\256\74\0\3\257\21\0\3\244\1\260"+ + "\73\244\5\0\1\246\7\0\1\247\31\0\1\247\3\0"+ + "\3\247\26\0\1\261\7\0\1\251\31\0\1\251\3\0"+ + "\3\251\26\0\1\140\116\0\2\262\1\0\1\262\4\0"+ + "\3\262\5\0\3\262\3\0\3\262\74\0\3\263\46\0"+ + "\2\264\1\0\1\264\4\0\3\264\5\0\3\264\3\0"+ + "\3\264\21\0"; private static int [] zzUnpackTrans() { int [] result = new int[5040]; @@ -441,18 +426,19 @@ class _RegExLexer implements FlexLexer { private static final String ZZ_ATTRIBUTE_PACKED_0 = "\13\0\1\1\10\0\2\11\1\1\1\11\1\1\1\11"+ - "\1\1\1\11\1\1\11\11\1\1\2\11\2\1\3\11"+ - "\1\1\1\11\1\1\1\11\1\1\1\11\1\1\1\11"+ - "\1\1\3\11\1\1\2\11\1\1\3\11\2\1\1\11"+ - "\1\1\4\11\11\1\2\0\3\11\1\1\4\11\2\1"+ - "\2\11\1\1\4\11\1\1\1\11\3\1\2\11\1\1"+ - "\14\11\1\0\1\11\1\1\3\11\1\1\1\11\1\0"+ - "\1\1\3\11\1\0\3\11\1\0\1\11\4\0\3\11"+ - "\1\1\1\11\1\1\1\11\3\1\10\11\1\0\2\11"+ - "\1\0\1\11\2\0\2\11\2\1\3\11\1\1\2\11"; + "\1\1\1\11\1\1\11\11\1\1\2\11\1\1\1\11"+ + "\1\1\3\11\1\1\1\11\1\1\1\11\1\1\1\11"+ + "\1\1\1\11\1\1\3\11\1\1\2\11\1\1\3\11"+ + "\2\1\1\11\1\1\4\11\11\1\2\0\3\11\1\1"+ + "\4\11\2\1\2\11\1\1\4\11\1\1\1\11\3\1"+ + "\2\11\1\1\14\11\1\0\1\11\1\1\3\11\1\1"+ + "\1\11\1\0\1\1\3\11\1\0\3\11\1\0\1\11"+ + "\4\0\3\11\1\1\1\11\1\1\1\11\3\1\10\11"+ + "\1\0\2\11\1\0\1\11\2\0\2\11\2\1\3\11"+ + "\1\1\2\11"; private static int [] zzUnpackAttribute() { - int [] result = new int[179]; + int [] result = new int[180]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -605,14 +591,18 @@ class _RegExLexer implements FlexLexer { * @param packed the packed character translation table * @return the unpacked character translation table */ - private static char [] zzUnpackCMap(String packed, int limit) { - char [] map = new char[limit]; + private static char [] zzUnpackCMap(String packed) { + int size = 0; + for (int i = 0, length = packed.length(); i < length; i += 2) { + size += packed.charAt(i); + } + char[] map = new char[size]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 2590 && j < limit) { + while (i < packed.length()) { int count = packed.charAt(i++); char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0 && j < limit); + do map[j++] = value; while (--count > 0); } return map; } @@ -755,7 +745,6 @@ class _RegExLexer implements FlexLexer { int zzMarkedPosL; int zzEndReadL = zzEndRead; CharSequence zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; int [] zzTransL = ZZ_TRANS; int [] zzRowMapL = ZZ_ROWMAP; @@ -807,8 +796,7 @@ class _RegExLexer implements FlexLexer { zzCurrentPosL += Character.charCount(zzInput); } } - if (zzInput >= zzCMapL.length) ZZ_CMAP = zzCMapL = zzInput >= ZZ_MX ? L.MAP : M.MAP; - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + int zzNext = zzTransL[ zzRowMapL[zzState] + ZZ_CMAP(zzInput) ]; if (zzNext == -1) break zzForAction; zzState = zzNext; @@ -833,256 +821,323 @@ class _RegExLexer implements FlexLexer { switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 1: { yypopstate(); return RegExpTT.COMMENT; - } - case 117: break; + } + // fall through + case 118: break; case 2: { return RegExpTT.CHARACTER; - } - case 118: break; + } + // fall through + case 119: break; case 3: { return RegExpTT.DOT; - } - case 119: break; + } + // fall through + case 120: break; case 4: { capturingGroupCount++; return RegExpTT.GROUP_BEGIN; - } - case 120: break; + } + // fall through + case 121: break; case 5: { return RegExpTT.GROUP_END; - } - case 121: break; + } + // fall through + case 122: break; case 6: { if (allowDanglingMetacharacters != Boolean.TRUE) { yypushstate(QUANTIFIER); return RegExpTT.LBRACE; } return RegExpTT.CHARACTER; - } - case 122: break; + } + // fall through + case 123: break; case 7: { return (allowDanglingMetacharacters != Boolean.FALSE) ? RegExpTT.CHARACTER : RegExpTT.RBRACE; - } - case 123: break; + } + // fall through + case 124: break; case 8: { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; - } - case 124: break; + } + // fall through + case 125: break; case 9: { return allowDanglingMetacharacters == Boolean.FALSE ? RegExpTT.CLASS_END : RegExpTT.CHARACTER; - } - case 125: break; + } + // fall through + case 126: break; case 10: { return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; - } - case 126: break; + } + // fall through + case 127: break; case 11: { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CHARACTER; - } - case 127: break; + } + // fall through + case 128: break; case 12: { return RegExpTT.DOLLAR; - } - case 128: break; + } + // fall through + case 129: break; case 13: { return RegExpTT.QUEST; - } - case 129: break; + } + // fall through + case 130: break; case 14: { return RegExpTT.STAR; - } - case 130: break; + } + // fall through + case 131: break; case 15: { return RegExpTT.PLUS; - } - case 131: break; + } + // fall through + case 132: break; case 16: { return RegExpTT.UNION; - } - case 132: break; + } + // fall through + case 133: break; case 17: { return RegExpTT.CARET; - } - case 133: break; + } + // fall through + case 134: break; case 18: { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER; - } - case 134: break; + } + // fall through + case 135: break; case 19: { if (commentMode) { yypushstate(COMMENT); } else return RegExpTT.CHARACTER; - } - case 135: break; + } + // fall through + case 136: break; case 20: { yypopstate(); yypushback(1); - } - case 136: break; + } + // fall through + case 137: break; case 21: { yypopstate(); return RegExpTT.RBRACE; - } - case 137: break; + } + // fall through + case 138: break; case 22: { return RegExpTT.NAME; - } - case 138: break; - case 23: - { return RegExpTT.NUMBER; - } + } + // fall through case 139: break; - case 24: - { return RegExpTT.COMMA; - } + case 23: + { return RegExpTT.EQ; + } + // fall through case 140: break; - case 25: - { yybegin(CLASS1); return RegExpTT.CARET; - } + case 24: + { return RegExpTT.NUMBER; + } + // fall through case 141: break; - case 26: - { states.set(states.size() - 1, CLASS2); return RegExpTT.CHARACTER; - } + case 25: + { return RegExpTT.COMMA; + } + // fall through case 142: break; - case 27: - { yypushback(1); yybegin(CLASS2); - } + case 26: + { yybegin(CLASS1); return RegExpTT.CARET; + } + // fall through case 143: break; - case 28: - { yybegin(CLASS2); if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; - } + case 27: + { states.set(states.size() - 1, CLASS2); return RegExpTT.CHARACTER; + } + // fall through case 144: break; - case 29: - { if (allowEmptyCharacterClass) { yypopstate(); return RegExpTT.CLASS_END; } yybegin(CLASS2); return RegExpTT.CHARACTER; - } + case 28: + { yypushback(1); yybegin(CLASS2); + } + // fall through case 145: break; - case 30: - { if (commentMode && whitespaceInClass) return com.intellij.psi.TokenType.WHITE_SPACE; yypushback(1); yybegin(CLASS2); - } + case 29: + { yybegin(CLASS2); if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; + } + // fall through case 146: break; - case 31: - { if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; - } + case 30: + { if (allowEmptyCharacterClass) { yypopstate(); return RegExpTT.CLASS_END; } yybegin(CLASS2); return RegExpTT.CHARACTER; + } + // fall through case 147: break; - case 32: - { yypopstate(); return RegExpTT.CLASS_END; - } + case 31: + { if (commentMode && whitespaceInClass) return com.intellij.psi.TokenType.WHITE_SPACE; yypushback(1); yybegin(CLASS2); + } + // fall through case 148: break; - case 33: - { return RegExpTT.MINUS; - } + case 32: + { if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; + } + // fall through case 149: break; - case 34: - { return (commentMode && whitespaceInClass) ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CHARACTER; - } + case 33: + { yypopstate(); return RegExpTT.CLASS_END; + } + // fall through case 150: break; - case 35: - { return (commentMode && whitespaceInClass) ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER; - } + case 34: + { return RegExpTT.MINUS; + } + // fall through case 151: break; - case 36: - { if (commentMode && whitespaceInClass) yypushstate(COMMENT); else return RegExpTT.CHARACTER; - } + case 35: + { return (commentMode && whitespaceInClass) ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CHARACTER; + } + // fall through case 152: break; - case 37: - { yypopstate(); yypushstate(EMBRACED); return RegExpTT.LBRACE; - } + case 36: + { return (commentMode && whitespaceInClass) ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER; + } + // fall through case 153: break; - case 38: - { yypopstate(); return RegExpTT.CATEGORY_SHORT_HAND; - } + case 37: + { if (commentMode && whitespaceInClass) yypushstate(COMMENT); else return RegExpTT.CHARACTER; + } + // fall through case 154: break; - case 39: - { yybegin(YYINITIAL); yypushback(1); - } + case 38: + { yypopstate(); yypushstate(EMBRACED); return RegExpTT.LBRACE; + } + // fall through case 155: break; - case 40: - { yybegin(YYINITIAL); return RegExpTT.GROUP_END; - } + case 39: + { yypopstate(); return RegExpTT.CATEGORY_SHORT_HAND; + } + // fall through case 156: break; - case 41: - { handleOptions(); return RegExpTT.OPTIONS_ON; - } + case 40: + { yybegin(YYINITIAL); yypushback(1); + } + // fall through case 157: break; - case 42: - { handleOptions(); return RegExpTT.OPTIONS_OFF; - } + case 41: + { yybegin(YYINITIAL); return RegExpTT.GROUP_END; + } + // fall through case 158: break; - case 43: - { yybegin(YYINITIAL); return RegExpTT.COLON; - } + case 42: + { handleOptions(); return RegExpTT.OPTIONS_ON; + } + // fall through case 159: break; - case 44: - { yybegin(YYINITIAL); return RegExpTT.GT; - } + case 43: + { handleOptions(); return RegExpTT.OPTIONS_OFF; + } + // fall through case 160: break; - case 45: - { yybegin(YYINITIAL); return RegExpTT.QUOTE; - } + case 44: + { yybegin(YYINITIAL); return RegExpTT.COLON; + } + // fall through case 161: break; - case 46: - { return RegExpTT.BAD_CHARACTER; - } + case 45: + { yybegin(YYINITIAL); return RegExpTT.GT; + } + // fall through case 162: break; - case 47: - { return allowMysqlBracketExpressions ? RegExpTT.NAME : RegExpTT.BAD_CHARACTER; - } + case 46: + { yybegin(YYINITIAL); return RegExpTT.QUOTE; + } + // fall through case 163: break; - case 48: - { yypopstate(); return (yycharat(-1) == 'u') ? StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN : RegExpTT.BAD_HEX_VALUE; - } + case 47: + { return RegExpTT.BAD_CHARACTER; + } + // fall through case 164: break; - case 49: - { yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; - } + case 48: + { return allowMysqlBracketExpressions ? RegExpTT.NAME : RegExpTT.BAD_CHARACTER; + } + // fall through case 165: break; + case 49: + { yypopstate(); return (yycharat(-1) == 'u') ? StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN : RegExpTT.BAD_HEX_VALUE; + } + // fall through + case 166: break; case 50: + { yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; + } + // fall through + case 167: break; + case 51: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); { yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN; - } - case 166: break; - case 51: - { return RegExpTT.REDUNDANT_ESCAPE; - } - case 167: break; - case 52: - { return RegExpTT.ESC_CHARACTER; - } + } + // fall through case 168: break; - case 53: - { return (allowDanglingMetacharacters != Boolean.TRUE) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; - } + case 52: + { return RegExpTT.REDUNDANT_ESCAPE; + } + // fall through case 169: break; - case 54: - { return (allowDanglingMetacharacters == Boolean.FALSE) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; - } + case 53: + { return RegExpTT.ESC_CHARACTER; + } + // fall through case 170: break; - case 55: - { return (yystate() == CLASS2) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; - } + case 54: + { return (allowDanglingMetacharacters != Boolean.TRUE) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; + } + // fall through case 171: break; - case 56: - { return commentMode ? RegExpTT.ESC_CTRL_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; - } + case 55: + { return (allowDanglingMetacharacters == Boolean.FALSE) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; + } + // fall through case 172: break; - case 57: - { return RegExpTT.ESC_CTRL_CHARACTER; - } + case 56: + { return (yystate() == CLASS2) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; + } + // fall through case 173: break; - case 58: - { return RegExpTT.BOUNDARY; - } + case 57: + { return commentMode ? RegExpTT.ESC_CTRL_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; + } + // fall through case 174: break; - case 59: - { return RegExpTT.CHAR_CLASS; - } + case 58: + { return RegExpTT.ESC_CTRL_CHARACTER; + } + // fall through case 175: break; - case 60: - { if (xmlSchemaMode) return RegExpTT.CHAR_CLASS; else return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; - } + case 59: + { return RegExpTT.BOUNDARY; + } + // fall through case 176: break; - case 61: - { yypushstate(PROP); return RegExpTT.PROPERTY; - } + case 60: + { return RegExpTT.CHAR_CLASS; + } + // fall through case 177: break; - case 62: - { return allowTransformationEscapes ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; - } + case 61: + { if (xmlSchemaMode) return RegExpTT.CHAR_CLASS; else return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; + } + // fall through case 178: break; + case 62: + { yypushstate(PROP); return RegExpTT.PROPERTY; + } + // fall through + case 179: break; case 63: + { return allowTransformationEscapes ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; + } + // fall through + case 180: break; + case 64: { String text = yytext().toString().substring(1); if (allowOctalNoLeadingZero) { if (Integer.parseInt(text) <= capturingGroupCount && yystate() != CLASS2) return RegExpTT.BACKREF; @@ -1123,70 +1178,84 @@ class _RegExLexer implements FlexLexer { } return RegExpTT.BACKREF; } - } - case 179: break; - case 64: - { yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN; - } - case 180: break; - case 65: - { return RegExpTT.BAD_HEX_VALUE; - } + } + // fall through case 181: break; - case 66: - { return allowTransformationEscapes ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN; - } + case 65: + { yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN; + } + // fall through case 182: break; - case 67: - { return (allowOctalNoLeadingZero ? RegExpTT.OCT_CHAR : RegExpTT.BAD_OCT_VALUE); - } + case 66: + { return RegExpTT.BAD_HEX_VALUE; + } + // fall through case 183: break; - case 68: - { return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN); - } + case 67: + { return allowTransformationEscapes ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN; + } + // fall through case 184: break; - case 69: - { yypushstate(NAMED); return RegExpTT.NAMED_CHARACTER; - } + case 68: + { return (allowOctalNoLeadingZero ? RegExpTT.OCT_CHAR : RegExpTT.BAD_OCT_VALUE); + } + // fall through case 185: break; - case 70: - { yypopstate(); return RegExpTT.QUOTE_END; - } + case 69: + { return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN); + } + // fall through case 186: break; - case 71: - // lookahead expression with fixed base length - zzMarkedPos = Character.offsetByCodePoints - (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); - { yybegin(CLASS2); if (allowMysqlBracketExpressions) { yypushback(1); } else if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } else { return RegExpTT.CHARACTER; } - } + case 70: + { yypushstate(NAMED); return RegExpTT.NAMED_CHARACTER; + } + // fall through case 187: break; + case 71: + { yypopstate(); return RegExpTT.QUOTE_END; + } + // fall through + case 188: break; case 72: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); - { yybegin(CLASS2); if (allowNestedCharacterClasses) { yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; - } - case 188: break; + { yybegin(CLASS2); if (allowMysqlBracketExpressions) { yypushback(1); } else if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } else { return RegExpTT.CHARACTER; } + } + // fall through + case 189: break; case 73: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); - { yybegin(CLASS2); if (allowPosixBracketExpressions) { yypushback(1); } else if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } else { return RegExpTT.CHARACTER; } - } - case 189: break; - case 74: - { yybegin(CLASS2); return allowEmptyCharacterClass ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; - } + { yybegin(CLASS2); if (allowNestedCharacterClasses) { yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; + } + // fall through case 190: break; - case 75: - { yybegin(CLASS2); return RegExpTT.ESC_CHARACTER; - } + case 74: + // lookahead expression with fixed base length + zzMarkedPos = Character.offsetByCodePoints + (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); + { yybegin(CLASS2); if (allowPosixBracketExpressions) { yypushback(1); } else if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } else { return RegExpTT.CHARACTER; } + } + // fall through case 191: break; - case 76: - { yypushstate(QUOTED_CLASS1); return RegExpTT.QUOTE_BEGIN; - } + case 75: + { yybegin(CLASS2); return allowEmptyCharacterClass ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; + } + // fall through case 192: break; + case 76: + { yybegin(CLASS2); return RegExpTT.ESC_CHARACTER; + } + // fall through + case 193: break; case 77: + { yypushstate(QUOTED_CLASS1); return RegExpTT.QUOTE_BEGIN; + } + // fall through + case 194: break; + case 78: { char c = yycharat(1); if (allowPosixBracketExpressions && c == ':') { yybegin(BRACKET_EXPRESSION); @@ -1201,194 +1270,234 @@ class _RegExLexer implements FlexLexer { yypushback(1); return allowNestedCharacterClasses ? RegExpTT.CLASS_BEGIN : RegExpTT.CHARACTER; } - } - case 193: break; - case 78: + } + // fall through + case 195: break; + case 79: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); { if (allowNestedCharacterClasses) { yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; - } - case 194: break; - case 79: - { return (commentMode && whitespaceInClass) ? RegExpTT.ESC_CTRL_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; - } - case 195: break; - case 80: - { if (allowNestedCharacterClasses) return RegExpTT.ANDAND; else yypushback(1); return RegExpTT.CHARACTER; - } + } + // fall through case 196: break; - case 81: - { yybegin(CLASS2); return RegExpTT.BRACKET_EXPRESSION_END; - } + case 80: + { return (commentMode && whitespaceInClass) ? RegExpTT.ESC_CTRL_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; + } + // fall through case 197: break; - case 82: - { yybegin(CLASS2); return RegExpTT.MYSQL_CHAR_END; - } + case 81: + { if (allowNestedCharacterClasses) return RegExpTT.ANDAND; else yypushback(1); return RegExpTT.CHARACTER; + } + // fall through case 198: break; - case 83: - { yybegin(CLASS2); return RegExpTT.MYSQL_CHAR_EQ_END; - } + case 82: + { yybegin(CLASS2); return RegExpTT.BRACKET_EXPRESSION_END; + } + // fall through case 199: break; - case 84: - { yybegin(PY_COND_REF); return RegExpTT.PYTHON_COND_REF; - } + case 83: + { yybegin(CLASS2); return RegExpTT.MYSQL_CHAR_END; + } + // fall through case 200: break; - case 85: - { yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_NAMED_GROUP; - } + case 84: + { yybegin(CLASS2); return RegExpTT.MYSQL_CHAR_EQ_END; + } + // fall through case 201: break; - case 86: - { yybegin(QUOTED_NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_QUOTED_NAMED_GROUP; - } + case 85: + { yybegin(PY_COND_REF); return RegExpTT.PYTHON_COND_REF; + } + // fall through case 202: break; - case 87: - { return RegExpTT.NON_CAPT_GROUP; - } + case 86: + { yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_NAMED_GROUP; + } + // fall through case 203: break; + case 87: + { yybegin(QUOTED_NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_QUOTED_NAMED_GROUP; + } + // fall through + case 204: break; case 88: { return RegExpTT.POS_LOOKAHEAD; - } - case 204: break; - case 89: - { return RegExpTT.ATOMIC_GROUP; - } + } + // fall through case 205: break; - case 90: - { return RegExpTT.NEG_LOOKAHEAD; - } + case 89: + { return RegExpTT.NON_CAPT_GROUP; + } + // fall through case 206: break; - case 91: - // lookahead expression with fixed base length - zzMarkedPos = Character.offsetByCodePoints - (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); - { yypushstate(QUANTIFIER); return RegExpTT.LBRACE; - } + case 90: + { return RegExpTT.ATOMIC_GROUP; + } + // fall through case 207: break; + case 91: + { return RegExpTT.NEG_LOOKAHEAD; + } + // fall through + case 208: break; case 92: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); - { if (allowOmitBothNumbersInQuantifiers || allowDanglingMetacharacters != Boolean.TRUE) { yypushstate(QUANTIFIER); return RegExpTT.LBRACE; } else return RegExpTT.CHARACTER; - } - case 208: break; - case 93: - { yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_CALL; - } + { yypushstate(QUANTIFIER); return RegExpTT.LBRACE; + } + // fall through case 209: break; - case 94: - { yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_CALL; - } + case 93: + // lookahead expression with fixed base length + zzMarkedPos = Character.offsetByCodePoints + (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); + { if (allowOmitBothNumbersInQuantifiers || allowDanglingMetacharacters != Boolean.TRUE) { yypushstate(QUANTIFIER); return RegExpTT.LBRACE; } else return RegExpTT.CHARACTER; + } + // fall through case 210: break; - case 95: - { if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL; - } + case 94: + { yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_CALL; + } + // fall through case 211: break; + case 95: + { yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_CALL; + } + // fall through + case 212: break; case 96: + { if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL; + } + // fall through + case 213: break; + case 97: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 2); { if (allowExtendedUnicodeCharacter) yypushstate(EMBRACED_HEX); else return RegExpTT.BAD_HEX_VALUE; - } - case 212: break; - case 97: - { if (allowOneHexCharEscape) { return RegExpTT.HEX_CHAR; } else { yypushback(1); return RegExpTT.BAD_HEX_VALUE; } - } - case 213: break; + } + // fall through + case 214: break; case 98: + { if (allowOneHexCharEscape) { return RegExpTT.HEX_CHAR; } else { yypushback(1); return RegExpTT.BAD_HEX_VALUE; } + } + // fall through + case 215: break; + case 99: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 2); { if (allowExtendedUnicodeCharacter) yypushstate(EMBRACED_HEX); else return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN; - } - case 214: break; - case 99: - { yypushback(yylength() - 2); return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN; - } - case 215: break; - case 100: - { return RegExpTT.OCT_CHAR; - } + } + // fall through case 216: break; - case 101: - { yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_REF; - } + case 100: + { yypushback(yylength() - 2); return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN; + } + // fall through case 217: break; - case 102: - { yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_REF; - } + case 101: + { return RegExpTT.OCT_CHAR; + } + // fall through case 218: break; + case 102: + { yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_REF; + } + // fall through + case 219: break; case 103: + { yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_REF; + } + // fall through + case 220: break; + case 104: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); { return RegExpTT.CHARACTER; - } - case 219: break; - case 104: - { yypopstate(); return (yycharat(-1) == 'u') ? RegExpTT.UNICODE_CHAR : RegExpTT.HEX_CHAR; - } - case 220: break; - case 105: - { yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.PYTHON_NAMED_GROUP; - } + } + // fall through case 221: break; - case 106: - { yybegin(PY_NAMED_GROUP_REF); return RegExpTT.PYTHON_NAMED_GROUP_REF; - } + case 105: + { yypopstate(); return (yycharat(-1) == 'u') ? RegExpTT.UNICODE_CHAR : RegExpTT.HEX_CHAR; + } + // fall through case 222: break; - case 107: - { return RegExpTT.POS_LOOKBEHIND; - } + case 106: + { yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.PYTHON_NAMED_GROUP; + } + // fall through case 223: break; - case 108: - { return RegExpTT.NEG_LOOKBEHIND; - } + case 107: + { yybegin(PY_NAMED_GROUP_REF); return RegExpTT.PYTHON_NAMED_GROUP_REF; + } + // fall through case 224: break; + case 108: + { return RegExpTT.POS_LOOKBEHIND; + } + // fall through + case 225: break; case 109: + { return RegExpTT.NEG_LOOKBEHIND; + } + // fall through + case 226: break; + case 110: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); { if (allowOmitNumbersInQuantifiers || allowDanglingMetacharacters != Boolean.TRUE) { yypushstate(QUANTIFIER); return RegExpTT.LBRACE; } else return RegExpTT.CHARACTER; - } - case 225: break; - case 110: - // lookahead expression with fixed base length - zzMarkedPos = Character.offsetByCodePoints - (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 2); - { return RegExpTT.ESC_CHARACTER; - } - case 226: break; + } + // fall through + case 227: break; case 111: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 2); - { return allowOmitBothNumbersInQuantifiers ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; - } - case 227: break; - case 112: - { return RegExpTT.HEX_CHAR; - } + { return RegExpTT.ESC_CHARACTER; + } + // fall through case 228: break; - case 113: - { return RegExpTT.COMMENT; - } + case 112: + // lookahead expression with fixed base length + zzMarkedPos = Character.offsetByCodePoints + (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 2); + { return allowOmitBothNumbersInQuantifiers ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; + } + // fall through case 229: break; + case 113: + { return RegExpTT.HEX_CHAR; + } + // fall through + case 230: break; case 114: + { return RegExpTT.COMMENT; + } + // fall through + case 231: break; + case 115: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 2); { return allowOmitNumbersInQuantifiers ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; - } - case 230: break; - case 115: - { if (allowOctalNoLeadingZero) yypushback(1); return RegExpTT.OCT_CHAR; - } - case 231: break; - case 116: - { return RegExpTT.UNICODE_CHAR; - } + } + // fall through case 232: break; + case 116: + { if (allowOctalNoLeadingZero) yypushback(1); return RegExpTT.OCT_CHAR; + } + // fall through + case 233: break; + case 117: + { return RegExpTT.UNICODE_CHAR; + } + // fall through + case 234: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java index 3db689866a80..be4eb9488f8b 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java @@ -84,6 +84,11 @@ public enum RegExpCapability { */ CARET_NEGATED_PROPERTIES, + /** + * supports properties with name and value like \p{name=value} + */ + PROPERTY_VALUES, + /** * \\u, \l, \\U, \L, and \E */ diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpCompletionContributor.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpCompletionContributor.java index ec56c008133c..2297fc3e32c1 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpCompletionContributor.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpCompletionContributor.java @@ -6,6 +6,7 @@ import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.codeInsight.lookup.TailTypeDecorator; +import com.intellij.lang.ASTNode; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.progress.ProgressManager; @@ -13,9 +14,11 @@ import com.intellij.openapi.util.TextRange; import com.intellij.patterns.ElementPattern; import com.intellij.patterns.PsiElementPattern; import com.intellij.psi.PsiElement; +import com.intellij.util.ObjectUtils; import com.intellij.util.PlatformIcons; import com.intellij.util.ProcessingContext; import com.intellij.util.ui.EmptyIcon; +import org.intellij.lang.regexp.psi.RegExpProperty; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -62,6 +65,9 @@ public final class RegExpCompletionContributor extends CompletionContributor { final ElementPattern propertyPattern = psiElement().withText("\\\\p"); extend(CompletionType.BASIC, psiElement().afterLeaf(propertyPattern), new PropertyCompletionProvider()); + + extend(CompletionType.BASIC, psiElement().inside(RegExpProperty.class).afterLeaf(psiElement(RegExpTT.EQ)), + new PropertyValueCompletionProvider()); } { @@ -172,4 +178,20 @@ public final class RegExpCompletionContributor extends CompletionContributor { }); } } + + private static class PropertyValueCompletionProvider extends CompletionProvider { + @Override + protected void addCompletions(@NotNull CompletionParameters parameters, + @NotNull ProcessingContext context, + @NotNull CompletionResultSet result) { + RegExpProperty property = ObjectUtils.tryCast(parameters.getPosition().getParent(), RegExpProperty.class); + ASTNode propertyNameNode = property != null ? property.getCategoryNode() : null; + if (propertyNameNode == null) { + return; + } + for (String[] value : RegExpLanguageHosts.getInstance().getAllPropertyValues(property, propertyNameNode.getText())) { + addLookupElement(result, value[0], value.length > 1 ? value[1] : null, null); + } + } + } } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java index 3bc8820404bf..47a3221c2a1b 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java @@ -28,6 +28,8 @@ import java.util.EnumSet; public interface RegExpLanguageHost { EnumSet EMPTY_NAMED_GROUP_TYPES = EnumSet.noneOf(RegExpGroup.Type.class); + @SuppressWarnings("SSBasedInspection") + String[][] EMPTY_COMPLETION_ITEMS_ARRAY = new String[0][]; boolean characterNeedsEscaping(char c); boolean supportsPerl5EmbeddedComments(); @@ -89,6 +91,11 @@ public interface RegExpLanguageHost { } boolean isValidCategory(@NotNull String category); + + default boolean isValidPropertyValue(@NotNull String propertyName, @NotNull String value){ + return true; + } + @NotNull String[][] getAllKnownProperties(); @Nullable @@ -109,6 +116,11 @@ public interface RegExpLanguageHost { return Lookbehind.FULL; // to not break existing implementations, although rarely actually supported. } + @NotNull + default String[][] getAllPropertyValues(@NotNull String propertyName){ + return EMPTY_COMPLETION_ITEMS_ARRAY; + } + enum Lookbehind { /** Lookbehind not supported. */ NOT_SUPPORTED, diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHosts.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHosts.java index f9735609bac5..51c7d74eeb84 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHosts.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHosts.java @@ -151,6 +151,11 @@ public final class RegExpLanguageHosts extends ClassExtension" in Python/Ruby named group */ IElementType GT = new RegExpElementType("GT"); diff --git a/RegExpSupport/src/org/intellij/lang/regexp/ecmascript/EcmaScriptUnicodeRegexpParserDefinition.java b/RegExpSupport/src/org/intellij/lang/regexp/ecmascript/EcmaScriptUnicodeRegexpParserDefinition.java index 2529a2aede54..a19ad6ab2886 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/ecmascript/EcmaScriptUnicodeRegexpParserDefinition.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/ecmascript/EcmaScriptUnicodeRegexpParserDefinition.java @@ -21,6 +21,7 @@ public class EcmaScriptUnicodeRegexpParserDefinition extends RegExpParserDefinit private final EnumSet CAPABILITIES = EnumSet.of(RegExpCapability.OCTAL_NO_LEADING_ZERO, RegExpCapability.ALLOW_EMPTY_CHARACTER_CLASS, RegExpCapability.NO_DANGLING_METACHARACTERS, + RegExpCapability.PROPERTY_VALUES, RegExpCapability.EXTENDED_UNICODE_CHARACTER); @Override diff --git a/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpProperty.java b/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpProperty.java index 7dbd2a85f9eb..1d7605dcc417 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpProperty.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpProperty.java @@ -32,4 +32,10 @@ public interface RegExpProperty extends RegExpAtom, RegExpClassElement { */ @Nullable ASTNode getCategoryNode(); + + /** + * The node that represents the category value, e.g 'Latin' in \p{Script=Latin} + */ + @Nullable + ASTNode getValueNode(); } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpPropertyImpl.java b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpPropertyImpl.java index c5793d42a93c..3a2584df25f3 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpPropertyImpl.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpPropertyImpl.java @@ -64,59 +64,78 @@ public class RegExpPropertyImpl extends RegExpElementImpl implements RegExpPrope return getNode().findChildByType(RegExpTT.NAME); } - @Override - public void accept(RegExpElementVisitor visitor) { - visitor.visitRegExpProperty(this); - } + @Nullable + @Override + public ASTNode getValueNode() { + ASTNode node = getNode(); + ASTNode eq = node.findChildByType(RegExpTT.EQ); + return eq != null ? node.findChildByType(RegExpTT.NAME, eq) : null; + } + + @Override + public void accept(RegExpElementVisitor visitor) { + visitor.visitRegExpProperty(this); + } private class MyPsiReference implements PsiReference { - @Override - @NotNull - public PsiElement getElement() { - return RegExpPropertyImpl.this; - } + @Override + @NotNull + public PsiElement getElement() { + return RegExpPropertyImpl.this; + } - @Override - @NotNull - public TextRange getRangeInElement() { - ASTNode firstNode = getNode().findChildByType(RegExpTT.CARET); - if (firstNode == null) { - firstNode = getNode().findChildByType(RegExpTT.LBRACE); - } - assert firstNode != null; - final ASTNode rbrace = getNode().findChildByType(RegExpTT.RBRACE); - int to = rbrace == null ? getTextRange().getEndOffset() : rbrace.getTextRange().getEndOffset() - 1; + @Override + @NotNull + public TextRange getRangeInElement() { + ASTNode node = getNode(); + ASTNode firstNode = node.findChildByType(RegExpTT.CARET); + if (firstNode == null) { + firstNode = node.findChildByType(RegExpTT.LBRACE); + } + assert firstNode != null; + ASTNode eq = node.findChildByType(RegExpTT.EQ); + final ASTNode rbrace = node.findChildByType(RegExpTT.RBRACE); + int to; + if (eq != null) { + to = eq.getTextRange().getEndOffset() - 1; + } + else if (rbrace != null) { + to = rbrace.getTextRange().getEndOffset() - 1; + } + else { + to = getTextRange().getEndOffset(); + } - final TextRange t = new TextRange(firstNode.getStartOffset() + 1, to); - return t.shiftRight(-getTextRange().getStartOffset()); - } + final TextRange t = new TextRange(firstNode.getStartOffset() + 1, to); + return t.shiftRight(-getTextRange().getStartOffset()); + } - @Override - @Nullable - public PsiElement resolve() { - return RegExpPropertyImpl.this; - } + @Override + @Nullable + public PsiElement resolve() { + return RegExpPropertyImpl.this; + } - @Override - @NotNull - public String getCanonicalText() { - return getRangeInElement().substring(getElement().getText()); - } + @Override + @NotNull + public String getCanonicalText() { + return getRangeInElement().substring(getElement().getText()); + } - @Override - public PsiElement handleElementRename(@NotNull String newElementName) throws IncorrectOperationException { - throw new IncorrectOperationException(); - } + @Override + public PsiElement handleElementRename(@NotNull String newElementName) throws IncorrectOperationException { + throw new IncorrectOperationException(); + } - @Override - public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException { - throw new IncorrectOperationException(); - } + @Override + public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException { + throw new IncorrectOperationException(); + } - @Override - public boolean isReferenceTo(@NotNull PsiElement element) { - return false; - } + @Override + public boolean isReferenceTo(@NotNull PsiElement element) { + return false; + } @Override @NotNull diff --git a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex index c4b98e88c5c5..b19883f8ea6a 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex +++ b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex @@ -301,6 +301,7 @@ HEX_CHAR=[0-9a-fA-F] { "^" { return RegExpTT.CARET; } {NAME} { return RegExpTT.NAME; } + "=" { return RegExpTT.EQ; } {RBRACE} { yypopstate(); return RegExpTT.RBRACE; } {ANY} { yypopstate(); yypushback(1); } } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java b/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java index 4de3713858b7..a85c9588fb49 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java @@ -219,9 +219,16 @@ public final class RegExpAnnotator extends RegExpElementVisitor implements Annot if (category == null) { return; } - if(!myLanguageHosts.isValidCategory(category.getPsi(), category.getText())) { + String propertyName = category.getText(); + if(!myLanguageHosts.isValidCategory(category.getPsi(), propertyName)) { final Annotation a = myHolder.createErrorAnnotation(category, "Unknown character category"); a.setHighlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL); + return; + } + ASTNode valueNode = property.getValueNode(); + if (valueNode != null && !myLanguageHosts.isValidPropertyValue(category.getPsi(), propertyName, valueNode.getText())) { + final Annotation a = myHolder.createErrorAnnotation(valueNode, "Unknown property value"); + a.setHighlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL); } }