[PATCH] help: include section heading if section depth changes

Yuya Nishihara yuya at tcha.org
Tue Jan 5 07:36:39 CST 2016


On Fri, 01 Jan 2016 12:57:07 -0600, timeless wrote:
> # HG changeset patch
> # User timeless <timeless at mozdev.org>
> # Date 1451667553 0
> #      Fri Jan 01 16:59:13 2016 +0000
> # Node ID b225e760bdb47c0aafdfde7268905fdcefd97779
> # Parent  44f717c879033f28d3f7e7dc9f34aa394d2fea3f
> help: include section heading if section depth changes

Updated the test output and pushed to the clowncopter, thanks. A couple of
trivial comments follow.

> --- a/mercurial/minirst.py
> +++ b/mercurial/minirst.py
> @@ -661,12 +661,32 @@
>          sections = getsections(blocks)
>          blocks = []
>          i = 0
> +        lastparents = []
> +        synthetic = []
> +        collapse = True
>          while i < len(sections):
>              name, nest, b = sections[i]
>              del parents[nest:]
> -            parents.append(name)
> +            parents.append(i)
>              if name == section:
> -                b[0]['path'] = parents[3:]
> +                if lastparents != parents:
> +                    llen = len(lastparents)
> +                    plen = len(parents)
> +                    if llen and llen != plen:
> +                        collapse = False
> +                    s = []
> +                    for j in xrange(3, plen - 1):
> +                        parent = parents[j]
> +                        if (j >= llen or
> +                            lastparents[j] != parent):
> +                            s.append(len(blocks))
> +                            sec = sections[parent][2]
> +                            blocks.append(sec[0])
> +                            blocks.append(sec[-1])

I would add new {'type': 'margin', ...} object instead of sec[-1].

> +                    if s:
> +                        synthetic.append(s)
> +
> +                lastparents = parents[:]
>                  blocks.extend(b)
>  
>                  ## Also show all subnested sections
> @@ -674,18 +694,19 @@
>                      i += 1
>                      blocks.extend(sections[i][2])
>              i += 1
> +        if collapse:
> +            synthetic.reverse()
> +            for s in synthetic:
> +                path = [blocks[i]['lines'][0] for i in s]
> +                real = s[-1] + 2
> +                realline = blocks[real]['lines']
> +                realline[0] = ('"%s"' %
> +                    '.'.join(path + [realline[0]]).replace('"',''))
> +                del blocks[s[0]:real]

It will be nice if the whole process can be refactored to 2 or 3 phases,
for example,

 1. scan sections to decide "collapse" and the lowest "nest" level
 2.a. if "collapse", build "path" and append matched body to "blocks"
 2.b. else, collect section headers down to matched body and append them

Regards,


More information about the Mercurial-devel mailing list