Index: grit/tool/menu_from_parts.py |
=================================================================== |
--- grit/tool/menu_from_parts.py (revision 0) |
+++ grit/tool/menu_from_parts.py (revision 0) |
@@ -0,0 +1,84 @@ |
+#!/usr/bin/python2.4 |
+# Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+'''The 'grit menufromparts' tool.''' |
+ |
+import os |
+import getopt |
+import types |
+ |
+from grit.tool import interface |
+from grit.tool import transl2tc |
+from grit import grd_reader |
+from grit import tclib |
+from grit import util |
+from grit import xtb_reader |
+ |
+ |
+import grit.extern.tclib |
+ |
+ |
+class MenuTranslationsFromParts(interface.Tool): |
+ '''One-off tool to generate translated menu messages (where each menu is kept |
+in a single message) based on existing translations of the individual menu |
+items. Was needed when changing menus from being one message per menu item |
+to being one message for the whole menu.''' |
+ |
+ def ShortDescription(self): |
+ return ('Create translations of whole menus from existing translations of ' |
+ 'menu items.') |
+ |
+ def Run(self, globopt, args): |
+ self.SetOptions(globopt) |
+ assert len(args) == 2, "Need exactly two arguments, the XTB file and the output file" |
+ |
+ xtb_file = args[0] |
+ output_file = args[1] |
+ |
+ grd = grd_reader.Parse(self.o.input, debug=self.o.extra_verbose) |
+ grd.OnlyTheseTranslations([]) # don't load translations |
+ grd.RunGatherers(recursive = True) |
+ |
+ xtb = {} |
+ def Callback(msg_id, parts): |
+ msg = [] |
+ for part in parts: |
+ if part[0]: |
+ msg = [] |
+ break # it had a placeholder so ignore it |
+ else: |
+ msg.append(part[1]) |
+ if len(msg): |
+ xtb[msg_id] = ''.join(msg) |
+ f = file(xtb_file) |
+ xtb_reader.Parse(f, Callback) |
+ f.close() |
+ |
+ translations = [] # list of translations as per transl2tc.WriteTranslations |
+ for node in grd: |
+ if node.name == 'structure' and node.attrs['type'] == 'menu': |
+ assert len(node.GetCliques()) == 1 |
+ message = node.GetCliques()[0].GetMessage() |
+ translation = [] |
+ |
+ contents = message.GetContent() |
+ for part in contents: |
+ if isinstance(part, types.StringTypes): |
+ id = grit.extern.tclib.GenerateMessageId(part) |
+ if id not in xtb: |
+ print "WARNING didn't find all translations for menu %s" % node.attrs['name'] |
+ translation = [] |
+ break |
+ translation.append(xtb[id]) |
+ else: |
+ translation.append(part.GetPresentation()) |
+ |
+ if len(translation): |
+ translations.append([message.GetId(), ''.join(translation)]) |
+ |
+ f = util.WrapOutputStream(file(output_file, 'w')) |
+ transl2tc.TranslationToTc.WriteTranslations(f, translations) |
+ f.close() |
+ |
Property changes on: grit/tool/menu_from_parts.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |