U
    \Sh                     @  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 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dddddZdS )zSingle HTML builders.    )annotations)path)Any)nodes)Node)Sphinx)StandaloneHTMLBuilder)TocTree)__)logging)	darkgreen)progress_message)inline_all_toctreesc                   @  s   e Zd ZdZdZedZdZddddZd2d
dd
dddZ	d3d
d
dd
dddZ
dddddZd4d
ddd
dddZddddZd dd!d"Zd#dd$d%Zd
d
d
d&d'd(d)Zddd*d+d,Zddd-d.Zeed/ddd0d1Zd	S )5SingleFileHTMLBuilderzb
    A StandaloneHTMLBuilder subclass that puts the whole document tree on one
    HTML page.
    Z
singlehtmlzThe HTML page is in %(outdir)s.Fzstr | list[str])returnc                 C  s   dS )Nzall documents selfr   r   M/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/builders/singlehtml.pyget_outdated_docs!   s    z'SingleFileHTMLBuilder.get_outdated_docsNstrz
str | None)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_urir   None)treer   c                 C  sv   | j j| j }|tjD ]V}d|kr(q|d }|d}|dk rDq|d|d }|dkr|||d   |d< qd S )Nrefuri#r      )r   r   r   findallr   	referencefind)r   r$   fnameZrefnoder%   Z	hashindexr   r   r   fix_refuris1   s    
z!SingleFileHTMLBuilder.fix_refurisTboolr   )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_toctreeznodes.documentc                 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_doctreeG   s    
z&SingleFileHTMLBuilder.assemble_doctreez%dict[str, dict[str, tuple[int, ...]]]c                 C  sN   i }| j j D ]0\}}| D ]\}}| d| }|||< q q| jj|iS N/)r   toc_secnumbersitemsr   r   )r   Znew_secnumbersr   ZsecnumsidZsecnumaliasr   r   r   assemble_toc_secnumbersP   s    
z-SingleFileHTMLBuilder.assemble_toc_secnumbersz0dict[str, dict[str, dict[str, tuple[int, ...]]]]c           	      C  sp   i }| j j D ]R\}}| D ]@\}}| d| }||i  | D ]\}}||| |< qJq q| jj|iS r7   )r   toc_fignumbersr:   
setdefaultr   r   )	r   Znew_fignumbersr   Z
fignumlistZfigtypeZfignumsr<   r;   Zfignumr   r   r   assemble_toc_fignumbersb   s    
z-SingleFileHTMLBuilder.assemble_toc_fignumbersdict[str, Any])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 )NFr0   T )parentsprevnextZ	docstitletitlemetarB   rC   ZrellinksZ
sourcenametocdisplay_toc)r	   r   r1   r   r   r,   r2   Z
html_title)r   r   rB   rC   r3   rJ   rK   r   r   r   get_doc_contextw   s(    
z%SingleFileHTMLBuilder.get_doc_context)ignoredr   c              	   G  s   | j j}ttd | | W 5 Q R X ttd& |  }|  | j _|  | j _	W 5 Q R X ttd& | 
| jj| | | jj| W 5 Q R X d S )Nzpreparing documentszassembling single documentwriting)r   r   r   r
   Zprepare_writingr6   r=   r9   r@   r>   Zwrite_doc_serializedr   r   Z	write_doc)r   rM   ZdocnamesZdoctreer   r   r   write   s    zSingleFileHTMLBuilder.writec                 C  s<   |    |   |   |   |   |   |   d S r!   )write_additional_filesZcopy_image_filesZcopy_download_filesZcopy_static_filesZcopy_extra_filesZwrite_buildinfoZdump_inventoryr   r   r   r   finish   s    zSingleFileHTMLBuilder.finishzwriting additional filesc                 C  sr   | j j D ](\}}tjd| dd | |i | q| j jrnt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_pagesr:   loggerinfoZhandle_pageZhtml_use_opensearchr   joinZoutdir)r   Zpagenametemplatefnr   r   r   rP      s    z,SingleFileHTMLBuilder.write_additional_files)N)N)T)__name__
__module____qualname____doc__namer
   epilogZ
copysourcer   r   r"   r,   r4   r6   r=   r@   rL   rO   rQ   r   rP   r   r   r   r   r      s"   			
r   r   rA   )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 r!   )Zhtml_sidebarsr   r   r   r   <lambda>       zsetup.<locals>.<lambda>htmlbuiltinT)versionZparallel_read_safeZparallel_write_safe)Zsetup_extensionZadd_builderr   Zadd_config_value)r^   r   r   r   setup   s    

rd   N) r[   
__future__r   osr   typingr   Zdocutilsr   Zdocutils.nodesr   Zsphinx.applicationr   Zsphinx.builders.htmlr   Z#sphinx.environment.adapters.toctreer	   Zsphinx.localer
   Zsphinx.utilr   Zsphinx.util.consoler   Zsphinx.util.displayr   Zsphinx.util.nodesr   	getLoggerrX   rS   r   rd   r   r   r   r   <module>   s"   
 "