B
    \}                 @   s  d Z ddlZddl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
 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mZ ddlmZ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"m#Z# e$e%Z&e'dZ(e'dej)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.G dd deZ/G dd de Z0G dd  d eZ1d!d" Z2d/d#d$Z3G d%d& d&e Z4d'd( Z5G d)d* d*e Z6G d+d, d,eZ7d-d. Z8dS )0z
    sphinx.domains.std
    ~~~~~~~~~~~~~~~~~~

    The standard domain.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)copy)nodes)
directives)ViewList)	iteritems)addnodes)RemovedInSphinx30Warning)ObjectDescription)DomainObjType)___)XRefRole)ws_reloggingdocname_join)SphinxDirective)clean_astextmake_refnodez ((?:/|--|-|\+)?[^\s=]+)(=?\s*.*)z`(\w+)`c               @   s(   e Zd ZdZdZdZdd Zdd ZdS )GenericObjectzM
    A generic x-ref directive registered with Sphinx.add_object_type().
     Nc             C   s@   | j r|  | j||}n$|  |t||7 }td|}|S )Nr   )
parse_nodeenvclearr   	desc_namer   sub)selfsigsignodename r    1lib/python3.7/site-packages/sphinx/domains/std.pyhandle_signature9   s    zGenericObject.handle_signaturec             C   s   d| j |f }|d | | jj| | jr| jd}|dkrt| jd |  }| j|d d   |f }nd}| j|f }| jd |||dd f | j	j
|f| j	jd	 d
 | j |f< d S )Nz%s-%sids:   singleentriesr   stdobjects)objtypeappendstatedocumentnote_explicit_targetindextemplatefindstrip	indexnoder   docname
domaindata)r   r   r   r   
targetnamecolon	indextype
indexentryr    r    r!   add_target_and_indexD   s    z"GenericObject.add_target_and_index)__name__
__module____qualname____doc__r0   r   r"   r:   r    r    r    r!   r   2   s
   r   c               @   s   e Zd ZedZdS )EnvVarzenvironment variable; %sN)r;   r<   r=   r   r0   r    r    r    r!   r?   W   s   r?   c               @   s   e Zd ZdZdd ZdS )EnvVarXRefRolezQ
    Cross-referencing role for environment variables (adds an index entry).
    c       	      C   s~   |s|gg fS |d }d| d }t }d||dd fdtd| |dd fg|d< tjdd|gd}|| |||gg fS )	N	reftargetzindex-%sindexr'   r   zenvironment variable; %sr(   )r#   )Znew_serialnor   rB   r   r   targetr/   )	r   r.   r   nodeZis_refZvarnameZtgtidr3   Z
targetnoder    r    r!   result_nodes`   s    

zEnvVarXRefRole.result_nodesN)r;   r<   r=   r>   rE   r    r    r    r!   r@   [   s   r@   c               @   s0   e Zd ZdZdZdZdZdZdZi Z	dd Z
d	S )
Targetz@
    Generic target for user-defined cross-reference types.
    r   Fr&   r   Tc             C   s   t d| jd  }d| j|f }tjdd|gd}| jj	| |g}| j
r| j
|f }d}|d}|dkr|d |  }||d	 d   }tj|||dd fgd
}|d| | j}	d| jkr| jdd	\}
}	| jj|f| jjd d |	|f< |S )N r   z%s-%sr   )r#   r'   r$   r%   r&   )r(   r)   r*   )r   r   	argumentsr2   r   r   rC   r-   r.   r/   r0   r1   r   rB   insertsplitr   r4   r5   )r   fullnamer6   rD   Zretr9   r8   r7   inoder   r   r    r    r!   run|   s(    

 z
Target.runN)r;   r<   r=   r>   r0   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespaceoption_specrM   r    r    r    r!   rF   p   s   rF   c               @   s    e Zd ZdZdd Zdd ZdS )	Cmdoptionz;
    Description of a command-line option (.. option).
    c       	      C   s   d}d}x| dD ]}| }t|}|sNtjtd|| jj| j	fd q|
 \}}|rn|tdd7 }|t||7 }|t||7 }|s|}|g|d< n|d | |d7 }qW |st|S )z/Transform an option description into RST nodes.r   r   z, znMalformed option description %r, should look like "opt", "-opt args", "--opt args", "/opt args" or "+opt args")locationallnamesr&   )rJ   r2   option_desc_rematchloggerwarningr   r   r4   linenogroupsr   Zdesc_addnamer   r,   
ValueError)	r   r   r   count	firstnameZpotential_optionmoptnameargsr    r    r!   r"      s.    

zCmdoption.handle_signaturec             C   s   | j jd}xX|dg D ]H}|dd}|ds>d| }|rNd| | }d| }|d | qW | jj| x~|dg D ]n}| j j	|d d	 f| j j
d
 d ||f< ||kr| jd dtd|r|d pd|f |d d	 dd f qW d S )Nzstd:programrU   /-z-arg-	cmdoptionnamesr#   r   r)   progoptionsr(   Zpairz%scommand line option; %srG   r   )r   ref_contextgetreplace
startswithr,   r-   r.   r/   r4   r5   r3   r   )r   r^   r   r   Zcurrprogramr`   r6   r    r    r!   r:      s"    
(
zCmdoption.add_target_and_indexN)r;   r<   r=   r>   r"   r:   r    r    r    r!   rS      s   rS   c               @   s,   e Zd ZdZdZdZdZdZi Zdd Z	dS )	ProgramzI
    Directive to name the program for which options are documented.
    Fr&   r   Tc             C   s@   t d| jd  }|dkr0| jjdd  n|| jjd< g S )Nrc   r   Nonezstd:program)r   r   rH   r2   r   rg   pop)r   programr    r    r!   rM      s
    zProgram.runN)
r;   r<   r=   r>   rN   rO   rP   rQ   rR   rM   r    r    r    r!   rk      s   rk   c               @   s   e Zd Zdd ZdS )OptionXRefRolec             C   s   |j d|d< ||fS )Nzstd:program)rg   rh   )r   r   refnodeZhas_explicit_titletitlerC   r    r    r!   process_link   s    zOptionXRefRole.process_linkN)r;   r<   r=   rr   r    r    r    r!   ro      s   ro   c             C   s   t d| d g }|S )Nz +: +)rerJ   )linepartsr    r    r!   split_term_classifiers   s    rv   c             C   s   t jd| }||_||_| jdt }| jd d }| }	|d krVt 	d|	 }||krndt
t| }|| | j|f|d|	 f< t }
d|	|d|fg|
d	< |j|j |
_|
_||
 |d
 | |d | |S )Nr   gloss_entriesr)   r*   zterm-termr'   mainr(   r#   re   )r   r   )r   rx   sourcert   Z	temp_data
setdefaultsetr5   astextmake_idstrlenaddr4   lowerr   rB   r,   )r   	textnodesZ	index_keyrz   rZ   Znew_idrx   rw   r*   Ztermtextr3   r    r    r!   make_glossary_term   s&    

r   c               @   s2   e Zd ZdZdZdZdZdZdej	iZ
dd ZdS )	Glossaryz[
    Directive to create a glossary with cross-reference targets for :term:
    roles.
    Tr   Fsortedc          	   C   s  t  }| jj|_g }d}d}g }xnt| j| jjD ]X\}\}}|sl|rf|rf|d d d|| d}q6|r,|d  s,|	drq6|r|s|| jj
jdd||d	 ||||fgt f d
}n\|r|| jj
jdd||d	 |r|d d |||f n|| jj
jdd||d	 n`|sJd}t|t|  }	|rp|d d ||	d  || n|| jj
jdd||d	 d
}q6W g }
x|D ]\}}g }g }g }xp|D ]h\}}}t|}| j|d |\}}t| j||d ||}||_|| ||  || qW || t }|rV| j||jd d | || |
|tjd| f qW d| jkr|
jdd d t }|d d |dd |
D  ||7 }||g S )NTr%   r&   r   r   z..    z,glossary term must be preceded by empty line)rz   rt   Fz3glossary terms must not be separated by empty linesz4glossary seems to be misformatted, check indentationr   c             S   s   t d| d d  S )NZNFDr   )unicodedataZ	normalizer   )xr    r    r!   <lambda>y  s    zGlossary.run.<locals>.<lambda>)keyclassesglossaryc             s   s   | ]}|d  V  qdS )r&   Nr    ).0itemr    r    r!   	<genexpr>~  s    zGlossary.run.<locals>.<genexpr>)r   )r   r   r-   r.   zipZcontentitemsr,   isspacerj   ZreporterZsystem_messager   r   lstriprv   Zinline_textr   r   Z	rawsourceextendr}   r   
definitionZnested_parseZdefinition_list_itemoptionssortZdefinition_list)r   rD   r(   Zin_definitionZ	was_emptymessagesrt   rz   rZ   Z
indent_lenr   Ztermsr   Z	termtextsZ	termnodesZsystem_messagesru   r   Zsysmsgrx   ZdefnodeZdlistr    r    r!   rM     s    
"
 


zGlossary.runN)r;   r<   r=   r>   rN   rO   rP   rQ   r   flagrR   rM   r    r    r    r!   r     s   
r   c             C   s   g }d}xt | D ]}| |krF| ||  }|t|| tj|ddd|dd}|tj	|d|ddgd7 }|| |
 }qW |t| k r|t| |d  | |d   |S )Nr   r&   tokenr)   )reftype	refdomainrA   Zxref)r   )token_refinditerstartr,   r   ZTextr   pending_xrefgroupliteralendr   )textZretnodesposr_   Ztxtrp   r    r    r!   token_xrefs  s    "
"r   c               @   s,   e Zd ZdZdZdZdZdZi Zdd Z	dS )	ProductionListz0
    Directive to list grammar productions.
    Fr&   r   Tc       
   	   C   s  | j jd d }t }g }d}x| jd dD ]}|dkrHd|krHq2|d7 }y|dd\}}W n tk
rz   P Y nX t }| |d< |d rt	
d|d  }	|	| jjjkr|d	 |	 | jj|| | j j|	f|d
|d f< |t| || q2W |g| S )Nr)   r*   r   
r$   r&   Z	tokennamezgrammar-token-%sr#   r   )r   r5   r   productionlistrH   rJ   r\   Z
productionr2   r   r~   r-   r.   r#   r,   Znote_implicit_targetr4   r   r   )
r   r*   rD   r   iZruler   tokenssubnodeZidnamer    r    r!   rM     s.    zProductionList.runN)
r;   r<   r=   r>   rN   rO   rP   rQ   rR   rM   r    r    r    r!   r     s   r   c                   s  e Zd ZdZdZdZeeddddeedd	ddeed
ddddeeddeeddeedddddZe	e
e
eeedZedde e edejddedejddedddeddedejddZi i i i ddedfddedfd ded!fd"d#d$d%d"d&Zd'd(d)d*d+d,d-d.Zejd/ejd0ejd1iZ fd2d3Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dJdK Z'dLdM Z(dNdO Z)dPdQ Z*dRdS Z+dTdU Z,dVdW Z-dgdYdZZ.d[d\ Z/d]d^ Z0d_d` Z1dadb Z2dcdd Z3dedf Z4  Z5S )hStandardDomainzs
    Domain for all objects that don't fit into another domain or are added
    via the application interface.
    r)   ZDefaultzglossary termrx   r%   )
searchpriozgrammar tokenr   zreference labelrefkeywordzenvironment variableenvvarzprogram optionoptionr.   doc)rx   r   labelr   rd   r   )rn   rd   r   r   r   r   T)warn_dangling)	lowercaseinnernodeclassr   )r   r   )r   r   )r   r   r   rx   r   numrefr   r   genindexr   ZIndexzpy-modindexzModule IndexsearchzSearch Page)r   Zmodindexr   )r   r   )zpy-modindexr   )r   r   )rf   r*   	citationscitation_refslabels
anonlabelsz term not in glossary: %(target)sz`undefined label: %(target)s (if the link has no caption the label must precede a section header)zundefined label: %(target)szunknown keyword: %(target)szunknown document: %(target)szunknown option: %(target)szcitation not found: %(target)s)rx   r   r   r   r   r   citation)figureN)tableN)z
code-blockNc                sF   t t| | t| j| _x$t|jjjD ]\}}|| j|< q,W d S )N)superr   __init__r   enumerable_nodesr   appregistry)r   r   rD   Zsettings)	__class__r    r!   r     s    zStandardDomain.__init__c             C   sr  x6t | jd  D ] \}\}}||kr| jd |= qW x6t | jd  D ] \}\}}||krL| jd |= qLW x8t | jd  D ]"\}\}}}||kr| jd |= qW xHt | jd  D ]2\}}||gkr| jd |= q||kr|| qW x<t | jd  D ]&\}\}}}||kr| jd |= qW x:t | jd  D ]$\}\}}||krF| jd |= qFW d S )Nrf   r*   r   r   r   r   )listdatar   remove)r   r4   r   fnZ_lrZ   docnamesr    r    r!   	clear_doc  s(      "
"
 
zStandardDomain.clear_docc             C   sX  x2|d   D ]"\}}|d |kr|| jd |< qW x2|d   D ]"\}}|d |krB|| jd |< qBW x2|d   D ]"\}}|d |krv|| jd |< qvW xJ|d   D ]:\}}| jd |g }x|D ]}||kr|| qW qW x2|d   D ]"\}}|d |kr|| jd |< qW x6|d   D ]&\}}|d |kr*|| jd |< q*W d S )Nrf   r   r*   r   r   r   r   )r   r   r{   r,   )r   r   Z	otherdatar   r   r   r4   r    r    r!   merge_domaindata.  s(    
zStandardDomain.merge_domaindatac             C   s.   |  ||| | ||| | ||| d S )N)note_citationsnote_citation_refsnote_labels)r   r   r4   r.   r    r    r!   process_docF  s    zStandardDomain.process_docc          	   C   s   x| tjD ]v}||d< |d  }|| jd krf|| jd | d }tjtd|||ddd ||d d |j	f| jd |< qW d S )	Nr4   r   r   z+duplicate citation %s, other instance in %sr   r   )rT   typesubtyper#   )
traverser   r   r}   r   doc2pathrX   rY   r   rt   )r   r   r4   r.   rD   r   pathr    r    r!   r   L  s    zStandardDomain.note_citationsc             C   sV   xP| tjD ]@}|d dkr|d dkr|d }| jd |g }|| qW d S )Nr   r)   r   r   rA   r   )r   r   r   r   r{   r,   )r   r   r4   r.   rD   r   r   r    r    r!   r   W  s
    z!StandardDomain.note_citation_refsc             C   s\  | j d | j d  }}x>t|jD ].\}}|s4q$|j| }|d krHq$|j| }	|	jdkrd|	kr|j|	d }	|	d d }|	jdks$d|	ks$|	jd	rq$||krtj	t
d
|||| d |	d ||f||< |	jdkrt|	d }
nV| |	r| |	}
|
sFq$n6|	tjr$|	tjd }|dr$|d }
nq$nq$|||
f||< q$W d S )Nr   r   rC   refidre   r   ZfootnoterefuriZdesc_z(duplicate label %s, other instance in %s)rT   )sectionZrubriccaption)r   r   Z	nametypesZnameidsr#   tagnamerh   rj   rX   rY   r   r   r   is_enumerable_nodeget_numfig_titler   r   Ztoctree)r   r   r4   r.   r   r   r   ZexplicitlabelidrD   sectnamenr    r    r!   r   _  sB    







zStandardDomain.note_labelsc             C   sP   xJt | jd D ]8\}\}}}|| jd krtjtd|dd||fd qW d S )Nr   r   z Citation [%s] is not referenced.r   r   )r   r   rT   )r   r   rX   rY   r   )r   r   r4   r   rZ   r    r    r!   check_consistency  s
    z StandardDomain.check_consistencyc             K   s   | dtj}|dddi|}	t||}
|
dd k	rZ|
d d |
d d|  ||krl||	d< nBtd}||d	< ||d
< ||||	d< |r|	d  d| 7  < |	|
 |	S )N	nodeclassr   ZinternalTr   r)   zstd-r   Z
refdocnameZrefsectnamer   #)r   r   )	rm   r   Z	referenceinlinerh   r,   r   r   Zget_relative_uri)r   fromdocnamebuilderr4   r   r   Zrolenamer   r   Znewnode	innernodecontnoder    r    r!   build_reference_node  s"    


z#StandardDomain.build_reference_nodec       	      C   sz   |dkr| j }nV|dkr | j}nF|dkr0| j}n6|dkr@| j}n&|dkrP| j}n|dkr`| j}n| j}||||||||S )Nr   r   r   r   r   r   )_resolve_ref_xref_resolve_numref_xref_resolve_keyword_xref_resolve_doc_xref_resolve_option_xref_resolve_citation_xref_resolve_obj_xref)	r   r   r   r   typrC   rD   r   Zresolverr    r    r!   resolve_xref  s    zStandardDomain.resolve_xrefc             C   s\   |d r(| j d |d\}}	| }
n| j d |d\}}	}
|sHd S | ||||	|
dS )Nrefexplicitr   )r   r   r   )r   r   r   r   )r   rh   r}   r   )r   r   r   r   r   rC   rD   r   r4   r   r   r    r    r!   r     s    
z StandardDomain._resolve_ref_xrefc          
   C   s  || j d kr(| j d |d\}}	}
n| j d |d\}}	d }
|sJd S ||j|	}| |}|d krrd S |dkr|jjdkrtjt	d|d |S y"| 
|||||}|d kr|S W n* tk
r   tjt	d	||	|d |S X y|d
 r | }n|jj|d}|
d kr<d|kr<tjt	d||d |S dtt|}d|ks`d|kr|
rv|j|
|d}n|j|d}n|| }W nb tk
r } ztjt	d|||d |S d }~X Y n* tk
r   tjt	d||d |S X | j||||	|dtj|dS )Nr   )r   r   r   r   )r   r   r   Fz(numfig is disabled. :numref: is ignored.)rT   z no number is assigned for %s: %sr   r   z{name}zthe link has no caption: %s.number)r   r   )r   zinvalid numfig_format: %s (%r)zinvalid numfig_format: %sr   )r   rq   )r   rh   Zget_doctreer#   get_enumerable_node_typeZconfigZnumfigrX   rY   r   get_fignumberr\   r}   Znumfig_formatjoinmapr   formatKeyError	TypeErrorr   r   Znumber_reference)r   r   r   r   r   rC   rD   r   r4   r   Zfignametarget_nodefigtypeZ	fignumberrq   ZfignumZnewtitleexcr    r    r!   r     sX    


z#StandardDomain._resolve_numref_xrefc             C   s0   | j d |d\}}	}
|s d S t||||	|S )Nr   )r   r   r   )r   rh   r   )r   r   r   r   r   rC   rD   r   r4   r   r   r    r    r!   r     s
    z$StandardDomain._resolve_keyword_xrefc             C   sn   | d|}t||d }	|	|jkr(d S |d r:| }
nt|j|	 }
tj|
|
dgd}t|||	d |S d S )NrefdocrA   r   r   )r   )	rh   r   all_docsr}   r   titlesr   r   r   )r   r   r   r   r   rC   rD   r   r  r4   r   r   r    r    r!   r     s    

z StandardDomain._resolve_doc_xrefc             C   s   | d}| }| jd  ||fd\}	}
|	sg }xVt|rt|d\}}|| d|}| jd  ||fd\}	}
|	r6P q6W d S t|||	|
|S )Nzstd:programrf   )r   r   r&   rc   )	rh   r2   r   r   r   rJ   r,   r   r   )r   r   r   r   r   rC   rD   r   prognamer4   r   ZcommandsZ
subcommandr    r    r!   r   $  s     



z#StandardDomain._resolve_option_xrefc             C   s   ddl m} | jd |d\}	}
}|	sBd|kr>|d d d = d S yt|||	|
|S  |k
r   t|tjs||d d d =  Y nX d S )Nr   )NoUrir   )r   r   r   r#   )Zsphinx.environmentr  r   rh   r   
isinstancer   ZElement)r   r   r   r   r   rC   rD   r   r  r4   r   rZ   r    r    r!   r   :  s    z%StandardDomain._resolve_citation_xrefc             C   sf   |  |pg }x>|D ].}	|	|f| jd kr| jd |	|f \}
}P qW d\}
}|
sVd S t|||
||S )Nr*   )r   r   )Zobjtypes_for_roler   r   )r   r   r   r   r   rC   rD   r   Zobjtypesr+   r4   r   r    r    r!   r   Q  s    
z StandardDomain._resolve_obj_xrefc          
   C   s   g }|  }xDdD ]<}	| ||||	|	dkr.|n|||}
|
r|d|	 |
f qW xj| jD ]`}||f}|dkrv||f}|| jd krZ| jd | \}}|d| | t|||||f qZW |S )N)r   r   r   zstd:rx   r*   )r   r   r,   object_typesr   Zrole_for_objtyper   )r   r   r   r   rC   rD   r   ZresultsZltargetZroleZresr+   r   r4   r   r    r    r!   resolve_any_xref_  s$    
zStandardDomain.resolve_any_xrefc       	      c   sl  x.| j jD ]"}|t| j j| d|ddfV  q
W xft| jd D ]T\\}}}|rzd||g}||d|d |d dfV  q@||d|d |d dfV  q@W xDt| jd	 D ]2\\}}}||||d |d | j| jd
 fV  qW x8t| jd D ]&\}}||d d|d |d dfV  qW t	| jd }x@t| jd D ].\}}||kr6||d|d |d dfV  q6W d S )Nr   r   r%   rf   r   rd   r   r&   r*   r   r   r   r   r   )
r   r  r   r  r   r   r   r  Zattrsr|   )	r   r   progr   inforK   r   r   Znon_anon_labelsr    r    r!   get_objectsu  s     ""
zStandardDomain.get_objectsFc             C   s   |j S )N)Zlname)r   r   Zprimaryr    r    r!   get_type_name  s    zStandardDomain.get_type_namec             C   s   |j | jkS )N)r   r   )r   rD   r    r    r!   r     s    z!StandardDomain.is_enumerable_nodec             C   sN   |  |rJ| j|jd\}}|r*||S x|D ]}|jdkr0t|S q0W dS )z?Get the title of enumerable nodes to refer them using its title)NN)r   rq   N)r   r   rh   r   r   r   )r   rD   r   Ztitle_getterr   r    r    r!   r     s    


zStandardDomain.get_numfig_titlec             C   s`   dd }t |tjrdS t |tjrD|dr>||tjr>dS dS n| j|jd\}}|S dS )zGet type of enumerable nodes.c                s   t  fdd| D S )Nc             3   s   | ]}t | V  qd S )N)r  )r   Zchild)clsr    r!   r     s    zMStandardDomain.get_enumerable_node_type.<locals>.has_child.<locals>.<genexpr>)any)rD   r  r    )r  r!   	has_child  s    z:StandardDomain.get_enumerable_node_type.<locals>.has_childr   literal_blockz
code-blockN)NN)r  r   r   	containerrh   r  r   r   )r   rD   r  r   r   r    r    r!   r     s    z'StandardDomain.get_enumerable_node_typec             C   s   t jdtdd | |S )z?Get figure type of nodes.

        .. deprecated:: 1.8
        zZStandardDomain.get_figtype() is deprecated. Please use get_enumerable_node_type() instead.r   )
stacklevel)warningswarnr   r   )r   rD   r    r    r!   get_figtype  s    
zStandardDomain.get_figtypec          	   C   s   |dkrh|j dkrt S ||jkr(tqd|d d  }||j| krV|j| dS |j| |S n<y|d d }|j| | | S  ttfk
r   tY nX d S )Nr   Zlatexr   r#   r   r   )r   tupleZtoc_secnumbersr\   rh   Ztoc_fignumbersr   
IndexError)r   r   r   r   r4   r   Z
anchornameZ	figure_idr    r    r!   r     s    

zStandardDomain.get_fignumberc             C   sf   | ddkr^| d}t| d}|r8|d| | }|rXdd||gS d S nd S d S )Nr   r   zstd:programrA   r   r   rc   )rh   r   rJ   rI   rm   r   )r   rD   r  Zcommandr   r    r    r!   get_full_qualified_name  s    
z&StandardDomain.get_full_qualified_name)F)6r;   r<   r=   r>   r   r   r   r   r  rk   rS   r?   r   r   r   ro   r@   r   r   r   ZrolesZinitial_dataZdangling_warningsr   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r   r   r   r  r   r  __classcell__r    r    )r   r!   r     s   
	)=	
r   c             C   s   |  t dddddS )NZbuiltinr&   T)versionZenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr   )r   r    r    r!   setup  s
    
r  )N)9r>   rs   r   r  r   Zdocutilsr   Zdocutils.parsers.rstr   Zdocutils.statemachiner   Zsixr   Zsphinxr   Zsphinx.deprecationr   Zsphinx.directivesr	   Zsphinx.domainsr
   r   Zsphinx.localer   r   Zsphinx.rolesr   Zsphinx.utilr   r   r   Zsphinx.util.docutilsr   Zsphinx.util.nodesr   r   Z	getLoggerr;   rX   compilerV   Ur   r   r?   r@   rF   rS   rk   ro   rv   r   r   r   r   r   r  r    r    r    r!   <module>
   sL   

%&:
r(    -