diff options
author | tobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2010-10-10 22:59:33 +0000 |
---|---|---|
committer | tobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2010-10-10 22:59:33 +0000 |
commit | 35187604cef84864a908972d07361a5bd57e29ca (patch) | |
tree | dc95a8b1abeabd3a466729056ab8d37aaa6e72ea /game/languages/update.py | |
parent | 58c1daf3692d4c5c534750a4fda97e087b0f0cbb (diff) | |
parent | 02bd10f0798829ab69d2028b988cb2a54eae292a (diff) | |
download | usdx-github/svn/1.1.tar.gz usdx-github/svn/1.1.tar.xz usdx-github/svn/1.1.zip |
rename trunk to 1.1svn/1.1github/svn/1.1
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.1@2662 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'game/languages/update.py')
-rwxr-xr-x | game/languages/update.py | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/game/languages/update.py b/game/languages/update.py new file mode 100755 index 00000000..7447b19e --- /dev/null +++ b/game/languages/update.py @@ -0,0 +1,154 @@ +#!/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 as "\n") +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 + # 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 + 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)) + + # 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() + +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"); |