Implement Steve Main template processing suggestion.

This commit is contained in:
Ross Scroggs
2016-06-29 23:06:56 -07:00
parent cab068357a
commit b648ddbfdf
3 changed files with 41 additions and 21 deletions

View File

@ -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:]