diff --git a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java
index c4c4f4d9a02a..e2afe5aa8493 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.4.3 on 4/26/14 1:54 PM */
+/* The following code was generated by JFlex 1.4.3 on 4/29/14 2:27 PM */
/* It's an automatically generated code. Do not modify it. */
package org.intellij.lang.regexp;
@@ -15,8 +15,8 @@ import com.intellij.psi.StringEscapesTokenTypes;
/**
* This class is a scanner generated by
* JFlex 1.4.3
- * on 4/26/14 1:54 PM from the specification file
- * /Users/ignatov/src/ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex
+ * on 4/29/14 2:27 PM from the specification file
+ * C:/idea_src/ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex
*/
class _RegExLexer implements FlexLexer {
/** initial size of the lookahead buffer */
@@ -377,6 +377,7 @@ class _RegExLexer implements FlexLexer {
private boolean allowNestedCharacterClasses;
private boolean allowOctalNoLeadingZero;
private boolean allowHexDigitClass;
+ private boolean allowEmptyCharacterClass;
_RegExLexer(EnumSet capabilities) {
this((java.io.Reader)null);
@@ -386,6 +387,7 @@ class _RegExLexer implements FlexLexer {
this.allowOctalNoLeadingZero = capabilities.contains(RegExpCapability.OCTAL_NO_LEADING_ZERO);
this.commentMode = capabilities.contains(RegExpCapability.COMMENT_MODE);
this.allowHexDigitClass = capabilities.contains(RegExpCapability.ALLOW_HEX_DIGIT_CLASS);
+ this.allowEmptyCharacterClass = capabilities.contains(RegExpCapability.ALLOW_EMPTY_CHARACTER_CLASS);
}
private void yypushstate(int state) {
@@ -787,6 +789,18 @@ class _RegExLexer implements FlexLexer {
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP;
}
case 107: break;
+ case 65:
+ // lookahead expression with fixed base length
+ zzMarkedPos = zzStartRead + 1;
+ { if (allowEmptyCharacterClass) {
+ yypushstate(CLASS1PY);
+ }
+ else {
+ yypushstate(CLASS2);
+ }
+ return RegExpTT.CLASS_BEGIN;
+ }
+ case 108: break;
case 28:
{ if (allowNestedCharacterClasses) {
yypushstate(CLASS2);
@@ -794,87 +808,75 @@ class _RegExLexer implements FlexLexer {
}
return RegExpTT.CHARACTER;
}
- case 108: break;
+ case 109: break;
case 19:
{ if (commentMode) { yypushstate(COMMENT); return RegExpTT.COMMENT; } else return RegExpTT.CHARACTER;
}
- case 109: break;
+ case 110: break;
case 50:
{ yypushstate(PROP); return RegExpTT.PROPERTY;
}
- case 110: break;
+ case 111: break;
case 8:
{ yypushstate(CLASS2);
return RegExpTT.CLASS_BEGIN;
}
- case 111: break;
+ case 112: break;
case 70:
{ return RegExpTT.POS_LOOKBEHIND;
}
- case 112: break;
+ case 113: break;
case 42:
{ return yystate() != CLASS2 ? RegExpTT.BACKREF : RegExpTT.ESC_CHARACTER;
}
- case 113: break;
+ case 114: break;
case 72:
{ return RegExpTT.HEX_CHAR;
}
- case 114: break;
+ case 115: break;
case 1:
{ handleOptions(); return RegExpTT.OPTIONS_ON;
}
- case 115: break;
+ case 116: break;
case 58:
{ return allowNestedCharacterClasses ? RegExpTT.ANDAND : RegExpTT.CHARACTER;
}
- case 116: break;
+ case 117: break;
case 2:
{ yypopstate(); return RegExpTT.COMMENT;
}
- case 117: break;
+ case 118: break;
case 17:
{ return RegExpTT.MINUS;
}
- case 118: break;
+ case 119: break;
case 46:
{ return RegExpTT.ESC_CTRL_CHARACTER;
}
- case 119: break;
+ case 120: break;
case 32:
{ yypopstate(); yypushstate(EMBRACED); return RegExpTT.LBRACE;
}
- case 120: break;
+ case 121: break;
case 13:
{ return RegExpTT.QUEST;
}
- case 121: break;
+ case 122: break;
case 54:
{ return (allowHexDigitClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN);
}
- case 122: break;
+ case 123: break;
case 15:
{ return RegExpTT.PLUS;
}
- case 123: break;
+ case 124: break;
case 66:
{ return RegExpTT.OCT_CHAR;
}
- case 124: break;
+ case 125: break;
case 38:
{ yybegin(YYINITIAL); return RegExpTT.QUOTE;
}
- case 125: break;
- case 65:
- // lookahead expression with fixed base length
- zzMarkedPos = zzStartRead + 1;
- { if (!allowNestedCharacterClasses) {
- yypushstate(CLASS1PY);
- }
- else {
- yypushstate(CLASS2);
- }
- return RegExpTT.CLASS_BEGIN;
- }
case 126: break;
case 20:
{ if (allowDanglingMetacharacters) {
diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java
index 7f92413b8f57..81db82a112a6 100644
--- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java
+++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java
@@ -26,4 +26,5 @@ public enum RegExpCapability {
OMIT_NUMBERS_IN_QUANTIFIERS,
COMMENT_MODE,
ALLOW_HEX_DIGIT_CLASS,
+ ALLOW_EMPTY_CHARACTER_CLASS,
}
diff --git a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex
index 88e6b00318d0..1737148b6cda 100644
--- a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex
+++ b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex
@@ -32,6 +32,7 @@ import com.intellij.psi.StringEscapesTokenTypes;
private boolean allowNestedCharacterClasses;
private boolean allowOctalNoLeadingZero;
private boolean allowHexDigitClass;
+ private boolean allowEmptyCharacterClass;
_RegExLexer(EnumSet capabilities) {
this((java.io.Reader)null);
@@ -41,6 +42,7 @@ import com.intellij.psi.StringEscapesTokenTypes;
this.allowOctalNoLeadingZero = capabilities.contains(RegExpCapability.OCTAL_NO_LEADING_ZERO);
this.commentMode = capabilities.contains(RegExpCapability.COMMENT_MODE);
this.allowHexDigitClass = capabilities.contains(RegExpCapability.ALLOW_HEX_DIGIT_CLASS);
+ this.allowEmptyCharacterClass = capabilities.contains(RegExpCapability.ALLOW_EMPTY_CHARACTER_CLASS);
}
private void yypushstate(int state) {
@@ -217,7 +219,7 @@ HEX_CHAR=[0-9a-fA-F]
return RegExpTT.CLASS_BEGIN; }
/* Python understands that, Java doesn't */
-{LBRACKET} / "^" {RBRACKET} { if (!allowNestedCharacterClasses) {
+{LBRACKET} / "^" {RBRACKET} { if (allowEmptyCharacterClass) {
yypushstate(CLASS1PY);
}
else {
diff --git a/plugins/IntelliLang/src/META-INF/intellilang-js-support.xml b/plugins/IntelliLang/src/META-INF/intellilang-js-support.xml
index 33f46529f212..f24ab7aeeeb3 100644
--- a/plugins/IntelliLang/src/META-INF/intellilang-js-support.xml
+++ b/plugins/IntelliLang/src/META-INF/intellilang-js-support.xml
@@ -8,5 +8,8 @@
+
+
\ No newline at end of file
diff --git a/python/src/com/jetbrains/python/codeInsight/regexp/PythonRegexpParserDefinition.java b/python/src/com/jetbrains/python/codeInsight/regexp/PythonRegexpParserDefinition.java
index 3fd5a0752986..8cb83a8d0c96 100644
--- a/python/src/com/jetbrains/python/codeInsight/regexp/PythonRegexpParserDefinition.java
+++ b/python/src/com/jetbrains/python/codeInsight/regexp/PythonRegexpParserDefinition.java
@@ -33,7 +33,8 @@ public class PythonRegexpParserDefinition extends RegExpParserDefinition {
public static final IFileElementType PYTHON_REGEXP_FILE = new IFileElementType("PYTHON_REGEXP_FILE", PythonRegexpLanguage.INSTANCE);
protected final EnumSet CAPABILITIES = EnumSet.of(RegExpCapability.DANGLING_METACHARACTERS,
RegExpCapability.OCTAL_NO_LEADING_ZERO,
- RegExpCapability.OMIT_NUMBERS_IN_QUANTIFIERS);
+ RegExpCapability.OMIT_NUMBERS_IN_QUANTIFIERS,
+ RegExpCapability.ALLOW_EMPTY_CHARACTER_CLASS);
@NotNull
public Lexer createLexer(Project project) {