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