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

    The math domain.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    )nodes)make_id)
math_block)Domain)__)XRefRole)logging)make_refnodec               @   s   e Zd Zdd ZdS )MathReferenceRolec             C   s   d|d< |gg fS )NmathZ	refdomain )selfdocumentenvnodeZis_refr   r   2lib/python3.7/site-packages/sphinx/domains/math.pyresult_nodes"   s    zMathReferenceRole.result_nodesN)__name__
__module____qualname__r   r   r   r   r   r
   !   s   r
   c               @   s   e Zd ZdZdZdZi i dZddiZede	j
diZde iZd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )
MathDomainzMathematics domain.r   Zmathematics)objectshas_equationseqzequation not found: %(target)s)displaymathNnumrefc             C   s$   dd }t ||| jd |< d S )Nc             S   s   t | tjtjfS )N)
isinstancer   r   r   )r   r   r   r   	math_node>   s    z)MathDomain.process_doc.<locals>.math_noder   )anyZtraversedata)r   r   docnamer   r   r   r   r   process_doc<   s    zMathDomain.process_docc             C   sN   x6t | jd  D ] \}\}}||kr| jd |= qW | jd |d  d S )Nr   r   )listr   itemspop)r   r    Zequation_iddoceqnor   r   r   	clear_docC   s     zMathDomain.clear_docc             C   s`   x6|d   D ]&\}\}}||kr||f| jd |< qW x"|D ]}|d | | jd |< q>W d S )Nr   r   )r#   r   )r   ZdocnamesZ	otherdatalabelidr%   r&   r    r   r   r   merge_domaindataK   s
    
zMathDomain.merge_domaindatac          
   C   s  |dkst | jd |d\}}	|r td| }
|jjrz|jjrz||jkrv|j| d |
d}	dt	t
|	}	nd}	y"|jjpd	}t|j|	d
}W nR tk
r } z4tjtd||d td|	 }td|	 }W d d }~X Y nX t||||
|S d S d S )N)r   r   r   )NNzequation-%sr   r   . z
({number}))numberzInvalid math_eqref_format: %r)locationz(%d))AssertionErrorr   getr   ZconfigZmath_numfigZnumfigZtoc_fignumbersjoinmapstrZmath_eqref_formatr   ZTextformatKeyErrorloggerZwarningr   r	   )r   r   fromdocnamebuildertyptargetr   contnoder    r,   Znode_idZeqref_formattitleexcr   r   r   resolve_xrefT   s&    
 zMathDomain.resolve_xrefc          	   C   s,   |  |||d|||}|d kr"g S |gS d S )Nr   )r=   )r   r   r6   r7   r9   r   r:   Zrefnoder   r   r   resolve_any_xrefm   s    zMathDomain.resolve_any_xrefc             C   s   g S )Nr   )r   r   r   r   get_objectsu   s    zMathDomain.get_objectsc             C   s\   | j d }||kr>||| d }td||f }t|n| |}||f||< |S d S )Nr   r   z4duplicate label of equation %s, other instance in %s)r   Zdoc2pathr   UserWarningget_next_equation_number)r   r   r    r(   Z	equationspathmsgr&   r   r   r   add_equationy   s    


zMathDomain.add_equationc                s(    fdd| j d  D }t|d S )Nc                s   g | ]}|d   kr|qS )r   r   ).0r   )r    r   r   
<listcomp>   s    z7MathDomain.get_next_equation_number.<locals>.<listcomp>r      )r   valueslen)r   r    Ztargetsr   )r    r   rA      s    z#MathDomain.get_next_equation_numberc             C   s   t | jd  S )Nr   )r   r   rH   )r   r   r   r   r      s    zMathDomain.has_equationsN)r   r   r   __doc__nameZlabelZinitial_dataZdangling_warningsr   r   r   Zenumerable_nodesr
   Zrolesr!   r'   r)   r=   r>   r?   rD   rA   r   r   r   r   r   r   (   s$   

	r   c             C   s*   |  t | dtdd dddddS )Nr   T)Zwarn_danglingZbuiltin   )versionZenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr   Zadd_roler
   )Zappr   r   r   setup   s    
rN   N)rJ   Zdocutilsr   Zdocutils.nodesr   Zsphinx.addnodesr   r   Zsphinx.domainsr   Zsphinx.localer   Zsphinx.rolesr   Zsphinx.utilr   Zsphinx.util.nodesr	   Z	getLoggerr   r5   r
   r   rN   r   r   r   r   <module>
   s   

g