summaryrefslogtreecommitdiff
path: root/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/msgfmt.py
diff options
context:
space:
mode:
Diffstat (limited to 'webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/msgfmt.py')
-rwxr-xr-xwebapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/msgfmt.py273
1 files changed, 273 insertions, 0 deletions
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/msgfmt.py b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/msgfmt.py
new file mode 100755
index 0000000000..2503357c84
--- /dev/null
+++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/tool/modules/msgfmt.py
@@ -0,0 +1,273 @@
+#!/usr/bin/env python
+################################################################################
+#
+# qooxdoo - the new era of web development
+#
+# http://qooxdoo.org
+#
+# Copyright:
+# 2006-2007 1&1 Internet AG, Germany, http://www.1and1.org
+#
+# License:
+# LGPL: http://www.gnu.org/licenses/lgpl.html
+# EPL: http://www.eclipse.org/org/documents/epl-v10.php
+# See the LICENSE file in the project's top-level directory for details.
+#
+# Authors:
+# * Fabian Jakobs (fjakobs)
+#
+################################################################################
+
+# -*- coding: iso-8859-1 -*-
+# Written by Martin v. Lwis <loewis@informatik.hu-berlin.de>
+# Plural forms support added by alexander smishlajev <alex@tycobka.lv>
+
+"""
+Generate qooxdoo message catalog from textual translation description.
+
+This program converts a textual Uniforum-style message catalog (.po file) into
+a qooxdoo JavaScript catalog (.js file). This is essentially the same function as the
+GNU msgfmt program, however, it is a simpler implementation.
+
+Usage: msgfmt.py [OPTIONS] filename.po
+
+Options:
+ -d directory
+ --output-directory=directory
+ Specify the output directory to write to. If omitted, output will the current directory
+
+ -n namespace
+ --namespace=namespace
+ JavaScript target namespace
+
+ -h
+ --help
+ Print this message and exit.
+
+ -V
+ --version
+ Display version information and exit.
+"""
+
+import sys
+import os
+import getopt
+import struct
+import array
+
+__version__ = "1.1"
+
+MESSAGES = {}
+
+
+def usage (ecode, msg=''):
+ """
+ Print usage and msg and exit with given code.
+ """
+ print >> sys.stderr, __doc__
+ if msg:
+ print >> sys.stderr, msg
+ sys.exit(ecode)
+
+
+def add (msgid, transtr, fuzzy):
+ """
+ Add a non-fuzzy translation to the dictionary.
+ """
+ global MESSAGES
+ if not fuzzy and transtr and not transtr.startswith('\0'):
+ MESSAGES[msgid] = transtr
+
+
+def escapeJS(str):
+ str = str.replace('"', '\\"')
+ str = str.replace("'", "\\'")
+ return str
+
+
+def generate(infile, languageCode, namespace):
+ global MESSAGES
+ if namespace != "": namespace += "."
+ if len(languageCode.split("_")) > 1:
+ requireString = "#require(%s%s)" % (namespace, languageCode.split("_")[0])
+ else:
+ requireString = ""
+
+ output = '''/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2004-2007 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+ License:
+ LGPL: http://www.gnu.org/licenses/lgpl.html
+ EPL 1.0: http://www.eclipse.org/org/documents/epl-v10.php
+
+ Authors:
+ * Sebastian Werner (wpbasti)
+ * Andreas Ecker (ecker)
+ * Fabian Jakobs (fjakobs)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#require(qx.Locale)
+%s
+************************************************************************ */
+
+/*
+WARNING: This file is generated by the gettext tools from %s. Do not edit it by hand.
+*/
+
+qx.Locale.define("%s%s",
+{
+''' % (requireString, infile, namespace, languageCode)
+
+ translations = []
+ normalizedMessages = {}
+ for msg in MESSAGES:
+ keys = msg.split("\0");
+ if len(keys) <= 1:
+ normalizedMessages[msg] = MESSAGES[msg]
+ continue
+ values = MESSAGES[msg].split("\0");
+ for i in range(len(keys)):
+ normalizedMessages[keys[i]] = values[i]
+
+ for msg in normalizedMessages:
+ if msg == "": continue
+ translations.append(' "%s": "%s"' % (msg, escapeJS(normalizedMessages[msg])))
+ output += (",\n").join(translations)
+ output += "\n});"
+ #print output
+ return output
+
+
+def make (filename, outdir, namespace):
+ ID = 1
+ STR = 2
+ global MESSAGES
+ MESSAGES = {}
+
+ # Compute .mo name from .po name and arguments
+ if filename.endswith('.po'):
+ infile = filename
+ else:
+ infile = filename + '.po'
+
+ basename = os.path.splitext(os.path.basename(infile))[0]
+ outfile = os.path.join(outdir, basename + '.js')
+
+ try:
+ lines = open(infile).readlines()
+ except IOError, msg:
+ print >> sys.stderr, msg
+ sys.exit(1)
+
+ section = None
+ fuzzy = 0
+
+ # Parse the catalog
+ msgid = msgstr = ''
+ lno = 0
+ for l in lines:
+ lno += 1
+ # If we get a comment line after a msgstr, this is a new entry
+ if l[0] == '#' and section == STR:
+ add(msgid, msgstr, fuzzy)
+ section = None
+ fuzzy = 0
+ # Record a fuzzy mark
+ if l[:2] == '#,' and (l.find('fuzzy') >= 0):
+ fuzzy = 1
+ # Skip comments
+ if l[0] == '#':
+ continue
+ # Start of msgid_plural section, separate from singular form with \0
+ if l.startswith('msgid_plural'):
+ msgid += '\0'
+ l = l[12:]
+ # Now we are in a msgid section, output previous section
+ elif l.startswith('msgid'):
+ if section == STR:
+ add(msgid, msgstr, fuzzy)
+ section = ID
+ l = l[5:]
+ msgid = msgstr = ''
+ # Now we are in a msgstr section
+ elif l.startswith('msgstr'):
+ section = STR
+ l = l[6:]
+ # Check for plural forms
+ if l.startswith('['):
+ # Separate plural forms with \0
+ if not l.startswith('[0]'):
+ msgstr += '\0'
+ # Ignore the index - must come in sequence
+ l = l[l.index(']') + 1:]
+ # Skip empty lines
+ l = l.strip()
+ if not l:
+ continue
+ # XXX: Does this always follow Python escape semantics?
+ l = eval(l)
+ if section == ID:
+ msgid += l
+ elif section == STR:
+ msgstr += l
+ else:
+ print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \
+ 'before:'
+ print >> sys.stderr, l
+ sys.exit(1)
+ # Add last entry
+ if section == STR:
+ add(msgid, msgstr, fuzzy)
+
+ # Compute output
+ output = generate(infile, basename, namespace)
+
+
+ try:
+ open(outfile,"w").write(output)
+ except IOError,msg:
+ print >> sys.stderr, msg
+
+
+
+def main ():
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], 'hVd:n:',
+ ['help', 'version', 'output-directory=', 'namespace='])
+ except getopt.error, msg:
+ usage(1, msg)
+
+ outdir = "."
+ ns = ""
+ # parse options
+ for opt, arg in opts:
+ if opt in ('-h', '--help'):
+ usage(0)
+ elif opt in ('-V', '--version'):
+ print >> sys.stderr, "msgfmt.py", __version__
+ sys.exit(0)
+ elif opt in ('-d', '--output-directory'):
+ outdir = arg
+ elif opt in ('-n', '--namespace'):
+ ns = arg
+ # do it
+ if not args:
+ print >> sys.stderr, 'No input file given'
+ print >> sys.stderr, "Try `msgfmt --help' for more information."
+ return
+
+ for filename in args:
+ make(filename, outdir, ns)
+
+
+if __name__ == '__main__':
+ main()