diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java index ff3de43a5fde..7628f30aae1d 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java @@ -5,4 +5,5 @@ package org.intellij.lang.regexp; */ public interface RegExpLanguageHost { boolean characterNeedsEscaping(char c); + boolean supportsPerl5EmbeddedComments(); } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/_RegExLexer.java b/RegExpSupport/src/org/intellij/lang/regexp/_RegExLexer.java index 74b7fc2f7523..908f634854cf 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/_RegExLexer.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/_RegExLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.1 on 13.03.09 16:25 */ +/* The following code was generated by JFlex 1.4.1 on 23.09.09 18:11 */ /* It's an automatically generated code. Do not modify it. */ package org.intellij.lang.regexp; @@ -14,8 +14,8 @@ import com.intellij.psi.StringEscapesTokenTypes; /** * This class is a scanner generated by * JFlex 1.4.1 - * on 13.03.09 16:25 from the specification file - * C:/work/java/idea-plugins/RegExpSupport/Trunk/src/org/intellij/lang/regexp/regexp-lexer.flex + * on 23.09.09 18:11 from the specification file + * C:/JetBrains/IDEA/svnPlugins/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex */ class _RegExLexer implements FlexLexer { /** initial size of the lookahead buffer */ @@ -121,12 +121,12 @@ class _RegExLexer implements FlexLexer { "\1\36\1\35\1\37\1\40\1\1\1\41\1\42\1\2"+ "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52"+ "\1\53\2\54\1\55\1\11\1\56\1\57\1\60\1\61"+ - "\1\62\1\63\1\64\1\65\1\0\1\66\1\67\2\57"+ - "\2\60\1\70\1\71\1\66\1\57\1\72\2\60\1\66"+ - "\3\60\1\73"; + "\1\62\1\63\1\64\1\65\2\0\1\66\1\67\2\57"+ + "\2\60\1\70\1\71\1\0\1\66\1\57\1\72\2\60"+ + "\1\73\1\66\3\60\1\74"; private static int [] zzUnpackAction() { - int [] result = new int[85]; + int [] result = new int[88]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -159,12 +159,12 @@ class _RegExLexer implements FlexLexer { "\0\u0188\0\u0310\0\u0341\0\u0188\0\u0188\0\u0372\0\u0188\0\u0188"+ "\0\u03a3\0\u03d4\0\u0188\0\u0188\0\u0188\0\u0188\0\u0188\0\u0405"+ "\0\u0188\0\u0188\0\u0188\0\u0436\0\u0467\0\u0188\0\u0188\0\u0188"+ - "\0\u0188\0\u0188\0\u0498\0\u04c9\0\u0188\0\u04fa\0\u052b\0\u055c"+ - "\0\u058d\0\u0188\0\u0188\0\u05be\0\u0188\0\u0188\0\u05ef\0\u0620"+ - "\0\u0188\0\u0651\0\u0682\0\u0188\0\u0188"; + "\0\u0188\0\u0188\0\u0498\0\u04c9\0\u04fa\0\u0188\0\u052b\0\u055c"+ + "\0\u058d\0\u05be\0\u0188\0\u0188\0\u05ef\0\u0620\0\u0188\0\u0188"+ + "\0\u0651\0\u0682\0\u0188\0\u0188\0\u06b3\0\u06e4\0\u0188\0\u0188"; private static int [] zzUnpackRowMap() { - int [] result = new int[85]; + int [] result = new int[88]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -205,22 +205,23 @@ class _RegExLexer implements FlexLexer { "\1\34\3\0\1\34\14\0\2\36\17\0\20\36\1\0"+ "\3\36\62\0\1\77\33\0\17\52\2\0\1\52\37\0"+ "\17\53\2\0\1\53\66\0\2\100\1\101\1\102\1\103"+ - "\4\0\2\61\36\0\1\61\21\0\1\104\36\0\1\104"+ - "\17\0\61\105\1\106\2\107\20\106\2\107\2\106\3\107"+ - "\2\106\1\107\1\106\1\107\2\106\1\107\17\106\1\110"+ - "\2\111\20\110\2\111\2\110\3\111\2\110\1\111\1\110"+ - "\1\111\2\110\1\111\17\110\53\0\1\112\1\113\6\0"+ - "\1\114\36\0\1\114\17\0\62\115\2\116\20\115\2\116"+ - "\2\115\3\116\2\115\1\116\1\115\1\116\2\115\1\116"+ - "\17\115\62\117\2\120\20\117\2\120\2\117\3\120\2\117"+ - "\1\120\1\117\1\120\2\117\1\120\17\117\2\0\1\121"+ - "\36\0\1\121\17\0\62\122\2\123\20\122\2\123\2\122"+ - "\3\123\2\122\1\123\1\122\1\123\2\122\1\123\17\122"+ - "\62\124\2\125\20\124\2\125\2\124\3\125\2\124\1\125"+ - "\1\124\1\125\2\124\1\125\17\124"; + "\1\104\3\0\2\61\36\0\1\61\21\0\1\105\36\0"+ + "\1\105\17\0\61\106\1\107\2\110\20\107\2\110\2\107"+ + "\3\110\2\107\1\110\1\107\1\110\2\107\1\110\17\107"+ + "\1\111\2\112\20\111\2\112\2\111\3\112\2\111\1\112"+ + "\1\111\1\112\2\111\1\112\17\111\53\0\1\113\1\114"+ + "\4\0\5\115\1\0\53\115\2\0\1\116\36\0\1\116"+ + "\17\0\62\117\2\120\20\117\2\120\2\117\3\120\2\117"+ + "\1\120\1\117\1\120\2\117\1\120\17\117\62\121\2\122"+ + "\20\121\2\122\2\121\3\122\2\121\1\122\1\121\1\122"+ + "\2\121\1\122\17\121\5\115\1\123\53\115\2\0\1\124"+ + "\36\0\1\124\17\0\62\125\2\126\20\125\2\126\2\125"+ + "\3\126\2\125\1\126\1\125\1\126\2\125\1\126\17\125"+ + "\62\127\2\130\20\127\2\130\2\127\3\130\2\127\1\130"+ + "\1\127\1\130\2\127\1\130\17\127"; private static int [] zzUnpackTrans() { - int [] result = new int[1715]; + int [] result = new int[1813]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -264,11 +265,12 @@ class _RegExLexer implements FlexLexer { "\6\0\2\1\2\11\1\1\2\11\1\3\1\1\12\11"+ "\1\1\1\11\1\1\1\11\1\1\5\11\1\1\2\11"+ "\1\3\2\11\2\1\2\11\1\1\1\15\1\11\2\1"+ - "\5\11\1\1\3\11\2\1\5\11\1\0\1\1\1\11"+ - "\4\1\2\11\1\1\2\11\2\1\1\11\2\1\2\11"; + "\5\11\1\1\3\11\2\1\5\11\2\0\1\1\1\11"+ + "\4\1\2\11\1\0\1\1\2\11\2\1\2\11\2\1"+ + "\2\11"; private static int [] zzUnpackAttribute() { - int [] result = new int[85]; + int [] result = new int[88]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -413,7 +415,14 @@ class _RegExLexer implements FlexLexer { // For Demetra compatibility public void reset(CharSequence buffer, int initialState){ - reset(buffer, 0, buffer.length(), initialState); + zzBuffer = buffer; + zzBufferArray = null; + zzCurrentPos = zzMarkedPos = zzStartRead = 0; + zzPushbackPos = 0; + zzAtEOF = false; + zzAtBOL = true; + zzEndRead = buffer.length(); + yybegin(initialState); } /** @@ -625,239 +634,243 @@ class _RegExLexer implements FlexLexer { case 7: { if (yystate() != CLASS2) yypushstate(EMBRACED); return RegExpTT.LBRACE; } - case 60: break; + case 61: break; case 6: { return RegExpTT.GROUP_END; } - case 61: break; + case 62: break; case 36: { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } - case 62: break; + case 63: break; case 14: { return RegExpTT.STAR; } - case 63: break; + case 64: break; case 40: { return RegExpTT.ESC_CHARACTER; } - case 64: break; + case 65: break; case 28: { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.ESC_CHARACTER; } - case 65: break; + case 66: break; case 37: { return RegExpTT.REDUNDANT_ESCAPE; } - case 66: break; + case 67: break; case 24: { return RegExpTT.COMMA; } - case 67: break; + case 68: break; case 56: { return RegExpTT.POS_LOOKBEHIND; } - case 68: break; + case 69: break; case 39: { return RegExpTT.BAD_OCT_VALUE; } - case 69: break; + case 70: break; case 10: { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER; } - case 70: break; + case 71: break; case 30: { yypopstate(); yypushstate(EMBRACED); return RegExpTT.LBRACE; } - case 71: break; + case 72: break; case 48: { return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN; } - case 72: break; + case 73: break; case 57: { return RegExpTT.NEG_LOOKBEHIND; } - case 73: break; - case 59: + case 74: break; + case 60: { return RegExpTT.UNICODE_CHAR; } - case 74: break; + case 75: break; case 55: { if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL; } - case 75: break; + case 76: break; case 35: { yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; } - case 76: break; + case 77: break; case 12: { return RegExpTT.DOLLAR; } - case 77: break; + case 78: break; case 49: { yypopstate(); return RegExpTT.QUOTE_END; } - case 78: break; + case 79: break; case 52: { return RegExpTT.POS_LOOKAHEAD; } - case 79: break; + case 80: break; case 22: { yypopstate(); return RegExpTT.RBRACE; } - case 80: break; + case 81: break; case 3: { return RegExpTT.CHARACTER; } - case 81: break; + case 82: break; case 53: { return RegExpTT.NEG_LOOKAHEAD; } - case 82: break; + case 83: break; case 41: { return RegExpTT.ESC_CTRL_CHARACTER; } - case 83: break; + case 84: break; case 23: { return RegExpTT.NAME; } - case 84: break; + case 85: break; case 50: { return RegExpTT.ANDAND; } - case 85: break; + case 86: break; case 13: { return RegExpTT.QUEST; } - case 86: break; + case 87: break; case 43: { return RegExpTT.CHAR_CLASS; } - case 87: break; + case 88: break; case 17: { return RegExpTT.MINUS; } - case 88: break; + case 89: break; + case 59: + { return RegExpTT.COMMENT; + } + case 90: break; case 38: { return yystate() != CLASS2 ? RegExpTT.BACKREF : RegExpTT.ESC_CHARACTER; } - case 89: break; + case 91: break; case 16: { return RegExpTT.UNION; } - case 90: break; + case 92: break; case 44: { if (xmlSchemaMode) return RegExpTT.CHAR_CLASS; else return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; } - case 91: break; + case 93: break; case 54: { return RegExpTT.OCT_CHAR; } - case 92: break; + case 94: break; case 4: { return RegExpTT.DOT; } - case 93: break; + case 95: break; case 32: { yybegin(YYINITIAL); return RegExpTT.GROUP_END; } - case 94: break; + case 96: break; case 21: { return RegExpTT.NUMBER; } - case 95: break; + case 97: break; case 45: { yypushstate(PROP); return RegExpTT.PROPERTY; } - case 96: break; + case 98: break; case 19: { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CHARACTER; } - case 97: break; + case 99: break; case 33: { handleOptions(); return RegExpTT.OPTIONS_OFF; } - case 98: break; + case 100: break; case 34: { yybegin(YYINITIAL); return RegExpTT.COLON; } - case 99: break; + case 101: break; case 25: { assert false : yytext(); } - case 100: break; + case 102: break; case 27: { yypopstate(); return RegExpTT.CLASS_END; } - case 101: break; + case 103: break; case 11: { return RegExpTT.CARET; } - case 102: break; + case 104: break; case 1: { handleOptions(); return RegExpTT.OPTIONS_ON; } - case 103: break; + case 105: break; case 29: { yypopstate(); yypushback(1); } - case 104: break; + case 106: break; case 42: { return yystate() != CLASS2 ? RegExpTT.BOUNDARY : RegExpTT.ESC_CHARACTER; } - case 105: break; + case 107: break; case 18: { if (commentMode) { yypushstate(COMMENT); return RegExpTT.COMMENT; } else return RegExpTT.CHARACTER; } - case 106: break; + case 108: break; case 58: { return RegExpTT.HEX_CHAR; } - case 107: break; + case 109: break; case 20: { return RegExpTT.BAD_CHARACTER; } - case 108: break; + case 110: break; case 5: { return RegExpTT.GROUP_BEGIN; } - case 109: break; + case 111: break; case 8: { yypushstate(CLASS2); return RegExpTT.CLASS_BEGIN; } - case 110: break; + case 112: break; case 51: { return RegExpTT.NON_CAPT_GROUP; } - case 111: break; + case 113: break; case 9: { return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; } - case 112: break; + case 114: break; case 47: { return RegExpTT.BAD_HEX_VALUE; } - case 113: break; + case 115: break; case 2: { yypopstate(); return RegExpTT.COMMENT; } - case 114: break; + case 116: break; case 46: { yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN; } - case 115: break; + case 117: break; case 26: { yybegin(CLASS2); return RegExpTT.CHARACTER; } - case 116: break; + case 118: break; case 15: { return RegExpTT.PLUS; } - case 117: break; + case 119: break; case 31: { yybegin(YYINITIAL); return RegExpTT.BAD_CHARACTER; } - case 118: break; + case 120: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex index c00164bcbf14..d2784722c228 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex +++ b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex @@ -195,6 +195,7 @@ HEX_CHAR=[0-9a-fA-F] "(?!" { return RegExpTT.NEG_LOOKAHEAD; } "(?<=" { return RegExpTT.POS_LOOKBEHIND; } "(? 0) {