
    V=^                    ,   d dl mZmZmZ d dlmZmZ d dlZddlm	Z	 ddlm
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  ddZ!ddZ"d Z# G d de$      Z%ejL                  d        Z'd Z(	 	 ddZ) G d de*      Z+y)    )absolute_importdivisionunicode_literals)with_metaclassviewkeysN   )_inputstream)
_tokenizer)treebuilders)Marker)_utils)spaceCharactersasciiUpper2LowerspecialElementsheadingElementscdataElementsrcdataElements
tokenTypestagTokenTypes
namespaceshtmlIntegrationPointElements"mathmlTextIntegrationPointElementsadjustForeignAttributesadjustMathMLAttributesadjustSVGAttributesE_ReparseExceptionc                 l    t        j                  |      }t        ||      } |j                  | fi |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ps         6/usr/lib/python3/dist-packages/html5lib/html5parser.pyr#   r#      s7    $ 
	$	$[	1B2-BCA1773!&!!    c                 p    t        j                  |      }t        ||      } |j                  | fd|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(   s          r)   r-   r-   1   s<    ( 
	$	$[	1B2-BCA1??3>)>v>>r*   c                 *      G  fddt               }|S )Nc                       e Zd Z fdZy)-method_decorator_metaclass.<locals>.Decoratedc                     |j                         D ],  \  }}t        |t        j                        r |      }|||<   . t        j                  | |||      S N)items
isinstancetypesFunctionTypetype__new__)meta	classnamebases	classDictattributeName	attributefunctions         r)   r8   z5method_decorator_metaclass.<locals>.Decorated.__new__L   sY    ,5OO,= 5(yi););< ( 3I+4	-(	5
 <<i	BBr*   N)__name__
__module____qualname__r8   )r?   s   r)   	Decoratedr0   K   s	    	Cr*   rC   )r7   )r?   rC   s   ` r)   method_decorator_metaclassrD   J   s    CD C r*   c                       e Zd ZdZddZddZd Zed        Zd Z	d Z
d	 Zd
 Zd ZddZd Zd Zd Zd Zd Zd Zy)r"   z]HTML parser

    Generates a tree structure from a stream of (possibly malformed) HTML.

    Nc           	          || _         |t        j                  d      } ||      | _        g | _        t        |      j                         D ci c]  \  }}| || | j                         c}}| _        yc c}}w )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

        Netree)strictr   r!   treeerrors	getPhasesr3   phases)selfrI   rH   r    debugnameclss          r)   __init__zHTMLParser.__init__]   ss    * <..w7D./	 !'--/1idCtStyy11 1 1s   A7c                    || _         || _        || _        t        j                  |fd| i|| _        | j                          	 | j                          y # t        $ r# | j                          | j                          Y y w xY w)Nparser)	innerHTMLModer,   	scriptingr
   HTMLTokenizer	tokenizerresetmainLoopr   )rM   stream	innerHTMLr,   rU   r&   s         r)   _parsezHTMLParser._parse|   sl    &""#11&PPP

	MMO  	JJLMMO	s   A )B Bc                    | j                   j                          d| _        g | _        g | _        d| _        | j                  r| j                  j                         | _	        | j                  t        v r&| j                  j                  | j                  _        nn| j                  t        v r&| j                  j                  | j                  _        n6| j                  dk(  r&| j                  j                   | j                  _        n	 | j"                  d   | _        | j$                  j'                          | j)                          nd| _	        | j"                  d   | _        d | _        d | _        d| _        y )NFz	no quirks	plaintext
beforeHtmlinitialT)rI   rX   firstStartTagrJ   log
compatModerT   r,   lowerr[   r   rW   rcdataStatestater   rawtextStateplaintextStaterL   phaseinsertHtmlElementresetInsertionMode	lastPhasebeforeRCDataPhase
framesetOKrM   s    r)   rX   zHTMLParser.reset   s   		"%!^^113DN~~.'+~~'A'A$>1'+~~'B'B$;.'+~~'D'D$ \2DJJJ((*##%"DNY/DJ!%r*   c                 v    t        | d      sy| j                  j                  j                  d   j                  S )zName of the character encoding that was used to decode the input stream, or
        :obj:`None` if that is not determined yet

        rW   Nr   )hasattrrW   rZ   charEncodingrO   ro   s    r)   documentEncodingzHTMLParser.documentEncoding   s2     t[)~~$$11!4999r*   c                     |j                   dk(  rJ|j                  t        d   k(  r4d|j                  v xr$ |j                  d   j	                  t
              dv S |j                  |j                   ft        v S )Nannotation-xmlmathmlencoding)z	text/htmlzapplication/xhtml+xml)rO   	namespacer   
attributes	translater   r   rM   elements     r)   isHTMLIntegrationPointz!HTMLParser.isHTMLIntegrationPoint   s{    LL,,!!Z%99'"4"44 ;&&z2<<(*:;<
 %%w||48TTTr*   c                 >    |j                   |j                  ft        v S r2   )rx   rO   r   r{   s     r)   isMathMLTextIntegrationPointz'HTMLParser.isMathMLTextIntegrationPoint   s    !!7<<04VVVr*   c                 L   t         d   }t         d   }t         d   }t         d   }t         d   }t         d   }t         d   }| j                  D ]  }d }	|}
|
|
}	| j                  j                  r| j                  j                  d   nd }|r|j                  nd }|r|j
                  nd }|
d	   }||k(  r)| j                  |
d
   |
j                  di              d }
nDt        | j                  j                        dk(  s}|| j                  j                  k(  sd| j                  |      r||k(  r|d   t        ddg      vs<|||fv s6|t        d   k(  r|dk(  r||k(  r|d   dk(  s| j                  |      r||||fv r| j                  }n| j                  d   }||k(  r|j!                  |
      }
nr||k(  r|j#                  |
      }
n[||k(  r|j%                  |
      }
nD||k(  r|j'                  |
      }
n-||k(  r|j)                  |
      }
n||k(  r|j+                  |
      }
|
|k(  s|	d   s|	d   r| j                  dd|	d   i        d}g }|rK|j-                  | j                         | j                  j/                         }|r| j                  |vsJ |rJy y )N
CharactersSpaceCharactersStartTagEndTagCommentDoctype
ParseErrorr7   datadatavarsr   rO   mglyph
malignmarkrv   ru   svginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   rW   rI   openElementsrx   rO   
parseErrorgetlendefaultNamespacer   	frozensetr   r}   ri   rL   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOF)rM   CharactersTokenSpaceCharactersTokenStartTagTokenEndTagTokenCommentTokenDoctypeTokenParseErrorTokentoken
prev_token	new_tokencurrentNodecurrentNodeNamespacecurrentNodeNamer7   ri   	reprocessrL   s                     r)   rY   zHTMLParser.mainLoop   s   $\2)*;<":. *!),!),$\2^^ /	>EJI'&
<@II<R<Rdii44R8X\@K{'<'<QU$6A+"2"2t (?*OOIf$5y}}ZQS7TU $IDII223q8,		0J0JJ::;G=0 =	8\:R0SS?4H"II-H1EE(,<<.v%/44[A-BV!WW $

 $,> ?.$)$;$;I$F	!55$)$@$@$K	.$)$9$9)$D	,$)$7$7	$B	-$)$8$8$C	-$)$8$8$C	O 'R %*]*C"#<= H!'F); <>]/	>d 	MM$**%

--/Izz///	 r*   c                 f     | j                   |ddg|i | | j                  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)r\   rI   getDocumentrM   rZ   argsr&   s       r)   r#   zHTMLParser.parse  s3    , 	FE49$9&9yy$$&&r*   c                 d     | j                   |dg|i | | j                  j                         S )aZ  Parse 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)r\   rI   getFragmentr   s       r)   r-   zHTMLParser.parseFragment  s1    2 	FD24262yy$$&&r*   c                     |i }| j                   j                  | j                  j                  j	                         ||f       | j
                  rt        t        |   |z        y r2   )rJ   r   rW   rZ   positionrH   r   r   )rM   	errorcoder   s      r)   r   zHTMLParser.parseError;  sY    HDNN11::<iRS;;Qy\H455 r*   c                 $    t        |t               y r2   )adjust_attributesr   rM   r   s     r)   r   z!HTMLParser.adjustMathMLAttributesC  s    %!78r*   c                 $    t        |t               y r2   )r   r   r   s     r)   r   zHTMLParser.adjustSVGAttributesF  s    %!45r*   c                 $    t        |t               y r2   )r   adjustForeignAttributesMapr   s     r)   r   z"HTMLParser.adjustForeignAttributesI  s    %!;<r*   c                 8    | j                   j                          y r2   )rS   ri   r   s     r)   reparseTokenNormalzHTMLParser.reparseTokenNormalL  s    r*   c                    d}ddddddddddd	d	d
dd}| j                   j                  d d d   D ]  }|j                  }d }|| j                   j                  d   k(  r| j                  sJ d}| j                  }|dv r| j                  sJ |s$|j                  | j                   j
                  k7  r||v r| j                  ||      } || _        y |s| j                  d	   } || _        y  | _        y )NFinSelectinCellinRowinTableBody	inCaptioninColumnGroupinTableinBody
inFrameset
beforeHead)selecttdthtrtbodytheadtfootcaptioncolgrouptableheadbodyframesethtmlr   r   T)r   r   r   r   )rI   r   rO   r[   rx   r   rL   ri   )rM   lastnewModesnodenodeName	new_phases         r)   rk   zHTMLParser.resetInsertionModeP  s     """"'$ 
  II**4R40 	DyyHItyy--a00~~%~>> AA~~%~DNNdii.H.HH8# KK(:;	
 
	  KK1	
-	, 
r*   c                 0   |dv sJ | j                   j                  |       |dk(  r&| j                  j                  | j                  _        n%| j                  j
                  | j                  _        | j                  | _        | j                  d   | _        y )N)RAWTEXTRCDATAr   text)	rI   insertElementrW   rg   rf   re   ri   originalPhaserL   )rM   r   contentTypes      r)   parseRCDataRawtextzHTMLParser.parseRCDataRawtext|  ss    3333		&)##'>>#>#>DNN #'>>#=#=DNN !ZZ[[(
r*   )NFTF)FdivF)zXXX-undefined-errorN)r@   rA   rB   __doc__rQ   r\   rX   propertyrs   r}   r   rY   r#   r-   r   r   r   r   r   rk   r    r*   r)   r"   r"   V   sl    1> D : :UWA0F'2'8696=*X)r*   r"   c           
         d }d } G d dt         || |                   G d d      } G d d      } G d	 d
      } G d d      } G d d      } G d d      } G fdd       G d d      }	 G fdd      }
 G fdd       G fdd      } G fdd      } G fdd      } G fdd       } G fd!d"      } G fd#d$      } G d% d&      } G fd'd(      } G d) d*      } G fd+d,      } G fd-d.      } G d/ d0      } G d1 d2      }i d3|d4|d5|d6|d7|d8|d9d:|	d;|
d<d=|d>|d?|d@|dA|dB|dC|||||||dDS )ENc                 r     t        j                         D ci c]  \  }}||
 c}} fd}|S c c}}w )z4Logger that records which phase processes each tokenc                    j                   j                  d      rt        |      dkD  r|d   }d|d      i}|d   t        v r|d   |d<   | j                  j
                  j                  | j                  j                  j                  j                   | j                  j                  j                  j                   | j                  j                   j                   |f        | g|i |S  | g|i |S )Nprocessr   r7   rO   )r@   
startswithr   r   rS   rb   r   rW   rf   ri   	__class__)rM   r   r&   r   infor?   
type_namess        r)   wrappedz'getPhases.<locals>.log.<locals>.wrapped  s      ++I63t9q=Q
5= 9:=M1#(=DL&&(=(=(C(C(L(L(,(9(9(C(C(L(L(,(?(?(0(9(9(,	(. /
  6t6v666t6v66r*   )r   r3   )r?   keyvaluer   r   s   `   @r)   rb   zgetPhases.<locals>.log  s6    3=3C3C3EFZS%eSjF
	7 # Gs   3c                 (    | rt        |      S t        S r2   )rD   r7   )use_metaclassmetaclass_funcs     r)   getMetaclasszgetPhases.<locals>.getMetaclass  s    -n==Kr*   c                   J    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)getPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        )rS   rI   __startTagCache__endTagCachec                 <    || _         || _        i | _        i | _        y r2   )rS   rI   _Phase__startTagCache_Phase__endTagCache)rM   rS   rI   s      r)   rQ   z!getPhases.<locals>.Phase.__init__  s      DKDI#%D !#Dr*   c                     t         r2   )NotImplementedErrorro   s    r)   r   z#getPhases.<locals>.Phase.processEOF  s    %%r*   c                 j    | j                   j                  || j                   j                  d          y )Nr   rI   insertCommentr   r   s     r)   r   z'getPhases.<locals>.Phase.processComment  s'     II##E499+A+A"+EFr*   c                 :    | j                   j                  d       y )Nzunexpected-doctyperS   r   r   s     r)   r   z'getPhases.<locals>.Phase.processDoctype  s    KK""#78r*   c                 @    | j                   j                  |d          y Nr   rI   
insertTextr   s     r)   r   z*getPhases.<locals>.Phase.processCharacters      II  v/r*   c                 @    | j                   j                  |d          y r  r  r   s     r)   r   z/getPhases.<locals>.Phase.processSpaceCharacters  r	  r*   c                    |d   }|| j                   v r| j                   |   }n| j                  |   x}| j                   |<   t        | j                         t        | j                        dz  kD  rf| j                   j                  t	        t        | j                                      t        | j                         t        | j                        dz  kD  rf ||      S NrO   g?)r   startTagHandlerr   popnextiterrM   r   rO   funcs       r)   r   z(getPhases.<locals>.Phase.processStartTag  s     =D t+++++D1484H4H4NNt++D1$../#d6J6J2Kc2QQ((,,T$t7K7K2L-MN $../#d6J6J2Kc2QQ ;r*   c                 f   | j                   j                  s#|d   dk(  r| j                   j                  d       |d   j                         D ]Q  \  }}|| j                  j
                  d   j                  vs,|| j                  j
                  d   j                  |<   S d| j                   _        y )NrO   r   znon-html-rootr   r   F)rS   ra   r   r3   rI   r   ry   rM   r   attrr   s       r)   startTagHtmlz%getPhases.<locals>.Phase.startTagHtml  s    ;;,,v&1H&&7  %V}224 Getyy55a8CCCAFDII**1-88>G ).DKK%r*   c                    |d   }|| j                   v r| j                   |   }n| j                  |   x}| j                   |<   t        | j                         t        | j                        dz  kD  rf| j                   j                  t	        t        | j                                      t        | j                         t        | j                        dz  kD  rf ||      S r  )r   endTagHandlerr   r  r  r  r  s       r)   r   z&getPhases.<locals>.Phase.processEndTag  s     =D t)))))$/262D2DT2JJt))$/$,,-D4F4F0G#0MM&&**4T5G5G0H+IJ $,,-D4F4F0G#0MM ;r*   N)r@   rA   rB   r   	__slots__rQ   r   r   r   r   r   r   r  r   r   r*   r)   Phaser     s:    	J		$	&	G
	9	0	0	"	.	r*   r  c                   J    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zy	)
getPhases.<locals>.InitialPhasec                      y r2   r   r   s     r)   r   z6getPhases.<locals>.InitialPhase.processSpaceCharacters      r*   c                 d    | j                   j                  || j                   j                         y r2   rI   r  documentr   s     r)   r   z.getPhases.<locals>.InitialPhase.processComment       II##E499+=+=>r*   c                 \   |d   }|d   }|d   }|d   }|dk7  s	|| |dk7  r| j                   j                  d       |d}| j                  j                  |       |dk7  r|j	                  t
              }|rE|d   dk7  s=|j                  d	      s,|d
v s(|j                  d      r||r%|j                         dk(  rd| j                   _        n5|j                  d      s|j                  d      r|d| j                   _        | j                   j                  d   | j                   _
        y )NrO   publicIdsystemIdcorrectr   zabout:legacy-compatzunknown-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//zlimited quirksr_   )rS   r   rI   insertDoctyperz   r   r   rd   rc   rL   ri   )rM   r   rO   r$  r%  r&  s         r)   r   z.getPhases.<locals>.InitialPhase.processDoctype  sQ   =DZ(HZ(HI&G("6(X9N-N&&'89II##E*2~#--.>?uV}6''6<7=p  !) ) ''AB $!15q!q)1&%%=> %%?@ &)9& $ 2 2< @DKKr*   c                 v    d| j                   _        | j                   j                  d   | j                   _        y )Nr(  r_   )rS   rc   rL   ri   ro   s    r)   anythingElsez,getPhases.<locals>.InitialPhase.anythingElseZ  s)    %-DKK" $ 2 2< @DKKr*   c                 \    | j                   j                  d       | j                          |S )Nzexpected-doctype-but-got-charsrS   r   r+  r   s     r)   r   z1getPhases.<locals>.InitialPhase.processCharacters^  s&    KK""#CDLr*   c                 h    | j                   j                  dd|d   i       | j                          |S )Nz"expected-doctype-but-got-start-tagrO   r-  r   s     r)   r   z/getPhases.<locals>.InitialPhase.processStartTagc  s4    KK""#G$*E&M#:<Lr*   c                 h    | j                   j                  dd|d   i       | j                          |S )Nz expected-doctype-but-got-end-tagrO   r-  r   s     r)   r   z-getPhases.<locals>.InitialPhase.processEndTagi  s4    KK""#E$*E&M#:<Lr*   c                 Z    | j                   j                  d       | j                          y)Nzexpected-doctype-but-got-eofTr-  ro   s    r)   r   z*getPhases.<locals>.InitialPhase.processEOFo  s$    KK""#ABr*   N)r@   rA   rB   tupler  r   r   r   r+  r   r   r   r   r   r*   r)   InitialPhaser    s5    G			?]	A~	A	
			r*   r2  c                   D    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zy)	"getPhases.<locals>.BeforeHtmlPhasec                     | j                   j                  t        dd             | j                  j                  d   | j                  _        y )Nr   r   r   )rI   
insertRootimpliedTagTokenrS   rL   ri   ro   s    r)   rj   z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementx  s6    II  !DE $ 2 2< @DKKr*   c                 $    | j                          yNTrj   ro   s    r)   r   z-getPhases.<locals>.BeforeHtmlPhase.processEOF}  s    ""$r*   c                 d    | j                   j                  || j                   j                         y r2   r   r   s     r)   r   z1getPhases.<locals>.BeforeHtmlPhase.processComment  r"  r*   c                      y r2   r   r   s     r)   r   z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharacters  r  r*   c                 &    | j                          |S r2   r:  r   s     r)   r   z4getPhases.<locals>.BeforeHtmlPhase.processCharacters  s    ""$Lr*   c                 X    |d   dk(  rd| j                   _        | j                          |S )NrO   r   T)rS   ra   rj   r   s     r)   r   z2getPhases.<locals>.BeforeHtmlPhase.processStartTag  s+    V}&,0)""$Lr*   c                 x    |d   dvr"| j                   j                  dd|d   i       y | j                          |S )NrO   r   r   r   brzunexpected-end-tag-before-html)rS   r   rj   r   s     r)   r   z0getPhases.<locals>.BeforeHtmlPhase.processEndTag  sD    V}$BB&&'G(.f'>@ &&(r*   N)r@   rA   rB   r1  r  rj   r   r   r   r   r   r   r   r*   r)   BeforeHtmlPhaser4  t  s-    G		A
		?				r*   rB  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Z ej                  d	efd
e	fg      Ze
e_         ej                  defg      Zee_        y)"getPhases.<locals>.BeforeHeadPhasec                 :    | j                  t        dd             y)Nr   r   TstartTagHeadr7  ro   s    r)   r   z-getPhases.<locals>.BeforeHeadPhase.processEOF  s    ofjABr*   c                      y r2   r   r   s     r)   r   z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharacters  r  r*   c                 <    | j                  t        dd             |S Nr   r   rF  r   s     r)   r   z4getPhases.<locals>.BeforeHeadPhase.processCharacters      ofjABLr*   c                 R    | j                   j                  d   j                  |      S Nr   rS   rL   r   r   s     r)   r  z/getPhases.<locals>.BeforeHeadPhase.startTagHtml  "    ;;%%h/??FFr*   c                     | j                   j                  |       | j                   j                  d   | j                   _        | j                  j
                  d   | j                  _        y )Nr   inHead)rI   r   r   headPointerrS   rL   ri   r   s     r)   rG  z/getPhases.<locals>.BeforeHeadPhase.startTagHead  sJ    II##E*$(II$:$:2$>DII! $ 2 28 <DKKr*   c                 <    | j                  t        dd             |S rJ  rF  r   s     r)   startTagOtherz0getPhases.<locals>.BeforeHeadPhase.startTagOther  rK  r*   c                 <    | j                  t        dd             |S rJ  rF  r   s     r)   endTagImplyHeadz2getPhases.<locals>.BeforeHeadPhase.endTagImplyHead  rK  r*   c                 F    | j                   j                  dd|d   i       y )Nzend-tag-after-implied-rootrO   r  r   s     r)   endTagOtherz.getPhases.<locals>.BeforeHeadPhase.endTagOther  s#    KK""#?$*E&M#:<r*   r   r   r@  N)r@   rA   rB   r1  r  r   r   r   r  rG  rT  rV  rX  r   MethodDispatcherr  defaultr  r   r*   r)   BeforeHeadPhaserD    s    G					G	=
			< 2&11\"\"3
  #0///+_=1
  !,r*   r[  c                      e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Z ej*                  defdefdefdefdefde	fde
fdefg      Zee_         ej*                  defdefg      Zee_        y)getPhases.<locals>.InHeadPhasec                 $    | j                          yr9  r+  ro   s    r)   r   z)getPhases.<locals>.InHeadPhase.processEOF      r*   c                 &    | j                          |S r2   r_  r   s     r)   r   z0getPhases.<locals>.InHeadPhase.processCharacters      Lr*   c                 R    | j                   j                  d   j                  |      S rM  rN  r   s     r)   r  z+getPhases.<locals>.InHeadPhase.startTagHtml  rO  r*   c                 :    | j                   j                  d       y )Nz!two-heads-are-not-better-than-oner  r   s     r)   rG  z+getPhases.<locals>.InHeadPhase.startTagHead  s    KK""#FGr*   c                     | j                   j                  |       | j                   j                  j                          d|d<   y NTr   rI   r   r   r  r   s     r)   startTagBaseLinkCommandz6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommand  5    II##E*II""&&(/3E+,r*   c                    | j                   j                  |       | j                   j                  j                          d|d<   |d   }| j                  j
                  j                  j                  d   dk(  rd|v r3| j                  j
                  j                  j                  |d          y d|v rd|v r|d   j                         d	k(  r|t        j                  |d   j                  d
            }t        j                  |      }|j                         }| j                  j
                  j                  j                  |       y y y y y )NTr   r   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)rI   r   r   r  rS   rW   rZ   rr   changeEncodingrd   r	   EncodingBytesencodeContentAttrParserr#   )rM   r   ry   r   rS   codecs         r)   startTagMetaz+getPhases.<locals>.InHeadPhase.startTagMeta  s$   II##E*II""&&(/3E+,vJ{{$$++88;{J
*KK))00??
9@UV:-"j0 .446.H
 (55j6K6R6RSZ6[\D);;DAF"LLNEKK))00??F I 1 . Kr*   c                 <    | j                   j                  |d       y )Nr   rS   r   r   s     r)   startTagTitlez,getPhases.<locals>.InHeadPhase.startTagTitle  s    KK**5(;r*   c                 <    | j                   j                  |d       y )Nr   ru  r   s     r)   startTagNoFramesStylez4getPhases.<locals>.InHeadPhase.startTagNoFramesStyle      KK**5)<r*   c                     | j                   j                  r| j                   j                  |d       y | j                  j	                  |       | j                   j
                  d   | j                   _        y )Nr   inHeadNoscript)rS   rU   r   rI   r   rL   ri   r   s     r)   startTagNoscriptz/getPhases.<locals>.InHeadPhase.startTagNoscript  sQ    {{$$..ui@		''.$(KK$6$67G$H!r*   c                 F   | j                   j                  |       | j                  j                  j                  | j                  j                  _        | j                  j                  | j                  _        | j                  j                  d   | j                  _        y )Nr   )	rI   r   rS   rW   scriptDataStaterf   ri   r   rL   r   s     r)   startTagScriptz-getPhases.<locals>.InHeadPhase.startTagScript   sg    II##E**.++*?*?*O*ODKK!!'(,(9(9DKK% $ 2 26 :DKKr*   c                 &    | j                          |S r2   r_  r   s     r)   rT  z,getPhases.<locals>.InHeadPhase.startTagOther  rb  r*   c                     | j                   j                  j                  j                         }|j                  dk(  sJ d|j                  z         | j                   j
                  d   | j                   _        y )Nr   zExpected head got %s	afterHeadrS   rI   r   r  rO   rL   ri   rM   r   r   s      r)   
endTagHeadz)getPhases.<locals>.InHeadPhase.endTagHead
  s\    ;;##00446D99&J(>(JJ& $ 2 2; ?DKKr*   c                 &    | j                          |S r2   r_  r   s     r)   endTagHtmlBodyBrz/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBr  rb  r*   c                 F    | j                   j                  dd|d   i       y Nunexpected-end-tagrO   r  r   s     r)   rX  z*getPhases.<locals>.InHeadPhase.endTagOther       KK""#7&%-9PQr*   c                 8    | j                  t        d             y )Nr   )r  r7  ro   s    r)   r+  z+getPhases.<locals>.InHeadPhase.anythingElse  s    OOOF34r*   r   title)noframesstylenoscriptscript)basebasefontbgsoundcommandlinkr9   r   )rA  r   r   N)r@   rA   rB   r1  r  r   r   r  rG  rh  rs  rv  rx  r|  r  rT  r  r  rX  r+  r   rY  r  rZ  r  r   r*   r)   InHeadPhaser]    s    G				G	H	4
	G*	<	=	I	;		@
		R	5 2&11\"m$"$9:)*~&?$&\"\"
3
 
 #0///Z #%561
  !,r*   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Z ej$                  de	fde
fdefg      Zee_         ej$                  defdefg      Zee_        y)&getPhases.<locals>.InHeadNoscriptPhasec                 Z    | j                   j                  d       | j                          y)Nzeof-in-head-noscriptTr-  ro   s    r)   r   z1getPhases.<locals>.InHeadNoscriptPhase.processEOF/  s$    KK""#9:r*   c                 R    | j                   j                  d   j                  |      S NrQ  )rS   rL   r   r   s     r)   r   z5getPhases.<locals>.InHeadNoscriptPhase.processComment4  s"    ;;%%h/>>uEEr*   c                 \    | j                   j                  d       | j                          |S )Nzchar-in-head-noscriptr-  r   s     r)   r   z8getPhases.<locals>.InHeadNoscriptPhase.processCharacters7  s&    KK""#:;Lr*   c                 R    | j                   j                  d   j                  |      S r  rS   rL   r   r   s     r)   r   z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharacters<  "    ;;%%h/FFuMMr*   c                 R    | j                   j                  d   j                  |      S rM  rN  r   s     r)   r  z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtml?  rO  r*   c                 R    | j                   j                  d   j                  |      S r  rN  r   s     r)   rh  z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandB  rO  r*   c                 F    | j                   j                  dd|d   i       y Nunexpected-start-tagrO   r  r   s     r)   startTagHeadNoscriptz;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptE       KK""#9FE&M;RSr*   c                 h    | j                   j                  dd|d   i       | j                          |S Nzunexpected-inhead-noscript-tagrO   r-  r   s     r)   rT  z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherH  2    KK""#CfeTZmE\]Lr*   c                     | j                   j                  j                  j                         }|j                  dk(  sJ d|j                  z         | j                   j
                  d   | j                   _        y )Nr  zExpected noscript got %srQ  r  r  s      r)   endTagNoscriptz5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptM  s\    ;;##00446D99
*R,F,RR* $ 2 28 <DKKr*   c                 h    | j                   j                  dd|d   i       | j                          |S r  r-  r   s     r)   endTagBrz/getPhases.<locals>.InHeadNoscriptPhase.endTagBrR  r  r*   c                 F    | j                   j                  dd|d   i       y r  r  r   s     r)   rX  z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherW  r  r*   c                 8    | j                  t        d             y )Nr  )r  r7  ro   s    r)   r+  z3getPhases.<locals>.InHeadNoscriptPhase.anythingElseZ  s    
 ;<r*   r   )r  r  r  r9   r  r  )r   r  r  rA  N)r@   rA   rB   r1  r  r   r   r   r   r  rh  r  rT  r  r  rX  r+  r   rY  r  rZ  r  r   r*   r)   InHeadNoscriptPhaser  ,  s    G		
	F	
	N	G	G	T	
	=
	
	R	= 2&11\"IKbc!#783
 
 #0///(81
  !,r*   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Z ej"                  defdefde	fde
fdefg      Zee_         ej"                  defg      Zee_        y)!getPhases.<locals>.AfterHeadPhasec                 $    | j                          yr9  r_  ro   s    r)   r   z,getPhases.<locals>.AfterHeadPhase.processEOFn  r`  r*   c                 &    | j                          |S r2   r_  r   s     r)   r   z3getPhases.<locals>.AfterHeadPhase.processCharactersr  rb  r*   c                 R    | j                   j                  d   j                  |      S rM  rN  r   s     r)   r  z.getPhases.<locals>.AfterHeadPhase.startTagHtmlv  rO  r*   c                     d| j                   _        | j                  j                  |       | j                   j                  d   | j                   _        y )NFr   )rS   rn   rI   r   rL   ri   r   s     r)   startTagBodyz.getPhases.<locals>.AfterHeadPhase.startTagBodyy  s;    %*DKK"II##E* $ 2 28 <DKKr*   c                     | j                   j                  |       | j                  j                  d   | j                  _        y )Nr   )rI   r   rS   rL   ri   r   s     r)   startTagFramesetz2getPhases.<locals>.AfterHeadPhase.startTagFrameset~  s/    II##E* $ 2 2< @DKKr*   c                    | j                   j                  dd|d   i       | j                  j                  j	                  | j                  j
                         | j                   j                  d   j                  |       | j                  j                  d d d   D ]8  }|j                  dk(  s| j                  j                  j                  |        y  y )Nz#unexpected-start-tag-out-of-my-headrO   rQ  r   r   )
rS   r   rI   r   r   rR  rL   r   rO   remover  s      r)   startTagFromHeadz2getPhases.<locals>.AfterHeadPhase.startTagFromHead  s    KK""#H$*E&M#:<II""))$))*?*?@KKx(88?		..tt4 99&II**11$7r*   c                 F    | j                   j                  dd|d   i       y r  r  r   s     r)   rG  z.getPhases.<locals>.AfterHeadPhase.startTagHead  r  r*   c                 &    | j                          |S r2   r_  r   s     r)   rT  z/getPhases.<locals>.AfterHeadPhase.startTagOther  rb  r*   c                 &    | j                          |S r2   r_  r   s     r)   r  z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBr  rb  r*   c                 F    | j                   j                  dd|d   i       y r  r  r   s     r)   rX  z-getPhases.<locals>.AfterHeadPhase.endTagOther  r  r*   c                     | j                   j                  t        dd             | j                  j                  d   | j                  _        d| j                  _        y )Nr   r   r   T)rI   r   r7  rS   rL   ri   rn   ro   s    r)   r+  z.getPhases.<locals>.AfterHeadPhase.anythingElse  sB    II##OFJ$GH $ 2 28 <DKK%)DKK"r*   r   r   r   )	r  r  r  r  r9   r  r  r  r  r   )r   r   rA  N)r@   rA   rB   r1  r  r   r   r  r  r  r  rG  rT  r  rX  r+  r   rY  r  rZ  r  r   r*   r)   AfterHeadPhaser  k  s    G				G	=
	A		T			R	*
 2&11\"\")*  \"3
  #0///2H2B2D 1E F +r*   r  c                       e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6 e7jp                  g d5W jr                  fd6efd7efd8efd9efe:efd:efd;efd<efd=efd>efd?efd@efdAefdBefdCefdDefdEefdFefdGefdHefdIefdJe fdKe!fdLe"fdMe#fdNe$fdOe&fdPe'fdQe%fdRe(fdSe)fdTe*f      Z;e+e;_<         e7jp                  d7e-fd5e.fdUe/fd;e0fdVe,fdWe1fe:e2fdXe3fdBe4fdYe5fg
      Z=e6e=_<         xZ>S )ZgetPhases.<locals>.InBodyPhase)r   c                 F    t        |   |i | | j                  | _        y r2   )superrQ   processSpaceCharactersNonPrer   )rM   r   r&   InBodyPhaser   s      r)   rQ   z'getPhases.<locals>.InBodyPhase.__init__  s%    +t-t>v>*.*K*KD'r*   c                     |j                   |j                   k(  xr4 |j                  |j                  k(  xr |j                  |j                  k(  S r2   )rO   rx   ry   )rM   node1node2s      r)   isMatchingFormattingElementz:getPhases.<locals>.InBodyPhase.isMatchingFormattingElement  sE    JJ%**, 9OOu69$$(8(88:r*   c                    | j                   j                  |       | j                   j                  d   }g }| j                   j                  d d d   D ]0  }|t        u r n&| j                  ||      s |j                  |       2 t        |      dk  sJ t        |      dk(  r(| j                   j                  j                  |d          | j                   j                  j                  |       y )Nr      )	rI   r   r   activeFormattingElementsr   r  r   r   r  )rM   r   r|   matchingElementsr   s        r)   addFormattingElementz3getPhases.<locals>.InBodyPhase.addFormattingElement  s    II##E*ii,,R0G!		::4R4@ 26>55dGD$++D1	2 '(A---#$)		2299:J2:NOII..55g>r*   c                     t        d      }| j                  j                  d d d   D ]-  }|j                  |vs| j                  j                  d        y  y )N)dddtlir(   r   r   r   r   r   r   r   r   r   z expected-closing-tag-but-got-eof)r   rI   r   rO   rS   r   )rM   allowed_elementsr   s      r)   r   z)getPhases.<locals>.InBodyPhase.processEOF  sY    ( *2  3 		..tt4 99$44KK**+MNr*   c                 d   |d   }| j                   | _        |j                  d      rQ| j                  j                  d   j
                  dv r,| j                  j                  d   j                         s|dd  }|r6| j                  j                          | j                  j                  |       y y )Nr   
r   )prelistingtextarear   )	r  r   r   rI   r   rO   
hasContent#reconstructActiveFormattingElementsr  )rM   r   r   s      r)   !processSpaceCharactersDropNewlinez@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewline  s     =D*.*K*KD'%		&&r*//3QQ		..r2==?ABx		==?		$$T* r*   c                 &   |d   dk(  ry | j                   j                          | j                   j                  |d          | j                  j                  r5t        |d   D cg c]
  }|t        v c}      rd| j                  _        y y y c c}w )Nr    F)rI   r  r  rS   rn   anyr   )rM   r   chars      r)   r   z0getPhases.<locals>.InBodyPhase.processCharacters  s    V}(II99;II  v/&&!&v0 0 0 1).&1 '0s   $Bc                 t    | j                   j                          | j                   j                  |d          y r  )rI   r  r  r   s     r)   r  z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPre  s(    II99;II  v/r*   c                 R    | j                   j                  d   j                  |      S r  rN  r   s     r)   startTagProcessInHeadz4getPhases.<locals>.InBodyPhase.startTagProcessInHead  rO  r*   c                    | j                   j                  dddi       t        | j                  j                        dk(  s&| j                  j                  d   j
                  dk7  r| j                   j                  sJ y d| j                   _        |d   j                         D ]Q  \  }}|| j                  j                  d   j                  vs,|| j                  j                  d   j                  |<   S y )Nr  rO   r   r   Fr   )
rS   r   r   rI   r   rO   r[   rn   r3   ry   r  s       r)   r  z+getPhases.<locals>.InBodyPhase.startTagBody  s    KK""#9FF;KLDII**+q0II**1-22f<{{,,,,).&#(=#6#6#8 KKD%499#9#9!#<#G#GGEJ		..q1<<TBKr*   c                 p   | j                   j                  dddi       t        | j                  j                        dk(  s&| j                  j                  d   j
                  dk7  r| j                   j                  sJ y | j                   j                  sy | j                  j                  d   j                  rI| j                  j                  d   j                  j                  | j                  j                  d          | j                  j                  d   j
                  dk7  rK| j                  j                  j                          | j                  j                  d   j
                  dk7  rK| j                  j                  |       | j                   j                  d   | j                   _        y )	Nr  rO   r   r   r   r   r   r   )rS   r   r   rI   r   rO   r[   rn   parentremoveChildr  r   rL   ri   r   s     r)   r  z/getPhases.<locals>.InBodyPhase.startTagFrameset  s=   KK""#9FJ;OPDII**+q0DII4J4J14M4R4RV\4\{{,,,,[[++99))!,33II**1-44@@AWAWXYAZ[ii,,R055?II**..0 ii,,R055?		''.$(KK$6$6|$D!r*   c                     | j                   j                  dd      r| j                  t        d             | j                   j	                  |       y Nr(   buttonvariant)rI   elementInScopeendTagPr7  r   r   s     r)   startTagClosePz-getPhases.<locals>.InBodyPhase.startTagCloseP  s<    yy''X'>_S12II##E*r*   c                     | j                   j                  dd      r| j                  t        d             | j                   j	                  |       d| j
                  _        | j                  | _        y )Nr(   r  r  F)	rI   r  r  r7  r   rS   rn   r  r   r   s     r)   startTagPreListingz1getPhases.<locals>.InBodyPhase.startTagPreListing  sV    yy''X'>_S12II##E*%*DKK"*.*P*PD'r*   c                 b   | j                   j                  r| j                  j                  dddi       y | j                   j	                  dd      r| j                  t        d             | j                   j                  |       | j                   j                  d   | j                   _        y )Nr  rO   formr(   r  r  r   )	rI   formPointerrS   r   r  r  r7  r   r   r   s     r)   startTagFormz+getPhases.<locals>.InBodyPhase.startTagForm  s~    yy$$&&'=?OP99++C+BLL!56		''.(,		(>(>r(B		%r*   c                 :   d| j                   _        dgddgddgd}||d      }t        | j                  j                        D ]n  }|j
                  |v r;| j                   j                  j                  t        |j
                  d              n%|j                  t        v s_|j
                  dvsn n | j                  j                  d	d
      r/| j                   j                  j                  t        d	d             | j                  j                  |       y )NFr  r  r  )r  r  r  rO   r   )addressr   r(   r(   r  r  )rS   rn   reversedrI   r   rO   ri   r   r7  	nameTupler   r  r   )rM   r   stopNamesMap	stopNamesr   s        r)   startTagListItemz/getPhases.<locals>.InBodyPhase.startTagListItem&  s    %*DKK"#'&#',#',0L %U6]3I !7!78 99	)KK%%33'		8<>NNo5		)@@ yy''X'>!!//#C24 II##E*r*   c                    | j                   j                  dd      r| j                  t        d             | j                   j	                  |       | j
                  j                  j                  | j
                  j                  _        y r  )	rI   r  r  r7  r   rS   rW   rh   rf   r   s     r)   startTagPlaintextz0getPhases.<locals>.InBodyPhase.startTagPlaintext<  s^    yy''X'>_S12II##E**.++*?*?*N*NDKK!!'r*   c                    | j                   j                  dd      r| j                  t        d             | j                   j                  d   j
                  t        v rE| j                  j                  dd|d   i       | j                   j                  j                          | j                   j                  |       y )Nr(   r  r  r   r  rO   )rI   r  r  r7  r   rO   r   rS   r   r  r   r   s     r)   startTagHeadingz.getPhases.<locals>.InBodyPhase.startTagHeadingB  s    yy''X'>_S12yy%%b)../A&&'=f?VW		&&**,II##E*r*   c                    | j                   j                  d      }|r| j                  j                  dddd       | j	                  t        d             || j                   j                  v r%| j                   j                  j                  |       || j                   j                  v r%| j                   j                  j                  |       | j                   j                          | j                  |       y )Na$unexpected-start-tag-implies-end-tag	startNameendName)rI   !elementInActiveFormattingElementsrS   r   endTagFormattingr7  r   r  r  r  r  )rM   r   afeAElements      r)   	startTagAz(getPhases.<locals>.InBodyPhase.startTagAJ  s    ))EEcJK&&'M58S'IK%%oc&:;$))"8"88II**11+>$))"D"DDII66==kJII99;%%e,r*   c                 Z    | j                   j                          | j                  |       y r2   )rI   r  r  r   s     r)   startTagFormattingz1getPhases.<locals>.InBodyPhase.startTagFormattingW  s     II99;%%e,r*   c                 6   | j                   j                          | j                   j                  d      rS| j                  j	                  dddd       | j                  t        d             | j                   j                          | j                  |       y )Nnobrr  r  )rI   r  r  rS   r   r   r7  r  r   s     r)   startTagNobrz+getPhases.<locals>.InBodyPhase.startTagNobr[  ss    II99;yy''/&&'M5;'OQ""?6#:;		==?%%e,r*   c                 <   | j                   j                  d      r;| j                  j                  dddd       | j	                  t        d             |S | j                   j                          | j                   j                  |       d| j                  _        y )Nr  r  r  F)	rI   r  rS   r   r   r7  r  r   rn   r   s     r)   startTagButtonz-getPhases.<locals>.InBodyPhase.startTagButtone  sx    yy''1&&'M5=('SU""?8#<=		==?		''.).&r*   c                     | j                   j                          | j                   j                  |       | j                   j                  j	                  t
               d| j                  _        y NF)rI   r  r   r  r   r   rS   rn   r   s     r)   startTagAppletMarqueeObjectz:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectp  sH    II99;II##E*II..55f=%*DKK"r*   c                     | j                   j                  dd      r| j                  t        d             | j                   j	                          d| j
                  _        | j
                  j                  |d       y )Nr(   r  r  Fr   )rI   r  r  r7  r  rS   rn   r   r   s     r)   startTagXmpz*getPhases.<locals>.InBodyPhase.startTagXmpv  sZ    yy''X'>_S12II99;%*DKK"KK**5)<r*   c                 L   | j                   j                  dk7  r7| j                  j                  dd      r| j	                  t        d             | j                  j                  |       d| j                   _        | j                   j                  d   | j                   _	        y )Nr(  r(   r  r  Fr   )
rS   rc   rI   r  r   r7  r   rn   rL   ri   r   s     r)   startTagTablez,getPhases.<locals>.InBodyPhase.startTagTable}  sw    {{%%199++C+B&&s';<II##E*%*DKK" $ 2 29 =DKKr*   c                     | j                   j                          | j                   j                  |       | j                   j                  j	                          d|d<   d| j
                  _        y )NTr   F)rI   r  r   r   r  rS   rn   r   s     r)   startTagVoidFormattingz5getPhases.<locals>.InBodyPhase.startTagVoidFormatting  sQ    II99;II##E*II""&&(/3E+,%*DKK"r*   c                     | j                   j                  }| j                  |       d|d   v r1|d   d   j                  t              dk(  r|| j                   _        y y y )Nr7   r   hidden)rS   rn   r  rz   r   )rM   r   rn   s      r)   startTagInputz,getPhases.<locals>.InBodyPhase.startTagInput  s_    //J''.%-'&M&)334DEQ)3& R (r*   c                     | j                   j                  |       | j                   j                  j                          d|d<   y rf  rg  r   s     r)   startTagParamSourcez2getPhases.<locals>.InBodyPhase.startTagParamSource  ri  r*   c                    | j                   j                  dd      r| j                  t        d             | j                   j	                  |       | j                   j
                  j                          d|d<   d| j                  _        y )Nr(   r  r  Tr   F)	rI   r  r  r7  r   r   r  rS   rn   r   s     r)   
startTagHrz)getPhases.<locals>.InBodyPhase.startTagHr  si    yy''X'>_S12II##E*II""&&(/3E+,%*DKK"r*   c           	          | j                   j                  dddd       | j                  t        dd|d   |d                y )	Nzunexpected-start-tag-treated-asimageimgoriginalNamenewNamer   r   r   ry   r   )rS   r   r   r7  r   s     r)   startTagImagez,getPhases.<locals>.InBodyPhase.startTagImage  sJ    KK""#D4;#NP  
<A&M=B==Q"S Tr*   c           	         | j                   j                  dddi       | j                  j                  ry i }d|d   v r|d   d   |d<   | j	                  t        dd|             | j	                  t        d	d             | j	                  t        d
d             d|d   v r	|d   d   }nd}| j                  t        d   |d       |d   j                         }d|v r|d= d|v r|d= d|d<   | j	                  t        dd||d                | j                  t        d
             | j	                  t        d	d             | j                  t        d             y )Nzdeprecated-tagrO   isindexactionr   r  r   )ry   hrlabelpromptz3This is a searchable index. Enter search keywords: r   r7   r   inputr   r+  )
rS   r   rI   r  r   r7  r   r   copyr   )rM   r   
form_attrsr2  ry   s        r)   startTagIsIndexz.getPhases.<locals>.InBodyPhase.startTagIsIndex  sr   KK""#3fi5HIyy$$J5=(',V}X'>
8$  <F"H I  z!BC  *!EF5=(vx0N""#L16BDv++-J:%x(:%x(!*Jv  *<F=B==Q"S T w78  z!BCv67r*   c                     | j                   j                  |       | j                  j                  j                  | j                  j                  _        | j                  | _        d| j                  _        y r  )	rI   r   rS   rW   re   rf   r  r   rn   r   s     r)   startTagTextareaz/getPhases.<locals>.InBodyPhase.startTagTextarea  sP    II##E**.++*?*?*K*KDKK!!'*.*P*PD'%*DKK"r*   c                 H    d| j                   _        | j                  |       y r  )rS   rn   startTagRawtextr   s     r)   startTagIFramez-getPhases.<locals>.InBodyPhase.startTagIFrame  s    %*DKK"  'r*   c                 v    | j                   j                  r| j                  |       y | j                  |       y r2   )rS   rU   r;  rT  r   s     r)   r|  z/getPhases.<locals>.InBodyPhase.startTagNoscript  s+    {{$$$$U+""5)r*   c                 <    | j                   j                  |d       y)z8iframe, noembed noframes, noscript(if scripting enabled)r   Nru  r   s     r)   r;  z.getPhases.<locals>.InBodyPhase.startTagRawtext  ry  r*   c                 *   | j                   j                  d   j                  dk(  r.| j                  j                  j                  t        d             | j                   j                          | j                  j                   j                  |       y Nr   option)	rI   r   rO   rS   ri   r   r7  r  r   r   s     r)   startTagOptz*getPhases.<locals>.InBodyPhase.startTagOpt  sd    yy%%b)..(:!!//0IJII99;KK**51r*   c                    | j                   j                          | j                   j                  |       d| j                  _        | j                  j
                  | j                  j                  d   | j                  j                  d   | j                  j                  d   | j                  j                  d   | j                  j                  d   | j                  j                  d   fv r)| j                  j                  d   | j                  _        y | j                  j                  d	   | j                  _        y )
NFr   r   r   r   r   r   inSelectInTabler   )rI   r  r   rS   rn   ri   rL   r   s     r)   startTagSelectz-getPhases.<locals>.InBodyPhase.startTagSelect  s    II99;II##E*%*DKK"{{  T[[%7%7	%B%)[[%7%7%D%)[[%7%7%H%)[[%7%7%F%)[[%7%7%@%)[[%7%7%A%C C %)KK$6$67H$I!$(KK$6$6z$B!r*   c                 $   | j                   j                  d      rZ| j                   j                          | j                   j                  d   j                  dk7  r| j
                  j                          | j                   j                  |       y )Nrubyr   )rI   r  generateImpliedEndTagsr   rO   rS   r   r   r   s     r)   startTagRpRtz+getPhases.<locals>.InBodyPhase.startTagRpRt  sc    yy''/		00299))"-22f<KK**,II##E*r*   c                 P   | j                   j                          | j                  j                  |       | j                  j	                  |       t
        d   |d<   | j                   j                  |       |d   r*| j                   j                  j                          d|d<   y y )Nrv   rx   r   Tr   )	rI   r  rS   r   r   r   r   r   r  r   s     r)   startTagMathz+getPhases.<locals>.InBodyPhase.startTagMath  s    II99;KK..u5KK//6!+H!5E+II##E* ]#		&&**,37/0 $r*   c                 P   | j                   j                          | j                  j                  |       | j                  j	                  |       t
        d   |d<   | j                   j                  |       |d   r*| j                   j                  j                          d|d<   y y )Nr   rx   r   Tr   )	rI   r  rS   r   r   r   r   r   r  r   s     r)   startTagSvgz*getPhases.<locals>.InBodyPhase.startTagSvg  s    II99;KK++E2KK//6!+E!2E+II##E* ]#		&&**,37/0 $r*   c                 F    | j                   j                  dd|d   i       y)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"
            zunexpected-start-tag-ignoredrO   Nr  r   s     r)   startTagMisplacedz0getPhases.<locals>.InBodyPhase.startTagMisplaced  s#     KK""#AFERXMCZ[r*   c                 n    | j                   j                          | j                   j                  |       y r2   )rI   r  r   r   s     r)   rT  z,getPhases.<locals>.InBodyPhase.startTagOther  s$    II99;II##E*r*   c                 v   | j                   j                  dd      sU| j                  t        dd             | j                  j                  dddi       | j                  t        dd             y | j                   j                  d       | j                   j                  d   j                  dk7  r| j                  j                  dddi       | j                   j                  j                         }|j                  dk7  r5| j                   j                  j                         }|j                  dk7  r4y y )	Nr(   r  r  r   r  rO   r   r   )rI   r  r  r7  rS   r   r  rH  r   rO   r  r  s      r)   r  z&getPhases.<locals>.InBodyPhase.endTagP  s    99++C+B##OC$DE&&';fc]K_S(;<		00599))"-22c9KK**+?&#Oyy--113ii3&9911557D ii3&r*   c                    | j                   j                  d      s| j                  j                          y | j                   j                  d   j
                  dk7  r`| j                   j                  dd  D ]D  }|j
                  t        d      vs| j                  j                  dd|j
                  d        n | j                  j                  d   | j                  _        y )Nr   r      )r  r  r  optgrouprA  r(   rprtr   r   r   r   r   r   r   r   $expected-one-end-tag-but-got-anothergotNameexpectedName	afterBody)	rI   r  rS   r   r   rO   r   rL   ri   r  s      r)   
endTagBodyz)getPhases.<locals>.InBodyPhase.endTagBody)  s    99++F3&&(''+00F: II22126 
Dyy	 3; )< < ..B(.		JL 
 !% 2 2; ?DKKr*   c                 r    | j                   j                  d      r| j                  t        d             |S y )Nr   )rI   r  r\  r7  r   s     r)   
endTagHtmlz)getPhases.<locals>.InBodyPhase.endTagHtml;  s/    yy''/ 78 0r*   c                     |d   dk(  r| j                   | _        | j                  j                  |d         }|r| j                  j	                          | j                  j
                  d   j                  |d   k7  r!| j                  j                  dd|d   i       |ro| j                  j
                  j                         }|j                  |d   k7  r8| j                  j
                  j                         }|j                  |d   k7  r7y y y )NrO   r  r   end-tag-too-early)
r  r   rI   r  rH  r   rO   rS   r   r  )rM   r   inScoper   s       r)   endTagBlockz*getPhases.<locals>.InBodyPhase.endTagBlockA  s    V}%.2.O.O+ii..uV}=G		002yy%%b)..%-?&&':VU6]<STyy--113ii5=09911557D ii5=0 r*   c                    | j                   j                  }d | j                   _        || j                   j                  |      s| j                  j	                  dddi       y | j                   j                          | j                   j                  d   |k7  r| j                  j	                  dddi       | j                   j                  j                  |       y )Nr  rO   r  r   zend-tag-too-early-ignored)rI   r  r  rS   r   rH  r   r  r  s      r)   
endTagFormz)getPhases.<locals>.InBodyPhase.endTagFormO  s    99((D$(DII!|499#;#;D#A&&';(.'79 		00299))"-5KK**+F,2F+;=		&&--d3r*   c                 P   |d   dk(  rd}nd }| j                   j                  |d   |      s"| j                  j                  dd|d   i       y | j                   j	                  |d          | j                   j
                  d   j                  |d   k7  r!| j                  j                  dd|d   i       | j                   j
                  j                         }|j                  |d   k7  r8| j                   j
                  j                         }|j                  |d   k7  r7y y )	NrO   r  listr  r  excluder   r`  )rI   r  rS   r   rH  r   rO   r  )rM   r   r  r   s       r)   endTagListItemz-getPhases.<locals>.InBodyPhase.endTagListItem\  s    V}$ 99++E&M7+K&&';feFm=TU		00v0G99))"-22eFmCKK**+v/1 yy--113ii5=09911557D ii5=0r*   c                 F   t         D ]9  }| j                  j                  |      s| j                  j                           n | j                  j                  d   j
                  |d   k7  r!| j                  j                  dd|d   i       t         D ]  }| j                  j                  |      s| j                  j                  j                         }|j
                  t         vr7| j                  j                  j                         }|j
                  t         vr7 y  y )Nr   rO   r`  )	r   rI   r  rH  r   rO   rS   r   r  )rM   r   items      r)   endTagHeadingz,getPhases.<locals>.InBodyPhase.endTagHeadingm  s    ' 99++D1II446 yy%%b)..%-?&&':VU6]<ST' 99++D19911557D))?:#yy5599; ))?:r*   c                 
   d}|dk  rs|dz  }| j                   j                  |d         }|r=|| j                   j                  v r7| j                   j                  |j                        s| j                  |       y|| j                   j                  vrG| j                  j                  dd|d   i       | j                   j                  j                  |       y| j                   j                  |j                        s"| j                  j                  dd|d   i       y|| j                   j                  d   k7  r!| j                  j                  d	d|d   i       | j                   j                  j                  |      }d}| j                   j                  |d D ]  }|j                  t        v s|} n |y| j                   j                  j                         }||k7  r*| j                   j                  j                         }||k7  r*| j                   j                  j                  |       y| j                   j                  |dz
     }| j                   j                  j                  |      }|x}	}
d}| j                   j                  j                  |
      }|d
k  r_|dz  }|dz  }| j                   j                  |   }
|
| j                   j                  vr&| j                   j                  j                  |
       g|
|k(  rn|	|k(  r(| j                   j                  j                  |
      dz   }|
j                         }|| j                   j                  | j                   j                  j                  |
      <   || j                   j                  | j                   j                  j                  |
      <   |}
|	j                  r|	j                  j!                  |	       |
j#                  |	       |
}	|d
k  r_|	j                  r|	j                  j!                  |	       |j                  t%        d      v r0| j                   j'                         \  }}|j)                  |	|       n|j#                  |	       |j                         }|j+                  |       |j#                  |       | j                   j                  j                  |       | j                   j                  j-                  ||       | j                   j                  j                  |       | j                   j                  j-                  | j                   j                  j                  |      dz   |       |dk  rryy)z)The much-feared adoption agency algorithmr      r   rO   Nzadoption-agency-1.2zadoption-agency-4.4r   zadoption-agency-1.3r  r   r   r   r   r   )rI   r
  r   r  rO   rX  rS   r   r  r  indexr  r   r  	cloneNoder  r  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)rM   r   outerLoopCounterformattingElementafeIndexfurthestBlockr|   commonAncestorbookmarklastNoder   innerLoopCounterrp  cloner  rt  s                   r)   r  z/getPhases.<locals>.InBodyPhase.endTagFormatting|  s     ! #Q& !A%  %)II$O$O&M%#!)&$))*@*@@112C2H2HI $$U+ 'dii.D.DDKK**+@65QW=BYZII66==>OP 112C2H2HIKK**+@65QW=BYZ )DII,B,B2,FF../DvuU[}F]^  9911778IJ $#yy55hi@ G((O;(/ !("ii4488:G!%66"&))"8"8"<"<"> "%66II66==gF "&!7!71!E  99==CCDUV #0/4#$ 		..44T:&*$)$QJE9911%8D499#E#EE		..55d; 00=0#'99#E#E#K#KD#QTU#U NN,E KP II66		::@@FH ?D II**		..44T:< D   33H=$$X.#H9 '*D ??OO//9!&&)4^*__+/99+R+R+T(FL'',?"..x8 *335 ..u5 ))%0 		2299:KL		2299(EJ 		&&--.?@		&&--II**00?!CULo #Q&r*   c                 T   | j                   j                  |d         r| j                   j                          | j                   j                  d   j                  |d   k7  r!| j
                  j                  dd|d   i       | j                   j                  |d         r| j                   j                  j                         }|j                  |d   k7  r7| j                   j                  j                         }|j                  |d   k7  r7| j                   j                          y y )NrO   r   r`  )	rI   r  rH  r   rO   rS   r   r  clearActiveFormattingElements)rM   r   r|   s      r)   endTagAppletMarqueeObjectz8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObject  s    yy''f6		002yy%%b)..%-?&&':VU6]<STyy''f6))00446lleFm3"ii4488:G lleFm3		779	 7r*   c                    | j                   j                  dddd       | j                  j                          | j                  j	                  t        dd             | j                  j                  j                          y )Nzunexpected-end-tag-treated-asrA  z
br elementr(  r   )rS   r   rI   r  r   r7  r   r  r   s     r)   r  z'getPhases.<locals>.InBodyPhase.endTagBr+  s_    KK""#B48\#RTII99;II##OD*$EFII""&&(r*   c                 L   | j                   j                  d d d   D ]  }|j                  |d   k(  r| j                   j                  |d          | j                   j                  d   j                  |d   k7  r!| j                  j                  dd|d   i       | j                   j                  j                         |k7  r)	 | j                   j                  j                         |k7  r) y |j                  t        v s| j                  j                  dd|d   i        y  y )Nr   rO   rg  r  )	rI   r   rO   rH  rS   r   r  r  r   r  s      r)   rX  z*getPhases.<locals>.InBodyPhase.endTagOther2  s    		..tt4 99f-II44U6]4Kyy--b166%-G../CfeTZmE\]))00446$> ))00446$>~~8../CfeTZmE\]r*   r   )	r  r  r  r  r  r9   r  r  r  r   r   )r  articleaside
blockquotecenterdetailsdirr   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr(   sectionsummaryul)r  r  r  )r  r  r  r^   r  )bbigcodeemfontissmallstrikestrongttur  r  )appletmarqueeobjectxmpr   )arearA  embedr'  keygenwbr)paramsourcetrackr4  r0  r&  r.  r  iframer  )noembedr  r   )rU  rV  )rA  rT  mathr   )r   colr   framer   r   r   r   r   r   r   )r  r  r  r  r  r  r  dialogr  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(   )r  r  r  )r  r  r  r  r  r  r  r  r  r  r  r  r  r  rA  )?r@   rA   rB   r  rQ   r  r  r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r"  r$  r,  r7  r9  r<  r|  r;  rB  rE  rI  rK  rM  rO  rT  r  r\  r^  rb  rd  ri  rl  r  r  r  rX  r   rY  r  r   r  rZ  r  __classcell__)r   r  r  s   @r)   r  r    s    0		L
	:	?"		+
	/	0	G		K	E	+
	Q	C	+,	O	+	-	-	-		/	+	=	>	+	4	4
	+	T	8>	+	(	*	=	2	C	+
	8
	8	\	+	8	@$		8	4	8"	a	LF
	:	)	 2&11 ,3
U''(,3
*"$,3

 \",3
 )*,3
* 	,3
 o.,3
  !34,3
 \",3
  !12,3
  +,!,3
" )#,3
$#$68%,3
( \"),3
* ~&+,3
, -.IJ-,3
. K /,3
0 m$1,3
2 =#%3,3
6 *+>?7,3
8 m$9,3
: :;,3
< m$=,3
> (?,3
@ )*A,3
B ~&C,3
D )*E,3
F %o6G,3
H ~&I,3
J <(K,3
L $[1M,3
N |$O,3
P k"Q,3
R&(S,3
 ,Z #0///Z Z * ,78 Z 'N0m,-.>@,.GH81
   !,r*   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	 e
j                  g       Zee_         e
j                  defg      Ze	e_        y)getPhases.<locals>.TextPhasec                 @    | j                   j                  |d          y r  r  r   s     r)   r   z.getPhases.<locals>.TextPhase.processCharacters  r	  r*   c                    | j                   j                  dd| j                  j                  d   j                  i       | j                  j                  j                          | j                   j                  | j                   _        y)Nz&expected-named-closing-tag-but-got-eofrO   r   T)rS   r   rI   r   rO   r  r   ri   ro   s    r)   r   z'getPhases.<locals>.TextPhase.processEOF  sd    KK""#K$*DII,B,B2,F,K,K#LNII""&&( $ 9 9DKKr*   c                     J d|d   z         )Nz4Tried to process start tag %s in RCDATA/RAWTEXT moderO   r   r   s     r)   rT  z*getPhases.<locals>.TextPhase.startTagOther  s    `PSXY_S```5r*   c                     | j                   j                  j                         }|j                  dk(  sJ | j                  j
                  | j                  _        y )Nr  )rI   r   r  rO   rS   r   ri   r  s      r)   endTagScriptz)getPhases.<locals>.TextPhase.endTagScript  sB    99))--/D99((( $ 9 9DKKr*   c                     | j                   j                  j                          | j                  j                  | j                  _        y r2   )rI   r   r  rS   r   ri   r   s     r)   rX  z(getPhases.<locals>.TextPhase.endTagOther  s.    II""&&( $ 9 9DKKr*   r  N)r@   rA   rB   r1  r  r   r   rT  r  rX  r   rY  r  rZ  r  r   r*   r)   	TextPhaser    sf    G		0		a	:	: 2&11"5"////|$1& ' +r*   r  c                   J   e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Z ej0                  dW  j2                  fde
fdefdefdefdefdefdefdefdefg
      Zee_         ej0                  defdefg      Zee_        y)getPhases.<locals>.InTablePhasec                     | j                   j                  d   j                  dvrK| j                   j                  j                          | j                   j                  d   j                  dvrJy y )Nr   )r   r   )rI   r   rO   r  ro   s    r)   clearStackToTableContextz8getPhases.<locals>.InTablePhase.clearStackToTableContext  sX    ))((,119JJ 		&&**, ))((,119JJr*   c                     | j                   j                  d   j                  dk7  r| j                  j	                  d       y | j                  j
                  sJ y )Nr   r   zeof-in-tablerI   r   rO   rS   r   r[   ro   s    r)   r   z*getPhases.<locals>.InTablePhase.processEOF  sD    yy%%b)..&8&&~6{{,,,,r*   c                     | j                   j                  }| j                   j                  d   | j                   _        || j                   j                  _        | j                   j                  j	                  |       y NinTableText)rS   ri   rL   r   r   rM   r   r   s      r)   r   z6getPhases.<locals>.InTablePhase.processSpaceCharacters  sV     KK--M $ 2 2= ADKK.;DKK+KK44U;r*   c                     | j                   j                  }| j                   j                  d   | j                   _        || j                   j                  _        | j                   j                  j	                  |       y r  )rS   ri   rL   r   r   r  s      r)   r   z1getPhases.<locals>.InTablePhase.processCharacters  sV     KK--M $ 2 2= ADKK.;DKK+KK//6r*   c                     d| j                   _        | j                  j                  d   j	                  |       d| j                   _        y )NTr   F)rI   insertFromTablerS   rL   r   r   s     r)   r  z*getPhases.<locals>.InTablePhase.insertText  s9     )-DII%KKx(::5A(-DII%r*   c                     | j                          | j                  j                  j                  t               | j                  j                  |       | j                  j                  d   | j                  _        y )Nr   )	r  rI   r  r   r   r   rS   rL   ri   r   s     r)   startTagCaptionz/getPhases.<locals>.InTablePhase.startTagCaption  sS    ))+II..55f=II##E* $ 2 2; ?DKKr*   c                     | j                          | j                  j                  |       | j                  j                  d   | j                  _        y )Nr   r  rI   r   rS   rL   ri   r   s     r)   startTagColgroupz0getPhases.<locals>.InTablePhase.startTagColgroup  s;    ))+II##E* $ 2 2? CDKKr*   c                 <    | j                  t        dd             |S )Nr   r   )r  r7  r   s     r)   startTagColz+getPhases.<locals>.InTablePhase.startTagCol  s    !!/*j"IJLr*   c                     | j                          | j                  j                  |       | j                  j                  d   | j                  _        y Nr   r  r   s     r)   startTagRowGroupz0getPhases.<locals>.InTablePhase.startTagRowGroup  s;    ))+II##E* $ 2 2= ADKKr*   c                 <    | j                  t        dd             |S )Nr   r   )r  r7  r   s     r)   startTagImplyTbodyz2getPhases.<locals>.InTablePhase.startTagImplyTbody  s    !!/':"FGLr*   c                     | j                   j                  dddd       | j                   j                  j                  t	        d             | j                   j
                  s|S y )Nr  r   r  )rS   r   ri   r   r7  r[   r   s     r)   r  z-getPhases.<locals>.InTablePhase.startTagTable  sT    KK""#I18W#MOKK++OG,DE;;(( )r*   c                 R    | j                   j                  d   j                  |      S r  rN  r   s     r)   startTagStyleScriptz3getPhases.<locals>.InTablePhase.startTagStyleScript  rO  r*   c                 &   d|d   v ry|d   d   j                  t              dk(  r[| j                  j                  d       | j                  j                  |       | j                  j                  j                          y | j                  |       y )Nr7   r   r  z unexpected-hidden-input-in-table)	rz   r   rS   r   rI   r   r   r  rT  r   s     r)   r   z-getPhases.<locals>.InTablePhase.startTagInput  st    %-'&M&)334DEQ&&'IJ		''.		&&**,""5)r*   c                 6   | j                   j                  d       | j                  j                  h| j                  j	                  |       | j                  j
                  d   | j                  _        | j                  j
                  j                          y y )Nzunexpected-form-in-tabler   )rS   r   rI   r  r   r   r  r   s     r)   r  z,getPhases.<locals>.InTablePhase.startTagForm  sm    KK""#=>yy$$,		''.(,		(>(>r(B		%		&&**, -r*   c                     | j                   j                  dd|d   i       d| j                  _        | j                   j                  d   j                  |       d| j                  _        y )Nz)unexpected-start-tag-implies-table-voodoorO   Tr   F)rS   r   rI   r  rL   r   r   s     r)   rT  z-getPhases.<locals>.InTablePhase.startTagOther  sY    KK""#NQWY^_eYfPgh(,DII%KKx(88?(-DII%r*   c                    | j                   j                  dd      r0| j                   j                          | j                   j                  d   j                  dk7  r@| j
                  j                  dd| j                   j                  d   j                  d       | j                   j                  d   j                  dk7  rK| j                   j                  j                          | j                   j                  d   j                  dk7  rK| j                   j                  j                          | j
                  j                          y | j
                  j                  sJ | j
                  j                          y )Nr   r  r   zend-tag-too-early-namedrX  )
rI   r  rH  r   rO   rS   r   r  rk   r[   r   s     r)   endTagTablez+getPhases.<locals>.InTablePhase.endTagTable  s   yy'''A		00299))"-22g=KK**+D7><@II<R<RSU<V<[<[,]^ ii,,R055@II**..0 ii,,R055@		&&**,..0 {{,,,,&&(r*   c                 F    | j                   j                  dd|d   i       y r  r  r   s     r)   endTagIgnorez,getPhases.<locals>.InTablePhase.endTagIgnore  r  r*   c                     | j                   j                  dd|d   i       d| j                  _        | j                   j                  d   j                  |       d| j                  _        y )Nz'unexpected-end-tag-implies-table-voodoorO   Tr   F)rS   r   rI   r  rL   r   r   s     r)   rX  z+getPhases.<locals>.InTablePhase.endTagOther  sX    KK""#LvW\]cWdNef(,DII%KKx(66u=(-DII%r*   r   r   r   r  r   r   r   )r   r   r   r   )r  r  r4  r  )r   r   r  r   r   r   r   r   r   r   r   N)r@   rA   rB   r1  r  r  r   r   r   r  r  r  r  r  r  r  r  r   r  rT  r  r  rX  r   rY  r  r  rZ  r  r  s   r)   InTablePhaser    s   G		-	-	<	7	.	@	D
		B
			G	*	-	.	) 	R	. 2&11U''(()*K (*:;!34m$ "56m$\"3
  #0///k",-9;1
 
 !,r*   r  c                   P     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
#getPhases.<locals>.InTableTextPhase)r   characterTokensc                 @    t        |   |i | d | _        g | _        y r2   )r  rQ   r   r  )rM   r   r&   InTableTextPhaser   s      r)   rQ   z,getPhases.<locals>.InTableTextPhase.__init__6  s(    "D2DCFC!%D#%D r*   c                 n   dj                  | j                  D cg c]  }|d   	 c}      }t        |D cg c]
  }|t        v c}      r<t        d   |d}| j
                  j                  d   j                  |       g | _        y |r| j                  j                  |       g | _        y c c}w c c}w )Nr'  r   r   r3  r   )	joinr  r  r   r   rS   rL   r  rI   )rM   rk  r   r   s       r)   flushCharactersz3getPhases.<locals>.InTableTextPhase.flushCharacters;  s    77T5I5IJTDLJKDDADD/AB!+L!94H""9-88? $&D  		$$T*#%D  KAs
   B-B2c                 \    | j                          | j                  | j                  _        |S r2   r  r   rS   ri   r   s     r)   r   z2getPhases.<locals>.InTableTextPhase.processCommentD  %      " $ 2 2DKKLr*   c                 Z    | j                          | j                  | j                  _        yr9  r  ro   s    r)   r   z.getPhases.<locals>.InTableTextPhase.processEOFI  s#      " $ 2 2DKKr*   c                 L    |d   dk(  ry | j                   j                  |       y Nr   r  r  r   r   s     r)   r   z5getPhases.<locals>.InTableTextPhase.processCharactersN  s%    V}(  ''.r*   c                 :    | j                   j                  |       y r2   r  r   s     r)   r   z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersS  s      ''.r*   c                 \    | j                          | j                  | j                  _        |S r2   r  r   s     r)   r   z3getPhases.<locals>.InTableTextPhase.processStartTagX  r  r*   c                 \    | j                          | j                  | j                  _        |S r2   r  r   s     r)   r   z1getPhases.<locals>.InTableTextPhase.processEndTag]  r  r*   )r@   rA   rB   r  rQ   r  r   r   r   r   r   r   r  )r   r  s   @r)   r  r  3  s0    8		&
	&	
	
	/
	/
	
	r*   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Z ej                  d
W  j                   fdefg      Ze	e_         ej                  de
fdefdefg      Zee_        y)!getPhases.<locals>.InCaptionPhasec                 >    | j                   j                  dd       S )Nr   r   r  rI   r  ro   s    r)   ignoreEndTagCaptionz5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionf  s    yy//	7/KKKr*   c                 R    | j                   j                  d   j                          y rM  rS   rL   r   ro   s    r)   r   z,getPhases.<locals>.InCaptionPhase.processEOFi      KKx(335r*   c                 R    | j                   j                  d   j                  |      S rM  rS   rL   r   r   s     r)   r   z3getPhases.<locals>.InCaptionPhase.processCharactersl  "    ;;%%h/AA%HHr*   c                     | j                   j                          | j                         }| j                   j                  j	                  t        d             |s|S y Nr   rS   r   r  ri   r   r7  rM   r   ignoreEndTags      r)   startTagTableElementz6getPhases.<locals>.InCaptionPhase.startTagTableElemento  sJ    KK""$335LKK++OI,FG  r*   c                 R    | j                   j                  d   j                  |      S rM  rN  r   s     r)   rT  z/getPhases.<locals>.InCaptionPhase.startTagOtherw  rO  r*   c                 :   | j                         sX| j                  j                          | j                  j                  d   j                  dk7  r@| j
                  j                  dd| j                  j                  d   j                  d       | j                  j                  d   j                  dk7  rK| j                  j                  j                          | j                  j                  d   j                  dk7  rK| j                  j                  j                          | j                  j                          | j
                  j                  d   | j
                  _
        y | j
                  j                  sJ | j
                  j                          y )Nr   r   rW  rX  r   )r  rI   rH  r   rO   rS   r   r  r  rL   ri   r[   r   s     r)   endTagCaptionz/getPhases.<locals>.InCaptionPhase.endTagCaptionz  s-   ++-		00299))"-22i?KK**+Q7@<@II<R<RSU<V<[<[,]^ ii,,R055BII**..0 ii,,R055B		&&**,		779$(KK$6$6y$A! {{,,,,&&(r*   c                     | j                   j                          | j                         }| j                   j                  j	                  t        d             |s|S y r  r  r  s      r)   r  z-getPhases.<locals>.InCaptionPhase.endTagTable  sJ    KK""$335LKK++OI,FG  r*   c                 F    | j                   j                  dd|d   i       y r  r  r   s     r)   r  z.getPhases.<locals>.InCaptionPhase.endTagIgnore  r  r*   c                 R    | j                   j                  d   j                  |      S rM  rS   rL   r   r   s     r)   rX  z-getPhases.<locals>.InCaptionPhase.endTagOther  "    ;;%%h/==eDDr*   r   	r   r  r   r   r   r   r   r   r   r   r   )
r   r  r   r   r   r   r   r   r   r   N)r@   rA   rB   r1  r  r  r   r   r	  rT  r  r  r  rX  r   rY  r  r  rZ  r  r  s   r)   InCaptionPhaser  b  s    G		L	6	I		G	)$		R	E 2&11U''(243
 
 #0///&k"*,1
  !,r*   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Z ej                  d	W  j                  fd
efg      Ze	e_         ej                  de
fd
efg      Zee_        y)%getPhases.<locals>.InColumnGroupPhasec                 N    | j                   j                  d   j                  dk(  S )Nr   r   )rI   r   rO   ro   s    r)   ignoreEndTagColgroupz:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroup  s"    99))"-22f<<r*   c                     | j                   j                  d   j                  dk(  r| j                  j                  sJ y | j                         }| j                  t        d             |syy )Nr   r   r   T)rI   r   rO   rS   r[   r  endTagColgroupr7  )rM   r  s     r)   r   z0getPhases.<locals>.InColumnGroupPhase.processEOF  sa    yy%%b)..&8{{,,,,#88:##OJ$?@# $r*   c                 `    | j                         }| j                  t        d             |s|S y Nr   r  r  r7  r  s      r)   r   z7getPhases.<locals>.InColumnGroupPhase.processCharacters  0    446L
 ;<  r*   c                     | j                   j                  |       | j                   j                  j                          d|d<   y rf  rg  r   s     r)   r  z1getPhases.<locals>.InColumnGroupPhase.startTagCol  ri  r*   c                 `    | j                         }| j                  t        d             |s|S y r  r  r  s      r)   rT  z3getPhases.<locals>.InColumnGroupPhase.startTagOther  r  r*   c                 "   | j                         r3| j                  j                  sJ | j                  j                          y | j                  j
                  j                          | j                  j                  d   | j                  _        y Nr   )	r  rS   r[   r   rI   r   r  rL   ri   r   s     r)   r  z4getPhases.<locals>.InColumnGroupPhase.endTagColgroup  sb    ((*{{,,,,&&(		&&**,$(KK$6$6y$A!r*   c                 @    | j                   j                  dddi       y )Nz
no-end-tagrO   r  r  r   s     r)   	endTagColz/getPhases.<locals>.InColumnGroupPhase.endTagCol  s    KK""<&%Ar*   c                 `    | j                         }| j                  t        d             |s|S y r  r  r  s      r)   rX  z1getPhases.<locals>.InColumnGroupPhase.endTagOther  r  r*   r   r  r   N)r@   rA   rB   r1  r  r  r   r   r  rT  r  r#  rX  r   rY  r  r  rZ  r  r  s   r)   InColumnGroupPhaser    s    G		=	 		4
		B	B	 2&11U''(K 3
  #0///(I1
  !,r*   r%  c                      e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Z ej$                  dW  j&                  fde	fde
fdefg      Zee_         ej$                  defdefdefg      Zee_        y)#getPhases.<locals>.InTableBodyPhasec                 `   | j                   j                  d   j                  dvrJ| j                   j                  j                          | j                   j                  d   j                  dvrJ| j                   j                  d   j                  dk(  r| j                  j
                  sJ y y )Nr   )r   r   r   r   r   )rI   r   rO   r  rS   r[   ro   s    r)   clearStackToTableBodyContextz@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContext  s    ))((,11 :K K 		&&**,	 ))((,11 :K K
 yy%%b)..&8{{,,,, 9r*   c                 R    | j                   j                  d   j                          y r!  r  ro   s    r)   r   z.getPhases.<locals>.InTableBodyPhase.processEOF      KKy)446r*   c                 R    | j                   j                  d   j                  |      S r!  r  r   s     r)   r   z:getPhases.<locals>.InTableBodyPhase.processSpaceCharacters  "    ;;%%i0GGNNr*   c                 R    | j                   j                  d   j                  |      S r!  r  r   s     r)   r   z5getPhases.<locals>.InTableBodyPhase.processCharacters  "    ;;%%i0BB5IIr*   c                     | j                          | j                  j                  |       | j                  j                  d   | j                  _        y )Nr   )r)  rI   r   rS   rL   ri   r   s     r)   
startTagTrz.getPhases.<locals>.InTableBodyPhase.startTagTr   s;    --/II##E* $ 2 27 ;DKKr*   c                 ~    | j                   j                  dd|d   i       | j                  t        dd             |S )Nzunexpected-cell-in-table-bodyrO   r   r   )rS   r   r1  r7  r   s     r)   startTagTableCellz5getPhases.<locals>.InTableBodyPhase.startTagTableCell  s;    KK""#B$*E&M#:<OOOD*=>Lr*   c                    | j                   j                  dd      s:| j                   j                  dd      s| j                   j                  dd      rM| j                          | j                  t	        | j                   j
                  d   j                               |S | j                  j                  sJ | j                  j                          y Nr   r   r  r   r   r   
rI   r  r)  endTagTableRowGroupr7  r   rO   rS   r[   r   r   s     r)   startTagTableOtherz6getPhases.<locals>.InTableBodyPhase.startTagTableOther  s    		(('(B		(('(BII,,Wg,F113((#DII$:$:2$>$C$CDF {{,,,,&&(r*   c                 R    | j                   j                  d   j                  |      S r!  rN  r   s     r)   rT  z1getPhases.<locals>.InTableBodyPhase.startTagOther  "    ;;%%i0@@GGr*   c                 @   | j                   j                  |d   d      r]| j                          | j                   j                  j	                          | j
                  j                  d   | j
                  _        y | j
                  j                  dd|d   i       y )NrO   r   r  r    unexpected-end-tag-in-table-body)	rI   r  r)  r   r  rS   rL   ri   r   r   s     r)   r7  z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroup  s|    yy''fw'G113		&&**,$(KK$6$6y$A!&&'I(.f'>@r*   c                    | j                   j                  dd      s:| j                   j                  dd      s| j                   j                  dd      rM| j                          | j                  t	        | j                   j
                  d   j                               |S | j                  j                  sJ | j                  j                          y r5  r6  r   s     r)   r  z/getPhases.<locals>.InTableBodyPhase.endTagTable%  s    		(('(B		(('(BII,,Wg,F113((#DII$:$:2$>$C$CDF {{,,,,&&(r*   c                 F    | j                   j                  dd|d   i       y )Nr<  rO   r  r   s     r)   r  z0getPhases.<locals>.InTableBodyPhase.endTagIgnore2  #    KK""#E$*E&M#:<r*   c                 R    | j                   j                  d   j                  |      S r!  r  r   s     r)   rX  z/getPhases.<locals>.InTableBodyPhase.endTagOther6  "    ;;%%i0>>uEEr*   r   r   r   r   )r   r  r   r   r   r   r  r   )r   r   r  r   r   r   r   r   N)r@   rA   rB   r1  r  r)  r   r   r   r1  r3  r8  rT  r7  r  r  rX  r   rY  r  r  rZ  r  r  s   r)   InTableBodyPhaser'    s    G		-	7	O	J	<
		)	H	@	)	<	F 2&11U''(:,-F!	3
  #0///(*=>k"!#1
  !,r*   rC  c                      e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Z ej&                  dW  j(                  fde
fdefg      Zee_         ej&                  defdefdefdefg      Zee_        y)getPhases.<locals>.InRowPhasec                 b   | j                   j                  d   j                  dvr| j                  j	                  dd| j                   j                  d   j                  i       | j                   j                  j                          | j                   j                  d   j                  dvry y )Nr   )r   r   z'unexpected-implied-end-tag-in-table-rowrO   )rI   r   rO   rS   r   r  ro   s    r)   clearStackToTableRowContextz9getPhases.<locals>.InRowPhase.clearStackToTableRowContextO  s    ))((,11G&&'P(.		0F0Fr0J0O0O'PR		&&**, ))((,11Gr*   c                 >    | j                   j                  dd       S )Nr   r   r  r  ro   s    r)   ignoreEndTagTrz,getPhases.<locals>.InRowPhase.ignoreEndTagTrU  s    yy//g/FFFr*   c                 R    | j                   j                  d   j                          y r!  r  ro   s    r)   r   z(getPhases.<locals>.InRowPhase.processEOFY  r+  r*   c                 R    | j                   j                  d   j                  |      S r!  r  r   s     r)   r   z4getPhases.<locals>.InRowPhase.processSpaceCharacters\  r-  r*   c                 R    | j                   j                  d   j                  |      S r!  r  r   s     r)   r   z/getPhases.<locals>.InRowPhase.processCharacters_  r/  r*   c                     | j                          | j                  j                  |       | j                  j                  d   | j                  _        | j                  j                  j                  t               y )Nr   )	rG  rI   r   rS   rL   ri   r  r   r   r   s     r)   r3  z/getPhases.<locals>.InRowPhase.startTagTableCellb  sS    ,,.II##E* $ 2 28 <DKKII..55f=r*   c                 `    | j                         }| j                  t        d             |s|S y Nr   rI  endTagTrr7  r  s      r)   r8  z0getPhases.<locals>.InRowPhase.startTagTableOtherh  s.    ..0LMM/$/0  r*   c                 R    | j                   j                  d   j                  |      S r!  rN  r   s     r)   rT  z+getPhases.<locals>.InRowPhase.startTagOthero  r:  r*   c                 B   | j                         s]| j                          | j                  j                  j	                          | j
                  j                  d   | j
                  _        y | j
                  j                  sJ | j
                  j                          y r  )
rI  rG  rI   r   r  rS   rL   ri   r[   r   r   s     r)   rQ  z&getPhases.<locals>.InRowPhase.endTagTrr  sp    &&(002		&&**,$(KK$6$6}$E! {{,,,,&&(r*   c                 `    | j                         }| j                  t        d             |s|S y rO  rP  r  s      r)   r  z)getPhases.<locals>.InRowPhase.endTagTable|  s0    ..0LMM/$/0    r*   c                     | j                   j                  |d   d      r| j                  t        d             |S | j                  j                          y )NrO   r   r  r   )rI   r  rQ  r7  rS   r   r   s     r)   r7  z1getPhases.<locals>.InRowPhase.endTagTableRowGroup  sC    yy''fw'God34&&(r*   c                 F    | j                   j                  dd|d   i       y )Nzunexpected-end-tag-in-table-rowrO   r  r   s     r)   r  z*getPhases.<locals>.InRowPhase.endTagIgnore  s#    KK""#D$*E&M#:<r*   c                 R    | j                   j                  d   j                  |      S r!  r  r   s     r)   rX  z)getPhases.<locals>.InRowPhase.endTagOther  rA  r*   r   rB  )r   r  r   r   r   r   r   r   r   r  )r   r   r  r   r   r   r   N)r@   rA   rB   r1  r  rG  rI  r   r   r   r3  r8  rT  rQ  r  r7  r  rX  r   rY  r  r  rZ  r  r  s   r)   
InRowPhaserE  J  s    G		-	G	7	O	J	>		H	)		)	<	F 2&11U''(,-')3
  #0///8k"(*=>G	1
  !,r*   rX  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Z ej                  d
W  j                   fdefg      Ze	e_         ej                  de
fdefdefg      Zee_        y)getPhases.<locals>.InCellPhasec                     | j                   j                  dd      r| j                  t        d             y | j                   j                  dd      r| j                  t        d             y y Nr   r   r  r   )rI   r  endTagTableCellr7  ro   s    r)   	closeCellz(getPhases.<locals>.InCellPhase.closeCell  s\    yy''g'>$$_T%:;))$)@$$_T%:; Ar*   c                 R    | j                   j                  d   j                          y rM  r  ro   s    r)   r   z)getPhases.<locals>.InCellPhase.processEOF  r   r*   c                 R    | j                   j                  d   j                  |      S rM  r  r   s     r)   r   z0getPhases.<locals>.InCellPhase.processCharacters  r  r*   c                     | j                   j                  dd      s| j                   j                  dd      r| j                          |S | j                  j                  sJ | j                  j                          y r\  )rI   r  r^  rS   r[   r   r   s     r)   r8  z1getPhases.<locals>.InCellPhase.startTagTableOther  sd    		((w(?II,,T7,C  {{,,,,&&(r*   c                 R    | j                   j                  d   j                  |      S rM  rN  r   s     r)   rT  z,getPhases.<locals>.InCellPhase.startTagOther  rO  r*   c                    | j                   j                  |d   d      r| j                   j                  |d          | j                   j                  d   j                  |d   k7  rZ| j
                  j                  dd|d   i       	 | j                   j                  j                         }|j                  |d   k(  rn%8| j                   j                  j                          | j                   j                          | j
                  j                  d   | j
                  _
        y | j
                  j                  dd|d   i       y )NrO   r   r  r   zunexpected-cell-end-tagr   r  )rI   r  rH  r   rO   rS   r   r  r  rL   ri   r  s      r)   r]  z.getPhases.<locals>.InCellPhase.endTagTableCell  s
   yy''fw'G		00v?99))"-22eFmCKK**+D,2E&M+BD#yy5599;99f5! 
 II**..0		779$(KK$6$6w$?!&&';feFm=TUr*   c                 F    | j                   j                  dd|d   i       y r  r  r   s     r)   r  z+getPhases.<locals>.InCellPhase.endTagIgnore  r  r*   c                     | j                   j                  |d   d      r| j                          |S | j                  j	                          y )NrO   r   r  )rI   r  r^  rS   r   r   s     r)   endTagImplyz*getPhases.<locals>.InCellPhase.endTagImply  s>    yy''fw'G  &&(r*   c                 R    | j                   j                  d   j                  |      S rM  r  r   s     r)   rX  z*getPhases.<locals>.InCellPhase.endTagOther  r  r*   r   r  rB  )r   r   r  r   r   ro  N)r@   rA   rB   r1  r  r^  r   r   r8  rT  r]  r  rf  rX  r   rY  r  r  rZ  r  r  s   r)   InCellPhaserZ    s    G		<	6	I	)	G	V"	R	)	E 2&11U''(023
 
 #0///?+;\J7E1
 
 !,r*   rh  c            	          e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Z ej$                  dW  j&                  fdefdefde	fde
fdefg      Zee_         ej$                  defdefdefg      Zee_        y) getPhases.<locals>.InSelectPhasec                     | j                   j                  d   j                  dk7  r| j                  j	                  d       y | j                  j
                  sJ y )Nr   r   zeof-in-selectr  ro   s    r)   r   z+getPhases.<locals>.InSelectPhase.processEOF  sD    yy%%b)..&8&&7{{,,,,r*   c                 R    |d   dk(  ry | j                   j                  |d          y r  r  r   s     r)   r   z2getPhases.<locals>.InSelectPhase.processCharacters  s'    V}(II  v/r*   c                     | j                   j                  d   j                  dk(  r$| j                   j                  j                          | j                   j	                  |       y r@  rI   r   rO   r  r   r   s     r)   startTagOptionz/getPhases.<locals>.InSelectPhase.startTagOption  sG    yy%%b)..(:		&&**,II##E*r*   c                 b   | j                   j                  d   j                  dk(  r$| j                   j                  j                          | j                   j                  d   j                  dk(  r$| j                   j                  j                          | j                   j	                  |       y )Nr   rA  rT  rn  r   s     r)   startTagOptgroupz1getPhases.<locals>.InSelectPhase.startTagOptgroup	  sz    yy%%b)..(:		&&**,yy%%b)..*<		&&**,II##E*r*   c                 n    | j                   j                  d       | j                  t        d             y )Nzunexpected-select-in-selectr   )rS   r   endTagSelectr7  r   s     r)   rE  z/getPhases.<locals>.InSelectPhase.startTagSelect	  s(    KK""#@Aoh78r*   c                     | j                   j                  d       | j                  j                  dd      r| j	                  t        d             |S | j                   j                  sJ y )Nzunexpected-input-in-selectr   r  )rS   r   rI   r  rs  r7  r[   r   s     r)   r   z.getPhases.<locals>.InSelectPhase.startTagInput	  sW    KK""#?@yy''('C!!/(";<{{,,,,r*   c                 R    | j                   j                  d   j                  |      S r  rN  r   s     r)   r  z/getPhases.<locals>.InSelectPhase.startTagScript	  rO  r*   c                 F    | j                   j                  dd|d   i       y )Nzunexpected-start-tag-in-selectrO   r  r   s     r)   rT  z.getPhases.<locals>.InSelectPhase.startTagOther	  #    KK""#C$*E&M#:<r*   c                     | j                   j                  d   j                  dk(  r%| j                   j                  j                          y | j                  j                  dddi       y )Nr   rA  unexpected-end-tag-in-selectrO   rI   r   rO   r  rS   r   r   s     r)   endTagOptionz-getPhases.<locals>.InSelectPhase.endTagOption	  sR    yy%%b)..(:		&&**,&&'E(.'9;r*   c                    | j                   j                  d   j                  dk(  rJ| j                   j                  d   j                  dk(  r$| j                   j                  j                          | j                   j                  d   j                  dk(  r%| j                   j                  j                          y | j                  j                  dddi       y )Nr   rA  rT  ry  rO   rz  r   s     r)   endTagOptgroupz/getPhases.<locals>.InSelectPhase.endTagOptgroup%	  s    		&&r*//8;II**2.33zA		&&**,yy%%b)..*<		&&**, &&'E(.
';=r*   c                    | j                   j                  dd      r| j                   j                  j                         }|j                  dk7  r4| j                   j                  j                         }|j                  dk7  r4| j
                  j                          y | j
                  j                  sJ | j
                  j                          y )Nr   r  )	rI   r  r   r  rO   rS   rk   r[   r   r  s      r)   rs  z-getPhases.<locals>.InSelectPhase.endTagSelect2	  s    yy''('Cyy--113ii8+9911557D ii8+..0 {{,,,,&&(r*   c                 F    | j                   j                  dd|d   i       y )Nry  rO   r  r   s     r)   rX  z,getPhases.<locals>.InSelectPhase.endTagOther=	  #    KK""#A$*E&M#:<r*   r   rA  rT  r   )r4  r  r  r  N)r@   rA   rB   r1  r  r   r   ro  rq  rE  r   r  rT  r{  r~  rs  rX  r   rY  r  r  rZ  r  r  s   r)   InSelectPhaserj    s    G		-	0
	+	+	9	-	G	<	;	=		)	< 2&11U''(~&)*~&,m<~&3
  #0///|$(|$1
 
 !,r*   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
 ej                  defg      Zee_         ej                  de	fg      Ze
e_        y)	'getPhases.<locals>.InSelectInTablePhasec                 R    | j                   j                  d   j                          y Nr   r  ro   s    r)   r   z2getPhases.<locals>.InSelectInTablePhase.processEOFU	  s    KKz*557r*   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r)   r   z9getPhases.<locals>.InSelectInTablePhase.processCharactersX	  s"    ;;%%j1CCEJJr*   c                 |    | j                   j                  dd|d   i       | j                  t        d             |S )Nz5unexpected-table-element-start-tag-in-select-in-tablerO   r   )rS   r   rX  r7  r   s     r)   r  z5getPhases.<locals>.InSelectInTablePhase.startTagTable[	  s<    KK""#Z]cejkqer\st_X67Lr*   c                 R    | j                   j                  d   j                  |      S r  rN  r   s     r)   rT  z5getPhases.<locals>.InSelectInTablePhase.startTagOther`	  s"    ;;%%j1AA%HHr*   c                     | j                   j                  dd|d   i       | j                  j                  |d   d      r| j	                  t        d             |S y )Nz3unexpected-table-element-end-tag-in-select-in-tablerO   r   r  r   )rS   r   rI   r  rX  r7  r   s     r)   r  z3getPhases.<locals>.InSelectInTablePhase.endTagTablec	  s]    KK""#X[achiocpZqryy''fw'G  !:; Hr*   c                 R    | j                   j                  d   j                  |      S r  r  r   s     r)   rX  z3getPhases.<locals>.InSelectInTablePhase.endTagOtheri	  s"    ;;%%j1??FFr*   )r   r   r   r   r   r   r   r   N)r@   rA   rB   r1  r  r   r   r  rT  r  rX  r   rY  r  rZ  r  r   r*   r)   InSelectInTablePhaser  R	  s    G		8	K	
	I		G 2&11N3
  #0///N1
  !,r*   r  c                   L    e Zd Z e       Z eg d      Zd Z fdZd Z	d Z
y)(getPhases.<locals>.InForeignContentPhase),r  r  r  r   rA  r  r  r  r   r  r  r  r  h1h2h3h4h5h6r   r0  r  r'  r  r  r  r9   r  r  r(   r  rG  r  r  spanr  r  subsupr   r  r  r  varc                    i ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdG}|dH   |v r||dH      |dH<   y y )INaltglyphaltGlyphaltglyphdefaltGlyphDefaltglyphitemaltGlyphItemanimatecoloranimateColoranimatemotionanimateMotionanimatetransformanimateTransformclippathclipPathfeblendfeBlendfecolormatrixfeColorMatrixfecomponenttransferfeComponentTransferfecompositefeCompositefeconvolvematrixfeConvolveMatrixfediffuselightingfeDiffuseLightingfedisplacementmapfeDisplacementMapfedistantlightfeDistantLightfefloodfeFloodfefuncafeFuncAfefuncbfeFuncBfefuncgfeFuncGfefuncrfeFuncRfegaussianblurfeGaussianBlurfeimagefeImagefemergefeMergefemergenodefeMergeNodefemorphologyfeMorphologyfeoffsetfeOffsetfepointlightfePointLightfespecularlightingfeSpecularLightingfespotlightfeSpotLightfetilefeTilefeturbulencefeTurbulenceforeignobjectforeignObjectglyphrefglyphReflineargradientlinearGradientradialGradienttextPath)radialgradienttextpathrO   r   )rM   r   replacementss      r)   adjustSVGTagNamesz:getPhases.<locals>.InForeignContentPhase.adjustSVGTagNames	  s   #4J
 #4)=#4*N#4 +N#4 ,_	#4
 /0B#4 '
#4 &y#4 ,_#4 23H#4 *=#4 /0B#4 01D#4 01D#4 -.>#4 &y#4  &y!#4" &y##4$ &y%#4& &y'#4( -.>)#4* &y+#4, &y-#4. *=/#40 +N1#42 '
3#44 +N5#46 12F7#48 *=9#4: %h;#4< +N=#4> ,_?#4@ '
A#4B -.>C#4D /?(2G#4LJ V}, ,U6] ;f -r*   c                     |d   dk(  rd|d<   n<| j                   j                  r&t        d |d   D              rd| j                   _        j                  | |       y )Nr   r  u   �c              3   ,   K   | ]  }|t         v  y wr2   )r   ).0r  s     r)   	<genexpr>zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>	  s     Ldd/1Ls   F)rS   rn   r  r   )rM   r   r  s     r)   r   z:getPhases.<locals>.InForeignContentPhase.processCharacters	  sS    V}( (f++((LeFmLL).&##D%0r*   c                    | j                   j                  d   }|d   | j                  v s+|d   dk(  rt        |d   j	                               h dz  r| j
                  j                  dd|d   i       | j                   j                  d   j                  | j                   j                  k7  r'| j
                  j                  | j                   j                  d         s| j
                  j                  | j                   j                  d         s| j                   j                  j                          | j                   j                  d   j                  | j                   j                  k7  re| j
                  j                  | j                   j                  d         s3| j
                  j                  | j                   j                  d         s|S |j                  t        d   k(  r| j
                  j                  |       nB|j                  t        d   k(  r,| j                  |       | j
                  j                  |       | j
                  j!                  |       |j                  |d	<   | j                   j#                  |       |d
   r*| j                   j                  j                          d|d<   y y )Nr   rO   r  r   >   facesizecolorz*unexpected-html-element-in-foreign-contentrv   r   rx   r   Tr   )rI   r   breakoutElementssetkeysrS   r   rx   r   r}   r   r  r   r   r  r   r   r   )rM   r   r   s      r)   r   z8getPhases.<locals>.InForeignContentPhase.processStartTag	  s&   ))004Kf!6!66v&(U6]'')*-FF&&'S(.f'>@yy--b1;;yy112;;==dii>T>TUW>XY;;CCDIIDZDZ[]D^_II**..0	 yy--b1;;yy112;;==dii>T>TUW>XY;;CCDIIDZDZ[]D^_ ((Jx,@@KK66u= **j.??**51KK33E:33E:%0%:%:k"		''.'II**..07;E34 (r*   c                    t        | j                  j                        dz
  }| j                  j                  d   }|j                  j	                  t
              |d   k7  r!| j                  j                  dd|d   i       	 |j                  j	                  t
              |d   k(  r| j                  j                  | j                  j                  d   k(  rS| j                  j                  j                          | j                  j                  j                  | j                  _        | j                  j                  j                         |k7  r@| j                  j                  sJ | j                  j                  j                         |k7  r@d }	 |S |dz  }| j                  j                  |   }|j                  | j                  j                  k7  rX| j                  j                  j                  |      }	 |S )Nr   r   rO   r  r  )r   rI   r   rO   rz   r   rS   r   ri   rL   r  r   r  rx   r   r   )rM   r   	nodeIndexr   r   s        r)   r   z6getPhases.<locals>.InForeignContentPhase.processEndTag	  s   DII223a7I99))"-Dyy""#34fE&&';feFm=TU99&&'78E&MI{{((DKK,>,>},MM))99;,0KK,=,=,K,K)))00446$>#yy5555 ))00446$> $I  Q	yy--i8>>TYY%?%?? $ 1 1 ? ? FIr*   N)r@   rA   rB   r1  r  r   r  r  r   r   r   r  s   r)   InForeignContentPhaser  x	  s1    G	$ &G H'	<R	1	<6	r*   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Z ej                  defg      Ze	e_         ej                  de
fg      Zee_        y	)
!getPhases.<locals>.AfterBodyPhasec                      y r2   r   ro   s    r)   r   z,getPhases.<locals>.AfterBodyPhase.processEOF	      r*   c                 j    | j                   j                  || j                   j                  d          y )Nr   r  r   s     r)   r   z0getPhases.<locals>.AfterBodyPhase.processComment	  s'     II##E499+A+A!+DEr*   c                     | j                   j                  d       | j                   j                  d   | j                   _        |S )Nzunexpected-char-after-bodyr   rS   r   rL   ri   r   s     r)   r   z3getPhases.<locals>.AfterBodyPhase.processCharacters	  s5    KK""#?@ $ 2 28 <DKKLr*   c                 R    | j                   j                  d   j                  |      S rM  rN  r   s     r)   r  z.getPhases.<locals>.AfterBodyPhase.startTagHtml	  rO  r*   c                     | j                   j                  dd|d   i       | j                   j                  d   | j                   _        |S )Nzunexpected-start-tag-after-bodyrO   r   r  r   s     r)   rT  z/getPhases.<locals>.AfterBodyPhase.startTagOther	  sC    KK""#D$*E&M#:< $ 2 28 <DKKLr*   c                     | j                   j                  r| j                   j                  d       y | j                   j                  d   | j                   _        y )Nz'unexpected-end-tag-after-body-innerhtmlafterAfterBody)rS   r[   r   rL   ri   )rM   rO   s     r)   r^  z,getPhases.<locals>.AfterBodyPhase.endTagHtml
  s>    {{$$&&'PQ$(KK$6$67G$H!r*   c                     | j                   j                  dd|d   i       | j                   j                  d   | j                   _        |S )Nzunexpected-end-tag-after-bodyrO   r   r  r   s     r)   rX  z-getPhases.<locals>.AfterBodyPhase.endTagOther

  sC    KK""#B$*E&M#:< $ 2 28 <DKKLr*   r   N)r@   rA   rB   r1  r  r   r   r   r  rT  r^  rX  r   rY  r  rZ  r  r   r*   r)   AfterBodyPhaser  	  s|    G			F
	
	G		I	 2&11\"3
  #0///&*1E0FG +r*   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Z ej                  d	W  j                  fd
efdefde	fg      Ze
e_         ej                  d
efg      Zee_        y)"getPhases.<locals>.InFramesetPhasec                     | j                   j                  d   j                  dk7  r| j                  j	                  d       y | j                  j
                  sJ y )Nr   r   zeof-in-framesetr  ro   s    r)   r   z-getPhases.<locals>.InFramesetPhase.processEOF
  sE    yy%%b)..&8&&'89{{,,,,r*   c                 :    | j                   j                  d       y )Nzunexpected-char-in-framesetr  r   s     r)   r   z4getPhases.<locals>.InFramesetPhase.processCharacters"
  s    KK""#@Ar*   c                 :    | j                   j                  |       y r2   )rI   r   r   s     r)   r  z3getPhases.<locals>.InFramesetPhase.startTagFrameset%
  s    II##E*r*   c                     | j                   j                  |       | j                   j                  j                          y r2   rg  r   s     r)   startTagFramez0getPhases.<locals>.InFramesetPhase.startTagFrame(
  s*    II##E*II""&&(r*   c                 R    | j                   j                  d   j                  |      S rM  rN  r   s     r)   startTagNoframesz3getPhases.<locals>.InFramesetPhase.startTagNoframes,
  rO  r*   c                 F    | j                   j                  dd|d   i       y )Nz unexpected-start-tag-in-framesetrO   r  r   s     r)   rT  z0getPhases.<locals>.InFramesetPhase.startTagOther/
  r?  r*   c                    | j                   j                  d   j                  dk(  r| j                  j	                  d       n$| j                   j                  j                          | j                  j                  sP| j                   j                  d   j                  dk7  r)| j                  j                  d   | j                  _        y y y )Nr   r   z)unexpected-frameset-in-frameset-innerhtmlr   afterFrameset)	rI   r   rO   rS   r   r  r[   rL   ri   r   s     r)   endTagFramesetz1getPhases.<locals>.InFramesetPhase.endTagFrameset3
  s    yy%%b)..&8&&'RS		&&**,KK))II**2.33zA %)KK$6$6$G! B *r*   c                 F    | j                   j                  dd|d   i       y )Nzunexpected-end-tag-in-framesetrO   r  r   s     r)   rX  z.getPhases.<locals>.InFramesetPhase.endTagOther?
  rw  r*   r   r   r  r  N)r@   rA   rB   r1  r  r   r   r  r  r  rT  r  rX  r   rY  r  r  rZ  r  r  s   r)   InFramesetPhaser   
  s    G		-	B	+	)	G	<
	H	< 2&11U''()*m$)*	3
  #0///(1
  !,r*   r  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
 ej                  dW  j                  fdefg      Zee_         ej                  de	fg      Ze
e_        y	)
%getPhases.<locals>.AfterFramesetPhasec                      y r2   r   ro   s    r)   r   z0getPhases.<locals>.AfterFramesetPhase.processEOFT
  r  r*   c                 :    | j                   j                  d       y )Nzunexpected-char-after-framesetr  r   s     r)   r   z7getPhases.<locals>.AfterFramesetPhase.processCharactersX
  s    KK""#CDr*   c                 R    | j                   j                  d   j                  |      S r  rN  r   s     r)   r  z6getPhases.<locals>.AfterFramesetPhase.startTagNoframes[
  rO  r*   c                 F    | j                   j                  dd|d   i       y )Nz#unexpected-start-tag-after-framesetrO   r  r   s     r)   rT  z3getPhases.<locals>.AfterFramesetPhase.startTagOther^
  s#    KK""#H$*E&M#:<r*   c                 T    | j                   j                  d   | j                   _        y )NafterAfterFrameset)rS   rL   ri   r   s     r)   r^  z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlb
  s     $ 2 23G HDKKr*   c                 F    | j                   j                  dd|d   i       y )Nz!unexpected-end-tag-after-framesetrO   r  r   s     r)   rX  z1getPhases.<locals>.AfterFramesetPhase.endTagOthere
  s#    KK""#F$*E&M#:<r*   r   r  N)r@   rA   rB   r1  r  r   r   r  rT  r^  rX  r   rY  r  r  rZ  r  r  s   r)   AfterFramesetPhaser  P
  s    G			E	G	<	I	< 2&11U''()*3
  #0///Z 1
  !,r*   r  c                   |    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Z ej                  de	fg      Ze
e_        y	)
&getPhases.<locals>.AfterAfterBodyPhasec                      y r2   r   ro   s    r)   r   z1getPhases.<locals>.AfterAfterBodyPhase.processEOFw
  r  r*   c                 d    | j                   j                  || j                   j                         y r2   r   r   s     r)   r   z5getPhases.<locals>.AfterAfterBodyPhase.processCommentz
  r"  r*   c                 R    | j                   j                  d   j                  |      S rM  r  r   s     r)   r   z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharacters}
  r  r*   c                     | j                   j                  d       | j                   j                  d   | j                   _        |S )Nexpected-eof-but-got-charr   r  r   s     r)   r   z8getPhases.<locals>.AfterAfterBodyPhase.processCharacters
  s5    KK""#>? $ 2 28 <DKKLr*   c                 R    | j                   j                  d   j                  |      S rM  rN  r   s     r)   r  z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtml
  rO  r*   c                     | j                   j                  dd|d   i       | j                   j                  d   | j                   _        |S )Nexpected-eof-but-got-start-tagrO   r   r  r   s     r)   rT  z4getPhases.<locals>.AfterAfterBodyPhase.startTagOther
  sC    KK""#C$*E&M#:< $ 2 28 <DKKLr*   c                     | j                   j                  dd|d   i       | j                   j                  d   | j                   _        |S )Nexpected-eof-but-got-end-tagrO   r   r  r   s     r)   r   z4getPhases.<locals>.AfterAfterBodyPhase.processEndTag
  sC    KK""#A$*E&M#:< $ 2 28 <DKKLr*   r   N)r@   rA   rB   r1  r  r   r   r   r   r  rT  r   r   rY  r  rZ  r   r*   r)   AfterAfterBodyPhaser  t
  sY    G			?	N	
	G		 2&11\"3
  #0r*   r$  c                       e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Z ej                  d	e	fd
e
fg      Zee_        y)*getPhases.<locals>.AfterAfterFramesetPhasec                      y r2   r   ro   s    r)   r   z5getPhases.<locals>.AfterAfterFramesetPhase.processEOF
  r  r*   c                 d    | j                   j                  || j                   j                         y r2   r   r   s     r)   r   z9getPhases.<locals>.AfterAfterFramesetPhase.processComment
  r"  r*   c                 R    | j                   j                  d   j                  |      S rM  r  r   s     r)   r   zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharacters
  r  r*   c                 :    | j                   j                  d       y )Nr  r  r   s     r)   r   z<getPhases.<locals>.AfterAfterFramesetPhase.processCharacters
  s    KK""#>?r*   c                 R    | j                   j                  d   j                  |      S rM  rN  r   s     r)   r  z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtml
  rO  r*   c                 R    | j                   j                  d   j                  |      S r  rN  r   s     r)   startTagNoFramesz;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFrames
  rO  r*   c                 F    | j                   j                  dd|d   i       y )Nr!  rO   r  r   s     r)   rT  z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOther
  rw  r*   c                 F    | j                   j                  dd|d   i       y )Nr#  rO   r  r   s     r)   r   z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTag
  r  r*   r   r  N)r@   rA   rB   r1  r  r   r   r   r   r  r-  rT  r   r   rY  r  rZ  r   r*   r)   AfterAfterFramesetPhaser&  
  si    G			?	N	@	G	G	<	< 2&11\")*3
  #0r*   r0  r`   r_   r   rQ  r{  r  r   r   r   r  r   r   r   r   r   r   rD  )r   r[  r   r
  r  r  )r   )rN   rb   r   r2  rB  r[  r  r  r  r  r  r  r%  rC  rX  rh  r  r  r  r  r  r  r$  r0  r  r  r  s                           @@@r)   rK   rK     sY   *F|E378 FP@u @D#% #J+,% +,Zd,e d,L=,e =,~@, @,DR,e R,h,E ,BO,u O,b-5 -^D, D,L>,U >,@`,5 `,DW,U W,rJ,e J,Xa, a,F$,u $,Lp pd,, ,,\6,% 6,p",U ",H#0e #0J!0% !0J<o 	o 	+	
 	- 	^ 	+ 		 	< 	' 	^ 	+ 	' 	 	+  	M!" 	/#$ 2#%+-5/ r*   c                     t        | d         t              z  }|r2 t        | d         fd| d   j                         D              | d<   y y )Nr   c              3   L   K   | ]  \  }}j                  ||      |f  y wr2   )r   )r  kvr  s      r)   r  z$adjust_attributes.<locals>.<genexpr>
  s1      ,O041 .:-=-=a-CQ,G ,Os   !$)r   r7   r3   )r   r  needs_adjustments    ` r)   r   r   
  sZ    f.,1GG+U6]+ ,O8=f8K8K8M,O Of r*   c                 &    |i }t         |   | ||dS )N)r7   rO   r   r   )r   )rO   r7   ry   r   s       r)   r7  r7  
  s&    
t$dJ&( (r*   c                       e Zd ZdZy)r   zError in parsed documentN)r@   rA   rB   r   r   r*   r)   r   r   
  s    "r*   r   )rG   T)r   rG   T)r   NF),
__future__r   r   r   sixr   r   r5   r'  r	   r
   r   treebuilders.baser   r   	constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r-   rD   r  r"   memoizerK   r   r7  	Exceptionr   r   r*   r)   <module>r>     s    B B (     % 
 
 
 
 
".?2	s) s)l	 J% J%ZJO 59 %(	 	r*   