B
    \                 @   s   d Z ddlmZ ddlZddl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 yddlm  mZ W n  ek
r   ddlmZ Y nX eeZG dd deZdd ZdS )a  
    sphinx.builders.devhelp
    ~~~~~~~~~~~~~~~~~~~~~~~

    Build HTML documentation and Devhelp_ support files.

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

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    )absolute_importN)path)nodes)addnodes)StandaloneHTMLBuilder)IndexEntries)__)logging)make_filenamec               @   sJ   e Zd ZdZdZedZdZdddgZdZ	dZ
d	d
 Zdd Zdd ZdS )DevhelpBuilderz7
    Builder that also outputs GNOME Devhelp file.
    Z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             C   s   t |  d| _d| _d S )Nz.html)r   initZ
out_suffixZlink_suffix)self r   6lib/python3.7/site-packages/sphinx/builders/devhelp.pyr   =   s    
zDevhelpBuilder.initc             C   s   |  | j| jj d S )N)build_devhelpoutdirconfigdevhelp_basename)r   r   r   r   handle_finishC   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	d
d }x||D ]}|| qzW t
|d t| j| }	 fddx4|	D ],\}
}x"|D ]\}\}}}
||| qW qW t||d }t|d}||d W d Q R X d S )Nzdumping devhelp index...Zbookz
index.html)titlenamelinkversionchaptersF)Zprune_toctreesc                s   t | tjst | tjr2xr| D ]} || qW nZt | tjrdt|d}x@| D ]} || qPW n(t | tjr| d |j	d< | 
 |j	d< d S )NsubZrefurir   r   )
isinstancer   compact_paragraphr   Zbullet_listZ	list_itemetree
SubElementZ	referenceZattribZastext)nodeparentZsubnodeitem)	write_tocr   r   r"   Y   s    

z/DevhelpBuilder.build_devhelp.<locals>.write_tocc             S   s   t | tjod| kS )NZtoctree)r   r   r   )r   r   r   r   	istoctreeg   s    z/DevhelpBuilder.build_devhelp.<locals>.istoctree	functionsc                s   t |dkrn\t |dkr6tj d| |d d d n4x2t|D ]&\}}tj dd|| f |d d q@W |rtdd| }x(|D ] }d||d f |d g  qW d S )	Nr      Zfunction)r   r   z[%d] %sz\s*\(.*\)\s*$ z%s %s)lenr   r   	enumeraterer   )r   refssubitemsirefZparent_titleZsubitem)r$   write_indexr   r   r.   s   s    

z1DevhelpBuilder.build_devhelp.<locals>.write_indexz.devhelp.gzwzutf-8)loggerinfor   r   ZElementr   Z
html_titleprojectr   ElementTreer   envZget_and_resolve_doctreeZ
master_docZtraverser   Zcreate_indexr   joingzipopenwrite)r   r   ZoutnamerootZtreer   Ztocdocr#   r   indexkeygroupr   r*   r+   Zxmlfilefr   )r$   r.   r"   r   r   G   s.    
zDevhelpBuilder.build_devhelpN)__name__
__module____qualname____doc__r   r   ZepilogZ
copysourceZsupported_image_typesZadd_permalinksZembeddedr   r   r   r   r   r   r   r   *   s   
r   c             C   s2   |  d | t | ddd d  ddddS )Nzsphinx.builders.htmlr   c             S   s
   t | jS )N)r
   r2   )r   r   r   r   <lambda>   s    zsetup.<locals>.<lambda>ZbuiltinT)r   Zparallel_read_safeZparallel_write_safe)Zsetup_extensionZadd_builderr   Zadd_config_value)Zappr   r   r   setup   s    

rC   )rA   Z
__future__r   r6   r)   osr   Zdocutilsr   Zsphinxr   Zsphinx.builders.htmlr   Z(sphinx.environment.adapters.indexentriesr   Zsphinx.localer   Zsphinx.utilr	   Zsphinx.util.osutilr
   Zxml.etree.ElementTreer   r3   ImportErrorZ
lxml.etreeZ	getLoggerr>   r0   r   rC   r   r   r   r   <module>   s$   
f