File indexing completed on 2023-05-30 12:24:30
0001 # -*- coding: UTF-8 -*- 0002 0003 """ 0004 Check for presence of bad patterns in translation. 0005 0006 Documented in C{doc/user/sieving.docbook}. 0007 0008 @note: Deprecated. 0009 0010 @author: Chusslove Illich (Часлав Илић) <caslav.ilic@gmx.net> 0011 @license: GPLv3 0012 """ 0013 0014 from pology import _, n_ 0015 from pology.bpatterns import bad_patterns_msg 0016 from pology.report import report 0017 0018 0019 def setup_sieve (p): 0020 0021 p.set_desc(_("@info sieve discription", 0022 "Check for presence of bad patterns in translation." 0023 )) 0024 0025 p.add_param("pattern", str, multival=True, 0026 metavar=_("@info sieve parameter value placeholder", "STRING"), 0027 desc=_("@info sieve parameter discription", 0028 "A pattern to check against. " 0029 "The pattern can be a substring or regular expression, " 0030 "depending on the '%s' parameter. " 0031 "This parameter can be repeated to add several patterns." 0032 )) 0033 p.add_param("fromfile", str, multival=True, 0034 metavar=_("@info sieve parameter value placeholder", "PATH"), 0035 desc=_("@info sieve parameter discription", 0036 "Read patterns to check against from a file. " 0037 "The file format is as follows: " 0038 "each line contains one pattern, " 0039 "leading and trailing whitespace is removed, " 0040 "empty lines are ignored; " 0041 "# denotes start of comment, which extends to end of line." 0042 "This parameter can be repeated to add several files." 0043 )) 0044 p.add_param("rxmatch", bool, defval=False, 0045 desc=_("@info sieve parameter discription", 0046 "Treat patterns as regular expressions; default is substring matching." 0047 )) 0048 p.add_param("casesens", bool, defval=False, 0049 desc=_("@info sieve parameter discription", 0050 "Set case-sensitive matching; default is case-insensitive." 0051 )) 0052 0053 0054 class Sieve (object): 0055 0056 def __init__ (self, params): 0057 0058 # Indicators to the caller: 0059 self.caller_sync = False # no need to sync catalogs to the caller 0060 self.caller_monitored = False # no need for monitored messages 0061 0062 # Create checker hook. 0063 self.check = bad_patterns_msg(rxmatch=params.rxmatch, 0064 casesens=params.casesens, 0065 patterns=params.pattern, 0066 fromfiles=params.fromfile) 0067 0068 self.nbad = 0 0069 0070 0071 def process (self, msg, cat): 0072 0073 # Check only translated messages. 0074 if not msg.translated: 0075 return 0076 0077 self.nbad += self.check(msg, cat) 0078 0079 0080 def finalize (self): 0081 0082 if self.nbad > 0: 0083 msg = n_("@info:progress", 0084 "Detected %(num)d bad pattern in translation.", 0085 "Detected %(num)d bad patterns in translation.", 0086 num=self.nbad) 0087 report("===== " + msg) 0088