ó
öÀ„\c           @   s  d  Z  d d l m Z d d l m Z d d l m Z d d l m Z d d l	 m
 Z
 d d l m Z d d l m Z d d	 l m Z m Z e rí d d
 l m Z m Z m Z m Z m Z d d l m Z d d l m Z d d l m Z n  e j e  ƒ Z! d e
 f d „  ƒ  YZ" d „  Z# d S(   sö   
    sphinx.environment.collectors.toctree
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Toctree collector for sphinx.environment.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿ(   t   nodes(   t	   iteritems(   t   addnodes(   t   TocTree(   t   EnvironmentCollector(   t   __(   t   SphinxContentsFilter(   t   url_ret   logging(   t   Anyt   Dictt   Listt   Sett   Tuple(   t   Sphinx(   t   Builder(   t   BuildEnvironmentt   TocTreeCollectorc           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sÉ   | j  j | d  ƒ | j j | d  ƒ | j j | d  ƒ | j j | d  ƒ | j j | d  ƒ | j j | ƒ | j	 j | ƒ xC t
 | j j ƒ  ƒ D], \ } } | j | ƒ | s• | j | =q• q• Wd  S(   N(   t   tocst   popt   Nonet   toc_secnumberst   toc_fignumberst   toc_num_entriest   toctree_includest   glob_toctreest   discardt   numbered_toctreest   listt   files_to_rebuildt   items(   t   selft   appt   envt   docnamet   subfnt   fnset(    (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt	   clear_doc!   s    "c         C   sð   x  | D]˜ } | j  | | j  | <| j | | j | <| | j k r[ | j | | j | <n  | | j k r} | j j | ƒ n  | | j k r | j j | ƒ q q WxF | j j ƒ  D]5 \ } } | j j | t	 ƒ  ƒ j
 | t	 | ƒ @ƒ q³ Wd  S(   N(   R   R   R   R   t   addR   R   R   t
   setdefaultt   sett   update(   R   R    R!   t   docnamest   otherR"   R#   R$   (    (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt   merge_other0   s    c            s›   ˆ  j  j ‰ d g ‰ ‡ f d †  ‰ d ‡  ‡ ‡ ‡ ‡ ‡ f d † ‰ ˆ ˆ ƒ } | rj | ˆ  j  j ˆ <n t j d ƒ ˆ  j  j ˆ <ˆ d ˆ  j  j ˆ <d S(   s;   Build a TOC from the doctree and store it in the inventory.i    c            sk   g  } t  |  | ƒ r% | j |  ƒ n  x? |  j D]4 } t  | t j ƒ rM q/ n  | j ˆ  | | ƒ ƒ q/ W| S(   s2   Like traverse(), but stay within the same section.(   t
   isinstancet   appendt   childrenR    t   sectiont   extend(   t   nodet   clst   resultt   child(   t   traverse_in_section(    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyR6   E   s    i   c            sÔ  g  } x±|  D]©} t  | t j ƒ rs t j d | d ƒ } ˆ | | ƒ } | r | | j 7} | j | ƒ q q n  t  | t j ƒ sÚ xL ˆ | t j ƒ D]8 } | j ƒ  } | j | ƒ t	 ˆ  j
 ƒ j ˆ | ƒ q˜ Wq n  | d } t ˆ ƒ }	 | j |	 ƒ |	 j ƒ  }
 ˆ d sd } n d | d d } ˆ d c d 7<t j d d d t d ˆ d	 | |
 Œ} t j d d | ƒ } t j d | ƒ } ˆ | | d ƒ } | | 7} | j | ƒ q W| rÐt j d | Œ Sg  S(
   Nt   expri    t    t   #t   idsi   t   internalt   refurit
   anchorname(   R-   R   t   onlyR/   R.   R    R0   t   toctreet   copyR   R!   t   noteR   t	   walkaboutt   get_entry_textt	   referencet   Truet   compact_paragrapht	   list_itemt   bullet_list(   R2   t   deptht   entriest   sectionnodet   onlynodet   blistt   toctreenodet   itemt   titlet   visitort   nodetextR=   RD   t   parat   sub_item(   R    t	   build_tocR"   t   doctreet
   numentriesR6   (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyRU   Q   sF    	

	
R8   N(   R!   R"   R   R    RH   R   (   R   R    RV   t   toc(    (   R    RU   R"   RV   RW   R6   sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt   process_doc?   s    	!0c         C   s   |  j  | ƒ |  j | ƒ S(   N(   t   assign_section_numberst   assign_figure_numbers(   R   R    R!   (    (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt   get_updated_docsˆ   s    c            sÖ   g  ‰ t  ƒ  ‰ ˆ j ‰ i  ˆ _ d ‡  ‡ ‡ f d † ‰  ‡  ‡ ‡ ‡ ‡ f d †  ‰ x{ ˆ j D]p } ˆ j | ƒ ˆ j | ƒ } xK | j t j ƒ D]7 } | j	 d d ƒ } | r“ d g ‰ ˆ | | ƒ q“ q“ Wq^ Wˆ S(   sA   Assign a section number to each heading under a numbered toctree.c            sv  xo|  j  D]d} t | t j ƒ rY ˆ j d ƒ ˆ  | | | d | ƒ ˆ j ƒ  d  } q
 t | t j ƒ r‡ ˆ  | | | | ƒ d  } q
 t | t j	 ƒ rµ ˆ  | | | | ƒ d  } q
 t | t j
 ƒ rLˆ d c d 7<| d k r
t ˆ ƒ } t ˆ ƒ | | d d <n d  } d  | | d d <| | d d <| rn| | d <d  } qnq
 t | t j ƒ r
 ˆ | | ƒ q
 q
 Wd  S(   Ni    i   iÿÿÿÿR=   t	   secnumber(   R/   R-   R    RH   R.   R   R   RG   R   R>   RF   R   t   tupleR?   (   R2   t   secnumsRI   t	   titlenodet   subnodet   number(   t	   _walk_toct   _walk_toctreet   numstack(    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyRc   –   s2    
			
c      
      s  | d k r d  Sxë |  d D]ß \ } } t  j | ƒ s | d k rH q q | ˆ k r t j t d ƒ | d |  d d d d	 ƒq | ˆ j k r i  } ˆ j | <ˆ j | ƒ ˆ  ˆ j | | | ˆ j j	 | ƒ ƒ | ˆ j	 | ƒ k rú ˆ j
 | ƒ qú q q Wd  S(
   Ni    RJ   R   sA   %s is already assigned section numbers (nested numbered toctree?)t   locationt   typeRX   t   subtypet   secnum(   R   t   matcht   loggert   warningR   R   R   R&   t   titlest   getR.   (   RN   RI   RP   t   refR_   (   Rc   t   assignedR!   t   old_secnumberst   rewrite_needed(    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyRd   ¸   s     t   numberedi    N(
   R(   R   R   R   R&   t   get_doctreet   traverseR   R?   Rn   (   R   R!   R"   RV   RN   RI   (    (   Rc   Rd   Rp   R!   Re   Rq   Rr   sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyRZ   Œ   s    			"	c            s  g  } t  ƒ  ‰ ˆ j } i  ˆ _ i  ‰ ‡ f d †  ‰ ‡ f d †  ‰ ‡ ‡ f d †  ‰ ‡ ‡ f d †  ‰ ‡  ‡ ‡ ‡ ‡ f d †  ‰ ‡ ‡ ‡ f d †  ‰  ˆ j j rˆ  ˆ j j t ƒ  ƒ xE t ˆ j ƒ D]1 \ } } | | j | ƒ k rË | j | ƒ qË qË Wn  | S(   s?   Assign a figure number to each figure under a numbered toctree.c            s7   x0 ˆ  j  j ƒ  D] } | j |  ƒ } | r | Sq Wd  S(   N(   t   domainst   valuest   get_enumerable_node_typeR   (   R2   t   domaint   figtype(   R!   (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt   get_figtypeã   s
    c            sa   d | d d } ˆ  j  j |  i  ƒ } | | k rE | j | ƒ } n | j d ƒ } | p` t ƒ  S(   NR9   R:   i    R8   (   R   Rn   R^   (   R"   R0   R=   t
   secnumbersRi   (   R!   (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt   get_section_numberì   s    c            sK   ˆ j  |  i  ƒ } | ˆ  j j  } | j | d ƒ d | | <| | | f S(   Ni    i   (   R'   t   configt   numfig_secnum_depthRn   (   Rz   Ri   t   counter(   R!   t   fignum_counter(    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt   get_next_fignumber÷   s    c            sQ   ˆ  j  j |  i  ƒ ˆ  j  |  j | i  ƒ } | d d } ˆ | | ƒ | | <d  S(   NR:   i    (   R   R'   (   R"   Ri   Rz   t   fignodet
   fignumberst	   figure_id(   R!   R‚   (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt   register_fignumberÿ   s    c            s  x| j  D]ù } t | t j ƒ r` ˆ |  | ƒ } | rJ ˆ |  | | ƒ q
 ˆ |  | | ƒ q
 na t | t j ƒ rÁ xF | d D]: \ } } t j | ƒ s} | d k rª q} n  ˆ  | | ƒ q} Wq
 n  ˆ | ƒ } | ró | d ró ˆ |  | | | ƒ n  ˆ |  | | ƒ q
 Wd  S(   NRJ   R   R:   (   R/   R-   R    R0   R   R?   R   Rj   (   R"   RV   Ri   Ra   t   next_secnumRP   t
   subdocnameRz   (   t	   _walk_doct   _walk_doctreeR{   R}   R†   (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyRŠ     s"    c            s?   |  ˆ k r; ˆ j  |  ƒ ˆ j |  ƒ } ˆ  |  | | ƒ n  d  S(   N(   R&   Rt   (   R"   Ri   RV   (   RŠ   Rp   R!   (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyR‰   !  s    (	   R(   R   R~   t   numfigt
   master_docR^   R   Rn   R.   (   R   R!   Rr   t   old_fignumbersR"   t   fignums(    (	   R‰   RŠ   Rp   R!   R   R{   R‚   R}   R†   sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyR[   Ø   s"    				(   t   __name__t
   __module__R%   R,   RY   R\   RZ   R[   (    (    (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyR       s   			I		Lc         C   s&   |  j  t ƒ i d d 6t d 6t d 6S(   Nt   builtint   versiont   parallel_read_safet   parallel_write_safe(   t   add_env_collectorR   RE   (   R    (    (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt   setup1  s
    N($   t   __doc__t   docutilsR    t   sixR   t   sphinxR   t#   sphinx.environment.adapters.toctreeR   t   sphinx.environment.collectorsR   t   sphinx.localeR   t   sphinx.transformsR   t   sphinx.utilR   R   t   Falset   typingR	   R
   R   R   R   t   sphinx.applicationR   t   sphinx.buildersR   t   sphinx.environmentR   t	   getLoggerR   Rk   R   R–   (    (    (    sD   lib/python2.7/site-packages/sphinx/environment/collectors/toctree.pyt   <module>
   s"   (ÿ 