B
    d                 @   s  d Z ddlmZmZmZ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ee'ef dddZ(dS )zThe index domain.    )TYPE_CHECKINGAnyDictIterableListTuple)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eee	e
eeeeef  f dddZedddd	Zee edd
ddZeeeddddZdS )IndexDomainzMathematics domain.index)returnc             C   s   | j di S )Nentries)data
setdefault)self r   a/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/domains/index.pyr      s    zIndexDomain.entriesN)docnamer   c             C   s   | j |d  d S )N)r   pop)r   r   r   r   r   	clear_doc!   s    zIndexDomain.clear_doc)docnames	otherdatar   c             C   s$   x|D ]}|d | | j |< qW d S )Nr   )r   )r   r"   r#   r   r   r   r   merge_domaindata$   s    
zIndexDomain.merge_domaindata)envr   documentr   c             C   s   | j |jg }xt|tjD ]}y(x"|d D ]}t|d |d  q2W W n@ tk
r } z"t	j
t||d |j| W dd}~X Y q"X x|d D ]}|| qW q"W dS )z7Process a document after it is read by the environment.r   r      )locationN)r   r   r   listfindallr   r   r   
ValueErrorloggerwarningstrparentremoveappend)r   r%   r   r&   r   nodeentryexcr   r   r   process_doc(   s    zIndexDomain.process_doc)__name__
__module____qualname____doc__namelabelpropertyr   r.   r   r   r   r!   r   r$   r   r	   r5   r   r   r   r   r      s   *r   c               @   sF   e Zd ZU dZdZdZdZdZdej	iZ
eed< ee dd	d
ZdS )IndexDirectivez0
    Directive to add entries to the index.
    Fr'   r   Tr:   option_spec)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< | | x(|D ] }|d	 t||d d  qW ||gS )Nr   
r:    )nameszindex-%sr   )idsr   FinlinerB   )	argumentssplitoptionsr   targetr%   new_serialnostater&   Znote_explicit_targetr   r   set_source_infoextendr   )r   rD   Z
targetnameZ
targetnodeZtargetidZ	indexnoder3   r   r   r   runC   s    



 zIndexDirective.runN)r6   r7   r8   r9   Zhas_contentZrequired_argumentsZoptional_argumentsZfinal_argument_whitespacer   Z	unchangedr>   r   __annotations__r   r	   rL   r   r   r   r   r=   7   s   
r=   c               @   s*   e Zd Zeee ee f dddZdS )	IndexRole)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 )
Nzindex-%sr   !r'   Zsinglemainr@   )r   )rB   )r%   rH   Zhas_explicit_titletitler   rG   
startswithr   r   r   TextrJ   )r   Z	target_idrQ   r   r   rG   textr   r   r   rL   X   s    

zIndexRole.runN)r6   r7   r8   r   r   r	   r
   rL   r   r   r   r   rN   W   s   rN   r   )appr   c             C   s2   |  t | dt | dt  dddddS )Nr   builtinr'   T)versionZenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr   Zadd_directiver=   Zadd_rolerN   )rU   r   r   r   setupn   s    
rX   N))r9   typingr   r   r   r   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   	getLoggerr6   r,   r   r=   rN   r.   rX   r   r   r   r   <module>   s$    
 