U
    YSh                     @   s0  d 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 ddlmZ ddlmZ zddlm  mZ W n  ek
r   ddl mZ Y nX e"e#Z$ee#dZ%e&e'e(Z)G dd deZ*eee+ef dddZ,dS )a  
    sphinxcontrib.devhelp
    ~~~~~~~~~~~~~~~~~~~~~

    Build HTML documentation and Devhelp_ support files.

    .. _Devhelp: https://wiki.gnome.org/Apps/Devhelp

    :copyright: Copyright 2007-2019 by the Sphinx team, see README.
    :license: BSD, see LICENSE for details.
    N)path)AnyDict)nodes)addnodes)Sphinx)StandaloneHTMLBuilder)IndexEntries)get_translation)logging)NodeMatcher)make_filename)__version__consolec                       sR   e Zd ZdZdZedZdZdddgZdZ	dZ
 fd	d
Zdd Z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
$ devhelpFz	image/pngz	image/gifz
image/jpegTc                    s   t    d| _d| _d S )Nz.html)superinitZ
out_suffixZlink_suffixself	__class__ Q/root/rtd-docs/venv/lib/python3.8/site-packages/sphinxcontrib/devhelp/__init__.pyr   B   s    
zDevhelpBuilder.initc                 C   s   |  | j| jj d S N)build_devhelpoutdirconfigdevhelp_basenamer   r   r   r   handle_finishH   s    zDevhelpBuilder.handle_finishc              	      s  t td tjd| jj| jjd| jjd}t	|}t
|d}| jj| jj| dd}fdd	ttjtd
}||D ]}|| q~t
|d t| j| }	 fdd|	D ](\}
}|D ]\}\}}}
||| qqt||d }t|d}||d W 5 Q R X d S )Nzdumping devhelp index...bookz
index.html)titlenamelinkversionchaptersF)Zprune_toctreesc                    s   t | tjst | tjr.| D ]} || qnVt | tjr\t|d}| D ]} || qJn(t | tjr| d |j	d< | 
 |j	d< d S )NsubZrefurir#   r"   )
isinstancer   compact_paragraphr   Zbullet_listZ	list_itemetree
SubElement	referenceZattribZastext)nodeparentZsubnodeitem)	write_tocr   r   r/   ^   s    
z/DevhelpBuilder.build_devhelp.<locals>.write_toc)Ztoctree	functionsc                    s   t |dkrnXt |dkr6tj d| |d d d n0t|D ]&\}}tj dd|| f |d d q>|rtdd| }|D ] }d||d f |d g  q|d S )	Nr      function)r"   r#   z[%d] %sz\s*\(.*\)\s*$ z%s %s)lenr)   r*   	enumeraterer&   )r!   refssubitemsirefZparent_titlesubitem)r0   write_indexr   r   r<   t   s&     

 z1DevhelpBuilder.build_devhelp.<locals>.write_indexz.devhelp.gzwzutf-8)loggerinfo__r)   ZElementr   Z
html_titleprojectr$   ElementTreer*   envZget_and_resolve_doctreeZ
master_docr   r   r(   r   traverser	   Zcreate_indexr   joingzipopenwrite)r   r   outnameroottreer%   ZtocdocZmatcherr,   indexkeygroupr!   r7   r8   Zxmlfilefr   )r0   r<   r/   r   r   L   s6    
  zDevhelpBuilder.build_devhelp)__name__
__module____qualname____doc__r"   r@   epilogZ
copysourceZsupported_image_typesZadd_permalinksZembeddedr   r   r   __classcell__r   r   r   r   r   /   s   
r   )appreturnc                 C   sF   |  d | t | tttd | ddd d t	dddS )	Nzsphinx.builders.htmlZlocalesr   c                 S   s
   t | jS r   )r   rA   r   r   r   r   <lambda>       zsetup.<locals>.<lambda>r   T)r$   Zparallel_read_safeZparallel_write_safe)
Zsetup_extensionZadd_builderr   Zadd_message_catalogrP   r   rE   package_dirZadd_config_valuer   )rV   r   r   r   setup   s    

r[   )-rS   rF   r6   osr   typingr   r   Zdocutilsr   Zsphinxr   Zsphinx.applicationr   Zsphinx.builders.htmlr   Z(sphinx.environment.adapters.indexentriesr	   Zsphinx.localer
   Zsphinx.utilr   Zsphinx.util.nodesr   Zsphinx.util.osutilr   Zsphinxcontrib.devhelp.versionr   Zxml.etree.ElementTreer)   rB   ImportErrorZ
lxml.etreeList	getLoggerrP   r>   r@   abspathdirname__file__rZ   r   strr[   r   r   r   r   <module>   s.   

b