
     h'                         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y)    )
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 | _         || _        t        |           y N)treedocsuper__init__)selfr   	__class__s     /home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/botocore/docs/bcdoc/docstringparser.pyr   zDocStringParser.__init__   s    	    c                 b    t        j                  |        t        | j                        | _        y r   )r   resetHTMLTreer   r   r   s    r   r   zDocStringParser.reset"   s     TXX&	r   c                     t         |   |       | j                  j                          t	        | j
                        | _        y r   )r   feedr   writer   r   )r   datar   s     r   r   zDocStringParser.feed&   s-    T		TXX&	r   c                     t         |           | j                  j                          t	        | j
                        | _        y r   )r   closer   r    r   r   )r   r   s    r   r#   zDocStringParser.close+   s*    		TXX&	r   c                 >    | j                   j                  ||       y )N)attrsr   add_tag)r   tagr%   s      r   handle_starttagzDocStringParser.handle_starttag1   s    		#U+r   c                 >    | j                   j                  |d       y )NF)is_startr&   )r   r(   s     r   handle_endtagzDocStringParser.handle_endtag4   s    		#.r   c                 :    | j                   j                  |       y 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                   0    e Zd ZdZd ZddZd Zd Zd Zy)	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 | _        y r   )r   StemNodeheadcurrent_nodeunhandled_tagsr   r   s     r   r   zHTMLTree.__init__B   s&    J	 II r   Nc                     | j                  ||      s| j                  j                  |       y |r/t        ||      }| j                  j                  |       || _        y | j                  j                  | _        y r   )_doc_has_handlerr<   appendTagNoder;   	add_childparent)r   r(   r%   r+   nodes        r   r'   zHTMLTree.add_tagH   sh    $$S(3&&s+3&D''- $D $ 1 1 8 8Dr   c                 \    |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   s0    #C5>L!#<Ltxx~~|44r   c                 L    | j                   j                  t        |             y r   )r;   rB   DataNoder/   s     r   r.   zHTMLTree.add_data\   s    ##HTN3r   c                 N    | j                   j                  | j                         y 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   ;   s     !
954"r   r   c                       e Zd ZddZd Zy)NodeNc                     || _         y 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   s    "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   c                 2    t         |   |       g | _        y r   )r   r   children)r   rC   r   s     r   r   zStemNode.__init__l   s     r   c                 H    | |_         | j                  j                  |       y r   )rC   rV   r@   r   childs     r   rB   zStemNode.add_childp   s    U#r   c                 F    | j                          | j                  |       y r   )collapse_whitespace_write_childrenr=   s     r   r    zStemNode.writet   s      "S!r   c                     t        | j                  | j                  dd        D ];  \  }}t        |t              r||j	                  ||       +|j	                  |       = y )N   )r   rV   
isinstancerA   r    )r   r   rY   
next_childs       r   r\   zStemNode._write_childrenx   sU    !,T]]DMM!"<M!N 	!E:%)j.DC,C 		!r   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr   )is_whitespace.0rY   s     r   	<genexpr>z)StemNode.is_whitespace.<locals>.<genexpr>   s     DU5&&(D   )allrV   r   s    r   rc   zStemNode.is_whitespace   s    DdmmDDDr   c                 X    | j                   xr | j                   d   j                         S )Nr   )rV   startswith_whitespacer   s    r   rj   zStemNode.startswith_whitespace   s#    }}Iq!1!G!G!IIr   c                 X    | j                   xr | j                   d   j                         S N)rV   endswith_whitespacer   s    r   rn   zStemNode.endswith_whitespace   s#    }}Hr!2!F!F!HHr   c                 &   | j                   r[| j                   d   j                         r>| j                   dd  | _         | j                   r| j                   d   j                         r>| j                   r| j                   d   j                          y y )Nr   r^   )rV   rc   lstripr   s    r   rp   zStemNode.lstrip   sm    mma 0 > > @ MM!"-DM mma 0 > > @==MM!##% r   c                 &   | j                   r[| j                   d   j                         r>| j                   d d | _         | j                   r| j                   d   j                         r>| j                   r| j                   d   j                          y y rl   )rV   rc   rstripr   s    r   rr   zStemNode.rstrip   sm    mmb 1 ? ? A MM#2.DM mmb 1 ? ? A==MM"$$& r   c                     | j                          | j                          | j                  D ]  }|j                           y)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)rp   rr   rV   r[   rX   s     r   r[   zStemNode.collapse_whitespace   s5     	]] 	(E%%'	(r   r   )r1   r2   r3   r   rB   r    r\   rc   rj   rn   rp   rr   r[   r5   r6   s   @r   r9   r9   k   s8    $"!EJ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.
    c                 @    t         |   |       || _        || _        y 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                y wr   )r_   rA   rd   s     r   rf   z+TagNode._has_nested_tags.<locals>.<genexpr>   s     I%:eW-Irg   )anyrV   r   s    r   _has_nested_tagszTagNode._has_nested_tags   s    I4==IIIr   c                 x   | j                   t        v xr | j                         }t        | j                  t
              xr0 | j                  j                   t        v xr | j                   t        v }|s|r| j                  |       y | j                  |       | j                  |       | j                  ||       y r   )r(   OMIT_SELF_TAGSry   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    HH&B4+@+@+B 	 t{{G, -#77-,, 	
 "%:  %#S!Z(r   c                 n   | j                   t        v r | j                          | j                          t	        | j
                  dd | j
                  dd       D ]H  \  }}t        |t              s|j                         s(|j                         s9|j                          J t	        | j
                  dd | j
                  dd       D ]H  \  }}t        |t              s|j                         s(|j                         s9|j                          J | j
                  D ]  }|j                           y)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
        Nrm   r^   )r(   HTML_BLOCK_DISPLAY_TAGSrp   rr   ziprV   r_   rL   rn   rj   r[   )r   prevcurnxtrY   s        r   r[   zTagNode.collapse_whitespace   s     88..KKMKKM T]]3B/qr1BC 	ID#4*,,.--/

	 DMM#2.ab0AB 	HC3)++---/

	 ]] 	(E%%'	(r   c                     d| j                    }t        |j                  |      r' t        |j                  |      | j                         y y )NrF   )r(   rH   rI   getattrr%   )r   r   rJ   s      r   r~   zTagNode._write_start   s>    z*399l+,GCII|,TZZ8 ,r   c                     d| j                    }t        |j                  |      r>|dk(  r t        |j                  |      |       y  t        |j                  |              y y )NrG   end_a)r(   rH   rI   r   )r   r   r`   rJ   s       r   r   zTagNode._write_end   sU    dhhZ(399l+w&0		<0<0		<02 ,r   )NNr   )r1   r2   r3   r4   r   ry   r    r[   r~   r   r5   r6   s   @r   rA   rA      s(    
J)" (D9
3r   rA   c                   ^     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.
    c           	         t         |   |       t        |t              st	        dt        |       d      d| _        d| _        d| _        |dk(  ry |j                         r|| _        y t        d t        |      D              }t        |      t        d t        t        |            D              z
  }|d | | _        ||d  | _        ||| | _        y )NzExpecting string type, z given. c              3   H   K   | ]  \  }}|j                         r|  y wr   isspacere   idxchs      r   rf   z$DataNode.__init__.<locals>.<genexpr>  s!      
CbjjlC
   ""c              3   H   K   | ]  \  }}|j                         r|  y wr   r   r   s      r   rf   z$DataNode.__init__.<locals>.<genexpr>  s!      *
C

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__   s     $$6tDzl'JKK#% $&! 2:<<>(,D% 
(
 
 TT *
($8*
 &
 
 $((8#9 $($9!"?>Br   c                 N    | j                    | j                   | j                   S r   r   r   r   r   s    r   r!   zDataNode.data  s1     ''()<)<(=(()+	
r   c                 d    | j                   dk(  xr  | j                  dk7  xs | j                  dk7  S Nr   )r   r   r   r   s    r   rc   zDataNode.is_whitespace  s8    ""b( 
$$*Md.G.G2.M	
r   c                 d    | j                   dk7  xs  | j                  dk(  xr | j                  dk7  S r   r   r   s    r   rj   zDataNode.startswith_whitespace  s8    ''2- 
2%I$*C*Cr*I	
r   c                 d    | j                   dk7  xs  | j                  dk(  xr | j                  dk7  S r   )r   r   r   r   s    r   rn   zDataNode.endswith_whitespace  s8    ((B. 
2%H$*B*Bb*H	
r   c                 r    | j                   dk7  rd| _         y | j                  dk(  r| j                          y y r   )r   r   rr   r   s    r   rp   zDataNode.lstrip$  s4    ##r)')D$  B&KKM 'r   c                 r    | j                   dk7  rd| _         y | j                  dk(  r| j                          y y r   )r   r   rp   r   s    r   rr   zDataNode.rstrip*  s4    $$*(*D%  B&KKM 'r   c                      y)z4Noop, ``DataNode.write`` always collapses whitespaceNrN   r   s    r   r[   zDataNode.collapse_whitespace0  s    r   c                     |j                  | j                  j                               }| j                   dj	                  |       | j
                   }|dk7  r|j                  |       y y )N r   )translate_wordsr   splitr   joinr   r0   )r   r   wordsstr_datas       r   r    zDataNode.write4  sj    ##D$7$7$=$=$?@''(%(9(()+ 	 r>OOH% r   r   )r1   r2   r3   r4   r   propertyr!   rc   rj   rn   rp   rr   r[   r    r5   r6   s   @r   rL   rL      sE    C, 
 






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