File: //usr/lib64/python3.8/__pycache__/_markupbase.cpython-38.pyc
U
    e5d9  �                   @   sV   d Z ddlZe�d�jZe�d�jZe�d�Ze�d�Ze�d�Z[G dd	� d	�Z	dS )
z�Shared 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 Zd ZdZdd� Zdd� Zdd� Zdd	� Zd
d� ZdZ	d
d� Z
d#dd�Zd$dd�Zdd� Z
dd� Zdd� Zdd� Zdd� Zdd� Zd d!� Zd"S )%�
ParserBaseziParser base class which provides some common support methods used
    by the SGML/HTML and XHTML parsers.c                 C   s   | j tkrtd��d S )Nz)_markupbase.ParserBase must be subclassed)�	__class__r   �RuntimeError��self� r   �#/usr/lib64/python3.8/_markupbase.py�__init__   s    
�zParserBase.__init__c                 C   s   t d��d S )Nz.subclasses of ParserBase must override error())�NotImplementedError)r   �messager   r   r   �error    s    �zParserBase.errorc                 C   s   d| _ d| _d S )N�   r   ��lineno�offsetr   r   r   r   �reset$   s    zParserBase.resetc                 C   s   | j | jfS )z&Return current line number and offset.r   r   r   r   r   �getpos(   s    zParserBase.getposc                 C   sb   ||kr|S | j }|�d||�}|rN| j| | _|�d||�}||d  | _n| j| | | _|S )N�
r
   )�rawdata�countr   �rindexr   )r   �i�jr   Znlines�posr   r   r   �	updatepos0   s    zParserBase.updatepos� c           
      C   s�  | j }|d }|||� dks&td��|||d � dkrB|d S |||d � dkrZdS t|�}|||d � dkr�| �|�S || d	kr�| �|�S | �||�\}}|d
k r�|S |dkr�d| _||k �r�|| }|dk�r||d |� }|dk�r| �|� n
| �|� |d S |d
k�r<t	||�}|�s2dS |�
� }n�|dk�rX| �||�\}	}nt|| jk�rn|d }n^|d	k�r�|dk�r�| �|d |�}n$|dk�r�| �d| � n
| �d� n| �d||  � |d
k r�|S q�dS )N�   �<!z$unexpected call to parse_declarationr
   �>)�-r   ���z--�[r   Zdoctyper   z"'Z4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ>   �linktype�attlist�element�linkz&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_othercharsZhandle_decl�unknown_decl�_declstringlit_match�end�_parse_doctype_subsetr   )
r   r   r   r   �nZdecltype�c�data�m�namer   r   r   �parse_declaration@   s\    
�zParserBase.parse_declarationr
   c                 C   s�   | j }|||d � dks"td��| �|d |�\}}|dk rB|S |dkr\t�||d �}n4|dkrvt�||d �}n| �d||d |�  � |s�dS |r�|�d�}| �||d |� � |�	d�S )	N�   z<![z)unexpected call to parse_marked_section()r   >   �rcdata�temp�ignore�cdata�include>   �endif�else�ifz+unknown status keyword %r in marked sectionr    )
r   r&