a ä”|jrWã@sÞdZddlZddlZddlmZdgZe d¡Ze d¡Ze d¡Z e d¡Z e d ¡Z e d ¡Z e d ¡Z e d ¡Ze d ¡Ze d¡Ze dej¡Ze dej¡Ze dej¡Ze d ¡Ze d¡ZGdd„dejƒZdS)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 z--!?>z-?>z0([a-zA-Z][^\t\n\r\f />]*)(?:[\t\n\r\f ]|/(?!>))*a{ ( (?<=['"\t\n\r\f /])[^\t\n\r\f />][^\t\n\r\f /=>]* # attribute name ) ([\t\n\r\f ]*=[\t\n\r\f ]* # value indicator ('[^']*' # LITA-enclosed value |"[^"]*" # LIT-enclosed value |(?!['"])[^>\t\n\r\f ]* # bare value ) )? (?:[\t\n\r\f ]|/(?!>))* # possibly followed by a space a [a-zA-Z][^\t\n\r\f />]* # tag name [\t\n\r\f /]* # optional whitespace before attribute name (?:(?<=['"\t\n\r\f /])[^\t\n\r\f />][^\t\n\r\f /=>]* # attribute name (?:[\t\n\r\f ]*=[\t\n\r\f ]* # value indicator (?:'[^']*' # LITA-enclosed value |"[^"]*" # LIT-enclosed value |(?!['"])[^>\t\n\r\f ]* # bare value ) )? [\t\n\r\f /]* # possibly followed by a space )* >? 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@seZdZdZdZdZdddœdd„Zd d „Zd d „Zd d„Z dZ dd„Z ddœdd„Z dd„Z d>dd„Zdd„Zdd„Zd?dd„Zd@d d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zd'.)Ú_HTMLParser__starttag_textrr r r Úget_starttag_text¹szHTMLParser.get_starttag_text©Ú escapablecCsp| ¡|_||_|jdkr(t d¡|_nD|rP|jsPt d|jtjtjB¡|_nt d|jtjtjB¡|_dS)NÚ plaintextz\Zz&|])z])) ÚlowerrrÚreÚcompilerrÚ IGNORECASEÚASCII)r Úelemr)r r r Úset_cdata_mode½s     ÿ  ÿzHTMLParser.set_cdata_modecCst|_d|_d|_dS)NT)rrrrrr r r Úclear_cdata_modeÉszHTMLParser.clear_cdata_modecCs ||_dS)aEnable or disable support of the CDATA sections. If enabled, "<[CDATA[" starts a CDATA section which ends with "]]>". If disabled, "<[CDATA[" starts a bogus comments which ends with ">". This method is not called by default. Its purpose is to be called in custom handle_starttag() and handle_endtag() methods, with value that depends on the adjusted current node. See https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state for details. N)r)r Úflagr r r Ú_set_support_cdataÎs zHTMLParser._set_support_cdatac CsB|j}d}t|ƒ}||krÚ|jrv|jsv| d|¡}|dkr | dt||dƒ¡}|dkrpt d¡  ||¡spqÚ|}n*|j   ||¡}|r’|  ¡}n|jrœqÚ|}||krÞ|jrÌ|j rÌ|  t|||…ƒ¡n|  |||…¡| ||¡}||kröqÚ|j}|d|ƒrr9rAr?z]]>rrCr@rBrrzrC) rrKÚ commentcloserHÚcommentabruptcloserMrIrTr])r raÚreportrrMrbr r r rPŒszHTMLParser.parse_commentrcCs`|j}|||d…dvs"Jdƒ‚| d|d¡}|dkr>dS|rX| ||d|…¡|dS)Nr<)r;r8rhrrCr)rrErT)r rarkrÚposr r r rg›szHTMLParser.parse_bogus_commentcCsd|j}|||d…dks"Jdƒ‚t ||d¡}|s:dS| ¡}| ||d|…¡| ¡}|S)Nr<r:zunexpected call to parse_pi()rC)rÚpicloserHrIrXr]©r rarrMrbr r r rQ§szHTMLParser.parse_picCs(d|_| |¡}|dkr|S|j}|||…|_g}t ||d¡}|sPJdƒ‚| ¡}| d¡ ¡|_}||kr.t  ||¡}|sŠq.| ddd¡\} } } | s¨d} n\| dd…dkrÌ| dd…ksøn| dd…dkrô| dd…krnn | dd…} | rt | ƒ} |  |  ¡| f¡| ¡}ql|||…  ¡} | d vr¬|  ¡\} }d |jvrˆ| |j d ¡} t|jƒ|j d ¡}n|t|jƒ}| |||…¡|S|  d ¡rÆ| ||¡n^| ||¡||jvsú|jrð|d ksú|d kr |j|ddn||jvr$|j|dd|S)Nrrz#unexpected call to parse_starttag()r<r@ú'rCú")rú/>Ú rqZnoscriptr*Fr(T)r&Úcheck_for_whole_start_tagrÚtagfind_tolerantrMr]r[r+rÚattrfind_tolerantrrÚstripZgetposÚcountrrFrJrUÚhandle_startendtagÚhandle_starttagÚCDATA_CONTENT_ELEMENTSrr1ÚRCDATA_CONTENT_ELEMENTS)r raÚendposrÚattrsrMrcÚtagÚmÚattrnameÚrestZ attrvaluer]ÚlinenoÚoffsetr r r rN³sj    & ÿ ÿ       ÿ   ÿÿþ zHTMLParser.parse_starttagcCs>|j}t ||d¡}|sJ‚| ¡}||ddkr:dS|S)NrrrC)rÚ locatetagendrMr]rnr r r rsìsz$HTMLParser.check_for_whole_start_tagcCsà|j}|||d…dks"Jdƒ‚| d|d¡dkr:dSt ||¡sp||d|d…dkrf|dS| |¡St ||d¡}|sˆJ‚| ¡}||ddkr¤dSt ||d¡}|s¼J‚| d¡  ¡}|  |¡|  ¡|S) Nr<r8zunexpected call to parse_endtagrrrCr@r) rrErSrMrgr„r]rtr[r+Ú handle_endtagr2)r rarrMrbr~r r r rOös&   zHTMLParser.parse_endtagcCs| ||¡| |¡dS©N)ryr…©r r~r}r r r rxs zHTMLParser.handle_startendtagcCsdSr†r r‡r r r ryszHTMLParser.handle_starttagcCsdSr†r )r r~r r r r…szHTMLParser.handle_endtagcCsdSr†r ©r rer r r r\!szHTMLParser.handle_charrefcCsdSr†r rˆr r r r_%szHTMLParser.handle_entityrefcCsdSr†r ©r r"r r r rJ)szHTMLParser.handle_datacCsdSr†r r‰r r r rT-szHTMLParser.handle_commentcCsdSr†r )r Zdeclr r r rW1szHTMLParser.handle_declcCsdSr†r r‰r r r rX5szHTMLParser.handle_picCsdSr†r r‰r r r rV8szHTMLParser.unknown_decl)T)T)r)!Ú__name__Ú __module__Ú __qualname__Ú__doc__rzr{r r r$r%r&r'r1r2r4r!rRrPrgrQrNrsrOrxryr…r\r_rJrTrWrXrVr r r r rZs>    "   9 )rr,rZhtmlrÚ__all__r-rr`r^rZrLrSrmrirjrtÚVERBOSErur„Zlocatestarttagend_tolerantZ endendtagZ endtagfindrrr r r r Ús4            õ  óò