From 9d313c6be5360f8cc8d4814c7dfa0c073cfb2857 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 26 Jan 2010 15:59:46 +0300 Subject: [PATCH 1/5] support multiple targets in 'with' statement (Python 3.1 language feature) --- .../com/jetbrains/python/PyElementTypes.java | 2 + .../python/parsing/StatementParsing.java | 17 +++++-- .../jetbrains/python/psi/LanguageLevel.java | 3 +- .../com/jetbrains/python/psi/PyWithItem.java | 8 ++++ .../python/psi/impl/PyWithItemImpl.java | 21 ++++++++ .../python/psi/impl/PyWithStatementImpl.java | 29 ++++++----- python/testData/psi/WithStatement.txt | 15 +++--- python/testData/psi/WithStatement2.txt | 48 ++++++++++--------- python/testData/psi/WithStatement26.txt | 15 +++--- python/testData/psi/WithStatement31.py | 1 + python/testData/psi/WithStatement31.txt | 27 +++++++++++ .../com/jetbrains/python/PyResolveTest.java | 11 ++--- .../jetbrains/python/PythonParsingTest.java | 4 ++ .../python/fixtures/PyResolveTestCase.java | 3 +- 14 files changed, 139 insertions(+), 65 deletions(-) create mode 100644 python/src/com/jetbrains/python/psi/PyWithItem.java create mode 100644 python/src/com/jetbrains/python/psi/impl/PyWithItemImpl.java create mode 100644 python/testData/psi/WithStatement31.py create mode 100644 python/testData/psi/WithStatement31.txt diff --git a/python/src/com/jetbrains/python/PyElementTypes.java b/python/src/com/jetbrains/python/PyElementTypes.java index 4a7d6908f436..5ebdeeb509b2 100644 --- a/python/src/com/jetbrains/python/PyElementTypes.java +++ b/python/src/com/jetbrains/python/PyElementTypes.java @@ -58,6 +58,8 @@ public interface PyElementTypes { PyElementType NONLOCAL_STATEMENT = new PyElementType("NONLOCAL_STATEMENT", PyNonlocalStatementImpl.class); + PyElementType WITH_ITEM = new PyElementType("WITH_ITEM", PyWithItemImpl.class); + TokenSet STATEMENTS = TokenSet.create(EXPRESSION_STATEMENT, ASSIGNMENT_STATEMENT, AUG_ASSIGNMENT_STATEMENT, ASSERT_STATEMENT, BREAK_STATEMENT, CONTINUE_STATEMENT, DEL_STATEMENT, EXEC_STATEMENT, FOR_STATEMENT, FROM_IMPORT_STATEMENT, GLOBAL_STATEMENT, IMPORT_STATEMENT, IF_STATEMENT, PASS_STATEMENT, diff --git a/python/src/com/jetbrains/python/parsing/StatementParsing.java b/python/src/com/jetbrains/python/parsing/StatementParsing.java index bab1772d01ca..f097d5b0996e 100644 --- a/python/src/com/jetbrains/python/parsing/StatementParsing.java +++ b/python/src/com/jetbrains/python/parsing/StatementParsing.java @@ -654,11 +654,18 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper { assertCurrentToken(PyTokenTypes.WITH_KEYWORD); final PsiBuilder.Marker statement = myBuilder.mark(); myBuilder.advanceLexer(); - getExpressionParser().parseExpression(); - myExpectAsKeyword = true; - if (myBuilder.getTokenType() == PyTokenTypes.AS_KEYWORD) { - myBuilder.advanceLexer(); - getExpressionParser().parseExpression(true, true); // 'as' is followed by a target + while(true) { + PsiBuilder.Marker withItem = myBuilder.mark(); + getExpressionParser().parseExpression(); + myExpectAsKeyword = true; + if (myBuilder.getTokenType() == PyTokenTypes.AS_KEYWORD) { + myBuilder.advanceLexer(); + getExpressionParser().parseSingleExpression(true); // 'as' is followed by a target + } + withItem.done(PyElementTypes.WITH_ITEM); + if (!matchToken(PyTokenTypes.COMMA)) { + break; + } } checkMatches(PyTokenTypes.COLON, "colon expected"); parseSuite(); diff --git a/python/src/com/jetbrains/python/psi/LanguageLevel.java b/python/src/com/jetbrains/python/psi/LanguageLevel.java index 8bd116308fa3..8ecbeddfeb83 100644 --- a/python/src/com/jetbrains/python/psi/LanguageLevel.java +++ b/python/src/com/jetbrains/python/psi/LanguageLevel.java @@ -13,7 +13,8 @@ public enum LanguageLevel { PYTHON24(false, true, false), PYTHON25(false, true, false), PYTHON26(true, true, false), - PYTHON30(true, false, true); + PYTHON30(true, false, true), + PYTHON31(true, false, true); public static LanguageLevel getDefault() { return PYTHON26; diff --git a/python/src/com/jetbrains/python/psi/PyWithItem.java b/python/src/com/jetbrains/python/psi/PyWithItem.java new file mode 100644 index 000000000000..63e62b2427c8 --- /dev/null +++ b/python/src/com/jetbrains/python/psi/PyWithItem.java @@ -0,0 +1,8 @@ +package com.jetbrains.python.psi; + +/** + * @author yole + */ +public interface PyWithItem extends PyElement { + PyTargetExpression getTargetExpression(); +} diff --git a/python/src/com/jetbrains/python/psi/impl/PyWithItemImpl.java b/python/src/com/jetbrains/python/psi/impl/PyWithItemImpl.java new file mode 100644 index 000000000000..492f41b6c5cc --- /dev/null +++ b/python/src/com/jetbrains/python/psi/impl/PyWithItemImpl.java @@ -0,0 +1,21 @@ +package com.jetbrains.python.psi.impl; + +import com.intellij.lang.ASTNode; +import com.jetbrains.python.PyElementTypes; +import com.jetbrains.python.psi.PyTargetExpression; +import com.jetbrains.python.psi.PyWithItem; + +/** + * @author yole + */ +public class PyWithItemImpl extends PyElementImpl implements PyWithItem { + public PyWithItemImpl(ASTNode astNode) { + super(astNode); + } + + public PyTargetExpression getTargetExpression() { + final ASTNode asNameNode = getNode().findChildByType(PyElementTypes.TARGET_EXPRESSION); + if (asNameNode == null) return null; + return (PyTargetExpression)asNameNode.getPsi(); + } +} diff --git a/python/src/com/jetbrains/python/psi/impl/PyWithStatementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyWithStatementImpl.java index 166b2698d8d4..878ed85673c6 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyWithStatementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyWithStatementImpl.java @@ -2,11 +2,15 @@ package com.jetbrains.python.psi.impl; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; -import com.jetbrains.python.psi.*; -import com.jetbrains.python.PyElementTypes; -import com.jetbrains.python.toolbox.SingleIterable; +import com.intellij.psi.util.PsiTreeUtil; +import com.jetbrains.python.psi.PyElement; +import com.jetbrains.python.psi.PyElementVisitor; +import com.jetbrains.python.psi.PyWithItem; +import com.jetbrains.python.psi.PyWithStatement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; /** * @author yole @@ -20,17 +24,16 @@ public class PyWithStatementImpl extends PyElementImpl implements PyWithStatemen pyVisitor.visitPyWithStatement(this); } - @Nullable - public PyExpression getTargetExpression() { - final ASTNode asNameNode = getNode().findChildByType(PyElementTypes.TARGET_EXPRESSION); - if (asNameNode == null) return null; - return (PyTargetExpression)asNameNode.getPsi(); - } - @NotNull public Iterable iterateNames() { - PyElement ret = getTargetExpression(); - return new SingleIterable(ret); + PyWithItem[] items = PsiTreeUtil.getChildrenOfType(this, PyWithItem.class); + List result = new ArrayList(); + if (items != null) { + for (PyWithItem item : items) { + result.add(item.getTargetExpression()); + } + } + return result; } public PsiElement getElementNamed(final String the_name) { diff --git a/python/testData/psi/WithStatement.txt b/python/testData/psi/WithStatement.txt index 85ed7427adb9..f3628b5cf874 100644 --- a/python/testData/psi/WithStatement.txt +++ b/python/testData/psi/WithStatement.txt @@ -14,13 +14,14 @@ PyFile:WithStatement.py PyWithStatement PsiElement(Py:WITH_KEYWORD)('with') PsiWhiteSpace(' ') - PyReferenceExpression: x - PsiElement(Py:IDENTIFIER)('x') - PsiWhiteSpace(' ') - PsiElement(Py:AS_KEYWORD)('as') - PsiWhiteSpace(' ') - PyTargetExpression: y - PsiElement(Py:IDENTIFIER)('y') + PyWithItem + PyReferenceExpression: x + PsiElement(Py:IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(Py:AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PyTargetExpression: y + PsiElement(Py:IDENTIFIER)('y') PsiElement(Py:COLON)(':') PsiWhiteSpace('\n ') PyStatementList diff --git a/python/testData/psi/WithStatement2.txt b/python/testData/psi/WithStatement2.txt index 6f9f462b6129..221459a467ab 100644 --- a/python/testData/psi/WithStatement2.txt +++ b/python/testData/psi/WithStatement2.txt @@ -36,27 +36,28 @@ PyFile:WithStatement2.py PyWithStatement PsiElement(Py:WITH_KEYWORD)('with') PsiWhiteSpace(' ') - PySubscriptionExpression - PyCallExpression: x.y - PyReferenceExpression: y - PyReferenceExpression: x - PsiElement(Py:IDENTIFIER)('x') - PsiElement(Py:DOT)('.') - PsiElement(Py:IDENTIFIER)('y') - PyArgumentList - PsiElement(Py:LPAR)('(') - PyReferenceExpression: z - PsiElement(Py:IDENTIFIER)('z') - PsiElement(Py:RPAR)(')') - PsiElement(Py:LBRACKET)('[') - PyReferenceExpression: t - PsiElement(Py:IDENTIFIER)('t') - PsiElement(Py:RBRACKET)(']') - PsiWhiteSpace(' ') - PsiElement(Py:AS_KEYWORD)('as') - PsiWhiteSpace(' ') - PyTargetExpression: y - PsiElement(Py:IDENTIFIER)('y') + PyWithItem + PySubscriptionExpression + PyCallExpression: x.y + PyReferenceExpression: y + PyReferenceExpression: x + PsiElement(Py:IDENTIFIER)('x') + PsiElement(Py:DOT)('.') + PsiElement(Py:IDENTIFIER)('y') + PyArgumentList + PsiElement(Py:LPAR)('(') + PyReferenceExpression: z + PsiElement(Py:IDENTIFIER)('z') + PsiElement(Py:RPAR)(')') + PsiElement(Py:LBRACKET)('[') + PyReferenceExpression: t + PsiElement(Py:IDENTIFIER)('t') + PsiElement(Py:RBRACKET)(']') + PsiWhiteSpace(' ') + PsiElement(Py:AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PyTargetExpression: y + PsiElement(Py:IDENTIFIER)('y') PsiElement(Py:COLON)(':') PsiWhiteSpace(' ') PyStatementList @@ -67,9 +68,10 @@ PyFile:WithStatement2.py PsiWhiteSpace('\n') PyWithStatement PsiElement(Py:WITH_KEYWORD)('with') - PsiErrorElement:expression expected - PsiWhiteSpace(' ') + PyWithItem + PsiErrorElement:expression expected + PyStatementList PsiElement(Py:EQ)('=') PsiErrorElement:statement expected, found Py:EQ diff --git a/python/testData/psi/WithStatement26.txt b/python/testData/psi/WithStatement26.txt index 9835c548757f..50c7f43a174f 100644 --- a/python/testData/psi/WithStatement26.txt +++ b/python/testData/psi/WithStatement26.txt @@ -2,13 +2,14 @@ PyFile:WithStatement26.py PyWithStatement PsiElement(Py:WITH_KEYWORD)('with') PsiWhiteSpace(' ') - PyReferenceExpression: x - PsiElement(Py:IDENTIFIER)('x') - PsiWhiteSpace(' ') - PsiElement(Py:AS_KEYWORD)('as') - PsiWhiteSpace(' ') - PyTargetExpression: y - PsiElement(Py:IDENTIFIER)('y') + PyWithItem + PyReferenceExpression: x + PsiElement(Py:IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(Py:AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PyTargetExpression: y + PsiElement(Py:IDENTIFIER)('y') PsiElement(Py:COLON)(':') PsiWhiteSpace('\n ') PyStatementList diff --git a/python/testData/psi/WithStatement31.py b/python/testData/psi/WithStatement31.py new file mode 100644 index 000000000000..08c497e8c7c9 --- /dev/null +++ b/python/testData/psi/WithStatement31.py @@ -0,0 +1 @@ +with x as a, y as b: pass diff --git a/python/testData/psi/WithStatement31.txt b/python/testData/psi/WithStatement31.txt new file mode 100644 index 000000000000..bb807e6841d3 --- /dev/null +++ b/python/testData/psi/WithStatement31.txt @@ -0,0 +1,27 @@ +PyFile:WithStatement31.py + PyWithStatement + PsiElement(Py:WITH_KEYWORD)('with') + PsiWhiteSpace(' ') + PyWithItem + PyReferenceExpression: x + PsiElement(Py:IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(Py:AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PyTargetExpression: a + PsiElement(Py:IDENTIFIER)('a') + PsiElement(Py:COMMA)(',') + PsiWhiteSpace(' ') + PyWithItem + PyReferenceExpression: y + PsiElement(Py:IDENTIFIER)('y') + PsiWhiteSpace(' ') + PsiElement(Py:AS_KEYWORD)('as') + PsiWhiteSpace(' ') + PyTargetExpression: b + PsiElement(Py:IDENTIFIER)('b') + PsiElement(Py:COLON)(':') + PsiWhiteSpace(' ') + PyStatementList + PyPassStatement + PsiElement(Py:PASS_KEYWORD)('pass') \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyResolveTest.java b/python/testSrc/com/jetbrains/python/PyResolveTest.java index 4e136d7556f7..531c6072f81f 100644 --- a/python/testSrc/com/jetbrains/python/PyResolveTest.java +++ b/python/testSrc/com/jetbrains/python/PyResolveTest.java @@ -14,7 +14,7 @@ import com.jetbrains.python.psi.*; public class PyResolveTest extends PyResolveTestCase { private PsiElement resolve() throws Exception { - PsiReference ref = configureByFile(getTestName(false) + ".py"); + PsiReference ref = configureByFile("/resolve/" + getTestName(false) + ".py"); return ref.resolve(); } @@ -61,7 +61,7 @@ public class PyResolveTest extends PyResolveTestCase { // NOTE: maybe this test does not belong exactly here; still it's the best place currently. public void testComplexCallee() throws Exception { PsiElement targetElement = resolve(); - PyExpression assigned = ((PyAssignmentStatement) targetElement.getContext()).getAssignedValue(); + PyExpression assigned = ((PyAssignmentStatement)targetElement.getContext()).getAssignedValue(); assertTrue(assigned instanceof PyCallExpression); PsiElement callee = ((PyCallExpression)assigned).getCallee(); assertTrue(callee instanceof PySubscriptionExpression); @@ -179,7 +179,7 @@ public class PyResolveTest extends PyResolveTestCase { public void testWithStatement() throws Exception { PsiElement targetElement = resolve(); assertTrue(targetElement instanceof PyTargetExpression); - assertTrue(targetElement.getParent() instanceof PyWithStatement); + assertTrue(targetElement.getParent() instanceof PyWithItem); } public void testTupleInExcept() throws Exception { @@ -211,9 +211,4 @@ public class PyResolveTest extends PyResolveTestCase { PsiElement targetElement = resolve(); assertNull(targetElement); } - - @Override - protected String getTestDataPath() { - return PythonTestUtil.getTestDataPath() + "/resolve/"; - } } \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonParsingTest.java b/python/testSrc/com/jetbrains/python/PythonParsingTest.java index 11bb50bf03b9..899b79218607 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -182,6 +182,10 @@ public class PythonParsingTest extends ParsingTestCase { doTest(LanguageLevel.PYTHON30); } + public void testWithStatement31() throws Exception { + doTest(LanguageLevel.PYTHON31); + } + public void doTest() throws Exception { doTest(LanguageLevel.PYTHON25); } diff --git a/python/testSrc/com/jetbrains/python/fixtures/PyResolveTestCase.java b/python/testSrc/com/jetbrains/python/fixtures/PyResolveTestCase.java index 4ceac0ac2e68..6e8b62964096 100644 --- a/python/testSrc/com/jetbrains/python/fixtures/PyResolveTestCase.java +++ b/python/testSrc/com/jetbrains/python/fixtures/PyResolveTestCase.java @@ -6,6 +6,7 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiReference; +import com.intellij.testFramework.TestDataFile; import org.jetbrains.annotations.NonNls; import java.io.File; @@ -17,7 +18,7 @@ import java.io.IOException; public abstract class PyResolveTestCase extends PyLightFixtureTestCase { @NonNls protected static final String MARKER = ""; - protected PsiReference configureByFile(final String filePath) throws Exception { + protected PsiReference configureByFile(@TestDataFile final String filePath) throws Exception { VirtualFile testDataRoot = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(new File(getTestDataPath())); final VirtualFile file = testDataRoot.findFileByRelativePath(filePath); assertNotNull(file); From 10a22ea110aadcf552ed56b4048f482690570446 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 26 Jan 2010 16:24:15 +0300 Subject: [PATCH 2/5] add //= to augmented assignment operators --- python/src/com/jetbrains/python/PyTokenTypes.java | 2 +- .../src/com/jetbrains/python/psi/PyFileElementType.java | 2 +- python/testData/psi/FloorDiv.py | 1 + python/testData/psi/FloorDiv.txt | 9 +++++++++ .../testSrc/com/jetbrains/python/PythonParsingTest.java | 4 ++++ 5 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 python/testData/psi/FloorDiv.py create mode 100644 python/testData/psi/FloorDiv.txt diff --git a/python/src/com/jetbrains/python/PyTokenTypes.java b/python/src/com/jetbrains/python/PyTokenTypes.java index aeec2cada9ed..c25d33085146 100644 --- a/python/src/com/jetbrains/python/PyTokenTypes.java +++ b/python/src/com/jetbrains/python/PyTokenTypes.java @@ -144,7 +144,7 @@ public class PyTokenTypes { public static final TokenSet CLOSE_BRACES = TokenSet.create(RBRACKET, RBRACE, RPAR); public static final TokenSet AUG_ASSIGN_OPERATIONS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, DIVEQ, - PERCEQ, EXPEQ, GTGTEQ, LTLTEQ, ANDEQ, OREQ, XOREQ); + PERCEQ, EXPEQ, GTGTEQ, LTLTEQ, ANDEQ, OREQ, XOREQ, FLOORDIVEQ); public static final PyElementType BACKSLASH = new PyElementType("BACKSLASH"); diff --git a/python/src/com/jetbrains/python/psi/PyFileElementType.java b/python/src/com/jetbrains/python/psi/PyFileElementType.java index 246fd69e50e9..859e350d4842 100644 --- a/python/src/com/jetbrains/python/psi/PyFileElementType.java +++ b/python/src/com/jetbrains/python/psi/PyFileElementType.java @@ -24,7 +24,7 @@ public class PyFileElementType extends IStubFileElementType { @Override public int getStubVersion() { - return 9; + return 10; } @Override diff --git a/python/testData/psi/FloorDiv.py b/python/testData/psi/FloorDiv.py new file mode 100644 index 000000000000..1204c35840b7 --- /dev/null +++ b/python/testData/psi/FloorDiv.py @@ -0,0 +1 @@ +a //= 2 diff --git a/python/testData/psi/FloorDiv.txt b/python/testData/psi/FloorDiv.txt new file mode 100644 index 000000000000..9b505fbfe7bf --- /dev/null +++ b/python/testData/psi/FloorDiv.txt @@ -0,0 +1,9 @@ +PyFile:FloorDiv.py + PyAugAssignmentStatement + PyReferenceExpression: a + PsiElement(Py:IDENTIFIER)('a') + PsiWhiteSpace(' ') + PsiElement(Py:FLOORDIVEQ)('//=') + PsiWhiteSpace(' ') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('2') \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonParsingTest.java b/python/testSrc/com/jetbrains/python/PythonParsingTest.java index 899b79218607..d8bff032ffaf 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -182,6 +182,10 @@ public class PythonParsingTest extends ParsingTestCase { doTest(LanguageLevel.PYTHON30); } + public void testFloorDiv() throws Exception { + doTest(); + } + public void testWithStatement31() throws Exception { doTest(LanguageLevel.PYTHON31); } From fe94cda134db96ecbe929728f703e28858d41f61 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 26 Jan 2010 16:30:01 +0300 Subject: [PATCH 3/5] one more fix for slice parsing, some cleanup --- .../python/parsing/ExpressionParsing.java | 15 ++++--- python/testData/psi/ExtendedSlices.py | 1 + python/testData/psi/ExtendedSlices.txt | 39 ++++++++++++++++++- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java index 65bb6a23ce82..c48ab86364d1 100644 --- a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java +++ b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java @@ -306,7 +306,7 @@ public class ExpressionParsing extends Parsing { else if (tokenType == PyTokenTypes.LBRACKET) { builder.advanceLexer(); PsiBuilder.Marker sliceItemStart = builder.mark(); - if (builder.getTokenType() == PyTokenTypes.COLON) { + if (atToken(PyTokenTypes.COLON)) { PsiBuilder.Marker sliceMarker = builder.mark(); sliceMarker.done(PyElementTypes.EMPTY_EXPRESSION); parseSliceEnd(expr, sliceItemStart); @@ -348,28 +348,27 @@ public class ExpressionParsing extends Parsing { private void parseSliceEnd(PsiBuilder.Marker exprStart, PsiBuilder.Marker sliceItemStart) { myBuilder.advanceLexer(); - if (myBuilder.getTokenType() == PyTokenTypes.RBRACKET) { + if (atToken(PyTokenTypes.RBRACKET)) { PsiBuilder.Marker sliceMarker = myBuilder.mark(); sliceMarker.done(PyElementTypes.EMPTY_EXPRESSION); sliceItemStart.done(PyElementTypes.SLICE_ITEM); - myBuilder.advanceLexer(); + nextToken(); exprStart.done(PyElementTypes.SLICE_EXPRESSION); return; } else { - if (myBuilder.getTokenType() == PyTokenTypes.COLON) { + if (atToken(PyTokenTypes.COLON)) { PsiBuilder.Marker sliceMarker = myBuilder.mark(); sliceMarker.done(PyElementTypes.EMPTY_EXPRESSION); } else { - parseExpression(); + parseSingleExpression(false); } if (!BRACKET_COLON_COMMA.contains(myBuilder.getTokenType())) { myBuilder.error(message("PARSE.expected.colon.or.rbracket")); } - if (myBuilder.getTokenType() == PyTokenTypes.COLON) { - myBuilder.advanceLexer(); - parseTestExpression(false, false); + if (matchToken(PyTokenTypes.COLON)) { + parseSingleExpression(false); } sliceItemStart.done(PyElementTypes.SLICE_ITEM); diff --git a/python/testData/psi/ExtendedSlices.py b/python/testData/psi/ExtendedSlices.py index 373066904be2..14d97e8357dd 100644 --- a/python/testData/psi/ExtendedSlices.py +++ b/python/testData/psi/ExtendedSlices.py @@ -3,3 +3,4 @@ d[1::2] d[1:2:] d[0:] d[1:2:3, 1:2:3] = 1 +d[:42, ..., :24:, 24, 100] diff --git a/python/testData/psi/ExtendedSlices.txt b/python/testData/psi/ExtendedSlices.txt index 1cc9c758c5e1..5c6cfe870022 100644 --- a/python/testData/psi/ExtendedSlices.txt +++ b/python/testData/psi/ExtendedSlices.txt @@ -86,4 +86,41 @@ PyFile:ExtendedSlices.py PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') PyNumericLiteralExpression - PsiElement(Py:INTEGER_LITERAL)('1') \ No newline at end of file + PsiElement(Py:INTEGER_LITERAL)('1') + PsiWhiteSpace('\n') + PyExpressionStatement + PySliceExpression + PyReferenceExpression: d + PsiElement(Py:IDENTIFIER)('d') + PsiElement(Py:LBRACKET)('[') + PySliceItem + PyEmptyExpression + + PsiElement(Py:COLON)(':') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PsiElement(Py:COMMA)(',') + PsiWhiteSpace(' ') + PySliceItem + PyNoneLiteralExpression + PsiElement(Py:DOT)('.') + PsiElement(Py:DOT)('.') + PsiElement(Py:DOT)('.') + PsiElement(Py:COMMA)(',') + PsiWhiteSpace(' ') + PySliceItem + PsiElement(Py:COLON)(':') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('24') + PsiElement(Py:COLON)(':') + PsiElement(Py:COMMA)(',') + PsiWhiteSpace(' ') + PySliceItem + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('24') + PsiElement(Py:COMMA)(',') + PsiWhiteSpace(' ') + PySliceItem + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('100') + PsiElement(Py:RBRACKET)(']') \ No newline at end of file From db709aa3e8a57376133d5d680be9c0a369bda72f Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 26 Jan 2010 16:54:21 +0300 Subject: [PATCH 4/5] support Unicode characters in identifiers (http://www.python.org/dev/peps/pep-3131/) --- .../com/jetbrains/python/lexer/Python.flex | 4 +- .../jetbrains/python/lexer/_PythonLexer.java | 687 +++++++++++------- 2 files changed, 423 insertions(+), 268 deletions(-) diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex index b7cc3b99a9b4..3b8a881dfa79 100644 --- a/python/src/com/jetbrains/python/lexer/Python.flex +++ b/python/src/com/jetbrains/python/lexer/Python.flex @@ -30,7 +30,9 @@ LONGINTEGER = {INTEGER}[Ll] END_OF_LINE_COMMENT="#"[^\r\n]* -IDENTIFIER = [a-zA-Z_][a-zA-Z0-9_]* +IDENT_START = [a-zA-Z_]|[:unicode_uppercase_letter:]|[:unicode_lowercase_letter:]|[:unicode_titlecase_letter:]|[:unicode_modifier_letter:]|[:unicode_other_letter:]|[:unicode_letter_number:] +IDENT_CONTINUE = [a-zA-Z0-9_]|[:unicode_uppercase_letter:]|[:unicode_lowercase_letter:]|[:unicode_titlecase_letter:]|[:unicode_modifier_letter:]|[:unicode_other_letter:]|[:unicode_letter_number:]|[:unicode_non_spacing_mark:]|[:unicode_combining_spacing_mark:]|[:unicode_decimal_digit_number:]|[:unicode_connector_punctuation:] +IDENTIFIER = {IDENT_START}{IDENT_CONTINUE}** FLOATNUMBER=({POINTFLOAT})|({EXPONENTFLOAT}) POINTFLOAT=(({INTPART})?{FRACTION})|({INTPART}\.) diff --git a/python/src/com/jetbrains/python/lexer/_PythonLexer.java b/python/src/com/jetbrains/python/lexer/_PythonLexer.java index e1d1e0e7aa8d..e576dceea979 100644 --- a/python/src/com/jetbrains/python/lexer/_PythonLexer.java +++ b/python/src/com/jetbrains/python/lexer/_PythonLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 25.01.10 20:44 */ +/* The following code was generated by JFlex 1.4.3 on 26.01.10 16:53 */ /* It's an automatically generated code. Do not modify it. */ package com.jetbrains.python.lexer; @@ -11,7 +11,7 @@ import com.jetbrains.python.PyTokenTypes; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 25.01.10 20:44 from the specification file + * on 26.01.10 16:53 from the specification file * C:/JetBrains/IDEA/tools/lexer/../../python/src/com/jetbrains/python/lexer/Python.flex */ class _PythonLexer implements FlexLexer { @@ -35,15 +35,173 @@ class _PythonLexer implements FlexLexer { * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = - "\11\0\1\30\1\13\1\0\1\31\1\13\22\0\1\27\1\71\1\25"+ - "\1\12\1\0\1\63\1\64\1\23\1\73\1\74\1\61\1\57\1\102"+ - "\1\17\1\15\1\62\1\1\1\5\6\3\2\2\1\103\1\105\1\70"+ - "\1\60\1\67\1\0\1\101\1\4\1\10\2\4\1\16\1\4\3\14"+ - "\1\20\1\14\1\11\2\14\1\7\2\14\1\22\2\14\1\21\2\14"+ - "\1\6\2\14\1\75\1\24\1\76\1\66\1\14\1\104\1\32\1\41"+ - "\1\43\1\34\1\36\1\47\1\54\1\56\1\26\1\20\1\42\1\44"+ - "\1\53\1\33\1\45\1\51\1\14\1\37\1\35\1\40\1\46\1\14"+ - "\1\55\1\50\1\52\1\14\1\77\1\65\1\100\1\72\uff81\0"; + "\11\0\1\41\1\13\1\0\1\42\1\13\22\0\1\40\1\72\1\36"+ + "\1\12\1\0\1\64\1\65\1\34\1\74\1\75\1\62\1\60\1\103"+ + "\1\26\1\23\1\63\1\1\1\5\6\3\2\2\1\104\1\106\1\71"+ + "\1\61\1\70\1\0\1\102\1\15\1\20\2\15\1\25\1\15\3\14"+ + "\1\27\1\14\1\21\2\14\1\17\2\14\1\32\2\14\1\30\2\14"+ + "\1\16\2\14\1\76\1\35\1\77\1\67\1\14\1\105\1\43\1\10"+ + "\1\51\1\45\1\24\1\4\1\55\1\57\1\37\1\27\1\50\1\11"+ + "\1\54\1\44\1\7\1\52\1\14\1\33\1\46\1\47\1\31\1\14"+ + "\1\56\1\6\1\53\1\14\1\100\1\66\1\101\1\73\53\0\1\14"+ + "\12\0\1\14\4\0\1\14\5\0\27\14\1\0\7\14\30\14\1\0"+ + "\10\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\2\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\2\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\2\14"+ + "\1\14\1\14\1\14\1\14\3\14\2\14\1\14\1\14\1\14\2\14"+ + "\1\14\3\14\2\14\4\14\1\14\2\14\1\14\3\14\3\14\2\14"+ + "\1\14\2\14\1\14\1\14\1\14\1\14\1\14\2\14\1\14\1\14"+ + "\2\14\1\14\1\14\2\14\1\14\3\14\1\14\1\14\1\14\2\14"+ + "\2\14\1\14\1\14\3\14\4\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\2\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\2\14\1\14\1\14"+ + "\1\14\1\14\1\14\3\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\4\14\31\0\140\14\22\14\4\0\14\14\16\0\5\14"+ + "\11\0\1\14\21\0\130\22\5\0\23\22\12\0\1\14\13\0\1\14"+ + "\1\0\3\14\1\0\1\14\1\0\2\14\1\14\21\14\1\0\11\14"+ + "\43\14\1\0\2\14\3\14\3\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\5\14\1\14"+ + "\1\14\1\0\1\14\1\14\2\14\1\14\4\0\60\14\60\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\0\4\22\3\0\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\2\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\0\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\2\0\1\14\1\14\6\0\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\41\0\46\14\2\0\1\14\7\0\47\14\11\0"+ + "\21\22\1\0\27\22\1\0\3\22\1\0\1\22\1\0\2\22\1\0"+ + "\1\22\13\0\33\14\5\0\3\14\35\0\6\22\13\0\32\14\5\0"+ + "\1\14\12\14\16\22\7\0\12\22\4\0\2\14\1\22\143\14\1\0"+ + "\1\14\7\22\2\0\6\22\2\14\2\22\1\0\4\22\2\14\12\22"+ + "\3\14\2\0\1\14\20\0\1\14\1\22\36\14\33\22\2\0\3\14"+ + "\60\0\46\14\13\22\1\14\u014f\0\2\22\1\22\66\14\2\0\1\22"+ + "\1\14\3\22\10\22\4\22\1\22\2\0\1\14\4\22\3\0\12\14"+ + "\2\22\2\0\12\22\21\0\1\22\2\22\1\0\10\14\2\0\2\14"+ + "\2\0\26\14\1\0\7\14\1\0\1\14\3\0\4\14\2\0\1\22"+ + "\1\14\3\22\4\22\2\0\2\22\2\0\2\22\1\22\11\0\1\22"+ + "\4\0\2\14\1\0\3\14\2\22\2\0\12\22\2\14\17\0\2\22"+ + "\1\22\1\0\6\14\4\0\2\14\2\0\26\14\1\0\7\14\1\0"+ + "\2\14\1\0\2\14\1\0\2\14\2\0\1\22\1\0\3\22\2\22"+ + "\4\0\2\22\2\0\3\22\13\0\4\14\1\0\1\14\7\0\12\22"+ + "\2\22\3\14\14\0\2\22\1\22\1\0\11\14\1\0\3\14\1\0"+ + "\26\14\1\0\7\14\1\0\2\14\1\0\5\14\2\0\1\22\1\14"+ + "\3\22\5\22\1\0\2\22\1\22\1\0\2\22\1\22\2\0\1\14"+ + "\17\0\2\14\2\22\2\0\12\22\21\0\1\22\2\22\1\0\10\14"+ + "\2\0\2\14\2\0\26\14\1\0\7\14\1\0\2\14\1\0\5\14"+ + "\2\0\1\22\1\14\1\22\1\22\1\22\3\22\3\0\2\22\2\0"+ + "\2\22\1\22\10\0\1\22\1\22\4\0\2\14\1\0\3\14\4\0"+ + "\12\22\1\0\1\14\20\0\1\22\1\14\1\0\6\14\3\0\3\14"+ + "\1\0\4\14\3\0\2\14\1\0\1\14\1\0\2\14\3\0\2\14"+ + "\3\0\3\14\3\0\10\14\1\0\3\14\4\0\2\22\1\22\2\22"+ + "\3\0\3\22\1\0\3\22\1\22\11\0\1\22\17\0\11\22\21\0"+ + "\3\22\1\0\10\14\1\0\3\14\1\0\27\14\1\0\12\14\1\0"+ + "\5\14\4\0\3\22\4\22\1\0\3\22\1\0\4\22\7\0\2\22"+ + "\11\0\2\14\4\0\12\22\22\0\2\22\1\0\10\14\1\0\3\14"+ + "\1\0\27\14\1\0\12\14\1\0\5\14\2\0\1\22\1\14\1\22"+ + "\1\22\5\22\1\0\1\22\2\22\1\0\2\22\2\22\7\0\2\22"+ + "\7\0\1\14\1\0\2\14\4\0\12\22\22\0\2\22\1\0\10\14"+ + "\1\0\3\14\1\0\27\14\1\0\20\14\4\0\3\22\3\22\2\0"+ + "\3\22\1\0\3\22\1\22\11\0\1\22\10\0\2\14\4\0\12\22"+ + "\22\0\2\22\1\0\22\14\3\0\30\14\1\0\11\14\1\0\1\14"+ + "\2\0\7\14\3\0\1\22\4\0\3\22\3\22\1\0\1\22\1\0"+ + "\10\22\22\0\2\22\15\0\60\14\1\22\2\14\7\22\5\0\6\14"+ + "\1\14\10\22\1\0\12\22\47\0\2\14\1\0\1\14\2\0\2\14"+ + "\1\0\1\14\2\0\1\14\6\0\4\14\1\0\7\14\1\0\3\14"+ + "\1\0\1\14\1\0\1\14\2\0\2\14\1\0\4\14\1\22\2\14"+ + "\6\22\1\0\2\22\1\14\2\0\5\14\1\0\1\14\1\0\6\22"+ + "\2\0\12\22\2\0\2\14\42\0\1\14\27\0\2\22\6\0\12\22"+ + "\13\0\1\22\1\0\1\22\1\0\1\22\4\0\2\22\10\14\1\0"+ + "\42\14\6\0\16\22\1\22\5\22\1\0\2\22\4\14\4\0\10\22"+ + "\1\0\44\22\11\0\1\22\71\0\42\14\1\0\5\14\1\0\2\14"+ + "\1\0\1\22\4\22\1\22\1\22\3\0\2\22\1\22\1\22\6\0"+ + "\12\22\6\0\6\14\2\22\2\22\106\0\46\14\12\0\51\14\7\0"+ + "\132\14\5\0\104\14\5\0\122\14\6\0\7\14\1\0\77\14\1\0"+ + "\1\14\1\0\4\14\2\0\7\14\1\0\1\14\1\0\4\14\2\0"+ + "\47\14\1\0\1\14\1\0\4\14\2\0\37\14\1\0\1\14\1\0"+ + "\4\14\2\0\7\14\1\0\1\14\1\0\4\14\2\0\7\14\1\0"+ + "\7\14\1\0\27\14\1\0\37\14\1\0\1\14\1\0\4\14\2\0"+ + "\7\14\1\0\47\14\1\0\23\14\16\0\11\22\56\0\125\14\14\0"+ + "\u026c\14\2\0\10\14\12\0\32\14\5\0\113\14\3\0\3\14\17\0"+ + "\15\14\1\0\4\14\3\22\13\0\22\14\3\22\13\0\22\14\2\22"+ + "\14\0\15\14\1\0\3\14\1\0\2\22\14\0\64\14\2\0\1\22"+ + "\7\22\10\22\1\22\2\22\13\22\3\0\1\14\4\0\1\14\1\22"+ + "\2\0\12\22\41\0\3\22\2\0\12\22\6\0\43\14\1\14\64\14"+ + "\10\0\51\14\1\22\126\0\35\14\3\0\3\22\4\22\2\22\3\22"+ + "\4\0\2\22\1\22\6\22\3\22\12\0\12\22\36\14\2\0\5\14"+ + "\u038b\0\54\14\66\14\12\14\224\0\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\7\14\4\0\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\6\0\10\14\10\14\6\14"+ + "\2\0\6\14\2\0\10\14\10\14\10\14\10\14\6\14\2\0\6\14"+ + "\2\0\10\14\1\0\1\14\1\0\1\14\1\0\1\14\1\0\1\14"+ + "\10\14\10\14\16\14\2\0\10\14\10\14\10\14\10\14\10\14\10\14"+ + "\5\14\1\0\2\14\4\14\1\14\1\0\1\14\3\0\3\14\1\0"+ + "\2\14\4\14\1\14\3\0\4\14\2\0\2\14\4\14\4\0\10\14"+ + "\5\14\5\0\3\14\1\0\2\14\4\14\1\14\102\0\2\22\23\0"+ + "\1\22\34\0\1\14\15\0\1\14\120\0\15\22\4\0\1\22\3\0"+ + "\6\22\27\0\1\14\4\0\1\14\2\0\1\14\3\14\2\14\3\14"+ + "\1\14\1\0\1\14\3\0\5\14\6\0\1\14\1\0\1\14\1\0"+ + "\1\14\1\0\4\14\1\0\1\14\2\14\1\0\1\14\1\14\4\14"+ + "\1\14\3\0\1\14\2\14\5\0\1\14\4\14\26\0\44\14\u0e81\0"+ + "\1\14\1\14\1\14\31\0\11\14\6\22\1\0\5\14\2\0\3\14"+ + "\1\14\1\14\4\0\126\14\2\0\2\22\2\0\2\14\1\14\1\0"+ + "\132\14\1\22\3\14\1\14\5\0\50\14\4\0\136\14\21\0\30\14"+ + "\70\0\20\14\u0200\0\u19b6\14\112\0\u51a6\14\132\0\u048d\14\u0773\0\u2ba4\14"+ + "\u215c\0\u012e\14\2\0\73\14\225\0\7\14\14\0\5\14\5\0\1\14"+ + "\1\22\12\14\1\0\15\14\1\0\5\14\1\0\1\14\1\0\2\14"+ + "\1\0\2\14\1\0\154\14\41\0\u016b\14\22\0\100\14\2\0\66\14"+ + "\50\0\14\14\4\0\20\22\20\0\4\22\17\0\2\22\30\0\3\22"+ + "\40\0\5\14\1\0\207\14\23\0\12\22\7\0\32\14\4\0\1\22"+ + "\1\0\32\14\12\0\1\22\12\14\1\14\55\14\2\14\37\14\3\0"+ + "\6\14\2\0\6\14\2\0\6\14\2\0\3\14\43\0"; /** * Translates characters to character classes @@ -56,21 +214,22 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\1\0\1\1\2\2\2\3\1\4\1\5\1\6\1\7"+ - "\1\3\1\10\1\11\1\10\1\3\1\12\1\13\1\14"+ - "\17\3\1\15\1\16\1\17\1\20\1\21\1\22\1\23"+ - "\1\24\1\25\1\26\1\1\1\27\1\30\1\31\1\32"+ - "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+ - "\1\2\4\0\1\2\1\43\1\0\1\44\1\45\6\10"+ - "\1\46\1\47\1\50\16\3\1\51\7\3\1\52\1\53"+ - "\1\54\1\55\1\56\1\57\1\60\1\61\1\62\1\63"+ - "\1\64\1\65\1\66\1\67\1\70\1\71\3\2\1\43"+ - "\1\0\1\10\2\0\1\3\1\72\1\3\1\73\1\74"+ - "\1\75\5\3\1\76\6\3\1\77\4\3\1\100\1\101"+ - "\1\102\1\103\6\0\2\3\1\104\1\105\10\3\1\106"+ - "\1\107\3\3\4\0\3\3\1\110\1\3\1\111\1\112"+ - "\3\3\1\113\1\3\1\114\1\115\1\116\1\117\1\120"+ - "\1\3\1\121\1\3\1\122\1\3\1\123\1\124"; + "\1\0\1\1\2\2\5\3\1\4\1\5\1\3\1\6"+ + "\1\3\1\7\2\3\1\10\1\11\1\10\1\3\1\12"+ + "\1\13\1\14\11\3\1\15\1\16\1\17\1\20\1\21"+ + "\1\22\1\23\1\24\1\25\1\26\1\1\1\27\1\30"+ + "\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40"+ + "\1\41\1\42\1\2\4\0\1\2\1\43\1\0\1\44"+ + "\3\3\1\45\4\3\1\46\2\3\6\10\1\47\1\50"+ + "\1\51\14\3\1\52\1\53\1\54\1\55\1\56\1\57"+ + "\1\60\1\61\1\62\1\63\1\64\1\65\1\66\1\67"+ + "\1\70\1\71\3\2\1\43\1\0\1\72\11\3\1\10"+ + "\2\0\1\3\1\73\1\3\1\74\1\75\1\76\1\77"+ + "\6\3\1\100\1\101\1\102\1\103\1\104\4\3\1\105"+ + "\1\106\2\3\6\0\4\3\1\107\4\3\1\110\3\3"+ + "\1\111\4\0\3\3\1\112\1\113\1\3\1\114\1\3"+ + "\1\115\1\116\1\117\1\120\1\121\1\3\1\122\1\123"+ + "\1\3\1\124"; private static int [] zzUnpackAction() { int [] result = new int[199]; @@ -98,31 +257,31 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\106\0\214\0\322\0\u0118\0\u015e\0\u01a4\0\u01ea"+ - "\0\u0230\0\u0276\0\u02bc\0\u0302\0\106\0\u0348\0\u038e\0\106"+ - "\0\106\0\106\0\u03d4\0\u041a\0\u0460\0\u04a6\0\u04ec\0\u0532"+ - "\0\u0578\0\u05be\0\u0604\0\u064a\0\u0690\0\u06d6\0\u071c\0\u0762"+ - "\0\u07a8\0\u07ee\0\u0834\0\u087a\0\u08c0\0\u0906\0\u094c\0\u0992"+ - "\0\u09d8\0\u0a1e\0\u0a64\0\u0aaa\0\106\0\106\0\106\0\106"+ - "\0\106\0\106\0\106\0\106\0\106\0\106\0\106\0\106"+ - "\0\u0af0\0\u0b36\0\u0b7c\0\u0bc2\0\u0c08\0\106\0\u0c4e\0\u0c94"+ - "\0\106\0\106\0\u0cda\0\u0d20\0\u0d66\0\u0dac\0\u0df2\0\u0e38"+ - "\0\u0118\0\u0118\0\u0118\0\u0e7e\0\u0ec4\0\u0f0a\0\u0f50\0\u0f96"+ - "\0\u0fdc\0\u1022\0\u1068\0\u10ae\0\u10f4\0\u113a\0\u1180\0\u11c6"+ - "\0\u120c\0\u0118\0\u1252\0\u1298\0\u12de\0\u1324\0\u136a\0\u13b0"+ - "\0\u13f6\0\106\0\106\0\106\0\u143c\0\106\0\u1482\0\106"+ - "\0\106\0\106\0\106\0\106\0\u14c8\0\106\0\106\0\u150e"+ - "\0\106\0\u1554\0\u159a\0\u15e0\0\u1626\0\u166c\0\106\0\u16b2"+ - "\0\u16f8\0\u173e\0\u0118\0\u1784\0\u0118\0\u0118\0\u0118\0\u17ca"+ - "\0\u1810\0\u1856\0\u189c\0\u18e2\0\u0118\0\u1928\0\u196e\0\u19b4"+ - "\0\u19fa\0\u1a40\0\u1a86\0\u0118\0\u1acc\0\u1b12\0\u1b58\0\u1b9e"+ - "\0\106\0\106\0\106\0\106\0\u1be4\0\u1c2a\0\u1c70\0\u1cb6"+ - "\0\u1cfc\0\u1d42\0\u1d88\0\u1dce\0\u0118\0\u0118\0\u1e14\0\u1e5a"+ - "\0\u1ea0\0\u1ee6\0\u1f2c\0\u1f72\0\u1fb8\0\u1ffe\0\u0118\0\u0118"+ - "\0\u2044\0\u208a\0\u20d0\0\u2116\0\u215c\0\u21a2\0\u21e8\0\u222e"+ - "\0\u2274\0\u22ba\0\u0118\0\u2300\0\u0118\0\u0118\0\u2346\0\u238c"+ - "\0\u23d2\0\u0118\0\u2418\0\u0118\0\u0118\0\u0118\0\u0118\0\u0118"+ - "\0\u245e\0\u0118\0\u24a4\0\u0118\0\u24ea\0\u0118\0\u0118"; + "\0\0\0\107\0\216\0\325\0\u011c\0\u0163\0\u01aa\0\u01f1"+ + "\0\u0238\0\u027f\0\u02c6\0\u030d\0\u0354\0\u039b\0\u03e2\0\u0429"+ + "\0\u0470\0\u04b7\0\107\0\u04fe\0\u0545\0\107\0\107\0\107"+ + "\0\u058c\0\u05d3\0\u061a\0\u0661\0\u06a8\0\u06ef\0\u0736\0\u077d"+ + "\0\u07c4\0\u080b\0\u0852\0\u0899\0\u08e0\0\u0927\0\u096e\0\u09b5"+ + "\0\u09fc\0\u0a43\0\u0a8a\0\u0ad1\0\107\0\107\0\107\0\107"+ + "\0\107\0\107\0\107\0\107\0\107\0\107\0\107\0\107"+ + "\0\u0b18\0\u0b5f\0\u0ba6\0\u0bed\0\u0c34\0\107\0\u0c7b\0\u0cc2"+ + "\0\107\0\u0d09\0\u0d50\0\u0d97\0\u0163\0\u0dde\0\u0e25\0\u0e6c"+ + "\0\u0eb3\0\107\0\u0efa\0\u0f41\0\u0f88\0\u0fcf\0\u1016\0\u105d"+ + "\0\u10a4\0\u10eb\0\u0163\0\u0163\0\u0163\0\u1132\0\u1179\0\u11c0"+ + "\0\u1207\0\u124e\0\u1295\0\u12dc\0\u1323\0\u136a\0\u13b1\0\u13f8"+ + "\0\u143f\0\107\0\107\0\107\0\u1486\0\107\0\u14cd\0\107"+ + "\0\107\0\107\0\107\0\107\0\u1514\0\107\0\107\0\u155b"+ + "\0\107\0\u15a2\0\u15e9\0\u1630\0\u1677\0\u16be\0\u0163\0\u1705"+ + "\0\u174c\0\u1793\0\u17da\0\u1821\0\u1868\0\u18af\0\u18f6\0\u193d"+ + "\0\107\0\u1984\0\u19cb\0\u1a12\0\u0163\0\u1a59\0\u0163\0\u0163"+ + "\0\u0163\0\u0163\0\u1aa0\0\u1ae7\0\u1b2e\0\u1b75\0\u1bbc\0\u1c03"+ + "\0\107\0\107\0\107\0\107\0\u0163\0\u1c4a\0\u1c91\0\u1cd8"+ + "\0\u1d1f\0\u0163\0\u0163\0\u1d66\0\u1dad\0\u1df4\0\u1e3b\0\u1e82"+ + "\0\u1ec9\0\u1f10\0\u1f57\0\u1f9e\0\u1fe5\0\u202c\0\u2073\0\u0163"+ + "\0\u20ba\0\u2101\0\u2148\0\u218f\0\u0163\0\u21d6\0\u221d\0\u2264"+ + "\0\u0163\0\u22ab\0\u22f2\0\u2339\0\u2380\0\u23c7\0\u240e\0\u2455"+ + "\0\u0163\0\u0163\0\u249c\0\u0163\0\u24e3\0\u0163\0\u0163\0\u0163"+ + "\0\u0163\0\u0163\0\u252a\0\u0163\0\u0163\0\u2571\0\u0163"; private static int [] zzUnpackRowMap() { int [] result = new int[199]; @@ -148,198 +307,192 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = - "\1\2\1\3\2\4\1\5\1\4\2\5\1\6\1\5"+ - "\1\7\1\10\1\5\1\11\1\5\1\12\1\5\1\6"+ - "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22"+ - "\1\23\1\24\1\25\1\5\1\26\1\27\1\30\1\31"+ - "\1\5\1\32\1\33\1\34\1\6\1\35\1\5\1\36"+ - "\1\37\1\5\1\40\1\41\1\5\1\42\1\43\1\44"+ - "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ - "\1\55\1\56\1\57\1\60\1\61\1\62\1\63\1\64"+ - "\1\65\1\66\1\67\1\70\107\0\1\71\1\72\1\71"+ - "\1\0\1\71\1\73\1\74\1\75\1\76\3\0\1\77"+ - "\1\100\1\0\1\101\15\0\1\100\2\0\1\75\2\0"+ - "\1\76\1\74\2\0\1\73\36\0\3\4\1\0\1\4"+ - "\3\0\1\76\3\0\1\77\1\100\1\0\1\101\15\0"+ - "\1\100\5\0\1\76\42\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\25\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\2\5\1\13"+ - "\1\14\1\0\1\16\1\5\3\0\5\5\1\13\17\5"+ - "\27\0\13\7\1\0\72\7\13\0\1\10\73\0\3\77"+ - "\1\0\1\77\160\0\1\102\26\0\11\5\2\0\1\5"+ - "\1\0\1\5\1\0\3\5\1\14\1\0\1\16\1\5"+ - "\3\0\25\5\27\0\13\103\1\0\7\103\1\104\1\105"+ - "\61\103\13\106\1\0\10\106\1\107\1\110\60\106\1\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\1\5\1\111\1\5\1\112\11\5\1\113"+ - "\3\5\1\114\3\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\1\5\1\115"+ - "\1\5\1\116\21\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\13\5\1\117"+ - "\11\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\4\5\1\120\20\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\12\5\1\121\3\5\1\122\6\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\1\14"+ - "\1\0\1\16\1\5\3\0\1\123\3\5\1\124\20\5"+ - "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\5\5\1\125\17\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\2\5\1\13\1\14"+ - "\1\0\1\16\1\5\3\0\5\5\1\126\17\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\12\5\1\127\1\130\11\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\1\131\24\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\5\5\1\132"+ - "\17\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\133\3\0\5\5\1\134\5\5\1\135"+ - "\11\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\1\136\24\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\137"+ - "\3\0\25\5\30\0\11\5\2\0\1\5\1\0\1\5"+ - "\1\0\3\5\3\0\1\5\3\0\12\5\1\140\12\5"+ - "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\24\5\1\141\107\0\1\142\105\0"+ - "\1\143\105\0\1\144\1\145\104\0\1\146\1\0\1\147"+ - "\103\0\1\150\105\0\1\151\105\0\1\152\105\0\1\153"+ - "\105\0\1\154\6\0\1\155\76\0\1\156\6\0\1\157"+ - "\1\160\75\0\1\161\26\0\1\71\1\72\1\71\1\0"+ - "\1\71\3\0\1\76\3\0\1\77\1\100\1\0\1\101"+ - "\15\0\1\100\5\0\1\76\42\0\3\72\1\0\1\72"+ - "\7\0\1\77\1\100\1\0\1\101\15\0\1\100\50\0"+ - "\5\162\2\0\1\162\5\0\1\162\13\0\1\162\1\0"+ - "\1\162\1\0\1\162\2\0\1\162\1\0\1\162\3\0"+ - "\1\162\37\0\1\163\1\0\1\163\1\0\1\163\101\0"+ - "\1\164\3\0\1\164\101\0\3\77\1\0\1\77\10\0"+ - "\1\100\1\0\1\101\15\0\1\100\50\0\3\165\1\0"+ - "\1\165\11\0\1\166\37\0\1\166\26\0\13\103\1\0"+ - "\7\103\1\167\1\105\61\103\23\0\1\170\62\0\106\103"+ - "\13\106\1\0\10\106\1\107\1\167\166\106\25\0\1\171"+ - "\61\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\17\5\1\172\5\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\2\5\1\173\22\5\30\0\11\5\2\0\1\5"+ - "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\3\5"+ - "\1\174\21\5\30\0\11\5\2\0\1\5\1\0\1\5"+ - "\1\0\3\5\3\0\1\5\3\0\6\5\1\175\16\5"+ - "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\12\5\1\176\2\5\1\177\7\5"+ - "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\200\3\0\3\5\1\201\21\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\11\5\1\202\13\5\30\0\11\5\2\0\1\5"+ - "\1\0\1\5\1\0\3\5\3\0\1\203\3\0\25\5"+ - "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\6\5\1\204\16\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\20\5\1\205\4\5\30\0\11\5\2\0\1\5"+ - "\1\0\1\5\1\0\3\5\1\14\1\0\1\16\1\5"+ - "\3\0\4\5\1\206\20\5\30\0\11\5\2\0\1\5"+ - "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\1\207"+ - "\24\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\1\5\1\210\23\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\21\5\1\211\3\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\1\5\1\212\23\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\13\5\1\213"+ - "\11\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\5\5\1\214\17\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\3\5\1\215\21\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\4\5\1\216\20\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\13\5\1\217"+ - "\11\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\220\3\0\25\5\107\0\1\221\105\0"+ - "\1\222\105\0\1\223\105\0\1\224\26\0\5\162\2\0"+ - "\1\162\1\76\4\0\1\162\13\0\1\162\1\0\1\162"+ - "\1\0\1\162\2\0\1\162\1\0\1\162\1\76\2\0"+ - "\1\162\37\0\1\163\1\0\1\163\1\0\1\163\3\0"+ - "\1\76\32\0\1\76\42\0\1\164\3\0\1\164\3\0"+ - "\1\76\32\0\1\76\42\0\3\165\1\0\1\165\12\0"+ - "\1\101\66\0\3\165\1\0\1\165\100\0\23\170\1\225"+ - "\1\226\1\170\1\227\57\170\24\171\1\230\1\231\1\232"+ - "\57\171\1\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\13\5\1\233\11\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\4\5\1\234\20\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\15\5\1\235\7\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\236"+ - "\20\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\4\5\1\237\20\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\3\5\1\240\21\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\14\5\1\241\10\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\1\242\24\5"+ - "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\3\5\1\243\21\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\6\5\1\244\16\5\30\0\11\5\2\0\1\5"+ - "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\7\5"+ - "\1\245\15\5\30\0\11\5\2\0\1\5\1\0\1\5"+ - "\1\0\3\5\3\0\1\5\3\0\1\246\24\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\21\5\1\247\3\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\3\5\1\250\21\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\12\5\1\251"+ - "\12\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\7\5\1\252\15\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\12\5\1\253\12\5\27\0\23\170\1\254"+ - "\1\226\1\170\1\255\210\170\1\255\1\226\1\170\1\255"+ - "\57\170\132\171\1\230\1\256\1\257\103\171\1\230\2\257"+ - "\57\171\1\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\5\5\1\260\17\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\5\5\1\261\17\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\17\5\1\262\5\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\263"+ - "\20\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\5\5\1\264\17\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\10\5\1\265\14\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\3\5\1\266\21\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\267\3\0\25\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\2\5\1\270\22\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\12\5\1\271\12\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\2\5\1\272"+ - "\22\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\1\273\24\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\4\5\1\274\20\5\27\0\23\170\1\167\1\226"+ - "\1\170\1\0\102\170\1\0\1\226\1\170\1\0\57\170"+ - "\24\171\1\230\1\167\1\0\103\171\1\230\2\0\57\171"+ - "\1\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\6\5\1\275\16\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\6\5\1\276\16\5\30\0\11\5\2\0\1\5"+ - "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\6\5"+ - "\1\277\16\5\30\0\11\5\2\0\1\5\1\0\1\5"+ - "\1\0\3\5\3\0\1\5\3\0\1\5\1\300\23\5"+ - "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\1\5\1\301\23\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\1\302\24\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\12\5\1\303"+ - "\12\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\12\5\1\304\12\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\14\5\1\305\10\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\20\5\1\306\4\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\307"+ - "\20\5\27\0"; + "\1\2\1\3\2\4\1\5\1\4\1\6\1\7\1\10"+ + "\1\11\1\12\1\13\4\6\1\14\1\6\1\2\1\15"+ + "\1\16\1\6\1\17\1\6\2\14\1\20\1\21\1\22"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\1\6\1\34\1\6\1\35\1\36\1\37\1\6"+ + "\1\40\1\41\1\6\1\42\1\43\1\44\1\45\1\46"+ + "\1\47\1\50\1\51\1\52\1\53\1\54\1\55\1\56"+ + "\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66"+ + "\1\67\1\70\110\0\1\71\1\72\1\71\1\0\1\71"+ + "\1\73\1\74\1\75\1\76\4\0\1\73\1\74\1\75"+ + "\1\76\1\0\1\77\2\100\1\0\1\101\60\0\3\4"+ + "\1\0\1\4\3\0\1\76\7\0\1\76\1\0\1\77"+ + "\2\100\1\0\1\101\60\0\6\6\1\102\2\6\2\0"+ + "\7\6\1\0\2\6\1\0\4\6\1\103\3\0\1\104"+ + "\3\0\15\6\30\0\11\6\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\3\0\1\6\3\0\15\6\30\0\11\6"+ + "\2\0\7\6\1\0\2\6\1\0\4\6\1\105\3\0"+ + "\1\6\3\0\15\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\3\6\1\20\1\106\1\22\1\0\1\24"+ + "\1\6\3\0\15\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\6\3\0\1\107\14\6"+ + "\27\0\13\12\1\0\73\12\13\0\1\13\74\0\11\6"+ + "\2\0\7\6\1\0\2\6\1\0\3\6\2\20\1\22"+ + "\1\0\1\24\1\6\3\0\15\6\30\0\3\77\1\0"+ + "\1\77\102\0\5\6\1\110\2\6\1\111\2\0\7\6"+ + "\1\0\2\6\1\0\5\6\3\0\1\6\3\0\15\6"+ + "\110\0\1\112\26\0\11\6\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\1\22\1\0\1\24\1\6\3\0\15\6"+ + "\30\0\11\6\2\0\7\6\1\0\1\113\1\6\1\0"+ + "\5\6\1\22\1\0\1\24\1\6\3\0\1\114\14\6"+ + "\27\0\13\115\1\0\20\115\1\116\1\117\51\115\13\120"+ + "\1\0\21\120\1\121\1\122\50\120\1\0\3\6\1\123"+ + "\5\6\2\0\7\6\1\0\2\6\1\0\5\6\3\0"+ + "\1\6\3\0\1\6\1\124\1\6\1\125\5\6\1\126"+ + "\3\6\30\0\11\6\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\1\6\1\127\1\6\1\130"+ + "\11\6\30\0\6\6\1\131\2\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\6\3\0\15\6\30\0"+ + "\11\6\2\0\7\6\1\0\1\132\1\6\1\0\5\6"+ + "\3\0\1\6\3\0\15\6\30\0\11\6\2\0\7\6"+ + "\1\0\2\6\1\0\4\6\1\133\3\0\1\6\3\0"+ + "\15\6\30\0\6\6\1\134\1\6\1\135\2\0\7\6"+ + "\1\0\2\6\1\0\5\6\3\0\1\6\3\0\15\6"+ + "\30\0\11\6\2\0\7\6\1\0\2\6\1\0\5\6"+ + "\3\0\1\6\3\0\1\136\14\6\30\0\11\6\2\0"+ + "\7\6\1\0\2\6\1\0\5\6\3\0\1\137\3\0"+ + "\15\6\30\0\10\6\1\140\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\3\0\1\6\3\0\15\6\30\0\11\6"+ + "\2\0\7\6\1\0\2\6\1\0\5\6\3\0\1\6"+ + "\3\0\14\6\1\141\110\0\1\142\106\0\1\143\106\0"+ + "\1\144\1\145\105\0\1\146\1\0\1\147\104\0\1\150"+ + "\106\0\1\151\106\0\1\152\106\0\1\153\106\0\1\154"+ + "\6\0\1\155\77\0\1\156\6\0\1\157\1\160\76\0"+ + "\1\161\26\0\1\71\1\72\1\71\1\0\1\71\3\0"+ + "\1\76\7\0\1\76\1\0\1\77\2\100\1\0\1\101"+ + "\60\0\3\72\1\0\1\72\15\0\1\77\2\100\1\0"+ + "\1\101\60\0\5\162\2\0\1\162\4\0\1\162\2\0"+ + "\1\162\3\0\2\162\15\0\1\162\1\0\1\162\3\0"+ + "\1\162\36\0\1\163\1\0\1\163\1\0\1\163\102\0"+ + "\1\164\3\0\1\164\102\0\3\77\1\0\1\77\16\0"+ + "\2\100\1\0\1\101\60\0\3\165\1\0\1\165\20\0"+ + "\1\166\31\0\1\166\27\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\4\6\1\167\3\0\1\6\3\0\15\6"+ + "\30\0\6\6\1\170\2\6\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\3\0\1\6\3\0\15\6\30\0\11\6"+ + "\2\0\7\6\1\0\2\6\1\0\5\6\3\0\1\6"+ + "\3\0\1\6\1\171\13\6\30\0\11\6\2\0\7\6"+ + "\1\0\1\172\1\6\1\0\5\6\1\22\1\0\1\24"+ + "\1\6\3\0\15\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\6\3\0\11\6\1\173"+ + "\3\6\30\0\11\6\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\6\6\1\174\6\6\30\0"+ + "\11\6\2\0\7\6\1\0\2\6\1\0\5\6\3\0"+ + "\1\175\3\0\3\6\1\176\11\6\30\0\11\6\2\0"+ + "\7\6\1\0\2\6\1\0\5\6\3\0\1\6\3\0"+ + "\4\6\1\177\10\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\200\3\0\15\6\27\0"+ + "\13\115\1\0\20\115\1\201\1\117\51\115\34\0\1\202"+ + "\52\0\107\115\13\120\1\0\21\120\1\121\1\201\157\120"+ + "\36\0\1\203\51\0\11\6\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\3\0\1\6\3\0\7\6\1\204\5\6"+ + "\30\0\11\6\2\0\7\6\1\0\2\6\1\0\5\6"+ + "\3\0\1\6\3\0\2\6\1\205\12\6\30\0\11\6"+ + "\2\0\7\6\1\0\2\6\1\0\5\6\3\0\1\6"+ + "\3\0\3\6\1\206\11\6\30\0\11\6\2\0\7\6"+ + "\1\0\2\6\1\0\5\6\3\0\1\6\3\0\4\6"+ + "\1\207\10\6\30\0\3\6\1\210\4\6\1\211\2\0"+ + "\7\6\1\0\2\6\1\0\5\6\3\0\1\6\3\0"+ + "\15\6\30\0\11\6\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\10\6\1\212\4\6\30\0"+ + "\11\6\2\0\7\6\1\0\2\6\1\0\5\6\3\0"+ + "\1\6\3\0\1\6\1\213\13\6\30\0\11\6\2\0"+ + "\7\6\1\0\2\6\1\0\5\6\3\0\1\6\3\0"+ + "\1\214\14\6\30\0\11\6\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\3\0\1\6\3\0\3\6\1\215\11\6"+ + "\30\0\11\6\2\0\7\6\1\0\1\216\1\6\1\0"+ + "\5\6\3\0\1\6\3\0\15\6\30\0\6\6\1\217"+ + "\2\6\2\0\7\6\1\0\2\6\1\0\5\6\3\0"+ + "\1\6\3\0\15\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\220\3\0\15\6\110\0"+ + "\1\221\106\0\1\222\106\0\1\223\106\0\1\224\26\0"+ + "\5\162\2\0\1\162\1\76\3\0\1\162\2\0\1\162"+ + "\1\76\2\0\2\162\15\0\1\162\1\0\1\162\3\0"+ + "\1\162\36\0\1\163\1\0\1\163\1\0\1\163\3\0"+ + "\1\76\7\0\1\76\66\0\1\164\3\0\1\164\3\0"+ + "\1\76\7\0\1\76\66\0\3\165\1\0\1\165\21\0"+ + "\1\101\60\0\3\165\1\0\1\165\102\0\11\6\2\0"+ + "\7\6\1\0\2\6\1\0\5\6\3\0\1\6\3\0"+ + "\11\6\1\225\3\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\6\3\0\1\226\14\6"+ + "\30\0\11\6\2\0\7\6\1\0\2\6\1\0\5\6"+ + "\3\0\1\6\3\0\1\227\14\6\30\0\7\6\1\230"+ + "\1\6\2\0\7\6\1\0\2\6\1\0\5\6\3\0"+ + "\1\6\3\0\15\6\30\0\11\6\2\0\7\6\1\0"+ + "\1\231\1\6\1\0\5\6\3\0\1\6\3\0\15\6"+ + "\30\0\3\6\1\232\5\6\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\3\0\1\6\3\0\15\6\30\0\11\6"+ + "\2\0\7\6\1\0\1\233\1\6\1\0\5\6\3\0"+ + "\1\6\3\0\15\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\2\6\1\234\2\6\3\0\1\6\3\0"+ + "\15\6\30\0\11\6\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\3\6\1\235\11\6\27\0"+ + "\34\202\1\236\1\237\1\202\1\240\47\202\35\203\1\241"+ + "\1\242\1\243\47\203\1\0\6\6\1\244\2\6\2\0"+ + "\7\6\1\0\2\6\1\0\5\6\3\0\1\6\3\0"+ + "\15\6\30\0\11\6\2\0\7\6\1\0\1\245\1\6"+ + "\1\0\5\6\3\0\1\6\3\0\15\6\30\0\11\6"+ + "\2\0\7\6\1\0\2\6\1\0\5\6\3\0\1\6"+ + "\3\0\4\6\1\246\10\6\30\0\11\6\2\0\7\6"+ + "\1\0\2\6\1\0\5\6\3\0\1\6\3\0\3\6"+ + "\1\247\11\6\30\0\11\6\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\3\0\1\6\3\0\3\6\1\250\11\6"+ + "\30\0\10\6\1\251\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\15\6\30\0\7\6\1\252"+ + "\1\6\2\0\7\6\1\0\2\6\1\0\5\6\3\0"+ + "\1\6\3\0\15\6\30\0\10\6\1\253\2\0\7\6"+ + "\1\0\2\6\1\0\5\6\3\0\1\6\3\0\15\6"+ + "\30\0\10\6\1\254\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\15\6\30\0\11\6\2\0"+ + "\7\6\1\0\2\6\1\0\5\6\3\0\1\6\3\0"+ + "\5\6\1\255\7\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\6\3\0\2\6\1\256"+ + "\12\6\30\0\11\6\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\7\6\1\257\5\6\30\0"+ + "\11\6\2\0\7\6\1\0\2\6\1\0\4\6\1\260"+ + "\3\0\1\6\3\0\15\6\30\0\11\6\2\0\7\6"+ + "\1\0\1\261\1\6\1\0\5\6\3\0\1\6\3\0"+ + "\15\6\27\0\34\202\1\262\1\237\1\202\1\263\212\202"+ + "\1\263\1\237\1\202\1\263\47\202\144\203\1\241\1\264"+ + "\1\265\104\203\1\241\2\265\47\203\1\0\11\6\2\0"+ + "\7\6\1\0\2\6\1\0\4\6\1\266\3\0\1\6"+ + "\3\0\15\6\30\0\11\6\2\0\7\6\1\0\2\6"+ + "\1\0\4\6\1\267\3\0\1\6\3\0\15\6\30\0"+ + "\11\6\2\0\7\6\1\0\2\6\1\0\5\6\3\0"+ + "\1\270\3\0\15\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\6\3\0\3\6\1\271"+ + "\11\6\30\0\11\6\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\2\6\1\272\12\6\30\0"+ + "\11\6\2\0\7\6\1\0\2\6\1\0\5\6\3\0"+ + "\1\6\3\0\1\273\14\6\30\0\11\6\2\0\7\6"+ + "\1\0\1\274\1\6\1\0\5\6\3\0\1\6\3\0"+ + "\15\6\30\0\10\6\1\275\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\3\0\1\6\3\0\15\6\30\0\11\6"+ + "\2\0\7\6\1\0\2\6\1\0\5\6\3\0\1\6"+ + "\3\0\1\276\14\6\30\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\6\3\0\4\6\1\277"+ + "\10\6\30\0\11\6\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\1\6\1\300\13\6\27\0"+ + "\34\202\1\201\1\237\1\202\1\0\103\202\1\0\1\237"+ + "\1\202\1\0\47\202\35\203\1\241\1\201\1\0\104\203"+ + "\1\241\2\0\47\203\1\0\11\6\2\0\7\6\1\0"+ + "\2\6\1\0\5\6\3\0\1\6\3\0\4\6\1\301"+ + "\10\6\30\0\11\6\2\0\7\6\1\0\2\6\1\0"+ + "\5\6\3\0\1\6\3\0\4\6\1\302\10\6\30\0"+ + "\11\6\2\0\7\6\1\0\2\6\1\0\5\6\3\0"+ + "\1\6\3\0\1\6\1\303\13\6\30\0\10\6\1\304"+ + "\2\0\7\6\1\0\2\6\1\0\5\6\3\0\1\6"+ + "\3\0\15\6\30\0\11\6\2\0\7\6\1\0\2\6"+ + "\1\0\5\6\3\0\1\6\3\0\10\6\1\305\4\6"+ + "\30\0\11\6\2\0\7\6\1\0\2\6\1\0\2\6"+ + "\1\306\2\6\3\0\1\6\3\0\15\6\30\0\11\6"+ + "\2\0\7\6\1\0\1\307\1\6\1\0\5\6\3\0"+ + "\1\6\3\0\15\6\27\0"; private static int [] zzUnpackTrans() { - int [] result = new int[9520]; + int [] result = new int[9656]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -380,11 +533,11 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\11\12\1\1\11\2\1\3\11\32\1\14\11"+ - "\1\1\4\0\1\11\1\1\1\0\2\11\37\1\3\11"+ - "\1\1\1\11\1\1\5\11\1\1\2\11\1\1\1\11"+ - "\4\1\1\0\1\11\2\0\27\1\4\11\6\0\21\1"+ - "\4\0\30\1"; + "\1\0\1\11\20\1\1\11\2\1\3\11\24\1\14\11"+ + "\1\1\4\0\1\11\1\1\1\0\1\11\10\1\1\11"+ + "\27\1\3\11\1\1\1\11\1\1\5\11\1\1\2\11"+ + "\1\1\1\11\4\1\1\0\12\1\1\11\2\0\15\1"+ + "\4\11\11\1\6\0\16\1\4\0\22\1"; private static int [] zzUnpackAttribute() { int [] result = new int[199]; @@ -470,7 +623,7 @@ class _PythonLexer implements FlexLexer { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 178) { + while (i < 3336) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); @@ -740,7 +893,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.MINUS; } case 93: break; - case 73: + case 72: { return PyTokenTypes.BREAK_KEYWORD; } case 94: break; @@ -764,11 +917,11 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.LT; } case 99: break; - case 38: + case 40: { return PyTokenTypes.IN_KEYWORD; } case 100: break; - case 72: + case 73: { return PyTokenTypes.RAISE_KEYWORD; } case 101: break; @@ -784,7 +937,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.SPACE; } case 104: break; - case 79: + case 78: { return PyTokenTypes.EXCEPT_KEYWORD; } case 105: break; @@ -820,7 +973,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.OR; } case 113: break; - case 69: + case 70: { return PyTokenTypes.ELSE_KEYWORD; } case 114: break; @@ -840,7 +993,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.MULT; } case 118: break; - case 78: + case 81: { return PyTokenTypes.ASSERT_KEYWORD; } case 119: break; @@ -852,7 +1005,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.GLOBAL_KEYWORD; } case 121: break; - case 81: + case 77: { return PyTokenTypes.LAMBDA_KEYWORD; } case 122: break; @@ -860,7 +1013,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.XOREQ; } case 123: break; - case 63: + case 58: { return PyTokenTypes.FOR_KEYWORD; } case 124: break; @@ -868,7 +1021,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.AT; } case 125: break; - case 59: + case 60: { return PyTokenTypes.NOT_KEYWORD; } case 126: break; @@ -876,7 +1029,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.PLUS; } case 127: break; - case 37: + case 38: { return PyTokenTypes.MINUSEQ; } case 128: break; @@ -912,11 +1065,11 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.LE; } case 136: break; - case 58: + case 59: { return PyTokenTypes.AND_KEYWORD; } case 137: break; - case 41: + case 37: { return PyTokenTypes.OR_KEYWORD; } case 138: break; @@ -944,11 +1097,11 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.DIVEQ; } case 144: break; - case 80: + case 79: { return PyTokenTypes.RETURN_KEYWORD; } case 145: break; - case 77: + case 80: { return PyTokenTypes.IMPORT_KEYWORD; } case 146: break; @@ -964,7 +1117,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.DEF_KEYWORD; } case 149: break; - case 39: + case 41: { return PyTokenTypes.IS_KEYWORD; } case 150: break; @@ -984,7 +1137,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.PERCEQ; } case 154: break; - case 62: + case 63: { return PyTokenTypes.TRY_KEYWORD; } case 155: break; @@ -996,7 +1149,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.EQ; } case 157: break; - case 70: + case 68: { return PyTokenTypes.FROM_KEYWORD; } case 158: break; @@ -1004,7 +1157,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.EXPEQ; } case 159: break; - case 68: + case 69: { return PyTokenTypes.ELIF_KEYWORD; } case 160: break; @@ -1016,7 +1169,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.CLASS_KEYWORD; } case 162: break; - case 40: + case 39: { return PyTokenTypes.IF_KEYWORD; } case 163: break; @@ -1036,7 +1189,7 @@ class _PythonLexer implements FlexLexer { { return PyTokenTypes.XOR; } case 167: break; - case 60: + case 62: { return PyTokenTypes.DEL_KEYWORD; } case 168: break; From 072bcf317543dc6195f961417067611b27eb7815 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 26 Jan 2010 20:44:34 +0300 Subject: [PATCH 5/5] version and since-build --- python/pluginSrc/META-INF/plugin.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/pluginSrc/META-INF/plugin.xml b/python/pluginSrc/META-INF/plugin.xml index 020f3b021811..5aba03ca943f 100644 --- a/python/pluginSrc/META-INF/plugin.xml +++ b/python/pluginSrc/META-INF/plugin.xml @@ -4,14 +4,14 @@ Pythonid Python - + Smart editing for Python scripts - 2.2.1 + 2.5 com.intellij.modules.ultimate JetBrains, Keith Lea Version 2.2 Release Notes + Version 2.5 Release Notes ]]>