
R\                @   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 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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"   C/var/www/dbchiro/venv/build/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"   )r3   r"   r#   	Decorated&   s   r7   )r+   )r3   r7   r"   )r3   r#   method_decorator_metaclass%   s    r8   c               @   s  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 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>L   s   	 z'HTMLParser.__init__.<locals>.<listcomp>)
strictr	   r   r9   tokenizer_classerrorsdict	getPhasesr'   phases)r=   r9   r   r?   r   debugr"   )r=   r#   __init__5   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%   r@   r   resetmainLoopr   )r=   stream	innerHTMLr%   r   rG   rH   kwargsr"   r"   r#   _parseO   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)r9   rK   firstStartTagrA   log
compatModerJ   r%   lowerrN   r   r   rcdataStatestater   rawtextStateplaintextStaterD   phaseinsertHtmlElementresetInsertionMode	lastPhasebeforeRCDataPhase
framesetOK)r=   r"   r"   r#   rK   a   s*    								zHTMLParser.resetc             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)rc   rd   )r;   	namespacer   
attributes	translater   r   )r=   elementr"   r"   r#   isHTMLIntegrationPoint   s    z!HTMLParser.isHTMLIntegrationPointc             C   s   | j  | j f t k S)N)re   r;   r   )r=   rh   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
malignmarkrb   zannotation-xmlsvginForeignContentselfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)r   normalizedTokensr9   openElementsre   r;   
parseErrorgetlendefaultNamespacerj   	frozensetr   ri   r\   rD   processCharactersprocessSpaceCharactersprocessStartTagprocessEndTagprocessCommentprocessDoctypeappend
processEOFAssertionError)r=   CharactersTokenSpaceCharactersTokenStartTagTokenEndTagTokenCommentTokenDoctypeTokenParseErrorTokentoken	new_tokencurrentNodecurrentNodeNamespacecurrentNodeNamer+   r\   	reprocessrD   r"   r"   r#   rL      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)
        rN   Fr   rG   rH   )rP   r9   getDocument)r=   rM   r   rG   rH   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   )rP   r9   getFragment)r=   rM   r%   r   rG   rH   r"   r"   r#   r&      s    zHTMLParser.parseFragmentzXXX-undefined-errorc             C   s;   |  j  j |  j j j   | | f  |  j r7 t  n  d  S)N)rA   r   r   rM   positionr?   rq   )r=   	errorcoders   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+   rm   rr   Nr   rz   )r   rB   )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definitionurlrr   )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)~Nr1   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
zoomandpanrr   )listkeys)r=   r   r   originalNamesvgNamer"   r"   r#   adjustSVGAttributes  s    

zHTMLParser.adjustSVGAttributesc             C   sO  i d d t  d f d 6d d t  d f d 6d d t  d f d 6d d t  d f d	 6d d
 t  d f d 6d d t  d f d 6d d t  d f d 6d d t  d f d 6d d t  d f d 6d d t  d f d 6d  d t  d f d 6d d t  d f d 6} xR | d j   D]@ } | | k r| | } | d | | d | <| d | =qqWd  S)Nxlinkactuatezxlink:actuatearcrolezxlink:arcrolehrefz
xlink:hrefrolez
xlink:roleshowz
xlink:showtitlezxlink:titler+   z
xlink:typexmlbasezxml:baselangzxml:langspacez	xml:spacexmlnszxmlns:xlinkrr   )r   r  )r=   r   r   r   foreignNamer"   r"   r#   adjustForeignAttributesO  s$    
z"HTMLParser.adjustForeignAttributesc             C   s   |  j  j   d  S)N)rI   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   Trz   )zselectzcolgroupzheadzhtml)	r9   r|   r;   rN   r   re   r   rD   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   r9   insertElementr   rZ   rY   rX   r\   originalPhaserD   )r=   r   contentTyper"   r"   r#   parseRCDataRawtext  s    zHTMLParser.parseRCDataRawtext)r4   r5   r6   __doc__r   HTMLTokenizerrF   rP   rK   ri   rj   rL   r{   r   r&   r}   r   r   r"  r0  r1  r^   rU  r"   r"   r"   r#   r   1   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;   )r4   
startswithr   r   tagTokenTypesrI   rU   r   r   rY   r\   	__class__)r=   argsrO   r   info)r3   
type_namesr"   r#   wrapped  s    $
	
z'getPhases.<locals>.log.<locals>.wrapped)rB   r   r   r'   )r3   rb  r"   )r3   ra  r#   rU     s    zgetPhases.<locals>.logc             S   s   |  r t  |  St Sd  S)N)r8   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)rI   r9   )r=   rI   r9   r"   r"   r#   rF     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   rz   )r9   insertCommentr|   )r=   r   r"   r"   r#   r     s    z'getPhases.<locals>.Phase.processCommentc             S   s   |  j  j d  d  S)Nzunexpected-doctype)rI   r}   )r=   r   r"   r"   r#   r     s    z'getPhases.<locals>.Phase.processDoctypec             S   s   |  j  j | d  d  S)Nrr   )r9   
insertText)r=   r   r"   r"   r#   r     s    z*getPhases.<locals>.Phase.processCharactersc             S   s   |  j  j | d  d  S)Nrr   )r9   rh  )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;   rI  znon-html-rootrr   r   F)rI   rT   r}   r'   r9   r|   rf   )r=   r   attrrY  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)r4   r5   r6   rV  rF   r   r   r   r   r   r   rk  r   r"   r"   r"   r#   Phase  s   
rm  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)r9   rg  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correctrI  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 quirksrR   )7rs  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  r  r  r  r  )r  r  zhtml)r  r  )r  r  )r  r  )rI   r}   r9   insertDoctyperg   r   r\  rW   rV   rD   r\   )r=   r   r;   ro  rp  rq  r"   r"   r#   r     s    



	                                                      	  	 	 	 	z.getPhases.<locals>.InitialPhase.processDoctypec             S   s&   d |  j  _ |  j  j d |  j  _ d  S)Nr  rR   )rI   rV   rD   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)rI   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;   )rI   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;   )rI   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)rI   r}   r  )r=   r"   r"   r#   r   k  s    
z*getPhases.<locals>.InitialPhase.processEOFN)r4   r5   r6   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)NrI  rm   rH  )r9   
insertRootimpliedTagTokenrI   rD   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)r9   rg  rn  )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;   rI  T)rI   rT   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;   rD  rE  rI  brzunexpected-end-tag-before-html)zheadzbodyzhtmlzbr)rI   r}   r]   )r=   r   r"   r"   r#   r     s
    
z0getPhases.<locals>.BeforeHtmlPhase.processEndTagN)
r4   r5   r6   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)NrI  rD  rE  r  )zheadzbodyzhtmlzbr)rF   r   MethodDispatcherrk  startTagHeadri  startTagOtherdefaultendTagImplyHeadrl  endTagOther)r=   rI   r9   )rm  r"   r#   rF     s    z+getPhases.<locals>.BeforeHeadPhase.__init__c             S   s   |  j  t d d   d S)NrD  rm   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)NrD  rm   )r  r  )r=   r   r"   r"   r#   r     s    z4getPhases.<locals>.BeforeHeadPhase.processCharactersc             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   rk    s    z/getPhases.<locals>.BeforeHeadPhase.startTagHtmlc             S   s@   |  j  j |  |  j  j d |  j  _ |  j j d |  j _ d  S)Nr   inHeadrz   )r9   rR  r|   headPointerrI   rD   r\   )r=   r   r"   r"   r#   r    s    z/getPhases.<locals>.BeforeHeadPhase.startTagHeadc             S   s   |  j  t d d   | S)NrD  rm   )r  r  )r=   r   r"   r"   r#   r    s    z0getPhases.<locals>.BeforeHeadPhase.startTagOtherc             S   s   |  j  t d d   | S)NrD  rm   )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;   )rI   r}   )r=   r   r"   r"   r#   r    s    z.getPhases.<locals>.BeforeHeadPhase.endTagOtherN)r4   r5   r6   rF   r   r   r   rk  r  r  r  r  r"   )rm  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)NrI  r)  noscriptnoframesstylescriptr+  basefontbgsoundcommandlinkr-   rD  r  rE  )znoscriptznoframeszstyle)zbasezbasefontzbgsoundzcommandzlink)zbrzhtmlzbody)rF   r   r  rk  startTagTitlestartTagNoScriptNoFramesStylestartTagScriptstartTagBaseLinkCommandstartTagMetar  ri  r  r  
endTagHeadendTagHtmlBodyBrrl  r  )r=   rI   r9   )rm  r"   r#   rF     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)NrC  )rI   rD   r   )r=   r   r"   r"   r#   rk    s    z+getPhases.<locals>.InHeadPhase.startTagHtmlc             S   s   |  j  j d  d  S)Nz!two-heads-are-not-better-than-one)rI   r}   )r=   r   r"   r"   r#   r    s    z+getPhases.<locals>.InHeadPhase.startTagHeadc             S   s.   |  j  j |  |  j  j j   d | d <d  S)NTry   )r9   rR  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)NTry   rr   r   	tentativecharsetcontentz
http-equivzcontent-typezutf-8)r9   rR  r|   r  rI   r   rM   charEncodingchangeEncodingrW   r   EncodingBytesencodeContentAttrParserr   )r=   r   rf   rr   rI   codecr"   r"   r#   r    s    

z+getPhases.<locals>.InHeadPhase.startTagMetac             S   s   |  j  j | d  d  S)NrP  )rI   rU  )r=   r   r"   r"   r#   r     s    z,getPhases.<locals>.InHeadPhase.startTagTitlec             S   s   |  j  j | d  d  S)NrO  )rI   rU  )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)NrQ  )	r9   rR  rI   r   scriptDataStaterY   r\   rS  rD   )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)NrD  zExpected head got %s	afterHead)rI   r9   r|   r  r;   r   rD   r\   )r=   r   rL  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;   )rI   r}   )r=   r   r"   r"   r#   r    s    z*getPhases.<locals>.InHeadPhase.endTagOtherc             S   s   |  j  t d   d  S)NrD  )r  r  )r=   r"   r"   r#   r    s    z+getPhases.<locals>.InHeadPhase.anythingElseN)r4   r5   r6   rF   r   r   rk  r  r  r  r  r  r  r  r  r  r  r  r"   )rm  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)NrI  rE  rG  r+  r  r  r  r-   r  r  r  r)  rD  r  )	zbasezbasefontzbgsoundzlinkzmetaznoframeszscriptzstyleztitle)zbodyzhtmlzbr)rF   r   r  rk  startTagBodystartTagFramesetstartTagFromHeadr  ri  r  r  r  rl  r  )r=   rI   r9   )rm  r"   r#   rF   %  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)NrC  )rI   rD   r   )r=   r   r"   r"   r#   rk  >  s    z.getPhases.<locals>.AfterHeadPhase.startTagHtmlc             S   s6   d |  j  _ |  j j |  |  j  j d |  j  _ d  S)NFrC  )rI   ra   r9   rR  rD   r\   )r=   r   r"   r"   r#   r  A  s    z.getPhases.<locals>.AfterHeadPhase.startTagBodyc             S   s*   |  j  j |  |  j j d |  j _ d  S)NrF  )r9   rR  rI   rD   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   rD  rz   )
rI   r}   r9   r|   r   r  rD   r   r;   remove)r=   r   rL  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;   )rI   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;   )rI   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)NrE  rm   rC  T)r9   rR  r  rI   rD   r\   ra   )r=   r"   r"   r#   r  b  s    z.getPhases.<locals>.AfterHeadPhase.anythingElseN)r4   r5   r6   rF   r   r   rk  r  r  r  r  r  r  r  r  r"   )rm  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 d9 |  j f d: |  j f di |  j f d> |  j f d? |  j f dj |  j f dk |  j f dI |  j f dJ |  j f dK |  j f dL |  j f dM |  j f dN |  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 dA |  j2 f g
  |  _3 |  j4 |  j3 _( d  S)tNrI  r+  r  r  r  r  r-   r  r  r  r)  rE  rG  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dtrQ   abbigcodeemfontissmallstrikestrongttunobrbuttonappletmarqueeobjectxmprB  arear  embedimgkeygenwbrparamsourcetrackinputhrimageisindextextareaiframenoembedr  r3  rprtoptionoptgroupmathrv   r>  colr@  framerD  r:  r5  r<  r6  r;  r8  dialog)
zbasezbasefontzbgsoundzcommandzlinkzmetanoframesz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noembedr'  z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/  r0  r1  r2  r3  r4  r5  r6  r?  r7  r8  r9  r:  r>  r;  r<  r=  )rA  rB  r@  )r  r  rC  rD  rE  rF  r  znobrr  rG  rH  rI  rJ  r	  )rK  rL  rM  )5rF   r   processSpaceCharactersNonPrer   r  rk  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startTagMisplacedri  r  r  
endTagBody
endTagHtmlendTagBlock
endTagFormendTagPendTagListItemendTagHeadingendTagFormattingendTagAppletMarqueeObjectendTagBrrl  r  )r=   rI   r9   )rm  r"   r#   rF   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;   re   r   rf   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      rz   rz   rz   )
r9   rR  r|   activeFormattingElementsr
   r~  r   r   r   r  )r=   r   rh   matchingElementsrL  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!   r:  r5  r<  r6  r;  r8  rE  rI  r   z expected-closing-tag-but-got-eof)zddzdtzlir!   ztbodyztdztfootzthztheadztrzbodyzhtmlrz   )r   r9   r|   r;   rI   r}   )r=   allowed_elementsrL  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)
Nrr   
r   r  r  r  rz   )zprezlistingztextarearz   )	rN  r   r\  r9   r|   r;   
hasContent#reconstructActiveFormattingElementsrh  )r=   r   rr   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)Nrr    c             S   s   g  |  ] } | t  k  q Sr"   )r   )r:   charr"   r"   r#   r>     s   	zDgetPhases.<locals>.InBodyPhase.processCharacters.<locals>.<listcomp>F)r9   r  rh  rI   ra   any)r=   r   r"   r"   r#   r     s    z0getPhases.<locals>.InBodyPhase.processCharactersc             S   s%   |  j  j   |  j  j | d  d  S)Nrr   )r9   r  rh  )r=   r   r"   r"   r#   r     s    z5getPhases.<locals>.InBodyPhase.processSpaceCharactersc             S   s   |  j  j d j |  S)Nr  )rI   rD   r   )r=   r   r"   r"   r#   rO    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-tagrE  r;   r   Frr   )rI   r}   r   r9   r|   r;   rN   r   ra   r'   rf   )r=   r   rj  rY  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-tagrG  r;   r   rE  rI  rF  rz   )rI   r}   r   r9   r|   r;   rN   r   ra   parentremoveChildr  rR  rD   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  )r9   elementInScoperp  r  rR  )r=   r   r"   r"   r#   rP    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)	r9   r  rp  r  rR  rI   ra   r  r   )r=   r   r"   r"   r#   rR    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   rz   )	r9   formPointerrI   r}   r  rp  r  rR  r|   )r=   r   r"   r"   r#   rS    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;   rn   r  r$   r!   r  r  )zaddresszdivr!   )rI   ra   reversedr9   r|   r;   r\   r   r  	nameTupler   r  rR  )r=   r   stopNamesMap	stopNamesrL  r"   r"   r#   rT  '  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  )	r9   r  rp  r  rR  rI   r   r[   rY   )r=   r   r"   r"   r#   rU  =  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;   rz   )r9   r  rp  r  r|   r;   r   rI   r}   r  rR  )r=   r   r"   r"   r#   rQ  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)r9   !elementInActiveFormattingElementsrI   r}   rs  r  r|   r  r  r  r  )r=   r   afeAElementr"   r"   r#   rV  K  s    z(getPhases.<locals>.InBodyPhase.startTagAc             S   s   |  j  j   |  j |  d  S)N)r9   r  r  )r=   r   r"   r"   r#   rW  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  )r9   r  r  rI   r}   r   r  r  )r=   r   r"   r"   r#   rX  \  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)	r9   r  rI   r}   r   r  r  rR  ra   )r=   r   r"   r"   r#   rY  f  s    z-getPhases.<locals>.InBodyPhase.startTagButtonc             S   s@   |  j  j   |  j  j |  |  j  j j t  d |  j _ d  S)NF)r9   r  rR  r  r   r
   rI   ra   )r=   r   r"   r"   r#   rZ  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  FrO  )r9   r  rp  r  r  rI   ra   rU  )r=   r   r"   r"   r#   r[  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  FrA  )
rI   rV   r9   r  r   r  rR  ra   rD   r\   )r=   r   r"   r"   r#   r\  ~  s    z,getPhases.<locals>.InBodyPhase.startTagTablec             S   sG   |  j  j   |  j  j |  |  j  j j   d | d <d |  j _ d  S)NTry   F)r9   r  rR  r|   r  rI   ra   )r=   r   r"   r"   r#   r]    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+   rr   hidden)rI   ra   r]  rg   r   )r=   r   ra   r"   r"   r#   r_    s
    z,getPhases.<locals>.InBodyPhase.startTagInputc             S   s.   |  j  j |  |  j  j j   d | d <d  S)NTry   )r9   rR  r|   r  )r=   r   r"   r"   r#   r^    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  Try   F)	r9   r  rp  r  rR  r|   r  rI   ra   )r=   r   r"   r"   r#   r`    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  newNamerm   rf   rr   rx   )rI   r}   r   r  )r=   r   r"   r"   r#   ra    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;   actionrr   r  rm   rf   r  labelpromptz3This is a searchable index. Enter search keywords: rk   r+   r  rx   )
rI   r}   r9   r  r   r  r   r   copyr   )r=   r   
form_attrsr  rf   r"   r"   r#   rb    s6    



z.getPhases.<locals>.InBodyPhase.startTagIsIndexc             S   sD   |  j  j |  |  j j j |  j j _ |  j |  _ d |  j _ d  S)NF)	r9   rR  rI   r   rX   rY   r  r   ra   )r=   r   r"   r"   r#   rc    s    z/getPhases.<locals>.InBodyPhase.startTagTextareac             S   s   d |  j  _ |  j |  d  S)NF)rI   ra   re  )r=   r   r"   r"   r#   rd    s    z-getPhases.<locals>.InBodyPhase.startTagIFramec             S   s   |  j  j | d  d S)z8iframe, noembed noframes, noscript(if scripting enabled)rO  N)rI   rU  )r=   r   r"   r"   r#   re    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!  rz   )	r9   r|   r;   rI   r\   r   r  r  rR  )r=   r   r"   r"   r#   rh    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)
NFrA  r=  r?  r9  r7  r4  inSelectInTabler2  )r9   r  rR  rI   ra   r\   rD   )r=   r   r"   r"   r#   rf    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   rz   )r9   r  generateImpliedEndTagsr|   r;   rI   r}   rR  )r=   r   r"   r"   r#   rg    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)Nrb   re   rx   Try   )	r9   r  rI   r   r0  r   rR  r|   r  )r=   r   r"   r"   r#   ri    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)Nrv   re   rx   Try   )	r9   r  rI   r"  r0  r   rR  r|   r  )r=   r   r"   r"   r#   rj    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)rI   r}   )r=   r   r"   r"   r#   rk    s    z0getPhases.<locals>.InBodyPhase.startTagMisplacedc             S   s!   |  j  j   |  j  j |  d  S)N)r9   r  rR  )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  rm   zunexpected-end-tagr;   rn   r   rz   )r9   r  rP  r  rI   r}   rp  r  r|   r;   r  )r=   r   rL  r"   r"   r#   rp    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)NrE  r      r  r  r  r"  r!  r!   r  r   r:  r5  r<  r6  r;  r8  rI  z$expected-one-end-tag-but-got-anotherexpectedNamegotName	afterBodyrz   )zddzdtzlizoptgroupzoptionr!   zrpzrtztbodyztdztfootzthztheadztrzbodyzhtml)	r9   r  rI   r}   r|   r;   r   rD   r\   )r=   r   rL  r"   r"   r#   rl  %  s    	   	z)getPhases.<locals>.InBodyPhase.endTagBodyc             S   s-   |  j  j d  r) |  j t d   | Sd  S)NrE  )r9   r  rl  r  )r=   r   r"   r"   r#   rm  7  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-earlyrz   )
rN  r   r9   r  r  r|   r;   rI   r}   r  )r=   r   inScoperL  r"   r"   r#   rn  =  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-ignoredrz   )r9   r  r  rI   r}   r  r|   r  )r=   r   rL  r"   r"   r#   ro  K  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-earlyrz   )r9   r  rI   r}   r  r|   r;   r  )r=   r   r  rL  r"   r"   r#   rq  X  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-earlyrz   )	r   r9   r  r  r|   r;   rI   r}   r  )r=   r   itemr"   r"   r#   rr  i  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.3r  rB  r:  r<  r;  r8  rz   )ztableztbodyztfootztheadztr)r9   r  r|   r  r;   r  rI   r}   r  r  indexr  r   r  	cloneNoder  r  appendChildr   getTableMisnestedNodePositioninsertBeforereparentChildreninsert)r=   r   outerLoopCounterformattingElementafeIndexfurthestBlockrh   commonAncestorbookmarklastNoderL  innerLoopCounterr  cloner  r  r"   r"   r#   rs  x  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-earlyrz   )	r9   r  r  r|   r;   rI   r}   r  clearActiveFormattingElements)r=   r   rh   r"   r"   r#   rt    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  rm   )rI   r}   r9   r  rR  r  r|   r  )r=   r   r"   r"   r#   ru  '  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-tagrz   rz   )	r9   r|   r;   r  rI   r}   r  r  r   )r=   r   rL  r"   r"   r#   r  .  s     !z*getPhases.<locals>.InBodyPhase.endTagOtherN)5r4   r5   r6   rF   r~  r  r   r  r   r   rO  r  r  rP  rR  rS  rT  rU  rQ  rV  rW  rX  rY  rZ  r[  r\  r]  r_  r^  r`  ra  rb  rc  rd  re  rh  rf  rg  ri  rj  rk  r  rp  rl  rm  rn  ro  rq  rr  rs  rt  ru  r  r"   )rm  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  )	rF   r   r  ri  r  r  endTagScriptrl  r  )r=   rI   r9   )rm  r"   r#   rF   =  s    z%getPhases.<locals>.TextPhase.__init__c             S   s   |  j  j | d  d  S)Nrr   )r9   rh  )r=   r   r"   r"   r#   r   E  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;   Trz   )rI   r}   r9   r|   r;   r  rS  r\   )r=   r"   r"   r#   r   H  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  O  s    z*getPhases.<locals>.TextPhase.startTagOtherc             S   s=   |  j  j j   } | j d k s' t  |  j j |  j _ d  S)Nr  )r9   r|   r  r;   r   rI   rS  r\   )r=   r   rL  r"   r"   r#   r  R  s    z)getPhases.<locals>.TextPhase.endTagScriptc             S   s&   |  j  j j   |  j j |  j _ d  S)N)r9   r|   r  rI   rS  r\   )r=   r   r"   r"   r#   r  Y  s    z(getPhases.<locals>.TextPhase.endTagOtherN)	r4   r5   r6   rF   r   r   r  r  r  r"   )rm  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)NrI  r>  r@  r$  r:  r<  r;  r5  r6  r8  rB  r  r  r  r  rE  )tbodytfootthead)tdthtr)zstylezscript)zbodyzcaptionzcolzcolgroupzhtmlr  r  r  r  r  r  )rF   r   r  rk  startTagCaptionstartTagColgroupstartTagColstartTagRowGroupstartTagImplyTbodyr\  startTagStyleScriptr_  rS  ri  r  r  endTagTableendTagIgnorerl  r  )r=   rI   r9   )rm  r"   r#   rF   _  s$     z(getPhases.<locals>.InTablePhase.__init__c             S   s4   x- |  j  j d j d k r/ |  j  j j   q Wd  S)Nr   rB  rI  rz   )ztablezhtml)r9   r|   r;   r  )r=   r"   r"   r#   clearStackToTableContextw  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   rI  zeof-in-tablerz   )r9   r|   r;   rI   r}   rN   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)rI   r\   rD   rS  r   )r=   r   rS  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  )rI   r\   rD   rS  r   )r=   r   rS  r"   r"   r#   r     s    z1getPhases.<locals>.InTablePhase.processCharactersc             S   s3   d |  j  _ |  j j d j |  d |  j  _ d  S)NTrC  F)r9   insertFromTablerI   rD   r   )r=   r   r"   r"   r#   rh    s    z*getPhases.<locals>.InTablePhase.insertTextc             S   sG   |  j    |  j j j t  |  j j |  |  j j d |  j _ d  S)Nr=  )	r  r9   r  r   r
   rR  rI   rD   r\   )r=   r   r"   r"   r#   r    s    
z/getPhases.<locals>.InTablePhase.startTagCaptionc             S   s4   |  j    |  j j |  |  j j d |  j _ d  S)Nr?  )r  r9   rR  rI   rD   r\   )r=   r   r"   r"   r#   r    s    
z0getPhases.<locals>.InTablePhase.startTagColgroupc             S   s   |  j  t d d   | S)Nr@  rm   )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)Nr9  )r  r9   rR  rI   rD   r\   )r=   r   r"   r"   r#   r    s    
z0getPhases.<locals>.InTablePhase.startTagRowGroupc             S   s   |  j  t d d   | S)Nr:  rm   )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-tagrB  r  r  )rI   r}   r\   r   r  rN   )r=   r   r"   r"   r#   r\    s
    z-getPhases.<locals>.InTablePhase.startTagTablec             S   s   |  j  j d j |  S)Nr  )rI   rD   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+   rr   r  z unexpected-hidden-input-in-table)	rg   r   rI   r}   r9   rR  r|   r  r  )r=   r   r"   r"   r#   r_    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   rz   )rI   r}   r9   r  rR  r|   r  )r=   r   r"   r"   r#   rS    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;   TrC  F)rI   r}   r9   r  rD   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)
NrB  r  r   zend-tag-too-early-namedr  r  rz   rz   rz   )r9   r  r  r|   r;   rI   r}   r  r^   rN   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;   )rI   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;   TrC  F)rI   r}   r9   r  rD   r   )r=   r   r"   r"   r#   r    s    z+getPhases.<locals>.InTablePhase.endTagOtherN)r4   r5   r6   rF   r  r   r   r   rh  r  r  r  r  r  r\  r  r_  rS  r  r  r  r  r"   )rm  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)rF   rS  characterTokens)r=   rI   r9   )rm  r"   r#   rF     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)	Nrr  c             S   s   g  |  ] } | d   q S)rr   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   	 rk   r+   rr   rA  )joinr  r  r   rI   rD   rh  r9   )r=   rr   r   r"   r"   r#   flushCharacters  s    z3getPhases.<locals>.InTableTextPhase.flushCharactersc             S   s   |  j    |  j |  j _ | S)N)r  rS  rI   r\   )r=   r   r"   r"   r#   r     s    
z2getPhases.<locals>.InTableTextPhase.processCommentc             S   s   |  j    |  j |  j _ d S)NT)r  rS  rI   r\   )r=   r"   r"   r#   r     s    
z.getPhases.<locals>.InTableTextPhase.processEOFc             S   s(   | d d k r d  S|  j  j |  d  S)Nrr   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  rS  rI   r\   )r=   r   r"   r"   r#   r     s    
z3getPhases.<locals>.InTableTextPhase.processStartTagc             S   s   |  j    |  j |  j _ | S)N)r  rS  rI   r\   )r=   r   r"   r"   r#   r     s    
z1getPhases.<locals>.InTableTextPhase.processEndTagN)r4   r5   r6   rF   r  r   r   r   r   r   r   r"   )rm  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)NrI  r>  r$  r@  r:  r5  r<  r6  r;  r8  rB  rE  )	zcaptioncolcolgrouptbodytdtfootththeadtr)
zbodyr  r  zhtmlr  r  r  r  r  r  )rF   r   r  rk  startTagTableElementri  r  r  endTagCaptionr  r  rl  r  )r=   rI   r9   )rm  r"   r#   rF     s      z*getPhases.<locals>.InCaptionPhase.__init__c             S   s   |  j  j d d d S)Nr>  r  rB  )r9   r  )r=   r"   r"   r#   ignoreEndTagCaption/  s    z5getPhases.<locals>.InCaptionPhase.ignoreEndTagCaptionc             S   s   |  j  j d j   d  S)NrC  )rI   rD   r   )r=   r"   r"   r#   r   2  s    z,getPhases.<locals>.InCaptionPhase.processEOFc             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   r   5  s    z3getPhases.<locals>.InCaptionPhase.processCharactersc             S   s@   |  j  j   |  j   } |  j  j j t d   | s< | Sd  S)Nr>  )rI   r}   r  r\   r   r  )r=   r   ignoreEndTagr"   r"   r#   r  8  s
    z6getPhases.<locals>.InCaptionPhase.startTagTableElementc             S   s   |  j  j d j |  S)NrC  )rI   rD   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   r>  z$expected-one-end-tag-but-got-anotherr  r  rA  rz   rz   rz   )r  r9   r  r|   r;   rI   r}   r  r  rD   r\   rN   r   )r=   r   r"   r"   r#   r  C  s    
z/getPhases.<locals>.InCaptionPhase.endTagCaptionc             S   s@   |  j  j   |  j   } |  j  j j t d   | s< | Sd  S)Nr>  )rI   r}   r  r\   r   r  )r=   r   r  r"   r"   r#   r  U  s
    z-getPhases.<locals>.InCaptionPhase.endTagTablec             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tagr;   )rI   r}   )r=   r   r"   r"   r#   r  \  s    z.getPhases.<locals>.InCaptionPhase.endTagIgnorec             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   r  _  s    z-getPhases.<locals>.InCaptionPhase.endTagOtherN)r4   r5   r6   rF   r  r   r   r  r  r  r  r  r  r"   )rm  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)NrI  r$  r@  )rF   r   r  rk  r  ri  r  r  endTagColgroup	endTagColrl  r  )r=   rI   r9   )rm  r"   r#   rF   e  s    z.getPhases.<locals>.InColumnGroupPhase.__init__c             S   s   |  j  j d j d k S)Nr   rI  rz   )r9   r|   r;   )r=   r"   r"   r#   ignoreEndTagColgroupt  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   rI  r@  Trz   )	r9   r|   r;   rI   rN   r   r  r  r  )r=   r  r"   r"   r#   r   w  s    z0getPhases.<locals>.InColumnGroupPhase.processEOFc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr@  )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)r9   rR  r|   r  )r=   r   r"   r"   r#   r    s    z1getPhases.<locals>.InColumnGroupPhase.startTagColc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr@  )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)NrA  )
r  rI   rN   r   r}   r9   r|   r  rD   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;   )rI   r}   )r=   r   r"   r"   r#   r    s    z/getPhases.<locals>.InColumnGroupPhase.endTagColc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr@  )r  r  r  )r=   r   r  r"   r"   r#   r    s    z1getPhases.<locals>.InColumnGroupPhase.endTagOtherN)r4   r5   r6   rF   r  r   r   r  r  r  r  r  r"   )rm  r"   r#   InColumnGroupPhaseb  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)NrI  r8  r5  r6  r>  r$  r@  r:  r<  r;  rB  rE  )tdth)captioncolcolgrouptbodytfootthead)r  r  r  )zbodyr  r  r  zhtmlr  r  ztr)rF   r   r  rk  
startTagTrstartTagTableCellstartTagTableOtherri  r  r  endTagTableRowGroupr  r  rl  r  )r=   rI   r9   )rm  r"   r#   rF     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   r:  r<  r;  rI  rz   )ztbodyztfootztheadzhtmlrz   )r9   r|   r;   r  rI   rN   r   )r=   r"   r"   r#   clearStackToTableBodyContext  s
    	z@getPhases.<locals>.InTableBodyPhase.clearStackToTableBodyContextc             S   s   |  j  j d j   d  S)NrA  )rI   rD   r   )r=   r"   r"   r#   r     s    z.getPhases.<locals>.InTableBodyPhase.processEOFc             S   s   |  j  j d j |  S)NrA  )rI   rD   r   )r=   r   r"   r"   r#   r     s    z:getPhases.<locals>.InTableBodyPhase.processSpaceCharactersc             S   s   |  j  j d j |  S)NrA  )rI   rD   r   )r=   r   r"   r"   r#   r     s    z5getPhases.<locals>.InTableBodyPhase.processCharactersc             S   s4   |  j    |  j j |  |  j j d |  j _ d  S)Nr7  )r  r9   rR  rI   rD   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;   r8  rm   )rI   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)Nr:  r  rB  r;  r<  r   rz   )r9   r  r  r  r  r|   r;   rI   rN   r   r}   )r=   r   r"   r"   r#   r    s    
z6getPhases.<locals>.InTableBodyPhase.startTagTableOtherc             S   s   |  j  j d j |  S)NrA  )rI   rD   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  rB  rA  z unexpected-end-tag-in-table-body)	r9   r  r  r|   r  rI   rD   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)Nr:  r  rB  r;  r<  r   rz   )r9   r  r  r  r  r|   r;   rI   rN   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;   )rI   r}   )r=   r   r"   r"   r#   r    s    z0getPhases.<locals>.InTableBodyPhase.endTagIgnorec             S   s   |  j  j d j |  S)NrA  )rI   rD   r   )r=   r   r"   r"   r#   r    s    z/getPhases.<locals>.InTableBodyPhase.endTagOtherN)r4   r5   r6   rF   r  r   r   r   r  r  r  r  r  r  r  r  r"   )rm  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)NrI  r5  r6  r>  r$  r@  r:  r<  r;  r8  rB  rE  )tdth)captioncolcolgrouptbodytfoottheadztr)r  r  r  )zbodyr  r  r  zhtmlr  r  )rF   r   r  rk  r  r  ri  r  r  endTagTrr  r  r  rl  r  )r=   rI   r9   )rm  r"   r#   rF     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   r8  rI  z'unexpected-implied-end-tag-in-table-rowr;   rz   )ztrzhtmlrz   )r9   r|   r;   rI   r}   r  )r=   r"   r"   r#   clearStackToTableRowContext  s    z9getPhases.<locals>.InRowPhase.clearStackToTableRowContextc             S   s   |  j  j d d d S)Nr8  r  rB  )r9   r  )r=   r"   r"   r#   ignoreEndTagTr!  s    z,getPhases.<locals>.InRowPhase.ignoreEndTagTrc             S   s   |  j  j d j   d  S)NrA  )rI   rD   r   )r=   r"   r"   r#   r   %  s    z(getPhases.<locals>.InRowPhase.processEOFc             S   s   |  j  j d j |  S)NrA  )rI   rD   r   )r=   r   r"   r"   r#   r   (  s    z4getPhases.<locals>.InRowPhase.processSpaceCharactersc             S   s   |  j  j d j |  S)NrA  )rI   rD   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)Nr4  )	r  r9   rR  rI   rD   r\   r  r   r
   )r=   r   r"   r"   r#   r  .  s    
z/getPhases.<locals>.InRowPhase.startTagTableCellc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr8  )r  r  r  )r=   r   r  r"   r"   r#   r  4  s    z0getPhases.<locals>.InRowPhase.startTagTableOtherc             S   s   |  j  j d j |  S)NrA  )rI   rD   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)Nr9  )r  r  r9   r|   r  rI   rD   r\   rN   r   r}   )r=   r   r"   r"   r#   r  >  s    
z&getPhases.<locals>.InRowPhase.endTagTrc             S   s-   |  j    } |  j t d   | s) | Sd  S)Nr8  )r  r  r  )r=   r   r  r"   r"   r#   r  H  s    z)getPhases.<locals>.InRowPhase.endTagTablec             S   sD   |  j  j | d d d r3 |  j t d   | S|  j j   d  S)Nr;   r  rB  r8  )r9   r  r  r  rI   r}   )r=   r   r"   r"   r#   r  P  s    z1getPhases.<locals>.InRowPhase.endTagTableRowGroupc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tag-in-table-rowr;   )rI   r}   )r=   r   r"   r"   r#   r  W  s    z*getPhases.<locals>.InRowPhase.endTagIgnorec             S   s   |  j  j d j |  S)NrA  )rI   rD   r   )r=   r   r"   r"   r#   r  [  s    z)getPhases.<locals>.InRowPhase.endTagOtherN)r4   r5   r6   rF   r  r  r   r   r   r  r  r  r  r  r  r  r  r"   )rm  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)NrI  r>  r$  r@  r:  r5  r<  r6  r;  r8  rE  rB  )	captioncolcolgrouptbodytdtfootththeadtr)r  r  )zbodyr  r   r  zhtml)ztabler  r  r  r  )rF   r   r  rk  r  ri  r  r  endTagTableCellr  endTagImplyrl  r  )r=   rI   r9   )rm  r"   r#   rF   `  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)Nr5  r  rB  r6  )r9   r  r  r  )r=   r"   r"   r#   	closeCellq  s    z(getPhases.<locals>.InCellPhase.closeCellc             S   s   |  j  j d j   d  S)NrC  )rI   rD   r   )r=   r"   r"   r#   r   x  s    z)getPhases.<locals>.InCellPhase.processEOFc             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   r   {  s    z0getPhases.<locals>.InCellPhase.processCharactersc             S   sa   |  j  j d d d s0 |  j  j d d d r> |  j   | S|  j j sP t  |  j j   d  S)Nr5  r  rB  r6  )r9   r  r
  rI   rN   r   r}   )r=   r   r"   r"   r#   r  ~  s    
z1getPhases.<locals>.InCellPhase.startTagTableOtherc             S   s   |  j  j d j |  S)NrC  )rI   rD   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  rB  r   zunexpected-cell-end-tagr7  zunexpected-end-tagrz   )r9   r  r  r|   r;   rI   r}   r  r  rD   r\   )r=   r   rL  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;   )rI   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  rB  )r9   r  r
  rI   r}   )r=   r   r"   r"   r#   r	    s    
z*getPhases.<locals>.InCellPhase.endTagImplyc             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   r    s    z*getPhases.<locals>.InCellPhase.endTagOtherN)r4   r5   r6   rF   r
  r   r   r  r  r  r  r	  r  r"   )rm  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)
NrI  r!  r"  r3  r  r  r  r  )zinputzkeygenztextarea)rF   r   r  rk  startTagOptionstartTagOptgrouprf  r_  r  ri  r  r  endTagOptionendTagOptgroupendTagSelectrl  r  )r=   rI   r9   )rm  r"   r#   rF     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   rI  zeof-in-selectrz   )r9   r|   r;   rI   r}   rN   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)Nrr   r  )r9   rh  )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!  rz   )r9   r|   r;   r  rR  )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"  rz   rz   )r9   r|   r;   r  rR  )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-selectr3  )rI   r}   r  r  )r=   r   r"   r"   r#   rf    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-selectr3  r  )rI   r}   r9   r  r  r  rN   r   )r=   r   r"   r"   r#   r_    s
    z.getPhases.<locals>.InSelectPhase.startTagInputc             S   s   |  j  j d j |  S)Nr  )rI   rD   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;   )rI   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;   rz   )r9   r|   r;   r  rI   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;   rz   rz   )r9   r|   r;   r  rI   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)Nr3  r  )
r9   r  r|   r  r;   rI   r^   rN   r   r}   )r=   r   rL  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;   )rI   r}   )r=   r   r"   r"   r#   r  
	  s    z,getPhases.<locals>.InSelectPhase.endTagOtherN)r4   r5   r6   rF   r   r   r  r  rf  r_  r  r  r  r  r  r  r"   )rm  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)Nr>  rB  r:  r<  r;  r8  r5  r6  )captiontabletbodytfoottheadtrtdth)r  r  r  r  r  r  r  r  )
rF   r   r  r\  ri  r  r  r  rl  r  )r=   rI   r9   )rm  r"   r#   rF   	  s    z0getPhases.<locals>.InSelectInTablePhase.__init__c             S   s   |  j  j d j   d  S)Nr2  )rI   rD   r   )r=   r"   r"   r#   r   	  s    z2getPhases.<locals>.InSelectInTablePhase.processEOFc             S   s   |  j  j d j |  S)Nr2  )rI   rD   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;   r3  )rI   r}   r  r  )r=   r   r"   r"   r#   r\  $	  s    z5getPhases.<locals>.InSelectInTablePhase.startTagTablec             S   s   |  j  j d j |  S)Nr2  )rI   rD   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  rB  r3  )rI   r}   r9   r  r  r  )r=   r   r"   r"   r#   r  ,	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagTablec             S   s   |  j  j d j |  S)Nr2  )rI   rD   r   )r=   r   r"   r"   r#   r  2	  s    z3getPhases.<locals>.InSelectInTablePhase.endTagOtherN)
r4   r5   r6   rF   r   r   r\  r  r  r  r"   )rm  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  rE  r  r  r   r  r$   r  r  r  r  h1h2h3h4h5h6rD  r  r  r  r  r  r  r-   r
  r  r!   r  r  r  r  spanr  r  subsuprB  r  r	  r  varc                s     j  |  | |  d  S)N)rF   )r=   rI   r9   )rm  r"   r#   rF   ?	  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#   adjustSVGTagNamesB	  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)Nrr   r  u   �c             s   s   |  ] } | t  k Vq d  S)N)r   )r:   r  r"   r"   r#   rZ  o	  s    zMgetPhases.<locals>.InForeignContentPhase.processCharacters.<locals>.<genexpr>F)rI   ra   r  r   )r=   r   )rm  r"   r#   r   k	  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  rr   colorfacesizez*unexpected-html-element-in-foreign-contentrb   rv   re   rx   Try   rz   rz   rz   rz   )r9   r|   breakoutElementssetr  rI   r}   re   r   ri   rj   r  r   r   rl  r"  r0  rR  )r=   r   r   r"   r"   r#   r   s	  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  rz   )r   r9   r|   r;   rI   r}   rg   r   r\   rD   r  rS  r  r   re   r   r   )r=   r   	nodeIndexrL  r   r"   r"   r#   r   	  s(    !
z6getPhases.<locals>.InForeignContentPhase.processEndTagN)
r4   r5   r6   r   rp  rF   rl  r   r   r   r"   )rm  r"   r#   InForeignContentPhase5	  s   )rs  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)NrI  )
rF   r   r  rk  ri  r  r  rm  rl  r  )r=   rI   r9   )rm  r"   r#   rF   	  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   )r9   rg  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-bodyrC  )rI   r}   rD   r\   )r=   r   r"   r"   r#   r   	  s    z3getPhases.<locals>.AfterBodyPhase.processCharactersc             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   rk  	  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;   rC  )rI   r}   rD   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)rI   rN   r}   rD   r\   )r=   r;   r"   r"   r#   rm  	  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;   rC  )rI   r}   rD   r\   )r=   r   r"   r"   r#   r  	  s    z-getPhases.<locals>.AfterBodyPhase.endTagOtherN)r4   r5   r6   rF   r   r   r   rk  r  rm  r  r"   )rm  r"   r#   AfterBodyPhase	  s   ru  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)NrI  rG  r%  r  )rF   r   r  rk  r  startTagFramestartTagNoframesri  r  r  endTagFramesetrl  r  )r=   rI   r9   )rm  r"   r#   rF   	  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   rI  zeof-in-framesetrz   )r9   r|   r;   rI   r}   rN   r   )r=   r"   r"   r#   r   	  s    z-getPhases.<locals>.InFramesetPhase.processEOFc             S   s   |  j  j d  d  S)Nzunexpected-char-in-frameset)rI   r}   )r=   r   r"   r"   r#   r   	  s    z4getPhases.<locals>.InFramesetPhase.processCharactersc             S   s   |  j  j |  d  S)N)r9   rR  )r=   r   r"   r"   r#   r  	  s    z3getPhases.<locals>.InFramesetPhase.startTagFramesetc             S   s$   |  j  j |  |  j  j j   d  S)N)r9   rR  r|   r  )r=   r   r"   r"   r#   rv  	  s    z0getPhases.<locals>.InFramesetPhase.startTagFramec             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   rw  	  s    z3getPhases.<locals>.InFramesetPhase.startTagNoframesc             S   s"   |  j  j d i | d d 6 d  S)Nz unexpected-start-tag-in-framesetr;   )rI   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   rI  z)unexpected-frameset-in-frameset-innerhtmlrG  afterFramesetrz   rz   )	r9   r|   r;   rI   r}   r  rN   rD   r\   )r=   r   r"   r"   r#   rx   
  s    z1getPhases.<locals>.InFramesetPhase.endTagFramesetc             S   s"   |  j  j d i | d d 6 d  S)Nzunexpected-end-tag-in-framesetr;   )rI   r}   )r=   r   r"   r"   r#   r  
  s    z.getPhases.<locals>.InFramesetPhase.endTagOtherN)r4   r5   r6   rF   r   r   r  rv  rw  r  rx  r  r"   )rm  r"   r#   InFramesetPhase	  s   rz  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)NrI  r  )rF   r   r  rk  rw  ri  r  r  rm  rl  r  )r=   rI   r9   )rm  r"   r#   rF   
  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)rI   r}   )r=   r   r"   r"   r#   r   $
  s    z7getPhases.<locals>.AfterFramesetPhase.processCharactersc             S   s   |  j  j d j |  S)Nr  )rI   rD   r   )r=   r   r"   r"   r#   rw  '
  s    z6getPhases.<locals>.AfterFramesetPhase.startTagNoframesc             S   s"   |  j  j d i | d d 6 d  S)Nz#unexpected-start-tag-after-framesetr;   )rI   r}   )r=   r   r"   r"   r#   r  *
  s    z3getPhases.<locals>.AfterFramesetPhase.startTagOtherc             S   s   |  j  j d |  j  _ d  S)NafterAfterFrameset)rI   rD   r\   )r=   r   r"   r"   r#   rm  .
  s    z0getPhases.<locals>.AfterFramesetPhase.endTagHtmlc             S   s"   |  j  j d i | d d 6 d  S)Nz!unexpected-end-tag-after-framesetr;   )rI   r}   )r=   r   r"   r"   r#   r  1
  s    z1getPhases.<locals>.AfterFramesetPhase.endTagOtherN)
r4   r5   r6   rF   r   r   rw  r  rm  r  r"   )rm  r"   r#   AfterFramesetPhase
  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>.AfterAfterBodyPhasec                sD     j  |  | |  t j d |  j f g  |  _ |  j |  j _ d  S)NrI  )rF   r   r  rk  ri  r  r  )r=   rI   r9   )rm  r"   r#   rF   6
  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)r9   rg  rn  )r=   r   r"   r"   r#   r   A
  s    z5getPhases.<locals>.AfterAfterBodyPhase.processCommentc             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   r   D
  s    z=getPhases.<locals>.AfterAfterBodyPhase.processSpaceCharactersc             S   s*   |  j  j d  |  j  j d |  j  _ | S)Nzexpected-eof-but-got-charrC  )rI   r}   rD   r\   )r=   r   r"   r"   r#   r   G
  s    z8getPhases.<locals>.AfterAfterBodyPhase.processCharactersc             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   rk  L
  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;   rC  )rI   r}   rD   r\   )r=   r   r"   r"   r#   r  O
  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;   rC  )rI   r}   rD   r\   )r=   r   r"   r"   r#   r   U
  s    z4getPhases.<locals>.AfterAfterBodyPhase.processEndTagN)r4   r5   r6   rF   r   r   r   r   rk  r  r   r"   )rm  r"   r#   AfterAfterBodyPhase5
  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>.AfterAfterFramesetPhasec                sP     j  |  | |  t j d |  j f d |  j f g  |  _ |  j |  j _ d  S)NrI  r  )rF   r   r  rk  startTagNoFramesri  r  r  )r=   rI   r9   )rm  r"   r#   rF   \
  s
    z3getPhases.<locals>.AfterAfterFramesetPhase.__init__c             S   s   d  S)Nr"   )r=   r"   r"   r#   r   e
  s    z5getPhases.<locals>.AfterAfterFramesetPhase.processEOFc             S   s   |  j  j | |  j  j  d  S)N)r9   rg  rn  )r=   r   r"   r"   r#   r   h
  s    z9getPhases.<locals>.AfterAfterFramesetPhase.processCommentc             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   r   k
  s    zAgetPhases.<locals>.AfterAfterFramesetPhase.processSpaceCharactersc             S   s   |  j  j d  d  S)Nzexpected-eof-but-got-char)rI   r}   )r=   r   r"   r"   r#   r   n
  s    z<getPhases.<locals>.AfterAfterFramesetPhase.processCharactersc             S   s   |  j  j d j |  S)NrC  )rI   rD   r   )r=   r   r"   r"   r#   rk  q
  s    z7getPhases.<locals>.AfterAfterFramesetPhase.startTagHtmlc             S   s   |  j  j d j |  S)Nr  )rI   rD   r   )r=   r   r"   r"   r#   r~  t
  s    z;getPhases.<locals>.AfterAfterFramesetPhase.startTagNoFramesc             S   s"   |  j  j d i | d d 6 d  S)Nzexpected-eof-but-got-start-tagr;   )rI   r}   )r=   r   r"   r"   r#   r  w
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.startTagOtherc             S   s"   |  j  j d i | d d 6 d  S)Nzexpected-eof-but-got-end-tagr;   )rI   r}   )r=   r   r"   r"   r#   r   {
  s    z8getPhases.<locals>.AfterAfterFramesetPhase.processEndTagN)r4   r5   r6   rF   r   r   r   r   rk  r~  r  r   r"   )rm  r"   r#   AfterAfterFramesetPhase[
  s   	r  rS   rR   rH  r  r  rC  rQ  rA  r  r=  r?  r9  r7  r4  r2  r  rw   r  rF  ry  rt  r{  )r   )rE   rU   re  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rs  ru  rz  r|  r}  r  r"   )rm  r#   rC     sd    %)#.cC  !-GAbYLd's/9%&$rC   rn   Fc             C   s9   | d  k r i  } n  i t  | d 6|  d 6| d 6| d 6S)Nr+   r;   rr   rx   )r   )r;   r+   rf   rx   r"   r"   r#   r  
  s    	r  c               @   s   e  Z d  Z d Z d S)rq   zError in parsed documentN)r4   r5   r6   rV  r"   r"   r"   r#   rq   
  s   rq   )#
__future__r   r   r   Zpip._vendor.sixr   r)   rr  r   r   r	   Ztreebuilders._baser
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r8   r  r   rC   r  	Exceptionrq   r"   r"   r"   r#   <module>   sB   	 v        