1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21  """Perform quality checks on Gettext PO, XLIFF and TMX localization files 
 22   
 23  Snippet files whenever a test fails.  These can be examined, corrected and  
 24  merged back into the originals using pomerge 
 25   
 26  See: http://translate.sourceforge.net/wiki/toolkit/pofilter for examples and 
 27  usage instructions and http://translate.sourceforge.net/wiki/toolkit/pofilter_tests 
 28  for full descriptions of all tests 
 29  """ 
 30   
 31  from translate.storage import factory 
 32  from translate.filters import checks 
 33  from translate.filters import autocorrect 
 34  from translate.misc import optrecurse 
 35  import os 
 36   
 38 -    def __init__(self, options, checkerclasses=None, checkerconfig=None): 
  50   
 52          """lists the docs for filters available on checker...""" 
 53          filterdict = self.checker.getfilters() 
 54          filterdocs = ["%s\t%s" % (name, filterfunc.__doc__) for (name, filterfunc) in filterdict.iteritems()] 
 55          filterdocs.sort() 
 56          return "\n".join(filterdocs) 
  57   
 74   
 76          """Runs filters on a translation store object. 
 77          Parameters: 
 78              - transfile. A translation store object. 
 79          Return value: 
 80              - A new translation store object with the results of the filter included.""" 
 81          newtransfile = type(transfile)() 
 82          for unit in transfile.units: 
 83              filterresult = self.filterunit(unit) 
 84              if filterresult: 
 85                  if filterresult != autocorrect: 
 86                      for filtername, filtermessage in filterresult.iteritems(): 
 87                          unit.adderror(filtername, filtermessage) 
 88                          if isinstance(filtermessage, checks.SeriousFilterFailure): 
 89                              unit.markfuzzy() 
 90                  newtransfile.addunit(unit) 
 91          if self.options.includeheader and newtransfile.units > 0: 
 92              newtransfile.units.insert(0, newtransfile.makeheader()) 
 93              newtransfile.changeencoding("UTF-8") 
 94          return newtransfile 
  97      """a specialized Option Parser for filter tools...""" 
 99          """construct the specialized Option Parser""" 
100          optrecurse.RecursiveOptionParser.__init__(self, formats) 
101          self.set_usage() 
102          self.add_option("-l", "--listfilters", action="callback", dest='listfilters', 
103              default=False, callback_kwargs={'dest_value': True}, 
104              callback=self.parse_noinput, help="list filters available") 
 105   
110   
 146   
147 -def runfilter(inputfile, outputfile, templatefile, checkfilter=None): 
 148      """reads in inputfile, filters using checkfilter, writes to outputfile""" 
149      fromfile = factory.getobject(inputfile) 
150      tofile = checkfilter.filterfile(fromfile) 
151      if tofile.isempty(): 
152          return 0 
153      outputfile.write(str(tofile)) 
154      return 1 
 155   
157      formats = {"po":("po", runfilter), "pot":("pot", runfilter),  
158              "xliff":("xliff", runfilter), "xlf":("xlf", runfilter),  
159              "tmx":("tmx", runfilter), 
160              None:("po", runfilter)} 
161   
162      parser = FilterOptionParser(formats) 
163      parser.add_option("", "--review", dest="includereview", 
164          action="store_true", default=True, 
165          help="include units marked for review (default)") 
166      parser.add_option("", "--noreview", dest="includereview", 
167          action="store_false", default=True, 
168          help="exclude units marked for review") 
169      parser.add_option("", "--fuzzy", dest="includefuzzy", 
170          action="store_true", default=True, 
171          help="include units marked fuzzy (default)") 
172      parser.add_option("", "--nofuzzy", dest="includefuzzy", 
173          action="store_false", default=True, 
174          help="exclude units marked fuzzy") 
175      parser.add_option("", "--header", dest="includeheader", 
176          action="store_true", default=False, 
177          help="include a PO header in the output") 
178      parser.add_option("", "--autocorrect", dest="autocorrect", 
179          action="store_true", default=False, 
180          help="output automatic corrections where possible rather than describing issues") 
181      parser.add_option("", "--language", dest="targetlanguage", default=None, 
182          help="set target language code (e.g. af-ZA) [required for spell check and recommended in general]", metavar="LANG") 
183      parser.add_option("", "--openoffice", dest="filterclass", 
184          action="store_const", default=None, const=checks.OpenOfficeChecker, 
185          help="use the standard checks for OpenOffice translations") 
186      parser.add_option("", "--mozilla", dest="filterclass", 
187          action="store_const", default=None, const=checks.MozillaChecker, 
188          help="use the standard checks for Mozilla translations") 
189      parser.add_option("", "--gnome", dest="filterclass", 
190          action="store_const", default=None, const=checks.GnomeChecker, 
191          help="use the standard checks for Gnome translations") 
192      parser.add_option("", "--kde", dest="filterclass", 
193          action="store_const", default=None, const=checks.KdeChecker, 
194          help="use the standard checks for KDE translations") 
195      parser.add_option("", "--wx", dest="filterclass", 
196          action="store_const", default=None, const=checks.KdeChecker, 
197          help="use the standard checks for wxWidgets translations") 
198      parser.add_option("", "--excludefilter", dest="excludefilters", 
199          action="append", default=[], type="string", metavar="FILTER", 
200          help="don't use FILTER when filtering") 
201      parser.add_option("-t", "--test", dest="limitfilters", 
202          action="append", default=None, type="string", metavar="FILTER", 
203          help="only use test FILTERs specified with this option when filtering") 
204      parser.add_option("", "--notranslatefile", dest="notranslatefile", 
205          default=None, type="string", metavar="FILE", 
206          help="read list of untranslatable words from FILE (must not be translated)") 
207      parser.add_option("", "--musttranslatefile", dest="musttranslatefile", 
208          default=None, type="string", metavar="FILE", 
209          help="read list of translatable words from FILE (must be translated)") 
210      parser.add_option("", "--validcharsfile", dest="validcharsfile", 
211          default=None, type="string", metavar="FILE", 
212          help="read list of all valid characters from FILE (must be in UTF-8)") 
213      parser.passthrough.append('checkfilter') 
214      parser.description = __doc__ 
215      return parser 
 216   
218      parser = cmdlineparser() 
219      parser.run() 
 220   
221  if __name__ == '__main__': 
222      main() 
223