o
    KgW?                     @   sX   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	e	Z
dS )
a  Shared support for scanning document type declarations in HTML and XHTML.

Backported for python-future from Python 3.3. Reason: ParserBase is an
old-style class in the Python 2.7 source of markupbase.py, which I suspect
might be the cause of sporadic unit-test failures on travis-ci.org with
test_htmlparser.py.  The test failures look like this:

    ======================================================================

ERROR: test_attr_entity_replacement (future.tests.test_htmlparser.AttributesStrictTestCase)

----------------------------------------------------------------------

Traceback (most recent call last):
  File "/home/travis/build/edschofield/python-future/future/tests/test_htmlparser.py", line 661, in test_attr_entity_replacement
    [("starttag", "a", [("b", "&><"'")])])
  File "/home/travis/build/edschofield/python-future/future/tests/test_htmlparser.py", line 93, in _run_check
    collector = self.get_collector()
  File "/home/travis/build/edschofield/python-future/future/tests/test_htmlparser.py", line 617, in get_collector
    return EventCollector(strict=True)
  File "/home/travis/build/edschofield/python-future/future/tests/test_htmlparser.py", line 27, in __init__
    html.parser.HTMLParser.__init__(self, *args, **kw)
  File "/home/travis/build/edschofield/python-future/future/backports/html/parser.py", line 135, in __init__
    self.reset()
  File "/home/travis/build/edschofield/python-future/future/backports/html/parser.py", line 143, in reset
    _markupbase.ParserBase.reset(self)

TypeError: unbound method reset() must be called with ParserBase instance as first argument (got EventCollector instance instead)

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
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   a/var/www/html/status_management/venv/lib/python3.10/site-packages/future/backports/_markupbase.py__init__6   s
   
zParserBase.__init__c                 C   s   t d)Nz.subclasses of ParserBase must override error())NotImplementedError)r   messager   r   r   error;   s   zParserBase.errorc                 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   getposC   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   	updateposK   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 |	 }nG|dv r| ||\}	}n:|| jv r|d }n0|d	kr|dkr| 
|d |}n|tg dv r| d|  n| d n	| d||   |d
k r|S ||k sddS )N   <!z$unexpected call to parse_declarationr   >)-r   z--[r   doctyper   z"'4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)attlistlinktypelinkelementz&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setr   )
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 |tg dv r2t||d }n|tg dv rCt||d }n| d||d |   |sTdS |rf|d}| ||d |  |	dS )	N   z<![z)unexpected call to parse_marked_section()r   )tempcdataignoreincludercdata)ifelseendifz+unknown status keyword %r in marked sectionr!   )
r   r,   r3   _markedsectionclosesearch_msmarkedsectioncloser   startr/   r1   )r   r   reportr   sectNamer   matchr   r   r   r+      s    

zParserBase.parse_marked_sectionc                 C   sj   | j }|||d  dkr| d t||d }|sdS |r0|d}| ||d |  |dS )N   <!--z"unexpected call to parse_comment()r!   r   )r   r   _commentcloserE   rG   handle_commentr1   )r   r   rH   r   rJ   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r7| ||d  | d|  |d |kr?dS |d |krGdS |||d  dkr_| j|d	d
}|d	k r^|S q	| |d |\}}|dkrodS |tg dvr| ||d  | d|  t| d| }	|	||}|d	k r|S nx|dkr|d |krdS | |d |\}}|d	k r|S || dkr|d }nQ|dkr|d }||k r||  r|d }||k r||  s||k r|| dkr|S | || | d ndS | r|d }n| || | d|  ||k sdS )N<r   r!   r   r   z*unexpected char in internal subset (in %r)rK   rL   r   )rH   )r%   r(   entity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   r   r*   r,   r3   getattrisspace)
r   r   declstartposr   r4   r   r6   sr9   methr   r   r   r2      sx   



<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   rX   r9   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,   r[   rW   r0   r1   )r   r   rX   r   r9   r   r6   r8   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   r0   r1   )r   r   rX   r9   r   r   r6   r8   r   r   r   _parse_doctype_notationX  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   rS   r!   r   r_   r   )r   rW   r,   r0   r1   )r   r   rX   r   r   r6   r9   r8   r   r   r   _parse_doctype_entityo  s>   


z ParserBase._parse_doctype_entityc                 C   s   | j }t|}||krdS t||}|r.| }| }|t| |kr&dS | | fS | || | d|||d    d S )N)Nr!   zexpected name token at %r   )	r   r)   _declname_matchgroupstriplowerr1   r   r   )r   r   rX   r   r4   r8   rY   r9   r   r   r   r,     s   

zParserBase._scan_namec                 C   s   d S )Nr   )r   r7   r   r   r   r/     s   zParserBase.unknown_declN)r   )__name__
__module____qualname____doc__r	   r   r   r   r   r-   r:   r+   r*   r2   r\   ra   rb   rc   r,   r/   r   r   r   r   r   2   s$    
R
C9$r   )rl   recompilerJ   re   r0   rM   rD   rF   objectr   r   r   r   r   <module>   s    "


