Ë
    £…jñ(  ã                   óè   — d Z ddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dZd„ Z d„ Z!d„ Z"d	efd
„Z# G d„ de$«      Z% G d„ de%«      Z& G d„ de%«      Z'y	)zw
Office Math Markup Language (OMML)
Adapted from https://github.com/xiilei/dwml/blob/master/dwml/omml.py
On 25/03/2025
é    )ÚElementTreeé   )ÚCHARSÚCHRÚCHR_BOÚCHR_DEFAULTÚPOSÚPOS_DEFAULTÚSUBÚSUPÚFÚ	F_DEFAULTÚTÚFUNCÚDÚ	D_DEFAULTÚRADÚRAD_DEFAULTÚARRÚLIM_FUNCÚLIM_TOÚLIM_UPPÚMÚBRKÚBLANKÚ	BACKSLASHÚALNÚ
FUNC_PLACEz<{http://schemas.openxmlformats.org/officeDocument/2006/math}c              #   óŠ   K  — t        j                  | «      }|j                  t        dz   «      D ]  }t	        |«      –— Œ y ­w©NÚoMath)ÚETÚparseÚfindallÚOMML_NSÚoMath2Latex)ÚstreamÚtreeÚomaths      új/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/markitdown/converter_utils/docx/math/omml.pyÚloadr+   +   s<   è ø€ Ü�8‰8�FÓ€DØ—‘œg¨Ñ/Ó0ò !ˆÜ˜%Ó Ó ñ!ùó   ‚AAc              #   óŠ   K  — t        j                  | «      }|j                  t        dz   «      D ]  }t	        |«      –— Œ y ­wr    )r"   Ú
fromstringr$   r%   r&   )ÚstringÚrootr)   s      r*   Úload_stringr1   1   s<   è ø€ Ü�=‰=˜Ó €DØ—‘œg¨Ñ/Ó0ò !ˆÜ˜%Ó Ó ñ!ùr,   c                 óà   — d }g }| j                  dd«      } | D ]?  }|t        v r"|t        k7  r|j                  t        |z   «       n|j                  |«       |}ŒA t	        j
                  |«      S )Nz\\ú\)Úreplacer   r   Úappendr   Újoin)ÚstrsÚlastÚnew_chrÚcs       r*   Úescape_latexr;   7   sk   € Ø€DØ€GØ�<‰<˜˜tÓ$€DØò ˆØ”‰J˜T¤YÒ.Ø�N‰Nœ9 q™=Õ)à�N‰N˜1ÔØ‰ðô �:‰:�gÓÐó    Nc                 ó6   — | �|s| S |j                  | | «      S |S ©N)Úget)ÚkeyÚdefaultÚstores      r*   Úget_valrC   D   s$   € Ø
€ÙˆsÐ8 U§Y¡Y¨s°CÓ%8Ð8àˆr<   c                   ó2   — e Zd Zdd„Zdd„Zdd„Zdd„Zd„ Zy)Ú
Tag2MethodNc                 óš   — | j                   j                  }|€ |j                  j                  t        d«      } ||«      }|r	 || |«      S y )NÚ )Útag2methr?   Útagr4   r%   )ÚselfÚelmÚstagÚ	getmethodÚmethods        r*   Úcall_methodzTag2Method.call_methodL   sF   € Ø—M‘M×%Ñ%ˆ	Øˆ<Ø—7‘7—?‘?¤7¨BÓ/ˆDÙ˜4“ˆÙÙ˜$ Ó$Ð$àr<   c              #   ó  K  — t        |«      D ]m  }t        |j                  vrŒ|j                  j                  t        d«      }|r||vrŒ=| j	                  ||¬«      }|€| j                  ||«      }|€Œg|||f–— Œo y­w)z=
        process children of the elm,return iterable
        rG   )rL   N)Úlistr%   rI   r4   rO   Úprocess_unknow)rJ   rK   ÚincludeÚ_erL   Úts         r*   Úprocess_children_listz Tag2Method.process_children_listV   s‹   è ø€ ô �s“)ò 	 ˆBÜ˜bŸf™fÑ$ØØ—6‘6—>‘>¤'¨2Ó.ˆDÙ˜D¨Ñ/ØØ× Ñ  ¨$Ð Ó/ˆAØˆyØ×'Ñ'¨¨DÓ1�Ø�9ØØ˜˜B�-Óñ	 ùs   ‚A=A?c                 óZ   — t        «       }| j                  ||«      D ]  \  }}}|||<   Œ |S )z9
        process children of the elm,return dict
        )ÚdictrV   )rJ   rK   rS   Úlatex_charsrL   rU   Úes          r*   Úprocess_children_dictz Tag2Method.process_children_dictg   s=   € ô “fˆØ×4Ñ4°S¸'ÓBò 	"‰JˆD�!�QØ !ˆK˜Òð	"àÐr<   c                 óZ   — t        j                  d„ | j                  ||«      D «       «      S )z;
        process children of the elm,return string
        c              3   ó^   K  — | ]%  \  }}}t        |t        «      s|n
t        |«      –— Œ' y ­wr>   )Ú
isinstancerE   Ústr)Ú.0rL   rU   rZ   s       r*   ú	<genexpr>z.Tag2Method.process_children.<locals>.<genexpr>u   s0   è ø€ ò á�D˜!˜Qô $ A¤zÔ2‘¼¸A»Ó>ñùs   ‚+-)r   r6   rV   )rJ   rK   rS   s      r*   Úprocess_childrenzTag2Method.process_childrenp   s/   € ô �z‰zñà"&×"<Ñ"<¸SÀ'Ó"Jôó
ð 	
r<   c                  ó   — y r>   © ©rJ   rK   rL   s      r*   rR   zTag2Method.process_unknow{   s   € Ør<   r>   )Ú__name__Ú
__module__Ú__qualname__rO   rV   r[   rb   rR   rd   r<   r*   rE   rE   K   s   „ óó ó"ó	
ór<   rE   c                   óP   — e Zd ZdZdZdZ	 d„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Ze
eeeeed
œZy)ÚPrrG   )ÚchrÚposÚbegChrÚendChrÚtypeNc                 ó>   — i | _         | j                  |«      | _        y r>   )Ú_Pr__innerdictrb   Útext©rJ   rK   s     r*   Ú__init__zPr.__init__ˆ   s   € ØˆÔØ×)Ñ)¨#Ó.ˆ�	r<   c                 ó   — | j                   S r>   ©rr   ©rJ   s    r*   Ú__str__z
Pr.__str__Œ   s   € Ø�y‰yÐr<   c                 ó$   — | j                  | «      S r>   ©rx   rw   s    r*   Ú__unicode__zPr.__unicode__�   ó   € Ø�|‰|˜DÓ!Ð!r<   c                 ó:   — | j                   j                  |d «      S r>   )rq   r?   )rJ   Únames     r*   Ú__getattr__zPr.__getattr__’   s   € Ø×Ñ×#Ñ# D¨$Ó/Ð/r<   c                 ó4   — t         | j                  d<   t         S )NÚbrk)r   rq   rs   s     r*   Údo_brkz	Pr.do_brk•   s   € Ü"%ˆ×Ñ˜ÑÜˆ
r<   c                 óÆ   — |j                   j                  t        d«      }|| j                  v r3|j	                  dj                  t        «      «      }|| j                  |<   y )NrG   z{0}val)rI   r4   r%   Ú_Pr__val_tagsr?   Úformatrq   )rJ   rK   rL   rU   s       r*   Ú	do_commonzPr.do_common™   sL   € Ø�w‰w�‰œw¨Ó+ˆØ�4—?‘?Ñ"Ø—‘˜Ÿ™¬Ó0Ó1ˆAØ%&ˆD×Ñ˜TÑ"Ør<   )r�   rk   rl   rm   rn   ro   )rf   rg   rh   rr   r„   rq   rt   rx   r{   r   r‚   r†   rH   rd   r<   r*   rj   rj      sM   „ Ø€Dà;€Jà€Kà'ò/òò"ò0òòð ØØØØØñ�Hr<   rj   c                   ó$  — e Zd ZdZeZdZd„ Zd„ Zd„ Z	d„ Z
ed„ «       Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zi de“de“de“de“de“d e“d!e“d"e“d#e“d$e“d%e“d&e“d'e“d(e“d)e“d*e“d+e“d,ei¥Z y-).r&   z0
    Convert oMath element of omml to latex
    )ÚboxÚsSubÚsSupÚsSubSupÚnumÚdenÚdegrZ   c                 ó0   — | j                  |«      | _        y r>   )rb   Ú_latex)rJ   Úelements     r*   rt   zoMath2Latex.__init__³   s   € Ø×+Ñ+¨GÓ4ˆ�r<   c                 ó   — | j                   S r>   )Úlatexrw   s    r*   rx   zoMath2Latex.__str__¶   s   € Ø�z‰zÐr<   c                 ó$   — | j                  | «      S r>   rz   rw   s    r*   r{   zoMath2Latex.__unicode__¹   r|   r<   c                 óh   — || j                   v r| j                  |«      S |dd  dk(  rt        |«      S y )Néþÿÿÿrj   )Ú_oMath2Latex__direct_tagsrb   rj   re   s      r*   rR   zoMath2Latex.process_unknow¼   s;   € Ø�4×%Ñ%Ñ%Ø×(Ñ(¨Ó-Ð-Ø�"�#ˆY˜$ÒÜ�c“7ˆNàr<   c                 ó   — | j                   S r>   )r�   rw   s    r*   r“   zoMath2Latex.latexÄ   s   € à�{‰{Ðr<   c                 ó°   — | j                  |«      }t        |d   j                  t        j                  d«      t
        ¬«      }|j                  |d   «      S )z%
        the accent function
        ÚaccPrÚACC_VAL©rA   rB   rZ   )r[   rC   rk   r   r?   r   r…   )rJ   rK   Úc_dictÚlatex_ss       r*   Údo_acczoMath2Latex.do_accÈ   sM   € ð ×+Ñ+¨CÓ0ˆÜØ�7‰O×Ñ¬¯©¸Ó)CÌ3ô
ˆð �~‰~˜f S™kÓ*Ð*r<   c                 óÎ   — | j                  |«      }|d   }t        |j                  t        j                  d«      t
        ¬«      }|j                  |j                  |d   «      z   S )z"
        the bar function
        ÚbarPrÚBAR_VALrœ   rZ   )r[   rC   rl   r
   r?   r	   rr   r…   ©rJ   rK   r�   Úprrž   s        r*   Údo_barzoMath2Latex.do_barÒ   sT   € ð ×+Ñ+¨CÓ0ˆØ�G‰_ˆÜ˜"Ÿ&™&¬+¯/©/¸)Ó*DÌCÔPˆØ�w‰w˜Ÿ™¨¨s©Ó4Ñ4Ð4r<   c                 ó¦  — | j                  |«      }|d   }t        j                  d«      }t        |j                  t        j                  d«      t
        ¬«      }t        |j                  t        j                  d«      t
        ¬«      }|j                  t        j                  |s|n
t        |«      |d   |s	|¬«      z   S t        |«      ¬«      z   S )z&
        the delimiter object
        ÚdPrÚnullÚleftrœ   ÚrightrZ   )r©   rr   rª   )r[   r   r?   rC   rm   r   rn   rr   r   r…   r;   )rJ   rK   r�   r¤   r¨   Ús_valÚe_vals          r*   Údo_dzoMath2Latex.do_dÛ   s®   € ð ×+Ñ+¨CÓ0ˆØ�E‰]ˆÜ�}‰}˜VÓ$ˆÜ˜Ÿ	™	¬9¯=©=¸Ó+@ÌÔJˆÜ˜Ÿ	™	¬9¯=©=¸Ó+AÌÔKˆØ�w‰wœŸ™Ù"‘¬°UÓ(;Ø˜‘Ù#�$ô
ñ 
ð 	
ô *6°eÓ)<ô
ñ 
ð 	
r<   c                  ó   — y)zC
        the Pre-Sub-Superscript object -- Not support yet
        Nrd   rs   s     r*   Údo_sprezoMath2Latex.do_spreê   s   € ð 	r<   c                 óN   — | j                  |«      }t        j                  |«      S r>   )rb   r   r…   ©rJ   rK   rr   s      r*   Údo_subzoMath2Latex.do_subð   ó!   € Ø×$Ñ$ SÓ)ˆÜ�z‰z˜$ÓÐr<   c                 óN   — | j                  |«      }t        j                  |«      S r>   )rb   r   r…   r±   s      r*   Údo_supzoMath2Latex.do_supô   r³   r<   c                 óê   — | j                  |«      }|d   }t        |j                  t        t        ¬«      }|j
                  |j                  |j                  d«      |j                  d«      ¬«      z   S )z%
        the fraction object
        ÚfPrrœ   rŒ   r�   )rŒ   r�   )r[   rC   ro   r   r   rr   r…   r?   r£   s        r*   Údo_fzoMath2Latex.do_fø   s]   € ð ×+Ñ+¨CÓ0ˆØ�E‰]ˆÜ˜"Ÿ'™'¬9¼AÔ>ˆØ�w‰w˜Ÿ™¨F¯J©J°uÓ,=À6Ç:Á:ÈeÓCT˜ÓUÑUÐUr<   c                 ó�   — | j                  |«      }|j                  d«      }|j                  t        |j                  d«      «      S )z>
        the Function-Apply object (Examples:sin cos)
        ÚfNamerZ   )r[   r?   r4   r   )rJ   rK   r�   Ú	func_names       r*   Údo_funczoMath2Latex.do_func  s=   € ð ×+Ñ+¨CÓ0ˆØ—J‘J˜wÓ'ˆ	Ø× Ñ ¤¨V¯Z©Z¸«_Ó=Ð=r<   c                 ó.  — g }| j                  |«      D ]X  \  }}}|dk(  r<t        j                  |«      r|j                  t        |   «       Œ:t	        d|z  «      ‚|j                  |«       ŒZ t        j                  |«      }t        |v r|S |t        z   S )z
        the func name
        ÚrzNot support func %s)rV   r   r?   r5   ÚNotImplementedErrorr   r6   r   )rJ   rK   rY   rL   rU   rZ   s         r*   Údo_fnamezoMath2Latex.do_fname	  s‘   € ð ˆØ×4Ñ4°SÓ9ò 	&‰JˆD�!�QØ�sŠ{Ü—8‘8˜A”;Ø×&Ñ&¤t¨A¡wÕ/ä-Ð.CÀaÑ.GÓHÐHà×"Ñ" 1Õ%ð	&ô �J‰J�{Ó#ˆÜ !‘OˆqÐ7¨¬Z©Ð7r<   c                 óš   — | j                  |«      }|d   }t        |j                  «      }|j                  |j	                  |d   «      z   S )z,
        the Group-Character object
        Ú
groupChrPrrZ   )r[   rC   rk   rr   r…   r£   s        r*   Údo_groupchrzoMath2Latex.do_groupchr  sG   € ð ×+Ñ+¨CÓ0ˆØ�LÑ!ˆÜ˜"Ÿ&™&“/ˆØ�w‰w˜Ÿ™¨¨s©Ó4Ñ4Ð4r<   c                 óÆ   — | j                  |«      }|j                  d«      }|j                  d«      }|rt        j                  ||¬«      S t	        j                  |¬«      S )z$
        the radical object
        rZ   rŽ   )rŽ   rr   rv   )r[   r?   r   r…   r   )rJ   rK   r�   rr   Údeg_texts        r*   Údo_radzoMath2Latex.do_rad"  sT   € ð ×+Ñ+¨CÓ0ˆØ�z‰z˜#‹ˆØ—:‘:˜eÓ$ˆÙÜ—:‘: (°Ô6Ð6ä×%Ñ%¨4Ô0Ð0r<   c                 ó°   — t        j                  t        j                  | j	                  |d¬«      D ���cg c]  \  }}}|‘Œ
 c}}}«      ¬«      S c c}}}w )z"
        the Array object
        ©rZ   ©rS   rv   )r   r…   r   r6   rV   ©rJ   rK   rL   rU   rZ   s        r*   Údo_eqarrzoMath2Latex.do_eqarr.  sK   € ô �z‰zÜ—‘Ø%)×%?Ñ%?ÀÈVÐ%?Ó%T×UÐU‘z�t˜Q ’ÔUóô
ð 	
ùäUs   ¶Ac                 óÀ   — | j                  |d¬«      }t        j                  |d   «      }|st        d|d   z  «      ‚|j	                  |j                  d«      ¬«      S )z(
        the Lower-Limit object
        ©rZ   ÚlimrÉ   rZ   zNot support lim %srÎ   )rÎ   )r[   r   r?   r¿   r…   )rJ   rK   Út_dictrž   s       r*   Ú	do_limlowzoMath2Latex.do_limlow8  s]   € ð ×+Ñ+¨C¸Ð+ÓFˆÜ—,‘,˜v c™{Ó+ˆÙÜ%Ð&:¸VÀC¹[Ñ&HÓIÐIà—>‘> f§j¡j°Ó&7�>Ó8Ð8r<   c                 ó’   — | j                  |d¬«      }t        j                  |j                  d«      |j                  d«      ¬«      S )z(
        the Upper-Limit object
        rÍ   rÉ   rÎ   rZ   )rÎ   rr   )r[   r   r…   r?   )rJ   rK   rÏ   s      r*   Ú	do_limuppzoMath2Latex.do_limuppC  s;   € ð ×+Ñ+¨C¸Ð+ÓFˆÜ�~‰~ &§*¡*¨UÓ"3¸&¿*¹*ÀS»/ÔJÐJr<   c                 ó`   — | j                  |«      j                  t        d   t        d   «      S )za
        the lower limit of the limLow object and the upper limit of the limUpp function
        r   r   )rb   r4   r   rs   s     r*   Údo_limzoMath2Latex.do_limJ  s*   € ð ×$Ñ$ SÓ)×1Ñ1´&¸±)¼VÀA¹YÓGÐGr<   c                 óÆ   — g }| j                  |«      D ]#  \  }}}|dk(  rŒ|dk(  sŒ|j                  |«       Œ% t        j                  t	        j
                  |«      ¬«      S )z#
        the Matrix object
        ÚmPrÚmrrv   )rV   r5   r   r…   r   r6   )rJ   rK   ÚrowsrL   rU   rZ   s         r*   Údo_mzoMath2Latex.do_mP  s^   € ð ˆØ×4Ñ4°SÓ9ò 	‰JˆD�!�QØ�uŠ}ØØ˜“Ø—‘˜A•ð		ô
 �x‰xœSŸX™X d›^Ô,Ð,r<   c           
      óˆ   — t        j                  | j                  |d¬«      D ���cg c]  \  }}}|‘Œ
 c}}}«      S c c}}}w )z.
        a single row of the matrix m
        rÈ   rÉ   )r   r6   rV   rÊ   s        r*   Údo_mrzoMath2Latex.do_mr\  s?   € ô �x‰xØ!%×!;Ñ!;¸CÈÐ!;Ó!P×QÐQ‘:�4˜˜AŠQÔQó
ð 	
ùÜQs   §=c                 óÒ   — g }d}| j                  |«      D ]8  \  }}}|dk(  rt        |j                  t        ¬«      }Œ(|j	                  |«       Œ: |t        j                  |«      z   S )z"
        the n-ary object
        rG   ÚnaryPr)rB   )rV   rC   rk   r   r5   r   r6   )rJ   rK   ÚresÚborL   rU   rZ   s          r*   Údo_naryzoMath2Latex.do_naryd  sf   € ð ˆØˆØ×4Ñ4°SÓ9ò 	‰JˆD�!�QØ�xÒÜ˜QŸU™U¬&Ô1‘à—
‘
˜1•ð		ð
 ”E—J‘J˜s“OÑ#Ð#r<   c                 óê   — g }|j                  dj                  t        «      «      D ]-  }|j                  | j                  j                  ||«      «       Œ/ t        t        j                  |«      «      S )z§
        Get text from 'r' element,And try convert them to latex symbols
        @todo text style support , (sty)
        @todo 	ext (latex pure text support)
        z./{0}t)	Úfindtextr…   r%   r5   Ú_t_dictr?   r;   r   r6   )rJ   rK   Ú_strÚss       r*   Údo_rzoMath2Latex.do_rq  s]   € ð ˆØ—‘˜hŸo™o¬gÓ6Ó7ò 	0ˆAà�K‰K˜Ÿ™×(Ñ(¨¨AÓ.Õ/ð	0ô œEŸJ™J tÓ,Ó-Ð-r<   Úaccr¾   ÚbarÚsubÚsupÚfÚfuncrº   ÚgroupChrÚdÚradÚeqArrÚlimLowÚlimUpprÎ   Úmr×   ÚnaryN)!rf   rg   rh   Ú__doc__r   rã   r—   rt   rx   r{   rR   Úpropertyr“   rŸ   r¥   r­   r¯   r²   rµ   r¸   r¼   rÀ   rÃ   rÆ   rË   rÐ   rÒ   rÔ   rÙ   rÛ   rà   ræ   rH   rd   r<   r*   r&   r&   ª   sx  „ ñð €GàP€Mò5òò"òð ñó ðò+ò5ò
òò ò òVò>ò8ò 5ò
1ò
ò	9òKòHò
-ò
ò$ò
.ðØˆvðàˆTðð 	ˆvðð 	ˆvð	ð
 	ˆvðð 	ˆTðð 	�ðð 	�ðð 	�Kðð 	ˆTðð 	ˆvðð 	�ðð 	�)ðð 	�)ðð 	ˆvðð  	ˆTð!ð" 	ˆeð#ð$ 	�ñ%�Hr<   r&   )(rõ   Ú
defusedxmlr   r"   Ú
latex_dictr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r+   r1   r;   rC   ÚobjectrE   rj   r&   rd   r<   r*   ú<module>rú      s}   ðñõ )÷÷ ÷ ÷ ÷ ÷ ÷ ð: I€ò!ò!ò
ð  Só ô1�ô 1ôh(ˆô (ôVf�*õ fr<   