o
    Mi0                     @  s>  d Z ddlm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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m Z  ddl!m"Z" erddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ej*dd dkrddl+m,Z, nddlm,Z, dZ-dZ.e/e0Z1ee0dZ2e3e4e5Z6e7e6dZ8i ddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJZ9d`dadQdRZ:G dSdT dTej;Z<G dUdV dVeZ=dbdYdZZ>dcd^d_Z?dS )dzBuild HTML help support files.    )annotationsN)codepoint2name)path)Path)TYPE_CHECKINGAny)nodes)addnodes)StandaloneHTMLBuilder)IndexEntries)get_translation)logging)copy_asset_file)NodeMatcher)make_filename_from_projectrelpath)SphinxRenderer)ElementNode)Sphinx)Config   )      )progress_messagez2.1.0)r   r   r   console	templatesca)i  cp1252cs)i  cp1250da)i  r   de)i  r   en)	  r   es)i
  r   et)i%  cp1257fa)i)  cp1256fi)i  r   fr)i  r   hr)i  r    hu)i  r    it)i  r   ja)i  cp932ko)i  cp949lt)i'  r'   lv)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)nlno_NBplpt_BRruskslsvtruk_UAzh_CNzh_TWTsstrquotebool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)rE   rG    rM   S/home/ubuntu/.local/lib/python3.10/site-packages/sphinxcontrib/htmlhelp/__init__.pychm_htmlescapeR   s   rO   c                      sx   e Zd Zd fddZdd	d
Zd ddZd!ddZd!ddZd"ddZd"ddZ	d"ddZ
d"ddZd"ddZ  ZS )#ToCTreeVisitordocumentnodes.documentrI   Nonec                   s   t  | g | _d| _d S )Nr   )super__init__bodydepth)selfrQ   	__class__rM   rN   rU   `   s   
zToCTreeVisitor.__init__textrF   c                 C  s   | j | d S N)rV   append)rX   r[   rM   rM   rN   r]   e   s   zToCTreeVisitor.appendc                 C  s   d | jS )N
)joinrV   rX   rM   rM   rN   astexth   s   zToCTreeVisitor.astextnoder   c                 C     d S r\   rM   rX   rb   rM   rM   rN   unknown_visitk      zToCTreeVisitor.unknown_visitc                 C  rc   r\   rM   rd   rM   rM   rN   unknown_departuren   rf   z ToCTreeVisitor.unknown_departurer   c                 C  s&   | j dkr
| d |  j d7  _ d S )Nr   z<UL>r   rW   r]   rd   rM   rM   rN   visit_bullet_listq   s   

z ToCTreeVisitor.visit_bullet_listc                 C  s*   |  j d8  _ | j dkr| d d S d S )Nr   r   </UL>rh   rd   rM   rM   rN   depart_bullet_listw   s   
z!ToCTreeVisitor.depart_bullet_listc                 C  s   |  d |  jd7  _d S )Nz!<LI> <OBJECT type="text/sitemap">r   )r]   rW   rd   rM   rM   rN   visit_list_item|   s   
zToCTreeVisitor.visit_list_itemc                 C  s   |  j d8  _ d S )Nr   )rW   rd   rM   rM   rN   depart_list_item   s   zToCTreeVisitor.depart_list_itemc                 C  sF   t | d}| d| d | d|d  d | d tj)NTz    <param name="Name" value="z">z    <param name="Local" value="refuriz	</OBJECT>)rO   ra   r]   r   SkipNode)rX   rb   titlerM   rM   rN   visit_reference   s
   
zToCTreeVisitor.visit_reference)rQ   rR   rI   rS   )r[   rF   rI   rS   )rI   rF   )rb   r   rI   rS   )rb   r   rI   rS   )__name__
__module____qualname__rU   r]   ra   re   rg   ri   rk   rl   rm   rq   __classcell__rM   rM   rY   rN   rP   _   s    







rP   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Zd6 fddZd7 fddZd8ddZed9ddZd6ddZd: fd"d#Zd;d&d'Zeed(d6d)d*Zeed+d6d,d-Zeed.d6d/d0Zd<d4d5Z  ZS )=HTMLHelpBuilderz
    Builder that also outputs Windows HTML help project, contents and
    index files.  Adapted from the original Doc/tools/prechm.py.
    htmlhelpzDYou can now run HTML Help Workshop with the .htp file in %(outdir)s.F)z	image/pngz	image/gifz
image/jpegTr$   r   rI   rS   c                   s@   d| _ d| _t   t| jj}|d ur|\| _| _	d S d S )N.html)

out_suffixlink_suffixrT   initchm_localesgetconfiglanguagelcidencoding)rX   localerY   rM   rN   r{      s   
zHTMLHelpBuilder.initdocnamesset[str]c                   s   t  | d| jd< d S )NFhtml5_doctype)rT   prepare_writingglobalcontext)rX   r   rY   rM   rN   r      s   zHTMLHelpBuilder.prepare_writingpagenamerF   templatenamectxdict[str, Any]	event_argc                 C  s8   | j |d< |d}|d urtd| j||d< d S d S )Nr   rV   z[^\x00-\x7F])r   r}   resub_escape)rX   r   r   r   r   rV   rM   rM   rN   update_page_context   s
   

z#HTMLHelpBuilder.update_page_contextmatchre.Match[str]c                 C  s2   t | d}|tv rdt|  dS d| dS )Nr   &;z&#)ordgroupr   )r   	codepointrM   rM   rN   r      s   zHTMLHelpBuilder._escapec                 C  s.   |    |   |   | | j| jj d S r\   )copy_stopword_listbuild_project_filebuild_toc_file	build_hhxoutdirr~   htmlhelp_basenamer`   rM   rM   rN   handle_finish   s   zHTMLHelpBuilder.handle_finishdocnamedoctreerR   c                   sB   | tjD ]}|dd u rd|v rd|d< qt || d S )Ninternalrn   _blanktarget)findallr   	referencer}   rT   	write_doc)rX   r   r   rb   rY   rM   rN   r      s
   zHTMLHelpBuilder.write_docnamecontextc                 C  s   t t}|||S r\   )r   template_dirrender)rX   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   r~   r   r   )rX   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 ]"}|r,|dr1|drEt	t||| j}|
|t jd q#q| jj| jj| jj| jj| j| jj| j |d}| d|}t| j| jj d}	|	j|| jdd	 d
S )z'Create a project file (.hhp) on outdir._staticz.jsrx   \)outnamerp   versionprojectr   
master_docfileszproject.hhpz.hhpxmlcharrefreplacer   errorsN)oswalkr   sort
startswithr   r_   sortedendswithr   r]   rL   sepr~   r   
html_titler   r   r   r   ry   r   r   
write_textr   )
rX   project_filesrootdirsr   in_staticdirfnr   rV   r   rM   rM   rN   r      s,   	z"HTMLHelpBuilder.build_project_filezwriting TOC filec                 C  s   | j j| jj| dd}t|}ttjdd}||D ]}|	| q|
 | j| jj| jj| jd}| d|}t| j| jj d}|j|| jdd	 d
S )z#Create a ToC file (.hhp) on outdir.F)prune_toctreesT)toctree)rV   suffixshort_titler   domain_indiceszproject.hhcz.hhcr   r   N)envget_and_resolve_doctreer~   r   rP   r   r	   compact_paragraphr   	walkaboutra   ry   html_short_titler   r   r   r   r   r   r   )rX   r   visitormatcherrb   r   rV   r   rM   rM   rN   r     s    zHTMLHelpBuilder.build_toc_filer   str | os.PathLike[str]r   c                   s   t td t| j| }t||d }t|d| jdd1  	d d fdd|D ]\}}|D ]\}\}}	}
|||	 q5q/ 	d W d    n1 sSw   Y  |
 dd}|| d S )Nzwriting index file...z.hhkwr   r   z<UL>
rp   rF   refslist[tuple[str, str]]subitems'list[tuple[str, list[tuple[str, str]]]]rI   rS   c                   s   d fdd}t | d}  d	 |d
|  t|dkr"|d|  n+t|dkr2|d|d d  nt|D ]\}}|dd||d f  |d|d  q6 d |ro d |D ]}|d |d g  q[ d d S d S )Nr   rF   valuerI   rS   c                   s    d|  d| d}  | d S )Nz    <param name="z	" value="z">
)write)r   r   item)frM   rN   write_param#  s   zCHTMLHelpBuilder.build_hhx.<locals>.write_index.<locals>.write_paramTz"<LI> <OBJECT type="text/sitemap">
Keywordr   zSee Alsor   LocalNamez[%d] %sz
</OBJECT>
z<UL> rj   )r   rF   r   rF   rI   rS   )rO   r   len	enumerate)rp   r   r   r   irefsubitemr   write_indexrM   rN   r     s$   




z.HTMLHelpBuilder.build_hhx.<locals>.write_indexz</UL>
s   &#x27;s   &#39;)rp   rF   r   r   r   r   rI   rS   )loggerinfo__r   r   create_indexr   openr   r   
read_bytesrL   write_bytes)rX   r   r   indexr   
_group_keyr   rp   r   r   _category_keycontentrM   r   rN   r     s   
"zHTMLHelpBuilder.build_hhx)rI   rS   )r   r   rI   rS   )
r   rF   r   rF   r   r   r   rF   rI   rS   )r   r   rI   rF   )r   rF   r   rR   rI   rS   )r   rF   r   r   rI   rF   )r   r   r   rF   rI   rS   )rr   rs   rt   __doc__r   r   epilog
copysourcesupported_image_typesadd_permalinksembeddedsearchr   r   r{   r   r   staticmethodr   r   r   r   r   r   r   r   r   ru   rM   rM   rY   rN   rv      s4    






rv   r~   r   c                 C  s   t | jd S )z)Better default htmlhelp_basename setting.doc)r   r   )r~   rM   rM   rN   default_htmlhelp_basenameA  s   r   appr   r   c                 C  sp   |  d | 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5.0zsphinx.builders.htmllocalesr    htmlhelp_file_suffixrJ   htmlhelp_link_suffixT)r   parallel_read_safeparallel_write_safe)require_sphinxsetup_extensionadd_builderrv   add_message_catalogrr   r   r_   package_diradd_config_valuer   rF   __version__)r   rM   rM   rN   setupF  s   


r	  )T)rE   rF   rG   rH   rI   rF   )r~   r   rI   rF   )r   r   rI   r   )@r   
__future__r   rJ   r   r   html.entitiesr   r   pathlibr   typingr   r   sphinxdocutilsr   r	   sphinx.builders.htmlr
   (sphinx.environment.adapters.indexentriesr   sphinx.localer   sphinx.utilr   sphinx.util.fileutilr   sphinx.util.nodesr   sphinx.util.osutilr   r   sphinx.util.templater   docutils.nodesr   r   sphinx.applicationr   sphinx.configr   version_infosphinx.util.displayr   r  __version_info__	getLoggerrr   r   r   abspathdirname__file__r  r_   r   r|   rO   NodeVisitorrP   rv   r   r	  rM   rM   rM   rN   <module>   s    

	
", 
7