2016-05-04 12:47:34 +00:00
|
|
|
#!/bin/python
|
|
|
|
|
|
|
|
import fnmatch
|
|
|
|
import os
|
2016-05-17 17:29:22 +00:00
|
|
|
import shutil
|
|
|
|
import subprocess
|
2016-05-21 16:57:48 +00:00
|
|
|
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.")
|
|
|
|
|
2016-05-17 17:29:22 +00:00
|
|
|
|
|
|
|
if (not os.path.exists("tools")):
|
|
|
|
os.sys.exit("ERROR: This script should be started from the root of the git repo.")
|
2016-05-04 12:47:34 +00:00
|
|
|
|
2016-05-21 16:57:48 +00:00
|
|
|
|
2016-05-04 12:47:34 +00:00
|
|
|
matches = []
|
|
|
|
for root, dirnames, filenames in os.walk('.'):
|
|
|
|
for filename in fnmatch.filter(filenames, '*.cpp'):
|
2016-05-21 16:32:03 +00:00
|
|
|
if (filename.find("collada") != -1):
|
2016-05-04 12:47:34 +00:00
|
|
|
continue
|
|
|
|
matches.append(os.path.join(root, filename))
|
|
|
|
for filename in fnmatch.filter(filenames, '*.h'):
|
2016-05-21 16:32:03 +00:00
|
|
|
if (filename.find("collada") != -1):
|
2016-05-04 12:47:34 +00:00
|
|
|
continue
|
|
|
|
matches.append(os.path.join(root, filename))
|
2016-05-04 13:31:47 +00:00
|
|
|
|
2016-05-04 12:47:34 +00:00
|
|
|
|
2016-05-21 16:32:03 +00:00
|
|
|
unique_str = []
|
2016-05-21 16:35:21 +00:00
|
|
|
unique_loc = {}
|
2016-05-21 16:32:03 +00:00
|
|
|
main_po = ""
|
2016-05-04 13:31:47 +00:00
|
|
|
|
2016-05-17 17:29:22 +00:00
|
|
|
print("Updating the tools.pot template...")
|
|
|
|
|
2016-05-04 12:47:34 +00:00
|
|
|
for fname in matches:
|
|
|
|
|
2016-05-21 16:32:03 +00:00
|
|
|
f = open(fname, "rb")
|
2016-05-04 12:47:34 +00:00
|
|
|
|
|
|
|
l = f.readline()
|
2016-05-21 16:32:03 +00:00
|
|
|
lc = 1
|
|
|
|
while (l):
|
2016-05-04 13:31:47 +00:00
|
|
|
|
|
|
|
pos = 0
|
2016-05-21 16:32:03 +00:00
|
|
|
while (pos >= 0):
|
|
|
|
pos = l.find('TTR(\"', pos)
|
|
|
|
if (pos == -1):
|
2016-05-04 12:47:34 +00:00
|
|
|
break
|
2016-05-21 16:32:03 +00:00
|
|
|
pos += 5
|
2016-05-04 12:47:34 +00:00
|
|
|
|
2016-05-21 16:32:03 +00:00
|
|
|
msg = ""
|
|
|
|
while (pos < len(l) and (l[pos] != '"' or l[pos - 1] == '\\')):
|
|
|
|
msg += l[pos]
|
|
|
|
pos += 1
|
2016-05-04 13:31:47 +00:00
|
|
|
|
2016-05-21 16:57:48 +00:00
|
|
|
location = os.path.relpath(fname).replace('\\','/')
|
|
|
|
if (line_nb):
|
|
|
|
location += ":" + str(lc)
|
2016-05-21 16:35:21 +00:00
|
|
|
|
2016-05-04 12:47:34 +00:00
|
|
|
if (not msg in unique_str):
|
2016-05-21 16:35:21 +00:00
|
|
|
main_po += "\n#: " + location + "\n"
|
2016-05-21 16:32:03 +00:00
|
|
|
main_po += 'msgid "' + msg + '"\n'
|
|
|
|
main_po += 'msgstr ""\n'
|
2016-05-04 12:47:34 +00:00
|
|
|
unique_str.append(msg)
|
2016-05-21 16:35:21 +00:00
|
|
|
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)
|
|
|
|
main_po = main_po[:msg_pos] + ' ' + location + main_po[msg_pos:]
|
|
|
|
unique_loc[msg].append(location)
|
2016-05-04 12:47:34 +00:00
|
|
|
|
|
|
|
l = f.readline()
|
2016-05-21 16:32:03 +00:00
|
|
|
lc += 1
|
2016-05-04 12:47:34 +00:00
|
|
|
|
|
|
|
f.close()
|
|
|
|
|
|
|
|
|
2016-05-21 16:32:03 +00:00
|
|
|
f = open("tools.pot", "wb")
|
2016-05-04 12:47:34 +00:00
|
|
|
f.write(main_po)
|
|
|
|
f.close()
|
2016-05-17 17:29:22 +00:00
|
|
|
|
|
|
|
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"):
|
2016-05-21 16:32:03 +00:00
|
|
|
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)
|
2016-05-17 17:29:22 +00:00
|
|
|
print("Template changes compared to the staged status:")
|
|
|
|
print(" Additions: %s msgids.\n Deletions: %s msgids." % (int(added), int(removed)))
|