
    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dgZdgZ G d de      Zy# e$ r  e j4                         ZY *w xY w)    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                 @    t         |           t               | _        y )N)super__init__r   _html_converter)self	__class__s    f/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/markitdown/converters/_pptx_converter.pyr   zPptxConverter.__init__'   s    ,    file_streamstream_infokwargsreturnc                     |j                   xs dj                         }|j                  xs dj                         }|t        v ryt        D ]  }|j                  |      s y y)N TF)mimetypelower	extensionACCEPTED_FILE_EXTENSIONSACCEPTED_MIME_TYPE_PREFIXES
startswith)r   r   r   r   r    r"   prefixs          r   acceptszPptxConverter.accepts+   sg      ((.B557 **0b779	001 	F""6*	 r   c                    
 t         Rt        t        j                  t	               j
                  dd            t         d   j                  t         d         t        j                  |      }dd}|j                  D ]  }|dz  }d| d	z  |j                  j                  
 fd

t        |j                  d       }|D ]  } 
|fi |  j                         |j                  stdz  |j                  j                   }	|	|	j"                  z  j                          t%        j                               S )Nr   pptx)	converterr"   featurer   r	   r   r   z

<!-- Slide number: z -->
c           	         j                  |       rd}d}|j                  d      }|j                  d      }||| j                  j                  }d }|r"t        j
                  j                  |      d   }t        | j                  j                  ||      }t        j                  | j                  j                        }		 t        |	||||j                  d            }	 | j                  j                  j                   j"                  j                  dd      }d	j%                  ||g      xs | j&                  }t)        j*                  d
d|      }t)        j*                  dd|      j-                         }|j                  dd      rd| j                  j                  }
| j                  j                  xs d}t/        j0                  |
      j3                  d      }d| d| d| dz  n5t)        j*                  dd| j&                        dz   }d|z   dz   |z   dz   z  j5                  |       r  j6                  | j8                  fi |z  | j:                  rj=                  | j>                        z  nG| j@                  r;| k(  r$d| jB                  jE                         z   d	z   z  n| jB                  d	z   z  | jF                  tH        jJ                  jL                  jN                  jP                  k(  r)tS        | jL                  d       }|D ]  } |fi |  y y # t        $ r Y Ww xY w# t        $ r Y ,w xY w)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                     | j                   st        d      n| j                   | j                  st        d      fS | j                  fS Nz-inftopfloatleftxs    r   <lambda>zBPptxConverter.convert.<locals>.get_shape_content.<locals>.<lambda>   s7    12E&MAEE12E&M' =>VV' 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* ')O!H "(L!9J &

; 7I!-)2G).)=)=*.).0gg.>.>~.Nq.QO,6%*[[%=%=&5%3-) (*zz%++2B2B'C
!.9 , 1'1&/'-zz,'?/O#(>>#9#9#?#?#F#F#J#J7TV#W  $yy/8)DESH!vvmS(CH!vvfc8<BBDH zz"2E:${{//',{{'?'?'N;%+%5%5d%;%B%B7%K
"XJgl^8T^S__b&cc
 $&66%UZZ#@6#I"fx&7$&>&IE&QQ
 >>%("A$"A"A%++"XQW"XXJ ??$"A"A%++"NNJ ))~"dUZZ->->-@&@4&GG
"ejj4&77
 ##tyy'7'7'F'F'L'LL$*%M %2 >)(=f=> MW  ) ! ! % s$   L0 &:M  0	L=<L= 	MMc                     | j                   st        d      n| j                   | j                  st        d      fS | j                  fS r9   r:   r>   s    r   r@   z'PptxConverter.convert.<locals>.<lambda>   s7    )*E&MAEE)*E&M 56VV 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=   se     +,*11"4j11%" (n$Q'
 ((5
	!(( q	0ENI3I;fEEJLL&&EW>r #M ' 3!%2623 $))+J$$00
#//@@*+"2"22J'--/
cq	0f '
0@0@0BCCr   c                    |j                   t        j                  j                  j                  j
                  k(  ry|j                   t        j                  j                  j                  j                  k(  rt        |d      ryy)NTrE   F)rc   r)   rd   re   rf   PICTUREPLACEHOLDERhasattrr   ri   s     r   rC   zPptxConverter._is_picture   s]    tyy//>>FFFtyy//>>JJJug&r   c                 |    |j                   t        j                  j                  j                  j
                  k(  ryy)NTF)rc   r)   rd   re   rf   TABLEr   s     r   rZ   zPptxConverter._is_table   s,    tyy//>>DDDr   c                    d}d}|j                   D ]r  }|dz  }|j                  D ]U  }|r)|dt        j                  |j                        z   dz   z  }.|dt        j                  |j                        z   dz   z  }W |dz  }d	}t |d
z  } | j
                  j                  |fi |j                  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&4;;tyy+A"AG"KKJ&4;;tyy+A"AG"KKJ	L
 '!JI	 	..
 0D  //
EfENNTTV	
r   c           
      x   	 d}|j                   r&|d|j                  j                  j                   z  }|dz  }g }|j                  d   j
                  D cg c]  }|j                   }}|j                  D cg c]  }|j                   }}|j                  dg|z          t        |      D ]H  \  }}	|	g}
|j                  D ]   }|
j                  |j                  |          " |j                  |
       J g }|D ]6  }
|j                  ddj                  t        t        |
            z   dz          8 |d   }d	d	j                  d
gt        |d         z        z   d	z   }|dj                  ||g|dd  z         z   S c c}w c c}w # t         $ r}dt        |      v rY d }~yY d }~y d }~wt"        $ r Y yw xY w)Nz

### Chartz: z

r   Categoryz| z | z ||z---r5   r   zunsupported plot typez

[unsupported chart]

)	has_titlechart_title
text_framera   plots
categorieslabelseriesrS   append	enumeratevaluesrR   mapstrlen
ValueErrorrM   )r   r_   mddataccategory_namessseries_namesidxcategoryr   r   markdown_tableheader	separatores                   r   r^   z(PptxConverter._convert_chart_to_markdown   s   	1 B5,,77<<=>>&LBD/4{{1~/H/HI!aggINI,1LL9qAFF9L9KK|34!*>!: !Xj#ll 3FJJv}}S123C 	!  N O%%dUZZC-F&F&MNO#A&FchhwT!W'=>>DI		69"5qr8J"JKKK J9  	5&#a&04 1 	10	1s=   AF
 F +F
 ;FC1F
  
F
 
	F9F**F98F9)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Z

(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   <module>r      s    
  	 	 	     * % H % P  * C  $9 f1% f1  *'3<<>*s   A" "A;:A;