wesnoth/po/FINDCPP
Ivo Julca 4d2cb1ce7f Build: Update scripts for .pot, .po files to support Python files
- Rewrites some of the commands to use Python.
- Also implements wmlxgettext --force-po, similar to xgettext.
2023-06-14 09:58:56 +02:00

45 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Lists localizable CPP files.
# Excludes files in .git folders.
#
# Syntax:
# FINDCPP DOMAIN --initialdomain INITIAL_DOMAIN
#
# --initialdomain: Files without an explicit domain default to this value.
import argparse
import glob
import re
from pathlib import Path
if __name__ == '__main__':
ap = argparse.ArgumentParser()
ap.add_argument('domain') # Single positional argument
ap.add_argument('--initialdomain', dest='initdom') # Optional
args = ap.parse_args()
# Whether the input string has any explicit text domain.
any_regexp = re.compile("^#define *GETTEXT_DOMAIN", re.MULTILINE)
# Whether the input string has defined args.domain as its text domain.
domain_regexp = re.compile("^#define *GETTEXT_DOMAIN *\"" + re.escape(args.domain) + "\"", re.MULTILINE)
cpp_files = glob.glob("src/**/*.cpp", recursive=True)
# Apparently, some people insist in adding translatable strings to header files (6bf76d940).
cpp_files.extend(glob.glob("src/**/*.hpp", recursive=True))
cpp_files.sort()
for p in cpp_files:
# In Windows, glob search yields paths with mixed separators (/\).
path = Path(p)
# Exclude any .git subdirectories.
if ".git" in path.parts:
continue
content = path.read_text(encoding='utf8')
# For the default domain, first check that there is no domain defined,
# but still search for domain_regexp otherwise.
if args.domain == args.initdom and not re.search(any_regexp, content):
# Produce output with / only.
print(path.as_posix())
elif re.search(domain_regexp, content):
# Produce output with / only.
print(path.as_posix())