minirst: correctly format sections containing inline markup
authorMartin Geisler <mg@lazybytes.net>
Sun, 25 Apr 2010 17:48:26 +0200
changeset 10983 287a5cdf7743
parent 10982 0a548640e012
child 10984 68b7d2d668ce
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.
mercurial/minirst.py
tests/test-minirst.py
tests/test-minirst.py.out
--- 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"
+---------------------------
 ----------------------------------------------------------------------