Thread: [Winmerge-svn] SF.net SVN: winmerge:[6828] trunk/Translations/GetTranslationsStatus.py
Windows visual diff and merge for files and directories
Brought to you by:
christianlist,
grimmdp
From: <ge...@us...> - 2009-06-08 19:09:55
|
Revision: 6828 http://winmerge.svn.sourceforge.net/winmerge/?rev=6828&view=rev Author: gerundt Date: 2009-06-08 19:09:53 +0000 (Mon, 08 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python Added Paths: ----------- trunk/Translations/GetTranslationsStatus.py Added: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py (rev 0) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-08 19:09:53 UTC (rev 6828) @@ -0,0 +1,240 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*-; + +# The MIT License +# +# Copyright (c) 2009 Tim Gerundt <ti...@ge...> +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +# $Id$ + +# Python script to get the status of the translations + +import os +import os.path +import string +import re +import time + +class PoStatus1(object): + def __init__(self, filepath): + self.__filepath = filepath + self.__count = 0 + self.__translated = 0 + self.__untranslated = 0 + self.__fuzzy = 0 + self.__porevisiondate = '' + self.__potcreationdate = '' + self.__translators = [] + + if os.access(filepath, os.R_OK): #If PO(T) file can read... + reMsgId = re.compile('^msgid "(.*)"$', re.IGNORECASE) + reMsgStr = re.compile('^msgstr "(.*)"$', re.IGNORECASE) + reMsgContinued = re.compile('^"(.*)"$', re.IGNORECASE) + reTranslator = re.compile('^# \* (.*)$', re.IGNORECASE) + rePoRevisionDate = re.compile('PO-Revision-Date: ([0-9 :\+\-]+)', re.IGNORECASE) + rePotCreationDate = re.compile('POT-Creation-Date: ([0-9 :\+\-]+)', re.IGNORECASE) + + iMsgStarted = 0 + sMsgId = '' + sMsgStr = '' + bIsFuzzy = False + bIsMaintainer = False + + pofile = open(filepath, 'r') + for line in pofile: #For all lines... + line = line.strip() + if line: #If NOT empty line... + if line[0] != '#': #If NOT comment line... + if reMsgId.findall(line): #If "msgid"... + iMsgStarted = 1 + tmp = reMsgId.findall(line) + sMsgId = tmp[0] + elif reMsgStr.findall(line): #If "msgstr"... + iMsgStarted = 2 + tmp = reMsgStr.findall(line) + sMsgStr = tmp[0] + elif reMsgContinued.findall(line): #If "msgid" or "msgstr" continued... + tmp = reMsgContinued.findall(line) + if iMsgStarted == 1: + sMsgId = sMsgId + tmp[0] + elif iMsgStarted == 2: + sMsgStr = sMsgStr + tmp[0] + else: #If comment line... + iMsgStarted = -1 + if line.startswith('#,'): #If "Reference" line... + if line.find('fuzzy') > -1: #If "fuzzy"... + bIsFuzzy = True + elif line.startswith('# Maintainer:'): #If maintainer list starts... + bIsMaintainer = True + elif line.startswith('# Translators:'): #If translators list starts... + bIsMaintainer = False + elif reTranslator.findall(line): #If translator/maintainer... + translator = reTranslator.findall(line) + if re.findall('\<(.*)\>', translator[0]): #If mail address exists... + tmp = re.findall('(.*) \<(.*)\>', translator[0]) + sName = tmp[0][0] + sMail = tmp[0][1] + else: #If mail address NOT exists... + sName = translator[0] + sMail = '' + self.__translators.append(PoTranslator(sName, sMail, bIsMaintainer)) + else: #If empty line... + iMsgStarted = 0 + + if iMsgStarted == 0: #If NOT inside a translation... + if sMsgId != '': + self.__count += 1 + if bIsFuzzy == False: #If NOT a fuzzy translation... + if sMsgStr != '': + self.__translated += 1 + else: + self.__untranslated += 1 + else: #If a fuzzy translation... + self.__fuzzy += 1 + elif sMsgStr != '': + tmp = rePoRevisionDate.findall(sMsgStr) + if tmp: #If "PO-Revision-Date"... + self.__porevisiondate = tmp[0] + tmp = rePotCreationDate.findall(sMsgStr) + if tmp: #If "POT-Creation-Date"... + self.__potcreationdate = tmp[0] + sMsgId = '' + sMsgStr = '' + bIsFuzzy = False + pofile.close() + + @property + def filepath(self): + return self.__filepath + + @property + def filename(self): + return os.path.basename(self.__filepath) + + @property + def filetype(self): + filename = os.path.splitext(self.__filepath) + if str.lower(filename[1]) == '.po': #If a PO file... + return 'PO' + elif str.lower(filename[1]) == '.pot': #If a POT file... + return 'POT' + return None + + @property + def language(self): + return os.path.splitext(self.filename)[0] + + @property + def count(self): + return self.__count + + @property + def translated(self): + return self.__translated + + @property + def untranslated(self): + return self.__untranslated + + @property + def fuzzy(self): + return self.__fuzzy + + @property + def porevisiondate(self): + return self.__porevisiondate + + @property + def potcreationdate(self): + return self.__potcreationdate + + @property + def translators(self): + return self.__translators + +class PoTranslator(object): + def __init__(self, name, mail, ismaintainer): + self.name = name + self.mail = mail + self.ismaintainer = ismaintainer + +def getPoFiles(path): + ''' Get all PO files from a folder ''' + pofiles = [] + for itemname in os.listdir(path): #For all dir items... + fullitempath = os.path.abspath(os.path.join(path, itemname)) + if os.path.isfile(fullitempath): #If a file... + filename = os.path.splitext(itemname) + if str.lower(filename[1]) == '.po': #If a PO file... + pofiles.append(fullitempath) + return pofiles + +def createTranslationsStatusXmlFile(xmlpath, status): + xmlfile = open(xmlpath, 'w') + xmlfile.write('<translations>\n') + xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) + for status1 in status: #... + xmlfile.write(' <translation>\n') + xmlfile.write(' <language>%s</language>\n' % (status1.language)) + xmlfile.write(' <file>%s</file>\n' % (status1.filename)) + if status1.filetype == 'PO': #If a PO file... + xmlfile.write(' <update>%s</update>\n' % (status1.porevisiondate[0:10])) + xmlfile.write(' <strings>\n') + xmlfile.write(' <count>%u</count>\n' % (status1.count)) + xmlfile.write(' <translated>%u</translated>\n' % (status1.translated)) + xmlfile.write(' <fuzzy>%u</fuzzy>\n' % (status1.fuzzy)) + xmlfile.write(' <untranslated>%u</untranslated>\n' % (status1.untranslated)) + xmlfile.write(' </strings>\n') + else: #If a POT file... + xmlfile.write(' <update>%s</update>\n' % (status1.potcreationdate[0:10])) + xmlfile.write(' <strings>\n') + xmlfile.write(' <count>%u</count>\n' % (status1.count)) + xmlfile.write(' <translated>%u</translated>\n' % (status1.count)) + xmlfile.write(' <fuzzy>0</fuzzy>\n') + xmlfile.write(' <untranslated>0</untranslated>\n') + xmlfile.write(' </strings>\n') + if status1.translators: #If translators exists... + xmlfile.write(' <translators>\n') + for translator in status1.translators: #For all translators... + if (translator.ismaintainer): #If maintainer... + xmlfile.write(' <translator maintainer="1">\n') + else: #If NOT maintainer... + xmlfile.write(' <translator>\n') + xmlfile.write(' <name>%s</name>\n' % (translator.name)) + if (translator.mail): #If mail address exists... + xmlfile.write(' <mail>%s</mail>\n' % (translator.mail)) + xmlfile.write(' </translator>\n') + xmlfile.write(' </translators>\n') + xmlfile.write(' </translation>\n') + xmlfile.write('</translations>\n') + xmlfile.close() + +def main(): + po_files = getPoFiles('WinMerge') + po_status = [] + for po_file in po_files: #For all PO files... + po_status.append(PoStatus1(po_file)) + po_status.append(PoStatus1('WinMerge/English.pot')) + createTranslationsStatusXmlFile('TranslationsStatus.xml', po_status) + +# MAIN # +if __name__ == "__main__": + main() \ No newline at end of file Property changes on: trunk/Translations/GetTranslationsStatus.py ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-08 22:03:35
|
Revision: 6830 http://winmerge.svn.sourceforge.net/winmerge/?rev=6830&view=rev Author: gerundt Date: 2009-06-08 22:02:20 +0000 (Mon, 08 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Create status for ShellExtension too Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-08 21:28:00 UTC (rev 6829) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-08 22:02:20 UTC (rev 6830) @@ -33,7 +33,89 @@ import re import time -class PoStatus1(object): +class TranslationsStatus(object): + def __init__(self): + self.__projects = [] + + @property + def projects(self): + return self.__projects + + def clear(self): + self.__projects = [] + + def addProject(self, project): + self.__projects.append(project) + + def addProject(self, name, potfile, podir): + self.__projects.append(TranslationsStatusProject(name, potfile, podir)) + + def writeToXmlFile(self, xmlpath): + xmlfile = open(xmlpath, 'w') + for project in self.__projects: #For all projects... + xmlfile.write('<translations project="%s">\n' % (project.name)) + xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) + for status1 in project.status: #For all ... + xmlfile.write(' <translation>\n') + xmlfile.write(' <language>%s</language>\n' % (status1.language)) + xmlfile.write(' <file>%s</file>\n' % (status1.filename)) + if status1.filetype == 'PO': #If a PO file... + xmlfile.write(' <update>%s</update>\n' % (status1.porevisiondate[0:10])) + xmlfile.write(' <strings>\n') + xmlfile.write(' <count>%u</count>\n' % (status1.count)) + xmlfile.write(' <translated>%u</translated>\n' % (status1.translated)) + xmlfile.write(' <fuzzy>%u</fuzzy>\n' % (status1.fuzzy)) + xmlfile.write(' <untranslated>%u</untranslated>\n' % (status1.untranslated)) + xmlfile.write(' </strings>\n') + else: #If a POT file... + xmlfile.write(' <update>%s</update>\n' % (status1.potcreationdate[0:10])) + xmlfile.write(' <strings>\n') + xmlfile.write(' <count>%u</count>\n' % (status1.count)) + xmlfile.write(' <translated>%u</translated>\n' % (status1.count)) + xmlfile.write(' <fuzzy>0</fuzzy>\n') + xmlfile.write(' <untranslated>0</untranslated>\n') + xmlfile.write(' </strings>\n') + if status1.translators: #If translators exists... + xmlfile.write(' <translators>\n') + for translator in status1.translators: #For all translators... + if (translator.ismaintainer): #If maintainer... + xmlfile.write(' <translator maintainer="1">\n') + else: #If NOT maintainer... + xmlfile.write(' <translator>\n') + xmlfile.write(' <name>%s</name>\n' % (translator.name)) + if (translator.mail): #If mail address exists... + xmlfile.write(' <mail>%s</mail>\n' % (translator.mail)) + xmlfile.write(' </translator>\n') + xmlfile.write(' </translators>\n') + xmlfile.write(' </translation>\n') + xmlfile.write('</translations>\n') + xmlfile.close() + +class TranslationsStatusProject(object): + def __init__(self, name, potfile, podir): + self.__name = name + self.__status = [] + + #PO files... + for itemname in os.listdir(podir): #For all dir items... + fullitempath = os.path.abspath(os.path.join(podir, itemname)) + if os.path.isfile(fullitempath): #If a file... + filename = os.path.splitext(itemname) + if str.lower(filename[1]) == '.po': #If a PO file... + self.__status.append(PoStatus(fullitempath)) + + #POT file... + self.__status.append(PoStatus(os.path.abspath(potfile))) + + @property + def name(self): + return self.__name + + @property + def status(self): + return self.__status + +class PoStatus(object): def __init__(self, filepath): self.__filepath = filepath self.__count = 0 @@ -176,64 +258,11 @@ self.mail = mail self.ismaintainer = ismaintainer -def getPoFiles(path): - ''' Get all PO files from a folder ''' - pofiles = [] - for itemname in os.listdir(path): #For all dir items... - fullitempath = os.path.abspath(os.path.join(path, itemname)) - if os.path.isfile(fullitempath): #If a file... - filename = os.path.splitext(itemname) - if str.lower(filename[1]) == '.po': #If a PO file... - pofiles.append(fullitempath) - return pofiles - -def createTranslationsStatusXmlFile(xmlpath, status): - xmlfile = open(xmlpath, 'w') - xmlfile.write('<translations>\n') - xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) - for status1 in status: #... - xmlfile.write(' <translation>\n') - xmlfile.write(' <language>%s</language>\n' % (status1.language)) - xmlfile.write(' <file>%s</file>\n' % (status1.filename)) - if status1.filetype == 'PO': #If a PO file... - xmlfile.write(' <update>%s</update>\n' % (status1.porevisiondate[0:10])) - xmlfile.write(' <strings>\n') - xmlfile.write(' <count>%u</count>\n' % (status1.count)) - xmlfile.write(' <translated>%u</translated>\n' % (status1.translated)) - xmlfile.write(' <fuzzy>%u</fuzzy>\n' % (status1.fuzzy)) - xmlfile.write(' <untranslated>%u</untranslated>\n' % (status1.untranslated)) - xmlfile.write(' </strings>\n') - else: #If a POT file... - xmlfile.write(' <update>%s</update>\n' % (status1.potcreationdate[0:10])) - xmlfile.write(' <strings>\n') - xmlfile.write(' <count>%u</count>\n' % (status1.count)) - xmlfile.write(' <translated>%u</translated>\n' % (status1.count)) - xmlfile.write(' <fuzzy>0</fuzzy>\n') - xmlfile.write(' <untranslated>0</untranslated>\n') - xmlfile.write(' </strings>\n') - if status1.translators: #If translators exists... - xmlfile.write(' <translators>\n') - for translator in status1.translators: #For all translators... - if (translator.ismaintainer): #If maintainer... - xmlfile.write(' <translator maintainer="1">\n') - else: #If NOT maintainer... - xmlfile.write(' <translator>\n') - xmlfile.write(' <name>%s</name>\n' % (translator.name)) - if (translator.mail): #If mail address exists... - xmlfile.write(' <mail>%s</mail>\n' % (translator.mail)) - xmlfile.write(' </translator>\n') - xmlfile.write(' </translators>\n') - xmlfile.write(' </translation>\n') - xmlfile.write('</translations>\n') - xmlfile.close() - def main(): - po_files = getPoFiles('WinMerge') - po_status = [] - for po_file in po_files: #For all PO files... - po_status.append(PoStatus1(po_file)) - po_status.append(PoStatus1('WinMerge/English.pot')) - createTranslationsStatusXmlFile('TranslationsStatus.xml', po_status) + status = TranslationsStatus() + status.addProject('WinMerge', 'WinMerge/English.pot', 'WinMerge') + status.addProject('ShellExtension', 'ShellExtension/English.pot', 'ShellExtension') + status.writeToXmlFile('TranslationsStatus.xml') # MAIN # if __name__ == "__main__": This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-11 11:51:50
|
Revision: 6837 http://winmerge.svn.sourceforge.net/winmerge/?rev=6837&view=rev Author: gerundt Date: 2009-06-11 11:51:44 +0000 (Thu, 11 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Add <status> level to XML file Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-09 22:01:48 UTC (rev 6836) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-11 11:51:44 UTC (rev 6837) @@ -52,43 +52,45 @@ def writeToXmlFile(self, xmlpath): xmlfile = open(xmlpath, 'w') + xmlfile.write('<status>\n') for project in self.__projects: #For all projects... - xmlfile.write('<translations project="%s">\n' % (project.name)) - xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) + xmlfile.write(' <translations project="%s">\n' % (project.name)) + xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) for status1 in project.status: #For all ... - xmlfile.write(' <translation>\n') - xmlfile.write(' <language>%s</language>\n' % (status1.language)) - xmlfile.write(' <file>%s</file>\n' % (status1.filename)) + xmlfile.write(' <translation>\n') + xmlfile.write(' <language>%s</language>\n' % (status1.language)) + xmlfile.write(' <file>%s</file>\n' % (status1.filename)) if status1.filetype == 'PO': #If a PO file... - xmlfile.write(' <update>%s</update>\n' % (status1.porevisiondate[0:10])) - xmlfile.write(' <strings>\n') - xmlfile.write(' <count>%u</count>\n' % (status1.count)) - xmlfile.write(' <translated>%u</translated>\n' % (status1.translated)) - xmlfile.write(' <fuzzy>%u</fuzzy>\n' % (status1.fuzzy)) - xmlfile.write(' <untranslated>%u</untranslated>\n' % (status1.untranslated)) - xmlfile.write(' </strings>\n') + xmlfile.write(' <update>%s</update>\n' % (status1.porevisiondate[0:10])) + xmlfile.write(' <strings>\n') + xmlfile.write(' <count>%u</count>\n' % (status1.count)) + xmlfile.write(' <translated>%u</translated>\n' % (status1.translated)) + xmlfile.write(' <fuzzy>%u</fuzzy>\n' % (status1.fuzzy)) + xmlfile.write(' <untranslated>%u</untranslated>\n' % (status1.untranslated)) + xmlfile.write(' </strings>\n') else: #If a POT file... - xmlfile.write(' <update>%s</update>\n' % (status1.potcreationdate[0:10])) - xmlfile.write(' <strings>\n') - xmlfile.write(' <count>%u</count>\n' % (status1.count)) - xmlfile.write(' <translated>%u</translated>\n' % (status1.count)) - xmlfile.write(' <fuzzy>0</fuzzy>\n') - xmlfile.write(' <untranslated>0</untranslated>\n') - xmlfile.write(' </strings>\n') + xmlfile.write(' <update>%s</update>\n' % (status1.potcreationdate[0:10])) + xmlfile.write(' <strings>\n') + xmlfile.write(' <count>%u</count>\n' % (status1.count)) + xmlfile.write(' <translated>%u</translated>\n' % (status1.count)) + xmlfile.write(' <fuzzy>0</fuzzy>\n') + xmlfile.write(' <untranslated>0</untranslated>\n') + xmlfile.write(' </strings>\n') if status1.translators: #If translators exists... - xmlfile.write(' <translators>\n') + xmlfile.write(' <translators>\n') for translator in status1.translators: #For all translators... if (translator.ismaintainer): #If maintainer... - xmlfile.write(' <translator maintainer="1">\n') + xmlfile.write(' <translator maintainer="1">\n') else: #If NOT maintainer... - xmlfile.write(' <translator>\n') - xmlfile.write(' <name>%s</name>\n' % (translator.name)) + xmlfile.write(' <translator>\n') + xmlfile.write(' <name>%s</name>\n' % (translator.name)) if (translator.mail): #If mail address exists... - xmlfile.write(' <mail>%s</mail>\n' % (translator.mail)) - xmlfile.write(' </translator>\n') - xmlfile.write(' </translators>\n') - xmlfile.write(' </translation>\n') - xmlfile.write('</translations>\n') + xmlfile.write(' <mail>%s</mail>\n' % (translator.mail)) + xmlfile.write(' </translator>\n') + xmlfile.write(' </translators>\n') + xmlfile.write(' </translation>\n') + xmlfile.write(' </translations>\n') + xmlfile.write('</status>\n') xmlfile.close() class TranslationsStatusProject(object): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-11 13:04:21
|
Revision: 6838 http://winmerge.svn.sourceforge.net/winmerge/?rev=6838&view=rev Author: gerundt Date: 2009-06-11 13:04:16 +0000 (Thu, 11 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Move update date to <status> level Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-11 11:51:44 UTC (rev 6837) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-11 13:04:16 UTC (rev 6838) @@ -53,9 +53,9 @@ def writeToXmlFile(self, xmlpath): xmlfile = open(xmlpath, 'w') xmlfile.write('<status>\n') + xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) for project in self.__projects: #For all projects... xmlfile.write(' <translations project="%s">\n' % (project.name)) - xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) for status1 in project.status: #For all ... xmlfile.write(' <translation>\n') xmlfile.write(' <language>%s</language>\n' % (status1.language)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-14 14:53:14
|
Revision: 6850 http://winmerge.svn.sourceforge.net/winmerge/?rev=6850&view=rev Author: gerundt Date: 2009-06-14 13:39:00 +0000 (Sun, 14 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Write XML head to XML status file Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-14 12:08:30 UTC (rev 6849) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-14 13:39:00 UTC (rev 6850) @@ -52,11 +52,12 @@ def writeToXmlFile(self, xmlpath): xmlfile = open(xmlpath, 'w') + xmlfile.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n') xmlfile.write('<status>\n') xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) for project in self.__projects: #For all projects... xmlfile.write(' <translations project="%s">\n' % (project.name)) - for status1 in project.status: #For all ... + for status1 in project.status: #For all status... xmlfile.write(' <translation>\n') xmlfile.write(' <language>%s</language>\n' % (status1.language)) xmlfile.write(' <file>%s</file>\n' % (status1.filename)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-15 15:21:34
|
Revision: 6852 http://winmerge.svn.sourceforge.net/winmerge/?rev=6852&view=rev Author: gerundt Date: 2009-06-15 15:21:20 +0000 (Mon, 15 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Mark POT file with "template" attribute in XML file Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-14 13:59:11 UTC (rev 6851) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-15 15:21:20 UTC (rev 6852) @@ -58,10 +58,22 @@ for project in self.__projects: #For all projects... xmlfile.write(' <translations project="%s">\n' % (project.name)) for status1 in project.status: #For all status... - xmlfile.write(' <translation>\n') - xmlfile.write(' <language>%s</language>\n' % (status1.language)) - xmlfile.write(' <file>%s</file>\n' % (status1.filename)) - if status1.filetype == 'PO': #If a PO file... + if status1.filetype == 'POT': #If a POT file... + xmlfile.write(' <translation template="1">\n') + xmlfile.write(' <language>%s</language>\n' % (status1.language)) + xmlfile.write(' <file>%s</file>\n' % (status1.filename)) + xmlfile.write(' <update>%s</update>\n' % (status1.potcreationdate[0:10])) + xmlfile.write(' <strings>\n') + xmlfile.write(' <count>%u</count>\n' % (status1.count)) + xmlfile.write(' <translated>%u</translated>\n' % (status1.count)) + xmlfile.write(' <fuzzy>0</fuzzy>\n') + xmlfile.write(' <untranslated>0</untranslated>\n') + xmlfile.write(' </strings>\n') + xmlfile.write(' </translation>\n') + else: #If a PO file... + xmlfile.write(' <translation>\n') + xmlfile.write(' <language>%s</language>\n' % (status1.language)) + xmlfile.write(' <file>%s</file>\n' % (status1.filename)) xmlfile.write(' <update>%s</update>\n' % (status1.porevisiondate[0:10])) xmlfile.write(' <strings>\n') xmlfile.write(' <count>%u</count>\n' % (status1.count)) @@ -69,27 +81,19 @@ xmlfile.write(' <fuzzy>%u</fuzzy>\n' % (status1.fuzzy)) xmlfile.write(' <untranslated>%u</untranslated>\n' % (status1.untranslated)) xmlfile.write(' </strings>\n') - else: #If a POT file... - xmlfile.write(' <update>%s</update>\n' % (status1.potcreationdate[0:10])) - xmlfile.write(' <strings>\n') - xmlfile.write(' <count>%u</count>\n' % (status1.count)) - xmlfile.write(' <translated>%u</translated>\n' % (status1.count)) - xmlfile.write(' <fuzzy>0</fuzzy>\n') - xmlfile.write(' <untranslated>0</untranslated>\n') - xmlfile.write(' </strings>\n') - if status1.translators: #If translators exists... - xmlfile.write(' <translators>\n') - for translator in status1.translators: #For all translators... - if (translator.ismaintainer): #If maintainer... - xmlfile.write(' <translator maintainer="1">\n') - else: #If NOT maintainer... - xmlfile.write(' <translator>\n') - xmlfile.write(' <name>%s</name>\n' % (translator.name)) - if (translator.mail): #If mail address exists... - xmlfile.write(' <mail>%s</mail>\n' % (translator.mail)) - xmlfile.write(' </translator>\n') - xmlfile.write(' </translators>\n') - xmlfile.write(' </translation>\n') + if status1.translators: #If translators exists... + xmlfile.write(' <translators>\n') + for translator in status1.translators: #For all translators... + if (translator.ismaintainer): #If maintainer... + xmlfile.write(' <translator maintainer="1">\n') + else: #If NOT maintainer... + xmlfile.write(' <translator>\n') + xmlfile.write(' <name>%s</name>\n' % (translator.name)) + if (translator.mail): #If mail address exists... + xmlfile.write(' <mail>%s</mail>\n' % (translator.mail)) + xmlfile.write(' </translator>\n') + xmlfile.write(' </translators>\n') + xmlfile.write(' </translation>\n') xmlfile.write(' </translations>\n') xmlfile.write('</status>\n') xmlfile.close() @@ -197,9 +201,11 @@ elif sMsgStr != '': tmp = rePoRevisionDate.findall(sMsgStr) if tmp: #If "PO-Revision-Date"... + #TODO: Convert to date! self.__porevisiondate = tmp[0] tmp = rePotCreationDate.findall(sMsgStr) if tmp: #If "POT-Creation-Date"... + #TODO: Convert to date! self.__potcreationdate = tmp[0] sMsgId = '' sMsgStr = '' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-25 13:07:16
|
Revision: 6863 http://winmerge.svn.sourceforge.net/winmerge/?rev=6863&view=rev Author: gerundt Date: 2009-06-25 12:50:52 +0000 (Thu, 25 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Use base class for project and status Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-25 12:12:14 UTC (rev 6862) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-25 12:50:52 UTC (rev 6863) @@ -95,10 +95,66 @@ xmlfile.write('</status>\n') xmlfile.close() -class PoProject(object): +class IProject(object): + @property + def name(self): + return self._name + + @property + def status(self): + return self._status + +class IStatus(object): + @property + def filepath(self): + return self._filepath + + @property + def filename(self): + return os.path.basename(self._filepath) + + @property + def template(self): + return self._template + + @property + def language(self): + return os.path.splitext(self.filename)[0] + + @property + def count(self): + return self._count + + @property + def translated(self): + return self._translated + + @property + def untranslated(self): + return self._untranslated + + @property + def fuzzy(self): + return self._fuzzy + + @property + def updatedate(self): + return self._updatedate + + @property + def translators(self): + return self._translators + +class Translator(object): + def __init__(self, name, mail, ismaintainer): + self.name = name + self.mail = mail + self.ismaintainer = ismaintainer + +class PoProject(IProject): def __init__(self, name, potfile, podir): - self.__name = name - self.__status = [] + self._name = name + self._status = [] #PO files... for itemname in os.listdir(podir): #For all dir items... @@ -106,30 +162,22 @@ if os.path.isfile(fullitempath): #If a file... filename = os.path.splitext(itemname) if str.lower(filename[1]) == '.po': #If a PO file... - self.__status.append(PoStatus(fullitempath, False)) + self._status.append(PoStatus(fullitempath, False)) #POT file... - self.__status.append(PoStatus(os.path.abspath(potfile), True)) - - @property - def name(self): - return self.__name - - @property - def status(self): - return self.__status + self._status.append(PoStatus(os.path.abspath(potfile), True)) -class PoStatus(object): +class PoStatus(IStatus): def __init__(self, filepath, template): - self.__filepath = filepath - self.__template = template - self.__count = 0 - self.__translated = 0 - self.__untranslated = 0 - self.__fuzzy = 0 - self.__porevisiondate = '' - self.__potcreationdate = '' - self.__translators = [] + self._filepath = filepath + self._template = template + self._count = 0 + self._translated = 0 + self._untranslated = 0 + self._fuzzy = 0 + self._porevisiondate = '' + self._potcreationdate = '' + self._translators = [] if os.access(filepath, os.R_OK): #If PO(T) file can read... reMsgId = re.compile('^msgid "(.*)"$', re.IGNORECASE) @@ -182,83 +230,41 @@ else: #If mail address NOT exists... sName = translator[0] sMail = '' - self.__translators.append(Translator(sName, sMail, bIsMaintainer)) + self._translators.append(Translator(sName, sMail, bIsMaintainer)) else: #If empty line... iMsgStarted = 0 if iMsgStarted == 0: #If NOT inside a translation... if sMsgId != '': - self.__count += 1 + self._count += 1 if bIsFuzzy == False: #If NOT a fuzzy translation... if sMsgStr != '': - self.__translated += 1 + self._translated += 1 else: - self.__untranslated += 1 + self._untranslated += 1 else: #If a fuzzy translation... - self.__fuzzy += 1 + self._fuzzy += 1 elif sMsgStr != '': tmp = rePoRevisionDate.findall(sMsgStr) if tmp: #If "PO-Revision-Date"... #TODO: Convert to date! - self.__porevisiondate = tmp[0] + self._porevisiondate = tmp[0] tmp = rePotCreationDate.findall(sMsgStr) if tmp: #If "POT-Creation-Date"... #TODO: Convert to date! - self.__potcreationdate = tmp[0] + self._potcreationdate = tmp[0] sMsgId = '' sMsgStr = '' bIsFuzzy = False pofile.close() @property - def filepath(self): - return self.__filepath - - @property - def filename(self): - return os.path.basename(self.__filepath) - - @property - def template(self): - return self.__template - - @property - def language(self): - return os.path.splitext(self.filename)[0] - - @property - def count(self): - return self.__count - - @property - def translated(self): - return self.__translated - - @property - def untranslated(self): - return self.__untranslated - - @property - def fuzzy(self): - return self.__fuzzy - - @property def updatedate(self): - if self.__template: #if template... - return self.__potcreationdate + if self._template: #if template... + return self._potcreationdate else: #if NOT template... - return self.__porevisiondate - - @property - def translators(self): - return self.__translators + return self._porevisiondate -class Translator(object): - def __init__(self, name, mail, ismaintainer): - self.name = name - self.mail = mail - self.ismaintainer = ismaintainer - def main(): status = TranslationsStatus() status.addProject(PoProject('WinMerge', 'WinMerge/English.pot', 'WinMerge')) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-25 13:13:06
|
Revision: 6864 http://winmerge.svn.sourceforge.net/winmerge/?rev=6864&view=rev Author: gerundt Date: 2009-06-25 13:13:04 +0000 (Thu, 25 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Add ReadMe project (currently without a status) Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-25 12:50:52 UTC (rev 6863) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-25 13:13:04 UTC (rev 6864) @@ -265,10 +265,46 @@ else: #if NOT template... return self._porevisiondate +class ReadmeProject(IProject): + def __init__(self, name, templatefile, translationsdir): + self._name = name + self._status = [] + + #Translations files... + for itemname in os.listdir(translationsdir): #For all dir items... + fullitempath = os.path.abspath(os.path.join(translationsdir, itemname)) + if os.path.isfile(fullitempath): #If a file... + filename = os.path.splitext(itemname) + if str.lower(filename[1]) == '.txt': #If a TXT file... + self._status.append(ReadmeStatus(fullitempath, False)) + + #Template file... + self._status.append(ReadmeStatus(os.path.abspath(templatefile), True)) + +class ReadmeStatus(IStatus): + def __init__(self, filepath, template): + self._filepath = filepath + self._template = template + self._count = 0 + self._translated = 0 + self._untranslated = 0 + self._fuzzy = 0 + self._updatedate = '' + self._translators = [] + + @property + def language(self): + if self._template: #if template... + return 'English' + else: #if NOT template... + filename = os.path.splitext(self.filename) + return filename[0].replace('ReadMe-', '') + def main(): status = TranslationsStatus() status.addProject(PoProject('WinMerge', 'WinMerge/English.pot', 'WinMerge')) status.addProject(PoProject('ShellExtension', 'ShellExtension/English.pot', 'ShellExtension')) + status.addProject(ReadmeProject('Docs/Readme', 'Docs/Readme.txt', 'Docs/Readme')) status.writeToXmlFile('TranslationsStatus.xml') # MAIN # This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-25 13:25:14
|
Revision: 6862 http://winmerge.svn.sourceforge.net/winmerge/?rev=6862&view=rev Author: gerundt Date: 2009-06-25 12:12:14 +0000 (Thu, 25 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Rename some properties and classes Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-25 12:11:07 UTC (rev 6861) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-25 12:12:14 UTC (rev 6862) @@ -47,9 +47,6 @@ def addProject(self, project): self.__projects.append(project) - def addProject(self, name, potfile, podir): - self.__projects.append(TranslationsStatusProject(name, potfile, podir)) - def writeToXmlFile(self, xmlpath): xmlfile = open(xmlpath, 'w') xmlfile.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n') @@ -58,11 +55,11 @@ for project in self.__projects: #For all projects... xmlfile.write(' <translations project="%s">\n' % (project.name)) for status1 in project.status: #For all status... - if status1.filetype == 'POT': #If a POT file... + if status1.template: #If a template file... xmlfile.write(' <translation template="1">\n') xmlfile.write(' <language>%s</language>\n' % (status1.language)) xmlfile.write(' <file>%s</file>\n' % (status1.filename)) - xmlfile.write(' <update>%s</update>\n' % (status1.potcreationdate[0:10])) + xmlfile.write(' <update>%s</update>\n' % (status1.updatedate[0:10])) xmlfile.write(' <strings>\n') xmlfile.write(' <count>%u</count>\n' % (status1.count)) xmlfile.write(' <translated>%u</translated>\n' % (status1.count)) @@ -70,11 +67,11 @@ xmlfile.write(' <untranslated>0</untranslated>\n') xmlfile.write(' </strings>\n') xmlfile.write(' </translation>\n') - else: #If a PO file... + else: #If NOT a template file... xmlfile.write(' <translation>\n') xmlfile.write(' <language>%s</language>\n' % (status1.language)) xmlfile.write(' <file>%s</file>\n' % (status1.filename)) - xmlfile.write(' <update>%s</update>\n' % (status1.porevisiondate[0:10])) + xmlfile.write(' <update>%s</update>\n' % (status1.updatedate[0:10])) xmlfile.write(' <strings>\n') xmlfile.write(' <count>%u</count>\n' % (status1.count)) xmlfile.write(' <translated>%u</translated>\n' % (status1.translated)) @@ -98,7 +95,7 @@ xmlfile.write('</status>\n') xmlfile.close() -class TranslationsStatusProject(object): +class PoProject(object): def __init__(self, name, potfile, podir): self.__name = name self.__status = [] @@ -109,10 +106,10 @@ if os.path.isfile(fullitempath): #If a file... filename = os.path.splitext(itemname) if str.lower(filename[1]) == '.po': #If a PO file... - self.__status.append(PoStatus(fullitempath)) + self.__status.append(PoStatus(fullitempath, False)) #POT file... - self.__status.append(PoStatus(os.path.abspath(potfile))) + self.__status.append(PoStatus(os.path.abspath(potfile), True)) @property def name(self): @@ -123,8 +120,9 @@ return self.__status class PoStatus(object): - def __init__(self, filepath): + def __init__(self, filepath, template): self.__filepath = filepath + self.__template = template self.__count = 0 self.__translated = 0 self.__untranslated = 0 @@ -184,7 +182,7 @@ else: #If mail address NOT exists... sName = translator[0] sMail = '' - self.__translators.append(PoTranslator(sName, sMail, bIsMaintainer)) + self.__translators.append(Translator(sName, sMail, bIsMaintainer)) else: #If empty line... iMsgStarted = 0 @@ -221,13 +219,8 @@ return os.path.basename(self.__filepath) @property - def filetype(self): - filename = os.path.splitext(self.__filepath) - if str.lower(filename[1]) == '.po': #If a PO file... - return 'PO' - elif str.lower(filename[1]) == '.pot': #If a POT file... - return 'POT' - return None + def template(self): + return self.__template @property def language(self): @@ -250,18 +243,17 @@ return self.__fuzzy @property - def porevisiondate(self): - return self.__porevisiondate + def updatedate(self): + if self.__template: #if template... + return self.__potcreationdate + else: #if NOT template... + return self.__porevisiondate @property - def potcreationdate(self): - return self.__potcreationdate - - @property def translators(self): return self.__translators -class PoTranslator(object): +class Translator(object): def __init__(self, name, mail, ismaintainer): self.name = name self.mail = mail @@ -269,8 +261,8 @@ def main(): status = TranslationsStatus() - status.addProject('WinMerge', 'WinMerge/English.pot', 'WinMerge') - status.addProject('ShellExtension', 'ShellExtension/English.pot', 'ShellExtension') + status.addProject(PoProject('WinMerge', 'WinMerge/English.pot', 'WinMerge')) + status.addProject(PoProject('ShellExtension', 'ShellExtension/English.pot', 'ShellExtension')) status.writeToXmlFile('TranslationsStatus.xml') # MAIN # This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-25 16:35:09
|
Revision: 6866 http://winmerge.svn.sourceforge.net/winmerge/?rev=6866&view=rev Author: gerundt Date: 2009-06-25 16:35:07 +0000 (Thu, 25 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Add InnoSetup project (currently without a status) Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-25 13:24:06 UTC (rev 6865) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-25 16:35:07 UTC (rev 6866) @@ -265,6 +265,42 @@ else: #if NOT template... return self._porevisiondate +class InnoSetupProject(IProject): + def __init__(self, name, templatefile, translationsdir): + self._name = name + self._status = [] + + #Translations files... + for itemname in os.listdir(translationsdir): #For all dir items... + fullitempath = os.path.abspath(os.path.join(translationsdir, itemname)) + if os.path.isfile(fullitempath): #If a file... + filename = os.path.splitext(itemname) + if str.lower(filename[1]) == '.isl': #If a ISL file... + if filename[0] != 'English': #If NOT the English file... + self._status.append(InnoSetupStatus(fullitempath, False)) + + #Template file... + self._status.append(InnoSetupStatus(os.path.abspath(templatefile), True)) + +class InnoSetupStatus(IStatus): + def __init__(self, filepath, template): + self._filepath = filepath + self._template = template + self._count = 0 + self._translated = 0 + self._untranslated = 0 + self._fuzzy = 0 + self._updatedate = '' + self._translators = [] + + @property + def language(self): + if self._template: #if template... + return 'English' + else: #if NOT template... + filename = os.path.splitext(self.filename) + return filename[0].replace('_', '') + class ReadmeProject(IProject): def __init__(self, name, templatefile, translationsdir): self._name = name @@ -304,6 +340,7 @@ status = TranslationsStatus() status.addProject(PoProject('WinMerge', 'WinMerge/English.pot', 'WinMerge')) status.addProject(PoProject('ShellExtension', 'ShellExtension/English.pot', 'ShellExtension')) + status.addProject(InnoSetupProject('InnoSetup', 'InnoSetup/English.isl', 'InnoSetup')) status.addProject(ReadmeProject('Docs/Readme', 'Docs/Readme.txt', 'Docs/Readme')) status.writeToXmlFile('TranslationsStatus.xml') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-06-25 19:56:54
|
Revision: 6869 http://winmerge.svn.sourceforge.net/winmerge/?rev=6869&view=rev Author: gerundt Date: 2009-06-25 19:56:52 +0000 (Thu, 25 Jun 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Add "languages" property to TranslationsStatus and IProject class Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-06-25 17:30:38 UTC (rev 6868) +++ trunk/Translations/GetTranslationsStatus.py 2009-06-25 19:56:52 UTC (rev 6869) @@ -41,6 +41,16 @@ def projects(self): return self.__projects + @property + def languages(self): + temp = [] + for project in self.__projects: #For all projects... + for language in project.languages: #For all languages... + if language not in temp: #If language NOT in list... + temp.append(language) + temp.sort() + return temp + def clear(self): self.__projects = [] @@ -103,6 +113,14 @@ @property def status(self): return self._status + + @property + def languages(self): + temp = [] + for status in self._status: #For all status... + temp.append(status.language) + temp.sort() + return temp class IStatus(object): @property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-07-04 06:36:00
|
Revision: 6893 http://winmerge.svn.sourceforge.net/winmerge/?rev=6893&view=rev Author: gerundt Date: 2009-07-04 06:35:59 +0000 (Sat, 04 Jul 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Add __getitem__ function to Project class and rename some variables Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-07-02 17:30:18 UTC (rev 6892) +++ trunk/Translations/GetTranslationsStatus.py 2009-07-04 06:35:59 UTC (rev 6893) @@ -35,16 +35,16 @@ class TranslationsStatus(object): def __init__(self): - self.__projects = [] + self._projects = [] @property def projects(self): - return self.__projects + return self._projects @property def languages(self): temp = [] - for project in self.__projects: #For all projects... + for project in self._projects: #For all projects... for language in project.languages: #For all languages... if language not in temp: #If language NOT in list... temp.append(language) @@ -52,17 +52,17 @@ return temp def clear(self): - self.__projects = [] + self._projects = [] def addProject(self, project): - self.__projects.append(project) + self._projects.append(project) def writeToXmlFile(self, xmlpath): xmlfile = open(xmlpath, 'w') xmlfile.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n') xmlfile.write('<status>\n') xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) - for project in self.__projects: #For all projects... + for project in self._projects: #For all projects... xmlfile.write(' <translations project="%s">\n' % (project.name)) for status1 in project.status: #For all status... if status1.template: #If a template file... @@ -105,7 +105,13 @@ xmlfile.write('</status>\n') xmlfile.close() -class IProject(object): +class Project(object): + def __getitem__(self, key): + for status in self._status: #For all status... + if status.language == key: + return status + return None + @property def name(self): return self._name @@ -122,7 +128,7 @@ temp.sort() return temp -class IStatus(object): +class Status(object): @property def filepath(self): return self._filepath @@ -169,7 +175,7 @@ self.mail = mail self.ismaintainer = ismaintainer -class PoProject(IProject): +class PoProject(Project): def __init__(self, name, potfile, podir): self._name = name self._status = [] @@ -185,7 +191,7 @@ #POT file... self._status.append(PoStatus(os.path.abspath(potfile), True)) -class PoStatus(IStatus): +class PoStatus(Status): def __init__(self, filepath, template): self._filepath = filepath self._template = template @@ -283,7 +289,7 @@ else: #if NOT template... return self._porevisiondate -class InnoSetupProject(IProject): +class InnoSetupProject(Project): def __init__(self, name, templatefile, translationsdir): self._name = name self._status = [] @@ -300,7 +306,7 @@ #Template file... self._status.append(InnoSetupStatus(os.path.abspath(templatefile), True)) -class InnoSetupStatus(IStatus): +class InnoSetupStatus(Status): def __init__(self, filepath, template): self._filepath = filepath self._template = template @@ -319,7 +325,7 @@ filename = os.path.splitext(self.filename) return filename[0].replace('_', '') -class ReadmeProject(IProject): +class ReadmeProject(Project): def __init__(self, name, templatefile, translationsdir): self._name = name self._status = [] @@ -335,7 +341,7 @@ #Template file... self._status.append(ReadmeStatus(os.path.abspath(templatefile), True)) -class ReadmeStatus(IStatus): +class ReadmeStatus(Status): def __init__(self, filepath, template): self._filepath = filepath self._template = template This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-07-04 06:49:21
|
Revision: 6894 http://winmerge.svn.sourceforge.net/winmerge/?rev=6894&view=rev Author: gerundt Date: 2009-07-04 06:49:10 +0000 (Sat, 04 Jul 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Create HTML status file too Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-07-04 06:35:59 UTC (rev 6893) +++ trunk/Translations/GetTranslationsStatus.py 2009-07-04 06:49:10 UTC (rev 6894) @@ -104,6 +104,126 @@ xmlfile.write(' </translations>\n') xmlfile.write('</status>\n') xmlfile.close() + + def writeToHtmlFile(self, htmlpath): + htmlfile = open(htmlpath, 'w') + + htmlfile.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n') + htmlfile.write(' "http://www.w3.org/TR/html4/loose.dtd">\n') + htmlfile.write('<html>\n') + htmlfile.write('<head>\n') + htmlfile.write(' <title>Translations Status</title>\n') + htmlfile.write(' <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">\n') + htmlfile.write(' <style type="text/css">\n') + htmlfile.write(' <!--\n') + htmlfile.write(' body {\n') + htmlfile.write(' font-family: Verdana,Helvetica,Arial,sans-serif;\n') + htmlfile.write(' font-size: small;\n') + htmlfile.write(' }\n') + htmlfile.write(' code,pre {\n') + htmlfile.write(' font-family: "Courier New",Courier,monospace;\n') + htmlfile.write(' font-size: 1em;\n') + htmlfile.write(' }\n') + htmlfile.write(' .status {\n') + htmlfile.write(' border-collapse: collapse;\n') + htmlfile.write(' border: 1px solid #aaaaaa;\n') + htmlfile.write(' }\n') + htmlfile.write(' .status th {\n') + htmlfile.write(' padding: 3px;\n') + htmlfile.write(' background: #f2f2f2;\n') + htmlfile.write(' border: 1px solid #aaaaaa;\n') + htmlfile.write(' }\n') + htmlfile.write(' .status td {\n') + htmlfile.write(' padding: 3px;\n') + htmlfile.write(' background: #f9f9f9;\n') + htmlfile.write(' border: 1px solid #aaaaaa;\n') + htmlfile.write(' }\n') + htmlfile.write(' .left { text-align: left; }\n') + htmlfile.write(' .center { text-align: center; }\n') + htmlfile.write(' .right { text-align: right; }\n') + htmlfile.write(' -->\n') + htmlfile.write(' </style>\n') + htmlfile.write('</head>\n') + htmlfile.write('<body>\n') + htmlfile.write('<h1>Translations Status</h1>\n') + htmlfile.write('<p>Status from <strong>%s</strong>:</p>\n' % (time.strftime('%Y-%m-%d'))) + for project in self._projects: #For all projects... + htmlfile.write('<h2>%s</h2>\n' % (project.name)) + htmlfile.write('<table class="status">\n') + htmlfile.write(' <tr>\n') + htmlfile.write(' <th class="left">Language</th>\n') + htmlfile.write(' <th class="right">Total</th>\n') + htmlfile.write(' <th class="right">Translated</th>\n') + htmlfile.write(' <th class="right">Fuzzy</th>\n') + htmlfile.write(' <th class="right">Untranslated</th>\n') + htmlfile.write(' <th class="center">Last Update</th>\n') + htmlfile.write(' </tr>\n') + for status1 in project.status: #For all status... + htmlfile.write(' <tr>\n') + htmlfile.write(' <td class="left">%s</td>\n' % (status1.language)) + if status1.template: #If a template file... + if status1.count > 0: #If KNOWN status... + htmlfile.write(' <td class="right">%u</td>\n' % (status1.count)) + htmlfile.write(' <td class="right">%u</td>\n' % (status1.count)) + htmlfile.write(' <td class="right">0</td>\n') + htmlfile.write(' <td class="right">0</td>\n') + else: #If UNKNOWN status... + htmlfile.write(' <td class="right">-</td>\n') + htmlfile.write(' <td class="right">-</td>\n') + htmlfile.write(' <td class="right">-</td>\n') + htmlfile.write(' <td class="right">-</td>\n') + htmlfile.write(' <td class="center">%s</td>\n' % (status1.updatedate[0:10])) + else: #If NOT a template file... + if status1.count > 0: #If KNOWN status... + htmlfile.write(' <td class="right">%u</td>\n' % (status1.count)) + htmlfile.write(' <td class="right">%u</td>\n' % (status1.translated)) + htmlfile.write(' <td class="right">%u</td>\n' % (status1.fuzzy)) + htmlfile.write(' <td class="right">%u</td>\n' % (status1.untranslated)) + else: #If UNKNOWN status... + htmlfile.write(' <td class="right">-</td>\n') + htmlfile.write(' <td class="right">-</td>\n') + htmlfile.write(' <td class="right">-</td>\n') + htmlfile.write(' <td class="right">-</td>\n') + htmlfile.write(' <td class="center">%s</td>\n' % (status1.updatedate[0:10])) + htmlfile.write(' </tr>\n') + htmlfile.write('</table>\n') + + #Translators... + htmlfile.write('<h2>Translators</h2>\n') + htmlfile.write('<table class="status">\n') + htmlfile.write(' <tr>\n') + htmlfile.write(' <th class="left">Language</th>\n') + for project in self._projects: #For all projects... + htmlfile.write(' <th class="left">%s</th>\n' % project.name) + htmlfile.write(' </tr>\n') + for language in self.languages: #For all languages... + htmlfile.write(' <tr>\n') + htmlfile.write(' <td>%s</td>\n' % language) + for project in self._projects: #For all projects... + status1 = project[language] + if status1: + htmlfile.write(' <td>') + if status1.translators: #If translators exists... + for translator in status1.translators: #For all translators... + if (translator.ismaintainer): #If maintainer... + if (translator.mail): #If mail address exists... + htmlfile.write('<strong title="Maintainer"><a href="mailto:%s">%s</a></strong><br>' % (translator.mail, translator.name)) + else: #If NO mail address exists... + htmlfile.write('<strong title="Maintainer">%s</strong><br>' % (translator.name)) + else: #If NOT maintainer... + if (translator.mail): #If mail address exists... + htmlfile.write('<a href="mailto:%s">%s</a><br>' % (translator.mail, translator.name)) + else: #If NO mail address exists... + htmlfile.write('%s<br>' % (translator.name)) + htmlfile.write('</td>\n') + else: + htmlfile.write(' <td></td>\n') + htmlfile.write(' </tr>\n') + htmlfile.write('</table>\n') + + htmlfile.write('</body>\n') + htmlfile.write('</html>\n') + htmlfile.close() class Project(object): def __getitem__(self, key): @@ -367,6 +487,7 @@ status.addProject(InnoSetupProject('InnoSetup', 'InnoSetup/English.isl', 'InnoSetup')) status.addProject(ReadmeProject('Docs/Readme', 'Docs/Readme.txt', 'Docs/Readme')) status.writeToXmlFile('TranslationsStatus.xml') + status.writeToHtmlFile('TranslationsStatus.html') # MAIN # if __name__ == "__main__": This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-07-04 07:40:38
|
Revision: 6896 http://winmerge.svn.sourceforge.net/winmerge/?rev=6896&view=rev Author: gerundt Date: 2009-07-04 07:40:37 +0000 (Sat, 04 Jul 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Add noneTemplateLanguages() property to status and project class Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-07-04 06:54:24 UTC (rev 6895) +++ trunk/Translations/GetTranslationsStatus.py 2009-07-04 07:40:37 UTC (rev 6896) @@ -43,6 +43,7 @@ @property def languages(self): + ''' Return a list with all languages ''' temp = [] for project in self._projects: #For all projects... for language in project.languages: #For all languages... @@ -51,6 +52,17 @@ temp.sort() return temp + @property + def noneTemplateLanguages(self): + ''' Return a list with all NONE template languages ''' + temp = [] + for project in self._projects: #For all projects... + for language in project.noneTemplateLanguages: #For all NONE template languages... + if language not in temp: #If language NOT in list... + temp.append(language) + temp.sort() + return temp + def clear(self): self._projects = [] @@ -196,7 +208,7 @@ for project in self._projects: #For all projects... htmlfile.write(' <th class="left">%s</th>\n' % project.name) htmlfile.write(' </tr>\n') - for language in self.languages: #For all languages... + for language in self.noneTemplateLanguages: #For all NONE template languages... htmlfile.write(' <tr>\n') htmlfile.write(' <td>%s</td>\n' % language) for project in self._projects: #For all projects... @@ -242,11 +254,22 @@ @property def languages(self): + ''' Return a list with all languages ''' temp = [] for status in self._status: #For all status... temp.append(status.language) temp.sort() return temp + + @property + def noneTemplateLanguages(self): + ''' Return a list with all NONE template languages ''' + temp = [] + for status in self._status: #For all status... + if not status.template: #If NOT a template... + temp.append(status.language) + temp.sort() + return temp class Status(object): @property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-09-05 15:09:40
|
Revision: 6986 http://winmerge.svn.sourceforge.net/winmerge/?rev=6986&view=rev Author: gerundt Date: 2009-09-05 15:09:34 +0000 (Sat, 05 Sep 2009) Log Message: ----------- Add "Web" project to translations status Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-09-03 16:38:47 UTC (rev 6985) +++ trunk/Translations/GetTranslationsStatus.py 2009-09-05 15:09:34 UTC (rev 6986) @@ -286,7 +286,10 @@ @property def language(self): - return os.path.splitext(self.filename)[0] + if self._poeditlanguage: #If "X-Poedit-Language"... + return self._poeditlanguage + else: #If NOT "X-Poedit-Language"... + return os.path.splitext(self.filename)[0] @property def count(self): @@ -344,6 +347,7 @@ self._fuzzy = 0 self._porevisiondate = '' self._potcreationdate = '' + self._poeditlanguage = '' self._translators = [] if os.access(filepath, os.R_OK): #If PO(T) file can read... @@ -353,6 +357,7 @@ reTranslator = re.compile('^# \* (.*)$', re.IGNORECASE) rePoRevisionDate = re.compile('PO-Revision-Date: ([0-9 :\+\-]+)', re.IGNORECASE) rePotCreationDate = re.compile('POT-Creation-Date: ([0-9 :\+\-]+)', re.IGNORECASE) + rePoeditLanguage = re.compile('X-Poedit-Language: ([A-Z]+)', re.IGNORECASE) iMsgStarted = 0 sMsgId = '' @@ -420,6 +425,9 @@ if tmp: #If "POT-Creation-Date"... #TODO: Convert to date! self._potcreationdate = tmp[0] + tmp = rePoeditLanguage.findall(sMsgStr) + if tmp: #If "X-Poedit-Language"... + self._poeditlanguage = tmp[0] sMsgId = '' sMsgStr = '' bIsFuzzy = False @@ -509,6 +517,7 @@ status.addProject(PoProject('ShellExtension', 'ShellExtension/English.pot', 'ShellExtension')) status.addProject(InnoSetupProject('InnoSetup', 'InnoSetup/English.isl', 'InnoSetup')) status.addProject(ReadmeProject('Docs/Readme', 'Docs/Readme.txt', 'Docs/Readme')) + status.addProject(PoProject('Web', 'Web/en-US.pot', 'Web')) status.writeToXmlFile('TranslationsStatus.xml') status.writeToHtmlFile('TranslationsStatus.html') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2009-09-21 08:32:32
|
Revision: 6995 http://winmerge.svn.sourceforge.net/winmerge/?rev=6995&view=rev Author: gerundt Date: 2009-09-21 08:32:26 +0000 (Mon, 21 Sep 2009) Log Message: ----------- PATCH: [ 2802270 ] GetTranslationsStatus script in Python - Switch to UTF-8 output Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2009-09-21 08:25:38 UTC (rev 6994) +++ trunk/Translations/GetTranslationsStatus.py 2009-09-21 08:32:26 UTC (rev 6995) @@ -32,6 +32,7 @@ import string import re import time +import codecs class TranslationsStatus(object): def __init__(self): @@ -70,8 +71,8 @@ self._projects.append(project) def writeToXmlFile(self, xmlpath): - xmlfile = open(xmlpath, 'w') - xmlfile.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n') + xmlfile = codecs.open(xmlpath, 'w', 'utf-8') + xmlfile.write('<?xml version="1.0" encoding="UTF-8"?>\n') xmlfile.write('<status>\n') xmlfile.write(' <update>%s</update>\n' % (time.strftime('%Y-%m-%d'))) for project in self._projects: #For all projects... @@ -118,14 +119,14 @@ xmlfile.close() def writeToHtmlFile(self, htmlpath): - htmlfile = open(htmlpath, 'w') + htmlfile = codecs.open(htmlpath, 'w', 'utf-8') htmlfile.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\n') htmlfile.write(' "http://www.w3.org/TR/html4/loose.dtd">\n') htmlfile.write('<html>\n') htmlfile.write('<head>\n') htmlfile.write(' <title>Translations Status</title>\n') - htmlfile.write(' <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">\n') + htmlfile.write(' <meta http-equiv="content-type" content="text/html; charset=UTF-8">\n') htmlfile.write(' <style type="text/css">\n') htmlfile.write(' <!--\n') htmlfile.write(' body {\n') @@ -285,6 +286,10 @@ return self._template @property + def charset(self): + return self._charset + + @property def language(self): if self._poeditlanguage: #If "X-Poedit-Language"... return self._poeditlanguage @@ -341,6 +346,7 @@ def __init__(self, filepath, template): self._filepath = filepath self._template = template + self._charset = self._getCharsetFromPoFile(filepath) self._count = 0 self._translated = 0 self._untranslated = 0 @@ -365,7 +371,8 @@ bIsFuzzy = False bIsMaintainer = False - pofile = open(filepath, 'r') + encoding = self._charset.lower() + pofile = codecs.open(filepath, 'r', encoding) for line in pofile: #For all lines... line = line.strip() if line: #If NOT empty line... @@ -439,6 +446,27 @@ return self._potcreationdate else: #if NOT template... return self._porevisiondate + + def _getCharsetFromPoFile(self, filepath): + charset = '' + if os.access(filepath, os.R_OK): #If PO(T) file can read... + reContentTypeCharset = re.compile('charset=([A-Z0-9\-]+)', re.IGNORECASE) + rePoeditSourceCharset = re.compile('X-Poedit-SourceCharset: ([A-Z0-9\-]+)', re.IGNORECASE) + + pofile = open(filepath, 'r') + for line in pofile: #For all lines... + line = line.strip() + + tmp = reContentTypeCharset.findall(line) + if tmp: #If "Content-Type-Charset"... + charset = tmp[0] + break + tmp = rePoeditSourceCharset.findall(line) + if tmp: #If "X-Poedit-SourceCharset"... + charset = tmp[0] + break + pofile.close() + return charset class InnoSetupProject(Project): def __init__(self, name, templatefile, translationsdir): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2010-04-29 09:07:47
|
Revision: 7146 http://winmerge.svn.sourceforge.net/winmerge/?rev=7146&view=rev Author: gerundt Date: 2010-04-29 09:07:41 +0000 (Thu, 29 Apr 2010) Log Message: ----------- Drop from web files from GetTranslationsStatus.py script Modified Paths: -------------- trunk/Translations/GetTranslationsStatus.py Modified: trunk/Translations/GetTranslationsStatus.py =================================================================== --- trunk/Translations/GetTranslationsStatus.py 2010-04-28 18:02:11 UTC (rev 7145) +++ trunk/Translations/GetTranslationsStatus.py 2010-04-29 09:07:41 UTC (rev 7146) @@ -545,7 +545,6 @@ status.addProject(PoProject('ShellExtension', 'ShellExtension/English.pot', 'ShellExtension')) status.addProject(InnoSetupProject('InnoSetup', 'InnoSetup/English.isl', 'InnoSetup')) status.addProject(ReadmeProject('Docs/Readme', 'Docs/Readme.txt', 'Docs/Readme')) - status.addProject(PoProject('Web', 'Web/en-US.pot', 'Web')) status.writeToXmlFile('TranslationsStatus.xml') status.writeToHtmlFile('TranslationsStatus.html') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |