
[[\9                 @   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 [ Gd d	   d	  Z	 d S)
zShared support for scanning document type declarations in HTML and XHTML.

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

    Nz[a-zA-Z][-_.a-zA-Z0-9]*\s*z(\'[^\']*\'|"[^"]*")\s*z--\s*>z	]\s*]\s*>z]\s*>c               @   s   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d Z	 d d   Z
 d d d  Z d 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)#
ParserBaseziParser 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)Nz)_markupbase.ParserBase must be subclassed)	__class__r   RuntimeError)self r   !/usr/lib/python3.4/_markupbase.py__init__   s    zParserBase.__init__c             C   s   t  d   d  S)Nz.subclasses of ParserBase must override error())NotImplementedError)r   messager   r   r   error    s    zParserBase.errorc             C   s   d |  _  d |  _ d  S)N   r   )linenooffset)r   r   r   r   reset$   s    	zParserBase.resetc             C   s   |  j  |  j f S)z&Return current line number and offset.)r   r   )r   r   r   r   getpos(   s    zParserBase.getposc             C   s   | | k r | S|  j  } | j d | |  } | rm |  j | |  _ | j d | |  } | | d |  _ n |  j | | |  _ | S)N
r   )rawdatacountr   rindexr   )r   ijr   Znlinesposr   r   r   	updatepos0   s    	zParserBase.updatepos c       
      C   st  |  j  } | d } | | |  d k s5 t d   | | | d  d k rW | d S| | | d  d k ru d St |  } | | | d  d k r |  j |  S| | d	 k r |  j |  S|  j | |  \ } } | d
 k  r | S| d k rd |  _ n  xh| | k  ro| | } | d k ro| | d |  } | d k rZ|  j |  n |  j |  | d S| d k rt	 | |  } | sd S| j
   } n | d k r|  j | |  \ }	 } n | |  j k r| d } nv | d	 k rG| d k r|  j | d |  } q\| d k r7|  j d |  q\|  j d  n |  j d | |  | d
 k  r| SqWd S)N   z<!z$unexpected call to parse_declarationr   >-r   z--[r   Zdoctypez"'Z4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZattlistlinktypelinkelementz&unsupported '[' char in %s declarationz"unexpected '[' char in declarationz!unexpected %r char in declaration)r   r   r"   >   r   elementr   linkr"   )r   AssertionErrorlenparse_commentparse_marked_section
_scan_name_decl_othercharsZhandle_declunknown_decl_declstringlit_matchend_parse_doctype_subsetr   )
r   r   r   r   nZdecltypecdatamnamer   r   r   parse_declaration@   sZ    	
"
zParserBase.parse_declarationr   c             C   s  |  j  } | | | d  d k s/ t d   |  j | d |  \ } } | d k  r[ | S| d k r t j | | d  } nD | d k r t j | | d  } n |  j d | | d |   | s d S| r| j d  } |  j | | d |   n  | j	 d  S)N   z<![z)unexpected call to parse_marked_section()r   tempcdataignoreincludercdataifelseendifz+unknown status keyword %r in marked sectionr   >   r:   r6   r7   ignorer9   >   ifelser=   r"   )
r   r%   r)   _markedsectionclosesearch_msmarkedsectioncloser   startr+   r-   )r   r   reportr   ZsectNamer   matchr   r   r   r(      s     	&zParserBase.parse_marked_sectionc             C   s   |  j  } | | | d  d k r3 |  j d  n  t j | | d  } | sS d S| r | j d  } |  j | | d |   n  | j d  S)N   z<!--z"unexpected call to parse_comment()r   r   r"   )r   r   _commentcloserB   rD   Zhandle_commentr-   )r   r   rE   r   rF   r   r   r   r   r'      s    	zParserBase.parse_commentc       
      C   s  |  j  } t |  } | } x| | k  r| | } | d k r| | | d  } | d k rd 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 r1d S| d k re|  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  rH| | j   rH| d } qW| | k  r| | d k ri| S|  j | |  |  j d  qd Sq | j   r| d } q |  j | |  |  j d |  q Wd S)N<r   r   z<!z*unexpected char in internal subset (in %r)rG   z<!--rE   r   r   r!   entitynotationz)unknown declaration %r in internal subsetZ_parse_doctype_%;]r   z%unexpected char after internal subsetz%unexpected char %r in internal subsetr"   r"   r"   r"   r"   >   attlistelementrJ   rK   r"   r"   r"   )r   r&   r   r   r'   r)   getattrisspace)
r   r   declstartposr   r/   r   r0   sr3   methr   r   r   r.      sn    	

z ParserBase._parse_doctype_subsetc             C   s_   |  j  | |  \ } } | d k r( d S|  j } d | | d   k r[ | j d |  d Sd S)Nr   r   r"   r"   r"   )r)   r   find)r   r   rS   r3   r   r   r   r   r   _parse_doctype_element   s    	z!ParserBase._parse_doctype_elementc             C   sB  |  j  } |  j | |  \ } } | | | d  } | d k rE d	 S| d k rY | d Sx|  j | |  \ } } | d k  r | S| | | d  } | d k r d
 S| d k r)d | | d   k r | j d |  d } n d Sx( | | | d  j   r| d } q W| | d   sAd Sn |  j | |  \ } } | | | d  } | s_d S| d k rt | |  } | r| j   } n d S| | | d  } | sd Sn  | d k r'| | d   d k rd S|  j | d |  \ } } | d k  r| S| | | d  } | s'd Sn  | d k r\ | d Sq\ d  S)Nr   r   r   r   ()z'"#r"   r"   r"   r"   r"   r"   r"   r"   r"   )r   r)   rV   rR   r,   r-   )r   r   rS   r   r3   r   r0   r2   r   r   r   _parse_doctype_attlist  sZ    	z!ParserBase._parse_doctype_attlistc             C   s   |  j  | |  \ } } | d k  r( | S|  j } x | | | d  } | sR d S| d k rf | d S| d k r t | |  } | s d S| j   } q4 |  j  | |  \ } } | d k  r4 | Sq4 d  S)Nr   r   r   z'"r"   r"   )r)   r   r,   r-   )r   r   rS   r3   r   r   r0   r2   r   r   r   _parse_doctype_notation=  s$    	z"ParserBase._parse_doctype_notationc             C   s:  |  j  } | | | d  d k rn | d } xD | | | d  } | sN d S| j   rg | d } q0 Pq0 n | } |  j | |  \ } } | d k  r | Sx |  j  | | d  } | s d S| d k r t | |  } | r | j   } q3d Sq | d k r| d S|  j | |  \ } } | d k  r | Sq d  S)	Nr   rL   r   z'"r   r"   r"   r"   )r   rR   r)   r,   r-   )r   r   rS   r   r   r0   r3   r2   r   r   r   _parse_doctype_entityT  s8    	
z ParserBase._parse_doctype_entityc             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)Nr   zexpected name token at %r   r"   )Nr"   r"   )Nr"   )	r   r&   _declname_matchgroupstriplowerr-   r   r   )r   r   rS   r   r/   r2   rT   r3   r   r   r   r)   x  s    		zParserBase._scan_namec             C   s   d  S)Nr   )r   r1   r   r   r   r+     s    zParserBase.unknown_declN)__name__
__module____qualname____doc__r   r   r   r   r   r*   r4   r(   r'   r.   rW   r[   r\   r]   r)   r+   r   r   r   r   r      s"   RC9$r   )
rf   recompilerF   r_   r,   rH   rA   rC   r   r   r   r   r   <module>   s   