77 lines
2.1 KiB
Python
77 lines
2.1 KiB
Python
# Iterate through each file in the project
|
|
# Look for LocalBabel("text") in each file, mark it as the "text" domain
|
|
# module files inherit from their __init__ files if they don't specify a specific domain
|
|
import re
|
|
import os
|
|
from collections import defaultdict
|
|
|
|
babel_regex = re.compile(
|
|
r".*LocalBabel\(\s*['\"](.*)['\"]\s*\).*"
|
|
)
|
|
|
|
|
|
ignored_dirs = {
|
|
'RCS',
|
|
'__pycache__',
|
|
'pending-rewrite',
|
|
'.git'
|
|
}
|
|
|
|
|
|
def parse_domain(path):
|
|
"""
|
|
Parse a file to check for domain specifications.
|
|
|
|
Currently just looks for a LocalBabel("domain") specification.
|
|
"""
|
|
with open(path, 'r') as file:
|
|
for line in file:
|
|
match = babel_regex.match(line)
|
|
if match:
|
|
return match.groups()[0]
|
|
|
|
|
|
def read_directory(path, domain_map, domain='base'):
|
|
init_path = None
|
|
files = []
|
|
dirs = []
|
|
for entry in os.scandir(path):
|
|
if entry.is_file(follow_symlinks=False) and entry.name.endswith('.py'):
|
|
if entry.name == '__init__.py':
|
|
init_path = entry.path
|
|
else:
|
|
files.append(entry.path)
|
|
elif entry.is_dir(follow_symlinks=False) and entry.name not in ignored_dirs:
|
|
dirs.append(entry.path)
|
|
|
|
if init_path:
|
|
domain = parse_domain(init_path) or domain
|
|
print(
|
|
f"{domain:<20} | {path}"
|
|
)
|
|
|
|
for file_path in files:
|
|
file_domain = parse_domain(file_path) or domain
|
|
print(
|
|
f"{file_domain:<20} | {file_path}"
|
|
)
|
|
domain_map[file_domain].append(file_path)
|
|
|
|
for dir_path in dirs:
|
|
read_directory(dir_path, domain_map, domain)
|
|
|
|
|
|
def write_domains(domain_map):
|
|
for domain, files in domain_map.items():
|
|
domain_path = os.path.join('locales', 'domains', f"{domain}.txt")
|
|
with open(domain_path, 'w') as domain_file:
|
|
domain_file.write('\n'.join(files))
|
|
print(f"Wrote {len(files)} source files to {domain_path}")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
domain_map = defaultdict(list)
|
|
read_directory('src/', domain_map, domain='base')
|
|
write_domains(domain_map)
|
|
print("Supported domains: {}".format(', '.join(domain_map.keys())))
|