U e5d9�@sVdZddlZe�d�jZe�d�jZe�d�Ze�d�Ze�d�Z[Gdd �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�eZdZdZdd�Zdd�Zdd�Zdd �Zd d �Zd Z d d�Z d#dd�Z d$dd�Z dd�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.cCs|jtkrtd��dS)Nz)_markupbase.ParserBase must be subclassed)� __class__r� RuntimeError��self�r�#/usr/lib64/python3.8/_markupbase.py�__init__s �zParserBase.__init__cCs td��dS)Nz.subclasses of ParserBase must override error())�NotImplementedError)r�messagerrr�error s�zParserBase.errorcCsd|_d|_dS)N�r��lineno�offsetrrrr�reset$szParserBase.resetcCs |j|jfS)z&Return current line number and offset.rrrrr�getpos(szParserBase.getposcCsb||kr |S|j}|�d||�}|rN|j||_|�d||�}||d|_n|j|||_|S)N� r )�rawdata�countr�rindexr)r�i�jrZnlines�posrrr� updatepos0s zParserBase.updatepos�c Cs�|j}|d}|||�dks&td��|||d�dkrB|dS|||d�dkrZdSt|�}|||d�dkr�|�|�S||d kr�|�|�S|�||�\}}|d kr�|S|d kr�d |_||k�r�||}|dk�r||d|�}|d k�r|�|�n |�|�|dS|d k�r)�-r�����z--�[rZdoctyperz"'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_othercharsZ handle_decl� unknown_decl�_declstringlit_match�end�_parse_doctype_subsetr ) rrrr�nZdecltype�c�data�m�namerrr�parse_declaration@s\                    �zParserBase.parse_declarationr cCs�|j}|||d�dks"td��|�|d|�\}}|dkrB|S|dkr\t�||d�}n4|dkrvt�||d�}n|�d||d|��|s�dS|r�|�d�}|�||d|��|� d�S) N�z�rcdata�temp�ignore�cdata�include>�endif�else�ifz+unknown status keyword %r in marked sectionr ) rr&r*�_markedsectionclose�search�_msmarkedsectioncloser �startr,r.)rr�reportrZsectNamer�matchrrrr)�s  zParserBase.parse_marked_sectioncCsj|j}|||d�dkr$|�d�t�||d�}|sr$r#�notation�entityz)unknown declaration %r in internal subsetZ_parse_doctype_�%�;�]rz%unexpected char after internal subsetz%unexpected char %r in internal subset)rr'rr r(r*�getattr�isspace) rr� declstartposrr0rr1�sr4Zmethrrrr/�sp     �             z ParserBase._parse_doctype_subsetcCsF|�||�\}}|dkrdS|j}d||d�krB|�d|�dSdS)Nr rr )r*r�find)rrrPr4rrrrr�_parse_doctype_element�sz!ParserBase._parse_doctype_elementcCs�|j}|�||�\}}|||d�}|dkr2dS|dkrB|dS|�||�\}}|dkr^|S|||d�}|dkrzdS|dkr�d||d�kr�|�d|�d}ndS|||d���r�|d}q�||d�s�dSn|�||�\}}|||d�}|�sdS|dk�rDt||�}|�r&|��}ndS|||d�}|�sDdS|d k�r�||d�d k�rddS|�|d|�\}}|dk�r�|S|||d�}|�s�dS|dkrB|dSqBdS) Nr rr rr�(�)�'"�#)rr*rRrOr-r.)rrrPrr4rr1r3rrr�_parse_doctype_attlistsX       z!ParserBase._parse_doctype_attlistcCs�|�||�\}}|dkr|S|j}|||d�}|s:dS|dkrJ|dS|dkrnt||�}|sddS|��}q"|�||�\}}|dkr"|Sq"dS)Nrr r rrV)r*rr-r.)rrrPr4rrr1r3rrr�_parse_doctype_notation=s"  z"ParserBase._parse_doctype_notationcCs�|j}|||d�dkrR|d}|||d�}|s:dS|��rP|d}q"qVq"n|}|�||�\}}|dkrr|S|j||d�}|s�dS|dkr�t||�}|r�|��}q�dSqr|dkr�|dS|�||�\}}|dkrr|SqrdS)Nr rKr rrVr)rrOr*r-r.)rrrPrrr1r4r3rrr�_parse_doctype_entityTs4   z ParserBase._parse_doctype_entitycCs�|j}t|�}||krdSt||�}|r\|��}|��}|t|�|krLdS|��|��fS|�||�|�d|||d��dS)N)Nr zexpected name token at %r�) rr'�_declname_match�group�strip�lowerr.rr )rrrPrr0r3rQr4rrrr*xs  �zParserBase._scan_namecCsdS)Nr)rr2rrrr,�szParserBase.unknown_declN)r )r )�__name__� __module__� __qualname__�__doc__r r rrrr+r5r)r(r/rSrXrYrZr*r,rrrrrs" R  C 9$r) rc�re�compilerDr\r-rGr?rArrrrr�s