Δ Γ Λ Ω Φ Ψ Σ Θ answered only to De, Ga, La, Om, Ph, Ps, Si, Th, while their small letters answered to delta, gamma and the rest; they answer to the names too now. mkemoji and cldr2emoji write UTF-8 whatever the locale, as the other generators already did; verify-map calls python3 the one way; the tests' include path drops a directory nothing includes through; and bench.sh says which binary is missing instead of blaming the daemon ten seconds later.
53 lines
1.7 KiB
Python
Executable File
53 lines
1.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
"""Write emoji.src: every fully-qualified emoji of Unicode's emoji-test.txt
|
||
but the skin-tone variants, each with its CLDR names and keywords in the
|
||
languages given, as result-first TAB-separated rows for mkemoji."""
|
||
|
||
import json
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
|
||
def emoji(path):
|
||
out = []
|
||
for line in path.open(encoding="utf-8"):
|
||
if "; fully-qualified" not in line:
|
||
continue
|
||
cps = [int(cp, 16) for cp in line.split(";")[0].split()]
|
||
if any(0x1F3FB <= cp <= 0x1F3FF for cp in cps):
|
||
continue
|
||
out.append("".join(map(chr, cps)))
|
||
return out
|
||
|
||
|
||
def annotations(path):
|
||
"""CLDR annotations.json, plain or derived: emoji -> names, keywords."""
|
||
root = json.load(path.open(encoding="utf-8"))
|
||
table = root[next(iter(root))]["annotations"]
|
||
return {e: a.get("tts", []) + a.get("default", []) for e, a in table.items()}
|
||
|
||
|
||
def main():
|
||
sys.stdout.reconfigure(encoding="utf-8")
|
||
sys.stderr.reconfigure(encoding="utf-8")
|
||
if len(sys.argv) < 3:
|
||
print(f"usage: {sys.argv[0]} emoji-test.txt annotations.json...",
|
||
file=sys.stderr)
|
||
return 2
|
||
tables = [annotations(Path(arg)) for arg in sys.argv[2:]]
|
||
print("# Result first, then its CLDR names and keywords; see map/README.")
|
||
for e in emoji(Path(sys.argv[1])):
|
||
aliases = []
|
||
for table in tables:
|
||
for alias in table.get(e.replace("️", ""), table.get(e, [])):
|
||
alias = alias.strip()
|
||
if alias and alias not in aliases:
|
||
aliases.append(alias)
|
||
if aliases:
|
||
print(e + "\t" + "\t".join(aliases))
|
||
return 0
|
||
|
||
|
||
if __name__ == "__main__":
|
||
sys.exit(main())
|