File indexing completed on 2024-03-24 05:47:42

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