minirst: respect escaping in definition list key
authorPierre-Yves David <pierre-yves.david@octobus.net>
Mon, 25 Jan 2021 23:07:56 +0100
changeset 46385 aaff3bc75306
parent 46384 7bb31c367847
child 46386 d481f30ea8e3
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
mercurial/minirst.py
tests/test-minirst.py
tests/test-minirst.py.out
--- 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: