B
    é•[W  ã               @   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
mZmZmZ ddlmZ dd	lmZ G d
d„ deƒZdd„ ZdS )zÛ
    sphinx.builders.websupport
    ~~~~~~~~~~~~~~~~~~~~~~~~~~

    Builder for the web support package.

    :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    )ÚpathN)ÚStringOutput)ÚBuiltinTemplateLoader)Úos_pathÚrelative_uriÚ	ensuredirÚcopyfile)ÚPickleHTMLBuilderé   )ÚWebSupportTranslatorc               @   st   e Zd ZdZdZdZdZeZdd„ Z	dd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ Zddd„Zddd„Zdd„ Zdd„ ZdS )ÚWebSupportBuilderz7
    Builds documents for the web support package.
    Z
websupportZcommentableTc             C   s6   t  | ¡ |  ¡  t| jtƒs&tdƒ‚| j d¡ d S )Nz:websupport builder must be used with the builtin templatesz_static/websupport.js)	r	   ÚinitZinit_templatesÚ
isinstanceÚ	templatesr   ÚRuntimeErrorZscript_filesÚappend)Úself© r   ú?lib/python3.7/site-packages/sphinxcontrib/websupport/builder.pyr   )   s
    
zWebSupportBuilder.initc             C   s   || _ || _|| _|| _d S )N)Ú	staticdirÚvirtual_staticdirÚsearchÚstorage)r   r   r   r   r   r   r   r   Úset_webinfo5   s    zWebSupportBuilder.set_webinfoc             C   s   t  | |¡ d| jd< d S )NTZno_search_suffix)r	   Úprepare_writingÚglobalcontext)r   Údocnamesr   r   r   r   <   s    z!WebSupportBuilder.prepare_writingc             C   s´   t dd}| j|_| jj |i ¡| _| jj |i ¡| _dt	 
| j| j¡ | _dt	 
| jd¡ | _|| _| j ||¡ | j ¡  | jjd }| jj}|  |||¡}| j|||d d S )Nzutf-8)Úencodingú/Z
_downloadsZfragment)Ú	event_arg)r   ZdocsettingsZsettingsÚenvZtoc_secnumbersÚgetZ
secnumbersZtoc_fignumbersZ
fignumbersÚ	posixpathÚjoinr   ÚimagedirÚimgpathZdlpathZcurrent_docnameZ	docwriterÚwriteZassemble_partsÚpartsZ
clean_metaZget_doc_contextÚhandle_page)r   ÚdocnameÚdoctreeZdestinationÚbodyZmetatagsÚctxr   r   r   Ú	write_docA   s    

zWebSupportBuilder.write_docc             C   sV   dt  | j| j¡ | _|  |¡ | jj |¡}|r@|  	|¡d pBd}|  
|||¡ d S )Nr   ÚtitleÚ )r"   r#   r   r$   r%   Zpost_process_imagesr    Z
longtitlesr!   Zrender_partialZ
index_page)r   r)   r*   r.   r   r   r   Úwrite_doc_serializedS   s
    
z&WebSupportBuilder.write_doc_serializedc             C   s   | j | _| jj|d d S )N)Zchanged)r   ÚindexerZinit_indexing)r   r   r   r   r   Úload_indexer[   s    zWebSupportBuilder.load_indexerNc                s  ˆj  ¡ }ˆ |d< dˆ ˆ ¡f‡fdd„	}||d< ‡fdd„|d< ˆjj|d	< ‡ ‡fd
d„|d< ˆ ˆ |¡ | |¡ ˆj dˆ |||¡}|r’|}| 	dd¡| 	dd¡| 	dd¡| 	dd¡dœ}ˆj
j |¡}	|	 |¡}
x&dD ]}t|
|ƒrÞt|
|ƒƒ ||< qÞW ||fS )NÚpagenameFc                sB   |rd| kr| S |s,ˆ   | ¡} t|| ƒp*dS dt ˆ j| ¡ S d S )Nz://ú#r   )Úget_target_urir   r"   r#   r   )ZotheruriÚresourceZbaseuri)r   r   r   Úpathtoh   s    
z.WebSupportBuilder._render_page.<locals>.pathtor7   c                s   | ˆ j jkS )N)r    Zall_docs)Úname)r   r   r   Ú<lambda>s   s    z0WebSupportBuilder._render_page.<locals>.<lambda>Zhasdocr   c                 s   ˆj ˆ f| ŽS )N)Z_get_local_toctree)Úkw)r3   r   r   r   r9   u   s    Ztoctreezhtml-page-contextr+   r/   r.   ÚcssÚscript)r+   r.   r;   r<   )ZsidebarZrelbarr<   r;   )r   Úcopyr5   ZconfigZhtml_output_encodingZadd_sidebarsÚupdateÚappZemit_firstresultr!   r   ZenvironmentZget_templateZmake_moduleÚhasattrÚgetattr)r   r3   ÚaddctxÚtemplatenamer   r,   r7   ZnewtmplÚdoc_ctxÚtemplateZtemplate_moduleÚitemr   )r3   r   r   Ú_render_page`   s0    
	








zWebSupportBuilder._render_pageú	page.htmlc       	      C   s’   |   ||||¡\}}|s2t | jdt|ƒ| j ¡}tt |¡ƒ |  ||¡ | 	d¡rŽt | j
dt|d ƒ¡}tt |¡ƒ t| j |¡|ƒ d S )NZpicklesZ
sourcenameZ_sources)rG   r   r#   Úoutdirr   Z
out_suffixr   ÚdirnameZdump_contextr!   r   r   r    Zdoc2path)	r   r3   rB   rC   Zoutfilenamer   r,   rD   Zsource_namer   r   r   r(   Ž   s    

zWebSupportBuilder.handle_pagec             C   sš   |   di d¡\}}|d | jd< |d | jd< t | ¡ | jdg}xR|D ]J}t | j|¡}t | j|¡}t 	|¡rHt 	|¡r†t
 |¡ t
 ||¡ qHW d S )NZtmpz	page.htmlr;   r<   Z_static)rG   r   r	   Úhandle_finishr$   r   r#   rI   r   ÚisdirÚshutilZrmtreeZmove)r   Ú_rD   ZdirectoriesZ	directoryÚsrcZdstr   r   r   rK   ¢   s    





zWebSupportBuilder.handle_finishc             C   s   | j  ¡  d S )N)r1   Zfinish_indexing)r   r   r   r   Údump_search_indexµ   s    z#WebSupportBuilder.dump_search_index)N)rH   NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r8   Zversioning_methodZversioning_comparer   Zdefault_translator_classr   r   r   r-   r0   r2   rG   r(   rK   rP   r   r   r   r   r       s    
. 
r   c             C   s   |   t¡ ddddœS )NZbuiltinT)ÚversionZparallel_read_safeZparallel_write_safe)Zadd_builderr   )r?   r   r   r   Úsetupº   s    
rV   )rT   Úosr   r"   rM   Zdocutils.ior   Zsphinx.jinja2gluer   Zsphinx.util.osutilr   r   r   r   Zsphinx.builders.htmlr	   Úwriterr   r   rV   r   r   r   r   Ú<module>
   s   
 