mirror of
https://github.com/beta-nu-theta-chi/bylaws.git
synced 2025-12-07 11:44:47 +00:00
52 lines
1.6 KiB
Python
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))
|