#!/usr/bin/env python3
"""Inject @font-face declarations into converted HTML files so browsers can render custom fonts."""
import os
import glob
HTML_DIR = os.path.join(os.path.dirname(__file__), "..", "public", "html")
# Map: TTF filename -> (family name, weight, style)
FONT_MAP = {
"balaram_.ttf": ("Balaram", "normal", "normal"),
"bab_____.ttf": ("Balaram", "bold", "normal"),
"bai_____.ttf": ("Balaram", "normal", "italic"),
"babi____.ttf": ("Balaram", "bold", "italic"),
"SCAGRG__.TTF": ("ScaGoudy", "normal", "normal"),
"SCAGB___.TTF": ("ScaGoudy", "bold", "normal"),
"SCAGI___.TTF": ("ScaGoudy", "normal", "italic"),
"SCAGBI__.TTF": ("ScaGoudy", "bold", "italic"),
"SCATRG__.TTF": ("ScaTimes", "normal", "normal"),
"SCATB___.TTF": ("ScaTimes", "bold", "normal"),
"SCATI___.TTF": ("ScaTimes", "normal", "italic"),
"SCAPRG__.TTF": ("ScaPalatino", "normal", "normal"),
"SCAPB___.TTF": ("ScaPalatino", "bold", "normal"),
"SCAPI___.TTF": ("ScaPalatino", "normal", "italic"),
"SCAHRG__.TTF": ("ScaHelvetica", "normal", "normal"),
"SCAHB___.TTF": ("ScaHelvetica", "bold", "normal"),
"SCAORG__.TTF": ("ScaOptima", "normal", "normal"),
"SCAOB___.TTF": ("ScaOptima", "bold", "normal"),
"SCAOI___.TTF": ("ScaOptima", "normal", "italic"),
"SCAKRG__.TTF": ("ScaKorinna", "normal", "normal"),
"SCAKB___.TTF": ("ScaKorinna", "bold", "normal"),
"SCAKI___.TTF": ("ScaKorinna", "normal", "italic"),
"SCABRG__.TTF": ("ScaBenguit", "normal", "normal"),
"SCABB___.TTF": ("ScaBenguit", "bold", "normal"),
"SCACRG__.TTF": ("ScaCheltenham", "normal", "normal"),
"SCACB___.TTF": ("ScaCheltenham", "bold", "normal"),
"SCACI___.TTF": ("ScaCheltenham", "normal", "italic"),
"SCASRG__.TTF": ("ScaSabon", "normal", "normal"),
"SCASB___.TTF": ("ScaSabon", "bold", "normal"),
"SCASI___.TTF": ("ScaSabon", "normal", "italic"),
"SCAFQRG_.TTF": ("ScaFrizQuadrata", "normal", "normal"),
"SCAFQB__.TTF": ("ScaFrizQuadrata", "bold", "normal"),
"S_TMS___.TTF": ("Sanskrit-Times", "normal", "normal"),
"S_TMS_B_.TTF": ("Sanskrit-Times", "bold", "normal"),
"S_TMS__I.TTF": ("Sanskrit-Times", "normal", "italic"),
"S_TMS_BI.TTF": ("Sanskrit-Times", "bold", "italic"),
"S_HLV___.TTF": ("Sanskrit-Helvetica", "normal", "normal"),
"S_HLV_B_.TTF": ("Sanskrit-Helvetica", "bold", "normal"),
"S_HLV__O.TTF": ("Sanskrit-Helvetica", "normal", "italic"),
"S_HLV_BO.TTF": ("Sanskrit-Helvetica", "bold", "italic"),
"S_NCALN.TTF": ("Sanskrit-New Caledonia", "normal", "normal"),
"S_NCALB.TTF": ("Sanskrit-New Caledonia", "bold", "normal"),
"S_NCALI.TTF": ("Sanskrit-New Caledonia", "normal", "italic"),
"S_NCALBI.TTF": ("Sanskrit-New Caledonia", "bold", "italic"),
"RMDEVA.TTF": ("RM Devanagari", "normal", "normal"),
"BELLCN__.TTF": ("BellCentennial", "normal", "normal"),
"inbenr11.ttf": ("Inbenr", "normal", "normal"),
"inbenb11.ttf": ("Inbenb", "normal", "normal"),
"inbeni11.ttf": ("Inbeni", "normal", "normal"),
"inbeno11.ttf": ("Inbeno", "normal", "normal"),
"indevr20.ttf": ("Indevr", "normal", "normal"),
}
def build_font_face_css():
rules = []
for filename, (family, weight, style) in sorted(FONT_MAP.items()):
rules.append(
f"@font-face {{\n"
f" font-family: '{family}';\n"
f" src: url('/fonts/{filename}') format('truetype');\n"
f" font-weight: {weight};\n"
f" font-style: {style};\n"
f" font-display: swap;\n"
f"}}"
)
return "\n".join(rules)
def inject_into_html(html_path, font_css):
with open(html_path, "r", encoding="utf-8", errors="replace") as f:
content = f.read()
# Remove old injection if present
if "/* RTF-VIEWER-FONTS */" in content:
import re
content = re.sub(
r'\s*',
'',
content,
flags=re.DOTALL
)
style_tag = f''
if "" in content:
content = content.replace("", f"{style_tag}\n")
elif "