o
    NiR                      @  s   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ dZeeZerMddlmZmZ dd	lmZ dd
lmZ ddlmZmZmZ G dd dZG dd dZdS )z'Inventory utility functions for Sphinx.    )annotationsN)TYPE_CHECKING)__)loggingi @  )CallableIterator)Builder)BuildEnvironment)	InventoryInventoryItem_ReadableStreamc                   @  sL   e Zd ZdZdddZddd	ZdddZdddZdddZdddZ	dS )InventoryFileReaderzjA file reader for an inventory file.

    This reader supports mixture of texts and compressed texts.
    stream_ReadableStream[bytes]returnNonec                 C  s   || _ d| _d| _d S )N    F)r   buffereof)selfr    r   I/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/util/inventory.py__init__   s   
zInventoryFileReader.__init__c                 C  s,   | j t}|dkrd| _|  j|7  _d S )Nr   T)r   readBUFSIZEr   r   )r   chunkr   r   r   read_buffer#   s   zInventoryFileReader.read_bufferstrc                 C  sl   | j d}|dkr| j d |  }| j |d d  | _ |S | jr,| j  }d| _ |S |   |  }|S )N   
   r   )r   finddecoder   r   readline)r   posliner   r   r   r#   )   s   
zInventoryFileReader.readlineIterator[str]c                 c  s(    | j s|  }|r|V  | j rd S d S )N)r   r#   )r   r%   r   r   r   	readlines7   s   zInventoryFileReader.readlinesIterator[bytes]c                 c  s@    t  }| js|   || jV  d| _| jr| V  d S )Nr   )zlibdecompressobjr   r   
decompressr   flush)r   decompressorr   r   r   read_compressed_chunks=   s   z*InventoryFileReader.read_compressed_chunksc                 c  sf    d}|   D ])}||7 }|d}|dkr0|d |  V  ||d d  }|d}|dksqd S )Nr   r   r   r    )r.   r!   r"   )r   bufr   r$   r   r   r   read_compressed_linesE   s   

z)InventoryFileReader.read_compressed_linesN)r   r   r   r   )r   r   )r   r   )r   r&   )r   r(   )
__name__
__module____qualname____doc__r   r   r#   r'   r.   r0   r   r   r   r   r      s    




r   c                   @  sD   e Zd ZedddZedddZedddZedddZdS )InventoryFileclstype[InventoryFile]r   r   urir   joinfuncCallable[[str, str], str]r   r
   c                 C  sL   t |}|  }|dkr| |||S |dkr | |||S td| )Nz# Sphinx inventory version 1z# Sphinx inventory version 2zinvalid inventory header: %s)r   r#   rstripload_v1load_v2
ValueError)r6   r   r8   r9   readerr%   r   r   r   loadQ   s   zInventoryFile.loadr   joinc                 C  s   i }|   dd  }|   dd  }| D ]5}| d d\}}	}
|||
}
|	dkr9d}	|
d| 7 }
n
d|	 }	|
d| 7 }
|||
df||	i |< q|S )	N      mod	py:modulez#module-zpy:#-)r#   r;   r'   split
setdefault)r6   r   r8   rA   invdataprojnameversionr%   nametypelocationr   r   r   r<   a   s   
zInventoryFile.load_v1c                 C  s  i }|   dd  }|   dd  }i }t }|  }	d|	vr)td|	 | D ]}	tjd|	 tjd}
|
s=q-|
 \}}}}}d|vrKq-|dkrZ||v rZ||| v rZq-|dv r| d| }|||f}|	 }||v r|| |kr~|
| ntjtd	||d
dd n|||< |dr|d d | }|||}||||f}|||i |< q-|D ]}tjtd||d
dd q|S )NrB   r)   z-invalid inventory header (not compressed): %sz'(.+?)\s+(\S+)\s+(-?\d+)\s+?(\S*)\s+(.*))flags:rE   >   std:term	std:labelz3inventory <%s> contains duplicate definitions of %sintersphinxexternal)rN   subtype$r   z3inventory <%s> contains multiple definitions for %s)r#   r;   setr>   r0   rematchVERBOSEgroupsloweraddloggerdebugr   endswithrI   info)r6   r   r8   rA   rJ   rK   rL   potential_ambiguitiesactual_ambiguitiesr%   mrM   rN   priorO   dispname
definitioncontentlowercase_definitioninv_item	ambiguityr   r   r   r=   x   sd   


zInventoryFile.load_v2filenameenvr	   builderr   r   c                 C  s4  ddd}t tj|d}|d||jj d||jj d	  t	
d
}|j D ]Q}t| }|D ]F\}	}
}}}}||	rM||	d }||}|rZ|d| 7 }|
|	kr`d}
|	 d|j d| d| d| d|
 d}|||  q9q/||  W d    d S 1 sw   Y  d S )Nstringr   r   c                 S  s   t dd| S )Nz\s+ )rY   sub)rp   r   r   r   escape   s   z"InventoryFile.dump.<locals>.escapewbz(# Sphinx inventory version 2
# Project: z
# Version: z8
# The remainder of this file is compressed using zlib.
	   rW   rF   rG   rq   rQ   
)rp   r   r   r   )openospathrA   writeconfigprojectrL   encoder)   compressobjdomainssortedget_objectsra   removesuffixget_target_urirM   compressr,   )r6   rm   rn   ro   rs   f
compressordomainsorted_objectsfullnamerg   rN   docnameanchorrf   r8   entryr   r   r   dump   s4   






*"zInventoryFile.dumpN)
r6   r7   r   r   r8   r   r9   r:   r   r
   )
r6   r7   r   r   r8   r   rA   r:   r   r
   )
r6   r7   rm   r   rn   r	   ro   r   r   r   )r1   r2   r3   classmethodr@   r<   r=   r   r   r   r   r   r5   P   s    Hr5   )r4   
__future__r   rx   rY   r)   typingr   sphinx.localer   sphinx.utilr   r   	getLoggerr1   r_   collections.abcr   r   sphinx.buildersr   sphinx.environmentr	   sphinx.util.typingr
   r   r   r   r5   r   r   r   r   <module>   s"    
8