
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
6]}%                 @   s   d dgZ yddlmZ W n. ek
rF Z zddlmZ W Y ddZ[X nX ddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZmZ dd	lmZmZmZmZmZmZmZ dd
lmZ dZG dd  d eZG dd deeZdS )LXMLTreeBuilderForXMLLXMLTreeBuilder    )CallableN)BytesIO)StringIO)etree)CommentDoctypeNamespacedAttributeProcessingInstructionXMLProcessingInstruction)FASTHTMLHTMLTreeBuilder
PERMISSIVEParserRejectedMarkupTreeBuilderXML)EncodingDetectorlxmlc               @   s   e Zd ZejZdZeZdZ	dgZ
e	eeeegZdZddiZdd Zdd	 Zd%ddZdd Zd&ddZdd Zdd Zi 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
S )'r   Tzlxml-xmlZxmli   z$http://www.w3.org/XML/1998/namespacec             C   s"   | j d k	r| j S tj| dd|dS )NFT)targetstrip_cdataZrecoverencoding)_default_parserr   	XMLParser)selfr    r   /usr/lib/python3.6/_lxml.pydefault_parser5   s    
z$LXMLTreeBuilderForXML.default_parserc             C   s&   | j |}t|tr"|| d|d}|S )NF)r   r   r   )r   
isinstancer   )r   r   parserr   r   r   
parser_for=   s    

z LXMLTreeBuilderForXML.parser_forNc             C   s,   || _ |d k	rt|| _d | _| jg| _d S )N)r   setempty_element_tagssoupDEFAULT_NSMAPSnsmaps)r   r    r#   r   r   r   __init__F   s
    
zLXMLTreeBuilderForXML.__init__c             C   s0   |d dkr$t |dd  jddS d |fS d S )Nr   {   })tuplesplit)r   tagr   r   r   	_getNsTagP   s    zLXMLTreeBuilderForXML._getNsTagc       	      c   s   | j  }|rt| _nt| _t|tr2|d|dfV  t|trP|jdd|dfV  ||g}t||||}x|jD ]}|j	||dfV  qnW dS )z
        :yield: A series of 4-tuples.
         (markup, encoding, declared encoding,
          has undergone character replacement)

        Each 4-tuple represents a strategy for parsing the document.
        NFutf8)
is_xmlr   processing_instruction_classr   r   strencoder   Z	encodingsmarkup)	r   r4   Zuser_specified_encodingZexclude_encodingsZdocument_declared_encodingZis_htmlZtry_encodingsZdetectorr   r   r   r   prepare_markupX   s    



z$LXMLTreeBuilderForXML.prepare_markupc             C   s   t |trt|}nt |tr&t|}|j| j}y`| j| jj	| _
| j
j| x4t|dkr|j| j}t|dkrR| j
j| qRW | j
j  W n6 tttjfk
r } ztt|W Y d d }~X nX d S )Nr   )r   bytesr   r2   r   read
CHUNK_SIZEr!   r$   original_encodingr    feedlencloseUnicodeDecodeErrorLookupErrorr   ParserErrorr   )r   r4   dataer   r   r   r:   }   s    


zLXMLTreeBuilderForXML.feedc             C   s   | j g| _d S )N)r%   r&   )r   r   r   r   r<      s    zLXMLTreeBuilderForXML.closec             C   s*  t |}d }t|dkr4t| jdkr4| jjd  nht|dkrt dd t|j D }| jj| |j }x,t|j D ]\}}td|d}|||< q|W i }	xVt|j D ]F\}
}| j|
\}}
|d kr||	|
< q| j	|}t||
|}
||	|
< qW |	}| j|\}}| j	|}| j
j|||| d S )Nr   r)   c             s   s   | ]\}}||fV  qd S )Nr   ).0keyvaluer   r   r   	<genexpr>   s    z.LXMLTreeBuilderForXML.start.<locals>.<genexpr>Zxmlnszhttp://www.w3.org/2000/xmlns/)dictr;   r&   appendlistitemscopyr
   r.   _prefix_for_namespacer$   Zhandle_starttag)r   nameZattrsZnsmapnsprefixinverted_nsmapprefix	namespaceZ	attributeZ	new_attrsattrrD   r   r   r   start   s0    



zLXMLTreeBuilderForXML.startc             C   s<   |dkrdS x*t | jD ]}|dk	r||kr|| S qW dS )z9Find the currently active prefix for the given namespace.N)reversedr&   )r   rP   rN   r   r   r   rK      s    z+LXMLTreeBuilderForXML._prefix_for_namespacec             C   s   | j j  | j jd }| j|\}}d }|d k	r^x,t| jD ]}|d k	r<||kr<|| }P q<W | j j|| t| jdkr| jj  d S )Nr)   )	r$   endDataZtagStackr.   rS   r&   Zhandle_endtagr;   pop)r   rL   Zcompleted_tagrP   rM   rN   r   r   r   end   s    
zLXMLTreeBuilderForXML.endc             C   s0   | j j  | j j|d |  | j j| j d S )N )r$   rU   handle_datar1   )r   r   r@   r   r   r   pi   s    
zLXMLTreeBuilderForXML.pic             C   s   | j j| d S )N)r$   rY   )r   contentr   r   r   r@      s    zLXMLTreeBuilderForXML.datac             C   s(   | j j  tj|||}| j j| d S )N)r$   rU   r	   Zfor_name_and_idsZobject_was_parsed)r   rL   Zpubidsystemdoctyper   r   r   r]      s    
zLXMLTreeBuilderForXML.doctypec             C   s&   | j j  | j j| | j jt dS )z#Handle comments as Comment objects.N)r$   rU   rY   r   )r   r[   r   r   r   comment   s    
zLXMLTreeBuilderForXML.commentc             C   s   d| S )zSee `TreeBuilder`.z)<?xml version="1.0" encoding="utf-8"?>
%sr   )r   fragmentr   r   r   test_fragment_to_document   s    z/LXMLTreeBuilderForXML.test_fragment_to_document)NN)NNN)!__name__
__module____qualname__r   r   ZDEFAULT_PARSER_CLASSr0   r   r1   NAMEALTERNATE_NAMESLXMLr   r   r   featuresr8   r%   r   r!   r'   r.   r5   r:   r<   rR   rK   rW   rZ   r@   r]   r^   r`   r   r   r   r   r   #   s2   	

  
#(	c               @   sF   e Zd ZeZdgZeeeeeg Z	dZ
eZdd Zdd Zdd Zd	S )
r   z	lxml-htmlFc             C   s   t jS )N)r   Z
HTMLParser)r   r   r   r   r   r      s    zLXMLTreeBuilder.default_parserc             C   sj   | j j}y&| j|| _| jj| | jj  W n6 tttj	fk
rd } zt
t|W Y d d }~X nX d S )N)r$   r9   r!   r    r:   r<   r=   r>   r   r?   r   r2   )r   r4   r   rA   r   r   r   r:      s    zLXMLTreeBuilder.feedc             C   s   d| S )zSee `TreeBuilder`.z<html><body>%s</body></html>r   )r   r_   r   r   r   r`     s    z)LXMLTreeBuilder.test_fragment_to_documentN)ra   rb   rc   rf   rd   re   r   r   r   rg   r0   r   r1   r   r:   r`   r   r   r   r   r      s   
)__all__collections.abcr   ImportErrorrA   collectionsior   r   r   r   Zbs4.elementr   r	   r
   r   r   Zbs4.builderr   r   r   r   r   r   r   Z
bs4.dammitr   rf   r   r   r   r   r   r   <module>   s   $ L