o
    Mi)                     @  sV  d Z ddlm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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m Z  ddl!m"Z" erzddl#m$Z$ ddl%m&Z& dZ'dZ(e)e*Z+e	,e	-e.Z/ee*dZ0e1dZ2dZ3d&ddZ4G dd  d eZ5d'd$d%Z6dS )(z2Build input files for the Qt collection generator.    )annotationsN)Iterable)path)Path)TYPE_CHECKINGAnycast)nodes)addnodes)StandaloneHTMLBuilder)IndexEntries)get_translation)logging)NodeMatcher)
canon_pathmake_filename)SphinxRenderer)Node)Sphinxz2.0.0)   r   r   consolezB(?P<title>.+) (\((class in )?(?P<id>[\w\.]+)( (?P<descr>\w+))?\))$z*<section title="%(title)s" ref="%(ref)s"/>filenamestrkwargsr   returnc                 K  s   t td| }t||S )N	templates)r   joinpackage_dirr   render_from_file)r   r   pathname r    Q/home/ubuntu/.local/lib/python3.10/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. fd	d
Zd/ddZd.ddZd0ddZd1ddZd2d3dd Zd4d$d%Zd5d*d+Zd6d,d-Z  ZS )7QtHelpBuilderzN
    Builder that also outputs Qt help project, contents and index files.
    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/jpegTr   Nonec                   s   t    d| _d| _d S )N.html)superinit
out_suffixlink_suffixself	__class__r    r!   r(   L   s   

zQtHelpBuilder.init'tuple[str, dict[str, str | int | bool]]c                 C  s   | j j| j jfS N)configqthelp_themeqthelp_theme_optionsr+   r    r    r!   get_theme_configS   s   zQtHelpBuilder.get_theme_configc                 C  s,   | j d| jjd | _ | | j| jj d S )Nz
%(outdir)s)outdirproject)epilogr1   qthelp_basename	build_qhpr5   r+   r    r    r!   handle_finishV   s
   
zQtHelpBuilder.handle_finishr5   str | os.PathLike[str]outnamer   c                 C  s  t td | jj| jj| dd}g }ttj	dd}|
|D ]
}|| | q | jD ]\}}}	}
t|j|| j d }|d|  q.d|}g }t| jj| dd	}|D ]\}}|D ]\}\}}}|| ||| q`qZd|}| jjr| jj}n
d
| d| jj }tdd|}tdd|d}| }td|| jj| jj| jj|| jj||| |d
}t || d}|j!|dd dt"|d| #| jj }dt"|dd| j$  }t td td|| jj%||d}t || d}|j!|dd d S )Nzwriting project file...F)prune_toctreesT)toctreetitlerefz                
)group_entrieszorg.sphinx..z[^a-zA-Z0-9.\-] z\.+zproject.qhp)	r<   r@   versionr6   	namespace
master_docsectionskeywordsfilesz.qhpzutf-8)encodingz	qthelp://docindexz"writing collection project file...zproject.qhcp)r<   r@   homepage	startpagez.qhcp)&loggerinfo__envget_and_resolve_doctreer1   rH   r   r
   compact_paragraphfindallextend	write_tocdomain_indicessection_template	localnamer)   appendr   r   create_indexbuild_keywordsqthelp_namespacerF   resubstriplowerr"   
html_titler6   get_project_filesr   
write_text	posixpathget_target_urir*   html_short_title)r,   r5   r<   tocdocrI   matchernode	indexnameindexcls_content	_collapseitemrJ   rN   
_group_keygroupr@   refssubitems_category_keynspacebodyr   rO   rP   r    r    r!   r9   ]   s^   


zQtHelpBuilder.build_qhprm   r   boolc                 C  s^   t |tjsdS t|jdkrdS t |d tjsdS t |d d tjs'dS t |d tjS )NFr   r      )	
isinstancer	   	list_itemlenchildrenr
   rV   	referencebullet_list)r,   rm   r    r    r!   	isdocnode   s   zQtHelpBuilder.isdocnode   indentlevelint	list[str]c                 C  s  g }t |tjri| |rittj|d }ttj|d }|d }t	|
 dd}d| d| d}|d| |  ttj|d	 }	tttj |	}
|
D ]}|| ||d	  qP|d| d
  |S t |tjr|D ]}|| || qq|S t |tjr|d }t	|
 dd}t||d }d| | }||dd  |S t |tjtjfr|D ]}|| || q|S )Nr   refuri"z&quot;z<section title="" ref="z">z    r{   z
</section>r?   asciixmlcharrefreplace)r|   r	   r}   r   r   r
   rV   r   htmlescapeastextreplacer]   r   r   rX   rY   r[   encodedecode)r,   rm   r   partsrV   r   linkr@   rr   r   
list_itemsr}   subnoder    r    r!   rY      s:   zQtHelpBuilder.write_tocnamerA   r   c           
      C  s   t |}|r+| }|d }|d}|dr|d d }t| d| d}nd }tj|dd}tj|d dd}|rNd	d
| d| d| d }	nd	d
| d| d }	|	dd |	S )Nr@   idz()rD   T)quoter{   z            z<keyword name="z" id="r   z"/>r   r   )
_idpatternmatch	groupdictgetendswithr   r   r   )
r,   r   rA   matchobjr   	shortnamer   nameattrrefattrrr   r    r    r!   keyword_item   s    


zQtHelpBuilder.keyword_itemr@   ru   	list[Any]rv   c                 C  s   g }t |dkr|| ||d  nt |dkr,t|D ]\}}|| || q|rA|D ]}|| |d |d g  q0|S )Nr{   r   )r~   r]   r   	enumeraterX   r_   )r,   r@   ru   rv   rJ   _irA   subitemr    r    r!   r_      s   zQtHelpBuilder.build_keywordsc                 C  s   g }t |d}t || j}t|D ]0\}}}|||f}t|D ]}	|r-|	dr2|	drCt t ||	|}
|	t
|
 q$q|S )N_staticz.jsr&   )r   r   imagediroswalk
startswithsortedr   relpathr]   r   )r,   r5   project_files	staticdir	imagesdirroot_dirsrK   resourcedirfnr   r    r    r!   rf      s   zQtHelpBuilder.get_project_files)r   r%   )r   r/   )r5   r;   r<   r   r   r%   )rm   r   r   rz   )r   )rm   r   r   r   r   r   )r   r   rA   r   r   r   )r@   r   ru   r   rv   r   r   r   )r5   r;   r   r   )__name__
__module____qualname____doc__r   rS   r7   
copysourcesupported_image_typesadd_permalinksembeddeddownload_supportsearchr(   r4   r:   r9   r   rY   r   r_   rf   __classcell__r    r    r-   r!   r#   1   s&    



;

r#   appr   dict[str, Any]c                 C  s~   |  d | 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5.0zsphinx.builders.htmllocalesr8   c                 S  s
   t | jS r0   )r   r6   r+   r    r    r!   <lambda>  s   
 zsetup.<locals>.<lambda>r   r`   r2   nonavr3   T)rF   parallel_read_safeparallel_write_safe)require_sphinxsetup_extensionadd_builderr#   add_message_catalogr   r   r   r   add_config_valuer   __version__)r   r    r    r!   setup   s   


r   )r   r   r   r   r   r   )r   r   r   r   )7r   
__future__r   r   r   rh   ra   collections.abcr   r   pathlibr   typingr   r   r   docutilsr	   sphinxr
   sphinx.builders.htmlr   (sphinx.environment.adapters.indexentriesr   sphinx.localer   sphinx.utilr   sphinx.util.nodesr   sphinx.util.osutilr   r   sphinx.util.templater   docutils.nodesr   sphinx.applicationr   r   __version_info__	getLoggerr   rQ   abspathdirname__file__r   rS   compiler   r[   r"   r#   r   r    r    r    r!   <module>   sF    


 K