
    Rh=9                        d Z ddlZ ej                  d      j                  Z ej                  d      j                  Z ej                  d      Z ej                  d      Z ej                  d      Z[ G d d	      Z	y)
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                   l    e Zd ZdZd Zd Zd Zd ZdZd Z	ddZ
dd	Zd
 Zd Zd Zd Zd Zd Zd Zy)
ParserBaseziParser base class which provides some common support methods used
    by the SGML/HTML and XHTML parsers.c                 >    | j                   t        u rt        d      y )Nz)_markupbase.ParserBase must be subclassed)	__class__r   RuntimeErrorselfs    "/usr/lib/python3.12/_markupbase.py__init__zParserBase.__init__   s#    >>Z';= = (    c                      d| _         d| _        y )N   r   linenooffsetr   s    r
   resetzParserBase.reset    s    r   c                 2    | j                   | j                  fS )z&Return current line number and offset.r   r   s    r
   getposzParserBase.getpos$   s    {{DKK''r   c                     ||k\  r|S | j                   }|j                  d||      }|r6| j                  |z   | _        |j                  d||      }||dz   z
  | _        |S | j                  |z   |z
  | _        |S )N
r   )rawdatacountr   rindexr   )r	   ijr   nlinesposs         r
   	updateposzParserBase.updatepos,   s    6H,,tQ*++.DK..q!,CSU)DK  ++/!+DKr    c                 4   | j                   }|dz   }||| dk(  sJ d       |||dz    dk(  r|dz   S |||dz    dv ryt        |      }|||dz    dk(  r| j                  |      S ||   d	k(  r| j                  |      S | j	                  ||      \  }}|d
k  r|S |dk(  rd| _        ||k  r||   }|dk(  r9||dz   | }|dk(  r| j                  |       |dz   S | j                  |       |dz   S |dv r t        ||      }|sy|j                         }n||dv r| j	                  ||      \  }	}nb|| j
                  v r|dz   }nN|d	k(  r8|dk(  r| j                  |dz   |      }n.|dv rt        d|z        t        d      t        d||   z        |d
k  r|S ||k  ry)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names
             r
   parse_declarationzParserBase.parse_declaration<   s    ,,Eq|t#K%KK#1QqS>S q5L1QqS>Y& L1QqS>T!%%a((QZ3
 ,,Q////!Q/KHaq5Hy $&D!!e
ACxqs1~y($$T* 1u %%d+1uEz(!4EEGLL//!Q/ad+++Ecy(221q5!<A!KK
 ))QT\)\]]()MNN$%H7ST:%UVV1uM !eN r   c                    | j                   }|||dz    dk(  sJ d       | j                  |dz   |      \  }}|dk  r|S |dv rt        j                  ||dz         }n2|dv rt        j                  ||dz         }nt        d||dz   | z        |sy|r(|j                  d      }| j                  ||dz   |        |j                  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   r0   _markedsectionclosesearch_msmarkedsectioncloser7   startr3   r5   )r	   r   reportr   sectNamer   matchs          r
   r/   zParserBase.parse_marked_section   s    q1~&S(SS&ooqsA/!q5HGG&--gqs;E00(//1=E =!AN  AAgac1o.yy|r   c                     | j                   }|||dz    dk7  rt        d      t        j                  ||dz         }|sy|r(|j	                  d      }| j                  ||dz   |        |j                  d      S )N   <!--z"unexpected call to parse_comment()r%   r   )r   r7   _commentcloserJ   rL   handle_commentr5   )r	   r   rM   r   rO   r   s         r
   r.   zParserBase.parse_comment   s{    ,,1QqS>V# !EFF$$Wac2AA!Q0yy|r   c                    | j                   }t        |      }|}||k  r||   }|dk(  r|||dz    }|dk(  ry|dk7  r#| j                  ||dz          t        d|z        |dz   |k(  ry|dz   |kD  ry|||dz    dk(  r| j	                  |d	
      }|d	k  r|S ~| j                  |dz   |      \  }}|dk(  ry|dvr#| j                  ||dz          t        d|z        t        | d|z         }	 |	||      }|d	k  r|S |dk(  r6|dz   |k(  ry| j                  |dz   |      \  }}|d	k  r|S ||   dk(  r|dz   }n|dk(  rh|dz   }||k  r1||   j                         r|dz   }||k  r||   j                         r||k  r'||   dk(  r|S | j                  ||       t        d      y|j                         r|dz   }n | j                  ||       t        d|z        ||k  ry)N<r!   r%   r"   r   z*unexpected char in internal subset (in %r)rQ   rR   r   )rM   >   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   r7   r.   r0   getattrisspace)
r	   r   declstartposr   r8   r   r:   sr=   meths
             r
   r6   z ParserBase._parse_doctype_subset   sT   ,,L!e
ACxAacN89NN<Q7(DqH  Ea<EQ;1QqS>V+**1Q*7A1u //!a%>a7KKNN<Q7(CdJ  t%6%=>L)q5HcEa<q1ul;1q5H1:$AAcE!e
 2 2 4AA !e
 2 2 4q5qzS( NN<3()PQQE|Q/$%Lq%PQQ{ !e~ r   c                     | j                  ||      \  }}|dk(  ry| j                  }d||d  v r|j                  d|      dz   S y)Nr%   r#   r   )r0   r   find)r	   r   r_   r=   r   r   s         r
   _parse_doctype_elementz!ParserBase._parse_doctype_element   sP    //!\2a7,,'!"+<<Q'!++r   c                    | j                   }| j                  ||      \  }}|||dz    }|dk(  ry|dk(  r|dz   S 	 | j                  ||      \  }}|dk  r|S |||dz    }|dk(  ry|dk(  rVd||d  v r|j                  d|      dz   }ny|||dz    j                         r|dz   }|||dz    j                         r||d  sy| j                  ||      \  }}|||dz    }|sy|dv r+t	        ||      }|r|j                         }ny|||dz    }|sy|d	k(  r3||d  d	k(  ry| j                  |dz   |      \  }}|dk  r|S |||dz    }|sy|dk(  r|dz   S )
Nr   r   r%   r#   r   ()'"#)r   r0   rc   r^   r4   r5   )r	   r   r_   r   r=   r   r:   r<   s           r
   _parse_doctype_attlistz!ParserBase._parse_doctype_attlist  s   ,,//!\2aAacN78q5L ooa6GD!1u!A#ABwCx'!"+%S!,q0Aa!n,,.AA a!n,,.qr{//!\:a!A#AEz(!4AAacNCx12;#%//!a%>aq5HAacNCx1u] r   c                     | j                  ||      \  }}|dk  r|S | j                  }	 |||dz    }|sy|dk(  r|dz   S |dv r t        ||      }|sy|j                         }n| j                  ||      \  }}|dk  r|S V)Nr   r   r%   r#   rh   )r0   r   r4   r5   )r	   r   r_   r=   r   r   r:   r<   s           r
   _parse_doctype_notationz"ParserBase._parse_doctype_notation=  s    //!\2aq5H,,!A#ACx1uEz(!4EEG//!\:aq5H r   c                    | j                   }|||dz    dk(  r)|dz   }	 |||dz    }|sy|j                         r|dz   }nn#|}| j                  ||      \  }}|dk  r|S 	 | j                   ||dz    }|sy|dv r t        ||      }|r|j	                         }n'y|dk(  r|dz   S | j                  ||      \  }}|dk  r|S `)Nr   rZ   r%   r   rh   r#   )r   r^   r0   r4   r5   )r	   r   r_   r   r   r:   r=   r<   s           r
   _parse_doctype_entityz ParserBase._parse_doctype_entityT  s    ,,1QqS>S AAAacN99;AA  A//!\2aq5HQqs#AEz(!4Ac1u//!\:aq5H r   c                 H   | j                   }t        |      }||k(  ryt        ||      }|rR|j                         }|j	                         }|t        |      z   |k(  ry|j                         |j                         fS | j                  ||       t        d|||dz    z        )N)Nr%   zexpected name token at %r   )	r   r-   _declname_matchgroupstriplowerr5   r   r7   )r	   r   r_   r   r8   r<   r`   r=   s           r
   r0   zParserBase._scan_namex  s    ,,L6GQ'	A779DCF
q ::<((NN<+ +gl<PR?.SS r   c                      y )N )r	   r;   s     r
   r3   zParserBase.unknown_decl  s    r   N)r   )__name__
__module____qualname____doc__r   r   r   r   r1   r>   r/   r.   r6   rd   rj   rl   rn   r0   r3   rv   r   r
   r   r      s[    +=
( Mb0
CL6r. H&r   r   )
rz   recompilerO   rq   r4   rS   rI   rK   r   rv   r   r
   <module>r}      s    
"**:;AA!rzz"<=CC 

9% bjj. 
 #

8, u ur   