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:
Greg Ward 2003-05-08 01:58:05 +00:00
parent 4656ed44ca
commit 478cd48dee

View file

@ -306,3 +306,45 @@ def fill(text, width=70, **kwargs):
"""
w = TextWrapper(width=width, **kwargs)
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)