mirror of
https://github.com/viviandsx/regie5.git
synced 2026-10-17 14:01:36 +02:00
43 lines
1.8 KiB
Python
Executable File
43 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Regie5 — prints every interface string, one column per language, as a
|
|
# Markdown table (for proofreading and translating). Read from src/core/lang/.
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
# scripts/list-strings.py > build/strings.md every language
|
|
# scripts/list-strings.py de > build/strings-de.md English and German only
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
LANG = os.path.join(ROOT, "src", "core", "lang")
|
|
HEADER = os.path.join(ROOT, "src", "core", "i18n.h")
|
|
entry = re.compile(r'\{\s*(\w+)\s*,\s*((?:"(?:[^"\\]|\\.)*"\s*)+)\}', re.S)
|
|
|
|
|
|
def joined(literals):
|
|
return "".join(re.findall(r'"((?:[^"\\]|\\.)*)"', literals))
|
|
|
|
|
|
h = open(HEADER, encoding="utf-8").read()
|
|
keys = re.findall(r"^\s*(\w+),", h[h.index("enum S {") + 8:h.index(" Count\n")], re.M)
|
|
langs = {}
|
|
for name in sorted(os.listdir(LANG)):
|
|
if not name.endswith(".cpp") or name == "languages.cpp":
|
|
continue
|
|
text = open(os.path.join(LANG, name), encoding="utf-8").read()
|
|
code = re.search(r'extern const Language \w+ = \{\s*"([^"]+)"', text).group(1)
|
|
langs[code] = {k: joined(v) for k, v in entry.findall(text[text.index("kTexts[] = {"):])}
|
|
wanted = ["en"] + [c for c in sys.argv[1:] if c != "en"] if len(sys.argv) > 1 else \
|
|
["en"] + sorted(c for c in langs if c != "en")
|
|
missing = [c for c in wanted if c not in langs]
|
|
if missing:
|
|
sys.exit("no such language in src/core/lang/: " + ", ".join(missing))
|
|
print("| Key | " + " | ".join(wanted) + " |")
|
|
print("|---|" + "---|" * len(wanted))
|
|
for k in keys:
|
|
cell = lambda c: langs[c].get(k, "*(missing)*").replace("|", "\\|")
|
|
print("| %s | %s |" % (k, " | ".join(cell(c) for c in wanted)))
|
|
for c in wanted:
|
|
print("%s: %d of %d strings" % (c, sum(k in langs[c] for k in keys), len(keys)), file=sys.stderr)
|