U
    \ShO                     @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZ eeZG dd dZddddddddddZdddddZdddddZdddddZdddd d!ZdS )"z.Index entries adapters for sphinx.environment.    )annotationsN)groupby)AnyLiteral)Builder)BuildEnvironment)NoUri)___)logging
split_intoc                   @  s<   e Zd ZdddddZdedfdd	d
ddddZdS )IndexEntriesr   None)envreturnc                 C  s   || _ |  d S N)r   )selfr    r   [/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/environment/adapters/indexentries.py__init__   s    zIndexEntries.__init__Tz(.*) ([(][^()]*[)])r   boolz
re.Patternz'list[tuple[str, list[tuple[str, Any]]]])buildergroup_entries_fixrer   c           !      C  s\  i }| j jd }|j D ]2\}}z|d|}W n tk
rL   d}Y nX |D ]\}	}
}}}|dk	ov| d| }z|	dkrztdd|
\}}W n& tk
r   tdd|
\}d}Y nX t||||||d	 n:|	d
krtdd
|
\}}t||||||d	 t||||||d	 n|	dkrtdd|
\}}}t||d | ||||d	 t||d | ||||d	 t||d | ||||d	 n|	dkrtdd|
\}}t|t	d| d|d|d	 nL|	dkrtdd|
\}}t|t	d| d|d|d	 nt
jtd|	|d W qR tk
rJ } zt
jt||d W 5 d}~X Y qRX qRq| D ]:\}}}|jtd | D ]\}}}|jtd qvqXt| td}|rHd}i }d}|t|k rH|| \}\}}}|s8||} | r4|| dkr(|| dg i |gd | ||= q| d}n|}|}|d7 }qdd t|tD S )z7Create the real index from the collected index entries.indexZgenindexF#Zsingle       )diclinkkeypairZtriple    z, Zseezsee %sNZseealsozsee also %szunknown index entry type %r)locationr!   r   c                 S  s   g | ]\}}|t |fqS r   )list).0key_groupr   r   r   
<listcomp>s   s   z-IndexEntries.create_index.<locals>.<listcomp>)r   domainsentriesitemsZget_relative_urir   r   
ValueError
_add_entryr	   loggerwarningr
   strvaluessort_key_func_0sorted_key_func_1lenmatchr*   
setdefaultextendr   _key_func_3)!r   r   r   r   newZindex_domainZdocnamer-   Zrel_uriZ
entry_typevalueZ	target_idmaincategory_keyurientryZ	sub_entryfirstsecondthirderrtargets	sub_itemsZ_category_keysub_targets_0_sub_category_keyZnew_listold_keyZold_sub_itemsir!   mr   r   r   create_index   s    

  

    
      
  
  
(
 zIndexEntries.create_indexN)__name__
__module____qualname__r   recompilerP   r   r   r   r   r      s   r   r3   z
str | Nonezdict[str, list]zstr | Literal[False]r   )wordsubwordr@   r   r    r!   r   c                C  sF   | | g i |g}|r,|d  |g i |g}|rB|d ||f d S )Nr   r   )r;   append)rV   rW   r@   r   r    r!   rC   r   r   r   r0   w   s
    r0   ztuple[str, str]ztuple[bool, str])rC   r   c                 C  s   | \}}| |fS )z(sort the index entries for same keyword.r   )rC   r@   rB   r   r   r   r6      s    r6   ztuple[str, list]ztuple[tuple[int, str], str]c                 C  sp   | \}\}}}|r|}t d| }|dr<|dd }|dd  s\|ds\d}nd}||f| d fS )zSort the index entriesNFD   ‏r   Nr   r	   )unicodedata	normalizelower
startswithisalpha)rC   r!   Z_targetsZ
_sub_itemsrA   Zlc_keyr*   r   r   r   r8      s    
r8   c                 C  sT   t d| d  }|dr*|dd }|dd  sD|drPtd| }|S )zsort the sub-index entriesrY   r   rZ   r   Nr	      )r[   r\   r]   r^   r_   chr)rC   r!   r   r   r   _key_func_2   s    
rb   c                 C  s   | \}\}}}t dd | D td| d d< |dk	r<|S |drR|dd }td|d d  }| sz|d	kr~|S td
S )zGroup the entries by letterc                 s  s    | ]\}\}}}||fV  qd S r   r   )r(   Zsub_keyrJ   rK   rL   r   r   r   	<genexpr>   s   z_key_func_3.<locals>.<genexpr>r&   r   NrZ   rY   r   r	   ZSymbols)	r7   r.   rb   r^   r[   r\   upperr_   r	   )rC   r!   rH   rI   rA   letterr   r   r   r=      s    
r=   )__doc__
__future__r   rT   r[   	itertoolsr   typingr   r   Zsphinx.buildersr   Zsphinx.environmentr   Zsphinx.errorsr   Zsphinx.localer	   r
   Zsphinx.utilr   r   	getLoggerrQ   r1   r   r0   r6   r8   rb   r=   r   r   r   r   <module>   s"   
d	
