U ��.e���@sddlmZmZmZddlmZmZddlZddlm Z ddl m Z ddl m Z ddl m Z dd lmZdd l mZdd lmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"d!dd�Z#d"dd�Z$dd�Z%Gdd�de&�Z'ej(dd��Z)dd�Z*d#dd�Z+Gdd �d e,�Z-dS)$�)�absolute_import�division�unicode_literals)�with_metaclass�viewkeysN)� OrderedDict�)� _inputstream)� _tokenizer)� treebuilders)�Marker)�_utils)�spaceCharacters�asciiUpper2Lower�specialElements�headingElements� cdataElements�rcdataElements� tokenTypes� tagTokenTypes� namespaces�htmlIntegrationPointElements�"mathmlTextIntegrationPointElements�adjustForeignAttributes�adjustMathMLAttributes�adjustSVGAttributes�E�_ReparseException�etreeTcKs$t�|�}t||d�}|j|f|�S)a�Parse an HTML document as a string or file-like object into a tree :arg doc: the document to parse as a string or file-like object :arg treebuilder: the treebuilder to use when parsing :arg namespaceHTMLElements: whether or not to namespace HTML elements :returns: parsed tree Example: >>> from html5lib.html5parser import parse >>> parse('<html><body><p>This is a doc</p></body></html>') <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0> ��namespaceHTMLElements)r �getTreeBuilder� HTMLParser�parse)�doc� treebuilderr �kwargs�tb�p�r)�D/usr/lib/python3.8/site-packages/pip/_vendor/html5lib/html5parser.pyr#s  r#�divcKs,t�|�}t||d�}|j|fd|i|��S)a#Parse an HTML fragment as a string or file-like object into a tree :arg doc: the fragment to parse as a string or file-like object :arg container: the container context to parse the fragment in :arg treebuilder: the treebuilder to use when parsing :arg namespaceHTMLElements: whether or not to namespace HTML elements :returns: parsed tree Example: >>> from html5lib.html5libparser import parseFragment >>> parseFragment('<b>this is a fragment</b>') <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090> r� container)r r!r"� parseFragment)r$r,r%r r&r'r(r)r)r*r-2s  r-csG�fdd�dt�}|S)NcseZdZ�fdd�ZdS)z-method_decorator_metaclass.<locals>.Decoratedcs>|��D]$\}}t|tj�r$�|�}|||<qt�||||�S�N)�items� isinstance�types� FunctionType�type�__new__)�metaZ classname�basesZ classDictZ attributeNameZ attribute��functionr)r*r4Ms   z5method_decorator_metaclass.<locals>.Decorated.__new__N)�__name__� __module__� __qualname__r4r)r7r)r*� DecoratedLsr<)r3)r8r<r)r7r*�method_decorator_metaclassKsr=c@s�eZdZdZd+dd�Zd,dd �Zd d �Zed d ��Zdd�Z dd�Z dd�Z dd�Z dd�Z dd�Zd-dd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�ZdS).r"z]HTML parser Generates a tree structure from a stream of (possibly malformed) HTML. NFTcsL|�_|dkrt�d�}||��_g�_t�fdd�t|���D���_dS)a� :arg tree: a treebuilder class controlling the type of tree that will be returned. Built in treebuilders can be accessed through html5lib.treebuilders.getTreeBuilder(treeType) :arg strict: raise an exception when a parse error is encountered :arg namespaceHTMLElements: whether or not to namespace HTML elements :arg debug: whether or not to enable debug mode which logs things Example: >>> from html5lib.html5parser import HTMLParser >>> parser = HTMLParser() # generates parser with etree builder >>> parser = HTMLParser('lxml', strict=True) # generates parser with lxml builder which is strict Nrcs g|]\}}||��j�f�qSr))�tree)�.0�name�cls��selfr)r*� <listcomp>zsz'HTMLParser.__init__.<locals>.<listcomp>) �strictr r!r>�errors�dict� getPhasesr/�phases)rCr>rEr �debugr)rBr*�__init__^s    �zHTMLParser.__init__r+cKsh||_||_||_tj|fd|i|��|_|��z |��Wn$tk rb|��|��YnXdS)N�parser) � innerHTMLModer,� scriptingr Z HTMLTokenizer� tokenizer�reset�mainLoopr)rC�stream� innerHTMLr,rNr&r)r)r*�_parse}s zHTMLParser._parsecCs�|j��d|_g|_g|_d|_|jr�|j��|_ |j t krL|j j |j _ n0|j tkrd|j j|j _ n|j dkr||j j|j _ n|jd|_|j��|��nd|_ |jd|_d|_d|_d|_dS)NFz no quirks� plaintext� beforeHtml�initialT)r>rP� firstStartTagrF�log� compatModerMr,�lowerrSrrO� rcdataState�stater� rawtextState�plaintextStaterI�phase�insertHtmlElement�resetInsertionModeZ lastPhaseZbeforeRCDataPhase� framesetOKrBr)r)r*rP�s*         zHTMLParser.resetcCst|d�sdS|jjjdjS)z�Name of the character encoding that was used to decode the input stream, or :obj:`None` if that is not determined yet rONr)�hasattrrOrR� charEncodingr@rBr)r)r*�documentEncoding�s zHTMLParser.documentEncodingcCsJ|jdkr6|jtdkr6d|jko4|jd�t�dkS|j|jftkSdS)N�annotation-xml�mathml�encoding)z text/htmlzapplication/xhtml+xml)r@� namespacer� attributes� translaterr�rC�elementr)r)r*�isHTMLIntegrationPoint�s  �  ���z!HTMLParser.isHTMLIntegrationPointcCs|j|jftkSr.)rjr@rrmr)r)r*�isMathMLTextIntegrationPoint�sz'HTMLParser.isMathMLTextIntegrationPointcCshtd}td}td}td}td}td}td}|��D�]�}d} |} | dk �r�| } |jjrp|jjdnd} | r~| jnd} | r�| jnd} | d }||kr�|�| d | �d i��d} qNt|jj�d k�sd| |jj k�sd|� | ��r||k�r |d t ddg�k�sd|||fk�sd| t dk�rH| dk�rH||k�rH|d dk�sd|� | ��rl||||fk�rl|j}n |jd}||k�r�|�| �} qN||k�r�|�| �} qN||k�r�|�| �} qN||k�r�|�| �} qN||k�r�|�| �} qN||krN|�| �} qN||kr@| dr@| ds@|�dd | d i�q@d}g}|�rd|�|j�|j��}|�r.|j|k�s.t��q.dS)N� CharactersZSpaceCharacters�StartTag�EndTag�CommentZDoctype� ParseError���r3�data�datavarsrr@ZmglyphZ malignmarkrhrg�svg�inForeignContent� selfClosing�selfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r�normalizedTokensr>� openElementsrjr@� parseError�get�len�defaultNamespacerp� frozensetrror`rI�processCharacters�processSpaceCharacters�processStartTag� processEndTag�processComment�processDoctype�append� processEOF�AssertionError)rCZCharactersTokenZSpaceCharactersTokenZ StartTagTokenZ EndTagTokenZ CommentTokenZ DoctypeTokenZParseErrorToken�tokenZ prev_token� new_token� currentNodeZcurrentNodeNamespaceZcurrentNodeNamer3r`Z reprocessrIr)r)r*rQ�s�  ���� � ��� � � �             � �  zHTMLParser.mainLoopccs|jD]}|�|�VqdSr.)rO�normalizeToken�rCr�r)r)r*r}s zHTMLParser.normalizedTokenscOs |j|ddf|�|�|j��S)a�Parse a HTML document into a well-formed tree :arg stream: a file-like object or string containing the HTML to be parsed The optional encoding parameter must be a string that indicates the encoding. If specified, that encoding will be used, regardless of any BOM or later declaration (such as in a meta element). :arg scripting: treat noscript elements as if JavaScript was turned on :returns: parsed tree Example: >>> from html5lib.html5parser import HTMLParser >>> parser = HTMLParser() >>> parser.parse('<html><body><p>This is a doc</p></body></html>') <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0> FN)rTr>Z getDocument�rCrR�argsr&r)r)r*r# szHTMLParser.parsecOs|j|df|�|�|j��S)aZParse a HTML fragment into a well-formed tree fragment :arg container: name of the element we're setting the innerHTML property if set to None, default to 'div' :arg stream: a file-like object or string containing the HTML to be parsed The optional encoding parameter must be a string that indicates the encoding. If specified, that encoding will be used, regardless of any BOM or later declaration (such as in a meta element) :arg scripting: treat noscript elements as if JavaScript was turned on :returns: parsed tree Example: >>> from html5lib.html5libparser import HTMLParser >>> parser = HTMLParser() >>> parser.parseFragment('<b>this is a fragment</b>') <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090> T)rTr>Z getFragmentr�r)r)r*r-$szHTMLParser.parseFragment�XXX-undefined-errorcCs@|dkr i}|j�|jj��||f�|jr<tt||��dSr.)rFr�rOrRZpositionrErur)rCZ errorcoderxr)r)r*r@s zHTMLParser.parseErrorcCsT|dtdkrP|d}t|�|d<t|�t|d�krP|d�|ddd��|S)Nr3rrrwrv)rrr��update)rCr��rawr)r)r*r�Hs  zHTMLParser.normalizeTokencCst|t�dSr.)�adjust_attributesrr�r)r)r*rSsz!HTMLParser.adjustMathMLAttributescCst|t�dSr.)r�rr�r)r)r*rVszHTMLParser.adjustSVGAttributescCst|t�dSr.)r��adjustForeignAttributesMapr�r)r)r*rYsz"HTMLParser.adjustForeignAttributescCs|j��dSr.)rLr`r�r)r)r*�reparseTokenNormal\szHTMLParser.reparseTokenNormalcCs�d}ddddddddddd d d d d �}|jjddd �D]�}|j}d}||jjdkrj|js`t�d}|j}|dkr||js|t�|s�|j|jjkr�q8||kr�|j||}q�q8|r8|jd }q�q8||_dS)NF�inSelect�inCell�inRow� inTableBody� inCaption� inColumnGroup�inTable�inBody� inFrameset� beforeHead)�select�td�th�tr�tbody�thead�tfoot�caption�colgroup�table�head�body�frameset�htmlrvrT)r�r�r�r�) r>r~r@rSr�rjr�rIr`)rCZlastZnewModes�nodeZnodeNameZ new_phaser)r)r*rb`sD�   zHTMLParser.resetInsertionModecCsR|dks t�|j�|�|dkr.|jj|j_n |jj|j_|j|_|j d|_dS)N)�RAWTEXT�RCDATAr��text) r�r>� insertElementrOr^r]r\r`� originalPhaserI)rCr�Z contentTyper)r)r*�parseRCDataRawtext�s   zHTMLParser.parseRCDataRawtext)NFTF)Fr+F)r�N)r9r:r;�__doc__rKrTrP�propertyrfrorprQr}r#r-rr�rrrr�rbr�r)r)r)r*r"Ws(  "  C  ,r"cs"dd�}dd�}Gdd�dt|||����Gdd�d��}Gd d �d ��}G�fd d �d ��}G�fd d�d��}G�fdd�d��}G�fdd�d��}G�fdd�d��} G�fdd�d��} G�fdd�d��} G�fdd�d��} G�fdd�d��} G�fdd�d��}G�fdd �d ��}G�fd!d"�d"��}G�fd#d$�d$��}G�fd%d&�d&��}G�fd'd(�d(��}G�fd)d*�d*��}G�fd+d,�d,��}G�fd-d.�d.��}G�fd/d0�d0��}G�fd1d2�d2��}G�fd3d4�d4��}||||||| | | | | ||||||||||||d5�S)6Ncs(tdd�t��D�����fdd�}|S)z4Logger that records which phase processes each tokencss|]\}}||fVqdSr.r))r?�key�valuer)r)r*� <genexpr>�sz)getPhases.<locals>.log.<locals>.<genexpr>cs��j�d�r�t|�dkr�|d}zd�|di}Wn�YnX|dtkr\|d|d<|jj�|jjjj|jj j j|j j�j|f��|f|�|�S�|f|�|�SdS)NZprocessrr3r@) r9� startswithr�rrLrYr�rOr]r`� __class__)rCr�r&r��info�r8Z type_namesr)r*�wrapped�s    �z'getPhases.<locals>.log.<locals>.wrapped)rGrr/)r8r�r)r�r*rY�s �zgetPhases.<locals>.logcSs|r t|�StSdSr.)r=r3)Z use_metaclassZmetaclass_funcr)r)r*� getMetaclass�szgetPhases.<locals>.getMetaclassc@sXeZdZdZdd�Zdd�Zdd�Zdd �Zd d �Zd d �Z dd�Z dd�Z dd�Z dS)zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing cSs||_||_dSr.)rLr>�rCrLr>r)r)r*rK�sz!getPhases.<locals>.Phase.__init__cSst�dSr.)�NotImplementedErrorrBr)r)r*r��sz#getPhases.<locals>.Phase.processEOFcSs|j�||jjd�dS)Nrv�r>� insertCommentr~r�r)r)r*r��sz'getPhases.<locals>.Phase.processCommentcSs|j�d�dS)Nzunexpected-doctype�rLrr�r)r)r*r��sz'getPhases.<locals>.Phase.processDoctypecSs|j�|d�dS�Nrw�r>� insertTextr�r)r)r*r��sz*getPhases.<locals>.Phase.processCharacterscSs|j�|d�dSr�r�r�r)r)r*r��sz/getPhases.<locals>.Phase.processSpaceCharacterscSs|j|d|�S�Nr@)�startTagHandlerr�r)r)r*r��sz(getPhases.<locals>.Phase.processStartTagcSsf|jjs |ddkr |j�d�|d��D],\}}||jjdjkr,||jjdj|<q,d|j_dS)Nr@r�z non-html-rootrwrF)rLrXrr/r>r~rk�rCr��attrr�r)r)r*� startTagHtml�s  z%getPhases.<locals>.Phase.startTagHtmlcSs|j|d|�Sr�)� endTagHandlerr�r)r)r*r��sz&getPhases.<locals>.Phase.processEndTagN) r9r:r;r�rKr�r�r�r�r�r�r�r�r)r)r)r*�Phase�s r�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dS)zgetPhases.<locals>.InitialPhasecSsdSr.r)r�r)r)r*r��sz6getPhases.<locals>.InitialPhase.processSpaceCharacterscSs|j�||jj�dSr.�r>r�Zdocumentr�r)r)r*r��sz.getPhases.<locals>.InitialPhase.processCommentcSs�|d}|d}|d}|d}|dks@|dk s@|dk rL|dkrL|j�d�|dkrXd}|j�|�|dkrv|�t�}|r�|ddks�|�d �s�|d ks�|�d �r�|dks�|r�|��d kr�d |j_n$|�d�s�|�d �r�|dk r�d|j_|jj d|j_ dS)Nr@�publicId�systemId�correctr�zabout:legacy-compatzunknown-doctype�)7z*+//silmaril//dtd html pro v0r11 19970101//z4-//advasoft ltd//dtd html 3.0 aswedit + extensions//z*-//as//dtd html 3.0 aswedit + extensions//z-//ietf//dtd html 2.0 level 1//z-//ietf//dtd html 2.0 level 2//z&-//ietf//dtd html 2.0 strict level 1//z&-//ietf//dtd html 2.0 strict level 2//z-//ietf//dtd html 2.0 strict//z-//ietf//dtd html 2.0//z-//ietf//dtd html 2.1e//z-//ietf//dtd html 3.0//z-//ietf//dtd html 3.2 final//z-//ietf//dtd html 3.2//z-//ietf//dtd html 3//z-//ietf//dtd html level 0//z-//ietf//dtd html level 1//z-//ietf//dtd html level 2//z-//ietf//dtd html level 3//z"-//ietf//dtd html strict level 0//z"-//ietf//dtd html strict level 1//z"-//ietf//dtd html strict level 2//z"-//ietf//dtd html strict level 3//z-//ietf//dtd html strict//z-//ietf//dtd html//z(-//metrius//dtd metrius presentational//z5-//microsoft//dtd internet explorer 2.0 html strict//z.-//microsoft//dtd internet explorer 2.0 html//z0-//microsoft//dtd internet explorer 2.0 tables//z5-//microsoft//dtd internet explorer 3.0 html strict//z.-//microsoft//dtd internet explorer 3.0 html//z0-//microsoft//dtd internet explorer 3.0 tables//z#-//netscape comm. corp.//dtd html//z*-//netscape comm. corp.//dtd strict html//z*-//o'reilly and associates//dtd html 2.0//z3-//o'reilly and associates//dtd html extended 1.0//z;-//o'reilly and associates//dtd html extended relaxed 1.0//zN-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//zE-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//z$-//spyglass//dtd html 2.0 extended//z+-//sq//dtd html 2.0 hotmetal + extensions//z--//sun microsystems corp.//dtd hotjava html//z4-//sun microsystems corp.//dtd hotjava strict html//z-//w3c//dtd html 3 1995-03-24//z-//w3c//dtd html 3.2 draft//z-//w3c//dtd html 3.2 final//z-//w3c//dtd html 3.2//z-//w3c//dtd html 3.2s draft//z-//w3c//dtd html 4.0 frameset//z#-//w3c//dtd html 4.0 transitional//z(-//w3c//dtd html experimental 19960712//z&-//w3c//dtd html experimental 970421//z-//w3c//dtd w3 html//z-//w3o//dtd w3 html 3.0//z#-//webtechs//dtd mozilla html 2.0//z-//webtechs//dtd mozilla html//)z$-//w3o//dtd w3 html strict 3.0//en//z"-/w3c/dtd html 4.0 transitional/enr�)z -//w3c//dtd html 4.01 frameset//z$-//w3c//dtd html 4.01 transitional//z:http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd�quirks)z -//w3c//dtd xhtml 1.0 frameset//z$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrV) rLrr>Z insertDoctyperlrr�r[rZrIr`)rCr�r@r�r�r�r)r)r*r��sX��   ��9�<��?�@�@ �A ����z.getPhases.<locals>.InitialPhase.processDoctypecSsd|j_|jjd|j_dS)Nr�rV)rLrZrIr`rBr)r)r*� anythingElseMsz,getPhases.<locals>.InitialPhase.anythingElsecSs|j�d�|��|S)Nzexpected-doctype-but-got-chars�rLrr�r�r)r)r*r�Qs z1getPhases.<locals>.InitialPhase.processCharacterscSs"|j�dd|di�|��|S)Nz"expected-doctype-but-got-start-tagr@r�r�r)r)r*r�Vs  �z/getPhases.<locals>.InitialPhase.processStartTagcSs"|j�dd|di�|��|S)Nz expected-doctype-but-got-end-tagr@r�r�r)r)r*r�\s  �z-getPhases.<locals>.InitialPhase.processEndTagcSs|j�d�|��dS)Nzexpected-doctype-but-got-eofTr�rBr)r)r*r�bs z*getPhases.<locals>.InitialPhase.processEOFN) r9r:r;r�r�r�r�r�r�r�r�r)r)r)r*� InitialPhase�s_r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dS)z"getPhases.<locals>.BeforeHtmlPhasecSs&|j�tdd��|jjd|j_dS)Nr�rrr�)r>Z insertRoot�impliedTagTokenrLrIr`rBr)r)r*raisz4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementcSs |��dS�NT�rarBr)r)r*r�nsz-getPhases.<locals>.BeforeHtmlPhase.processEOFcSs|j�||jj�dSr.r�r�r)r)r*r�rsz1getPhases.<locals>.BeforeHtmlPhase.processCommentcSsdSr.r)r�r)r)r*r�usz9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharacterscSs |��|Sr.r�r�r)r)r*r�xsz4getPhases.<locals>.BeforeHtmlPhase.processCharacterscSs |ddkrd|j_|��|S)Nr@r�T)rLrXrar�r)r)r*r�|s z2getPhases.<locals>.BeforeHtmlPhase.processStartTagcSs4|ddkr$|j�dd|di�n |��|SdS)Nr@�r�r�r��brzunexpected-end-tag-before-html)rLrrar�r)r)r*r��s   �z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN) r9r:r;rar�r�r�r�r�r�r)r)r)r*�BeforeHtmlPhasegsr�csXeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dS)z"getPhases.<locals>.BeforeHeadPhasecsV��|||�t�d|jfd|jfg�|_|j|j_t�d|jfg�|_ |j |j _dS)Nr�r�r�) rKr �MethodDispatcherr�� startTagHeadr�� startTagOther�default�endTagImplyHeadr�� endTagOtherr��r�r)r*rK�s� �z+getPhases.<locals>.BeforeHeadPhase.__init__cSs|�tdd��dS)Nr�rrT�r�r�rBr)r)r*r��sz-getPhases.<locals>.BeforeHeadPhase.processEOFcSsdSr.r)r�r)r)r*r��sz9getPhases.<locals>.BeforeHeadPhase.processSpaceCharacterscSs|�tdd��|S�Nr�rrr�r�r)r)r*r��sz4getPhases.<locals>.BeforeHeadPhase.processCharacterscSs|jjd�|�S�Nr��rLrIr�r�r)r)r*r��sz/getPhases.<locals>.BeforeHeadPhase.startTagHtmlcSs0|j�|�|jjd|j_|jjd|j_dS)Nrv�inHead)r>r�r~� headPointerrLrIr`r�r)r)r*r��s z/getPhases.<locals>.BeforeHeadPhase.startTagHeadcSs|�tdd��|Sr�r�r�r)r)r*r��sz0getPhases.<locals>.BeforeHeadPhase.startTagOthercSs|�tdd��|Sr�r�r�r)r)r*r��sz2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadcSs|j�dd|di�dS)Nzend-tag-after-implied-rootr@r�r�r)r)r*r��s �z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN) r9r:r;rKr�r�r�r�r�r�r�r�r)r�r)r*�BeforeHeadPhase�s r�cs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd �Zd!S)"zgetPhases.<locals>.InHeadPhasec s���|||�t�d|jfd|jfd|jfd|jfd|jfd|jfd|j fd|j fg�|_ |j |j _ t�d|jfd |jfg�|_|j|j_ dS) Nr��title)�noframes�style�noscript�script)�base�basefont�bgsound�command�linkr5r�)r�r�r�)rKr r�r�� startTagTitle�startTagNoFramesStyle�startTagNoscript�startTagScript�startTagBaseLinkCommand� startTagMetar�r�r�r�� endTagHead�endTagHtmlBodyBrr�r�r�r�r)r*rK�s&�� �z'getPhases.<locals>.InHeadPhase.__init__cSs |��dSr��r�rBr)r)r*r��sz)getPhases.<locals>.InHeadPhase.processEOFcSs |��|Sr.rr�r)r)r*r��sz0getPhases.<locals>.InHeadPhase.processCharacterscSs|jjd�|�Sr�r�r�r)r)r*r��sz+getPhases.<locals>.InHeadPhase.startTagHtmlcSs|j�d�dS)Nz!two-heads-are-not-better-than-oner�r�r)r)r*r��sz+getPhases.<locals>.InHeadPhase.startTagHeadcSs$|j�|�|jj��d|d<dS�NTr|�r>r�r~�popr�r)r)r*r��s  z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandcSs�|j�|�|jj��d|d<|d}|jjjjddkr�d|krZ|jjj�|d�nVd|kr�d|kr�|d� �d kr�t � |d� d ��}t � |�}|��}|jjj�|�dS) NTr|rwrZ tentative�charsetZcontentz http-equivz content-typezutf-8)r>r�r~rrLrOrRreZchangeEncodingr[r Z EncodingBytes�encodeZContentAttrParserr#)rCr�rkrwrL�codecr)r)r*r��s   �� z+getPhases.<locals>.InHeadPhase.startTagMetacSs|j�|d�dS)Nr��rLr�r�r)r)r*r��sz,getPhases.<locals>.InHeadPhase.startTagTitlecSs|j�|d�dS)Nr�r r�r)r)r*r��sz4getPhases.<locals>.InHeadPhase.startTagNoFramesStylecSs8|jjr|j�|d�n|j�|�|jjd|j_dS)Nr��inHeadNoscript)rLrNr�r>r�rIr`r�r)r)r*r��s z/getPhases.<locals>.InHeadPhase.startTagNoscriptcSs<|j�|�|jjj|jj_|jj|j_|jjd|j_dS)Nr�) r>r�rLrOZscriptDataStater]r`r�rIr�r)r)r*r�s  z-getPhases.<locals>.InHeadPhase.startTagScriptcSs |��|Sr.rr�r)r)r*r� sz,getPhases.<locals>.InHeadPhase.startTagOthercSs:|jjj��}|jdks&td|j��|jjd|j_dS)Nr�zExpected head got %s� afterHead�rLr>r~rr@r�rIr`�rCr�r�r)r)r*rsz)getPhases.<locals>.InHeadPhase.endTagHeadcSs |��|Sr.rr�r)r)r*rsz/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrcSs|j�dd|di�dS�N�unexpected-end-tagr@r�r�r)r)r*r�sz*getPhases.<locals>.InHeadPhase.endTagOthercSs|�td��dS)Nr�)rr�rBr)r)r*r�sz+getPhases.<locals>.InHeadPhase.anythingElseN)r9r:r;rKr�r�r�r�r�r�r�r�r�r�r�rrr�r�r)r�r)r*� InHeadPhase�s  rcsxeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�ZdS)z&getPhases.<locals>.InHeadNoscriptPhasecsf��|||�t�d|jfd|jfd|jfg�|_|j|j_t�d|j fd|j fg�|_ |j |j _dS)Nr�)r�r�r�r5r�r�)r�r�r�r�) rKr r�r�r��startTagHeadNoscriptr�r�r��endTagNoscript�endTagBrr�r�r�r�r)r*rK s� �z/getPhases.<locals>.InHeadNoscriptPhase.__init__cSs|j�d�|��dS)Nzeof-in-head-noscriptTr�rBr)r)r*r�0s z1getPhases.<locals>.InHeadNoscriptPhase.processEOFcSs|jjd�|�S�Nr�)rLrIr�r�r)r)r*r�5sz5getPhases.<locals>.InHeadNoscriptPhase.processCommentcSs|j�d�|��|S)Nzchar-in-head-noscriptr�r�r)r)r*r�8s z8getPhases.<locals>.InHeadNoscriptPhase.processCharacterscSs|jjd�|�Sr�rLrIr�r�r)r)r*r�=sz=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharacterscSs|jjd�|�Sr�r�r�r)r)r*r�@sz3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlcSs|jjd�|�Srr�r�r)r)r*r�Csz>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandcSs|j�dd|di�dS�N�unexpected-start-tagr@r�r�r)r)r*rFsz;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptcSs"|j�dd|di�|��|S�Nzunexpected-inhead-noscript-tagr@r�r�r)r)r*r�Isz4getPhases.<locals>.InHeadNoscriptPhase.startTagOthercSs:|jjj��}|jdks&td|j��|jjd|j_dS)Nr�zExpected noscript got %sr�r r r)r)r*rNsz5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptcSs"|j�dd|di�|��|Srr�r�r)r)r*rSsz/getPhases.<locals>.InHeadNoscriptPhase.endTagBrcSs|j�dd|di�dSrr�r�r)r)r*r�Xsz2getPhases.<locals>.InHeadNoscriptPhase.endTagOthercSs|�td��dS)Nr�)rr�rBr)r)r*r�[sz3getPhases.<locals>.InHeadNoscriptPhase.anythingElseN)r9r:r;rKr�r�r�r�r�r�rr�rrr�r�r)r�r)r*�InHeadNoscriptPhases rcspeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�ZdS)z!getPhases.<locals>.AfterHeadPhasecsn��|||�t�d|jfd|jfd|jfd|jfd|jfg�|_|j |j_ t�d|j fg�|_ |j |j _ dS)Nr�r�r�) r�r�r�r�r5r�r�r�r�r�)r�r�r�)rKr r�r�� startTagBody�startTagFrameset�startTagFromHeadr�r�r�r�rr�r�r�r�r)r*rK`s�� � z*getPhases.<locals>.AfterHeadPhase.__init__cSs |��dSr�rrBr)r)r*r�qsz,getPhases.<locals>.AfterHeadPhase.processEOFcSs |��|Sr.rr�r)r)r*r�usz3getPhases.<locals>.AfterHeadPhase.processCharacterscSs|jjd�|�Sr�r�r�r)r)r*r�ysz.getPhases.<locals>.AfterHeadPhase.startTagHtmlcSs(d|j_|j�|�|jjd|j_dS)NFr�)rLrcr>r�rIr`r�r)r)r*r|s z.getPhases.<locals>.AfterHeadPhase.startTagBodycSs |j�|�|jjd|j_dS)Nr�)r>r�rLrIr`r�r)r)r*r�s z2getPhases.<locals>.AfterHeadPhase.startTagFramesetcSsr|j�dd|di�|jj�|jj�|jjd�|�|jjddd�D] }|jdkrL|jj� |�qnqLdS)Nz#unexpected-start-tag-out-of-my-headr@r�rvr�) rLrr>r~r�r�rIr�r@�remover r)r)r*r�s � z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadcSs|j�dd|di�dSrr�r�r)r)r*r��sz.getPhases.<locals>.AfterHeadPhase.startTagHeadcSs |��|Sr.rr�r)r)r*r��sz/getPhases.<locals>.AfterHeadPhase.startTagOthercSs |��|Sr.rr�r)r)r*r�sz2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrcSs|j�dd|di�dSrr�r�r)r)r*r��sz-getPhases.<locals>.AfterHeadPhase.endTagOthercSs.|j�tdd��|jjd|j_d|j_dS)Nr�rrr�T)r>r�r�rLrIr`rcrBr)r)r*r��sz.getPhases.<locals>.AfterHeadPhase.anythingElseN)r9r:r;rKr�r�r�rrrr�r�rr�r�r)r�r)r*�AfterHeadPhase_s  rcs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1d_d`�Z2dadb�Z3dcdd�Z4dedf�Z5dgS)hzgetPhases.<locals>.InBodyPhasec$s���|||�|j|_t�d|jfd|jfd|jfd|jfd|j ft |j fd|j fd|j fd|jfd |jfd |jfd |jfd |jfd |jfd|jfd|jfd|jfd|jfd|jfd|jfd|jfd|jfd|jfd|jfd|jfd|jfd|j fd|j!fd|j"fd|j#fd|j$fd|j%fd |j&fg!�|_'|j(|j'_)t�d|j*fd|j+fd!|j,fd|j-fd"|j.fd#|j/ft |j0fd$|j1fd|j2fd%|j3fg �|_4|j5|j4_)dS)&Nr�) r�r�r�r�r�r5r�r�r�r�r�)�address�article�aside� blockquote�center�details�dirr+�dl�fieldset� figcaption�figure�footer�header�hgroup�main�menu�nav�olr(�section�summary�ul)�pre�listing�form)�li�dd�dtrU�a) �b�big�code�em�font�i�s�small�strike�strong�tt�u�nobr�button)ZappletZmarquee�objectZxmpr�)Zarear��embed�img�keygenZwbr)Zparam�sourceZtrack�input�hr�image�isindex�textareaZiframer�)Znoembedr�r�)�rp�rt)�option�optgroupZmathry) r��colr��framer�r�r�r�r�r�r�)rr r!r"rHr#r$Zdialogr%r+r&r'r(r)r*r+r,r5r-r.r/r0r4r1r2r3r()r8r9r7)r:r;r<r=r>r?r@rGrArBrCrDrErFr�)6rK�processSpaceCharactersNonPrer�r r�r��startTagProcessInHeadrr�startTagClosePr�startTagHeading�startTagPreListing� startTagForm�startTagListItem�startTagPlaintext� startTagA�startTagFormatting� startTagNobr�startTagButton�startTagAppletMarqueeObject� startTagXmp� startTagTable�startTagVoidFormatting�startTagParamSource� startTagInput� startTagHr� startTagImage�startTagIsIndex�startTagTextarea�startTagIFramer��startTagRawtext�startTagSelect� startTagRpRt� startTagOpt� startTagMath� startTagSvg�startTagMisplacedr�r�r�� endTagBody� endTagHtml� endTagBlock� endTagForm�endTagP�endTagListItem� endTagHeading�endTagFormatting�endTagAppletMarqueeObjectrr�r�r�r�r)r*rK�s�������- ���z'getPhases.<locals>.InBodyPhase.__init__cSs$|j|jko"|j|jko"|j|jkSr.)r@rjrk)rCZnode1Znode2r)r)r*�isMatchingFormattingElement�s   � �z:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementcSs�|j�|�|jjd}g}|jjddd�D](}|tkr@qXq.|�||�r.|�|�q.t|�dksht�t|�dkr�|jj� |d�|jj�|�dS)Nrv�) r>r�r~�activeFormattingElementsr r�r�r�r�r)rCr�rnZmatchingElementsr�r)r)r*�addFormattingElement�s     z3getPhases.<locals>.InBodyPhase.addFormattingElementcSs>td�}|jjddd�D]}|j|kr|j�d�q:qdS)N) r8r9r7r(r�r�r�r�r�r�r�r�rvz expected-closing-tag-but-got-eof)r�r>r~r@rLr)rCZallowed_elementsr�r)r)r*r�s   z)getPhases.<locals>.InBodyPhase.processEOFcSsf|d}|j|_|�d�rH|jjdjdkrH|jjd��sH|dd�}|rb|j��|j�|�dS)Nrw� rv)r4r5rRr) rYr�r�r>r~r@Z hasContent�#reconstructActiveFormattingElementsr�)rCr�rwr)r)r*�!processSpaceCharactersDropNewline s ��  z@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewlinecSsT|ddkrdS|j��|j�|d�|jjrPtdd�|dD��rPd|j_dS)Nrw�cSsg|] }|tk�qSr)�r�r?�charr)r)r*rD"s�zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r>r�r�rLrc�anyr�r)r)r*r�s  ��z0getPhases.<locals>.InBodyPhase.processCharacterscSs|j��|j�|d�dSr�)r>r�r�r�r)r)r*rY&s z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrecSs|jjd�|�Srr�r�r)r)r*rZ*sz4getPhases.<locals>.InBodyPhase.startTagProcessInHeadcSs�|j�dddi�t|jj�dks4|jjdjdkrB|jjs�t�nBd|j_|d� �D],\}}||jjdj krV||jjdj |<qVdS)Nrr@r�rFrw) rLrr�r>r~r@rSr�rcr/rkr�r)r)r*r-s�z+getPhases.<locals>.InBodyPhase.startTagBodycSs�|j�dddi�t|jj�dks4|jjdjdkrB|jjs�t�np|jjsLnf|jjdj rv|jjdj � |jjd�|jjdjdkr�|jj� �qv|j� |�|jj d|j_dS) Nrr@r�rr�rvr�r�)rLrr�r>r~r@rSr�rc�parent� removeChildrr�rIr`r�r)r)r*r8s" z/getPhases.<locals>.InBodyPhase.startTagFramesetcSs.|jjddd�r|�td��|j�|�dS�Nr(rH��variant)r>�elementInScoper{r�r�r�r)r)r*r[Fsz-getPhases.<locals>.InBodyPhase.startTagClosePcSs>|jjddd�r|�td��|j�|�d|j_|j|_dS)Nr(rHr�F) r>r�r{r�r�rLrcr�r�r�r)r)r*r]Ks  z1getPhases.<locals>.InBodyPhase.startTagPreListingcSsZ|jjr|j�dddi�n:|jjddd�r:|�td��|j�|�|jjd|j_dS)Nrr@r6r(rHr�rv) r>� formPointerrLrr�r{r�r�r~r�r)r)r*r^Rs  z+getPhases.<locals>.InBodyPhase.startTagFormcSs�d|j_dgddgddgd�}||d}t|jj�D]@}|j|kr^|jj�t|jd��qx|j t kr6|jdkr6qxq6|jj d d d �r�|jj�td d��|j� |�dS) NFr7r9r8)r7r9r8r@rs)rr+r(r(rHr�) rLrc�reversedr>r~r@r`r�r�� nameTuplerr�r�)rCr�Z stopNamesMapZ stopNamesr�r)r)r*r_[s*�   � ��z/getPhases.<locals>.InBodyPhase.startTagListItemcSs>|jjddd�r|�td��|j�|�|jjj|jj_dSr�) r>r�r{r�r�rLrOr_r]r�r)r)r*r`qs z0getPhases.<locals>.InBodyPhase.startTagPlaintextcSsb|jjddd�r|�td��|jjdjtkrR|j�dd|di�|jj� �|j� |�dS)Nr(rHr�rvrr@) r>r�r{r�r~r@rrLrrr�r�r)r)r*r\ws  z.getPhases.<locals>.InBodyPhase.startTagHeadingcSs~|j�d�}|rf|j�dddd��|�td��||jjkrL|jj�|�||jjkrf|jj�|�|j� �|� |�dS)Nr:�$unexpected-start-tag-implies-end-tag�Z startNameZendName) r>�!elementInActiveFormattingElementsrLrr~r�r~rr�r�r�)rCr�Z afeAElementr)r)r*ras �   z(getPhases.<locals>.InBodyPhase.startTagAcSs|j��|�|�dSr.)r>r�r�r�r)r)r*rb�s z1getPhases.<locals>.InBodyPhase.startTagFormattingcSsP|j��|j�d�rB|j�dddd��|�td��|j��|�|�dS)NrGr�r�)r>r�r�rLrr�r�r�r�r)r)r*rc�s  � z+getPhases.<locals>.InBodyPhase.startTagNobrcSsT|j�d�r2|j�dddd��|�td��|S|j��|j�|�d|j_dS)NrHr�r�F) r>r�rLrr�r�r�r�rcr�r)r)r*rd�s �  z-getPhases.<locals>.InBodyPhase.startTagButtoncSs0|j��|j�|�|jj�t�d|j_dS�NF)r>r�r�r�r�r rLrcr�r)r)r*re�s  z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectcSsB|jjddd�r|�td��|j��d|j_|j�|d�dS)Nr(rHr�Fr�)r>r�r{r�r�rLrcr�r�r)r)r*rf�s  z*getPhases.<locals>.InBodyPhase.startTagXmpcSsR|jjdkr*|jjddd�r*|�td��|j�|�d|j_|jjd|j_ dS)Nr�r(rHr�Fr�) rLrZr>r�r�r�r�rcrIr`r�r)r)r*rg�s   z,getPhases.<locals>.InBodyPhase.startTagTablecSs6|j��|j�|�|jj��d|d<d|j_dS)NTr|F)r>r�r�r~rrLrcr�r)r)r*rh�s    z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingcSs@|jj}|�|�d|dkr<|dd�t�dkr<||j_dS)Nr3rw�hidden)rLrcrhrlr)rCr�rcr)r)r*rj�s   �z,getPhases.<locals>.InBodyPhase.startTagInputcSs$|j�|�|jj��d|d<dSrrr�r)r)r*ri�s  z2getPhases.<locals>.InBodyPhase.startTagParamSourcecSsJ|jjddd�r|�td��|j�|�|jj��d|d<d|j_dS)Nr(rHr�Tr|F) r>r�r{r�r�r~rrLrcr�r)r)r*rk�s   z)getPhases.<locals>.InBodyPhase.startTagHrcSs6|j�dddd��|�tdd|d|dd��dS) Nzunexpected-start-tag-treated-asrPrK�Z originalNameZnewNamerrrwr{�rkr{)rLrr�r�r�r)r)r*rl�s� �z,getPhases.<locals>.InBodyPhase.startTagImagecSs|j�dddi�|jjrdSi}d|dkr>|dd|d<|�tdd|d��|�td d��|�td d��d |dkr�|dd }nd }|�td |d��|d��}d|kr�|d=d |kr�|d =d|d<|�tdd||dd��|� td ��|�td d��|� td��dS)Nzdeprecated-tagr@rQ�actionrwr6rr)rkrOZlabel�promptz3This is a searchable index. Enter search keywords: rq�r3rwrNr{r�) rLrr>r�r�r�r�r�copyr�)rCr�Z form_attrsr�rkr)r)r*rm�s<  �  �  �z.getPhases.<locals>.InBodyPhase.startTagIsIndexcSs0|j�|�|jjj|jj_|j|_d|j_dSr�) r>r�rLrOr\r]r�r�rcr�r)r)r*rn�s z/getPhases.<locals>.InBodyPhase.startTagTextareacSsd|j_|�|�dSr�)rLrcrpr�r)r)r*rosz-getPhases.<locals>.InBodyPhase.startTagIFramecSs"|jjr|�|�n |�|�dSr.)rLrNrpr�r�r)r)r*r�s z/getPhases.<locals>.InBodyPhase.startTagNoscriptcSs|j�|d�dS)z8iframe, noembed noframes, noscript(if scripting enabled)r�Nr r�r)r)r*rp sz.getPhases.<locals>.InBodyPhase.startTagRawtextcSs@|jjdjdkr$|jj�td��|j��|jj�|�dS�NrvrU) r>r~r@rLr`r�r�r�r�r�r)r)r*rss z*getPhases.<locals>.InBodyPhase.startTagOptcSs�|j��|j�|�d|j_|jj|jjd|jjd|jjd|jjd|jjd|jjdfkrx|jjd|j_n|jjd |j_dS) NFr�r�r�r�r�r��inSelectInTabler�)r>r�r�rLrcr`rIr�r)r)r*rqs       �z-getPhases.<locals>.InBodyPhase.startTagSelectcSsB|j�d�r2|j��|jjdjdkr2|j��|j�|�dS)N�rubyrv)r>r��generateImpliedEndTagsr~r@rLrr�r�r)r)r*rr%s    z+getPhases.<locals>.InBodyPhase.startTagRpRtcSsZ|j��|j�|�|j�|�td|d<|j�|�|drV|jj��d|d<dS)Nrhrjr{Tr|) r>r�rLrrrr�r~rr�r)r)r*rt,s      z+getPhases.<locals>.InBodyPhase.startTagMathcSsZ|j��|j�|�|j�|�td|d<|j�|�|drV|jj��d|d<dS)Nryrjr{Tr|) r>r�rLrrrr�r~rr�r)r)r*ru8s      z*getPhases.<locals>.InBodyPhase.startTagSvgcSs|j�dd|di�dS)a5 Elements that should be children of other elements that have a different insertion mode; here they are ignored "caption", "col", "colgroup", "frame", "frameset", "head", "option", "optgroup", "tbody", "td", "tfoot", "th", "thead", "tr", "noscript" zunexpected-start-tag-ignoredr@Nr�r�r)r)r*rvDsz0getPhases.<locals>.InBodyPhase.startTagMisplacedcSs|j��|j�|�dSr.)r>r�r�r�r)r)r*r�Ms z,getPhases.<locals>.InBodyPhase.startTagOthercSs�|jjddd�sD|�tdd��|j�dddi�|�tdd��nT|j�d�|jjdj dkrt|j�dddi�|jj� �}|j dkr�|jj� �}q�dS) Nr(rHr�rrrr@rsrv) r>r�r[r�rLrr{r�r~r@rr r)r)r*r{Qs   z&getPhases.<locals>.InBodyPhase.endTagPcSs~|j�d�s|j��dS|jjdjdkrj|jjdd�D],}|jtd�kr<|j�dd|jd��qjq<|jjd|j_dS)Nr�rv�)r8r9r7rVrUr(rSrTr�r�r�r�r�r�r�r��$expected-one-end-tag-but-got-another�ZgotNameZ expectedName� afterBody) r>r�rLrr~r@r�rIr`r r)r)r*rw^s   �z)getPhases.<locals>.InBodyPhase.endTagBodycSs"|j�d�r|�td��|SdS)Nr�)r>r�rwr�r�r)r)r*rxps z)getPhases.<locals>.InBodyPhase.endTagHtmlcSs�|ddkr|j|_|j�|d�}|r2|j��|jjdj|dkr^|j�dd|di�|r�|jj� �}|j|dkr�|jj� �}qndS)Nr@r4rv�end-tag-too-early) rYr�r>r�r�r~r@rLrr)rCr�ZinScoper�r)r)r*ryvs   z*getPhases.<locals>.InBodyPhase.endTagBlockcSsv|jj}d|j_|dks$|j�|�s8|j�dddi�n:|j��|jjd|krd|j�dddi�|jj�|�dS)Nrr@r6rvzend-tag-too-early-ignored)r>r�r�rLrr�r~rr r)r)r*rz�s� �z)getPhases.<locals>.InBodyPhase.endTagFormcSs�|ddkrd}nd}|jj|d|d�sB|j�dd|di�nf|jj|dd�|jjdj|dkr�|j�dd|di�|jj��}|j|dkr�|jj��}q�dS) Nr@r7�listr�r��excludervr�)r>r�rLrr�r~r@r)rCr�r�r�r)r)r*r|�s  � z-getPhases.<locals>.InBodyPhase.endTagListItemcSs�tD]}|j�|�r|j��q$q|jjdj|dkrP|j�dd|di�tD]8}|j�|�rT|jj��}|jtkr�|jj��}qpq�qTdS)Nrvr@r�) rr>r�r�r~r@rLrr)rCr��itemr)r)r*r}�s     z,getPhases.<locals>.InBodyPhase.endTagHeadingcSsd}|dk�r |d7}|j�|d�}|rD||jjkrR|j�|j�sR|�|�dS||jjkr�|j�dd|di�|jj� |�dS|j�|j�s�|j�dd|di�dS||jjdkr�|j�d d|di�|jj� |�}d}|jj|d�D]}|j t kr�|}�qq�|dk�rR|jj� �}||k�r@|jj� �}�q&|jj� |�dS|jj|d}|jj� |�}|} } d} |jj� | �} | d k�rX| d7} | d8} |jj| } | |jjk�r�|jj� | ��q�| |k�rސqX| |k�r�|jj� | �d}| ��} | |jj|jj� | �<| |jj|jj� | �<| } | j�rF| j�| �| �| �| } �q�| j�rl| j�| �|jtd �k�r�|j��\}}|�| |�n |�| �|��} |�| �|�| �|jj� |�|jj�|| �|jj� |�|jj�|jj� |�d| �qdS) z)The much-feared adoption agency algorithmr�rr@Nzadoption-agency-1.2zadoption-agency-4.4rvzadoption-agency-1.3r��r�r�r�r�r�)r>r�r~r�r@r�rLrr�r�indexr�rrZ cloneNoder�r�Z appendChildr�ZgetTableMisnestedNodePosition� insertBeforeZreparentChildren�insert)rCr�ZouterLoopCounterZformattingElementZafeIndexZ furthestBlockrnZcommonAncestorZbookmarkZlastNoder�ZinnerLoopCounterr�Zcloner�r�r)r)r*r~�s�  � � �          � �� �      �z/getPhases.<locals>.InBodyPhase.endTagFormattingcSs�|j�|d�r|j��|jjdj|dkrF|j�dd|di�|j�|d�r�|jj��}|j|dkr~|jj��}qb|j��dS)Nr@rvr�) r>r�r�r~r@rLrr�clearActiveFormattingElements)rCr�rnr)r)r*rTs  z8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObjectcSs@|j�dddd��|j��|j�tdd��|jj��dS)Nzunexpected-end-tag-treated-asr�z br elementr�rr)rLrr>r�r�r�r~rr�r)r)r*r`s � z'getPhases.<locals>.InBodyPhase.endTagBrcSs�|jjddd�D]�}|j|dkrz|jj|dd�|jjdj|dkrb|j�dd|di�|jj��|krtqbq�q|jtkr|j�dd|di�q�qdS)Nrvr@r�r) r>r~r@r�rLrrr�rr r)r)r*r�gs z*getPhases.<locals>.InBodyPhase.endTagOtherN)6r9r:r;rKr�r�r�r�r�rYrZrrr[r]r^r_r`r\rarbrcrdrerfrgrhrjrirkrlrmrnror�rprsrqrrrtrurvr�r{rwrxryrzr|r}r~rrr�r)r�r)r*� InBodyPhase�sh G             $ r�cs@eZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd S)zgetPhases.<locals>.TextPhasecsF��|||�t�g�|_|j|j_t�d|jfg�|_|j|j_dS�Nr�) rKr r�r�r�r�� endTagScriptr�r�r�r�r)r*rKvs  �z%getPhases.<locals>.TextPhase.__init__cSs|j�|d�dSr�r�r�r)r)r*r�~sz.getPhases.<locals>.TextPhase.processCharacterscSs8|j�dd|jjdji�|jj��|jj|j_dS)Nz&expected-named-closing-tag-but-got-eofr@rvT)rLrr>r~r@rr�r`rBr)r)r*r��s �  z'getPhases.<locals>.TextPhase.processEOFcSsdstd|d��dS)NFz4Tried to process start tag %s in RCDATA/RAWTEXT moder@)r�r�r)r)r*r��sz*getPhases.<locals>.TextPhase.startTagOthercSs*|jj��}|jdkst�|jj|j_dSr�)r>r~rr@r�rLr�r`r r)r)r*r��s z)getPhases.<locals>.TextPhase.endTagScriptcSs|jj��|jj|j_dSr.)r>r~rrLr�r`r�r)r)r*r��s z(getPhases.<locals>.TextPhase.endTagOtherN) r9r:r;rKr�r�r�r�r�r)r�r)r*� TextPhaseus  r�cs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'S)(zgetPhases.<locals>.InTablePhasec s���|||�t�d|jfd|jfd|jfd|jfd|jfd|jfd|j fd|j fd |j fd |j fg �|_ |j|j _t�d|jfd |jfg�|_|j|j_dS) Nr�r�r�rW�r�r�r�)r�r�r�r�)r�r�rNr6) r�r�rWr�r�r�r�r�r�r�r�)rKr r�r��startTagCaption�startTagColgroup� startTagCol�startTagRowGroup�startTagImplyTbodyrg�startTagStyleScriptrjr^r�r�r�� endTagTable� endTagIgnorer�r�r�r�r)r*rK�s*� ��z(getPhases.<locals>.InTablePhase.__init__cSs$|jjdjdkr |jj��qdS)Nrv)r�r�)r>r~r@rrBr)r)r*�clearStackToTableContext�sz8getPhases.<locals>.InTablePhase.clearStackToTableContextcSs0|jjdjdkr |j�d�n |jjs,t�dS)Nrvr�z eof-in-table�r>r~r@rLrrSr�rBr)r)r*r��sz*getPhases.<locals>.InTablePhase.processEOFcSs4|jj}|jjd|j_||jj_|jj�|�dS�N� inTableText)rLr`rIr�r��rCr�r�r)r)r*r��s z6getPhases.<locals>.InTablePhase.processSpaceCharacterscSs4|jj}|jjd|j_||jj_|jj�|�dSr�)rLr`rIr�r�r�r)r)r*r��s z1getPhases.<locals>.InTablePhase.processCharacterscSs&d|j_|jjd�|�d|j_dS)NTr�F)r>�insertFromTablerLrIr�r�r)r)r*r��sz*getPhases.<locals>.InTablePhase.insertTextcSs6|��|jj�t�|j�|�|jjd|j_dS)Nr�) r�r>r�r�r r�rLrIr`r�r)r)r*r��s z/getPhases.<locals>.InTablePhase.startTagCaptioncSs(|��|j�|�|jjd|j_dS)Nr��r�r>r�rLrIr`r�r)r)r*r��s z0getPhases.<locals>.InTablePhase.startTagColgroupcSs|�tdd��|S)Nr�rr)r�r�r�r)r)r*r��sz+getPhases.<locals>.InTablePhase.startTagColcSs(|��|j�|�|jjd|j_dS�Nr�r�r�r)r)r*r��s z0getPhases.<locals>.InTablePhase.startTagRowGroupcSs|�tdd��|S)Nr�rr)r�r�r�r)r)r*r��sz2getPhases.<locals>.InTablePhase.startTagImplyTbodycSs6|j�dddd��|jj�td��|jjs2|SdS)Nr�r�r�)rLrr`r�r�rSr�r)r)r*rg�s �z-getPhases.<locals>.InTablePhase.startTagTablecSs|jjd�|�Srr�r�r)r)r*r��sz3getPhases.<locals>.InTablePhase.startTagStyleScriptcSsVd|dkrH|dd�t�dkrH|j�d�|j�|�|jj��n |�|�dS)Nr3rwr�z unexpected-hidden-input-in-table) rlrrLrr>r�r~rr�r�r)r)r*rj�s �  z-getPhases.<locals>.InTablePhase.startTagInputcSsD|j�d�|jjdkr@|j�|�|jjd|j_|jj��dS)Nzunexpected-form-in-tablerv)rLrr>r�r�r~rr�r)r)r*r^�s    z,getPhases.<locals>.InTablePhase.startTagFormcSs<|j�dd|di�d|j_|jjd�|�d|j_dS)Nz)unexpected-start-tag-implies-table-voodoor@Tr�F)rLrr>r�rIr�r�r)r)r*r�sz-getPhases.<locals>.InTablePhase.startTagOthercSs�|jjddd�r�|j��|jjdjdkrJ|j�dd|jjdjd��|jjdjdkrj|jj��qJ|jj��|j��n|jj s�t �|j��dS)Nr�r�rvzend-tag-too-early-namedr�) r>r�r�r~r@rLrrrbrSr�r�r)r)r*r� s  ��   z+getPhases.<locals>.InTablePhase.endTagTablecSs|j�dd|di�dSrr�r�r)r)r*r�sz,getPhases.<locals>.InTablePhase.endTagIgnorecSs<|j�dd|di�d|j_|jjd�|�d|j_dS)Nz'unexpected-end-tag-implies-table-voodoor@Tr�F)rLrr>r�rIr�r�r)r)r*r� sz+getPhases.<locals>.InTablePhase.endTagOtherN)r9r:r;rKr�r�r�r�r�r�r�r�r�r�rgr�rjr^r�r�r�r�r)r�r)r*� InTablePhase�s&   r�csPeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dS)z#getPhases.<locals>.InTableTextPhasecs��|||�d|_g|_dSr.)rKr��characterTokensr�r�r)r*rK(sz,getPhases.<locals>.InTableTextPhase.__init__cSsdd�dd�|jD��}tdd�|D��rJtd|d�}|jjd�|�n|rZ|j�|�g|_dS)Nr�cSsg|] }|d�qS)rwr)�r?r�r)r)r*rD.szGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>cSsg|] }|tk�qSr)r�r�r)r)r*rD/srqr�r�)�joinr�r�rrLrIr�r>)rCrwr�r)r)r*�flushCharacters-s z3getPhases.<locals>.InTableTextPhase.flushCharacterscSs|��|j|j_|Sr.�r�r�rLr`r�r)r)r*r�6s z2getPhases.<locals>.InTableTextPhase.processCommentcSs|��|j|j_dSr�r�rBr)r)r*r�;s z.getPhases.<locals>.InTableTextPhase.processEOFcSs |ddkrdS|j�|�dS�Nrwr��r�r�r�r)r)r*r�@s z5getPhases.<locals>.InTableTextPhase.processCharacterscSs|j�|�dSr.r�r�r)r)r*r�Esz:getPhases.<locals>.InTableTextPhase.processSpaceCharacterscSs|��|j|j_|Sr.r�r�r)r)r*r�Js z3getPhases.<locals>.InTableTextPhase.processStartTagcSs|��|j|j_|Sr.r�r�r)r)r*r�Os z1getPhases.<locals>.InTableTextPhase.processEndTagN) r9r:r;rKr�r�r�r�r�r�r�r)r�r)r*�InTableTextPhase's  r�cs`eZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dS)z!getPhases.<locals>.InCaptionPhasecsf��|||�t�d|jfd|jfg�|_|j|j_t�d|jfd|j fd|j fg�|_ |j |j _dS)Nr�� r�rWr�r�r�r�r�r�r�r�r�) r�rWr�r�r�r�r�r�r�r�) rKr r�r��startTagTableElementr�r�r�� endTagCaptionr�r�r�r�r�r�r)r*rKVs �� ��z*getPhases.<locals>.InCaptionPhase.__init__cSs|jjddd� S)Nr�r�r��r>r�rBr)r)r*�ignoreEndTagCaptionhsz5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptioncSs|jjd��dSr��rLrIr�rBr)r)r*r�ksz,getPhases.<locals>.InCaptionPhase.processEOFcSs|jjd�|�Sr��rLrIr�r�r)r)r*r�nsz3getPhases.<locals>.InCaptionPhase.processCharacterscSs0|j��|��}|jj�td��|s,|SdS�Nr��rLrr�r`r�r��rCr�� ignoreEndTagr)r)r*r�qs  z6getPhases.<locals>.InCaptionPhase.startTagTableElementcSs|jjd�|�Sr�r�r�r)r)r*r�ysz/getPhases.<locals>.InCaptionPhase.startTagOthercSs�|��s�|j��|jjdjdkrB|j�dd|jjdjd��|jjdjdkrb|jj��qB|jj��|j��|jj d|j_ n|jj s�t �|j��dS)Nrvr�r�r�r�) r�r>r�r~r@rLrrr�rIr`rSr�r�r)r)r*r�|s  ��   z/getPhases.<locals>.InCaptionPhase.endTagCaptioncSs0|j��|��}|jj�td��|s,|SdSr�r�r�r)r)r*r��s  z-getPhases.<locals>.InCaptionPhase.endTagTablecSs|j�dd|di�dSrr�r�r)r)r*r��sz.getPhases.<locals>.InCaptionPhase.endTagIgnorecSs|jjd�|�Sr��rLrIr�r�r)r)r*r��sz-getPhases.<locals>.InCaptionPhase.endTagOtherN) r9r:r;rKr�r�r�r�r�r�r�r�r�r)r�r)r*�InCaptionPhaseTs r�csXeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dS)z%getPhases.<locals>.InColumnGroupPhasecs^��|||�t�d|jfd|jfg�|_|j|j_t�d|jfd|j fg�|_ |j |j _dS)Nr�rWr�) rKr r�r�r�r�r�r��endTagColgroup� endTagColr�r�r�r�r)r*rK�s� �z.getPhases.<locals>.InColumnGroupPhase.__init__cSs|jjdjdkS)Nrvr�)r>r~r@rBr)r)r*�ignoreEndTagColgroup�sz:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupcSsD|jjdjdkr"|jjst�dS|��}|�td��|s@dSdS)Nrvr�r�T) r>r~r@rLrSr�r�r�r�)rCr�r)r)r*r��s z0getPhases.<locals>.InColumnGroupPhase.processEOFcSs"|��}|�td��|s|SdS�Nr��r�r�r�r�r)r)r*r��sz7getPhases.<locals>.InColumnGroupPhase.processCharacterscSs$|j�|�|jj��d|d<dSrrr�r)r)r*r��s  z1getPhases.<locals>.InColumnGroupPhase.startTagColcSs"|��}|�td��|s|SdSr�r�r�r)r)r*r��sz3getPhases.<locals>.InColumnGroupPhase.startTagOthercSs@|��r |jjst�|j��n|jj��|jjd|j_ dS�Nr�) r�rLrSr�rr>r~rrIr`r�r)r)r*r��s    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupcSs|j�dddi�dS)Nz no-end-tagr@rWr�r�r)r)r*r��sz/getPhases.<locals>.InColumnGroupPhase.endTagColcSs"|��}|�td��|s|SdSr�r�r�r)r)r*r��sz1getPhases.<locals>.InColumnGroupPhase.endTagOtherN) r9r:r;rKr�r�r�r�r�r�r�r�r)r�r)r*�InColumnGroupPhase�s   r�csxeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�ZdS)z#getPhases.<locals>.InTableBodyPhasecsv��|||�t�d|jfd|jfd|jfd|jfg�|_|j|j_ t�d|j fd|j fd|j fg�|_ |j|j _ dS)Nr�r��r�r�)r�rWr�r�r�r�r�r�)r�r�rWr�r�r�r�r�)rKr r�r�� startTagTr�startTagTableCell�startTagTableOtherr�r�r��endTagTableRowGroupr�r�r�r�r�r�r)r*rK�s$�� ��z,getPhases.<locals>.InTableBodyPhase.__init__cSsB|jjdjdkr |jj��q|jjdjdkr>|jjs>t�dS)Nrv)r�r�r�r�r�)r>r~r@rrLrSr�rBr)r)r*�clearStackToTableBodyContext�sz@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextcSs|jjd��dSr�r�rBr)r)r*r��sz.getPhases.<locals>.InTableBodyPhase.processEOFcSs|jjd�|�Sr�rr�r)r)r*r�sz:getPhases.<locals>.InTableBodyPhase.processSpaceCharacterscSs|jjd�|�Sr�r�r�r)r)r*r�sz5getPhases.<locals>.InTableBodyPhase.processCharacterscSs(|��|j�|�|jjd|j_dS)Nr�)r�r>r�rLrIr`r�r)r)r*r�s z.getPhases.<locals>.InTableBodyPhase.startTagTrcSs*|j�dd|di�|�tdd��|S)Nzunexpected-cell-in-table-bodyr@r�rr)rLrr�r�r�r)r)r*r� s  �z5getPhases.<locals>.InTableBodyPhase.startTagTableCellcSsn|jjddd�s0|jjddd�s0|jjddd�rT|��|�t|jjdj��|S|jjs`t �|j� �dS�Nr�r�r�r�r�rv� r>r�r�r�r�r~r@rLrSr�rr�r)r)r*r�s��� z6getPhases.<locals>.InTableBodyPhase.startTagTableOthercSs|jjd�|�Sr�r�r�r)r)r*r�sz1getPhases.<locals>.InTableBodyPhase.startTagOthercSsT|jj|ddd�r:|��|jj��|jjd|j_n|j�dd|di�dS)Nr@r�r�r�� unexpected-end-tag-in-table-body) r>r�r�r~rrLrIr`rr�r)r)r*r�"s  �z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupcSsn|jjddd�s0|jjddd�s0|jjddd�rT|��|�t|jjdj��|S|jjs`t �|j� �dSr�r�r�r)r)r*r�+s��� z/getPhases.<locals>.InTableBodyPhase.endTagTablecSs|j�dd|di�dS)Nr�r@r�r�r)r)r*r�8s �z0getPhases.<locals>.InTableBodyPhase.endTagIgnorecSs|jjd�|�Sr�r�r�r)r)r*r�<sz/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r9r:r;rKr�r�r�r�r�r�r�r�r�r�r�r�r)r�r)r*�InTableBodyPhase�s    r�cs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�ZdS)zgetPhases.<locals>.InRowPhasecsv��|||�t�d|jfd|jfd|jfg�|_|j|j_t�d|j fd|j fd|j fd|j fg�|_ |j|j _dS)Nr�r�)r�rWr�r�r�r�r�r�r�r�)r�r�rWr�r�r�r�)rKr r�r�r�r�r�r�r��endTagTrr�r�r�r�r�r�r�r)r*rKAs$�� ��z&getPhases.<locals>.InRowPhase.__init__cSs@|jjdjdkr<|j�dd|jjdji�|jj��qdS)Nrv)r�r�z'unexpected-implied-end-tag-in-table-rowr@)r>r~r@rLrrrBr)r)r*�clearStackToTableRowContextUs �z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextcSs|jjddd� S)Nr�r�r�r�rBr)r)r*�ignoreEndTagTr[sz,getPhases.<locals>.InRowPhase.ignoreEndTagTrcSs|jjd��dSr�r�rBr)r)r*r�_sz(getPhases.<locals>.InRowPhase.processEOFcSs|jjd�|�Sr�rr�r)r)r*r�bsz4getPhases.<locals>.InRowPhase.processSpaceCharacterscSs|jjd�|�Sr�r�r�r)r)r*r�esz/getPhases.<locals>.InRowPhase.processCharacterscSs6|��|j�|�|jjd|j_|jj�t�dS)Nr�) r�r>r�rLrIr`r�r�r r�r)r)r*r�hs z/getPhases.<locals>.InRowPhase.startTagTableCellcSs"|��}|�td��|s|SdS�Nr��r�r�r�r�r)r)r*r�nsz0getPhases.<locals>.InRowPhase.startTagTableOthercSs|jjd�|�Sr�r�r�r)r)r*r�usz+getPhases.<locals>.InRowPhase.startTagOthercSsH|��s.|��|jj��|jjd|j_n|jjs:t �|j� �dSr�) r�r�r>r~rrLrIr`rSr�rr�r)r)r*r�xs   z&getPhases.<locals>.InRowPhase.endTagTrcSs"|��}|�td��|s|SdSr�r�r�r)r)r*r��sz)getPhases.<locals>.InRowPhase.endTagTablecSs4|jj|ddd�r&|�td��|S|j��dS)Nr@r�r�r�)r>r�r�r�rLrr�r)r)r*r��sz1getPhases.<locals>.InRowPhase.endTagTableRowGroupcSs|j�dd|di�dS)Nzunexpected-end-tag-in-table-rowr@r�r�r)r)r*r��s �z*getPhases.<locals>.InRowPhase.endTagIgnorecSs|jjd�|�Sr�r�r�r)r)r*r��sz)getPhases.<locals>.InRowPhase.endTagOtherN)r9r:r;rKr�r�r�r�r�r�r�r�r�r�r�r�r�r)r�r)r*� InRowPhase?s  r�cs`eZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dS)zgetPhases.<locals>.InCellPhasecsf��|||�t�d|jfd|jfg�|_|j|j_t�d|jfd|j fd|j fg�|_ |j |j _dS)Nr�r�r�)r�r�rWr�r�r�) rKr r�r�r�r�r�r��endTagTableCellr�� endTagImplyr�r�r�r�r)r*rK�s�� �z'getPhases.<locals>.InCellPhase.__init__cSsB|jjddd�r |�td��n|jjddd�r>|�td��dS�Nr�r�r�r�)r>r�r�r�rBr)r)r*� closeCell�sz(getPhases.<locals>.InCellPhase.closeCellcSs|jjd��dSr�r�rBr)r)r*r��sz)getPhases.<locals>.InCellPhase.processEOFcSs|jjd�|�Sr�r�r�r)r)r*r��sz0getPhases.<locals>.InCellPhase.processCharacterscSsF|jjddd�s |jjddd�r,|��|S|jjs8t�|j��dSr�)r>r�r�rLrSr�rr�r)r)r*r��s� z1getPhases.<locals>.InCellPhase.startTagTableOthercSs|jjd�|�Sr�r�r�r)r)r*r��sz,getPhases.<locals>.InCellPhase.startTagOthercSs�|jj|ddd�r�|j�|d�|jjdj|dkrp|j�dd|di�|jj��}|j|dkrPq|qPn |jj��|j��|jj d|j_ n|j�dd|di�dS)Nr@r�r�rvzunexpected-cell-end-tagr�r) r>r�r�r~r@rLrrr�rIr`r r)r)r*r��s �   z.getPhases.<locals>.InCellPhase.endTagTableCellcSs|j�dd|di�dSrr�r�r)r)r*r��sz+getPhases.<locals>.InCellPhase.endTagIgnorecSs.|jj|ddd�r |��|S|j��dS)Nr@r�r�)r>r�r�rLrr�r)r)r*r��sz*getPhases.<locals>.InCellPhase.endTagImplycSs|jjd�|�Sr�r�r�r)r)r*r��sz*getPhases.<locals>.InCellPhase.endTagOtherN) r9r:r;rKr�r�r�r�r�r�r�r�r�r)r�r)r*� InCellPhase�s  r�csxeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�ZdS)z getPhases.<locals>.InSelectPhasec s���|||�t�d|jfd|jfd|jfd|jfd|jfd|jfg�|_ |j |j _ t�d|j fd|j fd|jfg�|_|j|j_ dS)Nr�rUrVr�)rNrLrRr�)rKr r�r��startTagOption�startTagOptgrouprqrjr�r�r�r�� endTagOption�endTagOptgroup� endTagSelectr�r�r�r�r)r*rK�s � �z)getPhases.<locals>.InSelectPhase.__init__cSs0|jjdjdkr |j�d�n |jjs,t�dS)Nrvr�z eof-in-selectr�rBr)r)r*r��sz+getPhases.<locals>.InSelectPhase.processEOFcSs$|ddkrdS|j�|d�dSr�r�r�r)r)r*r� s z2getPhases.<locals>.InSelectPhase.processCharacterscSs.|jjdjdkr|jj��|j�|�dSr��r>r~r@rr�r�r)r)r*r� s z/getPhases.<locals>.InSelectPhase.startTagOptioncSsL|jjdjdkr|jj��|jjdjdkr<|jj��|j�|�dS)NrvrUrVr�r�r)r)r*r� s   z1getPhases.<locals>.InSelectPhase.startTagOptgroupcSs|j�d�|�td��dS)Nzunexpected-select-in-selectr�)rLrr�r�r�r)r)r*rq s z/getPhases.<locals>.InSelectPhase.startTagSelectcSs>|j�d�|jjddd�r.|�td��|S|jjs:t�dS)Nzunexpected-input-in-selectr�r�)rLrr>r�r�r�rSr�r�r)r)r*rj s  z.getPhases.<locals>.InSelectPhase.startTagInputcSs|jjd�|�Srr�r�r)r)r*r� sz/getPhases.<locals>.InSelectPhase.startTagScriptcSs|j�dd|di�dS)Nzunexpected-start-tag-in-selectr@r�r�r)r)r*r�! s �z.getPhases.<locals>.InSelectPhase.startTagOthercSs6|jjdjdkr |jj��n|j�dddi�dS)NrvrU�unexpected-end-tag-in-selectr@�r>r~r@rrLrr�r)r)r*r�% s �z-getPhases.<locals>.InSelectPhase.endTagOptioncSsf|jjdjdkr0|jjdjdkr0|jj��|jjdjdkrP|jj��n|j�dddi�dS)NrvrU���rVrr@rr�r)r)r*r�, s� �z/getPhases.<locals>.InSelectPhase.endTagOptgroupcSsZ|jjddd�r@|jj��}|jdkr4|jj��}q|j��n|jjsLt�|j� �dS)Nr�r�) r>r�r~rr@rLrbrSr�rr r)r)r*r�9 s    z-getPhases.<locals>.InSelectPhase.endTagSelectcSs|j�dd|di�dS)Nrr@r�r�r)r)r*r�D s �z,getPhases.<locals>.InSelectPhase.endTagOtherN)r9r:r;rKr�r�r�r�rqrjr�r�r�r�r�r�r)r�r)r*� InSelectPhase�s   rcsHeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dS)z'getPhases.<locals>.InSelectInTablePhasecsN��|||�t�d|jfg�|_|j|j_t�d|jfg�|_|j |j_dS)N)r�r�r�r�r�r�r�r�) rKr r�rgr�r�r�r�r�r�r�r�r)r*rKI s�� ��z0getPhases.<locals>.InSelectInTablePhase.__init__cSs|jjd��dS�Nr�r�rBr)r)r*r�X sz2getPhases.<locals>.InSelectInTablePhase.processEOFcSs|jjd�|�Srr�r�r)r)r*r�[ sz9getPhases.<locals>.InSelectInTablePhase.processCharacterscSs(|j�dd|di�|�td��|S)Nz5unexpected-table-element-start-tag-in-select-in-tabler@r�)rLrr�r�r�r)r)r*rg^ sz5getPhases.<locals>.InSelectInTablePhase.startTagTablecSs|jjd�|�Srr�r�r)r)r*r�c sz5getPhases.<locals>.InSelectInTablePhase.startTagOthercSs@|j�dd|di�|jj|ddd�r<|�td��|SdS)Nz3unexpected-table-element-end-tag-in-select-in-tabler@r�r�r�)rLrr>r�r�r�r�r)r)r*r�f sz3getPhases.<locals>.InSelectInTablePhase.endTagTablecSs|jjd�|�Srr�r�r)r)r*r�l sz3getPhases.<locals>.InSelectInTablePhase.endTagOtherN) r9r:r;rKr�r�rgr�r�r�r)r�r)r*�InSelectInTablePhaseH s rc-s�eZdZeddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,g,�Z�fd-d.�Zd/d0�Z�fd1d2�Zd3d4�Zd5d6�Z d7S)8z(getPhases.<locals>.InForeignContentPhaser;r<r"r�r�r#r=r8r+r&r9r>rJZh1Zh2Zh3Zh4Zh5Zh6r�rOr@rKr7r5r.r5rGr0r(r4r�rArB�spanrDrC�subZsupr�rErFr3�varcs��|||�dSr.)rKr�r�r)r*rKy sz1getPhases.<locals>.InForeignContentPhase.__init__c%Ssnddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%�$}|d&|krj||d&|d&<dS)'NZaltGlyphZ altGlyphDefZ altGlyphItemZ animateColorZ animateMotionZanimateTransformZclipPathZfeBlendZ feColorMatrixZfeComponentTransferZ feCompositeZfeConvolveMatrixZfeDiffuseLightingZfeDisplacementMapZfeDistantLightZfeFloodZfeFuncAZfeFuncBZfeFuncGZfeFuncRZfeGaussianBlurZfeImageZfeMergeZ feMergeNodeZ feMorphologyZfeOffsetZ fePointLightZfeSpecularLightingZ feSpotLightZfeTileZ feTurbulenceZ foreignObjectZglyphRefZlinearGradientZradialGradientZtextPath)$ZaltglyphZ altglyphdefZ altglyphitemZ animatecolorZ animatemotionZanimatetransformZclippathZfeblendZ fecolormatrixZfecomponenttransferZ fecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZ femergenodeZ femorphologyZfeoffsetZ fepointlightZfespecularlightingZ fespotlightZfetileZ feturbulenceZ foreignobjectZglyphrefZlineargradientZradialgradientZtextpathr@r))rCr�� replacementsr)r)r*�adjustSVGTagNames| sN�% z:getPhases.<locals>.InForeignContentPhase.adjustSVGTagNamescsL|ddkrd|d<n&|jjr<tdd�|dD��r<d|j_��||�dS)Nrwr�u�css|]}|tkVqdSr.r�r�r)r)r*r�� szMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rLrcr�r�r�r�r)r*r�� s  �z:getPhases.<locals>.InForeignContentPhase.processCharacterscSs.|jjd}|d|jksD|ddkr�t|d���tdddg�@r�|j�dd|di�|jjdj|jjkr�|j� |jjd�s�|j� |jjd�s�|jj� �qZ|S|jt d kr�|j� |�n$|jt d kr�|�|�|j�|�|j�|�|j|d <|j�|�|d �r*|jj� �d |d<dS)Nrvr@r?rwZcolorZface�sizez*unexpected-html-element-in-foreign-contentrhryrjr{Tr|)r>r~�breakoutElements�set�keysrLrrjr�rorprrrr rrr�)rCr�r�r)r)r*r�� s:  �� � ���       z8getPhases.<locals>.InForeignContentPhase.processStartTagcSs�t|jj�d}|jjd}|j�t�|dkrF|j�dd|di�|j�t�|dkr�|jj|jj dkr�|jj� �|jjj |j_|jj� �|kr�|jjs�t �q�d}q�|d8}|jj|}|j|jjkr�qFqF|jj�|�}q�qF|S)Nrrvr@rr�)r�r>r~r@rlrrLrr`rIr�r�rr�rjr�r�)rCr�Z nodeIndexr�r�r)r)r*r�� s&   z6getPhases.<locals>.InForeignContentPhase.processEndTagN) r9r:r;r�r rKr r�r�r�r)r�r)r*�InForeignContentPhaseo s\ � ) rcsPeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dS)z!getPhases.<locals>.AfterBodyPhasecsN��|||�t�d|jfg�|_|j|j_t�d|jfg�|_|j |j_dS�Nr�) rKr r�r�r�r�r�rxr�r�r�r�r)r*rK� s� z*getPhases.<locals>.AfterBodyPhase.__init__cSsdSr.r)rBr)r)r*r�� sz,getPhases.<locals>.AfterBodyPhase.processEOFcSs|j�||jjd�dS)Nrr�r�r)r)r*r�� sz0getPhases.<locals>.AfterBodyPhase.processCommentcSs |j�d�|jjd|j_|S)Nzunexpected-char-after-bodyr��rLrrIr`r�r)r)r*r�� s z3getPhases.<locals>.AfterBodyPhase.processCharacterscSs|jjd�|�Sr�r�r�r)r)r*r�� sz.getPhases.<locals>.AfterBodyPhase.startTagHtmlcSs*|j�dd|di�|jjd|j_|S)Nzunexpected-start-tag-after-bodyr@r�rr�r)r)r*r�� s  �z/getPhases.<locals>.AfterBodyPhase.startTagOthercSs*|jjr|j�d�n|jjd|j_dS)Nz'unexpected-end-tag-after-body-innerhtml�afterAfterBody)rLrSrrIr`)rCr@r)r)r*rx sz,getPhases.<locals>.AfterBodyPhase.endTagHtmlcSs*|j�dd|di�|jjd|j_|S)Nzunexpected-end-tag-after-bodyr@r�rr�r)r)r*r� s  �z-getPhases.<locals>.AfterBodyPhase.endTagOtherN) r9r:r;rKr�r�r�r�r�rxr�r)r�r)r*�AfterBodyPhase� s rcsXeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dS)z"getPhases.<locals>.InFramesetPhasecsf��|||�t�d|jfd|jfd|jfd|jfg�|_|j|j_ t�d|j fg�|_ |j |j _ dS)Nr�r�rXr�) rKr r�r�r� startTagFrame�startTagNoframesr�r�r��endTagFramesetr�r�r�r�r)r*rK s� �z+getPhases.<locals>.InFramesetPhase.__init__cSs0|jjdjdkr |j�d�n |jjs,t�dS)Nrvr�zeof-in-framesetr�rBr)r)r*r�# sz-getPhases.<locals>.InFramesetPhase.processEOFcSs|j�d�dS)Nzunexpected-char-in-framesetr�r�r)r)r*r�) sz4getPhases.<locals>.InFramesetPhase.processCharacterscSs|j�|�dSr.)r>r�r�r)r)r*r, sz3getPhases.<locals>.InFramesetPhase.startTagFramesetcSs|j�|�|jj��dSr.rr�r)r)r*r/ s z0getPhases.<locals>.InFramesetPhase.startTagFramecSs|jjd�|�Sr�r�r�r)r)r*r3 sz3getPhases.<locals>.InFramesetPhase.startTagNoframescSs|j�dd|di�dS)Nz unexpected-start-tag-in-framesetr@r�r�r)r)r*r�6 s �z0getPhases.<locals>.InFramesetPhase.startTagOthercSsZ|jjdjdkr |j�d�n |jj��|jjsV|jjdjdkrV|jjd|j_dS)Nrvr�z)unexpected-frameset-in-frameset-innerhtmlr�� afterFrameset) r>r~r@rLrrrSrIr`r�r)r)r*r: s �z1getPhases.<locals>.InFramesetPhase.endTagFramesetcSs|j�dd|di�dS)Nzunexpected-end-tag-in-framesetr@r�r�r)r)r*r�F s �z.getPhases.<locals>.InFramesetPhase.endTagOtherN) r9r:r;rKr�r�rrrr�rr�r)r�r)r*�InFramesetPhase s  rcsHeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dS)z%getPhases.<locals>.AfterFramesetPhasecsV��|||�t�d|jfd|jfg�|_|j|j_t�d|jfg�|_ |j |j _dS�Nr�r�) rKr r�r�rr�r�r�rxr�r�r�r�r)r*rKL s� �z.getPhases.<locals>.AfterFramesetPhase.__init__cSsdSr.r)rBr)r)r*r�Z sz0getPhases.<locals>.AfterFramesetPhase.processEOFcSs|j�d�dS)Nzunexpected-char-after-framesetr�r�r)r)r*r�^ sz7getPhases.<locals>.AfterFramesetPhase.processCharacterscSs|jjd�|�Srr�r�r)r)r*ra sz6getPhases.<locals>.AfterFramesetPhase.startTagNoframescSs|j�dd|di�dS)Nz#unexpected-start-tag-after-framesetr@r�r�r)r)r*r�d s �z3getPhases.<locals>.AfterFramesetPhase.startTagOthercSs|jjd|j_dS)N�afterAfterFrameset)rLrIr`r�r)r)r*rxh sz0getPhases.<locals>.AfterFramesetPhase.endTagHtmlcSs|j�dd|di�dS)Nz!unexpected-end-tag-after-framesetr@r�r�r)r)r*r�k s �z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN) r9r:r;rKr�r�rr�rxr�r)r�r)r*�AfterFramesetPhaseJ s rcsPeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dS)z&getPhases.<locals>.AfterAfterBodyPhasecs0��|||�t�d|jfg�|_|j|j_dSr)rKr r�r�r�r�r�r�r�r)r*rKp s �z/getPhases.<locals>.AfterAfterBodyPhase.__init__cSsdSr.r)rBr)r)r*r�x sz1getPhases.<locals>.AfterAfterBodyPhase.processEOFcSs|j�||jj�dSr.r�r�r)r)r*r�{ sz5getPhases.<locals>.AfterAfterBodyPhase.processCommentcSs|jjd�|�Sr�rr�r)r)r*r�~ sz=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharacterscSs |j�d�|jjd|j_|S)N�expected-eof-but-got-charr�rr�r)r)r*r�� s z8getPhases.<locals>.AfterAfterBodyPhase.processCharacterscSs|jjd�|�Sr�r�r�r)r)r*r�� sz3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlcSs*|j�dd|di�|jjd|j_|S)N�expected-eof-but-got-start-tagr@r�rr�r)r)r*r�� s  �z4getPhases.<locals>.AfterAfterBodyPhase.startTagOthercSs*|j�dd|di�|jjd|j_|S)N�expected-eof-but-got-end-tagr@r�rr�r)r)r*r�� s  �z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN) r9r:r;rKr�r�r�r�r�r�r�r)r�r)r*�AfterAfterBodyPhaseo s rcsXeZdZ�fdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dS)z*getPhases.<locals>.AfterAfterFramesetPhasecs8��|||�t�d|jfd|jfg�|_|j|j_dSr)rKr r�r��startTagNoFramesr�r�r�r�r�r)r*rK� s �z3getPhases.<locals>.AfterAfterFramesetPhase.__init__cSsdSr.r)rBr)r)r*r�� sz5getPhases.<locals>.AfterAfterFramesetPhase.processEOFcSs|j�||jj�dSr.r�r�r)r)r*r�� sz9getPhases.<locals>.AfterAfterFramesetPhase.processCommentcSs|jjd�|�Sr�rr�r)r)r*r�� szAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharacterscSs|j�d�dS)Nrr�r�r)r)r*r�� sz<getPhases.<locals>.AfterAfterFramesetPhase.processCharacterscSs|jjd�|�Sr�r�r�r)r)r*r�� sz7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlcSs|jjd�|�Srr�r�r)r)r*r � sz;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramescSs|j�dd|di�dS)Nrr@r�r�r)r)r*r�� s �z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOthercSs|j�dd|di�dS)Nrr@r�r�r)r)r*r�� s �z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN) r9r:r;rKr�r�r�r�r�r r�r�r)r�r)r*�AfterAfterFramesetPhase� s r!)rWrVr�r�r r r�r�r�r�r�r�r�r�r�r�r�rzr�r�rrr)r)rJrYr�r�r�r�rrrr�r�r�r�r�r�r�r�r�rrrrrrrr!r)r�r*rH�sr)#.g@CX!-GBbYLd's/9%&&�rHcs>t|d�t��@}|r:t�fdd�|d��D��|d<dS)Nrwc3s"|]\}}��||�|fVqdSr.)r�)r?�k�v�r r)r*r�� s�z$adjust_attributes.<locals>.<genexpr>)rrr/)r�r Zneeds_adjustmentr)r$r*r�� s   �r�rsFcCs|dkr i}t||||d�S)N)r3r@rwr{)r)r@r3rkr{r)r)r*r�� s  �r�c@seZdZdZdS)ruzError in parsed documentN)r9r:r;r�r)r)r)r*ru� sru)rT)r+rT)rsNF).Z __future__rrrZpip._vendor.sixrrr1� collectionsrr�r r r Ztreebuilders.baser r Z constantsrrrrrrrrrrrrr�rrrrr#r-r=rIr"ZmemoizerHr�r�� Exceptionrur)r)r)r*�<module>sP      H   G K�