Source code for gnomish_army_knife.macro.category
"""
A module implementing an interface for macro categories.
"""
# built-in
from os import linesep
from pathlib import Path
# third-party
from vcorelib.io.types import JsonObject as _JsonObject
# internal
from gnomish_army_knife.icon import icon_url
from gnomish_army_knife.macro import Macro
from gnomish_army_knife.macro.group import MacroGroup
from gnomish_army_knife.schemas import BasicGakCodec
[docs]
class MacroCategory(BasicGakCodec):
"""A class implementing an interface for macros."""
[docs]
def init(self, data: _JsonObject) -> None:
"""Perform implementation-specific initialization."""
super().init(data)
self.groups: list[MacroGroup] = [
# Schema has already been validated.
MacroGroup(x, verify=False) # type: ignore
for x in data.get( # type: ignore
"groups",
[],
)
]
self.icon_url = icon_url(str(data["icon"]))
self.name: str = data["name"] # type: ignore
self.slug: str = self.to_slug(self.name)
self.macros: list[Macro] = [
# Schema has already been validated.
Macro(x, verify=False) # type: ignore
for x in data.get( # type: ignore
"macros",
[],
)
]
[docs]
def write_markdown_dir(self, path: Path, name: str = "index.md") -> None:
"""Write markdown contents to disk."""
path.mkdir(parents=True, exist_ok=True)
# Group pages.
link_strs: list[str] = []
for group in self.groups:
group.write_markdown(
self.name, self.icon_url, path.joinpath(f"{group.slug}.md")
)
link = f"{group.slug}.html"
link_strs.append(
f"* [{group.icon_url}]({link}) [{group.name}]({link})"
)
link_strs.append("")
with path.joinpath(name).open("w") as path_fd:
path_fd.write(
linesep.join(
[
f"# {self.icon_url} {self.name}",
"",
"([top-level](..))",
"",
"## Groups",
"",
]
+ link_strs
+ ["", "## Macros", "", "TODO", ""]
+ list(self.markdown_footer),
)
)