2012-03-29 03:41:16 +04:00
|
|
|
#!/usr/bin/env python
|
|
|
|
## Copyright (c) 2012 The WebM project authors. All Rights Reserved.
|
|
|
|
##
|
|
|
|
## Use of this source code is governed by a BSD-style license
|
|
|
|
## that can be found in the LICENSE file in the root of the source
|
|
|
|
## tree. An additional intellectual property rights grant can be found
|
|
|
|
## in the file PATENTS. All contributing project authors may
|
|
|
|
## be found in the AUTHORS file in the root of the source tree.
|
|
|
|
##
|
|
|
|
"""Wraps paragraphs of text, preserving manual formatting
|
|
|
|
|
|
|
|
This is like fold(1), but has the special convention of not modifying lines
|
|
|
|
that start with whitespace. This allows you to intersperse blocks with
|
|
|
|
special formatting, like code blocks, with written prose. The prose will
|
|
|
|
be wordwrapped, and the manual formatting will be preserved.
|
|
|
|
|
|
|
|
* This won't handle the case of a bulleted (or ordered) list specially, so
|
|
|
|
manual wrapping must be done.
|
|
|
|
|
|
|
|
Occasionally it's useful to put something with explicit formatting that
|
|
|
|
doesn't look at all like a block of text inline.
|
|
|
|
|
|
|
|
indicator = has_leading_whitespace(line);
|
|
|
|
if (indicator)
|
|
|
|
preserve_formatting(line);
|
|
|
|
|
|
|
|
The intent is that this docstring would make it through the transform
|
|
|
|
and still be legible and presented as it is in the source. If additional
|
|
|
|
cases are handled, update this doc to describe the effect.
|
|
|
|
"""
|
|
|
|
|
|
|
|
__author__ = "jkoleszar@google.com"
|
|
|
|
import textwrap
|
|
|
|
import sys
|
|
|
|
|
|
|
|
def wrap(text):
|
|
|
|
if text:
|
|
|
|
return textwrap.fill(text, break_long_words=False) + '\n'
|
|
|
|
return ""
|
|
|
|
|
|
|
|
|
|
|
|
def main(fileobj):
|
|
|
|
text = ""
|
|
|
|
output = ""
|
|
|
|
while True:
|
|
|
|
line = fileobj.readline()
|
|
|
|
if not line:
|
|
|
|
break
|
|
|
|
|
|
|
|
if line.lstrip() == line:
|
|
|
|
text += line
|
|
|
|
else:
|
|
|
|
output += wrap(text)
|
|
|
|
text=""
|
|
|
|
output += line
|
|
|
|
output += wrap(text)
|
|
|
|
|
|
|
|
# Replace the file or write to stdout.
|
|
|
|
if fileobj == sys.stdin:
|
|
|
|
fileobj = sys.stdout
|
|
|
|
else:
|
2012-03-30 05:13:27 +04:00
|
|
|
fileobj.seek(0)
|
2012-03-29 03:41:16 +04:00
|
|
|
fileobj.truncate(0)
|
|
|
|
fileobj.write(output)
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
if len(sys.argv) > 1:
|
|
|
|
main(open(sys.argv[1], "r+"))
|
|
|
|
else:
|
|
|
|
main(sys.stdin)
|