o
    IAf=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
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u r	tdd S )Nz)_markupbase.ParserBase must be subclassed)	__class__r   RuntimeErrorself r   "/usr/lib/python3.10/_markupbase.py__init__   s
   
zParserBase.__init__c                 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   sd   ||kr|S | j }|d||}|r(| j| | _|d||}||d  | _|S | j| | | _|S )N
r
   )rawdatacountr   rindexr   )r   ijr   Znlinesposr   r   r   	updatepos,   s   zParserBase.updatepos c           
      C   s  | j }|d }||| dksJ d|||d  dkr!|d S |||d  dv r-dS t|}|||d  dkr@| |S || d	krK| |S | ||\}}|d
k rY|S |dkr`d| _||k r|| }|dkr||d | }|dkr| | |d S | | |d S |dv rt||}|sdS |	 }n>|dv r| ||\}	}n1|| jv r|d }n'|d	kr|dkr| 
|d |}n|dv rtd| tdtd||  |d
k r|S ||k sddS )N   <!z$unexpected call to parse_declarationr
   >)-r   z--[r   Zdoctyper   z"'Z4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ>   Zlinktypeelementattlistlinkz&unsupported '[' char in %s declarationz"unexpected '[' char in declarationz!unexpected %r char in declaration)r   lenparse_commentparse_marked_section
_scan_name_decl_othercharsZhandle_declunknown_decl_declstringlit_matchend_parse_doctype_subsetAssertionError)
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J d| |d |\}}|dk r!|S |dv r.t||d }n|dv r;t||d }ntd||d |  |sKdS |r]|d}| ||d |  |dS )	N   z<![z)unexpected call to parse_marked_section()r   >   ZrcdataZincludeZtempZcdataignore>   Zendifelseifz+unknown status keyword %r in marked sectionr   )	r   r%   _markedsectionclosesearch_msmarkedsectioncloser+   startr'   r)   )r   r   reportr   ZsectNamer   matchr   r   r   r$      s$   

zParserBase.parse_marked_sectionc                 C   sh   | j }|||d  dkrtdt||d }|sdS |r/|d}| ||d |  |dS )N   <!--z"unexpected call to parse_comment()r   r   )r   r+   _commentcloser7   r9   Zhandle_commentr)   )r   r   r:   r   r;   r   r   r   r   r#      s   

zParserBase.parse_commentc           
      C   s  | j }t|}|}||k r|| }|dkr|||d  }|dkr$dS |dkr6| ||d  td| |d |kr>dS |d |krFdS |||d  dkr^| j|d	d
}|d	k r]|S q	| |d |\}}|dkrndS |dvr| ||d  td| t| d| }	|	||}|d	k r|S nt|dkr|d |krdS | |d |\}}|d	k r|S || dkr|d }nM|dkr|d }||k r||  r|d }||k r||  s||k r|| dkr|S | || tddS | r|d }n| || td| ||k sdS )N<r   r   r   r
   z*unexpected char in internal subset (in %r)r<   r=   r   )r:   >   Zentityr    Znotationr   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   r,   r   r-   sr0   methr   r   r   r*      s|   


?z ParserBase._parse_doctype_subsetc                 C   sF   |  ||\}}|dkrdS | j}d||d  v r!|d|d S dS )Nr   r   r
   )r%   r   find)r   r   rE   r0   r   r   r   r   r   _parse_doctype_element   s   z!ParserBase._parse_doctype_elementc                 C   s  | j }| ||\}}|||d  }|dkrdS |dkr!|d S 	 | ||\}}|dk r0|S |||d  }|dkr>dS |dkrvd||d  v rS|d|d }ndS |||d   rm|d }|||d   s_||d  sudS n| ||\}}|||d  }|sdS |dv rt||}|r| }ndS |||d  }|sdS |d	kr||d  d	krdS | |d |\}}|dk r|S |||d  }|sdS |dkr|d S q")
Nr
   r   r   r   r   ()'"#)r   r%   rH   rD   r(   r)   )r   r   rE   r   r0   r   r-   r/   r   r   r   _parse_doctype_attlist  s`   

z!ParserBase._parse_doctype_attlistc                 C   s   |  ||\}}|dk r|S | j}	 |||d  }|sdS |dkr&|d S |dv r8t||}|s3dS | }n|  ||\}}|dk rF|S q)Nr   r
   r   r   rL   )r%   r   r(   r)   )r   r   rE   r0   r   r   r-   r/   r   r   r   _parse_doctype_notation=  s&   

z"ParserBase._parse_doctype_notationc                 C   s   | j }|||d  dkr*|d }	 |||d  }|sdS | r'|d }nnqn|}| ||\}}|dk r:|S 	 | j ||d  }|sHdS |dv rZt||}|rX| }ndS |dkrb|d S | ||\}}|dk rp|S q;)Nr
   r@   r   r   rL   r   )r   rD   r%   r(   r)   )r   r   rE   r   r   r-   r0   r/   r   r   r   _parse_doctype_entityT  s>   


z ParserBase._parse_doctype_entityc                 C   s   | j }t|}||krdS t||}|r.| }| }|t| |kr&dS | | fS | || td|||d   )N)Nr   zexpected name token at %r   )	r   r"   _declname_matchgroupstriplowerr)   r   r+   )r   r   rE   r   r,   r/   rF   r0   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
   )__name__
__module____qualname____doc__r	   r   r   r   r&   r1   r$   r#   r*   rI   rN   rO   rP   r%   r'   r   r   r   r   r      s"    
Q
F9$r   )
rY   recompiler;   rR   r(   r>   r6   r8   r   r   r   r   r   <module>   s    


