| #!/usr/bin/env python | 
 | ## | 
 | ## Copyright (c) 2021, Alliance for Open Media. All rights reserved | 
 | ## | 
 | ## This source code is subject to the terms of the BSD 3-Clause Clear License and the | 
 | ## Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear License was | 
 | ## not distributed with this source code in the LICENSE file, you can obtain it | 
 | ## at aomedia.org/license/software-license/bsd-3-c-c/.  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 aomedia.org/license/patent-license/. | 
 | ## | 
 | """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) |