

_V#                 @   s   d  d l  Z  d  d l Z d  d l m Z d  d l m Z e j Z e d k  Z	 y e j
 Z
 Wn( e k
 r Gd d   d e  Z
 Yn Xe	 s e j r Gd	 d
   d
 e j  Z q e j Z n( e  j d  Z Gd d
   d
 e j  Z d S)    N)six)html_parser         c               @   s   e  Z d  Z d S)HTMLParseErrorN)__name__
__module____qualname__ r   r   :/tmp/pip-build-ghmbqnp_/Django/django/utils/html_parser.pyr      s   r   c               @   s%   e  Z d  Z d Z d d d  Z d S)
HTMLParserzExplicitly set convert_charrefs to be False.

            This silences a deprecation warning on Python 3.4, but we can't do
            it at call time because Python 2.7 does not have the keyword
            argument.
            Fc             K   s   t  j j |  d | | d  S)Nconvert_charrefs)_html_parserr   __init__)selfr   kwargsr   r   r   r      s    zHTMLParser.__init__N)r   r	   r
   __doc__r   r   r   r   r   r      s   r   z(([a-zA-Z][-.a-zA-Z0-9:_]*)(?:\s|/(?!>))*c               @   sR   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d S)r   zt
        Patched version of stdlib's HTMLParser with patch from:
        http://bugs.python.org/issue670664
        c             C   s   t  j j |   d  |  _ d  S)N)r   r   r   	cdata_tag)r   r   r   r   r   '   s    zHTMLParser.__init__c             C   sZ   y t  j |  _ Wn4 t k
 rF t j d | j   t j  |  _ Yn X| j   |  _ d  S)Nz</\s*%s\s*>)	r   Zinteresting_cdatainterestingAttributeErrorrecompilelowerIr   )r   tagr   r   r   set_cdata_mode+   s
    'zHTMLParser.set_cdata_modec             C   s   t  j |  _ d  |  _ d  S)N)r   interesting_normalr   r   )r   r   r   r   clear_cdata_mode2   s    zHTMLParser.clear_cdata_modec             C   s  d  |  _  |  j |  } | d k  r( | S|  j } | | |  |  _  g  } t j | | d  } | sr t d   | j   } | j d  j   |  _	 } x| | k  rt
 j j | |  } | s Pn  | j d d d  \ }	 }
 } |
 s d  } ns | d  d  d k o | d d   k n sU| d  d  d k oP| d d   k n rh| d d  } n  | r|  j |  } n  | j |	 j   | f  | j   } q W| | |  j   } | d k rb|  j   \ } } d
 |  j  k r$| |  j  j d
  } t |  j   |  j  j d
  } n | t |  j   } |  j d | | |  d  d  f  n  | j d	  r|  j | |  n/ |  j | |  | |  j k r|  j |  n  | S)Nr      z#unexpected call to parse_starttag()r   r   '">/>
z junk characters in start tag: %r   r&   r&   )r"   r#   )_HTMLParser__starttag_textcheck_for_whole_start_tagrawdatatagfindmatchAssertionErrorendgroupr   lasttagr   attrfindunescapeappendstripgetposcountlenrfinderrorendswithhandle_startendtaghandle_starttagCDATA_CONTENT_ELEMENTSr   )r   iendposr)   attrsr+   kr   mattrnamerest	attrvaluer-   linenooffsetr   r   r   parse_starttag7   sR    			00	"zHTMLParser.parse_starttagc             C   s<  |  j  } | | | d  d k s/ t d   t j j | | d  } | sR d S| j   } t j j | |  } | s |  j d  k	 r |  j	 | | |   | S|  j
 d | | |  f  n  | j d  j   } |  j d  k	 r| j   |  j k r|  j	 | | |   | Sn  |  j | j    |  j   | S)Nr   z</zunexpected call to parse_endtagr   zbad end tag: %rr&   )r)   r,   r   	endendtagsearchr-   
endtagfindr+   r   handle_datar8   r.   r3   r   handle_endtagr   )r   r=   r)   r+   jr   r   r   r   parse_endtagj   s(    	&!
zHTMLParser.parse_endtagN)	r   r	   r
   r   r   r   r   rG   rN   r   r   r   r   r   "   s   3)r   r   r   )r   sysZdjango.utilsr   Zdjango.utils.six.movesr   r   version_infoZcurrent_versionZuse_workaroundr   r   	ExceptionPY3r   r   r*   r   r   r   r   <module>   s   		
