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 |