chromium/tools/android/remove_strings.py

#!/usr/bin/env python
# Copyright 2013 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Remove strings by name from a GRD file."""

import optparse
import re
import sys


def RemoveStrings(grd_path, string_names):
  """Removes strings with the given names from a GRD file. Overwrites the file.

  Args:
    grd_path: path to the GRD file.
    string_names: a list of string names to be removed.
  """
  with open(grd_path, 'r') as f:
    grd = f.read()
  names_pattern = '|'.join(map(re.escape, string_names))
  pattern = r'<message [^>]*name="(%s)".*?</message>\s*' % names_pattern
  grd = re.sub(pattern, '', grd, flags=re.DOTALL)
  with open(grd_path, 'w') as f:
    f.write(grd)


def ParseArgs(args):
  usage = 'usage: %prog GRD_PATH...'
  parser = optparse.OptionParser(
      usage=usage, description='Remove strings from GRD files. Reads string '
      'names from stdin, and removes strings with those names from the listed '
      'GRD files.')
  options, args = parser.parse_args(args=args)
  if not args:
    parser.error('must provide GRD_PATH argument(s)')
  return args


def main(args=None):
  grd_paths = ParseArgs(args)
  strings_to_remove = filter(None, map(str.strip, sys.stdin.readlines()))
  for grd_path in grd_paths:
    RemoveStrings(grd_path, strings_to_remove)


if __name__ == '__main__':
  main()