#!/usr/bin/env python # 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. """Support for formatting a data pack file used for platform agnostic resource files. """ import collections import exceptions import os import struct import sys if __name__ == '__main__': sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) PACK_FILE_VERSION = 4 HEADER_LENGTH = 2 * 4 + 1 # Two uint32s. (file version, number of entries) and # one uint8 (encoding of text resources) BINARY, UTF8, UTF16 = range(3) class WrongFileVersion(Exception): pass DataPackContents = collections.namedtuple( 'DataPackContents', 'resources encoding') def ReadDataPack(input_file): """Reads a data pack file and returns a dictionary.""" data = open(input_file, "rb").read() original_data = data # Read the header. version, num_entries, encoding = struct.unpack('data in the data pack format.""" ids = sorted(resources.keys()) ret = [] # Write file header. ret.append(struct.pack('data into output_file as a data pack.""" content = WriteDataPackToString(resources, encoding) with open(output_file, 'wb') as file: file.write(content) # Temporary hack for external programs that import data_pack. # TODO(benrg): Remove this. class DataPack(object): pass DataPack.ReadDataPack = staticmethod(ReadDataPack) DataPack.WriteDataPackToString = staticmethod(WriteDataPackToString) DataPack.WriteDataPack = staticmethod(WriteDataPack) def main(): data = ReadDataPack("input.pak").resources for (key,val) in data.items(): if "Chromium" in val: data[key] = val.replace("Chromium", "GWT-Chromium") WriteDataPack(data, "output.pak", UTF8) if __name__ == '__main__': main()