diff options
author | Paul McGuire <ptmcg@austin.rr.com> | 2019-06-29 00:19:43 -0500 |
---|---|---|
committer | Paul McGuire <ptmcg@austin.rr.com> | 2019-06-29 00:19:43 -0500 |
commit | 450fd02154cfb0ba0cdbec09fc34e8e66a092f11 (patch) | |
tree | dacc3d8e1d014fb2af890eed967a8907adfe7f35 /pyparsing.py | |
parent | 459f1d5d9f6f200f94bb70e96493fa1bf82dbba8 (diff) | |
download | pyparsing-git-450fd02154cfb0ba0cdbec09fc34e8e66a092f11.tar.gz |
Fix issue #87, regression in indentedBlock
Diffstat (limited to 'pyparsing.py')
-rw-r--r-- | pyparsing.py | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/pyparsing.py b/pyparsing.py index 0e7b5e1..c041fc6 100644 --- a/pyparsing.py +++ b/pyparsing.py @@ -96,7 +96,7 @@ classes inherit from. Use the docstrings for examples of how to: """ __version__ = "2.4.1" -__versionTime__ = "06 Jun 2019 03:33 UTC" +__versionTime__ = "29 Jun 2019 05:14 UTC" __author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" import string @@ -5921,21 +5921,24 @@ def indentedBlock(blockStatementExpr, indentStack, indent=True): def checkUnindent(s,l,t): if l >= len(s): return curCol = col(l,s) - if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): + if not(indentStack and curCol in indentStack): raise ParseException(s,l,"not an unindent") - indentStack.pop() + if curCol < indentStack[-1]: + indentStack.pop() NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') PEER = Empty().setParseAction(checkPeerIndent).setName('') UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') if indent: - smExpr = Group( Optional(NL) + - #~ FollowedBy(blockStatementExpr) + - INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) + smExpr = Group(Optional(NL) + + INDENT + + OneOrMore(PEER + Group(blockStatementExpr) + Optional(NL)) + + UNDENT) else: - smExpr = Group( Optional(NL) + - (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) + smExpr = Group(Optional(NL) + + OneOrMore(PEER + Group(blockStatementExpr) + Optional(NL)) + + UNDENT) smExpr.setFailAction(lambda a, b, c, d: reset_stack()) blockStatementExpr.ignore(_bslash + LineEnd()) return smExpr.setName('indented block') |