Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions gen-glyph-list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/usr/bin/env python3

import sys
import os
import re

def write_glyph_list(content: str) -> int:
out_file_name = "glyph-list.txt"
try:
with open(out_file_name, "w") as out:
out.write(content)
print(f"Writing {out_file_name} done.")
return 0
except FileNotFoundError:
print("Directory not found", file = sys.stderr)
return 2
except PermissionError:
print("Permission denied", file = sys.stderr)
return 1
except OSError as error:
print(f"Error writing file: {error}", file = sys.stderr)
return 1

def main():
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} INPUT", file = sys.stderr)
return 2
try:
fn = sys.argv[1]
with open(fn) as spline_font_db:
print(f"File {os.path.basename(fn)} found.")
data = spline_font_db.read()
pattern = r"^StartChar:\s*([\w\.\-]+?)\s*\nEncoding:\s*(\d+)\s+-?\d+\s+\d+$"
matches = re.findall(pattern, data, re.M)
glyph_cnt = len(matches)

if glyph_cnt < 1:
print(f"No glyphs found!")
return 1

glyph_list = f"count: {glyph_cnt}\n"
glyph_list += "UniCode | Dec | S | Name\n"
glyph_list += "---------+-------+---+-----------------\n"
for match in matches:
uni = f"\\U+{int(match[1]):04X}"
dec = f"{int(match[1]):5}"
sym = f"{chr(int(match[1]))}"
name = match[0]
glyph_list += f"{uni:8} | {dec} | {sym} | {name}\n"

return write_glyph_list(glyph_list)

except FileNotFoundError:
print(f"File {os.path.basename(fn)} does not exist.", file=sys.stderr)
return 2
except PermissionError:
print(f"Permission denied for {os.path.basename(fn)}!", file=sys.stderr)
return 1

if __name__ == "__main__":
raise SystemExit(main())