1#!/usr/bin/python 2# Copyright (c) 2013 The Chromium Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6"""Remove strings by name from a GRD file.""" 7 8import optparse 9import re 10import sys 11 12 13def RemoveStrings(grd_path, string_names): 14 """Removes strings with the given names from a GRD file. Overwrites the file. 15 16 Args: 17 grd_path: path to the GRD file. 18 string_names: a list of string names to be removed. 19 """ 20 with open(grd_path, 'r') as f: 21 grd = f.read() 22 names_pattern = '|'.join(map(re.escape, string_names)) 23 pattern = r'<message [^>]*name="(%s)".*?</message>\s*' % names_pattern 24 grd = re.sub(pattern, '', grd, flags=re.DOTALL) 25 with open(grd_path, 'w') as f: 26 f.write(grd) 27 28 29def ParseArgs(args): 30 usage = 'usage: %prog GRD_PATH...' 31 parser = optparse.OptionParser( 32 usage=usage, description='Remove strings from GRD files. Reads string ' 33 'names from stdin, and removes strings with those names from the listed ' 34 'GRD files.') 35 options, args = parser.parse_args(args=args) 36 if not args: 37 parser.error('must provide GRD_PATH argument(s)') 38 return args 39 40 41def main(args=None): 42 grd_paths = ParseArgs(args) 43 strings_to_remove = filter(None, map(str.strip, sys.stdin.readlines())) 44 for grd_path in grd_paths: 45 RemoveStrings(grd_path, strings_to_remove) 46 47 48if __name__ == '__main__': 49 main() 50