|
1 | 1 | import json |
2 | 2 | from pathlib import Path |
3 | 3 | import re |
| 4 | +import sys |
4 | 5 |
|
5 | 6 | # Config |
6 | 7 | PROJECT_ROOT = Path(__file__).parent |
7 | 8 | LANG_JSON_DIR = PROJECT_ROOT / "LanguageBinCreator" / "languages" |
| 9 | +TEXTID_ENUM_FILE = PROJECT_ROOT.parent / "Includes" / "TextID.hpp" |
8 | 10 |
|
9 | | -# Regex: match anything inside get("...") or get('...') |
10 | | -LANG_PATTERN = re.compile(r'Language::getInstance\(\)->get\(\s*["\'](.+?)["\']\s*\)') |
| 11 | +# Regex: match anything like TextID::SOME_KEY |
| 12 | +TEXTID_PATTERN = re.compile(r'TextID::([A-Z0-9_]+)') |
11 | 13 |
|
12 | | -# MenuFolderExtras: first parameter |
13 | | -MENUFOLDER_PATTERN = re.compile(r'MenuFolderExtras\(\s*["\'](.+?)["\']') |
14 | | - |
15 | | -# MenuEntryExtras: last string parameter |
16 | | - |
17 | | -MENUENTRY_PATTERN = re.compile(r'MenuEntryExtras\((.*?)\)') |
18 | | - |
19 | | -# HotkeyExtras: second parameter |
20 | | -HOTKEY_PATTERN = re.compile(r'HotkeyExtras\([^,]+,\s*["\'](.+?)["\']\s*\)') |
21 | | - |
22 | | -# Scan code files for keys |
| 14 | +# Scan code files for enum keys |
23 | 15 | keys_used = set() |
24 | 16 |
|
25 | 17 | for file_path in PROJECT_ROOT.rglob("*"): |
|
28 | 20 | content = file_path.read_text(encoding="utf-8") |
29 | 21 | except Exception as e: |
30 | 22 | print(f"[WARNING] Could not read {file_path}: {e}") |
| 23 | + exit_code = 1 |
31 | 24 | continue |
32 | 25 |
|
33 | | - matches = MENUFOLDER_PATTERN.findall(content) + \ |
34 | | - HOTKEY_PATTERN.findall(content) + \ |
35 | | - LANG_PATTERN.findall(content) |
36 | | - |
| 26 | + matches = TEXTID_PATTERN.findall(content) |
37 | 27 | keys_used.update(matches) |
38 | 28 |
|
39 | | - params = MENUENTRY_PATTERN.findall(content) |
40 | | - for param_str in params: |
41 | | - string_keys = re.findall(r'["\'](.+?)["\']', param_str) |
42 | | - keys_used.update(string_keys) |
| 29 | +# Ignore NONE |
| 30 | +keys_used.discard("NONE") |
43 | 31 |
|
44 | | -# Load all JSON entries |
| 32 | +# Load all JSON entries (master_keys) |
45 | 33 | json_files = list(LANG_JSON_DIR.glob("*.json")) |
46 | 34 | json_entries_per_file = {} |
47 | 35 |
|
|
52 | 40 | json_entries_per_file[json_file.name] = entries |
53 | 41 | except Exception as e: |
54 | 42 | print(f"[WARNING] Could not parse {json_file}: {e}") |
| 43 | + exit_code = 1 |
55 | 44 |
|
56 | 45 | # Check each key in every JSON |
57 | 46 | missing_keys_report = {} |
|
66 | 55 |
|
67 | 56 | # Print results |
68 | 57 | if not missing_keys_report: |
69 | | - print("All language keys exist in every JSON file!") |
| 58 | + print("All TextID keys exist in every JSON file!") |
| 59 | + exit_code = 0 |
70 | 60 | else: |
71 | | - print(f"Some language keys are missing in JSON files ({len(missing_keys_report)}):") |
| 61 | + print(f"Some TextID keys are missing in JSON files ({len(missing_keys_report)}):") |
72 | 62 | for key, missing_files in sorted(missing_keys_report.items()): |
73 | 63 | print(f" - {key} missing in: {', '.join(missing_files)}") |
| 64 | + exit_code = 1 |
74 | 65 |
|
75 | | -print(f"\nTotal keys found in code: {len(keys_used)}") |
| 66 | +print(f"\nTotal TextID keys found in code: {len(keys_used)}") |
76 | 67 | print(f"JSON files scanned: {len(json_files)}") |
| 68 | +sys.exit(exit_code) |
0 commit comments