
    Ri                    J   d 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 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mZ ddlmZ ddlm Z  ddl!m"Z"m#Z#  ejH                  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)nodes)
directives)addnodes)Domain)logging)ReferenceRoleSphinxDirective)split_index_msg)process_index_entry)Set)AnyClassVar)Nodesystem_message)Sphinx)BuildEnvironment)ExtensionMetadata
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Index domain.indexc                :    | j                   j                  di       S Nentries)data
setdefault)selfs    L/home/agent/.friday_env/lib/python3.12/site-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                  j                  g       }t	        |j                  t        j                              D ]:  }|d   }	 |D ]  \  }}}	}
}t        ||        	 |D ]  }|j                  |        < y# t        $ rF}t        j                  t        |      |d       |j                  j                  |       Y d}~d}~ww xY w)z7Process a document after it is read by the environment.r   r   )locationtypeN)r   r   current_documentr$   listfindallr   r   r   append
ValueErrorloggerwarningstrparentremove)r   envr$   documentr   nodenode_entries
entry_typevalue
_target_id_main_category_keyentryexcs                 r    process_doczIndexDomain.process_doc0   s    ,,))#*>*>*F*FK))(..9: 
	*D	?L*KW 7GJz5-#J67 * *ENN5)*
	*
  )s3x$WE""4(()s   "B	C& <C!!C&N)returnz6dict[str, list[tuple[str, str, str, str, str | None]]])r$   r5   rD   None)r(   zSet[str]r)   zdict[str, Any]rD   rE   )r8   r   r$   r5   r9   r   rD   rE   )__name__
__module____qualname____doc__namelabelpropertyr   r%   r*   rC    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
)IndexDirectivez&Directive to add entries to the index.F   r   TrJ   zClassVar[OptionSpec]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   
rJ    )namesindex-%sr   idsr   FinlinerX   )	argumentssplitoptionsr   targetr8   new_serialnostater9   note_explicit_targetr   r   set_source_infoextendr   )r   rZ   
targetname
targetnodetargetid	indexnoderA   s          r    runzIndexDirective.runK   s    NN1%++D1	T\\!f-Jb"ZLAJ!DHH$9$9'$BBHb"8*=J

00<NN$	!	)#	(Y' 	Ei ''#E:e+<Q+?@	 :&&r!   N)rD   z
list[Node])rF   rG   rH   rI   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer   	unchangedrQ   __annotations__rg   rM   r!   r    rO   rO   @   s;    0K $
$$)K% 'r!   rO   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 )
NrV   r   !rP   singlemainrT   r'   rW   )r8   r^   has_explicit_titletitler   r]   
startswithr   r   r   Textra   )r   	target_idru   r   r   r]   texts          r    rg   zIndexRole.runb   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)rD   z'tuple[list[Node], list[system_message]])rF   rG   rH   rg   rM   r!   r    ro   ro   a   s    )r!   ro   c                    | j                  t               | j                  dt               | j	                  dt                      dddddS )Nr   builtinrP   T)versionenv_versionparallel_read_safeparallel_write_safe)
add_domainr   add_directiverO   add_rolero   )apps    r    setupr   x   sF    NN;g~.LL)+& "#	 r!   N)r   r   rD   r   )+rI   
__future__r   typingr   docutilsr   docutils.parsers.rstr   sphinxr   sphinx.domainsr   sphinx.utilr	   sphinx.util.docutilsr
   r   sphinx.util.index_entriesr   sphinx.util.nodesr   collections.abcr   r   r   docutils.nodesr   r   sphinx.applicationr   sphinx.environmentr   sphinx.util.typingr   r   	getLoggerrF   r3   r   rO   ro   r   rM   r!   r    <module>r      sz     "    +  !  ? 5 1#$3)3@ 
		8	$*& *B'_ 'B) ).
r!   