mirror of
https://github.com/harvard-edge/cs249r_book.git
synced 2026-11-09 10:39:41 -06:00
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
import yaml
|
|
import re
|
|
|
|
with open("books/shared/_includes/notation_registry.yml") as f:
|
|
data = yaml.safe_load(f)
|
|
|
|
for var in data["variables"]:
|
|
# clean definition
|
|
desc = var["definition"]
|
|
desc = re.sub(r'\(.*?\)', '', desc) # remove parentheticals
|
|
desc = desc.split(';')[0] # take first part before semicolon
|
|
desc = desc.split(',')[0] # take first part before comma
|
|
desc = desc.split(' as in ')[0]
|
|
desc = desc.replace("vs.", "")
|
|
desc = re.sub(r'\$.*?\$', '', desc) # remove math
|
|
desc = desc.strip()
|
|
|
|
# generate camel
|
|
words = re.sub(r'[^a-zA-Z0-9 ]', '', desc).split()
|
|
if not words:
|
|
words = ["Var"]
|
|
macro = "".join(w.capitalize() for w in words)
|
|
|
|
# handle suffixes from latex
|
|
latex = var["latex"]
|
|
suf = re.search(r'_\{?\\text\{([^}]+)\}\}?', latex)
|
|
if suf:
|
|
suf_str = "".join(w.capitalize() for w in re.sub(r'[^a-zA-Z0-9 ]', '', suf.group(1)).split())
|
|
if suf_str.lower() not in macro.lower():
|
|
macro += suf_str
|
|
|
|
# handle simple subscritps
|
|
suf2 = re.search(r'_([a-zA-Z0-9]+)', latex)
|
|
if suf2 and not suf:
|
|
suf_str = suf2.group(1).capitalize()
|
|
if suf_str.lower() not in macro.lower():
|
|
macro += suf_str
|
|
|
|
var["macro"] = "\\" + macro
|
|
|
|
# Deduplicate macro names
|
|
seen = {}
|
|
for var in data["variables"]:
|
|
m = var["macro"]
|
|
if m in seen:
|
|
seen[m] += 1
|
|
var["macro"] = f"{m}{seen[m]}"
|
|
else:
|
|
seen[m] = 1
|
|
|
|
with open("books/shared/_includes/notation_registry.yml", "w") as f:
|
|
yaml.dump(data, f, sort_keys=False, allow_unicode=True)
|