
    	^cEt                        d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 d Z
d Zd	 Zd
 Zd Zd Z ej        d          Zd Zd Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Zd ZdZd Zd Zd Z ej        d          Zd Zd Z d Z!d Z"d Z#d  Z$d9d!Z% ed"           ed#           ed$           ed%           ed&           ed'           ed(           ed)           ed*          d+	Z&d, Z'd- Z(d. Z)d:d/Z*d0 Z+d1 Z,d;d4Z-d5 Z.d6 Z/d<d8Z0dS )=a  simplified reStructuredText parser.

This parser knows just enough about reStructuredText to parse the
Mercurial docstrings.

It cheats in a major way: nested blocks are not really nested. They
are just indented blocks that look like they are nested. This relies
on the user to keep the right indentation for the blocks.

Remember to update https://mercurial-scm.org/wiki/HelpStyleGuide
when adding support for new constructs.
    N   )_)encodingpycompaturl)
stringutilc                 :    d| dt          j        |           z  fz  S )N   %s
%s

   "r   colwidthss    3/usr/lib/python3/dist-packages/mercurial/minirst.pysectionr   !   s"    Aux'8';';;<<<    c                 :    d| dt          j        |           z  fz  S )Nr
      =r   r   s    r   
subsectionr   %   "    Ath&7&:&::;;;r   c                 :    d| dt          j        |           z  fz  S )Nr
      -r   r   s    r   subsubsectionr   )   r   r   c                 :    d| dt          j        |           z  fz  S )Nr
      .r   r   s    r   subsubsubsectionr   -   r   r   c                 :    d| dt          j        |           z  fz  S )Nr
      'r   r   s    r   subsubsubsubsectionr   1   r   r   c                 N   |                      t          j        t          j                            }|D ]A\  }}|                    |                     d          |                     d                    }B|                    t          j        t          j                            S )aB  
    Apply a list of (find, replace) pairs to a text.

    >>> replace(b"foo bar", [(b'f', b'F'), (b'b', b'B')])
    'Foo Bar'
    >>> encoding.encoding = b'latin1'
    >>> replace(b'\x81\\', [(b'\\', b'/')])
    '\x81/'
    >>> encoding.encoding = b'shiftjis'
    >>> replace(b'\x81\\', [(b'\\', b'/')])
    '\x81\\'
    ascii)decoder   sysstrr   replaceencode)textsubstsutextfts        r   r$   r$   5   s    $ KK(9::;;E D D1ahhw//'1B1BCC<<(9::;;;r   s   \n(?:\s*\n)+c                 :   g }t                               |                     d                                                    D ]W}|                                }|r?t          d |D                       fd|D             }|                    |d           X|S )zFind continuous blocks of lines in text.

    Returns a list of dictionaries representing the blocks. Each block
    has an 'indent' field and a 'lines' field.
       
c              3   x   K   | ]5}t          |          t          |                                          z
  V  6d S N)lenlstrip).0ls     r   	<genexpr>zfindblocks.<locals>.<genexpr>Z   s;      CC#a&&3qxxzz??2CCCCCCr   c                 $    g | ]}|d          S r.    )r1   r2   indents     r   
<listcomp>zfindblocks.<locals>.<listcomp>[   s!    ///AQvwwZ///r   )   indent   lines)_blockresplitr0   rstrip
splitlinesminappend)r&   blocksblinesr6   s       @r   
findblocksrC   P   s     F^^DKK..557788 @ @ 	@CCUCCCCCF///////EMMf>>???Mr   c                 F   d}|t          |           k     rd| |         d<   | |         d         d                             d          r>|dz   t          |           k     r'| |         d         }| |dz            d         |z
  }| |         d         dgk    r
| |= |dz  }n
| |         d         d                             d	          r,| |         d         d         d
d         | |         d         d<   nt          | |         d                   dk    rm| |         d         d                             d                              d          r3| |         d         d                             dd          dk    r|dz  }|| |         d         d         d
d         | |         d         d<   t
                              | |         d         d                   }|r.||                                z  }||                                z  }|dz   t          |           k     rl| |dz            d         |k    rWd| |dz            d<   | |dz            dxx         |z  cc<   |dz  }|dz   t          |           k     r| |dz            d         |k    W|dz  }|t          |           k     | S )zFinds literal blocks and adds a 'type' field to the blocks.

    Literal blocks are given the type 'literal', all other blocks are
    given type the 'paragraph'.
    r   	   paragraph   typer9   s   ::r   r8   s    ::N       ..       literal)r/   endswithr0   
startswithfind	_bulletrematchend)r@   ir6   
adjustmentms        r   findliteralblocksrV   `   s    	
A
c&kk// *q	'!9Xr"++E22 %	q1us6{{7J7JAYy)FAy1F:Jay"ug--1IQ8$R(11&99 G +1)H*=b*A#2#*Fq	(#B''F1Ih'((A--1Ih'*11$77BB6JJ .1Ih'*//a88B>> Q +1)H*=b*A#2#*Fq	(#B' q	( 3A 677A &!%%''!aeegg%
 a%#f++%%&Q-	*BV*K*K)3q1ug&q1ui(((J6(((Q a%#f++%%&Q-	*BV*K*K 	
Qc c&kk//d Mr   s+   (\*|-|[0-9A-Za-z]+\.|\(?[0-9A-Za-z]+\)|\|) s0   ^(-([a-zA-Z0-9]), )?(--[a-z0-9-]+)((.*)  +)(.*)$s&   :(?![: ])((?:\:|[^:])*)(?<! ):[ ]+(.*)s   [^ ]s
   (=+\s+)*=+c                    dt           dfdt          dfdt          dfdt          dfg}d }d}|t	          |           k     r| |         d	         d
k    r| |         d         }|D ]\  }}} ||d||          rwg }t          |          D ]Y\  }	}
 |||	||          r%|                    |g | |         d         d           |d         d                             |
           Z|| ||dz   <    n|dz  }|t	          |           k     | S )zSplit paragraphs into lists.   bulletT   option   field
   definitionFc                    | |         }|dz   t          |           k     r| |dz            pd}|                    |          sdS |r)|dk    p"|dd         dk    p|                    |          S |                    d          S )zDoes itemre match an item at line i?

        A list item can be followed by an indented line or another list
        item (but only if singleline is True).
        r   r   Fr   rI   )r/   rQ   rN   )rB   rS   itemre
singlelineline1line2s         r   rQ   zsplitparagraphs.<locals>.match   s     aAE

"3uQU|:s||E"" 	5 	*C<L51:#5Le9L9LL##D)))r   r   rF   rE   r9   r8   )rF   r9   r8   rG   r   )rP   	_optionre_fieldre_definitionrer/   	enumerater?   )r@   	listtypesrQ   rS   rB   typer]   r^   itemsjlines              r   splitparagraphsrj      ss    
It$	It$	8T"	u-	I* * * 	
A
c&kk//!9W--1Ih'E,5  (fj56:66 E#,U#3#3 	9 	94 56:>> !LL-1.0/5ay/C!" !"   b	(+2248888(-F1q1u9%E 	
Q% c&kk//& Mr      c                    d}|t          |           k     r| |         d         dk    r|dz  }+|}|t          |           k     r| |         d         dk    rt                              | |         d         d                   }|                                \  }}|| |         d         d<   |                    dd          | |         d<   |dz  }|t          |           k     r| |         d         dk    |dz   }|t          |           k     | S )	zFind key for field lists.r   rF   rZ   r   r9   s   \:   :   key)r/   rb   rQ   groupsr$   )r@   rS   rh   rU   keyrests         r   updatefieldlistsrr      s   	A
c&kk//!9W))FA#f++oo&)G"4"@"@vay21566A

IC%)F1Ih" #FD 9 9F1IfFA #f++oo&)G"4"@"@ E c&kk// Mr   c                    d}|t          |           k     r| |         d         dk    r|dz  },d}|}|t          |           k     rj| |         d         dk    rWt                              | |         d         d                   }|                    d          }|                    d          }|dd                                          }|                    d                                          }|                    d	                                          }	|| |         d         d<   d
}
|sd}
d|rd|z  pd
d|
||	fz  fz  }|                                }|| |         d<   t          |t          j        |                    }|dz  }|t          |           k     r| |         d         dk    W| ||         D ]}||d<   |dz   }|t          |           k     | S )Nr   rF   rY   r   r9      rK         r         s   %s%ss   -%s s	   %s--%s %s   optstr   optstrwidth)	r/   ra   rQ   groupstripr<   maxr   r   )r@   rS   optstrwidthrh   rU   shortoptiongroup3
longoptiondesclongoptionarg	noshortopoptblocks                r   updateoptionlistsr      s   	A
c&kk//!9W**FA#f++oo&)G"4	"A"Aq	( 3A 677A''!**KWWQZZF))++J771::##%%DGGAJJ,,..M%)F1Ih"I #"	5+ 5<	:}EE C **,,C#&F1Ii k8+<S+A+ABBKFA+ #f++oo&)G"4	"A"A. AaC[ 	0 	0E$/E.!!EA c&kk//B Mr   c                    g }d}|dz   t          |           k     r@| |         d         dk    r| |         d         d                             d          r| |         d         }| |dz            d         |z
  }| |         d         d         dd	         }d
}|D ]}||                    d          v rd}|r|                    |           | |= |}	|dz  }|	t          |           k     rX| |	         d         |k    rF|r| |	= n| |	         dxx         |z  cc<   |	dz  }	|	t          |           k     r| |	         d         |k    F|dz  }|dz   t          |           k     @| |fS )zPrune unwanted containers.

    The blocks must have a 'type' field, i.e., they should have been
    run through findliteralblocks first.
    r   r   rF   rE   r9   s   .. container::r8      NTr   F)r/   rN   r;   r?   )
r@   keepprunedrS   r6   rT   containertypeprunecrh   s
             r   prunecontainersr     s    F	A
a%#f++

 !9W--&)H2E3

*&
'
' . AYy)FAy1F:J"1Ih/22337ME " "++D1111!E -m,,, q	AFAc&kk//fQi	&:V&C&C q		1Ii(((J6(((FA c&kk//fQi	&:V&C&C 	
Q? a%#f++

@ 6>r   s   ^([-=`:.'"~^_*+#])\1+$c                 j   | D ]}|d         dk    rt          |d                   dk    rt                              |d         d                   r\|d         d         |d         d         k    r=d|d<   d|d	<   |d         d         fd
t          t                              D             }g }|d         dd         D ]}|k    rd|d	<   g }|d         }t	          |          D ]\  }}|dz   t          |          k     r^||dz            |z
  }	t          j        |||	          }
|t          |
          z  }|                    |
                                           y|                    ||d                                                    |                    |           ||d<   | S )zNFind simple tables

    Only simple one-line table elements are supported
    rF   rE   r9   rt   r   rG      tableF   headerc                 d    g | ],}||d z            dk    |dk    s|d z
  |         dk    *|-S )r   r   r   rI   r5   )r1   xdivs     r   r7   zfindtables.<locals>.<listcomp>^  sX       q1q5y>T))qAvvQUQY49O9O 9O9O9Or   r   TN)	r/   _tablererQ   rangerd   r   getcolsr?   r{   )r@   r   columnsrowsr2   rowposnstartwidthvr   s              @r   
findtablesr   C  s     -# -# 'Nl**E(O$$q((uXq122 )h"eHob&999%E'N$E)/!$C   s3xx  G
 D8_QrT* ! !88'+E)$ aj )' 2 2 4 4HAu1us7||++ 'A 6$,QU;;s1vv

17799----

1STT7==??3333C    "E(OMr   c                 n   | D ]}|d         dk    rt          |d                   dk    rt          j        |d         d                   t          |d         d                   k    rMt                              |d         d                   r'|d         d         dd         |d<   d|d<   |d         d= | S )	zFinds sections.

    The blocks must have a 'type' field, i.e., they should have been
    run through findliteralblocks first.
    rF   rE   r9   rt   r   r   	   underline   section)r/   r   r   
_sectionrerQ   )r@   r   s     r   findsectionsr   {  s      # # 'Nl**E(O$$))!%/!"455U8_Q=O9P9PPP  x!344 Q #(/!"4QqS"9E,'E'Nh"Mr   c                 Z    dg| D ]#}|d         dv rfd|d         D             |d<   $| S )N)s   ``r   rF   rE   r   c                 0    g | ]}t          |          S r5   r$   r1   r2   r'   s     r   r7   z"inlineliterals.<locals>.<listcomp>  #    CCC!71f--CCCr   r9   r5   r@   rA   r'   s     @r   inlineliteralsr     sR    _F D DW:333CCCCq{CCCAhKMr   c                 \    ddg| D ]#}|d         dv rfd|d         D             |d<   $| S )N)s   :hg:`s   'hg )   `r   rF   r   c                 0    g | ]}t          |          S r5   r   r   s     r   r7   zhgrole.<locals>.<listcomp>  r   r   r9   r5   r   s     @r   hgroler     sX    !<0F D DW:333
 DCCCq{CCCAhKMr   c                 2   d}|t          |           k     r| |         d         | |dz
           d         k    r| |         d         dv r|dz  }n7| |dz
           d         s|dz  }n |                     |dgddd           |d	z  }|t          |           k     | S )
zAdds empty blocks for vertical spacing.

    This groups bullets, options, and definitions together with no vertical
    space between them, and adds an empty block between all other blocks.
    r   rF   )rX   rY   rZ   r9   r   r      margin)r9   r8   rF   rt   )r/   insert)r@   rS   s     r   
addmarginsr     s     	
A
c&kk//!9WAw!777F1I=

=
 =
 FAAAx( 	FAAMMseIFF   FA! c&kk//" Mr   c                 <   d}|t          |           k     r| |         }|d         dk    rZ|d         d                             d          s|d         dgk    r,| |= |t          |           k     r| |         d         dk    r| |= n|dz  }|t          |           k     | S )	zRemove comments.r   rF   rE   r9   rJ   s   ..r   r   )r/   rN   )r@   rS   rA   s      r   prunecommentsr     s    	A
c&kk//1IW:%%hKN%%f-- &1281G1Gq	3v;;6!9W#5#B#B1IFA c&kk// Mr   c                    |pt                                           }t          j        dd                    t          |                    z  t          j                  }d}|t          |           k     r|                    | |         d         d                   }|rd| |         d<   | |         d         d         d|	                                d	z
           
                                }| |         d         d         |	                                d
z   d         }|r%| |         d                             d
d|z              || |         d<   | |         d         d= |d
z   }|t          |           k     | S )zj
    Makes the type of the block an admonition block if
    the first line is an admonition directive
    s   \.\. (%s)::   |)flagsr   r9   
   admonitionrF   rK   rt   r   Nrw      admonitiontitle)_admonitiontitleskeysrecompilejoinsorted
IGNORECASEr/   rQ   rR   lowerr   )r@   admonitionsadmonitionrerS   rU   admonitiontitle	firstlines          r   findadmonitionsr     sh   
 9!2!7!7!9!9K:$))F;$7$7888  L 	
A
c&kk//vay21566 		'!.F1Ig$Qi1!4Q1_EKKMMOq	(+A.quuww{}}=I Bq	(#**1fy.@AAA,;F1I()q	(#A&E c&kk// Mr   s
   Attention:s   Caution:s   !Danger!s   Error:s   Hint:s
   Important:s   Note:s   Tip:s   Warning!)	s	   attentions   cautions   dangers   errors   hints	   importants   notes   tips   warningc                 F   d                     t          t          j        | d                             }t	          j        | d                   }|dz
  }| d         }d| d         d||z
  z  fz  }dt	          j        |          dz   z  }dt          j        ||||          z  S )	NrI   r9   rx   r   ry   s   %s%s  s    %s
)
initindent
hangindent)r   mapbytesr{   r   r   r   wrap)r   r   r   r   usablewidthhangingr   r   s           r   formatoptionr     s    99SeHo6677D y!122H!)KN#GeI.89K0MNNJ*:66:;J+*	
 	
 	
 r   c                 	   |dk    rd}d| d         z  }| d         dk    rt           | d                  }| d         s||z   d	z   S t          | d         d
                   t          | d         d
                                                   z
  }||dz  z   }d                    t	          t
          j        | d                             }d||z   t          j        ||||          fz  S | d         dk    rd	S | d         dk    r)|dz  }|d	|z                       | d                   z   d	z   S | d         dk    r>t          j
        | d         d                   | d         z  }d|| d         d         ||fz  S | d         dk    r| d         }d t          | D             }	d}t          |	          t          |	          z   dz
  }
d| d         z  }dt          |          |
z   |	d
         z
  z  }|D ]}g }t          |	|          D ]7\  }}d|t          j
        |          z
  z  }|                    ||z              8d                    |          }t          j        ||||          }|s(| d         r |d	z   |z   dt          ||
          z  z   d	z   }||d	z   z  }|S | d         dk    r|| d         d         z   }t          | d         d
                   t          | d         d
                                                   z
  }||dz  z   }d                    t	          t
          j        | d         dd                             }d|t          j        ||||          fz  S |}| d         dk    r| d         d                             d          r | d         d         dd         | d         d<   nt                               | d         d                   }||                                dz  z   }n| d         dk    r{| d         }|t&          dz  z   }t          |          dz   t&          k    r|                    |          }n|                    t&                    }|| d         d         z   | d         d<   n| d         d k    rt+          | |          S d                    t	          t
          j        | d                             }t          j        ||||          d	z   S )!z"Format a block according to width.r   N   rI   r8   rF   r   r   r9   r,   rG   s   %s
%s
)r   r   r   r   rL   s     r   r   s
   %s%s
%s%s
r   c                 @    g | ]}t          d  |D                       S )c                 6    g | ]}t          j        |          S r5   r   r1   es     r   r7   z*formatblock.<locals>.<listcomp>.<listcomp>(  s#    777x(++777r   r|   r1   r   s     r   r7   zformatblock.<locals>.<listcomp>(  s/    NNNQ#77Q77788NNNr   r   r   r   r   r[   NrX   s   | rt   rZ   rn   rY   )r   r/   r0   r   r   r   r{   r   r   r   r   zipsumr?   r>   rN   rP   rQ   rR   _fieldwidthljustr   )r   r   r6   
admonitionhang	defindentr&   	underlinetablewidthsspanr   r2   wr   padterm	subindentrU   rp   s                       r   formatblockr   
  s:   zzE)$$FW~&&&u-?'@A
X 	/J&..5?2&''#eHob.A.H.H.J.J*K*KKTD[(	yyU[%/::;;ZOEiI  
 
 	
 W~""uW~##%--eHo>>>FFW~##%eHoa&899E,<OO	&%/!*<fi!PPPW~!!hNN#u+NNN6{{S[[(1,i((s6{{T)F2J67 	" 	"CAFC(( " "1a("3A"6"667S!!!!		!A6d  A  "E), "5y6)DCt4D4D,EEME	!W~&&h**5?2&''#eHob.A.H.H.J.J*K*KKTD[(	yyU[%/!""*=>>??OEiI  
 
 	
 IW~""?1((// 	0 "'x!3ABB!7E(OAh 233A4/II	w8	#	#Fm[4//	s88a<+%%))E""CC ))K((C 5?1#55h	w9	$	$E5)))99SeHo6677D&Y	
 	
 	
 	r   c                 :
   g d}g d }fd}d | D             } t          |           D ]\  }}|d         }|d         }|d         }|dk    rn |t          |d	                            }	 |d
                    t          t          j        |                              }
                    d|	|
fz             n|dk    r6                    d |d                    |                    z             ne|dk    rn]|dk    r6                    d |d                    |                    z             n!|dk    rU|d         }||vr||z  }|                    |          dz   }                    d| ||d                   |fz             n|dk    r|d         }                    d           |D ]}                    d           |D ]_}                    d                                ||                                         d                               d           `                                                     d                               d           n|dk    rw |d|            ||d                   } |d
                    t          t          j        |dd                                        }
                    d!||
fz             nj|d"k    r}|d         	                    d
d          \  }}|d#v r |d$|           n |d%|                               d& |d
                    |g|dd          z                       z             n|d'k    rn |d|            ||d(                   } |d
                    t          t          j        |                              }
                    d!||
fz             ns|d)k    rm |d|            ||d*                   } |d
                    t          t          j        |                              }                    d!||fz             rd+         \  }}|t          |           dz
  k    r.                    d,|z                                              | |dz            }|d         }||k     s||k    r6|d         d-vr,                    d,|z                                              d                              S ).zFormat RST blocks as HTMLr   c                 ,    t          j        | d          S )NT)r   escaper   s    r   r   zformathtml.<locals>.escapem  s    z!T"""r   c                     rd         d         | k    r1                     | |f                                d| z             d S d S )NrG   r   s   <%s>
)r?   )r   levellistnestouts     r   openlistzformathtml.<locals>.openlistp  sX     	*8B<?e33OOUEN+++JJy5())))) 43r   c                 *    g | ]}|d          dk    |S )rF   r   r5   )r1   rA   s     r   r7   zformathtml.<locals>.<listcomp>u  s&    ;;;A1W:#:#:a#:#:#:r   rF   r8   r9   r   r   rI   s   <p>
<b>%s</b> %s
</p>
rE   s   <p>
%s
</p>
r,   r   rL   s   <pre>
%s
</pre>
r   r   r   s   <h%d>%s</h%d>
r   r   s   <table>
s   <tr>s   <td>s   </td>s   </tr>
s	   </table>
r[   s   dlNs    <dt>%s
 <dd>%s
rX   )   *r   s   uls   ols	    <li> %s
rZ   rn   rY   rx   rG   s   </%s>
s   definition bullet field option)rd   r   r   r   r   r{   r?   indexpopr;   r/   )r@   
headernestr   r   r   rA   btyper   rB   r   r&   rS   r   r   r   r   bulletheadrp   r   r   r   nbnir   r   s                           @@r   
formathtmlr   f  s    CJH# # #* * * * * *
 <;;;;FF## G# G#Q'
)(M!! 1!4F2G HIIJ6$))CU$;$;<<==DJJ3z46HHIIIIl""JJ)FF5::e3D3D,E,EEFFFFij  JJ-uzz%7H7H0I0IIJJJJj  ,A
""a
$$Q''!+EJJ)UFF584D4De,LLMMMMhhKEJJ|$$$ ' '

7### & &AJJw'''JJvvayy)))JJx(((JJu%%%%			

:&&&&JJ}%%%%m##HUE"""6%(##D6$))CU122Y$?$?@@AADJJ,d|;<<<<i 8>>$22LFD%%&&&&&&&JJ}vvdiiqrr8J.K.K'L'LLMMMMhHUE"""&6##C6$))CU$;$;<<==DJJ,T{:;;;;iHUE"""&9&&C6$))CU$;$;<<==DJJ,T{:;;;  	##B<LE5c&kkAo%%

:-...C!G_	]::%KK7+LLLJJzE1222LLNNN88C==r   c                    t          |           }|D ]}|dxx         |z  cc<   t          |          }t          |          }t          ||pg           \  }}t	          |          }t          |          }t          |          }t          |          }t          |          }t          |          }t          ||          }t          |          }t          |          }||fS )z Parse text into a list of blocksr8   )r   )rC   rV   r   r   r   r   r   rj   rr   r   r   r   r   )r&   r6   r   r   r@   rA   r   s          r   parser     s    F  	)v&&FF$VTZR88NFF&!!FF##FF^^FV$$Ff%%Fv&&FV===FF6""F6>r   c                 J    d                     fd| D                       }|S )Nr   c              3   8   K   | ]}t          |          V  d S r.   r   r1   rA   r   s     r   r3   zformatblocks.<locals>.<genexpr>  -      ::aK5))::::::r   r   )r@   r   r&   s    ` r   formatblocksr    s.    88::::6:::::DKr   c                 F    d                     fd| D                       S )z"Format parsed blocks as plain textr   c              3   8   K   | ]}t          |          V  d S r.   r  r  s     r   r3   zformatplain.<locals>.<genexpr>  r  r   r  )r@   r   s    `r   formatplainr	    s*    88::::6::::::r   P      plainc                     t          | ||pg           \  }}|rt          ||          }|dk    rt          |          S t          ||          S )z-Parse and format the text according to width.s   html)r   )r   filtersectionsr   r	  )r&   r   r6   r   styler   r@   r   s           r   formatr    s^    444NFF 100&!!!6////r   c                     g }t                     }g  d}g }g }d}|t          |          k     r||         \  }}	}
||	d= |                    |           ||k    s|                    d|z             rx||k    rt          |          }t          |          }|r||k    rd}g }t	          d|dz
            D ]}||         }||k    s||         |k    rf|                    t                                ||         d         }                     |d                                         |d	                    |r|                    |           |dd         }                     |
           |dz   t          |          k     rf||dz            d         |	k    rQ|dz  }                     ||         d                    |dz   t          |          k     r||dz            d         |	k    Q|dz  }|t          |          k     |r|                                 |D ]m} fd
|D             }|d	         dz   } |         d         }dd                    ||d         gz                                 dd          z  |d<    |d         |= n S )zSelect parsed blocks under the specified section

    The section name is separated by a dot, and matches the suffix of the
    full section path.
    r   TNr   FrK   r   rt   rG   c                 8    g | ]}|         d          d         S )r9   r   r5   )r1   synr@   s     r   r7   z"filtersections.<locals>.<listcomp>  s'    :::F3K)!,:::r   r9   s   "%s"r   r   )	_getsectionsr/   r?   rM   r   extendreverser   r$   )r@   r   parentssectionsrS   lastparents	syntheticcollapsepathnestrA   llenplenr   rh   parentsecrealreallines   `                  r   r  r    s    GF##HF	AKIH
c(mm

 dADEENq7??dmmD7N;;?g%%;''7|| %DDLL$Hq$(++ / /A$QZFDyyKNf$<$<V---&v.q1c!f---c"g... ($$Q'''!!!!*KMM! a%#h--''HQUOA,>,E,EQhqk!n--- a%#h--''HQUOA,>,E,E 	
Q9 c(mm

:  	$ 	$ 	$A:::::::DR519Dd|H-H!DIIdhqk].B$C$C$K$Kc% % HQK qtd{##Mr   c                    d}d}g }d }| D ]}|d         dk    rw|d         }||vr||z  }|                     |          dz   }|d|         }|d|          ||          fz   }|                    d	                    |          ||gf           |d         d
v rd}||vr||z  }|                     |          dz   }|d|         }t          dt	          |          dz             D ]`}||          }|d         |k     r nHd |d         D             }	|	r3|	d         d         }
|d         }|
|k     r|dz  } n|
|k    r
|d         } na|d|          ||          fz   }|                    d	                    |          ||gf           |sddg fg}|d         dk    rd}|d         }|t	          |          k     r||          d         d         }|d         dk    ru|d         }t	          |d                   dk    rM|t	          |d         d                   t	          |d         d                             d                    z
  z  }||k    rn|dz  }|t	          |          k     |dk    r>||          d         }|d         |d         k    r|dz  }|                    d|g f           |d         d                             |           |S )z=return a list of (section path, nesting level, blocks) tuplesr   r5   c                     | d         dk    r	| d         }n| d         d         }t          j        |                              d          }d|v r|                    d          d         }|S )NrF   rZ   rn   r9   r   r      ()r   r   r{   r;   )rA   r   s     r   getnamez_getsections.<locals>.getname*  sh    W:!!&	AA(AAN1##D))199a Ar   rF   r   r   r   Nr   )r[   rZ   rI   c                 *    g | ]}|d          dk    |S )rF   r[   r5   )r1   as     r   r7   z _getsections.<locals>.<listcomp>G  s&    MMM!7}1L1LA1L1L1Lr   rt   rG   r8   r   r   r9   )r   r?   r   r   r/   r0   )r@   r  namessecsr&  rA   rS   r   r   siblingssiblingindentr6   pointerbindentr   sindentblevels                    r   r  r  $  sp   DED    6" 6"W:##,A}}	JJqMMA%E<D&5&MWWQZZM1EKK5))51#67777wZ444A}}	JJqMMA%E<D1c$ii!m,,  A2hq6E>>EMMs1vMMM $,RL$;My\F$v--
&&00 #A&5&MWWQZZM1EKK5))51#67777 &a~zY&&I,D		))"G8nQ/2Gw'944"))"4wx011A55#s78+<Q+?'@'@3 ' 1! 4 ; ;D A AD D ( G #g--!qLG D		)) Q;;!7(^A.Fw'1W:55!KKfb 1222HQKq!!!!Kr   Fc                 l   d t          |  D             }d|z  }|d                    d |D                       z   dz   }|g}| D ]}g }t          ||          D ]m\  }}	d|	v r2d                    d |	                    d          D                       }	d|t          j        |	          z
  z  }
|                    |	|
z              n|                    |d                    |          z   dz              |r)t          |           dk    r|                    d|           |                    |           |S )zAGenerate an RST table for the given table data as a list of linesc                 @    g | ]}t          d  |D                       S )c              3   >   K   | ]}t          j        |          V  d S r.   r   r   s     r   r3   z'maketable.<locals>.<listcomp>.<genexpr>q  s-      221(#A&&222222r   r   r   s     r   r7   zmaketable.<locals>.<listcomp>q  s/    GGGqc2222222GGGr   rI   c              3       K   | ]	}d |z  V  
dS )r   Nr5   )r1   r   s     r   r3   zmaketable.<locals>.<genexpr>s  s&      66!TAX666666r   r,   c              3   >   K   | ]}|                                 V  d S r.   )r0   r   s     r   r3   zmaketable.<locals>.<genexpr>|  s*      AAQahhjjAAAAAAr   r   rt   )r   r   r;   r   r   r?   r/   r   )datar6   headerr   r   r   r   r2   r   r   r   s              r   	maketabler8  n  sV    HGCJGGGFF]F
49966v66666
6
>C%C 	2 	2$$ 	 	DAqzz IIAA!''%..AAAAA!h/2223CHHQW

6DIIaLL(501111 #d))a--

1cJJsOOOJr   r.   )r   NN)r
  r   Nr  N)r   F)1__doc__r   i18nr    r   r   r   utilsr   r   r   r   r   r   r$   r   r:   rC   rV   rP   ra   rb   rc   r   rj   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r8  r5   r   r   <module>r=     sZ    
			               
      = = =< < << < << < << < << < <0 2:&''   9 9 9x BJFGG	BJ= 	 2:@AA
8$$2:n%%/ / /d   *# # #L( ( (V RZ677
5 5 5p  2  	 	 	  6      : !M""+q~~a	llQx[[!M""Qx[[AgJJ+
 
   Y Y YxZ Z Zz   (  
; ; ;
0 0 0 05 5 5pG G GT     r   