Package translate :: Package convert :: Module mozfunny2prop

[hide private]
[frames] | no frames]

# Source Code for Module translate.convert.mozfunny2prop

      1  #!/usr/bin/env python
      2  # -*- coding: utf-8 -*-
      3  #
      4  # Copyright 2005, 2006 Zuza Software Foundation
      5  #
      6  # This file is part of translate.
      7  #
      8  # translate is free software; you can redistribute it and/or modify
      9  # it under the terms of the GNU General Public License as published by
     10  # the Free Software Foundation; either version 2 of the License, or
     11  # (at your option) any later version.
     12  #
     13  # translate is distributed in the hope that it will be useful,
     14  # but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16  # GNU General Public License for more details.
     17  #
     18  # You should have received a copy of the GNU General Public License
     19  # along with translate; if not, write to the Free Software
     20  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     21
     22  """converts funny mozilla files to properties files"""
     23
     24  import string
     25  from translate.convert import prop2po
     26  from translate.misc.wStringIO import StringIO
     27
     28 -def inc2prop(lines):
     29      """convert a .inc file with #defines in it to a properties file"""
     30      yield "# converted from #defines file\n"
     31      for line in lines:
     32          line = line.decode("utf-8")
     33          if line.startswith("# "):
     34              commented = True
     35              line = line.replace("# ", "", 1)
     36          else:
     37              commented = False
     38          if not line.strip():
     39              yield line
     40          elif line.startswith("#define"):
     41              parts = string.split(line.replace("#define", "", 1).strip(), maxsplit=1)
     42              if not parts:
     43                  continue
     44              if len(parts) == 1:
     45                  key, value = parts[0], ""
     46              else:
     47                  key, value = parts
     48              # special case: uncomment MOZ_LANGPACK_CONTRIBUTORS
     49              if key == "MOZ_LANGPACK_CONTRIBUTORS":
     50                  commented = False
     51              if commented:
     52                  yield "# "
     53              yield "%s = %s\n" % (key, value)
     54          else:
     55              if commented:
     56                  yield "# "
     57              yield line
     58
     59 -def it2prop(lines, encoding="cp1252"):
     60      """convert a pseudo-properties .it file to a conventional properties file"""
     61      yield "# converted from pseudo-properties .it file\n"
     62      # differences: ; instead of # for comments
     63      #              [section] titles that we replace with # section: comments
     64      for line in lines:
     65          line = line.decode(encoding)
     66          if not line.strip():
     67              yield line
     68          elif line.lstrip().startswith(";"):
     69              yield line.replace(";", "#", 1)
     70          elif line.lstrip().startswith("[") and line.rstrip().endswith("]"):
     71              yield "# section: "+line
     72          else:
     73              yield line
     74
     75 -def funny2prop(lines, itencoding="cp1252"):
     76      hashstarts = len([line for line in lines if line.startswith("#")])
     77      if hashstarts:
     78          for line in inc2prop(lines):
     79              yield line
     80      else:
     81          for line in it2prop(lines, encoding=itencoding):
     82              yield line
     83
     84 -def inc2po(inputfile, outputfile, templatefile, encoding=None, pot=False, duplicatestyle="msgctxt"):
     85      """wraps prop2po but converts input/template files to properties first"""
     86      inputlines = inputfile.readlines()
     87      inputproplines = [line for line in inc2prop(inputlines)]
     88      inputpropfile = StringIO("".join(inputproplines))
     89      if templatefile is not None:
     90          templatelines = templatefile.readlines()
     91          templateproplines = [line for line in inc2prop(templatelines)]
     92          templatepropfile = StringIO("".join(templateproplines))
     93      else:
     94          templatepropfile = None
     95      return prop2po.convertprop(inputpropfile, outputfile, templatepropfile, personality="mozilla", pot=pot, duplicatestyle=duplicatestyle)
     96
     97 -def it2po(inputfile, outputfile, templatefile, encoding="cp1252", pot=False, duplicatestyle="msgctxt"):
     98      """wraps prop2po but converts input/template files to properties first"""
     99      inputlines = inputfile.readlines()
    100      inputproplines = [line for line in it2prop(inputlines, encoding=encoding)]
    101      inputpropfile = StringIO("".join(inputproplines))
    102      if templatefile is not None:
    103          templatelines = templatefile.readlines()
    104          templateproplines = [line for line in it2prop(templatelines, encoding=encoding)]
    105          templatepropfile = StringIO("".join(templateproplines))
    106      else:
    107          templatepropfile = None
    108      return prop2po.convertprop(inputpropfile, outputfile, templatepropfile, personality="mozilla", pot=pot, duplicatestyle=duplicatestyle)
    109
    110 -def ini2po(inputfile, outputfile, templatefile, encoding="UTF-8", pot=False, duplicatestyle="msgctxt"):
    111      return it2po(inputfile=inputfile, outputfile=outputfile, templatefile=templatefile, encoding=encoding, pot=pot, duplicatestyle=duplicatestyle)
    112
    113 -def main(argv=None):
    114      import sys
    115      lines = sys.stdin.readlines()
    116      for line in funny2prop(lines):
    117          sys.stdout.write(line)
    118
    119  if __name__ == "__main__":
    120      main()
    121