ó
    ˆ*£h!i  ã                  óî  • S r SSKJr  SSKrSSKJrJrJrJrJ	r	J
r
Jr  SSKJr  SSKJrJr  SSKJr  SSKJr  SS	KJrJrJr  SS
KJr   " S S\5      rS*S+S jjrS,S jr " S S\5      r " S S\ 5      r! " S S5      r" " S S\"5      r# " S S\"5      r$ " S S5      r% " S S\%5      r& " S S\%5      r' " S  S!\%5      r( " S" S#\%5      r) " S$ S%\%5      r* " S& S'\%5      r+ " S( S\R                  \!S)9r,g)-zPBase and meta classes enabling declarative definition of custom element classes.é    )ÚannotationsN)ÚAnyÚCallableÚIterableÚProtocolÚSequenceÚTypeÚcast)Úetree)ÚElementBaseÚ_Element)ÚInvalidXmlError)Úoxml_parser)ÚNamespacePrefixedTagÚ_nsmapÚqn)Úlazypropertyc                  ó@   • \ rS rSrSr\SS j5       r\SS j5       rSrg)	ÚAttributeTypeé   z¨Interface for an object that can act as an attribute type.

An attribute-type specifies how values are transformed to and from the XML "string" value of the
attribute.
c                ó   • g)z/Transform an attribute value to a Python value.N© )ÚclsÚ	xml_values     ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pptx/oxml/xmlchemy.pyÚfrom_xmlÚAttributeType.from_xml   ó   € ð 	ó    c                ó   • g)zGTransform a Python value to a str value suitable to this XML attribute.Nr   )r   Úvalues     r   Úto_xmlÚAttributeType.to_xml   r   r   r   N)r   ÚstrÚreturnr   )r!   r   r%   r$   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úclassmethodr   r"   Ú__static_attributes__r   r   r   r   r      s/   † ñð óó ðð óó ór   r   ÚBaseOxmlElementc                óx   • [        U 5      nUb  UOUR                  n[        R                  " UR                  US9$ )zöReturn a "loose" lxml element having the tag specified by `nsptag_str`.

`nsptag_str` must contain the standard namespace prefix, e.g. 'a:tbl'. The resulting element is
an instance of the custom element class for this tag name if one is defined.
)Únsmap)r   r/   r   ÚmakeelementÚ
clark_name)Ú
nsptag_strr/   Únsptags      r   ÚOxmlElementr4   #   s7   € ô " *Ó-€FØÑ&‰E¨F¯L©L€EÜ×"Ò" 6×#4Ñ#4¸EÑBÐBr   c                óD   • [         R                  " U SSS9n[        U5      $ )zS
Serialize *element* to human-readable XML suitable for tests. No XML
declaration.
ÚunicodeT)ÚencodingÚpretty_print)r   ÚtostringÚ	XmlString)ÚelementÚxmls     r   Úserialize_for_readingr=   .   s    € ô
 �.Š.˜¨9À4Ñ
H€CÜ�S‹>Ðr   c                  ón   • \ rS rSrSr\R                  " S5      rSS jrSS jr	SS jr
SS jrSS jrS	rg
)r:   é7   zRProvides string comparison override suitable for serialized XML; useful for tests.z(( *</?[\w:]+)(.*?)(/?>)([^<]*</[\w:]+>)?c                óú   • [        U[        5      (       d  gU R                  5       nUR                  5       n[        U5      [        U5      :w  a  g[	        X#5       H  u  pEU R                  XE5      (       a  M    g   g)NFT)Ú
isinstancer$   Ú
splitlinesÚlenÚzipÚ_eq_elm_strs)ÚselfÚotherÚlinesÚlines_otherÚlineÚ
line_others         r   Ú__eq__ÚXmlString.__eq__B   sk   € Ü˜%¤×%Ñ%ØØ—‘Ó!ˆØ×&Ñ&Ó(ˆÜˆu‹:œ˜[Ó)Ó)ØÜ # EÖ 7ÑˆDØ×$Ñ$ T×6Ó6Ùñ !8ð r   c                ó.   • U R                  U5      (       + $ ©N)rL   )rF   rG   s     r   Ú__ne__ÚXmlString.__ne__N   s   € Ø—;‘;˜uÓ%Ô%Ð%r   c                óX   • UR                  5       nUR                  5       n[        U5      $ )z{Return a sequence of attribute strings parsed from *attrs*.

Each attribute string is stripped of whitespace on both ends.
)ÚstripÚsplitÚsorted)rF   ÚattrsÚattr_lsts      r   Ú	_attr_seqÚXmlString._attr_seqQ   s%   € ð
 —‘“ˆØ—;‘;“=ˆÜ�hÓÐr   c                óÂ   • U R                  U5      u  p4pVU R                  U5      u  pxpšX7:w  a  gU R                  U5      U R                  U5      :w  a  gXY:w  a  gXj:w  a  gg)z�True if the element in `line_2` is XML-equivalent to the element in `line`.

In particular, the order of attributes in XML is not significant.
FT)Ú_parse_linerX   )rF   rJ   Úline_2ÚfrontrV   ÚcloseÚtextÚfront_2Úattrs_2Úclose_2Útext_2s              r   rE   ÚXmlString._eq_elm_strsZ   sh   € ð
 %)×$4Ñ$4°TÓ$:Ñ!ˆ�eØ,0×,<Ñ,<¸VÓ,DÑ)ˆ˜'ØÓØØ�>‰>˜%Ó  D§N¡N°7Ó$;Ó;ØØÓØØ‹>ØØr   c                óÂ   • U R                   R                  U5      nUc  [        S5      e[        SS5       Vs/ s H  o2R	                  U5      PM     snu  pEpgXEXg4$ s  snf )zUReturn front, attrs, close, text 4-tuple result of parsing XML element string `line`.z0`line` does not match pattern for an XML elementé   é   )Ú_xml_elm_line_pattÚmatchÚ
ValueErrorÚrangeÚgroup)rF   rJ   ri   Únr]   rV   r^   r_   s           r   r[   ÚXmlString._parse_linek   s_   € à×'Ñ'×-Ñ-¨dÓ3ˆØ‰=ÜÐOÓPÐPÜ=BÀ1Àa¼[Ó$Iº[¸§[¡[°¦^¹[Ñ$IÑ!ˆ�eØ˜UÐ(Ð(ùò %Js   ¸Ar   N)rG   Úobjectr%   Úbool)rV   r$   r%   ú	list[str])rJ   r$   r\   r$   r%   rp   )rJ   r$   )r&   r'   r(   r)   r*   ÚreÚcompilerh   rL   rP   rX   rE   r[   r,   r   r   r   r:   r:   7   s0   † Ù\ð ŸšÐ$OÓPÐô
ô&ô ô÷")r   r:   c                  ó"   • \ rS rSrSrSS jrSrg)ÚMetaOxmlElementét   zMetaclass for BaseOxmlElement.c                óÆ   • [         [        [        [        [        [
        [        4nUR                  5        H(  u  pV[        Xd5      (       d  M  UR                  X5        M*     g rO   )
ÚOneAndOnlyOneÚ	OneOrMoreÚOptionalAttributeÚRequiredAttributeÚ
ZeroOrMoreÚ	ZeroOrOneÚZeroOrOneChoiceÚitemsrA   Úpopulate_class_members)r   ÚclsnameÚbasesÚclsdictÚdispatchableÚkeyr!   s          r   Ú__init__ÚMetaOxmlElement.__init__w   sK   € äÜÜÜÜÜÜð
ˆð "Ÿ-™-ž/‰JˆCÜ˜%×.Ó.Ø×,Ñ,¨SÖ6ò *r   r   N)r�   r$   r‚   ztuple[type, ...]rƒ   zdict[str, Any])r&   r'   r(   r)   r*   r†   r,   r   r   r   ru   ru   t   s
   † Ù(÷7r   ru   c                  ój   • \ rS rSrSrSS jrSS jrS r\S 5       r	\SS j5       r
\SS j5       rS	rg
)ÚBaseAttributeé†   zQBase class for OptionalAttribute and RequiredAttribute, providing common methods.c                ó   • Xl         X l        g rO   )Ú
_attr_nameÚ_simple_type)rF   Ú	attr_nameÚsimple_types      r   r†   ÚBaseAttribute.__init__‰   s   € Ø#ŒØ'Õr   c                ó<   • Xl         X l        U R                  5         g©z/
Add the appropriate methods to *element_cls*.
N)Ú_element_clsÚ
_prop_nameÚ_add_attr_property©rF   Úelement_clsÚ	prop_names      r   r€   Ú$BaseAttribute.populate_class_members�   s   € ð (ÔØ#Œà×ÑÕ!r   c                óˆ   • [        U R                  U R                  S5      n[        U R                  U R
                  U5        g)zÍAdd a read/write `{prop_name}` property to the element class.

The property returns the interpreted value of this attribute on access and changes the
attribute value to its ST_* counterpart on assignment.
N)ÚpropertyÚ_getterÚ_setterÚsetattrr“   r”   ©rF   Ú	property_s     r   r•   Ú BaseAttribute._add_attr_property–   s0   € ô ˜TŸ\™\¨4¯<©<¸Ó>ˆ	ä�×!Ñ! 4§?¡?°IÕ>r   c                ód   • SU R                   ;   a  [        U R                   5      $ U R                   $ )NÚ:)rŒ   r   ©rF   s    r   Ú_clark_nameÚBaseAttribute._clark_name    s'   € à�$—/‘/Ó!Ü�d—o‘oÓ&Ð&Ø�‰Ðr   c                ó   • [        S5      e)úJCallable suitable for the "get" side of the attribute property descriptor.ú$must be implemented by each subclass©ÚNotImplementedErrorr¤   s    r   rœ   ÚBaseAttribute._getter¦   ó   € ô "Ð"HÓIÐIr   c                ó   • [        S5      e)úJCallable suitable for the "set" side of the attribute property descriptor.r©   rª   r¤   s    r   r�   ÚBaseAttribute._setter«   r­   r   )rŒ   r“   r”   r�   N)rŽ   r$   r�   útype[AttributeType]©r—   úType[BaseOxmlElement]r˜   r$   ©r%   z Callable[[BaseOxmlElement], Any]©r%   z&Callable[[BaseOxmlElement, Any], None])r&   r'   r(   r)   r*   r†   r€   r•   r›   r¥   rœ   r�   r,   r   r   r   r‰   r‰   †   sT   † Ù[ô(ô"ò?ð ñó ðð
 óJó ðJð óJó óJr   r‰   c                  ól   ^ • \ rS rSrSrSS	U 4S jjjr\S 5       r\S
S j5       r\SS j5       r	Sr
U =r$ )rz   é±   z¶Defines an optional attribute on a custom element class.

An optional attribute returns a default value when not present for reading. When assigned
|None|, the attribute is removed.
c                ó8   >• [         [        U ]  X5        X0l        g rO   )Úsuperrz   r†   Ú_default)rF   rŽ   r�   ÚdefaultÚ	__class__s       €r   r†   ÚOptionalAttribute.__init__¸   s   ø€ ÜÔ Ñ/°	ÔGØ�r   c                óR   • U R                   R                  < SU R                  < S3$ )ú[
Return the string to use as the ``__doc__`` attribute of the property
for this attribute.
ú type-converted value of ``z•`` attribute, or |None| (or specified default value) if not present. Assigning the default value causes the attribute to be removed from the element.©r�   r&   rŒ   r¤   s    r   Ú
_docstringÚOptionalAttribute._docstring¼   s#   € ð × Ñ ×)Ô)¨4¯?¬?ð<ð	
r   c                ó:   ^ • SU 4S jjnT R                   Ul        U$ )r¨   c                óŽ   >• U R                  TR                  5      nUc  TR                  $ TR                  R	                  U5      $ rO   )Úgetr¥   rº   r�   r   ©ÚobjÚattr_str_valuerF   s     €r   Úget_attr_valueÚ1OptionalAttribute._getter.<locals>.get_attr_valueÍ   s>   ø€ Ø ŸW™W T×%5Ñ%5Ó6ˆNØÑ%Ø—}‘}Ð$Ø×$Ñ$×-Ñ-¨nÓ=Ð=r   ©rÈ   r-   r%   r   ©rÂ   r*   ©rF   rÊ   s   ` r   rœ   ÚOptionalAttribute._getterÉ   s   ø€ ÷	>ð "&§¡ˆÔØÐr   c                ó   ^ • SU 4S jjnU$ )r¯   c                óø   >• UTR                   :X  a2  TR                  U R                  ;   a  U R                  TR                  	 g TR                  R	                  U5      nU R                  TR                  U5        g rO   )rº   r¥   Úattribr�   r"   Úset©rÈ   r!   Ú	str_valuerF   s      €r   Úset_attr_valueÚ1OptionalAttribute._setter.<locals>.set_attr_valueÚ   sb   ø€ ð ˜Ÿ™Ó%Ø×#Ñ# s§z¡zÓ1ØŸ
™
 4×#3Ñ#3Ð4ØØ×)Ñ)×0Ñ0°Ó7ˆIØ�G‰G�D×$Ñ$ iÕ0r   ©rÈ   r-   r!   r   r%   ÚNoner   ©rF   rÖ   s   ` r   r�   ÚOptionalAttribute._setterÖ   s   ø€ ÷	1ð Ðr   )rº   rO   )rŽ   r$   r�   r±   r»   r   r´   rµ   )r&   r'   r(   r)   r*   r†   r›   rÂ   rœ   r�   r,   Ú__classcell__©r¼   s   @r   rz   rz   ±   sN   ø† ñ÷ ñ  ð ñ

ó ð

ð ó
ó ð
ð óó ör   rz   c                  óP   • \ rS rSrSr\SS j5       r\S 5       r\S	S j5       rSr	g)
r{   éç   aŒ  Defines a required attribute on a custom element class.

A required attribute is assumed to be present for reading, so does not have a default value;
its actual value is always used. If missing on read, an |InvalidXmlError| is raised. It also
does not remove the attribute if |None| is assigned. Assigning |None| raises |TypeError| or
|ValueError|, depending on the simple type of the attribute.
c                ó:   ^ • SU 4S jjnT R                   Ul        U$ )r¨   c                óÄ   >• U R                  TR                  5      nUc'  [        STR                  < SU R                  < 35      eTR
                  R                  U5      $ )Nz
required 'z#' attribute not present on element )rÆ   r¥   r   rŒ   Útagr�   r   rÇ   s     €r   rÊ   Ú1RequiredAttribute._getter.<locals>.get_attr_valueô   sV   ø€ Ø ŸW™W T×%5Ñ%5Ó6ˆNØÑ%Ý%ØKOÏ?Ì?Ð\_×\cÓ\cÐdóð ð ×$Ñ$×-Ñ-¨nÓ=Ð=r   rÌ   rÍ   rÎ   s   ` r   rœ   ÚRequiredAttribute._getterð   s   ø€ ÷	>ð "&§¡ˆÔØÐr   c                óR   • U R                   R                  < SU R                  < S3$ )r¿   rÀ   z`` attribute.rÁ   r¤   s    r   rÂ   ÚRequiredAttribute._docstringÿ   s$   € ð ×Ñ×&Ô&Ø�OŒOð
ð 	
r   c                ó   ^ • SU 4S jjnU$ )r¯   c                ót   >• TR                   R                  U5      nU R                  TR                  U5        g rO   )r�   r"   rÓ   r¥   rÔ   s      €r   rÖ   Ú1RequiredAttribute._setter.<locals>.set_attr_value  s-   ø€ Ø×)Ñ)×0Ñ0°Ó7ˆIØ�G‰G�D×$Ñ$ iÕ0r   rØ   r   rÚ   s   ` r   r�   ÚRequiredAttribute._setter
  s   ø€ ÷	1ð Ðr   r   Nr´   rµ   )
r&   r'   r(   r)   r*   r›   rœ   rÂ   r�   r,   r   r   r   r{   r{   ç   sC   † ñð óó ðð ñ
ó ð
ð óó ór   r{   c                  óâ   ^ • \ rS rSrSrSSU 4S jjjrSS jrS rS rS r	S r
S	 r\S
 5       rSS jr\SS j5       r\SS j5       r\S 5       r\SS j5       r\S 5       r\S 5       rSrU =r$ )Ú_BaseChildElementi  zBase class for the child element classes corresponding to varying cardinalities.

Subclasses include ZeroOrOne and ZeroOrMore.
c                óB   >• [         [        U ]  5         Xl        X l        g rO   )r¹   rì   r†   Ú_nsptagnameÚ_successors)rF   Ú
nsptagnameÚ
successorsr¼   s      €r   r†   Ú_BaseChildElement.__init__  s   ø€ ÜÔ Ñ/Ô1Ø%ÔØ%Õr   c                ó   • Xl         X l        g)zFBaseline behavior for adding the appropriate methods to `element_cls`.N)r“   r”   r–   s      r   r€   Ú(_BaseChildElement.populate_class_members   s   € à'ÔØ#�r   c                óv   ^ • SU 4S jjnST R                   -  Ul        T R                  T R                  U5        g)zGAdd an ``_add_x()`` method to the element class for this child element.c                óÈ   >• [        U TR                  5      nU" 5       nUR                  5        H  u  pE[        X4U5        M     [        U TR                  5      nU" U5        U$ rO   )ÚgetattrÚ_new_method_namer   rž   Ú_insert_method_name)rÈ   rV   Ú
new_methodÚchildr…   r!   Úinsert_methodrF   s          €r   Ú
_add_childÚ0_BaseChildElement._add_adder.<locals>._add_child(  sW   ø€ Ü   d×&;Ñ&;Ó<ˆJÙ“LˆEØ#Ÿk™kžm‘
�Ü˜ EÖ*ñ ,ä# C¨×)AÑ)AÓBˆMÙ˜%Ô ØˆLr   úSAdd a new ``<%s>`` child element unconditionally, inserted in the correct sequence.N)rÈ   r-   rV   r   )rî   r*   Ú_add_to_classÚ_add_method_name)rF   rý   s   ` r   Ú
_add_adderÚ_BaseChildElement._add_adder%  s;   ø€ ÷	ð#Ø%)×%5Ñ%5ñ6ð 	Ôð 	×Ñ˜4×0Ñ0°*Õ=r   c                ó|   • U R                   nSU R                  -  Ul        U R                  U R                  U5        g)z�Add a `_new_{prop_name}()` method to the element class.

This method creates a new, empty element of the correct type, having no attributes.
zYReturn a "loose", newly created ``<%s>`` element having no attributes, text, or children.N)Ú_creatorrî   r*   r   rø   )rF   Úcreators     r   Ú_add_creatorÚ_BaseChildElement._add_creator7  s?   € ð
 —-‘-ˆð(Ø*.×*:Ñ*:ñ;ð 	Œð 	×Ñ˜4×0Ñ0°'Õ:r   c                ót   • [        U R                  SS5      n[        U R                  U R                  U5        g)z“Add a read-only `{prop_name}` property to the parent element class.

The property locates and returns this child element or `None` if not present.
N)r›   rœ   rž   r“   r”   rŸ   s     r   Ú_add_getterÚ_BaseChildElement._add_getterC  s,   € ô
 ˜TŸ\™\¨4°Ó6ˆ	ä�×!Ñ! 4§?¡?°IÕ>r   c                óv   ^ • SU 4S jjnST R                   -  Ul        T R                  T R                  U5        g)zJAdd an ``_insert_x()`` method to the element class for this child element.c                óB   >• U R                   " U/TR                  Q76   U$ rO   )Úinsert_element_beforerï   ©rÈ   rû   rF   s     €r   Ú_insert_childÚ6_BaseChildElement._add_inserter.<locals>._insert_childO  s!   ø€ Ø×%Ò% eÐ?¨d×.>Ñ.>Ó?ØˆLr   zYReturn the passed ``<%s>`` element after inserting it as a child in the correct sequence.N)rÈ   r-   rû   r-   )rî   r*   r   rù   )rF   r  s   ` r   Ú_add_inserterÚ_BaseChildElement._add_inserterL  s;   ø€ ÷	ð
)Ø+/×+;Ñ+;ñ<ð 	Ôð 	×Ñ˜4×3Ñ3°]ÕCr   c                ó|   • U R                    S3n[        U R                  SS5      n[        U R                  X5        g)z|
Add a read-only ``{prop_name}_lst`` property to the element class to
retrieve a list of child elements matching this type.
Ú_lstN)r”   r›   Ú_list_getterrž   r“   )rF   r˜   r    s      r   Ú_add_list_getterÚ"_BaseChildElement._add_list_getterY  s9   € ð
 —‘Ð' tÐ,ˆ	Ü˜T×.Ñ.°°dÓ;ˆ	Ü�×!Ñ! 9Õ8r   c                ó    • SU R                   -  $ )Nz_add_%s©r”   r¤   s    r   r  Ú"_BaseChildElement._add_method_nameb  ó   € à˜4Ÿ?™?Ñ*Ð*r   c                óh   • [        U R                  U5      (       a  g[        U R                  X5        g)zSAdd `method` to the target class as `name`, unless `name` is already defined there.N)Úhasattrr“   rž   )rF   ÚnameÚmethods      r   r   Ú_BaseChildElement._add_to_classf  s(   € ä�4×$Ñ$ d×+Ñ+ØÜ�×!Ñ! 4Õ0r   c                ó   ^ • SU 4S jjnU$ )zSCallable that creates a new, empty element of the child type, having no attributes.c                ó.   >• [        TR                  5      $ rO   )r4   rî   ©rÈ   rF   s    €r   Únew_child_elementÚ5_BaseChildElement._creator.<locals>.new_child_elementp  s   ø€ Ü˜t×/Ñ/Ó0Ð0r   ©rÈ   r-   r   )rF   r%  s   ` r   r  Ú_BaseChildElement._creatorl  s   ø€ ÷	1ð !Ð r   c                ó@   ^ • SU 4S jjnST R                   -  Ul        U$ )z¡Callable suitable for the "get" side of the property descriptor.

This default getter returns the child element with matching tag name or |None| if not
present.
c                óL   >• U R                  [        TR                  5      5      $ rO   )Úfindr   rî   r$  s    €r   Úget_child_elementÚ4_BaseChildElement._getter.<locals>.get_child_element}  s   ø€ Ø—8‘8œB˜t×/Ñ/Ó0Ó1Ð1r   z0``<%s>`` child element or |None| if not present.©rÈ   r-   r%   úBaseOxmlElement | None©rî   r*   ©rF   r,  s   ` r   rœ   Ú_BaseChildElement._getteru  s(   ø€ ÷	2ð ?À×AQÑAQÑQð 	Ô!ð !Ð r   c                ó    • SU R                   -  $ )Nz
_insert_%sr  r¤   s    r   rù   Ú%_BaseChildElement._insert_method_name…  ó   € à˜dŸo™oÑ-Ð-r   c                ó@   ^ • SU 4S jjnST R                   -  Ul        U$ )zCCallable suitable for the "get" side of a list property descriptor.c                ó`   >• [        SU R                  [        TR                  5      5      5      $ )Núlist[BaseOxmlElement])r
   Úfindallr   rî   r$  s    €r   Úget_child_element_listÚ>_BaseChildElement._list_getter.<locals>.get_child_element_list�  s%   ø€ ÜÐ/°·±¼RÀ×@PÑ@PÓ=QÓ1RÓSÐSr   zPA list containing each of the ``<%s>`` child elements, in the order they appear.)rÈ   r-   r%   r8  r0  )rF   r:  s   ` r   r  Ú_BaseChildElement._list_getter‰  s,   ø€ ÷	Tð Ø"&×"2Ñ"2ñ3ð 	Ô&ð &Ð%r   c                ó    • SU R                   -  $ ©Nz
_remove_%sr  r¤   s    r   Ú_remove_method_nameÚ%_BaseChildElement._remove_method_name–  r5  r   c                ó    • SU R                   -  $ )Nz_new_%sr  r¤   s    r   rø   Ú"_BaseChildElement._new_method_nameš  r  r   )r“   rî   r”   rï   ©r   )rð   r$   rñ   úSequence[str]r²   )r  r$   r   zCallable[..., Any]©r%   z,Callable[[BaseOxmlElement], BaseOxmlElement])r%   z3Callable[[BaseOxmlElement], BaseOxmlElement | None])r%   z2Callable[[BaseOxmlElement], list[BaseOxmlElement]])r&   r'   r(   r)   r*   r†   r€   r  r  r
  r  r  r   r  r   r›   r  rœ   rù   r  r?  rø   r,   rÜ   rÝ   s   @r   rì   rì     sÂ   ø† ñ÷
&ñ &ô
$ò
>ò$
;ò?òDò9ð ñ+ó ð+ô1ð ó!ó ð!ð ó!ó ð!ð ñ.ó ð.ð ó
&ó ð
&ð ñ.ó ð.ð ñ+ó ö+r   rì   c                  óx   • \ rS rSrSr\S 5       r      SS jrSS jr\S 5       r	\
S 5       r\
S 5       rS	rg
)ÚChoiceiŸ  zVDefines a child element belonging to a group, only one of which may appear as a child.c                ó   • U R                   $ rO   )rî   r¤   s    r   rð   ÚChoice.nsptagname¢  s   € à×ÑÐr   c                óÈ   • Xl         X l        X0l        U R                  5         U R	                  5         U R                  5         U R                  5         U R                  5         g©z-Add the appropriate methods to `element_cls`.N)r“   Ú_group_prop_namerï   r
  r  r  r  Ú_add_get_or_change_to_method)rF   r—   Úgroup_prop_namerñ   s       r   r€   ÚChoice.populate_class_members¦  sP   € ð (ÔØ /ÔØ%Ôà×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×)Ñ)Õ+r   c                óv   ^ • SU 4S jjnST R                   -  Ul        T R                  T R                  U5        g)zPAdd a `get_or_change_to_x()` method to the element class for this child element.c                ó²   >• [        U TR                  5      nUb  U$ [        U TR                  5      nU" 5         [        U TR                  5      nU" 5       nU$ rO   )r÷   r”   Ú_remove_group_method_namer  )rÈ   rû   Úremove_group_methodÚ
add_methodrF   s       €r   Úget_or_change_to_childÚCChoice._add_get_or_change_to_method.<locals>.get_or_change_to_child·  sU   ø€ Ü˜C §¡Ó1ˆEØÑ Ø�Ü")¨#¨t×/MÑ/MÓ"NÐÙÔ!Ü   d×&;Ñ&;Ó<ˆJÙ“LˆEØˆLr   zFReturn the ``<%s>`` child, replacing any other group element if found.Nr'  )rî   r*   r   Ú_get_or_change_to_method_name)rF   rU  s   ` r   rM  Ú#Choice._add_get_or_change_to_method´  s;   ø€ ÷	ð XØ×Ññ*ÐÔ&ð 	×Ñ˜4×=Ñ=Ð?UÕVr   c                ó‚   • SU R                   ;   a  U R                   R                  S5      S-   nOSnU R                   US $ )zG
Calculate property name from tag name, e.g. a:schemeClr -> schemeClr.
r£   rf   r   N)rî   Úindex)rF   Ústarts     r   r”   ÚChoice._prop_nameÆ  sE   € ð
 �$×"Ñ"Ó"Ø×$Ñ$×*Ñ*¨3Ó/°!Ñ3‰EàˆEØ×Ñ  Ð'Ð'r   c                ó    • SU R                   -  $ )Nzget_or_change_to_%sr  r¤   s    r   rW  Ú$Choice._get_or_change_to_method_nameÑ  s   € à$ t§¡Ñ6Ð6r   c                ó    • SU R                   -  $ r>  )rL  r¤   s    r   rR  Ú Choice._remove_group_method_nameÕ  s   € à˜d×3Ñ3Ñ3Ð3r   )r“   rL  rï   N)r—   r³   rN  r$   rñ   rD  ©r%   rÙ   )r&   r'   r(   r)   r*   r›   rð   r€   rM  r”   r   rW  rR  r,   r   r   r   rG  rG  Ÿ  sv   † Ù`àñ ó ð ð,Ø0ð,ØCFð,ØTaô,ôWð$ ñ(ó ð(ð ñ7ó ð7ð ñ4ó ó4r   rG  c                  óT   ^ • \ rS rSrSrSU 4S jjrSU 4S jjr\S	S j5       rSr	U =r
$ )
rx   iÚ  z5Defines a required child element for MetaOxmlElement.c                ó.   >• [         [        U ]  US5        g )Nr   )r¹   rx   r†   )rF   rð   r¼   s     €r   r†   ÚOneAndOnlyOne.__init__Ý  s   ø€ ÜŒm˜TÑ+¨J¸Õ;r   c                óL   >• [         [        U ]  X5        U R                  5         gr’   )r¹   rx   r€   r
  ©rF   r—   r˜   r¼   s      €r   r€   Ú$OneAndOnlyOne.populate_class_membersà  s    ø€ ô 	Œm˜TÑ9¸+ÔQØ×ÑÕr   c                ó@   ^ • SU 4S jjnST R                   -  Ul        U$ )z@Callable suitable for the "get" side of the property descriptor.c                ó†   >• U R                  [        TR                  5      5      nUc  [        STR                  -  5      eU$ )Nz+required ``<%s>`` child element not present)r+  r   rî   r   r  s     €r   r,  Ú0OneAndOnlyOne._getter.<locals>.get_child_elementë  sC   ø€ Ø—H‘HœR × 0Ñ 0Ó1Ó2ˆEØ‰}Ü%ØAÀD×DTÑDTÑTóð ð ˆLr   z Required ``<%s>`` child element.©rÈ   r-   r%   r-   r0  r1  s   ` r   rœ   ÚOneAndOnlyOne._getterç  s%   ø€ ÷	ð %GÈ×IYÑIYÑ$YÐÔ!Ø Ð r   r   )rð   r$   r²   rE  )r&   r'   r(   r)   r*   r†   r€   r›   rœ   r,   rÜ   rÝ   s   @r   rx   rx   Ú  s$   ø† Ù?÷<÷ð ó!ó ö!r   rx   c                  óJ   ^ • \ rS rSrSrSU 4S jjrSS jr\S 5       rSr	U =r
$ )	ry   i÷  zUDefines a repeating child element for MetaOxmlElement that must appear at least once.c                óâ   >• [         [        U ]  X5        U R                  5         U R	                  5         U R                  5         U R                  5         U R                  5         [        X5        g)z-Add the appropriate methods to *element_cls*.N)	r¹   ry   r€   r  r  r  r  Ú_add_public_adderÚdelattrrf  s      €r   r€   Ú OneOrMore.populate_class_membersú  sT   ø€ äŒi˜Ñ5°kÔMØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×ÑÔ Ü�Õ'r   c                óv   ^ • SU 4S jjnST R                   -  Ul        T R                  T R                  U5        g)z;Add a public `.add_x()` method to the parent element class.c                óB   >• [        U TR                  5      nU" 5       nU$ rO   )r÷   r  )rÈ   Úprivate_add_methodrû   rF   s      €r   Ú	add_childÚ.OneOrMore._add_public_adder.<locals>.add_child  s#   ø€ Ü!(¨¨d×.CÑ.CÓ!DÐÙ&Ó(ˆEØˆLr   rÿ   Nrk  )rî   r*   r   Ú_public_add_method_name)rF   ru  s   ` r   ro  ÚOneOrMore._add_public_adder  s;   ø€ ÷	ð#Ø%)×%5Ñ%5ñ6ð 	Ôð 	×Ñ˜4×7Ñ7¸ÕCr   c                ó    • SU R                   -  $ )zê
add_childElement() is public API for a repeating element, allowing
new elements to be added to the sequence. May be overridden to
provide a friendlier API to clients having domain appropriate
parameter names for required attributes.
zadd_%sr  r¤   s    r   rw  Ú!OneOrMore._public_add_method_name  s   € ð ˜$Ÿ/™/Ñ)Ð)r   r   r²   ra  )r&   r'   r(   r)   r*   r€   ro  r   rw  r,   rÜ   rÝ   s   @r   ry   ry   ÷  s%   ø† Ù_÷(ôDð ñ*ó ö*r   ry   c                  ó0   ^ • \ rS rSrSrSU 4S jjrSrU =r$ )r|   i  zB
Defines an optional repeating child element for MetaOxmlElement.
c                óÂ   >• [         [        U ]  X5        U R                  5         U R	                  5         U R                  5         U R                  5         [        X5        gr’   )r¹   r|   r€   r  r  r  r  rp  rf  s      €r   r€   Ú!ZeroOrMore.populate_class_members"  sJ   ø€ ô 	Œj˜$Ñ6°{ÔNØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔÜ�Õ'r   r   r²   )r&   r'   r(   r)   r*   r€   r,   rÜ   rÝ   s   @r   r|   r|     s   ø† ñ÷	(õ 	(r   r|   c                  óL   ^ • \ rS rSrSrSU 4S jjrS rS r\S 5       r	Sr
U =r$ )	r}   i.  z6Defines an optional child element for MetaOxmlElement.c                óì   >• [         [        U ]  X5        U R                  5         U R	                  5         U R                  5         U R                  5         U R                  5         U R                  5         grK  )	r¹   r}   r€   r
  r  r  r  Ú_add_get_or_adderÚ_add_removerrf  s      €r   r€   Ú ZeroOrOne.populate_class_members1  sX   ø€ äŒi˜Ñ5°kÔMØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×ÑÔ Ø×ÑÕr   c                óv   ^ • SU 4S jjnST R                   -  Ul        T R                  T R                  U5        g)zKAdd a `.get_or_add_x()` method to the element class for this child element.c                ót   >• [        U TR                  5      nUc  [        U TR                  5      nU" 5       nU$ rO   )r÷   r”   r  )rÈ   rû   rT  rF   s      €r   Úget_or_add_childÚ5ZeroOrOne._add_get_or_adder.<locals>.get_or_add_child>  s6   ø€ Ü˜C §¡Ó1ˆEØ‰}Ü$ S¨$×*?Ñ*?Ó@�
Ù"›�ØˆLr   z>Return the ``<%s>`` child element, newly added if not present.Nrk  )rî   r*   r   Ú_get_or_add_method_name)rF   r…  s   ` r   r€  ÚZeroOrOne._add_get_or_adder;  s;   ø€ ÷	ð MØ×Ññ$ÐÔ ð 	×Ñ˜4×7Ñ7Ð9IÕJr   c                óx   ^ • SU 4S jjnST R                    S3Ul        T R                  T R                  U5        g)zHAdd a `._remove_x()` method to the element class for this child element.c                ó<   >• U R                  TR                  5        g rO   )Ú
remove_allrî   r$  s    €r   Ú_remove_childÚ-ZeroOrOne._add_remover.<locals>._remove_childM  s   ø€ Ø�N‰N˜4×+Ñ+Õ,r   zRemove all `z` child elements.N©rÈ   r-   r%   rÙ   )rî   r*   r   r?  )rF   rŒ  s   ` r   r�  ÚZeroOrOne._add_removerJ  s9   ø€ ÷	-ð #/¨t×/?Ñ/?Ð.@Ð@QÐ RˆÔØ×Ñ˜4×3Ñ3°]ÕCr   c                ó    • SU R                   -  $ )Nzget_or_add_%sr  r¤   s    r   r‡  Ú!ZeroOrOne._get_or_add_method_nameS  s   € à §¡Ñ0Ð0r   r   r²   )r&   r'   r(   r)   r*   r€   r€  r�  r   r‡  r,   rÜ   rÝ   s   @r   r}   r}   .  s+   ø† Ù@÷òKòDð ñ1ó ö1r   r}   c                  ó~   ^ • \ rS rSrSrSSS jjrSU 4S jjrS rS r\	S 5       r
\SS j5       r\S	 5       rS
rU =r$ )r~   iX  zOAn `EG_*` element group where at most one of its members may appear as a child.c                óD   • [        U5      U l        [        U5      U l        g rO   )ÚtupleÚ_choicesrï   )rF   Úchoicesrñ   s      r   r†   ÚZeroOrOneChoice.__init__[  s   € Ü˜g›ˆŒÜ  Ó,ˆÕr   c                óÞ   >• [         [        U ]  X5        U R                  5         U R                   H)  nUR                  XR
                  U R                  5        M+     U R                  5         grK  )r¹   r~   r€   Ú_add_choice_getterr•  r”   rï   Ú_add_group_remover)rF   r—   r˜   Úchoicer¼   s       €r   r€   Ú&ZeroOrOneChoice.populate_class_members_  sR   ø€ äŒo˜tÑ;¸KÔSØ×ÑÔ!Ø—m”mˆFØ×)Ñ)¨+·±È×HXÑHXÖYñ $à×ÑÕ!r   c                ót   • [        U R                  SS5      n[        U R                  U R                  U5        g)z•Add a read-only `.{prop_name}` property to the element class.

The property returns the present member of this group, or |None| if none are present.
N)r›   Ú_choice_getterrž   r“   r”   rŸ   s     r   r™  Ú"ZeroOrOneChoice._add_choice_getterg  s.   € ô
 ˜T×0Ñ0°$¸Ó=ˆ	ä�×!Ñ! 4§?¡?°IÕ>r   c                ó\   ^ • SU 4S jjnSUl         T R                  T R                  U5        g)zJAdd a `._remove_eg_x()` method to the element class for this choice group.c                óN   >• TR                    H  nU R                  U5        M     g rO   )Ú_member_nsptagnamesr‹  )rÈ   ÚtagnamerF   s     €r   Ú_remove_choice_groupÚ@ZeroOrOneChoice._add_group_remover.<locals>._remove_choice_groups  s   ø€ Ø×3Ô3�Ø—‘˜wÖ'ò 4r   z9Remove the current choice group child element if present.NrŽ  )r*   r   Ú _remove_choice_group_method_name)rF   r¤  s   ` r   rš  Ú"ZeroOrOneChoice._add_group_removerp  s+   ø€ ÷	(ð (cÐÔ$Ø×Ñ˜4×@Ñ@ÐBVÕWr   c                ó&   ^ • SU 4S jjnSUl         U$ )zR
Return a function object suitable for the "get" side of the property
descriptor.
c                óJ   >• [        SU R                  " TR                  6 5      $ )Nr/  )r
   Úfirst_child_found_inr¢  r$  s    €r   Úget_group_member_elementÚ@ZeroOrOneChoice._choice_getter.<locals>.get_group_member_element�  s&   ø€ ÜØ(¨#×*BÒ*BÀD×D\ÑD\Ð*]óð r   zbReturn the child element belonging to this element group, or |None| if no member child is present.r.  )r*   )rF   r«  s   ` r   rž  ÚZeroOrOneChoice._choice_getterz  s   ø€ ÷	ð4ð 	!Ô(ð (Ð'r   c                óX   • U R                    Vs/ s H  oR                  PM     sn$ s  snf )zUSequence of namespace-prefixed tagnames, one for each member element of choice group.)r•  rð   )rF   r›  s     r   r¢  Ú#ZeroOrOneChoice._member_nsptagnamesŒ  s$   € ð 15·²Ó>² f×!Ô!±Ñ>Ð>ùÒ>s   �'c                ó    • SU R                    3$ )z!Function-name for choice remover.Ú_remove_r  r¤   s    r   r¦  Ú0ZeroOrOneChoice._remove_choice_group_method_name‘  s   € ð ˜$Ÿ/™/Ð*Ð+Ð+r   )r•  rï   rC  )r–  zIterable[Choice]rñ   zIterable[str]r²   )r%   rq   )r&   r'   r(   r)   r*   r†   r€   r™  rš  r›   rž  r   r¢  r¦  r,   rÜ   rÝ   s   @r   r~   r~   X  sW   ø† ÙYö-÷"ò?òXð ñ(ó ð(ð" ó?ó ð?ð ñ,ó ö,r   r~   c                  ó|   ^ • \ rS rSrSrS rSS jrSS jrSS jr\	SS j5       r
SU 4S jjr\	SS	 j5       rS
rU =r$ )r-   i˜  znEffective base class for all custom element classes.

Adds standardized behavior to all classes in one place.
c                ó`   • SU R                   R                  U R                  [        U 5      4-  $ )Nz<%s '<%s>' at 0x%0x>)r¼   r&   Ú_nsptagÚidr¤   s    r   Ú__repr__ÚBaseOxmlElement.__repr__ž  s/   € Ø%Ø�N‰N×#Ñ#Ø�L‰LÜˆt‹Hð)
ñ 
ð 	
r   c                óX   • U H$  nU R                  [        U5      5      nUc  M"  Us  $    g)z9First child with tag in `tagnames`, or None if not found.N)r+  r   )rF   Útagnamesr£  rû   s       r   rª  Ú$BaseOxmlElement.first_child_found_in¥  s.   € ãˆGØ—I‘Iœb ›kÓ*ˆEØÓ Ø’ñ  ð r   c                ór   • U R                   " U6 nUb  UR                  U5        U$ U R                  U5        U$ rO   )rª  ÚaddpreviousÚappend)rF   Úelmrº  Ú	successors       r   r  Ú%BaseOxmlElement.insert_element_before­  s@   € Ø×-Ò-¨xÐ8ˆ	ØÑ Ø×!Ñ! #Ô&ð ˆ
ð �K‰K˜ÔØˆ
r   c                ó~   • U H7  nU R                  [        U5      5      nU H  nU R                  U5        M     M9     g)z>Remove child elements with tagname (e.g. "a:p") in `tagnames`.N)r9  r   Úremove)rF   rº  r£  Úmatchingrû   s        r   r‹  ÚBaseOxmlElement.remove_allµ  s4   € ãˆGØ—|‘|¤B w£KÓ0ˆHÛ!�Ø—‘˜EÖ"ó "ò  r   c                ó   • [        U 5      $ )z‡XML string for this element, suitable for testing purposes.

Pretty printed for readability and without an XML declaration at the top.
)r=   r¤   s    r   r<   ÚBaseOxmlElement.xml¼  s   € ô % TÓ*Ð*r   c                ó(   >• [         TU ]  U[        S9$ )z}Override of `lxml` _Element.xpath() method.

Provides standard Open XML namespace mapping (`nsmap`) in centralized location.
)Ú
namespaces)r¹   Úxpathr   )rF   Ú	xpath_strr¼   s     €r   rÊ  ÚBaseOxmlElement.xpathÄ  s   ø€ ô
 ‰w‰}˜Y´6ˆ}Ð:Ð:r   c                óB   • [         R                  " U R                  5      $ rO   )r   Úfrom_clark_namerâ   r¤   s    r   rµ  ÚBaseOxmlElement._nsptagË  s   € ä#×3Ò3°D·H±HÓ=Ð=r   r   )rº  r$   r%   z_Element | None)r¿  r   rº  r$   )rº  r$   r%   rÙ   )r%   r$   )rË  r$   r%   r   )r&   r'   r(   r)   r*   r·  rª  r  r‹  r›   r<   rÊ  rµ  r,   rÜ   rÝ   s   @r   r-   r-   ˜  sI   ø† ñò

ôôô#ð ó+ó ð+÷;ð ó>ó ö>r   )Ú	metaclassrO   )r2   r$   r/   zdict[str, str] | Noner%   r-   )r;   r   )-r*   Ú
__future__r   rr   Útypingr   r   r   r   r   r	   r
   Úlxmlr   Ú
lxml.etreer   r   Úpptx.excr   Ú	pptx.oxmlr   Úpptx.oxml.nsr   r   r   Ú	pptx.utilr   r   r4   r=   r$   r:   Útyperu   r‰   rz   r{   rì   rG  rx   ry   r|   r}   r~   r-   r   r   r   Ú<module>rÚ     sö   ðÙ Vå "ã 	ß J× JÑ Jå ß ,å $Ý !ß 9Ñ 9Ý "ô�Hô ö$Côô:)�ô :)ôz7�dô 7÷$(Jñ (JôV3˜ô 3ôl+˜ô +÷\G+ñ G+ôT84Ðô 84ôv!Ð%ô !ô:#*Ð!ô #*ôL(Ð"ô (ô"'1Ð!ô '1ôT<,Ð'ô <,ô@5>�e×'Ñ'°?ó 5>r   