o
    …9j=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 )
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 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   Ú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 rœt||ƒ}|s—dS | 	¡ }n>|dv r©|  ||¡\}	}n1|| jv r³|d }n'|d	krÒ|dkrÄ|  
|d |¡}n|dv rÎtd| ƒ‚tdƒ‚td||  ƒ‚|d
k rà|S ||k sddS )Né   ú<!z$unexpected call to parse_declarationr
   ú>)ú-r   éÿÿÿÿz--ú[r   Údoctyper   z"'Ú4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ>   ÚlinkÚattlistÚelementÚlinktypez&unsupported '[' char in %s declarationz"unexpected '[' char in declarationz!unexpected %r char in declaration)r   ÚlenÚparse_commentÚparse_marked_sectionÚ
_scan_nameÚ_decl_othercharsÚhandle_declÚunknown_declÚ_declstringlit_matchÚendÚ_parse_doctype_subsetÚAssertionError)
r   r   r   r   ÚnÚ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   >   ÚtempÚcdataÚignoreÚrcdataÚinclude>   ÚifÚelseÚendifz+unknown status keyword %r in marked sectionr   )	r   r)   Ú_markedsectioncloseÚsearchÚ_msmarkedsectioncloser0   Ústartr,   r.   )r   r   Úreportr   Ú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   r0   Ú_commentcloserB   rD   Úhandle_commentr.   )r   r   rE   r   rG   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rŸd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)rH   rI   r   )rE   >   Úentityr#   r$   Únotationz)unknown declaration %r in internal subsetÚ_parse_doctype_ú%ú;ú]r   z%unexpected char after internal subsetz%unexpected char %r in internal subset)r   r&   r   r0   r'   r)   ÚgetattrÚisspace)
r   r   Údeclstartposr   r1   r   r3   Úsr6   Ú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   rU   r6   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 … }|sŠdS |dv r¨t||ƒ}|rš| ¡ }ndS |||d … }|s¨dS |d	krÒ||d … d	kr¶dS |  |d |¡\}}|dk rÆ|S |||d … }|sÒdS |dkrÚ|d S q")
Nr
   r   r   r   r   ú(ú)ú'"ú#)r   r)   rX   rT   r-   r.   )r   r   rU   r   r6   r   r3   r5   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   r\   )r)   r   r-   r.   )r   r   rU   r6   r   r   r3   r5   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
   rP   r   r   r\   r   )r   rT   r)   r-   r.   )r   r   rU   r   r   r3   r6   r5   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   r0   )r   r   rU   r   r1   r5   rV   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
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   r*   r7   r(   r'   r/   rY   r^   r_   r`   r)   r,   r   r   r   r   r      s"    
Q
F9$r   )
ri   ÚreÚcompilerG   rb   r-   rJ   rA   rC   r   r   r   r   r   Ú<module>   s    


