From dd14b72010952a8fe48ba358f17d089c2d40c076 Mon Sep 17 00:00:00 2001 From: tobigun Date: Wed, 9 Jun 2010 11:02:33 +0000 Subject: language file update git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2462 b956fd51-792f-4845-bead-9b4dfca2ff2c --- game/languages/update.py | 130 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 game/languages/update.py (limited to 'game/languages/update.py') diff --git a/game/languages/update.py b/game/languages/update.py new file mode 100644 index 00000000..b148709e --- /dev/null +++ b/game/languages/update.py @@ -0,0 +1,130 @@ +#!/usr/bin/python + +# UltraStar Deluxe - Karaoke Game +# +# UltraStar Deluxe is the legal property of its developers, whose names +# are too numerous to list here. Please refer to the COPYRIGHT +# file distributed with this source distribution. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +import re +import sys +import os +import codecs + +# buffer english file (always open binary, handle newline uniformly) +f = open("English.ini", "rbU") +english = [] +for line in f: + english.append(line.rstrip("\n")) +f.close + +transPattern = re.compile("\s*(\w+)\s*=(.+)$") + +def update(lang): + print "\nUpdate " + lang + + # buffer translation file (always open binary, handle newline uniformly) + f = open(lang, "rbU") + translation = [] + for line in f: + translation.append(line.rstrip("\n")) + f.close + + outList = [] + # find new fields + for line in english: + # header + if re.search("\[Text\]", line, re.I): + outList.append(codecs.BOM_UTF8 + "[Text]") + continue + # ignore comments + elif re.match("\s*[;#]", line): + continue + # copy empty lines + elif re.match("\s*$", line): + outList.append("") + continue + m = transPattern.match(line) + if (not m): + print "Invalid line: " + line + sys.exit(1) + untranslated = True + for transline in translation: + m2 = re.match("\s*" + m.group(1) + "\s*=(.+)$", transline) + if (m2): + outList.append(m.group(1) + "=" + m2.group(1)) + untranslated = False + break + if (untranslated): + print (" +" + m.group(1)) + outList.append(";TODO: " + line) + + # find unsupported (not in English.ini) translations + for line in translation: + # ignore header + if re.search("\[Text\]", line, re.I): + continue + # ignore TODOs + if re.match(";TODO:", line): + continue + # copy comments + elif re.match("\s*[;#]", line): + outList.append(line) + continue + # ignore empty line + elif re.match("\s*$", line): + continue + m = transPattern.match(line) + if (not m): + print (" -" + line) + outList.append(";INVALID: " + line) + continue + # check if field is in English.ini + unsupported = True + for orig in english: + m2 = re.match("\s*" + m.group(1) + "\s*=(.+)$", orig) + # ignore translated lines (already written in first pass) + if (m2): + unsupported = False + break + # unsupported translation + if (unsupported): + print (" -" + m.group(1)) + outList.append(";UNUSED: " + m.group(1) + "=" + m.group(2)) + + oldLang = lang + ".old" + if (os.path.exists(oldLang)): + os.remove(oldLang) + os.rename(lang, oldLang) + + f = open(lang, 'wb') + for line in outList: + f.write(line + "\n") + f.close() + +# update ini-files +iniList=os.listdir(".") +for ini in iniList: + if not re.search(".ini$", ini): + continue + if ini == "English.ini": + continue + update(ini); + +# update template (do not use an .ini prefix as USDX would load it) +update("Language.new"); -- cgit v1.2.3 From a8da17dc72c72a127eda49ae671451865d28c81e Mon Sep 17 00:00:00 2001 From: tobigun Date: Fri, 11 Jun 2010 10:34:09 +0000 Subject: set svn props correctly git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2486 b956fd51-792f-4845-bead-9b4dfca2ff2c --- game/languages/update.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 game/languages/update.py (limited to 'game/languages/update.py') diff --git a/game/languages/update.py b/game/languages/update.py old mode 100644 new mode 100755 -- cgit v1.2.3 From db2717fbfffdac565e4dc4712d37bc76df5a4b4e Mon Sep 17 00:00:00 2001 From: tobigun Date: Fri, 11 Jun 2010 21:49:37 +0000 Subject: - fix execution on windows - use native line endings for file writing git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2491 b956fd51-792f-4845-bead-9b4dfca2ff2c --- game/languages/update.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'game/languages/update.py') diff --git a/game/languages/update.py b/game/languages/update.py index b148709e..f488b9d9 100755 --- a/game/languages/update.py +++ b/game/languages/update.py @@ -26,7 +26,7 @@ import sys import os import codecs -# buffer english file (always open binary, handle newline uniformly) +# buffer english file (always open binary, handle newline uniformly as "\n") f = open("English.ini", "rbU") english = [] for line in f: @@ -44,6 +44,10 @@ def update(lang): for line in f: translation.append(line.rstrip("\n")) f.close + # WORKAROUND: On windows the file does not seem to be closed by f.close + # as long as it is still referenced. Hence os.rename(lang, oldLang) will + # fail later as the file is still opened for reading. + f = None; outList = [] # find new fields @@ -114,7 +118,9 @@ def update(lang): f = open(lang, 'wb') for line in outList: - f.write(line + "\n") + # binary mode does not convert "\n" to the os specific line-ending. + # Use os.linesep instead. + f.write(line + os.linesep) f.close() # update ini-files -- cgit v1.2.3 From b623e6de7f51f81d9a1b892d47323346d7ea56b1 Mon Sep 17 00:00:00 2001 From: tobigun Date: Fri, 11 Jun 2010 22:46:31 +0000 Subject: handles a filename as command-line parameter to update a single files only git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2495 b956fd51-792f-4845-bead-9b4dfca2ff2c --- game/languages/update.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'game/languages/update.py') diff --git a/game/languages/update.py b/game/languages/update.py index f488b9d9..74b4b774 100755 --- a/game/languages/update.py +++ b/game/languages/update.py @@ -123,14 +123,18 @@ def update(lang): f.write(line + os.linesep) f.close() -# update ini-files -iniList=os.listdir(".") -for ini in iniList: - if not re.search(".ini$", ini): - continue - if ini == "English.ini": - continue - update(ini); +if len(sys.argv) >= 2: + # update specific language file passed as command-line argument + update(sys.argv[1]) +else: + # update all language (ini) files + iniList=os.listdir(".") + for ini in iniList: + if not re.search(".ini$", ini): + continue + if ini == "English.ini": + continue + update(ini); -# update template (do not use an .ini prefix as USDX would load it) -update("Language.new"); + # update template (do not use an .ini prefix as USDX would load it) + update("Language.new"); -- cgit v1.2.3 From 6616879d158b4347a6b951421701d8a042ed089a Mon Sep 17 00:00:00 2001 From: tobigun Date: Fri, 18 Jun 2010 04:37:08 +0000 Subject: - backup file extension changed from .old to .bak - backup files are only created for files that changed git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2546 b956fd51-792f-4845-bead-9b4dfca2ff2c --- game/languages/update.py | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'game/languages/update.py') diff --git a/game/languages/update.py b/game/languages/update.py index 74b4b774..7447b19e 100755 --- a/game/languages/update.py +++ b/game/languages/update.py @@ -111,17 +111,31 @@ def update(lang): print (" -" + m.group(1)) outList.append(";UNUSED: " + m.group(1) + "=" + m.group(2)) - oldLang = lang + ".old" - if (os.path.exists(oldLang)): - os.remove(oldLang) - os.rename(lang, oldLang) + # check if file changed + changed = False + if (len(outList) != len(translation)): + changed = True + else: + # search for a changed line + for i in range(len(outList)): + if (outList[i] != translation[i]): + changed = True + break + + # write changes + if changed: + # create a backup first + oldLang = lang + ".bak" + if (os.path.exists(oldLang)): + os.remove(oldLang) + os.rename(lang, oldLang) - f = open(lang, 'wb') - for line in outList: - # binary mode does not convert "\n" to the os specific line-ending. - # Use os.linesep instead. - f.write(line + os.linesep) - f.close() + f = open(lang, 'wb') + for line in outList: + # binary mode does not convert "\n" to the os specific line-ending. + # Use os.linesep instead. + f.write(line + os.linesep) + f.close() if len(sys.argv) >= 2: # update specific language file passed as command-line argument -- cgit v1.2.3