#!/usr/bin/env python3 """Regenerate internal/tui/diacritics.go from kitty's rowcolumn-diacritics table. Usage: scripts/gen-diacritics.py [table.txt] """ import sys import urllib.request URL = ("https://raw.githubusercontent.com/kovidgoyal/kitty/master/" "gen/rowcolumn-diacritics.txt") OUT = "internal/tui/diacritics.go" def load(path): if path: return open(path).read() return urllib.request.urlopen(URL, timeout=30).read().decode() def main(): text = load(sys.argv[1] if len(sys.argv) > 1 else None) marks = [int(l.split(";")[0], 16) for l in text.splitlines() if l.strip() and not l.startswith("#")] if len(marks) != 297: sys.exit(f"expected 297 marks, read {len(marks)}") lines = [ "// Code generated by scripts/gen-diacritics.py; DO NOT EDIT.", "", "package tui", "", "// charmbracelet/x/ansi/kitty only ships the first six of these and returns", "// the first mark for anything past five, which quietly mis-addresses every", "// cell past column six. this is kitty's full table.", "var placeholderDiacritics = [...]rune{", ] for i in range(0, len(marks), 8): chunk = marks[i:i + 8] lines.append("\t" + " ".join(f"0x{m:04X}," for m in chunk)) lines += [ "}", "", "func diacriticAt(i int) rune {", "\tif i < 0 || i >= len(placeholderDiacritics) {", "\t\treturn placeholderDiacritics[0]", "\t}", "\treturn placeholderDiacritics[i]", "}", "", ] with open(OUT, "w") as f: f.write("\n".join(lines)) print(f"wrote {OUT}: {len(marks)} marks") if __name__ == "__main__": main()