Mercurial > hg-stable
diff mercurial/minirst.py @ 31146:50a49ead4db4
minirst: dynamically compile admonitions regexp
Currently, parsing admonitions uses a static regular expression created
from a pre-defined list of admonitions. A future patch will introduce a
feature that needs to parse custom admonitions. Prepare for this by
compiling the admonitions regular expression during each function
invocation.
Strictly speaking, there is a slight performance loss here. But we only
run this code as part of displaying help text. I don't think the loss
will be noticeable and I don't think we care if it were.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 15 Feb 2017 11:47:14 -0800 |
parents | 6582b3716ae0 |
children | bbdd712e9adb |
line wrap: on
line diff
--- a/mercurial/minirst.py Wed Feb 15 16:42:17 2017 -0800 +++ b/mercurial/minirst.py Wed Feb 15 11:47:14 2017 -0800 @@ -411,18 +411,31 @@ i += 1 return blocks -_admonitionre = re.compile(r"\.\. (admonition|attention|caution|danger|" - r"error|hint|important|note|tip|warning)::", - flags=re.IGNORECASE) + +_admonitions = set([ + 'admonition', + 'attention', + 'caution', + 'danger', + 'error', + 'hint', + 'important', + 'note', + 'tip', + 'warning', +]) def findadmonitions(blocks): """ Makes the type of the block an admonition block if the first line is an admonition directive """ + admonitionre = re.compile(r'\.\. (%s)::' % '|'.join(sorted(_admonitions)), + flags=re.IGNORECASE) + i = 0 while i < len(blocks): - m = _admonitionre.match(blocks[i]['lines'][0]) + m = admonitionre.match(blocks[i]['lines'][0]) if m: blocks[i]['type'] = 'admonition' admonitiontitle = blocks[i]['lines'][0][3:m.end() - 2].lower()