
    j'                         d dl mZ d dlmZ dZdZdZdZ G d de          Z G d	 d
          Z	 G d d          Z
 G d de
          Z G d de          Z G d de
          ZdS )    )
HTMLParser)zip_longest)codea)spanir   r   )r   b)pnoteullic                   N     e Zd ZdZ fdZd Z fdZ fdZd Zd Z	d Z
 xZS )	DocStringParserz
    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                 d    d | _         || _        t                                                       d S N)treedocsuper__init__)selfr   	__class__s     d/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/botocore/docs/bcdoc/docstringparser.pyr   zDocStringParser.__init__   s-    	    c                 `    t          j        |            t          | j                  | _        d S r   )r   resetHTMLTreer   r   r   s    r   r   zDocStringParser.reset"   s(    TX&&			r   c                     t                                          |           | j                                         t	          | j                  | _        d S r   )r   feedr   writer   r   )r   datar   s     r   r   zDocStringParser.feed&   s@    T	TX&&			r   c                     t                                                       | j                                         t	          | j                  | _        d S r   )r   closer   r    r   r   )r   r   s    r   r#   zDocStringParser.close+   s;    	TX&&			r   c                 >    | j                             ||           d S )N)attrsr   add_tag)r   tagr%   s      r   handle_starttagzDocStringParser.handle_starttag1   s#    	#U+++++r   c                 >    | j                             |d           d S )NF)is_startr&   )r   r(   s     r   handle_endtagzDocStringParser.handle_endtag4   s#    	#.....r   c                 :    | j                             |           d S r   )r   add_datar   r!   s     r   handle_datazDocStringParser.handle_data7   s    	4     r   )__name__
__module____qualname____doc__r   r   r   r#   r)   r,   r0   __classcell__r   s   @r   r   r      s             
' ' '' ' ' ' '
' ' ' ' ', , ,/ / /! ! ! ! ! ! !r   r   c                   2    e Zd ZdZd Zd	dZd Zd Zd ZdS )
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                 `    || _         t                      | _        | j        | _        g | _        d S r   )r   StemNodeheadcurrent_nodeunhandled_tagsr   r   s     r   r   zHTMLTree.__init__B   s,    JJ	 I r   NTc                     |                      ||          s| j                            |           d S |r3t          ||          }| j                            |           || _        d S | j        j        | _        d S r   )_doc_has_handlerr<   appendTagNoder;   	add_childparent)r   r(   r%   r+   nodes        r   r'   zHTMLTree.add_tagH   s    $$S(33 	&&s+++F 	93&&D''--- $D $ 1 8Dr   c                 P    |rd| }nd| }t          | j        j        |          S )Nstart_end_)hasattrr   style)r   r(   r+   handler_names       r   r?   zHTMLTree._doc_has_handlerT   s6     	()C>>LL'#<<Ltx~|444r   c                 T    | j                             t          |                     d S r   )r;   rB   DataNoder/   s     r   r.   zHTMLTree.add_data\   s%    ##HTNN33333r   c                 D    | j                             | j                   d S r   )r:   r    r   r   s    r   r    zHTMLTree.write_   s    	!!!!!r   )NT)	r1   r2   r3   r4   r   r'   r?   r.   r     r   r   r   r   ;   sn         ! ! !
9 
9 
9 
95 5 54 4 4" " " " "r   r   c                       e Zd ZddZd ZdS )NodeNc                     || _         d S r   )rC   )r   rC   s     r   r   zNode.__init__d   s    r   c                     t           r   )NotImplementedErrorr=   s     r   r    z
Node.writeg   s    !!r   r   )r1   r2   r3   r   r    rN   r   r   rP   rP   c   s7           " " " " "r   rP   c                   V     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Z xZS )r9   Nc                 X    t                                          |           g | _        d S r   )r   r   children)r   rC   r   s     r   r   zStemNode.__init__l   s&       r   c                 H    | |_         | j                            |           d S r   )rC   rV   r@   r   childs     r   rB   zStemNode.add_childp   s%    U#####r   c                 X    |                                   |                     |           d S r   )collapse_whitespace_write_childrenr=   s     r   r    zStemNode.writet   s.      """S!!!!!r   c                     t          | j        | j        dd                    D ]H\  }}t          |t                    r||                    ||           3|                    |           Id S )N   )r   rV   
isinstancerA   r    )r   r   rY   
next_childs       r   r\   zStemNode._write_childrenx   sz    !,T]DM!""<M!N!N 	! 	!E:%)) !j.DC,,,,C    		! 	!r   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   )is_whitespace.0rY   s     r   	<genexpr>z)StemNode.is_whitespace.<locals>.<genexpr>   s.      DDU5&&((DDDDDDr   )allrV   r   s    r   rc   zStemNode.is_whitespace   s!    DDdmDDDDDDr   c                 N    | j         o| j         d                                         S )Nr   )rV   startswith_whitespacer   s    r   ri   zStemNode.startswith_whitespace   s"    }Iq!1!G!G!I!IIr   c                 N    | j         o| j         d                                         S N)rV   endswith_whitespacer   s    r   rm   zStemNode.endswith_whitespace   s"    }Hr!2!F!F!H!HHr   c                    | j         rY| j         d                                         r:| j         dd          | _         | j         r| j         d                                         :| j         r!| j         d                                          d S d S )Nr   r^   )rV   rc   lstripr   s    r   ro   zStemNode.lstrip   s    m 	.a 0 > > @ @ 	. M!""-DM m 	.a 0 > > @ @ 	.= 	&M!##%%%%%	& 	&r   c                    | j         rY| j         d                                         r:| j         d d         | _         | j         r| j         d                                         :| j         r!| j         d                                          d S d S rk   )rV   rc   rstripr   s    r   rq   zStemNode.rstrip   s    m 	/b 1 ? ? A A 	/ M#2#.DM m 	/b 1 ? ? A A 	/= 	'M"$$&&&&&	' 	'r   c                     |                                   |                                  | j        D ]}|                                 dS )a~  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)ro   rq   rV   r[   rX   s     r   r[   zStemNode.collapse_whitespace   sN     	] 	( 	(E%%''''	( 	(r   r   )r1   r2   r3   r   rB   r    r\   rc   ri   rm   ro   rq   r[   r5   r6   s   @r   r9   r9   k   s             $ $ $" " "! ! !E E EJ J JI I I& & &' ' '( ( ( ( ( ( (r   r9   c                   D     e Zd ZdZd	 fd	Zd Zd
dZd Zd Zd Z	 xZ
S )rA   zP
    A generic Tag node. It will verify that handlers exist before writing.
    Nc                 f    t                                          |           || _        || _        d S r   )r   r   r%   r(   )r   r(   r%   rC   r   s       r   r   zTagNode.__init__   s-       
r   c                 >    t          d | j        D                       S )Nc              3   @   K   | ]}t          |t                    V  d S r   )r_   rA   rd   s     r   rf   z+TagNode._has_nested_tags.<locals>.<genexpr>   s,      II%:eW--IIIIIIr   )anyrV   r   s    r   _has_nested_tagszTagNode._has_nested_tags   s!    II4=IIIIIIr   c                 v   | j         t          v o|                                 }t          | j        t
                    o | j        j         t          v o| j         t          v }|s|r|                     |           d S | 	                    |           |                     |           | 
                    ||           d S r   )r(   OMIT_SELF_TAGSrx   r_   rC   rA   PRIORITY_PARENT_TAGSOMIT_NESTED_TAGSr\   _write_start
_write_end)r   r   r`   prioritize_nested_tagsprioritize_parent_tags        r   r    zTagNode.write   s    H&B4+@+@+B+B 	 t{G,, -#77-,, 	
 " 	%: 	  %%%F#S!!!Z(((((r   c                    | j         t          v r(|                                  |                                  t	          | j        dd         | j        dd                   D ]V\  }}t          |t                    r<|                                r(|	                                r|                                 Wt	          | j        dd         | j        dd                   D ]V\  }}t          |t                    r<|                                r(|	                                r|                                 W| j        D ]}|
                                 dS )a  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
        Nrl   r^   )r(   HTML_BLOCK_DISPLAY_TAGSro   rq   ziprV   r_   rL   rm   ri   r[   )r   prevcurnxtrY   s        r   r[   zTagNode.collapse_whitespace   s\    8...KKMMMKKMMM T]3B3/qrr1BCC 	 	ID#4**,,.. --//
 

DM#2#.abb0ABB 	 	HC3))++-- --//
 

] 	( 	(E%%''''	( 	(r   c                     d| j          }t          |j        |          r% t          |j        |          | j                   d S d S )NrF   )r(   rH   rI   getattrr%   )r   r   rJ   s      r   r}   zTagNode._write_start   sS    ***39l++ 	9,GCI|,,TZ88888	9 	9r   c                     d| j          }t          |j        |          rE|dk    r  t          |j        |          |           d S  t          |j        |                       d S d S )NrG   end_a)r(   rH   rI   r   )r   r   r`   rJ   s       r   r~   zTagNode._write_end   s|    (dh((39l++ 	3w&&0	<00<<<<<0	<0022222	3 	3r   )NNr   )r1   r2   r3   r4   r   rx   r    r[   r}   r~   r5   r6   s   @r   rA   rA      s              
J J J) ) ) )" (  (  (D9 9 9
3 3 3 3 3 3 3r   rA   c                   d     e Zd ZdZd fd	Zed             Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )rL   z0
    A Node that contains only string data.
    Nc           	      T   t                                          |           t          |t                    s t	          dt          |           d          d| _        d| _        d| _        |dk    rd S |	                                r	|| _        d S t          d t          |          D                       }t          |          t          d t          t          |                    D                       z
  }|d |         | _        ||d          | _        |||         | _        d S )NzExpecting string type, z given. c              3   H   K   | ]\  }}|                                 |V  d S r   isspacere   idxchs      r   rf   z$DataNode.__init__.<locals>.<genexpr>  sG       
 
Cbjjll

 
 
 
 
 
r   c              3   H   K   | ]\  }}|                                 |V  d S r   r   r   s      r   rf   z$DataNode.__init__.<locals>.<genexpr>  sG       *
 *
C

*
*
 *
 *
 *
 *
 *
r   )r   r   r_   str
ValueErrortype_leading_whitespace_trailing_whitespace_stripped_datar   next	enumeratelenreversed)r   r!   rC   first_non_spacelast_non_spacer   s        r   r   zDataNode.__init__   sH      $$$ 	LJtDzzJJJKKK#% $&! 2::F<<>> 	(,D%F 
 
(
 
 
 
 
 TT *
 *
($88*
 *
 *
 &
 &
 
 $((8(8#9 $($9!"?>#ABr   c                 0    | j          | j         | j         S r   r   r   r   r   s    r   r!   zDataNode.data  s.     ' +)< +(+ +	
r   c                 D    | j         dk    o| j        dk    p
| j        dk    S Nr   )r   r   r   r   s    r   rc   zDataNode.is_whitespace  s/    "b( 
$*Md.G2.M	
r   c                 D    | j         dk    p| j        dk    o
| j        dk    S r   r   r   s    r   ri   zDataNode.startswith_whitespace  s/    '2- 
2%I$*Cr*I	
r   c                 D    | j         dk    p| j        dk    o
| j        dk    S r   )r   r   r   r   s    r   rm   zDataNode.endswith_whitespace  s/    (B. 
2%H$*Bb*H	
r   c                 p    | j         dk    r	d| _         d S | j        dk    r|                                  d S d S r   )r   r   rq   r   s    r   ro   zDataNode.lstrip$  sE    #r))')D$$$ B&&KKMMMMM '&r   c                 p    | j         dk    r	d| _         d S | j        dk    r|                                  d S d S r   )r   r   ro   r   s    r   rq   zDataNode.rstrip*  sE    $**(*D%%% B&&KKMMMMM '&r   c                     dS )z4Noop, ``DataNode.write`` always collapses whitespaceNrN   r   s    r   r[   zDataNode.collapse_whitespace0  s    r   c                     |                     | j                                                  }| j         d                    |           | j         }|dk    r|                    |           d S d S )N r   )translate_wordsr   splitr   joinr   r0   )r   r   wordsstr_datas       r   r    zDataNode.write4  s    ##D$7$=$=$?$?@@' +% +(+ + 	 r>>OOH%%%%% >r   r   )r1   r2   r3   r4   r   propertyr!   rc   ri   rm   ro   rq   r[   r    r5   r6   s   @r   rL   rL      s         C C C C C C, 
 
 X

 
 


 
 


 
 

      & & & & & & &r   rL   N)html.parserr   	itertoolsr   r{   r|   rz   r   r   r   rP   r9   rA   rL   rN   r   r   <module>r      sZ   # " " " " " ! ! ! ! ! !$ - 3 "! "! "! "! "!j "! "! "!J%" %" %" %" %" %" %" %"P" " " " " " " "5( 5( 5( 5( 5(t 5( 5( 5(pM3 M3 M3 M3 M3h M3 M3 M3`H& H& H& H& H&t H& H& H& H& H&r   