o
    Ni                     @  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
 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 erdd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! e"e#Z$G dd deZ%G dd deZ&G dd deZ'dddZ(dS )zThe citation domain.    )annotations)TYPE_CHECKINGAnycast)nodes)pending_xref)Domain)__)SphinxTransform)logging)copy_source_infomake_refnode)Set)Element)Sphinx)Builder)BuildEnvironment)ExtensionMetadatac                   @  s   e Zd ZdZdZdZddiZed0ddZed1d
dZ	d2ddZ
d3ddZd4ddZd5ddZd6ddZd7d*d+Zd8d-d.Zd/S )9CitationDomainzDomain for citations.citationrefzcitation not found: %(target)sreturndict[str, tuple[str, str, int]]c                 C     | j di S )N	citationsdata
setdefaultself r    K/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/domains/citation.pyr   (      zCitationDomain.citationsdict[str, set[str]]c                 C  r   )Ncitation_refsr   r   r    r    r!   r$   ,   r"   zCitationDomain.citation_refsdocnamestrNonec                 C  sp   t | j D ]\}\}}}||kr| j|= qt | j D ]\}}||hkr,| j|= q||v r5|| qd S )N)listr   itemsr$   remove)r   r%   keyfn_l_linenodocnamesr    r    r!   	clear_doc0   s   


zCitationDomain.clear_docr/   Set[str]	otherdatadict[str, Any]c                 C  sr   |d   D ]\}}|d |v r|| j|< q|d   D ]\}}| j|t }|D ]}||v r5|| q*qd S )Nr   r   r$   )r)   r   r$   r   setadd)r   r/   r2   r+   r   r$   r%   r    r    r!   merge_domaindata:   s   

zCitationDomain.merge_domaindatanodenodes.citationc                 C  sh   |d   }|| jv r#| j| j| d }tjtd|||ddd |d |d d |jf| j|< d S )Nr   z+duplicate citation %s, other instance in %sr   r   )locationtypesubtyper%   ids)astextr   envdoc2pathloggerwarningr	   line)r   r7   labelpathr    r    r!   note_citationE   s   
"zCitationDomain.note_citationr   c                 C  s&   | j |d t }|| jj d S )N	reftarget)r$   r   r4   r5   r>   r%   )r   r7   r/   r    r    r!   note_citation_referenceM   s   z&CitationDomain.note_citation_referencec                 C  sD   | j  D ]\}\}}}|| jvrtjtd|dd||fd qd S )Nz Citation [%s] is not referenced.r   r   )r:   r;   r9   )r   r)   r$   r@   rA   r	   )r   namer%   _labelidlinenor    r    r!   check_consistencyQ   s   

z CitationDomain.check_consistencyr>   r   fromdocnamebuilderr   typtargetcontnoder   Element | Nonec                 C  s,   | j |d\}}	}
|sd S t||||	|S )N) rR   r   )r   getr   )r   r>   rL   rM   rN   rO   r7   rP   r%   labelidrJ   r    r    r!   resolve_xrefW   s   zCitationDomain.resolve_xreflist[tuple[str, Element]]c              	   C  s,   |  |||d|||}|d u rg S d|fgS )Nr   )rU   )r   r>   rL   rM   rO   r7   rP   refnoder    r    r!   resolve_any_xrefa   s   
zCitationDomain.resolve_any_xrefN)r   r   )r   r#   )r%   r&   r   r'   )r/   r1   r2   r3   r   r'   )r7   r8   r   r'   )r7   r   r   r'   )r   r'   )r>   r   rL   r&   rM   r   rN   r&   rO   r&   r7   r   rP   r   r   rQ   )r>   r   rL   r&   rM   r   rO   r&   r7   r   rP   r   r   rV   )__name__
__module____qualname____doc__rH   rC   dangling_warningspropertyr   r$   r0   r6   rE   rG   rK   rU   rX   r    r    r    r!   r      s"    







r   c                   @     e Zd ZdZdZd
ddZd	S )CitationDefinitionTransformz3Mark citation definition labels as not smartquoted.k  kwargsr   r   r'   c                 K  sP   | j jj}| jtjD ]}| j j|d< || t	tj
|d }d|d< qd S )Nr%   r   Fsupport_smartquotes)r>   domainscitation_domaindocumentfindallr   r   r%   rE   r   rC   )r   rb   domainr7   rC   r    r    r!   applyp   s   


z!CitationDefinitionTransform.applyNrb   r   r   r'   rY   rZ   r[   r\   default_priorityri   r    r    r    r!   r`   k   s    r`   c                   @  r_   )CitationReferenceTransformz|
    Replace citation references by pending_xref nodes before the default
    docutils transform tries to resolve them.
    ra   rb   r   r   r'   c                 K  s   | j jj}| jtjD ]1}| }t|dd|dd|d |	dg d}|t
|d| 7 }t|| || || qd S )	Nr   r   TFr<   classes)	refdomainreftyperF   refwarnrc   r<   rn   z[%s])r>   rd   re   rf   rg   r   citation_referencer=   r   rS   inliner   replace_selfrG   )r   rb   rh   r7   rO   r   r    r    r!   ri      s   



z CitationReferenceTransform.applyNrj   rk   r    r    r    r!   rm   |   s    rm   appr   r   r   c                 C  s,   |  t | t | t dddddS )Nbuiltin   T)versionenv_versionparallel_read_safeparallel_write_safe)
add_domainr   add_transformr`   rm   )ru   r    r    r!   setup   s   


r~   N)ru   r   r   r   ))r\   
__future__r   typingr   r   r   docutilsr   sphinx.addnodesr   sphinx.domainsr   sphinx.localer	   sphinx.transformsr
   sphinx.utilr   sphinx.util.nodesr   r   collections.abcr   docutils.nodesr   sphinx.applicationr   sphinx.buildersr   sphinx.environmentr   sphinx.util.typingr   	getLoggerrY   r@   r   r`   rm   r~   r    r    r    r!   <module>   s,    
M