| OLD | NEW |
| (Empty) |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 from string import Template | |
| 6 | |
| 7 import optparse | |
| 8 import os | |
| 9 import sys | |
| 10 | |
| 11 try: | |
| 12 grit_module_path = os.path.join( | |
| 13 os.path.dirname(__file__), '..', '..', 'tools', 'grit') | |
| 14 sys.path.insert(0, grit_module_path) | |
| 15 from grit.format import data_pack as DataPack | |
| 16 except ImportError, e: | |
| 17 print 'ImportError: ', e | |
| 18 sys.exit(-1) | |
| 19 | |
| 20 header_template = \ | |
| 21 """// Copyright 2015 The Chromium Authors. All rights reserved. | |
| 22 // Use of this source code is governed by a BSD-style license that can be | |
| 23 // found in the LICENSE file. | |
| 24 | |
| 25 #ifndef COMPONENTS_HTML_VIEWER_BLINK_RESOURCE_MAP_H_ | |
| 26 #define COMPONENTS_HTML_VIEWER_BLINK_RESOURCE_MAP_H_ | |
| 27 | |
| 28 #include <map> | |
| 29 | |
| 30 namespace html_viewer { | |
| 31 | |
| 32 class BlinkResourceMap { | |
| 33 public: | |
| 34 BlinkResourceMap(); | |
| 35 const unsigned char* GetResource(int id, int* length); | |
| 36 | |
| 37 private: | |
| 38 struct ResourceEntry { | |
| 39 const unsigned char* data; | |
| 40 int length; | |
| 41 | |
| 42 ResourceEntry() | |
| 43 : data(nullptr) | |
| 44 , length(0) { | |
| 45 } | |
| 46 | |
| 47 ResourceEntry(const unsigned char* data, int length) | |
| 48 : data(data) | |
| 49 , length(length) { | |
| 50 } | |
| 51 }; | |
| 52 typedef std::map<int, ResourceEntry> ResourceMap; | |
| 53 ResourceMap resources_; | |
| 54 }; | |
| 55 | |
| 56 } // namespace html_viewer | |
| 57 #endif // COMPONENTS_HTML_VIEWER_BLINK_RESOURCE_MAP_H_""" | |
| 58 | |
| 59 cpp_template = \ | |
| 60 """// Copyright 2015 The Chromium Authors. All rights reserved. | |
| 61 // Use of this source code is governed by a BSD-style license that can be | |
| 62 // found in the LICENSE file. | |
| 63 | |
| 64 #include "$header_file_name" | |
| 65 | |
| 66 #include "base/macros.h" | |
| 67 | |
| 68 namespace html_viewer { | |
| 69 | |
| 70 $definitions | |
| 71 | |
| 72 BlinkResourceMap::BlinkResourceMap() | |
| 73 { | |
| 74 $map_initializer | |
| 75 } | |
| 76 | |
| 77 const unsigned char* BlinkResourceMap::GetResource(int id, int* length) | |
| 78 { | |
| 79 ResourceMap::iterator it = resources_.find(id); | |
| 80 if (it == resources_.end()) { | |
| 81 *length = 0; | |
| 82 return nullptr; | |
| 83 } | |
| 84 *length = it->second.length; | |
| 85 return it->second.data; | |
| 86 } | |
| 87 | |
| 88 } // namespace html_viewer""" | |
| 89 | |
| 90 def main(): | |
| 91 parser = optparse.OptionParser( | |
| 92 usage='Usage: %prog --pak-file PAK_FILE --header HEADER --cpp CPP\n') | |
| 93 parser.add_option('-i', '--pak-file', action='store', dest='pak_file', | |
| 94 help='The .pak file to be extracted.') | |
| 95 parser.add_option('', '--header', action='store', dest='header_file', | |
| 96 help='Header file to be generated.') | |
| 97 parser.add_option('', '--cpp', action='store', dest='cpp_file', | |
| 98 help='C++ file to be generated.') | |
| 99 | |
| 100 (options, _) = parser.parse_args() | |
| 101 if (not options.pak_file or not options.header_file or not options.cpp_file): | |
| 102 parser.print_help() | |
| 103 sys.exit(-1) | |
| 104 | |
| 105 header_file = open(options.header_file, 'w+') | |
| 106 cpp_file = open(options.cpp_file, 'w+') | |
| 107 | |
| 108 pak_contents = DataPack.ReadDataPack(options.pak_file) | |
| 109 resourceIds = [] | |
| 110 | |
| 111 header_contents = dict() | |
| 112 cpp_contents = dict() | |
| 113 | |
| 114 definitions = [] | |
| 115 | |
| 116 for (resId, data) in pak_contents.resources.iteritems(): | |
| 117 resourceIds.append(resId) | |
| 118 hex_values = ['0x{0:02x}'.format(ord(char)) for char in data] | |
| 119 f = lambda A, n=12: [A[i:i+n] for i in range(0, len(A), n)] | |
| 120 hex_values_string = ',\n '.join(', '.join(x) for x in f(hex_values)) | |
| 121 cpp_definition = \ | |
| 122 'const unsigned char kResource%s[%d] = {\n %s \n};' % \ | |
| 123 (str(resId), len(hex_values), hex_values_string) | |
| 124 definitions.append(cpp_definition) | |
| 125 | |
| 126 header_file_contents = Template(header_template).substitute(header_contents) | |
| 127 header_file.write(header_file_contents) | |
| 128 header_file.close() | |
| 129 | |
| 130 map_initializer = [] | |
| 131 for resId in resourceIds: | |
| 132 insert_statement = \ | |
| 133 'resources_.insert(std::pair<int, ResourceEntry>(\n' \ | |
| 134 ' %s, ResourceEntry(kResource%s, arraysize(kResource%s))));' | |
| 135 map_initializer.append( \ | |
| 136 insert_statement % (str(resId), str(resId), str(resId))) | |
| 137 | |
| 138 cpp_contents['definitions']= '\n'.join(definitions) | |
| 139 cpp_contents['header_file_name'] = os.path.basename(options.header_file) | |
| 140 cpp_contents['map_initializer'] = '\n '.join(map_initializer) | |
| 141 cpp_file_contents = Template(cpp_template).substitute(cpp_contents) | |
| 142 cpp_file.write(cpp_file_contents) | |
| 143 cpp_file.close() | |
| 144 | |
| 145 if __name__ == '__main__': | |
| 146 main() | |
| OLD | NEW |