',
f"{html.escape(node.title)}
",
'',
f"- ID
- {html.escape(node.node_id)}
",
f"- Family
- {html.escape(node.family)}
",
f"- Status
- {html.escape(node.status)}
",
f"- Authority
- {html.escape(node.authority)}
",
"
",
f'{html.escape(node.summary)}
',
self.markdown.render(node.content).rstrip(),
]
)
relationships = edge_map.get(node.node_id, [])
if relationships:
sections.append('')
for edge in relationships:
sections.append(
f"- {html.escape(edge.relation)}: {html.escape(edge.target_id)}
"
)
sections.append("
")
sections.append("")
return "\n".join(sections)
_RENDERERS: dict[str, type[GenericHtmlRenderer]] = {
GenericHtmlRenderer.renderer_id: GenericHtmlRenderer
}
def renderer_for(view: RenderView) -> Renderer:
factory = _RENDERERS.get(view.renderer)
if factory is None:
raise DocForgeError(
"unsupported_renderer", "View does not name a supported built-in renderer"
)
return factory()
def relative_output(snapshot: ProjectSnapshot, path: Path) -> str:
return path.relative_to(snapshot.descriptor.root).as_posix()