# HG changeset patch # User Gregory Szorc # Date 1487188034 28800 # Node ID 50a49ead4db476cc7d497f2ac1f198154afb6d4d # Parent 6582b3716ae083e6b06af2d3d2ddb837d7b8453d 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. diff -r 6582b3716ae0 -r 50a49ead4db4 mercurial/minirst.py --- 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()