minirst: correctly format sections containing inline markup
Before, a section like
``foo``
-------
would be formatted as
"foo"
-------
We now recompute the length of the underline when formatting the
section.
--- a/mercurial/minirst.py Sun Apr 25 17:38:41 2010 +0200
+++ b/mercurial/minirst.py Sun Apr 25 17:48:26 2010 +0200
@@ -241,13 +241,15 @@
if (block['type'] == 'paragraph' and
len(block['lines']) == 2 and
block['lines'][1] == '-' * len(block['lines'][0])):
+ block['underline'] = block['lines'][1][0]
block['type'] = 'section'
+ del block['lines'][1]
return blocks
def inlineliterals(blocks):
for b in blocks:
- if b['type'] == 'paragraph':
+ if b['type'] in ('paragraph', 'section'):
b['lines'] = [l.replace('``', '"') for l in b['lines']]
return blocks
@@ -256,7 +258,7 @@
def hgrole(blocks):
for b in blocks:
- if b['type'] == 'paragraph':
+ if b['type'] in ('paragraph', 'section'):
b['lines'] = [_hgrolere.sub(r'"hg \1"', l) for l in b['lines']]
return blocks
@@ -289,7 +291,8 @@
indent += ' '
return indent + ('\n' + indent).join(block['lines'])
if block['type'] == 'section':
- return indent + ('\n' + indent).join(block['lines'])
+ underline = len(block['lines'][0]) * block['underline']
+ return "%s%s\n%s%s" % (indent, block['lines'][0],indent, underline)
if block['type'] == 'definition':
term = indent + block['lines'][0]
hang = len(block['lines'][-1]) - len(block['lines'][-1].lstrip())
@@ -341,11 +344,11 @@
b['indent'] += indent
blocks = findliteralblocks(blocks)
blocks, pruned = prunecontainers(blocks, keep or [])
+ blocks = findsections(blocks)
blocks = inlineliterals(blocks)
blocks = hgrole(blocks)
blocks = splitparagraphs(blocks)
blocks = updatefieldlists(blocks)
- blocks = findsections(blocks)
blocks = addmargins(blocks)
text = '\n'.join(formatblock(b, width) for b in blocks)
if keep is None:
--- a/tests/test-minirst.py Sun Apr 25 17:38:41 2010 +0200
+++ b/tests/test-minirst.py Sun Apr 25 17:48:26 2010 +0200
@@ -186,5 +186,8 @@
sections = """
A Somewhat Wide Section Header
------------------------------
+
+Markup: ``foo`` and :hg:`help`
+------------------------------
"""
debugformat('sections', sections, 20)
--- a/tests/test-minirst.py.out Sun Apr 25 17:38:41 2010 +0200
+++ b/tests/test-minirst.py.out Sun Apr 25 17:48:26 2010 +0200
@@ -307,5 +307,8 @@
----------------------------------------------------------------------
A Somewhat Wide Section Header
------------------------------
+
+Markup: "foo" and "hg help"
+---------------------------
----------------------------------------------------------------------