mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
SF patch #598163 (Ville Vainio, vvainio@users.sourceforge.net):
add dedent() function, to remove indentation from multiline strings (eg. triple-quoted strings). Differs from inspect.getdoc() by not special-casing the first line (often a sensible approach for non-docstring multiline strings). This should make this function more general (symmetric 'indent' also possible), and more fitting for the textwrap module.
This commit is contained in:
parent
4656ed44ca
commit
478cd48dee
1 changed files with 42 additions and 0 deletions
|
@ -306,3 +306,45 @@ def fill(text, width=70, **kwargs):
|
||||||
"""
|
"""
|
||||||
w = TextWrapper(width=width, **kwargs)
|
w = TextWrapper(width=width, **kwargs)
|
||||||
return w.fill(text)
|
return w.fill(text)
|
||||||
|
|
||||||
|
|
||||||
|
# -- Loosely related functionality -------------------------------------
|
||||||
|
|
||||||
|
def dedent(text):
|
||||||
|
"""dedent(text : string) -> string
|
||||||
|
|
||||||
|
Remove any whitespace than can be uniformly removed from the left
|
||||||
|
of every line in `text`.
|
||||||
|
|
||||||
|
This can be used e.g. to make triple-quoted strings line up with
|
||||||
|
the left edge of screen/whatever, while still presenting it in the
|
||||||
|
source code in indented form.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
def test():
|
||||||
|
# end first line with \ to avoid the empty line!
|
||||||
|
s = '''\
|
||||||
|
Hey
|
||||||
|
there
|
||||||
|
'''
|
||||||
|
print repr(s) # prints ' Hey\n there\n '
|
||||||
|
print repr(dedent(s)) # prints 'Hey\nthere\n'
|
||||||
|
"""
|
||||||
|
lines = text.expandtabs().split('\n')
|
||||||
|
margin = None
|
||||||
|
for line in lines:
|
||||||
|
content = len(line.lstrip())
|
||||||
|
if not content:
|
||||||
|
continue
|
||||||
|
indent = len(line) - content
|
||||||
|
if margin is None:
|
||||||
|
margin = indent
|
||||||
|
else:
|
||||||
|
margin = min(margin, indent)
|
||||||
|
|
||||||
|
if margin is not None:
|
||||||
|
for i in range(len(lines)):
|
||||||
|
lines[i] = lines[i][margin:]
|
||||||
|
|
||||||
|
return '\n'.join(lines)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue