diff options
Diffstat (limited to 'Mailman')
-rw-r--r-- | Mailman/Defaults.py.in | 10 | ||||
-rw-r--r-- | Mailman/Handlers/CookHeaders.py | 34 |
2 files changed, 39 insertions, 5 deletions
diff --git a/Mailman/Defaults.py.in b/Mailman/Defaults.py.in index ca1fcd65..f4493dca 100644 --- a/Mailman/Defaults.py.in +++ b/Mailman/Defaults.py.in @@ -820,6 +820,7 @@ DEFAULT_MAX_MESSAGE_SIZE = 40 # KB # These format strings will be expanded w.r.t. the dictionary for the # mailing list instance. DEFAULT_SUBJECT_PREFIX = "[%(real_name)s] " +# DEFAULT_SUBJECT_PREFIX = "[%(real_name)s %%d]" # for numbering DEFAULT_MSG_HEADER = "" DEFAULT_MSG_FOOTER = """_______________________________________________ %(real_name)s mailing list @@ -827,6 +828,15 @@ DEFAULT_MSG_FOOTER = """_______________________________________________ %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s """ +# Where to put subject prefix for 'Re:' messages: +# old style: Re: [prefix] test +# new style: [prefix 123] Re: test ... (number is optional) +# Old style is default for backward compatibility. New style is forced if +# a list owner set %d (numbering) in prefix. If the site owner had applied +# new style patch (from SF patch area) before, he/she may want to set this +# No in mm_cfg.py. +OLD_STYLE_PREFIXING = Yes + # Scrub regular delivery DEFAULT_SCRUB_NONDIGEST = False diff --git a/Mailman/Handlers/CookHeaders.py b/Mailman/Handlers/CookHeaders.py index c49c3175..aafe02fe 100644 --- a/Mailman/Handlers/CookHeaders.py +++ b/Mailman/Handlers/CookHeaders.py @@ -35,6 +35,13 @@ CONTINUATION = ',\n\t' COMMASPACE = ', ' MAXLINELEN = 78 +# True/False +try: + True, False +except NameError: + True = 1 + False = 0 + def _isunicode(s): @@ -251,14 +258,23 @@ def prefix_subject(mlist, msg, msgdata): # sequential number format allows '%05d' like pattern. p = re.compile('%\d*d') if p.search(prefix,1): - # prefix have number, so we should search prefix w/number - # in subject. + # prefix have number, so we should search prefix w/number in subject. + # Also, old_style is forced to False prefix_pattern = p.sub(r'\s*\d+\s*', prefix) + old_style = False else: prefix_pattern = prefix + old_style = mm_cfg.OLD_STYLE_PREFIXING + # Convert [ ( { ) --> \\[ \\( \\{ \\) to feed into re module. + # TK: Something magic should be here but after trial and error... prefix_pattern = re.sub('([\[\(\{\)])', '\\\\\g<1>', prefix_pattern) subject = re.sub(prefix_pattern, '', subject) - subject = re.compile('(RE:\s*)+', re.I).sub('Re: ', subject, 1) + rematch = re.match('((RE|AW)(\[\d+\])?:\s*)+', subject, re.I) + if rematch: + subject = subject[rematch.end():] + recolon = 'Re:' + else: + recolon = '' # At this point, subject may become null if someone post mail with # subject: [subject prefix] if subject.strip() == '': @@ -273,7 +289,10 @@ def prefix_subject(mlist, msg, msgdata): # is some weirdness in Header module (TK) if cset == 'us-ascii': try: - h = prefix + ' ' + subject + if old_style: + h = ' '.join([recolon, prefix, subject]) + else: + h = ' '.join([prefix, recolon, subject]) if type(h) == UnicodeType: h = h.encode('us-ascii') else: @@ -284,7 +303,12 @@ def prefix_subject(mlist, msg, msgdata): except UnicodeError: pass # Get the header as a Header instance, with proper unicode conversion - h = uheader(mlist, prefix, 'Subject', continuation_ws=ws) + if old_style: + h = uheader(mlist, recolon, 'Subject', continuation_ws=ws) + h.append(prefix) + else: + h = uheader(mlist, prefix, 'Subject', continuation_ws=ws) + h.append(recolon) # in seq version, subject header is already concatnated if not _isunicode(subject): try: |