73 строки
2.2 KiB
Python
Executable File
73 строки
2.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
##
|
|
## Copyright (c) 2016, Alliance for Open Media. All rights reserved
|
|
##
|
|
## This source code is subject to the terms of the BSD 2 Clause License and
|
|
## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
|
|
## was not distributed with this source code in the LICENSE file, you can
|
|
## obtain it at www.aomedia.org/license/software. If the Alliance for Open
|
|
## Media Patent License 1.0 was not distributed with this source code in the
|
|
## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
|
|
##
|
|
"""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:
|
|
fileobj.seek(0)
|
|
fileobj.truncate(0)
|
|
fileobj.write(output)
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1:
|
|
main(open(sys.argv[1], "r+"))
|
|
else:
|
|
main(sys.stdin)
|