mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-04-25 15:34:48 -05:00
169 lines
5.0 KiB
Python
169 lines
5.0 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
defaultLocaleFile = "en-US.ini"
|
|
commentChars = ";#"
|
|
|
|
|
|
class localeEntry:
|
|
locale = ""
|
|
widgetPlaceholders = []
|
|
qStringArgs = []
|
|
lineNum = -1
|
|
|
|
def __init__(self, locale, widgetPlaceholders, qStringArgs, lineNum) -> None:
|
|
self.locale = locale
|
|
self.widgetPlaceholders = widgetPlaceholders
|
|
self.qStringArgs = qStringArgs
|
|
self.lineNum = lineNum
|
|
|
|
|
|
def isCommentLine(line):
|
|
for char in commentChars:
|
|
if line.startswith(char):
|
|
return True
|
|
return False
|
|
|
|
|
|
def getNonDefaultLocales(dir):
|
|
files = []
|
|
for filename in os.listdir(dir):
|
|
f = os.path.join(dir, filename)
|
|
if os.path.isfile(f) and not f.endswith(defaultLocaleFile):
|
|
files.append(f)
|
|
|
|
return files
|
|
|
|
|
|
def getAllLocaleEntries(file):
|
|
localeEntries = []
|
|
with open(file, "r", encoding="UTF-8") as f:
|
|
for lineNum, line in enumerate(f):
|
|
widgetPlaceholders = []
|
|
qStringArgs = []
|
|
|
|
if isCommentLine(line):
|
|
continue
|
|
|
|
for word in line.split("{{"):
|
|
if not "}}" in word:
|
|
continue
|
|
placeholder = "{{" + word[: word.rfind("}}")] + "}}"
|
|
widgetPlaceholders.append(placeholder)
|
|
|
|
for match in re.finditer(r"%\d+", line):
|
|
qStringArgs.append(match.group(0))
|
|
|
|
localeEntries.append(
|
|
localeEntry(
|
|
line.split("=")[0], widgetPlaceholders, qStringArgs, lineNum + 1
|
|
)
|
|
)
|
|
|
|
return localeEntries
|
|
|
|
|
|
def getLocaleEntryFrom(entry, list):
|
|
for element in list:
|
|
if element.locale == entry.locale:
|
|
return element
|
|
|
|
return None
|
|
|
|
|
|
def checkLocaleEntries(file, expectedLocaleEntries):
|
|
localeEntries = getAllLocaleEntries(file)
|
|
result = True
|
|
|
|
for localeEntry in localeEntries:
|
|
expectedLocaleEntry = getLocaleEntryFrom(localeEntry, expectedLocaleEntries)
|
|
|
|
if expectedLocaleEntry is None:
|
|
result = False
|
|
print(
|
|
'ERROR: Locale entry "{}" from "{}:{}" not found in "{}"'.format(
|
|
localeEntry.locale, file, localeEntry.lineNum, defaultLocaleFile
|
|
)
|
|
)
|
|
continue
|
|
|
|
for placeholder in localeEntry.widgetPlaceholders:
|
|
if placeholder not in expectedLocaleEntry.widgetPlaceholders:
|
|
result = False
|
|
print(
|
|
'ERROR: Locale entry "{}" from "{}:{}" does contain "{}" widget placeholder while "{}:{}" does not'.format(
|
|
localeEntry.locale,
|
|
file,
|
|
localeEntry.lineNum,
|
|
placeholder,
|
|
defaultLocaleFile,
|
|
expectedLocaleEntry.lineNum,
|
|
)
|
|
)
|
|
|
|
for placeholder in expectedLocaleEntry.widgetPlaceholders:
|
|
if placeholder not in localeEntry.widgetPlaceholders:
|
|
result = False
|
|
print(
|
|
'ERROR: Locale entry "{}" from "{}:{}" does not contain "{}" widget placeholder'.format(
|
|
localeEntry.locale, file, localeEntry.lineNum, placeholder
|
|
)
|
|
)
|
|
|
|
for arg in localeEntry.qStringArgs:
|
|
if arg not in expectedLocaleEntry.qStringArgs:
|
|
result = False
|
|
print(
|
|
'ERROR: Locale entry "{}" from "{}:{}" does contain "{}" QString arg while "{}:{}" does not'.format(
|
|
localeEntry.locale,
|
|
file,
|
|
localeEntry.lineNum,
|
|
arg,
|
|
defaultLocaleFile,
|
|
expectedLocaleEntry.lineNum,
|
|
)
|
|
)
|
|
|
|
for arg in expectedLocaleEntry.qStringArgs:
|
|
if arg not in localeEntry.qStringArgs:
|
|
result = False
|
|
print(
|
|
'ERROR: Locale entry "{}" from "{}:{}" does not contain "{}" QString arg'.format(
|
|
localeEntry.locale, file, localeEntry.lineNum, arg
|
|
)
|
|
)
|
|
|
|
return result
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Checks for inconsistencies regarding widget placeholders in the different locale files."
|
|
)
|
|
parser.add_argument("-p", "--path", help="Path to locale folder", required=True)
|
|
args = parser.parse_args()
|
|
|
|
defaultLocaleEntries = getAllLocaleEntries(
|
|
os.path.join(args.path, defaultLocaleFile)
|
|
)
|
|
nonDefaultLocales = getNonDefaultLocales(args.path)
|
|
|
|
result = True
|
|
for file in nonDefaultLocales:
|
|
if checkLocaleEntries(file, defaultLocaleEntries) == False:
|
|
result = False
|
|
|
|
if result == False:
|
|
sys.exit(1)
|
|
|
|
print("SUCCESS: No issues found!")
|
|
sys.exit(0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|