JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbra XC?hC@sdZddlZddlZddlmZdgZedZedZedZ edZ ed Z ed Z ed Z ed Zed ZedejZed ZedZGdddejZdS)zA parser for HTML and XHTML.N)unescape HTMLParserz[&<]z &[a-zA-Z#]z%&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]z)&#(?:[0-9]+|[xX][0-9a-fA-F]+)[^0-9a-fA-F]z <[a-zA-Z]>z--\s*>z+([a-zA-Z][^\t\n\r\f />\x00]*)(?:\s|/(?!>))*z]((?<=[\'"\s/])[^\s/>][^\s/=>]*)(\s*=+\s*(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?(?:\s|/(?!>))*aF <[a-zA-Z][^\t\n\r\f />\x00]* # tag name (?:[\s/]* # optional whitespace before attribute name (?:(?<=['"\s/])[^\s/>][^\s/=>]* # attribute name (?:\s*=+\s* # value indicator (?:'[^']*' # LITA-enclosed value |"[^"]*" # LIT-enclosed value |(?!['"])[^>\s]* # bare value ) \s* # possibly followed by a space )?(?:\s|/(?!>))* )* )? \s* # trailing whitespace z#c@seZdZdZdZddddZddZd d Zd d Zd Z ddZ ddZ ddZ ddZ ddZd7ddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd S)8raEFind tags and other markup and call handler functions. Usage: p = HTMLParser() p.feed(data) ... p.close() Start tags are handled by calling self.handle_starttag() or self.handle_startendtag(); end tags by self.handle_endtag(). The data between tags is passed from the parser to the derived class by calling self.handle_data() with the data as argument (the data may be split up in arbitrary chunks). If convert_charrefs is True the character references are converted automatically to the corresponding Unicode character (and self.handle_data() is no longer split in chunks), otherwise they are passed by calling self.handle_entityref() or self.handle_charref() with the string containing respectively the named or numeric reference as the argument. )ZscriptZstyleT)convert_charrefscCs||_|dS)zInitialize and reset this instance. If convert_charrefs is True (the default), all character references are automatically converted to the corresponding Unicode characters. N)rreset)selfrr0/opt/alt/python39/lib64/python3.9/html/parser.py__init__VszHTMLParser.__init__cCs(d|_d|_t|_d|_tj|dS)z1Reset this instance. Loses all unprocessed data.z???N)rawdatalasttaginteresting_normal interesting cdata_elem _markupbase ParserBaserrrrr r_s zHTMLParser.resetcCs|j||_|ddS)zFeed data to the parser. Call this as often as you want, with as little or as much text as you want (may include '\n'). rN)r goaheadrdatarrr feedgs zHTMLParser.feedcCs|ddS)zHandle any buffered data.N)rrrrr closepszHTMLParser.closeNcCs|jS)z)Return full source of start tag: '<...>'.)_HTMLParser__starttag_textrrrr get_starttag_textvszHTMLParser.get_starttag_textcCs$||_td|jtj|_dS)Nz )lowerrrecompileIr)relemrrr set_cdata_modezs zHTMLParser.set_cdata_modecCst|_d|_dSN)rrrrrrr clear_cdata_mode~szHTMLParser.clear_cdata_modec CsX|j}d}t|}||kr|jrv|jsv|d|}|dkr|dt||d}|dkrptd ||spq|}n*|j ||}|r| }n|jrq|}||kr|jr|js| t |||n| ||||||}||krq|j}|d|rJt||r"||} n|d|r:||} nn|d|rR||} nV|d|rj||} n>|d |r||} n&|d |kr| d|d } nq| dkr<|sq|d |d } | dkr|d|d } | dkr|d } n| d 7} |jr*|js*| t ||| n| ||| ||| }q|d |rt||}|r|d d} || |} |d| d s| d } ||| }qndS|rX|||d||dS)Nr+)r*r'z"unexpected call to parse_comment()rr,r)r r/handle_comment)rrDZreportr posrrr rMszHTMLParser.parse_bogus_commentcCsd|j}|||ddks"Jdt||d}|s:dS|}|||d||}|S)Nr+r)zunexpected call to parse_pi()r,)r picloser2r3 handle_pir@)rrDr r7rFrrr r; szHTMLParser.parse_picCsd|_||}|dkr|S|j}||||_g}t||d}|sPJd|}|d|_}||kr.t ||}|sq.|ddd\} } } | sd} n\| dddkr| ddksn| dddkr| ddkrnn | dd} | rt | } | | | f|}ql||| } | d vr| \} }d |jvr| |jd } t|j|jd }n|t|j}|||||S| d r|||n"|||||jvr|||S) Nrrz#unexpected call to parse_starttag()r+rJ'r,")r/> rU)rcheck_for_whole_start_tagr tagfind_tolerantr7r@r>rr attrfind_tolerantrappendstripZgetposcountr.r0r4endswithhandle_startendtaghandle_starttagCDATA_CONTENT_ELEMENTSr!)rrDendposr attrsr7rGtagmattrnamerestZ attrvaluer@linenooffsetrrr r8,sZ    &            zHTMLParser.parse_starttagcCs|j}t||}|r|}|||d}|dkr>|dS|dkr~|d|rZ|dS|d|rjdS||krv|S|dS|dkrdS|dvrdS||kr|S|dStd dS) Nrr/rUr+r,r z6abcdefghijklmnopqrstuvwxyz=/ABCDEFGHIJKLMNOPQRSTUVWXYZzwe should not get here!)r locatestarttagend_tolerantr7r@r5AssertionError)rrDr rdrFnextrrr rW_s.   z$HTMLParser.check_for_whole_start_tagcCs.|j}|||ddks"Jdt||d}|s:dS|}t||}|s|jdurr|||||St||d}|s|||ddkr|dS| |S| d }| d|}| ||dS| d }|jdur||jkr|||||S| |||S) Nr+r'zunexpected call to parse_endtagrr,rJzr)r endendtagr2r@ endtagfindr7rr4rXrMr>rr/ handle_endtagr#)rrDr r7rNZ namematchZtagnamer rrr r9s8       zHTMLParser.parse_endtagcCs|||||dSr")r_rorrcrbrrr r^s zHTMLParser.handle_startendtagcCsdSr"rrprrr r_szHTMLParser.handle_starttagcCsdSr"r)rrcrrr roszHTMLParser.handle_endtagcCsdSr"rrrHrrr r?szHTMLParser.handle_charrefcCsdSr"rrqrrr rBszHTMLParser.handle_entityrefcCsdSr"rrrrr r4szHTMLParser.handle_datacCsdSr"rrrrr rOszHTMLParser.handle_commentcCsdSr"r)rZdeclrrr rLszHTMLParser.handle_declcCsdSr"rrrrr rRszHTMLParser.handle_picCsdSr"rrrrr unknown_declszHTMLParser.unknown_decl)r)__name__ __module__ __qualname____doc__r`r rrrrrr!r#rr<rMr;r8rWr9r^r_ror?rBr4rOrLrRrrrrrr r>s6  z  3"()rvrrZhtmlr__all__rrrCrAr=r6rQZ commentcloserXrYVERBOSErjrmrnrrrrrr s*