Ë
    ^ãjßc  ã                  óö  — d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
mZmZ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mZ dd	lmZ erdd
lmZ ddlmZ d)d„Z G d„ de «      Z! ed«      Z" G d„ de#«      Z$ G d„ d«      Z% G d„ de%«      Z& G d„ de%«      Z' G d„ d«      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. G d&„ d'ej"                  e$¬(«      Z/y)*z?Enabling declarative definition of lxml custom element classes.é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚListÚSequenceÚTupleÚTypeÚTypeVar)Úetree)ÚElementBaseÚ_Element)ÚInvalidXmlError)ÚNamespacePrefixedTagÚnsmapÚqn)Úlazyproperty)ÚBaseXmlEnum)ÚBaseSimpleTypec                óH   — t        j                  | dd¬«      }t        |«      S )z[Serialize `element` to human-readable XML suitable for tests.

    No XML declaration.
    ÚunicodeT)ÚencodingÚpretty_print)r   ÚtostringÚ	XmlString)ÚelementÚxmls     úT/var/www/html/metafoliadorv2/venv/lib/python3.12/site-packages/docx/oxml/xmlchemy.pyÚserialize_for_readingr        s    € ô
 �.‰.˜¨9À4Ô
H€CÜ�S‹>Ðó    c                  óf   — e Zd ZdZ ej
                  d«      Zd	d„Zd	d„Zd
d„Z	dd„Z
edd„«       Zy)r   z]Provides string comparison override suitable for serialized XML that is useful
    for tests.z)( *</?[\w:]+)(.*?)(/?>)([^<]*</[\w:]+>)?$c                óæ   — t        |t        «      sy| j                  «       }|j                  «       }t        |«      t        |«      k7  ryt	        ||«      D ]  \  }}| j                  ||«      rŒ y y)NFT)Ú
isinstanceÚstrÚ
splitlinesÚlenÚzipÚ_eq_elm_strs)ÚselfÚotherÚlinesÚlines_otherÚlineÚ
line_others         r   Ú__eq__zXmlString.__eq__5   sp   € Ü˜%¤Ô%ØØ—‘Ó!ˆØ×&Ñ&Ó(ˆÜˆu‹:œ˜[Ó)Ò)ØÜ # E¨;Ó 7ò 	ÑˆD�*Ø×$Ñ$ T¨:Õ6Ùð	ð r!   c                ó&   — | j                  |«       S ©N)r0   )r*   r+   s     r   Ú__ne__zXmlString.__ne__A   s   € Ø—;‘;˜uÓ%Ð%Ð%r!   c                óX   — |j                  «       }|j                  «       }t        |«      S )z‹Return a sequence of attribute strings parsed from `attrs`.

        Each attribute string is stripped of whitespace on both ends.
        )ÚstripÚsplitÚsorted)r*   ÚattrsÚattr_lsts      r   Ú	_attr_seqzXmlString._attr_seqD   s%   € ð
 —‘“ˆØ—;‘;“=ˆÜ�hÓÐr!   c                óÈ   — | j                  |«      \  }}}}| j                  |«      \  }}}	}
||k7  ry| j                  |«      | j                  |«      k7  ry||	k7  ry||
k7  ryy)zZReturn True if the element in `line_2` is XML equivalent to the element in
        `line`.FT)Ú_parse_liner:   )r*   r.   Úline_2Úfrontr8   ÚcloseÚtextÚfront_2Úattrs_2Úclose_2Útext_2s              r   r)   zXmlString._eq_elm_strsM   sv   € ð %)×$4Ñ$4°TÓ$:Ñ!ˆˆu�e˜TØ,0×,<Ñ,<¸VÓ,DÑ)ˆ�˜' 6Ø�GÒØØ�>‰>˜%Ó  D§N¡N°7Ó$;Ò;ØØ�GÒØØ�6Š>ØØr!   c                ó°   — | j                   j                  |«      }|€yt        dd«      D �cg c]  }|j                  |«      ‘Œ c}\  }}}}||||fS c c}w )zI(front, attrs, close, text) 4-tuple result of parsing XML element `line`.)Ú rF   rF   rF   é   é   )Ú_xml_elm_line_pattÚmatchÚrangeÚgroup)Úclsr.   rJ   Únr>   r8   r?   r@   s           r   r<   zXmlString._parse_line\   s^   € ð ×&Ñ&×,Ñ,¨TÓ2ˆØˆ=Ø!Ü=BÀ1Àa»[Ö$I¸ U§[¡[°¥^Ò$IÑ!ˆˆu�e˜TØ�e˜U DÐ(Ð(ùò %Js   ­AN)r+   ÚobjectÚreturnÚbool)r8   r%   rP   z	List[str])r.   r%   r=   r%   )r.   r%   rP   zTuple[str, str, str, str])Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompilerI   r0   r3   r:   r)   Úclassmethodr<   © r!   r   r   r   )   sC   „ ñð $˜Ÿ™Ð$PÓQÐó
ó&ó óð ò)ó ñ)r!   r   Ú_Tc                  ó   — e Zd ZdZdd„Zy)ÚMetaOxmlElementzMetaclass for BaseOxmlElement.c                ó¼   — t         t        t        t        t        t
        t        f}|j                  «       D ]$  \  }}t        ||«      sŒ|j                  | |«       Œ& y r2   )
ÚOneAndOnlyOneÚ	OneOrMoreÚOptionalAttributeÚRequiredAttributeÚ
ZeroOrMoreÚ	ZeroOrOneÚZeroOrOneChoiceÚitemsr$   Úpopulate_class_members)rM   ÚclsnameÚbasesÚ	namespaceÚdispatchableÚkeyÚvalues          r   Ú__init__zMetaOxmlElement.__init__l   sT   € äÜÜÜÜÜÜð
ˆð $Ÿ/™/Ó+ò 	7‰JˆC�Ü˜% Õ.Ø×,Ñ,¨S°#Õ6ñ	7r!   N)rg   r%   rh   zTuple[type, ...]ri   zDict[str, Any])rR   rS   rT   rU   rm   rY   r!   r   r\   r\   i   s
   „ Ù(ô7r!   r\   c                  ój   ‡ — e Zd ZdZdˆ fd„Zd	d„Zd„ Zed„ «       Zed
d„«       Z	e	 	 dd„«       Z
ˆ xZS )ÚBaseAttributezZBase class for OptionalAttribute and RequiredAttribute.

    Provides common methods.
    c                óF   •— t         t        | �  «        || _        || _        y r2   )Úsuperro   rm   Ú
_attr_nameÚ_simple_type)r*   Ú	attr_nameÚsimple_typeÚ	__class__s      €r   rm   zBaseAttribute.__init__�   s   ø€ ÜŒm˜TÑ+Ô-Ø#ˆŒØ'ˆÕr!   c                ó@   — || _         || _        | j                  «        y©z-Add the appropriate methods to `element_cls`.N)Ú_element_clsÚ
_prop_nameÚ_add_attr_property©r*   Úelement_clsÚ	prop_names      r   rf   z$BaseAttribute.populate_class_members†   s   € à'ˆÔØ#ˆŒà×ÑÕ!r!   c                óˆ   — t        | j                  | j                  d«      }t        | j                  | j
                  |«       y)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Úsetattrry   rz   ©r*   Ú	property_s     r   r{   z BaseAttribute._add_attr_property�   s0   € ô ˜TŸ\™\¨4¯<©<¸Ó>ˆ	ä�×!Ñ! 4§?¡?°IÕ>r!   c                ó`   — d| j                   v rt        | j                   «      S | j                   S )Nú:)rr   r   ©r*   s    r   Ú_clark_namezBaseAttribute._clark_name—   s'   € à�$—/‘/Ñ!Ü�d—o‘oÓ&Ð&Ø�‰Ðr!   c                 ó   — y r2   rY   rˆ   s    r   r�   zBaseAttribute._getter�   s   € ØBEr!   c                 ó   — y r2   rY   rˆ   s    r   r‚   zBaseAttribute._setter    s   € ð 9<r!   )rt   r%   ru   ú(Type[BaseXmlEnum] | Type[BaseSimpleType]©r}   r\   r~   r%   rP   ÚNone©rP   z'Callable[[BaseOxmlElement], Any | None])rP   z-Callable[[BaseOxmlElement, Any | None], None])rR   rS   rT   rU   rm   rf   r{   r€   r‰   r�   r‚   Ú__classcell__©rv   s   @r   ro   ro   {   sU   ø„ ñõ
(ó
"ò?ð ñó ðð
 ÚEó ØEàð<à	6ò<ó ô<r!   ro   c                  ój   ‡ — e Zd ZdZ	 d	 	 	 	 	 dˆ fd„Zed„ «       Ze	 	 dd„«       Zed	d„«       Zˆ xZ	S )
r`   a  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, but still returns the default value when
    one is specified.
    c                ó<   •— t         t        | �  ||«       || _        y r2   )rq   r`   rm   Ú_default)r*   rt   ru   Údefaultrv   s       €r   rm   zOptionalAttribute.__init__®   s   ø€ ô 	Ô Ñ/°	¸;ÔGØˆ�r!   c                óN   — | j                   j                  › d| j                  › d�S )z;String to use as `__doc__` attribute of attribute property.ú 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.©rs   rR   rr   rˆ   s    r   Ú
_docstringzOptionalAttribute._docstring·   s4   € ð × Ñ ×)Ñ)Ð*ð +Ø—/‘/Ð"ð #9ð:ð	
r!   c                ó>   ‡ — 	 	 	 	 dˆ fd„}‰ j                   |_        |S )zJFunction suitable for `__get__()` method on attribute property descriptor.c                óŒ   •— | j                  ‰j                  «      }|€‰j                  S ‰j                  j	                  |«      S r2   )Úgetr‰   r”   rs   Úfrom_xml©ÚobjÚattr_str_valuer*   s     €r   Úget_attr_valuez1OptionalAttribute._getter.<locals>.get_attr_valueÇ   s@   ø€ ð !ŸW™W T×%5Ñ%5Ó6ˆNØÐ%Ø—}‘}Ð$Ø×$Ñ$×-Ñ-¨nÓ=Ð=r!   ©rŸ   ÚBaseOxmlElementrP   ú
Any | None©r™   rU   ©r*   r¡   s   ` r   r�   zOptionalAttribute._getterÁ   s,   ø€ ð	>Ø ð	>àõ	>ð "&§¡ˆÔØÐr!   c                ó   ‡ — dˆ fd„}|S )zJFunction suitable for `__set__()` method on attribute property descriptor.c                óZ  •— |�|‰j                   k(  r0‰j                  | j                  v r| j                  ‰j                  = y ‰j                  j	                  |«      }|€0‰j                  | j                  v r| j                  ‰j                  = y | j                  ‰j                  |«       y r2   )r”   r‰   Úattribrs   Úto_xmlÚset©rŸ   rl   Ú	str_valuer*   s      €r   Úset_attr_valuez1OptionalAttribute._setter.<locals>.set_attr_valueÖ   s‘   ø€ Øˆ} ¨¯©Ò 6Ø×#Ñ# s§z¡zÑ1ØŸ
™
 4×#3Ñ#3Ð4ØØ×)Ñ)×0Ñ0°Ó7ˆIØÐ Ø×#Ñ# s§z¡zÑ1ØŸ
™
 4×#3Ñ#3Ð4ØØ�G‰G�D×$Ñ$ iÕ0r!   )rŸ   r£   rl   r¤   rY   ©r*   r®   s   ` r   r‚   zOptionalAttribute._setterÒ   s   ø€ õ
	1ð Ðr!   r2   )rt   r%   ru   rŒ   r•   z0BaseXmlEnum | BaseSimpleType | str | bool | Noner�   ©rP   z&Callable[[BaseOxmlElement, Any], None])
rR   rS   rT   rU   rm   r€   r™   r�   r‚   r�   r‘   s   @r   r`   r`   ¦   su   ø„ ñð EIð	 àð ð >ð ð Bõ	 ð ñ
ó ð
ð ðà	0òó ðð  òó ôr!   r`   c                  óD   — e Zd ZdZed„ «       Zedd„«       Zedd„«       Zy)ra   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                óN   — | j                   j                  ›d| j                  ›d�S )zaReturn the string to use as the ``__doc__`` attribute of the property for
        this attribute.r—   z`` attribute.r˜   rˆ   s    r   r™   zRequiredAttribute._docstringï   s$   € ð
 ×Ñ×&Ó&Ø�O‹Oð
ð 	
r!   c                ó6   ‡ — dˆ fd„}‰ j                   |_        |S )zDfunction object suitable for "get" side of attr property descriptor.c                ó¾   •— | j                  ‰j                  «      }|€%t        d‰j                  ›d| j                  ›�«      ‚‰j
                  j                  |«      S )Nz
required 'z#' attribute not present on element )rœ   r‰   r   rr   Útagrs   r�   rž   s     €r   r¡   z1RequiredAttribute._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�   zRequiredAttribute._getterø   s   ø€ õ	>ð "&§¡ˆÔØÐr!   c                ó   ‡ — dˆ fd„}|S )zIfunction object suitable for "set" side of attribute property descriptor.c                ó–   •— ‰j                   j                  |«      }|€t        d|› d�«      ‚| j                  ‰j                  |«       y )Nzcannot assign z to this required attribute)rs   rª   Ú
ValueErrorr«   r‰   r¬   s      €r   r®   z1RequiredAttribute._setter.<locals>.set_attr_value  sH   ø€ Ø×)Ñ)×0Ñ0°Ó7ˆIØÐ Ü  >°%°Ð8SÐ!TÓUÐUØ�G‰G�D×$Ñ$ iÕ0r!   )rŸ   r£   rl   r   rY   r¯   s   ` r   r‚   zRequiredAttribute._setter  s   ø€ õ	1ð Ðr!   N)rP   z Callable[[BaseOxmlElement], Any]r°   )rR   rS   rT   rU   r€   r™   r�   r‚   rY   r!   r   ra   ra   å   sC   „ ñð ñ
ó ð
ð òó ðð ò	ó ñ	r!   ra   c                  óÜ   ‡ — e Zd ZdZddˆ fd„Zdd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ed	„ «       Zd
„ Zdd„Zedd„«       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zˆ xZS )Ú_BaseChildElementzœBase class for the child-element classes.

    The child-element sub-classes correspond to varying cardinalities, such as ZeroOrOne
    and ZeroOrMore.
    c                óF   •— t         t        | �  «        || _        || _        y r2   )rq   rº   rm   Ú_nsptagnameÚ_successors)r*   Ú
nsptagnameÚ
successorsrv   s      €r   rm   z_BaseChildElement.__init__  s!   ø€ ÜÔ Ñ/Ô1Ø%ˆÔØ%ˆÕr!   c                ó    — || _         || _        y)zFBaseline behavior for adding the appropriate methods to `element_cls`.N)ry   rz   r|   s      r   rf   z(_BaseChildElement.populate_class_members   s   € à'ˆÔØ#ˆ�r!   c                ór   ‡ — dˆ fd„}d‰ j                   z  |_        ‰ j                  ‰ j                  |«       y)zGAdd an ``_add_x()`` method to the element class for this child element.c                óÈ   •— t        | ‰j                  «      } |«       }|j                  «       D ]  \  }}t        |||«       Œ t        | ‰j                  «      } ||«       |S r2   )ÚgetattrÚ_new_method_namere   rƒ   Ú_insert_method_name)rŸ   r8   Ú
new_methodÚchildrk   rl   Úinsert_methodr*   s          €r   Ú
_add_childz0_BaseChildElement._add_adder.<locals>._add_child(  s`   ø€ Ü   d×&;Ñ&;Ó<ˆJÙ“LˆEØ#Ÿk™k›mò +‘
��UÜ˜˜s EÕ*ð+ä# C¨×)AÑ)AÓBˆMÙ˜%Ô ØˆLr!   úSAdd a new ``<%s>`` child element unconditionally, inserted in the correct sequence.N)rŸ   r£   r8   r   )r¼   rU   Ú_add_to_classÚ_add_method_name)r*   rÉ   s   ` r   Ú
_add_adderz_BaseChildElement._add_adder%  s;   ø€ õ	ð#Ø%)×%5Ñ%5ñ6ð 	Ôð 	×Ñ˜4×0Ñ0°*Õ=r!   c                ó|   — | j                   }d| j                  z  |_        | j                  | j                  |«       y)z�Add a ``_new_{prop_name}()`` method to the element class that 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¼   rU   rË   rÄ   )r*   Úcreators     r   Ú_add_creatorz_BaseChildElement._add_creator7  s?   € ð —-‘-ˆð(Ø*.×*:Ñ*:ñ;ð 	Œð 	×Ñ˜4×0Ñ0°'Õ:r!   c                ót   — t        | j                  dd«      }t        | j                  | j                  |«       y)z]Add a read-only ``{prop_name}`` property to the element class for this child
        element.N)r€   r�   rƒ   ry   rz   r„   s     r   Ú_add_getterz_BaseChildElement._add_getterA  s,   € ô ˜TŸ\™\¨4°Ó6ˆ	ä�×!Ñ! 4§?¡?°IÕ>r!   c                ór   ‡ — dˆ fd„}d‰ j                   z  |_        ‰ j                  ‰ j                  |«       y)zJAdd an ``_insert_x()`` method to the element class for this child element.c                óB   •—  | j                   |g‰j                  ¢­Ž  |S r2   )Úinsert_element_beforer½   ©rŸ   rÇ   r*   s     €r   Ú_insert_childz6_BaseChildElement._add_inserter.<locals>._insert_childK  s#   ø€ Ø%ˆC×%Ñ% eÐ?¨d×.>Ñ.>Ó?ØˆLr!   zYReturn the passed ``<%s>`` element after inserting it as a child in the correct sequence.N)rŸ   r£   rÇ   r£   )r¼   rU   rË   rÅ   )r*   rØ   s   ` r   Ú_add_inserterz_BaseChildElement._add_inserterH  s;   ø€ õ	ð
)Ø+/×+;Ñ+;ñ<ð 	Ôð 	×Ñ˜4×3Ñ3°]ÕCr!   c                ó~   — d| j                   z  }t        | j                  dd«      }t        | j                  ||«       y)z‚Add a read-only ``{prop_name}_lst`` property to the element class to retrieve
        a list of child elements matching this type.z%s_lstN)rz   r€   Ú_list_getterrƒ   ry   )r*   r~   r…   s      r   Ú_add_list_getterz"_BaseChildElement._add_list_getterU  s8   € ð ˜tŸ™Ñ.ˆ	Ü˜T×.Ñ.°°dÓ;ˆ	Ü�×!Ñ! 9¨iÕ8r!   c                ó    — d| j                   z  S )Nz_add_%s©rz   rˆ   s    r   rÌ   z"_BaseChildElement._add_method_name\  ó   € à˜4Ÿ?™?Ñ*Ð*r!   c                ór   ‡ — dˆ fd„}d‰ j                   z  |_        ‰ j                  ‰ j                  |«       y)z<Add a public ``add_x()`` method to the parent element class.c                óB   •— t        | ‰j                  «      } |«       }|S r2   )rÃ   rÌ   )rŸ   Úprivate_add_methodrÇ   r*   s      €r   Ú	add_childz6_BaseChildElement._add_public_adder.<locals>.add_childc  s#   ø€ Ü!(¨¨d×.CÑ.CÓ!DÐÙ&Ó(ˆEØˆLr!   rÊ   N©rŸ   r£   )r¼   rU   rË   Ú_public_add_method_name)r*   rã   s   ` r   Ú_add_public_adderz#_BaseChildElement._add_public_adder`  s;   ø€ õ	ð#Ø%)×%5Ñ%5ñ6ð 	Ôð 	×Ñ˜4×7Ñ7¸ÕCr!   c                ó`   — t        | j                  |«      ryt        | j                  ||«       y)zbAdd `method` to the target class as `name`, unless `name` is already defined
        on the class.N)Úhasattrry   rƒ   )r*   ÚnameÚmethods      r   rË   z_BaseChildElement._add_to_classn  s)   € ô �4×$Ñ$ dÔ+ØÜ�×!Ñ! 4¨Õ0r!   c                ó$   ‡ ‡— ddl mŠ dˆˆ fd„}|S )zHCallable that creates an empty element of the right type, with no attrs.r   )ÚOxmlElementc                ó(   •—  ‰‰j                   «      S r2   ©r¼   )rŸ   rì   r*   s    €€r   Únew_child_elementz5_BaseChildElement._creator.<locals>.new_child_elementz  s   ø€ Ù˜t×/Ñ/Ó0Ð0r!   rä   )Údocx.oxml.parserrì   )r*   rï   rì   s   ` @r   rÏ   z_BaseChildElement._creatoru  s   ù€ õ 	1ö	1ð !Ð r!   c                ó<   ‡ — dˆ fd„}d‰ j                   z  |_        |S )zÑReturn a function object 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   •— | j                  t        ‰j                  «      «      S r2   )Úfindr   r¼   ©rŸ   r*   s    €r   Úget_child_elementz4_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¼   rU   ©r*   rõ   s   ` r   r�   z_BaseChildElement._getter  s(   ø€ õ	2ð ?À×AQÑAQÑQð 	Ô!ð !Ð r!   c                ó    — d| j                   z  S )Nz
_insert_%srÞ   rˆ   s    r   rÅ   z%_BaseChildElement._insert_method_name�  ó   € à˜dŸo™oÑ-Ð-r!   c                ó<   ‡ — dˆ fd„}d‰ j                   z  |_        |S )z[Return a function object suitable for the "get" side of a list property
        descriptor.c                óL   •— | j                  t        ‰j                  «      «      S r2   )Úfindallr   r¼   rô   s    €r   Úget_child_element_listz>_BaseChildElement._list_getter.<locals>.get_child_element_list™  s   ø€ Ø—;‘;œr $×"2Ñ"2Ó3Ó4Ð4r!   zPA list containing each of the ``<%s>`` child elements, in the order they appear.rä   rö   )r*   rý   s   ` r   rÛ   z_BaseChildElement._list_getter”  s+   ø€ õ
	5ð Ø"&×"2Ñ"2ñ3ð 	Ô&ð &Ð%r!   c                ó    — d| j                   z  S )a
  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   rå   z)_BaseChildElement._public_add_method_name¢  s   € ð ˜$Ÿ/™/Ñ)Ð)r!   c                ó    — d| j                   z  S ©Nz
_remove_%srÞ   rˆ   s    r   Ú_remove_method_namez%_BaseChildElement._remove_method_name¬  rù   r!   c                ó    — d| j                   z  S )Nz_new_%srÞ   rˆ   s    r   rÄ   z"_BaseChildElement._new_method_name°  rß   r!   ©rY   )r¾   r%   r¿   úTuple[str, ...]r�   )ré   r%   rê   zCallable[..., Any])rP   z,Callable[[BaseOxmlElement], BaseOxmlElement])rR   rS   rT   rU   rm   rf   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ð ñ+ó ð+òDó1ð ò!ó ð!ð ñ!ó ð!ð  ñ.ó ð.ð ñ&ó ð&ð ñ*ó ð*ð ñ.ó ð.ð ñ+ó ô+r!   rº   c                  ón   — e Zd ZdZed„ «       Z	 	 	 	 	 	 	 	 d	d„Zd„ Zed„ «       Ze	d„ «       Z
e	d„ «       Zy)
ÚChoicezZDefines a child element belonging to a group, only one of which may appear as a
    child.c                ó   — | j                   S r2   rî   rˆ   s    r   r¾   zChoice.nsptagname¹  s   € à×ÑÐr!   c                óÎ   — || _         || _        || _        | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        yrx   )ry   Ú_group_prop_namer½   rÓ   rÑ   rÙ   rÍ   Ú_add_get_or_change_to_method)r*   r}   Úgroup_prop_namer¿   s       r   rf   zChoice.populate_class_members½  sV   € ð (ˆÔØ /ˆÔØ%ˆÔà×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×)Ñ)Õ+r!   c                ór   ‡ — dˆ fd„}d‰ j                   z  |_        ‰ j                  ‰ j                  |«       y)zZAdd a ``get_or_change_to_x()`` method to the element class for this child
        element.c                ó°   •— t        | ‰j                  «      }|�|S t        | ‰j                  «      } |«        t        | ‰j                  «      } |«       }|S r2   )rÃ   rz   Ú_remove_group_method_namerÌ   )rŸ   rÇ   Úremove_group_methodÚ
add_methodr*   s       €r   Úget_or_change_to_childzCChoice._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¼   rU   rË   Ú_get_or_change_to_method_name)r*   r  s   ` r   r
  z#Choice._add_get_or_change_to_methodÎ  s;   ø€ õ	ð XØ×Ññ*ÐÔ&ð 	×Ñ˜4×=Ñ=Ð?UÕVr!   c                ó|   — d| j                   v r| j                   j                  d«      dz   nd}| j                   |d S )zDProperty name computed from tag name, e.g. a:schemeClr -> schemeClr.r‡   rG   r   N)r¼   Úindex)r*   Ústarts     r   rz   zChoice._prop_nameá  sB   € ð 47¸$×:JÑ:JÑ3J�× Ñ ×&Ñ& sÓ+¨aÒ/ÐPQˆØ×Ñ  Ð'Ð'r!   c                ó    — d| j                   z  S )Nzget_or_change_to_%srÞ   rˆ   s    r   r  z$Choice._get_or_change_to_method_nameç  s   € à$ t§¡Ñ6Ð6r!   c                ó    — d| j                   z  S r   )r	  rˆ   s    r   r  z Choice._remove_group_method_nameë  s   € à˜d×3Ñ3Ñ3Ð3r!   N)r}   r\   r  r%   r¿   r  rP   rŽ   )rR   rS   rT   rU   r€   r¾   rf   r
  rz   r   r  r  rY   r!   r   r  r  µ  sˆ   „ ñð ñ ó ð ð,à$ð,ð ð,ð $ð	,ð
 
ó,ò"Wð& ñ(ó ð(ð
 ñ7ó ð7ð ñ4ó ñ4r!   r  c                  ó@   ‡ — e Zd ZdZdˆ fd„Zdˆ fd„Zed„ «       Zˆ xZS )r^   z5Defines a required child element for MetaOxmlElement.c                ó.   •— t         t        | �  |d«       y )NrY   )rq   r^   rm   )r*   r¾   rv   s     €r   rm   zOneAndOnlyOne.__init__ó  s   ø€ ÜŒm˜TÑ+¨J¸Õ;r!   c                óN   •— t         t        | �  ||«       | j                  «        yrx   )rq   r^   rf   rÓ   ©r*   r}   r~   rv   s      €r   rf   z$OneAndOnlyOne.populate_class_membersö  s    ø€ äŒm˜TÑ9¸+ÀyÔQØ×ÑÕr!   c                ó<   ‡ — dˆ fd„}d‰ j                   z  |_        |S )úXReturn a function object suitable for the "get" side of the property
        descriptor.c                ó„   •— | j                  t        ‰j                  «      «      }|€t        d‰j                  z  «      ‚|S )Nz+required ``<%s>`` child element not present)ró   r   r¼   r   r×   s     €r   rõ   z0OneAndOnlyOne._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÷   s   ` r   r�   zOneAndOnlyOne._getterû  s%   ø€ õ
	ð %GÈ×IYÑIYÑ$YÐÔ!Ø Ð r!   )r¾   r%   r�   )	rR   rS   rT   rU   rm   rf   r€   r�   r�   r‘   s   @r   r^   r^   ð  s$   ø„ Ù?õ<õð
 ñ!ó ô!r!   r^   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )r_   zYDefines a repeating child element for MetaOxmlElement that must appear at least
    once.c                óæ   •— t         t        | �  ||«       | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        t        ||«       yrx   )	rq   r_   rf   rÜ   rÑ   rÙ   rÍ   ræ   Údelattrr  s      €r   rf   z OneOrMore.populate_class_members  sX   ø€ äŒi˜Ñ5°kÀ9ÔMØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×ÑÔ Ü�˜YÕ'r!   r�   ©rR   rS   rT   rU   rf   r�   r‘   s   @r   r_   r_     s   ø„ ñ÷(ñ (r!   r_   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )rb   z@Defines an optional repeating child element for MetaOxmlElement.c                óæ   •— t         t        | �  ||«       | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        t        ||«       yrx   )	rq   rb   rf   rÜ   rÑ   rÙ   rÍ   ræ   r!  r  s      €r   rf   z!ZeroOrMore.populate_class_members  sX   ø€ äŒj˜$Ñ6°{ÀIÔNØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×ÑÔ Ü�˜YÕ'r!   r�   r"  r‘   s   @r   rb   rb     s   ø„ ÙJ÷(ñ (r!   rb   c                  ó@   ‡ — e Zd ZdZdˆ fd„Zd„ Zd„ Zed„ «       Zˆ xZ	S )rc   z6Defines an optional child element for MetaOxmlElement.c                óî   •— t         t        | �  ||«       | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        | j                  «        yrx   )	rq   rc   rf   rÓ   rÑ   rÙ   rÍ   Ú_add_get_or_adderÚ_add_removerr  s      €r   rf   z ZeroOrOne.populate_class_members,  sZ   ø€ äŒi˜Ñ5°kÀ9ÔMØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×ÑÔ Ø×ÑÕr!   c                ór   ‡ — dˆ fd„}d‰ j                   z  |_        ‰ j                  ‰ j                  |«       y)zTAdd a ``get_or_add_x()`` method to the element class for this child
        element.c                ór   •— t        | ‰j                  «      }|€t        | ‰j                  «      } |«       }|S r2   )rÃ   rz   rÌ   )rŸ   rÇ   r  r*   s      €r   Úget_or_add_childz5ZeroOrOne._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.Nrä   )r¼   rU   rË   Ú_get_or_add_method_name)r*   r+  s   ` r   r'  zZeroOrOne._add_get_or_adder6  s;   ø€ õ	ð MØ×Ññ$ÐÔ ð 	×Ñ˜4×7Ñ7Ð9IÕJr!   c                ór   ‡ — dˆ fd„}d‰ j                   z  |_        ‰ j                  ‰ j                  |«       y)zIAdd a ``_remove_x()`` method to the element class for this child element.c                ó<   •— | j                  ‰j                  «       y r2   )Ú
remove_allr¼   rô   s    €r   Ú_remove_childz-ZeroOrOne._add_remover.<locals>._remove_childI  s   ø€ Ø�N‰N˜4×+Ñ+Õ,r!   z#Remove all ``<%s>`` child elements.Nrä   )r¼   rU   rË   r  )r*   r0  s   ` r   r(  zZeroOrOne._add_removerF  s4   ø€ õ	-ð "GÈ$×JZÑJZÑ ZˆÔØ×Ñ˜4×3Ñ3°]ÕCr!   c                ó    — d| j                   z  S )Nzget_or_add_%srÞ   rˆ   s    r   r,  z!ZeroOrOne._get_or_add_method_nameO  s   € à §¡Ñ0Ð0r!   r�   )
rR   rS   rT   rU   rf   r'  r(  r   r,  r�   r‘   s   @r   rc   rc   )  s+   ø„ Ù@õòKò Dð ñ1ó ô1r!   rc   c                  ój   ‡ — e Zd ZdZd	d
d„Zdˆ fd„Zd„ Zd„ Zed„ «       Z	e
d„ «       Ze
d„ «       Zˆ xZS )rd   zeCorrespondes to an ``EG_*`` element group where at most one of its members may
    appear as a child.c                ó    — || _         || _        y r2   )Ú_choicesr½   )r*   Úchoicesr¿   s      r   rm   zZeroOrOneChoice.__init__X  s   € ØˆŒØ%ˆÕr!   c                óÞ   •— t         t        | �  ||«       | j                  «        | j                  D ])  }|j                  || j
                  | j                  «       Œ+ | j                  «        yrx   )rq   rd   rf   Ú_add_choice_getterr4  rz   r½   Ú_add_group_remover)r*   r}   r~   Úchoicerv   s       €r   rf   z&ZeroOrOneChoice.populate_class_members\  s]   ø€ äŒo˜tÑ;¸KÈÔSØ×ÑÔ!Ø—m‘mò 	ZˆFØ×)Ñ)¨+°t·±È×HXÑHXÕYð	Zà×ÑÕ!r!   c                ót   — t        | j                  dd«      }t        | j                  | j                  |«       y)z“Add a read-only ``{prop_name}`` property to the element class that returns
        the present member of this group, or |None| if none are present.N)r€   Ú_choice_getterrƒ   ry   rz   r„   s     r   r7  z"ZeroOrOneChoice._add_choice_getterd  s.   € ô ˜T×0Ñ0°$¸Ó=ˆ	ä�×!Ñ! 4§?¡?°IÕ>r!   c                óX   ‡ — dˆ fd„}d|_         ‰ j                  ‰ j                  |«       y)zSAdd a ``_remove_eg_x()`` method to the element class for this choice
        group.c                óJ   •— ‰j                   D ]  }| j                  |«       Œ y r2   )Ú_member_nsptagnamesr/  )rŸ   Útagnamer*   s     €r   Ú_remove_choice_groupz@ZeroOrOneChoice._add_group_remover.<locals>._remove_choice_groupo  s$   ø€ Ø×3Ñ3ò (�Ø—‘˜wÕ'ñ(r!   z9Remove the current choice group child element if present.Nrä   )rU   rË   Ú _remove_choice_group_method_name)r*   r@  s   ` r   r8  z"ZeroOrOneChoice._add_group_removerk  s+   ø€ õ	(ð (cÐÔ$Ø×Ñ˜4×@Ñ@ÐBVÕWr!   c                ó"   ‡ — dˆ fd„}d|_         |S )r  c                ó6   •—  | j                   ‰j                  Ž S r2   )Úfirst_child_found_inr>  rô   s    €r   Úget_group_member_elementz@ZeroOrOneChoice._choice_getter.<locals>.get_group_member_element{  s   ø€ Ø+�3×+Ñ+¨T×-EÑ-EÐFÐFr!   zbReturn the child element belonging to this element group, or |None| if no member child is present.rä   )rU   )r*   rE  s   ` r   r;  zZeroOrOneChoice._choice_getterv  s   ø€ õ
	Gð4ð 	!Ô(ð (Ð'r!   c                óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w )zjSequence of namespace-prefixed tagnames, one for each of the member elements
        of this choice group.)r4  r¾   )r*   r9  s     r   r>  z#ZeroOrOneChoice._member_nsptagnames„  s"   € ð 15·±Ö> f�×!Ó!Ò>Ð>ùÒ>s   �%c                ó    — d| j                   z  S r   rÞ   rˆ   s    r   rA  z0ZeroOrOneChoice._remove_choice_group_method_nameŠ  rù   r!   r  )r5  zSequence[Choice]r¿   r  r�   )rR   rS   rT   rU   rm   rf   r7  r8  r€   r;  r   r>  rA  r�   r‘   s   @r   rd   rd   T  sY   ø„ ñô&õ"ò?ò	Xð ñ(ó ð(ð ñ?ó ð?ð
 ñ.ó ô.r!   rd   c                  óf   ‡ — e Zd ZdZd„ Zd	d„Zd
d„Zdd„Zedd„«       Z	dˆ fd„Z
edd„«       Zˆ xZS )r£   zvEffective base class for all custom element classes.

    Adds standardized behavior to all classes in one place.
    c                ó`   — d| j                   j                  | j                  t        | «      fz  S )Nz<%s '<%s>' at 0x%0x>)rv   rR   Ú_nsptagÚidrˆ   s    r   Ú__repr__zBaseOxmlElement.__repr__–  s/   € Ø%Ø�N‰N×#Ñ#Ø�L‰LÜˆt‹Hð)
ñ 
ð 	
r!   c                óR   — |D ]"  }| j                  t        |«      «      }|€Œ |c S  y)z9First child with tag in `tagnames`, or None if not found.N)ró   r   )r*   Útagnamesr?  rÇ   s       r   rD  z$BaseOxmlElement.first_child_found_in�  s3   € àò 	ˆGØ—I‘Iœb ›kÓ*ˆEØÑ Ø’ð	ð r!   c                óp   —  | j                   |Ž }|�|j                  |«       |S | j                  |«       |S r2   )rD  ÚaddpreviousÚappend)r*   ÚelmrN  Ú	successors       r   rÖ   z%BaseOxmlElement.insert_element_before¥  sB   € Ø-�D×-Ñ-¨xÐ8ˆ	ØÐ Ø×!Ñ! #Ô&ð ˆ
ð �K‰K˜ÔØˆ
r!   c                óv   — |D ]4  }| j                  t        |«      «      }|D ]  }| j                  |«       Œ Œ6 y)z>Remove child elements with tagname (e.g. "a:p") in `tagnames`.N)rü   r   Úremove)r*   rN  r?  ÚmatchingrÇ   s        r   r/  zBaseOxmlElement.remove_all­  s>   € àò 	#ˆGØ—|‘|¤B w£KÓ0ˆHØ!ò #�Ø—‘˜EÕ"ñ#ñ	#r!   c                ó   — t        | «      S )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   zBaseOxmlElement.xml´  s   € ô % TÓ*Ð*r!   c                ó.   •— t         ‰| �  |t        ¬«      S )z�Override of `lxml` _Element.xpath() method.

        Provides standard Open XML namespace mapping (`nsmap`) in centralized location.
        )Ú
namespaces)rq   Úxpathr   )r*   Ú	xpath_strrv   s     €r   rZ  zBaseOxmlElement.xpath¼  s   ø€ ô
 ‰w‰}˜Y´5ˆ}Ó9Ð9r!   c                ó@   — t        j                  | j                  «      S r2   )r   Úfrom_clark_namerµ   rˆ   s    r   rJ  zBaseOxmlElement._nsptagÃ  s   € ä#×3Ñ3°D·H±HÓ=Ð=r!   )rN  r%   rP   z_Element | None)rR  r   rN  r%   )rN  r%   rP   rŽ   )rP   r%   )r[  r%   rP   r   )rR   rS   rT   rU   rL  rD  rÖ   r/  r€   r   rZ  rJ  r�   r‘   s   @r   r£   r£   �  sI   ø„ ñò

óóó#ð ò+ó ð+õ:ð ò>ó ô>r!   r£   )Ú	metaclass)r   r   )0rU   Ú
__future__r   rV   Útypingr   r   r   r   r   r	   r
   r   r   Úlxmlr   Ú
lxml.etreer   r   Údocx.oxml.exceptionsr   Údocx.oxml.nsr   r   r   Údocx.sharedr   Údocx.enum.baser   Údocx.oxml.simpletypesr   r    r%   r   rZ   Útyper\   ro   r`   ra   rº   r  r^   r_   rb   rc   rd   r£   rY   r!   r   ú<module>ri     sý   ðñ Få "ã 	÷
÷ 
õ 
õ ß ,å 0ß 8Ñ 8Ý $áÝ*Ý4óô:)�ô :)ñz ˆTƒ]€ô7�dô 7÷$(<ñ (<ôV<˜ô <ô~,˜ô ,÷^^+ñ ^+ôB84Ðô 84ôv!Ð%ô !ô8(Ð!ô (ô(Ð"ô (ô(1Ð!ô (1ôV8.Ð'ô 8.ôx5>�e×'Ñ'°?ö 5>r!   