U
    IeZ                     @   s  d dl 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mZ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
ddZdZedZG dd dejZdGeeee
e edddZ dHeeee
e edddZ!eedddZ"dIee eee
e ddddZ#ee	e$ dddd Z%e
e e
e e&ee
e e&f d!d"d#Z'ee
e ed$d%d&Z(dJee ee
eee
e f  dd'd(d)Z)dKe
e ee
e e
e f d*d+d,Z*eeeeef  d-d.d/Z+dLeee
eee
e f  dd0d1d2Z,eedd3d4d5Z-dMeee
eeef  dd6d7d8Z.eedd9d:d;Z/eedd9d<d=Z0dNeee
eee
e f  dd0d>d?Z1eee
eee
e f  dd@dAdBZ2ddCdDdEZ3e4dFkre3  dS )O    N)OrderedDict)DictIterableIteratorListOptionalTuple)Element
SubElementtostring)unescape)commands)convert_symbol)Nodewalkrightleftcenter)rlc))+-*/()=,?[]|\|!\{\}><.z
\bigotimesz
\centerdotz\dotsz\dotscz\dotsoz\gtz\ldotpz\ltz\lvertz\lVertz
\lvertneqqz\ngeqqz\omicronz\rvertz\rVertz\Sz\smallfrown	\smallintz\smallsmile\surdz\varsubsetneqqz\varsupsetneqqz\\\$|\$|\\?[^\\$]+c                   @   s   e Zd Ze Ze ZdS )ModeN)__name__
__module____qualname__enumautoTEXTMATH r4   r4   :/tmp/pip-unpacked-wheel-yt1tfwjl/latex2mathml/converter.pyr,   <   s   r,   "http://www.w3.org/1998/Math/MathMLinline)latexxmlnsdisplayparentreturnc                 C   s   t | |||}t|S N)convert_to_element_convert)r8   r9   r:   r;   mathr4   r4   r5   convertA   s    rA   c                 C   sL   d}||d}|d kr t ||n
t|||}t|d}ttt| | |S )Nr@   )r9   r:   mrow)r	   r
   _convert_groupiterr   )r8   r9   r:   r;   tagattribr@   rowr4   r4   r5   r>   K   s    

r>   )treer<   c                 C   s   t t| ddS )Nunicode)encoding)r   r   )rH   r4   r4   r5   r?   Y   s    r?   )nodesr;   command	alignmentr<   c                 C   sV  d }d }d}d }d}d}	g }
g }| D ]}|d kr<t |d}|d kr^t|||\}}t||}|jtjkr|tt|g| q$|jdkrt|| g }t|||\}}t||}|tj	tj
fkr|d dkrt |d q$|jtjtjfkr8t|| g }|	d7 }	||kr|}d}t|||\}}t |d}t||}q$|jtjkrR|
d q$|jtjkrl|
d q$|jtjkr|d	 q$|	t|
kr|
d
 |d tt|g| q$||kr|}tdd |
D r|dd|
 |d k	r|d k	rt|dkr|| |rR|tj
krRd}|t| }|dd||  d S )Nr   Zmtr&   mi   solidZdashedTnoneFc                 s   s   | ]}|d kV  qdS )rR   Nr4   ).0r   r4   r4   r5   	<genexpr>   s     z"_convert_matrix.<locals>.<genexpr>Zrowlines )Z0emZ2emZcolumnspacing)r
   _get_column_alignment_make_matrix_celltokenr   BRACESrC   rD   _set_cell_alignmentSPLITALIGNZDOUBLEBACKSLASHZCARRIAGE_RETURNZHLINEappendZ	HDASHLINEZHFILlenanysetjoinremove)rK   r;   rL   rM   rG   cellZ	col_indexZcol_alignmentZmax_col_sizeZ	row_indexZ	row_lineshfil_indexesnodespacingZ
multiplierr4   r4   r5   _convert_matrix]   sj    











"
rh   )rd   re   r<   c                 C   sV   | d k	rRt |rRt|dkrR|d r8|d s8d| jd< n|d sR|d rRd| jd< d S )NrQ   r   r   columnalignr   )r`   r_   rF   )rd   re   r4   r4   r5   r[      s
    r[   )rM   column_alignmentcolumn_indexr<   c              	   C   sR   | rJzt | | }W n* tk
r@   t | |t|   }Y nX |d7 }||fS )NrQ   )COLUMN_ALIGNMENT_MAPget
IndexErrorr_   )rM   rk   rl   r4   r4   r5   rW      s    rW   )rG   rk   r<   c                 C   s   |rt | d|dS t | dS )NZmtd)rj   )r
   )rG   rk   r4   r4   r5   rX      s    rX   )rK   r;   fontr<   c                 C   s>  |}| D ].}|j }|tjtjkrLt|tdd | D d}t||| q|tjksf|tjtj	fkrtt||| q|tj
kr|jd k	rtt|j|tj
|  q|tjr|jd k	rtt|j|| q|tj krtj|}q|jd krt||| q|jd k	r|jpi }t|d|d}tt|j|| qd S )Nc                 s   s   | ]
}|V  qd S r=   r4   )rT   nr4   r4   r5   rU      s     z!_convert_group.<locals>.<genexpr>rY   childrenrB   rF   )rY   r   ZMSTYLE_SIZESZSTYLESr   tuple_convert_commandCONVERSION_MAPMODPMODZLOCAL_FONTSrs   rC   rD   
startswithr3   ZGLOBAL_FONTSkeysrn   _convert_symbol
attributesr
   )rK   r;   rp   _fontrf   rY   r}   _rowr4   r4   r5   rC      s(    

rC   )rM   r<   c                 C   sv   | d krdS d| kr| d fS d}g }| D ]>}|dkr@| d n||7 }t|t| dkr(| d q(|d|fS )N)NNr"    rR   rO   rS   rV   )r^   r_   rb   )rM   Z
_alignmentcolumn_linesr   r4   r4   r5   _get_alignment_and_column_lines   s    r   )textr<   c                 c   sl   d}d}t | D ]6}|dkr@||r*tjntjfV  d}| }q||7 }qt|rh||r^tjntjfV  d S )Nr   F$)MATH_MODE_PATTERNfindallr,   r3   r2   r_   )r   stringZis_math_modematchr4   r4   r5   separate_by_mode   s    
r   )rf   r;   rp   r<   c              	   C   sX  | j }| j}|tjtjfkr,t|ddd}n|tjkrjt|d}t|dtdddg}d	t	tj
|_n|tjtjfkrt|dd
dd}n|tjkrt|dddd}nd|tjkrt|ddd}nJ|tjtjtjtjfkrt|dddd}n |tjtjfkrt|ddd ttj| \}}| jd k	rF| j tjkrF|| j |tjkr\t|d}t| | t| j\}}	|	r|	|d< |tj kr| j!d k	r| j!d j tj"krd}n|tj#kr|tj$tj%fkrd}n~|tj&kr|tj$tj'fkrd}nZ|tj kr$|tj$tj%tj'fkr$d}n2|tj(tj)fkrV| j!d k	rVt*| j!dkrVd}t|||}
|tj+kr|dd  |
_n|tjtjfkrd|
_t|ddd n|tj,krd|
_n|tj(tj)fkrt|
ddd}t|d}|tj(krd|_n|tj)krJd|_n6| jd k	r|tj-kr@d	t	| j|
_n|tjkr|
}t.| jD ]h\}}|t/j0kr|d krt|||}|1dd|_t2|d | d }nt|d}t3t4t5|| qZn2|tj6krt|
d }
| j1dd|
_t2|
d | nP| j7d k	rJ|tj8tj9fkrJ| j7d!krJt	| j7}|d kr>| j7nd	||
_| j!d k	r@|
}|tjtjtjfkrt|}|tj:kr|tjkrd"}n|tj;tj<fkrd#}t=t4| j!|||d$ n~|tj>kr| j!D ](}t|dddd}t3t4|g|| qԐn>|tj?kr|t@d%t@d&d'd(id)fd*did+f | j!\}}t3t4|g|| t|ddd}t|dd(d t3t4|g|| n|tjkr| j!d }t@|j t@tjA|j!t@tjB| jd,fd-fd-}t3t4|g|| nl|tj(tj)fkr.| j!D ]>}t|dtd.d/d0d1g}t3t4|g|| t|dd2d3 qnt3t4| j!|| tC||
 tD| | d S )4Nmstyle1)scriptlevelrB   mo)stretchytrue)fencer   )formprefix&#x{};r   0displaystyler   mpadded)heightdepthwidthfalsemspaceZ1emZcolumnlinesr   Z
munderoverZmoverZmunderrO   rQ   modz0.333emz&#x2190;z&#x2192;rV   	&#x000A0;mtextr)   r   Zrl)rM   z\stylez\mspacer   z-0.167em)r}   r   )rs   r}   )rY   r}   rr   )r   z+0.833em)Zlspacez0.556em)voffset-.2em)r   r   z.25em)r   )ErY   modifierr   ZSUBSTACKZSMALLMATRIXr
   ZCASESr   formatr   LBRACEr   DBINOMZDFRACZHPHANTOMZVPHANTOMTBINOMZHBOXZMBOXZTFRACrx   ry   copydeepcopyrw   r}   SKEWupdateLEFT_append_prefix_elementr   rM   ZSUBSUPrs   GCDZSUPERSCRIPTZLIMITSZ	OVERBRACEZ	SUBSCRIPTZ
UNDERBRACEZ
XLEFTARROWZXRIGHTARROWr_   ZLIMITZBMODZMIDDLEr   r,   r2   replace	_set_fontrC   rD   r   ZFBOX	delimiterFRACGENFRACZMATRICESr\   r]   rh   ZCFRACZSIDESETr   rZ   ZMKERN_add_diacritic_append_postfix_element)rf   r;   rp   rL   r   ZlbracerE   r}   rM   r   elementstyleZarrowr   r   moder   symbol_parentchildpr   r   fillZnew_nodeZpaddedr4   r4   r5   rv      s   





,"









	


rv   )rL   r;   r<   c                 C   s4   | t jkr0tt j|  \}}t|d|}||_d S )Nr   )r   Z
DIACRITICSr   r   r
   r   )rL   r;   r   r}   r   r4   r4   r5   r     s    
r   )rL   r;   r}   r<   c                 C   s8   t | }t|d|d k	r|ni }|r.d|n| |_d S )Nr   r   )r   r
   r   r   )rL   r;   r}   
code_pointr   r4   r4   r5   _convert_and_append_command  s    r   )rf   r;   r<   c                 C   s  d}|j ddks | jtjkr$d}| jdtjfkr@td| n| jtjtjtjfkrjtd|||d n| jdkrtd	| n| jd
krtd| nt| jdkrtd| n^| jdkrtd| nH| jtj	tj
fkr
| jd k	r
| jd dkr
t| jd |||d d S )N2.047emr   r   1.2em\pmatrixz\lparenZminsizemaxsize\bmatrixz\lbrack\Bmatrixz\lbrace\vmatrix\vert\Vmatrix\Vertr   r)   )rF   rn   rY   r   r   ry   r   BINOMr   r   r   r   rf   r;   sizer4   r4   r5   r     s"    



0r   c                 C   sB  d}|j ddks | jtjkr$d}| jdtjfkr@td| n| jtjtjtjfkrjtd|||d n| jdkrtd	| n| jd
krtd| n| jdkrtd| n| jdkrtd| n|| jtj	tj
fkr| jd k	r| jd dkrt| jd |||d n2| jtjkr>| jd k	r>t|dd| jd  d d S )Nr   r   r   r   r   z\rparenr   r   z\rbrackr   z\rbracer   r   r   r   rQ   r)   r   r   r   r   )rF   rn   rY   r   r   ry   r   r   r   r   r   r   r   r}   r
   r   r4   r4   r5   r     s&    



0r   c              
   C   sz  | j }| jpi }t|}td|rJt|d|d}||_t||j| n,|t	krt|d|d}|d krl|nd
||_|dkrd|jd< |d	krd|jd
< |dkrd|jd< t|d| nt||j| n|r t|dttddtddd ks*t|dttddtddd ks*|dkrVt|d|d}d
||_t||j| n |ddtjtjfkrt|d|d}d|_t|d| n|tjkrt|ddd}t|d}d|_n|tjtjtjtjtjtjtjtjfkrHt|dddi|d}tjdtjdtjd tjd!tjd"i}|||dd  |_t||j| n.|tjkrt|d#|d}	d$D ]}
t|	d}|
|_qfn|tjtjfkrt|d#|d}	|tjkr2t|	d%}d&|_t|	d'd(d t|	dd)d*d)d+}t|d,dd-d.}t|d#}t|d%}d/|_t|	d'd0d t||j| t||j| t|	d%}d1|_t|	d'd2d t|	dd3d4d3d+}t|d#}t|d%}d5|_t|	d'd6d t|	d%}d7|_t||j| t||j| t||j| n|tjrt|d|d}|d8d9 |_n|tj rTt|d%|d}|r"d
||_n"|tj!kr>|dd  |_n||_t||j| n"t|d%|d}||_t||j| d S ):Nz
\d+(.\d+)?mnrt   r   r   r#   r   r   r*   Zlargeop)	r   r   r    r!   r"   r#   r%   r&   r+   r      Z2200Z22FFrQ   Z2190Z21FFr)   z\ ~r   r   r   r   r   z	&#x029F8;Zmovablelimitsr   zinj&#x02006;lim	&#x0222B;zlim&#x02006;infzlim&#x02006;supzproj&#x02006;limrB   )r   z	&#x022EF;r   rP   Lr   z-.325emz+.21exz-.21ex)r   r   r   r   r   r   Az-.17emTz-.14emz-.5exz+.5exEz-.115emX   ri   )"rY   r}   r   rer   r
   r   r   rE   	OPERATORSr   rF   intranger   ZNOBREAKSPACESPACEZNOTZDETERMINANTr   ZINTOPZINJLIMZLIMINFZLIMSUPZPRZPROJLIMrn   ZIDOTSINTZLATEXZTEXrz   ZOPERATORNAME	BACKSLASHZ	FUNCTIONS)rf   r;   rp   rY   r}   r   r   r   Ztextsr   sZmi_lr   rB   Zmi_aZmi_tZmi_eZmi_xr4   r4   r5   r|     s    



""


     







r|   )r   keyrp   r<   c                 C   s*   |d krd S || }|d k	r&|| j d< d S )NZmathvariantrt   )r   r   rp   r~   r4   r4   r5   r   +  s
    r   )r<   c            	   	   C   sB  dd l } dd l}| jdd}|jdddddd	d
 |jddddddd
 |d}|jdd}|jdddtddd |jdddtddd |jddddddd
 | }|jrdnd}|j	rdd l
}td|j nl|jrtt|j|d  nR|jr t|j}tt| |d  W 5 Q R X n|jr>tt|j |d  d S )!Nr   z2Pure Python library for LaTeX to MathML conversion)descriptionz-Vz	--versionversion
store_trueFzShow version)destactionrequiredhelpz-bz--blockblockzDisplay blockzrequired arguments)r   z-tz--textr   Text)r   typer   r   z-fz--filefileZFilez-sz--stdinstdinZStdinr7   latex2mathml)r:   )argparsesysArgumentParseradd_argumentadd_argument_groupadd_mutually_exclusive_groupstr
parse_argsr   r   r   print__version__r   rA   r   openreadr   )	r   r   parserr   group	argumentsr:   r   fr4   r4   r5   main3  s,    
 r   __main__)r6   r7   N)r6   r7   N)N)N)N)N)N)N)5r   r0   r   collectionsr   typingr   r   r   r   r   r   xml.etree.cElementTreer	   r
   r   xml.sax.saxutilsr   r   r   Zlatex2mathml.symbols_parserr   Zlatex2mathml.walkerr   r   rm   r   compiler   Enumr,   r   rA   r>   r?   rh   boolr[   r   rW   rX   rC   r   r   rv   r   r   r   r   r|   r   r   r-   r4   r4   r4   r5   <module>   sp    +
       E	  *&& "&m$
