B
    ÿ‹dy>  ã               @   sf  U d Z ddlZddlmZmZmZmZmZmZm	Z	 ddl
ZddlZddlZddlmZmZ ddlmZmZ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mZ dd
lm Z  erÒddl!m"Z" ddl#m$Z$ ej%ej&ej'ej(ej%ej)ej(ej(ej%ej'dœ
Z*G dd„ deƒZ+G dd„ de+ƒZ,G dd„ deƒZ-G dd„ deƒZ.e /d¡Z0G dd„ deƒZ1G dd„ de1ƒZ2e /d¡Z3e /d¡Z4G dd„ deƒZ5e /dej6¡Z7G d d!„ d!eƒZ8i g fe9e9e9e:ej;j<j=j>eee9 eee ee f d"œd#d$„Z?ej;j<j@jAej;j<j@jBd%œe?_Ce+ejDd&e,d'd(e-ƒ e.ƒ e1ƒ e2ƒ e5ƒ e5ƒ e8ƒ d)œ	ZEee9e f eFd*< d+ee9ef d,œd-d.„ZGdS )/z#Handlers for additional ReST roles.é    N)ÚTYPE_CHECKINGÚAnyÚDictÚListÚOptionalÚTupleÚType)ÚnodesÚutils)ÚElementÚNodeÚTextElementÚsystem_message)Úaddnodes)Ú_Ú__)Úws_re)ÚReferenceRoleÚ
SphinxRole)ÚRoleFunction)ÚSphinx)ÚBuildEnvironment)
ÚcommandÚdfnZkbdZ
mailheaderZmakevarÚmanpageÚmimetypeZ	newsgroupÚprogramÚregexpc                   s$  e Zd ZU dZejZee e	d< e
jZee e	d< deeeee  eee  eddœ‡ fdd„Zeeeeef d	œd
d„Zeee ee f dœdd„Zeee ee f dœdd„Zeee ee f dœdd„Zdeeeeeeef dœdd„Ze
jdeeeee ee f dœdd„Z‡  ZS )ÚXRefRoleaA  
    A generic cross-referencing role.  To create a callable that can be used as
    a role function, create an instance of this class.

    The general features of this role are:

    * Automatic creation of a reference and a content node.
    * Optional separation of title and target with `title <target>`.
    * The implementation is a class rather than a function to make
      customization easier.

    Customization can be done in two ways:

    * Supplying constructor parameters:
      * `fix_parens` to normalize parentheses (strip from target, and add to
        title if configured)
      * `lowercase` to lowercase the target
      * `nodeclass` and `innernodeclass` select the node classes for
        the reference and the content node

    * Subclassing and overwriting `process_link()` and/or `result_nodes()`.
    Ú	nodeclassÚinnernodeclassFN)Ú
fix_parensÚ	lowercaser   r    Úwarn_danglingÚreturnc                s<   || _ || _|| _|d k	r || _|d k	r.|| _tƒ  ¡  d S )N)r!   r"   r#   r   r    ÚsuperÚ__init__)Úselfr!   r"   r   r    r#   )Ú	__class__© úY/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/roles.pyr&   B   s    zXRefRole.__init__)ÚtitleÚtargetr$   c             C   sJ   | j s,| d¡r|d d… }| jjr,|d7 }| d¡rB|d d… }||fS )Nz()éþÿÿÿ)Úhas_explicit_titleÚendswithÚconfigZadd_function_parentheses)r'   r+   r,   r)   r)   r*   Úupdate_title_and_targetP   s    

z XRefRole.update_title_and_target)r$   c             C   sr   d| j kr(d| j  | _| _d| jg| _n0| j  dd¡\| _| _d| jd| j| jf g| _| jrf|  ¡ S |  ¡ S d S )Nú:Ú Zxrefé   z%s-%s)ÚnameÚ	refdomainÚreftypeÚclassesÚsplitÚdisabledÚcreate_non_xref_nodeÚcreate_xref_node)r'   r)   r)   r*   Úrun]   s    
zXRefRole.runc             C   s\   t  | jdd … ¡}| jr0d| _|  |d¡\}}| j| j|| jd}| j	| j
j| j|ddS )Nr4   Fr3   )r8   )Úis_ref)r
   ÚunescapeÚtextr!   r.   r1   r    Úrawtextr8   Úresult_nodesÚinlinerÚdocumentÚenv)r'   r@   r,   Únoder)   r)   r*   r;   j   s    zXRefRole.create_non_xref_nodec             C   s¸   | j }| j}| jr| ¡ }| jr0|  ||¡\}}| jj| j| j	| j
| jdœ}| j| jf|Ž}|  |¡ |  | j|| j
||¡\}}||d< || j| j|| jd7 }| j| jj| j|ddS )N)Zrefdocr6   r7   ZrefexplicitZrefwarnZ	reftarget)r8   T)r>   )r,   r+   r"   Úlowerr!   r1   rE   Zdocnamer6   r7   r.   r#   r   rA   Zset_source_infoÚprocess_linkr    r8   rB   rC   rD   )r'   r,   r+   ÚoptionsÚrefnoder)   r)   r*   r<   s   s$    

zXRefRole.create_xref_noder   )rE   rJ   r.   r+   r,   r$   c             C   s   |t  d|¡fS )zëCalled after parsing title and target text, and creating the
        reference node (given in *refnode*).  This method can alter the
        reference node and must return a new (or the same) ``(title, target)``
        tuple.
        ú )r   Úsub)r'   rE   rJ   r.   r+   r,   r)   r)   r*   rH   Ž   s    zXRefRole.process_link)rD   rE   rF   r>   r$   c             C   s
   |gg fS )a(  Called before returning the finished nodes.  *node* is the reference
        node if one was created (*is_ref* is then true), else the content node.
        This method can add other nodes and must return a ``(nodes, messages)``
        tuple (the usual return value of a role function).
        r)   )r'   rD   rE   rF   r>   r)   r)   r*   rB   —   s    zXRefRole.result_nodes)FFNNF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Zpending_xrefr   r   r   Ú__annotations__r	   Úliteralr    r   Úboolr   r&   Ústrr   r1   r   r   r   r=   r;   r<   rH   rD   rB   Ú__classcell__r)   r)   )r(   r*   r   '   s   
   .	r   c                   s4   e Zd Zdeeeeeeef dœ‡ fdd„Z‡  ZS )ÚAnyXRefRoler   )rE   rJ   r.   r+   r,   r$   c                s&   t ƒ  |||||¡}|j |j¡ |S )N)r%   rH   Ú
attributesÚupdateZref_context)r'   rE   rJ   r.   r+   r,   Úresult)r(   r)   r*   rH   ¢   s    zAnyXRefRole.process_link)	rM   rN   rO   r   rS   rT   r   rH   rU   r)   r)   )r(   r*   rV   ¡   s   rV   c               @   s8   e Zd Zeee ee f dœdd„Zedœdd„Z	dS )ÚPEP)r$   c       
      C   s  d| j  d¡ }dtdƒ| j |dd fg}tj|d}tjdd|gd}| jj 	|¡ yX|  
¡ }tjddd|d	gd
}| jr’|t | j| j¡7 }nd| j }|t ||¡7 }W nP tk
 rþ   | jjjtdƒ| j | jd}| j | j| j|¡}	|	g|gfS X |||gg fS )Nzindex-%sÚindexÚsinglez$Python Enhancement Proposals; PEP %sr3   )Úentries)ÚidsFÚpep)ÚinternalÚrefurir8   zPEP zinvalid PEP number %s)Úline)rE   Únew_serialnor   r,   r   r[   r	   rC   rD   Únote_explicit_targetÚ	build_uriÚ	referencer.   Ústrongr+   Ú
ValueErrorÚreporterÚerrorr   ÚlinenoÚproblematicrA   )
r'   Ú	target_idr]   r[   r,   ra   rf   r+   ÚmsgÚprbr)   r)   r*   r=   «   s&    

zPEP.runc             C   sZ   | j jjj}| j dd¡}t|ƒdkrB|dt|d ƒ|d f  S |dt|d ƒ  S d S )Nú#r4   é   zpep-%04d/#%sr   z	pep-%04d/)rC   rD   ÚsettingsZpep_base_urlr,   r9   ÚlenÚint)r'   Úbase_urlÚretr)   r)   r*   re   Ä   s
    zPEP.build_uriN)
rM   rN   rO   r   r   r   r   r=   rT   re   r)   r)   r)   r*   rZ   ª   s   rZ   c               @   s8   e Zd Zeee ee f dœdd„Zedœdd„Z	dS )ÚRFC)r$   c       
      C   s  d| j  d¡ }dd| j |dd fg}tj|d}tjdd|gd}| jj |¡ yX|  	¡ }tj
ddd|d	gd
}| jrŽ|t | j| j¡7 }nd| j }|t ||¡7 }W nN tk
rø   | jjjtdƒ| j | jd}| j | j| j|¡}	|	g|gfS X |||gg fS )Nzindex-%sr[   r\   zRFC; RFC %sr3   )r]   )r^   FÚrfc)r`   ra   r8   zRFC zinvalid RFC number %s)rb   )rE   rc   r,   r   r[   r	   rC   rD   rd   re   rf   r.   rg   r+   rh   ri   rj   r   rk   rl   rA   )
r'   rm   r]   r[   r,   ra   rf   r+   rn   ro   r)   r)   r*   r=   Î   s$    

zRFC.runc             C   sf   | j jjj}| j dd¡}t|ƒdkrJ|| j jt|d ƒ  d |d  S || j jt|d ƒ  S d S )Nrp   r4   rq   r   )	rC   rD   rr   Zrfc_base_urlr,   r9   rs   Zrfc_urlrt   )r'   ru   rv   r)   r)   r*   re   æ   s
    $zRFC.build_uriN)
rM   rN   rO   r   r   r   r   r=   rT   re   r)   r)   r)   r*   rw   Í   s   rw   z(?<!&)&(?![&\s])c               @   s4   e Zd Ze d¡Zeee ee	 f dœdd„Z
dS )ÚGUILabelz(?<!&)&(?![&\s]))r$   c             C   sš   t j| j| jgd}| j | j¡}|t  | d¡¡7 }xX|D ]P}| 	dd¡}t  |d ¡}t jdd|dgd}||7 }|t  |dd … ¡7 }q<W |gg fS )	N)rA   r8   r   z&&ú&r3   Úaccelerator)r8   r4   )
r	   ÚinlinerA   r5   Úamp_rer9   r@   ÚTextÚpopÚreplace)r'   rF   ÚspansÚspanÚletterr{   r)   r)   r*   r=   õ   s    
zGUILabel.runN)rM   rN   rO   ÚreÚcompiler}   r   r   r   r   r=   r)   r)   r)   r*   ry   ò   s   
ry   c                   s6   e Zd ZdZeee ee f dœ‡ fdd„Z‡  Z	S )ÚMenuSelectionu   â€£)r$   c                s   | j  d| j¡| _ tƒ  ¡ S )Nz-->)r@   r€   ÚBULLET_CHARACTERr%   r=   )r'   )r(   r)   r*   r=     s    zMenuSelection.run)
rM   rN   rO   r‡   r   r   r   r   r=   rU   r)   r)   )r(   r*   r†     s   r†   z	{([^}]+)}z(\\*{|\\*})c               @   sH   e Zd Ze d¡Zeee ee	 f dœdd„Z
eee dœdd„ZdS )	ÚEmphasizedLiteralz(\\\\|\\{|\\}|{|}))r$   c             C   s<   |   | j¡}tj| jdf|ž| j ¡ | jgdœŽ}|gg fS )Nr3   )Úroler8   )Úparser@   r	   rR   rA   r5   rG   )r'   ÚchildrenrF   r)   r)   r*   r=     s    zEmphasizedLiteral.run)r@   r$   c             C   s€  g }dg}xH| j  |¡D ]6}|dkr:|d  d7  < q|dkr‚t|ƒdkrl|d dkrl|d  d7  < n| d¡ | d¡ q|dkr
t|ƒd	krò|d
 dkròt|d ƒdkrò|d rÐ| t |d ¡¡ | t |d |d ¡¡ dg}n| d¡ d |¡g}q|dkr&|d  d7  < q|dkrB|d  d7  < q|d  |7  < qW d |¡r|d |¡}| t |¡¡ |S )Nr3   z\\éÿÿÿÿú\Ú{rq   r-   Ú}é   r4   r   z\{z\})Ú	parens_rer9   rs   Úappendr	   r~   ÚemphasisÚjoin)r'   r@   rY   ÚstackÚpartr)   r)   r*   rŠ     s6    

(



zEmphasizedLiteral.parseN)rM   rN   rO   r„   r…   r‘   r   r   r   r   r=   rT   rŠ   r)   r)   r)   r*   rˆ     s   
rˆ   z	\((.*)\)$c               @   s8   e Zd Ze dej¡Zeee	 ee
 f dœdd„ZdS )ÚAbbreviationz	\((.*)\)$)r$   c             C   s`   | j  ¡ }| j | j¡}|rB| jd | ¡ …  ¡ }| d¡|d< n| j}tj	| j
|f|Žgg fS )Nr4   Zexplanation)rI   ÚcopyÚabbr_reÚsearchr@   ÚstartÚstripÚgroupr	   ZabbreviationrA   )r'   rI   Zmatchedr@   r)   r)   r*   r=   H  s    
zAbbreviation.runN)rM   rN   rO   r„   r…   ÚSr™   r   r   r   r   r=   r)   r)   r)   r*   r—   E  s   r—   )r5   rA   r@   rk   rC   rI   Úcontentr$   c       
      C   s€   |  ¡ }tjjj |¡ | dd¡}dg}|r8| d¡ d|krN| |d ¡ |rd||krd| |¡ t	j
||||d}	|	gg fS )NÚlanguager3   ÚcodeÚ	highlightr8   )r8   r    )r˜   ÚdocutilsÚparsersÚrstÚrolesZset_classesÚgetr’   Úextendr	   rR   )
r5   rA   r@   rk   rC   rI   rŸ   r    r8   rF   r)   r)   r*   Ú	code_rolel  s    

r©   )Úclassr    )r   T)r#   )	ÚdownloadÚanyr_   rx   ZguilabelZmenuselectionÚfileZsampZabbrÚspecific_docrolesr   )Úappr$   c             C   sˆ   ddl m} x@t ¡ D ]4\}}| ||¡}| ||d|gi¡}| ||¡ qW x t ¡ D ]\}}| ||¡ qXW | dt	¡ ddddœS )Nr   )r¦   r8   r¡   ÚbuiltinT)ÚversionZparallel_read_safeZparallel_write_safe)
Zdocutils.parsers.rstr¦   Úgeneric_docrolesÚitemsZGenericRoleZ
CustomRoleZregister_local_roler®   Zregister_canonical_roler©   )r¯   r¦   Zrolenamer   Zgenericr‰   Úfuncr)   r)   r*   Úsetup—  s    rµ   )HrP   r„   Útypingr   r   r   r   r   r   r   Zdocutils.parsers.rst.directivesr£   Zdocutils.parsers.rst.rolesZdocutils.parsers.rst.statesr	   r
   Zdocutils.nodesr   r   r   r   Zsphinxr   Zsphinx.localer   r   Zsphinx.utilr   Zsphinx.util.docutilsr   r   Zsphinx.util.typingr   Zsphinx.applicationr   Zsphinx.environmentr   Zliteral_strongr“   rR   Zliteral_emphasisr   r²   r   rV   rZ   rw   r…   Z_amp_rery   r†   Z
_litvar_rer‘   rˆ   rž   Z_abbr_rer—   rT   rt   r¤   r¥   ZstatesZInlinerr©   Z
directivesZclass_optionZ	unchangedrI   Zdownload_referencer®   rQ   rµ   r)   r)   r)   r*   Ú<module>   sf   $
z	#"


2) 

