o
    0j"                     @  sl   d Z ddlmZ ddlZddlmZmZ ddd	Zdd
dZdddZ	dddZ
dddZG dd dZdS )uO   LatexConverter — converts structured latex_blocks to a LaTeX document string.    )annotationsN)DictListsstrreturnc                 C  s\   | sdS |  dd dd dd dd	 d
d dd dd dd dd ddS )z Escape LaTeX special characters. \z\textbackslash{}&z\&%z\%$z\$#z\#_z\_{z\{}z\}~z\textasciitilde{}^z\textasciicircum{})replace)r    r   z/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/inference/common/result/converter/latex_converter.py_escape_latex   s   
r   c                   s   t d| }g }|D ]9}| }|sq
g   fdd}t jd||t jd}t|}t D ]\}}|d| d|}q-|d|  q
d		|d	 S )
z5Process regular paragraphs while preserving formulas.z\n\s*\nc                   s$     | d dt d  dS )Nr   	@@FORMULA   @@)appendgrouplen)mZplaceholdersr   r   _hold5   s   z&_escaped_paragraph_text.<locals>._holdz!(\$\$.*?\$\$|\$.*?\$|\\\[.*?\\\]))flagsr   r   z\par 

)
resplitstripsubDOTALLr   	enumerater   r   join)r   Z
paragraphs	processedpr   tempifr   r   r   _escaped_paragraph_text)   s   r.   blockr   abs_image_pathsDict[str, str]c                 C  s8   |  d}|s	dS | |}|sd| dS d| dS )Ncontentz% [Image not found]

z% [Image path not found for z]

zC\begin{figure}[h]
\centering
\includegraphics[width=0.8\linewidth]{z}
\end{figure}

get)r/   r0   Z
image_nameZabs_image_pathr   r   r   _generate_image_latexA   s   

r5   c                   s6  ddl m} | dd}d|v rF||d}g }|dD ](}g }|dd	gD ]}|jd
d}|td|r9|nt| q'|| qn	dd |	 D }|sSdS t
dd |D   fdd|D }	ddd t D }
d}|d|
 d7 }t|	D ]\}}|d|d 7 }|dkr|d7 }q|d7 }|S )Nr   )BeautifulSoupr2   r   z<tablezhtml.parsertrtdthTr$   !(\$.*?\$|\\\(.*?\\\)|\\\[.*?\\\])c                 S  s(   g | ]}|  rd d |dD qS )c                 S  s$   g | ]}t d |st|n|qS )r;   )r"   searchr   ).0cr   r   r   
<listcomp>c   s    

z4_generate_table_latex.<locals>.<listcomp>.<listcomp>	)r$   r#   )r=   rowr   r   r   r?   b   s    	z)_generate_table_latex.<locals>.<listcomp>c                 s  s    | ]}t |V  qd S )Nr   r=   rr   r   r   	<genexpr>r   s    z(_generate_table_latex.<locals>.<genexpr>c                   s"   g | ]}|d g t |   qS )r   rB   rC   Z	col_countr   r   r?   s   s   "  c                 S  s   g | ]}d qS )z>{\raggedright\arraybackslash}Xr   )r=   r   r   r   r   r?   u   s    z1\begin{center}
\renewcommand{\arraystretch}{1.5}
z\begin{tabularx}{\textwidth}{z}
\toprule
z & z \\
z	\midrule
z)\bottomrule
\end{tabularx}
\end{center}

)Zbs4r6   r4   Zfind_allZget_textr   r"   r<   r   
splitlinesmaxr(   ranger'   )r/   r6   r2   Zsouprowsr7   rA   r8   cellZ	norm_rowsZ
col_formatlatexr,   r   rF   r   _generate_table_latexP   sF   

	rN   c           	      C  s  |  dd}|  ddpd}|dkrdt|  dS |dv r"dS |dkr0d	t|  d
S |dkr>dt|  dS |dkrFt|S |dkr_dd | D }ddd |D d S |dkrkd|  dS |dkrud| d S |dv r~t| |S |dkrt| S |dv rdt|  dS |dkrdd |dD }g }|D ]!}tt	
d d|}d!tt|d"  }|d#| d$|  qd|d S d%| d&t| dS )'Ntyper   r2   Z	doc_titlez\begin{center}
{\Huge z}\end{center}

)headerfooterabstractz\begin{abstract}
z
\end{abstract}

Zparagraph_titlez
\section*{z}

textc                 S  s   g | ]}|  qS r   )rstripr=   liner   r   r   r?          z#_block_to_latex.<locals>.<listcomp>
c                 S  s    g | ]}|  rt|d  qS )z \\)r$   r   rU   r   r   r   r?      s     r!   Zformulaz\[
z
\]

	algorithmz\begin{verbatim}
z
\end{verbatim}

)imagechartZsealtable)Zfigure_titleZtable_titleZchart_titlez\begin{center}
{\small 	referencec                 S  s   g | ]
}|  r|  qS r   r:   rU   r   r   r   r?      s    z^\[\d+\]\s*refi z	\bibitem{z} z% [Unknown block: z] )r4   r   r$   r.   rH   r(   r5   rN   r#   r"   r%   abshashr   )	r/   r0   labelr2   linesZbibitemsrV   escapedkeyr   r   r   _block_to_latex   sJ   
re   c                   @  s   e Zd ZdZeddd	Zd
S )LatexConverterzDConvert structured latex_blocks to a complete LaTeX document string.latex_blocks
List[Dict]r0   r1   r   r   c                C  sR  i }| D ]}t |ddpd}||g | qg d}d}t| D ]q}t|| dd d}dd	 |D }	d
d	 |D }
ddd |	D }ddd |
D }|d| d |dt| d |dt| d |D ]}|dddkr|s|d d}qu|t|| qu|d q&|r|d |d d|S )u  Convert latex_blocks to a complete LaTeX document string.

        Args:
            latex_blocks: List[Dict] — each dict has keys "type", "content",
                optional "page_index", "block_bbox".
            abs_image_paths: Dict[str, str] — from save_images().

        Returns:
            str: Complete LaTeX source with preamble and \begin{document}...\end{document}.
        Z
page_indexr   )z\documentclass[12pt]{article}z\usepackage{xeCJK}z\usepackage{fontspec}z\usepackage{graphicx}z\usepackage{amsmath}z\usepackage{geometry}z\usepackage{fancyhdr}z\usepackage{indentfirst}z\usepackage{caption}z\usepackage{tabularx, booktabs}z\usepackage{amssymb}z\usepackage{amsfonts}z\geometry{a4paper, margin=1in}z$\setCJKmainfont{Droid Sans Fallback}z\setmainfont{DejaVu Serif}z\setsansfont{Lato}z\setmonofont{Latin Modern Mono}z\pagestyle{fancy}z\setlength{\parindent}{2em}z\begin{document}
Fc                 S  s   |  dg dd S )NZ
block_bbox)r   r   r   r   r   r3   )br   r   r   <lambda>   rW   z(LatexConverter.convert.<locals>.<lambda>)rd   c                 S     g | ]}| d dkr|qS )rO   rP   r3   r=   ri   r   r   r   r?          z*LatexConverter.convert.<locals>.<listcomp>c                 S  rk   )rO   rQ   r3   rl   r   r   r   r?      rm   rG   c                 s      | ]	}| d dV  qdS r2   r   Nr3   rl   r   r   r   rE          z)LatexConverter.convert.<locals>.<genexpr>c                 s  rn   ro   r3   rl   r   r   r   rE      rp   z% ==== page z header/footer ====z\fancyhead[L]{r   z\fancyfoot[C]{z}
rO   r   Zreference_titlez\begin{thebibliography}{99}Tz\clearpage
z\end{thebibliography}
z\end{document}rX   )	intr4   
setdefaultr   sortedkeysr(   r   re   )rg   r0   Zpagesri   r*   Zlatex_linesZin_bibZpage_numZpage_blocksZheader_blocksZfooter_blocksZpage_headerZpage_footerr/   r   r   r   convert   s8   



zLatexConverter.convertN)rg   rh   r0   r1   r   r   )__name__
__module____qualname____doc__staticmethodru   r   r   r   r   rf      s    rf   )r   r   r   r   )r/   r   r0   r1   r   r   )r/   r   r   r   )ry   
__future__r   r"   typingr   r   r   r.   r5   rN   re   rf   r   r   r   r   <module>   s   




2(