ó
	Q[c           @   s   d  Z  d d l Z e j d  j Z e j d  j Z e j d  Z e j d  Z e j d  Z [ d e	 f d	     YZ
 d S(
   s  Shared support for scanning document type declarations in HTML and XHTML.

Backported for python-future from Python 3.3. Reason: ParserBase is an
old-style class in the Python 2.7 source of markupbase.py, which I suspect
might be the cause of sporadic unit-test failures on travis-ci.org with
test_htmlparser.py.  The test failures look like this:

    ======================================================================

ERROR: test_attr_entity_replacement (future.tests.test_htmlparser.AttributesStrictTestCase)

----------------------------------------------------------------------

Traceback (most recent call last):
  File "/home/travis/build/edschofield/python-future/future/tests/test_htmlparser.py", line 661, in test_attr_entity_replacement
    [("starttag", "a", [("b", "&><"'")])])
  File "/home/travis/build/edschofield/python-future/future/tests/test_htmlparser.py", line 93, in _run_check
    collector = self.get_collector()
  File "/home/travis/build/edschofield/python-future/future/tests/test_htmlparser.py", line 617, in get_collector
    return EventCollector(strict=True)
  File "/home/travis/build/edschofield/python-future/future/tests/test_htmlparser.py", line 27, in __init__
    html.parser.HTMLParser.__init__(self, *args, **kw)
  File "/home/travis/build/edschofield/python-future/future/backports/html/parser.py", line 135, in __init__
    self.reset()
  File "/home/travis/build/edschofield/python-future/future/backports/html/parser.py", line 143, in reset
    _markupbase.ParserBase.reset(self)

TypeError: unbound method reset() must be called with ParserBase instance as first argument (got EventCollector instance instead)

This module is used as a foundation for the html.parser module.  It has no
documented public API and should not be used directly.

i’’’’Ns   [a-zA-Z][-_.a-zA-Z0-9]*\s*s   (\'[^\']*\'|"[^"]*")\s*s   --\s*>s	   ]\s*]\s*>s   ]\s*>t
   ParserBasec           B   s”   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d Z d   Z	 d d	  Z
 d d
  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   si   Parser base class which provides some common support methods used
    by the SGML/HTML and XHTML parsers.c         C   s"   |  j  t k r t d   n  d  S(   Ns)   _markupbase.ParserBase must be subclassed(   t	   __class__R    t   RuntimeError(   t   self(    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   __init__6   s    c         C   s   t  d   d  S(   Ns.   subclasses of ParserBase must override error()(   t   NotImplementedError(   R   t   message(    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   error;   s    c         C   s   d |  _  d |  _ d  S(   Ni   i    (   t   linenot   offset(   R   (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   reset?   s    	c         C   s   |  j  |  j f S(   s&   Return current line number and offset.(   R   R	   (   R   (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   getposC   s    c         C   s   | | k r | S|  j  } | j d | |  } | rm |  j | |  _ | j d | |  } | | d |  _ n |  j | | |  _ | S(   Ns   
i   (   t   rawdatat   countR   t   rindexR	   (   R   t   it   jR   t   nlinest   pos(    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt	   updateposK   s    	t    c   
      C   sw  |  j  } | d } | | | !d k s2 t d   | | | d !d k rQ | d S| | | d !d k rl d St |  } | | | d !d	 k r |  j |  S| | d
 k r¹ |  j |  S|  j | |  \ } } | d k  rį | S| d k rł d |  _ n  xw| | k  rr| | } | d k r`| | d | !} | d k rK|  j |  n |  j |  | d S| d k rt	 | |  } | sd S| j
   } nĖ | d k r»|  j | |  \ }	 } n¤ | |  j k r×| d } n | d
 k rJ| d k r|  j | d |  } q_| t d d d d g  k r:|  j d |  q_|  j d  n |  j d | |  | d k  rü | Sqü Wd S(   Ni   s   <!s$   unexpected call to parse_declarationi   t   >t   -R   i’’’’s   --t   [i    t   doctypes   "'t4   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZt   attlistt   linktypet   linkt   elements&   unsupported '[' char in %s declarations"   unexpected '[' char in declarations!   unexpected %r char in declaration(   R   R   (   R   t   AssertionErrort   lent   parse_commentt   parse_marked_sectiont
   _scan_namet   _decl_othercharst   handle_declt   unknown_declt   _declstringlit_matcht   endt   _parse_doctype_subsett   setR   (
   R   R   R   R   t   nt   decltypet   ct   datat   mt   name(    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   parse_declaration[   sZ    	

i   c         C   s)  |  j  } | | | d !d k s, t d   |  j | d |  \ } } | d k  rX | S| t d d d d d	 g  k r t j | | d  } nP | t d
 d d g  k rĘ t j | | d  } n |  j d | | d | ! | sģ d S| r| j d  } |  j	 | | d | ! n  | j
 d  S(   Ni   s   <![s)   unexpected call to parse_marked_section()i    t   tempt   cdatat   ignoret   includet   rcdatat   ift   elset   endifs+   unknown status keyword %r in marked sectioni’’’’(   R   R   R"   R)   t   _markedsectioncloset   searcht   _msmarkedsectioncloseR   t   startR%   R'   (   R   R   t   reportR   t   sectNameR   t   match(    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyR!   ­   s     	#!c         C   s   |  j  } | | | d !d k r0 |  j d  n  t j | | d  } | sP d S| r | j d  } |  j | | d | ! n  | j d  S(   Ni   s   <!--s"   unexpected call to parse_comment()i’’’’i    (   R   R   t   _commentcloseR:   R<   t   handle_commentR'   (   R   R   R=   R   R?   R   (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyR    Ć   s    	c   
      C   sŽ  |  j  } t |  } | } x¼| | k  rŁ| | } | d k r¦| | | d !} | d k ra d S| d k r |  j | | d  |  j d |  n  | d | k r© d S| d | k r½ d S| | | d !d k r’ |  j | d	 d
 } | d
 k  r | Sq n  |  j | d |  \ } } | d k r+d S| t d d d d g  k rq|  j | | d  |  j d |  n  t |  d |  }	 |	 | |  } | d
 k  rÖ| Sq | d k r| d | k rĘd S|  j | d |  \ } } | d
 k  rņ| S| | d k rÖ| d } qÖq | d k r| d } x* | | k  rT| | j   rT| d } q+W| | k  r| | d k ru| S|  j | |  |  j d  qÖd Sq | j   rµ| d } q |  j | |  |  j d |  q Wd S(   Nt   <i   i’’’’s   <!i   s*   unexpected char in internal subset (in %r)i   s   <!--R=   i    R   R   t   entityt   notations)   unknown declaration %r in internal subsett   _parse_doctype_t   %t   ;t   ]R   s%   unexpected char after internal subsets%   unexpected char %r in internal subset(	   R   R   R   R   R    R"   R)   t   getattrt   isspace(
   R   R   t   declstartposR   R*   R   R,   t   sR/   t   meth(    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyR(   Ń   sn    	

c         C   sY   |  j  | |  \ } } | d k r( d S|  j } d | | k rU | j d |  d Sd S(   Ni’’’’R   i   (   R"   R   t   find(   R   R   RK   R/   R   R   (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   _parse_doctype_element  s    	c         C   s  |  j  } |  j | |  \ } } | | | d !} | d k rB d S| d k rV | d SxĀ|  j | |  \ } } | d k  r | S| | | d !} | d k r¢ d S| d k rd | | k r× | j d |  d } n d Sx% | | | d !j   r| d } qŽ W| | s,d Sn |  j | |  \ } } | | | d !} | sGd S| d k rt | |  } | rw| j   } n d S| | | d !} | sd Sn  | d	 k r| | d	 k r¹d S|  j | d |  \ } } | d k  rå| S| | | d !} | sd Sn  | d k rY | d SqY Wd  S(
   Ni   R   i’’’’R   i    t   (t   )s   '"t   #(   R   R"   RN   RJ   R&   R'   (   R   R   RK   R   R/   R   R,   R.   (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   _parse_doctype_attlist  sZ    	
c         C   sĒ   |  j  | |  \ } } | d k  r( | S|  j } x | | | d !} | sO d S| d k rc | d S| d k r t | |  } | s d S| j   } q4 |  j  | |  \ } } | d k  r4 | Sq4 Wd  S(   Ni    i   i’’’’R   s   '"(   R"   R   R&   R'   (   R   R   RK   R/   R   R   R,   R.   (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   _parse_doctype_notationX  s$    	c         C   s3  |  j  } | | | d !d k ri | d } xB | | | d !} | sH d S| j   ra | d } q- Pq- Wn | } |  j | |  \ } } | d k  r | Sx |  j  | | d !} | sø d S| d k rļ t | |  } | rč | j   } q+d Sq | d k r| d S|  j | |  \ } } | d k  r | Sq Wd  S(   Ni   RF   i’’’’i    s   '"R   (   R   RJ   R"   R&   R'   (   R   R   RK   R   R   R,   R/   R.   (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   _parse_doctype_entityo  s8    	
c         C   s²   |  j  } t |  } | | k r% d St | |  } | r | j   } | j   } | t |  | k rl d S| j   | j   f S|  j | |  |  j	 d | | | d ! d  S(   Ni’’’’s   expected name token at %ri   (   Ni’’’’(   Ni’’’’(
   R   R   t   Nonet   _declname_matcht   groupt   stript   lowerR'   R   R   (   R   R   RK   R   R*   R.   RL   R/   (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyR"     s    		c         C   s   d  S(   N(    (   R   R-   (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyR%   „  s    (   t   __name__t
   __module__t   __doc__R   R   R
   R   R   R#   R0   R!   R    R(   RO   RS   RT   RU   R"   R%   (    (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyR    2   s"   						R	C		9		$	(   R]   t   ret   compileR?   RW   R&   R@   R9   R;   t   objectR    (    (    (    s;   lib/python2.7/site-packages/future/backports/_markupbase.pyt   <module>!   s   