ó
    ‰*£hrc  ã                  óð  • 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
  SSKJr  SSKJrJr  SSKJr  SSKJrJrJr  SS	KJr  \(       a  SS
KJr  SSKJr  S)S jr " S S\5      r\
" 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)*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                óD   • [         R                  " U SSS9n[        U5      $ )zSSerialize `element` to human-readable XML suitable for tests.

No XML declaration.
ÚunicodeT)ÚencodingÚpretty_print)r
   ÚtostringÚ	XmlString)ÚelementÚxmls     ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docx/oxml/xmlchemy.pyÚserialize_for_readingr      s    € ô
 �.Š.˜¨9À4Ñ
H€CÜ�S‹>Ðó    c                  óx   • \ 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5       rS	rg
)r   é   zYProvides string comparison override suitable for serialized XML that is 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)Ú
isinstanceÚstrÚ
splitlinesÚlenÚzipÚ_eq_elm_strs)ÚselfÚotherÚlinesÚlines_otherÚlineÚ
line_others         r   Ú__eq__ÚXmlString.__eq__+   sk   € Ü˜%¤×%Ñ%ØØ—‘Ó!ˆØ×&Ñ&Ó(ˆÜˆu‹:œ˜[Ó)Ó)ØÜ # EÖ 7ÑˆDØ×$Ñ$ T×6Ó6Ùñ !8ð r   c                ó.   • U R                  U5      (       + $ ©N)r.   )r(   r)   s     r   Ú__ne__ÚXmlString.__ne__7   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)r(   ÚattrsÚattr_lsts      r   Ú	_attr_seqÚXmlString._attr_seq:   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:H  $ )zRReturn True if the element in `line_2` is XML equivalent to the element in
`line`.F)Ú_parse_liner:   )r(   r,   Úline_2Úfrontr8   ÚcloseÚtextÚfront_2Úattrs_2Úclose_2Útext_2s              r   r'   ÚXmlString._eq_elm_strsC   se   € ð %)×$4Ñ$4°TÓ$:Ñ!ˆ�eØ,0×,<Ñ,<¸VÓ,DÑ)ˆ˜'ØÓØØ�>‰>˜%Ó  D§N¡N°7Ó$;Ó;ØØÓØØ‰~Ðr   c                ó®   • U R                   R                  U5      nUc  g[        SS5       Vs/ s H  o2R                  U5      PM     snu  pEpgXEXg4$ s  snf )zI(front, attrs, close, text) 4-tuple result of parsing XML element `line`.)Ú rH   rH   rH   é   é   )Ú_xml_elm_line_pattÚmatchÚrangeÚgroup)Úclsr,   rL   Únr?   r8   r@   rA   s           r   r=   ÚXmlString._parse_lineP   sX   € ð ×&Ñ&×,Ñ,¨TÓ2ˆØ‰=Ø!Ü=BÀ1Àa¼[Ó$Iº[¸§[¡[°¦^¹[Ñ$IÑ!ˆ�eØ˜UÐ(Ð(ùò %Js   ®A© N)r)   ÚobjectÚreturnÚbool)r8   r#   rT   z	list[str])r,   r#   r>   r#   )r,   r#   rT   ztuple[str, str, str, str])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚreÚcompilerK   r.   r2   r:   r'   Úclassmethodr=   Ú__static_attributes__rR   r   r   r   r      sA   † ñð ŸšÐ$PÓQÐô
ô&ô ôð ó)ó ó)r   r   Ú_Tc                  ó"   • \ rS rSrSrSS jrSrg)ÚMetaOxmlElementé]   zMetaclass for BaseOxmlElement.c                óÆ   • [         [        [        [        [        [
        [        4nUR                  5        H(  u  pV[        Xd5      (       d  M  UR                  X5        M*     g r1   )
ÚOneAndOnlyOneÚ	OneOrMoreÚOptionalAttributeÚRequiredAttributeÚ
ZeroOrMoreÚ	ZeroOrOneÚZeroOrOneChoiceÚitemsr"   Úpopulate_class_members)rO   ÚclsnameÚbasesÚ	namespaceÚdispatchableÚkeyÚvalues          r   Ú__init__ÚMetaOxmlElement.__init__`   sL   € äÜÜÜÜÜÜð
ˆð $Ÿ/™/Ö+‰JˆCÜ˜%×.Ó.Ø×,Ñ,¨SÖ6ò ,r   rR   N)rm   r#   rn   ztuple[type, ...]ro   zdict[str, Any])rV   rW   rX   rY   rZ   rs   r^   rR   r   r   ra   ra   ]   s
   † Ù(÷7r   ra   c                  ó|   ^ • \ rS rSrSrS
U 4S jjrSS jrS r\S 5       r	\SS j5       r
\  SS j5       rS	rU =r$ )ÚBaseAttributeéo   zRBase class for OptionalAttribute and RequiredAttribute.

Provides common methods.
c                óB   >• [         [        U ]  5         Xl        X l        g r1   )Úsuperrv   rs   Ú
_attr_nameÚ_simple_type)r(   Ú	attr_nameÚsimple_typeÚ	__class__s      €r   rs   ÚBaseAttribute.__init__u   s   ø€ ÜŒm˜TÑ+Ô-Ø#ŒØ'Õ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©r(   Úelement_clsÚ	prop_names      r   rl   Ú$BaseAttribute.populate_class_membersz   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ƒ   ©r(   Ú	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Ú:)rz   r   ©r(   s    r   Ú_clark_nameÚBaseAttribute._clark_name‹   s'   € à�$—/‘/Ó!Ü�d—o‘oÓ&Ð&Ø�‰Ðr   c                ó   • g r1   rR   r“   s    r   r‹   ÚBaseAttribute._getter‘   s   € ØBEr   c                ó   • g r1   rR   r“   s    r   rŒ   ÚBaseAttribute._setter”   s   € ð 9<r   )rz   r‚   rƒ   r{   )r|   r#   r}   ú(Type[BaseXmlEnum] | Type[BaseSimpleType]©r†   ra   r‡   r#   rT   ÚNone©rT   z'Callable[[BaseOxmlElement], Any | None])rT   z-Callable[[BaseOxmlElement, Any | None], None])rV   rW   rX   rY   rZ   rs   rl   r„   rŠ   r”   r‹   rŒ   r^   Ú__classcell__©r~   s   @r   rv   rv   o   sU   ø† ñ÷
(ô
"ò?ð ñó ðð
 ÛEó ØEàð<à	6ó<ó ö<r   rv   c                  ó|   ^ • \ 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$ )rf   éš   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, but still returns the default value when
one is specified.
c                ó8   >• [         [        U ]  X5        X0l        g r1   )ry   rf   rs   Ú_default)r(   r|   r}   Údefaultr~   s       €r   rs   ÚOptionalAttribute.__init__¢   s   ø€ ô 	Ô Ñ/°	ÔGØ�r   c                óN   • U R                   R                   SU R                   S3$ )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.©r{   rV   rz   r“   s    r   Ú
_docstringÚOptionalAttribute._docstring«   s4   € ð × Ñ ×)Ñ)Ð*ð +Ø—/‘/Ð"ð #9ð:ð	
r   c                óB   ^ •     SU 4S jjnT R                   Ul        U$ )zJFunction suitable for `__get__()` method on attribute property descriptor.c                óŽ   >• U R                  TR                  5      nUc  TR                  $ TR                  R	                  U5      $ r1   )Úgetr”   r£   r{   Úfrom_xml©ÚobjÚattr_str_valuer(   s     €r   Úget_attr_valueÚ1OptionalAttribute._getter.<locals>.get_attr_value»   s@   ø€ ð !ŸW™W T×%5Ñ%5Ó6ˆNØÑ%Ø—}‘}Ð$Ø×$Ñ$×-Ñ-¨nÓ=Ð=r   ©r°   ÚBaseOxmlElementrT   ú
Any | None©r©   rZ   ©r(   r²   s   ` r   r‹   ÚOptionalAttribute._getterµ   s,   ø€ ð	>Ø ð	>à÷	>ð "&§¡ˆÔØÐr   c                ó   ^ • SU 4S jjnU$ )zJFunction suitable for `__set__()` method on attribute property descriptor.c                óh  >• Ub  UTR                   :X  a2  TR                  U R                  ;   a  U R                  TR                  	 g TR                  R	                  U5      nUc2  TR                  U R                  ;   a  U R                  TR                  	 g U R                  TR                  U5        g r1   )r£   r”   Úattribr{   Úto_xmlÚset©r°   rr   Ú	str_valuer(   s      €r   Úset_attr_valueÚ1OptionalAttribute._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µ   rr   r¶   rR   ©r(   rÁ   s   ` r   rŒ   ÚOptionalAttribute._setterÆ   s   ø€ ÷
	1ð Ðr   )r£   r1   )r|   r#   r}   rš   r¤   z0BaseXmlEnum | BaseSimpleType | str | bool | Noner�   ©rT   z&Callable[[BaseOxmlElement, Any], None])rV   rW   rX   rY   rZ   rs   rŠ   r©   r‹   rŒ   r^   rž   rŸ   s   @r   rf   rf   š   sz   ø† ñð EIð	 àð ð >ð ð B÷	 ð  ð ñ
ó ð
ð ðà	0óó ðð  óó ör   rf   c                  óP   • \ rS rSrSr\S 5       r\SS j5       r\S	S j5       rSr	g)
rg   éÙ   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                óR   • U R                   R                  < SU R                  < S3$ )zYReturn the string to use as the ``__doc__`` attribute of the property for
this attribute.r§   z`` attribute.r¨   r“   s    r   r©   ÚRequiredAttribute._docstringã   s$   € ð
 ×Ñ×&Ô&Ø�OŒOð
ð 	
r   c                ó:   ^ • SU 4S jjnT R                   Ul        U$ )zDfunction object suitable for "get" side of attr property descriptor.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   rz   Ú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                ó   ^ • SU 4S jjnU$ )zIfunction object suitable for "set" side of attribute property descriptor.c                ó˜   >• TR                   R                  U5      nUc  [        SU S35      eU R                  TR                  U5        g )Nzcannot assign z to this required attribute)r{   r½   Ú
ValueErrorr¾   r”   r¿   s      €r   rÁ   Ú1RequiredAttribute._setter.<locals>.set_attr_valueÿ   sH   ø€ Ø×)Ñ)×0Ñ0°Ó7ˆIØÑ Ü  >°%°Ð8SÐ!TÓUÐUØ�G‰G�D×$Ñ$ iÕ0r   )r°   rµ   rr   r   rR   rÃ   s   ` r   rŒ   ÚRequiredAttribute._setterû   s   ø€ ÷	1ð Ðr   rR   N)rT   z Callable[[BaseOxmlElement], Any]rÅ   )
rV   rW   rX   rY   rZ   rŠ   r©   r‹   rŒ   r^   rR   r   r   rg   rg   Ù   sC   † ñð ñ
ó ð
ð óó ðð ó	ó ó	r   rg   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 rSS jr\SS j5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrU =r$ )Ú_BaseChildElementi  z�Base class for the child-element classes.

The child-element sub-classes correspond to varying cardinalities, such as ZeroOrOne
and ZeroOrMore.
c                óB   >• [         [        U ]  5         Xl        X l        g r1   )ry   rÕ   rs   Ú_nsptagnameÚ_successors)r(   Ú
nsptagnameÚ
successorsr~   s      €r   rs   Ú_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   rl   Ú(_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$ r1   )ÚgetattrÚ_new_method_namerk   r�   Ú_insert_method_name)r°   r8   Ú
new_methodÚchildrq   rr   Úinsert_methodr(   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µ   r8   r   )r×   rZ   Ú_add_to_classÚ_add_method_name)r(   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 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×   rZ   ré   rá   )r(   Úcreators     r   Ú_add_creatorÚ_BaseChildElement._add_creator+  s?   € ð —-‘-ˆð(Ø*.×*:Ñ*:ñ;ð 	Œð 	×Ñ˜4×0Ñ0°'Õ:r   c                ót   • [        U R                  SS5      n[        U R                  U R                  U5        g)zUAdd a read-only ``{prop_name}`` property to the element class for this child
element.N)rŠ   r‹   r�   r‚   rƒ   rŽ   s     r   Ú_add_getterÚ_BaseChildElement._add_getter5  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$ r1   )Úinsert_element_beforerØ   ©r°   rä   r(   s     €r   Ú_insert_childÚ6_BaseChildElement._add_inserter.<locals>._insert_child?  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×   rZ   ré   râ   )r(   rù   s   ` r   Ú_add_inserterÚ_BaseChildElement._add_inserter<  s;   ø€ ÷	ð
)Ø+/×+;Ñ+;ñ<ð 	Ôð 	×Ñ˜4×3Ñ3°]ÕCr   c                ó|   • SU R                   -  n[        U R                  SS5      n[        U R                  X5        g)zzAdd a read-only ``{prop_name}_lst`` property to the element class to retrieve
a list of child elements matching this type.z%s_lstN)rƒ   rŠ   Ú_list_getterr�   r‚   )r(   r‡   r�   s      r   Ú_add_list_getterÚ"_BaseChildElement._add_list_getterI  s6   € ð ˜tŸ™Ñ.ˆ	Ü˜T×.Ñ.°°dÓ;ˆ	Ü�×!Ñ! 9Õ8r   c                ó    • SU R                   -  $ )Nz_add_%s©rƒ   r“   s    r   rê   Ú"_BaseChildElement._add_method_nameP  ó   € à˜4Ÿ?™?Ñ*Ð*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$ r1   )rà   rê   )r°   Úprivate_add_methodrä   r(   s      €r   Ú	add_childÚ6_BaseChildElement._add_public_adder.<locals>.add_childW  s#   ø€ Ü!(¨¨d×.CÑ.CÓ!DÐÙ&Ó(ˆEØˆLr   rè   N©r°   rµ   )r×   rZ   ré   Ú_public_add_method_name)r(   r  s   ` r   Ú_add_public_adderÚ#_BaseChildElement._add_public_adderT  s;   ø€ ÷	ð#Ø%)×%5Ñ%5ñ6ð 	Ôð 	×Ñ˜4×7Ñ7¸ÕCr   c                óh   • [        U R                  U5      (       a  g[        U R                  X5        g)zZAdd `method` to the target class as `name`, unless `name` is already defined
on the class.N)Úhasattrr‚   r�   )r(   ÚnameÚmethods      r   ré   Ú_BaseChildElement._add_to_classb  s*   € ô �4×$Ñ$ d×+Ñ+ØÜ�×!Ñ! 4Õ0r   c                ó(   ^ ^• SSK Jm  SUU 4S jjnU$ )zHCallable that creates an empty element of the right type, with no attrs.r   )ÚOxmlElementc                ó(   >• T" TR                   5      $ r1   ©r×   )r°   r  r(   s    €€r   Únew_child_elementÚ5_BaseChildElement._creator.<locals>.new_child_elementn  s   ø€ Ù˜t×/Ñ/Ó0Ð0r   r
  )Údocx.oxml.parserr  )r(   r  r  s   ` @r   rî   Ú_BaseChildElement._creatori  s   ù€ õ 	1÷	1ð 	1ð !Ð r   c                ó@   ^ • SU 4S jjnST R                   -  Ul        U$ )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   >• U R                  [        TR                  5      5      $ r1   )Úfindr   r×   ©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×   rZ   ©r(   r  s   ` r   r‹   Ú_BaseChildElement._getters  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$ )zSReturn a function object suitable for the "get" side of a list property
descriptor.c                óL   >• U R                  [        TR                  5      5      $ r1   )Úfindallr   r×   r  s    €r   Úget_child_element_listÚ>_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þ   Ú_BaseChildElement._list_getterˆ  s+   ø€ ÷
	5ð Ø"&×"2Ñ"2ñ3ð 	Ô&ð &Ð%r   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   r  Ú)_BaseChildElement._public_add_method_name–  s   € ð ˜$Ÿ/™/Ñ)Ð)r   c                ó    • SU R                   -  $ ©Nz
_remove_%sr  r“   s    r   Ú_remove_method_nameÚ%_BaseChildElement._remove_method_name   r&  r   c                ó    • SU R                   -  $ )Nz_new_%sr  r“   s    r   rá   Ú"_BaseChildElement._new_method_name¤  r  r   )r‚   r×   rƒ   rØ   ©rR   )rÙ   r#   rÚ   útuple[str, ...]r›   )r  r#   r  zCallable[..., Any])rT   z,Callable[[BaseOxmlElement], BaseOxmlElement])rV   rW   rX   rY   rZ   rs   rl   rë   rð   ró   rû   rÿ   r   rê   r  ré   rŠ   rî   r‹   râ   rþ   r  r1  rá   r^   rž   rŸ   s   @r   rÕ   rÕ     sÜ   ø† ñ÷&ñ &ô
$ò
>ò$;ò?òDò9ð ñ+ó ð+òDô1ð ó!ó ð!ð ñ!ó ð!ð  ñ.ó ð.ð ñ&ó ð&ð ñ*ó ð*ð ñ.ó ð.ð ñ+ó ö+r   rÕ   c                  óx   • \ rS rSrSr\S 5       r        SS jrS 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                   $ r1   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r�   )r‚   Ú_group_prop_namerØ   ró   rð   rû   rë   Ú_add_get_or_change_to_method)r(   r†   Úgroup_prop_namerÚ   s       r   rl   Ú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)zRAdd 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$ r1   )rà   rƒ   Ú_remove_group_method_namerê   )r°   rä   Úremove_group_methodÚ
add_methodr(   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×   rZ   ré   Ú_get_or_change_to_method_name)r(   rE  s   ` r   r=  Ú#Choice._add_get_or_change_to_methodÁ  s;   ø€ ÷	ð UØ×Ññ*ÐÔ&ð 	×Ñ˜4×=Ñ=Ð?UÕVr   c                ó€   • SU R                   ;   a  U R                   R                  S5      S-   OSnU R                   US $ )zDProperty name computed from tag name, e.g. a:schemeClr -> schemeClr.r’   rI   r   N)r×   Úindex)r(   Ústarts     r   rƒ   ÚChoice._prop_nameÔ  sB   € ð 47¸$×:JÑ:JÓ3J�× Ñ ×&Ñ& sÓ+¨aÒ/ÐPQˆØ×Ñ  Ð'Ð'r   c                ó    • SU R                   -  $ )Nzget_or_change_to_%sr  r“   s    r   rG  Ú$Choice._get_or_change_to_method_nameÚ  s   € à$ t§¡Ñ6Ð6r   c                ó    • SU R                   -  $ r0  )r<  r“   s    r   rB  Ú Choice._remove_group_method_nameÞ  s   € à˜d×3Ñ3Ñ3Ð3r   )r‚   r<  rØ   N)r†   ra   r>  r#   rÚ   r6  rT   rœ   )rV   rW   rX   rY   rZ   rŠ   rÙ   rl   r=  rƒ   r   rG  rB  r^   rR   r   r   r8  r8  ©  s„   † Ù`àñ ó ð ð,à$ð,ð ð,ð $ð	,ð
 
ô,ò"Wð& ñ(ó ð(ð
 ñ7ó ð7ð ñ4ó ó4r   r8  c                  óP   ^ • \ rS rSrSrSU 4S jjrSU 4S jjr\S 5       rSr	U =r
$ )	rd   iã  z5Defines a required child element for MetaOxmlElement.c                ó.   >• [         [        U ]  US5        g )NrR   )ry   rd   rs   )r(   rÙ   r~   s     €r   rs   ÚOneAndOnlyOne.__init__æ  s   ø€ ÜŒm˜TÑ+¨J¸Õ;r   c                óL   >• [         [        U ]  X5        U R                  5         gr�   )ry   rd   rl   ró   ©r(   r†   r‡   r~   s      €r   rl   Ú$OneAndOnlyOne.populate_class_membersé  s   ø€ äŒm˜TÑ9¸+ÔQØ×ÑÕr   c                ó@   ^ • SU 4S jjnST R                   -  Ul        U$ )úPReturn a function object 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"  s   ` r   r‹   ÚOneAndOnlyOne._getterî  s%   ø€ ÷
	ð %GÈ×IYÑIYÑ$YÐÔ!Ø Ð r   rR   )rÙ   r#   r›   )rV   rW   rX   rY   rZ   rs   rl   rŠ   r‹   r^   rž   rŸ   s   @r   rd   rd   ã  s$   ø† Ù?÷<÷ð
 ñ!ó ö!r   rd   c                  ó0   ^ • \ rS rSrSrSU 4S jjrSrU =r$ )re   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r�   )	ry   re   rl   rÿ   rð   rû   rë   r  ÚdelattrrU  s      €r   rl   Ú OneOrMore.populate_class_members  sT   ø€ äŒi˜Ñ5°kÔMØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×ÑÔ Ü�Õ'r   rR   r›   ©rV   rW   rX   rY   rZ   rl   r^   rž   rŸ   s   @r   re   re   ÿ  s   ø† ñ÷(õ (r   re   c                  ó0   ^ • \ rS rSrSrSU 4S jjrSrU =r$ )rh   i  z@Defines an optional repeating child element for MetaOxmlElement.c                óâ   >• [         [        U ]  X5        U R                  5         U R	                  5         U R                  5         U R                  5         U R                  5         [        X5        gr�   )	ry   rh   rl   rÿ   rð   rû   rë   r  r^  rU  s      €r   rl   Ú!ZeroOrMore.populate_class_members  sT   ø€ äŒj˜$Ñ6°{ÔNØ×ÑÔØ×ÑÔØ×ÑÔØ�‰ÔØ×ÑÔ Ü�Õ'r   rR   r›   r`  rŸ   s   @r   rh   rh     s   ø† ÙJ÷(õ (r   rh   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$ )	ri   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r�   )	ry   ri   rl   ró   rð   rû   rë   Ú_add_get_or_adderÚ_add_removerrU  s      €r   rl   Ú ZeroOrOne.populate_class_members  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)zLAdd 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$ r1   )rà   rƒ   rê   )r°   rä   rD  r(   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.Nr
  )r×   rZ   ré   Ú_get_or_add_method_name)r(   rk  s   ` r   rf  ÚZeroOrOne._add_get_or_adder)  s;   ø€ ÷	ð MØ×Ññ$ÐÔ ð 	×Ñ˜4×7Ñ7Ð9IÕJr   c                óv   ^ • SU 4S jjnST R                   -  Ul        T R                  T R                  U5        g)zIAdd a ``_remove_x()`` method to the element class for this child element.c                ó<   >• U R                  TR                  5        g r1   )Ú
remove_allr×   r  s    €r   Ú_remove_childÚ-ZeroOrOne._add_remover.<locals>._remove_child<  s   ø€ Ø�N‰N˜4×+Ñ+Õ,r   z#Remove all ``<%s>`` child elements.Nr
  )r×   rZ   ré   r1  )r(   rr  s   ` r   rg  ÚZeroOrOne._add_remover9  s4   ø€ ÷	-ð "GÈ$×JZÑJZÑ ZˆÔØ×Ñ˜4×3Ñ3°]ÕCr   c                ó    • SU R                   -  $ )Nzget_or_add_%sr  r“   s    r   rm  Ú!ZeroOrOne._get_or_add_method_nameB  s   € à §¡Ñ0Ð0r   rR   r›   )rV   rW   rX   rY   rZ   rl   rf  rg  r   rm  r^   rž   rŸ   s   @r   ri   ri     s+   ø† Ù@÷òKò Dð ñ1ó ö1r   ri   c                  óz   ^ • \ 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 5       r\S	 5       rS
rU =r$ )rj   iG  zaCorrespondes to an ``EG_*`` element group where at most one of its members may
appear as a child.c                ó   • Xl         X l        g r1   ©Ú_choicesrØ   )r(   ÚchoicesrÚ   s      r   rs   ÚZeroOrOneChoice.__init__K  s   € ØŒØ%Õr   c                óÞ   >• [         [        U ]  X5        U R                  5         U R                   H)  nUR                  XR
                  U R                  5        M+     U R                  5         gr�   )ry   rj   rl   Ú_add_choice_getterrz  rƒ   rØ   Ú_add_group_remover)r(   r†   r‡   Úchoicer~   s       €r   rl   Ú&ZeroOrOneChoice.populate_class_membersO  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 that 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_getterW  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)zKAdd 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 r1   )Ú_member_nsptagnamesrq  )r°   Útagnamer(   s     €r   Ú_remove_choice_groupÚ@ZeroOrOneChoice._add_group_remover.<locals>._remove_choice_groupb  s   ø€ Ø×3Ô3�Ø—‘˜wÖ'ò 4r   z9Remove the current choice group child element if present.Nr
  )rZ   ré   Ú _remove_choice_group_method_name)r(   r‰  s   ` r   r  Ú"ZeroOrOneChoice._add_group_remover^  s+   ø€ ÷	(ð (cÐÔ$Ø×Ñ˜4×@Ñ@ÐBVÕWr   c                ó&   ^ • SU 4S jjnSUl         U$ )rX  c                ó6   >• U R                   " TR                  6 $ r1   )Úfirst_child_found_inr‡  r  s    €r   Úget_group_member_elementÚ@ZeroOrOneChoice._choice_getter.<locals>.get_group_member_elementn  s   ø€ Ø×+Ò+¨T×-EÑ-EÐFÐFr   zbReturn the child element belonging to this element group, or |None| if no member child is present.r
  )rZ   )r(   r�  s   ` r   rƒ  ÚZeroOrOneChoice._choice_getteri  s   ø€ ÷
	Gð4ð 	!Ô(ð (Ð'r   c                óX   • U R                    Vs/ s H  oR                  PM     sn$ s  snf )zbSequence of namespace-prefixed tagnames, one for each of the member elements
of this choice group.)rz  rÙ   )r(   r€  s     r   r‡  Ú#ZeroOrOneChoice._member_nsptagnamesw  s$   € ð 15·²Ó>² f×!Ô!±Ñ>Ð>ùÒ>s   �'c                ó    • SU R                   -  $ r0  r  r“   s    r   r‹  Ú0ZeroOrOneChoice._remove_choice_group_method_name}  r&  r   ry  r5  )r{  zSequence[Choice]rÚ   r6  r›   )rV   rW   rX   rY   rZ   rs   rl   r~  r  rŠ   rƒ  r   r‡  r‹  r^   rž   rŸ   s   @r   rj   rj   G  sY   ø† ñö&÷"ò?ò	Xð ñ(ó ð(ð ñ?ó ð?ð
 ñ.ó ö.r   rj   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~   rV   Ú_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   )r(   Ú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$ r1   )r�  ÚaddpreviousÚappend)r(   Ú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)r)  r   Úremove)r(   rž  rˆ  Úmatchingrä   s        r   rq  Ú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)ry   Úxpathr   )r(   Ú	xpath_strr~   s     €r   r®  ÚBaseOxmlElement.xpath¯  s   ø€ ô
 ‰w‰}˜Y´5ˆ}Ð9Ð9r   c                óB   • [         R                  " U R                  5      $ r1   )r   Úfrom_clark_namerÌ   r“   s    r   r™  ÚBaseOxmlElement._nsptag¶  s   € ä#×3Ò3°D·H±HÓ=Ð=r   rR   )rž  r#   rT   z_Element | None)r£  r   rž  r#   )rž  r#   rT   rœ   )rT   r#   )r¯  r#   rT   r   )rV   rW   rX   rY   rZ   r›  r�  r÷   rq  rŠ   r   r®  r™  r^   rž   rŸ   s   @r   rµ   rµ   ƒ  sI   ø† ñò

ôôô#ð ó+ó ð+÷:ð ó>ó ö>r   rµ   )Ú	metaclass)r   r   )-rZ   Ú
__future__r   r[   Ú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   r_   Útypera   rv   rf   rg   rÕ   r8  rd   re   rh   ri   rj   rµ   rR   r   r   Ú<module>r¿     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   