B
    .Kc                 @   s   d Z ddlmZ ddl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 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 eeZG dd deZ eee!ef dddZ"dS )zSingle HTML builders.    )path)AnyDictListOptionalTupleUnion)nodes)Node)Sphinx)StandaloneHTMLBuilder)TocTree)__)loggingprogress_message)	darkgreen)inline_all_toctreesc            	   @   sJ  e Zd ZdZdZedZdZee	e
e	 f dddZd(e	ee	 e	d	d
dZd)e	e	ee	 e	dddZeddddZd*e	eee	dddZejdddZee	ee	eedf f f dddZee	ee	ee	eedf f f f dddZe	e	e	ee	ef dddZedd d!d"Zddd#d$Zeed%ddd&d'Z dS )+SingleFileHTMLBuilderzb
    A StandaloneHTMLBuilder subclass that puts the whole document tree on one
    HTML page.
    Z
singlehtmlzThe HTML page is in %(outdir)s.F)returnc             C   s   dS )Nzall documents )selfr   r   9lib/python3.7/site-packages/sphinx/builders/singlehtml.pyget_outdated_docs   s    z'SingleFileHTMLBuilder.get_outdated_docsN)docnametypr   c             C   s0   || j jkr"| jj| j d | S || j S d S )Nz
#document-)envall_docsconfigroot_doc
out_suffix)r   r   r   r   r   r   get_target_uri!   s    z$SingleFileHTMLBuilder.get_target_uri)from_tor   r   c             C   s   |  ||S )N)r    )r   r!   r"   r   r   r   r   get_relative_uri*   s    z&SingleFileHTMLBuilder.get_relative_uri)treer   c             C   sz   | j j| j }xf|tjD ]V}d|kr*q|d }|d}|dk rFq|d|d }|dkr|||d   |d< qW d S )Nrefuri#r      )r   r   r   findallr	   Z	referencefind)r   r$   fnameZrefnoder%   Z	hashindexr   r   r   fix_refuris.   s    
z!SingleFileHTMLBuilder.fix_refurisT)r   collapsekwargsr   c             K   sH   d|krd|d< t | jj|| |f|}|d k	r:| | | |d S )NZincludehiddenFfragment)r   r   get_toctree_forr+   render_partial)r   r   r,   r-   toctreer   r   r   _get_local_toctree<   s    
z(SingleFileHTMLBuilder._get_local_toctreec             C   sP   | j j}| j|}t| t ||t|g}||d< | j|||  | | |S )Nr   )	r   r   r   Zget_doctreer   setr   Zresolve_referencesr+   )r   Zmasterr$   r   r   r   assemble_doctreeD   s    
z&SingleFileHTMLBuilder.assemble_doctree.c             C   sT   i }xB| j j D ]2\}}x(| D ]\}}d||f }|||< q$W qW | jj|iS )Nz%s/%s)r   toc_secnumbersitemsr   r   )r   Znew_secnumbersr   ZsecnumsidZsecnumaliasr   r   r   assemble_toc_secnumbersM   s    
z-SingleFileHTMLBuilder.assemble_toc_secnumbersc       	      C   sz   i }xh| j j D ]X\}}xN| D ]B\}}d||f }||i  x | D ]\}}||| |< qNW q$W qW | jj|iS )Nz%s/%s)r   toc_fignumbersr6   
setdefaultr   r   )	r   Znew_fignumbersr   Z
fignumlistZfigtypeZfignumsr8   r7   Zfignumr   r   r   assemble_toc_fignumbers_   s    
z-SingleFileHTMLBuilder.assemble_toc_fignumbers)r   bodymetatagsr   c             C   sd   t | j| jj| d}|r:| | | |d }d}nd}d}g d d d | jjd ||g d||dS )NFr.   T )parentsprevnextZ	docstitletitlemetar=   r>   ZrellinksZ
sourcenametocdisplay_toc)r   r   r/   r   r   r+   r0   Z
html_title)r   r   r=   r>   r1   rE   rF   r   r   r   get_doc_contextt   s&    
z%SingleFileHTMLBuilder.get_doc_context)ignoredr   c          	   G   s   | j j}ttd | | W d Q R X ttd& |  }|  | j _|  | j _	W d Q R X ttd& | 
| jj| | | jj| W d Q R X d S )Nzpreparing documentszassembling single documentZwriting)r   r   r   r   Zprepare_writingr4   r9   r5   r<   r:   Zwrite_doc_serializedr   r   Z	write_doc)r   rH   ZdocnamesZdoctreer   r   r   write   s    zSingleFileHTMLBuilder.writec             C   s<   |    |   |   |   |   |   |   d S )N)write_additional_filesZcopy_image_filesZcopy_download_filesZcopy_static_filesZcopy_extra_filesZwrite_buildinfoZdump_inventory)r   r   r   r   finish   s    zSingleFileHTMLBuilder.finishzwriting additional filesc             C   sv   x8| j j D ](\}}tjd| dd | |i | qW | j jrrtjddd t| j	dd}| jdi d|d d S )	N T)Znonlz opensearchZ_staticzopensearch.xmlZ
opensearch)Zoutfilename)
r   Zhtml_additional_pagesr6   loggerinfoZhandle_pageZhtml_use_opensearchr   joinZoutdir)r   Zpagenametemplatefnr   r   r   rJ      s    z,SingleFileHTMLBuilder.write_additional_files)N)N)T)!__name__
__module____qualname____doc__namer   epilogZ
copysourcer   strr   r   r   r    r#   r
   r+   boolr   r2   r	   Zdocumentr4   r   r   intr9   r<   rG   rI   rK   r   rJ   r   r   r   r   r      s"   		&.	
r   )appr   c             C   s2   |  d | t | ddd d ddddS )	Nzsphinx.builders.htmlZsinglehtml_sidebarsc             S   s   | j S )N)Zhtml_sidebars)r   r   r   r   <lambda>       zsetup.<locals>.<lambda>ZhtmlZbuiltinT)versionZparallel_read_safeZparallel_write_safe)Zsetup_extensionZadd_builderr   Zadd_config_value)r[   r   r   r   setup   s    

r_   N)#rU   osr   typingr   r   r   r   r   r   Zdocutilsr	   Zdocutils.nodesr
   Zsphinx.applicationr   Zsphinx.builders.htmlr   Z#sphinx.environment.adapters.toctreer   Zsphinx.localer   Zsphinx.utilr   r   Zsphinx.util.consoler   Zsphinx.util.nodesr   Z	getLoggerrR   rM   r   rX   r_   r   r   r   r   <module>   s    
 "