o
    Ni                     @  s   d 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 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r`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Z$dS )zSingle HTML builders.    )annotations)path)TYPE_CHECKINGAny)nodes)StandaloneHTMLBuilder)global_toctree_for_doc)__)logging)	darkgreen)progress_message)inline_all_toctrees)Set)Node)Sphinx)ExtensionMetadatac                   @  s   e Zd ZdZdZedZdZd7ddZd8d9ddZ	d8d:ddZ
d;ddZ	d<d=ddZd>d!d"Zd?d$d%Zd@d'd(ZdAd,d-ZdBd0d1ZdCd2d3Zeed4dCd5d6Zd	S )DSingleFileHTMLBuilderzb
    A StandaloneHTMLBuilder subclass that puts the whole document tree on one
    HTML page.
    
singlehtmlzThe HTML page is in %(outdir)s.Freturnstr | list[str]c                 C  s   dS )Nzall documents selfr   r   N/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/builders/singlehtml.pyget_outdated_docs(   s   z'SingleFileHTMLBuilder.get_outdated_docsNdocnamestrtyp
str | Nonec                 C  s   || j jv r
d| S || j S )Nz
#document-)envall_docs
out_suffix)r   r   r   r   r   r   get_target_uri+   s   
z$SingleFileHTMLBuilder.get_target_urifrom_toc                 C  s   |  ||S N)r"   )r   r#   r$   r   r   r   r   get_relative_uri3   s   z&SingleFileHTMLBuilder.get_relative_uritreer   Nonec                 C  sd   | tjD ])}d|vrq|d }|d}|dk rq|d|d }|dkr/||d  |d< qd S )Nrefuri#r      )findallr   	referencefind)r   r'   refnoder)   	hashindexr   r   r   fix_refuris7   s   
z!SingleFileHTMLBuilder.fix_refurisTcollapseboolkwargsr   c                 K  s   t |d }tr| dkrd|d< n
| dkrd|d< |ddkr+|d t| j|| fd|i|}|d urA| | | |d	 S )
NincludehiddenfalseFtrueTmaxdepth r2   fragment)	
isinstancegetr   lowerpopr   r   r1   render_partial)r   r   r2   r4   r5   toctreer   r   r   _get_local_toctreeE   s"   


z(SingleFileHTMLBuilder._get_local_toctreenodes.documentc                 C  s^   | j j}| j|}tt| t| t ||t|g}||d< | j	|||  | 
| |S )Nr   )configroot_docr   get_doctreeloggerinfor   r   setresolve_referencesr1   )r   masterr'   r   r   r   assemble_doctreeV   s   
z&SingleFileHTMLBuilder.assemble_doctree%dict[str, dict[str, tuple[int, ...]]]c                 C  sN   i }| j j D ]\}}| D ]\}}| d| }|||< qq| jj|iS N/)r   toc_secnumbersitemsrC   rD   )r   new_secnumbersr   secnumsidsecnumaliasr   r   r   assemble_toc_secnumbers`   s   

z-SingleFileHTMLBuilder.assemble_toc_secnumbers0dict[str, dict[str, dict[str, tuple[int, ...]]]]c           	      C  sp   i }| j j D ])\}}| D ] \}}| d| }||i  | D ]
\}}||| |< q%qq| jj|iS rM   )r   toc_fignumbersrP   
setdefaultrC   rD   )	r   new_fignumbersr   
fignumlistfigtypefignumsrU   rS   fignumr   r   r   assemble_toc_fignumbersr   s   z-SingleFileHTMLBuilder.assemble_toc_fignumbersbodymetatagsdict[str, Any]c                 C  sb   t | j| jj| dd}|r| | | |d }d}nd}d}g d d d | jjd ||g d||dS )NF)r2   r:   Tr9   )parentsprevnext	docstitletitlemetar`   ra   rellinks
sourcenametocdisplay_toc)r   r   rC   rD   r1   r?   
html_title)r   r   r`   ra   r@   rk   rl   r   r   r   get_doc_context   s,   
z%SingleFileHTMLBuilder.get_doc_context	_docnamesSet[str]c                 C  s   |  | jj  ttddd |  }|  | j_| 	 | j_
W d    n1 s,w   Y  ttd | | jj| | | jj| W d    d S 1 sSw   Y  d S )Nzassembling single documentFnonlwriting)prepare_writingr   r    keysr   r	   rK   rV   rO   r_   rX   write_doc_serializedrC   rD   	write_doc)r   ro   doctreer   r   r   write_documents   s   "z%SingleFileHTMLBuilder.write_documentsc                 C  s<   |    |   |   |   |   |   |   d S r%   )write_additional_filescopy_image_filescopy_download_filescopy_static_filescopy_extra_fileswrite_buildinfodump_inventoryr   r   r   r   finish   s   zSingleFileHTMLBuilder.finishzwriting additional filesc                 C  sv   | j j D ]\}}tjd| dd | |i | q| j jr9tjddd t| j	dd}| jdi d|d d S d S )	N Trq   z opensearch_staticzopensearch.xml
opensearch)outfilename)
rC   html_additional_pagesrP   rF   rG   handle_pagehtml_use_opensearchr   joinoutdir)r   pagenametemplatefnr   r   r   rz      s   z,SingleFileHTMLBuilder.write_additional_files)r   r   r%   )r   r   r   r   r   r   )r#   r   r$   r   r   r   r   r   )r'   r   r   r(   )T)r   r   r2   r3   r4   r   r   r   )r   rB   )r   rL   )r   rW   )r   r   r`   r   ra   r   r   rb   )ro   rp   r   r(   )r   r(   )__name__
__module____qualname____doc__namer	   epilog
copysourcer   r"   r&   r1   rA   rK   rV   r_   rn   ry   r   r   rz   r   r   r   r   r      s&    









	r   appr   r   r   c                 C  s2   |  d | t | ddd d ddddS )	Nzsphinx.builders.htmlsinglehtml_sidebarsc                 S  s   | j S r%   )html_sidebarsr   r   r   r   <lambda>   s    zsetup.<locals>.<lambda>htmlbuiltinT)versionparallel_read_safeparallel_write_safe)setup_extensionadd_builderr   add_config_value)r   r   r   r   setup   s   

r   N)r   r   r   r   )%r   
__future__r   osr   typingr   r   docutilsr   sphinx.builders.htmlr   #sphinx.environment.adapters.toctreer   sphinx.localer	   sphinx.utilr
   sphinx.util.consoler   sphinx.util.displayr   sphinx.util.nodesr   collections.abcr   docutils.nodesr   sphinx.applicationr   sphinx.util.typingr   	getLoggerr   rF   r   r   r   r   r   r   <module>   s*    
 -