B
    \<                 @   s   d Z ddl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 ed
ZG dd deZdd ZG dd deZG dd deZG dd de	Zdd ZdS )z
    sphinx.domains.rst
    ~~~~~~~~~~~~~~~~~~

    The reStructuredText domain.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)	iteritems)addnodes)ObjectDescription)DomainObjType)_)XRefRole)make_refnodez\.\. (.+?)::(.*)$c               @   s    e Zd ZdZdd Zdd ZdS )
ReSTMarkupz-
    Description of generic reST markup.
    c             C   s   | j d | }|| jjjkr|d | |d | | j |d< | jj| | jjd d }| j |f}||kr| j	j
jd| j |f d | j||  | jd	 | jj||< | | j |}|r| jd
 d||dd f d S )N-namesidsfirstrstobjectsz duplicate description of %s %s, zother instance in )lineentriesZsingle )objtypestateZdocumentr   appendr   Znote_explicit_targetenvZ
domaindataZstate_machineZreporterZwarningZdoc2pathlinenodocnameget_index_textZ	indexnode)selfnamesigsignodeZ
targetnamer   keyZ	indextext r    1lib/python3.7/site-packages/sphinx/domains/rst.pyadd_target_and_index(   s"    
 
zReSTMarkup.add_target_and_indexc             C   s0   | j dkrtd| S | j dkr,td| S dS )N	directivez%s (directive)rolez	%s (role)r   )r   r   )r   Z
objectnamer   r    r    r!   r   >   s
    

zReSTMarkup.get_index_textN)__name__
__module____qualname____doc__r"   r   r    r    r    r!   r
   #   s   r
   c             C   sP   |   }|ds|dfS t|}|s0|dfS | \}}|  d|   fS )zParse a directive signature.

    Returns (directive, arguments) string tuple.  If no arguments are given,
    returns (directive, '').
    .r    )strip
startswith
dir_sig_rematchgroups)ddirmZ
parsed_dirZparsed_argsr    r    r!   parse_directiveG   s    

r3   c               @   s   e Zd ZdZdd ZdS )ReSTDirectivez*
    Description of a reST directive.
    c             C   sD   t |\}}d| }|t||7 }t|dkr@|t||7 }|S )Nz.. %s::r   )r3   r   	desc_namelenZdesc_addname)r   r   r   r   argsr5   r    r    r!   handle_signature]   s    zReSTDirective.handle_signatureN)r%   r&   r'   r(   r8   r    r    r    r!   r4   Y   s   r4   c               @   s   e Zd ZdZdd ZdS )ReSTRolez%
    Description of a reST role.
    c             C   s   |t d| d| 7 }|S )Nz:%s:)r   r5   )r   r   r   r    r    r!   r8   k   s    zReSTRole.handle_signatureN)r%   r&   r'   r(   r8   r    r    r    r!   r9   g   s   r9   c               @   s~   e Zd ZdZdZdZeeddeedddZe	e
dZe e dZd	i iZd
d Zdd Zdd Zdd Zdd ZdS )
ReSTDomainzReStructuredText domain.r   ZreStructuredTextr#   r1   r$   )r#   r$   )r1   r$   r   c             C   s@   x:t | jd  D ]$\\}}}||kr| jd ||f= qW d S )Nr   )listdataitems)r   r   typr   docr    r    r!   	clear_doc   s     zReSTDomain.clear_docc             C   s<   x6|d   D ]&\\}}}||kr|| jd ||f< qW d S )Nr   )r=   r<   )r   ZdocnamesZ	otherdatar>   r   r?   r    r    r!   merge_domaindata   s    zReSTDomain.merge_domaindatac          	   C   s\   | j d }| |}	xB|	D ]:}
|
|f|krt||||
|f |
d | ||d |
 S qW d S )Nr   r   r*   )r<   Zobjtypes_for_roler	   )r   r   fromdocnamebuilderr>   targetnodecontnoder   Zobjtypesr   r    r    r!   resolve_xref   s    




zReSTDomain.resolve_xrefc       
      C   sr   | j d }g }x^| jD ]T}	|	|f| j d kr|d| |	 t||||	|f |	d | ||d |	 f qW |S )Nr   zrst:r   r*   )r<   object_typesr   Zrole_for_objtyper	   )
r   r   rB   rC   rD   rE   rF   r   Zresultsr   r    r    r!   resolve_any_xref   s    


zReSTDomain.resolve_any_xrefc             c   s>   x8t | jd D ]&\\}}}|||||d | dfV  qW d S )Nr   r      )r   r<   )r   r>   r   r   r    r    r!   get_objects   s    zReSTDomain.get_objectsN)r%   r&   r'   r(   r   Zlabelr   r   rH   r4   r9   Z
directivesr   ZrolesZinitial_datar@   rA   rG   rI   rK   r    r    r    r!   r:   q   s   
r:   c             C   s   |  t dddddS )NZbuiltinrJ   T)versionZenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr:   )Zappr    r    r!   setup   s
    
rM   )r(   reZsixr   Zsphinxr   Zsphinx.directivesr   Zsphinx.domainsr   r   Zsphinx.localer   Zsphinx.rolesr   Zsphinx.util.nodesr	   compiler-   r
   r3   r4   r9   r:   rM   r    r    r    r!   <module>
   s   
$
B