509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
¹'¾Yº!  ã            $   @   sp  d Z ddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZmZ yeZW n ek
rp   eefZY nX yddlmZ W n  ek
r¢   ddlmZ Y nX yddlmZ W n  ek
rÔ   ddlmZ Y nX G d	d
„ d
eƒZyddlmZ W n ek
�r   Y nX G dd„ deƒZeƒ Zdd„ Zddd„Zddd„Zddd„Zd dd„Z d!dd„Z!dd„ Z"eƒ Z#dS )"z?
An interface to html5lib that mimics the lxml.html interface.
é    N)Ú
HTMLParser)ÚTreeBuilder)Úetree)ÚElementÚXHTML_NAMESPACEÚ_contains_block_level_tag)Úurlopen)Úurlparsec               @   s   e Zd ZdZddd„ZdS )r   z*An html5lib HTML parser with lxml as tree.Fc             K   s   t j| f|tdœ|—Ž d S )N)ÚstrictÚtree)Ú_HTMLParserÚ__init__r   )Úselfr
   Úkwargs© r   ú#/usr/lib64/python3.6/html5parser.pyr      s    zHTMLParser.__init__N)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r      s   r   )ÚXHTMLParserc               @   s   e Zd ZdZddd„ZdS )r   z+An html5lib XHTML Parser with lxml as tree.Fc             K   s   t j| f|tdœ|—Ž d S )N)r
   r   )Ú_XHTMLParserr   r   )r   r
   r   r   r   r   r   *   s    zXHTMLParser.__init__N)F)r   r   r   r   r   r   r   r   r   r   '   s   r   c             C   s(   | j |ƒ}|d k	r|S | j dt|f ƒS )Nz{%s}%s)Úfindr   )r   ÚtagÚelemr   r   r   Ú	_find_tag0   s    
r   c             C   sZ   t | tƒstdƒ‚|dkrt}i }|dkr8t | tƒr8d}|dk	rH||d< |j| f|Žjƒ S )zÍ
    Parse a whole document into a string.

    If `guess_charset` is true, or if the input is not Unicode but a
    byte string, the `chardet` library will perform charset guessing
    on the string.
    zstring requiredNTÚ
useChardet)Ú
isinstanceÚ_stringsÚ	TypeErrorÚhtml_parserÚbytesÚparseZgetroot)ÚhtmlÚguess_charsetÚparserÚoptionsr   r   r   Údocument_fromstring7   s    
r'   Fc             C   s–   t | tƒstdƒ‚|dkrt}i }|dkr8t | tƒr8d}|dk	rH||d< |j| df|Ž}|r’t |d tƒr’|r’|d jƒ rŒtjd|d  ƒ‚|d= |S )a`  Parses several HTML elements, returning a list of elements.

    The first item in the list may be a string.  If no_leading_text is true,
    then it will be an error if there is leading text, and it will always be
    a list of only elements.

    If `guess_charset` is true, the `chardet` library will perform charset
    guessing on the string.
    zstring requiredNFr   Údivr   zThere is leading text: %r)	r   r   r   r    r!   ZparseFragmentÚstripr   ÚParserError)r#   Úno_leading_textr$   r%   r&   Zchildrenr   r   r   Úfragments_fromstringO   s"    
r,   c             C   sÌ   t | tƒstdƒ‚t|ƒ}t| ||| d�}|rvt |tƒs>d}t|ƒ}|rrt |d tƒrh|d |_|d= |j|ƒ |S |s„tj	dƒ‚t
|ƒdkrštj	dƒ‚|d }|jrÂ|jjƒ rÂtj	d|j ƒ‚d	|_|S )
aÂ  Parses a single HTML element; it is an error if there is more than
    one element, or if anything but whitespace precedes or follows the
    element.

    If 'create_parent' is true (or is a tag name) then a parent node
    will be created to encapsulate the HTML in a single element.  In
    this case, leading or trailing text is allowed.

    If `guess_charset` is true, the `chardet` library will perform charset
    guessing on the string.
    zstring required)r$   r%   r+   r(   r   zNo elements foundé   zMultiple elements foundzElement followed by text: %rN)r   r   r   Úboolr,   r   ÚtextÚextendr   r*   ÚlenÚtailr)   )r#   Zcreate_parentr$   r%   Zaccept_leading_textÚelementsZnew_rootÚresultr   r   r   Úfragment_fromstringq   s2    






r5   c             C   sä   t | tƒstdƒ‚t| ||d�}| dd… }t |tƒrB|jddƒ}|jƒ jƒ }|jdƒsb|jdƒrf|S t	|d	ƒ}t
|ƒr||S t	|d
ƒ}t
|ƒdkrÊ|j s¦|jjƒ  rÊ|d j sÂ|d jjƒ  rÊ|d S t|ƒrÚd|_nd|_|S )a   Parse the html, returning a single element/document.

    This tries to minimally parse the chunk of text, without knowing if it
    is a fragment or a document.

    'base_url' will set the document's base_url attribute (and the tree's
    docinfo.URL)

    If `guess_charset` is true, or if the input is not Unicode but a
    byte string, the `chardet` library will perform charset guessing
    on the string.
    zstring required)r%   r$   Né2   ÚasciiÚreplacez<htmlz	<!doctypeÚheadÚbodyr-   r   r(   Úspanéÿÿÿÿr<   )r   r   r   r'   r!   ÚdecodeÚlstripÚlowerÚ
startswithr   r1   r/   r)   r2   r   r   )r#   r$   r%   ÚdocÚstartr9   r:   r   r   r   Ú
fromstring�   s*    



 rC   c             C   sz   |dkrt }t| tƒs(| }|dkr\d}n4t| ƒrFt| ƒ}|dkr\d}nt| dƒ}|dkr\d}i }|rl||d< |j|f|ŽS )a*  Parse a filename, URL, or file-like object into an HTML document
    tree.  Note: this returns a tree, not an element.  Use
    ``parse(...).getroot()`` to get the document root.

    If ``guess_charset`` is true, the ``useChardet`` option is passed into
    html5lib to enable character detection.  This option is on by default
    when parsing from URLs, off by default when parsing from file(-like)
    objects (which tend to return Unicode more often than not), and on by
    default when parsing from a file path (which is read in binary mode).
    NFTÚrbr   )r    r   r   Ú_looks_like_urlr   Úopenr"   )Zfilename_url_or_filer$   r%   Úfpr&   r   r   r   r"   Ó   s"    

r"   c             C   s@   t | ƒd }|sdS tjdkr8|tjkr8t|ƒdkr8dS dS d S )Nr   FZwin32r-   T)r	   ÚsysÚplatformÚstringZascii_lettersr1   )ÚstrÚschemer   r   r   rE   ÷   s    

rE   )NN)FNN)FNN)NN)NN)$r   rH   rJ   Zhtml5libr   r   Z html5lib.treebuilders.etree_lxmlr   Zlxmlr   Z	lxml.htmlr   r   r   Z
basestringr   Ú	NameErrorr!   rK   Zurllib2r   ÚImportErrorZurllib.requestr	   Zurllib.parser   r   Zxhtml_parserr   r'   r,   r5   rC   r"   rE   r    r   r   r   r   Ú<module>   sF   
 
! 
+
6
$