195640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org#!/usr/bin/env python
295640e3a20adea634b4df4ccf8c93f411184c438joi@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved.
301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# Use of this source code is governed by a BSD-style license that can be
401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org# found in the LICENSE file.
501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org'''A CustomType for filenames.'''
701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgfrom grit import clique
901fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.orgfrom grit import lazy_re
1001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.orgclass WindowsFilename(clique.CustomType):
1301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''Validates that messages can be used as Windows filenames, and strips
1401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  illegal characters out of translations.
1501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  '''
1601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1701fadb72b6e94e6511eaffd1874a8cc095f098a7joi@chromium.org  BANNED = lazy_re.compile('\+|:|\/|\\\\|\*|\?|\"|\<|\>|\|')
1801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
1901b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def Validate(self, message):
2001b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return not self.BANNED.search(message.GetPresentableContent())
2101b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2201b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def ValidateAndModify(self, lang, translation):
2301b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    is_ok = self.Validate(translation)
2401b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    self.ModifyEachTextPart(lang, translation)
2501b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return is_ok
2601b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org
2701b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org  def ModifyTextPart(self, lang, text):
2801b3bc768461bd303bff39f8cd1663682254e407joi@chromium.org    return self.BANNED.sub(' ', text)
29