
    6hft                       S r SSKJr  SSKrSSKJr  SSKJrJrJ	r	  SSK
Jr  S rS	 rS
 rS rS rS r\R$                  " S5      rS rS r\R$                  " S5      r\R$                  " S5      r\R$                  " S5      r\R$                  " S5      r\R$                  " S5      rS rSrS rS rS r\R$                  " S5      r S r!S r"S r#S r$S  r%S! r&S7S" jr'\" S#5      \" S$5      \" S%5      \" S&5      \" S'5      \" S(5      \" S)5      \" S*5      \" S+5      S,.	r(S- r)S. r*S/ r+S8S0 jr,S1 r-S2 r.S9S3 jr/S4 r0S5 r1S:S6 jr2g);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.
    )annotationsN   )_)encodingpycompaturl)
stringutilc                >    SU S[         R                  " U 5      -  4-  $ )N   %s
%s

   "r   colwidthss    3/usr/lib/python3/dist-packages/mercurial/minirst.pysectionr   "   s"    Aux'8'8';;<<<    c                >    SU S[         R                  " U 5      -  4-  $ )Nr      =r   r   s    r   
subsectionr   &   "    Ath&7&7&::;;;r   c                >    SU S[         R                  " U 5      -  4-  $ )Nr      -r   r   s    r   subsubsectionr   *   r   r   c                >    SU S[         R                  " U 5      -  4-  $ )Nr      .r   r   s    r   subsubsubsectionr   .   r   r   c                >    SU S[         R                  " U 5      -  4-  $ )Nr      'r   r   s    r   subsubsubsubsectionr    2   r   r   c                D   U R                  [        R                  " [        R                  5      5      nU H5  u  p4UR	                  UR                  S5      UR                  S5      5      nM7     UR                  [        R                  " [        R                  5      5      $ )a  
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%   6   sm    $ KK(9(9:;Eahhw/'1BC <<(9(9:;;r   s   \n(?:\s*\n)+c                *   / n[         R                  U R                  S5      R                  5       5       HU  nUR	                  5       nU(       d  M  [        S U 5       5      nU Vs/ s H  oUUS PM	     nnUR                  XCS.5        MW     U$ s  snf )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  l   #    U  H*  n[        U5      [        UR                  5       5      -
  v   M,     g 7fN)lenlstrip).0ls     r   	<genexpr>findblocks.<locals>.<genexpr>[   s#     CU#a&3qxxz?2Us   24N)   indent   lines)_blockresplitr1   rstrip
splitlinesminappend)r'   blocksblinesindentr3   s         r   
findblocksrB   Q   s     F^^DKK.55785CUCCF)./AvwZE/MMf>? 9 M 0s   'Bc                   SnU[        U 5      :  Ga  SX   S'   X   S   S   R                  S5      (       Ga  US-   [        U 5      :  Ga  X   S   nXS-      S   U-
  nX   S   S/:X  a  X	 US-  nOX   S   S   R                  S	5      (       a  X   S   S   S
S X   S   S'   O|[        X   S   5      S:X  aS  X   S   S   R                  S5      R                  S5      (       a&  X   S   S   R	                  SS5      S:X  a  US-  nGM  X   S   S   S
S X   S   S'   [
        R                  X   S   S   5      nU(       a$  X$R                  5       -  nX4R                  5       -  nUS-   [        U 5      :  aQ  XS-      S   U:  aC  SXS-      S'   XS-      S==   U-  ss'   US-  nUS-   [        U 5      :  a  XS-      S   U:  a  MC  US-  nU[        U 5      :  a  GM  U $ )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   typer7   s   ::r   r6   s    ::N       ..       literal)r0   endswithr1   
startswithfind	_bulletrematchend)r>   irA   
adjustmentms        r   findliteralblocksrU   a   s5    	
A
c&k/ *	'9Xr"++E22q1us6{7JYy)FAy1F:Jy"ug-IQ8$R(11&99 +1)H*=b*A#2*F	(#B'FIh'(A-Ih'*11$7BB6JJIh'*//a8B> Q +1)H*=b*A#2*F	(#B' 	( 3A 67A%%'!eeg%
 a%#f+%&Q-	*BV*K)31ug&1ui(J6(Q a%#f+%&Q-	*BV*K 	
Qc c&k/d Mr   s+   (\*|-|[0-9A-Za-z]+\.|\(?[0-9A-Za-z]+\)|\|) s0   ^(-([a-zA-Z0-9]), )?(--[a-z0-9-]+)((.*)  +)(.*)$s&   :(?![: ])((?:\:|[^:])*)(?<! ):[ ]+(.*)s   [^ ]s
   (=+\s+)*=+c                   S[         S4S[        S4S[        S4S[        S4/nS nSnU[	        U 5      :  a  X   S	   S
:X  a  X   S   nU Hr  u  pVnU" USXg5      (       d  M  / n[        U5       HD  u  pU" XIXg5      (       a  UR                  U/ X   S   S.5        US   S   R                  U
5        MF     XX3S-   &   O   US-  nU[	        U 5      :  a  M  U $ )zSplit paragraphs into lists.   bulletT   option   field
   definitionFc                   X   nUS-   [        U 5      :  =(       a    XS-      =(       d    SnUR                  U5      (       d  gU(       a,  US:H  =(       d     USS S:H  =(       d    UR                  U5      $ UR                  S5      $ )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   rH   )r0   rP   rM   )r@   rR   itemre
singlelineline1line2s         r   rP   splitparagraphs.<locals>.match   s{     AE
"3uU|:s||E""C<L51:#5Le9LL##D))r   r   rE   rD   r7   r6   )rE   r7   r6   rF   r   )rO   	_optionre_fieldre_definitionrer0   	enumerater=   )r>   	listtypesrP   rR   r@   typer\   r]   itemsjlines              r   splitparagraphsrj      s    
It$	It$	8T"	u-	I* 	
A
c&k/9W-Ih'E,5(j666E#,U#3 6>>!LL-1.0/5y/C!" b	(+2248 $4 ).11u% -6 	
Q% c&k/& Mr      c                   SnU[        U 5      :  a  X   S   S:w  a  US-  nM!  UnU[        U 5      :  a|  X   S   S:X  aq  [        R                  X   S   S   5      nUR                  5       u  pEXPU   S   S'   UR	                  SS5      X   S'   US-  nU[        U 5      :  a  X   S   S:X  a  Mq  US-   nU[        U 5      :  a  M  U $ )	zFind key for field lists.r   rE   rY   r   r7   s   \:   :   key)r0   rb   rP   groupsr%   )r>   rR   rh   rT   keyrests         r   updatefieldlistsrr      s    	A
c&k/9W)FA#f+o&)G"4"@vy2156A
IC%)1Ih" #FD 9FIfFA #f+o&)G"4"@ E c&k/ Mr   c                   SnU[        U 5      :  Gaw  X   S   S:w  a  US-  nM"  SnUnU[        U 5      :  Ga+  X   S   S:X  Ga  [        R                  X   S   S   5      nUR                  S5      nUR                  S5      nUSS  R	                  5       nUR                  S5      R	                  5       nUR                  S	5      R	                  5       n	XU   S   S'   S
n
U(       d  Sn
SU=(       a    SU-  =(       d    S
SXU	4-  4-  nUR                  5       nXU   S'   [        U[        R                  " U5      5      nUS-  nU[        U 5      :  a  X   S   S:X  a  GM  XU  H  nX,S'   M	     US-   nU[        U 5      :  a  GMw  U $ )Nr   rE   rX   r   r7      rJ         r         s   %s%ss   -%s s	   %s--%s %s   optstr   optstrwidth)	r0   ra   rP   groupstripr:   maxr   r   )r>   rR   optstrwidthrh   rT   shortoptiongroup3
longoptiondesclongoptionarg	noshortopoptblocks                r   updateoptionlistsr      s   	A
c&k/9W*FA#f+o&)G"4	"A	( 3A 67A''!*KWWQZF))+J771:##%DGGAJ,,.M%)1Ih"I"	5+ 5<	}EE C **,C#&1Ii k8+<+<S+ABKFA+ #f+o&)G"4	"A. a[E$/.! !EA c&k/B Mr   c                *   / nSnUS-   [        U 5      :  a  X   S   S:X  a  X   S   S   R                  S5      (       a  X   S   nXS-      S   U-
  nX   S   S   SS	 nS
nU H  nXR                  S5      ;   d  M  SnM     U(       a  UR                  U5        X	 Un	US-  nU	[        U 5      :  aE  X	   S   U:  a:  U(       a  X		 OX	   S==   U-  ss'   U	S-  n	U	[        U 5      :  a  X	   S   U:  a  M:  US-  nUS-   [        U 5      :  a  M  X4$ )zPrune unwanted containers.

The blocks must have a 'type' field, i.e., they should have been
run through findliteralblocks first.
r   r   rE   rD   r7   s   .. container::r6      NTr   F)r0   rM   r9   r=   )
r>   keepprunedrR   rA   rS   containertypeprunecrh   s
             r   prunecontainersr     sU    F	A
a%#f+
 9W-&)H2E3

*&
'3( Yy)FAy1F:J"Ih/2237ME++D11!E  m, 	AFAc&k/fi	&:V&C	Ii(J6(FA c&k/fi	&:V&C 	
Q? a%#f+
@ >r   s   ^([-=`:.'"~^_*+#])\1+$c                   U  GH  nUS   S:X  d  M  [        US   5      S:  d  M#  [        R                  US   S   5      (       d  ME  US   S   US   S   :X  d  MY  SUS'   SUS	'   US   S   n[        [        U5      5       Vs/ s H%  nX#US
-    S:X  d  M  US:X  d  X#S
-
  U S:X  d  M#  UPM'     nn/ nUS   S
S  H  nXb:X  a  SUS	'   M  / nUS   n[	        U5       H  u  pU	S
-   [        U5      :  aP  XIS
-      U
-
  n[
        R                  " XhU5      nU[        U5      -  nUR                  UR                  5       5        Mg  UR                  XhS R                  5       5        M     UR                  U5        M     XQS'   GM     U $ s  snf )zFFind simple tables

Only simple one-line table elements are supported
rE   rD   r7   rt   r   rF      tableF   headerr   r   rH   TN)	r0   _tablererP   rangerd   r   getcolsr=   r{   )r>   r   divxcolumnsrowsr3   rowposnstartwidthvs                r   
findtablesr   D  s     'Nl*E(O$q(uXq122h"eHob&99%E'N$E)/!$C s3x(A1q5>T) /0AvUQ49O (  
 D8_Qr*8'+E)$ aj )' 2HA1us7|+ 'A 6$,,QU;s1v

1779-

1T7==?3 !3 C ! +$ #(O[ ^ M5s   F	F	*F	c                .   U  H  nUS   S:X  d  M  [        US   5      S:X  d  M"  [        R                  " US   S   5      [        US   S   5      :X  d  MS  [        R	                  US   S   5      (       d  Mu  US   S   SS US'   SUS'   US   S	 M     U $ )	zwFinds sections.

The blocks must have a 'type' field, i.e., they should have been
run through findliteralblocks first.
rE   rD   r7   rt   r   r   	   underline   section)r0   r   r   
_sectionrerP   )r>   r   s     r   findsectionsr   |  s      'Nl*E(O$)!!%/!"45U8_Q=O9PP  x!344"'/!"4Qq"9E,'E'Nh"   Mr   c                    S/nU  H0  nUS   S;   d  M  US    Vs/ s H  n[        X15      PM     snUS'   M2     U $ s  snf )N)s   ``r   rE   rD   r   r7   r%   r>   r(   r?   r3   s       r   inlineliteralsr     sN    _FW:3378{C{!71-{CAhK  M Ds   <c                    SS/nU  H0  nUS   S;   d  M  US    Vs/ s H  n[        X15      PM     snUS'   M2     U $ s  snf )N)s   :hg:`s   'hg )   `r   rE   r   r7   r   r   s       r   hgroler     sS    !<0FW:33
 89{C{!71-{CAhK  M Ds   =c                    SnU[        U 5      :  af  X   S   XS-
     S   :X  a  X   S   S;   a  US-  nO1XS-
     S   (       d  US-  nOU R                  US/SSS.5        US	-  nU[        U 5      :  a  Mf  U $ )
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   rE   )rW   rX   rY   r7   r   r      margin)r7   r6   rE   rt   )r0   insert)r>   rR   s     r   
addmarginsr     s     	
A
c&k/9WAw!77FI=

=
 FAAx(FAMMseIF FA! c&k/" Mr   c                    SnU[        U 5      :  ah  X   nUS   S:X  aE  US   S   R                  S5      (       d
  US   S/:X  a  X	 U[        U 5      :  a  X   S   S:X  a  X	 OUS-  nU[        U 5      :  a  Mh  U $ )	zRemove comments.r   rE   rD   r7   rI   s   ..r   r   )r0   rM   )r>   rR   r?   s      r   prunecommentsr     s    	A
c&k/IW:%hKN%%f--81G	3v;69W#5#BIFA c&k/ Mr   c                L   U=(       d    [         R                  5       n[        R                  " SSR	                  [        U5      5      -  [        R                  S9nSnU[        U 5      :  a  UR                  X   S   S   5      nU(       a  SX   S'   X   S   S   SUR                  5       S	-
   R                  5       nX   S   S   UR                  5       S
-   S nU(       a  X   S   R                  S
SU-   5        XPU   S'   X   S   S	 US
-   nU[        U 5      :  a  M  U $ )z^
Makes the type of the block an admonition block if
the first line is an admonition directive
s   \.\. (%s)::   |)flagsr   r7   
   admonitionrE   rJ   rt   r   Nrw      admonitiontitle)_admonitiontitleskeysrecompilejoinsorted
IGNORECASEr0   rP   rQ   lowerr   )r>   admonitionsadmonitionrerR   rT   admonitiontitle	firstlines          r   findadmonitionsr     s$   
 9!2!7!7!9K::$))F;$788L 	
A
c&k/vy2156!.FIg$i1!4Q1EKKMO	(+A.quuw{}=I	(#**1fy.@A,;1I()	(#A&E c&k/ 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                &   SR                  [        [        R                  U S   5      5      n[        R
                  " U S   5      nUS-
  nU S   nSU S   SXS-
  -  4-  nS[        R
                  " U5      S-   -  nS[        R                  " X$XgS9-  $ )	NrH   r7   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7D  y!12H!)KN#GeI.8J0KLLJ**:6:;J*	
 r   c                \   US::  a  SnSU S   -  nU S   S:X  a  [         U S      nU S   (       d  X#-   S	-   $ [        U S   S
   5      [        U S   S
   R                  5       5      -
  nX$S-  -   nSR                  [	        [
        R                  U S   5      5      nSX#-   [        R                  " XaXUS94-  $ U S   S:X  a  g	U S   S:X  a"  US-  nUS	U-   R                  U S   5      -   S	-   $ U S   S:X  a/  [        R                  " U S   S   5      U S   -  nSX S   S   X'4-  $ U S   S:X  Ga4  U S   n[        U6  V	V
s/ s H3  n	[        U	 V
s/ s H  n
[        R                  " U
5      PM     sn
5      PM5     nn	n
Sn[        U5      [        U5      -   S-
  nSU S   -  nS[        U5      U-   US
   -
  -  nU H  n/ n[        X5       H6  u  nnSU[        R                  " U5      -
  -  nUR                  UU-   5        M8     SR                  U5      n[        R                  " XX$S9nU(       d&  U S   (       a  US	-   U-   S[        X5      -  -   S	-   nM  XnS	-   -  nM     U$ U S   S:X  a  X S   S   -   n[        U S   S
   5      [        U S   S
   R                  5       5      -
  nX$S-  -   nSR                  [	        [
        R                  U S   SS 5      5      nSU[        R                  " XaXUS94-  $ UnU S   S:X  a`  U S   S   R!                  S5      (       a  U S   S   SS U S   S'   O["        R%                  U S   S   5      nUUR'                  5       S-  -   nO}U S   S:X  a`  U S   nU[(        S-  -   n[        U5      S-   [(        :  a  UR+                  U5      nOUR+                  [(        5      nUU S   S   -   U S   S'   OU S   S:X  a  [-        X5      $ SR                  [	        [
        R                  U S   5      5      n[        R                  " XaUUS9S	-   $ s  sn
f s  sn
n	f ) z"Format a block according to width.r   N   rH   r6   rE   r   r   r7   r-   rF   s   %s
%s
)r   r   r   r   rK   s     r   r   s
   %s%s
%s%s
r   r   r   r   r   rZ   NrW   s   | rt   rY   rn   rX   )r   r0   r1   r   r   r   r{   r	   r   r   r   zipr|   sumr=   r<   rM   rO   rP   rQ   _fieldwidthljustr   )r   r   rA   
admonitionhang	defindentr'   	underlinetabler   ewidthsspanr   r3   wr   padterm	subindentrT   rp   s                         r   formatblockr     s   zE)$$FW~&&u-?'@A
X&..5?2&'#eHob.A.H.H.J*KKD[(	yyU[[%/:;OOi
 
 	
 W~"W~#%--eHo>>FFW~#%%eHoa&89E,<OO	&/!*<f!PPPW~!hBEu+N+Q#Q7Qx((+Q78+N6{S[(1,i((s6{T)F2J67CAF(1a("3"3A"667S! ) 		!A6A E),5y6)DC4D,EEME	!  W~&h**5?2&'#eHob.A.H.H.J*KKD[(	yyU[[%/!"*=>?OOi
 
 	
 IW~"?1((// "'x!3AB!7E(OAh 23A4/I	w8	#Fm[4//	s8a<+%))E"C ))K(C 5?1#55h	w9	$E))99SeHo67D&Y	
 	m 8Ns   >P( P#-P(#P(c                  ^^ / mSn/ mS nUU4S jnU  Vs/ s H  oDS   S:w  d  M  UPM     n n[        U 5       GH  u  pTUS   nUS   nUS   nUS:X  aX  U" [        US	      5      n	U" S
R                  [        [        R
                  U5      5      5      n
TR                  SX4-  5        GOUS:X  a+  TR                  SU" SR                  U5      5      -  5        GOUS:X  a  GOUS:X  a+  TR                  SU" SR                  U5      5      -  5        GOUS:X  aC  US   nX;  a  X-  nUR                  U5      S-   nTR                  SXr" US   5      U4-  5        GOGUS:X  a  US   nTR                  S5        U H  nTR                  S5        U HM  nTR                  S5        TR                  U" U5      5        TR                  S5        TR                  S5        MO     TR                  5         TR                  S5        M     TR                  S5        GOUS:X  a]  U" SU5        U" US   5      nU" S
R                  [        [        R
                  USS 5      5      5      n
TR                  S X4-  5        GO'US!:X  ab  US   R                  S
S5      u  nnUS";   a
  U" S#U5        O	U" S$U5        TR                  S%U" S
R                  U/USS -   5      5      -  5        OUS&:X  aZ  U" SU5        U" US'   5      nU" S
R                  [        [        R
                  U5      5      5      n
TR                  S UU
4-  5        O_US(:X  aY  U" SU5        U" US)   5      nU" S
R                  [        [        R
                  U5      5      5      nTR                  S UU4-  5        T(       d  GMw  TS*   u  nnU[        U 5      S-
  :X  a'  TR                  S+U-  5        TR                  5         GM  XS-      nUS   nUU:  d  UU:X  d  GM  US   S,;  d  GM  TR                  S+U-  5        TR                  5         GM     SR                  T5      $ s  snf )-zFormat RST blocks as HTMLr   c                0    [         R                  " U S5      $ )NT)r   escaper   s    r   r   formathtml.<locals>.escapen  s    zz!T""r   c                z   > T(       a  TS   S   U :w  a'  TR                  X45        TR                  SU -  5        g g )NrF   r   s   <%s>
)r=   )r   levellistnestouts     r   openlistformathtml.<locals>.openlistq  s9    8B<?e3OOUN+JJy5() 4r   rE   r   r6   r7   r   r   rH   s   <p>
<b>%s</b> %s
</p>
rD   s   <p>
%s
</p>
r-   rK   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>
rZ   s   dlNs    <dt>%s
 <dd>%s
rW   )   *r   s   uls   ols	    <li> %s
rY   rn   rX   rx   rF   s   </%s>
s   definition bullet field option)rd   r   r   r   r   r{   r=   indexpopr9   r0   )r>   
headernestr   r   r?   r   btyper   r@   r   r'   rR   r   r   r   r   bulletheadrp   r   r   r   nbnir   r   s                           @@r   
formathtmlr   g  s    CJH#*
  ;AW:#:aF;F#'
)(M! 1!4F2G HIJ$))CU$;<=DJJ3z6HHIl"JJ)F5::e3D,EEFij JJ-uzz%7H0IIJj ,A"
$$Q'!+EJJ)UF584De,LLMhhKEJJ|$

7#AJJw'JJvay)JJx(JJu%	 
 	

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

:-.!G_	]:%K7+LLJJzE12LLNO $R 88C=W <s
   QQc                d   [        U 5      nU H  nUS==   U-  ss'   M     [        U5      n[        U5      n[        XB=(       d    / 5      u  pF[	        U5      n[        U5      n[        U5      n[        U5      n[        U5      n[        U5      n[        XCS9n[        U5      n[        U5      nXF4$ )z Parse text into a list of blocksr6   )r   )rB   rU   r   r   r   r   r   rj   rr   r   r   r   r   )r'   rA   r   r   r>   r?   r   s          r   parser     s    F	) v&FF$VZR8NF&!FF#FF^FV$Ff%Fv&FV=FF6"F>r   c                >   ^ SR                  U4S jU  5       5      nU$ )Nr   c              3  <   >#    U  H  n[        UT5      v   M     g 7fr/   r   r2   r?   r   s     r   r4   formatblocks.<locals>.<genexpr>       :6aK5))6   r   )r>   r   r'   s    ` r   formatblocksr     s    88:6::DKr   c                :   ^ SR                  U4S jU  5       5      $ )z"Format parsed blocks as plain textr   c              3  <   >#    U  H  n[        UT5      v   M     g 7fr/   r   r   s     r   r4   formatplain.<locals>.<genexpr>  r   r   r   )r>   r   s    `r   formatplainr    s    88:6:::r   c                    [        XU=(       d    / 5      u  pgU(       a  [        Xe5      nUS:X  a  [        U5      $ [        XaS9$ )z-Parse and format the text according to width.s   html)r   )r   filtersectionsr   r  )r'   r   rA   r   styler   r>   r   s           r   formatr    s?    44NF0&!!6//r   c                R   / n[        U 5      n/ n Sn/ n/ nSnU[        U5      :  Gaz  X4   u  pn
X)S2	 UR                  U5        X:X  d  UR                  SU-   5      (       Ga(  XR:w  a  [        U5      n[        U5      nU(       a  X:w  a  Sn/ n[	        SUS-
  5       H_  nX.   nX:  d
  X^   U:w  d  M  UR                  [        U 5      5        X?   S   nU R                  US   5        U R                  US	   5        Ma     U(       a  UR                  U5        USS nU R                  U
5        US-   [        U5      :  aK  X4S-      S   U	:  a=  US-  nU R                  X4   S   5        US-   [        U5      :  a  X4S-      S   U	:  a  M=  US-  nU[        U5      :  a  GMz  U(       ay  UR                  5         U Hc  nU Vs/ s H  nU U   S
   S   PM     nnUS	   S-   nU U   S
   nSSR                  UUS   /-   5      R                  SS5      -  US'   XS   U2	 Me     U $ s  snf )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   FrJ   r   rt   rF   r7   s   "%s"r   r   )	_getsectionsr0   r=   rL   r   extendreverser   r%   )r>   r   parentssectionsrR   lastparents	syntheticcollapsepathnestr?   llenplenr   rh   parentsecsynrealreallines                       r   r  r    sJ    GF#HF	AKIH
c(m
 AENq?dmmD7N;;%;'7|DL$Hq$(+A$ZFyKNf$<V-&.q1c!f-c"g. , $$Q'!!*KMM! a%#h-'HUOA,>,EQhk!n- a%#h-'HUOA,>,E 	
Q9 c(m
: A89:F3K)!,D:R519Dd|H-H!DIIdhqk].B$C$K$Kc% HQK td{#  M ;s   H$c                   SnSn/ nS nU  GH9  nUS   S:X  a[  US   nXa;  a  X-  nUR                  U5      S-   nUSU nUSU U" U5      4-   nUR                  S	R                  U5      Xu/45        Mh  US   S
;   a  SnXa;  a  X-  nUR                  U5      S-   nUSU n[        S[	        U5      S-   5       H`  nX6*    nUS   U:  a    OQUS    V	s/ s H  oS   S:X  d  M  U	PM     n
n	U
(       d  M;  U
S   S   nUS   nX:  a  US-  n  OX:X  d  M[  US   n  O   USU U" U5      4-   nUR                  S	R                  U5      Xu/45        GMF  U(       d  SS/ 4/nUS   S:w  a  SnUS   nU[	        U5      :  a}  X=*    S   S   nUS   S:w  aS  US   n[	        US   5      S:  a5  U[	        US   S   5      [	        US   S   R                  S5      5      -
  -  nUU:  a  OUS-  nU[	        U5      :  a  M}  US:  a-  X=*    S   nWS   US   :w  a  US-  nUR                  SU/ 45        US   S   R                  U5        GM<     U$ s  sn	f )z=return a list of (section path, nesting level, blocks) tuplesr    c                    U S   S:X  a  U S   nOU S   S   n[         R                  " U5      R                  S5      nSU;   a  UR                  S5      S   nU$ )NrE   rY   rn   r7   r   r      ()r   r   r{   r9   )r?   r   s     r   getname_getsections.<locals>.getname+  s[    W:!&	A(AANN1##D)19a Ar   rE   r   r   r   Nr   )rZ   rY   rH   rt   rZ   rF   r6   r   r   r7   )r   r=   r   r   r0   r1   )r>   r  namessecsr  r?   rR   r   r  asiblingssiblingindentrA   pointerbindentr   sindentblevels                     r   r	  r	  %  s   DED W:#,A}	JJqMA%E<D&5MWQZM1EKK5)5#67wZ44A}	JJqMA%E<D1c$i!m,2hq6E>'*1vMv!7}1LAvM8$,RL$;My\F$-
&0 #A - &5MWQZM1EKK5)5#67a~zY&I,D	)"8nQ/2Gw'94"))"4wx01A5#s78+<Q+?'@3 ' 1! 4 ; ;D AD ( G #g-!qLG D	) Q;!(^A.Fw'1W:5!KKfb 12HQKq!m n KI Ns   I#Ic                `   [        U 6  Vs/ s H  n[        S U 5       5      PM     nnSU-  nUSR                  S U 5       5      -   S-   nU/nU  H  n/ n[        XG5       Ha  u  pSU
;   a'  SR                  S U
R                  S5       5       5      n
SU	[        R
                  " U
5      -
  -  nUR                  X-   5        Mc     UR                  USR                  U5      -   S-   5        M     U(       a!  [        U 5      S:  a  UR                  SU5        UR                  U5        U$ s  snf )zAGenerate an RST table for the given table data as a list of linesc              3  N   #    U  H  n[         R                  " U5      v   M     g 7fr/   r   r2   r   s     r   r4   maketable.<locals>.<genexpr>r  s     21(##A&&s   #%rH   c              3  ,   #    U  H
  nS U-  v   M     g7f)r   Nr  )r2   r   s     r   r4   r,  t  s     6v!TAXvs   r-   c              3  @   #    U  H  oR                  5       v   M     g 7fr/   )r1   r+  s     r   r4   r,  }  s     A.Qhhjj.s   r   rt   )	r   r|   r   r9   r   r   r=   r0   r   )datarA   headerr   r   r   r   r   r3   r   r   r   s               r   	maketabler1  o  s    =@JGJqc222JFGF]F
4996v66
6
>C%C$DAz IIA!''%.AA!h//223CHHQW % 	

6DIIaL(501  #d)a-

1cJJsOJ% Hs   D+r/   )r   NN)P   r   Ns   plainN)r   F)3__doc__
__future__r   r   i18nr    r   r   r   utilsr	   r   r   r   r   r    r%   r   r8   rB   rU   rO   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	  r1  r  r   r   <module>r8     s   # 	  
 =<<<<<0 ::&' 9x JJFG	JJ=	 ::@A

8$::n%/d *#L(V ZZ67
5p2	6 : M"+~	lx[M"x[gJ+
 YxZz(
;
05pGTr   