xref: /aosp_15_r20/external/libvpx/tools/wrap-commit-msg.py (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
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