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