43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
import io
|
|
|
|
def should_autonewline(line):
|
|
return (
|
|
"static_assert" not in line
|
|
and "extern" not in line
|
|
and (len(line.split()) < 2 or line.split()[1] != '=') # hacky; meh
|
|
)
|
|
|
|
def _render(out, lines, indent_length):
|
|
indent = " "
|
|
level = 0
|
|
namespace = 0
|
|
for l in lines:
|
|
if l and (l[0] == "}" or l[0] == ")"):
|
|
level -= indent_length
|
|
if level < 0:
|
|
assert namespace >= 0
|
|
namespace -= 1
|
|
level = 0
|
|
|
|
if len(l) == 0:
|
|
out.write("\n")
|
|
else:
|
|
out.write(indent * level + l + "\n")
|
|
|
|
if l and (l[-1] == "{" or l[-1] == "("):
|
|
if l.startswith("namespace"):
|
|
namespace += 1
|
|
else:
|
|
level += indent_length
|
|
|
|
if level == 0 and l and l[-1] == ";":
|
|
if should_autonewline(l):
|
|
out.write("\n")
|
|
return out
|
|
|
|
def renderer(indent_length=2):
|
|
out = io.StringIO()
|
|
def render(lines):
|
|
return _render(out, lines, indent_length)
|
|
return render, out
|