B
    öÀ„\¹+  ã               @   s   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 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 ddlmZ e e¡Z e !d¡Z"dZ#dd„ Z$G dd„ deƒZ%dd„ Z&dS )zá
    sphinx.builders.qthelp
    ~~~~~~~~~~~~~~~~~~~~~~

    Build input files for the Qt collection generator.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Úpath)Únodes)Ú	text_type)Úaddnodes)Úpackage_dir)ÚStandaloneHTMLBuilder)Ústring_classes)ÚIndexEntries)Ú__)Úforce_decodeÚlogging)Úmake_filename)Ú
htmlescape)ÚSphinxRendererzB(?P<title>.+) (\((class in )?(?P<id>[\w\.]+)( (?P<descr>\w+))?\))$z*<section title="%(title)s" ref="%(ref)s"/>c             K   s   t j tdd| ¡}t ||¡S )NZ	templatesÚqthelp)Úosr   Újoinr   r   Zrender_from_file)ÚfilenameÚkwargsÚpathname© r   ú5lib/python3.7/site-packages/sphinx/builders/qthelp.pyÚrender_file0   s    r   c               @   s†   e Zd ZdZdZedƒZdZddddgZdZ	d	Z
dZdZd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zddd„Zdd„ Zdd„ Zdd„ ZdS )ÚQtHelpBuilderzN
    Builder that also outputs Qt help project, contents and index files.
    r   zÝYou 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.qhcFzimage/svg+xmlz	image/pngz	image/gifz
image/jpegTc             C   s   t  | ¡ d| _d| _d S )Nz.html)r   ÚinitZ
out_suffixZlink_suffix)Úselfr   r   r   r   Q   s    
zQtHelpBuilder.initc             C   s   | j j| j jfS )N)ÚconfigÚqthelp_themeÚqthelp_theme_options)r   r   r   r   Úget_theme_configY   s    zQtHelpBuilder.get_theme_configc             C   s   |   | j| jj¡ d S )N)Ú	build_qhpÚoutdirr   Úqthelp_basename)r   r   r   r   Úhandle_finish]   s    zQtHelpBuilder.handle_finishc             C   sf  t  tdƒ¡ | jj| jj| dd}dd„ }g }x"| |¡D ]}| |  	|¡¡ q<W x8| j
D ].\}}}	}
t|jd| dœ }| d| ¡ q\W g }x2|D ]*}t|tƒs¸| t|d ƒ¡ q˜| |¡ q˜W d	 |¡}g }t| jƒj| dd
}x<|D ]4\}}x*|D ]"\}\}}}| |  |||¡¡ qüW qîW d	 |¡}| jjrD| jj}nd|| jjf }t dd|¡}t dd|¡ d¡}| ¡ }t t ||d ¡dd¡B}td|| jj| jj| jj || jj|||  !|¡d
}| "|¡ W d Q R X dt# |d|  $| jj¡¡ }dt# |dd¡ }t  tdƒ¡ t t ||d ¡dd¡&}td|| jj%||d}| "|¡ W d Q R X d S )Nzwriting project file...F)Zprune_toctreesc             S   s   t | tjƒod| kS )NZtoctree)Ú
isinstancer   Úcompact_paragraph)Únoder   r   r   Ú	istoctreei   s    z*QtHelpBuilder.build_qhp.<locals>.istoctreez%s.html)ÚtitleÚrefz                Ú
)Zgroup_entrieszorg.sphinx.%s.%sz[^a-zA-Z0-9.\-]Ú z\.+Ú.z.qhpÚwzutf-8zproject.qhp)	Úoutnamer(   ÚversionÚprojectÚ	namespaceÚ
master_docÚsectionsÚkeywordsÚfilesz	qthelp://Údocz
index.htmlz"writing collection project file...z.qhcpzproject.qhcp)r.   r(   ÚhomepageÚ	startpage)&ÚloggerÚinfor
   ÚenvZget_and_resolve_doctreer   r2   ZtraverseÚextendÚ	write_tocZdomain_indicesÚsection_templateZ	localnameÚappendr$   r   r   r   r	   Zcreate_indexÚbuild_keywordsÚqthelp_namespacer/   ÚreÚsubÚstripÚlowerÚcodecsÚopenr   r   Z
html_titler0   Úget_project_filesÚwriteÚ	posixpathZget_target_uriZhtml_short_title)r   r!   r.   Ztocdocr'   r3   r&   Z	indexnameZindexclsZcontentZcollapseÚitemZnew_sectionsZsectionr4   ÚindexÚkeyÚgroupr(   ÚrefsÚsubitemsZkey_ZnspaceÚfZbodyr7   r8   r   r   r   r    a   s\    






zQtHelpBuilder.build_qhpc             C   sl   t |tjƒsdS t|jƒdkr"dS t |jd tjƒs8dS t |jd d tjƒsRdS t |jd tjƒshdS dS )NFé   r   é   T)	r$   r   Ú	list_itemÚlenÚchildrenr   r%   Ú	referenceÚbullet_list)r   r&   r   r   r   Ú	isdocnode¨   s    zQtHelpBuilder.isdocnodeé   c       	      C   s‚  g }|   |¡r–|jd d }|d }t| ¡ ƒ dd¡}d||dœ }| d| | ¡ x(|jd D ]}| |  ||d ¡¡ qdW | d| d	 ¡ nèt|t	j
ƒrÄxÚ|D ]}| |  ||¡¡ q¨W nºt|t	jƒr|d }t| ¡ ƒ dd¡}t||dœ }d| | }| | d
d¡¡ nbt|t	jƒrNxR|D ]}| |  ||¡¡ q0W n0t|tjƒr~x |D ]}| |  ||¡¡ qbW |S )Nr   Zrefuriú"z&quot;z)<section title="%(title)s" ref="%(ref)s">)r(   r)   z    rS   z
</section>ÚasciiÚxmlcharrefreplace)rY   rV   r   ZastextÚreplacer?   r<   r=   r$   r   rT   rW   r>   ÚencoderX   r   r%   )	r   r&   ZindentlevelÚpartsZrefnodeÚlinkr(   rK   Zsubnoder   r   r   r=   ¶   s6    



zQtHelpBuilder.write_tocc       
      C   s¤   t  |¡}|rL| ¡ }|d }| d¡}| d¡r>|d d… }d||f }nd }t|dd}t|d dd}|r„d	d
|||f  }	nd	d||f  }	|	 dd¡ |	S )Nr(   Úidz()éþÿÿÿz%s.%sT)ZquoterS   z            z%<keyword name="%s" id="%s" ref="%s"/>z<keyword name="%s" ref="%s"/>r\   r]   )Ú
_idpatternÚmatchÚ	groupdictÚgetÚendswithr   r_   )
r   Únamer)   Zmatchobjrf   Z	shortnamerb   ZnameattrZrefattrrK   r   r   r   Úkeyword_itemÖ   s     


zQtHelpBuilder.keyword_itemc             C   sŽ   g }t |ƒdkr(| |  ||d ¡¡ n4t |ƒdkr\x&t|ƒD ]\}}| |  ||¡¡ q>W |rŠx(|D ] }| |  |d |d g ¡¡ qfW |S )NrS   r   )rU   r?   rj   Ú	enumerater<   r@   )r   r(   rO   rP   r4   Úir)   Zsubitemr   r   r   r@   í   s    
 zQtHelpBuilder.build_keywordsc             C   s°   |  tj¡s|tj7 }t|ƒ}g }t |d¡}t || j¡}xnt |¡D ]`\}}}| ||f¡}	xFt	|ƒD ]:}
|	r||
  d¡r†|
  d¡rjt ||
¡|d … }| 
|¡ qjW qHW |S )NZ_staticz.jsz.html)rh   r   ÚseprU   r   r   ZimagedirÚwalkÚ
startswithÚsortedr?   )r   r!   ZolenZproject_filesZ	staticdirZ	imagesdirÚrootÚdirsr5   ZresourcedirÚfnr   r   r   r   rH     s    
zQtHelpBuilder.get_project_filesN)rZ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ri   r
   ZepilogZ
copysourceZsupported_image_typesZadd_permalinksZembeddedZdownload_supportÚsearchr   r   r#   r    rY   r=   rj   r@   rH   r   r   r   r   r   6   s&   G
 r   c             C   s^   |   d¡ |  t¡ |  ddd„ d ¡ |  dd dt¡ |  ddd¡ |  d	i d¡ d
dddœS )Nzsphinx.builders.htmlr"   c             S   s
   t | jƒS )N)r   r0   )r   r   r   r   Ú<lambda>  s    zsetup.<locals>.<lambda>rA   Zhtmlr   Znonavr   ZbuiltinT)r/   Zparallel_read_safeZparallel_write_safe)Zsetup_extensionZadd_builderr   Zadd_config_valuer   )Zappr   r   r   Úsetup  s    

rz   )'rw   rF   r   rJ   rB   r   Zdocutilsr   Zsixr   Zsphinxr   r   Zsphinx.builders.htmlr   Zsphinx.configr   Z(sphinx.environment.adapters.indexentriesr	   Zsphinx.localer
   Zsphinx.utilr   r   Zsphinx.util.osutilr   Zsphinx.util.pycompatr   Zsphinx.util.templater   Z	getLoggerrt   r9   Úcompilerd   r>   r   r   rz   r   r   r   r   Ú<module>
   s2   
 a