3
eb9                 @   sV   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[G d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d S )Nz)_markupbase.ParserBase must be subclassed)	__class__r   RuntimeError)self r   !/usr/lib/python3.6/_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   sb   ||kr|S | j }|jd||}|rN| 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   s  | j }|d }||| dks&td|||d  dkrB|d S |||d  dkrZdS t|}|||d  dkr| j|S || d	kr| j|S | j||\}}|d
k r|S |dkrd| _x||k r|| }|dkr||d | }|dkr| j| n
| j| |d S |dkr@t	||}|s6dS |j
 }n|dkr\| j||\}	}nt|| jkrr|d }n^|d	kr|dkr| j|d |}n$|dkr| jd|  n
| jd n| jd||   |d
k r|S qW d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   r   r!   r    r"   )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 rB|S |dkr\tj||d }n4|dkrvtj||d }n| jd||d |   |sdS |r|jd}| j||d |  |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   >   r6   r5   r4   r8   r7   >   r:   r;   r9   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   sj   | j }|||d  dkr$| jd tj||d }|s<dS |r`|jd}| j||d |  |jdS )N   z<!--z"unexpected call to parse_comment()r   r   r"   )r   r   _commentcloser=   r?   Zhandle_commentr+   )r   r   r@   r   rA   r   r   r   r   r%      s    

zParserBase.parse_commentc       
      C   s4  | j }t|}|}x||k r.|| }|dkr4|||d  }|dkrNdS |dkrt| j||d  | jd|  |d |krdS |d |krdS |||d  dkr| j|dd	}|dk r|S q| j|d |\}}|dkrdS |dkr| j||d  | jd|  t| d| }	|	||}|dk r,|S q|dkr|d |krPdS | j|d |\}}|dk rr|S || dkr,|d }q|dkr|d }x&||k r|| j r|d }qW ||k r|| dkr|S | j|| | jd ndS q|j r|d }q| j|| | jd|  qW dS )N<r   r   z<!z*unexpected char in internal subset (in %r)rB   z<!--r   )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"   >   rE   rF   r   r!   r"   r"   r"   )r   r$   r   r   r%   r'   getattrisspace)
r   r   declstartposr   r-   r   r.   sr1   methr   r   r   r,      sn    











z ParserBase._parse_doctype_subsetc             C   sF   | j ||\}}|dkrdS | j}d||d  krB|jd|d S dS )Nr   r   r"   r"   r"   )r'   r   find)r   r   rL   r1   r   r   r   r   r   _parse_doctype_element   s    z!ParserBase._parse_doctype_elementc             C   s  | j }| j||\}}|||d  }|dkr2d	S |dkrB|d S xv| j||\}}|dk rb|S |||d  }|dkr~d
S |dkrd||d  kr|jd|d }ndS x |||d  j r|d }qW ||d  sdS n| j||\}}|||d  }|s
dS |dkrLt||}|r.|j }ndS |||d  }|sLdS |dkr||d  dkrldS | j|d |\}}|dk r|S |||d  }|sdS |dkrF|d S qFW d S )Nr   r   r   r   ()z'"#r"   r"   r"   r"   r"   r"   r"   r"   r"   )r   r'   rO   rK   r*   r+   )r   r   rL   r   r1   r   r.   r0   r   r   r   _parse_doctype_attlist  sZ    




z!ParserBase._parse_doctype_attlistc             C   s   | j ||\}}|dk r|S | j}xl|||d  }|s<dS |dkrL|d S |dkrpt||}|sfdS |j }q$| j ||\}}|dk r$|S q$W d S )Nr   r   r   z'"r"   r"   )r'   r   r*   r+   )r   r   rL   r1   r   r   r.   r0   r   r   r   _parse_doctype_notation=  s$    

z"ParserBase._parse_doctype_notationc             C   s   | j }|||d  dkrV|d }x6|||d  }|s<dS |j rN|d }q$P q$W n|}| j||\}}|dk rv|S xp| j ||d  }|sdS |dkrt||}|r|j }qdS qx|dkr|d S | j||\}}|dk rx|S qxW d S )	Nr   rG   r   z'"r   r"   r"   r"   )r   rK   r'   r*   r+   )r   r   rL   r   r   r.   r1   r0   r   r   r   _parse_doctype_entityT  s8    


z ParserBase._parse_doctype_entityc             C   s   | j }t|}||krdS t||}|r\|j }|j }|t| |krLd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   rL   r   r-   r0   rM   r1   r   r   r   r'   x  s    
zParserBase._scan_namec             C   s   d S )Nr   )r   r/   r   r   r   r)     s    zParserBase.unknown_declN)r   )r   )__name__
__module____qualname____doc__r   r   r   r   r   r(   r2   r&   r%   r,   rP   rT   rU   rV   r'   r)   r   r   r   r   r      s"   R

C9$r   )
r_   recompilerA   rX   r*   rC   r<   r>   r   r   r   r   r   <module>   s   


