mirror of
https://github.com/GAM-team/GAM.git
synced 2025-07-09 06:03:35 +00:00
Implement Steve Main template processing suggestion.
This commit is contained in:
50
src/gam.py
50
src/gam.py
@ -382,19 +382,6 @@ def getCharSet(i):
|
||||
return (i, GC_Values.get(GC_CHARSET, GM_Globals[GM_SYS_ENCODING]))
|
||||
return (i+2, sys.argv[i+1])
|
||||
|
||||
def getREPattern(i):
|
||||
if i < len(sys.argv):
|
||||
patstr = sys.argv[i]
|
||||
if patstr:
|
||||
try:
|
||||
pattern = re.compile(patstr)
|
||||
return pattern
|
||||
except re.error as e:
|
||||
print u'ERROR: "{0}" is not a valid RE pattern: {1}'.format(patstr, e)
|
||||
sys.exit(2)
|
||||
print u'ERROR: expected an <REPattern>'
|
||||
sys.exit(2)
|
||||
|
||||
def getString(i, item, emptyOK=False, optional=False):
|
||||
if i < len(sys.argv):
|
||||
argstr = sys.argv[i]
|
||||
@ -5090,7 +5077,31 @@ def getForward(users):
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
RT_PATTERN = re.compile(r'(?s){RT}.*?{(.*?)}.*?{/RT}')
|
||||
RT_OPEN_PATTERN = re.compile(r'{RT}')
|
||||
RT_CLOSE_PATTERN = re.compile(r'{/RT}')
|
||||
RT_STRIP_PATTERN = re.compile(r'(?s){RT}.*?{/RT}')
|
||||
RT_TAG_REPLACE_PATTERN = re.compile(r'{(.*?)}')
|
||||
|
||||
def processTags(tagReplacements, message):
|
||||
while True:
|
||||
match = RT_PATTERN.search(message)
|
||||
if not match:
|
||||
break
|
||||
if tagReplacements.get(match.group(1)):
|
||||
message = RT_OPEN_PATTERN.sub(u'', message, count=1)
|
||||
message = RT_CLOSE_PATTERN.sub(u'', message, count=1)
|
||||
else:
|
||||
message = RT_STRIP_PATTERN.sub(u'', message, count=1)
|
||||
while True:
|
||||
match = RT_TAG_REPLACE_PATTERN.search(message)
|
||||
if not match:
|
||||
break
|
||||
message = re.sub(match.group(0), tagReplacements.get(match.group(1), u''), message)
|
||||
return message
|
||||
|
||||
def doSignature(users):
|
||||
tagReplacements = {}
|
||||
i = 4
|
||||
if sys.argv[i].lower() == u'file':
|
||||
filename = sys.argv[i+1]
|
||||
@ -5102,13 +5113,15 @@ def doSignature(users):
|
||||
i += 1
|
||||
while i < len(sys.argv):
|
||||
if sys.argv[i].lower() == u'replace':
|
||||
matchPattern = getREPattern(i+1)
|
||||
matchTag = getString(i+1, u'Tag')
|
||||
matchReplacement = getString(i+2, u'String', emptyOK=True)
|
||||
signature = matchPattern.sub(matchReplacement, signature)
|
||||
tagReplacements[matchTag] = matchReplacement
|
||||
i += 3
|
||||
else:
|
||||
print u'ERROR: %s is not a valid argument for "gam <users> signature"' % sys.argv[i]
|
||||
sys.exit(2)
|
||||
if tagReplacements:
|
||||
signature = processTags(tagReplacements, signature)
|
||||
emailsettings = getEmailSettingsObject()
|
||||
count = len(users)
|
||||
i = 1
|
||||
@ -5172,6 +5185,7 @@ def doWebClips(users):
|
||||
|
||||
def doVacation(users):
|
||||
subject = message = u''
|
||||
tagReplacements = {}
|
||||
if sys.argv[4].lower() in true_values:
|
||||
enable = True
|
||||
elif sys.argv[4].lower() in false_values:
|
||||
@ -5207,9 +5221,9 @@ def doVacation(users):
|
||||
i, encoding = getCharSet(i)
|
||||
message = readFile(filename, encoding=encoding)
|
||||
elif sys.argv[i].lower() == u'replace':
|
||||
matchPattern = getREPattern(i+1)
|
||||
matchTag = getString(i+1, u'Tag')
|
||||
matchReplacement = getString(i+2, u'String', emptyOK=True)
|
||||
message = matchPattern.sub(matchReplacement, message)
|
||||
tagReplacements[matchTag] = matchReplacement
|
||||
i += 3
|
||||
else:
|
||||
print u'ERROR: %s is not a valid argument for "gam <users> vacation"' % sys.argv[i]
|
||||
@ -5218,6 +5232,8 @@ def doVacation(users):
|
||||
count = len(users)
|
||||
emailsettings = getEmailSettingsObject()
|
||||
message = message.replace(u'\\n', u'\n')
|
||||
if tagReplacements:
|
||||
message = processTags(tagReplacements, message)
|
||||
for user in users:
|
||||
if user.find(u'@') > 0:
|
||||
emailsettings.domain = user[user.find(u'@')+1:]
|
||||
|
Reference in New Issue
Block a user