
    Fe~                    :   d 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 dd	lmZmZ dd
lmZ ddlmZ er 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!  ejD                  e#      Z$ G d de      Z% G d de      Z& G d de      Z'ddZ(y)zThe index domain.    )annotations)TYPE_CHECKINGAny)nodes)
directives)addnodes)Domain)logging)ReferenceRoleSphinxDirective)split_index_msg)process_index_entry)Iterable)Nodesystem_message)Sphinx)BuildEnvironment)
OptionSpecc                  B    e Zd ZdZdZdZedd       Zd	dZd
dZ	ddZ
y)IndexDomainzMathematics domain.indexc                :    | j                   j                  di       S Nentries)data
setdefault)selfs    6/usr/lib/python3/dist-packages/sphinx/domains/index.pyr   zIndexDomain.entries#   s    yy##Ir22    c                <    | j                   j                  |d        y )N)r   pop)r   docnames     r   	clear_doczIndexDomain.clear_doc'   s    $'r   c                <    |D ]  }|d   |   | j                   |<    y r   r   )r   docnames	otherdatar"   s       r   merge_domaindatazIndexDomain.merge_domaindata*   s+     	BG$-i$8$ADLL!	Br   c                   | j                   j                  |j                  g       }t        |j	                  t
        j                              D ];  }	 |d   D ]  \  }}}}	}
t        ||        	 |d   D ]  }|j                  |        = y# t        $ rE}t        j                  t        |      |       |j                  j                  |       Y d}~d}~ww xY w)z7Process a document after it is read by the environment.r   )locationN)r   r   r"   listfindallr   r   r   append
ValueErrorloggerwarningstrparentremove)r   envr"   documentr   node
entry_typevalue
_target_id_main_category_keyentryexcs                r   process_doczIndexDomain.process_doc.   s    ,,))#++r:))(..9: 		*D*MQR[_ 7IZ
E=#J67 ")_ *ENN5)*		*  )s3x$7""4(()s   B	C;CCN)returnz6dict[str, list[tuple[str, str, str, str, str | None]]])r"   r1   r?   None)r&   zIterable[str]r'   dict[str, Any]r?   r@   )r4   r   r"   r1   r5   r   r?   r@   )__name__
__module____qualname____doc__namelabelpropertyr   r#   r(   r>    r   r   r   r      s1    DE3 3(B*r   r   c                  P    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	Zy
)IndexDirectivez0
    Directive to add entries to the index.
    F   r   TrF   r   option_specc                    | j                   d   j                  d      }d| j                  v r)| j                  d   }t        j                  dd|g      }n7d| j
                  j                  d      z  }t        j                  dd|g      }| j                  j                  j                  |       t        j                         }g |d	<   d
|d<   | j                  |       |D ]&  }|d	   j                  t        ||d   d                ( ||gS )Nr   
rF    )namesindex-%sr   idsr   FinlinerT   )	argumentssplitoptionsr   targetr4   new_serialnostater5   note_explicit_targetr   r   set_source_infoextendr   )r   rV   
targetname
targetnodetargetid	indexnoder<   s          r   runzIndexDirective.runI   s    NN1%++D1	T\\!f-Jb"ZLAJ!DHH$9$9'$BBHb"8*=J

00<NN$	!	)#	(Y' 	ZEi ''(;E:eCTUVCW(XY	Z:&&r   N)r?   z
list[Node])rB   rC   rD   rE   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer   	unchangedrM   __annotations__rc   rI   r   r   rK   rK   =   s>     K $
$$K 'r   rK   c                      e Zd ZddZy)	IndexRolec                   d| j                   j                  d      z  }| j                  r#| j                  }t	        | j
                  |      }n^| j
                  j                  d      r%| j                  dd  }d| j
                  dd  |dd fg}n| j                  }d| j
                  |dd fg}t        j                  |      }t        j
                  dd|g	      }t        j                  |      }| j                  |       |||gg fS )
NrR   r   !rL   singlemainrP   r%   rS   )r4   rZ   has_explicit_titletitler   rY   
startswithr   r   r   Textr]   )r   	target_idrq   r   r   rY   texts          r   rc   zIndexRole.run^   s    !6!6w!??	""JJE)$++yAG {{%%c*

12$dkk!"oy&$OP

$dkk9b$GHw/b"9+6zz% U#vt$b((r   N)r?   z'tuple[list[Node], list[system_message]])rB   rC   rD   rc   rI   r   r   rk   rk   ]   s    )r   rk   c                    | j                  t               | j                  dt               | j	                  dt                      dddddS )Nr   builtinrL   T)versionenv_versionparallel_read_safeparallel_write_safe)
add_domainr   add_directiverK   add_rolerk   )apps    r   setupr   t   sF    NN;g~.LL)+& "#	 r   N)r   r   r?   rA   ))rE   
__future__r   typingr   r   docutilsr   docutils.parsers.rstr   sphinxr   sphinx.domainsr	   sphinx.utilr
   sphinx.util.docutilsr   r   sphinx.util.index_entriesr   sphinx.util.nodesr   collections.abcr   docutils.nodesr   r   sphinx.applicationr   sphinx.environmentr   sphinx.util.typingr   	getLoggerrB   r/   r   rK   rk   r   rI   r   r   <module>r      sv     " %  +  !  ? 5 1(3)3- 
		8	$*& *>'_ '@) ).
r   