ó
    Û°›jÕ'  ã                   ó¬   • S SK Jr  S SKJr  SrSrSrS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g)é    )Ú
HTMLParser)Úzip_longest)ÚcodeÚa)ÚspanÚir   r   )r   Úb)ÚpÚnoteÚulÚlic                   ó\   ^ • \ rS rSrSrU 4S jrS rU 4S jrU 4S jrS r	S r
S	 rS
rU =r$ )ÚDocStringParseré   z—
A simple HTML parser.  Focused on converting the subset of HTML
that appears in the documentation strings of the JSON models into
simple ReST format.
c                 ó<   >• S U l         Xl        [        TU ]  5         g ©N)ÚtreeÚdocÚsuperÚ__init__)Úselfr   Ú	__class__s     €Ú`/home/mande/repo/quber/.venv/lib/python3.13/site-packages/botocore/docs/bcdoc/docstringparser.pyr   ÚDocStringParser.__init__   s   ø€ ØˆŒ	ØŒÜ‰ÑÕó    c                 ód   • [         R                  " U 5        [        U R                  5      U l        g r   )r   ÚresetÚHTMLTreer   r   ©r   s    r   r   ÚDocStringParser.reset"   s    € Ü×Ò˜ÔÜ˜TŸX™XÓ&ˆ�	r   c                 óŒ   >• [         TU ]  U5        U R                  R                  5         [	        U R
                  5      U l        g r   )r   Úfeedr   Úwriter   r   )r   Údatar   s     €r   r"   ÚDocStringParser.feed&   s-   ø€ Ü‰‰�TÔØ�	‰	�‰ÔÜ˜TŸX™XÓ&ˆ�	r   c                 óŠ   >• [         TU ]  5         U R                  R                  5         [	        U R
                  5      U l        g r   )r   Úcloser   r#   r   r   )r   r   s    €r   r'   ÚDocStringParser.close+   s*   ø€ Ü‰‰Œà�	‰	�‰ÔÜ˜TŸX™XÓ&ˆ�	r   c                 ó6   • U R                   R                  XS9  g )N)Úattrs©r   Úadd_tag)r   Útagr*   s      r   Úhandle_starttagÚDocStringParser.handle_starttag1   s   € Ø�	‰	×Ñ˜#ÐÒ+r   c                 ó8   • U R                   R                  USS9  g )NF)Úis_startr+   )r   r-   s     r   Úhandle_endtagÚDocStringParser.handle_endtag4   s   € Ø�	‰	×Ñ˜#¨ÐÒ.r   c                 ó:   • U R                   R                  U5        g r   )r   Úadd_data©r   r$   s     r   Úhandle_dataÚDocStringParser.handle_data7   s   € Ø�	‰	×Ñ˜4Õ r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r"   r'   r.   r2   r7   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r      s0   ø† ñõò
'õ'õ
'ò,ò/÷!ð !r   r   c                   ó:   • \ rS rSrSrS rS
S jrS rS rS r	S	r
g)r   é;   zÖ
A tree which handles HTML nodes. Designed to work with a python HTML parser,
meaning that the current_node will be the most recently opened tag. When
a tag is closed, the current_node moves up to the parent node.
c                 ó^   • Xl         [        5       U l        U R                  U l        / U l        g r   )r   ÚStemNodeÚheadÚcurrent_nodeÚunhandled_tags©r   r   s     r   r   ÚHTMLTree.__init__B   s$   € ØŒÜ“JˆŒ	Ø ŸI™IˆÔØ ˆÕr   Nc                 ó  • U R                  X5      (       d  U R                  R                  U5        g U(       a-  [        X5      nU R                  R                  U5        X@l        g U R                  R                  U l        g r   )Ú_doc_has_handlerrG   ÚappendÚTagNoderF   Ú	add_childÚparent)r   r-   r*   r1   Únodes        r   r,   ÚHTMLTree.add_tagH   se   € Ø×$Ñ$ S×3Ñ3Ø×Ñ×&Ñ& sÔ+ØæÜ˜3Ó&ˆDØ×Ñ×'Ñ'¨Ô-Ø $Õà $× 1Ñ 1× 8Ñ 8ˆDÕr   c                 óf   • U(       a  SU 3nOSU 3n[        U R                  R                  U5      $ )NÚstart_Úend_)Úhasattrr   Ústyle)r   r-   r1   Úhandler_names       r   rK   ÚHTMLTree._doc_has_handlerT   s0   € ÞØ# C 5˜>‰Là! # ˜<ˆLä�t—x‘x—~‘~ |Ó4Ð4r   c                 óL   • U R                   R                  [        U5      5        g r   )rF   rN   ÚDataNoder6   s     r   r5   ÚHTMLTree.add_data\   s   € Ø×Ñ×#Ñ#¤H¨T£NÕ3r   c                 óN   • U R                   R                  U R                  5        g r   )rE   r#   r   r   s    r   r#   ÚHTMLTree.write_   s   € Ø�	‰	�‰˜Ÿ™Õ!r   )rF   r   rE   rG   )NT)r9   r:   r;   r<   r=   r   r,   rK   r5   r#   r>   © r   r   r   r   ;   s    † ñò!ô
9ò5ò4õ"r   r   c                   ó$   • \ rS rSrSS jrS rSrg)ÚNodeéc   Nc                 ó   • Xl         g r   ©rO   )r   rO   s     r   r   ÚNode.__init__d   s   € Ø�r   c                 ó   • [         er   )ÚNotImplementedErrorrH   s     r   r#   Ú
Node.writeg   s   € Ü!Ð!r   rc   r   )r9   r:   r;   r<   r   r#   r>   r^   r   r   r`   r`   c   s   † ôõ"r   r`   c                   ób   ^ • \ rS rSrSU 4S jjrS rS rS rS rS r	S r
S	 rS
 rS rSrU =r$ )rD   ék   c                 ó2   >• [         TU ]  U5        / U l        g r   )r   r   Úchildren)r   rO   r   s     €r   r   ÚStemNode.__init__l   s   ø€ Ü‰Ñ˜Ô Øˆ�r   c                 óF   • Xl         U R                  R                  U5        g r   )rO   rk   rL   ©r   Úchilds     r   rN   ÚStemNode.add_childp   s   € ØŒØ�‰×Ñ˜UÕ#r   c                 óF   • U R                  5         U R                  U5        g r   )Úcollapse_whitespaceÚ_write_childrenrH   s     r   r#   ÚStemNode.writet   s   € Ø× Ñ Ô"Ø×Ñ˜SÕ!r   c                 óÔ   • [        U R                  U R                  SS  5       HA  u  p#[        U[        5      (       a  Ub  UR	                  X5        M0  UR	                  U5        MC     g )Né   )r   rk   Ú
isinstancerM   r#   )r   r   ro   Ú
next_childs       r   rs   ÚStemNode._write_childrenx   sP   € Ü!,¨T¯]©]¸D¿M¹MÈ!È"Ð<MÖ!NÑˆEÜ˜%¤×)Ñ)¨jÑ.DØ—‘˜CÖ,à—‘˜CÖ ò	 "Or   c                 ó:   • [        S U R                   5       5      $ )Nc              3   ó@   #   • U  H  oR                  5       v •  M     g 7fr   )Úis_whitespace©Ú.0ro   s     r   Ú	<genexpr>Ú)StemNode.is_whitespace.<locals>.<genexpr>€   s   é € ÐD²m¨U×&Ñ&×(Ð(²mùs   ‚)Úallrk   r   s    r   r|   ÚStemNode.is_whitespace   s   € ÜÑD°d·m²mÓDÓDÐDr   c                 ób   • U R                   =(       a    U R                   S   R                  5       $ )Nr   )rk   Ústartswith_whitespacer   s    r   r„   ÚStemNode.startswith_whitespace‚   s#   € Ø�}‰}×I §¡¨qÑ!1×!GÑ!GÓ!IÐIr   c                 ób   • U R                   =(       a    U R                   S   R                  5       $ ©Néÿÿÿÿ)rk   Úendswith_whitespacer   s    r   r‰   ÚStemNode.endswith_whitespace…   s#   € Ø�}‰}×H §¡¨rÑ!2×!FÑ!FÓ!HÐHr   c                 óZ  • U R                   (       ak  U R                   S   R                  5       (       aI  U R                   SS  U l         U R                   (       a$  U R                   S   R                  5       (       a  MI  U R                   (       a  U R                   S   R                  5         g g )Nr   rv   )rk   r|   Úlstripr   s    r   rŒ   ÚStemNode.lstripˆ   ss   € Ø�m�m §¡¨aÑ 0× >Ñ >× @Ñ @Ø ŸM™M¨!¨"Ð-ˆDŒMð �m�m §¡¨aÑ 0× >Ñ >× @Ó @à�=�=Ø�M‰M˜!Ñ×#Ñ#Õ%ð r   c                 óZ  • U R                   (       ak  U R                   S   R                  5       (       aI  U R                   S S U l         U R                   (       a$  U R                   S   R                  5       (       a  MI  U R                   (       a  U R                   S   R                  5         g g r‡   )rk   r|   Úrstripr   s    r   r�   ÚStemNode.rstripŽ   ss   € Ø�m�m §¡¨bÑ 1× ?Ñ ?× AÑ AØ ŸM™M¨#¨2Ð.ˆDŒMð �m�m §¡¨bÑ 1× ?Ñ ?× AÓ Aà�=�=Ø�M‰M˜"Ñ×$Ñ$Õ&ð r   c                 óŠ   • U R                  5         U R                  5         U R                   H  nUR                  5         M     g)aN  Remove collapsible white-space from HTML.

HTML in docstrings often contains extraneous white-space around tags,
for readability. Browsers would collapse this white-space before
rendering. If not removed before conversion to RST where white-space is
part of the syntax, for example for indentation, it can result in
incorrect output.
N)rŒ   r�   rk   rr   rn   s     r   rr   ÚStemNode.collapse_whitespace”   s0   € ð 	�‰ŒØ�‰ŒØ—]”]ˆEØ×%Ñ%Ö'ò #r   )rk   r   )r9   r:   r;   r<   r   rN   r#   rs   r|   r„   r‰   rŒ   r�   rr   r>   r?   r@   s   @r   rD   rD   k   s=   ø† ÷ò$ò"ò!òEòJòIò&ò'÷(ð (r   rD   c                   óR   ^ • \ rS rSrSrS
U 4S jjrS rSS jrS rS r	S r
S	rU =r$ )rM   é£   zH
A generic Tag node. It will verify that handlers exist before writing.
c                 ó<   >• [         TU ]  U5        X l        Xl        g r   )r   r   r*   r-   )r   r-   r*   rO   r   s       €r   r   ÚTagNode.__init__¨   s   ø€ Ü‰Ñ˜Ô ØŒ
Ø�r   c                 ó:   • [        S U R                   5       5      $ )Nc              3   óB   #   • U  H  n[        U[        5      v •  M     g 7fr   )rw   rM   r}   s     r   r   Ú+TagNode._has_nested_tags.<locals>.<genexpr>¯   s   é € ÐIº=°%”:˜e¤W×-Ð-º=ùs   ‚)Úanyrk   r   s    r   Ú_has_nested_tagsÚTagNode._has_nested_tags­   s   € äÑI¸4¿=º=ÓIÓIÐIr   c                 ó®  • U R                   [        ;   =(       a    U R                  5       n[        U R                  [
        5      =(       a7    U R                  R                   [        ;   =(       a    U R                   [        ;   nU(       d  U(       a  U R                  U5        g U R                  U5        U R                  U5        U R                  X5        g r   )r-   ÚOMIT_SELF_TAGSr›   rw   rO   rM   ÚPRIORITY_PARENT_TAGSÚOMIT_NESTED_TAGSrs   Ú_write_startÚ
_write_end)r   r   rx   Úprioritize_nested_tagsÚprioritize_parent_tags        r   r#   ÚTagNode.write±   sŸ   € à�H‰HœÑ&×B¨4×+@Ñ+@Ó+Bð 	ô �t—{‘{¤GÓ,÷ -Ø—‘—‘Ô#7Ñ7÷-à—‘Ô,Ñ,ð 	ö
 "Ö%:Ø× Ñ  Ô%Øà×Ñ˜#ÔØ×Ñ˜SÔ!Ø�‰˜Õ(r   c                 óÂ  • U R                   [        ;   a   U R                  5         U R                  5         [	        U R
                  SS U R
                  SS 5       HZ  u  p[        U[        5      (       d  M  UR                  5       (       d  M3  UR                  5       (       d  MJ  UR                  5         M\     [	        U R
                  SS U R
                  SS 5       HZ  u  p#[        U[        5      (       d  M  UR                  5       (       d  M3  UR                  5       (       d  MJ  UR                  5         M\     U R
                   H  nUR                  5         M     g)aQ  Remove collapsible white-space.

All tags collapse internal whitespace. Block-display HTML tags also
strip all leading and trailing whitespace.

Approximately follows the specification used in browsers:
https://www.w3.org/TR/css-text-3/#white-space-rules
https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Whitespace
Nrˆ   rv   )r-   ÚHTML_BLOCK_DISPLAY_TAGSrŒ   r�   Úziprk   rw   rZ   r‰   r„   rr   )r   ÚprevÚcurÚnxtro   s        r   rr   ÚTagNode.collapse_whitespaceÂ   sÿ   € ð �8‰8Ô.Ó.Ø�K‰KŒMØ�K‰KŒMô ˜TŸ]™]¨3¨BÐ/°·±¸q¸rÐ1BÖC‰IˆDä˜4¤×*Ó*Ø×,Ñ,×.Ó.Ø×-Ñ-×/Ó/à—
‘
–ñ Dô ˜DŸM™M¨#¨2Ð.°·±¸a¸bÐ0AÖB‰HˆCä˜3¤×)Ó)Ø×+Ñ+×-Ó-Ø×-Ñ-×/Ó/à—
‘
–ñ Cð —]”]ˆEØ×%Ñ%Ö'ò #r   c                 ó¦   • SU R                    3n[        UR                  U5      (       a'  [        UR                  U5      " U R                  5        g g )NrS   )r-   rU   rV   Úgetattrr*   )r   r   rW   s      r   r¡   ÚTagNode._write_startä   s?   € Ø §¡˜zÐ*ˆÜ�3—9‘9˜l×+Ñ+Ü�C—I‘I˜|Ô,¨T¯Z©ZÕ8ð ,r   c                 óÖ   • SU R                    3n[        UR                  U5      (       a?  US:X  a  [        UR                  U5      " U5        g [        UR                  U5      " 5         g g )NrT   Úend_a)r-   rU   rV   r®   )r   r   rx   rW   s       r   r¢   ÚTagNode._write_endé   sT   € Ø˜dŸh™h˜ZÐ(ˆÜ�3—9‘9˜l×+Ñ+Ø˜wÓ&ä˜Ÿ	™	 <Ô0°Õ<ä˜Ÿ	™	 <Ô0Õ2ð ,r   )r*   r-   )NNr   )r9   r:   r;   r<   r=   r   r›   r#   rr   r¡   r¢   r>   r?   r@   s   @r   rM   rM   £   s-   ø† ñ÷ò
Jô)ò" (òD9÷
3ð 3r   rM   c                   ój   ^ • \ rS rSrSrSU 4S jjr\S 5       rS rS r	S r
S rS	 rS
 rS rSrU =r$ )rZ   éó   z(
A Node that contains only string data.
c           	      ó¼  >• [         TU ]  U5        [        U[        5      (       d  [	        S[        U5       S35      eSU l        SU l        SU l        US:X  a  g UR                  5       (       a  Xl        g [        S [        U5       5       5      n[        U5      [        S [        [        U5      5       5       5      -
  nUS U U l        XS  U l        XU U l        g )NzExpecting string type, z given.Ú c              3   óX   #   • U  H   u  pUR                  5       (       a  M  Uv •  M"     g 7fr   ©Úisspace©r~   ÚidxÚchs      r   r   Ú$DataNode.__init__.<locals>.<genexpr>  s   é € ð 
Ú.‘G�C°b·j±j·l�C‰Cšùó   ‚*¡	*c              3   óX   #   • U  H   u  pUR                  5       (       a  M  Uv •  M"     g 7fr   r¸   rº   s      r   r   r½     s    é € ð *
Ú8‘G�CÀÇ
Á
Ç�C‰CÒ8ùr¾   )r   r   rw   ÚstrÚ
ValueErrorÚtypeÚ_leading_whitespaceÚ_trailing_whitespaceÚ_stripped_datar¹   ÚnextÚ	enumerateÚlenÚreversed)r   r$   rO   Úfirst_non_spaceÚlast_non_spacer   s        €r   r   ÚDataNode.__init__ø   sà   ø€ Ü‰Ñ˜Ô Ü˜$¤×$Ñ$ÜÐ6´t¸D³z°lÀ'ÐJÓKÐKØ#%ˆÔ Ø$&ˆÔ!Ø ˆÔØ�2‹:ØØ�<‰<�>‰>Ø(,Ô%ØÜñ 
Ü(¨œó
ó 
ˆô ˜T›¤Tñ *
Ü(¬°$«Ô8ó*
ó &
ñ 
ˆð $(Ð(8¨Ð#9ˆÔ Ø$(¨Ð$9ˆÔ!Ø"°>ÐBˆÕr   c                 óN   • U R                    U R                   U R                   3$ r   ©rÃ   rÅ   rÄ   r   s    r   r$   ÚDataNode.data  s1   € ð ×'Ñ'Ð(¨×)<Ñ)<Ð(=Ø×(Ñ(Ð)ð+ð	
r   c                 óx   • U R                   S:H  =(       a%    U R                  S:g  =(       d    U R                  S:g  $ ©Nr¶   )rÅ   rÃ   rÄ   r   s    r   r|   ÚDataNode.is_whitespace  s8   € Ø×"Ñ" bÑ(÷ 
Ø×$Ñ$¨Ñ*×M¨d×.GÑ.GÈ2Ñ.Mð	
r   c                 óx   • U R                   S:g  =(       d%    U R                  S:H  =(       a    U R                  S:g  $ rÑ   rÎ   r   s    r   r„   ÚDataNode.startswith_whitespace  s8   € Ø×'Ñ'¨2Ñ-÷ 
Ø×Ñ 2Ñ%×I¨$×*CÑ*CÀrÑ*Ið	
r   c                 óx   • U R                   S:g  =(       d%    U R                  S:H  =(       a    U R                  S:g  $ rÑ   )rÄ   rÅ   rÃ   r   s    r   r‰   ÚDataNode.endswith_whitespace  s8   € Ø×(Ñ(¨BÑ.÷ 
Ø×Ñ 2Ñ%×H¨$×*BÑ*BÀbÑ*Hð	
r   c                 óv   • U R                   S:w  a  SU l         g U R                  S:X  a  U R                  5         g g rÑ   )rÃ   rÅ   r�   r   s    r   rŒ   ÚDataNode.lstrip$  s4   € Ø×#Ñ# rÓ)Ø')ˆDÕ$Ø× Ñ  BÓ&Ø�K‰K�Mð 'r   c                 óv   • U R                   S:w  a  SU l         g U R                  S:X  a  U R                  5         g g rÑ   )rÄ   rÅ   rŒ   r   s    r   r�   ÚDataNode.rstrip*  s4   € Ø×$Ñ$¨Ó*Ø(*ˆDÕ%Ø× Ñ  BÓ&Ø�K‰K�Mð 'r   c                 ó   • g)z4Noop, ``DataNode.write`` always collapses whitespaceNr^   r   s    r   rr   ÚDataNode.collapse_whitespace0  s   € àr   c                 óÜ   • UR                  U R                  R                  5       5      nU R                   SR	                  U5       U R
                   3nUS:w  a  UR                  U5        g g )NÚ r¶   )Útranslate_wordsrÅ   ÚsplitrÃ   ÚjoinrÄ   r7   )r   r   ÚwordsÚstr_datas       r   r#   ÚDataNode.write4  sj   € Ø×#Ñ# D×$7Ñ$7×$=Ñ$=Ó$?Ó@ˆà×'Ñ'Ð(¨¯©°%«Ð(9Ø×(Ñ(Ð)ð+ð 	ð �r‹>Ø�O‰O˜HÕ%ð r   rÎ   r   )r9   r:   r;   r<   r=   r   Úpropertyr$   r|   r„   r‰   rŒ   r�   rr   r#   r>   r?   r@   s   @r   rZ   rZ   ó   sJ   ø† ñ÷Cð, ñ
ó ð
ò
ò

ò

ò
òò÷&ð &r   rZ   N)Úhtml.parserr   Ú	itertoolsr   rŸ   r    rž   r§   r   r   r`   rD   rM   rZ   r^   r   r   Ú<module>rè      sp   ðõ #Ý !à$Ð Ø-Ð Ø€Ø3Ð ô"!�jô "!÷J%"ñ %"÷P"ñ "ô5(ˆtô 5(ôpM3ˆhô M3ô`H&ˆtõ H&r   