| #!/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) |