
- Rewrites some of the commands to use Python. - Also implements wmlxgettext --force-po, similar to xgettext.
44 lines
1.7 KiB
Python
Executable file
44 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())
|