
    ,h(                         d Z ddlmZ ddlmZmZ ddlm	Z	 ddl
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mZmZmZ ddlmZ  G d de	      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z#y)zSlide and related objects.    )PROG_ID)CONTENT_TYPERELATIONSHIP_TYPE)XmlPart)PackURI)CT_NotesMasterCT_NotesSlideCT_Slide)CT_OfficeStyleSheet)	ChartPart)EmbeddedPackagePart)NotesMaster
NotesSlideSlideSlideLayoutSlideMaster)lazypropertyc                   ,    e Zd ZdZd Zd Zed        Zy)BaseSlidePartzBase class for slide parts.

    This includes slide, slide-layout, and slide-master parts, but also notes-slide,
    notes-master, and handout-master parts.
    c                 8    | j                  |      j                  S )z
        Return an |Image| object containing the image related to this slide
        by *rId*. Raises |KeyError| if no image is related by that id, which
        would generally indicate a corrupted .pptx file.
        )related_partimageselfrIds     R/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/pptx/parts/slide.py	get_imagezBaseSlidePart.get_image   s       %+++    c                     | j                   j                  |      }| j                  |t        j                        }||fS )a@  Return `(image_part, rId)` pair corresponding to `image_file`.

        The returned |ImagePart| object contains the image in `image_file` and is
        related to this slide with the key `rId`. If either the image part or
        relationship already exists, they are reused, otherwise they are newly created.
        )_packageget_or_add_image_part	relate_toRTIMAGE)r   
image_file
image_partr   s       r   r!   z#BaseSlidePart.get_or_add_image_part    s6     ]]88D
nnZ23r   c                 B    | j                   j                  j                  S )z.
        Internal name of this slide.
        )_elementcSldnamer   s    r   r*   zBaseSlidePart.name+   s    
 }}!!&&&r   N)__name__
__module____qualname____doc__r   r!   propertyr*    r   r   r   r      s%    ,	 ' 'r   r   c                   P    e Zd ZdZed        Zed        Zed        Zed        Z	y)NotesMasterPartz]Notes master part.

    Corresponds to package file `ppt/notesMasters/notesMaster1.xml`.
    c                     | j                  |      }| j                  |      }|j                  |t        j                         |S )zv
        Create and return a default notes master part, including creating the
        new theme it requires.
        )_new_new_theme_partr"   r#   THEME)clspackagenotes_master_part
theme_parts       r   create_defaultzNotesMasterPart.create_default9   s=      HHW-((1
##J9  r   c                 .    t        | j                  |       S )zV
        Return the |NotesMaster| object that proxies this notes master part.
        )r   r(   r+   s    r   notes_masterzNotesMasterPart.notes_masterD       
 4==$//r   c                 p    t        t        d      t        j                  |t	        j
                               S )z
        Create and return a standalone, default notes master part based on
        the built-in template (without any related parts, such as theme).
        z"/ppt/notesMasters/notesMaster1.xml)r3   r   CTPML_NOTES_MASTERr   new_defaultr8   r9   s     r   r5   zNotesMasterPart._newK   s2     89&&(	
 	
r   c                 |    t        |j                  d      t        j                  |t	        j
                               S )zCReturn new default theme-part suitable for use with a notes master.z/ppt/theme/theme%d.xml)r   next_partnamerA   	OFC_THEMEr   rC   rD   s     r   r6   zNotesMasterPart._new_theme_partX   s6     !!":;LL++-	
 	
r   N)
r,   r-   r.   r/   classmethodr<   r   r>   r5   r6   r1   r   r   r3   r3   3   sW    
 ! ! 0 0 

 

 
 
r   r3   c                   P    e Zd ZdZed        Zed        Zed        Zed        Z	y)NotesSlidePartzNotes slide part.

    Contains the slide notes content and the layout for the slide handout page.
    Corresponds to package file `ppt/notesSlides/notesSlide[1-9][0-9]*.xml`.
    c                     |j                   j                  }| j                  |||      }|j                  }|j	                  |j
                         |S )a'  Return new |NotesSlidePart| for the slide in `slide_part`.

        The new notes-slide part is based on the (singleton) notes master and related to
        both the notes-master part and `slide_part`. If no notes-master is present,
        one is created based on the default template.
        )presentation_partr:   _add_notes_slide_partnotes_slideclone_master_placeholdersr>   )r8   r9   
slide_partr:   notes_slide_partrN   s         r   newzNotesSlidePart.newj   sW     $55GG44Z!2
 '22--.?.L.LMr   c                 X    | j                  t        j                        }|j                  S )z?Return the |NotesMaster| object this notes slide inherits from.)part_related_byr#   NOTES_MASTERr>   )r   r:   s     r   r>   zNotesSlidePart.notes_masterz   s%     !00A ---r   c                 .    t        | j                  |       S )zBReturn the |NotesSlide| object that proxies this notes slide part.)r   r(   r+   s    r   rN   zNotesSlidePart.notes_slide   s     $--..r   c                     t        |j                  d      t        j                  |t	        j
                               }|j                  |t        j                         |j                  |t        j                         |S )zCreate and return a new notes-slide part.

        The return part is fully related, but has no shape content (i.e. placeholders
        not cloned).
        z!/ppt/notesSlides/notesSlide%d.xml)
rJ   rF   rA   PML_NOTES_SLIDEr	   rR   r"   r#   rU   SLIDE)r8   r9   rP   r:   rQ   s        r   rM   z$NotesSlidePart._add_notes_slide_part   sg     *!!"EF	
 	""#4booF"":rxx8r   N)
r,   r-   r.   r/   rH   rR   r   r>   rN   rM   r1   r   r   rJ   rJ   c   sW         . .
 / /    r   rJ   c                       e Zd ZdZed        Zd Zd Zd Ze	d        Z
ed        Zed        Ze	d	        Ze	d
        Zd Zy)	SlidePartzISlide part. Corresponds to package files ppt/slides/slide[1-9][0-9]*.xml.c                      | |t         j                  |t        j                               }|j	                  |t
        j                         |S )zReturn newly-created blank slide part.

        The new slide-part has `partname` and a relationship to `slide_layout_part`.
        )rA   	PML_SLIDEr
   rR   r"   r#   SLIDE_LAYOUT)r8   partnamer9   slide_layout_partrP   s        r   rR   zSlidePart.new   s9     2<<(,,.I
.@r   c                     | j                  t        j                  ||| j                        t        j
                        S )zReturn str rId of new |ChartPart| object containing chart of `chart_type`.

        The chart depicts `chart_data` and is related to the slide contained in this
        part by `rId`.
        )r"   r   rR   r    r#   CHART)r   
chart_type
chart_datas      r   add_chart_partzSlidePart.add_chart_part   s/     ~~MM*j$--@"((
 	
r   c                     |t         v rt        j                  nt        j                  }| j	                  t        j                  || j                  |      | j                        |      S )zHReturn rId of newly-added OLE-object part formed from `ole_object_file`.)	r   r#   PACKAGE
OLE_OBJECTr"   r   factory_blob_from_filer    )r   prog_idole_object_filerelationship_types       r   add_embedded_ole_object_partz&SlidePart.add_embedded_ole_object_part   sS    *1W*<BJJ"--~~''--o> 	
 	
r   c                     | j                   j                  |      }| j                  |t        j                        }| j                  |t        j
                        }||fS )a  Return rIds for media and video relationships to media part.

        A new |MediaPart| object is created if it does not already exist
        (such as would occur if the same video appeared more than once in
         a presentation). Two relationships to the media part are created,
        one each with MEDIA and VIDEO relationship types. The need for two
        appears to be for legacy support for an earlier (pre-Office 2010)
        PowerPoint media embedding strategy.
        )r    get_or_add_media_partr"   r#   MEDIAVIDEO)r   video
media_part	media_rId	video_rIds        r   get_or_add_video_media_partz%SlidePart.get_or_add_video_media_part   sK     ]]88?
NN:rxx8	NN:rxx8	)##r   c                 b    	 | j                  t        j                         y# t        $ r Y yw xY w)a  
        Return True if this slide has a notes slide, False otherwise. A notes
        slide is created by the :attr:`notes_slide` property when one doesn't
        exist; use this property to test for a notes slide without the
        possible side-effect of creating one.
        FT)rT   r#   NOTES_SLIDEKeyErrorr+   s    r   has_notes_slidezSlidePart.has_notes_slide   s2    	  0   		s   " 	..c                     	 | j                  t        j                        }|j
                  S # t        $ r | j	                         }Y |j
                  S w xY w)z
        The |NotesSlide| instance associated with this slide. If the slide
        does not have a notes slide, a new one is created. The same single
        instance is returned on each call.
        )rT   r#   ry   rz   rM   rN   r   rQ   s     r   rN   zSlidePart.notes_slide   sV    	<#33BNNC  +++  	<#99;+++	<s   - AAc                 .    t        | j                  |       S )zB
        The |Slide| object representing this slide part.
        )r   r(   r+   s    r   slidezSlidePart.slide   s    
 T]]D))r   c                 P    | j                   j                  }|j                  |       S )zj
        Return the slide identifier stored in the presentation part for this
        slide part.
        )r9   rL   slide_id)r   rL   s     r   r   zSlidePart.slide_id   s%     !LL:: ))$//r   c                 X    | j                  t        j                        }|j                  S )zL
        |SlideLayout| object the slide in this part inherits from.
        )rT   r#   r^   slide_layout)r   r`   s     r   r   zSlidePart.slide_layout   s%    
 !00A ---r   c                     t         j                  | j                  |       }| j                  |t        j
                         |S )z
        Return a newly created |NotesSlidePart| object related to this slide
        part. Caller is responsible for ensuring this slide doesn't already
        have a notes slide part.
        )rJ   rR   r9   r"   r#   ry   r}   s     r   rM   zSlidePart._add_notes_slide_part   s4     *--dllDA'8r   N)r,   r-   r.   r/   rH   rR   re   rn   rw   r0   r{   r   rN   r   r   r   rM   r1   r   r   r[   r[      s    S 

$   
, 
, * * 0 0 . . r   r[   c                   0    e Zd ZdZed        Zed        Zy)SlideLayoutPartzjSlide layout part.

    Corresponds to package files ``ppt/slideLayouts/slideLayout[1-9][0-9]*.xml``.
    c                 .    t        | j                  |       S )zB
        The |SlideLayout| object representing this part.
        )r   r(   r+   s    r   r   zSlideLayoutPart.slide_layout  r?   r   c                 T    | j                  t        j                        j                  S )zP
        Slide master from which this slide layout inherits properties.
        )rT   r#   SLIDE_MASTERslide_masterr+   s    r   r   zSlideLayoutPart.slide_master  s    
 ##BOO4AAAr   N)r,   r-   r.   r/   r   r   r0   r   r1   r   r   r   r     s1    
 0 0 B Br   r   c                   &    e Zd ZdZd Zed        Zy)SlideMasterPartzfSlide master part.

    Corresponds to package files ppt/slideMasters/slideMaster[1-9][0-9]*.xml.
    c                 8    | j                  |      j                  S )z
        Return the |SlideLayout| object of the related |SlideLayoutPart|
        corresponding to relationship key *rId*.
        )r   r   r   s     r   related_slide_layoutz$SlideMasterPart.related_slide_layout   s    
   %222r   c                 .    t        | j                  |       S )zB
        The |SlideMaster| object representing this part.
        )r   r(   r+   s    r   r   zSlideMasterPart.slide_master'  r?   r   N)r,   r-   r.   r/   r   r   r   r1   r   r   r   r     s     
3 0 0r   r   N)$r/   pptx.enum.shapesr   pptx.opc.constantsr   rA   r   r#   pptx.opc.packager   pptx.opc.packurir   pptx.oxml.slider   r	   r
   pptx.oxml.themer   pptx.parts.chartr   pptx.parts.embeddedpackager   
pptx.slider   r   r   r   r   	pptx.utilr   r   r3   rJ   r[   r   r   r1   r   r   <module>r      s~    ! $ J $ $ C C / & : O O "'G 'D-
m -
`1 ] 1 hk  k \Bm B*0m 0r   