
    %j&                        d dl Z d dlZd dlZd dlZd dlZd dlZd dl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	lmZ dd
lmZmZ dZ	 d dlZn# e$ r  e j                    ZY nw xY wdgZdgZ G d de          ZdS )    N)BinaryIOAny)
attrgetter   )HtmlConverter)llm_caption   )DocumentConverterDocumentConverterResult)
StreamInfo)MissingDependencyExceptionMISSING_DEPENDENCY_MESSAGEz<application/vnd.openxmlformats-officedocument.presentationml.pptxc                   j     e Zd ZdZ fdZdedededefdZ	dededede
fdZd	 Zd
 Zd Zd Z xZS )PptxConverterz]
    Converts PPTX files to Markdown. Supports heading, tables and images with alt text.
    c                 n    t                                                       t                      | _        d S )N)super__init__r   _html_converter)self	__class__s    m/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/markitdown/converters/_pptx_converter.pyr   zPptxConverter.__init__'   s+    ,    file_streamstream_infokwargsreturnc                     |j         pd                                }|j        pd                                }|t          v rdS t          D ]}|                    |          r dS dS )N TF)mimetypelower	extensionACCEPTED_FILE_EXTENSIONSACCEPTED_MIME_TYPE_PREFIXES
startswith)r   r   r   r   r    r"   prefixs          r   acceptszPptxConverter.accepts+   s      (.B5577 *0b7799	00041 	 	F""6** tt ur   c                    
 t           `t          t          j        t	                     j        dd                    t           d                             t           d                   t          j        |          }dd}|j	        D ]}|dz  }d| d	z  |j
        j        
 fd

t          |j
        d           }|D ]} 
|fi |                                 |j        r1dz  |j        j        }	|	
|	j        z                                  t%                                                    S )Nr   pptx)	converterr"   featurer   r	   r   r   z

<!-- Slide number: z -->
c           	                              |           rd}d}|                    d          }|                    d          }||| j        j        }d }|r%t          j                            |          d         }t          | j        j        ||          }t          j
        | j        j                  }		 t          |	||||                    d                    }n# t          $ r Y nw xY w	 | j        j        j        j                            dd          }n# t          $ r Y nw xY wd	                    ||g          p| j        }t)          j        d
d|          }t)          j        dd|                                          }|                    dd          rQ| j        j        }
| j        j        pd}t/          j        |
                              d          }d| d| d| dz  n/t)          j        dd| j                  dz   }d|z   dz   |z   dz   z                      |           r j        | j        fi |z  | j        r                    | j                  z  n=| j         r6| k    r#d| j!        "                                z   d	z   z  n| j!        d	z   z  | j#        tH          j%        j&        j'        j(        k    r%tS          | j&        d           }|D ]} |fi | d S d S )Nr   
llm_client	llm_modelr   )r    r"   filename
llm_prompt)clientmodelpromptdescr
z
[\r\n\[\]] z\s+keep_data_urisFz	image/pngzutf-8z
![z](data:z;base64,z)
z\Wz.jpgz](z# c                 v    | j         st          d          n| j         | j        st          d          n| j        fS Nz-inftopfloatleftxs    r   <lambda>zBPptxConverter.convert.<locals>.get_shape_content.<locals>.<lambda>   s5    12AE&MMMAE12CE&MMMQV' r   key)*_is_picturegetimager/   ospathsplitextr   content_typeioBytesIOblobr   	Exception_element_nvXxPrcNvPrattribjoinnameresubstripbase64	b64encodedecode	_is_table_convert_table_to_markdowntable	has_chart_convert_chart_to_markdowncharthas_text_frametextlstrip
shape_typer)   enumshapesMSO_SHAPE_TYPEGROUPsorted)shaper   llm_descriptionalt_textr-   r.   image_filenameimage_extensionimage_stream_infoimage_streamrL   rI   
b64_stringr/   sorted_shapessubshapeget_shape_content
md_contentr   titles                   r   rs   z0PptxConverter.convert.<locals>.get_shape_content\   s    ##E** 9R ')O!H "(L!9!9J &

; 7 7I!-)2G).)=*.) R.0g.>.>~.N.Nq.QO,6%*[%=&5%3- - -) (*z%+2B'C'C
!.9 , 1'1&/'-zz,'?'?/ / /OO  ) ! ! ! D!
#(>#9#?#F#J#J7TV#W#W$   
  $yy/8)DEESH!vmS(CCH!vfc8<<BBDDH zz"2E:: R${/',{'?'N;%+%5d%;%;%B%B7%K%K
"&cX&c&cl&c&cT^&c&c&cc

 $&6%UZ#@#@6#I"fx&7$&>&IE&QQ
 >>%(( Y"A$"A%+"X"XQW"X"XXJ ? 8$"A"A%+"N"NNJJ ) 8~~"dUZ->->-@-@&@4&GG

"ej4&77
 #ty'7'F'LLL$* % % %M %2 > >))(==f==== ML> >s$   :'C" "
C/.C/3*D 
D+*D+c                 v    | j         st          d          n| j         | j        st          d          n| j        fS r9   r:   r>   s    r   r@   z'PptxConverter.convert.<locals>.<lambda>   s5    )*9E&MMMAE)*;E&MMMQV r   rA   z

### Notes:
)markdown)_dependency_exc_infor   r   formattype__name__with_tracebackr)   Presentationslidesre   ru   rh   rV   has_notes_slidenotes_slidenotes_text_framera   r   )r   r   r   r   presentation	slide_numsliderq   ri   notes_framers   rt   ru   s   `         @@@r   convertzPptxConverter.convert=   s     +,*1"4jj1%"    (n$Q' 
 (55
	!( q	0 q	0ENIEIEEEEJL&EW> W> W> W> W> W> W> W>r #   M ' 3 3!!%2262222#))++J$ 000
#/@*+"22J'--//
&
0@0@0B0BCCCCr   c                     |j         t          j        j        j        j        k    rdS |j         t          j        j        j        j        k    rt          |d          rdS dS )NTrE   F)rc   r)   rd   re   rf   PICTUREPLACEHOLDERhasattrr   ri   s     r   rC   zPptxConverter._is_picture   sU    ty/>FFF4ty/>JJJug&& tur   c                 R    |j         t          j        j        j        j        k    rdS dS )NTF)rc   r)   rd   re   rf   TABLEr   s     r   rZ   zPptxConverter._is_table   s%    ty/>DDD4ur   c                 <   d}d}|j         D ]_}|dz  }|j        D ]I}|r#|dt          j        |j                  z   dz   z  }'|dt          j        |j                  z   dz   z  }J|dz  }d	}`|d
z  } | j        j        |fi |j                                        dz   S )Nz<html><body><table>Tz<tr>z<th>z</th>z<td>z</td>z</tr>Fz</table></body></html>r5   )	rowscellshtmlescapera   r   convert_stringrw   rV   )r   r\   r   
html_table	first_rowrowcells          r   r[   z(PptxConverter._convert_table_to_markdown   s    *
	: 	 	C& J	 L L L&4;ty+A+A"AG"KKJJ&4;ty+A+A"AG"KKJJ'!JII..
 0D /
EEfEENTTVV	
r   c           
      P   	 d}|j         r|d|j        j        j         z  }|dz  }g }d |j        d         j        D             }d |j        D             }|                    dg|z              t          |          D ]G\  }}|g}|j        D ]"}	|                    |	j	        |                    #|                    |           Hg }
|D ]C}|
                    dd	
                    t          t          |                    z   d
z              D|
d         }dd
                    dgt          |d                   z            z   dz   }|d
                    ||g|
dd          z             z   S # t          $ r"}dt          |          v rY d }~dS Y d }~d S d }~wt          $ r Y dS w xY w)Nz

### Chartz: z

c                     g | ]	}|j         
S  )label).0cs     r   
<listcomp>z<PptxConverter._convert_chart_to_markdown.<locals>.<listcomp>   s    III!agIIIr   r   c                     g | ]	}|j         
S r   )rS   )r   ss     r   r   z<PptxConverter._convert_chart_to_markdown.<locals>.<listcomp>   s    999qAF999r   Categoryz| z | z ||z---r5   r   zunsupported plot typez

[unsupported chart]

)	has_titlechart_title
text_framera   plots
categoriesseriesappend	enumeratevaluesrR   mapstrlen
ValueErrorrM   )r   r_   mddatacategory_namesseries_namesidxcategoryr   r   markdown_tableheader	separatores                 r   r^   z(PptxConverter._convert_chart_to_markdown   s
   	1 B ?>5,7<>>>&LBDIIu{1~/HIIIN99EL999LKK|3444!*>!:!: ! !Xj#l 3 3FJJv}S12222C    N O O%%dUZZC-F-F&F&MNNNN#A&FchhwT!W'=>>>DI		69"5qrr8J"JKKKK 	5 	5 	5&#a&&00444444 100000 	1 	1 	1000	1s   E*E- -
F%7FF%$F%)r{   
__module____qualname____doc__r   r   r   r   boolr'   r   r   rC   rZ   r[   r^   __classcell__)r   s   @r   r   r   "   s        / / / / /   	
 
   $KDKD  KD 	KD
 
!KD KD KD KDZ    

 
 
(1 1 1 1 1 1 1r   r   )sysrW   rF   rJ   rT   r   typingr   r   operatorr   r   r   _llm_captionr   _base_converterr
   r   _stream_infor   _exceptionsr   r   rx   r)   ImportErrorexc_infor$   r#   r   r   r   r   <module>r      si   



  				 				 				                        * * * * * * % % % % % % H H H H H H H H % % % % % % P P P P P P P P  *KKKK * * *'3<>>* C  $9 f1 f1 f1 f1 f1% f1 f1 f1 f1 f1s   A A('A(