U
    YSh/                     @   s  d 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mZm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) ej*dd dkrddl+m,Z, nddlm,Z, dZ-dZ.e/e0Z1ee0dZ2e3e4e5Z6e7e6dZ8ddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7Z9dFe:e;e:d9d:d;Z<G d<d= d=ej=Z>G d>d? d?eZ?ee:d@dAdBZ@eee:ef dCdDdEZAdS )Gz
    sphinxcontrib.htmlhelp
    ~~~~~~~~~~~~~~~~~~~~~~

    Build HTML help support files.

    :copyright: Copyright 2007-2019 by the Sphinx team, see README.
    :license: BSD, see LICENSE for details.
    N)path)AnyDictListSetTupleType)nodes)ElementNodedocument)addnodes)Sphinx)StandaloneHTMLBuilder)Config)IndexEntries)get_translation)logging)copy_asset_file)NodeMatcher)make_filename_from_projectrelpath)SphinxRendererHTMLTranslator   )      )progress_messagez2.0.1)r   r   r   consoleZ	templates)i  cp1252)i  cp1250)i  r    )i  r    )	  r    )i
  r    )i%  cp1257)i)  cp1256)i  r    )i  r    )i  r!   )i  r!   )i  r    )i  cp932)i  cp949)i'  r#   )i&  r#   )i  r    )i  r    )i  r!   )i  r    )i  zwindows-1251)i  r!   )i$  r!   )i  r    )i  cp1254)i"  cp1251)i  cp936)i  cp950)cacsdadeenesetfafifrhrhuitjakoltlvnlZno_NBplpt_BRruskslsvtruk_UAzh_CNzh_TWT)squotereturnc                 C   s   t | |} | dd} | S )a5  
    chm_htmlescape() is a wrapper of html.escape().
    .hhc/.hhk files don't recognize hex escaping, we need convert
    hex escaping to decimal escaping. for example: ``&#x27;`` -> ``&#39;``
    html.escape() may generates a hex escaping ``&#x27;`` for single
    quote ``'``, this wrapper fixes this.
    z&#x27;z&#39;)htmlescapereplace)rG   rH    rM   R/root/rtd-docs/venv/lib/python3.8/site-packages/sphinxcontrib/htmlhelp/__init__.pychm_htmlescapeU   s    rO   c                       s   e Zd Zedd fddZeddddZedd	d
ZeddddZ	eddddZ
eddddZeddddZeddddZeddddZeddddZ  ZS )ToCTreeVisitorN)r   rI   c                    s   t  | g | _d| _d S )Nr   )super__init__bodydepth)selfr   	__class__rM   rN   rR   c   s    zToCTreeVisitor.__init__)textrI   c                 C   s   | j | d S N)rS   append)rU   rX   rM   rM   rN   rZ   h   s    zToCTreeVisitor.appendrI   c                 C   s   d | jS )N
)joinrS   rU   rM   rM   rN   astextk   s    zToCTreeVisitor.astext)noderI   c                 C   s   d S rY   rM   rU   r`   rM   rM   rN   unknown_visitn   s    zToCTreeVisitor.unknown_visitc                 C   s   d S rY   rM   ra   rM   rM   rN   unknown_departureq   s    z ToCTreeVisitor.unknown_departurec                 C   s&   | j dkr| d |  j d7  _ d S )Nr   z<UL>r   rT   rZ   ra   rM   rM   rN   visit_bullet_listt   s    

z ToCTreeVisitor.visit_bullet_listc                 C   s&   |  j d8  _ | j dkr"| d d S )Nr   r   </UL>rd   ra   rM   rM   rN   depart_bullet_listz   s    
z!ToCTreeVisitor.depart_bullet_listc                 C   s   |  d |  jd7  _d S )Nz!<LI> <OBJECT type="text/sitemap">r   )rZ   rT   ra   rM   rM   rN   visit_list_item   s    
zToCTreeVisitor.visit_list_itemc                 C   s   |  j d8  _ d S )Nr   )rT   ra   rM   rM   rN   depart_list_item   s    zToCTreeVisitor.depart_list_itemc                 C   sB   t | d}| d|  | d|d   | d tjd S )NTz"    <param name="Name" value="%s">z#    <param name="Local" value="%s">refuriz	</OBJECT>)rO   r_   rZ   r	   ZSkipNode)rU   r`   titlerM   rM   rN   visit_reference   s
    
zToCTreeVisitor.visit_reference)__name__
__module____qualname__r   rR   strrZ   r_   r   rb   rc   r
   re   rg   rh   ri   rl   __classcell__rM   rM   rV   rN   rP   b   s   rP   c                       s*  e Zd ZdZdZedZdZdddgZdZ	dZ
dZd	Zd
Zdd fddZeddddZee dd fddZeeeeddddZddddZeedd fddZeeedddZeed ddd!d"Zeed#ddd$d%Zeed&ddd'd(Zeedd)d*d+Z  ZS ),HTMLHelpBuilderz
    Builder that also outputs Windows HTML help project, contents and
    index files.  Adapted from the original Doc/tools/prechm.py.
    ZhtmlhelpzDYou can now run HTML Help Workshop with the .htp file in %(outdir)s.Fz	image/pngz	image/gifz
image/jpegTr"   r    Nr[   c                    s<   d| _ d| _t   t| jj}|d k	r8|\| _| _	d S )N.html)

out_suffixZlink_suffixrQ   initchm_localesgetconfiglanguagelcidencoding)rU   localerV   rM   rN   ru      s    
zHTMLHelpBuilder.initzType[nodes.NodeVisitor]c                 C   s   t S rY   r   r^   rM   rM   rN   default_translator_class   s    z(HTMLHelpBuilder.default_translator_class)docnamesrI   c                    s   t  | d| jd< d S )NFZhtml5_doctype)rQ   prepare_writingZglobalcontext)rU   r~   rV   rM   rN   r      s    zHTMLHelpBuilder.prepare_writing)pagenametemplatenamectx	event_argrI   c                 C   s   | j |d< d S )Nr{   )r{   )rU   r   r   r   r   rM   rM   rN   update_page_context   s    z#HTMLHelpBuilder.update_page_contextc                 C   s.   |    |   |   | | j| jj d S rY   )copy_stopword_listbuild_project_filebuild_toc_file	build_hhxoutdirrx   htmlhelp_basenamer^   rM   rM   rN   handle_finish   s    zHTMLHelpBuilder.handle_finish)docnamedoctreerI   c                    sB   | tjD ]"}|dd krd|krd|d< qt || d S )NZinternalrj   Z_blanktarget)traverser	   	referencerw   rQ   	write_doc)rU   r   r   r`   rV   rM   rN   r      s    
zHTMLHelpBuilder.write_doc)namecontextrI   c                 C   s   t t}|||S rY   )r   template_dirrender)rU   r   r   templaterM   rM   rN   r      s    zHTMLHelpBuilder.renderzcopying stopword listc                 C   s0   t td}t | j| jjd }t|| dS )a  Copy a stopword list (.stp) to outdir.

        The stopword list contains a list of words the full text search facility
        shouldn't index.  Note that this list must be pretty small.  Different
        versions of the MS docs claim the file has a maximum size of 256 or 512
        bytes (including 
 at the end of each line).  Note that "and", "or",
        "not" and "near" are operators in the search language, so no point
        indexing them even if we wanted to.
        zproject.stpz.stpN)r   r]   r   r   rx   r   r   )rU   r   filenamerM   rM   rN   r      s    z"HTMLHelpBuilder.copy_stopword_listzwriting project filec              	   C   s  g }t | jD ]|\}}}|  |  |t| jd}t|D ]D}|rX|drb|drFt	t||| j}|
|t jd qFqt| j| jjd }t|d| jddL}| jj| jj| jj| jj| j| jj| j |d	}	| d
|	}
||
 W 5 Q R X dS )z'Create a project file (.hhp) on outdir.Z_staticz.jsrs   \z.hhpwxmlcharrefreplacer{   errors)outnamerk   versionprojectrz   
master_docfileszproject.hhpN)oswalkr   sort
startswithr   r]   sortedendswithr   rZ   rL   seprx   r   openr{   Z
html_titler   r   rz   r   rt   r   write)rU   Zproject_filesrootdirsr   Zin_staticdirfnr   fr   rS   rM   rM   rN   r      s*    	z"HTMLHelpBuilder.build_project_filezwriting TOC filec              	   C   s   t | j| jjd }t|d| jdd~}| jj| jj	| dd}t
|}ttjdd}||D ]}|| q`| | j| jj| jj	| jd	}|| d
| W 5 Q R X dS )z#Create a ToC file (.hhp) on outdir.z.hhcr   r   r   F)Zprune_toctreesT)toctree)rS   suffixZshort_titler   domain_indiceszproject.hhcN)r   r]   r   rx   r   r   r{   envZget_and_resolve_doctreer   rP   r   r   Zcompact_paragraphr   Z	walkaboutr_   rt   Zhtml_short_titler   r   r   )rU   r   r   r   visitorZmatcherr`   r   rM   rM   rN   r      s     zHTMLHelpBuilder.build_toc_file)r   r   rI   c              
      s   t td t| j| }t||d }t|d| j	dd  
d tttttf  tttttttf  f  d d fdd	|D ](\}}|D ]\}\}}	}
|||	 qq 
d
 W 5 Q R X d S )Nzwriting index file...z.hhkr   r   r   z<UL>
)rk   refssubitemsrI   c                    s   t t d d fdd}t| d}  d |d|  t|dkrL|d|  nVt|d	krl|d
|d d	  n6t|D ],\}}|dd||d	 f  |d
|d	  qt d |r d |D ]}|d |d	 g  q d d S )N)r   valuerI   c                    s   d| |f }  | d S )Nz!    <param name="%s" value="%s">
)r   )r   r   item)r   rM   rN   write_param  s    zCHTMLHelpBuilder.build_hhx.<locals>.write_index.<locals>.write_paramTz"<LI> <OBJECT type="text/sitemap">
Keywordr   zSee Alsor   ZLocalNamez[%d] %sz
</OBJECT>
z<UL> rf   )rp   rO   r   len	enumerate)rk   r   r   r   irefsubitemr   write_indexrM   rN   r     s"    




z.HTMLHelpBuilder.build_hhx.<locals>.write_indexz</UL>
)loggerinfo__r   r   Zcreate_indexr   r]   r   r{   r   rp   r   r   )rU   r   r   indexr   keygrouprk   r   r   key_rM   r   rN   r     s    
>zHTMLHelpBuilder.build_hhx) rm   rn   ro   __doc__r   r   epilogZ
copysourceZsupported_image_typesZadd_permalinksZembeddedsearchrz   r{   ru   propertyr}   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   rq   rM   rM   rV   rN   rr      s2   




rr   )rx   rI   c                 C   s   t | jd S )z)Better default htmlhelp_basename setting.doc)r   r   )rx   rM   rM   rN   default_htmlhelp_basename1  s    r   )apprI   c                 C   sf   |  d | t | tttd | dt	d | dd dt
g | dd dt
g tddd	S )
Nzsphinx.builders.htmlZlocalesr    Zhtmlhelp_file_suffixrJ   Zhtmlhelp_link_suffixT)r   Zparallel_read_safeZparallel_write_safe)Zsetup_extensionZadd_builderrr   Zadd_message_catalogrm   r   r]   package_dirZadd_config_valuer   rp   __version__)r   rM   rM   rN   setup6  s    

r   )T)Br   rJ   r   r   typingr   r   r   r   r   r   Zdocutilsr	   Zdocutils.nodesr
   r   r   Zsphinxr   Zsphinx.applicationr   Zsphinx.builders.htmlr   Zsphinx.configr   Z(sphinx.environment.adapters.indexentriesr   Zsphinx.localer   Zsphinx.utilr   Zsphinx.util.fileutilr   Zsphinx.util.nodesr   Zsphinx.util.osutilr   r   Zsphinx.util.templater   Zsphinx.writers.htmlr   version_infoZsphinx.util.displayr   r   __version_info__	getLoggerrm   r   r   abspathdirname__file__r   r]   r   rv   rp   boolrO   NodeVisitorrP   rr   r   r   rM   rM   rM   rN   <module>   s   
 

", $