
0c@_                @   s  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 d d  Z! d d d d d  Z" d d   Z# Gd d   d e$  Z% e j& d d    Z' d d   Z( d d d d d  Z) Gd d   d e*  Z+ d S)     )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_ReparseExceptionetreeTc             K   s1   t  j |  } t | d | } | j |  |  S)a  Parse an HTML document as a string or file-like object into a tree

    :arg doc: the document to parse as a string or file-like object

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

    >>> from html5lib.html5parser import parse
    >>> parse('<html><body><p>This is a doc</p></body></html>')
    <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0>

    namespaceHTMLElements)r
   getTreeBuilder
HTMLParserparse)doctreebuilderr   kwargstbp r'   ?/tmp/pip-build-jynh7p1z/pip/pip/_vendor/html5lib/html5parser.pyr!      s    r!   divc             K   s7   t  j |  } t | d | } | j |  d | | S)a#  Parse an HTML fragment as a string or file-like object into a tree

    :arg doc: the fragment to parse as a string or file-like object

    :arg container: the container context to parse the fragment in

    :arg treebuilder: the treebuilder to use when parsing

    :arg namespaceHTMLElements: whether or not to namespace HTML elements

    :returns: parsed tree

    Example:

    >>> from html5lib.html5libparser import parseFragment
    >>> parseFragment('<b>this is a fragment</b>')
    <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090>

    r   	container)r
   r   r    parseFragment)r"   r*   r#   r   r$   r%   r&   r'   r'   r(   r+   1   s    r+   c                s    G  f d d   d t   } | S)Nc                   s"   e  Z d  Z   f d d   Z d S)z-method_decorator_metaclass.<locals>.Decoratedc                s[   xB | j    D]4 \ } } t | t j  r7   |  } | | | <q Wt j |  | | |  S)N)items
isinstancetypesFunctionTypetype__new__)meta	classnamebases	classDictattributeName	attribute)functionr'   r(   r1   L   s
    z5method_decorator_metaclass.<locals>.Decorated.__new__N)__name__
__module____qualname__r1   r'   )r8   r'   r(   	DecoratedK   s   r<   )r0   )r8   r<   r'   )r8   r(   method_decorator_metaclassJ   s    r=   c               @   s   e  Z d  Z d Z d d d d d d  Z d d d d d	  Z d
 d   Z e d d    Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d d d  Z d d   Z d d   Z d d    Z d! d"   Z d# d$   Z d% d&   Z d S)'r    z]HTML parser

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

    NFTc                sh   |   _  | d k r$ t j d  } | |    _ g    _   f d d   t |  j   D   _ d S)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

        Nr   c                s+   i  |  ]! \ } } |     j   |  q Sr'   )tree).0namecls)selfr'   r(   
<dictcomp>y   s   	 z'HTMLParser.__init__.<locals>.<dictcomp>)strictr
   r   r>   errors	getPhasesr,   phases)rB   r>   rD   r   debugr'   )rB   r(   __init__]   s    		zHTMLParser.__init__r)   c             K   s{   | |  _  | |  _ | |  _ t j | d |  | |  _ |  j   y |  j   Wn& t k
 rv |  j   |  j   Yn Xd  S)Nparser)	innerHTMLModer*   	scriptingr	   HTMLTokenizer	tokenizerresetmainLoopr   )rB   stream	innerHTMLr*   rL   r$   r'   r'   r(   _parse|   s    			

zHTMLParser._parsec             C   s  |  j  j   d |  _ g  |  _ g  |  _ d |  _ |  j r |  j j   |  _	 |  j	 t
 k rp |  j j |  j _ nH |  j	 t k r |  j j |  j _ n$ |  j	 d k r |  j j |  j _ n  |  j d |  _ |  j j   |  j   n d |  _	 |  j d |  _ d  |  _ d  |  _ d |  _ d  S)NFz	no quirks	plaintext
beforeHtmlinitialT)r>   rO   firstStartTagrE   log
compatModerK   r*   lowerrR   r   rN   rcdataStatestater   rawtextStateplaintextStaterG   phaseinsertHtmlElementresetInsertionMode	lastPhasebeforeRCDataPhase
framesetOK)rB   r'   r'   r(   rO      s*    								zHTMLParser.resetc             C   s'   t  |  d  s d S|  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

        rN   Nr   )hasattrrN   rQ   charEncodingr@   )rB   r'   r'   r(   documentEncoding   s    zHTMLParser.documentEncodingc             C   se   | j  d k rK | j t d k rK d | j k oJ | j d j t  d k S| j | j  f t k Sd  S)Nzannotation-xmlmathmlencoding	text/htmlapplication/xhtml+xml)rj   rk   )r@   	namespacer   
attributes	translater   r   )rB   elementr'   r'   r(   isHTMLIntegrationPoint   s    z!HTMLParser.isHTMLIntegrationPointc             C   s   | j  | j f t k S)N)rl   r@   r   )rB   ro   r'   r'   r(   isMathMLTextIntegrationPoint   s    z'HTMLParser.isMathMLTextIntegrationPointc             C   s5  t  d } t  d } t  d } t  d } t  d } t  d } t  d } x|  j D]} d  }	 | }
 x:|
 d  k	 r|
 }	 |  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  }
 qe t |  j j  d k s| |  j j	 k s|  j
 |  ru| | k rc| d t d d g  k s| | | f k s| t d k r| d k r| | k r| d d k s|  j |  r| | | | f k r|  j } n |  j d } | | k r| j |
  }
 qe | | k r&| j |
  }
 qe | | k rD| j |
  }
 qe | | k rb| j |
  }
 qe | | k r| j |
  }
 qe | | k re | j |
  }
 qe W| | k rP |	 d rP |	 d rP |  j d d |	 d i  qP Wd } g  } xD | r0| j |  j  |  j j   } | r|  j | k st  qWd  S)N
CharactersSpaceCharactersStartTagEndTagCommentDoctype
ParseErrorr   r0   datadatavarsr   r@   mglyph
malignmarkrh   zannotation-xmlsvginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   rN   r>   openElementsrl   r@   
parseErrorgetlendefaultNamespacerq   	frozensetr   rp   r_   rG   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOFAssertionError)rB   CharactersTokenSpaceCharactersTokenStartTagTokenEndTagTokenCommentTokenDoctypeTokenParseErrorTokentokenZ
prev_token	new_tokencurrentNodecurrentNodeNamespacecurrentNodeNamer0   r_   	reprocessrG   r'   r'   r(   rP      sp    






"
 			zHTMLParser.mainLoopc             O   s&   |  j  | d d | |  |  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)rS   r>   getDocument)rB   rQ   argsr$   r'   r'   r(   r!     s    zHTMLParser.parsec             O   s#   |  j  | d | |  |  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)rS   r>   getFragment)rB   rQ   r   r$   r'   r'   r(   r+     s    zHTMLParser.parseFragmentzXXX-undefined-errorc             C   sX   | d  k r i  } |  j  j |  j j j   | | f  |  j rT t t | |   d  S)N)rE   r   rN   rQ   positionrD   rx   r   )rB   	errorcoderz   r'   r'   r(   r   ;  s
    %	zHTMLParser.parseErrorc             C   s   t  | t  d  S)N)adjust_attributesr   )rB   r   r'   r'   r(   r   C  s    z!HTMLParser.adjustMathMLAttributesc             C   s   t  | t  d  S)N)r   r   )rB   r   r'   r'   r(   r   F  s    zHTMLParser.adjustSVGAttributesc             C   s   t  | t  d  S)N)r   adjustForeignAttributesMap)rB   r   r'   r'   r(   r   I  s    z"HTMLParser.adjustForeignAttributesc             C   s   |  j  j   d  S)N)rJ   r_   )rB   r   r'   r'   r(   reparseTokenNormalL  s    zHTMLParser.reparseTokenNormalc             C   sC  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 } x |  j  j d  d  d  D] } | j } d  } | |  j  j d k r |  j s t  d } |  j } | d k r |  j s t  | r | j |  j  j k r qz | | k r|  j | | } Pqz | rz |  j d } Pqz W| |  _ d  S)NFselectinSelecttdinCellthtrinRowtbodyinTableBodytheadtfootcaption	inCaptioncolgroupinColumnGrouptableinTableheadinBodybodyframeset
inFramesethtml
beforeHeadr   r   Tr   )zselectzcolgroupzheadzhtml)	r>   r   r@   rR   r   rl   r   rG   r_   )rB   lastnewModesnodenodeName	new_phaser'   r'   r(   ra   P  sB     		zHTMLParser.resetInsertionModec             C   su   | d k s t   |  j j |  | d k rC |  j j |  j _ n |  j j |  j _ |  j |  _ |  j	 d |  _ d  S)NRAWTEXTRCDATAtext)zRAWTEXTzRCDATA)
r   r>   insertElementrN   r]   r\   r[   r_   originalPhaserG   )rB   r   contentTyper'   r'   r(   parseRCDataRawtext|  s    zHTMLParser.parseRCDataRawtext)r9   r:   r;   __doc__rI   rS   rO   propertyrg   rp   rq   rP   r!   r+   r   r   r   r   r   ra   r   r'   r'   r'   r(   r    V   s"   "

C,r    c          .      s  d d   } d d   } Gd d   d t  | |  |     Gd d   d   } Gd	 d
   d
   } Gd d   d   } Gd d   d   } Gd d   d   } Gd d   d   } G   f d d   d     Gd d   d   }	 G f d d   d   }
 G f d d   d    G f d d   d   } G f d d   d   } G f d d    d    } G f d! d"   d"   } G f d# d$   d$   } G f d% d&   d&   } Gd' d(   d(   } G f d) d*   d*   } Gd+ d,   d,   } G f d- d.   d.   } G f d/ d0   d0   } Gd1 d2   d2   } Gd3 d4   d4   } d5 | d6 | d7 | d8 | d9 | d: | d;   d< |	 d= |
 d>  d? | d@ | dA | dB | dC | dD | dE | dF | dG | dH | dI | dJ | dK | i S)LNc                s2   d d   t  j   D     f d d   } | S)z4Logger that records which phase processes each tokenc             S   s   i  |  ] \ } } | |  q Sr'   r'   )r?   keyvaluer'   r'   r(   rC     s   	 z*getPhases.<locals>.log.<locals>.<dictcomp>c                s     j  j d  r t |  d k r | d } d  | d i } | d t k r` | d | d <|  j j j |  j j j j  |  j j	 j
 j  |  j
 j    j  | f    |  | |  S  |  | |  Sd  S)Nprocessr   r0   r@   )r9   
startswithr   r   rJ   rX   r   rN   r\   r_   	__class__)rB   r   r$   r   info)r8   
type_namesr'   r(   wrapped  s    $
	
z'getPhases.<locals>.log.<locals>.wrapped)r   r,   )r8   r   r'   )r8   r   r(   rX     s    zgetPhases.<locals>.logc             S   s   |  r t  |  St Sd  S)N)r=   r0   )use_metaclassmetaclass_funcr'   r'   r(   getMetaclass  s    
zgetPhases.<locals>.getMetaclassc               @   s   e  Z d  Z d Z d Z d d   Z d d	   Z d
 d   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d S)zgetPhases.<locals>.PhasezNBase class for helper object that implements each phase of processing
        rJ   r>   Z__startTagCacheZ__endTagCachec             S   s(   | |  _  | |  _ i  |  _ i  |  _ d  S)N)rJ   r>   _Phase__startTagCache_Phase__endTagCache)rB   rJ   r>   r'   r'   r(   rI     s    			z!getPhases.<locals>.Phase.__init__c             S   s
   t   d  S)N)NotImplementedError)rB   r'   r'   r(   r     s    z#getPhases.<locals>.Phase.processEOFc             S   s!   |  j  j | |  j  j d  d  S)Nr   r   )r>   insertCommentr   )rB   r   r'   r'   r(   r     s    z'getPhases.<locals>.Phase.processCommentc             S   s   |  j  j d  d  S)Nzunexpected-doctype)rJ   r   )rB   r   r'   r'   r(   r     s    z'getPhases.<locals>.Phase.processDoctypec             S   s   |  j  j | d  d  S)Nry   )r>   
insertText)rB   r   r'   r'   r(   r     s    z*getPhases.<locals>.Phase.processCharactersc             S   s   |  j  j | d  d  S)Nry   )r>   r   )rB   r   r'   r'   r(   r     s    z/getPhases.<locals>.Phase.processSpaceCharactersc             S   s   | d } | |  j  k r) |  j  | } n` |  j | } |  j  | <xE t |  j   t |  j  d k r |  j  j t t |  j     qD W| |  S)Nr@   g?)r   startTagHandlerr   popnextiter)rB   r   r@   funcr'   r'   r(   r     s    
%#z(getPhases.<locals>.Phase.processStartTagc             S   s   |  j  j r- | d d k r- |  j  j d  xN | d j   D]< \ } } | |  j j d j k r> | |  j j d j | <q> Wd |  j  _ d  S)Nr@   r   znon-html-rootry   r   F)rJ   rW   r   r,   r>   r   rm   )rB   r   attrr   r'   r'   r(   startTagHtml  s    z%getPhases.<locals>.Phase.startTagHtmlc             S   s   | d } | |  j  k r) |  j  | } n` |  j | } |  j  | <xE t |  j   t |  j  d k r |  j  j t t |  j     qD W| |  S)Nr@   g?)r   endTagHandlerr   r   r   r   )rB   r   r@   r   r'   r'   r(   r     s    
%#z&getPhases.<locals>.Phase.processEndTagN)zparserztreez__startTagCachez__endTagCache)r9   r:   r;   r   	__slots__rI   r   r   r   r   r   r   r   r   r'   r'   r'   r(   Phase  s   
r   c               @   sy   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d S)zgetPhases.<locals>.InitialPhasec             S   s   d  S)Nr'   )rB   r   r'   r'   r(   r     s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   |  j  j | |  j  j  d  S)N)r>   r   document)rB   r   r'   r'   r(   r     s    z.getPhases.<locals>.InitialPhase.processCommentc          8   S   si  | d } | d } | d } | d } | d k sX | d  k	 sX | d  k	 rh | d k rh |  j  j d  | d  k rz d } |  j j |  | d k r | j t  } | s
| d d k s
| j dJ  s
| dK k s
| j dL  r | d  k s
| r| j   dD k rdE |  j  _ n6 | j dM  sC| j dN  rO| d  k	 rOdH |  j  _ |  j  j	 dI |  j  _
 d  S)ONr@   publicIdsystemIdcorrectr   zabout:legacy-compatzunknown-doctype *+//silmaril//dtd html pro v0r11 19970101//4-//advasoft ltd//dtd html 3.0 aswedit + extensions//*-//as//dtd html 3.0 aswedit + extensions//-//ietf//dtd html 2.0 level 1//-//ietf//dtd html 2.0 level 2//&-//ietf//dtd html 2.0 strict level 1//&-//ietf//dtd html 2.0 strict level 2//-//ietf//dtd html 2.0 strict//-//ietf//dtd html 2.0//-//ietf//dtd html 2.1e//-//ietf//dtd html 3.0//-//ietf//dtd html 3.2 final//-//ietf//dtd html 3.2//-//ietf//dtd html 3//-//ietf//dtd html level 0//-//ietf//dtd html level 1//-//ietf//dtd html level 2//-//ietf//dtd html level 3//"-//ietf//dtd html strict level 0//"-//ietf//dtd html strict level 1//"-//ietf//dtd html strict level 2//"-//ietf//dtd html strict level 3//-//ietf//dtd html strict//-//ietf//dtd html//(-//metrius//dtd metrius presentational//5-//microsoft//dtd internet explorer 2.0 html strict//.-//microsoft//dtd internet explorer 2.0 html//0-//microsoft//dtd internet explorer 2.0 tables//5-//microsoft//dtd internet explorer 3.0 html strict//.-//microsoft//dtd internet explorer 3.0 html//0-//microsoft//dtd internet explorer 3.0 tables//#-//netscape comm. corp.//dtd html//*-//netscape comm. corp.//dtd strict html//*-//o'reilly and associates//dtd html 2.0//3-//o'reilly and associates//dtd html extended 1.0//;-//o'reilly and associates//dtd html extended relaxed 1.0//N-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//E-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//$-//spyglass//dtd html 2.0 extended//+-//sq//dtd html 2.0 hotmetal + extensions//--//sun microsystems corp.//dtd hotjava html//4-//sun microsystems corp.//dtd hotjava strict html//-//w3c//dtd html 3 1995-03-24//-//w3c//dtd html 3.2 draft//-//w3c//dtd html 3.2 final//-//w3c//dtd html 3.2//-//w3c//dtd html 3.2s draft//-//w3c//dtd html 4.0 frameset//#-//w3c//dtd html 4.0 transitional//(-//w3c//dtd html experimental 19960712//&-//w3c//dtd html experimental 970421//-//w3c//dtd w3 html//-//w3o//dtd w3 html 3.0//#-//webtechs//dtd mozilla html 2.0//-//webtechs//dtd mozilla html//$-//w3o//dtd w3 html strict 3.0//en//"-/w3c/dtd html 4.0 transitional/en -//w3c//dtd html 4.01 frameset//$-//w3c//dtd html 4.01 transitional//z:http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtdquirks -//w3c//dtd xhtml 1.0 frameset//$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrU   )7r   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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  )r"  r#  zhtml)r$  r%  )r'  r(  )r$  r%  )rJ   r   r>   insertDoctypern   r   r   rZ   rY   rG   r_   )rB   r   r@   r   r   r   r'   r'   r(   r     s    



                                                      	 	 	 	 	z.getPhases.<locals>.InitialPhase.processDoctypec             S   s&   d |  j  _ |  j  j d |  j  _ d  S)Nr&  rU   )rJ   rY   rG   r_   )rB   r'   r'   r(   anythingElseZ  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   |  j  j d  |  j   | S)Nzexpected-doctype-but-got-chars)rJ   r   r*  )rB   r   r'   r'   r(   r   ^  s    
z1getPhases.<locals>.InitialPhase.processCharactersc             S   s+   |  j  j d d | d i  |  j   | S)Nz"expected-doctype-but-got-start-tagr@   )rJ   r   r*  )rB   r   r'   r'   r(   r   c  s    
z/getPhases.<locals>.InitialPhase.processStartTagc             S   s+   |  j  j d d | d i  |  j   | S)Nz expected-doctype-but-got-end-tagr@   )rJ   r   r*  )rB   r   r'   r'   r(   r   i  s    
z-getPhases.<locals>.InitialPhase.processEndTagc             S   s   |  j  j d  |  j   d S)Nzexpected-doctype-but-got-eofT)rJ   r   r*  )rB   r'   r'   r(   r   o  s    
z*getPhases.<locals>.InitialPhase.processEOFN)r9   r:   r;   tupler   r   r   r   r*  r   r   r   r   r'   r'   r'   r(   InitialPhase  s   	_r,  c               @   sm   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d S)z"getPhases.<locals>.BeforeHtmlPhasec             S   s3   |  j  j t d d   |  j j d |  j _ d  S)Nr   rt   r   )r>   
insertRootimpliedTagTokenrJ   rG   r_   )rB   r'   r'   r(   r`   x  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   |  j    d S)NT)r`   )rB   r'   r'   r(   r   }  s    
z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   |  j  j | |  j  j  d  S)N)r>   r   r   )rB   r   r'   r'   r(   r     s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc             S   s   d  S)Nr'   )rB   r   r'   r'   r(   r     s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   |  j    | S)N)r`   )rB   r   r'   r'   r(   r     s    
z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s*   | d d k r d |  j  _ |  j   | S)Nr@   r   T)rJ   rW   r`   )rB   r   r'   r'   r(   r     s    
z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc             S   sB   | d d k r0 |  j  j d d | d i  n |  j   | Sd  S)Nr@   r   r   r   brzunexpected-end-tag-before-html)zheadzbodyzhtmlzbr)rJ   r   r`   )rB   r   r'   r'   r(   r     s
    
z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)r9   r:   r;   r+  r   r`   r   r   r   r   r   r   r'   r'   r'   r(   BeforeHtmlPhaset  s   	r0  c               @   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z e j d e f d e	 f g  Z e
 e _ e j d e f g  Z e e _ d S)z"getPhases.<locals>.BeforeHeadPhasec             S   s   |  j  t d d   d S)Nr   rt   T)startTagHeadr.  )rB   r'   r'   r(   r     s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc             S   s   d  S)Nr'   )rB   r   r'   r'   r(   r     s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc             S   s   |  j  t d d   | S)Nr   rt   )r1  r.  )rB   r   r'   r'   r(   r     s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s@   |  j  j |  |  j  j d |  j  _ |  j j d |  j _ d  S)Nr   inHeadr   )r>   r   r   headPointerrJ   rG   r_   )rB   r   r'   r'   r(   r1    s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   |  j  t d d   | S)Nr   rt   )r1  r.  )rB   r   r'   r'   r(   startTagOther  s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   |  j  t d d   | S)Nr   rt   )r1  r.  )rB   r   r'   r'   r(   endTagImplyHead  s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s!   |  j  j d d | d i  d  S)Nzend-tag-after-implied-rootr@   )rJ   r   )rB   r   r'   r'   r(   endTagOther  s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherr   r   r   r/  N)zheadzbodyzhtmlzbr)r9   r:   r;   r+  r   r   r   r   r   r1  r4  r5  r6  r   MethodDispatcherr   defaultr   r'   r'   r'   r(   BeforeHeadPhase  s    			r9  c               @   sW  e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z e j d e f d  e f d/ e f d# e f d$ e f d0 e	 f d* e
 f d+ e f g  Z e e _ e j d+ e f d1 e f g  Z e e _ d. S)2zgetPhases.<locals>.InHeadPhasec             S   s   |  j    d S)NT)r*  )rB   r'   r'   r(   r     s    
z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   |  j    | S)N)r*  )rB   r   r'   r'   r(   r     s    
z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z+getPhases.<locals>.InHeadPhase.startTagHtmlc             S   s   |  j  j d  d  S)Nz!two-heads-are-not-better-than-one)rJ   r   )rB   r   r'   r'   r(   r1    s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s.   |  j  j |  |  j  j j   d | d <d  S)NTr   )r>   r   r   r   )rB   r   r'   r'   r(   startTagBaseLinkCommand  s    z6getPhases.<locals>.InHeadPhase.startTagBaseLinkCommandc             S   s   |  j  j |  |  j  j j   d | d <| d } |  j j j j d d k r d | k ry |  j j j j | d  n{ d | k r d | k r | d j	   d	 k r t
 j | d j d
   } t
 j |  } | j   } |  j j j j |  d  S)NTr   ry   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r>   r   r   r   rJ   rN   rQ   rf   changeEncodingrZ   r   EncodingBytesencodeContentAttrParserr!   )rB   r   rm   ry   rJ   codecr'   r'   r(   startTagMeta  s    

z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   |  j  j | d  d  S)Nr   )rJ   r   )rB   r   r'   r'   r(   startTagTitle  s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   |  j  j | d  d  S)Nr   )rJ   r   )rB   r   r'   r'   r(   startTagNoFramesStyle  s    z4getPhases.<locals>.InHeadPhase.startTagNoFramesStylec             S   sL   |  j  j r" |  j  j | d  n& |  j j |  |  j  j d |  j  _ d  S)Nr   inHeadNoscript)rJ   rL   r   r>   r   rG   r_   )rB   r   r'   r'   r(   startTagNoscript  s    z/getPhases.<locals>.InHeadPhase.startTagNoscriptc             S   sT   |  j  j |  |  j j j |  j j _ |  j j |  j _ |  j j d |  j _ d  S)Nr   )	r>   r   rJ   rN   scriptDataStater\   r_   r   rG   )rB   r   r'   r'   r(   startTagScript   s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   |  j    | S)N)r*  )rB   r   r'   r'   r(   r4    s    
z,getPhases.<locals>.InHeadPhase.startTagOtherc             S   sQ   |  j  j j j   } | j d k s7 t d | j   |  j  j d |  j  _ d  S)Nr   zExpected head got %s	afterHead)rJ   r>   r   r   r@   r   rG   r_   )rB   r   r   r'   r'   r(   
endTagHead
  s    "z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   |  j    | S)N)r*  )rB   r   r'   r'   r(   endTagHtmlBodyBr  s    
z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r6    s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   |  j  t d   d  S)Nr   )rK  r.  )rB   r'   r'   r(   r*    s    z+getPhases.<locals>.InHeadPhase.anythingElser   titlenoframesstylenoscriptscriptbasebasefontbgsoundcommandlinkr2   r   r/  r   N)znoframeszstyle)zbasezbasefontzbgsoundzcommandzlink)zbrzhtmlzbody)r9   r:   r;   r+  r   r   r   r   r1  r:  rC  rD  rE  rG  rI  r4  rK  rL  r6  r*  r   r7  r   r8  r   r'   r'   r'   r(   InHeadPhase  s>   									rW  c               @   s  e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d 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 _ d# S)&z&getPhases.<locals>.InHeadNoscriptPhasec             S   s   |  j  j d  |  j   d S)Nzeof-in-head-noscriptT)rJ   r   r*  )rB   r'   r'   r(   r   /  s    
z1getPhases.<locals>.InHeadNoscriptPhase.processEOFc             S   s   |  j  j d j |  S)Nr2  )rJ   rG   r   )rB   r   r'   r'   r(   r   4  s    z5getPhases.<locals>.InHeadNoscriptPhase.processCommentc             S   s   |  j  j d  |  j   | S)Nzchar-in-head-noscript)rJ   r   r*  )rB   r   r'   r'   r(   r   7  s    
z8getPhases.<locals>.InHeadNoscriptPhase.processCharactersc             S   s   |  j  j d j |  S)Nr2  )rJ   rG   r   )rB   r   r'   r'   r(   r   <  s    z=getPhases.<locals>.InHeadNoscriptPhase.processSpaceCharactersc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   ?  s    z3getPhases.<locals>.InHeadNoscriptPhase.startTagHtmlc             S   s   |  j  j d j |  S)Nr2  )rJ   rG   r   )rB   r   r'   r'   r(   r:  B  s    z>getPhases.<locals>.InHeadNoscriptPhase.startTagBaseLinkCommandc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-start-tagr@   )rJ   r   )rB   r   r'   r'   r(   startTagHeadNoscriptE  s    z;getPhases.<locals>.InHeadNoscriptPhase.startTagHeadNoscriptc             S   s+   |  j  j d d | d i  |  j   | S)Nzunexpected-inhead-noscript-tagr@   )rJ   r   r*  )rB   r   r'   r'   r(   r4  H  s    
z4getPhases.<locals>.InHeadNoscriptPhase.startTagOtherc             S   sQ   |  j  j j j   } | j d k s7 t d | j   |  j  j d |  j  _ d  S)NrP  zExpected noscript got %sr2  )rJ   r>   r   r   r@   r   rG   r_   )rB   r   r   r'   r'   r(   endTagNoscriptM  s    "z5getPhases.<locals>.InHeadNoscriptPhase.endTagNoscriptc             S   s+   |  j  j d d | d i  |  j   | S)Nzunexpected-inhead-noscript-tagr@   )rJ   r   r*  )rB   r   r'   r'   r(   endTagBrR  s    
z/getPhases.<locals>.InHeadNoscriptPhase.endTagBrc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r6  W  s    z2getPhases.<locals>.InHeadNoscriptPhase.endTagOtherc             S   s   |  j  t d   d  S)NrP  )rY  r.  )rB   r'   r'   r(   r*  Z  s    z3getPhases.<locals>.InHeadNoscriptPhase.anythingElser   rS  rT  rV  r2   rN  rO  r   rP  r/  N)zbasefontzbgsoundzlinkzmetaznoframeszstyle)zheadznoscript)r9   r:   r;   r+  r   r   r   r   r   r   r:  rX  r4  rY  rZ  r6  r*  r   r7  r   r8  r   r'   r'   r'   r(   InHeadNoscriptPhase,  s,   					r[  c               @   s  e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d 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 _ d% S)(z!getPhases.<locals>.AfterHeadPhasec             S   s   |  j    d S)NT)r*  )rB   r'   r'   r(   r   n  s    
z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   |  j    | S)N)r*  )rB   r   r'   r'   r(   r   r  s    
z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   v  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s6   d |  j  _ |  j j |  |  j  j d |  j  _ d  S)NFr   )rJ   rd   r>   r   rG   r_   )rB   r   r'   r'   r(   startTagBodyy  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s*   |  j  j |  |  j j d |  j _ d  S)Nr   )r>   r   rJ   rG   r_   )rB   r   r'   r'   r(   startTagFrameset~  s    z2getPhases.<locals>.AfterHeadPhase.startTagFramesetc             S   s   |  j  j d d | d i  |  j j j |  j j  |  j  j d j |  xD |  j j d  d  d  D]) } | j d k rg |  j j j	 |  Pqg Wd  S)Nz#unexpected-start-tag-out-of-my-headr@   r2  r   r   r   )
rJ   r   r>   r   r   r3  rG   r   r@   remove)rB   r   r   r'   r'   r(   startTagFromHead  s     z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-start-tagr@   )rJ   r   )rB   r   r'   r'   r(   r1    s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   |  j    | S)N)r*  )rB   r   r'   r'   r(   r4    s    
z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   |  j    | S)N)r*  )rB   r   r'   r'   r(   rL    s    
z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r6    s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc             S   s?   |  j  j t d d   |  j j d |  j _ d |  j _ d  S)Nr   rt   r   T)r>   r   r.  rJ   rG   r_   rd   )rB   r'   r'   r(   r*    s    z.getPhases.<locals>.AfterHeadPhase.anythingElser   r   r   rR  rS  rT  rV  r2   rN  rQ  rO  rM  r   r/  N)	zbasezbasefontzbgsoundzlinkzmetaznoframeszscriptzstyleztitle)zbodyzhtmlzbr)r9   r:   r;   r+  r   r   r   r   r\  r]  r_  r1  r4  rL  r6  r*  r   r7  r   r8  r   r'   r'   r'   r(   AfterHeadPhasek  s0   	
			 		r`  c            ,       s9  e  Z d  Z d Z    f d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d  d!   Z d" d#   Z d$ d%   Z d& d'   Z d( d)   Z d* d+   Z d, d-   Z d. d/   Z d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z d8 d9   Z d: d;   Z  d< d=   Z! d> d?   Z" d@ dA   Z# dB dC   Z$ dD dE   Z% dF dG   Z& dH dI   Z' dJ dK   Z( dL dM   Z) dN dO   Z* dP dQ   Z+ dR dS   Z, dT dU   Z- dV dW   Z. dX dY   Z/ dZ d[   Z0 d\ d]   Z1 d^ d_   Z2 d` da   Z3 db dc   Z4 dd de   Z5 df dg   Z6 e7 j8 dh  j9 f d e f dr e f ds e f d e 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 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 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 d e) f d e* f g!  Z; e+ e; _< e7 j8 dr e- f dh e. f d e/ f d e0 f d e, f d e1 f e: e2 f d e3 f d e4 f d e5 f g
  Z= e6 e= _<   S)zgetPhases.<locals>.InBodyPhaser   c                s)   t    |   j | |   |  j |  _ d  S)N)superrI   processSpaceCharactersNonPrer   )rB   r   r$   )InBodyPhaser   r'   r(   rI     s    z'getPhases.<locals>.InBodyPhase.__init__c             S   s4   | j  | j  k o3 | j | j k o3 | j | j k S)N)r@   rl   rm   )rB   node1node2r'   r'   r(   isMatchingFormattingElement  s    z:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementc             S   s   |  j  j |  |  j  j d } g  } xP |  j  j d  d  d  D]5 } | t k rV Pq@ |  j | |  r@ | j |  q@ Wt |  d k s t  t |  d k r |  j  j j	 | d  |  j  j j |  d  S)Nr      r   r   r   )
r>   r   r   activeFormattingElementsr   rf  r   r   r   r^  )rB   r   ro   matchingElementsr   r'   r'   r(   addFormattingElement  s     z3getPhases.<locals>.InBodyPhase.addFormattingElementc             S   sT   t  d  } xA |  j j d  d  d  D]& } | j | k r& |  j j d  Pq& Wd  S)Ndddtlir&   r   r   r   r   r   r   r   r   r   z expected-closing-tag-but-got-eof)zddzdtzlir&   ztbodyztdztfootzthztheadztrzbodyzhtmlr   )r   r>   r   r@   rJ   r   )rB   allowed_elementsr   r'   r'   r(   r     s     	 z)getPhases.<locals>.InBodyPhase.processEOFc             S   s   | d } |  j  |  _ | j d  re |  j j d j d k re |  j j d	 j   re | d d   } | r |  j j   |  j j |  d  S)
Nry   
r   prelistingtextarear   )zprezlistingztextarear   )	rb  r   r   r>   r   r@   
hasContent#reconstructActiveFormattingElementsr   )rB   r   ry   r'   r'   r(   !processSpaceCharactersDropNewline  s    
z@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewlinec             S   sn   | d d k r d  S|  j  j   |  j  j | d  |  j j rj t d d   | d D  rj d |  j _ d  S)Nry    c             S   s   g  |  ] } | t  k  q Sr'   )r   )r?   charr'   r'   r(   
<listcomp>  s   	zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r>   rt  r   rJ   rd   any)rB   r   r'   r'   r(   r     s    z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s%   |  j  j   |  j  j | d  d  S)Nry   )r>   rt  r   )rB   r   r'   r'   r(   rb    s    z;getPhases.<locals>.InBodyPhase.processSpaceCharactersNonPrec             S   s   |  j  j d j |  S)Nr2  )rJ   rG   r   )rB   r   r'   r'   r(   startTagProcessInHead  s    z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc             S   s   |  j  j d d d i  t |  j j  d k sJ |  j j d j d k r_ |  j  j s t  n] d |  j  _ xN | d j	   D]< \ } } | |  j j d j
 k r| | |  j j d j
 | <q| Wd  S)Nzunexpected-start-tagr@   r   r   Fry   )rJ   r   r   r>   r   r@   rR   r   rd   r,   rm   )rB   r   r   r   r'   r'   r(   r\    s    z+getPhases.<locals>.InBodyPhase.startTagBodyc             S   s   |  j  j d d d i  t |  j j  d k sJ |  j j d j d k r_ |  j  j s t  n |  j  j sn n |  j j d j	 r |  j j d j	 j
 |  j j d  x- |  j j d j d k r |  j j j   q W|  j j |  |  j  j d |  j  _ d  S)	Nzunexpected-start-tagr@   r   r   r   r   r   r   )rJ   r   r   r>   r   r@   rR   r   rd   parentremoveChildr   r   rG   r_   )rB   r   r'   r'   r(   r]    s    1$z/getPhases.<locals>.InBodyPhase.startTagFramesetc             S   s?   |  j  j d d d r+ |  j t d   |  j  j |  d  S)Nr&   variantbutton)r>   elementInScopeendTagPr.  r   )rB   r   r'   r'   r(   startTagCloseP  s    z-getPhases.<locals>.InBodyPhase.startTagClosePc             S   sW   |  j  j d d d r+ |  j t d   |  j  j |  d |  j _ |  j |  _ d  S)Nr&   r}  r~  F)	r>   r  r  r.  r   rJ   rd   ru  r   )rB   r   r'   r'   r(   startTagPreListing  s
    z1getPhases.<locals>.InBodyPhase.startTagPreListingc             S   s}   |  j  j r( |  j j d d d i  nQ |  j  j d d d rS |  j t d   |  j  j |  |  j  j d |  j  _ d  S)	Nzunexpected-start-tagr@   formr&   r}  r~  r   r   )	r>   formPointerrJ   r   r  r  r.  r   r   )rB   r   r'   r'   r(   startTagForm  s    z+getPhases.<locals>.InBodyPhase.startTagFormc             S   s   d |  j  _ d d g d d d g d d d g i } | | d } xh t |  j j  D]T } | j | k r |  j  j j t | j d   P| j	 t
 k rT | j d k rT PqT W|  j j d	 d
 d r |  j  j j t d	 d   |  j j |  d  S)NFrm  rl  rk  r@   ru   addressr)   r&   r}  r~  )zaddresszdivr&   )rJ   rd   reversedr>   r   r@   r_   r   r.  	nameTupler   r  r   )rB   r   stopNamesMap	stopNamesr   r'   r'   r(   startTagListItem&  s"    	z/getPhases.<locals>.InBodyPhase.startTagListItemc             S   sW   |  j  j d d d r+ |  j t d   |  j  j |  |  j j j |  j j _ d  S)Nr&   r}  r~  )	r>   r  r  r.  r   rJ   rN   r^   r\   )rB   r   r'   r'   r(   startTagPlaintext<  s    z0getPhases.<locals>.InBodyPhase.startTagPlaintextc             S   s   |  j  j d d d r+ |  j t d   |  j  j d j t k rq |  j j d d | d i  |  j  j j	   |  j  j
 |  d  S)Nr&   r}  r~  r   zunexpected-start-tagr@   r   )r>   r  r  r.  r   r@   r   rJ   r   r   r   )rB   r   r'   r'   r(   startTagHeadingB  s    z.getPhases.<locals>.InBodyPhase.startTagHeadingc             S   s   |  j  j d  } | r |  j j d d d d d i  |  j t d   | |  j  j k ro |  j  j j |  | |  j  j k r |  j  j j |  |  j  j	   |  j
 |  d  S)Naz$unexpected-start-tag-implies-end-tag	startNameendName)r>   !elementInActiveFormattingElementsrJ   r   endTagFormattingr.  r   r^  rh  rt  rj  )rB   r   afeAElementr'   r'   r(   	startTagAJ  s    z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   |  j  j   |  j |  d  S)N)r>   rt  rj  )rB   r   r'   r'   r(   startTagFormattingW  s    z1getPhases.<locals>.InBodyPhase.startTagFormattingc             S   so   |  j  j   |  j  j d  r^ |  j j d d d d d i  |  j t d   |  j  j   |  j |  d  S)Nnobrz$unexpected-start-tag-implies-end-tagr  r  )r>   rt  r  rJ   r   r   r.  rj  )rB   r   r'   r'   r(   startTagNobr[  s    z+getPhases.<locals>.InBodyPhase.startTagNobrc             S   su   |  j  j d  rH |  j j d d d d d i  |  j t d   | S|  j  j   |  j  j |  d |  j _ d  S)Nr~  z$unexpected-start-tag-implies-end-tagr  r  F)	r>   r  rJ   r   r   r.  rt  r   rd   )rB   r   r'   r'   r(   startTagButtone  s    z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s@   |  j  j   |  j  j |  |  j  j j t  d |  j _ d  S)NF)r>   rt  r   rh  r   r   rJ   rd   )rB   r   r'   r'   r(   startTagAppletMarqueeObjectp  s    z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc             S   s[   |  j  j d d d r+ |  j t d   |  j  j   d |  j _ |  j j | d  d  S)Nr&   r}  r~  Fr   )r>   r  r  r.  rt  rJ   rd   r   )rB   r   r'   r'   r(   startTagXmpv  s
    z*getPhases.<locals>.InBodyPhase.startTagXmpc             S   ss   |  j  j d k r= |  j j d d d r= |  j t d   |  j j |  d |  j  _ |  j  j d |  j  _	 d  S)Nr&  r&   r}  r~  Fr   )
rJ   rY   r>   r  r   r.  r   rd   rG   r_   )rB   r   r'   r'   r(   startTagTable}  s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   sG   |  j  j   |  j  j |  |  j  j j   d | d <d |  j _ d  S)NTr   F)r>   rt  r   r   r   rJ   rd   )rB   r   r'   r'   r(   startTagVoidFormatting  s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc             S   sV   |  j  j } |  j |  d | d k rR | d d j t  d k rR | |  j  _ d  S)Nr0   ry   hidden)rJ   rd   r  rn   r   )rB   r   rd   r'   r'   r(   startTagInput  s
    z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s.   |  j  j |  |  j  j j   d | d <d  S)NTr   )r>   r   r   r   )rB   r   r'   r'   r(   startTagParamSource  s    z2getPhases.<locals>.InBodyPhase.startTagParamSourcec             S   se   |  j  j d d d r+ |  j t d   |  j  j |  |  j  j j   d | d <d |  j _ d  S)Nr&   r}  r~  Tr   F)	r>   r  r  r.  r   r   r   rJ   rd   )rB   r   r'   r'   r(   
startTagHr  s    
z)getPhases.<locals>.InBodyPhase.startTagHrc          	   S   sM   |  j  j d d d d d i  |  j t d d d | d d	 | d	  d  S)
Nzunexpected-start-tag-treated-asoriginalNameimagenewNameimgrt   rm   ry   r   )rJ   r   r   r.  )rB   r   r'   r'   r(   startTagImage  s
    
z,getPhases.<locals>.InBodyPhase.startTagImagec          	   S   s  |  j  j d d d i  |  j j r) d  Si  } d | d k rQ | d d | d <|  j t d d d |  |  j t d	 d   |  j t d
 d   d | d k r | d d } n d } |  j d t d d | i  | d j   } d | k r | d =d | k r| d =d | d <|  j t d d d | d | d  |  j	 t d
   |  j t d	 d   |  j	 t d   d  S)Nzdeprecated-tagr@   isindexactionry   r  rt   rm   hrlabelpromptz3This is a searchable index. Enter search keywords: r0   rr   inputr   )
rJ   r   r>   r  r   r.  r   r   copyr   )rB   r   
form_attrsr  rm   r'   r'   r(   startTagIsIndex  s6    

z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   sD   |  j  j |  |  j j j |  j j _ |  j |  _ d |  j _ d  S)NF)	r>   r   rJ   rN   r[   r\   ru  r   rd   )rB   r   r'   r'   r(   startTagTextarea  s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d |  j  _ |  j |  d  S)NF)rJ   rd   startTagRawtext)rB   r   r'   r'   r(   startTagIFrame  s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s-   |  j  j r |  j |  n |  j |  d  S)N)rJ   rL   r  r4  )rB   r   r'   r'   r(   rG    s    z/getPhases.<locals>.InBodyPhase.startTagNoscriptc             S   s   |  j  j | d  d S)z8iframe, noembed noframes, noscript(if scripting enabled)r   N)rJ   r   )rB   r   r'   r'   r(   r    s    z.getPhases.<locals>.InBodyPhase.startTagRawtextc             S   sV   |  j  j d j d k r2 |  j j j t d   |  j  j   |  j j  j |  d  S)Nr   optionr   )	r>   r   r@   rJ   r_   r   r.  rt  r   )rB   r   r'   r'   r(   startTagOpt  s    z*getPhases.<locals>.InBodyPhase.startTagOptc             S   s   |  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 k r |  j j d |  j _ n |  j j d	 |  j _ d  S)
NFr   r   r   r   r   r   inSelectInTabler   )r>   rt  r   rJ   rd   r_   rG   )rB   r   r'   r'   r(   startTagSelect  s    z-getPhases.<locals>.InBodyPhase.startTagSelectc             S   sY   |  j  j d  rE |  j  j   |  j  j d j d k rE |  j j   |  j  j |  d  S)Nrubyr   r   )r>   r  generateImpliedEndTagsr   r@   rJ   r   r   )rB   r   r'   r'   r(   startTagRpRt  s
    z+getPhases.<locals>.InBodyPhase.startTagRpRtc             S   ss   |  j  j   |  j j |  |  j j |  t d | d <|  j  j |  | d ro |  j  j j   d | d <d  S)Nrh   rl   r   Tr   )	r>   rt  rJ   r   r   r   r   r   r   )rB   r   r'   r'   r(   startTagMath  s    
z+getPhases.<locals>.InBodyPhase.startTagMathc             S   ss   |  j  j   |  j j |  |  j j |  t d | d <|  j  j |  | d ro |  j  j j   d | d <d  S)Nr}   rl   r   Tr   )	r>   rt  rJ   r   r   r   r   r   r   )rB   r   r'   r'   r(   startTagSvg  s    
z*getPhases.<locals>.InBodyPhase.startTagSvgc             S   s!   |  j  j d d | d i  d S)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-ignoredr@   N)rJ   r   )rB   r   r'   r'   r(   startTagMisplaced  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s!   |  j  j   |  j  j |  d  S)N)r>   rt  r   )rB   r   r'   r'   r(   r4    s    z,getPhases.<locals>.InBodyPhase.startTagOtherc             S   s   |  j  j d d d s` |  j t d d   |  j j d d d i  |  j t d d   n| |  j  j d  |  j  j d	 j	 d k r |  j j d d d i  |  j  j j
   } x% | j	 d k r |  j  j j
   } q Wd  S)
Nr&   r}  r~  rt   zunexpected-end-tagr@   ru   r   r   )r>   r  r  r.  rJ   r   r  r  r   r@   r   )rB   r   r   r'   r'   r(   r    s    z&getPhases.<locals>.InBodyPhase.endTagPc             S   s   |  j  j d  s# |  j j   d  S|  j  j d j d k r xV |  j  j d d   D]> } | j t d  k rS |  j j d d d d | j i  PqS W|  j j d |  j _ d  S)Nr   r      rk  rl  rm  optgroupr  r&   rprtr   r   r   r   r   r   r   z$expected-one-end-tag-but-got-anothergotNameexpectedName	afterBodyr   )zddzdtzlizoptgroupzoptionr&   zrpzrtztbodyztdztfootzthztheadztrzbodyzhtml)	r>   r  rJ   r   r   r@   r   rG   r_   )rB   r   r   r'   r'   r(   
endTagBody)  s    	   	z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s-   |  j  j d  r) |  j t d   | Sd  S)Nr   )r>   r  r  r.  )rB   r   r'   r'   r(   
endTagHtml;  s    z)getPhases.<locals>.InBodyPhase.endTagHtmlc             S   s   | d d k r |  j  |  _ |  j j | d  } | rE |  j j   |  j j d j | d k r |  j j d d | d i  | r |  j j j	   } x) | j | d k r |  j j j	   } q Wd  S)Nr@   rp  r   zend-tag-too-earlyr   )
rb  r   r>   r  r  r   r@   rJ   r   r   )rB   r   inScoper   r'   r'   r(   endTagBlockA  s    z*getPhases.<locals>.InBodyPhase.endTagBlockc             S   s   |  j  j } d  |  j  _ | d  k s7 |  j  j |  rS |  j j d d d i  nO |  j  j   |  j  j d | k r |  j j d d d i  |  j  j j |  d  S)Nzunexpected-end-tagr@   r  r   zend-tag-too-early-ignoredr   )r>   r  r  rJ   r   r  r   r^  )rB   r   r   r'   r'   r(   
endTagFormO  s    z)getPhases.<locals>.InBodyPhase.endTagFormc             S   s   | d d k r d } n d  } |  j  j | d d | s[ |  j j d d | d i  n |  j  j d | d  |  j  j d	 j | d k r |  j j d d | d i  |  j  j j   } x) | j | d k r |  j  j j   } q Wd  S)
Nr@   rm  listr}  zunexpected-end-tagexcluder   zend-tag-too-earlyr   )r>   r  rJ   r   r  r   r@   r   )rB   r   r}  r   r'   r'   r(   endTagListItem\  s    	 	z-getPhases.<locals>.InBodyPhase.endTagListItemc             S   s   x. t  D]& } |  j j |  r |  j j   Pq W|  j j d j | d k rk |  j j d d | d i  x[ t  D]S } |  j j |  rr |  j j j   } x% | j t  k r |  j j j   } q WPqr Wd  S)Nr   r@   zend-tag-too-earlyr   )	r   r>   r  r  r   r@   rJ   r   r   )rB   r   itemr'   r'   r(   endTagHeadingm  s    z,getPhases.<locals>.InBodyPhase.endTagHeadingc             S   s!  d } x| d k  r| d 7} |  j  j | d  } | sd | |  j  j k ru |  j  j | j  ru |  j |  d S| |  j  j k r |  j j d d | d i  |  j  j j	 |  d S|  j  j | j  s |  j j d d | d i  d S| |  j  j d k r$|  j j d d | d i  |  j  j j
 |  } d } x4 |  j  j | d  D] } | j t k rV| } PqVW| d k r|  j  j j   } x" | | k r|  j  j j   } qW|  j  j j	 |  d S|  j  j | d } |  j  j j
 |  } | }	 }
 d } |  j  j j
 |
  } x
| d	 k  r*| d 7} | d 8} |  j  j | }
 |
 |  j  j k ry|  j  j j	 |
  q!|
 | k rP|	 | k r|  j  j j
 |
  d } |
 j   } | |  j  j |  j  j j
 |
  <| |  j  j |  j  j j
 |
  <| }
 |	 j r|	 j j |	  |
 j |	  |
 }	 q!W|	 j rD|	 j j |	  | j t d  k r|  j  j   \ } } | j |	 |  n | j |	  | j   } | j |  | j |  |  j  j j	 |  |  j  j j | |  |  j  j j	 |  |  j  j j |  j  j j
 |  d |  q	 Wd S)z)The much-feared adoption agency algorithmr      r   r@   Nzadoption-agency-1.2zadoption-agency-4.4zadoption-agency-1.3rg  r   r   r   r   r   r   )ztableztbodyztfootztheadztr)r>   r  r   r  r@   r6  rJ   r   rh  r^  indexr  r   r   	cloneNoder{  r|  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)rB   r   outerLoopCounterformattingElementafeIndexfurthestBlockro   commonAncestorbookmarklastNoder   innerLoopCounterr  cloner{  r  r'   r'   r(   r  |  s    

	



	
	z/getPhases.<locals>.InBodyPhase.endTagFormattingc             S   s   |  j  j | d  r# |  j  j   |  j  j d j | d k r] |  j j d d | d i  |  j  j | d  r |  j  j j   } x) | j | d k r |  j  j j   } q W|  j  j   d  S)Nr@   r   zend-tag-too-earlyr   )	r>   r  r  r   r@   rJ   r   r   clearActiveFormattingElements)rB   r   ro   r'   r'   r(   endTagAppletMarqueeObject  s    z8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObjectc             S   sY   |  j  j d d d d d i  |  j j   |  j j t d d   |  j j j   d  S)Nzunexpected-end-tag-treated-asr  r/  r  z
br elementrt   )rJ   r   r>   rt  r   r.  r   r   )rB   r   r'   r'   r(   rZ  +  s
    z'getPhases.<locals>.InBodyPhase.endTagBrc             S   s   x |  j  j d  d  d  D] } | j | d k r |  j  j d | d  |  j  j d j | d k r |  j j d d | d i  x |  j  j j   | k r q WPq | j t k r |  j j d d | d i  Pq Wd  S)Nr   r@   r  zunexpected-end-tagr   r   )	r>   r   r@   r  rJ   r   r   r  r   )rB   r   r   r'   r'   r(   r6  2  s     z*getPhases.<locals>.InBodyPhase.endTagOtherr   rR  rS  rT  rU  rV  r2   rQ  rO  rM  r   r   r  articleaside
blockquotecenterdetailsdirr)   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr&   sectionsummaryulrp  rq  r  rm  rk  rl  rT   r  bbigcodeemfontissmallstrikestrongttur  r~  appletmarqueeobjectxmpr   arear/  embedr  keygenwbrparamsourcetrackr  r  r  r  rr  iframerP  noembedrN  r   r  r  r  r  mathr}   r   colr   framer   r   r   r   r   r   r   dialog)zprocessSpaceCharacters)	zbasezbasefontzbgsoundzcommandzlinkzmetazscriptzstyleztitle)addressarticleaside
blockquotecenterdetailsdirdivdlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr&   sectionsummaryul)prelisting)lidddt)r  bigcodeemfontr  r  smallstrikestrongttr  )appletmarqueeobject)zareazbrzembedzimgzkeygenzwbr)zparamzsourceztrack)znoembedznoframes)zrpzrt)zoptionzoptgroup)zcaptionzcolzcolgroupzframezheadztbodyztdztfootzthztheadztr)r  r  r  r  zbuttonr  r  z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  znobrr  r0  r1  r2  r3  r  )r4  r5  r6  )>r9   r:   r;   r   rI   rf  rj  r   ru  r   rb  rz  r\  r]  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rG  r  r  r  r  r  r  r  r4  r  r  r  r  r  r  r  r  r  rZ  r6  r   r7  r   r   r   r8  r   r'   )rc  r   )r   r(   rc    s   
	
	 		   						 																				  			   					 		rc  c               @   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 e
 j g   Z e e _ e
 j d e f g  Z e	 e _ d S)zgetPhases.<locals>.TextPhasec             S   s   |  j  j | d  d  S)Nry   )r>   r   )rB   r   r'   r'   r(   r     s    z.getPhases.<locals>.TextPhase.processCharactersc             S   sL   |  j  j d d |  j j d j i  |  j j j   |  j  j |  j  _ d S)Nz&expected-named-closing-tag-but-got-eofr@   r   Tr   )rJ   r   r>   r   r@   r   r   r_   )rB   r'   r'   r(   r     s
    z'getPhases.<locals>.TextPhase.processEOFc             S   s   d s t  d | d   d  S)NFz4Tried to process start tag %s in RCDATA/RAWTEXT moder@   )r   )rB   r   r'   r'   r(   r4    s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s=   |  j  j j   } | j d k s' t  |  j j |  j _ d  S)NrQ  )r>   r   r   r@   r   rJ   r   r_   )rB   r   r   r'   r'   r(   endTagScript  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s&   |  j  j j   |  j j |  j _ d  S)N)r>   r   r   rJ   r   r_   )rB   r   r'   r'   r(   r6    s    z(getPhases.<locals>.TextPhase.endTagOtherrQ  N)r9   r:   r;   r+  r   r   r   r4  r7  r6  r   r7  r   r8  r   r'   r'   r'   r(   	TextPhase  s   		r8  c                   s  e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d    Z d! d"   Z d# d$   Z e j d%   j f d& e
 f d' e f d( e f d6 e f d7 e f d/ e f d8 e f d2 e f d3 e f g
  Z e e _ e j d/ e f d9 e f g  Z e e _ d5 S):zgetPhases.<locals>.InTablePhasec             S   s4   x- |  j  j d j d k r/ |  j  j j   q Wd  S)Nr   r   r   r   )ztablezhtml)r>   r   r@   r   )rB   r'   r'   r(   clearStackToTableContext  s    z8getPhases.<locals>.InTablePhase.clearStackToTableContextc             S   sB   |  j  j d j d k r, |  j j d  n |  j j s> t  d  S)Nr   r   zeof-in-tabler   )r>   r   r@   rJ   r   rR   r   )rB   r'   r'   r(   r     s    z*getPhases.<locals>.InTablePhase.processEOFc             S   sH   |  j  j } |  j  j d |  j  _ | |  j  j _ |  j  j j |  d  S)NinTableText)rJ   r_   rG   r   r   )rB   r   r   r'   r'   r(   r     s    z6getPhases.<locals>.InTablePhase.processSpaceCharactersc             S   sH   |  j  j } |  j  j d |  j  _ | |  j  j _ |  j  j j |  d  S)Nr:  )rJ   r_   rG   r   r   )rB   r   r   r'   r'   r(   r     s    z1getPhases.<locals>.InTablePhase.processCharactersc             S   s3   d |  j  _ |  j j d j |  d |  j  _ d  S)NTr   F)r>   insertFromTablerJ   rG   r   )rB   r   r'   r'   r(   r     s    z*getPhases.<locals>.InTablePhase.insertTextc             S   sG   |  j    |  j j j t  |  j j |  |  j j d |  j _ d  S)Nr   )	r9  r>   rh  r   r   r   rJ   rG   r_   )rB   r   r'   r'   r(   startTagCaption  s    
z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s4   |  j    |  j j |  |  j j d |  j _ d  S)Nr   )r9  r>   r   rJ   rG   r_   )rB   r   r'   r'   r(   startTagColgroup  s    
z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   |  j  t d d   | S)Nr   rt   )r=  r.  )rB   r   r'   r'   r(   startTagCol  s    z+getPhases.<locals>.InTablePhase.startTagColc             S   s4   |  j    |  j j |  |  j j d |  j _ d  S)Nr   )r9  r>   r   rJ   rG   r_   )rB   r   r'   r'   r(   startTagRowGroup  s    
z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   |  j  t d d   | S)Nr   rt   )r?  r.  )rB   r   r'   r'   r(   startTagImplyTbody  s    z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc             S   sL   |  j  j d d d d d i  |  j  j j t d   |  j  j sH | Sd  S)Nz$unexpected-start-tag-implies-end-tagr  r   r  )rJ   r   r_   r   r.  rR   )rB   r   r'   r'   r(   r    s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   |  j  j d j |  S)Nr2  )rJ   rG   r   )rB   r   r'   r'   r(   startTagStyleScript  s    z3getPhases.<locals>.InTablePhase.startTagStyleScriptc             S   sq   d | d k r` | d d j  t  d k r` |  j j d  |  j j |  |  j j j   n |  j |  d  S)Nr0   ry   r  z unexpected-hidden-input-in-table)	rn   r   rJ   r   r>   r   r   r   r4  )rB   r   r'   r'   r(   r    s    z-getPhases.<locals>.InTablePhase.startTagInputc             S   s\   |  j  j d  |  j j d  k rX |  j j |  |  j j d |  j _ |  j j j   d  S)Nzunexpected-form-in-tabler   r   )rJ   r   r>   r  r   r   r   )rB   r   r'   r'   r(   r    s
    z,getPhases.<locals>.InTablePhase.startTagFormc             S   sP   |  j  j d d | d i  d |  j _ |  j  j d j |  d |  j _ d  S)Nz)unexpected-start-tag-implies-table-voodoor@   Tr   F)rJ   r   r>   r;  rG   r   )rB   r   r'   r'   r(   r4    s    z-getPhases.<locals>.InTablePhase.startTagOtherc             S   s   |  j  j d d d r |  j  j   |  j  j d j d k rj |  j j d d d d |  j  j d j i  x- |  j  j d	 j d k r |  j  j j   qm W|  j  j j   |  j j   n |  j j	 s t
  |  j j   d  S)
Nr   r}  r   zend-tag-too-early-namedr  r  r   r   r   )r>   r  r  r   r@   rJ   r   r   ra   rR   r   )rB   r   r'   r'   r(   endTagTable  s    z+getPhases.<locals>.InTablePhase.endTagTablec             S   s!   |  j  j d d | d i  d  S)Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   endTagIgnore  s    z,getPhases.<locals>.InTablePhase.endTagIgnorec             S   sP   |  j  j d d | d i  d |  j _ |  j  j d j |  d |  j _ d  S)Nz'unexpected-end-tag-implies-table-voodoor@   Tr   F)rJ   r   r>   r;  rG   r   )rB   r   r'   r'   r(   r6    s    z+getPhases.<locals>.InTablePhase.endTagOtherr   r   r   r  r   r   r   r   r   r   r   rO  rQ  r  r  r   N)tbodytfootthead)tdthtr)zstylezscript)zbodyzcaptionzcolzcolgroupzhtmlrD  rG  rE  rH  rF  rI  )r9   r:   r;   r+  r   r9  r   r   r   r   r<  r=  r>  r?  r@  r  rA  r  r  r4  rB  rC  r6  r   r7  r   r   r8  r   r'   )r   r'   r(   InTablePhase  sH   		
										 rJ  c                   s   e  Z d  Z d Z    f d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d d   Z   S)z#getPhases.<locals>.InTableTextPhaser   characterTokensc                s/   t    |   j | |   d  |  _ g  |  _ d  S)N)ra  rI   r   rK  )rB   r   r$   )InTableTextPhaser   r'   r(   rI   6  s    	z,getPhases.<locals>.InTableTextPhase.__init__c             S   s   d j  d d   |  j D  } t d d   | D  rh d t d d | i } |  j j d j |  n | r~ |  j j |  g  |  _ d  S)	Nr   c             S   s   g  |  ] } | d   q S)ry   r'   )r?   r  r'   r'   r(   rx  <  s   	 zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c             S   s   g  |  ] } | t  k  q Sr'   )r   )r?   r  r'   r'   r(   rx  =  s   	 r0   rr   ry   r   )joinrK  ry  r   rJ   rG   r   r>   )rB   ry   r   r'   r'   r(   flushCharacters;  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   |  j    |  j |  j _ | S)N)rN  r   rJ   r_   )rB   r   r'   r'   r(   r   D  s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   |  j    |  j |  j _ d S)NT)rN  r   rJ   r_   )rB   r'   r'   r(   r   I  s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s(   | d d k r d  S|  j  j |  d  S)Nry   rv  )rK  r   )rB   r   r'   r'   r(   r   N  s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   |  j  j |  d  S)N)rK  r   )rB   r   r'   r'   r(   r   S  s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   |  j    |  j |  j _ | S)N)rN  r   rJ   r_   )rB   r   r'   r'   r(   r   X  s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   |  j    |  j |  j _ | S)N)rN  r   rJ   r_   )rB   r   r'   r'   r(   r   ]  s    
z1getPhases.<locals>.InTableTextPhase.processEndTag)zoriginalPhasezcharacterTokens)r9   r:   r;   r   rI   rN  r   r   r   r   r   r   r'   )rL  )r   r(   rL  3  s   	rL  c                   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z e j d   j f d  e f g  Z e	 e _ e j d e
 f d e f d! e f g  Z e e _ d S)"z!getPhases.<locals>.InCaptionPhasec             S   s   |  j  j d d d S)Nr   r}  r   )r>   r  )rB   r'   r'   r(   ignoreEndTagCaptionf  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   |  j  j d j   d  S)Nr   )rJ   rG   r   )rB   r'   r'   r(   r   i  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   l  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s@   |  j  j   |  j   } |  j  j j t d   | s< | Sd  S)Nr   )rJ   r   rO  r_   r   r.  )rB   r   ignoreEndTagr'   r'   r(   startTagTableElemento  s
    z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r4  w  s    z/getPhases.<locals>.InCaptionPhase.startTagOtherc             S   s   |  j    s |  j j   |  j j d j d k r^ |  j j d d d d |  j j d j i  x- |  j j d	 j d k r |  j j j   qa W|  j j j   |  j j   |  j j	 d |  j _
 n |  j j s t  |  j j   d  S)
Nr   r   z$expected-one-end-tag-but-got-anotherr  r  r   r   r   r   )rO  r>   r  r   r@   rJ   r   r   r  rG   r_   rR   r   )rB   r   r'   r'   r(   endTagCaptionz  s    z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s@   |  j  j   |  j   } |  j  j j t d   | s< | Sd  S)Nr   )rJ   r   rO  r_   r   r.  )rB   r   rP  r'   r'   r(   rB    s
    z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s!   |  j  j d d | d i  d  S)Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   rC    s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r6    s    z-getPhases.<locals>.InCaptionPhase.endTagOtherr   r   r  r   r   r   r   r   r   r   r   r   N)	zcaptioncolcolgrouptbodytdtfootththeadtr)
zbodyrS  rT  zhtmlrU  rV  rW  rX  rY  rZ  )r9   r:   r;   r+  r   rO  r   r   rQ  r4  rR  rB  rC  r6  r   r7  r   r   r8  r   r'   )r   r'   r(   InCaptionPhaseb  s*   	 			 r[  c                   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z e j d   j f d e f g  Z e	 e _ e j d e
 f d e f g  Z e e _ d S)z%getPhases.<locals>.InColumnGroupPhasec             S   s   |  j  j d j d k S)Nr   r   r   )r>   r   r@   )rB   r'   r'   r(   ignoreEndTagColgroup  s    z:getPhases.<locals>.InColumnGroupPhase.ignoreEndTagColgroupc             S   s\   |  j  j d j d k r/ |  j j s+ t  d  S|  j   } |  j t d   | sX d Sd  S)Nr   r   r   Tr   )	r>   r   r@   rJ   rR   r   r\  endTagColgroupr.  )rB   rP  r'   r'   r(   r     s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr   )r\  r]  r.  )rB   r   rP  r'   r'   r(   r     s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc             S   s.   |  j  j |  |  j  j j   d | d <d  S)NTr   )r>   r   r   r   )rB   r   r'   r'   r(   r>    s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr   )r\  r]  r.  )rB   r   rP  r'   r'   r(   r4    s    z3getPhases.<locals>.InColumnGroupPhase.startTagOtherc             S   sX   |  j    r. |  j j s t  |  j j   n& |  j j j   |  j j d |  j _	 d  S)Nr   )
r\  rJ   rR   r   r   r>   r   r   rG   r_   )rB   r   r'   r'   r(   r]    s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   |  j  j d d d i  d  S)Nz
no-end-tagr@   r  )rJ   r   )rB   r   r'   r'   r(   	endTagCol  s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr   )r\  r]  r.  )rB   r   rP  r'   r'   r(   r6    s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherr   r  r   N)r9   r:   r;   r+  r   r\  r   r   r>  r4  r]  r^  r6  r   r7  r   r   r8  r   r'   )r   r'   r(   InColumnGroupPhase  s"   	
			r_  c                   s  e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z e j d   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 _ d% S)*z#getPhases.<locals>.InTableBodyPhasec             S   s_   x- |  j  j d j d k r/ |  j  j j   q W|  j  j d j d k r[ |  j j s[ t  d  S)	Nr   r   r   r   r   r   )ztbodyztfootztheadzhtmlr   )r>   r   r@   r   rJ   rR   r   )rB   r'   r'   r(   clearStackToTableBodyContext  s
    	z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   |  j  j d j   d  S)Nr   )rJ   rG   r   )rB   r'   r'   r(   r     s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s4   |  j    |  j j |  |  j j d |  j _ d  S)Nr   )r`  r>   r   rJ   rG   r_   )rB   r   r'   r'   r(   
startTagTr   s    
z.getPhases.<locals>.InTableBodyPhase.startTagTrc             S   s7   |  j  j d d | d i  |  j t d d   | S)Nzunexpected-cell-in-table-bodyr@   r   rt   )rJ   r   ra  r.  )rB   r   r'   r'   r(   startTagTableCell  s    z5getPhases.<locals>.InTableBodyPhase.startTagTableCellc             S   s   |  j  j d d d sH |  j  j d d d sH |  j  j d d d rv |  j   |  j t |  j  j d j   | S|  j j s t	  |  j j
   d  S)Nr   r}  r   r   r   r   r   )r>   r  r`  endTagTableRowGroupr.  r   r@   rJ   rR   r   r   )rB   r   r'   r'   r(   startTagTableOther  s    
z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r4    s    z1getPhases.<locals>.InTableBodyPhase.startTagOtherc             S   sp   |  j  j | d d d rO |  j   |  j  j j   |  j j d |  j _ n |  j j d d | d i  d  S)Nr@   r}  r   r   z unexpected-end-tag-in-table-body)	r>   r  r`  r   r   rJ   rG   r_   r   )rB   r   r'   r'   r(   rc    s    
z7getPhases.<locals>.InTableBodyPhase.endTagTableRowGroupc             S   s   |  j  j d d d sH |  j  j d d d sH |  j  j d d d rv |  j   |  j t |  j  j d j   | S|  j j s t	  |  j j
   d  S)Nr   r}  r   r   r   r   r   )r>   r  r`  rc  r.  r   r@   rJ   rR   r   r   )rB   r   r'   r'   r(   rB  %  s    
z/getPhases.<locals>.InTableBodyPhase.endTagTablec             S   s!   |  j  j d d | d i  d  S)Nz unexpected-end-tag-in-table-bodyr@   )rJ   r   )rB   r   r'   r'   r(   rC  2  s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r6  6  s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherr   r   r   r   r   r  r   r   r   r   r   r   N)tdth)captioncolcolgrouptbodytfootthead)rj  rk  rl  )zbodyrg  rh  ri  zhtmlre  rf  ztr)r9   r:   r;   r+  r   r`  r   r   r   ra  rb  rd  r4  rc  rB  rC  r6  r   r7  r   r   r8  r   r'   )r   r'   r(   InTableBodyPhase  s4   	
						 rm  c                   s'  e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z e j d   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 _ d' S),zgetPhases.<locals>.InRowPhasec             S   sZ   xS |  j  j d j d k rU |  j j d d |  j  j d j i  |  j  j j   q Wd  S)	Nr   r   r   z'unexpected-implied-end-tag-in-table-rowr@   r   )ztrzhtmlr   )r>   r   r@   rJ   r   r   )rB   r'   r'   r(   clearStackToTableRowContextO  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   |  j  j d d d S)Nr   r}  r   )r>   r  )rB   r'   r'   r(   ignoreEndTagTrU  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   |  j  j d j   d  S)Nr   )rJ   rG   r   )rB   r'   r'   r(   r   Y  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   \  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   _  s    z/getPhases.<locals>.InRowPhase.processCharactersc             S   sG   |  j    |  j j |  |  j j d |  j _ |  j j j t  d  S)Nr   )	rn  r>   r   rJ   rG   r_   rh  r   r   )rB   r   r'   r'   r(   rb  b  s    
z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr   )ro  endTagTrr.  )rB   r   rP  r'   r'   r(   rd  h  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r4  o  s    z+getPhases.<locals>.InRowPhase.startTagOtherc             S   sb   |  j    s? |  j   |  j j j   |  j j d |  j _ n |  j j sQ t	  |  j j
   d  S)Nr   )ro  rn  r>   r   r   rJ   rG   r_   rR   r   r   )rB   r   r'   r'   r(   rp  r  s    
z&getPhases.<locals>.InRowPhase.endTagTrc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr   )ro  rp  r.  )rB   r   rP  r'   r'   r(   rB  |  s    z)getPhases.<locals>.InRowPhase.endTagTablec             S   sD   |  j  j | d d d r3 |  j t d   | S|  j j   d  S)Nr@   r}  r   r   )r>   r  rp  r.  rJ   r   )rB   r   r'   r'   r(   rc    s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-end-tag-in-table-rowr@   )rJ   r   )rB   r   r'   r'   r(   rC    s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r6    s    z)getPhases.<locals>.InRowPhase.endTagOtherr   r   r   r   r  r   r   r   r   r   r   r   N)tdth)captioncolcolgrouptbodytfoottheadztr)rv  rw  rx  )zbodyrs  rt  ru  zhtmlrq  rr  )r9   r:   r;   r+  r   rn  ro  r   r   r   rb  rd  r4  rp  rB  rc  rC  r6  r   r7  r   r   r8  r   r'   )r   r'   r(   
InRowPhaseJ  s6   	
	 				ry  c                   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z e j d   j f d  e f g  Z e	 e _ e j d! e
 f d" e f d# e f g  Z e e _ d S)$zgetPhases.<locals>.InCellPhasec             S   s]   |  j  j d d d r. |  j t d   n+ |  j  j d d d rY |  j t d   d  S)Nr   r}  r   r   )r>   r  endTagTableCellr.  )rB   r'   r'   r(   	closeCell  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   |  j  j d j   d  S)Nr   )rJ   rG   r   )rB   r'   r'   r(   r     s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r     s    z0getPhases.<locals>.InCellPhase.processCharactersc             S   sa   |  j  j d d d s0 |  j  j d d d r> |  j   | S|  j j sP t  |  j j   d  S)Nr   r}  r   r   )r>   r  r{  rJ   rR   r   r   )rB   r   r'   r'   r(   rd    s    
z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r4    s    z,getPhases.<locals>.InCellPhase.startTagOtherc             S   s   |  j  j | d d d r |  j  j | d  |  j  j d j | d k r |  j j d d | d i  x= |  j  j j   } | j | d k rm Pqm Wn |  j  j j   |  j  j   |  j j	 d |  j _
 n |  j j d d | d i  d  S)	Nr@   r}  r   r   zunexpected-cell-end-tagr   zunexpected-end-tagr   )r>   r  r  r   r@   rJ   r   r   r  rG   r_   )rB   r   r   r'   r'   r(   rz    s    z.getPhases.<locals>.InCellPhase.endTagTableCellc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   rC    s    z+getPhases.<locals>.InCellPhase.endTagIgnorec             S   s;   |  j  j | d d d r* |  j   | S|  j j   d  S)Nr@   r}  r   )r>   r  r{  rJ   r   )rB   r   r'   r'   r(   endTagImply  s    
z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r6    s    z*getPhases.<locals>.InCellPhase.endTagOtherr   r   r  r   r   r   r   r   r   r   r   r   N)	captioncolcolgrouptbodytdtfootththeadtr)r  r  )zbodyr}  r~  r  zhtml)ztabler  r  r  r  )r9   r:   r;   r+  r   r{  r   r   rd  r4  rz  rC  r|  r6  r   r7  r   r   r8  r   r'   )r   r'   r(   InCellPhase  s(   	
 			r  c                   s-  e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z e j d   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 _ d! S)#z getPhases.<locals>.InSelectPhasec             S   sB   |  j  j d j d k r, |  j j d  n |  j j s> t  d  S)Nr   r   zeof-in-selectr   )r>   r   r@   rJ   r   rR   r   )rB   r'   r'   r(   r     s    z+getPhases.<locals>.InSelectPhase.processEOFc             S   s,   | d d k r d  S|  j  j | d  d  S)Nry   rv  )r>   r   )rB   r   r'   r'   r(   r     s    z2getPhases.<locals>.InSelectPhase.processCharactersc             S   s=   |  j  j d j d k r) |  j  j j   |  j  j |  d  S)Nr   r  r   )r>   r   r@   r   r   )rB   r   r'   r'   r(   startTagOption  s    z/getPhases.<locals>.InSelectPhase.startTagOptionc             S   sf   |  j  j d j d k r) |  j  j j   |  j  j d j d k rR |  j  j j   |  j  j |  d  S)Nr   r  r  r   r   )r>   r   r@   r   r   )rB   r   r'   r'   r(   startTagOptgroup	  s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc             S   s'   |  j  j d  |  j t d   d  S)Nzunexpected-select-in-selectr   )rJ   r   endTagSelectr.  )rB   r   r'   r'   r(   r  	  s    z/getPhases.<locals>.InSelectPhase.startTagSelectc             S   sU   |  j  j d  |  j j d d d r? |  j t d   | S|  j  j sQ t  d  S)Nzunexpected-input-in-selectr   r}  )rJ   r   r>   r  r  r.  rR   r   )rB   r   r'   r'   r(   r  	  s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   |  j  j d j |  S)Nr2  )rJ   rG   r   )rB   r   r'   r'   r(   rI  	  s    z/getPhases.<locals>.InSelectPhase.startTagScriptc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-start-tag-in-selectr@   )rJ   r   )rB   r   r'   r'   r(   r4  	  s    z.getPhases.<locals>.InSelectPhase.startTagOtherc             S   sI   |  j  j d j d k r, |  j  j j   n |  j j d d d i  d  S)Nr   r  zunexpected-end-tag-in-selectr@   r   )r>   r   r@   r   rJ   r   )rB   r   r'   r'   r(   endTagOption	  s    z-getPhases.<locals>.InSelectPhase.endTagOptionc             S   s   |  j  j d j d k rB |  j  j d j d k rB |  j  j j   |  j  j d	 j d k rn |  j  j j   n |  j j d d d i  d  S)
Nr   r  r  r  zunexpected-end-tag-in-selectr@   r   r   )r>   r   r@   r   rJ   r   )rB   r   r'   r'   r(   endTagOptgroup%	  s    z/getPhases.<locals>.InSelectPhase.endTagOptgroupc             S   s   |  j  j d d d rb |  j  j j   } x% | j d k rQ |  j  j j   } q- W|  j j   n |  j j st t  |  j j	   d  S)Nr   r}  )
r>   r  r   r   r@   rJ   ra   rR   r   r   )rB   r   r   r'   r'   r(   r  2	  s    z-getPhases.<locals>.InSelectPhase.endTagSelectc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-end-tag-in-selectr@   )rJ   r   )rB   r   r'   r'   r(   r6  =	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherr   r  r  r   r  r  rr  rQ  N)zinputzkeygenztextarea)r9   r:   r;   r+  r   r   r   r  r  r  r  rI  r4  r  r  r  r6  r   r7  r   r   r8  r   r'   )r   r'   r(   InSelectPhase  s4   								r  c            	   @   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 e j d e f g  Z e e _ e j d e	 f g  Z e
 e _ d S)z'getPhases.<locals>.InSelectInTablePhasec             S   s   |  j  j d j   d  S)Nr   )rJ   rG   r   )rB   r'   r'   r(   r   U	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   X	  s    z9getPhases.<locals>.InSelectInTablePhase.processCharactersc             S   s4   |  j  j d d | d i  |  j t d   | S)Nz5unexpected-table-element-start-tag-in-select-in-tabler@   r   )rJ   r   r6  r.  )rB   r   r'   r'   r(   r  [	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r4  `	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagOtherc             S   sT   |  j  j d d | d i  |  j j | d d d rP |  j t d   | Sd  S)Nz3unexpected-table-element-end-tag-in-select-in-tabler@   r}  r   r   )rJ   r   r>   r  r6  r.  )rB   r   r'   r'   r(   rB  c	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r6  i	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherr   r   r   r   r   r   r   r   N)captiontabletbodytfoottheadtrtdth)r  r  r  r  r  r  r  r  )r9   r:   r;   r+  r   r   r   r  r4  rB  r6  r   r7  r   r8  r   r'   r'   r'   r(   InSelectInTablePhaseR	  s   		r  c            -       s   e  Z d  Z e   Z e 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" d# d$ d% d& d' d( d) d* d+ d, g,  Z d- d.   Z   f d/ d0   Z d1 d2   Z	 d3 d4   Z
 d5 S)6z(getPhases.<locals>.InForeignContentPhaser  r  r  r   r/  r  r  rk  r)   r  rl  r  r  h1h2h3h4h5h6r   r  r  r  rm  rq  r  r2   r  r  r&   rp  r  r  r  spanr  r  subsupr   r  r  r  varc          H   S   s  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" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH i$ } | dI | k r | | dI | dI <d  S)JN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radialGradienttextpathtextPathr@   r'   )rB   r   replacementsr'   r'   r(   adjustSVGTagNames	  sL    z:getPhases.<locals>.InForeignContentPhase.adjustSVGTagNamesc                sf   | d d k r d | d <n5 |  j  j rR t d d   | d D  rR d |  j  _   j |  |  d  S)Nry   rv  u   �c             s   s   |  ] } | t  k Vq d  S)N)r   )r?   rw  r'   r'   r(   	<genexpr>	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rJ   rd   ry  r   )rB   r   )r   r'   r(   r   	  s    z:getPhases.<locals>.InForeignContentPhase.processCharactersc             S   s  |  j  j d } | d |  j k sV | d d k r t | d j    d d d h @r |  j j d d | d i  xm |  j  j d j |  j  j k r |  j j	 |  j  j d  r |  j j
 |  j  j d  r |  j  j j   qv W| S| j t d	 k r|  j j |  n0 | j t d
 k r=|  j |  |  j j |  |  j j |  | j | d <|  j  j |  | d r|  j  j j   d | d <d  S)Nr   r@   r  ry   colorfacesizez*unexpected-html-element-in-foreign-contentrh   r}   rl   r   Tr   r   r   r   r   )r>   r   breakoutElementssetkeysrJ   r   rl   r   rp   rq   r   r   r   r  r   r   r   )rB   r   r   r'   r'   r(   r   	  s.    #
z8getPhases.<locals>.InForeignContentPhase.processStartTagc             S   sJ  t  |  j j  d } |  j j d } | j j t  | d k r_ |  j j d d | d i  x | j j t  | d k r |  j j |  j j	 d k r |  j j j
   |  j j j |  j _ x. |  j j j   | k r |  j j s t  q Wd  } P| d 8} |  j j | } | j |  j j k r,qb qb |  j j j |  } Pqb W| S)Nr   r@   zunexpected-end-tagr:  r   )r   r>   r   r@   rn   r   rJ   r   r_   rG   rN  r   r   r   rl   r   r   )rB   r   	nodeIndexr   r   r'   r'   r(   r   	  s(    
z6getPhases.<locals>.InForeignContentPhase.processEndTagN)r9   r:   r;   r+  r   r   r  r  r   r   r   r'   )r   r'   r(   InForeignContentPhasex	  s   	)r  c               @   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z e j d e f g  Z e	 e _ e j d e
 f g  Z e e _ d S)z!getPhases.<locals>.AfterBodyPhasec             S   s   d  S)Nr'   )rB   r'   r'   r(   r   	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s!   |  j  j | |  j  j d  d  S)Nr   )r>   r   r   )rB   r   r'   r'   r(   r   	  s    z0getPhases.<locals>.AfterBodyPhase.processCommentc             S   s*   |  j  j d  |  j  j d |  j  _ | S)Nzunexpected-char-after-bodyr   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r   	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   	  s    z.getPhases.<locals>.AfterBodyPhase.startTagHtmlc             S   s7   |  j  j d d | d i  |  j  j d |  j  _ | S)Nzunexpected-start-tag-after-bodyr@   r   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r4  	  s    z/getPhases.<locals>.AfterBodyPhase.startTagOtherc             S   s9   |  j  j r |  j  j d  n |  j  j d |  j  _ d  S)Nz'unexpected-end-tag-after-body-innerhtmlafterAfterBody)rJ   rR   r   rG   r_   )rB   r@   r'   r'   r(   r  
  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc             S   s7   |  j  j d d | d i  |  j  j d |  j  _ | S)Nzunexpected-end-tag-after-bodyr@   r   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r6  

  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherr   N)r9   r:   r;   r+  r   r   r   r   r   r4  r  r6  r   r7  r   r8  r   r'   r'   r'   r(   AfterBodyPhase	  s   		r  c                   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z e j d   j f d e f d e f d e	 f g  Z e
 e _ e j d e f g  Z e e _ d S)z"getPhases.<locals>.InFramesetPhasec             S   sB   |  j  j d j d k r, |  j j d  n |  j j s> t  d  S)Nr   r   zeof-in-framesetr   )r>   r   r@   rJ   r   rR   r   )rB   r'   r'   r(   r   
  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   |  j  j d  d  S)Nzunexpected-char-in-frameset)rJ   r   )rB   r   r'   r'   r(   r   "
  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   |  j  j |  d  S)N)r>   r   )rB   r   r'   r'   r(   r]  %
  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s$   |  j  j |  |  j  j j   d  S)N)r>   r   r   r   )rB   r   r'   r'   r(   startTagFrame(
  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   startTagNoframes,
  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s!   |  j  j d d | d i  d  S)Nz unexpected-start-tag-in-framesetr@   )rJ   r   )rB   r   r'   r'   r(   r4  /
  s    z0getPhases.<locals>.InFramesetPhase.startTagOtherc             S   s|   |  j  j d j d k r, |  j j d  n |  j  j j   |  j j rx |  j  j d j d k rx |  j j d |  j _ d  S)Nr   r   z)unexpected-frameset-in-frameset-innerhtmlr   afterFramesetr   r   )	r>   r   r@   rJ   r   r   rR   rG   r_   )rB   r   r'   r'   r(   endTagFrameset3
  s    z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s!   |  j  j d d | d i  d  S)Nzunexpected-end-tag-in-framesetr@   )rJ   r   )rB   r   r'   r'   r(   r6  ?
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherr   r   r  rN  N)r9   r:   r;   r+  r   r   r   r]  r  r  r4  r  r6  r   r7  r   r   r8  r   r'   )r   r'   r(   InFramesetPhase
  s$   				r  c                   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 e j d   j f d e f g  Z e e _ e j d e	 f g  Z e
 e _ d S)z%getPhases.<locals>.AfterFramesetPhasec             S   s   d  S)Nr'   )rB   r'   r'   r(   r   T
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   |  j  j d  d  S)Nzunexpected-char-after-frameset)rJ   r   )rB   r   r'   r'   r(   r   X
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   |  j  j d j |  S)Nr2  )rJ   rG   r   )rB   r   r'   r'   r(   r  [
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc             S   s!   |  j  j d d | d i  d  S)Nz#unexpected-start-tag-after-framesetr@   )rJ   r   )rB   r   r'   r'   r(   r4  ^
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   |  j  j d |  j  _ d  S)NafterAfterFrameset)rJ   rG   r_   )rB   r   r'   r'   r(   r  b
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s!   |  j  j d d | d i  d  S)Nz!unexpected-end-tag-after-framesetr@   )rJ   r   )rB   r   r'   r'   r(   r6  e
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherr   rN  N)r9   r:   r;   r+  r   r   r   r  r4  r  r6  r   r7  r   r   r8  r   r'   )r   r'   r(   AfterFramesetPhaseP
  s   		r  c               @   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z e j d e	 f g  Z e
 e _ d S)z&getPhases.<locals>.AfterAfterBodyPhasec             S   s   d  S)Nr'   )rB   r'   r'   r(   r   w
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   |  j  j | |  j  j  d  S)N)r>   r   r   )rB   r   r'   r'   r(   r   z
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   }
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc             S   s*   |  j  j d  |  j  j d |  j  _ | S)Nzexpected-eof-but-got-charr   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r   
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc             S   s7   |  j  j d d | d i  |  j  j d |  j  _ | S)Nzexpected-eof-but-got-start-tagr@   r   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r4  
  s    z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc             S   s7   |  j  j d d | d i  |  j  j d |  j  _ | S)Nzexpected-eof-but-got-end-tagr@   r   )rJ   r   rG   r_   )rB   r   r'   r'   r(   r   
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagr   N)r9   r:   r;   r+  r   r   r   r   r   r   r4  r   r   r7  r   r8  r'   r'   r'   r(   AfterAfterBodyPhaset
  s   	r  c               @   s   e  Z d  Z e   Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z	 d d   Z
 d d   Z d d   Z e j d e	 f d e
 f g  Z e e _ d S)z*getPhases.<locals>.AfterAfterFramesetPhasec             S   s   d  S)Nr'   )rB   r'   r'   r(   r   
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   |  j  j | |  j  j  d  S)N)r>   r   r   )rB   r   r'   r'   r(   r   
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   |  j  j d  d  S)Nzexpected-eof-but-got-char)rJ   r   )rB   r   r'   r'   r(   r   
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   |  j  j d j |  S)Nr   )rJ   rG   r   )rB   r   r'   r'   r(   r   
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   |  j  j d j |  S)Nr2  )rJ   rG   r   )rB   r   r'   r'   r(   startTagNoFrames
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s!   |  j  j d d | d i  d  S)Nzexpected-eof-but-got-start-tagr@   )rJ   r   )rB   r   r'   r'   r(   r4  
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc             S   s!   |  j  j d d | d i  d  S)Nzexpected-eof-but-got-end-tagr@   )rJ   r   )rB   r   r'   r'   r(   r   
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagr   rN  N)r9   r:   r;   r+  r   r   r   r   r   r   r  r4  r   r   r7  r   r8  r'   r'   r'   r(   AfterAfterFramesetPhase
  s   		r  rV   rU   r   r2  rF  rJ  r   r   r   r:  r   r   r   r   r   r   r  r~   r  r   r  r  r  )r   )rH   rX   r   r,  r0  r9  rW  r[  r`  r8  rJ  r[  r_  rm  ry  r  r  r  r  r  r  r  r  r  r'   )rc  rL  r   r(   rF     sf    %H%-f?B  !/F@bYLc&r.8$%&rF   c                s[   t  |  d  t     @} | rW t |  d    f d d   |  d j   D  |  d <d  S)Nry   c             3   s-   |  ]# \ } }   j  | |  | f Vq d  S)N)r   )r?   kv)r  r'   r(   r  
  s   z$adjust_attributes.<locals>.<genexpr>)r   r0   r,   )r   r  Zneeds_adjustmentr'   )r  r(   r   
  s    r   ru   Fc             C   s2   | d  k r i  } d t  | d |  d | d | i S)Nr0   r@   ry   r   )r   )r@   r0   rm   r   r'   r'   r(   r.  
  s    r.  c               @   s   e  Z d  Z d Z d S)rx   zError in parsed documentN)r9   r:   r;   r   r'   r'   r'   r(   rx   
  s   rx   ),
__future__r   r   r   Zpip._vendor.sixr   r   r.   r   r   r	   r
   Ztreebuilders.baser   r   	constantsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r+   r=   r  r    memoizerF   r   r.  	Exceptionrx   r'   r'   r'   r(   <module>   s6   j 7         W