
    q&fEt                     v   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$d6d!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)d7d/Z*d0 Z+d1 Z,d8d2Z-d3 Z.d4 Z/d9d5Z0y):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'8';;<<<    c                 <    d| dt        j                  |       z  fz  S )Nr
      =r   r   s    r   
subsectionr   %   "    Ath&7&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                 >   | j                  t        j                  t        j                              }|D ]5  \  }}|j	                  |j                  d      |j                  d            }7 |j                  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   sv    $ KK(9(9:;E D1ahhw/'1BCD<<(9(9:;;r   s   \n(?:\s*\n)+c                    g }t         j                  | j                  d      j                               D ]M  }|j	                         }|st        d |D              }|D cg c]  }||d 	 }}|j                  ||d       O |S c c}w )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   f   K   | ])  }t        |      t        |j                               z
   + y wN)lenlstrip).0ls     r   	<genexpr>zfindblocks.<locals>.<genexpr>Z   s#     C#a&3qxxz?2Cs   /1N)   indent   lines)_blockresplitr0   rstrip
splitlinesminappend)r&   blocksblinesindentr2   s         r   
findblocksr@   P   s     F^^DKK.5578 @CUCCF)./AQvwZ/E/MMf>?@ M 0s   !Bc                    d}|t        |       k  rd| |   d<   | |   d   d   j                  d      r|dz   t        |       k  r~| |   d   }| |dz      d   |z
  }| |   d   dgk(  r	| |= |dz  }n| |   d   d   j                  d	      r| |   d   d   d
d | |   d   d<   nyt        | |   d         dk(  rN| |   d   d   j                  d      j                  d      r%| |   d   d   j	                  dd      dk(  r|dz  }| |   d   d   d
d | |   d   d<   t
        j                  | |   d   d         }|r&||j                         z  }||j                         z  }|dz   t        |       k  rQ| |dz      d   |kD  rCd| |dz      d<   | |dz      dxx   |z  cc<   |dz  }|dz   t        |       k  r| |dz      d   |kD  rC|dz  }|t        |       k  r| 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   typer5   s   ::r   r4   s    ::N       ..       literal)r/   endswithr0   
startswithfind	_bulletrematchend)r<   ir?   
adjustmentms        r   findliteralblocksrS   `   sV    	
A
c&k/ *q	'!9Xr"++E2q1us6{7JAYy)FAy1F:Jay"ug-1IQ8$R(11&9 +1)H*=b*A#2*Fq	(#B'F1Ih'(A-1Ih'*11$7BB6J1Ih'*//a8B> Q +1)H*=b*A#2*Fq	(#B' q	( 3A 67A!%%'!aeeg%
 a%#f+%&Q-	*BV*K)3q1ug&q1u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                    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(  rz| |   d   }|D ]m  \  }}} ||d||      sg }t        |      D ]B  \  }	}
 |||	||      r|j                  |g | |   d   d       |d   d   j                  |
       D || ||dz     n |dz  }|t	        |       k  r| S )zSplit paragraphs into lists.   bulletT   option   field
   definitionFc                     | |   }|dz   t        |       k  xr | |dz      xs d}|j                  |      sy|r"|dk(  xs |dd dk(  xs |j                  |      S |j                  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   rF   )r/   rN   rK   )r>   rP   itemre
singlelineline1line2s         r   rN   zsplitparagraphs.<locals>.match   s|     aAE
"3uQU|:s||E"C<L51:#5Le9LL##D))r   r   rC   rB   r5   r4   )rC   r5   r4   rD   r   )rM   	_optionre_fieldre_definitionrer/   	enumerater;   )r<   	listtypesrN   rP   r>   typerZ   r[   itemsjlines              r   splitparagraphsrg      s(    
It$	It$	8T"	u-	I* 	
A
c&k/!9W-1Ih'E,5 (fj6:6E#,U#3 	94 6:>!LL-1.0/5ay/C!" b	(+2248	9 ).F1q1u% 	
Q% c&k/& Mr      c                    d}|t        |       k  r| |   d   dk7  r|dz  }|}|t        |       k  r~| |   d   dk(  rst        j                  | |   d   d         }|j                         \  }}|| |   d   d<   |j	                  dd      | |   d<   |dz  }|t        |       k  r| |   d   dk(  rs|dz   }|t        |       k  r| S )	zFind key for field lists.r   rC   rW   r   r5   s   \:   :   key)r/   r_   rN   groupsr$   )r<   rP   re   rR   keyrests         r   updatefieldlistsro      s    	A
c&k/!9W)FA#f+o&)G"4"@vay2156A
IC%)F1Ih" #FD 9F1IfFA #f+o&)G"4"@ E c&k/ Mr   c                    d}|t        |       k  re| |   d   dk7  r|dz  } d}|}|t        |       k  r| |   d   dk(  rt        j                  | |   d   d         }|j                  d      }|j                  d      }|dd  j	                         }|j                  d      j	                         }|j                  d	      j	                         }	|| |   d   d<   d
}
|sd}
d|xr d|z  xs d
d|
||	fz  fz  }|j                         }|| |   d<   t        |t        j                  |            }|dz  }|t        |       k  r| |   d   dk(  r| || D ]  }||d<   	 |dz   }|t        |       k  re| S )Nr   rC   rV   r   r5      rH         r         s   %s%ss   -%s s	   %s--%s %s   optstr   optstrwidth)	r/   r^   rN   groupstripr8   maxr   r   )r<   rP   optstrwidthre   rR   shortoptiongroup3
longoptiondesclongoptionarg	noshortopoptblocks                r   updateoptionlistsr      s   	A
c&k/!9W*FA#f+o&)G"4	"Aq	( 3A 67A''!*KWWQZF))+J771:##%DGGAJ,,.M%)F1Ih"I"	5+ 5<	:}EE C **,C#&F1Ii k8+<+<S+ABKFA+ #f+o&)G"4	"A. Aa[ 	0E$/E.!	0EA c&k/B Mr   c                    g }d}|dz   t        |       k  r| |   d   dk(  r| |   d   d   j                  d      r| |   d   }| |dz      d   |z
  }| |   d   d   dd	 }d
}|D ]  }||j                  d      v sd} |r|j                  |       | |= |}	|dz  }|	t        |       k  r@| |	   d   |kD  r5|r| |	= n| |	   dxx   |z  cc<   |	dz  }	|	t        |       k  r| |	   d   |kD  r5|dz  }|dz   t        |       k  r| |fS )zPrune unwanted containers.

    The blocks must have a 'type' field, i.e., they should have been
    run through findliteralblocks first.
    r   r   rC   rB   r5   s   .. container::r4      NTr   F)r/   rK   r7   r;   )
r<   keepprunedrP   r?   rQ   containertypeprunecre   s
             r   prunecontainersr     sr    F	A
a%#f+
 !9W-&)H2E3

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

    Only simple one-line table elements are supported
    rC   rB   r5   rq   r   rD      tableF   headerr   r   rF   TN)	r/   _tablererN   rangera   r   getcolsr;   rx   )r<   r   divxcolumnsrowsr2   rowposnstartwidthvs                r   
findtablesr   C  s     -# 'Nl*E(O$q(uXq12h"eHob&99%E'N$E)/!$C s3xq1q5>T)qAvQUQ49O G 
 D8_Qr* !8'+E)$ aj )' 2 4HAu1us7|+ 'A 6$,,QU;s1v

1779-

1ST7==?34 C !!$ #E(O[-#^ M5s   8$E0c                    | D ]  }|d   dk(  st        |d         dk(  st        j                  |d   d         t        |d   d         k(  sLt        j	                  |d   d         sh|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.
    rC   rB   r5   rq   r   r   	   underline   section)r/   r   r   
_sectionrerN   )r<   r   s     r   findsectionsr   {  s      # 'Nl*E(O$)!!%/!"45U8_Q=O9PP  x!34"'/!"4Qq"9E,'E'Nh"#  Mr   c                 t    dg}| D ]*  }|d   dv s|d   D cg c]  }t        ||       c}|d<   , | S c c}w )N)s   ``r   rC   rB   r   r5   r$   r<   r'   r=   r2   s       r   inlineliteralsr     sS    _F DW:3378{C!71f-CAhKD M Ds   5c                 v    ddg}| D ]*  }|d   dv s|d   D cg c]  }t        ||       c}|d<   , | S c c}w )N)s   :hg:`s   'hg )   `r   rC   r   r5   r   r   s       r   hgroler     sX    !<0F DW:33
 89{C!71f-CAhKD M Ds   6c                     d}|t        |       k  r`| |   d   | |dz
     d   k(  r| |   d   dv r|dz  }n-| |dz
     d   s|dz  }n| j                  |dgddd       |d	z  }|t        |       k  r`| 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   rC   )rU   rV   rW   r5   r   r      margin)r5   r4   rC   rq   )r/   insert)r<   rP   s     r   
addmarginsr     s     	
A
c&k/!9WAw!77F1I=

=
 FAAx(FAMMseIF FA! c&k/" Mr   c                     d}|t        |       k  ra| |   }|d   dk(  r@|d   d   j                  d      s	|d   dgk(  r | |= |t        |       k  r| |   d   dk(  r	| |= n|dz  }|t        |       k  ra| S )	zRemove comments.r   rC   rB   r5   rG   s   ..r   r   )r/   rK   )r<   rP   r=   s      r   prunecommentsr     s    	A
c&k/1IW:%hKN%%f-81Gq	3v;6!9W#5#B1IFA c&k/ Mr   c                 :   |xs t         j                         }t        j                  ddj	                  t        |            z  t        j                        }d}|t        |       k  r|j                  | |   d   d         }|rd| |   d<   | |   d   d   d|j                         d	z
   j                         }| |   d   d   |j                         d
z   d }|r| |   d   j                  d
d|z          || |   d<   | |   d   d= |d
z   }|t        |       k  r| S )zj
    Makes the type of the block an admonition block if
    the first line is an admonition directive
    s   \.\. (%s)::   |)flagsr   r5   
   admonitionrC   rH   rq   r   Nrt      admonitiontitle)_admonitiontitleskeysrecompilejoinsorted
IGNORECASEr/   rN   rO   lowerr   )r<   admonitionsadmonitionrerP   rR   admonitiontitle	firstlines          r   findadmonitionsr     s2   
 9!2!7!7!9K::$))F;$788L 	
A
c&k/vay2156!.F1Ig$Qi1!4Q1EKKMOq	(+A.quuw{}=Iq	(#**1fy.@A,;F1I()q	(#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                 ,   dj                  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 )	NrF   r5   ru   r   rv   s   %s%s  s    %s
)
initindent
hangindent)r   mapbytesrx   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.89K0MNNJ**:6:;J+*	
 r   c                 6   |dk  rd}d| d   z  }| d   dk(  rt         | d      }| d   s||z   d	z   S t        | d   d
         t        | d   d
   j                               z
  }||dz  z   }dj                  t	        t
        j                  | d               }d||z   t        j                  ||||      fz  S | d   dk(  ry	| d   dk(  r"|dz  }|d	|z   j                  | d         z   d	z   S | d   dk(  r0t        j                  | d   d         | d   z  }d|| d   d   ||fz  S | d   dk(  r$| d   }t        | D 	
cg c].  }	t        |	D 
cg c]  }
t        j                  |
       c}
      0 }}	}
d}t        |      t        |      z   dz
  }d| d   z  }dt        |      |z   |d
   z
  z  }|D ]  }g }t        ||      D ]4  \  }}d|t        j                  |      z
  z  }|j                  ||z          6 dj                  |      }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
   j                               z
  }||dz  z   }dj                  t	        t
        j                  | d   dd             }d|t        j                  ||||      fz  S |}| d   dk(  r[| d   d   j!                  d      r| d   d   dd | d   d<   nt"        j%                  | d   d         }||j'                         dz  z   }n{| d   dk(  r_| d   }|t(        dz  z   }t        |      dz   t(        kD  r|j+                  |      }n|j+                  t(              }|| d   d   z   | d   d<   n| d   dk(  rt-        | |      S dj                  t	        t
        j                  | d               }t        j                  ||||      d	z   S c c}
w c c}
}	w ) z"Format a block according to width.r   N   rF   r4   rC   r   r   r5   r,   rD   s   %s
%s
)r   r   r   r   rI   s     r   r   s
   %s%s
%s%s
r   r   r   r   r   rX   NrU   s   | rq   rW   rk   rV   )r   r/   r0   r   r   r   rx   r   r   r   r   zipry   sumr;   r:   rK   rM   rN   rO   _fieldwidthljustr   )r   r   r?   
admonitionhang	defindentr&   	underlinetabler   ewidthsspanr   r2   wr   padterm	subindentrR   rm   s                         r   formatblockr   
  s   zE)$$FW~&&u-?'@A
XJ&..5?2&'#eHob.A.H.H.J*KKTD[(	yyU[[%/:;ZOOEiI
 
 	
 W~"W~#%--eHo>>FFW~#%%eHoa&89E,<OO	&%/!*<fi!PPPW~!hBEu+NQ#Q7x((+78NN6{S[(1,i((s6{T)F2J67 	"CAFC( "1a("3"3A"667S!" 		!A6dA E),5y6)DCt4D,EEME	!	" W~&h**5?2&'#eHob.A.H.H.J*KKTD[(	yyU[[%/!"*=>?OOEiI
 
 	
 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	$E5))99SeHo67D&Y	
 	m 8Ns   ;P	P%	PPc                 p   g d}g d }fd}| D cg c]  }|d   dk7  s| } }t        |       D ]  \  }}|d   }|d   }|d   }|dk(  rY |t        |d	            }	 |d
j                  t        t        j
                  |                  }
j                  d|	|
fz         n|dk(  r+j                  d |dj                  |            z         n|dk(  rn|dk(  r+j                  d |dj                  |            z         n|dk(  rD|d   }||vr||z  }|j                  |      dz   }j                  d| ||d         |fz         n=|dk(  r|d   }j                  d       |D ]  }j                  d       |D ]L  }j                  d       j                   ||             j                  d       j                  d       N j                          j                  d        j                  d       n|dk(  r^ |d|        ||d         } |d
j                  t        t        j
                  |dd                   }
j                  d ||
fz         n"|d!k(  r`|d   j                  d
d      \  }}|d"v r
 |d#|       n	 |d$|       j                  d% |d
j                  |g|dd z               z         n|d&k(  rZ |d|        ||d'         } |d
j                  t        t        j
                  |                  }
j                  d ||
fz         n^|d(k(  rY |d|        ||d)         } |d
j                  t        t        j
                  |                  }j                  d ||fz         sed*   \  }}|t        |       dz
  k(  r&j                  d+|z         j                          | |dz      }|d   }||k  s||k(  s|d   d,vsƉj                  d+|z         j                           dj                        S c c}w )-zFormat RST blocks as HTMLr   c                 .    t        j                  | d      S )NT)r   escaper   s    r   r   zformathtml.<locals>.escapem  s    zz!T""r   c                 p    rd   d   | k7  r(j                  | |f       j                  d| z         y y )NrD   r   s   <%s>
)r;   )r   levellistnestouts     r   openlistzformathtml.<locals>.openlistp  s;    8B<?e3OOUEN+JJy5() 4r   rC   r   r4   r5   r   r   rF   s   <p>
<b>%s</b> %s
</p>
rB   s   <p>
%s
</p>
r,   rI   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>
rX   s   dlNs    <dt>%s
 <dd>%s
rU   )   *r   s   uls   ols	    <li> %s
rW   rk   rV   ru   rD   s   </%s>
s   definition bullet field option)ra   r   r   r   r   rx   r;   indexpopr7   r/   )r<   
headernestr   r   r=   r   btyper   r>   r   r&   rP   r   r   r   r   bulletheadrm   r   r~   r   nbnir   r   s                           @@r   
formathtmlr   f  s#    CJH#*
  ;A1W:#:a;F;F# G#Q'
)(M! 1!4F2G HIJ$))CU$;<=DJJ3z46HHIl"JJ)F5::e3D,EEFij JJ-uzz%7H0IIJj ,A
"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,d|;<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{:; #B<LE5c&kAo%

:-.C!G_	]:%K7+LLJJzE12LLNOG#R 88C=W <s
   P3P3c                 d   t        |       }|D ]  }|dxx   |z  cc<    t        |      }t        |      }t        ||xs g       \  }}t	        |      }t        |      }t        |      }t        |      }t        |      }t        |      }t        ||      }t        |      }t        |      }||fS )z Parse text into a list of blocksr4   )r   )r@   rS   r   r   r   r   r   rg   ro   r   r   r   r   )r&   r?   r   r   r<   r=   r   s          r   parser     s    F 	)v&FF$VTZR8NFF&!FF#FF^FV$Ff%Fv&FV=FF6"F6>r   c                 <    dj                  fd| D              }|S )Nr   c              3   6   K   | ]  }t        |        y wr.   r   r1   r=   r   s     r   r3   zformatblocks.<locals>.<genexpr>       :aK5):   r   )r<   r   r&   s    ` r   formatblocksr     s    88:6::DKr   c                 8    dj                  fd| D              S )z"Format parsed blocks as plain textr   c              3   6   K   | ]  }t        |        y wr.   r   r   s     r   r3   zformatplain.<locals>.<genexpr>  r   r   r   )r<   r   s    `r   formatplainr     s    88:6:::r   c                     t        | ||xs 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   r?   r   styler   r<   r   s           r   formatr     sG    44NFF0&!!6//r   c                    g }t        |       }g } d}g }g }d}|t        |      k  ri||   \  }}	}
||	d= |j                  |       ||k(  s|j                  d|z         r||k7  rt        |      }t        |      }|r||k7  rd}g }t	        d|dz
        D ]_  }||   }||k\  s	||   |k7  s|j                  t        |              ||   d   }| j                  |d          | j                  |d	          a |r|j                  |       |dd }| j                  |
       |dz   t        |      k  rJ||dz      d   |	kD  r<|dz  }| j                  ||   d          |dz   t        |      k  r||dz      d   |	kD  r<|dz  }|t        |      k  ri|ru|j                          |D ]`  }|D cg c]  }| |   d
   d    }}|d	   dz   }| |   d
   }ddj                  ||d   gz         j                  dd      z  |d<   | |d   |= b | S c c}w )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   FrH   r   rq   rD   r5   s   "%s"r   r   )	_getsectionsr/   r;   rJ   r   extendreverser   r$   )r<   r   parentssectionsrP   lastparents	syntheticcollapsepathnestr=   llenplenr   re   parentsecsynrealreallines                       r   r   r     sl    GF#HF	AKIH
c(m
 dADENq7?dmmD7N;g%;'7|DDL$Hq$(+ /A$QZFDyKNf$<V-&v.q1c!f-c"g./ $$Q'!!*KMM! a%#h-'HQUOA,>,EQhqk!n- a%#h-'HQUOA,>,E 	
Q9 c(m
:  	$A89:F3K)!,:D:R519Dd|H-H!DIIdhqk].B$C$K$Kc% HQK qtd{#	$ M ;s   +H	c                 h   d}d}g }d }| D ]  }|d   dk(  r[|d   }||vr||z  }|j                  |      dz   }|d| }|d|  ||      fz   }|j                  d	j                  |      ||gf       g|d   d
v rd}||vr||z  }|j                  |      dz   }|d| }t        dt	        |      dz         D ]U  }||    }|d   |k  r nE|d   D 	cg c]  }	|	d   dk(  s|	 }
}	|
s1|
d   d   }|d   }||k  r|dz  } n||k(  sP|d   } n |d|  ||      fz   }|j                  d	j                  |      ||gf       7|sddg fg}|d   dk7  rd}|d   }|t	        |      k  ry||    d   d   }|d   dk7  rQ|d   }t	        |d         dkD  r5|t	        |d   d         t	        |d   d   j                  d            z
  z  }||k\  rn|dz  }|t	        |      k  ry|dkD  r-||    d   }d   |d   k7  r|dz  }|j                  d|g f       |d   d   j                  |         |S c c}	w )z=return a list of (section path, nesting level, blocks) tuplesr    c                     | d   dk(  r| d   }n| d   d   }t        j                  |      j                  d      }d|v r|j                  d      d   }|S )NrC   rW   rk   r5   r   r      ()r   r   rx   r7   )r=   r   s     r   getnamez_getsections.<locals>.getname*  s[    W:!&	A(AANN1##D)19a Ar   rC   r   r   r   Nr   )rX   rW   rF   rq   rX   rD   r4   r   r   r5   )r   r;   r   r   r/   r0   )r<   r  namessecsr  r=   rP   r   r  asiblingssiblingindentr?   pointerbindentr   sindentblevels                     r   r  r  $  s   DED  6"W:#,A}	JJqMA%E<D&5MWQZM1EKK5)51#67wZ44A}	JJqMA%E<D1c$i!m, A2hq6E>'*1vM!7}1LAMM$,RL$;My\F$v-
&&0 #A &5MWQZM1EKK5)51#67a~zY&I,D	)"G8nQ/2Gw'94"))"4wx01A5#s78+<Q+?'@3 ' 1! 4 ; ;D AD ( G #g-!qLG D	) Q;!7(^A.Fw'1W:5!KKfb 12HQKq!m6"n KI Ns   H/H/c                 F   t        |  D cg c]  }t        d |D               }}d|z  }|dj                  d |D              z   dz   }|g}| D ]  }g }t        ||      D ]_  \  }	}
d|
v r'dj                  d |
j                  d      D              }
d|	t	        j
                  |
      z
  z  }|j                  |
|z          a |j                  |dj                  |      z   dz           |r t        |       dkD  r|j                  d|       |j                  |       |S c c}w )zAGenerate an RST table for the given table data as a list of linesc              3   F   K   | ]  }t        j                  |        y wr.   r   r1   r   s     r   r3   zmaketable.<locals>.<genexpr>q  s     21(##A&2s   !rF   c              3   &   K   | ]	  }d |z    yw)r   Nr  )r1   r   s     r   r3   zmaketable.<locals>.<genexpr>s  s     6!TAX6s   r,   c              3   <   K   | ]  }|j                           y wr.   )r0   r#  s     r   r3   zmaketable.<locals>.<genexpr>|  s     AQahhjAs   r   rq   )	r   ry   r   r7   r   r   r;   r/   r   )datar?   headerr   r   r   r   r   r2   r   r   r   s               r   	maketabler(  n  s%    =@JGqc222GFGF]F
4996v66
6
>C%C 	2$ 	DAqz IIA!''%.AA!h//223CHHQW	 	

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

1cJJsOJ% Hs   Dr.   )r   NN)P   r   Ns   plainN)r   F)1__doc__r   i18nr    r   r   r   utilsr   r   r   r   r   r   r$   r   r6   r@   rS   rM   r^   r_   r`   r   rg   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r(  r  r   r   <module>r.     s   
  
 =<<<<<0 2::&' 9x BJJFG	BJJ=	 2::@A

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