U
    ËZjW?  ã                   @   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krtdƒ‚d S )Nz)_markupbase.ParserBase must be subclassed)Ú	__class__r   ÚRuntimeError©Úself© r   ú_/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/future/backports/_markupbase.pyÚ__init__6   s    
ÿzParserBase.__init__c                 C   s   t dƒ‚d S )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   sb   ||kr|S | j }| d||¡}|rN| j| | _| d||¡}||d  | _n| 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&tdƒ‚|||d … dkrB|d S |||d … dkrZdS t|ƒ}|||d … dkr€|  |¡S || d	kr–|  |¡S |  ||¡\}}|d
k r²|S |dkrÀd| _||k �ræ|| }|dk�r||d |… }|dk�r|  |¡ n
|  |¡ |d S |dk�r<t	||ƒ}|�s2dS | 
¡ }nœ|dk�rX|  ||¡\}	}n€|| jk�rn|d }nj|d	k�rÆ|dk�r”|  |d |¡}n0|tddddgƒk�rº|  d| ¡ n
|  d¡ n|  d||  ¡ |d
k rÀ|S qÀd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   ÚAssertionErrorÚ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"tdƒ‚|  |d |¡\}}|dk rB|S |tddddd	gƒkrjt ||d ¡}n>|td
ddgƒkrŽt ||d ¡}n|  d||d |…  ¡ |s°dS |rÔ| 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)   r-   r4   Ú_markedsectioncloseÚsearchÚ_msmarkedsectioncloser   Ústartr0   r2   )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 |r`| d¡}|  ||d |… ¡ | d¡S )Né   ú<!--z"unexpected call to parse_comment()r!   r   )r   r   Ú_commentcloserF   rH   Úhandle_commentr2   )r   r   rI   r   rK   r   r   r   r   r+   Ã   s    

zParserBase.parse_commentc           
      C   s6  | j }t|ƒ}|}||k �r2|| }|dk�r<|||d … }|dkrJdS |dkrp|  ||d ¡ |  d| ¡ |d |kr€dS |d |kr�dS |||d … dkrÀ| j|d	d
�}|d	k r|S q|  |d |¡\}}|dkràdS |tddddgƒk�r|  ||d ¡ |  d| ¡ t| d| ƒ}	|	||ƒ}|d	k �r0|S q|dk�r’|d |k�rXdS |  |d |¡\}}|d	k �rz|S || dk�r0|d }q|dk�r|d }||k �rÈ||  ¡ �rÈ|d }�q¤||k �rü|| dk�rä|S |  ||¡ |  d¡ ndS q| ¡ �r|d }q|  ||¡ |  d| ¡ qdS )Nú<r   r!   r   r   z*unexpected char in internal subset (in %r)rL   rM   r   )rI   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-   r4   ÚgetattrÚisspace)
r   r   Údeclstartposr   r5   r   r7   Úsr:   Úmethr   r   r   r3   Ñ   sp    

ÿ








z ParserBase._parse_doctype_subsetc                 C   sF   |   ||¡\}}|dkrdS | j}d||d … krB| d|¡d S dS )Nr!   r   r   )r-   r   Úfind)r   r   rY   r:   r   r   r   r   r   Ú_parse_doctype_element  s    z!ParserBase._parse_doctype_elementc                 C   s¶  | j }|  ||¡\}}|||d … }|dkr2dS |dkrB|d S |  ||¡\}}|dk r^|S |||d … }|dkrzdS |dkrØd||d … kr¤| d|¡d }ndS |||d …  ¡ rÆ|d }q¨||d … sèdS n|  ||¡\}}|||d … }|�sdS |dk�rDt||ƒ}|�r&| ¡ }ndS |||d … }|�sDdS |d	k�r ||d … d	k�rddS |  |d |¡\}}|dk �r†|S |||d … }|�s dS |dkrB|d S qBd S )
Nr   r   r!   r   r   ú(ú)ú'"ú#)r   r-   r\   rX   r1   r2   )r   r   rY   r   r:   r   r7   r9   r   r   r   Ú_parse_doctype_attlist  sX    





z!ParserBase._parse_doctype_attlistc                 C   s�   |   ||¡\}}|dk r|S | j}|||d … }|s:dS |dkrJ|d S |dkrnt||ƒ}|sddS | ¡ }q"|   ||¡\}}|dk r"|S q"d S )Nr   r   r!   r   r`   )r-   r   r1   r2   )r   r   rY   r:   r   r   r7   r9   r   r   r   Ú_parse_doctype_notationX  s"    

z"ParserBase._parse_doctype_notationc                 C   sä   | j }|||d … dkrR|d }|||d … }|s:dS | ¡ rP|d }q"qVq"n|}|  ||¡\}}|dk rr|S | j ||d … }|sŒdS |dkr²t||ƒ}|r¬| ¡ }qÞdS qr|dkrÂ|d S |  ||¡\}}|dk rr|S qrd S )Nr   rT   r!   r   r`   r   )r   rX   r-   r1   r2   )r   r   rY   r   r   r7   r:   r9   r   r   r   Ú_parse_doctype_entityo  s4    


z ParserBase._parse_doctype_entityc                 C   s†   | j }t|ƒ}||krdS t||ƒ}|r\| ¡ }| ¡ }|t|ƒ |krLdS | ¡ | ¡ fS |  ||¡ |  d|||d …  ¡ d S )N)Nr!   zexpected name token at %ré   )	r   r*   Ú_declname_matchÚgroupÚstripÚlowerr2   r   r   )r   r   rY   r   r5   r9   rZ   r:   r   r   r   r-   “  s    
ÿzParserBase._scan_namec                 C   s   d S )Nr   )r   r8   r   r   r   r0   ¥  s    zParserBase.unknown_declN)r   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   r   r.   r;   r,   r+   r3   r]   rb   rc   rd   r-   r0   r   r   r   r   r   2   s"   R

C9$r   )rm   ÚreÚcompilerK   rf   r1   rN   rE   rG   Úobjectr   r   r   r   r   Ú<module>   s   "


