| Index: grit/format/resource_map.py | 
| =================================================================== | 
| --- grit/format/resource_map.py	(revision 0) | 
| +++ grit/format/resource_map.py	(revision 0) | 
| @@ -0,0 +1,127 @@ | 
| +#!/usr/bin/python2.4 | 
| +# Copyright (c) 2010 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. | 
| + | 
| +'''This file contains item formatters for resource_map_header and | 
| +resource_map_source files.  A resource map is a mapping between resource names | 
| +(string) and the internal resource ID.''' | 
| + | 
| +import os | 
| + | 
| +from grit import util | 
| +from grit.format import interface | 
| + | 
| +def GetMapName(root): | 
| +  '''Get the name of the resource map based on the header file name.  E.g., | 
| +  if our header filename is theme_resources.h, we name our resource map | 
| +  kThemeResourcesMap. | 
| + | 
| +  |root| is the grd file root.''' | 
| +  outputs = root.GetOutputFiles() | 
| +  rc_header_file = None | 
| +  for output in outputs: | 
| +    if 'rc_header' == output.GetType(): | 
| +      rc_header_file = output.GetFilename() | 
| +  if not rc_header_file: | 
| +    raise Exception('unable to find resource header filename') | 
| +  filename = os.path.splitext(os.path.split(rc_header_file)[1])[0] | 
| +  filename = filename[0].upper() + filename[1:] | 
| +  while filename.find('_') != -1: | 
| +    pos = filename.find('_') | 
| +    if pos >= len(filename): | 
| +      break | 
| +    filename = filename[:pos] + filename[pos + 1].upper() + filename[pos + 2:] | 
| +  return 'k' + filename | 
| + | 
| + | 
| +class HeaderTopLevel(interface.ItemFormatter): | 
| +  '''Create the header file for the resource mapping.  This file just declares | 
| +  an array of name/value pairs.''' | 
| +  def Format(self, item, lang='en', begin_item=True, output_dir='.'): | 
| +    if not begin_item: | 
| +      return '' | 
| +    return '''\ | 
| +// Copyright (c) %(year)d 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. | 
| +// This file is automatically generated by GRIT.  Do not edit. | 
| + | 
| +#include <stddef.h> | 
| + | 
| +#ifndef GRIT_RESOURCE_MAP_STRUCT_ | 
| +#define GRIT_RESOURCE_MAP_STRUCT_ | 
| +struct GritResourceMap { | 
| +  const char* const name; | 
| +  int value; | 
| +}; | 
| +#endif // GRIT_RESOURCE_MAP_STRUCT_ | 
| + | 
| +extern const GritResourceMap %(map_name)s[]; | 
| +extern const size_t %(map_name)sSize; | 
| +''' % { 'year': util.GetCurrentYear(), | 
| +        'map_name': GetMapName(item.GetRoot()), | 
| +      } | 
| + | 
| + | 
| +class SourceTopLevel(interface.ItemFormatter): | 
| +  '''Create the C++ source file for the resource mapping.  This class handles | 
| +  the header/footer of the file.''' | 
| +  def Format(self, item, lang='en', begin_item=True, output_dir='.'): | 
| +    if begin_item: | 
| +      grit_root = item.GetRoot() | 
| +      outputs = grit_root.GetOutputFiles() | 
| +      rc_header_file = None | 
| +      map_header_file = None | 
| +      for output in outputs: | 
| +        if 'rc_header' == output.GetType(): | 
| +          rc_header_file = output.GetFilename() | 
| +        elif 'resource_map_header' == output.GetType(): | 
| +          map_header_file = output.GetFilename() | 
| +      if not rc_header_file or not map_header_file: | 
| +        raise Exception('resource_map_source output type requires ' | 
| +            'resource_map_header and rc_header outputs') | 
| + | 
| +      return '''\ | 
| +// Copyright (c) %(year)d 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. | 
| +// This file is automatically generated by GRIT.  Do not edit. | 
| + | 
| +#include "%(map_header_file)s" | 
| + | 
| +#include "base/basictypes.h" | 
| +#include "%(rc_header_file)s" | 
| + | 
| +const GritResourceMap %(map_name)s[] = { | 
| +''' % { 'year': util.GetCurrentYear(), | 
| +        'map_header_file': map_header_file, | 
| +        'rc_header_file': rc_header_file, | 
| +        'map_name': GetMapName(item.GetRoot()), | 
| +      } | 
| +    else: | 
| +      # Return the footer text. | 
| +      return '''\ | 
| +}; | 
| + | 
| +const size_t %(map_name)sSize = arraysize(%(map_name)s); | 
| +''' % { 'map_name': GetMapName(item.GetRoot()) } | 
| + | 
| + | 
| +class SourceInclude(interface.ItemFormatter): | 
| +  '''Populate the resource mapping.  For each include, we map a string to | 
| +  the resource ID.''' | 
| +  def Format(self, item, lang='en', begin_item=True, output_dir='.'): | 
| +    if not begin_item: | 
| +      return '' | 
| +    return '  {"%s", %s},\n' % (item.attrs['name'], item.attrs['name']) | 
| + | 
| + | 
| +class SourceFileInclude(interface.ItemFormatter): | 
| +  '''Populate the resource mapping.  For each include, we map a filename to | 
| +  the resource ID.''' | 
| +  def Format(self, item, lang='en', begin_item=True, output_dir='.'): | 
| +    if not begin_item: | 
| +      return '' | 
| +    filename = item.attrs['file'].replace("\\", "/") | 
| +    return '  {"%s", %s},\n' % (filename, item.attrs['name']) | 
|  | 
| Property changes on: grit/format/resource_map.py | 
| ___________________________________________________________________ | 
| Added: svn:eol-style | 
| + LF | 
|  | 
|  |