Commit 29ae4887 authored by Kurt B. Kaiser's avatar Kurt B. Kaiser

Better indentation after first line of string continuation.

IDLEfork Patch 681992, Noam Raphael
parent 65d5539d
...@@ -1078,8 +1078,12 @@ class EditorWindow(object): ...@@ -1078,8 +1078,12 @@ class EditorWindow(object):
c = y.get_continuation_type() c = y.get_continuation_type()
if c != PyParse.C_NONE: if c != PyParse.C_NONE:
# The current stmt hasn't ended yet. # The current stmt hasn't ended yet.
if c == PyParse.C_STRING: if c == PyParse.C_STRING_FIRST_LINE:
# inside a string; just mimic the current indent # after the first line of a string; do not indent at all
pass
elif c == PyParse.C_STRING_NEXT_LINES:
# inside a string which started before this line;
# just mimic the current indent
text.insert("insert", indent) text.insert("insert", indent)
elif c == PyParse.C_BRACKET: elif c == PyParse.C_BRACKET:
# line up with the first (if any) element of the # line up with the first (if any) element of the
......
...@@ -3,6 +3,9 @@ What's New in IDLE 1.2a0? ...@@ -3,6 +3,9 @@ What's New in IDLE 1.2a0?
*Release date: XX-XXX-2005* *Release date: XX-XXX-2005*
- Better indentation after first line of string continuation.
IDLEfork Patch 681992, Noam Raphael
- Fixed CodeContext alignment problem, following suggestion from Tal Einat. - Fixed CodeContext alignment problem, following suggestion from Tal Einat.
- Increased performance in CodeContext extension Patch 936169 Noam Raphael - Increased performance in CodeContext extension Patch 936169 Noam Raphael
......
...@@ -2,7 +2,8 @@ import re ...@@ -2,7 +2,8 @@ import re
import sys import sys
# Reason last stmt is continued (or C_NONE if it's not). # Reason last stmt is continued (or C_NONE if it's not).
C_NONE, C_BACKSLASH, C_STRING, C_BRACKET = range(4) (C_NONE, C_BACKSLASH, C_STRING_FIRST_LINE,
C_STRING_NEXT_LINES, C_BRACKET) = range(5)
if 0: # for throwaway debugging output if 0: # for throwaway debugging output
def dump(*stuff): def dump(*stuff):
...@@ -281,6 +282,7 @@ class Parser: ...@@ -281,6 +282,7 @@ class Parser:
quote = ch quote = ch
if str[i-1:i+2] == quote * 3: if str[i-1:i+2] == quote * 3:
quote = quote * 3 quote = quote * 3
firstlno = lno
w = len(quote) - 1 w = len(quote) - 1
i = i+w i = i+w
while i < n: while i < n:
...@@ -315,7 +317,12 @@ class Parser: ...@@ -315,7 +317,12 @@ class Parser:
else: else:
# didn't break out of the loop, so we're still # didn't break out of the loop, so we're still
# inside a string # inside a string
continuation = C_STRING if (lno - 1) == firstlno:
# before the previous \n in str, we were in the first
# line of the string
continuation = C_STRING_FIRST_LINE
else:
continuation = C_STRING_NEXT_LINES
continue # with outer loop continue # with outer loop
if ch == '#': if ch == '#':
...@@ -335,7 +342,8 @@ class Parser: ...@@ -335,7 +342,8 @@ class Parser:
# The last stmt may be continued for all 3 reasons. # The last stmt may be continued for all 3 reasons.
# String continuation takes precedence over bracket # String continuation takes precedence over bracket
# continuation, which beats backslash continuation. # continuation, which beats backslash continuation.
if continuation != C_STRING and level > 0: if (continuation != C_STRING_FIRST_LINE
and continuation != C_STRING_NEXT_LINES and level > 0):
continuation = C_BRACKET continuation = C_BRACKET
self.continuation = continuation self.continuation = continuation
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment