o
    	Jh'                     @   s   d dl mZ d dlmZ dZdZdZdZG dd deZG d	d
 d
Z	G dd dZ
G dd de
ZG dd deZG dd de
ZdS )    )
HTMLParser)zip_longest)codea)spanir   r   )r   b)pnoteullic                       sX   e Zd ZdZ fddZdd Z fddZ fdd	Zd
d Zdd Z	dd Z
  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                    s   d | _ || _t   d S N)treedocsuper__init__selfr   	__class__ /var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/botocore/docs/bcdoc/docstringparser.pyr      s   zDocStringParser.__init__c                 C   s   t |  t| j| _d S r   )r   resetHTMLTreer   r   r   r   r   r   r   "   s   
zDocStringParser.resetc                    s&   t  | | j  t| j| _d S r   )r   feedr   writer   r   r   datar   r   r   r   &   s   
zDocStringParser.feedc                    s$   t    | j  t| j| _d S r   )r   closer   r   r   r   r   r   r   r   r    +   s   

zDocStringParser.closec                 C   s   | j j||d d S )N)attrsr   add_tag)r   tagr!   r   r   r   handle_starttag1      zDocStringParser.handle_starttagc                 C   s   | j j|dd d S )NF)is_startr"   )r   r$   r   r   r   handle_endtag4   r&   zDocStringParser.handle_endtagc                 C   s   | j | d S r   )r   add_datar   r   r   r   handle_data7   s   zDocStringParser.handle_data)__name__
__module____qualname____doc__r   r   r   r    r%   r(   r*   __classcell__r   r   r   r   r      s    r   c                   @   s:   e Zd ZdZdd ZdddZdd	 Zd
d Zd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                 C   s    || _ t | _| j| _g | _d S r   )r   StemNodeheadcurrent_nodeunhandled_tagsr   r   r   r   r   B   s   
zHTMLTree.__init__NTc                 C   sN   |  ||s| j| d S |r t||}| j| || _d S | jj| _d S r   )_doc_has_handlerr3   appendTagNoder2   	add_childparent)r   r$   r!   r'   noder   r   r   r#   H   s   

zHTMLTree.add_tagc                 C   s(   |rd| }nd| }t | jj|S )Nstart_end_)hasattrr   style)r   r$   r'   handler_namer   r   r   r4   T   s   
zHTMLTree._doc_has_handlerc                 C   s   | j t| d S r   )r2   r7   DataNoder   r   r   r   r)   \   r&   zHTMLTree.add_datac                 C   s   | j | j d S r   )r1   r   r   r   r   r   r   r   _   s   zHTMLTree.write)NT)	r+   r,   r-   r.   r   r#   r4   r)   r   r   r   r   r   r   ;   s    
r   c                   @   s   e Zd ZdddZdd ZdS )NodeNc                 C   s
   || _ d S r   )r8   r   r8   r   r   r   r   d   s   
zNode.__init__c                 C   s   t r   )NotImplementedErrorr   r   r   r   r   g   s   z
Node.writer   )r+   r,   r-   r   r   r   r   r   r   r@   c   s    
r@   c                       sf   e Zd Zd fdd	Zdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Z  ZS )r0   Nc                    s   t  | g | _d S r   )r   r   childrenrA   r   r   r   r   l   s   
zStemNode.__init__c                 C   s   | |_ | j| d S r   )r8   rC   r5   r   childr   r   r   r7   p   s   zStemNode.add_childc                 C   s   |    | | d S r   )collapse_whitespace_write_childrenr   r   r   r   r   t   s   zStemNode.writec                 C   sN   t | j| jdd  D ]\}}t|tr|d ur||| q|| qd S )N   )r   rC   
isinstancer6   r   )r   r   rE   
next_childr   r   r   rG   x   s
   zStemNode._write_childrenc                 C      t dd | jD S )Nc                 s   s    | ]}|  V  qd S r   )is_whitespace.0rE   r   r   r   	<genexpr>   s    z)StemNode.is_whitespace.<locals>.<genexpr>)allrC   r   r   r   r   rL      r&   zStemNode.is_whitespacec                 C      | j o	| j d  S )Nr   )rC   startswith_whitespacer   r   r   r   rR      r&   zStemNode.startswith_whitespacec                 C   rQ   N)rC   endswith_whitespacer   r   r   r   rU      r&   zStemNode.endswith_whitespacec                 C   sT   | j r| j d  r| j dd  | _ | j r| j d  s
| j r(| j d   d S d S )Nr   rH   )rC   rL   lstripr   r   r   r   rV         zStemNode.lstripc                 C   sT   | j r| j d  r| j d d | _ | j r| j d  s
| j r(| j d   d S d S rS   )rC   rL   rstripr   r   r   r   rX      rW   zStemNode.rstripc                 C   s(   |    |   | jD ]}|  q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)rV   rX   rC   rF   rD   r   r   r   rF      s
   	

zStemNode.collapse_whitespacer   )r+   r,   r-   r   r7   r   rG   rL   rR   rU   rV   rX   rF   r/   r   r   r   r   r0   k   s    r0   c                       sL   e Zd ZdZd fdd	Zdd ZdddZd	d
 Zdd Zdd Z	  Z
S )r6   zP
    A generic Tag node. It will verify that handlers exist before writing.
    Nc                    s   t  | || _|| _d S r   )r   r   r!   r$   )r   r$   r!   r8   r   r   r   r      s   
zTagNode.__init__c                 C   rK   )Nc                 s   s    | ]}t |tV  qd S r   )rI   r6   rM   r   r   r   rO      s    z+TagNode._has_nested_tags.<locals>.<genexpr>)anyrC   r   r   r   r   _has_nested_tags   s   zTagNode._has_nested_tagsc                 C   sn   | 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_TAGSrZ   rI   r8   r6   PRIORITY_PARENT_TAGSOMIT_NESTED_TAGSrG   _write_start
_write_end)r   r   rJ   prioritize_nested_tagsprioritize_parent_tagr   r   r   r      s   



zTagNode.writec                 C   s   | j tv r|   |   t| jdd | jdd D ]\}}t|tr1| r1|	 r1|  qt| jdd | jdd D ]\}}t|trV| rV|	 rV|  qA| jD ]}|
  qZd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
        NrT   rH   )r$   HTML_BLOCK_DISPLAY_TAGSrV   rX   ziprC   rI   r?   rU   rR   rF   )r   prevcurnxtrE   r   r   r   rF      s0   

&&

zTagNode.collapse_whitespacec                 C   s2   d| j  }t|j|rt|j|| j d S d S )Nr:   )r$   r<   r=   getattrr!   )r   r   r>   r   r   r   r^      s   zTagNode._write_startc                 C   sJ   d| j  }t|j|r#|dkrt|j|| d S t|j|  d S d S )Nr;   end_a)r$   r<   r=   rg   )r   r   rJ   r>   r   r   r   r_      s   zTagNode._write_end)NNr   )r+   r,   r-   r.   r   rZ   r   rF   r^   r_   r/   r   r   r   r   r6      s    
"r6   c                       sf   e Zd ZdZd fdd	Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Z  ZS )r?   z0
    A Node that contains only string data.
    Nc                    s   t  | t|tstdt| dd| _d| _d| _|dkr$d S |	 r-|| _d S t
dd t|D }t|t
dd tt|D  }|d | | _||d  | _||| | _d S )NzExpecting string type, z given. c                 s        | ]\}}|  s|V  qd S r   isspacerN   idxchr   r   r   rO         
z$DataNode.__init__.<locals>.<genexpr>c                 s   rj   r   rk   rm   r   r   r   rO     rp   )r   r   rI   str
ValueErrortype_leading_whitespace_trailing_whitespace_stripped_datarl   next	enumeratelenreversed)r   r   r8   first_non_spacelast_non_spacer   r   r   r      s(   


zDataNode.__init__c                 C   s   | j  | j | j S r   rt   rv   ru   r   r   r   r   r     s   zDataNode.datac                 C   s   | j dko| jdkp| jdkS Nri   )rv   rt   ru   r   r   r   r   rL        
zDataNode.is_whitespacec                 C      | j dkp| jdko| jdkS r~   r}   r   r   r   r   rR     r   zDataNode.startswith_whitespacec                 C   r   r~   )ru   rv   rt   r   r   r   r   rU     r   zDataNode.endswith_whitespacec                 C   .   | j dkr
d| _ d S | jdkr|   d S d S r~   )rt   rv   rX   r   r   r   r   rV   $  
   


zDataNode.lstripc                 C   r   r~   )ru   rv   rV   r   r   r   r   rX   *  r   zDataNode.rstripc                 C   s   dS )z4Noop, ``DataNode.write`` always collapses whitespaceNr   r   r   r   r   rF   0  s   zDataNode.collapse_whitespacec                 C   sD   | | j }| j d| | j }|dkr || d S d S )N ri   )translate_wordsrv   splitrt   joinru   r*   )r   r   wordsstr_datar   r   r   r   4  s   zDataNode.writer   )r+   r,   r-   r.   r   propertyr   rL   rR   rU   rV   rX   rF   r   r/   r   r   r   r   r?      s    
r?   N)html.parserr   	itertoolsr   r\   r]   r[   rb   r   r   r@   r0   r6   r?   r   r   r   r   <module>   s   %(8P