WI-60369 make support of pcre numbered group calling a part of RegExpBackRefImpl

GitOrigin-RevId: e4369e5e8c60c2a061152c9df82434d5ad4ede84
This commit is contained in:
Filippova Maria
2022-08-22 20:45:07 +00:00
committed by intellij-monorepo-bot
parent 753ce73a65
commit 6132796321
11 changed files with 202 additions and 244 deletions
@@ -217,20 +217,20 @@ class _RegExLexer implements FlexLexer {
"\1\66\1\65\1\71\1\73\2\12\1\75\2\76\1\77"+
"\1\100\1\101\1\102\1\103\1\104\1\105\1\106\1\107"+
"\2\26\1\126\1\127\1\130\1\131\1\132\1\133\1\134"+
"\1\0\1\135\1\136\1\0\1\137\1\140\1\141\1\142"+
"\1\143\1\144\1\0\1\145\1\146\1\147\2\0\1\150"+
"\6\0\1\151\1\152\1\153\1\154\2\155\1\103\1\156"+
"\1\157\1\160\1\161\1\162\1\163\1\164\1\165\1\166"+
"\1\0\1\167\1\151\1\154\2\155\1\103\1\157\1\161"+
"\2\26\1\170\1\171\1\172\1\173\1\0\1\174\1\175"+
"\1\176\1\0\1\177\1\0\1\200\4\0\1\151\2\155"+
"\1\103\1\201\1\161\1\202\1\203\1\151\2\155\1\103"+
"\1\201\1\161\2\26\1\204\1\205\1\206\1\151\1\0"+
"\1\207\1\161\1\151\1\207\1\161\2\26\1\0\2\210"+
"\1\211\2\26\1\0\4\212";
"\1\0\1\135\1\0\1\136\1\137\1\0\1\140\1\141"+
"\1\142\1\143\1\0\1\144\1\145\1\146\2\0\1\147"+
"\6\0\1\150\1\151\1\152\1\153\2\154\1\103\1\155"+
"\1\156\1\157\1\160\1\161\1\162\1\163\1\164\1\165"+
"\1\0\1\166\1\150\1\153\2\154\1\103\1\156\1\160"+
"\2\26\1\167\1\170\1\171\1\0\1\172\1\173\1\0"+
"\1\174\1\175\1\176\1\0\1\177\1\0\1\200\4\0"+
"\1\150\2\154\1\103\1\201\1\160\1\202\1\203\1\150"+
"\2\154\1\103\1\201\1\160\2\26\1\0\1\204\1\205"+
"\1\206\1\150\1\0\1\207\1\160\1\150\1\207\1\160"+
"\2\26\1\0\2\210\1\211\2\26\1\0\4\212";
private static int [] zzUnpackAction() {
int [] result = new int[275];
int [] result = new int[278];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -276,23 +276,23 @@ class _RegExLexer implements FlexLexer {
"\0\u096c\0\u096c\0\u096c\0\u096c\0\u131b\0\u096c\0\u135e\0\u096c"+
"\0\u096c\0\u096c\0\u13a1\0\u096c\0\u13e4\0\u096c\0\u1427\0\u146a"+
"\0\u096c\0\u14ad\0\u14f0\0\u0605\0\u0605\0\u0605\0\u0605\0\u0605"+
"\0\u0605\0\u0605\0\u1533\0\u0605\0\u0605\0\u1576\0\u0605\0\u0605"+
"\0\u15b9\0\u0605\0\u0605\0\u0605\0\u15fc\0\u0605\0\u0605\0\u0605"+
"\0\u163f\0\u1682\0\u0605\0\u16c5\0\u1708\0\u174b\0\u178e\0\u17d1"+
"\0\u1814\0\u1857\0\u0605\0\u0605\0\u0605\0\u189a\0\u18dd\0\u1920"+
"\0\u0605\0\u1963\0\u0605\0\u19a6\0\u0605\0\u0605\0\u0605\0\u0605"+
"\0\u0605\0\u19e9\0\u0605\0\u1a2c\0\u096c\0\u1a6f\0\u1ab2\0\u1af5"+
"\0\u1b38\0\u1b7b\0\u1bbe\0\u1c01\0\u0605\0\u0605\0\u0605\0\u0605"+
"\0\u1c44\0\u0605\0\u0605\0\u0605\0\u1c87\0\u0605\0\u1cca\0\u0605"+
"\0\u1d0d\0\u1d50\0\u1d93\0\u1dd6\0\u1e19\0\u1e5c\0\u0605\0\u0605"+
"\0\u0605\0\u1e9f\0\u0605\0\u0605\0\u1ee2\0\u1f25\0\u096c\0\u096c"+
"\0\u096c\0\u1f68\0\u1fab\0\u1fee\0\u0605\0\u0605\0\u0605\0\u0605"+
"\0\u2031\0\u0605\0\u2074\0\u096c\0\u096c\0\u20b7\0\u20fa\0\u213d"+
"\0\u2180\0\u0605\0\u096c\0\u096c\0\u21c3\0\u2206\0\u2249\0\u228c"+
"\0\u22cf\0\u2312\0\u0605";
"\0\u0605\0\u0605\0\u1533\0\u0605\0\u1576\0\u0605\0\u0605\0\u15b9"+
"\0\u15fc\0\u0605\0\u0605\0\u0605\0\u163f\0\u0605\0\u0605\0\u0605"+
"\0\u1682\0\u16c5\0\u0605\0\u1708\0\u174b\0\u178e\0\u17d1\0\u1814"+
"\0\u1857\0\u189a\0\u0605\0\u0605\0\u0605\0\u18dd\0\u1920\0\u1963"+
"\0\u0605\0\u19a6\0\u0605\0\u19e9\0\u0605\0\u0605\0\u0605\0\u0605"+
"\0\u0605\0\u1a2c\0\u0605\0\u1a6f\0\u096c\0\u1ab2\0\u1af5\0\u1b38"+
"\0\u1b7b\0\u1bbe\0\u1c01\0\u1c44\0\u0605\0\u0605\0\u0605\0\u1c87"+
"\0\u0605\0\u0605\0\u1cca\0\u0605\0\u0605\0\u0605\0\u1d0d\0\u0605"+
"\0\u1d50\0\u0605\0\u1d93\0\u1dd6\0\u1e19\0\u1e5c\0\u1e9f\0\u1ee2"+
"\0\u0605\0\u0605\0\u0605\0\u1f25\0\u0605\0\u0605\0\u1f68\0\u1fab"+
"\0\u096c\0\u096c\0\u096c\0\u1fee\0\u2031\0\u2074\0\u20b7\0\u0605"+
"\0\u0605\0\u0605\0\u0605\0\u20fa\0\u0605\0\u213d\0\u096c\0\u096c"+
"\0\u2180\0\u21c3\0\u2206\0\u2249\0\u0605\0\u096c\0\u096c\0\u228c"+
"\0\u22cf\0\u2312\0\u2355\0\u2398\0\u23db\0\u0605";
private static int [] zzUnpackRowMap() {
int [] result = new int[275];
int [] result = new int[278];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -402,124 +402,125 @@ class _RegExLexer implements FlexLexer {
"\3\157\2\160\3\161\1\162\1\163\1\164\2\162\2\143"+
"\1\165\1\166\1\167\1\170\2\165\1\143\1\171\1\250"+
"\1\162\2\143\1\162\2\143\1\173\1\162\1\143\1\250"+
"\76\0\1\251\6\0\1\252\10\0\1\253\1\0\1\254"+
"\3\0\1\253\1\255\22\0\1\256\4\0\1\254\3\0"+
"\1\257\1\260\1\254\3\0\2\254\4\0\1\261\1\262"+
"\1\0\1\263\1\264\1\265\1\0\1\266\6\0\1\267"+
"\102\0\1\270\2\0\1\271\4\0\1\140\34\0\1\140"+
"\5\0\1\140\3\0\2\140\1\272\21\0\1\273\2\0"+
"\1\274\4\0\1\275\34\0\1\275\5\0\1\275\3\0"+
"\2\275\32\0\1\276\34\0\1\276\5\0\1\276\3\0"+
"\2\276\1\277\20\0\1\300\102\0\1\301\53\0\1\302"+
"\3\0\2\302\4\0\1\303\1\304\7\0\103\305\52\0"+
"\1\306\11\0\1\307\1\306\67\0\1\310\5\0\1\310"+
"\3\0\2\310\21\0\1\311\20\0\2\312\1\0\1\312"+
"\4\0\2\312\1\0\2\312\6\0\3\312\5\0\1\312"+
"\3\0\2\312\21\0\1\313\20\0\2\314\1\0\1\314"+
"\4\0\2\314\1\0\2\314\6\0\3\314\5\0\1\314"+
"\3\0\2\314\107\0\1\315\1\316\16\0\1\317\104\0"+
"\1\207\1\0\1\207\1\0\1\210\6\0\26\207\1\210"+
"\3\207\2\0\1\210\3\207\2\210\1\0\1\207\1\0"+
"\1\207\2\0\1\207\3\0\1\207\7\0\1\320\17\0"+
"\2\213\1\0\1\213\4\0\2\213\1\0\2\213\6\0"+
"\3\213\5\0\1\213\3\0\2\213\74\0\1\321\12\0"+
"\1\322\6\0\1\323\5\0\1\301\53\0\1\302\3\0"+
"\2\302\21\0\1\301\3\0\7\77\5\0\32\77\2\0"+
"\1\324\3\77\2\324\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\2\0\10\305\7\325\5\305\32\325"+
"\2\305\6\325\1\305\1\325\1\305\1\325\2\305\1\325"+
"\3\305\1\325\2\305\10\0\7\77\5\0\26\77\1\326"+
"\3\77\2\0\4\77\1\327\1\326\1\0\1\77\1\0"+
"\1\77\2\0\1\77\3\0\1\77\12\0\7\77\5\0"+
"\26\77\1\330\3\77\2\0\1\330\3\77\2\330\1\0"+
"\76\0\1\251\6\0\1\252\10\0\1\253\5\0\1\253"+
"\1\254\22\0\1\255\10\0\1\256\1\257\1\260\3\0"+
"\2\260\4\0\1\261\1\262\1\0\1\263\1\264\1\265"+
"\1\0\1\266\6\0\1\267\102\0\1\270\2\0\1\271"+
"\4\0\1\140\34\0\1\140\5\0\1\140\3\0\2\140"+
"\1\272\21\0\1\273\2\0\1\274\4\0\1\275\34\0"+
"\1\275\5\0\1\275\3\0\2\275\32\0\1\276\34\0"+
"\1\276\5\0\1\276\3\0\2\276\1\277\20\0\1\300"+
"\102\0\1\301\53\0\1\302\3\0\2\302\4\0\1\303"+
"\1\304\7\0\103\305\52\0\1\306\11\0\1\307\1\306"+
"\67\0\1\310\5\0\1\310\3\0\2\310\21\0\1\311"+
"\20\0\2\312\1\0\1\312\4\0\2\312\1\0\2\312"+
"\6\0\3\312\5\0\1\312\3\0\2\312\21\0\1\313"+
"\20\0\2\314\1\0\1\314\4\0\2\314\1\0\2\314"+
"\6\0\3\314\5\0\1\314\3\0\2\314\107\0\1\315"+
"\1\316\16\0\1\317\104\0\1\207\1\0\1\207\1\0"+
"\1\210\6\0\26\207\1\210\3\207\2\0\1\210\3\207"+
"\2\210\1\0\1\207\1\0\1\207\2\0\1\207\3\0"+
"\1\207\7\0\1\320\17\0\2\213\1\0\1\213\4\0"+
"\2\213\1\0\2\213\6\0\3\213\5\0\1\213\3\0"+
"\2\213\74\0\1\321\12\0\1\322\6\0\1\323\5\0"+
"\1\301\53\0\1\302\3\0\2\302\21\0\1\301\3\0"+
"\7\77\5\0\32\77\2\0\1\324\3\77\2\324\1\0"+
"\1\77\1\0\1\77\2\0\1\77\3\0\1\77\2\0"+
"\10\305\7\325\5\305\32\325\2\305\6\325\1\305\1\325"+
"\1\305\1\325\2\305\1\325\3\305\1\325\2\305\10\0"+
"\7\77\5\0\26\77\1\326\3\77\2\0\4\77\1\327"+
"\1\326\1\0\1\77\1\0\1\77\2\0\1\77\3\0"+
"\1\77\12\0\7\77\5\0\26\77\1\330\3\77\2\0"+
"\1\330\3\77\2\330\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\6\0\1\311\3\0\7\77\5\0"+
"\1\77\2\331\1\77\1\331\4\77\2\331\1\77\2\331"+
"\6\77\3\331\3\77\2\0\1\331\3\77\2\331\1\0"+
"\1\77\1\0\1\77\2\0\1\77\3\0\1\77\6\0"+
"\1\311\3\0\7\77\5\0\1\77\2\331\1\77\1\331"+
"\4\77\2\331\1\77\2\331\6\77\3\331\3\77\2\0"+
"\1\331\3\77\2\331\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\6\0\1\313\3\0\7\77\5\0"+
"\1\77\2\332\1\77\1\332\4\77\2\332\1\77\2\332"+
"\6\77\3\332\3\77\2\0\1\332\3\77\2\332\1\0"+
"\1\77\1\0\1\77\2\0\1\77\3\0\1\77\12\0"+
"\7\77\5\0\25\77\1\333\4\77\2\0\6\77\1\0"+
"\1\77\1\0\1\77\2\0\1\77\3\0\1\77\12\0"+
"\7\77\5\0\30\77\1\334\1\77\2\0\6\77\1\0"+
"\1\77\1\0\1\77\2\0\1\77\3\0\1\77\17\0"+
"\1\254\34\0\1\254\5\0\1\254\3\0\2\254\73\0"+
"\1\264\1\335\12\0\1\336\67\0\1\337\21\0\1\340"+
"\1\0\3\341\1\0\77\341\5\0\1\342\102\0\1\270"+
"\1\313\3\0\7\77\5\0\1\77\2\332\1\77\1\332"+
"\4\77\2\332\1\77\2\332\6\77\3\332\3\77\2\0"+
"\1\332\3\77\2\332\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\12\0\7\77\5\0\25\77\1\333"+
"\4\77\2\0\6\77\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\12\0\7\77\5\0\30\77\1\334"+
"\1\77\2\0\6\77\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\62\0\1\260\3\0\2\260\73\0"+
"\1\264\1\335\12\0\1\336\13\0\1\337\46\0\1\340"+
"\5\0\1\340\3\0\2\340\74\0\1\341\21\0\1\342"+
"\1\0\3\343\1\0\77\343\5\0\1\344\102\0\1\270"+
"\2\0\1\271\4\0\1\272\34\0\1\272\5\0\1\272"+
"\3\0\2\272\22\0\1\343\102\0\1\344\2\0\1\345"+
"\3\0\2\272\22\0\1\345\102\0\1\346\2\0\1\347"+
"\4\0\1\275\34\0\1\275\5\0\1\275\3\0\2\275"+
"\22\0\1\346\7\0\1\276\34\0\1\276\5\0\1\276"+
"\3\0\2\276\1\347\21\0\1\350\7\0\1\351\34\0"+
"\1\351\5\0\1\351\3\0\2\351\44\0\1\352\66\0"+
"\1\353\44\0\1\354\3\0\2\354\67\0\1\355\5\0"+
"\1\355\3\0\2\355\67\0\1\356\11\0\2\356\67\0"+
"\1\357\11\0\2\357\67\0\1\360\5\0\1\360\3\0"+
"\2\360\42\0\2\361\1\0\1\361\4\0\2\361\1\0"+
"\2\361\6\0\3\361\5\0\1\361\3\0\2\361\42\0"+
"\2\362\1\0\1\362\4\0\2\362\1\0\2\362\6\0"+
"\3\362\5\0\1\362\3\0\2\362\74\0\1\363\21\0"+
"\1\364\11\0\7\77\5\0\26\77\1\365\3\77\2\0"+
"\1\365\3\77\2\365\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\12\0\7\77\5\0\26\77\1\366"+
"\3\77\2\0\4\77\2\366\1\0\1\77\1\0\1\77"+
"\22\0\1\350\7\0\1\276\34\0\1\276\5\0\1\276"+
"\3\0\2\276\1\351\21\0\1\352\7\0\1\353\34\0"+
"\1\353\5\0\1\353\3\0\2\353\44\0\1\354\66\0"+
"\1\355\44\0\1\356\3\0\2\356\67\0\1\357\5\0"+
"\1\357\3\0\2\357\67\0\1\360\11\0\2\360\67\0"+
"\1\361\11\0\2\361\67\0\1\362\5\0\1\362\3\0"+
"\2\362\42\0\2\363\1\0\1\363\4\0\2\363\1\0"+
"\2\363\6\0\3\363\5\0\1\363\3\0\2\363\42\0"+
"\2\364\1\0\1\364\4\0\2\364\1\0\2\364\6\0"+
"\3\364\5\0\1\364\3\0\2\364\74\0\1\365\21\0"+
"\1\366\11\0\7\77\5\0\26\77\1\367\3\77\2\0"+
"\1\367\3\77\2\367\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\12\0\7\77\5\0\26\77\1\370"+
"\3\77\2\0\4\77\2\370\1\0\1\77\1\0\1\77"+
"\2\0\1\77\3\0\1\77\12\0\7\77\5\0\26\77"+
"\1\367\3\77\2\0\4\77\2\367\1\0\1\77\1\0"+
"\1\371\3\77\2\0\4\77\2\371\1\0\1\77\1\0"+
"\1\77\2\0\1\77\3\0\1\77\12\0\7\77\5\0"+
"\26\77\1\370\3\77\2\0\1\370\3\77\2\370\1\0"+
"\26\77\1\372\3\77\2\0\1\372\3\77\2\372\1\0"+
"\1\77\1\0\1\77\2\0\1\77\3\0\1\77\12\0"+
"\7\77\5\0\1\77\2\371\1\77\1\371\4\77\2\371"+
"\1\77\2\371\6\77\3\371\3\77\2\0\1\371\3\77"+
"\2\371\1\0\1\77\1\0\1\77\2\0\1\77\3\0"+
"\1\77\12\0\7\77\5\0\1\77\2\372\1\77\1\372"+
"\4\77\2\372\1\77\2\372\6\77\3\372\3\77\2\0"+
"\1\372\3\77\2\372\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\12\0\7\77\5\0\17\77\1\373"+
"\7\77\5\0\1\77\2\373\1\77\1\373\4\77\2\373"+
"\1\77\2\373\6\77\3\373\3\77\2\0\1\373\3\77"+
"\2\373\1\0\1\77\1\0\1\77\2\0\1\77\3\0"+
"\1\77\12\0\7\77\5\0\1\77\2\374\1\77\1\374"+
"\4\77\2\374\1\77\2\374\6\77\3\374\3\77\2\0"+
"\1\374\3\77\2\374\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\12\0\7\77\5\0\17\77\1\375"+
"\12\77\2\0\6\77\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\12\0\7\77\5\0\10\77\1\374"+
"\1\77\3\0\1\77\12\0\7\77\5\0\10\77\1\376"+
"\21\77\2\0\6\77\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\2\0\3\341\1\375\77\341\5\0"+
"\1\376\102\0\1\346\7\0\1\347\34\0\1\347\5\0"+
"\1\347\3\0\2\347\22\0\1\377\7\0\1\351\34\0"+
"\1\351\5\0\1\351\3\0\2\351\22\0\1\154\155\0"+
"\1\354\3\0\2\354\22\0\1\u0100\44\0\1\u0101\5\0"+
"\1\u0101\3\0\2\u0101\67\0\1\u0100\5\0\1\u0100\3\0"+
"\2\u0100\67\0\1\u0102\11\0\2\u0102\42\0\2\u0103\1\0"+
"\1\u0103\4\0\2\u0103\1\0\2\u0103\6\0\3\u0103\5\0"+
"\1\u0103\3\0\2\u0103\25\0\7\77\5\0\26\77\1\u0104"+
"\3\77\2\0\1\u0104\3\77\2\u0104\1\0\1\77\1\0"+
"\1\77\3\0\1\77\5\0\1\337\46\0\1\377\5\0"+
"\1\377\3\0\2\377\15\0\3\343\1\u0100\77\343\5\0"+
"\1\u0101\102\0\1\350\7\0\1\351\34\0\1\351\5\0"+
"\1\351\3\0\2\351\22\0\1\u0102\7\0\1\353\34\0"+
"\1\353\5\0\1\353\3\0\2\353\22\0\1\154\155\0"+
"\1\356\3\0\2\356\22\0\1\u0103\44\0\1\u0104\5\0"+
"\1\u0104\3\0\2\u0104\67\0\1\u0103\5\0\1\u0103\3\0"+
"\2\u0103\67\0\1\u0105\11\0\2\u0105\42\0\2\u0106\1\0"+
"\1\u0106\4\0\2\u0106\1\0\2\u0106\6\0\3\u0106\5\0"+
"\1\u0106\3\0\2\u0106\25\0\7\77\5\0\26\77\1\u0107"+
"\3\77\2\0\1\u0107\3\77\2\u0107\1\0\1\77\1\0"+
"\1\77\2\0\1\77\3\0\1\77\12\0\7\77\5\0"+
"\26\77\1\u0105\3\77\2\0\4\77\2\u0105\1\0\1\77"+
"\26\77\1\u0108\3\77\2\0\4\77\2\u0108\1\0\1\77"+
"\1\0\1\77\2\0\1\77\3\0\1\77\12\0\7\77"+
"\5\0\1\77\2\u0106\1\77\1\u0106\4\77\2\u0106\1\77"+
"\2\u0106\6\77\3\u0106\3\77\2\0\1\u0106\3\77\2\u0106"+
"\5\0\1\77\2\u0109\1\77\1\u0109\4\77\2\u0109\1\77"+
"\2\u0109\6\77\3\u0109\3\77\2\0\1\u0109\3\77\2\u0109"+
"\1\0\1\77\1\0\1\77\2\0\1\77\3\0\1\77"+
"\12\0\7\77\5\0\27\77\1\u0107\2\77\2\0\6\77"+
"\12\0\7\77\5\0\27\77\1\u010a\2\77\2\0\6\77"+
"\1\0\1\77\1\0\1\77\2\0\1\77\3\0\1\77"+
"\12\0\7\77\5\0\17\77\1\u0108\12\77\2\0\6\77"+
"\12\0\7\77\5\0\17\77\1\u010b\12\77\2\0\6\77"+
"\1\0\1\77\1\0\1\77\2\0\1\77\3\0\1\77"+
"\7\0\1\u0100\44\0\1\u0109\5\0\1\u0109\3\0\2\u0109"+
"\42\0\2\u010a\1\0\1\u010a\4\0\2\u010a\1\0\2\u010a"+
"\6\0\3\u010a\5\0\1\u010a\3\0\2\u010a\25\0\7\77"+
"\5\0\1\77\2\u010b\1\77\1\u010b\4\77\2\u010b\1\77"+
"\2\u010b\6\77\3\u010b\3\77\2\0\1\u010b\3\77\2\u010b"+
"\1\0\1\77\1\0\1\77\2\0\1\77\3\0\1\77"+
"\12\0\7\77\5\0\24\77\1\u010c\5\77\2\0\6\77"+
"\1\0\1\77\1\0\1\77\2\0\1\77\3\0\1\77"+
"\12\0\7\77\5\0\31\77\1\u010d\2\0\6\77\1\0"+
"\1\77\1\0\1\77\2\0\1\77\3\0\1\77\7\0"+
"\1\u0100\105\0\7\77\5\0\27\77\1\u010e\2\77\2\0"+
"\5\0\1\337\104\0\1\u0103\44\0\1\u010c\5\0\1\u010c"+
"\3\0\2\u010c\42\0\2\u010d\1\0\1\u010d\4\0\2\u010d"+
"\1\0\2\u010d\6\0\3\u010d\5\0\1\u010d\3\0\2\u010d"+
"\25\0\7\77\5\0\1\77\2\u010e\1\77\1\u010e\4\77"+
"\2\u010e\1\77\2\u010e\6\77\3\u010e\3\77\2\0\1\u010e"+
"\3\77\2\u010e\1\0\1\77\1\0\1\77\2\0\1\77"+
"\3\0\1\77\12\0\7\77\5\0\24\77\1\u010f\5\77"+
"\2\0\6\77\1\0\1\77\1\0\1\77\2\0\1\77"+
"\3\0\1\77\12\0\7\77\5\0\31\77\1\u0110\2\0"+
"\6\77\1\0\1\77\1\0\1\77\2\0\1\77\3\0"+
"\1\77\12\0\7\77\5\0\32\77\1\u010f\1\u0110\6\77"+
"\1\0\1\77\1\0\1\77\2\0\1\77\3\0\1\77"+
"\61\0\1\u0110\24\0\1\u0111\13\0\1\u0110\34\0\1\u0110"+
"\5\0\1\u0110\3\0\2\u0110\32\0\1\u0112\34\0\1\u0112"+
"\5\0\1\u0112\3\0\2\u0112\32\0\1\u0113\34\0\1\u0113"+
"\5\0\1\u0113\3\0\2\u0113\15\0";
"\1\77\7\0\1\u0103\105\0\7\77\5\0\27\77\1\u0111"+
"\2\77\2\0\6\77\1\0\1\77\1\0\1\77\2\0"+
"\1\77\3\0\1\77\12\0\7\77\5\0\32\77\1\u0112"+
"\1\u0113\6\77\1\0\1\77\1\0\1\77\2\0\1\77"+
"\3\0\1\77\61\0\1\u0113\24\0\1\u0114\13\0\1\u0113"+
"\34\0\1\u0113\5\0\1\u0113\3\0\2\u0113\32\0\1\u0115"+
"\34\0\1\u0115\5\0\1\u0115\3\0\2\u0115\32\0\1\u0116"+
"\34\0\1\u0116\5\0\1\u0116\3\0\2\u0116\15\0";
private static int [] zzUnpackTrans() {
int [] result = new int[9045];
int [] result = new int[9246];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -565,15 +566,16 @@ class _RegExLexer implements FlexLexer {
"\3\11\1\1\4\11\2\1\2\11\1\1\4\11\1\1"+
"\1\11\1\1\1\11\2\1\1\11\1\1\12\11\1\0"+
"\1\11\1\1\3\11\1\1\1\0\2\11\25\1\7\11"+
"\1\0\2\11\1\0\2\11\1\1\3\11\1\0\3\11"+
"\2\0\1\11\6\0\1\1\3\11\3\1\1\11\1\1"+
"\1\11\1\1\5\11\1\0\1\11\11\1\4\11\1\0"+
"\3\11\1\0\1\11\1\0\1\11\4\0\2\1\3\11"+
"\1\1\2\11\10\1\4\11\1\0\1\11\6\1\1\0"+
"\1\11\4\1\1\0\3\1\1\11";
"\1\0\1\11\1\0\2\11\1\0\1\1\3\11\1\0"+
"\3\11\2\0\1\11\6\0\1\1\3\11\3\1\1\11"+
"\1\1\1\11\1\1\5\11\1\0\1\11\11\1\3\11"+
"\1\0\2\11\1\0\3\11\1\0\1\11\1\0\1\11"+
"\4\0\2\1\3\11\1\1\2\11\10\1\1\0\4\11"+
"\1\0\1\11\6\1\1\0\1\11\4\1\1\0\3\1"+
"\1\11";
private static int [] zzUnpackAttribute() {
int [] result = new int[275];
int [] result = new int[278];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -1496,54 +1498,50 @@ class _RegExLexer implements FlexLexer {
// fall through
case 230: break;
case 93:
// lookahead expression with fixed lookahead length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzMarkedPos, -1);
{ if (allowPcreNumberedGroupRef) {
yybegin(PCRE_NUMBERED_GROUP);
return RegExpTT.PCRE_NUMBERED_GROUP_REF;
}
else { yypushback(yylength() - 2); yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; }
{ return RegExpTT.PCRE_BRANCH_RESET;
}
// fall through
case 231: break;
case 94:
{ return RegExpTT.PCRE_BRANCH_RESET;
{ return RegExpTT.ATOMIC_GROUP;
}
// fall through
case 232: break;
case 95:
{ return RegExpTT.ATOMIC_GROUP;
{ return RegExpTT.POS_LOOKAHEAD;
}
// fall through
case 233: break;
case 96:
{ return RegExpTT.POS_LOOKAHEAD;
{ yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_NAMED_GROUP;
}
// fall through
case 234: break;
case 97:
{ yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_NAMED_GROUP;
{ yybegin(QUOTED_NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_QUOTED_NAMED_GROUP;
}
// fall through
case 235: break;
case 98:
{ yybegin(QUOTED_NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_QUOTED_NAMED_GROUP;
{ return RegExpTT.NON_CAPT_GROUP;
}
// fall through
case 236: break;
case 99:
{ return RegExpTT.NON_CAPT_GROUP;
{ yybegin(NAMED_GROUP); return RegExpTT.PCRE_RECURSIVE_NAMED_GROUP_REF;
}
// fall through
case 237: break;
case 100:
{ yybegin(NAMED_GROUP); return RegExpTT.PCRE_RECURSIVE_NAMED_GROUP_REF;
{ return RegExpTT.NEG_LOOKAHEAD;
}
// fall through
case 238: break;
case 101:
{ return RegExpTT.NEG_LOOKAHEAD;
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ return (allowDanglingMetacharacters != TRUE) ? RegExpTT.LBRACE : RegExpTT.CHARACTER;
}
// fall through
case 239: break;
@@ -1551,7 +1549,7 @@ class _RegExLexer implements FlexLexer {
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ return (allowDanglingMetacharacters != TRUE) ? RegExpTT.LBRACE : RegExpTT.CHARACTER;
{ yypushstate(QUANTIFIER); return RegExpTT.LBRACE;
}
// fall through
case 240: break;
@@ -1559,109 +1557,110 @@ class _RegExLexer implements FlexLexer {
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ yypushstate(QUANTIFIER); return RegExpTT.LBRACE;
{ if (allowOmitBothNumbersInQuantifiers || allowDanglingMetacharacters != TRUE) { yypushstate(QUANTIFIER); return RegExpTT.LBRACE; } else return RegExpTT.CHARACTER;
}
// fall through
case 241: break;
case 104:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ if (allowOmitBothNumbersInQuantifiers || allowDanglingMetacharacters != TRUE) { yypushstate(QUANTIFIER); return RegExpTT.LBRACE; } else return RegExpTT.CHARACTER;
{ return allowPcreBackReferences ? RegExpTT.BACKREF : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
}
// fall through
case 242: break;
case 105:
{ return allowPcreBackReferences ? RegExpTT.BACKREF : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
{ yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_CALL;
}
// fall through
case 243: break;
case 106:
{ yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_CALL;
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_CALL;
}
// fall through
case 244: break;
case 107:
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_CALL;
{ if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL;
}
// fall through
case 245: break;
case 108:
{ if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL;
{ return RegExpTT.OCT_CHAR;
}
// fall through
case 246: break;
case 109:
{ return RegExpTT.OCT_CHAR;
}
// fall through
case 247: break;
case 110:
// 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;
}
// fall through
case 248: break;
case 111:
case 247: break;
case 110:
{ if (allowOneHexCharEscape) { return RegExpTT.HEX_CHAR; } else { yypushback(1); return RegExpTT.BAD_HEX_VALUE; }
}
// fall through
case 249: break;
case 112:
case 248: break;
case 111:
// 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;
}
// fall through
case 249: break;
case 112:
{ yypushback(yylength() - 2); return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN;
}
// fall through
case 250: break;
case 113:
{ yypushback(yylength() - 2); return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN;
{ yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_REF;
}
// fall through
case 251: break;
case 114:
{ yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_REF;
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_REF;
}
// fall through
case 252: break;
case 115:
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_REF;
}
// fall through
case 253: break;
case 116:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ return RegExpTT.CHARACTER;
}
// fall through
case 253: break;
case 116:
{ yypopstate(); return (yycharat(-1) == 'u') ? RegExpTT.UNICODE_CHAR : RegExpTT.HEX_CHAR;
}
// fall through
case 254: break;
case 117:
{ yypopstate(); return (yycharat(-1) == 'u') ? RegExpTT.UNICODE_CHAR : RegExpTT.HEX_CHAR;
{ yybegin(YYINITIAL); return RegExpTT.POS_LOOKAHEAD;
}
// fall through
case 255: break;
case 118:
{ yybegin(YYINITIAL); return RegExpTT.POS_LOOKAHEAD;
{ yybegin(YYINITIAL); return RegExpTT.NEG_LOOKAHEAD;
}
// fall through
case 256: break;
case 119:
{ yybegin(YYINITIAL); return RegExpTT.NEG_LOOKAHEAD;
{ yybegin(PY_NAMED_GROUP_REF); return RegExpTT.PYTHON_NAMED_GROUP_REF;
}
// fall through
case 257: break;
case 120:
{ yybegin(PY_NAMED_GROUP_REF); return RegExpTT.PYTHON_NAMED_GROUP_REF;
{ yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.PYTHON_NAMED_GROUP;
}
// fall through
case 258: break;
case 121:
{ yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.PYTHON_NAMED_GROUP;
{ if (allowPcreNumberedGroupRef) {
yybegin(PCRE_NUMBERED_GROUP);
return RegExpTT.PCRE_NUMBERED_GROUP_REF;
}
else { yypushback(yylength() - 2); yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; }
}
// fall through
case 259: break;
@@ -21,7 +21,6 @@ public class RegExpBraceMatcher implements PairedBraceMatcher {
new BracePair(RegExpTT.PYTHON_NAMED_GROUP_REF, RegExpTT.GROUP_END, true),
new BracePair(RegExpTT.PCRE_RECURSIVE_NAMED_GROUP_REF, RegExpTT.GROUP_END, true),
new BracePair(RegExpTT.CONDITIONAL, RegExpTT.GROUP_END, true),
new BracePair(RegExpTT.PCRE_NUMBERED_GROUP_REF, RegExpTT.GROUP_END, true),
new BracePair(RegExpTT.PCRE_BRANCH_RESET, RegExpTT.GROUP_END, true),
new BracePair(RegExpTT.RUBY_NAMED_GROUP, RegExpTT.GROUP_END, true),
new BracePair(RegExpTT.RUBY_QUOTED_NAMED_GROUP, RegExpTT.GROUP_END, true),
@@ -117,7 +117,6 @@ public class RegExpHighlighter extends SyntaxHighlighterBase {
ourMap.put(RegExpTT.PYTHON_NAMED_GROUP_REF, PARENTHS);
ourMap.put(RegExpTT.PCRE_RECURSIVE_NAMED_GROUP_REF, PARENTHS);
ourMap.put(RegExpTT.CONDITIONAL, PARENTHS);
ourMap.put(RegExpTT.PCRE_NUMBERED_GROUP_REF, PARENTHS);
ourMap.put(RegExpTT.RUBY_NAMED_GROUP, PARENTHS);
ourMap.put(RegExpTT.RUBY_QUOTED_NAMED_GROUP, PARENTHS);
ourMap.put(RegExpTT.GROUP_BEGIN, PARENTHS);
@@ -409,7 +409,8 @@ public class RegExpParser implements PsiParser, LightPsiParser {
parseNamedGroupRef(builder, marker, RegExpTT.GROUP_END);
}
else if (type == RegExpTT.PCRE_NUMBERED_GROUP_REF) {
parseNumberedGroupRef(builder, marker);
builder.advanceLexer();
marker.done(RegExpElementTypes.BACKREF);
}
else if (type == RegExpTT.RUBY_NAMED_GROUP_REF || type == RegExpTT.RUBY_NAMED_GROUP_CALL) {
parseNamedGroupRef(builder, marker, RegExpTT.GT);
@@ -526,13 +527,6 @@ public class RegExpParser implements PsiParser, LightPsiParser {
marker.done(RegExpElementTypes.NAMED_GROUP_REF);
}
private static void parseNumberedGroupRef(PsiBuilder builder, PsiBuilder.Marker marker) {
builder.advanceLexer();
checkMatches(builder, RegExpTT.NUMBER, RegExpBundle.message("parse.error.group.number.expected"));
checkMatches(builder, RegExpTT.GROUP_END, RegExpBundle.message("parse.error.unclosed.group.reference"));
marker.done(RegExpElementTypes.NAMED_GROUP_REF);
}
private static boolean isLetter(CharSequence text) {
if (text == null) return false;
assert text.length() == 1;
@@ -74,8 +74,7 @@ final class RegExpEquivalenceChecker {
private static boolean areNamedGroupRefsEquivalent(RegExpNamedGroupRef namedGroupRef1, RegExpNamedGroupRef namedGroupRef2) {
final String name = namedGroupRef1.getGroupName();
if (name != null) return name.equals(namedGroupRef2.getGroupName());
return namedGroupRef1.getText().equals(namedGroupRef2.getText());
return name != null && name.equals(namedGroupRef2.getGroupName());
}
private static boolean areIntersectionsEquivalent(RegExpIntersection intersection1, RegExpIntersection intersection2) {
@@ -12,6 +12,5 @@ public interface RegExpNamedGroupRef extends RegExpAtom {
boolean isPythonNamedGroupRef();
boolean isRubyNamedGroupRef();
boolean isPcreNumberedGroupRef();
boolean isNamedGroupRef();
}
@@ -52,9 +52,17 @@ public class RegExpBackrefImpl extends RegExpElementImpl implements RegExpBackre
return node.getText();
}
final String s = getUnescapedText();
assert s.charAt(0) == '\\';
boolean pcreBackReference = s.charAt(1) == 'g';
return pcreBackReference ? getPcreBackrefIndexNumberText(s.substring(2)) : s.substring(1);
boolean pcreNumberedGroup = s.startsWith("(?");
assert s.charAt(0) == '\\' || pcreNumberedGroup;
return pcreBackReference ? getPcreBackrefIndexNumberText(s.substring(2)) :
pcreNumberedGroup ? getPcreNumberedGroupIndexNumberText(s.substring(2)) :
s.substring(1);
}
@NotNull
private static String getPcreNumberedGroupIndexNumberText(String s) {
return trimEnd(s, ")");
}
@NotNull
@@ -36,18 +36,6 @@ public class RegExpNamedGroupRefImpl extends RegExpElementImpl implements RegExp
@Override
@Nullable
public RegExpGroup resolve() {
if (isPcreNumberedGroupRef()) {
Integer groupNumber;
ASTNode node = getNode().findChildByType(RegExpTT.NUMBER);
if (node == null) return null;
try {
groupNumber = Integer.parseInt(node.getText());
}
catch (NumberFormatException e) {
groupNumber = null;
}
return groupNumber == null ? null : resolveNumberedGroupRef(groupNumber, getContainingFile());
}
final String groupName = getGroupName();
return groupName == null ? null : resolve(groupName, getContainingFile());
}
@@ -59,19 +47,6 @@ public class RegExpNamedGroupRefImpl extends RegExpElementImpl implements RegExp
.first();
}
@Nullable
static RegExpGroup resolveNumberedGroupRef(int groupNumber, PsiFile file) {
if (groupNumber < 1) return null;
List<RegExpGroup> groups = SyntaxTraverser.psiTraverser(file)
.filter(RegExpGroup.class)
.filter(RegExpGroup::isCapturing)
.toList();
if (groups.size() < groupNumber) {
return null;
}
return groups.get(groupNumber - 1);
}
@Override
@Nullable
public String getGroupName() {
@@ -90,11 +65,6 @@ public class RegExpNamedGroupRefImpl extends RegExpElementImpl implements RegExp
return node.findChildByType(RUBY_GROUP_REF_TOKENS) != null;
}
@Override
public boolean isPcreNumberedGroupRef() {
return getNode().findChildByType(RegExpTT.PCRE_NUMBERED_GROUP_REF) != null;
}
@Override
public boolean isNamedGroupRef() {
return getNode().findChildByType(RegExpTT.RUBY_NAMED_GROUP_REF) != null;
@@ -452,11 +452,11 @@ BACK_REFERENCES_GROUP = [1-9][0-9]{0,2}
"(?<" { yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_NAMED_GROUP; }
"(?'" { yybegin(QUOTED_NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_QUOTED_NAMED_GROUP; }
"(?"[+-]? / [:digit:] { if (allowPcreNumberedGroupRef) {
yybegin(PCRE_NUMBERED_GROUP);
return RegExpTT.PCRE_NUMBERED_GROUP_REF;
}
else { yypushback(yylength() - 2); yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; }}
"(?"[+-]?{BACK_REFERENCES_GROUP}")" { if (allowPcreNumberedGroupRef) {
yybegin(PCRE_NUMBERED_GROUP);
return RegExpTT.PCRE_NUMBERED_GROUP_REF;
}
else { yypushback(yylength() - 2); yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; }}
"(?" { yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; }
}
@@ -308,7 +308,7 @@ public final class RegExpAnnotator extends RegExpElementVisitor implements Annot
.create();
return;
}
if (!groupRef.isPcreNumberedGroupRef() && groupRef.getGroupName() == null) {
if (groupRef.getGroupName() == null) {
return;
}
final RegExpGroup group = groupRef.resolve();
@@ -318,13 +318,6 @@ public final class RegExpAnnotator extends RegExpElementVisitor implements Annot
myHolder.newAnnotation(HighlightSeverity.ERROR, RegExpBundle.message("error.unresolved.named.group.reference")).range(node)
.highlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL).create();
}
else {
final ASTNode number = groupRef.getNode().findChildByType(RegExpTT.NUMBER);
if (number != null) {
myHolder.newAnnotation(HighlightSeverity.ERROR, RegExpBundle.message("error.unresolved.numbered.group.reference")).range(number)
.highlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL).create();
}
}
}
else if (PsiTreeUtil.isAncestor(group, groupRef, true)) {
myHolder.newAnnotation(HighlightSeverity.WARNING,
@@ -4,6 +4,4 @@ CHARACTER ('b')
CHARACTER ('c')
CHARACTER ('d')
GROUP_END (')')
PCRE_NUMBERED_GROUP_REF ('(?')
NUMBER ('1')
GROUP_END (')')
PCRE_NUMBERED_GROUP_REF ('(?1)')