
    FwgW?                        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	e	      Z
y)
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                   r    e Zd 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    S/var/www/horilla/myenv/lib/python3.12/site-packages/future/backports/_markupbase.py__init__zParserBase.__init__6   s#    >>Z';= = (    c                     t        d      )Nz.subclasses of ParserBase must override error())NotImplementedError)r	   messages     r
   errorzParserBase.error;   s    !<> 	>r   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.getposC   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.updateposK   s    6H,,tQ*++.DK..q!,CSU)DK  ++/!+DKr    c                 v   | 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	                  ||      \  }	}n|| j
                  v r|dz   }nm|d	k(  rQ|dk(  r| j                  |dz   |      }nM|t        g d      v r| j                  d|z         n)| j                  d       n| j                  d||   z         |d
k  r|S ||k  ry)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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%O!PP
 JJG(RSJJCD

7'!*DF1uO !eP r   c                    | j                   }|||dz    dk(  sJ d       | j                  |dz   |      \  }}|dk  r|S |t        g d      v rt        j	                  ||dz         }nC|t        g d      v rt
        j	                  ||dz         }n| j                  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includercdata)ifelseendifz+unknown status keyword %r in marked sectionr)   )
r   r4   r;   _markedsectionclosesearch_msmarkedsectioncloser   startr7   r9   )r	   r   reportr   sectNamer   matchs          r
   r3   zParserBase.parse_marked_section   s    q1~&S(SS&ooqsA/!q5HsKLL&--gqs;E455(//1=EJJDwqQRsST~UVAAgac1o.yy|r   c                     | j                   }|||dz    dk7  r| j                  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   r   _commentcloserN   rP   handle_commentr9   )r	   r   rQ   r   rS   r   s         r
   r2   zParserBase.parse_comment   s|    ,,1QqS>V#JJ;<$$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          | j                  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|t        g d      vr)| j                  ||dz          | j                  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(  ro|dz   }||k  r1||   j                         r|dz   }||k  r||   j                         r||k  r.||   dk(  r|S | j                  ||       | j                  d       n=y|j                         r|dz   }n&| j                  ||       | j                  d|z         ||k  ry)N<r%   r)   r&   r   z*unexpected char in internal subset (in %r)rU   rV   r   )rQ   )r-   r0   entitynotationz)unknown declaration %r in internal subset_parse_doctype_%;]r'   z%unexpected char after internal subsetz%unexpected char %r in internal subset)	r   r1   r"   r   r2   r4   r;   getattrisspace)
r	   r   declstartposr   r<   r   r>   srA   meths
             r
   r:   z ParserBase._parse_doctype_subset   sV   ,,L!e
ACxAacN89NN<Q7JJKaOPEa<EQ;1QqS>V+**1Q*7A1u //!a%>a7s#OPPNN<Q7JJCdJL 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JJFGE|Q/

BQFGu !ex r   c                     | j                  ||      \  }}|dk(  ry| j                  }d||d  v r|j                  d|      dz   S y)Nr)   r'   r   )r4   r   find)r	   r   rc   rA   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   r4   rg   rb   r8   r9   )r	   r   rc   r   rA   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'   rl   )r4   r   r8   r9   )r	   r   rc   rA   r   r   r>   r@   s           r
   _parse_doctype_notationz"ParserBase._parse_doctype_notationX  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   r^   r)   r   rl   r'   )r   rb   r4   r8   r9   )r	   r   rc   r   r   r>   rA   r@   s           r
   _parse_doctype_entityz ParserBase._parse_doctype_entityo  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                 V   | j                   }t        |      }||k(  ryt        ||      }|rR|j                         }|j	                         }|t        |      z   |k(  ry|j                         |j                         fS | j                  ||       | j                  d|||dz    z         y )N)Nr)   zexpected name token at %r   )	r   r1   _declname_matchgroupstriplowerr9   r"   r   )r	   r   rc   r   r<   r@   rd   rA   s           r
   r4   zParserBase._scan_name  s    ,,L6GQ'	A779DCF
q ::<((NN<+JJ2 l2o>? @r   c                      y )N )r	   r?   s     r
   r7   zParserBase.unknown_decl  s    r   N)r   )__name__
__module____qualname____doc__r   r   r   r   r"   r5   rB   r3   r2   r:   rh   rn   rp   rr   r4   r7   rz   r   r
   r   r   2   sa    +=
>( Nd,
@F6r. H@$r   r   )r~   recompilerS   ru   r8   rW   rM   rO   objectr   rz   r   r
   <module>r      s    D 
"**:;AA!rzz"<=CC 

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

8, t tr   