B
    d[                 @   s&  d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZ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mZ dd
lmZ ddlmZ ddl m!Z! yddl"m#Z# W n  e$k
r   ddl%m#Z# Y nX ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? dd
l@mZA ddlBmCZC ddlDmEZE ddlFmGZG ddlHmIZImJZJ erddlKmLZL ddlMmNZN eEOePZQddiZRG d d! d!ZSd"e)dd#d$d%ZTd"eeUe	f d&d'd(ZVdS ))zSphinx component registry.    N)import_module)
MethodType)
TYPE_CHECKINGAnyCallableDictIteratorListOptionalTupleTypeUnion)nodes)	Publisher)Input)ElementNodeTextElement)Parser)	Directive)	Transform)entry_points)Builder)Config)RemovedInSphinx60WarningRemovedInSphinx70Warning)DomainIndexObjType)GenericObjectTarget)BuildEnvironment)ExtensionErrorSphinxErrorVersionRequirementError)	Extension)create_publisher)__)XRefRole)logging)prefixed_warnings)RoleFunctionTitleGetter)Sphinx)
Documenterzsphinxjp.themecorez1.2c               @   s  e Zd ZddddZdree eddddZd	edd
ddZ	dsd	ee
e edddZdtee eddddZeedddZeee dddZdueeee eddddZdveeeeef eddddZdweee eddd d!Zd"ddd"g dfeeee
e e
ee  eeedd#	d$d%Zdxeeee
ee  eedd&d'd(Zdyeeedd)d*d+Zdzee  edd,d-d.Z!eee  d/d0d1Z"e#eee  f dd2d3Z$d	ee d4d5d6Z%ee
ee&  d/d7d8Z'd{eee(j) edd9d:d;Z*ee+ e,eef dd<d=d>Z-eee(j) d?d@dAZ.ee/e(j)dBdCdDZ0ee1 ddEdFdGZ2eee1  ddHdIZ3ee1 ddEdJdKZ4eee1  ddLdMZ5eedN ddOdPdQZ6eee/ee/ge/f ddRdSdTZ7ee/ddUdVdWZ8ee/ddUdXdYZ9eedZd[d\Z:d|eeedd]d^d_Z;d}ee< ee
e= edd`dadbZ>ee,eef e,eef ddcdddeZ?eeddfdgdhZ@d	eddidjdkZAd	e#eef dldmdnZBd	eeCdodpdqZDdS )~SphinxComponentRegistryN)returnc             C   s   i | _ i | _i | _g | _i | _i | _i | _i | _i | _i | _	i | _
i | _d| _i | _g | _g | _g | _g | _i | _i | _i | _i | _i | _g | _i | _d S )NZper_page)autodoc_attrgettrsbuildersdocumenters	css_filesdomainsdomain_directivesdomain_indicesdomain_object_typesdomain_rolesenumerable_nodeshtml_inline_math_renderershtml_block_math_renderersZhtml_assets_policyhtml_themesjs_fileslatex_packageslatex_packages_after_hyperrefpost_transformssource_parserssource_inputssource_suffixtranslatorstranslation_handlers
transforms
publishers)self rJ   \/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/registry.py__init__5   s2    z SphinxComponentRegistry.__init__F)builderoverrider0   c             C   sf   t d| t|ds&ttd| |j| jkrV|sVttd|j| j|j jf || j|j< d S )Nz[app] adding builder: %rnamez(Builder class %s has no "name" attributez(Builder %r already exists (in module %s))loggerdebughasattrr"   r'   rO   r2   
__module__)rI   rM   rN   rJ   rJ   rK   add_builder   s    
z#SphinxComponentRegistry.add_builderr-   )apprO   r0   c          
   C   st   |d krd S || j krptdd}y|| }W n4 tk
r` } zttd| |W d d }~X Y nX | ||j d S )Nzsphinx.builders)groupz?Builder name %s not registered or available through entry point)r2   r   KeyErrorr#   r'   load_extensionmodule)rI   rU   rO   Zbuilder_entry_pointsentry_pointexcrJ   rJ   rK   preload_builder   s    

z'SphinxComponentRegistry.preload_builder)rU   rO   envr0   c             C   s|   || j krttd| y| j | ||S  tk
rv   tjd| dtdd | j | |}|d k	rr|| |S X d S )NzBuilder name %s not registeredzThe custom builder z defines a custom __init__ method without the 'env'argument. Report this bug to the developers of your custom builder, this is likely not a issue with Sphinx. The 'env' argument will be required from Sphinx 7.   )
stacklevel)r2   r#   r'   	TypeErrorwarningswarnr   Zset_environment)rI   rU   rO   r]   rM   rJ   rJ   rK   create_builder   s    



z&SphinxComponentRegistry.create_builder)domainrN   r0   c             C   s>   t d| |j| jkr.|s.ttd|j || j|j< d S )Nz[app] adding domain: %rzdomain %s already registered)rP   rQ   rO   r5   r"   r'   )rI   rd   rN   rJ   rJ   rK   
add_domain   s    z"SphinxComponentRegistry.add_domain)rd   r0   c             C   s
   || j kS )N)r5   )rI   rd   rJ   rJ   rK   
has_domain   s    z"SphinxComponentRegistry.has_domain)r]   r0   c             c   s   x| j  D ]}||}|j| j|ji  |j| j|ji  |j	
| j|jg  x,| j|ji  D ]\}}||| qvW |V  qW d S )N)r5   values
directivesupdater6   getrO   rolesr9   indicesextendr7   r8   itemsadd_object_type)rI   r]   ZDomainClassrd   rO   objtyperJ   rJ   rK   create_domains   s    z&SphinxComponentRegistry.create_domains)rd   rO   clsrN   r0   c             C   sf   t d|||f || jkr,ttd| | j|i }||krZ|sZttd||f |||< d S )Nz$[app] adding directive to domain: %rzdomain %s not yet registeredz3The %r directive is already registered to domain %s)rP   rQ   r5   r"   r'   r6   
setdefault)rI   rd   rO   rr   rN   rh   rJ   rJ   rK   add_directive_to_domain   s    
z/SphinxComponentRegistry.add_directive_to_domain)rd   rO   rolerN   r0   c             C   sf   t d|||f || jkr,ttd| | j|i }||krZ|sZttd||f |||< d S )Nz[app] adding role to domain: %rzdomain %s not yet registeredz.The %r role is already registered to domain %s)rP   rQ   r5   r"   r'   r9   rs   )rI   rd   rO   ru   rN   rk   rJ   rJ   rK   add_role_to_domain   s    
z*SphinxComponentRegistry.add_role_to_domain)rd   indexrN   r0   c             C   sh   t d||f || jkr*ttd| | j|g }||krZ|sZttd|j|f || d S )Nz [app] adding index to domain: %rzdomain %s not yet registeredz/The %r index is already registered to domain %s)	rP   rQ   r5   r"   r'   r7   rs   rO   append)rI   rd   rw   rN   rl   rJ   rJ   rK   add_index_to_domain   s    
z+SphinxComponentRegistry.add_index_to_domain )	directivenamerolenameindextemplate
parse_noderef_nodeclassobjnamedoc_field_typesrN   r0   c	          
   C   s   t d|||||||f t|ttf|t||d}	| d||	 | d|t|d | j	
di }
||
kr|sttd| t|p|||
|< d S )Nz[app] adding object type: %r)r}   r~   r   std)innernodeclassz(The %r object_type is already registered)rP   rQ   typer   objectstaticmethodrt   rv   r(   r8   rs   r"   r'   r   )rI   r{   r|   r}   r~   r   r   r   rN   	directiveobject_typesrJ   rJ   rK   ro      s    
z'SphinxComponentRegistry.add_object_type)r{   r|   r}   r   r   rN   r0   c       	      C   s   t d|||||f t|ttfd|i}| d|| | d|t|d | j	di }||krv|svt
td| t|p~||||< d S )Nz[app] adding crossref type: %rr}   r   )r   z*The %r crossref_type is already registered)rP   rQ   r   r    r   rt   rv   r(   r8   rs   r"   r'   r   )	rI   r{   r|   r}   r   r   rN   r   r   rJ   rJ   rK   add_crossref_type  s    	
z)SphinxComponentRegistry.add_crossref_type)suffixfiletyperN   r0   c             C   s<   t d|| || jkr.|s.ttd| n
|| j|< d S )Nz"[app] adding source_suffix: %r, %rz&source_suffix %r is already registered)rP   rQ   rD   r"   r'   )rI   r   r   rN   rJ   rJ   rK   add_source_suffix   s    z)SphinxComponentRegistry.add_source_suffix)parserrN   r0   c             C   sJ   t d| x8|jD ].}|| jkr8|s8ttd| q|| j|< qW d S )Nz%[app] adding search source_parser: %rz*source_parser for %r is already registered)rP   rQ   	supportedrB   r"   r'   )rI   r   rN   r   rJ   rJ   rK   add_source_parser'  s    
z)SphinxComponentRegistry.add_source_parser)r   r0   c          
   C   sD   y
| j | S  tk
r> } zttd| |W d d }~X Y nX d S )Nz#Source parser for %s not registered)rB   rW   r#   r'   )rI   r   r[   rJ   rJ   rK   get_source_parser2  s    
z)SphinxComponentRegistry.get_source_parserc             C   s   | j S )N)rB   )rI   rJ   rJ   rK   get_source_parsers8  s    z*SphinxComponentRegistry.get_source_parsers)rU   filenamer0   c             C   s(   |  |}| }t|tr$|| |S )N)r   
isinstanceSphinxParserZset_application)rI   rU   r   parser_classr   rJ   rJ   rK   create_source_parser;  s
    


z,SphinxComponentRegistry.create_source_parserc             C   sP   t dt y
| j| S  tk
rJ   y
| jd S  tk
rD   d S X Y nX d S )Nz9SphinxComponentRegistry.get_source_input() is deprecated.*)ra   rb   r   rC   rW   )rI   r   rJ   rJ   rK   get_source_inputB  s    

z(SphinxComponentRegistry.get_source_input)rO   
translatorrN   r0   c             C   s8   t d| || jkr*|s*ttd| || j|< d S )Nz.[app] Change of translator for the %s builder.z Translator for %r already exists)rP   rQ   rE   r"   r'   )rI   rO   r   rN   rJ   rJ   rK   add_translatorO  s    z&SphinxComponentRegistry.add_translator)nodekwargsr0   c       	      K   s   t d|| xv| D ]j\}}| j|i }y|\}}||f||j< W q tk
r } zttd||f |W d d }~X Y qX qW d S )Nz)[app] adding translation_handlers: %r, %rzEkwargs for add_node() must be a (visit, depart) function tuple: %r=%r)	rP   rQ   rn   rF   rs   __name__
ValueErrorr"   r'   )	rI   r   r   Zbuilder_namehandlersrF   visitdepartr[   rJ   rJ   rK   add_translation_handlersV  s    
z0SphinxComponentRegistry.add_translation_handlers)rM   r0   c             C   s   | j |j|jS )N)rE   rj   rO   Zdefault_translator_class)rI   rM   rJ   rJ   rK   get_translator_classd  s    
z,SphinxComponentRegistry.get_translator_class)rM   argsr0   c       	      G   s   |  |}|std|j || }| j|jd }|d krL| j|ji }xH| D ]<\}\}}t|d| t|| |rVt|d| t|| qVW |S )Nztranslator not found for %svisit_Zdepart_)	r   AssertionErrorrO   rF   rj   formatrn   setattrr   )	rI   rM   r   Ztranslator_classr   r   rO   r   r   rJ   rJ   rK   create_translatorh  s    
z)SphinxComponentRegistry.create_translator)	transformr0   c             C   s   t d| | j| d S )Nz[app] adding transform: %r)rP   rQ   rG   rx   )rI   r   rJ   rJ   rK   add_transformz  s    z%SphinxComponentRegistry.add_transformc             C   s   | j S )N)rG   )rI   rJ   rJ   rK   get_transforms~  s    z&SphinxComponentRegistry.get_transformsc             C   s   t d| | j| d S )Nz[app] adding post transform: %r)rP   rQ   rA   rx   )rI   r   rJ   rJ   rK   add_post_transform  s    z*SphinxComponentRegistry.add_post_transformc             C   s   | j S )N)rA   )rI   rJ   rJ   rK   get_post_transforms  s    z+SphinxComponentRegistry.get_post_transformsr.   )rp   
documenterr0   c             C   s   || j |< d S )N)r3   )rI   rp   r   rJ   rJ   rK   add_documenter  s    z&SphinxComponentRegistry.add_documenter)typ
attrgetterr0   c             C   s   || j |< d S )N)r1   )rI   r   r   rJ   rJ   rK   add_autodoc_attrgetter  s    z.SphinxComponentRegistry.add_autodoc_attrgetter)r   
attributesr0   c             K   s   | j ||f d S )N)r4   rx   )rI   r   r   rJ   rJ   rK   add_css_files  s    z%SphinxComponentRegistry.add_css_filesc             K   s"   t d|| | j||f d S )Nz[app] adding js_file: %r, %r)rP   rQ   r>   rx   )rI   r   r   rJ   rJ   rK   add_js_file  s    z#SphinxComponentRegistry.add_js_file)rO   r0   c                s"   | j | j }t fdd|D S )Nc                s   g | ]}|d   kr|qS )r   rJ   ).0x)rO   rJ   rK   
<listcomp>  s    z=SphinxComponentRegistry.has_latex_package.<locals>.<listcomp>)r?   r@   bool)rI   rO   packagesrJ   )rO   rK   has_latex_package  s    z)SphinxComponentRegistry.has_latex_package)rO   optionsafter_hyperrefr0   c             C   sL   |  |rtd| td| |r8| j||f n| j||f d S )Nz#latex package '%s' already includedz[app] adding latex package: %r)r   rP   warningrQ   r@   rx   r?   )rI   rO   r   r   rJ   rJ   rK   add_latex_package  s    
z)SphinxComponentRegistry.add_latex_package)r   figtypetitle_getterrN   r0   c             C   s@   t d||| || jkr.|s.ttd| ||f| j|< d S )Nz*[app] adding enumerable node: (%r, %r, %r)z%enumerable_node %r already registered)rP   rQ   r:   r"   r'   )rI   r   r   r   rN   rJ   rJ   rK   add_enumerable_node  s    z+SphinxComponentRegistry.add_enumerable_node)rO   inline_renderersblock_renderersr0   c             C   sB   t d||| || jkr*ttd| || j|< || j|< d S )Nz+[app] adding html_math_renderer: %s, %r, %rz&math renderer %s is already registered)rP   rQ   r;   r"   r'   r<   )rI   rO   r   r   rJ   rJ   rK   add_html_math_renderer  s    


z.SphinxComponentRegistry.add_html_math_renderer)rO   
theme_pathr0   c             C   s   || j |< d S )N)r=   )rI   rO   r   rJ   rJ   rK   add_html_theme  s    z&SphinxComponentRegistry.add_html_theme)rU   extnamer0   c             C   sf  ||j krdS |tkr0ttd|t|  dS td| }t| yt|}W nL tk
r } z.ttdt	
   ttd| ||W dd}~X Y nX t|dd}|dkrttd| i }nHy||}W n: tk
r } zttd||f |W dd}~X Y nX |dkr$i }n t|tsDttd	| i }t||f||j |< W dQ R X dS )
zLoad a Sphinx extension.Nz\the extension %r was already merged with Sphinx since version %s; this extension is ignored.zwhile setting up extension %s:zOriginal exception:
zCould not import extension %ssetupzMextension %r has no setup() function; is it really a Sphinx extension module?zpThe %s extension used by this project needs at least Sphinx v%s; it therefore cannot be built with this version.zuextension %r returned an unsupported object from its setup() function; it should return None or a metadata dictionary)
extensionsEXTENSION_BLACKLISTrP   r   r'   r*   r   ImportErrorverbose	traceback
format_excr"   getattrr$   r   dictr%   )rI   rU   r   prefixmoderrr   metadatarJ   rJ   rK   rX     sB    





z&SphinxComponentRegistry.load_extension)rU   r0   c             C   s,   ddl m} dd |j D }||d< |S )Nr   )ENV_VERSIONc             S   s&   i | ]}|j d r|j d  |jqS )Zenv_version)r   rj   rO   )r   extrJ   rJ   rK   
<dictcomp>  s    z:SphinxComponentRegistry.get_envversion.<locals>.<dictcomp>Zsphinx)sphinx.environmentr   r   rg   )rI   rU   r   Z
envversionrJ   rJ   rK   get_envversion  s    z&SphinxComponentRegistry.get_envversion)rU   r   r0   c             C   s8   y
| j | S  tk
r   Y nX t||}|| j |< |S )N)rH   rW   r&   )rI   rU   r   Z	publisherrJ   rJ   rK   get_publisher  s    


z%SphinxComponentRegistry.get_publisher)F)N)F)F)F)F)rz   Nrz   F)F)F)F)F)NF)Er   rS   __qualname__rL   r   r   r   rT   strr\   r
   r!   rc   r   re   rf   r   rq   r   rt   r   r+   r(   rv   r   ry   r   r   r	   ro   r   r   r   r   r   r   r   r   r   r   r   NodeVisitorr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r   r   r   rX   r   r   r   rJ   rJ   rJ   rK   r/   4   sl   P	    
	.r/   r-   )rU   configr0   c             C   s`   xN| j j D ]>\}}|| jjkr0|| jj|< q| jj| dkr|| jj|< qW | jj| j _dS )zDMerge any user-specified source_suffix with any added by extensions.N)registryrD   rn   r   )rU   r   r   r   rJ   rJ   rK   merge_source_suffix  s    r   )rU   r0   c             C   s   | j dtdd ddddS )Nzconfig-initedi   )prioritybuiltinT)versionZparallel_read_safeZparallel_write_safe)connectr   )rU   rJ   rJ   rK   r   
  s    r   )W__doc__r   ra   	importlibr   typesr   typingr   r   r   r   r   r	   r
   r   r   r   Zdocutilsr   Zdocutils.corer   Zdocutils.ior   Zdocutils.nodesr   r   r   Zdocutils.parsersr   Zdocutils.parsers.rstr   Zdocutils.transformsr   importlib_metadatar   r   importlib.metadataZsphinx.buildersr   Zsphinx.configr   Zsphinx.deprecationr   r   Zsphinx.domainsr   r   r   Zsphinx.domains.stdr   r    r   r!   Zsphinx.errorsr"   r#   r$   Zsphinx.extensionr%   Z	sphinx.ior&   Zsphinx.localer'   Zsphinx.parsersr   Zsphinx.rolesr(   Zsphinx.utilr)   Zsphinx.util.loggingr*   Zsphinx.util.typingr+   r,   Zsphinx.applicationr-   Zsphinx.ext.autodocr.   	getLoggerr   rP   r   r/   r   r   r   rJ   rJ   rJ   rK   <module>   sT   0
   K