ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ A[c@sdZddlZejdjZejdjZejdZejdZejdZ[de fd YZ dS( sShared 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. iNs[a-zA-Z][-_.a-zA-Z0-9]*\s*s(\'[^\']*\'|"[^"]*")\s*s--\s*>s ]\s*]\s*>s]\s*>t ParserBasecBseZdZdZdZdZdZdZdZdZ dd Z dd Z d Z d Z d ZdZdZdZdZRS(siParser base class which provides some common support methods used by the SGML/HTML and XHTML parsers.cCs"|jtkrtdndS(Ns)_markupbase.ParserBase must be subclassed(t __class__Rt RuntimeError(tself((sM/opt/alt/python27/lib/python2.7/site-packages/future/backports/_markupbase.pyt__init__6scCstddS(Ns.subclasses of ParserBase must override error()(tNotImplementedError(Rtmessage((sM/opt/alt/python27/lib/python2.7/site-packages/future/backports/_markupbase.pyterror;scCsd|_d|_dS(Nii(tlinenotoffset(R((sM/opt/alt/python27/lib/python2.7/site-packages/future/backports/_markupbase.pytreset?s cCs|j|jfS(s&Return current line number and offset.(RR (R((sM/opt/alt/python27/lib/python2.7/site-packages/future/backports/_markupbase.pytgetposCscCs||kr|S|j}|jd||}|rm|j||_|jd||}||d|_n|j|||_|S(Ns i(trawdatatcountRtrindexR (RtitjR tnlinestpos((sM/opt/alt/python27/lib/python2.7/site-packages/future/backports/_markupbase.pyt updateposKs  tc CsX|j}|d}|||d!dkr2|dS|||d!dkrMdSt|}|||d!dkr}|j|S||dkr|j|S|j||\}}|d kr|S|d krd|_nxw||krS||}|dkrA||d|!}|d kr,|j|n |j||dS|d krut||}|sfdS|j }n|d kr|j||\} }n||jkr|d}n|dkr+|d kr|j |d|}q@|t d dddgkr|j d|q@|j dn|j d|||d kr|SqWdS(Niit>t-Ris--t[itdoctypes"'t4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZtattlisttlinktypetlinktelements&unsupported '[' char in %s declarations"unexpected '[' char in declarations!unexpected %r char in declaration(RR( R tlent parse_commenttparse_marked_sectiont _scan_namet_decl_othercharst handle_declt unknown_declt_declstringlit_matchtendt_parse_doctype_subsettsetR( RRR Rtntdecltypetctdatatmtname((sM/opt/alt/python27/lib/python2.7/site-packages/future/backports/_markupbase.pytparse_declaration[sX                  icCs|j}|j|d|\}}|dkr5|S|tdddddgkrotj||d}nP|tdd d gkrtj||d}n|jd ||d|!|sd S|r|jd}|j||d|!n|j dS( Niittemptcdatatignoretincludetrcdatatiftelsetendifs+unknown status keyword %r in marked sectioni( R R!R(t_markedsectionclosetsearcht_msmarkedsectioncloseRtstartR$R&(RRtreportR tsectNameRtmatch((sM/opt/alt/python27/lib/python2.7/site-packages/future/backports/_markupbase.pyR s  !cCs|j}|||d!dkr0|jdntj||d}|sPdS|r|jd}|j||d|!n|jdS(Nis