TEXT renderers for registry-related commands.
This module contains pure TEXT renderers used by CLI commands to produce
human-facing console output. Rendering is pure: functions return a string and
perform no I/O.
TEXT output may use verbosity_level for console-oriented progressive disclosure.
render_filetype_policy_text
render_filetype_policy_text(policy, styled)
Render a file type header policy for TEXT output.
Source code in src/topmark/presentation/text/registry.py
| def render_filetype_policy_text(
policy: FileTypePolicyHumanItem,
styled: bool,
) -> str:
"""Render a file type header policy for TEXT output."""
# Note: the stylers already check `report.styled` so we don't need `maybe_style()`
emphasis_styler: TextStyler = style_for_role(StyleRole.EMPHASIS, styled=styled)
rendered_items: list[str] = []
for key, value in filetype_policy_to_display_pairs(policy):
styled_key: str = emphasis_styler(
key,
)
rendered_items.append(f"{styled_key}={value}")
return ", ".join(rendered_items)
|
render_filetypes_text
render_filetypes_text(report)
Render TEXT output for topmark registry filetypes.
Parameters:
| Name |
Type |
Description |
Default |
report
|
FileTypesHumanReport
|
Precomputed Click-free report model.
|
required
|
Returns:
Source code in src/topmark/presentation/text/registry.py
| def render_filetypes_text(
report: FileTypesHumanReport,
) -> str:
"""Render TEXT output for `topmark registry filetypes`.
Args:
report: Precomputed Click-free report model.
Returns:
Rendered TEXT output.
"""
# Note: the stylers already check `report.styled` so we don't need `maybe_style()`
muted_styler: TextStyler = style_for_role(StyleRole.MUTED, styled=report.styled)
emphasis_styler: TextStyler = style_for_role(StyleRole.EMPHASIS, styled=report.styled)
items: tuple[FileTypeHumanItem, ...] = report.items
vlevel: int = report.verbosity_level
lines: list[str] = []
if vlevel > 0:
heading: str = emphasis_styler(
"Supported file types (canonical identities):",
)
lines.append(heading)
lines.append("")
total: int = len(items)
num_width: int = len(str(total)) if total > 0 else 1
k_len: int = max(1, max((len(it.qualified_key) for it in items), default=1))
for idx, it in enumerate(items, start=1):
descr: str = muted_styler(
it.description,
)
if report.show_details:
lines.append(f"{idx:>{num_width}}. {it.qualified_key} - {descr}")
lines.append(f" local key : {it.local_key}")
lines.append(f" namespace : {it.namespace}")
lines.append(f" bound : {'yes' if it.bound else 'no'}")
if it.extensions:
lines.append(f" extensions : {', '.join(it.extensions)}")
if it.filenames:
lines.append(f" filenames : {', '.join(it.filenames)}")
if it.patterns:
lines.append(f" patterns : {', '.join(it.patterns)}")
lines.append(f" skip processing : {'yes' if it.skip_processing else 'no'}")
lines.append(f" content matcher : {'yes' if it.has_content_matcher else 'no'}")
lines.append(f" insert checker : {'yes' if it.has_insert_checker else 'no'}")
policy_str: str = render_filetype_policy_text(
it.policy,
styled=report.styled,
)
lines.append(f" header policy : {policy_str}")
else:
lines.append(f"{idx:>{num_width}}. {it.qualified_key:<{k_len}} {descr}")
return "\n".join(lines)
|
render_processors_text
render_processors_text(report)
Render TEXT output for topmark registry processors.
Parameters:
Returns:
Source code in src/topmark/presentation/text/registry.py
| def render_processors_text(
report: ProcessorsHumanReport,
) -> str:
"""Render TEXT output for `topmark registry processors`.
Args:
report: Precomputed Click-free report model.
Returns:
Rendered TEXT output.
"""
vlevel: int = report.verbosity_level
heading_styler: TextStyler = style_for_role(StyleRole.HEADING_TITLE, styled=report.styled)
dim_styler: TextStyler = style_for_role(StyleRole.DIFF_LINE_NO, styled=report.styled)
parts: list[str] = []
if vlevel > 0:
parts.append(heading_styler("Registered header processors:"))
parts.append("")
total_proc: int = len(report.processors)
num_proc_width: int = len(str(total_proc)) if total_proc > 0 else 1
k_len: int = max(1, max((len(proc.qualified_key) for proc in report.processors), default=1))
for proc_idx, proc in enumerate(report.processors, start=1):
descr: str = dim_styler(proc.description)
if report.show_details:
parts.append(f"{proc_idx:>{num_proc_width}}. {proc.qualified_key} - {descr}")
parts.append(f" local key : {proc.local_key}")
parts.append(f" namespace : {proc.namespace}")
parts.append(f" bound : {'yes' if proc.bound else 'no'}")
parts.append(f" line indent : {proc.line_indent}")
parts.append(f" line prefix : {proc.line_prefix}")
parts.append(f" line suffix : {proc.line_suffix}")
parts.append(f" block prefix : {proc.block_prefix}")
parts.append(f" block suffix : {proc.block_suffix}")
else:
parts.append(f"{proc_idx:>{num_proc_width}}. {proc.qualified_key:<{k_len}} {descr}")
return "\n".join(parts)
|
render_bindings_text
render_bindings_text(report)
Render TEXT output for topmark registry bindings.
Parameters:
| Name |
Type |
Description |
Default |
report
|
BindingsHumanReport
|
Precomputed Click-free report model.
|
required
|
Returns:
Source code in src/topmark/presentation/text/registry.py
| def render_bindings_text(
report: BindingsHumanReport,
) -> str:
"""Render TEXT output for `topmark registry bindings`.
Args:
report: Precomputed Click-free report model.
Returns:
Rendered TEXT output.
"""
vlevel: int = report.verbosity_level
heading_styler: TextStyler = style_for_role(StyleRole.HEADING_TITLE, styled=report.styled)
dim_styler: TextStyler = style_for_role(StyleRole.DIFF_LINE_NO, styled=report.styled)
parts: list[str] = []
if vlevel > 0:
parts.append(heading_styler("Effective file-type-to-processor bindings:"))
parts.append("")
total: int = len(report.bindings)
num_width: int = len(str(total)) if total > 0 else 1
for idx, binding in enumerate(report.bindings, start=1):
if report.show_details:
parts.append(f"{idx:>{num_width}}. {binding.file_type_key} -> {binding.processor_key}")
parts.append(f" file type local key : {binding.file_type_local_key}")
parts.append(f" file type namespace : {binding.file_type_namespace}")
parts.append(f" processor local key : {binding.processor_local_key}")
parts.append(f" processor namespace : {binding.processor_namespace}")
parts.append(f" file type desc : {dim_styler(binding.file_type_description)}")
parts.append(f" processor desc : {dim_styler(binding.processor_description)}")
else:
parts.append(f"{idx:>{num_width}}. {binding.file_type_key} -> {binding.processor_key}")
if report.unbound_filetypes:
parts.append("")
parts.append(heading_styler("Unbound file types:"))
for idx, item in enumerate(report.unbound_filetypes, start=1):
parts.append(f"{idx:>{num_width}}. {item.name} - {dim_styler(item.description)}")
if report.unused_processors:
parts.append("")
parts.append(heading_styler("Unused processors:"))
for idx, item in enumerate(report.unused_processors, start=1):
parts.append(
f"{idx:>{num_width}}. {item.qualified_key} - {dim_styler(item.description)}"
)
return "\n".join(parts)
|