48a7216f99
Also switched the wrapping length to 79 chars instead of 80, which seems to be what Weblate uses by default (as well as Poedit).
121 lines
3.1 KiB
Python
Executable File
121 lines
3.1 KiB
Python
Executable File
#!/bin/python
|
|
|
|
import fnmatch
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
line_nb = False
|
|
|
|
for arg in sys.argv[1:]:
|
|
if (arg == "--with-line-nb"):
|
|
print("Enabling line numbers in the context locations.")
|
|
line_nb = True
|
|
else:
|
|
os.sys.exit("Non supported argument '" + arg + "'. Aborting.")
|
|
|
|
|
|
if (not os.path.exists("tools")):
|
|
os.sys.exit("ERROR: This script should be started from the root of the git repo.")
|
|
|
|
|
|
matches = []
|
|
for root, dirnames, filenames in os.walk('.'):
|
|
for filename in fnmatch.filter(filenames, '*.cpp'):
|
|
if (filename.find("collada") != -1):
|
|
continue
|
|
matches.append(os.path.join(root, filename))
|
|
for filename in fnmatch.filter(filenames, '*.h'):
|
|
if (filename.find("collada") != -1):
|
|
continue
|
|
matches.append(os.path.join(root, filename))
|
|
matches.sort()
|
|
|
|
|
|
unique_str = []
|
|
unique_loc = {}
|
|
main_po = """
|
|
# LANGUAGE translation of the Godot Engine editor
|
|
# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
|
|
# This file is distributed under the same license as the Godot source code.
|
|
#
|
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
#
|
|
#, fuzzy
|
|
msgid ""
|
|
msgstr ""
|
|
"Project-Id-Version: Godot Engine editor\\n"
|
|
"Content-Type: text/plain; charset=UTF-8\\n"
|
|
"Content-Transfer-Encoding: 8-bit\\n"
|
|
"""
|
|
|
|
print("Updating the tools.pot template...")
|
|
|
|
for fname in matches:
|
|
|
|
f = open(fname, "rb")
|
|
|
|
l = f.readline()
|
|
lc = 1
|
|
while (l):
|
|
|
|
patterns = ['RTR(\"', 'TTR(\"']
|
|
idx = 0
|
|
pos = 0
|
|
while (pos >= 0):
|
|
pos = l.find(patterns[idx], pos)
|
|
if (pos == -1):
|
|
if (idx < len(patterns) - 1):
|
|
idx += 1
|
|
pos = 0
|
|
continue
|
|
pos += 5
|
|
|
|
msg = ""
|
|
while (pos < len(l) and (l[pos] != '"' or l[pos - 1] == '\\')):
|
|
msg += l[pos]
|
|
pos += 1
|
|
|
|
location = os.path.relpath(fname).replace('\\','/')
|
|
if (line_nb):
|
|
location += ":" + str(lc)
|
|
|
|
if (not msg in unique_str):
|
|
main_po += "\n#: " + location + "\n"
|
|
main_po += 'msgid "' + msg + '"\n'
|
|
main_po += 'msgstr ""\n'
|
|
unique_str.append(msg)
|
|
unique_loc[msg] = [location]
|
|
elif (not location in unique_loc[msg]):
|
|
# Add additional location to previous occurence too
|
|
msg_pos = main_po.find('\nmsgid "' + msg + '"')
|
|
if (msg_pos == -1):
|
|
print("Someone apparently thought writing Python was as easy as GDScript. Ping Akien.")
|
|
main_po = main_po[:msg_pos] + ' ' + location + main_po[msg_pos:]
|
|
unique_loc[msg].append(location)
|
|
|
|
l = f.readline()
|
|
lc += 1
|
|
|
|
f.close()
|
|
|
|
|
|
f = open("tools.pot", "wb")
|
|
f.write(main_po)
|
|
f.close()
|
|
|
|
if (os.name == "posix"):
|
|
os.system("msgmerge -w79 tools.pot tools.pot > tools.pot.wrap")
|
|
shutil.move("tools.pot.wrap", "tools.pot")
|
|
|
|
shutil.move("tools.pot", "tools/translations/tools.pot")
|
|
|
|
# TODO: Make that in a portable way, if we care; if not, kudos to Unix users
|
|
if (os.name == "posix"):
|
|
added = subprocess.check_output("git diff tools/translations/tools.pot | grep \+msgid | wc -l", shell = True)
|
|
removed = subprocess.check_output("git diff tools/translations/tools.pot | grep \\\-msgid | wc -l", shell = True)
|
|
print("\n# Template changes compared to the staged status:")
|
|
print("# Additions: %s msgids.\n# Deletions: %s msgids." % (int(added), int(removed)))
|