
    z%i=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    ?/home/uftp/.pyenv/versions/3.12.0/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                    | j                   }|dz   }|||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   r   >)-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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                 t   | j                   }| 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   r   >   tempcdataignorercdatainclude>   ifelseendifz+unknown status keyword %r in marked sectionr$   )	r   r/   _markedsectionclosesearch_msmarkedsectioncloser6   startr2   r4   )r	   r   reportr   sectNamer   matchs          r
   r.   zParserBase.parse_marked_section   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   r6   _commentcloserI   rK   handle_commentr4   )r	   r   rL   r   rN   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$   z<!r   z*unexpected char in internal subset (in %r)rP   rQ   r   )rL   >   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   r6   r-   r/   getattrisspace)
r	   r   declstartposr   r7   r   r9   sr<   meths
             r
   r5   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   )r/   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   r/   rb   r]   r3   r4   )r	   r   r^   r   r<   r   r9   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"   rg   )r/   r   r3   r4   )r	   r   r^   r<   r   r   r9   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   rY   r$   r   rg   r"   )r   r]   r/   r3   r4   )r	   r   r^   r   r   r9   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lowerr4   r   r6   )r	   r   r^   r   r7   r;   r_   r<   s           r
   r/   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
   r2   zParserBase.unknown_decl  s    r   N)r   )__name__
__module____qualname____doc__r   r   r   r   r0   r=   r.   r-   r5   rc   ri   rk   rm   r/   r2   ru   r   r
   r   r      s[    +=
( Mb0
CL6r. H&r   r   )
ry   recompilerN   rp   r3   rR   rH   rJ   r   ru   r   r
   <module>r|      s    
"**:;AA!rzz"<=CC 

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

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