U
    \Sh,                     @  s  d Z ddlmZ ddlmZmZm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 dd
lmZmZ ddlmZmZ ddlmZ ddlmZ erddlmZ e e!Z"G dd deZ#G dd deZ$G dd deZ%dddddZ&dS )zThe index domain.    )annotations)TYPE_CHECKINGAnyIterable)nodes)Nodesystem_message)
directives)addnodes)Domain)BuildEnvironment)loggingsplit_index_msg)ReferenceRoleSphinxDirective)process_index_entry)
OptionSpec)Sphinxc                   @  s`   e Zd ZdZdZdZeddddZddd	d
dZddddddZ	dddddddZ
dS )IndexDomainzMathematics domain.indexz6dict[str, list[tuple[str, str, str, str, str | None]]]returnc                 C  s   | j di S Nentries)data
setdefault)self r   G/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/domains/index.pyr      s    zIndexDomain.entriesstrNone)docnamer   c                 C  s   | j |d  d S )N)r   pop)r   r!   r   r   r   	clear_doc#   s    zIndexDomain.clear_doczIterable[str]dict[str, Any])docnames	otherdatar   c                 C  s    |D ]}|d | | j |< qd S r   r   )r   r%   r&   r!   r   r   r   merge_domaindata&   s    zIndexDomain.merge_domaindatar   r   )envr!   documentr   c                 C  s   | j |jg }t|tjD ]}z&|d D ]\}}}}	}
t|| q.W n@ tk
r } z"t	j
t||d |j| W 5 d}~X Y q X |d D ]}|| qq dS )z7Process a document after it is read by the environment.r   )locationN)r   r   r!   listfindallr
   r   r   
ValueErrorloggerwarningr   parentremoveappend)r   r)   r!   r*   r   nodeZ
entry_typevalueZ
_target_id_mainZ_category_keyexcentryr   r   r   process_doc*   s    zIndexDomain.process_docN)__name__
__module____qualname____doc__namelabelpropertyr   r#   r(   r9   r   r   r   r   r      s   r   c                   @  sB   e Zd ZU dZdZdZdZdZdej	iZ
ded< d	d
ddZdS )IndexDirectivez0
    Directive to add entries to the index.
    F   r   Tr>   r   option_specz
list[Node]r   c                 C  s   | j d d}d| jkr8| jd }tjdd|gd}n"d| jd }tjdd|gd}| jj	| t
 }g |d	< d
|d< | | |D ] }|d	 t||d d  q||gS )Nr   
r>    )namesindex-%sr   idsr   FinlinerI   )	argumentssplitoptionsr   targetr)   new_serialnostater*   Znote_explicit_targetr
   r   set_source_infoextendr   )r   rK   Z
targetnameZ
targetnodeZtargetidZ	indexnoder8   r   r   r   runE   s    


zIndexDirective.runN)r:   r;   r<   r=   Zhas_contentZrequired_argumentsZoptional_argumentsZfinal_argument_whitespacer	   Z	unchangedrC   __annotations__rS   r   r   r   r   rA   9   s   
 rA   c                   @  s   e Zd ZddddZdS )	IndexRolez'tuple[list[Node], list[system_message]]r   c                 C  s   d| j d }| jr*| j}t| j|}nN| jdr`| jdd  }d| jdd  |dd fg}n| j}d| j|dd fg}tj|d}t	jdd|gd	}t	
|}| | |||gg fS )
NrG   r   !rB   ZsinglemainrE   r'   rH   )r)   rO   Zhas_explicit_titletitler   rN   
startswithr
   r   r   TextrQ   )r   Z	target_idrX   r   r   rN   textr   r   r   rS   Z   s    

zIndexRole.runN)r:   r;   r<   rS   r   r   r   r   rU   Y   s   rU   r   r$   )appr   c                 C  s2   |  t | dt | dt  dddddS )Nr   builtinrB   T)versionZenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr   Zadd_directiverA   Zadd_rolerU   )r\   r   r   r   setupp   s    
r_   N)'r=   
__future__r   typingr   r   r   Zdocutilsr   Zdocutils.nodesr   r   Zdocutils.parsers.rstr	   Zsphinxr
   Zsphinx.domainsr   Zsphinx.environmentr   Zsphinx.utilr   r   Zsphinx.util.docutilsr   r   Zsphinx.util.nodesr   Zsphinx.util.typingr   Zsphinx.applicationr   	getLoggerr:   r/   r   rA   rU   r_   r   r   r   r   <module>   s&   
 