-
Notifications
You must be signed in to change notification settings - Fork 0
/
rst_clang_format_off_on.py
40 lines (34 loc) · 1.14 KB
/
rst_clang_format_off_on.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""
Example usage:
grep --color=auto -I --exclude \*.pyc --exclude-dir .git -r '\\rst' | cut -d: -f1 | uniq > ~/zfiles
python3 rst_clang_format_off_on.py `cat ~/zfiles`
git commit -a -m 'Automatically inserted clang-format off-on around rst blocks (NO manual changes).'
"""
import sys
def run(args):
"""."""
for filename in args:
lines = open(filename).read().splitlines()
more_lines = []
mla = more_lines.append
indent = None
for ix_line, line in enumerate(lines):
if line.find(r"\rst") >= 0:
if "// clang-format off" not in lines[ix_line - 1]:
indent = " " * (len(line) - len(line.lstrip()))
mla(indent + "// clang-format off")
mla(line)
elif line.find(r"\endrst") >= 0:
mla(line)
if "// clang-format on" not in lines[ix_line + 1]:
assert indent is not None
mla(indent + "// clang-format on")
indent = None
else:
mla(line)
if more_lines != lines:
blob = "\n".join(more_lines) + "\n"
print("Writing: ", filename, flush=True)
open(filename, "w").write(blob)
if __name__ == "__main__":
run(args=sys.argv[1:])