199776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org#!/usr/bin/env python
299776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved.
399776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org# Use of this source code is governed by a BSD-style license that can be
499776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org# found in the LICENSE file.
599776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org
699776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org"""Formats as a .json file that can be used to localize Google Chrome
799776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgextensions."""
899776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org
9fbf8c54856bccf2d3e2431127ab334ab1dbd619ejoi@chromium.orgfrom json import JSONEncoder
1099776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgimport re
1199776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgimport types
1299776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org
1399776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgfrom grit import util
1499776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgfrom grit.node import message
1599776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org
16ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.orgdef Format(root, lang='en', output_dir='.'):
17ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org  """Format the messages as JSON."""
18ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org  yield '{\n'
19ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org
20fbf8c54856bccf2d3e2431127ab334ab1dbd619ejoi@chromium.org  encoder = JSONEncoder();
21ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org  format = ('  "%s": {\n'
22fbf8c54856bccf2d3e2431127ab334ab1dbd619ejoi@chromium.org            '    "message": %s\n'
23ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org            '  }')
24ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org  first = True
25376fd9b1ffd91cfad9a4a7006a5218bc1ab4e652sergeyu@chromium.org  for child in root.ActiveDescendants():
26ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org    if isinstance(child, message.MessageNode):
27ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org      id = child.attrs['name']
28e297aa63727b070e6095c669fcb79cc5a996ced7sergeyu@chromium.org      if id.startswith('IDR_') or id.startswith('IDS_'):
29ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org        id = id[4:]
30ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org
3107bb47d85119a022535b1f054627d7eeb13d5cc9sergeyu@chromium.org      loc_message = encoder.encode(child.ws_at_start + child.Translate(lang) +
3207bb47d85119a022535b1f054627d7eeb13d5cc9sergeyu@chromium.org                                   child.ws_at_end)
33fbf8c54856bccf2d3e2431127ab334ab1dbd619ejoi@chromium.org
34ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org      if not first:
35ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org        yield ',\n'
36ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org      first = False
37ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org      yield format % (id, loc_message)
38ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org
39ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org  yield '\n}\n'
40