
^Vc                @   s  d  d l  m Z m Z m Z d  d l 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 d d l m Z m Z d d l m Z d d l m Z d d l m Z m Z d d l m Z m Z m Z d d l m Z m Z d d l m Z d d l m Z d d d d d  Z d d d d d d  Z d d   Z Gd d   d e   Z! d d   Z" d  d d! d" d#  Z# Gd$ d%   d% e$  Z% d S)&    )absolute_importdivisionunicode_literals)with_metaclassN   )inputstream)	tokenizer)treebuilders)Marker)utils)	constants)spaceCharactersasciiUpper2Lower)specialElements)headingElements)cdataElementsrcdataElements)
tokenTypesReparseException
namespaces)htmlIntegrationPointElements"mathmlTextIntegrationPointElements)adjustForeignAttributes)EetreeTc             C   s4   t  j |  } t | d | } | j |  d | S)z.Parse a string or file-like object into a treenamespaceHTMLElementsencoding)r	   getTreeBuilder
HTMLParserparse)doctreebuilderr   r   tbp r$   ?/tmp/pip-build-9m6vxulb/pip/pip/_vendor/html5lib/html5parser.pyr      s    r   divc             C   s:   t  j |  } t | d | } | j |  d | d | S)Nr   	containerr   )r	   r   r   parseFragment)r    r'   r!   r   r   r"   r#   r$   r$   r%   r(       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^   xE | j    D]7 \ } } t | t j  r:   |  } n  | | | <q Wt j |  | | |  S)N)items
isinstancetypesFunctionTypetype__new__)meta	classnamebases	classDictattributeName	attribute)functionr$   r%   r.   )   s
    z5method_decorator_metaclass.<locals>.Decorated.__new__N)__name__
__module____qualname__r.   r$   )r5   r$   r%   	Decorated(   s   r9   )r-   )r5   r9   r$   )r5   r%   method_decorator_metaclass'   s    r:   c               @   s0  e  Z d  Z d Z d e j d d d d d  Z d d 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 d d d  Z d d d d d d  Z d i  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)+r   zZHTML parser. Generates a tree structure from a stream of (possibly
        malformed) HTMLNFTc                sz   |   _  | d k r' t j d  } n  | |    _ |   _ g    _ t   f d d   t |  j   D    _	 d S)a  
        strict - raise an exception when a parse error is encountered

        tree - a treebuilder class controlling the type of tree that will be
        returned. Built in treebuilders can be accessed through
        html5lib.treebuilders.getTreeBuilder(treeType)

        tokenizer - a class that provides a stream of tokens to the treebuilder.
        This may be replaced for e.g. a sanitizer which converts some tags to
        text
        Nr   c                s.   g  |  ]$ \ } } | |     j   f  q Sr$   )tree).0namecls)selfr$   r%   
<listcomp>N   s   	 z'HTMLParser.__init__.<locals>.<listcomp>)
strictr	   r   r;   tokenizer_classerrorsdict	getPhasesr)   phases)r?   r;   r   rA   r   debugr$   )r?   r%   __init__7   s    			zHTMLParser.__init__r&   c             K   s   | |  _  | |  _ |  j | d | d | d | d |  | |  _ |  j   x2 y |  j   PWqL t k
 ry |  j   YqL XqL Wd  S)Nr   	parseMeta
useChardetparser)innerHTMLModer'   rB   r   resetmainLoopr   )r?   stream	innerHTMLr'   r   rI   rJ   kwargsr$   r$   r%   _parseQ   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;   rM   firstStartTagrC   log
compatModerL   r'   lowerrP   r   r   rcdataStatestater   rawtextStateplaintextStaterF   phaseinsertHtmlElementresetInsertionMode	lastPhasebeforeRCDataPhase
framesetOK)r?   r$   r$   r%   rM   c   s*    								zHTMLParser.resetc             C   s$   t  |  d  s d S|  j j j d S)zThe name of the character encoding
        that was used to decode the input stream,
        or :obj:`None` if that is not determined yet.

        r   Nr   )hasattrr   rO   charEncoding)r?   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mathmlr   	text/htmlapplication/xhtml+xml)rh   ri   )r=   	namespacer   
attributes	translater   r   )r?   elementr$   r$   r%   isHTMLIntegrationPoint   s    z!HTMLParser.isHTMLIntegrationPointc             C   s   | j  | j f t k S)N)rj   r=   r   )r?   rm   r$   r$   r%   isMathMLTextIntegrationPoint   s    z'HTMLParser.isMathMLTextIntegrationPointc             C   s*  t  d } t  d } t  d } t  d } t  d } t  d } t  d } x|  j   D]y} | }	 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  }	 qb t |  j j  d k s| |  j j	 k s|  j
 |
  rl| | k rZ| d t d d g  k s| | | f k s| t d k r| d k r| d d k s|  j |
  r| | | | f k r|  j } n |  j d } | | k r| j |	  }	 qb | | k r| j |	  }	 qb | | k r/| j |	  }	 qb | | k rM| j |	  }	 qb | | k rk| j |	  }	 qb | | k rb | j |	  }	 qb qb W| | k rS | d rS | d rS |  j d i | d d 6 qS qS Wd } g  } xG | r%| j |  j  |  j j   } | r|  j | k s"t  qqWd  S)N
CharactersSpaceCharactersStartTagEndTagCommentDoctype
ParseErrorr   r-   datadatavarsr   r=   mglyph
malignmarkrg   zannotation-xmlsvginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   normalizedTokensr;   openElementsrj   r=   
parseErrorgetlendefaultNamespacero   	frozensetr   rn   r^   rF   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOFAssertionError)r?   CharactersTokenSpaceCharactersTokenStartTagTokenEndTagTokenCommentTokenDoctypeTokenParseErrorTokentoken	new_tokencurrentNodecurrentNodeNamespacecurrentNodeNamer-   r^   	reprocessrF   r$   r$   r%   rN      sj    






"
 			zHTMLParser.mainLoopc             c   s&   x |  j  D] } |  j |  Vq
 Wd  S)N)r   normalizeToken)r?   r   r$   r$   r%   r      s    zHTMLParser.normalizedTokensc          
   C   s2   |  j  | d d d | d | d | |  j j   S)af  Parse a HTML document into a well-formed tree

        stream - a filelike 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)
        rP   Fr   rI   rJ   )rR   r;   getDocument)r?   rO   r   rI   rJ   r$   r$   r%   r      s    
zHTMLParser.parsec             C   s)   |  j  | d d | d | |  j j   S)a  Parse a HTML fragment into a well-formed tree fragment

        container - name of the element we're setting the innerHTML property
        if set to None, default to 'div'

        stream - a filelike 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)
        Tr'   r   )rR   r;   getFragment)r?   rO   r'   r   rI   rJ   r$   r$   r%   r(      s    zHTMLParser.parseFragmentzXXX-undefined-errorc             C   sI   |  j  j |  j j j   | | f  |  j rE t t | |   n  d  S)N)rC   r   r   rO   positionrA   rv   r   )r?   	errorcoderx   r$   r$   r%   r      s    %	zHTMLParser.parseErrorc             C   s<   | d t  d k r8 t | d d d d   | d <n  | S)z3 HTML5 specific normalizations to the token stream r-   rr   rw   Nr   r   )r   rD   )r?   r   r$   r$   r%   r     s    $zHTMLParser.normalizeTokenc             C   sb   i d d 6} xN | j    D]@ \ } } | | d k r | d | | d | <| d | =q q Wd  S)NdefinitionURLdefinitionurlrw   )r)   )r?   r   replacementskvr$   r$   r%   adjustMathMLAttributes  s
    z!HTMLParser.adjustMathMLAttributesc             C   s  i> d d 6d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d! d" 6d# d$ 6d% d& 6d' d( 6d) d* 6d+ d, 6d- d. 6d/ d0 6d1 d2 6d3 d4 6d5 d6 6d7 d8 6d9 d: 6d; d< 6d= d> 6d? d@ 6dA dB 6dC dD 6dE dF 6dG dH 6dI dJ 6dK dL 6dM dN 6dO dP 6dQ dR 6dS dT 6dU dV 6dW dX 6dY dZ 6d[ d\ 6d] d^ 6d_ d` 6da db 6dc dd 6de df 6dg dh 6di dj 6dk dl 6dm dn 6do dp 6dq dr 6ds dt 6du dv 6dw dx 6dy dz 6d{ d| 6} xX t  | d} j    D]@ } | | k r| | } | d} | | d} | <| d} | =qqWd  S)~Nr3   attributenameattributeTypeattributetypebaseFrequencybasefrequencybaseProfilebaseprofilecalcModecalcmodeclipPathUnitsclippathunitscontentScriptTypecontentscripttypecontentStyleTypecontentstyletypediffuseConstantdiffuseconstantedgeModeedgemodeexternalResourcesRequiredexternalresourcesrequired	filterRes	filterresfilterUnitsfilterunitsglyphRefglyphrefgradientTransformgradienttransformgradientUnitsgradientunitskernelMatrixkernelmatrixkernelUnitLengthkernelunitlength	keyPoints	keypoints
keySplines
keysplineskeyTimeskeytimeslengthAdjustlengthadjustlimitingConeAnglelimitingconeanglemarkerHeightmarkerheightmarkerUnitsmarkerunitsmarkerWidthmarkerwidthmaskContentUnitsmaskcontentunits	maskUnits	maskunits
numOctaves
numoctaves
pathLength
pathlengthpatternContentUnitspatterncontentunitspatternTransformpatterntransformpatternUnitspatternunits	pointsAtX	pointsatx	pointsAtY	pointsaty	pointsAtZ	pointsatzpreserveAlphapreservealphapreserveAspectRatiopreserveaspectratioprimitiveUnitsprimitiveunitsrefXrefxrefYrefyrepeatCountrepeatcount	repeatDur	repeatdurrequiredExtensionsrequiredextensionsrequiredFeaturesrequiredfeaturesspecularConstantspecularconstantspecularExponentspecularexponentspreadMethodspreadmethodstartOffsetstartoffsetstdDeviationstddeviationstitchTilesstitchtilessurfaceScalesurfacescalesystemLanguagesystemlanguagetableValuestablevaluestargetXtargetxtargetYtargety
textLength
textlengthviewBoxviewbox
viewTarget
viewtargetxChannelSelectorxchannelselectoryChannelSelectorychannelselector
zoomAndPan
zoomandpanrw   )listkeys)r?   r   r   originalNamesvgNamer$   r$   r%   adjustSVGAttributes  s    

zHTMLParser.adjustSVGAttributesc             C   s_   t  } xR | d j   D]@ } | | k r | | } | d | | d | <| d | =q q Wd  S)Nrw   )adjustForeignAttributesMapr$  )r?   r   r   r%  foreignNamer$   r$   r%   r   \  s    
z"HTMLParser.adjustForeignAttributesc             C   s   |  j  j   d  S)N)rK   r^   )r?   r   r$   r$   r%   reparseTokenNormale  s    zHTMLParser.reparseTokenNormalc             C   s]  d } i d d 6d d 6d d 6d d 6d	 d
 6d	 d 6d	 d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6} x |  j  j d  d  d  D] } | j } d  } | |  j  j d k r |  j s t  d } |  j } n  | d k r |  j s t  n  | r| j |  j  j k rq n  | | k r5|  j | | } Pq | r |  j d } Pq q W| |  _ d  S)NFinSelectselectinCelltdthinRowtrinTableBodytbodytheadtfoot	inCaptioncaptioninColumnGroupcolgroupinTabletableinBodyheadbody
inFramesetframeset
beforeHeadhtmlr   r   Tr   )zselectzcolgroupzheadzhtml)	r;   r   r=   rP   r   rj   r   rF   r^   )r?   lastnewModesnodenodeName	new_phaser$   r$   r%   r`   h  sD    
 	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)zYGeneric RCDATA/RAWTEXT Parsing algorithm
        contentType - RCDATA or RAWTEXT
        RAWTEXTRCDATAtextN)zRAWTEXTzRCDATA)
r   r;   insertElementr   r\   r[   rZ   r^   originalPhaserF   )r?   r   contentTyper$   r$   r%   parseRCDataRawtext  s    zHTMLParser.parseRCDataRawtext)r6   r7   r8   __doc__r   HTMLTokenizerrH   rR   rM   propertyrf   rn   ro   rN   r   r   r(   r   r   r   r'  r   r*  r`   rN  r$   r$   r$   r%   r   3   s,   	"
@G	,r   c                s7  d d   } d d   } Gd d   d t  | |  |      Gd 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    } 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*    } G  f d+ d,   d,    } G  f d- d.   d.    } G  f d/ d0   d0    } G  f d1 d2   d2    } i | d3 6| d4 6| d5 6| d6 6| d7 6| d8 6|	 d9 6|
 d: 6| d; 6| d< 6| d= 6| d> 6| d? 6| d@ 6| dA 6| dB 6| dC 6| dD 6| dE 6| dF 6| dG 6| dH 6S)INc                s;   t  d d   t j j   D      f d d   } | S)z4Logger that records which phase processes each tokenc             s   s!   |  ] \ } } | | f Vq d  S)Nr$   )r<   keyvaluer$   r$   r%   	<genexpr>  s    z)getPhases.<locals>.log.<locals>.<genexpr>c                s     j  j d  r t |  d k r | d } y i  | d d 6} Wn   Yn X| d t j k ry | d | d <n  |  j j j |  j j j	 j  |  j j
 j j  |  j j    j  | f    |  | |  S  |  | |  Sd  S)Nprocessr   r-   r=   )r6   
startswithr   r   tagTokenTypesrK   rW   r   r   r[   r^   	__class__)r?   argsrQ   r   info)r5   
type_namesr$   r%   wrapped  s    $
	
z'getPhases.<locals>.log.<locals>.wrapped)rD   r   r   r)   )r5   r\  r$   )r5   r[  r%   rW     s    zgetPhases.<locals>.logc             S   s   |  r t  |  St Sd  S)N)r:   r-   )use_metaclassmetaclass_funcr$   r$   r%   getMetaclass  s    
zgetPhases.<locals>.getMetaclassc               @   s   e  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
        c             S   s   | |  _  | |  _ d  S)N)rK   r;   )r?   rK   r;   r$   r$   r%   rH     s    	z!getPhases.<locals>.Phase.__init__c             S   s
   t   d  S)N)NotImplementedError)r?   r$   r$   r%   r     s    z#getPhases.<locals>.Phase.processEOFc             S   s!   |  j  j | |  j  j d  d  S)Nr   r   )r;   insertCommentr   )r?   r   r$   r$   r%   r     s    z'getPhases.<locals>.Phase.processCommentc             S   s   |  j  j d  d  S)Nzunexpected-doctype)rK   r   )r?   r   r$   r$   r%   r     s    z'getPhases.<locals>.Phase.processDoctypec             S   s   |  j  j | d  d  S)Nrw   )r;   
insertText)r?   r   r$   r$   r%   r     s    z*getPhases.<locals>.Phase.processCharactersc             S   s   |  j  j | d  d  S)Nrw   )r;   rb  )r?   r   r$   r$   r%   r     s    z/getPhases.<locals>.Phase.processSpaceCharactersc             S   s   |  j  | d |  S)Nr=   )startTagHandler)r?   r   r$   r$   r%   r     s    z(getPhases.<locals>.Phase.processStartTagc             S   s   |  j  j r0 | d d k r0 |  j  j d  n  xQ | d j   D]? \ } } | |  j j d j k rA | |  j j d j | <qA qA Wd |  j  _ d  S)Nr=   rB  znon-html-rootrw   r   F)rK   rV   r   r)   r;   r   rk   )r?   r   attrrS  r$   r$   r%   startTagHtml  s    z%getPhases.<locals>.Phase.startTagHtmlc             S   s   |  j  | d |  S)Nr=   )endTagHandler)r?   r   r$   r$   r%   r     s    z&getPhases.<locals>.Phase.processEndTagN)r6   r7   r8   rO  rH   r   r   r   r   r   r   re  r   r$   r$   r$   r%   Phase  s   
rg  c               @   sp   e  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 S)zgetPhases.<locals>.InitialPhasec             S   s   d  S)Nr$   )r?   r   r$   r$   r%   r     s    z6getPhases.<locals>.InitialPhase.processSpaceCharactersc             S   s   |  j  j | |  j  j  d  S)N)r;   ra  document)r?   r   r$   r$   r%   r     s    z.getPhases.<locals>.InitialPhase.processCommentc          8   S   su  | d } | d } | d } | d } | d k sX | d  k	 sX | d  k	 rk | d k rk |  j  j d  n  | d  k r d } n  |  j j |  | d k r | j t  } n  | s| d d k s| j dJ  s| dK k s| j dL  r | d  k s| r"| j   dD k r"dE |  j  _ n9 | j dM  sL| j dN  r[| d  k	 r[dH |  j  _ n  |  j  j	 dI |  j  _
 d  S)ONr=   publicIdsystemIdcorrectrB  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 quirksrT   )7rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  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  )rK   r   r;   insertDoctyperl   r   rV  rY   rX   rF   r^   )r?   r   r=   ri  rj  rk  r$   r$   r%   r     s    



	                                                      	  	 	 	 	z.getPhases.<locals>.InitialPhase.processDoctypec             S   s&   d |  j  _ |  j  j d |  j  _ d  S)Nr  rT   )rK   rX   rF   r^   )r?   r$   r$   r%   anythingElseV  s    z,getPhases.<locals>.InitialPhase.anythingElsec             S   s   |  j  j d  |  j   | S)Nzexpected-doctype-but-got-chars)rK   r   r  )r?   r   r$   r$   r%   r   Z  s    
z1getPhases.<locals>.InitialPhase.processCharactersc             S   s,   |  j  j d i | d d 6 |  j   | S)Nz"expected-doctype-but-got-start-tagr=   )rK   r   r  )r?   r   r$   r$   r%   r   _  s    
z/getPhases.<locals>.InitialPhase.processStartTagc             S   s,   |  j  j d i | d d 6 |  j   | S)Nz expected-doctype-but-got-end-tagr=   )rK   r   r  )r?   r   r$   r$   r%   r   e  s    
z-getPhases.<locals>.InitialPhase.processEndTagc             S   s   |  j  j d  |  j   d S)Nzexpected-doctype-but-got-eofT)rK   r   r  )r?   r$   r$   r%   r   k  s    
z*getPhases.<locals>.InitialPhase.processEOFN)r6   r7   r8   r   r   r   r  r   r   r   r   r$   r$   r$   r%   InitialPhase  s   `r  c               @   sd   e  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 S)z"getPhases.<locals>.BeforeHtmlPhasec             S   s3   |  j  j t d d   |  j j d |  j _ d  S)NrB  rr   rA  )r;   
insertRootimpliedTagTokenrK   rF   r^   )r?   r$   r$   r%   r_   r  s    z4getPhases.<locals>.BeforeHtmlPhase.insertHtmlElementc             S   s   |  j    d S)NT)r_   )r?   r$   r$   r%   r   w  s    
z-getPhases.<locals>.BeforeHtmlPhase.processEOFc             S   s   |  j  j | |  j  j  d  S)N)r;   ra  rh  )r?   r   r$   r$   r%   r   {  s    z1getPhases.<locals>.BeforeHtmlPhase.processCommentc             S   s   d  S)Nr$   )r?   r   r$   r$   r%   r   ~  s    z9getPhases.<locals>.BeforeHtmlPhase.processSpaceCharactersc             S   s   |  j    | S)N)r_   )r?   r   r$   r$   r%   r     s    
z4getPhases.<locals>.BeforeHtmlPhase.processCharactersc             S   s-   | d d k r d |  j  _ n  |  j   | S)Nr=   rB  T)rK   rV   r_   )r?   r   r$   r$   r%   r     s    
z2getPhases.<locals>.BeforeHtmlPhase.processStartTagc             S   sC   | d d k r1 |  j  j d i | d d 6 n |  j   | Sd  S)Nr=   r=  r>  rB  brzunexpected-end-tag-before-html)zheadzbodyzhtmlzbr)rK   r   r_   )r?   r   r$   r$   r%   r     s
    
z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)
r6   r7   r8   r_   r   r   r   r   r   r   r$   r$   r$   r%   BeforeHtmlPhasep  s   r  c                   s   e  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 S)z"getPhases.<locals>.BeforeHeadPhasec                s}     j  |  | |  t j d |  j f d |  j f g  |  _ |  j |  j _ t j d |  j f g  |  _	 |  j
 |  j	 _ d  S)NrB  r=  r>  r  )zheadzbodyzhtmlzbr)rH   r   MethodDispatcherre  startTagHeadrc  startTagOtherdefaultendTagImplyHeadrf  endTagOther)r?   rK   r;   )rg  r$   r%   rH     s    z+getPhases.<locals>.BeforeHeadPhase.__init__c             S   s   |  j  t d d   d S)Nr=  rr   T)r  r  )r?   r$   r$   r%   r     s    z-getPhases.<locals>.BeforeHeadPhase.processEOFc             S   s   d  S)Nr$   )r?   r   r$   r$   r%   r     s    z9getPhases.<locals>.BeforeHeadPhase.processSpaceCharactersc             S   s   |  j  t d d   | S)Nr=  rr   )r  r  )r?   r   r$   r$   r%   r     s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   re    s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s@   |  j  j |  |  j  j d |  j  _ |  j j d |  j _ d  S)Nr   inHeadr   )r;   rK  r   headPointerrK   rF   r^   )r?   r   r$   r$   r%   r    s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   |  j  t d d   | S)Nr=  rr   )r  r  )r?   r   r$   r$   r%   r    s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   |  j  t d d   | S)Nr=  rr   )r  r  )r?   r   r$   r$   r%   r    s    z2getPhases.<locals>.BeforeHeadPhase.endTagImplyHeadc             S   s"   |  j  j d i | d d 6 d  S)Nzend-tag-after-implied-rootr=   )rK   r   )r?   r   r$   r$   r%   r    s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r6   r7   r8   rH   r   r   r   re  r  r  r  r  r$   )rg  r$   r%   BeforeHeadPhase  s   r  c                   s   e  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 S) zgetPhases.<locals>.InHeadPhasec          
      s     j  |  | |  t j d |  j f d |  j f d |  j f d |  j f d |  j f d |  j f d |  j	 f g  |  _
 |  j |  j
 _ t j d |  j f d |  j f g  |  _ |  j |  j _ d  S)NrB  titlenoscriptnoframesstylescriptbasebasefontbgsoundcommandlinkr/   r=  r  r>  )znoscriptznoframeszstyle)zbasezbasefontzbgsoundzcommandzlink)zbrzhtmlzbody)rH   r   r  re  startTagTitlestartTagNoScriptNoFramesStylestartTagScriptstartTagBaseLinkCommandstartTagMetar  rc  r  r  
endTagHeadendTagHtmlBodyBrrf  r  )r?   rK   r;   )rg  r$   r%   rH     s    	z'getPhases.<locals>.InHeadPhase.__init__c             S   s   |  j    d S)NT)r  )r?   r$   r$   r%   r     s    
z)getPhases.<locals>.InHeadPhase.processEOFc             S   s   |  j    | S)N)r  )r?   r   r$   r$   r%   r     s    
z0getPhases.<locals>.InHeadPhase.processCharactersc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   re    s    z+getPhases.<locals>.InHeadPhase.startTagHtmlc             S   s   |  j  j d  d  S)Nz!two-heads-are-not-better-than-one)rK   r   )r?   r   r$   r$   r%   r    s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s.   |  j  j |  |  j  j j   d | d <d  S)NTr~   )r;   rK  r   pop)r?   r   r$   r$   r%   r    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  q d | k r d | k r | d j	   d	 k r t
 j | d j d
   } t
 j |  } | j   } |  j j j j |  q n  d  S)NTr~   rw   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r;   rK  r   r  rK   r   rO   re   changeEncodingrY   r   EncodingBytesencodeContentAttrParserr   )r?   r   rk   rw   rK   codecr$   r$   r%   r    s    

z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   |  j  j | d  d  S)NrI  )rK   rN  )r?   r   r$   r$   r%   r     s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   |  j  j | d  d  S)NrH  )rK   rN  )r?   r   r$   r$   r%   r    s    z<getPhases.<locals>.InHeadPhase.startTagNoScriptNoFramesStylec             S   sT   |  j  j |  |  j j j |  j j _ |  j j |  j _ |  j j d |  j _ d  S)NrJ  )	r;   rK  rK   r   scriptDataStater[   r^   rL  rF   )r?   r   r$   r$   r%   r    s    z-getPhases.<locals>.InHeadPhase.startTagScriptc             S   s   |  j    | S)N)r  )r?   r   r$   r$   r%   r    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)rK   r;   r   r  r=   r   rF   r^   )r?   r   rE  r$   r$   r%   r    s    "z)getPhases.<locals>.InHeadPhase.endTagHeadc             S   s   |  j    | S)N)r  )r?   r   r$   r$   r%   r    s    
z/getPhases.<locals>.InHeadPhase.endTagHtmlBodyBrc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tagr=   )rK   r   )r?   r   r$   r$   r%   r    s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   |  j  t d   d  S)Nr=  )r  r  )r?   r$   r$   r%   r    s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r6   r7   r8   rH   r   r   re  r  r  r  r  r  r  r  r  r  r  r  r$   )rg  r$   r%   InHeadPhase  s   r  c                   s   e  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 S)z!getPhases.<locals>.AfterHeadPhasec                s     j  |  | |  t j d |  j f d |  j f d |  j f d |  j f d |  j f g  |  _ |  j	 |  j _
 t j d |  j f g  |  _ |  j |  j _
 d  S)NrB  r>  r@  r  r  r  r  r/   r  r  r  r  r=  r  )	zbasezbasefontzbgsoundzlinkzmetaznoframeszscriptzstyleztitle)zbodyzhtmlzbr)rH   r   r  re  startTagBodystartTagFramesetstartTagFromHeadr  rc  r  r  r  rf  r  )r?   rK   r;   )rg  r$   r%   rH   %  s     		z*getPhases.<locals>.AfterHeadPhase.__init__c             S   s   |  j    d S)NT)r  )r?   r$   r$   r%   r   6  s    
z,getPhases.<locals>.AfterHeadPhase.processEOFc             S   s   |  j    | S)N)r  )r?   r   r$   r$   r%   r   :  s    
z3getPhases.<locals>.AfterHeadPhase.processCharactersc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   re  >  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s6   d |  j  _ |  j j |  |  j  j d |  j  _ d  S)NFr<  )rK   rc   r;   rK  rF   r^   )r?   r   r$   r$   r%   r  A  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s*   |  j  j |  |  j j d |  j _ d  S)Nr?  )r;   rK  rK   rF   r^   )r?   r   r$   r$   r%   r  F  s    z2getPhases.<locals>.AfterHeadPhase.startTagFramesetc             S   s   |  j  j d i | d d 6 |  j j j |  j j  |  j  j d j |  xG |  j j d  d  d  D], } | j d k rh |  j j j	 |  Pqh qh Wd  S)Nz#unexpected-start-tag-out-of-my-headr=   r  r   r=  r   )
rK   r   r;   r   r   r  rF   r   r=   remove)r?   r   rE  r$   r$   r%   r  J  s     z2getPhases.<locals>.AfterHeadPhase.startTagFromHeadc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-start-tagr=   )rK   r   )r?   r   r$   r$   r%   r  T  s    z.getPhases.<locals>.AfterHeadPhase.startTagHeadc             S   s   |  j    | S)N)r  )r?   r   r$   r$   r%   r  W  s    
z/getPhases.<locals>.AfterHeadPhase.startTagOtherc             S   s   |  j    | S)N)r  )r?   r   r$   r$   r%   r  [  s    
z2getPhases.<locals>.AfterHeadPhase.endTagHtmlBodyBrc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tagr=   )rK   r   )r?   r   r$   r$   r%   r  _  s    z-getPhases.<locals>.AfterHeadPhase.endTagOtherc             S   s?   |  j  j t d d   |  j j d |  j _ d |  j _ d  S)Nr>  rr   r<  T)r;   rK  r  rK   rF   r^   rc   )r?   r$   r$   r%   r  b  s    z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r6   r7   r8   rH   r   r   re  r  r  r  r  r  r  r  r  r$   )rg  r$   r%   AfterHeadPhase$  s   
r  c                   sn  e  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 d/ d0   Z d1 d2   Z d3 d4   Z d5 d6   Z d7 d8   Z d9 d:   Z d; d<   Z  d= d>   Z! d? d@   Z" dA dB   Z# dC dD   Z$ dE dF   Z% dG dH   Z& dI dJ   Z' dK dL   Z( dM dN   Z) dO dP   Z* dQ dR   Z+ dS dT   Z, dU dV   Z- dW dX   Z. dY dZ   Z/ d[ d\   Z0 d] d^   Z1 d_ d`   Z2 da db   Z3 dc dd   Z4 de S)fzgetPhases.<locals>.InBodyPhasec          +      s]    j  |  | |  |  j |  _ t j d |  j f dd |  j f d |  j f d |  j f de |  j	 f t
 |  j f df |  j f d& |  j f dg |  j f d* |  j f d+ |  j f dh |  j f d8 |  j f d9 |  j f di |  j f d= |  j f d> |  j f dj |  j f dk |  j f dH |  j f dI |  j f dJ |  j f dK |  j f dL |  j f dM |  j f dl |  j f dQ |  j  f dm |  j! f dn |  j" f dV |  j# f dW |  j$ f do |  j% f g   |  _& |  j' |  j& _( t j d |  j) f d |  j* f dp |  j+ f d& |  j, f d  |  j- f dq |  j. f t
 |  j/ f dr |  j0 f ds |  j1 f d@ |  j2 f g
  |  _3 |  j4 |  j3 _( d  S)tNrB  r  r  r  r  r  r/   r  r  r  r>  r@  addressarticleaside
blockquotecenterdetailsdirr&   dlfieldset
figcaptionfigurefooterheaderhgroupmainmenunavolr#   sectionsummaryulprelistingformlidddtrS   abbigcodeemfontissmallstrikestrongttunobrbuttonappletmarqueeobjectxmpr;  arear  embedimgkeygenwbrparamsourcetrackinputhrimageisindextextareaiframenoembedr  r  r,  rprtoptionoptgroupmathr{   r7  colr9  framer=  r3  r.  r5  r/  r4  r1  dialog)	zbasezbasefontzbgsoundzcommandzlinkzmetazscriptzstyleztitle)addressarticleaside
blockquotecenterdetailsr'  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noframesznoscript)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/  r0  r9  r1  r2  r3  r4  r8  r5  r6  r7  )r;  r<  r:  )r  r  r=  r>  r?  r@  r  znobrr  rA  rB  rC  rD  r  )rE  rF  rG  )5rH   r   processSpaceCharactersNonPrer   r  re  startTagProcessInHeadr  r  startTagClosePr   startTagHeadingstartTagPreListingstartTagFormstartTagListItemstartTagPlaintext	startTagAstartTagFormattingstartTagNobrstartTagButtonstartTagAppletMarqueeObjectstartTagXmpstartTagTablestartTagVoidFormattingstartTagParamSourcestartTagInput
startTagHrstartTagImagestartTagIsIndexstartTagTextareastartTagIFramestartTagRawtextstartTagSelectstartTagRpRtstartTagOptstartTagMathstartTagSvgstartTagMisplacedrc  r  r  
endTagBody
endTagHtmlendTagBlock
endTagFormendTagPendTagListItemendTagHeadingendTagFormattingendTagAppletMarqueeObjectendTagBrrf  r  )r?   rK   r;   )rg  r$   r%   rH   j  s|     	   	 	      z'getPhases.<locals>.InBodyPhase.__init__c             S   s   | j  | j  k s$ | j | j k r( d St | j  t | j  k rJ d St | j j    } t | j j    } x- t | |  D] \ } } | | k r d Sq Wd S)NFT)r=   rj   r   rk   sortedr)   zip)r?   node1node2attributes1attributes2attr1attr2r$   r$   r%   isMatchingFormattingElement  s    $z:getPhases.<locals>.InBodyPhase.isMatchingFormattingElementc             S   s   |  j  j |  |  j  j d } g  } xS |  j  j d  d  d  D]8 } | t k rV Pq@ |  j | |  r@ | j |  q@ q@ Wt |  d k s t  t |  d k r |  j  j j	 | d  n  |  j  j j |  d  S)Nr      r   r   r   )
r;   rK  r   activeFormattingElementsr
   rx  r   r   r   r  )r?   r   rm   matchingElementsrE  r$   r$   r%   addFormattingElement  s     z3getPhases.<locals>.InBodyPhase.addFormattingElementc             S   sW   t  d  } xD |  j j d  d  d  D]) } | j | k r& |  j j d  Pq& q& Wd  S)Nr  r  r  r#   r3  r.  r5  r/  r4  r1  r>  rB  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=   rK   r   )r?   allowed_elementsrE  r$   r$   r%   r     s     	 z)getPhases.<locals>.InBodyPhase.processEOFc             S   s   | d } |  j  |  _ | j d  rh |  j j d j d k rh |  j j d	 j   rh | d d   } n  | r |  j j   |  j j |  n  d  S)
Nrw   
r   r  r  r  r   )zprezlistingztextarear   )	rH  r   rV  r;   r   r=   
hasContent#reconstructActiveFormattingElementsrb  )r?   r   rw   r$   r$   r%   !processSpaceCharactersDropNewline  s    
z@getPhases.<locals>.InBodyPhase.processSpaceCharactersDropNewlinec             S   sq   | d d k r d  S|  j  j   |  j  j | d  |  j j rm t d d   | d D  rm d |  j _ n  d  S)Nrw    c             S   s   g  |  ] } | t  k  q Sr$   )r   )r<   charr$   r$   r%   r@     s   	zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r;   r  rb  rK   rc   any)r?   r   r$   r$   r%   r     s    z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s%   |  j  j   |  j  j | d  d  S)Nrw   )r;   r  rb  )r?   r   r$   r$   r%   r     s    z5getPhases.<locals>.InBodyPhase.processSpaceCharactersc             S   s   |  j  j d j |  S)Nr  )rK   rF   r   )r?   r   r$   r$   r%   rI    s    z4getPhases.<locals>.InBodyPhase.startTagProcessInHeadc             S   s   |  j  j d i d d 6 t |  j j  d k sK |  j j d j d k r` |  j  j s t  n` d |  j  _ xQ | d j	   D]? \ } } | |  j j d j
 k r} | |  j j d j
 | <q} q} Wd  S)Nzunexpected-start-tagr>  r=   r   Frw   )rK   r   r   r;   r   r=   rP   r   rc   r)   rk   )r?   r   rd  rS  r$   r$   r%   r    s    z+getPhases.<locals>.InBodyPhase.startTagBodyc             S   s  |  j  j d i d d 6 t |  j j  d k sK |  j j d j d k r` |  j  j s t  n |  j  j so n |  j j d j	 r |  j j d j	 j
 |  j j d  n  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>  rB  r?  r   )rK   r   r   r;   r   r=   rP   r   rc   parentremoveChildr  rK  rF   r^   )r?   r   r$   r$   r%   r    s    1'z/getPhases.<locals>.InBodyPhase.startTagFramesetc             S   sB   |  j  j d d d r. |  j t d   n  |  j  j |  d  S)Nr#   variantr  )r;   elementInScoperj  r  rK  )r?   r   r$   r$   r%   rJ    s    z-getPhases.<locals>.InBodyPhase.startTagClosePc             S   sZ   |  j  j d d d r. |  j t d   n  |  j  j |  d |  j _ |  j |  _ d  S)Nr#   r  r  F)	r;   r  rj  r  rK  rK   rc   r  r   )r?   r   r$   r$   r%   rL    s
    z1getPhases.<locals>.InBodyPhase.startTagPreListingc             S   s   |  j  j r) |  j j d i d d 6 nT |  j  j d d d rW |  j t d   n  |  j  j |  |  j  j d |  j  _ d  S)	Nzunexpected-start-tagr  r=   r#   r  r  r   r   )	r;   formPointerrK   r   r  rj  r  rK  r   )r?   r   r$   r$   r%   rM    s    z+getPhases.<locals>.InBodyPhase.startTagFormc             S   s   d |  j  _ i d g d 6d d g d 6d d g d 6} | | d } xn t |  j j  D]Z } | j | k r |  j  j j t | j d   Pn  | j	 t
 k rW | j d k rW PqW qW W|  j j d	 d
 d r |  j  j j t d	 d   n  |  j j |  d  S)NFr  r  r  r=   rs   r  r&   r#   r  r  )zaddresszdivr#   )rK   rc   reversedr;   r   r=   r^   r   r  	nameTupler   r  rK  )r?   r   stopNamesMap	stopNamesrE  r$   r$   r%   rN  '  s"    z/getPhases.<locals>.InBodyPhase.startTagListItemc             S   sZ   |  j  j d d d r. |  j t d   n  |  j  j |  |  j j j |  j j _ d  S)Nr#   r  r  )	r;   r  rj  r  rK  rK   r   r]   r[   )r?   r   r$   r$   r%   rO  =  s    z0getPhases.<locals>.InBodyPhase.startTagPlaintextc             S   s   |  j  j d d d r. |  j t d   n  |  j  j d j t k rx |  j j d i | d d 6 |  j  j j	   n  |  j  j
 |  d  S)Nr#   r  r  r   zunexpected-start-tagr=   r   )r;   r  rj  r  r   r=   r   rK   r   r  rK  )r?   r   r$   r$   r%   rK  C  s    z.getPhases.<locals>.InBodyPhase.startTagHeadingc             S   s   |  j  j d  } | r |  j j d i d d 6d d 6 |  j t d   | |  j  j k rt |  j  j j |  n  | |  j  j k r |  j  j j |  q n  |  j  j	   |  j
 |  d  S)Nr  z$unexpected-start-tag-implies-end-tag	startNameendName)r;   !elementInActiveFormattingElementsrK   r   rm  r  r   r  rz  r  r|  )r?   r   afeAElementr$   r$   r%   rP  K  s    z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   |  j  j   |  j |  d  S)N)r;   r  r|  )r?   r   r$   r$   r%   rQ  X  s    z1getPhases.<locals>.InBodyPhase.startTagFormattingc             S   st   |  j  j   |  j  j d  rc |  j j d i d d 6d d 6 |  j t d   |  j  j   n  |  j |  d  S)Nr  z$unexpected-start-tag-implies-end-tagr  r  )r;   r  r  rK   r   r   r  r|  )r?   r   r$   r$   r%   rR  \  s    z+getPhases.<locals>.InBodyPhase.startTagNobrc             S   sw   |  j  j d  rJ |  j j d i d d 6d d 6 |  j t d   | S|  j  j   |  j  j |  d |  j _ d  S)Nr  z$unexpected-start-tag-implies-end-tagr  r  F)	r;   r  rK   r   r   r  r  rK  rc   )r?   r   r$   r$   r%   rS  f  s    z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s@   |  j  j   |  j  j |  |  j  j j t  d |  j _ d  S)NF)r;   r  rK  rz  r   r
   rK   rc   )r?   r   r$   r$   r%   rT  q  s    z:getPhases.<locals>.InBodyPhase.startTagAppletMarqueeObjectc             S   s^   |  j  j d d d r. |  j t d   n  |  j  j   d |  j _ |  j j | d  d  S)Nr#   r  r  FrH  )r;   r  rj  r  r  rK   rc   rN  )r?   r   r$   r$   r%   rU  w  s
    z*getPhases.<locals>.InBodyPhase.startTagXmpc             S   sy   |  j  j d k rC |  j j d d d rC |  j t d   qC n  |  j j |  d |  j  _ |  j  j d |  j  _	 d  S)Nr  r#   r  r  Fr:  )
rK   rX   r;   r  r   r  rK  rc   rF   r^   )r?   r   r$   r$   r%   rV  ~  s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   sG   |  j  j   |  j  j |  |  j  j j   d | d <d |  j _ d  S)NTr~   F)r;   r  rK  r   r  rK   rc   )r?   r   r$   r$   r%   rW    s
    
z5getPhases.<locals>.InBodyPhase.startTagVoidFormattingc             S   sY   |  j  j } |  j |  d | d k rU | d d j t  d k rU | |  j  _ n  d  S)Nr-   rw   hidden)rK   rc   rW  rl   r   )r?   r   rc   r$   r$   r%   rY    s
    z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s.   |  j  j |  |  j  j j   d | d <d  S)NTr~   )r;   rK  r   r  )r?   r   r$   r$   r%   rX    s    z2getPhases.<locals>.InBodyPhase.startTagParamSourcec             S   sh   |  j  j d d d r. |  j t d   n  |  j  j |  |  j  j j   d | d <d |  j _ d  S)Nr#   r  r  Tr~   F)	r;   r  rj  r  rK  r   r  rK   rc   )r?   r   r$   r$   r%   rZ    s    
z)getPhases.<locals>.InBodyPhase.startTagHrc          	   S   sO   |  j  j d i d d 6d d 6 |  j t d d d | d d	 | d	  d  S)
Nzunexpected-start-tag-treated-asr  r%  r  newNamerr   rk   rw   r}   )rK   r   r   r  )r?   r   r$   r$   r%   r[    s
    
z,getPhases.<locals>.InBodyPhase.startTagImagec          	   S   s  |  j  j d i d d 6 |  j j r* d  Si  } d | d k rU | d d | d <n  |  j t d d d |  |  j t d	 d   |  j t d
 d   d | d k r | d d } n d } |  j i t d d 6| d 6 | d j   } d | k r	| d =n  d | k r| d =n  d | d <|  j t d d d | d | d  |  j	 t d
   |  j t d	 d   |  j	 t d   d  S)Nzdeprecated-tagr  r=   actionrw   r  rr   rk   r  labelpromptz3This is a searchable index. Enter search keywords: rp   r-   r  r}   )
rK   r   r;   r  r   r  r   r   copyr   )r?   r   
form_attrsr  rk   r$   r$   r%   r\    s6    



z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   sD   |  j  j |  |  j j j |  j j _ |  j |  _ d |  j _ d  S)NF)	r;   rK  rK   r   rZ   r[   r  r   rc   )r?   r   r$   r$   r%   r]    s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d |  j  _ |  j |  d  S)NF)rK   rc   r_  )r?   r   r$   r$   r%   r^    s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s   |  j  j | d  d S)z8iframe, noembed noframes, noscript(if scripting enabled)rH  N)rK   rN  )r?   r   r$   r$   r%   r_    s    z.getPhases.<locals>.InBodyPhase.startTagRawtextc             S   sY   |  j  j d j d k r5 |  j j j t d   n  |  j  j   |  j j  j |  d  S)Nr   r  r   )	r;   r   r=   rK   r^   r   r  r  rK  )r?   r   r$   r$   r%   rb    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:  r6  r8  r2  r0  r-  inSelectInTabler+  )r;   r  rK  rK   rc   r^   rF   )r?   r   r$   r$   r%   r`    s    z-getPhases.<locals>.InBodyPhase.startTagSelectc             S   s_   |  j  j d  rK |  j  j   |  j  j d j d k rK |  j j   qK n  |  j  j |  d  S)Nrubyr   r   )r;   r  generateImpliedEndTagsr   r=   rK   r   rK  )r?   r   r$   r$   r%   ra    s
    z+getPhases.<locals>.InBodyPhase.startTagRpRtc             S   sv   |  j  j   |  j j |  |  j j |  t d | d <|  j  j |  | d rr |  j  j j   d | d <n  d  S)Nrg   rj   r}   Tr~   )	r;   r  rK   r   r   r   rK  r   r  )r?   r   r$   r$   r%   rc    s    
z+getPhases.<locals>.InBodyPhase.startTagMathc             S   sv   |  j  j   |  j j |  |  j j |  t d | d <|  j  j |  | d rr |  j  j j   d | d <n  d  S)Nr{   rj   r}   Tr~   )	r;   r  rK   r'  r   r   rK  r   r  )r?   r   r$   r$   r%   rd    s    
z*getPhases.<locals>.InBodyPhase.startTagSvgc             S   s"   |  j  j d i | d d 6 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)rK   r   )r?   r   r$   r$   r%   re  
  s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s!   |  j  j   |  j  j |  d  S)N)r;   r  rK  )r?   r   r$   r$   r%   r    s    z,getPhases.<locals>.InBodyPhase.startTagOtherc             S   s   |  j  j d d d sa |  j t d d   |  j j d i d d 6 |  j t d d   n |  j  j d  |  j  j d	 j	 d k r |  j j d i d d 6 n  |  j  j j
   } x% | j	 d k r |  j  j j
   } q Wd  S)
Nr#   r  r  rr   zunexpected-end-tagr=   rs   r   r   )r;   r  rJ  r  rK   r   rj  r  r   r=   r  )r?   r   rE  r$   r$   r%   rj    s    z&getPhases.<locals>.InBodyPhase.endTagPc             S   s   |  j  j d  s# |  j j   d  S|  j  j d j d k r x^ |  j  j d d   D]C } | j t d  k rS |  j j d i d d 6| j d 6 PqS qS Wn  |  j j d |  j _ d  S)Nr>  r      r  r  r  r  r  r#   r  r  r3  r.  r5  r/  r4  r1  rB  z$expected-one-end-tag-but-got-anotherexpectedNamegotName	afterBodyr   )zddzdtzlizoptgroupzoptionr#   zrpzrtztbodyztdztfootzthztheadztrzbodyzhtml)	r;   r  rK   r   r   r=   r   rF   r^   )r?   r   rE  r$   r$   r%   rf  $  s    	   	z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s-   |  j  j d  r) |  j t d   | Sd  S)Nr>  )r;   r  rf  r  )r?   r   r$   r$   r%   rg  6  s    z)getPhases.<locals>.InBodyPhase.endTagHtmlc             S   s   | d d k r |  j  |  _ n  |  j j | d  } | rK |  j j   n  |  j j d j | d k r |  j j d i | d d 6 n  | r |  j j j	   } x, | j | d k r |  j j j	   } q Wn  d  S)Nr=   r  r   zend-tag-too-earlyr   )
rH  r   r;   r  r  r   r=   rK   r   r  )r?   r   inScoperE  r$   r$   r%   rh  <  s    !z*getPhases.<locals>.InBodyPhase.endTagBlockc             S   s   |  j  j } d  |  j  _ | d  k s7 |  j  j |  rT |  j j d i d d 6 nS |  j  j   |  j  j d | k r |  j j d i d d 6 n  |  j  j j |  d  S)Nzunexpected-end-tagr  r=   r   zend-tag-too-early-ignoredr   )r;   r  r  rK   r   r  r   r  )r?   r   rE  r$   r$   r%   ri  J  s    z)getPhases.<locals>.InBodyPhase.endTagFormc             S   s   | d d k r d } n d  } |  j  j | d d | s\ |  j j d i | d d 6 n |  j  j d | d  |  j  j d	 j | d k r |  j j d i | d d 6 n  |  j  j j   } x) | j | d k r |  j  j j   } q Wd  S)
Nr=   r  r#  r  zunexpected-end-tagexcluder   zend-tag-too-earlyr   )r;   r  rK   r   r  r   r=   r  )r?   r   r  rE  r$   r$   r%   rk  W  s    	!	z-getPhases.<locals>.InBodyPhase.endTagListItemc             S   s   x1 t  D]) } |  j j |  r |  j j   Pq q W|  j j d j | d k rr |  j j d i | d d 6 n  x^ t  D]V } |  j j |  ry |  j j j   } x% | j t  k r |  j j j   } q WPqy qy Wd  S)Nr   r=   zend-tag-too-earlyr   )	r   r;   r  r  r   r=   rK   r   r  )r?   r   itemr$   r$   r%   rl  h  s    !z,getPhases.<locals>.InBodyPhase.endTagHeadingc             S   s9  d } x,| d k  r4| d 7} |  j  j | d  } | sd | |  j  j k ru |  j  j | j  ru |  j |  d S| |  j  j k r |  j j d i | d d 6 |  j  j j	 |  d S|  j  j | j  s |  j j d i | d d 6 d S| |  j  j d k r*|  j j d i | d d 6 n  |  j  j j
 |  } d } x7 |  j  j | d  D] } | j t k r\| } Pq\q\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 r|  j  j j	 |
  q*n  |
 | k rPn  |	 | k r|  j  j j
 |
  d } n  |
 j   } | |  j  j |  j  j j
 |
  <| |  j  j |  j  j j
 |
  <| }
 |	 j r)|	 j j |	  n  |
 j |	  |
 }	 q*W|	 j r\|	 j j |	  n  | 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.3ry  r;  r3  r5  r4  r1  r   )ztableztbodyztfootztheadztr)r;   r  r   r  r=   r  rK   r   rz  r  indexr  r   r  	cloneNoder  r  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)r?   r   outerLoopCounterformattingElementafeIndexfurthestBlockrm   commonAncestorbookmarklastNoderE  innerLoopCounterr  cloner  r  r$   r$   r%   rm  w  s    

	!



	
	z/getPhases.<locals>.InBodyPhase.endTagFormattingc             S   s   |  j  j | d  r& |  j  j   n  |  j  j d j | d k rd |  j j d i | d d 6 n  |  j  j | d  r |  j  j j   } x) | j | d k r |  j  j j   } q W|  j  j   n  d  S)Nr=   r   zend-tag-too-earlyr   )	r;   r  r  r   r=   rK   r   r  clearActiveFormattingElements)r?   r   rm   r$   r$   r%   rn    s    !z8getPhases.<locals>.InBodyPhase.endTagAppletMarqueeObjectc             S   s[   |  j  j d i d d 6d d 6 |  j j   |  j j t d d   |  j j j   d  S)Nzunexpected-end-tag-treated-asr  r%  z
br elementr  rr   )rK   r   r;   r  rK  r  r   r  )r?   r   r$   r$   r%   ro  &  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 i | d d 6 n  x |  j  j j   | k r q WPq | j t k r |  j j d i | d d 6 Pq q Wd  S)Nr   r=   r  zunexpected-end-tagr   r   )	r;   r   r=   r  rK   r   r  r  r   )r?   r   rE  r$   r$   r%   r  -  s     !z*getPhases.<locals>.InBodyPhase.endTagOtherN)5r6   r7   r8   rH   rx  r|  r   r  r   r   rI  r  r  rJ  rL  rM  rN  rO  rK  rP  rQ  rR  rS  rT  rU  rV  rW  rY  rX  rZ  r[  r\  r]  r^  r_  rb  r`  ra  rc  rd  re  r  rj  rf  rg  rh  ri  rk  rl  rm  rn  ro  r  r$   )rg  r$   r%   InBodyPhaseg  sd   F
	
	r  c                   s^   e  Z d  Z   f d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d S)zgetPhases.<locals>.TextPhasec                se     j  |  | |  t j g   |  _ |  j |  j _ t j d |  j f g  |  _ |  j |  j _ d  S)Nr  )	rH   r   r  rc  r  r  endTagScriptrf  r  )r?   rK   r;   )rg  r$   r%   rH   <  s    z%getPhases.<locals>.TextPhase.__init__c             S   s   |  j  j | d  d  S)Nrw   )r;   rb  )r?   r   r$   r$   r%   r   D  s    z.getPhases.<locals>.TextPhase.processCharactersc             S   sM   |  j  j d i |  j j d j d 6 |  j j j   |  j  j |  j  _ d S)Nz&expected-named-closing-tag-but-got-eofr   r=   Tr   )rK   r   r;   r   r=   r  rL  r^   )r?   r$   r$   r%   r   G  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   )r?   r   r$   r$   r%   r  N  s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s=   |  j  j j   } | j d k s' t  |  j j |  j _ d  S)Nr  )r;   r   r  r=   r   rK   rL  r^   )r?   r   rE  r$   r$   r%   r  Q  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s&   |  j  j j   |  j j |  j _ d  S)N)r;   r   r  rK   rL  r^   )r?   r   r$   r$   r%   r  X  s    z(getPhases.<locals>.TextPhase.endTagOtherN)	r6   r7   r8   rH   r   r   r  r  r  r$   )rg  r$   r%   	TextPhase;  s   r  c                   s   e  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' S)(zgetPhases.<locals>.InTablePhasec                s     j  |  | |  t j d |  j f d |  j f d |  j f d |  j f d |  j f d |  j f d |  j	 f d |  j
 f d |  j f d |  j f g
  |  _ |  j |  j _ t j d |  j f d |  j f g  |  _ |  j |  j _ d  S)NrB  r7  r9  r  r3  r5  r4  r.  r/  r1  r;  r  r  r  r  r>  )tbodytfootthead)tdthtr)zstylezscript)zbodyzcaptionzcolzcolgroupzhtmlr  r  r  r  r  r  )rH   r   r  re  startTagCaptionstartTagColgroupstartTagColstartTagRowGroupstartTagImplyTbodyrV  startTagStyleScriptrY  rM  rc  r  r  endTagTableendTagIgnorerf  r  )r?   rK   r;   )rg  r$   r%   rH   ^  s$     z(getPhases.<locals>.InTablePhase.__init__c             S   s4   x- |  j  j d j d k r/ |  j  j j   q Wd  S)Nr   r;  rB  r   )ztablezhtml)r;   r   r=   r  )r?   r$   r$   r%   clearStackToTableContextv  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   rB  zeof-in-tabler   )r;   r   r=   rK   r   rP   r   )r?   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)rK   r^   rF   rL  r   )r?   r   rL  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  )rK   r^   rF   rL  r   )r?   r   rL  r$   r$   r%   r     s    z1getPhases.<locals>.InTablePhase.processCharactersc             S   s3   d |  j  _ |  j j d j |  d |  j  _ d  S)NTr<  F)r;   insertFromTablerK   rF   r   )r?   r   r$   r$   r%   rb    s    z*getPhases.<locals>.InTablePhase.insertTextc             S   sG   |  j    |  j j j t  |  j j |  |  j j d |  j _ d  S)Nr6  )	r  r;   rz  r   r
   rK  rK   rF   r^   )r?   r   r$   r$   r%   r    s    
z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s4   |  j    |  j j |  |  j j d |  j _ d  S)Nr8  )r  r;   rK  rK   rF   r^   )r?   r   r$   r$   r%   r    s    
z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   |  j  t d d   | S)Nr9  rr   )r  r  )r?   r   r$   r$   r%   r    s    z+getPhases.<locals>.InTablePhase.startTagColc             S   s4   |  j    |  j j |  |  j j d |  j _ d  S)Nr2  )r  r;   rK  rK   rF   r^   )r?   r   r$   r$   r%   r    s    
z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   |  j  t d d   | S)Nr3  rr   )r  r  )r?   r   r$   r$   r%   r    s    z2getPhases.<locals>.InTablePhase.startTagImplyTbodyc             S   sN   |  j  j d i d d 6d d 6 |  j  j j t d   |  j  j sJ | Sd  S)Nz$unexpected-start-tag-implies-end-tagr;  r  r  )rK   r   r^   r   r  rP   )r?   r   r$   r$   r%   rV    s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   |  j  j d j |  S)Nr  )rK   rF   r   )r?   r   r$   r$   r%   r    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)Nr-   rw   r  z unexpected-hidden-input-in-table)	rl   r   rK   r   r;   rK  r   r  r  )r?   r   r$   r$   r%   rY    s    z-getPhases.<locals>.InTablePhase.startTagInputc             S   s_   |  j  j d  |  j j d  k r[ |  j j |  |  j j d |  j _ |  j j j   n  d  S)Nzunexpected-form-in-tabler   r   )rK   r   r;   r  rK  r   r  )r?   r   r$   r$   r%   rM    s
    z,getPhases.<locals>.InTablePhase.startTagFormc             S   sQ   |  j  j d i | d d 6 d |  j _ |  j  j d j |  d |  j _ d  S)Nz)unexpected-start-tag-implies-table-voodoor=   Tr<  F)rK   r   r;   r  rF   r   )r?   r   r$   r$   r%   r    s    z-getPhases.<locals>.InTablePhase.startTagOtherc             S   s   |  j  j d d d r |  j  j   |  j  j d j d k ro |  j j d i d d 6|  j  j d j d 6 n  x- |  j  j d	 j d k r |  j  j j   qr 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=   rK   r   r  r`   rP   r   )r?   r   r$   r$   r%   r    s    
z+getPhases.<locals>.InTablePhase.endTagTablec             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tagr=   )rK   r   )r?   r   r$   r$   r%   r    s    z,getPhases.<locals>.InTablePhase.endTagIgnorec             S   sQ   |  j  j d i | d d 6 d |  j _ |  j  j d j |  d |  j _ d  S)Nz'unexpected-end-tag-implies-table-voodoor=   Tr<  F)rK   r   r;   r  rF   r   )r?   r   r$   r$   r%   r    s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r6   r7   r8   rH   r  r   r   r   rb  r  r  r  r  r  rV  r  rY  rM  r  r  r  r  r$   )rg  r$   r%   InTablePhase\  s&   	
r  c                   sv   e  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 S)z#getPhases.<locals>.InTableTextPhasec                s)     j  |  | |  d  |  _ g  |  _ d  S)N)rH   rL  characterTokens)r?   rK   r;   )rg  r$   r%   rH     s    	z,getPhases.<locals>.InTableTextPhase.__init__c             S   s   d j  d d   |  j D  } t d d   | D  rj i t d d 6| d 6} |  j j d j |  n | r |  j j |  n  g  |  _ d  S)	Nrl  c             S   s   g  |  ] } | d   q S)rw   r$   )r<   r  r$   r$   r%   r@     s   	 zGgetPhases.<locals>.InTableTextPhase.flushCharacters.<locals>.<listcomp>c             S   s   g  |  ] } | t  k  q Sr$   )r   )r<   r  r$   r$   r%   r@     s   	 rp   r-   rw   r:  )joinr  r  r   rK   rF   rb  r;   )r?   rw   r   r$   r$   r%   flushCharacters  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   |  j    |  j |  j _ | S)N)r  rL  rK   r^   )r?   r   r$   r$   r%   r     s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   |  j    |  j |  j _ d S)NT)r  rL  rK   r^   )r?   r$   r$   r%   r     s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s(   | d d k r d  S|  j  j |  d  S)Nrw   r  )r  r   )r?   r   r$   r$   r%   r     s    z5getPhases.<locals>.InTableTextPhase.processCharactersc             S   s   |  j  j |  d  S)N)r  r   )r?   r   r$   r$   r%   r     s    z:getPhases.<locals>.InTableTextPhase.processSpaceCharactersc             S   s   |  j    |  j |  j _ | S)N)r  rL  rK   r^   )r?   r   r$   r$   r%   r     s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   |  j    |  j |  j _ | S)N)r  rL  rK   r^   )r?   r   r$   r$   r%   r     s    
z1getPhases.<locals>.InTableTextPhase.processEndTagN)r6   r7   r8   rH   r  r   r   r   r   r   r   r$   )rg  r$   r%   InTableTextPhase  s   	r  c                   s   e  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 S)z!getPhases.<locals>.InCaptionPhasec                s     j  |  | |  t j d |  j f d |  j f g  |  _ |  j |  j _ t j d |  j f d |  j	 f d |  j
 f g  |  _ |  j |  j _ d  S)NrB  r7  r  r9  r3  r.  r5  r/  r4  r1  r;  r>  )	zcaptioncolcolgrouptbodytdtfootththeadtr)
zbodyr  r  zhtmlr  r  r  r  r  r  )rH   r   r  re  startTagTableElementrc  r  r  endTagCaptionr  r  rf  r  )r?   rK   r;   )rg  r$   r%   rH     s      z*getPhases.<locals>.InCaptionPhase.__init__c             S   s   |  j  j d d d S)Nr7  r  r;  )r;   r  )r?   r$   r$   r%   ignoreEndTagCaption.  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   |  j  j d j   d  S)Nr<  )rK   rF   r   )r?   r$   r$   r%   r   1  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   r   4  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s@   |  j  j   |  j   } |  j  j j t d   | s< | Sd  S)Nr7  )rK   r   r  r^   r   r  )r?   r   ignoreEndTagr$   r$   r%   r  7  s
    z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   r  ?  s    z/getPhases.<locals>.InCaptionPhase.startTagOtherc             S   s   |  j    s |  j j   |  j j d j d k rc |  j j d i d d 6|  j j d j d 6 n  x- |  j j d	 j d k r |  j j j   qf W|  j j j   |  j j   |  j j	 d |  j _
 n |  j j s t  |  j j   d  S)
Nr   r7  z$expected-one-end-tag-but-got-anotherr  r  r:  r   r   r   )r  r;   r  r   r=   rK   r   r  r  rF   r^   rP   r   )r?   r   r$   r$   r%   r  B  s    
z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s@   |  j  j   |  j   } |  j  j j t d   | s< | Sd  S)Nr7  )rK   r   r  r^   r   r  )r?   r   r  r$   r$   r%   r  T  s
    z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tagr=   )rK   r   )r?   r   r$   r$   r%   r  [  s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   r  ^  s    z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r6   r7   r8   rH   r  r   r   r  r  r  r  r  r  r$   )rg  r$   r%   InCaptionPhase  s   r  c                   s   e  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 S)z%getPhases.<locals>.InColumnGroupPhasec                s     j  |  | |  t j d |  j f d |  j f g  |  _ |  j |  j _ t j d |  j f d |  j	 f g  |  _
 |  j |  j
 _ d  S)NrB  r  r9  )rH   r   r  re  r  rc  r  r  endTagColgroup	endTagColrf  r  )r?   rK   r;   )rg  r$   r%   rH   d  s    z.getPhases.<locals>.InColumnGroupPhase.__init__c             S   s   |  j  j d j d k S)Nr   rB  r   )r;   r   r=   )r?   r$   r$   r%   ignoreEndTagColgroups  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   rB  r9  Tr   )	r;   r   r=   rK   rP   r   r  r  r  )r?   r  r$   r$   r%   r   v  s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr9  )r  r  r  )r?   r   r  r$   r$   r%   r     s    z7getPhases.<locals>.InColumnGroupPhase.processCharactersc             S   s$   |  j  j |  |  j  j j   d  S)N)r;   rK  r   r  )r?   r   r$   r$   r%   r    s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr9  )r  r  r  )r?   r   r  r$   r$   r%   r    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  rK   rP   r   r   r;   r   r  rF   r^   )r?   r   r$   r$   r%   r    s
    z4getPhases.<locals>.InColumnGroupPhase.endTagColgroupc             S   s   |  j  j d i d d 6 d  S)Nz
no-end-tagr  r=   )rK   r   )r?   r   r$   r$   r%   r    s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr9  )r  r  r  )r?   r   r  r$   r$   r%   r    s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r6   r7   r8   rH   r  r   r   r  r  r  r  r  r$   )rg  r$   r%   InColumnGroupPhasea  s   
	r  c                   s   e  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 S)z#getPhases.<locals>.InTableBodyPhasec                s     j  |  | |  t j d |  j f d |  j f d |  j f d |  j f g  |  _ |  j |  j _	 t j d |  j
 f d |  j f d |  j f g  |  _ |  j |  j _	 d  S)NrB  r1  r.  r/  r7  r  r9  r3  r5  r4  r;  r>  )tdth)captioncolcolgrouptbodytfootthead)r  r  r  )zbodyr  r  r  zhtmlr  r  ztr)rH   r   r  re  
startTagTrstartTagTableCellstartTagTableOtherrc  r  r  endTagTableRowGroupr  r  rf  r  )r?   rK   r;   )rg  r$   r%   rH     s     z,getPhases.<locals>.InTableBodyPhase.__init__c             S   sb   x- |  j  j d j d k r/ |  j  j j   q W|  j  j d j d k r^ |  j j s^ t  n  d  S)	Nr   r3  r5  r4  rB  r   )ztbodyztfootztheadzhtmlr   )r;   r   r=   r  rK   rP   r   )r?   r$   r$   r%   clearStackToTableBodyContext  s
    	z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   |  j  j d j   d  S)Nr:  )rK   rF   r   )r?   r$   r$   r%   r     s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   |  j  j d j |  S)Nr:  )rK   rF   r   )r?   r   r$   r$   r%   r     s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   |  j  j d j |  S)Nr:  )rK   rF   r   )r?   r   r$   r$   r%   r     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s4   |  j    |  j j |  |  j j d |  j _ d  S)Nr0  )r  r;   rK  rK   rF   r^   )r?   r   r$   r$   r%   r    s    
z.getPhases.<locals>.InTableBodyPhase.startTagTrc             S   s8   |  j  j d i | d d 6 |  j t d d   | S)Nzunexpected-cell-in-table-bodyr=   r1  rr   )rK   r   r  r  )r?   r   r$   r$   r%   r    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)Nr3  r  r;  r4  r5  r   r   )r;   r  r  r  r  r   r=   rK   rP   r   r   )r?   r   r$   r$   r%   r    s    
z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   |  j  j d j |  S)Nr:  )rK   rF   r   )r?   r   r$   r$   r%   r    s    z1getPhases.<locals>.InTableBodyPhase.startTagOtherc             S   sq   |  j  j | d d d rO |  j   |  j  j j   |  j j d |  j _ n |  j j d i | d d 6 d  S)Nr=   r  r;  r:  z unexpected-end-tag-in-table-body)	r;   r  r  r   r  rK   rF   r^   r   )r?   r   r$   r$   r%   r    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)Nr3  r  r;  r4  r5  r   r   )r;   r  r  r  r  r   r=   rK   rP   r   r   )r?   r   r$   r$   r%   r    s    
z/getPhases.<locals>.InTableBodyPhase.endTagTablec             S   s"   |  j  j d i | d d 6 d  S)Nz unexpected-end-tag-in-table-bodyr=   )rK   r   )r?   r   r$   r$   r%   r    s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   |  j  j d j |  S)Nr:  )rK   rF   r   )r?   r   r$   r$   r%   r    s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r6   r7   r8   rH   r  r   r   r   r  r  r  r  r  r  r  r  r$   )rg  r$   r%   InTableBodyPhase  s   
	r  c                   s   e  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 S)zgetPhases.<locals>.InRowPhasec                s     j  |  | |  t j d |  j f d |  j f d |  j f g  |  _ |  j |  j _ t j d
 |  j	 f d |  j
 f d |  j f d |  j f g  |  _ |  j |  j _ d  S)NrB  r.  r/  r7  r  r9  r3  r5  r4  r1  r;  r>  )tdth)captioncolcolgrouptbodytfoottheadztr)r  r  r  )zbodyr  r  r  zhtmlr  r  )rH   r   r  re  r  r  rc  r  r  endTagTrr  r  r  rf  r  )r?   rK   r;   )rg  r$   r%   rH     s     z&getPhases.<locals>.InRowPhase.__init__c             S   s[   xT |  j  j d j d k rV |  j j d i |  j  j d j d 6 |  j  j j   q Wd  S)	Nr   r1  rB  z'unexpected-implied-end-tag-in-table-rowr=   r   )ztrzhtmlr   )r;   r   r=   rK   r   r  )r?   r$   r$   r%   clearStackToTableRowContext  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   |  j  j d d d S)Nr1  r  r;  )r;   r  )r?   r$   r$   r%   ignoreEndTagTr   s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   |  j  j d j   d  S)Nr:  )rK   rF   r   )r?   r$   r$   r%   r   $  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   |  j  j d j |  S)Nr:  )rK   rF   r   )r?   r   r$   r$   r%   r   '  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   |  j  j d j |  S)Nr:  )rK   rF   r   )r?   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-  )	r  r;   rK  rK   rF   r^   rz  r   r
   )r?   r   r$   r$   r%   r  -  s    
z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr1  )r  r  r  )r?   r   r  r$   r$   r%   r  3  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   |  j  j d j |  S)Nr:  )rK   rF   r   )r?   r   r$   r$   r%   r  :  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)Nr2  )r  r  r;   r   r  rK   rF   r^   rP   r   r   )r?   r   r$   r$   r%   r  =  s    
z&getPhases.<locals>.InRowPhase.endTagTrc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr1  )r  r  r  )r?   r   r  r$   r$   r%   r  G  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;  r1  )r;   r  r  r  rK   r   )r?   r   r$   r$   r%   r  O  s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tag-in-table-rowr=   )rK   r   )r?   r   r$   r$   r%   r  V  s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   |  j  j d j |  S)Nr:  )rK   rF   r   )r?   r   r$   r$   r%   r  Z  s    z)getPhases.<locals>.InRowPhase.endTagOtherN)r6   r7   r8   rH   r  r  r   r   r   r  r  r  r  r  r  r  r  r$   )rg  r$   r%   
InRowPhase  s   
r  c                   s   e  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 S)zgetPhases.<locals>.InCellPhasec                s     j  |  | |  t j d |  j f d |  j f g  |  _ |  j |  j _ t j d |  j f d |  j	 f d |  j
 f g  |  _ |  j |  j _ d  S)NrB  r7  r  r9  r3  r.  r5  r/  r4  r1  r>  r;  )	captioncolcolgrouptbodytdtfootththeadtr)r  r  )zbodyr  r  r  zhtml)ztabler  r  r   r  )rH   r   r  re  r  rc  r  r  endTagTableCellr  endTagImplyrf  r  )r?   rK   r;   )rg  r$   r%   rH   _  s     z'getPhases.<locals>.InCellPhase.__init__c             S   s`   |  j  j d d d r. |  j t d   n. |  j  j d d d r\ |  j t d   n  d  S)Nr.  r  r;  r/  )r;   r  r  r  )r?   r$   r$   r%   	closeCellp  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   |  j  j d j   d  S)Nr<  )rK   rF   r   )r?   r$   r$   r%   r   w  s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   r   z  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  rK   rP   r   r   )r?   r   r$   r$   r%   r  }  s    
z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   r    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 i | d d 6 x@ |  j  j j   } | j | d k rn Pqn qn Wn |  j  j j   |  j  j   |  j j	 d |  j _
 n |  j j d i | d d 6 d  S)	Nr=   r  r;  r   zunexpected-cell-end-tagr0  zunexpected-end-tagr   )r;   r  r  r   r=   rK   r   r  r  rF   r^   )r?   r   rE  r$   r$   r%   r    s    z.getPhases.<locals>.InCellPhase.endTagTableCellc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tagr=   )rK   r   )r?   r   r$   r$   r%   r    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  rK   r   )r?   r   r$   r$   r%   r    s    
z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   r    s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r6   r7   r8   rH   r  r   r   r  r  r  r  r  r  r$   )rg  r$   r%   InCellPhase]  s   
r  c                   s   e  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 S)z getPhases.<locals>.InSelectPhasec                s     j  |  | |  t j d |  j f d |  j f d |  j f d |  j f d	 |  j f d |  j f g  |  _	 |  j
 |  j	 _ t j d |  j f d |  j f d |  j f g  |  _ |  j |  j _ d  S)
NrB  r  r  r,  r  r  r  r  )zinputzkeygenztextarea)rH   r   r  re  startTagOptionstartTagOptgroupr`  rY  r  rc  r  r  endTagOptionendTagOptgroupendTagSelectrf  r  )r?   rK   r;   )rg  r$   r%   rH     s    z)getPhases.<locals>.InSelectPhase.__init__c             S   sB   |  j  j d j d k r, |  j j d  n |  j j s> t  d  S)Nr   rB  zeof-in-selectr   )r;   r   r=   rK   r   rP   r   )r?   r$   r$   r%   r     s    z+getPhases.<locals>.InSelectPhase.processEOFc             S   s,   | d d k r d  S|  j  j | d  d  S)Nrw   r  )r;   rb  )r?   r   r$   r$   r%   r     s    z2getPhases.<locals>.InSelectPhase.processCharactersc             S   s@   |  j  j d j d k r, |  j  j j   n  |  j  j |  d  S)Nr   r  r   )r;   r   r=   r  rK  )r?   r   r$   r$   r%   r    s    z/getPhases.<locals>.InSelectPhase.startTagOptionc             S   sl   |  j  j d j d k r, |  j  j j   n  |  j  j d j d k rX |  j  j j   n  |  j  j |  d  S)Nr   r  r  r   r   )r;   r   r=   r  rK  )r?   r   r$   r$   r%   r    s
    z1getPhases.<locals>.InSelectPhase.startTagOptgroupc             S   s'   |  j  j d  |  j t d   d  S)Nzunexpected-select-in-selectr,  )rK   r   r
  r  )r?   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  )rK   r   r;   r  r
  r  rP   r   )r?   r   r$   r$   r%   rY    s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   |  j  j d j |  S)Nr  )rK   rF   r   )r?   r   r$   r$   r%   r    s    z/getPhases.<locals>.InSelectPhase.startTagScriptc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-start-tag-in-selectr=   )rK   r   )r?   r   r$   r$   r%   r    s    z.getPhases.<locals>.InSelectPhase.startTagOtherc             S   sJ   |  j  j d j d k r, |  j  j j   n |  j j d i d d 6 d  S)Nr   r  zunexpected-end-tag-in-selectr=   r   )r;   r   r=   r  rK   r   )r?   r   r$   r$   r%   r    s    z-getPhases.<locals>.InSelectPhase.endTagOptionc             S   s   |  j  j d j d k rE |  j  j d j d k rE |  j  j j   n  |  j  j d	 j d k rq |  j  j j   n |  j j d i d d 6 d  S)
Nr   r  r  r  zunexpected-end-tag-in-selectr=   r   r   )r;   r   r=   r  rK   r   )r?   r   r$   r$   r%   r	    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=   rK   r`   rP   r   r   )r?   r   rE  r$   r$   r%   r
    s    z-getPhases.<locals>.InSelectPhase.endTagSelectc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tag-in-selectr=   )rK   r   )r?   r   r$   r$   r%   r  		  s    z,getPhases.<locals>.InSelectPhase.endTagOtherN)r6   r7   r8   rH   r   r   r  r  r`  rY  r  r  r  r	  r
  r  r$   )rg  r$   r%   InSelectPhase  s   r  c                   sj   e  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 S)z'getPhases.<locals>.InSelectInTablePhasec          	      sq     j  |  | |  t j d	 |  j f g  |  _ |  j |  j _ t j d
 |  j f g  |  _ |  j	 |  j _ d  S)Nr7  r;  r3  r5  r4  r1  r.  r/  )captiontabletbodytfoottheadtrtdth)r  r  r  r  r  r  r  r  )
rH   r   r  rV  rc  r  r  r  rf  r  )r?   rK   r;   )rg  r$   r%   rH   	  s    z0getPhases.<locals>.InSelectInTablePhase.__init__c             S   s   |  j  j d j   d  S)Nr+  )rK   rF   r   )r?   r$   r$   r%   r   	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   |  j  j d j |  S)Nr+  )rK   rF   r   )r?   r   r$   r$   r%   r    	  s    z9getPhases.<locals>.InSelectInTablePhase.processCharactersc             S   s5   |  j  j d i | d d 6 |  j t d   | S)Nz5unexpected-table-element-start-tag-in-select-in-tabler=   r,  )rK   r   r  r  )r?   r   r$   r$   r%   rV  #	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   |  j  j d j |  S)Nr+  )rK   rF   r   )r?   r   r$   r$   r%   r  (	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagOtherc             S   sU   |  j  j d i | d d 6 |  j j | d d d rQ |  j t d   | Sd  S)Nz3unexpected-table-element-end-tag-in-select-in-tabler=   r  r;  r,  )rK   r   r;   r  r  r  )r?   r   r$   r$   r%   r  +	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   |  j  j d j |  S)Nr+  )rK   rF   r   )r?   r   r$   r$   r%   r  1	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r6   r7   r8   rH   r   r   rV  r  r  r  r$   )rg  r$   r%   InSelectInTablePhase	  s   r  c            -       s   e  Z d  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   f d- d.   Z d/ d0   Z   f d1 d2   Z d3 d4   Z d5 d6   Z	 d7 S)8z(getPhases.<locals>.InForeignContentPhaser  r  r  r>  r  r  r  r  r&   r  r  r  r  h1h2h3h4h5h6r=  r  r  r  r  r  r  r/   r  r  r#   r  r  r  r   spanr  r  subsupr;  r  r  r  varc                s     j  |  | |  d  S)N)rH   )r?   rK   r;   )rg  r$   r%   rH   >	  s    z1getPhases.<locals>.InForeignContentPhase.__init__c             S   s+  i$ d d 6d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d! d" 6d# d$ 6d% d& 6d' d( 6d) d* 6d+ d, 6d- d. 6d/ d0 6d1 d2 6d3 d4 6d5 d6 6d7 d8 6d9 d: 6d; d< 6d= d> 6d? d@ 6dA dB 6dC dD 6dE dF 6dG dH 6} | dI | k r'| | dI | dI <n  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foreignobjectr   r   linearGradientlineargradientradialGradientradialgradienttextPathtextpathr=   r$   )r?   r   r   r$   r$   r%   adjustSVGTagNamesA	  sL    

z:getPhases.<locals>.InForeignContentPhase.adjustSVGTagNamesc                si   | d d k r d | d <n8 |  j  j rU t d d   | d D  rU d |  j  _ n    j |  |  d  S)Nrw   r  u   �c             s   s   |  ] } | t  k Vq d  S)N)r   )r<   r  r$   r$   r%   rT  n	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rK   rc   r  r   )r?   r   )rg  r$   r%   r   j	  s    z:getPhases.<locals>.InForeignContentPhase.processCharactersc             S   s  |  j  j d } | d |  j k s\ | d d k r t | d j    t d d d g  @r |  j j d i | d d 6 xm |  j  j d j |  j  j k r |  j j	 |  j  j d  r |  j j
 |  j  j d  r |  j  j j   q} W| S| j t d	 k r|  j j |  n3 | j t d
 k rG|  j |  |  j j |  n  |  j j |  | j | d <|  j  j |  | d r|  j  j j   d | d <n  d  S)Nr   r=   r  rw   colorfacesizez*unexpected-html-element-in-foreign-contentrg   r{   rj   r}   Tr~   r   r   r   r   )r;   r   breakoutElementssetr$  rK   r   rj   r   rn   ro   r  r   r   rf  r'  r   rK  )r?   r   r   r$   r$   r%   r   r	  s.    )
z8getPhases.<locals>.InForeignContentPhase.processStartTagc             S   sK  t  |  j j  d } |  j j d } | j | d k rZ |  j j d i | d d 6 n  x | j j t  | d k r |  j j |  j j	 d k r |  j j j
   |  j j j |  j _ n  x. |  j j j   | k r |  j j s t  q Wd  } Pn  | d 8} |  j j | } | j |  j j k r-q] q] |  j j j |  } Pq] W| S)Nr   r=   zunexpected-end-tagr  r   )r   r;   r   r=   rK   r   rl   r   r^   rF   r  rL  r  r   rj   r   r   )r?   r   	nodeIndexrE  r   r$   r$   r%   r   	  s(    !
z6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r6   r7   r8   r   rj  rH   rf  r   r   r   r$   )rg  r$   r%   InForeignContentPhase4	  s   )rm  c                   sv   e  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 S)z!getPhases.<locals>.AfterBodyPhasec                sq     j  |  | |  t j d |  j f g  |  _ |  j |  j _ t j d |  j f g  |  _ |  j	 |  j _ d  S)NrB  )
rH   r   r  re  rc  r  r  rg  rf  r  )r?   rK   r;   )rg  r$   r%   rH   	  s    z*getPhases.<locals>.AfterBodyPhase.__init__c             S   s   d  S)Nr$   )r?   r$   r$   r%   r   	  s    z,getPhases.<locals>.AfterBodyPhase.processEOFc             S   s!   |  j  j | |  j  j d  d  S)Nr   )r;   ra  r   )r?   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<  )rK   r   rF   r^   )r?   r   r$   r$   r%   r   	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   re  	  s    z.getPhases.<locals>.AfterBodyPhase.startTagHtmlc             S   s8   |  j  j d i | d d 6 |  j  j d |  j  _ | S)Nzunexpected-start-tag-after-bodyr=   r<  )rK   r   rF   r^   )r?   r   r$   r$   r%   r  	  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)rK   rP   r   rF   r^   )r?   r=   r$   r$   r%   rg  	  s    z,getPhases.<locals>.AfterBodyPhase.endTagHtmlc             S   s8   |  j  j d i | d d 6 |  j  j d |  j  _ | S)Nzunexpected-end-tag-after-bodyr=   r<  )rK   r   rF   r^   )r?   r   r$   r$   r%   r  	  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r6   r7   r8   rH   r   r   r   re  r  rg  r  r$   )rg  r$   r%   AfterBodyPhase	  s   ro  c                   s   e  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 S)z"getPhases.<locals>.InFramesetPhasec                s     j  |  | |  t j d |  j f d |  j f d |  j f d |  j f g  |  _ |  j |  j _	 t j d |  j
 f g  |  _ |  j |  j _	 d  S)NrB  r@  r   r  )rH   r   r  re  r  startTagFramestartTagNoframesrc  r  r  endTagFramesetrf  r  )r?   rK   r;   )rg  r$   r%   rH   	  s    z+getPhases.<locals>.InFramesetPhase.__init__c             S   sB   |  j  j d j d k r, |  j j d  n |  j j s> t  d  S)Nr   rB  zeof-in-framesetr   )r;   r   r=   rK   r   rP   r   )r?   r$   r$   r%   r   	  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   |  j  j d  d  S)Nzunexpected-char-in-frameset)rK   r   )r?   r   r$   r$   r%   r   	  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   |  j  j |  d  S)N)r;   rK  )r?   r   r$   r$   r%   r  	  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s$   |  j  j |  |  j  j j   d  S)N)r;   rK  r   r  )r?   r   r$   r$   r%   rp  	  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   rq  	  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s"   |  j  j d i | d d 6 d  S)Nz unexpected-start-tag-in-framesetr=   )rK   r   )r?   r   r$   r$   r%   r  	  s    z0getPhases.<locals>.InFramesetPhase.startTagOtherc             S   s   |  j  j d j d k r, |  j j d  n |  j  j j   |  j j r{ |  j  j d j d k r{ |  j j d |  j _ n  d  S)Nr   rB  z)unexpected-frameset-in-frameset-innerhtmlr@  afterFramesetr   r   )	r;   r   r=   rK   r   r  rP   rF   r^   )r?   r   r$   r$   r%   rr  	  s    z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tag-in-framesetr=   )rK   r   )r?   r   r$   r$   r%   r  
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r6   r7   r8   rH   r   r   r  rp  rq  r  rr  r  r$   )rg  r$   r%   InFramesetPhase	  s   rt  c                   sj   e  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 S)z%getPhases.<locals>.AfterFramesetPhasec                s}     j  |  | |  t j d |  j f d |  j f g  |  _ |  j |  j _ t j d |  j f g  |  _	 |  j
 |  j	 _ d  S)NrB  r  )rH   r   r  re  rq  rc  r  r  rg  rf  r  )r?   rK   r;   )rg  r$   r%   rH   
  s    z.getPhases.<locals>.AfterFramesetPhase.__init__c             S   s   d  S)Nr$   )r?   r$   r$   r%   r   
  s    z0getPhases.<locals>.AfterFramesetPhase.processEOFc             S   s   |  j  j d  d  S)Nzunexpected-char-after-frameset)rK   r   )r?   r   r$   r$   r%   r   #
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   |  j  j d j |  S)Nr  )rK   rF   r   )r?   r   r$   r$   r%   rq  &
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc             S   s"   |  j  j d i | d d 6 d  S)Nz#unexpected-start-tag-after-framesetr=   )rK   r   )r?   r   r$   r$   r%   r  )
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   |  j  j d |  j  _ d  S)NafterAfterFrameset)rK   rF   r^   )r?   r   r$   r$   r%   rg  -
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s"   |  j  j d i | d d 6 d  S)Nz!unexpected-end-tag-after-framesetr=   )rK   r   )r?   r   r$   r$   r%   r  0
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r6   r7   r8   rH   r   r   rq  r  rg  r  r$   )rg  r$   r%   AfterFramesetPhase
  s   rv  c                   sv   e  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 S)z&getPhases.<locals>.AfterAfterBodyPhasec                sD     j  |  | |  t j d |  j f g  |  _ |  j |  j _ d  S)NrB  )rH   r   r  re  rc  r  r  )r?   rK   r;   )rg  r$   r%   rH   5
  s    z/getPhases.<locals>.AfterAfterBodyPhase.__init__c             S   s   d  S)Nr$   )r?   r$   r$   r%   r   =
  s    z1getPhases.<locals>.AfterAfterBodyPhase.processEOFc             S   s   |  j  j | |  j  j  d  S)N)r;   ra  rh  )r?   r   r$   r$   r%   r   @
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   r   C
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc             S   s*   |  j  j d  |  j  j d |  j  _ | S)Nzexpected-eof-but-got-charr<  )rK   r   rF   r^   )r?   r   r$   r$   r%   r   F
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   re  K
  s    z3getPhases.<locals>.AfterAfterBodyPhase.startTagHtmlc             S   s8   |  j  j d i | d d 6 |  j  j d |  j  _ | S)Nzexpected-eof-but-got-start-tagr=   r<  )rK   r   rF   r^   )r?   r   r$   r$   r%   r  N
  s    z4getPhases.<locals>.AfterAfterBodyPhase.startTagOtherc             S   s8   |  j  j d i | d d 6 |  j  j d |  j  _ | S)Nzexpected-eof-but-got-end-tagr=   r<  )rK   r   rF   r^   )r?   r   r$   r$   r%   r   T
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r6   r7   r8   rH   r   r   r   r   re  r  r   r$   )rg  r$   r%   AfterAfterBodyPhase4
  s   rw  c                   s   e  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 S)z*getPhases.<locals>.AfterAfterFramesetPhasec                sP     j  |  | |  t j d |  j f d |  j f g  |  _ |  j |  j _ d  S)NrB  r  )rH   r   r  re  startTagNoFramesrc  r  r  )r?   rK   r;   )rg  r$   r%   rH   [
  s
    z3getPhases.<locals>.AfterAfterFramesetPhase.__init__c             S   s   d  S)Nr$   )r?   r$   r$   r%   r   d
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   |  j  j | |  j  j  d  S)N)r;   ra  rh  )r?   r   r$   r$   r%   r   g
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   r   j
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   |  j  j d  d  S)Nzexpected-eof-but-got-char)rK   r   )r?   r   r$   r$   r%   r   m
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   |  j  j d j |  S)Nr<  )rK   rF   r   )r?   r   r$   r$   r%   re  p
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   |  j  j d j |  S)Nr  )rK   rF   r   )r?   r   r$   r$   r%   rx  s
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s"   |  j  j d i | d d 6 d  S)Nzexpected-eof-but-got-start-tagr=   )rK   r   )r?   r   r$   r$   r%   r  v
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc             S   s"   |  j  j d i | d d 6 d  S)Nzexpected-eof-but-got-end-tagr=   )rK   r   )r?   r   r$   r$   r%   r   z
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r6   r7   r8   rH   r   r   r   r   re  rx  r  r   r$   )rg  r$   r%   AfterAfterFramesetPhaseZ
  s   	ry  rU   rT   rA  r  r  r<  rJ  r:  r  r6  r8  r2  r0  r-  r+  r  r|   r  r?  rs  rn  ru  )r   )rG   rW   r_  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rm  ro  rt  rv  rw  ry  r$   )rg  r%   rE     sd    %)#.cC  !-GAbYLd's/9%&$rE   rs   Fc             C   s9   | d  k r i  } n  i t  | d 6|  d 6| d 6| d 6S)Nr-   r=   rw   r}   )r   )r=   r-   rk   r}   r$   r$   r%   r  
  s    	r  c               @   s   e  Z d  Z d Z d S)rv   zError in parsed documentN)r6   r7   r8   rO  r$   r$   r$   r%   rv   
  s   rv   )&
__future__r   r   r   pip._vendor.sixr   r+   rl  r   r   r	   Ztreebuilders._baser
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(  r   r   r(   r:   r	  r   rE   r  	Exceptionrv   r$   r$   r$   r%   <module>   sF   	 t        