import csv import json import os _root = os.path.dirname(__file__) def _main(): dingbats = _read_dingbats() _write_java_fragment(dingbats) _write_javascript_module(dingbats) _write_python_module(dingbats) def _read_dingbats(): with open(os.path.join(_root, "dingbats.csv")) as dingbats_file: dingbat_reader = csv.DictReader(dingbats_file) return list(dingbat_reader) def _write_java_fragment(dingbats): with _open_text_file("java/dingbats.java") as java_file: java_file.write("// Generated by https://github.com/mwilliamson/dingbat-to-unicode\n") java_file.write("private static final Map dingbats = new Map<>();\n") java_file.write("static {\n") for dingbat in dingbats: java_file.write(" dingbats.put(") java_file.write(json.dumps(dingbat["Typeface name"] + "_" + dingbat["Dingbat dec"])) java_file.write(", ") java_file.write(str(int(dingbat["Unicode dec"]))) java_file.write(");\n") java_file.write("}\n") def _write_javascript_module(dingbats): dingbats_by_typeface_name = {} for dingbat in dingbats: typeface_name = dingbat["Typeface name"] dingbat_code_point = int(dingbat["Dingbat dec"]) unicode_code_point = int(dingbat["Unicode dec"]) dingbats_by_typeface_name.setdefault(typeface_name, {})[dingbat_code_point] = unicode_code_point with _open_text_file("js/src/dingbats.ts") as typescript_file: typescript_file.write("const dingbats: {[typefaceName: string]: {[dingbatCodePoint: string]: number}} = {\n") for typeface_name, dingbat_to_unicode in dingbats_by_typeface_name.items(): typescript_file.write(" " * 4) json.dump(typeface_name.upper(), typescript_file) typescript_file.write(": {\n") for dingbat_code_point, unicode_code_point in dingbat_to_unicode.items(): typescript_file.write(" " * 8) typescript_file.write(str(dingbat_code_point)) typescript_file.write(": ") typescript_file.write(str(unicode_code_point)) typescript_file.write(",\n") typescript_file.write(" " * 4) typescript_file.write("},\n") typescript_file.write("};\n") typescript_file.write("export default dingbats;\n"); def _write_python_module(dingbats): with _open_text_file("python/dingbats.py") as python_file: python_file.write("# Generated by https://github.com/mwilliamson/dingbat-to-unicode\n\n") python_file.write("dingbats = {\n") for dingbat in dingbats: python_file.write(" ") python_file.write(repr((dingbat["Typeface name"], int(dingbat["Dingbat dec"])))) python_file.write(": ") python_file.write(repr(int(dingbat["Unicode dec"]))) python_file.write(",\n") python_file.write("}\n") def _open_text_file(path): full_path = os.path.join(_root, path) os.makedirs(os.path.dirname(full_path), exist_ok=True) return open(full_path, "wt", encoding="utf-8") if __name__ == "__main__": _main()