File indexing completed on 2024-11-03 11:24:06

0001 # -*- coding: UTF-8 -*-
0002 
0003 """
0004 Unfuzzy messages fuzzied only due to a change in UI context marker.
0005 
0006 Documented in C{doc/user/sieving.docbook}.
0007 
0008 @author: Chusslove Illich (Часлав Илић) <caslav.ilic@gmx.net>
0009 @license: GPLv3
0010 """
0011 
0012 import re
0013 
0014 from pology import _, n_
0015 from pology.report import report
0016 
0017 
0018 def setup_sieve (p):
0019 
0020     p.set_desc(_("@info sieve discription",
0021     "Unfuzzy messages which got fuzzy only due to changed context marker."
0022     "\n\n"
0023     "Possible only if catalogs were merged with --previous option."
0024     "\n\n"
0025     "By default, unfuzzied messages will get a translator comment with "
0026     "the string '%(str)s', so that they can be reviewed later.",
0027     str="unreviewed-context"
0028     ))
0029 
0030     p.add_param("noreview", bool, defval=False,
0031                 desc=_("@info sieve parameter discription",
0032     "Do not add translator comment indicating unreviewed context."
0033     ))
0034 
0035 
0036 _strip_rx = re.compile(r"^\s*@[^\s]+(.*)", re.U)
0037 _norm_rx = re.compile(r"[^\w]", re.U)
0038 
0039 # Strip the KUIT context marker, and normalize rest of the string.
0040 def _stripped (ctxt):
0041     m = _strip_rx.search(ctxt)
0042     if m: stripped = m.group(1)
0043     else: stripped = ctxt
0044     return _norm_rx.sub("", stripped.lower())
0045 
0046 
0047 class Sieve (object):
0048 
0049     def __init__ (self, params):
0050 
0051         self.flag_review = not params.noreview
0052 
0053         self.nmatch = 0
0054 
0055 
0056     def process (self, msg, cat):
0057 
0058         if (    msg.fuzzy
0059             and msg.msgid == msg.msgid_previous
0060             and msg.msgid_plural == msg.msgid_plural_previous
0061             and (   _stripped(msg.msgctxt or "")
0062                  == _stripped(msg.msgctxt_previous or ""))
0063         ):
0064             msg.unfuzzy()
0065             if self.flag_review:
0066                 # Add as manual comment, as any other type will vanish
0067                 # when catalog is merged with template.
0068                 msg.manual_comment.append("unreviewed-context")
0069             self.nmatch += 1
0070 
0071 
0072     def finalize (self):
0073 
0074         if self.nmatch > 0:
0075             msg = n_("@info:progress",
0076                      "Unfuzzied %(num)d message fuzzy due to "
0077                      "difference in context marker only.",
0078                      "Unfuzzied %(num)d messages fuzzy due to "
0079                      "difference in context marker only.",
0080                      num=self.nmatch)
0081             report("===== " + msg)
0082