U
    wy]9                     @   sV   d Z ddlZedjZedjZedZedZe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   H/home/stadmin/Documents/SimTableSoftware/Python-3.8.0/Lib/_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offsetr   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   getpos(   s    zParserBase.getposc                 C   sb   ||kr|S | j }|d||}|rN| 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| |S || d	kr| |S | ||\}}|d
k r|S |dkrd| _||k r|| }|dkr||d | }|dkr| | n
| | |d S |dkr<t	||}|s2dS |
 }n|dkrX| ||\}	}nt|| jkrn|d }n^|d	kr|dkr| |d |}n$|dkr| d|  n
| d n| d||   |d
k r|S qdS )N   <!z$unexpected call to parse_declarationr   >)-r   z--[r   doctyper   z"'Z4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ>   linkelementlinktypeattlistz&unsupported '[' char in %s declarationz"unexpected '[' char in declarationz!unexpected %r char in declaration)r   AssertionErrorlenparse_commentparse_marked_section
_scan_name_decl_othercharshandle_declunknown_decl_declstringlit_matchend_parse_doctype_subsetr   )
r   r   r   r   nZdecltypecdatamnamer   r   r   parse_declaration@   s\    














zParserBase.parse_declarationr   c                 C   s   | j }|||d  dks"td| |d |\}}|dk rB|S |dkr\t||d }n4|dkrvt||d }n| d||d |   |sdS |r|d}| ||d |  |	dS )	N   z<![z)unexpected call to parse_marked_section()r   >   tempcdataincludercdataignore>   elseendififz+unknown status keyword %r in marked sectionr    )
r   r'   r+   _markedsectionclosesearch_msmarkedsectioncloser   startr.   r0   )r   r   reportr   ZsectNamer   matchr   r   r   r*      s     
zParserBase.parse_marked_sectionc                 C   sj   | j }|||d  dkr$| d t||d }|s<dS |r`|d}| ||d |  |dS )N   <!--z"unexpected call to parse_comment()r    r   )r   r   _commentcloserB   rD   handle_commentr0   )r   r   rE   r   rF   r   r   r   r   r)      s    

zParserBase.parse_commentc           
      C   s*  | j }t|}|}||k r&|| }|dkr0|||d  }|dkrJdS |dkrp| ||d  | d|  |d |krdS |d |krdS |||d  dkr| j|d	d
}|d	k r|S q| |d |\}}|dkrdS |dkr| ||d  | d|  t| d| }	|	||}|d	k r$|S q|dkr|d |krLdS | |d |\}}|d	k rn|S || dkr$|d }q|dkr|d }||k r||  r|d }q||k r|| dkr|S | || | d ndS q| r
|d }q| || | d|  qdS )N<r   r    r   r   z*unexpected char in internal subset (in %r)rG   rH   r   )rE   >   r$   notationentityr&   z)unknown declaration %r in internal subsetZ_parse_doctype_%;]r   z%unexpected char after internal subsetz%unexpected char %r in internal subset)r   r(   r   r   r)   r+   getattrisspace)
r   r   declstartposr   r2   r   r3   sr6   methr   r   r   r1      sp    











z ParserBase._parse_doctype_subsetc                 C   sF   |  ||\}}|dkrdS | j}d||d  krB|d|d S dS )Nr    r   r   )r+   r   find)r   r   rS   r6   r   r   r   r   r   _parse_doctype_element   s    z!ParserBase._parse_doctype_elementc                 C   s  | j }| ||\}}|||d  }|dkr2dS |dkrB|d S | ||\}}|dk r^|S |||d  }|dkrzdS |dkrd||d  kr|d|d }ndS |||d   r|d }q||d  sdS n| ||\}}|||d  }|sdS |dkrDt||}|r&| }ndS |||d  }|sDdS |d	kr||d  d	krddS | |d |\}}|dk r|S |||d  }|sdS |dkrB|d S qBd S )
Nr   r   r    r   r   ()'"#)r   r+   rV   rR   r/   r0   )r   r   rS   r   r6   r   r3   r5   r   r   r   _parse_doctype_attlist  sX    





z!ParserBase._parse_doctype_attlistc                 C   s   |  ||\}}|dk r|S | j}|||d  }|s:dS |dkrJ|d S |dkrnt||}|sddS | }q"|  ||\}}|dk r"|S q"d S )Nr   r   r    r   rZ   )r+   r   r/   r0   )r   r   rS   r6   r   r   r3   r5   r   r   r   _parse_doctype_notation=  s"    

z"ParserBase._parse_doctype_notationc                 C   s   | j }|||d  dkrR|d }|||d  }|s:dS | rP|d }q"qVq"n|}| ||\}}|dk rr|S | j ||d  }|sdS |dkrt||}|r| }qdS qr|dkr|d S | ||\}}|dk rr|S qrd S )Nr   rN   r    r   rZ   r   )r   rR   r+   r/   r0   )r   r   rS   r   r   r3   r6   r5   r   r   r   _parse_doctype_entityT  s4    


z ParserBase._parse_doctype_entityc                 C   s   | j }t|}||krdS t||}|r\| }| }|t| |krLdS | | fS | || | d|||d    d S )N)Nr    zexpected name token at %r   )	r   r(   _declname_matchgroupstriplowerr0   r   r   )r   r   rS   r   r2   r5   rT   r6   r   r   r   r+   x  s    
zParserBase._scan_namec                 C   s   d S )Nr   )r   r4   r   r   r   r.     s    zParserBase.unknown_declN)r   )r   )__name__
__module____qualname____doc__r	   r   r   r   r   r,   r7   r*   r)   r1   rW   r\   r]   r^   r+   r.   r   r   r   r   r      s"   R

C9$r   )
rg   recompilerF   r`   r/   rI   rA   rC   r   r   r   r   r   <module>   s   


