Moar `nest_from_op()` tweaks..
- better `nest_indent` logic where we either get a non-zero value and apply it strictly to both the `nest_prefix` and `text`, OR we auto-calc it from any `nest_prefix`, NOT a conflation of both.. - add a `rm_from_first_ln: str` which allows removing chars from the first line of `text` after a `str.strip()` (handy for removing the '<Channel' first chevron from type-reprs).enable_tpts
parent
49c61e40c7
commit
a931274da6
|
@ -262,6 +262,7 @@ def nest_from_op(
|
||||||
nest_indent: int|None = None,
|
nest_indent: int|None = None,
|
||||||
# XXX indent `next_prefix` "to-the-right-of" `input_op`
|
# XXX indent `next_prefix` "to-the-right-of" `input_op`
|
||||||
# by this count of whitespaces (' ').
|
# by this count of whitespaces (' ').
|
||||||
|
rm_from_first_ln: str|None = None,
|
||||||
|
|
||||||
) -> str:
|
) -> str:
|
||||||
'''
|
'''
|
||||||
|
@ -346,20 +347,35 @@ def nest_from_op(
|
||||||
if (
|
if (
|
||||||
nest_prefix
|
nest_prefix
|
||||||
and
|
and
|
||||||
nest_indent
|
nest_indent != 0
|
||||||
):
|
):
|
||||||
|
if nest_indent is not None:
|
||||||
nest_prefix: str = textwrap.indent(
|
nest_prefix: str = textwrap.indent(
|
||||||
nest_prefix,
|
nest_prefix,
|
||||||
prefix=nest_indent*' ',
|
prefix=nest_indent*' ',
|
||||||
)
|
)
|
||||||
|
nest_indent: int = len(nest_prefix)
|
||||||
|
|
||||||
|
# determine body-text indent either by,
|
||||||
|
# - using wtv explicit indent value is provided,
|
||||||
|
# OR
|
||||||
|
# - auto-calcing the indent to embed `text` under
|
||||||
|
# the `nest_prefix` if provided, **IFF** `nest_indent=None`.
|
||||||
|
tree_str_indent: int = 0
|
||||||
|
if nest_indent not in {0, None}:
|
||||||
|
tree_str_indent = nest_indent
|
||||||
|
elif (
|
||||||
|
nest_prefix
|
||||||
|
and
|
||||||
|
nest_indent != 0
|
||||||
|
):
|
||||||
|
tree_str_indent = len(nest_prefix)
|
||||||
|
|
||||||
indented_tree_str: str = text
|
indented_tree_str: str = text
|
||||||
tree_str_indent: int = 0
|
if tree_str_indent:
|
||||||
if nest_indent != 0:
|
|
||||||
tree_str_indent: int = len(nest_prefix)
|
|
||||||
indented_tree_str: str = textwrap.indent(
|
indented_tree_str: str = textwrap.indent(
|
||||||
text,
|
text,
|
||||||
prefix=' '*tree_str_indent
|
prefix=' '*tree_str_indent,
|
||||||
)
|
)
|
||||||
|
|
||||||
# inject any provided nesting-prefix chars
|
# inject any provided nesting-prefix chars
|
||||||
|
@ -369,18 +385,35 @@ def nest_from_op(
|
||||||
f'{nest_prefix}{indented_tree_str[tree_str_indent:]}'
|
f'{nest_prefix}{indented_tree_str[tree_str_indent:]}'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (
|
||||||
|
not prefix_op
|
||||||
|
or
|
||||||
|
rm_from_first_ln
|
||||||
|
):
|
||||||
|
tree_lns: list[str] = indented_tree_str.splitlines()
|
||||||
|
first: str = tree_lns[0]
|
||||||
|
if rm_from_first_ln:
|
||||||
|
first = first.strip().replace(
|
||||||
|
rm_from_first_ln,
|
||||||
|
'',
|
||||||
|
)
|
||||||
|
indented_tree_str: str = '\n'.join(tree_lns[1:])
|
||||||
|
|
||||||
|
if prefix_op:
|
||||||
|
indented_tree_str = (
|
||||||
|
f'{first}\n'
|
||||||
|
f'{indented_tree_str}'
|
||||||
|
)
|
||||||
|
|
||||||
if prefix_op:
|
if prefix_op:
|
||||||
return (
|
return (
|
||||||
f'{input_op}{op_suffix}'
|
f'{input_op}{op_suffix}'
|
||||||
f'{indented_tree_str}'
|
f'{indented_tree_str}'
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
tree_lns: list[str] = indented_tree_str.splitlines()
|
|
||||||
first: str = tree_lns[0]
|
|
||||||
rest: str = '\n'.join(tree_lns[1:])
|
|
||||||
return (
|
return (
|
||||||
f'{first}{input_op}{op_suffix}'
|
f'{first}{input_op}{op_suffix}'
|
||||||
f'{rest}'
|
f'{indented_tree_str}'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue