o
    0j?                     @   sr   d dl Z d dlZd dlmZ ddlmZmZmZmZ G dd deeeeZ	G dd deeZ
G d	d
 d
eeZdS )    N)Path   )BaseCVResult
LatexMixinMarkdownMixin	WordMixinc                       s^   e Zd Zd fddZ fddZddefd	d
Zdd ZdddZdd Z	dddZ
  ZS )MarkdownResultreturnNc                    s.   t  | t|  t|  t|  dS )z@Initializes a new instance of the class with the specified data.N)super__init__r   r   r   selfdata	__class__ u/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/inference/pipelines/pp_doctranslation/result.pyr      s   

zMarkdownResult.__init__c                       t   }| dd  }d ur#t|}|j|j}}| d| | }| dd  }d urAt|}|j|j}}| d| | }|S NZ
page_index_languager
   _get_input_fngetr   stemsuffixr   fnZpage_idxfpr   r   r   r   r   r   r         
zMarkdownResult._get_input_fnTFc                 C      | S Nr   )r   prettyZshow_formula_numberr   r   r   _to_markdown*      zMarkdownResult._to_markdownc                 C      t d)NzAMarkdownResult generates Word output directly via save_to_word().NotImplementedErrorr   r   r   r   _to_word-      zMarkdownResult._to_wordc           
         s   ddl m  t|  }t|}||j d }| dd}	 dd	d
dd  fdd fdd}ddlm} | }	||	|| tj	|dd |	
|  d S )Nr   BeautifulSoupz.docxmarkdown_texts Fleft   c           
      S   s   ddl m} ddlm} ddlm}m} | jr| jd n|  }	d|	j	_
|	jjj|dd |||	j	_||	_|rA|| |	j	j_|dkrK|j| _d S |d	krU|j| _d S |j| _d S )
Nr   WD_PARAGRAPH_ALIGNMENT)qn)PtRGBColorzTimes New Romanz
w:eastAsiau   宋体centerright)docx.enum.textr2   Zdocx.oxml.nsr3   docx.sharedr4   r5   runsadd_runZfontnameZ_elementZrPrZrFontssetsizeboldcolorrgbCENTER	alignmentZRIGHTZLEFT)
	paragraphr?   align	font_sizer@   r2   r3   r4   r5   runr   r   r   set_paragraph_style<   s   z8MarkdownResult.save_to_word.<locals>.set_paragraph_stylec              
   S   s   ddl m} ddlm} tj|rIz||d d }|  }|j||d |j	| _
W d S  tyH } z| d| d W Y d }~d S d }~ww | d	| d d S )
Nr   r1   )Inchesd   g      @)widthz[fail load image: ]z[image not exist: )r8   r2   r9   rI   ospathexistsr;   Zadd_picturerB   rC   	Exception)rD   srcwidth_percentr2   rI   Zwidth_in_inchesrG   er   r   r   	add_imageR   s    z.MarkdownResult.save_to_word.<locals>.add_imagec                    s    |d}| d}|sdS |d}|sdS tdd |D }| jt||d}d|_t|D ]/\}}|d	d
g}	t|D ]}
|
t|	k rW|	|
 jdd}||	||
_
q?d|	||
_
q?q0dS )z<
            Parsing HTML table and add to Word
            html.parsertableNtrc                 s   s"    | ]}t |d dgV  qdS )tdthN)lenfind_all.0rowr   r   r   	<genexpr>o   s     zAMarkdownResult.save_to_word.<locals>.add_table.<locals>.<genexpr>)rowscolsz
Table GridrX   rY   Tstripr.   )findr[   max	add_tablerZ   style	enumeraterangeget_textcelltext)documentZ
table_htmlsoupZ	table_tagr`   Zmax_colsrV   ir^   cellsjrl   r+   r   r   rf   a   s&   


z.MarkdownResult.save_to_word.<locals>.add_tablec                    s  |  d}|D ]}|  }|sq	d}|dr*| |dd  }|ddd q	|dr@| |d	d  }|dd
d q	|drV| |dd  }|ddd q	|drl| |dd  }|ddd q	|dr| |dd  }|ddd q	|drd|v r |d}|d}|sq	|jr|j}	|	d}
|	dddd}|rt|nd}|  }|| d|
 | q	|j	rЈ| t
| q	|jdd}|r| |}|dd |d! q	d"|v r| | q	| |}|d
d# q	d S )$N
)r   r      #####    T
   )r?   rF   ####    r0   ###       ## r      #       <divtext-align: centerrU   divrQ   rK   z100%%r.   rJ   /rb   r6   )r?   rE   r@   <table)rF   )rc   split
startswithZadd_paragraphrd   imgr   replacefloatrV   strrj   )rm   md_textZoutput_pathlineslinetitle_colorprn   r   r   rQ   Z
width_attrrR   rl   r,   rT   rf   rH   r   r   process_md_page|   s^   









z4MarkdownResult.save_to_word.<locals>.process_md_page)DocumentTexist_ok)Fr/   r0   N)bs4r,   r   r   r   r   Zdocxr   rM   makedirssaveas_posix)
r   	save_pathargskwargsr   	save_filer   r   r   rm   r   r   r   save_to_word3   s   
:zMarkdownResult.save_to_wordc                 C   r%   )NzCMarkdownResult generates LaTeX output directly via save_to_latex().r&   r(   r   r   r   	_to_latex   r*   zMarkdownResult._to_latexc                    s&  ddl m  t|  }t|}||j d }dtdtfdddd	d
dtf fdddtdtffdddtdtf fdd}g d}| dd}| D ]
}	|||	| qX|d t	j
|dd t| ddd}
|
d| W d    d S 1 sw   Y  d S )Nr   r+   z.texsr	   c                    s   | sdS g   fdd}t dt j}||| }|ddddd	d
dddddddddddddd}t D ]\}}|d| d|}qG|S )zT
            Escape LaTeX special characters while preserving formulas.
            r.   c                    s$     | d dt d  dS )Nr   	@@FORMULA   @@)appendgrouprZ   )mZplaceholdersr   r   repl   s   zPMarkdownResult.save_to_latex.<locals>.escape_latex_outside_formula.<locals>.replz-(\$\$.*?\$\$|\$.*?\$|\\\[.*?\\\]|\\\(.*?\\\))\z\textbackslash{}&z\&r   z\%$z\$#z\#r   z\_{z\{}z\}~z\textasciitilde{}^z\textasciicircum{}r   r   )recompileDOTALLsubr   rh   )r   r   Zformula_pattmpro   fr   r   r   escape_latex_outside_formula   s,   
zBMarkdownResult.save_to_latex.<locals>.escape_latex_outside_formula皙?c                 S   sh   t d| }|rt|d}tdt|d dS t d| }|r2t|d}tdt|d dS |S )z:
            Parse the image width attribute.
            zwidth\s*=\s*["\']?(\d+)%?["\']?r   g{Gz?g      Y@g      ?zwidth\s*:\s*(\d+)%)r   searchintr   re   min)r   Zdefault_ratior   valm2r   r   r   get_image_width_from_md_line   s   zBMarkdownResult.save_to_latex.<locals>.get_image_width_from_md_linec                    s  d| v r2| d}g }| dD ] }g }| ddgD ]}|jdd}|| q|| qnfdd	|  D }|sAd
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 }	qm|	d7 }	|	S )z0
            Process table content.
            r   rU   rW   rX   rY   Trb   c                    s,   g | ]}|  r fd d|dD qS )c                    s   g | ]} |qS r   r   )r]   cr   r   r   
<listcomp>  s    zWMarkdownResult.save_to_latex.<locals>.process_table_html.<locals>.<listcomp>.<listcomp>	)rc   r   r\   r   r   r   r     s    zLMarkdownResult.save_to_latex.<locals>.process_table_html.<locals>.<listcomp>r.   c                 s   s    | ]}t |V  qd S r!   rZ   r]   rr   r   r   r_     s    zKMarkdownResult.save_to_latex.<locals>.process_table_html.<locals>.<genexpr>c                    s"   g | ]}|d g t |   qS )r.   r   r   Z	col_countr   r   r     s   "  c                 S   s   g | ]}d qS )z>{\raggedright\arraybackslash}Xr   )r]   r   r   r   r   r     s    z1\begin{center}
\renewcommand{\arraystretch}{1.5}
z\begin{tabularx}{\textwidth}{z}
\toprule
z & z \\
r   z	\midrule
z)\bottomrule
\end{tabularx}
\end{center}

)r[   rj   r   
splitlinesre   joinri   rh   )contentrn   r`   rW   r^   rX   rl   Z	norm_rowsZ
col_formatlatexro   )r,   r   r   r   process_table_html   s:   

z8MarkdownResult.save_to_latex.<locals>.process_table_htmlc                    sH   t d| }g }|D ]}| }|sq
|d |  q
d|d S )zG
            Process text paragraphs, preserving formulas.
            z\n\s*\nz\par z

)r   r   rc   r   r   )r   Z
paragraphsZprocessed_parasr   r   r   r   process_paragraph%  s   z7MarkdownResult.save_to_latex.<locals>.process_paragraphr   c                    s  |   } | sdS | drd| dd    dS | dr.d| d	d    dS | d
rAd| dd    dS | drTd| dd    dS | drgd| dd    dS d| v rd| v r | d}|d}|r|jr|j}|d}| d| }t|}d|dd| dS |jrt|S |jdd}|rd| dS d | v r| S | S )!z0
            Process a single line.
            r.   rt   z\paragraph*{ru   Nz}

rw   z\subsubsection*{rx   ry   z\subsection*{rz   r|   z
\section*{r   r~   r   r   r   rU   r   rQ   r   z4\begin{figure}[h]
\centering
\includegraphics[width=z.2fz\linewidth]{z}
\end{figure}

Trb   z\begin{center}z\end{center}

r   )rc   r   rd   r   r   r   rV   rj   )r   r   rn   r   r   rQ   Zwidth_ratiorl   r,   r   r   r   r   r   r   process_md_line2  sH   







z5MarkdownResult.save_to_latex.<locals>.process_md_line)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}
r-   r.   z\end{document}Tr   wzutf-8)encodingrr   )r   )r   r,   r   r   r   r   r   r   r   rM   r   openr   writer   )r   r   r   r   r   r   r   Zlatex_linesr   r   r   r   r   r   save_to_latex   s$   
&&+
"zMarkdownResult.save_to_latexr	   N)TF)__name__
__module____qualname__r   r   dictr#   r)   r   r   r   __classcell__r   r   r   r   r      s    
 r   c                       8   e Zd Zd	 fddZ fddZdefddZ  ZS )
DocumentResultr	   Nc                    s   t  | t|  dS )zR
        Initializes a new instance of the class with the specified data.
        N)r
   r   r   r   r   r   r   r     s   zDocumentResult.__init__c                    r   r   r   r   r   r   r   r     r   zDocumentResult._get_input_fnc                 C   r    r!   r   r(   r   r   r   r)     r$   zDocumentResult._to_wordr   )r   r   r   r   r   r   r)   r   r   r   r   r   r     s    r   c                       r   )
LatexResultr	   Nc                    s   t  | t|  d S r!   )r
   r   r   r   r   r   r   r     s   zLatexResult.__init__c                    r   r   r   r   r   r   r   r     r   zLatexResult._get_input_fnc                 C   r    r!   r   r(   r   r   r   r     r$   zLatexResult._to_latexr   )r   r   r   r   r   r   r   r   r   r   r   r   r     s    r   )rM   r   pathlibr   Zcommon.resultr   r   r   r   r   r   r   r   r   r   r   <module>   s     k