|  | #!/usr/bin/env python3 | 
|  | ## | 
|  | ## 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) |