U
    :g                     @   sV   d Z ddlmZmZ ddlmZmZ G dd dZG dd dZG dd	 d	ej	Z	d
S )z
Legacy module - don't use in new code!

html5lib now has its own proper implementation.

This module implements a tree builder for html5lib that generates lxml
html element trees.  This module uses camelCase as it follows the
html5lib style guide.
    )_baseetree)htmlr   c                   @   s   e Zd Zdd ZdS )DocumentTypec                 C   s   || _ || _|| _d S N)namepublicIdsystemId)selfr   r   r	    r   ;/tmp/pip-unpacked-wheel-m1sofc2u/lxml/html/_html5builder.py__init__   s    zDocumentType.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd Zdd ZdS )Documentc                 C   s   d | _ g | _d S r   )_elementTree
childNodesr
   r   r   r   r      s    zDocument.__init__c                 C   s   | j  |j d S r   )r   getrootZaddnext_element)r
   elementr   r   r   appendChild   s    zDocument.appendChildN)r   r   r   r   r   r   r   r   r   r      s   r   c                   @   sZ   e Zd ZeZeZdZdZeZ	dd Z
dd Zdd Zdd	 Zd
d ZdddZdd ZdS )TreeBuilderNc                 O   sD   t jtdd}t jtdd}|j| _|j| _tj	j
| f|| d S )NF)fullTree)etree_buildersgetETreeModuler   r   ElementelementClassCommentcommentClassr   r   r   )r
   argskwargsZhtml_builderZetree_builderr   r   r   r   '   s
    zTreeBuilder.__init__c                 C   s"   t j|  d| _g | _d | _d S )NF)r   r   resetrootInsertedinitialCommentsdoctyper   r   r   r   r#   .   s    zTreeBuilder.resetc                 C   s   | j jS r   )documentr   r   r   r   r   getDocument4   s    zTreeBuilder.getDocumentc                 C   sF   g }| j d j}|jr"||j ||  |jrB||j |S )Nr   )openElementsr   textappendextendgetchildrentail)r
   fragmentr   r   r   r   getFragment7   s    zTreeBuilder.getFragmentc                 C   s   |  |||}|| _d S r   )doctypeClassr&   )r
   r   r   r	   r&   r   r   r   insertDoctypeA   s    zTreeBuilder.insertDoctypec                 C   s(   | j s| j| ntj| || d S r   )r$   r%   r+   r   r   insertComment)r
   dataparentr   r   r   r3   E   s    zTreeBuilder.insertCommentc                 C   s   g }| j r`| j jr`|d| j j  | j jd k	s<| j jd k	rV|d| j j| j jf  |d |d td|}| jD ]}|	t
| q|  | _| | j_| |}||_| jj| | j| d| _d S )Nz<!DOCTYPE %sz PUBLIC "%s" "%s">z<html></html> T)r&   r   r+   r   r	   r   
fromstringjoinr%   Zaddpreviousr   r   documentClassr'   Zgetroottreer   r   r   r   r)   r$   )r
   r   bufrootcommentZroot_elementr   r   r   
insertRootK   s&    




zTreeBuilder.insertRoot)N)r   r   r   r   r:   r   r1   r   r    fragmentClassr   r#   r(   r0   r2   r3   r>   r   r   r   r   r       s   

r   N)
__doc__Zhtml5lib.treebuildersr   r   r   lxmlr   r   r   r   r   r   r   r   <module>   s
   

