# Copyright (c) 2012 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.

'''Tool to create a new, empty .grd file with all the basic sections.
'''

from __future__ import print_function

import getopt
import sys

from grit.tool import interface
from grit import constants
from grit import util

# The contents of the new .grd file
_FILE_CONTENTS = '''\
<?xml version="1.0" encoding="UTF-8"?>
<grit base_dir="." latest_public_release="0" current_release="1"
      source_lang_id="en" enc_check="%s">
  <outputs>
    <!-- TODO add each of your output files.  Modify the three below, and add
    your own for your various languages.  See the user's guide for more
    details.
    Note that all output references are relative to the output directory
    which is specified at build time. -->
    <output filename="resource.h" type="rc_header" />
    <output filename="en_resource.rc" type="rc_all" />
    <output filename="fr_resource.rc" type="rc_all" />
  </outputs>
  <translations>
    <!-- TODO add references to each of the XTB files (from the Translation
    Console) that contain translations of messages in your project.  Each
    takes a form like <file path="english.xtb" />.  Remember that all file
    references are relative to this .grd file. -->
  </translations>
  <release seq="1">
    <includes>
      <!-- TODO add a list of your included resources here, e.g. BMP and GIF
      resources. -->
    </includes>
    <structures>
      <!-- TODO add a list of all your structured resources here, e.g. HTML
      templates, menus, dialogs etc.  Note that for menus, dialogs and version
      information resources you reference an .rc file containing them.-->
    </structures>
    <messages>
      <!-- TODO add all of your "string table" messages here.  Remember to
      change nontranslateable parts of the messages into placeholders (using the
      <ph> element).  You can also use the 'grit add' tool to help you identify
      nontranslateable parts and create placeholders for them. -->
    </messages>
  </release>
</grit>''' % constants.ENCODING_CHECK


class NewGrd(interface.Tool):
  '''Usage: grit newgrd OUTPUT_FILE

Creates a new, empty .grd file OUTPUT_FILE with comments about what to put
where in the file.'''

  def ShortDescription(self):
    return 'Create a new empty .grd file.'

  def ParseOptions(self, args):
    """Set this objects and return all non-option arguments."""
    own_opts, args = getopt.getopt(args, '', ('help',))
    for key, val in own_opts:
      if key == '--help':
        self.ShowUsage()
        sys.exit(0)
    return args

  def Run(self, opts, args):
    args = self.ParseOptions(args)
    if len(args) != 1:
      print('This tool requires exactly one argument, the name of the output '
            'file.')
      return 2
    filename = args[0]
    with util.WrapOutputStream(open(filename, 'wb'), 'utf-8') as out:
      out.write(_FILE_CONTENTS)
    print("Wrote file %s" % filename)
