From 4b5bd21c0bff21da8f79e0a530370e68d96e083a Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Mon, 20 Aug 2012 15:18:17 +0400 Subject: [PATCH 1/4] fixed PY-7128 Specify type for reference using annotation: IOOBE at com.intellij.openapi.editor.impl.EditorImpl.a --- .../SpecifyTypeInPy3AnnotationsIntention.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/SpecifyTypeInPy3AnnotationsIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/SpecifyTypeInPy3AnnotationsIntention.java index e9112334686c..359c8928b0dc 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/SpecifyTypeInPy3AnnotationsIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/SpecifyTypeInPy3AnnotationsIntention.java @@ -4,6 +4,8 @@ import com.intellij.codeInsight.CodeInsightUtilBase; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInsight.template.*; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; @@ -139,22 +141,33 @@ public class SpecifyTypeInPy3AnnotationsIntention implements IntentionAction { Callable callable = ((PyCallExpression)assignedValue).resolveCalleeFunction(PyResolveContext.defaultContext()); if (callable instanceof PyFunction && ((PyFunction)callable).getAnnotation() == null) { final String functionSignature = "def " + callable.getName() + callable.getParameterList().getText(); + String functionText = functionSignature + + " -> object:"; + for (PyStatement st : ((PyFunction)callable).getStatementList().getStatements()) { + functionText = functionText + "\n\t" + st.getText(); + } final PyFunction function = elementGenerator.createFromText(LanguageLevel.forElement(problemElement), PyFunction.class, - functionSignature + - " -> object:\n\t" + - ((PyFunction)callable).getStatementList().getText()); + functionText); callable = (PyFunction)callable.replace(function); callable = CodeInsightUtilBase.forcePsiPostprocessAndRestoreElement(callable); final PyExpression value = ((PyFunction)callable).getAnnotation().getValue(); final int offset = value.getTextOffset(); - editor.getCaretModel().moveToOffset(offset); final TemplateBuilder builder = TemplateBuilderFactory.getInstance(). createTemplateBuilder(value); builder.replaceRange(TextRange.create(0, PyNames.OBJECT.length()), PyNames.OBJECT); Template template = ((TemplateBuilderImpl)builder).buildInlineTemplate(); - TemplateManager.getInstance(project).startTemplate(editor, template); + OpenFileDescriptor descriptor = new OpenFileDescriptor( + project, + value.getContainingFile().getVirtualFile(), + offset + ); + Editor targetEditor = FileEditorManager.getInstance(project).openTextEditor(descriptor, true); + if (targetEditor != null) { + targetEditor.getCaretModel().moveToOffset(offset); + TemplateManager.getInstance(project).startTemplate(targetEditor, template); + } } } } From ea74f4e7073ba8c3c75e1feac80adf58bb9a5e13 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 21 Aug 2012 13:02:29 +0400 Subject: [PATCH 2/4] fixed PY-7151 Convert triple-quoted string to single-quoted string: do not wrap string with parenthesis if initial string is already inside them --- .../PyConvertTripleQuotedStringIntention.java | 32 +++++-------------- .../afterConvertTripleQuotedString.py | 8 +++-- 2 files changed, 13 insertions(+), 27 deletions(-) diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertTripleQuotedStringIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertTripleQuotedStringIntention.java index acc5d13fa647..035f199d2358 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertTripleQuotedStringIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertTripleQuotedStringIntention.java @@ -1,9 +1,9 @@ package com.jetbrains.python.codeInsight.intentions; import com.intellij.codeInsight.intention.impl.BaseIntentionAction; -import com.intellij.lang.ASTNode; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; @@ -59,28 +59,12 @@ public class PyConvertTripleQuotedStringIntention extends BaseIntentionAction { PyStringLiteralExpression string = PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PyStringLiteralExpression.class); PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project); if (string != null) { - StringBuilder strBuilder = new StringBuilder(); - List nodes = string.getStringNodes(); - if (nodes.size() == 1) - strBuilder.append(string.getText()); - else { - // There possible situation that several triple quoted string are situated together - String firstNode = nodes.get(0).getText(); - strBuilder.append(firstNode.substring(0, firstNode.length()-3)); - for (int i = 1; i != nodes.size(); ++i) { - ASTNode node = nodes.get(i); - String text = node.getText(); - if (text.length() > 3) - strBuilder.append(text.substring(3, text.length()-3)); - } - strBuilder.append(firstNode.substring(0, 3)); - } - String stringText = strBuilder.toString(); - String[] subStrings = stringText.split("\n"); + String stringText = string.getStringValue(); + List subStrings = StringUtil.split(stringText, "\n", false, true); - Character firstQuote = stringText.charAt(0); + Character firstQuote = string.getText().charAt(0); StringBuilder result = new StringBuilder(); - if (subStrings.length != 1) + if (subStrings.size() != 1) result.append("("); boolean lastString = false; for (String s : subStrings) { @@ -93,9 +77,9 @@ public class PyConvertTripleQuotedStringIntention extends BaseIntentionAction { result.append(validSubstring); result.append(firstQuote); if (!lastString) - result.append(" ").append(firstQuote).append("\\n").append(firstQuote).append("\n"); + result.append(" ").append("\n"); } - if (subStrings.length != 1) + if (subStrings.size() != 1) result.append(")"); PyExpressionStatement e = elementGenerator.createFromText(LanguageLevel.forElement(string), PyExpressionStatement.class, result.toString()); string.replace(e.getExpression()); @@ -111,7 +95,7 @@ public class PyConvertTripleQuotedStringIntention extends BaseIntentionAction { subString = convertToValidSubString(trimmed.substring(0, trimmed.length() - 3), firstQuote); } else { - s = s.trim(); + s = StringUtil.escapeStringCharacters(s); StringBuilder stringBuilder = new StringBuilder(); for (Character ch : s.toCharArray()) { if (ch == firstQuote) { diff --git a/python/testData/intentions/afterConvertTripleQuotedString.py b/python/testData/intentions/afterConvertTripleQuotedString.py index 500ade9f6205..2736bd1ffbf0 100644 --- a/python/testData/intentions/afterConvertTripleQuotedString.py +++ b/python/testData/intentions/afterConvertTripleQuotedString.py @@ -1,5 +1,7 @@ if True: if True: - a = ('\'Hello\' - said man.\n' '\n' - 'Let\'s go.' '\n' - 'And they went out.') \ No newline at end of file + a = ('\'Hello\' - said man.\n' + '\n' + ' Let\'s go.\n' + ' And they went out.' + ) \ No newline at end of file From d65ea55b5df7eb7be01c2a142191a94732e0d283 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 21 Aug 2012 15:29:47 +0400 Subject: [PATCH 3/4] fixed PY-7252 EAP - PyCharm running py.test shows green success icons on left side of run dialog even when py.test reports an error. --- python/helpers/pycharm/pytest_teamcity.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python/helpers/pycharm/pytest_teamcity.py b/python/helpers/pycharm/pytest_teamcity.py index 63f329731503..aab0666ec0a9 100644 --- a/python/helpers/pycharm/pytest_teamcity.py +++ b/python/helpers/pycharm/pytest_teamcity.py @@ -67,6 +67,8 @@ if PYVERSION > [1, 4, 0]: items[nodeid] = name def pytest_runtest_logreport(report): + if report.when != "call": + return name = items[report.nodeid] if report.failed: messages.testFailed(name, details=report.longrepr) @@ -126,7 +128,8 @@ else: messages.testFailed(name, details=report.longrepr) elif report.skipped: messages.testIgnored(name) - messages.testFinished(name) + else: + messages.testFinished(name) def pytest_collectreport(report): if report.collector.name != "()": From a72c563a1c2b632e3d6548b731b0f293cf7e5bad Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 21 Aug 2012 19:31:16 +0400 Subject: [PATCH 4/4] fixed PY-7255 String value in dict literal incorrectly formatted as comment/docstring PY-5224 String literal after for statement erroneously highlighted as docstring --- .../com/jetbrains/python/lexer/Python.flex | 13 +- .../jetbrains/python/lexer/_PythonLexer.java | 1077 +++++++++-------- .../com/jetbrains/python/PythonLexerTest.java | 13 + 3 files changed, 565 insertions(+), 538 deletions(-) diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex index b59904e93678..c7dcb46acc12 100644 --- a/python/src/com/jetbrains/python/lexer/Python.flex +++ b/python/src/com/jetbrains/python/lexer/Python.flex @@ -70,6 +70,7 @@ APOS_STRING_CHAR = [^\\'] | {ANY_ESCAPE_SEQUENCE} | {ONE_TWO_APOS} TRIPLE_APOS_LITERAL = {THREE_APOS} {APOS_STRING_CHAR}* {THREE_APOS}? %state PENDING_DOCSTRING +%state IN_DOCSTRING_OWNER %state USUAL %{ private int getSpaceLength(CharSequence string) { @@ -92,7 +93,7 @@ return yylength()-i-1; . { yypushback(1); yybegin(PENDING_DOCSTRING);} } - { + { {LONGINTEGER} { return PyTokenTypes.INTEGER_LITERAL; } {INTEGER} { return PyTokenTypes.INTEGER_LITERAL; } {FLOATNUMBER} { return PyTokenTypes.FLOAT_LITERAL; } @@ -104,9 +105,9 @@ return yylength()-i-1; "and" { return PyTokenTypes.AND_KEYWORD; } "assert" { return PyTokenTypes.ASSERT_KEYWORD; } "break" { return PyTokenTypes.BREAK_KEYWORD; } -"class" { return PyTokenTypes.CLASS_KEYWORD; } +"class" { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; } "continue" { return PyTokenTypes.CONTINUE_KEYWORD; } -"def" { return PyTokenTypes.DEF_KEYWORD; } +"def" { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; } "del" { return PyTokenTypes.DEL_KEYWORD; } "elif" { return PyTokenTypes.ELIF_KEYWORD; } "else" { return PyTokenTypes.ELSE_KEYWORD; } @@ -172,7 +173,7 @@ return yylength()-i-1; "@" { return PyTokenTypes.AT; } "," { return PyTokenTypes.COMMA; } ":" { return PyTokenTypes.COLON; } -":"(\ )*"\n" { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; } + "." { return PyTokenTypes.DOT; } "`" { return PyTokenTypes.TICK; } "=" { return PyTokenTypes.EQ; } @@ -181,6 +182,10 @@ return yylength()-i-1; . { return PyTokenTypes.BAD_CHARACTER; } } + { +":"(\ )*"\n" { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; } +} + { {SINGLE_QUOTED_STRING} { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; else yybegin(USUAL); return PyTokenTypes.SINGLE_QUOTED_STRING; } diff --git a/python/src/com/jetbrains/python/lexer/_PythonLexer.java b/python/src/com/jetbrains/python/lexer/_PythonLexer.java index 80fe8f33dc94..d02de6d37b9d 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 9/28/11 8:24 PM */ +/* The following code was generated by JFlex 1.4.3 on 8/21/12 6:27 PM */ /* It's an automatically generated code. Do not modify it. */ package com.jetbrains.python.lexer; @@ -12,8 +12,8 @@ import com.intellij.openapi.util.text.StringUtil; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 9/28/11 8:24 PM from the specification file - * /home/user/src/idea/tools/lexer/../../python/src/com/jetbrains/python/lexer/Python.flex + * on 8/21/12 6:27 PM from the specification file + * ./Python.flex */ class _PythonLexer implements FlexLexer { /** initial size of the lookahead buffer */ @@ -21,8 +21,9 @@ class _PythonLexer implements FlexLexer { /** lexical states */ public static final int YYINITIAL = 0; + public static final int IN_DOCSTRING_OWNER = 4; public static final int PENDING_DOCSTRING = 2; - public static final int USUAL = 4; + public static final int USUAL = 6; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l @@ -30,14 +31,14 @@ class _PythonLexer implements FlexLexer { * at the beginning of a line * l is of the form l = 2*k, k a non negative integer */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2 + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3 }; - /** + /** * Translates characters to character classes */ - private static final String ZZ_CMAP_PACKED = + private static final String ZZ_CMAP_PACKED = "\11\0\1\43\1\41\1\0\1\44\1\13\22\0\1\42\1\74\1\40"+ "\1\12\1\0\1\66\1\67\1\36\1\76\1\77\1\64\1\62\1\105"+ "\1\26\1\23\1\65\1\1\1\5\6\3\2\2\1\106\1\110\1\73"+ @@ -206,39 +207,39 @@ class _PythonLexer implements FlexLexer { "\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 */ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** + /** * Translates DFA states to action switch labels. */ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\3\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7"+ + "\4\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7"+ "\3\10\2\11\1\12\2\13\6\14\1\15\1\14\1\16"+ "\3\14\2\17\11\14\1\20\1\21\1\22\1\23\1\24"+ "\1\25\1\26\1\27\1\30\1\31\1\12\1\32\1\33"+ "\1\34\1\35\1\36\1\37\1\40\1\41\1\42\1\43"+ - "\1\44\1\45\1\0\3\11\1\46\3\11\1\13\4\0"+ - "\1\13\1\47\1\0\1\50\3\14\1\51\4\14\1\52"+ - "\4\14\6\17\5\14\1\53\1\54\1\55\5\14\1\56"+ - "\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66"+ - "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\76"+ - "\1\0\1\11\1\77\1\100\1\0\1\77\3\13\1\47"+ - "\1\0\1\101\13\14\1\17\2\102\1\103\1\14\1\104"+ - "\1\105\1\106\1\107\5\14\1\110\1\111\1\112\1\113"+ - "\1\0\2\100\1\0\1\114\4\14\1\115\1\116\4\14"+ - "\4\0\2\14\1\117\3\14\1\0\2\77\1\0\1\14"+ - "\1\120\3\14\1\121\1\14\1\122\1\0\2\102\1\0"+ - "\2\14\1\123\1\14\1\124\3\77\1\14\1\125\1\126"+ - "\1\14\1\127\3\102\1\130\1\131\1\132\2\0\1\133"+ - "\1\14\2\0\2\77\1\134\2\102"; + "\1\44\1\45\1\43\1\0\3\11\1\46\3\11\1\13"+ + "\4\0\1\13\1\47\1\0\1\50\3\14\1\51\4\14"+ + "\1\52\4\14\6\17\5\14\1\53\1\54\1\55\5\14"+ + "\1\56\1\57\1\60\1\61\1\62\1\63\1\64\1\65"+ + "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ + "\1\76\1\0\1\11\1\77\1\100\1\0\1\77\3\13"+ + "\1\47\1\0\1\101\13\14\1\17\2\102\1\103\1\14"+ + "\1\104\1\105\1\106\1\107\5\14\1\110\1\111\1\112"+ + "\1\113\1\0\2\100\1\0\1\114\4\14\1\115\1\116"+ + "\4\14\4\0\2\14\1\117\3\14\1\0\2\77\1\0"+ + "\1\14\1\120\3\14\1\121\1\14\1\122\1\0\2\102"+ + "\1\0\2\14\1\123\1\14\1\124\3\77\1\14\1\125"+ + "\1\126\1\14\1\127\3\102\1\130\1\131\1\132\2\0"+ + "\1\133\1\14\2\0\2\77\1\134\2\102"; private static int [] zzUnpackAction() { - int [] result = new int[242]; + int [] result = new int[244]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -257,46 +258,46 @@ class _PythonLexer implements FlexLexer { } - /** + /** * Translates a state to a row index in the transition table */ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\111\0\222\0\333\0\u0124\0\333\0\333\0\333"+ - "\0\333\0\333\0\333\0\u016d\0\u01b6\0\u01ff\0\u0248\0\333"+ - "\0\u0291\0\u02da\0\u0323\0\u036c\0\u03b5\0\u03fe\0\u0447\0\u0490"+ + "\0\0\0\111\0\222\0\333\0\u0124\0\u016d\0\u0124\0\u0124"+ + "\0\u0124\0\u0124\0\u0124\0\u0124\0\u01b6\0\u01ff\0\u0248\0\u0291"+ + "\0\u0124\0\u02da\0\u0323\0\u036c\0\u03b5\0\u03fe\0\u0447\0\u0490"+ "\0\u04d9\0\u0522\0\u056b\0\u05b4\0\u05fd\0\u0646\0\u068f\0\u06d8"+ "\0\u0721\0\u076a\0\u07b3\0\u07fc\0\u0845\0\u088e\0\u08d7\0\u0920"+ "\0\u0969\0\u09b2\0\u09fb\0\u0a44\0\u0a8d\0\u0ad6\0\u0b1f\0\u0b68"+ - "\0\u0bb1\0\u0bfa\0\u0c43\0\u0c8c\0\333\0\333\0\333\0\333"+ - "\0\333\0\333\0\333\0\333\0\333\0\u0cd5\0\333\0\333"+ - "\0\u01b6\0\u0d1e\0\u0d67\0\u0db0\0\333\0\u0df9\0\u0e42\0\u0e8b"+ - "\0\u0ed4\0\u0f1d\0\u0f66\0\u0faf\0\u0ff8\0\333\0\u1041\0\u108a"+ - "\0\333\0\u10d3\0\u111c\0\u1165\0\u036c\0\u11ae\0\u11f7\0\u1240"+ - "\0\u1289\0\333\0\u12d2\0\u131b\0\u1364\0\u13ad\0\u13f6\0\u143f"+ - "\0\u1488\0\u14d1\0\u151a\0\u1563\0\u15ac\0\u15f5\0\u163e\0\u1687"+ - "\0\u16d0\0\u036c\0\u036c\0\u036c\0\u1719\0\u1762\0\u17ab\0\u17f4"+ - "\0\u183d\0\333\0\333\0\333\0\u1886\0\333\0\u18cf\0\333"+ - "\0\333\0\333\0\333\0\333\0\u1918\0\333\0\333\0\u1961"+ - "\0\333\0\333\0\u0cd5\0\u19aa\0\u19f3\0\333\0\u19aa\0\u1a3c"+ - "\0\u1a85\0\u1ace\0\u1b17\0\u1b60\0\u1ba9\0\u036c\0\u1bf2\0\u1c3b"+ - "\0\u1c84\0\u1ccd\0\u1d16\0\u1d5f\0\u1da8\0\u1df1\0\u1e3a\0\u1e83"+ - "\0\u1ecc\0\333\0\u1f15\0\u1f5e\0\u036c\0\u1fa7\0\u036c\0\u036c"+ - "\0\u036c\0\u036c\0\u1ff0\0\u2039\0\u2082\0\u20cb\0\u2114\0\333"+ - "\0\333\0\333\0\333\0\u215d\0\u21a6\0\u21ef\0\u2238\0\u036c"+ - "\0\u2281\0\u22ca\0\u2313\0\u235c\0\u036c\0\u036c\0\u23a5\0\u23ee"+ - "\0\u2437\0\u2480\0\u24c9\0\u2512\0\u255b\0\u25a4\0\u25ed\0\u2636"+ - "\0\u036c\0\u267f\0\u26c8\0\u2711\0\u275a\0\u27a3\0\u27ec\0\u2835"+ - "\0\u287e\0\u036c\0\u28c7\0\u2910\0\u2959\0\u036c\0\u29a2\0\u036c"+ - "\0\u29eb\0\u2a34\0\u2a7d\0\u2ac6\0\u2b0f\0\u2b58\0\u036c\0\u2ba1"+ - "\0\u036c\0\u19aa\0\u2bea\0\u2c33\0\u2c7c\0\u036c\0\u036c\0\u2cc5"+ - "\0\u036c\0\333\0\u2d0e\0\u2d57\0\u036c\0\u036c\0\u036c\0\u2da0"+ - "\0\u2de9\0\u036c\0\u2e32\0\u2e7b\0\u2ec4\0\u275a\0\u2835\0\u036c"+ - "\0\u29eb\0\u2ac6"; + "\0\u0bb1\0\u0bfa\0\u0c43\0\u0c8c\0\u0cd5\0\u0124\0\u0124\0\u0124"+ + "\0\u0124\0\u0124\0\u0124\0\u0124\0\u0124\0\u0124\0\u0d1e\0\u0124"+ + "\0\u0124\0\u0124\0\u01ff\0\u0d67\0\u0db0\0\u0df9\0\u0124\0\u0e42"+ + "\0\u0e8b\0\u0ed4\0\u0f1d\0\u0f66\0\u0faf\0\u0ff8\0\u1041\0\u0124"+ + "\0\u108a\0\u10d3\0\u0124\0\u111c\0\u1165\0\u11ae\0\u03b5\0\u11f7"+ + "\0\u1240\0\u1289\0\u12d2\0\u0124\0\u131b\0\u1364\0\u13ad\0\u13f6"+ + "\0\u143f\0\u1488\0\u14d1\0\u151a\0\u1563\0\u15ac\0\u15f5\0\u163e"+ + "\0\u1687\0\u16d0\0\u1719\0\u03b5\0\u03b5\0\u03b5\0\u1762\0\u17ab"+ + "\0\u17f4\0\u183d\0\u1886\0\u0124\0\u0124\0\u0124\0\u18cf\0\u0124"+ + "\0\u1918\0\u0124\0\u0124\0\u0124\0\u0124\0\u0124\0\u1961\0\u0124"+ + "\0\u0124\0\u19aa\0\u0124\0\u0124\0\u0d1e\0\u19f3\0\u1a3c\0\u0124"+ + "\0\u19f3\0\u1a85\0\u1ace\0\u1b17\0\u1b60\0\u1ba9\0\u1bf2\0\u03b5"+ + "\0\u1c3b\0\u1c84\0\u1ccd\0\u1d16\0\u1d5f\0\u1da8\0\u1df1\0\u1e3a"+ + "\0\u1e83\0\u1ecc\0\u1f15\0\u0124\0\u1f5e\0\u1fa7\0\u03b5\0\u1ff0"+ + "\0\u03b5\0\u03b5\0\u03b5\0\u03b5\0\u2039\0\u2082\0\u20cb\0\u2114"+ + "\0\u215d\0\u0124\0\u0124\0\u0124\0\u0124\0\u21a6\0\u21ef\0\u2238"+ + "\0\u2281\0\u03b5\0\u22ca\0\u2313\0\u235c\0\u23a5\0\u03b5\0\u03b5"+ + "\0\u23ee\0\u2437\0\u2480\0\u24c9\0\u2512\0\u255b\0\u25a4\0\u25ed"+ + "\0\u2636\0\u267f\0\u03b5\0\u26c8\0\u2711\0\u275a\0\u27a3\0\u27ec"+ + "\0\u2835\0\u287e\0\u28c7\0\u03b5\0\u2910\0\u2959\0\u29a2\0\u03b5"+ + "\0\u29eb\0\u03b5\0\u2a34\0\u2a7d\0\u2ac6\0\u2b0f\0\u2b58\0\u2ba1"+ + "\0\u03b5\0\u2bea\0\u03b5\0\u19f3\0\u2c33\0\u2c7c\0\u2cc5\0\u03b5"+ + "\0\u03b5\0\u2d0e\0\u03b5\0\u0124\0\u2d57\0\u2da0\0\u03b5\0\u03b5"+ + "\0\u03b5\0\u2de9\0\u2e32\0\u03b5\0\u2e7b\0\u2ec4\0\u2f0d\0\u27a3"+ + "\0\u287e\0\u03b5\0\u2a34\0\u2b0f"; private static int [] zzUnpackRowMap() { - int [] result = new int[242]; + int [] result = new int[244]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -313,199 +314,207 @@ class _PythonLexer implements FlexLexer { return j; } - /** + /** * The transition table of the DFA */ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = - "\12\4\1\5\24\4\1\6\1\4\1\7\1\10\1\11"+ - "\1\12\44\4\10\13\1\14\1\13\1\5\5\13\1\14"+ - "\7\13\4\14\2\15\1\16\1\6\1\17\1\7\1\10"+ - "\1\11\1\12\44\13\1\20\1\21\2\22\1\23\1\22"+ - "\1\24\1\25\1\26\1\27\1\5\1\20\4\24\1\30"+ - "\1\24\1\20\1\31\1\32\1\24\1\33\1\24\1\34"+ - "\3\30\1\35\1\36\1\37\1\6\1\40\1\7\1\10"+ - "\1\11\1\12\1\41\1\42\1\43\1\24\1\44\1\24"+ - "\1\45\1\46\1\47\1\24\1\50\1\51\1\24\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\1\72"+ - "\1\73\1\74\1\75\1\76\1\77\1\100\111\0\13\5"+ - "\1\0\25\5\1\0\47\5\34\0\2\101\1\16\1\0"+ - "\1\17\106\0\1\16\1\0\1\17\50\0\13\102\1\0"+ - "\22\102\1\103\1\104\1\102\1\105\47\102\13\106\1\0"+ - "\23\106\1\107\1\110\1\105\47\106\1\0\1\111\1\112"+ - "\1\111\1\0\1\111\1\113\1\114\1\115\1\116\4\0"+ - "\1\113\1\114\1\115\1\116\1\0\1\117\2\120\1\0"+ - "\1\121\62\0\3\22\1\0\1\22\3\0\1\116\7\0"+ - "\1\116\1\0\1\117\2\120\1\0\1\121\62\0\6\24"+ - "\1\122\2\24\2\0\7\24\1\0\2\24\1\0\6\24"+ - "\1\123\7\0\6\24\1\124\6\24\30\0\11\24\2\0"+ - "\7\24\1\0\2\24\1\0\7\24\7\0\15\24\30\0"+ - "\11\24\2\0\7\24\1\0\2\24\1\0\6\24\1\125"+ - "\7\0\15\24\30\0\11\24\2\0\7\24\1\0\2\24"+ - "\1\0\5\24\1\35\1\126\1\37\1\0\1\40\4\0"+ - "\15\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\1\127\14\24\30\0\11\24\2\0\7\24"+ - "\1\0\2\24\1\0\5\24\2\35\1\37\1\0\1\40"+ - "\4\0\15\24\30\0\3\117\1\0\1\117\104\0\5\24"+ - "\1\130\2\24\1\131\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\15\24\112\0\1\132\26\0\6\24\1\133"+ - "\1\24\1\134\2\0\7\24\1\0\2\24\1\0\5\24"+ - "\2\35\1\37\1\0\1\40\4\0\15\24\30\0\11\24"+ - "\2\0\7\24\1\0\2\24\1\0\7\24\1\37\1\0"+ - "\1\40\4\0\15\24\30\0\11\24\2\0\7\24\1\0"+ - "\1\135\1\24\1\0\7\24\1\37\1\0\1\40\4\0"+ - "\1\136\14\24\27\0\13\137\1\0\22\137\1\140\1\141"+ - "\1\137\1\0\47\137\13\142\1\0\23\142\1\143\1\144"+ - "\1\0\47\142\1\0\11\24\2\0\7\24\1\0\2\24"+ - "\1\0\7\24\7\0\1\24\1\145\1\24\1\146\11\24"+ - "\30\0\6\24\1\147\2\24\2\0\7\24\1\0\2\24"+ - "\1\0\7\24\7\0\15\24\30\0\11\24\2\0\7\24"+ - "\1\0\1\150\1\24\1\0\7\24\7\0\15\24\30\0"+ - "\11\24\2\0\7\24\1\0\2\24\1\0\6\24\1\151"+ - "\7\0\15\24\30\0\3\24\1\152\5\24\2\0\7\24"+ - "\1\0\2\24\1\0\7\24\7\0\1\24\1\153\1\24"+ - "\1\154\5\24\1\155\3\24\30\0\11\24\2\0\7\24"+ - "\1\0\2\24\1\0\7\24\7\0\1\156\14\24\30\0"+ - "\11\24\2\0\7\24\1\0\2\24\1\0\7\24\7\0"+ - "\6\24\1\157\6\24\30\0\10\24\1\160\2\0\7\24"+ - "\1\0\2\24\1\0\7\24\7\0\15\24\30\0\11\24"+ - "\2\0\7\24\1\0\2\24\1\0\7\24\7\0\14\24"+ - "\1\161\112\0\1\162\110\0\1\163\110\0\1\164\1\165"+ - "\107\0\1\166\1\0\1\167\106\0\1\170\110\0\1\171"+ - "\110\0\1\172\110\0\1\173\110\0\1\174\6\0\1\175"+ - "\101\0\1\176\6\0\1\177\1\200\100\0\1\201\66\0"+ - "\1\202\1\203\46\0\13\102\1\0\22\102\1\204\1\104"+ - "\1\102\1\105\47\102\36\0\1\205\1\206\1\0\1\105"+ - "\2\207\44\0\1\105\111\102\13\106\1\0\23\106\1\107"+ - "\1\204\1\105\160\106\37\0\1\206\1\210\1\105\2\207"+ - "\44\0\1\105\1\0\1\111\1\112\1\111\1\0\1\111"+ - "\3\0\1\116\7\0\1\116\1\0\1\117\2\120\1\0"+ - "\1\121\62\0\3\112\1\0\1\112\15\0\1\117\2\120"+ - "\1\0\1\121\62\0\5\211\2\0\1\211\4\0\1\211"+ - "\2\0\1\211\3\0\2\211\2\0\2\211\13\0\1\211"+ - "\1\0\1\211\42\0\1\212\1\0\1\212\1\0\1\212"+ - "\104\0\1\213\3\0\1\213\104\0\3\117\1\0\1\117"+ - "\16\0\2\120\1\0\1\121\62\0\3\214\1\0\1\214"+ - "\20\0\1\215\33\0\1\215\27\0\11\24\2\0\7\24"+ - "\1\0\2\24\1\0\6\24\1\216\7\0\15\24\30\0"+ - "\6\24\1\217\2\24\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\15\24\30\0\11\24\2\0\7\24\1\0"+ - "\2\24\1\0\7\24\7\0\1\24\1\220\13\24\30\0"+ - "\11\24\2\0\7\24\1\0\1\221\1\24\1\0\7\24"+ - "\1\37\1\0\1\40\4\0\15\24\30\0\11\24\2\0"+ - "\7\24\1\0\2\24\1\0\7\24\7\0\11\24\1\222"+ - "\3\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+ - "\1\24\1\223\5\24\7\0\15\24\30\0\11\24\2\0"+ - "\7\24\1\0\2\24\1\0\7\24\7\0\3\24\1\224"+ - "\2\24\1\225\6\24\30\0\11\24\2\0\7\24\1\0"+ - "\2\24\1\0\7\24\7\0\1\24\1\226\13\24\30\0"+ - "\11\24\2\0\7\24\1\0\2\24\1\0\7\24\7\0"+ - "\1\227\14\24\30\0\11\24\2\0\7\24\1\0\2\24"+ - "\1\0\7\24\7\0\4\24\1\230\10\24\30\0\11\24"+ - "\2\0\7\24\1\0\2\24\1\0\7\24\7\0\6\24"+ - "\1\231\6\24\27\0\13\137\1\0\22\137\1\232\1\141"+ - "\1\137\1\0\47\137\36\0\1\233\52\0\111\137\13\142"+ - "\1\0\23\142\1\143\1\232\1\0\160\142\40\0\1\234"+ - "\51\0\11\24\2\0\7\24\1\0\2\24\1\0\7\24"+ - "\7\0\2\24\1\235\12\24\30\0\11\24\2\0\7\24"+ - "\1\0\2\24\1\0\7\24\7\0\3\24\1\236\11\24"+ - "\30\0\11\24\2\0\7\24\1\0\2\24\1\0\7\24"+ - "\7\0\4\24\1\237\10\24\30\0\3\24\1\240\4\24"+ - "\1\241\2\0\7\24\1\0\2\24\1\0\7\24\7\0"+ - "\15\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\10\24\1\242\4\24\30\0\11\24\2\0"+ - "\7\24\1\0\2\24\1\0\7\24\7\0\7\24\1\243"+ - "\5\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\3\24\1\244\11\24\30\0\11\24\2\0"+ - "\7\24\1\0\1\245\1\24\1\0\7\24\7\0\15\24"+ - "\30\0\6\24\1\246\2\24\2\0\7\24\1\0\2\24"+ - "\1\0\7\24\7\0\15\24\30\0\11\24\2\0\7\24"+ - "\1\0\2\24\1\0\7\24\7\0\6\24\1\247\6\24"+ - "\112\0\1\250\110\0\1\251\110\0\1\252\110\0\1\253"+ - "\64\0\1\206\1\0\1\105\2\207\44\0\1\105\36\205"+ - "\1\254\1\255\51\205\37\210\1\256\1\257\50\210\1\0"+ - "\5\211\2\0\1\211\1\116\3\0\1\211\2\0\1\211"+ - "\1\116\2\0\2\211\2\0\2\211\13\0\1\211\1\0"+ - "\1\211\42\0\1\212\1\0\1\212\1\0\1\212\3\0"+ - "\1\116\7\0\1\116\70\0\1\213\3\0\1\213\3\0"+ - "\1\116\7\0\1\116\70\0\3\214\1\0\1\214\21\0"+ - "\1\121\62\0\3\214\1\0\1\214\104\0\11\24\2\0"+ - "\7\24\1\0\2\24\1\0\7\24\7\0\11\24\1\260"+ - "\3\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\1\261\14\24\30\0\11\24\2\0\7\24"+ - "\1\0\2\24\1\0\7\24\7\0\1\262\14\24\30\0"+ - "\7\24\1\263\1\24\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\15\24\30\0\11\24\2\0\7\24\1\0"+ - "\1\264\1\24\1\0\7\24\7\0\15\24\30\0\11\24"+ - "\2\0\7\24\1\0\1\265\1\24\1\0\7\24\7\0"+ - "\15\24\30\0\3\24\1\266\5\24\2\0\7\24\1\0"+ - "\2\24\1\0\7\24\7\0\15\24\30\0\11\24\2\0"+ - "\7\24\1\0\2\24\1\0\7\24\7\0\4\24\1\267"+ - "\10\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\3\24\1\270\11\24\30\0\11\24\2\0"+ - "\7\24\1\0\2\24\1\0\4\24\1\271\2\24\7\0"+ - "\15\24\30\0\11\24\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\3\24\1\272\11\24\27\0\36\233\1\273"+ - "\1\274\51\233\37\234\1\275\1\276\50\234\1\0\11\24"+ - "\2\0\7\24\1\0\1\277\1\24\1\0\7\24\7\0"+ - "\15\24\30\0\6\24\1\300\2\24\2\0\7\24\1\0"+ - "\2\24\1\0\7\24\7\0\15\24\30\0\11\24\2\0"+ - "\7\24\1\0\2\24\1\0\7\24\7\0\3\24\1\301"+ - "\11\24\30\0\10\24\1\302\2\0\7\24\1\0\2\24"+ - "\1\0\7\24\7\0\15\24\30\0\7\24\1\303\1\24"+ - "\2\0\7\24\1\0\2\24\1\0\7\24\7\0\15\24"+ - "\30\0\10\24\1\304\2\0\7\24\1\0\2\24\1\0"+ - "\7\24\7\0\15\24\27\0\36\205\1\305\1\306\162\205"+ - "\150\210\1\307\1\310\50\210\1\0\10\24\1\311\2\0"+ - "\7\24\1\0\2\24\1\0\7\24\7\0\15\24\30\0"+ - "\11\24\2\0\7\24\1\0\2\24\1\0\7\24\7\0"+ - "\5\24\1\312\7\24\30\0\11\24\2\0\7\24\1\0"+ - "\2\24\1\0\7\24\7\0\2\24\1\313\12\24\30\0"+ - "\11\24\2\0\7\24\1\0\2\24\1\0\7\24\7\0"+ - "\7\24\1\314\5\24\30\0\11\24\2\0\7\24\1\0"+ - "\2\24\1\0\7\24\7\0\6\24\1\315\6\24\30\0"+ - "\11\24\2\0\7\24\1\0\2\24\1\0\7\24\7\0"+ - "\3\24\1\316\11\24\30\0\11\24\2\0\7\24\1\0"+ - "\2\24\1\0\6\24\1\317\7\0\15\24\30\0\11\24"+ - "\2\0\7\24\1\0\1\320\1\24\1\0\7\24\7\0"+ - "\15\24\27\0\36\233\1\321\1\322\162\233\150\234\1\323"+ - "\1\324\50\234\1\0\11\24\2\0\7\24\1\0\2\24"+ - "\1\0\6\24\1\325\7\0\15\24\30\0\11\24\2\0"+ - "\7\24\1\0\2\24\1\0\6\24\1\326\7\0\15\24"+ - "\30\0\11\24\2\0\7\24\1\0\2\24\1\0\7\24"+ - "\7\0\2\24\1\327\12\24\30\0\11\24\2\0\7\24"+ - "\1\0\2\24\1\0\7\24\7\0\1\330\14\24\30\0"+ - "\11\24\2\0\7\24\1\0\1\331\1\24\1\0\7\24"+ - "\7\0\15\24\27\0\36\205\1\332\1\306\107\205\1\333"+ - "\1\306\51\205\37\210\1\307\1\334\107\210\1\307\1\332"+ - "\50\210\1\0\10\24\1\335\2\0\7\24\1\0\2\24"+ - "\1\0\7\24\7\0\15\24\30\0\11\24\2\0\7\24"+ - "\1\0\2\24\1\0\7\24\7\0\1\336\14\24\30\0"+ - "\11\24\2\0\7\24\1\0\2\24\1\0\7\24\7\0"+ - "\4\24\1\337\10\24\30\0\11\24\2\0\7\24\1\0"+ - "\2\24\1\0\7\24\7\0\1\24\1\340\13\24\30\0"+ - "\11\24\2\0\7\24\1\0\2\24\1\0\7\24\7\0"+ - "\1\24\1\341\13\24\27\0\36\233\1\342\1\322\107\233"+ - "\1\343\1\322\51\233\37\234\1\323\1\344\107\234\1\323"+ - "\1\342\50\234\1\0\11\24\2\0\7\24\1\0\2\24"+ - "\1\0\7\24\7\0\4\24\1\345\10\24\30\0\11\24"+ - "\2\0\7\24\1\0\2\24\1\0\7\24\7\0\4\24"+ - "\1\346\10\24\30\0\10\24\1\347\2\0\7\24\1\0"+ - "\2\24\1\0\7\24\7\0\15\24\27\0\36\205\1\350"+ - "\1\306\51\205\37\210\1\307\1\351\50\210\1\0\11\24"+ - "\2\0\7\24\1\0\2\24\1\0\7\24\7\0\10\24"+ - "\1\352\4\24\30\0\11\24\2\0\7\24\1\0\2\24"+ - "\1\0\4\24\1\353\2\24\7\0\15\24\27\0\36\233"+ - "\1\354\1\322\51\233\37\234\1\323\1\355\50\234\36\205"+ - "\1\356\1\306\51\205\37\210\1\307\1\357\50\210\1\0"+ - "\11\24\2\0\7\24\1\0\1\360\1\24\1\0\7\24"+ - "\7\0\15\24\27\0\36\233\1\361\1\322\51\233\37\234"+ - "\1\323\1\362\50\234"; + "\12\5\1\6\24\5\1\7\1\5\1\10\1\11\1\12"+ + "\1\13\44\5\10\14\1\15\1\14\1\6\5\14\1\15"+ + "\7\14\4\15\2\16\1\17\1\7\1\20\1\10\1\11"+ + "\1\12\1\13\44\14\1\21\1\22\2\23\1\24\1\23"+ + "\1\25\1\26\1\27\1\30\1\6\1\21\4\25\1\31"+ + "\1\25\1\21\1\32\1\33\1\25\1\34\1\25\1\35"+ + "\3\31\1\36\1\37\1\40\1\7\1\41\1\10\1\11"+ + "\1\12\1\13\1\42\1\43\1\44\1\25\1\45\1\25"+ + "\1\46\1\47\1\50\1\25\1\51\1\52\1\25\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\1\72\1\73"+ + "\1\74\1\75\1\76\1\77\1\100\1\101\1\21\1\22"+ + "\2\23\1\24\1\23\1\25\1\26\1\27\1\30\1\6"+ + "\1\21\4\25\1\31\1\25\1\21\1\32\1\33\1\25"+ + "\1\34\1\25\1\35\3\31\1\36\1\37\1\40\1\7"+ + "\1\41\1\10\1\11\1\12\1\13\1\42\1\43\1\44"+ + "\1\25\1\45\1\25\1\46\1\47\1\50\1\25\1\51"+ + "\1\52\1\25\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\1\72\1\73\1\74\1\75\1\76\1\102\1\100"+ + "\1\101\111\0\13\6\1\0\25\6\1\0\47\6\34\0"+ + "\2\103\1\17\1\0\1\20\106\0\1\17\1\0\1\20"+ + "\50\0\13\104\1\0\22\104\1\105\1\106\1\104\1\107"+ + "\47\104\13\110\1\0\23\110\1\111\1\112\1\107\47\110"+ + "\1\0\1\113\1\114\1\113\1\0\1\113\1\115\1\116"+ + "\1\117\1\120\4\0\1\115\1\116\1\117\1\120\1\0"+ + "\1\121\2\122\1\0\1\123\62\0\3\23\1\0\1\23"+ + "\3\0\1\120\7\0\1\120\1\0\1\121\2\122\1\0"+ + "\1\123\62\0\6\25\1\124\2\25\2\0\7\25\1\0"+ + "\2\25\1\0\6\25\1\125\7\0\6\25\1\126\6\25"+ + "\30\0\11\25\2\0\7\25\1\0\2\25\1\0\7\25"+ + "\7\0\15\25\30\0\11\25\2\0\7\25\1\0\2\25"+ + "\1\0\6\25\1\127\7\0\15\25\30\0\11\25\2\0"+ + "\7\25\1\0\2\25\1\0\5\25\1\36\1\130\1\40"+ + "\1\0\1\41\4\0\15\25\30\0\11\25\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\1\131\14\25\30\0"+ + "\11\25\2\0\7\25\1\0\2\25\1\0\5\25\2\36"+ + "\1\40\1\0\1\41\4\0\15\25\30\0\3\121\1\0"+ + "\1\121\104\0\5\25\1\132\2\25\1\133\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\15\25\112\0\1\134"+ + "\26\0\6\25\1\135\1\25\1\136\2\0\7\25\1\0"+ + "\2\25\1\0\5\25\2\36\1\40\1\0\1\41\4\0"+ + "\15\25\30\0\11\25\2\0\7\25\1\0\2\25\1\0"+ + "\7\25\1\40\1\0\1\41\4\0\15\25\30\0\11\25"+ + "\2\0\7\25\1\0\1\137\1\25\1\0\7\25\1\40"+ + "\1\0\1\41\4\0\1\140\14\25\27\0\13\141\1\0"+ + "\22\141\1\142\1\143\1\141\1\0\47\141\13\144\1\0"+ + "\23\144\1\145\1\146\1\0\47\144\1\0\11\25\2\0"+ + "\7\25\1\0\2\25\1\0\7\25\7\0\1\25\1\147"+ + "\1\25\1\150\11\25\30\0\6\25\1\151\2\25\2\0"+ + "\7\25\1\0\2\25\1\0\7\25\7\0\15\25\30\0"+ + "\11\25\2\0\7\25\1\0\1\152\1\25\1\0\7\25"+ + "\7\0\15\25\30\0\11\25\2\0\7\25\1\0\2\25"+ + "\1\0\6\25\1\153\7\0\15\25\30\0\3\25\1\154"+ + "\5\25\2\0\7\25\1\0\2\25\1\0\7\25\7\0"+ + "\1\25\1\155\1\25\1\156\5\25\1\157\3\25\30\0"+ + "\11\25\2\0\7\25\1\0\2\25\1\0\7\25\7\0"+ + "\1\160\14\25\30\0\11\25\2\0\7\25\1\0\2\25"+ + "\1\0\7\25\7\0\6\25\1\161\6\25\30\0\10\25"+ + "\1\162\2\0\7\25\1\0\2\25\1\0\7\25\7\0"+ + "\15\25\30\0\11\25\2\0\7\25\1\0\2\25\1\0"+ + "\7\25\7\0\14\25\1\163\112\0\1\164\110\0\1\165"+ + "\110\0\1\166\1\167\107\0\1\170\1\0\1\171\106\0"+ + "\1\172\110\0\1\173\110\0\1\174\110\0\1\175\110\0"+ + "\1\176\6\0\1\177\101\0\1\200\6\0\1\201\1\202"+ + "\100\0\1\203\66\0\1\204\1\205\46\0\13\104\1\0"+ + "\22\104\1\206\1\106\1\104\1\107\47\104\36\0\1\207"+ + "\1\210\1\0\1\107\2\211\44\0\1\107\111\104\13\110"+ + "\1\0\23\110\1\111\1\206\1\107\160\110\37\0\1\210"+ + "\1\212\1\107\2\211\44\0\1\107\1\0\1\113\1\114"+ + "\1\113\1\0\1\113\3\0\1\120\7\0\1\120\1\0"+ + "\1\121\2\122\1\0\1\123\62\0\3\114\1\0\1\114"+ + "\15\0\1\121\2\122\1\0\1\123\62\0\5\213\2\0"+ + "\1\213\4\0\1\213\2\0\1\213\3\0\2\213\2\0"+ + "\2\213\13\0\1\213\1\0\1\213\42\0\1\214\1\0"+ + "\1\214\1\0\1\214\104\0\1\215\3\0\1\215\104\0"+ + "\3\121\1\0\1\121\16\0\2\122\1\0\1\123\62\0"+ + "\3\216\1\0\1\216\20\0\1\217\33\0\1\217\27\0"+ + "\11\25\2\0\7\25\1\0\2\25\1\0\6\25\1\220"+ + "\7\0\15\25\30\0\6\25\1\221\2\25\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\15\25\30\0\11\25"+ + "\2\0\7\25\1\0\2\25\1\0\7\25\7\0\1\25"+ + "\1\222\13\25\30\0\11\25\2\0\7\25\1\0\1\223"+ + "\1\25\1\0\7\25\1\40\1\0\1\41\4\0\15\25"+ + "\30\0\11\25\2\0\7\25\1\0\2\25\1\0\7\25"+ + "\7\0\11\25\1\224\3\25\30\0\11\25\2\0\7\25"+ + "\1\0\2\25\1\0\1\25\1\225\5\25\7\0\15\25"+ + "\30\0\11\25\2\0\7\25\1\0\2\25\1\0\7\25"+ + "\7\0\3\25\1\226\2\25\1\227\6\25\30\0\11\25"+ + "\2\0\7\25\1\0\2\25\1\0\7\25\7\0\1\25"+ + "\1\230\13\25\30\0\11\25\2\0\7\25\1\0\2\25"+ + "\1\0\7\25\7\0\1\231\14\25\30\0\11\25\2\0"+ + "\7\25\1\0\2\25\1\0\7\25\7\0\4\25\1\232"+ + "\10\25\30\0\11\25\2\0\7\25\1\0\2\25\1\0"+ + "\7\25\7\0\6\25\1\233\6\25\27\0\13\141\1\0"+ + "\22\141\1\234\1\143\1\141\1\0\47\141\36\0\1\235"+ + "\52\0\111\141\13\144\1\0\23\144\1\145\1\234\1\0"+ + "\160\144\40\0\1\236\51\0\11\25\2\0\7\25\1\0"+ + "\2\25\1\0\7\25\7\0\2\25\1\237\12\25\30\0"+ + "\11\25\2\0\7\25\1\0\2\25\1\0\7\25\7\0"+ + "\3\25\1\240\11\25\30\0\11\25\2\0\7\25\1\0"+ + "\2\25\1\0\7\25\7\0\4\25\1\241\10\25\30\0"+ + "\3\25\1\242\4\25\1\243\2\0\7\25\1\0\2\25"+ + "\1\0\7\25\7\0\15\25\30\0\11\25\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\10\25\1\244\4\25"+ + "\30\0\11\25\2\0\7\25\1\0\2\25\1\0\7\25"+ + "\7\0\7\25\1\245\5\25\30\0\11\25\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\3\25\1\246\11\25"+ + "\30\0\11\25\2\0\7\25\1\0\1\247\1\25\1\0"+ + "\7\25\7\0\15\25\30\0\6\25\1\250\2\25\2\0"+ + "\7\25\1\0\2\25\1\0\7\25\7\0\15\25\30\0"+ + "\11\25\2\0\7\25\1\0\2\25\1\0\7\25\7\0"+ + "\6\25\1\251\6\25\112\0\1\252\110\0\1\253\110\0"+ + "\1\254\110\0\1\255\64\0\1\210\1\0\1\107\2\211"+ + "\44\0\1\107\36\207\1\256\1\257\51\207\37\212\1\260"+ + "\1\261\50\212\1\0\5\213\2\0\1\213\1\120\3\0"+ + "\1\213\2\0\1\213\1\120\2\0\2\213\2\0\2\213"+ + "\13\0\1\213\1\0\1\213\42\0\1\214\1\0\1\214"+ + "\1\0\1\214\3\0\1\120\7\0\1\120\70\0\1\215"+ + "\3\0\1\215\3\0\1\120\7\0\1\120\70\0\3\216"+ + "\1\0\1\216\21\0\1\123\62\0\3\216\1\0\1\216"+ + "\104\0\11\25\2\0\7\25\1\0\2\25\1\0\7\25"+ + "\7\0\11\25\1\262\3\25\30\0\11\25\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\1\263\14\25\30\0"+ + "\11\25\2\0\7\25\1\0\2\25\1\0\7\25\7\0"+ + "\1\264\14\25\30\0\7\25\1\265\1\25\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\15\25\30\0\11\25"+ + "\2\0\7\25\1\0\1\266\1\25\1\0\7\25\7\0"+ + "\15\25\30\0\11\25\2\0\7\25\1\0\1\267\1\25"+ + "\1\0\7\25\7\0\15\25\30\0\3\25\1\270\5\25"+ + "\2\0\7\25\1\0\2\25\1\0\7\25\7\0\15\25"+ + "\30\0\11\25\2\0\7\25\1\0\2\25\1\0\7\25"+ + "\7\0\4\25\1\271\10\25\30\0\11\25\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\3\25\1\272\11\25"+ + "\30\0\11\25\2\0\7\25\1\0\2\25\1\0\4\25"+ + "\1\273\2\25\7\0\15\25\30\0\11\25\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\3\25\1\274\11\25"+ + "\27\0\36\235\1\275\1\276\51\235\37\236\1\277\1\300"+ + "\50\236\1\0\11\25\2\0\7\25\1\0\1\301\1\25"+ + "\1\0\7\25\7\0\15\25\30\0\6\25\1\302\2\25"+ + "\2\0\7\25\1\0\2\25\1\0\7\25\7\0\15\25"+ + "\30\0\11\25\2\0\7\25\1\0\2\25\1\0\7\25"+ + "\7\0\3\25\1\303\11\25\30\0\10\25\1\304\2\0"+ + "\7\25\1\0\2\25\1\0\7\25\7\0\15\25\30\0"+ + "\7\25\1\305\1\25\2\0\7\25\1\0\2\25\1\0"+ + "\7\25\7\0\15\25\30\0\10\25\1\306\2\0\7\25"+ + "\1\0\2\25\1\0\7\25\7\0\15\25\27\0\36\207"+ + "\1\307\1\310\162\207\150\212\1\311\1\312\50\212\1\0"+ + "\10\25\1\313\2\0\7\25\1\0\2\25\1\0\7\25"+ + "\7\0\15\25\30\0\11\25\2\0\7\25\1\0\2\25"+ + "\1\0\7\25\7\0\5\25\1\314\7\25\30\0\11\25"+ + "\2\0\7\25\1\0\2\25\1\0\7\25\7\0\2\25"+ + "\1\315\12\25\30\0\11\25\2\0\7\25\1\0\2\25"+ + "\1\0\7\25\7\0\7\25\1\316\5\25\30\0\11\25"+ + "\2\0\7\25\1\0\2\25\1\0\7\25\7\0\6\25"+ + "\1\317\6\25\30\0\11\25\2\0\7\25\1\0\2\25"+ + "\1\0\7\25\7\0\3\25\1\320\11\25\30\0\11\25"+ + "\2\0\7\25\1\0\2\25\1\0\6\25\1\321\7\0"+ + "\15\25\30\0\11\25\2\0\7\25\1\0\1\322\1\25"+ + "\1\0\7\25\7\0\15\25\27\0\36\235\1\323\1\324"+ + "\162\235\150\236\1\325\1\326\50\236\1\0\11\25\2\0"+ + "\7\25\1\0\2\25\1\0\6\25\1\327\7\0\15\25"+ + "\30\0\11\25\2\0\7\25\1\0\2\25\1\0\6\25"+ + "\1\330\7\0\15\25\30\0\11\25\2\0\7\25\1\0"+ + "\2\25\1\0\7\25\7\0\2\25\1\331\12\25\30\0"+ + "\11\25\2\0\7\25\1\0\2\25\1\0\7\25\7\0"+ + "\1\332\14\25\30\0\11\25\2\0\7\25\1\0\1\333"+ + "\1\25\1\0\7\25\7\0\15\25\27\0\36\207\1\334"+ + "\1\310\107\207\1\335\1\310\51\207\37\212\1\311\1\336"+ + "\107\212\1\311\1\334\50\212\1\0\10\25\1\337\2\0"+ + "\7\25\1\0\2\25\1\0\7\25\7\0\15\25\30\0"+ + "\11\25\2\0\7\25\1\0\2\25\1\0\7\25\7\0"+ + "\1\340\14\25\30\0\11\25\2\0\7\25\1\0\2\25"+ + "\1\0\7\25\7\0\4\25\1\341\10\25\30\0\11\25"+ + "\2\0\7\25\1\0\2\25\1\0\7\25\7\0\1\25"+ + "\1\342\13\25\30\0\11\25\2\0\7\25\1\0\2\25"+ + "\1\0\7\25\7\0\1\25\1\343\13\25\27\0\36\235"+ + "\1\344\1\324\107\235\1\345\1\324\51\235\37\236\1\325"+ + "\1\346\107\236\1\325\1\344\50\236\1\0\11\25\2\0"+ + "\7\25\1\0\2\25\1\0\7\25\7\0\4\25\1\347"+ + "\10\25\30\0\11\25\2\0\7\25\1\0\2\25\1\0"+ + "\7\25\7\0\4\25\1\350\10\25\30\0\10\25\1\351"+ + "\2\0\7\25\1\0\2\25\1\0\7\25\7\0\15\25"+ + "\27\0\36\207\1\352\1\310\51\207\37\212\1\311\1\353"+ + "\50\212\1\0\11\25\2\0\7\25\1\0\2\25\1\0"+ + "\7\25\7\0\10\25\1\354\4\25\30\0\11\25\2\0"+ + "\7\25\1\0\2\25\1\0\4\25\1\355\2\25\7\0"+ + "\15\25\27\0\36\235\1\356\1\324\51\235\37\236\1\325"+ + "\1\357\50\236\36\207\1\360\1\310\51\207\37\212\1\311"+ + "\1\361\50\212\1\0\11\25\2\0\7\25\1\0\1\362"+ + "\1\25\1\0\7\25\7\0\15\25\27\0\36\235\1\363"+ + "\1\324\51\235\37\236\1\325\1\364\50\236"; private static int [] zzUnpackTrans() { - int [] result = new int[12045]; + int [] result = new int[12118]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -546,8 +555,8 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\1\11\1\1\6\11\4\1\1\11\44\1\11\11"+ - "\1\1\2\11\1\0\3\1\1\11\4\1\4\0\1\11"+ + "\4\0\1\11\1\1\6\11\4\1\1\11\44\1\11\11"+ + "\1\1\3\11\1\0\3\1\1\11\4\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\2\11\1\0"+ "\2\1\1\11\1\0\5\1\1\0\14\1\1\11\15\1"+ @@ -556,7 +565,7 @@ class _PythonLexer implements FlexLexer { "\5\1\2\0\2\1\2\0\5\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[242]; + int [] result = new int[244]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -581,7 +590,7 @@ class _PythonLexer implements FlexLexer { private int zzLexicalState = YYINITIAL; /** this buffer contains the current text to be matched and is - the source of the yytext() string */ + the source of the yytext() string */ private CharSequence zzBuffer = ""; /** this buffer may contains the current text array to be matched when it is cheap to acquire it */ @@ -600,7 +609,7 @@ class _PythonLexer implements FlexLexer { private int zzStartRead; /** endRead marks the last character in the buffer, that has been read - from input */ + from input */ private int zzEndRead; /** @@ -615,11 +624,11 @@ class _PythonLexer implements FlexLexer { private boolean zzEOFDone; /* user code: */ -private int getSpaceLength(CharSequence string) { -int i = Math.max(StringUtil.lastIndexOf(string, '"', 0, string.length()), StringUtil.lastIndexOf(string, '\'', 0, string.length())); -return yylength()-i-1; + private int getSpaceLength(CharSequence string) { + int i = Math.max(StringUtil.lastIndexOf(string, '"', 0, string.length()), StringUtil.lastIndexOf(string, '\'', 0, string.length())); + return yylength()-i-1; -} + } _PythonLexer(java.io.Reader in) { @@ -636,7 +645,7 @@ return yylength()-i-1; this(new java.io.InputStreamReader(in)); } - /** + /** * Unpacks the compressed character translation table. * * @param packed the packed character translation table @@ -785,7 +794,7 @@ return yylength()-i-1; private void zzDoEOF() { if (!zzEOFDone) { zzEOFDone = true; - + } } @@ -827,7 +836,7 @@ return yylength()-i-1; while (true) { if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++]:zzBufferL.charAt(zzCurrentPosL++); + zzInput = zzBufferL.charAt(zzCurrentPosL++); else if (zzAtEOF) { zzInput = YYEOF; break zzForAction; @@ -847,7 +856,7 @@ return yylength()-i-1; break zzForAction; } else { - zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++]:zzBufferL.charAt(zzCurrentPosL++); + zzInput = zzBufferL.charAt(zzCurrentPosL++); } } int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; @@ -868,375 +877,375 @@ return yylength()-i-1; zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 83: - { return PyTokenTypes.YIELD_KEYWORD; - } + case 83: + { return PyTokenTypes.YIELD_KEYWORD; + } case 93: break; - case 11: - { return PyTokenTypes.INTEGER_LITERAL; - } + case 11: + { return PyTokenTypes.INTEGER_LITERAL; + } case 94: break; - case 19: - { return PyTokenTypes.DIV; - } + case 19: + { return PyTokenTypes.DIV; + } case 95: break; - case 20: - { return PyTokenTypes.PERC; - } + case 20: + { return PyTokenTypes.PERC; + } case 96: break; - case 3: - { return PyTokenTypes.BACKSLASH; - } + case 3: + { return PyTokenTypes.BACKSLASH; + } case 97: break; - case 28: - { return PyTokenTypes.RPAR; - } + case 28: + { return PyTokenTypes.RPAR; + } case 98: break; - case 10: - { return PyTokenTypes.BAD_CHARACTER; - } + case 10: + { return PyTokenTypes.BAD_CHARACTER; + } case 99: break; - case 31: - { return PyTokenTypes.LBRACE; - } + case 31: + { return PyTokenTypes.LBRACE; + } case 100: break; - case 64: - { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; - } + case 69: + { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; + } case 101: break; - case 14: - { return PyTokenTypes.MINUS; - } + case 81: + { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; + } case 102: break; - case 80: - { return PyTokenTypes.BREAK_KEYWORD; - } + case 64: + { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; + } case 103: break; - case 30: - { return PyTokenTypes.RBRACKET; - } + case 14: + { return PyTokenTypes.MINUS; + } case 104: break; - case 1: - { yypushback(1); yybegin(PENDING_DOCSTRING); - } + case 80: + { return PyTokenTypes.BREAK_KEYWORD; + } case 105: break; - case 8: - { yypushback(1); yybegin(USUAL); - } + case 30: + { return PyTokenTypes.RBRACKET; + } case 106: break; - case 13: - { return PyTokenTypes.DOT; - } + case 1: + { yypushback(1); yybegin(PENDING_DOCSTRING); + } case 107: break; - case 12: - { return PyTokenTypes.IDENTIFIER; - } + case 8: + { yypushback(1); yybegin(USUAL); + } case 108: break; - case 27: - { return PyTokenTypes.LPAR; - } + case 13: + { return PyTokenTypes.DOT; + } case 109: break; - case 25: - { return PyTokenTypes.LT; - } + case 12: + { return PyTokenTypes.IDENTIFIER; + } case 110: break; - case 44: - { return PyTokenTypes.IN_KEYWORD; - } + case 27: + { return PyTokenTypes.LPAR; + } case 111: break; - case 82: - { return PyTokenTypes.RAISE_KEYWORD; - } + case 25: + { return PyTokenTypes.LT; + } case 112: break; - case 74: - { return PyTokenTypes.GTGTEQ; - } + case 44: + { return PyTokenTypes.IN_KEYWORD; + } case 113: break; - case 5: - { return PyTokenTypes.SPACE; - } + case 82: + { return PyTokenTypes.RAISE_KEYWORD; + } case 114: break; - case 86: - { return PyTokenTypes.EXCEPT_KEYWORD; - } + case 74: + { return PyTokenTypes.GTGTEQ; + } case 115: break; - case 40: - { return PyTokenTypes.IMAGINARY_LITERAL; - } + case 5: + { return PyTokenTypes.SPACE; + } case 116: break; - case 15: - { return PyTokenTypes.SINGLE_QUOTED_STRING; - } + case 86: + { return PyTokenTypes.EXCEPT_KEYWORD; + } case 117: break; - case 7: - { return PyTokenTypes.FORMFEED; - } + case 40: + { return PyTokenTypes.IMAGINARY_LITERAL; + } case 118: break; - case 37: - { return PyTokenTypes.SEMICOLON; - } + case 15: + { return PyTokenTypes.SINGLE_QUOTED_STRING; + } case 119: break; - case 24: - { return PyTokenTypes.GT; - } + case 7: + { return PyTokenTypes.FORMFEED; + } case 120: break; - case 29: - { return PyTokenTypes.LBRACKET; - } + case 37: + { return PyTokenTypes.SEMICOLON; + } case 121: break; - case 35: - { return PyTokenTypes.COLON; - } + case 24: + { return PyTokenTypes.GT; + } case 122: break; - case 75: - { return PyTokenTypes.LTLTEQ; - } + case 29: + { return PyTokenTypes.LBRACKET; + } case 123: break; - case 9: - { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; - else yybegin(USUAL); return PyTokenTypes.SINGLE_QUOTED_STRING; - } + case 35: + { return PyTokenTypes.COLON; + } case 124: break; - case 77: - { return PyTokenTypes.ELSE_KEYWORD; - } + case 75: + { return PyTokenTypes.LTLTEQ; + } case 125: break; - case 22: - { return PyTokenTypes.OR; - } + case 9: + { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; + else yybegin(USUAL); return PyTokenTypes.SINGLE_QUOTED_STRING; + } case 126: break; - case 48: - { return PyTokenTypes.MULTEQ; - } + case 77: + { return PyTokenTypes.ELSE_KEYWORD; + } case 127: break; - case 91: - { return PyTokenTypes.FINALLY_KEYWORD; - } + case 22: + { return PyTokenTypes.OR; + } case 128: break; - case 84: - { return PyTokenTypes.WHILE_KEYWORD; - } + case 48: + { return PyTokenTypes.MULTEQ; + } case 129: break; - case 18: - { return PyTokenTypes.MULT; - } + case 91: + { return PyTokenTypes.FINALLY_KEYWORD; + } case 130: break; - case 88: - { return PyTokenTypes.ASSERT_KEYWORD; - } + case 84: + { return PyTokenTypes.WHILE_KEYWORD; + } case 131: break; - case 51: - { return PyTokenTypes.FLOORDIV; - } + case 18: + { return PyTokenTypes.MULT; + } case 132: break; - case 90: - { return PyTokenTypes.GLOBAL_KEYWORD; - } + case 88: + { return PyTokenTypes.ASSERT_KEYWORD; + } case 133: break; - case 85: - { return PyTokenTypes.LAMBDA_KEYWORD; - } + case 51: + { return PyTokenTypes.FLOORDIV; + } case 134: break; - case 55: - { return PyTokenTypes.XOREQ; - } + case 90: + { return PyTokenTypes.GLOBAL_KEYWORD; + } case 135: break; - case 65: - { return PyTokenTypes.FOR_KEYWORD; - } + case 85: + { return PyTokenTypes.LAMBDA_KEYWORD; + } case 136: break; - case 33: - { return PyTokenTypes.AT; - } + case 55: + { return PyTokenTypes.XOREQ; + } case 137: break; - case 68: - { return PyTokenTypes.NOT_KEYWORD; - } + case 65: + { return PyTokenTypes.FOR_KEYWORD; + } case 138: break; - case 16: - { return PyTokenTypes.PLUS; - } + case 33: + { return PyTokenTypes.AT; + } case 139: break; - case 42: - { return PyTokenTypes.MINUSEQ; - } + case 68: + { return PyTokenTypes.NOT_KEYWORD; + } case 140: break; - case 38: - { yypushback(getSpaceLength(yytext())); yybegin(USUAL); return PyTokenTypes.DOCSTRING; - } + case 16: + { return PyTokenTypes.PLUS; + } case 141: break; - case 61: - { return PyTokenTypes.NE; - } + case 42: + { return PyTokenTypes.MINUSEQ; + } case 142: break; - case 34: - { return PyTokenTypes.COMMA; - } + case 38: + { yypushback(getSpaceLength(yytext())); yybegin(USUAL); return PyTokenTypes.DOCSTRING; + } case 143: break; - case 47: - { return PyTokenTypes.EQEQ; - } + case 61: + { return PyTokenTypes.NE; + } case 144: break; - case 36: - { return PyTokenTypes.TICK; - } + case 34: + { return PyTokenTypes.COMMA; + } case 145: break; - case 49: - { return PyTokenTypes.EXP; - } + case 47: + { return PyTokenTypes.EQEQ; + } case 146: break; - case 66: - { return PyTokenTypes.TRIPLE_QUOTED_STRING; - } + case 36: + { return PyTokenTypes.TICK; + } case 147: break; - case 92: - { return PyTokenTypes.CONTINUE_KEYWORD; - } + case 49: + { return PyTokenTypes.EXP; + } case 148: break; - case 60: - { return PyTokenTypes.LTLT; - } + case 66: + { return PyTokenTypes.TRIPLE_QUOTED_STRING; + } case 149: break; - case 58: - { return PyTokenTypes.LE; - } + case 92: + { return PyTokenTypes.CONTINUE_KEYWORD; + } case 150: break; - case 67: - { return PyTokenTypes.AND_KEYWORD; - } + case 60: + { return PyTokenTypes.LTLT; + } case 151: break; - case 41: - { return PyTokenTypes.OR_KEYWORD; - } + case 58: + { return PyTokenTypes.LE; + } case 152: break; - case 79: - { return PyTokenTypes.PASS_KEYWORD; - } + case 67: + { return PyTokenTypes.AND_KEYWORD; + } case 153: break; - case 62: - { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; - } + case 41: + { return PyTokenTypes.OR_KEYWORD; + } case 154: break; - case 2: - { return PyTokenTypes.END_OF_LINE_COMMENT; - } + case 79: + { return PyTokenTypes.PASS_KEYWORD; + } case 155: break; - case 63: - { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; - else yybegin(USUAL); return PyTokenTypes.TRIPLE_QUOTED_STRING; - } + case 62: + { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; + } case 156: break; - case 54: - { return PyTokenTypes.OREQ; - } + case 2: + { return PyTokenTypes.END_OF_LINE_COMMENT; + } case 157: break; - case 57: - { return PyTokenTypes.GTGT; - } + case 63: + { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; + else yybegin(USUAL); return PyTokenTypes.TRIPLE_QUOTED_STRING; + } case 158: break; - case 21: - { return PyTokenTypes.AND; - } + case 54: + { return PyTokenTypes.OREQ; + } case 159: break; - case 50: - { return PyTokenTypes.DIVEQ; - } + case 57: + { return PyTokenTypes.GTGT; + } case 160: break; - case 87: - { return PyTokenTypes.RETURN_KEYWORD; - } + case 21: + { return PyTokenTypes.AND; + } case 161: break; - case 89: - { return PyTokenTypes.IMPORT_KEYWORD; - } + case 50: + { return PyTokenTypes.DIVEQ; + } case 162: break; - case 56: - { return PyTokenTypes.GE; - } + case 87: + { return PyTokenTypes.RETURN_KEYWORD; + } case 163: break; - case 46: - { return PyTokenTypes.PLUSEQ; - } + case 89: + { return PyTokenTypes.IMPORT_KEYWORD; + } case 164: break; - case 69: - { return PyTokenTypes.DEF_KEYWORD; - } + case 56: + { return PyTokenTypes.GE; + } case 165: break; - case 45: - { return PyTokenTypes.IS_KEYWORD; - } + case 46: + { return PyTokenTypes.PLUSEQ; + } case 166: break; - case 73: - { return PyTokenTypes.FLOORDIVEQ; - } + case 45: + { return PyTokenTypes.IS_KEYWORD; + } case 167: break; - case 39: - { return PyTokenTypes.FLOAT_LITERAL; - } + case 73: + { return PyTokenTypes.FLOORDIVEQ; + } case 168: break; - case 4: - { return PyTokenTypes.LINE_BREAK; - } + case 39: + { return PyTokenTypes.FLOAT_LITERAL; + } case 169: break; - case 52: - { return PyTokenTypes.PERCEQ; - } + case 4: + { return PyTokenTypes.LINE_BREAK; + } case 170: break; - case 71: - { return PyTokenTypes.TRY_KEYWORD; - } + case 52: + { return PyTokenTypes.PERCEQ; + } case 171: break; - case 53: - { return PyTokenTypes.ANDEQ; - } + case 71: + { return PyTokenTypes.TRY_KEYWORD; + } case 172: break; - case 17: - { return PyTokenTypes.EQ; - } + case 53: + { return PyTokenTypes.ANDEQ; + } case 173: break; - case 76: - { return PyTokenTypes.FROM_KEYWORD; - } + case 17: + { return PyTokenTypes.EQ; + } case 174: break; - case 72: - { return PyTokenTypes.EXPEQ; - } + case 76: + { return PyTokenTypes.FROM_KEYWORD; + } case 175: break; - case 78: - { return PyTokenTypes.ELIF_KEYWORD; - } + case 72: + { return PyTokenTypes.EXPEQ; + } case 176: break; - case 32: - { return PyTokenTypes.RBRACE; - } + case 78: + { return PyTokenTypes.ELIF_KEYWORD; + } case 177: break; - case 81: - { return PyTokenTypes.CLASS_KEYWORD; - } + case 32: + { return PyTokenTypes.RBRACE; + } case 178: break; - case 43: - { return PyTokenTypes.IF_KEYWORD; - } + case 43: + { return PyTokenTypes.IF_KEYWORD; + } case 179: break; - case 6: - { return PyTokenTypes.TAB; - } + case 6: + { return PyTokenTypes.TAB; + } case 180: break; - case 59: - { return PyTokenTypes.NE_OLD; - } + case 59: + { return PyTokenTypes.NE_OLD; + } case 181: break; - case 26: - { return PyTokenTypes.TILDE; - } + case 26: + { return PyTokenTypes.TILDE; + } case 182: break; - case 23: - { return PyTokenTypes.XOR; - } + case 23: + { return PyTokenTypes.XOR; + } case 183: break; - case 70: - { return PyTokenTypes.DEL_KEYWORD; - } + case 70: + { return PyTokenTypes.DEL_KEYWORD; + } case 184: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { @@ -1252,4 +1261,4 @@ return yylength()-i-1; } -} +} \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonLexerTest.java b/python/testSrc/com/jetbrains/python/PythonLexerTest.java index 6a5d21cecc4a..e4a557e9705c 100644 --- a/python/testSrc/com/jetbrains/python/PythonLexerTest.java +++ b/python/testSrc/com/jetbrains/python/PythonLexerTest.java @@ -232,6 +232,19 @@ public class PythonLexerTest extends PyLexerTestCase { "Py:STATEMENT_BREAK"); } + + // PY-7255 + public void testDocstringInDict() { + doTest("d = {\n" + + " 'foo':\n" + + " 'bar'\n" + + " 'baz'\n" + + "}", + "Py:IDENTIFIER", "Py:SPACE", "Py:EQ", "Py:SPACE", "Py:LBRACE", "Py:LINE_BREAK", + "Py:SINGLE_QUOTED_STRING", "Py:COLON", "Py:LINE_BREAK", "Py:SINGLE_QUOTED_STRING", "Py:LINE_BREAK", + "Py:SINGLE_QUOTED_STRING", "Py:LINE_BREAK", "Py:RBRACE", "Py:STATEMENT_BREAK"); + } + // PY-3067 public void testErrorOpenParInMethod() { doTest("class C:\n" +