o
    Mi                     @  s  d Z ddlmZ ddlZddlZddl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rZddlmZ ddlm  mZ dZdZ e!e"Z#ee"dZ$e%e&e'Z(G dd deZ)dddZ*dS )zgBuild HTML documentation and Devhelp_ support files.

.. _Devhelp: https://wiki.gnome.org/Apps/Devhelp
    )annotationsN)path)TYPE_CHECKINGAny)nodes)addnodes)StandaloneHTMLBuilder)IndexEntries)get_translation)logging)NodeMatcher)make_filename)Sphinxz2.0.0)   r   r   consolec                      sV   e Zd ZdZdZedZdZg dZdZ	dZ
d fd	d
ZdddZdddZ  ZS )DevhelpBuilderz7
    Builder that also outputs GNOME Devhelp file.
    devhelpzTo view the help file:
$ mkdir -p $HOME/.local/share/devhelp/books
$ ln -s $PWD/%(outdir)s $HOME/.local/share/devhelp/books/%(project)s
$ devhelpF)z	image/pngz	image/gifz
image/jpegTreturnNonec                   s   t    d| _d| _d S )Nz.html)superinit
out_suffixlink_suffixself	__class__ R/home/ubuntu/.local/lib/python3.10/site-packages/sphinxcontrib/devhelp/__init__.pyr   8   s   

zDevhelpBuilder.initc                 C  s   |  | j| jj d S N)build_devhelpoutdirconfigdevhelp_basenamer   r   r   r   handle_finish=   s   zDevhelpBuilder.handle_finishr!   str | os.PathLike[str]outnamestrc                   s<  t td tjd| jj| jjd| jjd}t	|}t
|d}| jj| jj| dd}dfddttjtd}||D ]}|| q@t
|d t| j| }	d  fdd|	D ]\}
}|D ]\}\}}}||| qfq`t||d }tj|ddd}||d W d    d S 1 sw   Y  d S )!Nzdumping devhelp index...bookz
index.html)titlenamelinkversionchaptersF)prune_toctreesnode
nodes.Nodeparentetree.Elementr   r   c                   s   t | tjtjfr| D ]} || qd S t | tjr-t|d}| D ]} || q#d S t | tjrC| d |j	d< | 
 |j	d< d S d S )Nsubrefurir+   r*   )
isinstancer   compact_paragraphr   bullet_list	list_itemetree
SubElement	referenceattribastext)r/   r1   subnodeitem)	write_tocr   r   r@   Q   s   z/DevhelpBuilder.build_devhelp.<locals>.write_toc)toctree	functionsr)   r'   refs	list[Any]subitemsr   c                   s   t |dkrn,t |dkrtj d| |d d d nt|D ]\}}tj dd|| f |d d q|rPtdd| }|D ]}| d|d  |d g  q>d S d S )	Nr      function)r*   r+   z[%d] %sz\s*\(.*\)\s*$  )lenr9   r:   	enumeraterer3   )r)   rC   rE   irefparent_titlesubitem)rB   write_indexr   r   rQ   e   s&   
z1DevhelpBuilder.build_devhelp.<locals>.write_indexz.devhelp.gzwr   )filenamemodemtimezutf-8)r/   r0   r1   r2   r   r   )r)   r'   rC   rD   rE   r   r   r   )loggerinfo__r9   Elementr"   
html_titleprojectr,   ElementTreer:   envget_and_resolve_doctree
master_docr   r   r6   r   findallr	   create_indexr   joingzipGzipFilewrite)r   r!   r&   roottreer-   tocdocmatcherr/   index
_group_keygroupr)   rC   rE   _category_keyxmlfilefr   )rB   rQ   r@   r   r    @   s6   

"zDevhelpBuilder.build_devhelp)r   r   )r!   r%   r&   r'   r   r   )__name__
__module____qualname____doc__r*   rX   epilog
copysourcesupported_image_typesadd_permalinksembeddedr   r$   r    __classcell__r   r   r   r   r   %   s    
r   appr   r   dict[str, Any]c                 C  sP   |  d | d | t | tttd | 	ddd d t
ddd	S )
Nz5.0zsphinx.builders.htmllocalesr#   c                 S  s
   t | jS r   )r   r[   r   r   r   r   <lambda>   s   
 zsetup.<locals>.<lambda>r   T)r,   parallel_read_safeparallel_write_safe)require_sphinxsetup_extensionadd_builderr   add_message_catalogrp   r   rb   package_diradd_config_value__version__)rz   r   r   r   setup   s   


r   )rz   r   r   r{   )+rs   
__future__r   rc   osrL   r   typingr   r   docutilsr   sphinxr   sphinx.builders.htmlr   (sphinx.environment.adapters.indexentriesr	   sphinx.localer
   sphinx.utilr   sphinx.util.nodesr   sphinx.util.osutilr   sphinx.applicationr   xml.etree.ElementTreer9   r\   r   __version_info__	getLoggerrp   rV   rX   abspathdirname__file__r   r   r   r   r   r   r   <module>   s2    

\