o
    Ni                     @  s   d Z ddlmZ ddlZddlmZmZmZ ddl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 erLdd
lmZ ddlmZ ddlmZ dZe
jjeZd'ddZd(ddZ d)d"d#Z!d*d%d&Z"dS )+zAllow `MathJax`_ to be used to display math in Sphinx's HTML writer.

This requires the MathJax JavaScript library on your webserver/computer.

.. _MathJax: https://www.mathjax.org/
    )annotationsN)TYPE_CHECKINGAnycast)nodes)StandaloneHTMLBuilder)ExtensionError)_)get_node_equation_number)Sphinx)ExtensionMetadata)HTML5Translatorz;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.jsselfr   node
nodes.mathreturnNonec                 C  sV   | j | j|dddd | j | jjjd | |  | jjjd  d  tj	)Nspan math notranslate nohighlightCLASSr      </span>)
bodyappendstarttagbuilderconfigmathjax_inlineencodeastextr   SkipNode)r   r    r#   F/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/ext/mathjax.pyhtml_visit_math!   s   r%   nodes.math_blockc                 C  sn  | j | j|ddd |d r$| j | |  | j d tj|d rCt| |}| j d|  | |t	d | j d	 | j | j
jjd
  dd | dD }t|dkrf| j d t|D ],\}}| |}d|v r| j d| d  n| j | |t|d k r| j d qjt|dkr| j d | j | j
jjd  | j d tj)Ndivr   r   nowrapz</div>numberz<span class="eqno">(%s)zLink to this equationr   r   c                 S  s   g | ]}|  r|qS r#   )strip).0prtr#   r#   r$   
<listcomp>7   s    z*html_visit_displaymath.<locals>.<listcomp>z

r   z \begin{align}\begin{aligned}z\\z\begin{split}z\end{split}z\end{aligned}\end{align} z</div>
)r   r   r   r    r!   r   r"   r
   add_permalink_refr	   r   r   mathjax_displaysplitlen	enumerate)r   r   r)   partsipartr#   r#   r$   html_visit_displaymath)   s6   

r6   appr   pagenamestrtemplatenamecontextdict[str, Any]	event_argr   c           
      C  s&  | j jdks| j jdkrd S | jjsd}t|| jjj}t	t
| j }| jjdks.||r| jjrN| jjtkr=td dt| jj }|jdd|d	 | jjrbd
t| jj }|jd|d i }	| jjro|	| jj d|	vrd|	vr| jjrd|	d< nd|	d< |j| jjfi |	 d S d S )NhtmlmathjaxzGmathjax_path config value must be set for the mathjax extension to workalwayszimathjax_config/mathjax2_config does not work for the current MathJax version, use mathjax3_config insteadzMathJax.Hub.Config(%s)r   ztext/x-mathjax-config)typer   zwindow.MathJax = %s)r   asyncdefer)r   formatmath_renderer_namer   mathjax_pathr   envdomainsmath_domainr   r   registryhtml_assets_policyhas_equationsmathjax2_configMATHJAX_URLloggerwarningjsondumpsadd_js_filemathjax3_configmathjax_optionsupdate)
r7   r8   r:   r;   r=   msgdomainr   r   optionsr#   r#   r$   install_mathjaxI   s8   

rZ   r   c                 C  s   |  dtd ftd f | dtd | di d | dddgd | dd	d
gd | dd d | ddd d | dd d | dt tjddS )Nr?   rF   r>   rU   r   z\(z\)r/   z\[z\]mathjax_configrM   c                 S  s   | j S )N)r[   )cr#   r#   r$   <lambda>z   s    zsetup.<locals>.<lambda>rT   zhtml-page-contextT)versionparallel_read_safe)	add_html_math_rendererr%   r6   add_config_valuerN   connectrZ   sphinx__display_version__)r7   r#   r#   r$   setupp   s   re   )r   r   r   r   r   r   )r   r   r   r&   r   r   )r7   r   r8   r9   r:   r9   r;   r<   r=   r   r   r   )r7   r   r   r   )#__doc__
__future__r   rQ   typingr   r   r   docutilsr   rc   sphinx.builders.htmlr   sphinx.errorsr   sphinx.localer	   sphinx.util.mathr
   sphinx.applicationr   sphinx.util.typingr   sphinx.writers.html5r   rN   utillogging	getLogger__name__rO   r%   r6   rZ   re   r#   r#   r#   r$   <module>   s(    


 '