U
    \Sh~(                     @  sp  d Z ddlmZ ddl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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mZ ddlm Z  ddl!m"Z" ddl#m$Z$m%Z% ddl&m'Z' e"(e)Z*e+dZ,G dd dee- Z.dddddZ/G dd de.Z0G dd de.Z1G dd  d e.Z2G d!d" d"eZ3d#d$d%d&d'Z4dS )(zThe reStructuredText domain.    )annotationsN)AnyIteratorcast)Element)
directives)addnodes)desc_signaturepending_xref)Sphinx)Builder)ObjectDescription)DomainObjType)BuildEnvironment)___)XRefRole)logging)make_idmake_refnode)
OptionSpecz\.\. (.+?)::(.*)$c                   @  sr   e Zd ZU dZejejejdZded< dddddd	d
ZddddddZ	dddddZ
dddddZdS )
ReSTMarkupz-
    Description of generic reST markup.
    )ZnoindexnoindexentryZnocontentsentryr   option_specstrr	   Nonenamesigsignodereturnc                 C  s   t | j| jj| j|}|d | | jj| tt| j	d}|j
| j|||d d| jkr| | j|}|r| jd d||dd f d S )Nidsrstlocationr   entriessingle )r   envstatedocumentobjtypeappendnote_explicit_targetr   
ReSTDomain
get_domainnote_objectoptionsget_index_text	indexnode)selfr   r   r    node_iddomainZ	indextext r8   E/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/domains/rst.pyadd_target_and_index'   s    
zReSTMarkup.add_target_and_index
objectnamer   r!   c                 C  s   dS )Nr(   r8   r5   r<   r   r8   r8   r9   r3   4   s    zReSTMarkup.get_index_textztuple[str, ...])sig_noder!   c                 C  sN   d|krdS g }| j jddD ]}||d7 }q |d }t||d S )Nfullnamer8   rst:directives:)r)   ref_contextgetsplittuple)r5   r>   Zdirective_namesparentr   r8   r8   r9   _object_hierarchy_parts7   s    z"ReSTMarkup._object_hierarchy_partsc                 C  s   | dsdS | jjj}|j d}|d ^ }}|dkrFd| dS |jdkr^d|d }|dkrrd| dS |dkrd	| d
S dS )NZ
_toc_partsr(   r,   directive:optionrA   >   r7   allrole	directive.. ::)rC   r)   appconfigrF   Ztoc_object_entries_show_parentsjoin)r5   r>   rO   r,   parentsr   r8   r8   r9   _toc_entry_name@   s    


zReSTMarkup._toc_entry_nameN)__name__
__module____qualname____doc__r   flagr   __annotations__r:   r3   rG   rR   r8   r8   r8   r9   r      s   
	r   r   ztuple[str, str])dr!   c                 C  sh   |   }|ds|dfS t|}|s0|dfS | \}}|  rX|  d|   fS |  dfS dS )zParse a directive signature.

    Returns (directive, arguments) string tuple.  If no arguments are given,
    returns (directive, '').
    .r(    N)strip
startswith
dir_sig_rematchgroups)rY   dirmZ
parsed_dirZparsed_argsr8   r8   r9   parse_directiveR   s    

rc   c                   @  sP   e Zd ZdZddddddZdddddd	Zd
dddZd
dddZdS )ReSTDirectivez*
    Description of a reST directive.
    r   r	   r   r    r!   c                 C  sT   t |\}}d| d}| |d< |t||7 }t|dkrP|t||7 }|S )NrL   rM   r?   r   )rc   r\   r   	desc_namelenZdesc_addname)r5   r   r    r   argsrf   r8   r8   r9   handle_signaturej   s    zReSTDirective.handle_signaturer;   c                 C  s   t d| S )N%s (directive)r   r=   r8   r8   r9   r3   s   s    zReSTDirective.get_index_textr   r!   c                 C  s*   | j r&| jjdg }|| j d  d S )Nr@   r   )namesr)   rB   
setdefaultr-   r5   r   r8   r8   r9   before_contentv   s    zReSTDirective.before_contentc                 C  s    | j jdg }|r|  d S )Nr@   )r)   rB   rn   popro   r8   r8   r9   after_content{   s    zReSTDirective.after_contentN)rS   rT   rU   rV   ri   r3   rp   rr   r8   r8   r8   r9   rd   f   s
   	rd   c                   @  sl   e Zd ZU dZej Zded< ede	j
i dddddd	Zdddd
dddZeddddZdS )ReSTDirectiveOptionz6
    Description of an option for reST directive.
    r   r   typer   r	   re   c                 C  s   zt d| d\}}W n tk
r8   |d  }}Y nX d| d}| |d< |t||7 }|r~|td| d| 7 }| jdrd| jd  }|t||7 }|S )Nz\s*:\s+   rA   r?   r[   rt   z (%s))	rerD   r\   
ValueErrorr   rf   Zdesc_annotationr2   rC   )r5   r   r    r   argumentrf   textr8   r8   r9   ri      s    z$ReSTDirectiveOption.handle_signaturer   r   c                 C  s
  t t| jd}| j}|r<d| j|g}d||g}n
| j}|}t| j| jj	||}|d 
| | jj	| |j| j|||d |r|d  }	td| td| g}
| jd	 
d
d|
|d|	f n2|d  }	td| }| jd	 
d||d|	f d S )Nr#   -rA   r"   r$   r   rj   z:%s: (directive option)r&   pairz; r(   r'   )r   r/   r)   r0   current_directiverP   r,   r   r*   r+   r-   r.   r1   upperr   r4   )r5   r   r   r    r7   Zdirective_nameprefixZobjnamer6   keyr{   ry   r8   r8   r9   r:      s(    

"z(ReSTDirectiveOption.add_target_and_indexrl   c                 C  s"   | j jd}|r|d S dS d S )Nr@   r(   )r)   rB   rC   ro   r8   r8   r9   r|      s    z%ReSTDirectiveOption.current_directiveN)rS   rT   rU   rV   r   r   copyrX   updater   Z	unchangedri   r:   propertyr|   r8   r8   r8   r9   rs      s   
 rs   c                   @  s4   e Zd ZdZddddddZdddddd	Zd
S )ReSTRolez%
    Description of a reST role.
    r   r	   re   c                 C  s,   d| d}|  |d< |t||7 }|S )NrA   r?   )r\   r   rf   )r5   r   r    rf   r8   r8   r9   ri      s    zReSTRole.handle_signaturer;   c                 C  s   t d| S )Nz	%s (role)rk   r=   r8   r8   r9   r3      s    zReSTRole.get_index_textN)rS   rT   rU   rV   ri   r3   r8   r8   r8   r9   r      s   r   c                	   @  s   e Zd ZU dZdZdZeeddeeddeedddZe	e
edZe e d	Zd
i iZded< eddddZd/ddddddddZdddddZddddddZd dd!ddd"d#d$d%d&d'Zd dd!dd"d#d(d)d*d+Zd,dd-d.ZdS )0r/   zReStructuredText domain.r#   reStructuredTextrK   ra   zdirective-optionrJ   )rK   rH   rJ   )ra   rJ   objectsz%dict[str, dict[tuple[str, str], str]]initial_dataz&dict[tuple[str, str], tuple[str, str]]rl   c                 C  s   | j di S Nr   )datarn   )r5   r8   r8   r9   r      s    zReSTDomain.objectsNr   r   r   )r,   r   r6   r%   r!   c                 C  sV   ||f| j kr<| j ||f \}}tjtd|||f |d | jj|f| j ||f< d S )Nz4duplicate description of %s %s, other instance in %sr$   )r   loggerwarningr   r)   docname)r5   r,   r   r6   r%   r   r8   r8   r9   r1      s    
zReSTDomain.note_object)r   r!   c                 C  s8   t | j D ]$\\}}\}}||kr| j||f= qd S )N)listr   items)r5   r   typr   docZ_node_idr8   r8   r9   	clear_doc   s    zReSTDomain.clear_docz	list[str]dict[str, Any])docnames	otherdatar!   c                 C  s<   |d   D ]*\\}}\}}||kr||f| j||f< qd S r   )r   r   )r5   r   r   r   r   r   r6   r8   r8   r9   merge_domaindata   s    zReSTDomain.merge_domaindatar   r   r
   r   zElement | None)r)   fromdocnamebuilderr   targetnodecontnoder!   c              	   C  sZ   |  |}|sd S |D ]>}	| j|	|f}
|
r|
\}}t||||||d |	   S qd S )Nr[   )Zobjtypes_for_roler   rC   r   )r5   r)   r   r   r   r   r   r   Zobjtypesr,   result	todocnamer6   r8   r8   r9   resolve_xref   s    

 

zReSTDomain.resolve_xrefzlist[tuple[str, Element]])r)   r   r   r   r   r   r!   c                 C  s^   g }| j D ]N}| j||f}	|	r
|	\}
}|d| | t|||
|||d | f q
|S )Nzrst:r[   )object_typesr   rC   r-   Zrole_for_objtyper   )r5   r)   r   r   r   r   r   resultsr,   r   r   r6   r8   r8   r9   resolve_any_xref  s    

 
zReSTDomain.resolve_any_xrefz-Iterator[tuple[str, str, str, str, str, int]]c                 c  s6   | j d  D ]"\\}}\}}|||||dfV  qd S )Nr   ru   )r   r   )r5   r   r   r   r6   r8   r8   r9   get_objects  s    zReSTDomain.get_objects)N)rS   rT   rU   rV   r   labelr   r   r   rd   rs   r   r   r   Zrolesr   rX   r   r   r1   r   r   r   r   r   r8   r8   r8   r9   r/      s2   
 r/   r   r   )rN   r!   c                 C  s   |  t dddddS )Nbuiltin   T)versionZenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr/   )rN   r8   r8   r9   setup  s    
r   )5rV   
__future__r   rv   typingr   r   r   Zdocutils.nodesr   Zdocutils.parsers.rstr   Zsphinxr   Zsphinx.addnodesr	   r
   Zsphinx.applicationr   Zsphinx.buildersr   Zsphinx.directivesr   Zsphinx.domainsr   r   Zsphinx.environmentr   Zsphinx.localer   r   Zsphinx.rolesr   Zsphinx.utilr   Zsphinx.util.nodesr   r   Zsphinx.util.typingr   	getLoggerrS   r   compiler^   r   r   rc   rd   rs   r   r/   r   r8   r8   r8   r9   <module>   s4   

5<O