a
    `)                     @   sT  d Z ddl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m	Z	m
Z
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 m!Z! ddl"m#Z# ddl$m%Z% e&e'Z(e)e*e+Z,ee'dZ-e.dZ/dZ0e1ee1dddZ2G dd deZ3eee1ef dddZ4dS )z
    sphinxcontrib.qthelp
    ~~~~~~~~~~~~~~~~~~~~

    Build input files for the Qt collection generator.

    :copyright: Copyright 2007-2019 by the Sphinx team, see README.
    :license: BSD, see LICENSE for details.
    N)path)AnyDictIterableListTuplecast)nodes)Node)addnodes)Sphinx)StandaloneHTMLBuilder)IndexEntries)get_translation)logging)NodeMatcher)
canon_pathmake_filename)SphinxRenderer)__version__ZconsolezB(?P<title>.+) (\((class in )?(?P<id>[\w\.]+)( (?P<descr>\w+))?\))$z*<section title="%(title)s" ref="%(ref)s"/>)filenamekwargsreturnc                 K   s   t td| }t||S )NZ	templates)r   joinpackage_dirr   Zrender_from_file)r   r   pathname r   <lib/python3.9/site-packages/sphinxcontrib/qthelp/__init__.pyrender_file.   s    r   c                       s   e Zd ZdZdZedZdZg dZdZ	dZ
dZdZdd fd	d
Zeeef dddZddddZeeddddZeedddZd"eeee dddZeeedddZeee eee dddZeee dd d!Z  ZS )#QtHelpBuilderzN
    Builder that also outputs Qt help project, contents and index files.
    ZqthelpzYou can now run "qcollectiongenerator" with the .qhcp project file in %(outdir)s, like this:
$ qcollectiongenerator %(outdir)s/%(project)s.qhcp
To view the help file:
$ assistant -collectionFile %(outdir)s/%(project)s.qhcF)zimage/svg+xmlz	image/pngz	image/gifz
image/jpegTN)r   c                    s   t    d| _d| _d S )N.html)superinitZ
out_suffixZlink_suffixself	__class__r   r   r"   N   s    
zQtHelpBuilder.initc                 C   s   | j j| j jfS N)configqthelp_themeqthelp_theme_optionsr#   r   r   r   get_theme_configU   s    zQtHelpBuilder.get_theme_configc                 C   s   |  | j| jj d S r'   )	build_qhpoutdirr(   qthelp_basenamer#   r   r   r   handle_finishX   s    zQtHelpBuilder.handle_finish)r-   outnamer   c                 C   sP  t td | jj| jj| dd}g }ttj	dd}|
|D ]}|| | q@| jD ].\}}}	}
t|jd| d }|d|  q\d	|}g }t| jj| dd
}|D ]0\}}|D ]"\}\}}}|| ||| qqd	|}| jjr| jj}nd|| jjf }tdd|}tdd|d}| }tt||d dddL}td|| jj| jj| jj|| jj|||  |d
}|!| W d    n1 s0    Y  dt"|d| #| jj }dt"|dd }t td tt||d ddd0}td|| jj$||d}|!| W d    n1 sB0    Y  d S )Nzwriting project file...F)Zprune_toctreesT)Ztoctreez%s.htmltitlerefz                
)Zgroup_entrieszorg.sphinx.%s.%sz[^a-zA-Z0-9.\-] z\.+.z.qhpwzutf-8)encodingzproject.qhp)	r0   r2   versionproject	namespace
master_docsectionskeywordsfilesz	qthelp://docz
index.htmlz"writing collection project file...z.qhcpzproject.qhcp)r0   r2   homepage	startpage)%loggerinfo__envZget_and_resolve_doctreer(   r<   r   r   compact_paragraphZtraverseextend	write_tocZdomain_indicessection_templateZ	localnameappendr   r   Zcreate_indexbuild_keywordsqthelp_namespacer9   resubstriploweropenr   r   Z
html_titler:   get_project_fileswrite	posixpathZget_target_uriZhtml_short_title)r$   r-   r0   Ztocdocr=   ZmatchernodeZ	indexnameZindexclsZcontentZcollapseitemr>   indexkeygroupr2   refssubitemsZkey_ZnspacefbodyrA   rB   r   r   r   r,   [   s\    



*zQtHelpBuilder.build_qhp)rV   r   c                 C   sf   t |tjsdS t|jdkr"dS t |d tjs6dS t |d d tjsNdS t |d tjsbdS dS )NF   r      T)	
isinstancer	   	list_itemlenZchildrenr   rG   	referencebullet_list)r$   rV   r   r   r   	isdocnode   s    zQtHelpBuilder.isdocnode   )rV   indentlevelr   c                 C   s  g }t |tjr| |rttj|d }ttj|d }|d }t	|
 dd}d||d }|d| |  ttj|d }	tttj |	}
|
D ]}|| ||d  q|d| d	  nt |tjr|D ]}|| || qnt |tjrT|d }t	|
 dd}t||d }d| | }||d
d  nZt |tjr|D ]}|| || qfn,t |tjr|D ]}|| || q|S )Nr   Zrefuri"z&quot;z)<section title="%(title)s" ref="%(ref)s">r1   z    r`   z
</section>asciixmlcharrefreplace)ra   r	   rb   rf   r   r   rG   rd   htmlescapeZastextreplacerK   re   r   rH   rI   rJ   encodedecode)r$   rV   rh   partsrG   rd   linkr2   rW   re   Z
list_itemsrb   Zsubnoder   r   r   rI      s>    zQtHelpBuilder.write_toc)namer3   r   c           
      C   s   t |}|rT| }|d }|d}|dr>|d d }td||f d}nd }tj|dd}tj|d dd}|rd	d
|||f  }	nd	d||f  }	|	dd |	S )Nr2   idz()z%s.%sT)quoter`   z            z%<keyword name="%s" id="%s" ref="%s"/>z<keyword name="%s" ref="%s"/>rj   rk   )
_idpatternmatch	groupdictgetendswithrl   rm   ro   )
r$   rs   r3   Zmatchobjry   Z	shortnamert   ZnameattrZrefattrrW   r   r   r   keyword_item   s     


zQtHelpBuilder.keyword_item)r2   r[   r\   r   c                 C   s   g }t |dkr(|| ||d  n0t |dkrXt|D ]\}}|| || q<|r|D ] }|| |d |d g  q`|S )Nr`   r   )rc   rK   r|   	enumeraterH   rL   )r$   r2   r[   r\   r>   ir3   Zsubitemr   r   r   rL      s    zQtHelpBuilder.build_keywords)r-   r   c                 C   s   | tjs|tj7 }t|}g }t|d}t|| j}t|D ]`\}}}|||f}	t	|D ]>}
|	rx|
 dr|
 drft||
|d  }|
t| qfqF|S )NZ_staticz.jsr    )r{   osseprc   r   r   Zimagedirwalk
startswithsortedrK   r   )r$   r-   ZolenZproject_filesZ	staticdirZ	imagesdirrootdirsr?   Zresourcedirfnr   r   r   r   rS      s    
zQtHelpBuilder.get_project_files)rg   )__name__
__module____qualname____doc__rs   rE   epilogZ
copysourceZsupported_image_typesZadd_permalinksZembeddedZdownload_supportsearchr"   r   strr   r+   r/   r,   r
   boolrf   intr   rI   r   r|   rL   rS   __classcell__r   r   r%   r   r   3   s$   ;"r   )appr   c                 C   st   |  d | t | tttd | ddd d | dd dt	g | dd	d | d
i d t
dddS )Nzsphinx.builders.htmlZlocalesr.   c                 S   s
   t | jS r'   )r   r:   r#   r   r   r   <lambda>      zsetup.<locals>.<lambda>rl   rM   r)   Znonavr*   T)r9   Zparallel_read_safeZparallel_write_safe)Zsetup_extensionZadd_builderr   Zadd_message_catalogr   r   r   r   Zadd_config_valuer   r   )r   r   r   r   setup  s    

r   )5r   rl   r   rU   rN   r   typingr   r   r   r   r   r   Zdocutilsr	   Zdocutils.nodesr
   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   r   Zsphinx.util.templater   Zsphinxcontrib.qthelp.versionr   Z	getLoggerr   rC   abspathdirname__file__r   rE   compilerw   rJ   r   r   r   r   r   r   r   r   <module>   s:   
 

 P