o
    j                     @  sb  d 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 ddlmZmZmZmZmZ dd	lmZmZmZmZ erNdd
lmZ ejejej dZ!			d1d2ddZ"			d3d4ddZ#d5d d!Z$G d"d# d#eZ%G d$d% d%eZ&G d&d' d'eZ'G d(d) d)eZ(G d*d+ d+eZ)ed,e% ed-e& ed.e) ed/e' ed0e( dS )6zMOPC-local oxml module to handle OPC-local concerns like relationship parsing.    )annotations)TYPE_CHECKINGCallablecast)etree)	NAMESPACE)RELATIONSHIP_TARGET_MODE)	parse_xmlregister_element_cls)ST_ContentTypeST_ExtensionST_TargetMode	XsdAnyUriXsdId)BaseOxmlElementOptionalAttributeRequiredAttribute
ZeroOrMore)PackURI)ctprrutf-8FNelementr   encodingstrpretty_printbool
standalonebool | Nonereturnbytesc                 C     t j| |||dS N)r   r   r   r   tostring)r   r   r   r    r&   M/home/air/Certificate/back/venv/lib/python3.10/site-packages/pptx/opc/oxml.pyoxml_to_encoded_bytes$   s   r(   elm
str | Nonec                 C  r"   r#   r$   )r)   r   r   r   r&   r&   r'   oxml_tostring/   s   r+   part_elmc                 C  s   t j| dddS )zProduce XML-file bytes for `part_elm`, suitable for writing directly to a `.xml` file.

    Includes XML-declaration header.
    UTF-8Tr   r   r$   )r,   r&   r&   r'   serialize_part_xml8   s   r/   c                   @  6   e Zd ZU dZedeZded< edeZ	ded< dS )
CT_Defaultzw`<Default>` element.

    Specifies the default content type to be applied to a part with the specified extension.
    	Extensionr   	extensionContentTypecontentTypeN)
__name__
__module____qualname____doc__r   r   r3   __annotations__r   r5   r&   r&   r&   r'   r1   @      
 r1   c                   @  r0   )CT_Overridezp`<Override>` element.

    Specifies the content type to be applied for a part with the specified partname.
    PartNamer   partNamer4   r5   N)
r6   r7   r8   r9   r   r   r>   r:   r   r5   r&   r&   r&   r'   r<   N   r;   r<   c                   @  st   e Zd ZU dZedeZded< edeZ	ded< edeZ
ded< ed	eejd
Zded< eejfdddZdS )CT_Relationshipzd`<Relationship>` element.

    Represents a single relationship from a source to a target part.
    Idr   rIdTypereltypeTarget
target_ref
TargetMode)default
targetModetarget_moder    c                 C  s6   t ttdtd  d}||_||_||_||_|S )zdReturn a new `<Relationship>` element.

        `target_ref` is either a partname or a URI.
        z<Relationship xmlns="r   "/>)r   r?   r	   nsmaprA   rC   rE   rH   )clsrA   rC   rE   rI   relationshipr&   r&   r'   newk   s   zCT_Relationship.newN)
rA   r   rC   r   rE   r   rI   r   r    r?   )r6   r7   r8   r9   r   r   rA   r:   r   rC   rE   r   r   RTMINTERNALrH   classmethodrN   r&   r&   r&   r'   r?   \   s   
 r?   c                   @  sT   e Zd ZU dZded< ded< edZ	ddddZedddZ	e
dddZdS )CT_Relationshipsz<`<Relationships>` element, the root element in a .rels file.zlist[CT_Relationship]relationship_lstz,Callable[[CT_Relationship], CT_Relationship]_insert_relationshippr:RelationshipFrA   r   rC   targetis_externalr   r    r?   c                 C  s*   |rt jnt j}t||||}| |S )zFAdd a child `<Relationship>` element with attributes set as specified.)rO   EXTERNALrP   r?   rN   rT   )selfrA   rC   rV   rW   rI   rM   r&   r&   r'   add_rel   s   
zCT_Relationships.add_relc                 C     t ttdtd  dS )z'Return a new `<Relationships>` element.z<Relationships xmlns="r   rJ   )r   rR   r	   rK   rL   r&   r&   r'   rN         zCT_Relationships.newr!   c                 C  s   t | dddS )zReturn XML bytes, with XML-declaration, for this `<Relationships>` element.

        Suitable for saving in a .rels stream, not pretty printed and with an XML declaration at
        the top.
        r-   Tr.   )r(   )rY   r&   r&   r'   xml_file_bytes   s   zCT_Relationships.xml_file_bytesN)F)
rA   r   rC   r   rV   r   rW   r   r    r?   )r    rR   )r    r!   )r6   r7   r8   r9   r:   r   rM   rZ   rQ   rN   propertyr^   r&   r&   r&   r'   rR   {   s   
 rR   c                   @  sd   e Zd ZU dZded< ded< ded< ded	< ed
ZedZdddZdddZ	e
dddZdS )CT_Typeszl`<Types>` element.

    The container element for Default and Override elements in [Content_Types].xml.
    zlist[CT_Default]default_lstzlist[CT_Override]override_lstzCallable[..., CT_Default]_add_defaultzCallable[..., CT_Override]_add_override
ct:Defaultct:Overrideextr   content_typer    r1   c                 C     | j ||dS )zHAdd a child `<Default>` element with attributes set to parameter values.)r3   r5   )rc   )rY   rg   rh   r&   r&   r'   add_default      zCT_Types.add_defaultpartnamer   r<   c                 C  ri   )zIAdd a child `<Override>` element with attributes set to parameter values.)r>   r5   )rd   )rY   rl   rh   r&   r&   r'   add_override   rk   zCT_Types.add_overridec                 C  r[   )zReturn a new `<Types>` element.z<Types xmlns="r   rJ   )r   r`   r	   rK   r\   r&   r&   r'   rN      r]   zCT_Types.newN)rg   r   rh   r   r    r1   )rl   r   rh   r   r    r<   )r    r`   )r6   r7   r8   r9   r:   r   rG   overriderj   rm   rQ   rN   r&   r&   r&   r'   r`      s   
 

r`   re   rf   zct:TypesrU   zpr:Relationships)r   FN)
r   r   r   r   r   r   r   r   r    r!   )NFN)r)   r   r   r*   r   r   r   r   )r,   r   r    r!   )*r9   
__future__r   typingr   r   r   lxmlr   pptx.opc.constantsr   NSr   rO   	pptx.oxmlr	   r
   pptx.oxml.simpletypesr   r   r   r   r   pptx.oxml.xmlchemyr   r   r   r   pptx.opc.packurir   OPC_CONTENT_TYPESOPC_RELATIONSHIPSOFC_RELATIONSHIPSrK   r(   r+   r/   r1   r<   r?   rR   r`   r&   r&   r&   r'   <module>   sD    	
	



