bylaws/src/glossary.py
tnichols217 26c5d86c29
Add dark theme and fix article linking (#1)
* Fix glossary

* add scripts and fix extension

* fix article linking
2025-09-29 00:55:08 +00:00

52 lines
1.6 KiB
Python

from typing import TypedDict
import yaml
class Item(TypedDict):
term: str
definition: str
Glossary = list[Item]
def load_glossary(file_path: str) -> Glossary:
glossary = []
with open(file_path) as stream:
try:
glossary: Glossary = yaml.safe_load(stream)
except yaml.YAMLError as exc:
print(exc)
return glossary
def get_sec_name(item: Item) -> str:
sec_name = "-".join("".join([i for i in item['term'] if i.isalpha() or i == " "]).split(" ")).lower()
sec_name += ""
return sec_name
def generate_glossary(glossary: Glossary, acronyms: Glossary) -> str:
glossary_str = "# Glossary\n\n"
glossary_str += "\n".join(f"## {item['term']} {"{#sec-"}{get_sec_name(item)}{"}"}\n\n{item['definition']}" for item in glossary)
glossary_str += "\n# Acronyms\n\n"
glossary_str += "\n".join(f"## {item['term']} {"{#sec-"}{get_sec_name(item)}{"}"}\n\n{item['definition']}\n" for item in acronyms)
return glossary_str
def generate_env(glossary: Glossary, acronyms: Glossary) -> str:
gloss = {}
acron = {}
for item in glossary:
gloss[get_sec_name(item)] = f"[{item['term']}](/glossary.qmd#sec-{get_sec_name(item)})"
for item in acronyms:
acron[get_sec_name(item)] = f"[{item['term']}](/glossary.qmd#sec-{get_sec_name(item)})"
return yaml.dump({"glossary": gloss, "acronyms": acron})
glossary = load_glossary("glossary.yaml")
acronyms = load_glossary("acronyms.yaml")
with open("glossary.qmd", "w") as f:
_ = f.write(generate_glossary(glossary, acronyms))
with open("_variables.yml", "a") as f:
_ = f.write(generate_env(glossary, acronyms))