minirst: respect escaping in definition list key
If we start adding `:` in command names… we need minirst to not choke on them.
Differential Revision: https://phab.mercurial-scm.org/D9869
--- a/mercurial/minirst.py Tue Jan 26 00:45:40 2021 +0100
+++ b/mercurial/minirst.py Mon Jan 25 23:07:56 2021 +0100
@@ -158,7 +158,7 @@
_optionre = re.compile(
br'^(-([a-zA-Z0-9]), )?(--[a-z0-9-]+)' br'((.*) +)(.*)$'
)
-_fieldre = re.compile(br':(?![: ])([^:]*)(?<! ):[ ]+(.*)')
+_fieldre = re.compile(br':(?![: ])((?:\:|[^:])*)(?<! ):[ ]+(.*)')
_definitionre = re.compile(br'[^ ]')
_tablere = re.compile(br'(=+\s+)*=+')
@@ -229,7 +229,7 @@
m = _fieldre.match(blocks[j][b'lines'][0])
key, rest = m.groups()
blocks[j][b'lines'][0] = rest
- blocks[j][b'key'] = key
+ blocks[j][b'key'] = key.replace(br'\:', b':')
j += 1
i = j + 1
--- a/tests/test-minirst.py Tue Jan 26 00:45:40 2021 +0100
+++ b/tests/test-minirst.py Mon Jan 25 23:07:56 2021 +0100
@@ -159,6 +159,8 @@
:a: First item.
:ab: Second item. Indentation and wrapping
is handled automatically.
+:c\:d: a key with colon
+:efg\:\:hh: a key with many colon
Next list:
--- a/tests/test-minirst.py.out Tue Jan 26 00:45:40 2021 +0100
+++ b/tests/test-minirst.py.out Mon Jan 25 23:07:56 2021 +0100
@@ -439,6 +439,8 @@
a First item.
ab Second item. Indentation and wrapping is
handled automatically.
+c:d a key with colon
+efg::hh a key with many colon
Next list:
@@ -456,6 +458,9 @@
wrapping is
handled
automatically.
+c:d a key with colon
+efg::hh a key with many
+ colon
Next list:
@@ -476,6 +481,10 @@
<dd>First item.
<dt>ab
<dd>Second item. Indentation and wrapping is handled automatically.
+ <dt>c:d
+ <dd>a key with colon
+ <dt>efg::hh
+ <dd>a key with many colon
</dl>
<p>
Next list: