1*fb1b10abSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*fb1b10abSAndroid Build Coastguard Worker## Copyright (c) 2012 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker## 4*fb1b10abSAndroid Build Coastguard Worker## Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker## that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker## tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker## in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker## be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker## 10*fb1b10abSAndroid Build Coastguard Worker"""Wraps paragraphs of text, preserving manual formatting 11*fb1b10abSAndroid Build Coastguard Worker 12*fb1b10abSAndroid Build Coastguard WorkerThis is like fold(1), but has the special convention of not modifying lines 13*fb1b10abSAndroid Build Coastguard Workerthat start with whitespace. This allows you to intersperse blocks with 14*fb1b10abSAndroid Build Coastguard Workerspecial formatting, like code blocks, with written prose. The prose will 15*fb1b10abSAndroid Build Coastguard Workerbe wordwrapped, and the manual formatting will be preserved. 16*fb1b10abSAndroid Build Coastguard Worker 17*fb1b10abSAndroid Build Coastguard Worker * This won't handle the case of a bulleted (or ordered) list specially, so 18*fb1b10abSAndroid Build Coastguard Worker manual wrapping must be done. 19*fb1b10abSAndroid Build Coastguard Worker 20*fb1b10abSAndroid Build Coastguard WorkerOccasionally it's useful to put something with explicit formatting that 21*fb1b10abSAndroid Build Coastguard Workerdoesn't look at all like a block of text inline. 22*fb1b10abSAndroid Build Coastguard Worker 23*fb1b10abSAndroid Build Coastguard Worker indicator = has_leading_whitespace(line); 24*fb1b10abSAndroid Build Coastguard Worker if (indicator) 25*fb1b10abSAndroid Build Coastguard Worker preserve_formatting(line); 26*fb1b10abSAndroid Build Coastguard Worker 27*fb1b10abSAndroid Build Coastguard WorkerThe intent is that this docstring would make it through the transform 28*fb1b10abSAndroid Build Coastguard Workerand still be legible and presented as it is in the source. If additional 29*fb1b10abSAndroid Build Coastguard Workercases are handled, update this doc to describe the effect. 30*fb1b10abSAndroid Build Coastguard Worker""" 31*fb1b10abSAndroid Build Coastguard Worker 32*fb1b10abSAndroid Build Coastguard Worker__author__ = "[email protected]" 33*fb1b10abSAndroid Build Coastguard Workerimport textwrap 34*fb1b10abSAndroid Build Coastguard Workerimport sys 35*fb1b10abSAndroid Build Coastguard Worker 36*fb1b10abSAndroid Build Coastguard Workerdef wrap(text): 37*fb1b10abSAndroid Build Coastguard Worker if text: 38*fb1b10abSAndroid Build Coastguard Worker return textwrap.fill(text, break_long_words=False) + '\n' 39*fb1b10abSAndroid Build Coastguard Worker return "" 40*fb1b10abSAndroid Build Coastguard Worker 41*fb1b10abSAndroid Build Coastguard Worker 42*fb1b10abSAndroid Build Coastguard Workerdef main(fileobj): 43*fb1b10abSAndroid Build Coastguard Worker text = "" 44*fb1b10abSAndroid Build Coastguard Worker output = "" 45*fb1b10abSAndroid Build Coastguard Worker while True: 46*fb1b10abSAndroid Build Coastguard Worker line = fileobj.readline() 47*fb1b10abSAndroid Build Coastguard Worker if not line: 48*fb1b10abSAndroid Build Coastguard Worker break 49*fb1b10abSAndroid Build Coastguard Worker 50*fb1b10abSAndroid Build Coastguard Worker if line.lstrip() == line: 51*fb1b10abSAndroid Build Coastguard Worker text += line 52*fb1b10abSAndroid Build Coastguard Worker else: 53*fb1b10abSAndroid Build Coastguard Worker output += wrap(text) 54*fb1b10abSAndroid Build Coastguard Worker text="" 55*fb1b10abSAndroid Build Coastguard Worker output += line 56*fb1b10abSAndroid Build Coastguard Worker output += wrap(text) 57*fb1b10abSAndroid Build Coastguard Worker 58*fb1b10abSAndroid Build Coastguard Worker # Replace the file or write to stdout. 59*fb1b10abSAndroid Build Coastguard Worker if fileobj == sys.stdin: 60*fb1b10abSAndroid Build Coastguard Worker fileobj = sys.stdout 61*fb1b10abSAndroid Build Coastguard Worker else: 62*fb1b10abSAndroid Build Coastguard Worker fileobj.seek(0) 63*fb1b10abSAndroid Build Coastguard Worker fileobj.truncate(0) 64*fb1b10abSAndroid Build Coastguard Worker fileobj.write(output) 65*fb1b10abSAndroid Build Coastguard Worker 66*fb1b10abSAndroid Build Coastguard Workerif __name__ == "__main__": 67*fb1b10abSAndroid Build Coastguard Worker if len(sys.argv) > 1: 68*fb1b10abSAndroid Build Coastguard Worker main(open(sys.argv[1], "r+")) 69*fb1b10abSAndroid Build Coastguard Worker else: 70*fb1b10abSAndroid Build Coastguard Worker main(sys.stdin) 71