o
    ˷e                     @   s   d dl mZ G dd dejjj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
G dd deZdS )    )sixc                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
d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                 C   s    d | _ || _tjjj|  d S N)treedocr   moveshtml_parser
HTMLParser__init__selfr    r   Z/var/www/ideatree/venv/lib/python3.10/site-packages/botocore/docs/bcdoc/docstringparser.pyr
      s   zDocStringParser.__init__c                 C   s    t jjj|  t| j| _d S r   )r   r   r   r	   resetHTMLTreer   r   r   r   r   r   r      s   zDocStringParser.resetc                 C   s,   t jjj| | | j  t| j| _d S r   )	r   r   r   r	   feedr   writer   r   r   datar   r   r   r       s   
zDocStringParser.feedc                 C   s*   t jjj|  | j  t| j| _d S r   )	r   r   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_starttag,      zDocStringParser.handle_starttagc                 C   s   | j j|dd d S )NF)is_startr   )r   r   r   r   r   handle_endtag/   r   zDocStringParser.handle_endtagc                 C   s   | j | d S r   )r   add_datar   r   r   r   handle_data2      zDocStringParser.handle_dataN)__name__
__module____qualname____doc__r
   r   r   r   r   r   r    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
   =   s   
zHTMLTree.__init__NTc                 C   s`   |  ||s| j| d S |r)|dkrt|}nt||}| j| || _d S | jj| _d S Nli)_doc_has_handlerr)   appendLineItemNodeTagNoder(   	add_childparent)r   r   r   r   noder   r   r   r   C   s   


zHTMLTree.add_tagc                 C   s$   |rd| }nd| }t | jj|S )Nstart_%send_%s)hasattrr   style)r   r   r   handler_namer   r   r   r,   R   s   
zHTMLTree._doc_has_handlerc                 C   s   | j t| d S r   )r(   r0   DataNoder   r   r   r   r   Z   r   zHTMLTree.add_datac                 C   s   | j | j d S r   )r'   r   r   r   r   r   r   r   ]   s   zHTMLTree.write)NT)	r"   r#   r$   r%   r
   r   r,   r   r   r   r   r   r   r   6   s    
r   c                   @   s   e Zd ZdddZdd ZdS )NodeNc                 C   s
   || _ d S r   )r1   r   r1   r   r   r   r
   b   s   
zNode.__init__c                 C   s   t r   )NotImplementedErrorr   r   r   r   r   e   s   z
Node.writer   )r"   r#   r$   r
   r   r   r   r   r   r9   a   s    
r9   c                       s6   e Zd Zd
 fdd	Zdd Zdd Zdd	 Z  ZS )r&   Nc                    s   t  | g | _d S r   )superr
   childrenr:   	__class__r   r   r
   j   s   
zStemNode.__init__c                 C   s   | |_ | j| d S r   )r1   r=   r-   )r   childr   r   r   r0   n   s   zStemNode.add_childc                 C   s   |  | d S r   )_write_childrenr   r   r   r   r   r   s   zStemNode.writec                 C   s   | j D ]}|| qd S r   )r=   r   )r   r   r@   r   r   r   rA   u   s   
zStemNode._write_childrenr   )r"   r#   r$   r
   r0   r   rA   __classcell__r   r   r>   r   r&   i   s
    r&   c                       s:   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Z  ZS )r/   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   r1   r>   r   r   r
      s   
zTagNode.__init__c                 C   s"   |  | | | | | d S r   )_write_startrA   
_write_endr   r   r   r   r      s   

zTagNode.writec                 C   s0   d| j  }t|j|rt|j|| j d S d S )Nr3   )r   r5   r6   getattrr   r   r   r7   r   r   r   rC      s   
zTagNode._write_startc                 C   s,   d| j  }t|j|rt|j|  d S d S )Nr4   )r   r5   r6   rE   rF   r   r   r   rD      s   
zTagNode._write_endNN)	r"   r#   r$   r%   r
   r   rC   rD   rB   r   r   r>   r   r/   z   s    r/   c                       s2   e Zd Zd fdd	Z fddZdd Z  ZS )	r.   Nc                    s   t  d|| d S r*   )r<   r
   )r   r   r1   r>   r   r   r
      r   zLineItemNode.__init__c                    s   |  |  t | d S r   )_lstripr<   r   r   r>   r   r   r      s   
zLineItemNode.writec                 C   sD   |j D ]}t|tr|  |jr dS q| |}|r dS qdS )z
        Traverses the tree, stripping out whitespace until text data is found
        :param node: The node to strip
        :return: True if non-whitespace data was found, False otherwise
        TF)r=   
isinstancer8   lstripr   rH   )r   r2   r@   foundr   r   r   rH      s   


zLineItemNode._lstriprG   )r"   r#   r$   r
   r   rH   rB   r   r   r>   r   r.      s    r.   c                       s2   e Zd ZdZd	 fdd	Zdd Zdd Z  ZS )
r8   z0
    A Node that contains only string data.
    Nc                    s0   t  | t|tstdt| || _d S )Nz Expecting string type, %s given.)r<   r
   rI   str
ValueErrortyper   )r   r   r1   r>   r   r   r
      s   

zDataNode.__init__c                 C   s   | j  | _ d S r   )r   rJ   r   r   r   r   rJ      r!   zDataNode.lstripc                 C   s`   | j sd S | j  rd}n| j d  }| j  }||}d|}|r)|d7 }|| d S )N )r   isspacesplittranslate_wordsjoinr    )r   r   str_data	end_spacewordsr   r   r   r      s   



zDataNode.writer   )r"   r#   r$   r%   r
   rJ   r   rB   r   r   r>   r   r8      s
    r8   N)botocore.compatr   r   r   r	   r   r   r9   r&   r/   r.   r8   r   r   r   r   <module>   s   &+