ó
öÀ„\c        	   @   s  d  Z  d d l Z d d l Z d d l Z d d l m Z d d l 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 e r§ e Z n  e e e e e e e e e f f f Z n  d Z e j e ƒ Z d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   sÔ   
    sphinx.util.inventory
    ~~~~~~~~~~~~~~~~~~~~~

    Inventory utility functions for Sphinx.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿN(   t   PY3(   t   logging(   t   Callablet   Dictt   IOt   Iteratort   Tuple(   t   Builder(   t   BuildEnvironmenti   i   t   InventoryFileReaderc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sg   A file reader for inventory file.

    This reader supports mixture of texts and compressed texts.
    c         C   s   | |  _  d |  _ t |  _ d  S(   Nt    (   t   streamt   buffert   Falset   eof(   t   selfR   (    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyt   __init__)   s    		c         C   s=   |  j  j t ƒ } | d k r* t |  _ n  |  j | 7_ d  S(   NR
   (   R   t   readt   BUFSIZEt   TrueR   R   (   R   t   chunk(    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyt   read_buffer/   s    c         C   sŒ   |  j  j d ƒ } | d k rK |  j  |  j d ƒ } |  j  | d |  _  n= |  j rr |  j  j d ƒ } d |  _  n |  j ƒ  |  j ƒ  } | S(   Ns   
iÿÿÿÿs   utf-8i   R
   (   R   t   findt   decodeR   R   t   readline(   R   t   post   line(    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyR   6   s    	
c         c   s.   x' |  j  s) |  j ƒ  } | r | Vq q Wd  S(   N(   R   R   (   R   R   (    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyt	   readlinesE   s    c         c   sO   t  j ƒ  } x1 |  j s? |  j ƒ  | j |  j ƒ Vd |  _ q W| j ƒ  Vd  S(   NR
   (   t   zlibt   decompressobjR   R   t
   decompressR   t   flush(   R   t   decompressor(    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyt   read_compressed_chunksL   s    
c         c   s|   d } xo |  j  ƒ  D]a } | | 7} | j d ƒ } x? | d k rs | |  j d ƒ V| | d } | j d ƒ } q5 Wq Wd  S(   NR
   s   
iÿÿÿÿs   utf-8i   (   R!   R   R   (   R   t   bufR   R   (    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyt   read_compressed_linesU   s    
(	   t   __name__t
   __module__t   __doc__R   R   R   R   R!   R#   (    (    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyR	   #   s   						t   InventoryFilec           B   sD   e  Z e d  „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   c         C   sp   t  | ƒ } | j ƒ  j ƒ  } | d k r= |  j | | | ƒ S| d k r\ |  j | | | ƒ St d | ƒ ‚ d  S(   Ns   # Sphinx inventory version 1s   # Sphinx inventory version 2s   invalid inventory header: %s(   R	   R   t   rstript   load_v1t   load_v2t
   ValueError(   t   clsR   t   urit   joinfunct   readerR   (    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyt   loadb   s    c         C   sÚ   i  } | j  ƒ  j ƒ  d } | j  ƒ  j ƒ  d } x¡ | j ƒ  D]“ } | j ƒ  j d  d ƒ \ } }	 }
 | | |
 ƒ }
 |	 d k r˜ d }	 |
 d | 7}
 n d |	 }	 |
 d | 7}
 | | |
 d f | j |	 i  ƒ | <q? W| S(	   Ni   i   t   mods	   py:modules   #module-s   py:t   #t   -(   R   R(   R   t   splitt   Nonet
   setdefault(   R,   R   R-   t   joint   invdatat   projnamet   versionR   t   namet   typet   location(    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyR)   n   s    !
&c         C   s6  i  } | j  ƒ  j ƒ  d } | j  ƒ  j ƒ  d } | j  ƒ  } d | k r] t d | ƒ ‚ n  xÒ | j ƒ  D]Ä } t j d | j ƒ  ƒ } | s” qj n  | j ƒ  \ }	 }
 } } } |
 d k rÝ |
 | k rÝ |	 | |
 k rÝ qj n  | j d ƒ rý | d  |	 } n  | | | ƒ } | | | | f | j |
 i  ƒ |	 <qj W| S(   Ni   R   s-   invalid inventory header (not compressed): %ss.   (?x)(.+?)\s+(\S*:\S*)\s+(-?\d+)\s+(\S+)\s+(.*)s	   py:moduleu   $iÿÿÿÿ(	   R   R(   R+   R#   t   ret   matcht   groupst   endswithR6   (   R,   R   R-   R7   R8   R9   R:   R   t   mR;   R<   t   prioR=   t   dispname(    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyR*      s(    	( c         C   s}  d „  } t  t j j | ƒ d ƒ S} | j d | | j j ƒ | | j j ƒ f j d ƒ ƒ t	 j
 d ƒ } xï t | j j ƒ  ƒ D]Ø \ } } xÉ t | j ƒ  ƒ D]µ \ }	 }
 } } } } | j |	 ƒ râ | t |	 ƒ  d } n  | j | ƒ } | r| d | 7} n  |
 |	 k rd }
 n  d	 |	 | | | | |
 f } | j | j | j d ƒ ƒ ƒ q£ Wq„ W| j | j ƒ  ƒ Wd  QXd  S(
   Nc         S   s   t  j d d |  ƒ S(   Ns   \s+t    (   R>   t   sub(   t   string(    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyt   escape¢   s    t   wbup   # Sphinx inventory version 2
# Project: %s
# Version: %s
# The remainder of this file is compressed using zlib.
s   utf-8i	   t   $R2   u   -u   %s %s:%s %s %s %s
(   t   opent   ost   pathR7   t   writet   configt   projectR:   t   encodeR   t   compressobjt   sortedt   domainst   itemst   get_objectsRA   t   lent   get_target_urit   compressR   (   R,   t   filenamet   envt   builderRH   t   ft
   compressort
   domainnamet   domainR;   RD   t   typt   docnamet   anchorRC   R-   t   entry(    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyt   dumpŸ   s(    		 "(	'(   R$   R%   t   classmethodR0   R)   R*   Re   (    (    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyR'   a   s   i @  (   R&   RL   R>   R   t   sixR    t   sphinx.utilR   R   t   typingR   R   R   R   R   t   sphinx.buildersR   t   sphinx.environmentR   t   strt   unicodet	   InventoryR   t	   getLoggerR$   t   loggert   objectR	   R'   (    (    (    s4   lib/python2.7/site-packages/sphinx/util/inventory.pyt   <module>
   s    (	->