|
@@ -93,33 +93,50 @@ def c_name(name, protect=True):
|
|
pointer_suffix = ' *' + eatspace
|
|
pointer_suffix = ' *' + eatspace
|
|
|
|
|
|
|
|
|
|
-def genindent(count):
|
|
|
|
- ret = ''
|
|
|
|
- for _ in range(count):
|
|
|
|
- ret += ' '
|
|
|
|
- return ret
|
|
|
|
|
|
+class Indentation:
|
|
|
|
+ """
|
|
|
|
+ Indentation level management.
|
|
|
|
+
|
|
|
|
+ :param initial: Initial number of spaces, default 0.
|
|
|
|
+ """
|
|
|
|
+ def __init__(self, initial: int = 0) -> None:
|
|
|
|
+ self._level = initial
|
|
|
|
+
|
|
|
|
+ def __int__(self) -> int:
|
|
|
|
+ return self._level
|
|
|
|
+
|
|
|
|
+ def __repr__(self) -> str:
|
|
|
|
+ return "{}({:d})".format(type(self).__name__, self._level)
|
|
|
|
|
|
|
|
+ def __str__(self) -> str:
|
|
|
|
+ """Return the current indentation as a string of spaces."""
|
|
|
|
+ return ' ' * self._level
|
|
|
|
|
|
-indent_level = 0
|
|
|
|
|
|
+ def __bool__(self) -> bool:
|
|
|
|
+ """True when there is a non-zero indentation."""
|
|
|
|
+ return bool(self._level)
|
|
|
|
|
|
|
|
+ def increase(self, amount: int = 4) -> None:
|
|
|
|
+ """Increase the indentation level by ``amount``, default 4."""
|
|
|
|
+ self._level += amount
|
|
|
|
|
|
-def push_indent(indent_amount=4):
|
|
|
|
- global indent_level
|
|
|
|
- indent_level += indent_amount
|
|
|
|
|
|
+ def decrease(self, amount: int = 4) -> None:
|
|
|
|
+ """Decrease the indentation level by ``amount``, default 4."""
|
|
|
|
+ if self._level < amount:
|
|
|
|
+ raise ArithmeticError(
|
|
|
|
+ f"Can't remove {amount:d} spaces from {self!r}")
|
|
|
|
+ self._level -= amount
|
|
|
|
|
|
|
|
|
|
-def pop_indent(indent_amount=4):
|
|
|
|
- global indent_level
|
|
|
|
- indent_level -= indent_amount
|
|
|
|
|
|
+indent = Indentation()
|
|
|
|
|
|
|
|
|
|
# Generate @code with @kwds interpolated.
|
|
# Generate @code with @kwds interpolated.
|
|
-# Obey indent_level, and strip eatspace.
|
|
|
|
|
|
+# Obey indent, and strip eatspace.
|
|
def cgen(code, **kwds):
|
|
def cgen(code, **kwds):
|
|
raw = code % kwds
|
|
raw = code % kwds
|
|
- if indent_level:
|
|
|
|
- indent = genindent(indent_level)
|
|
|
|
- raw = re.sub(r'^(?!(#|$))', indent, raw, flags=re.MULTILINE)
|
|
|
|
|
|
+ if indent:
|
|
|
|
+ raw = re.sub(r'^(?!(#|$))', str(indent), raw, flags=re.MULTILINE)
|
|
return re.sub(re.escape(eatspace) + r' *', '', raw)
|
|
return re.sub(re.escape(eatspace) + r' *', '', raw)
|
|
|
|
|
|
|
|
|