
    Fe1                    "   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rddlmZ ddlmZ ddlmZ ddlmZ  ej<                  e      Z  G d de      Z! G d de      Z" G d de      Z#ddZ$y)zThe citation domain.    )annotations)TYPE_CHECKINGAnycast)nodes)pending_xref)Domain)__)SphinxTransform)logging)copy_source_infomake_refnode)Element)Sphinx)Builder)BuildEnvironmentc                      e Zd ZdZdZdZddiZedd       Zedd       Z	ddZ
ddZdd	Zdd
ZddZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZy)CitationDomainzDomain for citations.citationrefzcitation not found: %(target)sc                :    | j                   j                  di       S )N	citationsdata
setdefaultselfs    9/usr/lib/python3/dist-packages/sphinx/domains/citation.pyr   zCitationDomain.citations%   s    yy##K44    c                :    | j                   j                  di       S )Ncitation_refsr   r   s    r   r!   zCitationDomain.citation_refs)   s    yy##OR88r   c                2   t        | j                  j                               D ]  \  }\  }}}||k(  s| j                  |=  t        | j                  j                               D ]/  \  }}||hk(  r| j                  |= ||v s|j	                  |       1 y )N)listr   itemsr!   remove)r   docnamekeyfn_l_linenodocnamess          r   	clear_doczCitationDomain.clear_doc-   s    &*4>>+?+?+A&B 	("C""b'W}NN3'	( "$"4"4":":"<= 	)MCG9$&&s+H$(		)r   c                    |d   j                         D ]  \  }}|d   |v s|| j                  |<    |d   j                         D ]F  \  }}| j                  j                  |t	                     }|D ]  }||v s|j                  |        H y )Nr   r   r!   )r$   r   r!   r   setadd)r   r+   	otherdatar'   r   r!   r&   s          r   merge_domaindatazCitationDomain.merge_domaindata7   s    ";/557 	+ICAw("&*s#	+ #?399; 	/IC ..99#suEM /h&!%%g./	/r   c                .   |d   j                         }|| j                  v rO| j                  j                  | j                  |   d         }t        j                  t        d      |||dd       |d   |d   d   |j                  f| j                  |<   y )Nr   z+duplicate citation %s, other instance in %sr   r   )locationtypesubtyper&   ids)astextr   envdoc2pathloggerwarningr
   line)r   nodelabelpaths       r   note_citationzCitationDomain.note_citationB   s    Q DNN"88$$T^^E%:1%=>DNN2KLeUY$(uj  J!%i$u+a.$)) Lur   c                    | j                   j                  |d   t                     }|j                  | j                  j
                         y )N	reftarget)r!   r   r.   r/   r8   r&   )r   r=   r+   s      r   note_citation_referencez&CitationDomain.note_citation_referenceJ   s7    %%00k1BCEJTXX%%&r   c           	         | j                   j                         D ]=  \  }\  }}}|| j                  vst        j	                  t        d      |dd||f       ? y )Nz Citation [%s] is not referenced.r   r   )r4   r5   r3   )r   r$   r!   r:   r;   r
   )r   namer&   _labelidlinenos        r   check_consistencyz CitationDomain.check_consistencyN   sc    151E1E1G 	[-D-7Hf4---r"DEt$):RXHY  [	[r   c                f    | j                   j                  |d      \  }}	}
|sy t        ||||	|      S )N) rJ   r   )r   getr   )r   r8   fromdocnamebuildertyptargetr=   contnoder&   labelidrG   s              r   resolve_xrefzCitationDomain.resolve_xrefT   s?     $(>>#5#5fk#J &G['#X/ 	/r   c           	     B    | j                  |||d|||      }|g S d|fgS )Nr   )rR   )r   r8   rL   rM   rO   r=   rP   refnodes           r   resolve_any_xrefzCitationDomain.resolve_any_xref^   s9     ##CgufdT\]?IG$%%r   N)returnzdict[str, tuple[str, str, int]])rV   zdict[str, set[str]])r&   strrV   None)r+   z	list[str]r0   dict[str, Any]rV   rX   )r=   znodes.citationrV   rX   )r=   r   rV   rX   )rV   rX   )r8   r   rL   rW   rM   r   rN   rW   rO   rW   r=   r   rP   r   rV   zElement | None)r8   r   rL   rW   rM   r   rO   rW   r=   r   rP   r   rV   zlist[tuple[str, Element]])__name__
__module____qualname____doc__rE   r>   dangling_warningspropertyr   r!   r,   r1   r@   rC   rH   rR   rU    r   r   r   r      s    DE 	/ 5 5 9 9)	/M'[//'*/2>/JQ/(/&!$&,8&DK&7&r   r   c                      e Zd ZdZdZddZy)CitationDefinitionTransformz3Mark citation definition labels as not smartquoted.k  c                J   t        t        | j                  j                  d            }| j                  j                  t        j                        D ]N  }| j                  j                  |d<   |j                  |       t        t        j                  |d         }d|d<   P y )Nr   r&   r   Fsupport_smartquotes)r   r   r8   
get_domaindocumentfindallr   r   r&   r@   r>   )r   kwargsdomainr=   r>   s        r   applyz!CitationDefinitionTransform.applyl   s    ndhh&9&9*&EFMM))%..9 	1D"hh..DO  & d1g.E+0E'(	1r   Nri   r   rV   rX   rZ   r[   r\   r]   default_priorityrk   r`   r   r   rb   rb   h   s    =	1r   rb   c                      e Zd ZdZdZddZy)CitationReferenceTransformz|
    Replace citation references by pending_xref nodes before the default
    docutils transform tries to resolve them.
    rc   c                   t        t        | j                  j                  d            }| j                  j                  t        j                        D ]  }|j                         }t        |dd|dd|d   |j                  dg             }|t        j                  |d|z        z  }t        ||       |j                  |       |j                  |        y )	Nr   r   TFr6   classes)	refdomainreftyperB   refwarnre   r6   rr   z[%s])r   r   r8   rf   rg   rh   r   citation_referencer7   r   rK   inliner   replace_selfrC   )r   ri   rj   r=   rO   r   s         r   rk   z CitationReferenceTransform.apply   s    ndhh&9&9*&EFMM))%*B*BC 	0D[[]FvU)/38#';'+xx	2'>	@C
 5<<88CT3'c" **3/	0r   Nrl   rm   r`   r   r   rp   rp   x   s     0r   rp   c                    | j                  t               | j                  t               | j                  t               dddddS )Nbuiltin   T)versionenv_versionparallel_read_safeparallel_write_safe)
add_domainr   add_transformrb   rp   )apps    r   setupr      sD    NN>"1201 "#	 r   N)r   r   rV   rY   )%r]   
__future__r   typingr   r   r   docutilsr   sphinx.addnodesr   sphinx.domainsr	   sphinx.localer
   sphinx.transformsr   sphinx.utilr   sphinx.util.nodesr   r   docutils.nodesr   sphinx.applicationr   sphinx.buildersr   sphinx.environmentr   	getLoggerrZ   r:   r   rb   rp   r   r`   r   r   <module>r      su     " + +  ( !  -  <&)'3 
		8	$J&V J&Z1/ 1 0 00
r   