Ë
    \Rðirc  ã                  óê  — 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
 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ÚSequenceÚ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     úM/var/www/html/Extract/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__+   sp   € Ü˜%¤Ô%ØØ—‘Ó!ˆØ×&Ñ&Ó(ˆÜˆu‹:œ˜[Ó)Ò)ØÜ # E¨;Ó 7ò 	ÑˆD�*Ø×$Ñ$ T¨:Õ6Ùð	ð r   c                ó&   — | j                  |«       S ©N)r-   )r'   r(   s     r   Ú__ne__zXmlString.__ne__7   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_seq:   s%   € ð
 —‘“ˆØ—;‘;“=ˆÜ�hÓÐr   c                óÄ   — | j                  |«      \  }}}}| j                  |«      \  }}}	}
||k7  ry| j                  |«      | j                  |«      k7  ry||	k7  ry||
k(  S )zZReturn True if the element in `line_2` is XML equivalent to the element in
        `line`.F)Ú_parse_liner7   )r'   r+   Úline_2Úfrontr5   ÚcloseÚtextÚfront_2Úattrs_2Úclose_2Útext_2s              r   r&   zXmlString._eq_elm_strsC   ss   € ð %)×$4Ñ$4°TÓ$:Ñ!ˆˆu�e˜TØ,0×,<Ñ,<¸VÓ,DÑ)ˆ�˜' 6Ø�GÒØØ�>‰>˜%Ó  D§N¡N°7Ó$;Ò;ØØ�GÒØØ�v‰~Ð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`.)Ú rC   rC   rC   é   é   )Ú_xml_elm_line_pattÚmatchÚrangeÚgroup)Úclsr+   rG   Únr;   r5   r<   r=   s           r   r9   zXmlString._parse_lineP   s^   € ð ×&Ñ&×,Ñ,¨TÓ2ˆØˆ=Ø!Ü=BÀ1Àa»[Ö$I¸ U§[¡[°¥^Ò$IÑ!ˆˆu�e˜TØ�e˜U DÐ(Ð(ùò %Js   ­AN)r(   ÚobjectÚreturnÚbool)r5   r"   rM   z	list[str])r+   r"   r:   r"   )r+   r"   rM   ztuple[str, str, str, str])Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompilerF   r-   r0   r7   r&   Úclassmethodr9   © 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 r/   )
ÚOneAndOnlyOneÚ	OneOrMoreÚOptionalAttributeÚRequiredAttributeÚ
ZeroOrMoreÚ	ZeroOrOneÚZeroOrOneChoiceÚitemsr!   Úpopulate_class_members)rJ   ÚclsnameÚbasesÚ	namespaceÚdispatchableÚkeyÚvalues          r   Ú__init__zMetaOxmlElement.__init__`   sT   € äÜÜÜÜÜÜð
ˆð $Ÿ/™/Ó+ò 	7‰JˆC�Ü˜% Õ.Ø×,Ñ,¨S°#Õ6ñ	7r   N)rd   r"   re   ztuple[type, ...]rf   zdict[str, Any])rO   rP   rQ   rR   rj   rV   r   r   rY   rY   ]   s
   „ Ù(ô7r   rY   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 r/   )Úsuperrl   rj   Ú
_attr_nameÚ_simple_type)r'   Ú	attr_nameÚsimple_typeÚ	__class__s      €r   rj   zBaseAttribute.__init__u   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   rc   z$BaseAttribute.populate_class_membersz   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Úsetattrrv   rw   ©r'   Ú	property_s     r   rx   z BaseAttribute._add_attr_property�   s0   € ô ˜TŸ\™\¨4¯<©<¸Ó>ˆ	ä�×!Ñ! 4§?¡?°IÕ>r   c                ó`   — d| j                   v rt        | j                   «      S | j                   S )Nú:)ro   r   ©r'   s    r   Ú_clark_namezBaseAttribute._clark_name‹   s'   € à�$—/‘/Ñ!Ü�d—o‘oÓ&Ð&Ø�‰Ðr   c                 ó   — y r/   rV   r…   s    r   r~   zBaseAttribute._getter‘   s   € ØBEr   c                 ó   — y r/   rV   r…   s    r   r   zBaseAttribute._setter”   s   € ð 9<r   )rq   r"   rr   ú(Type[BaseXmlEnum] | Type[BaseSimpleType]©rz   rY   r{   r"   rM   ÚNone©rM   z'Callable[[BaseOxmlElement], Any | None])rM   z-Callable[[BaseOxmlElement, Any | None], None])rO   rP   rQ   rR   rj   rc   rx   r}   r†   r~   r   Ú__classcell__©rs   s   @r   rl   rl   o   sU   ø„ ñõ
(ó
"ò?ð ñó ðð
 ÚEó ØEàð<à	6ò<ó ô<r   rl   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 r/   )rn   r]   rj   Ú_default)r'   rq   rr   Údefaultrs   s       €r   rj   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.©rp   rO   ro   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 r/   )Úgetr†   r‘   rp   Ú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œ   ÚBaseOxmlElementrM   ú
Any | None©r–   rR   ©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 r/   )r‘   r†   Úattribrp   Úto_xmlÚset©rœ   ri   Ú	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    ri   r¡   rV   ©r'   r«   s   ` r   r   zOptionalAttribute._setterÆ   s   ø€ õ
	1ð Ðr   r/   )rq   r"   rr   r‰   r’   z0BaseXmlEnum | BaseSimpleType | str | bool | NonerŒ   ©rM   z&Callable[[BaseOxmlElement, Any], None])
rO   rP   rQ   rR   rj   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)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                ó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   ro   Útagrp   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)rp   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    ri   r   rV   r¬   s   ` r   r   zRequiredAttribute._setterû   s   ø€ õ	1ð Ðr   N)rM   z Callable[[BaseOxmlElement], Any]r­   )rO   rP   rQ   rR   r}   r–   r~   r   rV   r   r   r^   r^   Ù   sC   „ ñð ñ
ó ð
ð òó ðð ò	ó ñ	r   r^   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 r/   )rn   r·   rj   Ú_nsptagnameÚ_successors)r'   Ú
nsptagnameÚ
successorsrs   s      €r   rj   z_BaseChildElement.__init__  s!   ø€ ÜÔ Ñ/Ô1Ø%ˆÔØ%ˆÕr   c                ó    — || _         || _        y)zFBaseline behavior for adding the appropriate methods to `element_cls`.N)rv   rw   ry   s      r   rc   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 r/   )ÚgetattrÚ_new_method_namerb   r€   Ú_insert_method_name)rœ   r5   Ú
new_methodÚchildrh   ri   Ú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    r5   r   )r¹   rR   Ú_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¹   rR   rÈ   rÁ   )r'   Úcreators     r   Ú_add_creatorz_BaseChildElement._add_creator+  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€   rv   rw   r�   s     r   Ú_add_getterz_BaseChildElement._add_getter5  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 r/   )Úinsert_element_beforerº   ©rœ   rÄ   r'   s     €r   Ú_insert_childz6_BaseChildElement._add_inserter.<locals>._insert_child?  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¹   rR   rÈ   rÂ   )r'   rÕ   s   ` r   Ú_add_inserterz_BaseChildElement._add_inserter<  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)rw   r}   Ú_list_getterr€   rv   )r'   r{   r‚   s      r   Ú_add_list_getterz"_BaseChildElement._add_list_getterI  s8   € ð ˜tŸ™Ñ.ˆ	Ü˜T×.Ñ.°°dÓ;ˆ	Ü�×!Ñ! 9¨iÕ8r   c                ó    — d| j                   z  S )Nz_add_%s©rw   r…   s    r   rÉ   z"_BaseChildElement._add_method_nameP  ó   € à˜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 r/   )rÀ   rÉ   )rœ   Úprivate_add_methodrÄ   r'   s      €r   Ú	add_childz6_BaseChildElement._add_public_adder.<locals>.add_childW  s#   ø€ Ü!(¨¨d×.CÑ.CÓ!DÐÙ&Ó(ˆEØˆLr   rÇ   N©rœ   r    )r¹   rR   rÈ   Ú_public_add_method_name)r'   rà   s   ` r   Ú_add_public_adderz#_BaseChildElement._add_public_adderT  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)Úhasattrrv   r€   )r'   ÚnameÚmethods      r   rÈ   z_BaseChildElement._add_to_classb  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 r/   ©r¹   )rœ   ré   r'   s    €€r   Únew_child_elementz5_BaseChildElement._creator.<locals>.new_child_elementn  s   ø€ Ù˜t×/Ñ/Ó0Ð0r   rá   )Údocx.oxml.parserré   )r'   rì   ré   s   ` @r   rÌ   z_BaseChildElement._creatori  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 r/   )Ú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¹   rR   ©r'   rò   s   ` r   r~   z_BaseChildElement._getters  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 r/   )Ú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   ©rV   )r»   r"   r¼   útuple[str, ...]rŠ   )ræ   r"   rç   zCallable[..., Any])rM   z,Callable[[BaseOxmlElement], BaseOxmlElement])rO   rP   rQ   rR   rj   rc   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)
ÚChoicezVDefines a child element belonging to a group, only one of which may appear as a child.c                ó   — | j                   S r/   rë   r…   s    r   r»   zChoice.nsptagname¬  s   € à×ÑÐr   c                óÎ   — || _         || _        || _        | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        yru   )rv   Ú_group_prop_namerº   rÐ   rÎ   rÖ   rÊ   Ú_add_get_or_change_to_method)r'   rz   Úgroup_prop_namer¼   s       r   rc   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 r/   )rÀ   rw   Ú_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¹   rR   rÈ   Ú_get_or_change_to_method_name)r'   r  s   ` r   r  z#Choice._add_get_or_change_to_methodÁ  s;   ø€ õ	ð UØ×Ññ*ÐÔ&ð 	×Ñ˜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„   rD   r   N)r¹   Úindex)r'   Ústarts     r   rw   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)rz   rY   r  r"   r¼   r  rM   r‹   )rO   rP   rQ   rR   r}   r»   rc   r  rw   r   r  r  rV   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 )NrV   )rn   r[   rj   )r'   r»   rs   s     €r   rj   zOneAndOnlyOne.__init__æ  s   ø€ ÜŒm˜TÑ+¨J¸Õ;r   c                óN   •— t         t        | �  ||«       | j                  «        yru   )rn   r[   rc   rÐ   ©r'   rz   r{   rs   s      €r   rc   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Š   )	rO   rP   rQ   rR   rj   rc   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ru   )	rn   r\   rc   rÙ   rÎ   rÖ   rÊ   rã   Údelattrr  s      €r   rc   z OneOrMore.populate_class_members  sX   ø€ äŒi˜Ñ5°kÀ9ÔMØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×ÑÔ Ü�˜YÕ'r   rŠ   ©rO   rP   rQ   rR   rc   r�   rŽ   s   @r   r\   r\   ÿ  s   ø„ ñ÷(ñ (r   r\   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )r_   z@Defines an optional repeating child element for MetaOxmlElement.c                óæ   •— t         t        | �  ||«       | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        t        ||«       yru   )	rn   r_   rc   rÙ   rÎ   rÖ   rÊ   rã   r  r  s      €r   rc   z!ZeroOrMore.populate_class_members  sX   ø€ äŒj˜$Ñ6°{ÀIÔNØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×ÑÔ Ü�˜YÕ'r   rŠ   r  rŽ   s   @r   r_   r_     s   ø„ ÙJ÷(ñ (r   r_   c                  ó@   ‡ — e Zd ZdZdˆ fd„Zd„ Zd„ Zed„ «       Zˆ xZ	S )r`   z6Defines an optional child element for MetaOxmlElement.c                óî   •— t         t        | �  ||«       | j                  «        | j	                  «        | j                  «        | j                  «        | j                  «        | j                  «        yru   )	rn   r`   rc   rÐ   rÎ   rÖ   rÊ   Ú_add_get_or_adderÚ_add_removerr  s      €r   rc   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 r/   )rÀ   rw   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¹   rR   rÈ   Ú_get_or_add_method_name)r'   r(  s   ` r   r$  zZeroOrOne._add_get_or_adder)  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 r/   )Ú
remove_allr¹   rñ   s    €r   Ú_remove_childz-ZeroOrOne._add_remover.<locals>._remove_child<  s   ø€ Ø�N‰N˜4×+Ñ+Õ,r   z#Remove all ``<%s>`` child elements.Nrá   )r¹   rR   rÈ   rþ   )r'   r-  s   ` r   r%  zZeroOrOne._add_remover9  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_nameB  s   € à §¡Ñ0Ð0r   rŠ   )
rO   rP   rQ   rR   rc   r$  r%  r   r)  r�   rŽ   s   @r   r`   r`     s+   ø„ Ù@õòKò Dð ñ1ó ô1r   r`   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 )ra   zeCorrespondes to an ``EG_*`` element group where at most one of its members may
    appear as a child.c                ó    — || _         || _        y r/   )Ú_choicesrº   )r'   Úchoicesr¼   s      r   rj   zZeroOrOneChoice.__init__K  s   € ØˆŒØ%ˆÕr   c                óÞ   •— t         t        | �  ||«       | j                  «        | j                  D ])  }|j                  || j
                  | j                  «       Œ+ | j                  «        yru   )rn   ra   rc   Ú_add_choice_getterr1  rw   rº   Ú_add_group_remover)r'   rz   r{   Úchoicers   s       €r   rc   z&ZeroOrOneChoice.populate_class_membersO  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€   rv   rw   r�   s     r   r4  z"ZeroOrOneChoice._add_choice_getterW  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 r/   )Ú_member_nsptagnamesr,  )rœ   Útagnamer'   s     €r   Ú_remove_choice_groupz@ZeroOrOneChoice._add_group_remover.<locals>._remove_choice_groupb  s$   ø€ Ø×3Ñ3ò (�Ø—‘˜wÕ'ñ(r   z9Remove the current choice group child element if present.Nrá   )rR   rÈ   Ú _remove_choice_group_method_name)r'   r=  s   ` r   r5  z"ZeroOrOneChoice._add_group_remover^  s+   ø€ õ	(ð (cÐÔ$Ø×Ñ˜4×@Ñ@ÐBVÕWr   c                ó"   ‡ — dˆ fd„}d|_         |S )r  c                ó6   •—  | j                   ‰j                  Ž S r/   )Úfirst_child_found_inr;  rñ   s    €r   Úget_group_member_elementz@ZeroOrOneChoice._choice_getter.<locals>.get_group_member_elementn  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á   )rR   )r'   rB  s   ` r   r8  zZeroOrOneChoice._choice_getteri  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.)r1  r»   )r'   r6  s     r   r;  z#ZeroOrOneChoice._member_nsptagnamesw  s"   € ð 15·±Ö> f�×!Ó!Ò>Ð>ùÒ>s   �%c                ó    — d| j                   z  S rý   rÛ   r…   s    r   r>  z0ZeroOrOneChoice._remove_choice_group_method_name}  rö   r   r   )r2  zSequence[Choice]r¼   r  rŠ   )rO   rP   rQ   rR   rj   rc   r4  r5  r}   r8  r   r;  r>  r�   rŽ   s   @r   ra   ra   G  sY   ø„ ñô&õ"ò?ò	Xð ñ(ó ð(ð ñ?ó ð?ð
 ñ.ó ô.r   ra   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>)rs   rO   Ú_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   rA  z$BaseOxmlElement.first_child_found_in�  s3   € àò 	ˆGØ—I‘Iœb ›kÓ*ˆEØÑ Ø’ð	ð r   c                óp   —  | j                   |Ž }|�|j                  |«       |S | j                  |«       |S r/   )rA  ÚaddpreviousÚappend)r'   ÚelmrK  Ú	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'   rK  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)rn   Úxpathr   )r'   Ú	xpath_strrs   s     €r   rW  zBaseOxmlElement.xpath¯  s   ø€ ô
 ‰w‰}˜Y´5ˆ}Ó9Ð9r   c                ó@   — t        j                  | j                  «      S r/   )r   Úfrom_clark_namer²   r…   s    r   rG  zBaseOxmlElement._nsptag¶  s   € ä#×3Ñ3°D·H±HÓ=Ð=r   )rK  r"   rM   z_Element | None)rO  r   rK  r"   )rK  r"   rM   r‹   )rM   r"   )rX  r"   rM   r   )rO   rP   rQ   rR   rI  rA  rÓ   r,  r}   r   rW  rG  r�   rŽ   s   @r   r    r    ƒ  sI   ø„ ñò

óóó#ð ò+ó ð+õ:ð ò>ó ô>r   r    )Ú	metaclass)r   r   )-rR   Ú
__future__r   rS   Útypingr   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   rW   ÚtyperY   rl   r]   r^   r·   r  r[   r\   r_   r`   ra   r    rV   r   r   ú<module>rf     sò   ðñ Få "ã 	ß H× Hå ß ,å 0ß 8Ñ 8Ý $áÝ*Ý4óô8)�ô 8)ñv ˆTƒ]€ô7�dô 7÷$(<ñ (<ôV<˜ô <ô~,˜ô ,÷^^+ñ ^+ôB74Ðô 74ôt!Ð%ô !ô8(Ð!ô (ô(Ð"ô (ô(1Ð!ô (1ôV8.Ð'ô 8.ôx5>�e×'Ñ'°?ö 5>r   