�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ� ���ͯj�ӣ��ƺ���ӣ� ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!PKe%1]U7U7 serializer.pynu[from __future__ import absolute_import, division, unicode_literals from six import text_type import re from codecs import register_error, xmlcharrefreplace_errors from .constants import voidElements, booleanAttributes, spaceCharacters from .constants import rcdataElements, entities, xmlEntities from . import treewalkers, _utils from xml.sax.saxutils import escape _quoteAttributeSpecChars = "".join(spaceCharacters) + "\"'=<>`" _quoteAttributeSpec = re.compile("[" + _quoteAttributeSpecChars + "]") _quoteAttributeLegacy = re.compile("[" + _quoteAttributeSpecChars + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n" "\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15" "\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" "\x20\x2f\x60\xa0\u1680\u180e\u180f\u2000" "\u2001\u2002\u2003\u2004\u2005\u2006\u2007" "\u2008\u2009\u200a\u2028\u2029\u202f\u205f" "\u3000]") _encode_entity_map = {} _is_ucs4 = len("\U0010FFFF") == 1 for k, v in list(entities.items()): # skip multi-character entities if ((_is_ucs4 and len(v) > 1) or (not _is_ucs4 and len(v) > 2)): continue if v != "&": if len(v) == 2: v = _utils.surrogatePairToCodepoint(v) else: v = ord(v) if v not in _encode_entity_map or k.islower(): # prefer < over < and similarly for &, >, etc. _encode_entity_map[v] = k def htmlentityreplace_errors(exc): if isinstance(exc, (UnicodeEncodeError, UnicodeTranslateError)): res = [] codepoints = [] skip = False for i, c in enumerate(exc.object[exc.start:exc.end]): if skip: skip = False continue index = i + exc.start if _utils.isSurrogatePair(exc.object[index:min([exc.end, index + 2])]): codepoint = _utils.surrogatePairToCodepoint(exc.object[index:index + 2]) skip = True else: codepoint = ord(c) codepoints.append(codepoint) for cp in codepoints: e = _encode_entity_map.get(cp) if e: res.append("&") res.append(e) if not e.endswith(";"): res.append(";") else: res.append("&#x%s;" % (hex(cp)[2:])) return ("".join(res), exc.end) else: return xmlcharrefreplace_errors(exc) register_error("htmlentityreplace", htmlentityreplace_errors) def serialize(input, tree="etree", encoding=None, **serializer_opts): # XXX: Should we cache this? walker = treewalkers.getTreeWalker(tree) s = HTMLSerializer(**serializer_opts) return s.render(walker(input), encoding) class HTMLSerializer(object): # attribute quoting options quote_attr_values = "legacy" # be secure by default quote_char = '"' use_best_quote_char = True # tag syntax options omit_optional_tags = True minimize_boolean_attributes = True use_trailing_solidus = False space_before_trailing_solidus = True # escaping options escape_lt_in_attrs = False escape_rcdata = False resolve_entities = True # miscellaneous options alphabetical_attributes = False inject_meta_charset = True strip_whitespace = False sanitize = False options = ("quote_attr_values", "quote_char", "use_best_quote_char", "omit_optional_tags", "minimize_boolean_attributes", "use_trailing_solidus", "space_before_trailing_solidus", "escape_lt_in_attrs", "escape_rcdata", "resolve_entities", "alphabetical_attributes", "inject_meta_charset", "strip_whitespace", "sanitize") def __init__(self, **kwargs): """Initialize HTMLSerializer. Keyword options (default given first unless specified) include: inject_meta_charset=True|False Whether it insert a meta element to define the character set of the document. quote_attr_values="legacy"|"spec"|"always" Whether to quote attribute values that don't require quoting per legacy browser behaviour, when required by the standard, or always. quote_char=u'"'|u"'" Use given quote character for attribute quoting. Default is to use double quote unless attribute value contains a double quote, in which case single quotes are used instead. escape_lt_in_attrs=False|True Whether to escape < in attribute values. escape_rcdata=False|True Whether to escape characters that need to be escaped within normal elements within rcdata elements such as style. resolve_entities=True|False Whether to resolve named character entities that appear in the source tree. The XML predefined entities < > & " ' are unaffected by this setting. strip_whitespace=False|True Whether to remove semantically meaningless whitespace. (This compresses all whitespace to a single space except within pre.) minimize_boolean_attributes=True|False Shortens boolean attributes to give just the attribute value, for example becomes . use_trailing_solidus=False|True Includes a close-tag slash at the end of the start tag of void elements (empty elements whose end tag is forbidden). E.g.
. space_before_trailing_solidus=True|False Places a space immediately before the closing slash in a tag using a trailing solidus. E.g.
. Requires use_trailing_solidus. sanitize=False|True Strip all unsafe or unknown constructs from output. See `html5lib user documentation`_ omit_optional_tags=True|False Omit start/end tags that are optional. alphabetical_attributes=False|True Reorder attributes to be in alphabetical order. .. _html5lib user documentation: http://code.google.com/p/html5lib/wiki/UserDocumentation """ unexpected_args = frozenset(kwargs) - frozenset(self.options) if len(unexpected_args) > 0: raise TypeError("__init__() got an unexpected keyword argument '%s'" % next(iter(unexpected_args))) if 'quote_char' in kwargs: self.use_best_quote_char = False for attr in self.options: setattr(self, attr, kwargs.get(attr, getattr(self, attr))) self.errors = [] self.strict = False def encode(self, string): assert(isinstance(string, text_type)) if self.encoding: return string.encode(self.encoding, "htmlentityreplace") else: return string def encodeStrict(self, string): assert(isinstance(string, text_type)) if self.encoding: return string.encode(self.encoding, "strict") else: return string def serialize(self, treewalker, encoding=None): # pylint:disable=too-many-nested-blocks self.encoding = encoding in_cdata = False self.errors = [] if encoding and self.inject_meta_charset: from .filters.inject_meta_charset import Filter treewalker = Filter(treewalker, encoding) # Alphabetical attributes is here under the assumption that none of # the later filters add or change order of attributes; it needs to be # before the sanitizer so escaped elements come out correctly if self.alphabetical_attributes: from .filters.alphabeticalattributes import Filter treewalker = Filter(treewalker) # WhitespaceFilter should be used before OptionalTagFilter # for maximum efficiently of this latter filter if self.strip_whitespace: from .filters.whitespace import Filter treewalker = Filter(treewalker) if self.sanitize: from .filters.sanitizer import Filter treewalker = Filter(treewalker) if self.omit_optional_tags: from .filters.optionaltags import Filter treewalker = Filter(treewalker) for token in treewalker: type = token["type"] if type == "Doctype": doctype = "= 0: if token["systemId"].find("'") >= 0: self.serializeError("System identifer contains both single and double quote characters") quote_char = "'" else: quote_char = '"' doctype += " %s%s%s" % (quote_char, token["systemId"], quote_char) doctype += ">" yield self.encodeStrict(doctype) elif type in ("Characters", "SpaceCharacters"): if type == "SpaceCharacters" or in_cdata: if in_cdata and token["data"].find("= 0: self.serializeError("Unexpected ") elif type == "EndTag": name = token["name"] if name in rcdataElements: in_cdata = False elif in_cdata: self.serializeError("Unexpected child element of a CDATA element") yield self.encodeStrict("" % name) elif type == "Comment": data = token["data"] if data.find("--") >= 0: self.serializeError("Comment contains --") yield self.encodeStrict("" % token["data"]) elif type == "Entity": name = token["name"] key = name + ";" if key not in entities: self.serializeError("Entity %s not recognized" % name) if self.resolve_entities and key not in xmlEntities: data = entities[key] else: data = "&%s;" % name yield self.encodeStrict(data) else: self.serializeError(token["data"]) def render(self, treewalker, encoding=None): if encoding: return b"".join(list(self.serialize(treewalker, encoding))) else: return "".join(list(self.serialize(treewalker))) def serializeError(self, data="XXX ERROR MESSAGE NEEDED"): # XXX The idea is to make data mandatory. self.errors.append(data) if self.strict: raise SerializeError class SerializeError(Exception): """Error in serialized tree""" pass PKe%1]2$__pycache__/constants.cpython-36.pycnu[3 B;WE@s-ddlmZmZmZddlZdZddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d,d,d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddZdddddddZeeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfgZ eeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfgZ eeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfgNZ eeddfeddfeddfeddfgZ eeddfeddfeddfeddfeddfgZ ddddddddddddddddddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/>Zd0d1iZd2d3ed2fd2d4ed2fd2d5ed2fd2d6ed2fd2d7ed2fd2ded2fd2d8ed2fd9ded9fd9d:ed9fd9d;ed9fddd?ejDZed@dAdBdCdDgZedddddgZeejZeejZeejZeejZeejZedEd?ejDZd|Z edddFddddddddddԐdGdHgZ!eddgZ"edddddddgZ#edIgedJgedKgedLdMgedLdMgedNdOgedPgedQdRgedSdRdTdUgedVgedWgedRdXgedRdXdYgedRdXgedRdZgedRdXd[dZdTdKgedRdXdZdQgedRdXgd\Z$d}Z%edydzd{d|d}gZ&d~d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐddѐdԐdՐd֐dÐdאdؐdِdڐdېdܐdݐdސdߐdddddddddddddԐddddddddddddddddddddddddddddddddddd d d d d d dddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d(d+dd,d-d.d/d0d0d1d1d2d3d4d5d5d4d6d7dڐd8d9d:d;d<d=d>d?d@dAdBdCdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdՐd֐dudvdwdxdydzd{d|d}d~ddddאdؐdِddddXdddddddddddddddddddddd"ddAddddddddddddddddddddddddddddddddddddddddddddd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ߐdddddddddddddddddd'ddddddddddddddddddddddddddddddd dd d d d ddddddddddddddddddd dڐd!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0dߐd^d d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d?d@dAdBdCdDddEdFdGdHdFdIdIdJdKdLd@dMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d^d_d`dadbdcdcdddedfdgdgdhdidjdkdldmdndodpd1dqdrdsdtdudvdܐdݐdwdxdydzd{d|d}d~d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddɐdɐddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐dd͐dΐdϐdYdАdѐdҐdӐdԐdYdҐdՐdՐd֐dאdYddؐdؐdِdِddڐdېdܐdݐdސdߐdddddkddܐddddddݐdddddd:ddmddddddddddddd ddddddddddddddududdddddd d d d d dddddddddddddddd*dddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.dސdd/d/d0d1dߐdd2d3d4d5d5dd6d,d,d7d8d9d:d;d<d=d>d?d$d@dAdBdBdCdDdEdFdddGdHdHddIdJdKdKdLdMdNdOdPdQdRddSdTdUdVdPdWdXdYdZdZd[ddd\d]d^d3d^ddXd_dd`ddddadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdldmdydzd{d{dndwdydzdd|d}dԐd~dddߐddiddːdddϐdddddddddddddΐdΐdddѐdddddddddddddʐdӐddddddߐdddddddddddddddd ddddddddddddddddddddddddddddddddddddddddddÐdĐdĐdŐddddddƐdǐddȐdɐdʐdːd̐dӐdd͐dΐdΐdϐdϐdАdѐdddddҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސd dߐddddddddddddddddddddddddddddddddddddddddddddddd"ddddddddd d d d dd d d̐d d dddddddddddddddd ddd֐ddd(ddgdddddddddd d!d"d#d$d%d&d'd(dd)d*dd+d+d;d,d,d-d.d/d/d֐d0d1d1d7d2d3d4d5d6d7d4d@d4d8d9d:dd;d<d=d8d9d>dd>d?d@dAdBdCdDd@dEdEdFddGdHdIdJdd<dKdLdMdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d}dՐd`dadvdbdcdddedXdfd]dgd]dhdidid^d_djdkd$dldmdndodpdqdrdsdtdudvdwdxdydzd{d|dadvd}d~dܐdddddd^doddsddgd`dddduddvdydydddddddhddudbdwdzddfddwdddsdddddddddddddddddddddbdddddldddddddidddddd`dddddddddzdddwdݐdddTdTddddddddddndddddddddddddddjdvddddddddÐdÐddאdĐdddŐd!ddƐdǐdddȐdɐddʐddːd̐d̐d͐dΐddϐdАdѐdҐddӐdԐdՐdƐd֐dאd̐dؐdِdڐd̐dېdېddddddܐdݐdސdːdߐdddddddxdxdddddddddddddddddАddddddddϐdddddddddddddddd͐ddddddddddddddddddddddddӐdddddddÐdŐdĐdd͐ddɐdʐdʐd͐ddddddddddÐdĐdddȐdǐdȐddddddddddddddd d d d d dddddddddddwdwddSdddTdUddddVdddddd d!d"d#d#d$d%dِddQd&d'dd(d)d*d+d,dd-d.d/dd0dRd1d2d2d3d3d4d4d5d6d7d8d2d9d9d:d;d;dd<d=d=d>dސd?d?dސd@dAddBdCdDdEdudFdGdHdIddJdKdߐdLddMddNdOd"dPddQdRdddSdTddUdVdWdWddXdYddddYdddZd[d\dd]dd[dZd\dd^d_d`ddddadbdcddded2dfdgdhd)didjdǐddd#dڐdkddldmdnd5dod dpdqd drdrd dsd dtdudvd%ddwdxdydzd{d|ddd}d~dddddddd~dddddddd$dd!dddddddddddd dyddddddzdddʐdddddddddddddddddddd%ddddddddddddddAddddCdBdddddddDdddddd ddddddddddddddddސddddddVddWdWdddddÐdĐdŐd^ddƐdǐddȐdɐdʐdːd̐d͐dΐdϐdАdѐdѐdސd7dҐd<dӐd8d9d8d9d:d;d:d;d6d6d d d dԐddȐd>dՐddŐdIdd֐dאdؐd@dِdڐdېdܐdݐdސd֐d@dאdܐdېdߐdddAddCdBddddDdEddddddddGddddHdddddddddGdHdddddddd!dddddddddddd[dddRdRddddYdVdUdYdVddd͐ddd#ddd3dddddddddJd dddnd ddd d d d dddddddddYddܐdddd1ddddddrddtdddddqddd d d!d"d#dѐdѐd$d%d1dsdqddnd&dyd&d'd(d(d)d*d+d,d-d.d dd'd/d/d0dݐd1d2dېd3dŐdWddIdLddsddd4d5d6d7ddldd8dd0d9d:d;ddd<dlddǐd=ddd>d5d4d7d6d?d@dAddBdCdDdEdCdddFd:ddmddGdؐddHdאdddIddJdddِddKddddddLdLdMdNdOdPdPdQdRdSdTdUdVdVdWdXdYdZdd[d\d]d^d_d`dadbdcZ'dddDdАdeddݐdddddOdEd,ddѐdfddgdhdݐddܐdd5ddd͐dJddddidXddj"Z(ddkdldmdndodpdqdrZ)ee)dse)dte)dugZ*edvd?ejDZ+dwe+d<Gdxdydye,Z-Gdzd{d{e.Z/dS(~)absolute_importdivisionunicode_literalsNz5Null character in input stream, replaced with U+FFFD.zInvalid codepoint in stream.z&Solidus (/) incorrectly placed in tag.z.Incorrect CR newline entity, replaced with LF.z9Entity used with illegal number (windows-1252 reference).zPNumeric entity couldn't be converted to character (codepoint U+%(charAsInt)08x).zBNumeric entity represents an illegal codepoint: U+%(charAsInt)08x.z#Numeric entity didn't end with ';'.z1Numeric entity expected. Got end of file instead.z'Numeric entity expected but none found.z!Named entity didn't end with ';'.z Named entity expected. Got none.z'End tag contains unexpected attributes.z.End tag contains unexpected self-closing flag.z#Expected tag name. Got '>' instead.zSExpected tag name. Got '?' instead. (HTML doesn't support processing instructions.)z-Expected tag name. Got something else insteadz6Expected closing tag. Got '>' instead. Ignoring ''.z-Expected closing tag. Unexpected end of file.z' instead.z"Unexpected = in unquoted attributez*Unexpected character in unquoted attributez*Unexpected character after attribute name.z+Unexpected character after attribute value.z.Unexpected end of file in attribute value (").z.Unexpected end of file in attribute value (').z*Unexpected end of file in attribute value.z)Unexpected end of file in tag. Expected >z/Unexpected character after / in tag. Expected >z&Expected '--' or 'DOCTYPE'. Not found.z Unexpected ! after -- in commentz$Unexpected space after -- in commentzIncorrect comment.z"Unexpected end of file in comment.z%Unexpected end of file in comment (-)z+Unexpected '-' after '--' found in comment.z'Unexpected end of file in comment (--).z&Unexpected character in comment found.z(No space after literal string 'DOCTYPE'.z.Unexpected > character. Expected DOCTYPE name.z.Unexpected end of file. Expected DOCTYPE name.z'Unexpected end of file in DOCTYPE name.z"Unexpected end of file in DOCTYPE.z%Expected space or '>'. Got '%(data)s'zUnexpected end of DOCTYPE.z Unexpected character in DOCTYPE.zXXX innerHTML EOFzUnexpected DOCTYPE. Ignored.z%html needs to be the first start tag.z)Unexpected End of file. Expected DOCTYPE.zErroneous DOCTYPE.z2Unexpected non-space characters. Expected DOCTYPE.z2Unexpected start tag (%(name)s). Expected DOCTYPE.z0Unexpected end tag (%(name)s). Expected DOCTYPE.z?Unexpected end tag (%(name)s) after the (implied) root element.z4Unexpected end of file. Expected end tag (%(name)s).z4Unexpected start tag head in existing head. Ignored.z'Unexpected end tag (%(name)s). Ignored.z;Unexpected start tag (%(name)s) that can be in head. Moved.z Unexpected start tag (%(name)s).zMissing end tag (%(name)s).zMissing end tags (%(name)s).zCUnexpected start tag (%(startName)s) implies end tag (%(endName)s).z@Unexpected start tag (%(originalName)s). Treated as %(newName)s.z,Unexpected start tag %(name)s. Don't use it!z'Unexpected start tag %(name)s. Ignored.zEUnexpected end tag (%(gotName)s). Missing end tag (%(expectedName)s).z:End tag (%(name)s) seen too early. Expected other end tag.zFUnexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s).z+End tag (%(name)s) seen too early. Ignored.zQEnd tag (%(name)s) violates step 1, paragraph 1 of the adoption agency algorithm.zQEnd tag (%(name)s) violates step 1, paragraph 2 of the adoption agency algorithm.zQEnd tag (%(name)s) violates step 1, paragraph 3 of the adoption agency algorithm.zQEnd tag (%(name)s) violates step 4, paragraph 4 of the adoption agency algorithm.z>Unexpected end tag (%(originalName)s). Treated as %(newName)s.z'This element (%(name)s) has no end tag.z9Unexpected implied end tag (%(name)s) in the table phase.z>Unexpected implied end tag (%(name)s) in the table body phase.zDUnexpected non-space characters in table context caused voodoo mode.z3Unexpected input with type hidden in table context.z!Unexpected form in table context.zDUnexpected start tag (%(name)s) in table context caused voodoo mode.zBUnexpected end tag (%(name)s) in table context caused voodoo mode.zCUnexpected table cell start tag (%(name)s) in the table body phase.zFGot table cell end tag (%(name)s) while required end tags are missing.z?Unexpected end tag (%(name)s) in the table body phase. Ignored.z=Unexpected implied end tag (%(name)s) in the table row phase.z>Unexpected end tag (%(name)s) in the table row phase. Ignored.zJUnexpected select start tag in the select phase treated as select end tag.z/Unexpected input start tag in the select phase.zBUnexpected start tag token (%(name)s in the select phase. Ignored.z;Unexpected end tag (%(name)s) in the select phase. Ignored.zKUnexpected table element start tag (%(name)s) in the select in table phase.zIUnexpected table element end tag (%(name)s) in the select in table phase.z8Unexpected non-space characters in the after body phase.z>Unexpected start tag token (%(name)s) in the after body phase.zZ attributenameZ attributetypeZ basefrequencyZ baseprofileZcalcmodeZ clippathunitsZcontentscripttypeZcontentstyletypeZdiffuseconstantZedgemodeZexternalresourcesrequiredZ filterresZ filterunitsZglyphrefZgradienttransformZ gradientunitsZ kernelmatrixZkernelunitlengthZ keypointsZ keysplinesZkeytimesZ lengthadjustZlimitingconeangleZ markerheightZ markerunitsZ markerwidthZmaskcontentunitsZ maskunitsZ numoctavesZ pathlengthZpatterncontentunitsZpatterntransformZ patternunitsZ pointsatxZ pointsatyZ pointsatzZ preservealphaZpreserveaspectratioZprimitiveunitsZrefxZrefyZ repeatcountZ repeatdurZrequiredextensionsZrequiredfeaturesZspecularconstantZspecularexponentZ spreadmethodZ startoffsetZ stddeviationZ stitchtilesZ surfacescaleZsystemlanguageZ tablevaluesZtargetxZtargetyZ textlengthZviewboxZ viewtargetZxchannelselectorZychannelselectorZ zoomandpanZ definitionurlZ definitionURLrZactuateZarcroleZhrefZroleZshowtyper ZlangZspacer ) z xlink:actuatez xlink:arcrolez xlink:hrefz xlink:rolez xlink:showz xlink:titlez xlink:typezxml:basezxml:langz xml:spacer z xmlns:xlinkcCs"g|]\}\}}}||f|fqSr2).0ZqnameprefixZlocalnsr2r2/usr/lib/python3.6/constants.py sr7     cCs g|]}t|t|jfqSr2)ordlower)r3cr2r2r6r7#sz event-sourcesourceZtrackZ irrelevantZscopedZismapZautoplayZcontrolsZdeferasyncopenZmultipleZdisabledZhiddenZcheckeddefaultZnoshadeZ autosubmitreadonlyZselectedZ autofocusZrequired)r0r(ZaudioZvideor.rZdatagridrr'r+rZoptionZoptgrouprr)r/output   & ! 0 `9 R}    "   "!a: S~xzlt;zgt;zamp;zapos;zquot;Æ&ÁuĂÂuАu𝔄ÀuΑuĀu⩓uĄu𝔸u⁡Åu𝒜u≔ÃÄu∖u⫧u⌆uБu∵uℬuΒu𝔅u𝔹u˘u≎uЧ©uĆu⋒uⅅuℭuČÇuĈu∰uĊ¸·uΧu⊙u⊖u⊕u⊗u∲u”u’u∷u⩴u≡u∯u∮uℂu∐u∳u⨯u𝒞u⋓u≍u⤑uЂuЅuЏu‡u↡u⫤uĎuДu∇uΔu𝔇´u˙u˝`u˜u⋄uⅆu𝔻¨u⃜u≐u⇓u⇐u⇔u⟸u⟺u⟹u⇒u⊨u⇑u⇕u∥u↓u⤓u⇵ȗu⥐u⥞u↽u⥖u⥟u⇁u⥗u⊤u↧u𝒟uĐuŊÐÉuĚÊuЭuĖu𝔈Èu∈uĒu◻u▫uĘu𝔼uΕu⩵u≂u⇌uℰu⩳uΗËu∃uⅇuФu𝔉u◼u▪u𝔽u∀uℱuЃ>uΓuϜuĞuĢuĜuГuĠu𝔊u⋙u𝔾u≥u⋛u≧u⪢u≷u⩾u≳u𝒢u≫uЪuˇ^uĤuℌuℋuℍu─uĦu≏uЕuIJuЁÍÎuИuİuℑÌuĪuⅈu∬u∫u⋂u⁣u⁢uĮu𝕀uΙuℐuĨuІÏuĴuЙu𝔍u𝕁u𝒥uЈuЄuХuЌuΚuĶuКu𝔎u𝕂u𝒦uЉ⃒u⧞u⤂u≤⃒u<⃒u⊴⃒u⤃u⊵⃒u∼⃒u⇖u⤣u⤧óôuоuőu⨸u⦼uœu⦿u𝔬u˛òu⧁u⦵u⦾u⦻u⧀uōuωuοu⦶u𝕠u⦷u⦹u∨u⩝uℴªºu⊶u⩖u⩗u⩛øu⊘õu⨶öu⌽¶u⫳u⫽uп%.u‰u‱u𝔭uφuϕu☎uπuϖuℎ+u⨣u⨢u⨥u⩲u⨦u⨧u⨕u𝕡£u⪳u⪷u⪹u⪵u⋨u′u⌮u⌒u⌓u⊰u𝓅uψu u𝔮u𝕢u⁗u𝓆u⨖?u⤜u⥤u∽̱uŕu⦳u⦒u⦥»u⥵u⤠u⤳u⤞u⥅u⥴u↣u↝u⤚u∶u❳}]u⦌u⦎u⦐uřuŗuрu⤷u⥩u↳u▭u⥽u𝔯u⥬uρuϱu⇉u⋌u˚u‏u⎱u⫮u⟭u⇾u⦆u𝕣u⨮u⨵)u⦔u⨒u›u𝓇u⋊u▹u⧎u⥨u℞uśu⪴u⪸ušuşuŝu⪶u⪺u⋩u⨓uсu⋅u⩦u⇘§;u⤩u✶u𝔰u♯uщuш­uσuςu⩪u⪞u⪠u⪝u⪟u≆u⨤u⥲u⨳u⧤u⌣u⪪u⪬u⪬︀uь/u⧄u⌿u𝕤u♠u⊓︀u⊔︀u𝓈u☆u⊂u⫅u⪽u⫃u⫁u⫋u⊊u⪿u⥹u⫇u⫕u⫓u♪¹²³u⫆u⪾u⫘u⫄u⟉u⫗u⥻u⫂u⫌u⊋u⫀u⫈u⫔u⫖u⇙u⤪ßu⌖uτuťuţuтu⌕u𝔱uθuϑþ×u⨱u⨰u⌶u⫱u𝕥u⫚u‴u▵u≜u◬u⨺u⨹u⧍u⨻u⏢u𝓉uцuћuŧu⥣úuўuŭûuуuűu⥾u𝔲ùu▀u⌜u⌏u◸uūuųu𝕦uυu⇈u⌝u⌎uůu◹u𝓊u⋰uũüu⦧u⫨u⫩u⦜u⊊︀u⫋︀u⊋︀u⫌︀uвu⊻u≚u⋮u𝔳u𝕧u𝓋u⦚uŵu⩟u≙u℘u𝔴u𝕨u𝓌u𝔵uξu⋻u𝕩u𝓍ýuяuŷuы¥u𝔶uїu𝕪u𝓎uюÿuźužuзużuζu𝔷uжu⇝u𝕫u𝓏u‍u‌(ZAEligzAElig;ZAMPzAMP;ZAacutezAacute;zAbreve;ZAcirczAcirc;zAcy;zAfr;ZAgravezAgrave;zAlpha;zAmacr;zAnd;zAogon;zAopf;zApplyFunction;ZAringzAring;zAscr;zAssign;ZAtildezAtilde;ZAumlzAuml;z Backslash;zBarv;zBarwed;zBcy;zBecause;z Bernoullis;zBeta;zBfr;zBopf;zBreve;zBscr;zBumpeq;zCHcy;ZCOPYzCOPY;zCacute;zCap;zCapitalDifferentialD;zCayleys;zCcaron;ZCcedilzCcedil;zCcirc;zCconint;zCdot;zCedilla;z CenterDot;zCfr;zChi;z CircleDot;z CircleMinus;z CirclePlus;z CircleTimes;zClockwiseContourIntegral;zCloseCurlyDoubleQuote;zCloseCurlyQuote;zColon;zColone;z Congruent;zConint;zContourIntegral;zCopf;z Coproduct;z CounterClockwiseContourIntegral;zCross;zCscr;zCup;zCupCap;zDD;z DDotrahd;zDJcy;zDScy;zDZcy;zDagger;zDarr;zDashv;zDcaron;zDcy;zDel;zDelta;zDfr;zDiacriticalAcute;zDiacriticalDot;zDiacriticalDoubleAcute;zDiacriticalGrave;zDiacriticalTilde;zDiamond;zDifferentialD;zDopf;zDot;zDotDot;z DotEqual;zDoubleContourIntegral;z DoubleDot;zDoubleDownArrow;zDoubleLeftArrow;zDoubleLeftRightArrow;zDoubleLeftTee;zDoubleLongLeftArrow;zDoubleLongLeftRightArrow;zDoubleLongRightArrow;zDoubleRightArrow;zDoubleRightTee;zDoubleUpArrow;zDoubleUpDownArrow;zDoubleVerticalBar;z DownArrow;z DownArrowBar;zDownArrowUpArrow;z DownBreve;zDownLeftRightVector;zDownLeftTeeVector;zDownLeftVector;zDownLeftVectorBar;zDownRightTeeVector;zDownRightVector;zDownRightVectorBar;zDownTee;z DownTeeArrow;z Downarrow;zDscr;zDstrok;zENG;ZETHzETH;ZEacutezEacute;zEcaron;ZEcirczEcirc;zEcy;zEdot;zEfr;ZEgravezEgrave;zElement;zEmacr;zEmptySmallSquare;zEmptyVerySmallSquare;zEogon;zEopf;zEpsilon;zEqual;z EqualTilde;z Equilibrium;zEscr;zEsim;zEta;ZEumlzEuml;zExists;z ExponentialE;zFcy;zFfr;zFilledSmallSquare;zFilledVerySmallSquare;zFopf;zForAll;z Fouriertrf;zFscr;zGJcy;ZGTzGT;zGamma;zGammad;zGbreve;zGcedil;zGcirc;zGcy;zGdot;zGfr;zGg;zGopf;z GreaterEqual;zGreaterEqualLess;zGreaterFullEqual;zGreaterGreater;z GreaterLess;zGreaterSlantEqual;z GreaterTilde;zGscr;zGt;zHARDcy;zHacek;zHat;zHcirc;zHfr;z HilbertSpace;zHopf;zHorizontalLine;zHscr;zHstrok;z HumpDownHump;z HumpEqual;zIEcy;zIJlig;zIOcy;ZIacutezIacute;ZIcirczIcirc;zIcy;zIdot;zIfr;ZIgravezIgrave;zIm;zImacr;z ImaginaryI;zImplies;zInt;z Integral;z Intersection;zInvisibleComma;zInvisibleTimes;zIogon;zIopf;zIota;zIscr;zItilde;zIukcy;ZIumlzIuml;zJcirc;zJcy;zJfr;zJopf;zJscr;zJsercy;zJukcy;zKHcy;zKJcy;zKappa;zKcedil;zKcy;zKfr;zKopf;zKscr;zLJcy;ZLTzLT;zLacute;zLambda;zLang;z Laplacetrf;zLarr;zLcaron;zLcedil;zLcy;zLeftAngleBracket;z LeftArrow;z LeftArrowBar;zLeftArrowRightArrow;z LeftCeiling;zLeftDoubleBracket;zLeftDownTeeVector;zLeftDownVector;zLeftDownVectorBar;z LeftFloor;zLeftRightArrow;zLeftRightVector;zLeftTee;z LeftTeeArrow;zLeftTeeVector;z LeftTriangle;zLeftTriangleBar;zLeftTriangleEqual;zLeftUpDownVector;zLeftUpTeeVector;z LeftUpVector;zLeftUpVectorBar;z LeftVector;zLeftVectorBar;z Leftarrow;zLeftrightarrow;zLessEqualGreater;zLessFullEqual;z LessGreater;z LessLess;zLessSlantEqual;z LessTilde;zLfr;zLl;z Lleftarrow;zLmidot;zLongLeftArrow;zLongLeftRightArrow;zLongRightArrow;zLongleftarrow;zLongleftrightarrow;zLongrightarrow;zLopf;zLowerLeftArrow;zLowerRightArrow;zLscr;zLsh;zLstrok;zLt;zMap;zMcy;z MediumSpace;z Mellintrf;zMfr;z MinusPlus;zMopf;zMscr;zMu;zNJcy;zNacute;zNcaron;zNcedil;zNcy;zNegativeMediumSpace;zNegativeThickSpace;zNegativeThinSpace;zNegativeVeryThinSpace;zNestedGreaterGreater;zNestedLessLess;zNewLine;zNfr;zNoBreak;zNonBreakingSpace;zNopf;zNot;z NotCongruent;z NotCupCap;zNotDoubleVerticalBar;z NotElement;z NotEqual;zNotEqualTilde;z NotExists;z NotGreater;zNotGreaterEqual;zNotGreaterFullEqual;zNotGreaterGreater;zNotGreaterLess;zNotGreaterSlantEqual;zNotGreaterTilde;zNotHumpDownHump;z NotHumpEqual;zNotLeftTriangle;zNotLeftTriangleBar;zNotLeftTriangleEqual;zNotLess;z NotLessEqual;zNotLessGreater;z NotLessLess;zNotLessSlantEqual;z NotLessTilde;zNotNestedGreaterGreater;zNotNestedLessLess;z NotPrecedes;zNotPrecedesEqual;zNotPrecedesSlantEqual;zNotReverseElement;zNotRightTriangle;zNotRightTriangleBar;zNotRightTriangleEqual;zNotSquareSubset;zNotSquareSubsetEqual;zNotSquareSuperset;zNotSquareSupersetEqual;z NotSubset;zNotSubsetEqual;z NotSucceeds;zNotSucceedsEqual;zNotSucceedsSlantEqual;zNotSucceedsTilde;z NotSuperset;zNotSupersetEqual;z NotTilde;zNotTildeEqual;zNotTildeFullEqual;zNotTildeTilde;zNotVerticalBar;zNscr;ZNtildezNtilde;zNu;zOElig;ZOacutezOacute;ZOcirczOcirc;zOcy;zOdblac;zOfr;ZOgravezOgrave;zOmacr;zOmega;zOmicron;zOopf;zOpenCurlyDoubleQuote;zOpenCurlyQuote;zOr;zOscr;ZOslashzOslash;ZOtildezOtilde;zOtimes;ZOumlzOuml;zOverBar;z OverBrace;z OverBracket;zOverParenthesis;z PartialD;zPcy;zPfr;zPhi;zPi;z PlusMinus;zPoincareplane;zPopf;zPr;z Precedes;zPrecedesEqual;zPrecedesSlantEqual;zPrecedesTilde;zPrime;zProduct;z Proportion;z Proportional;zPscr;zPsi;ZQUOTzQUOT;zQfr;zQopf;zQscr;zRBarr;ZREGzREG;zRacute;zRang;zRarr;zRarrtl;zRcaron;zRcedil;zRcy;zRe;zReverseElement;zReverseEquilibrium;zReverseUpEquilibrium;zRfr;zRho;zRightAngleBracket;z RightArrow;zRightArrowBar;zRightArrowLeftArrow;z RightCeiling;zRightDoubleBracket;zRightDownTeeVector;zRightDownVector;zRightDownVectorBar;z RightFloor;z RightTee;zRightTeeArrow;zRightTeeVector;zRightTriangle;zRightTriangleBar;zRightTriangleEqual;zRightUpDownVector;zRightUpTeeVector;zRightUpVector;zRightUpVectorBar;z RightVector;zRightVectorBar;z Rightarrow;zRopf;z RoundImplies;z Rrightarrow;zRscr;zRsh;z RuleDelayed;zSHCHcy;zSHcy;zSOFTcy;zSacute;zSc;zScaron;zScedil;zScirc;zScy;zSfr;zShortDownArrow;zShortLeftArrow;zShortRightArrow;z ShortUpArrow;zSigma;z SmallCircle;zSopf;zSqrt;zSquare;zSquareIntersection;z SquareSubset;zSquareSubsetEqual;zSquareSuperset;zSquareSupersetEqual;z SquareUnion;zSscr;zStar;zSub;zSubset;z SubsetEqual;z Succeeds;zSucceedsEqual;zSucceedsSlantEqual;zSucceedsTilde;z SuchThat;zSum;zSup;z Superset;zSupersetEqual;zSupset;ZTHORNzTHORN;zTRADE;zTSHcy;zTScy;zTab;zTau;zTcaron;zTcedil;zTcy;zTfr;z Therefore;zTheta;z ThickSpace;z ThinSpace;zTilde;z TildeEqual;zTildeFullEqual;z TildeTilde;zTopf;z TripleDot;zTscr;zTstrok;ZUacutezUacute;zUarr;z Uarrocir;zUbrcy;zUbreve;ZUcirczUcirc;zUcy;zUdblac;zUfr;ZUgravezUgrave;zUmacr;z UnderBar;z UnderBrace;z UnderBracket;zUnderParenthesis;zUnion;z UnionPlus;zUogon;zUopf;zUpArrow;z UpArrowBar;zUpArrowDownArrow;z UpDownArrow;zUpEquilibrium;zUpTee;z UpTeeArrow;zUparrow;z Updownarrow;zUpperLeftArrow;zUpperRightArrow;zUpsi;zUpsilon;zUring;zUscr;zUtilde;ZUumlzUuml;zVDash;zVbar;zVcy;zVdash;zVdashl;zVee;zVerbar;zVert;z VerticalBar;z VerticalLine;zVerticalSeparator;zVerticalTilde;zVeryThinSpace;zVfr;zVopf;zVscr;zVvdash;zWcirc;zWedge;zWfr;zWopf;zWscr;zXfr;zXi;zXopf;zXscr;zYAcy;zYIcy;zYUcy;ZYacutezYacute;zYcirc;zYcy;zYfr;zYopf;zYscr;zYuml;zZHcy;zZacute;zZcaron;zZcy;zZdot;zZeroWidthSpace;zZeta;zZfr;zZopf;zZscr;Zaacutezaacute;zabreve;zac;zacE;zacd;Zacirczacirc;Zacutezacute;zacy;Zaeligzaelig;zaf;zafr;Zagravezagrave;zalefsym;zaleph;zalpha;zamacr;zamalg;Zampzamp;zand;zandand;zandd;z andslope;zandv;zang;zange;zangle;zangmsd;z angmsdaa;z angmsdab;z angmsdac;z angmsdad;z angmsdae;z angmsdaf;z angmsdag;z angmsdah;zangrt;zangrtvb;z angrtvbd;zangsph;zangst;zangzarr;zaogon;zaopf;zap;zapE;zapacir;zape;zapid;zapos;zapprox;z approxeq;Zaringzaring;zascr;zast;zasymp;zasympeq;Zatildezatilde;Zaumlzauml;z awconint;zawint;zbNot;z backcong;z backepsilon;z backprime;zbacksim;z backsimeq;zbarvee;zbarwed;z barwedge;zbbrk;z bbrktbrk;zbcong;zbcy;zbdquo;zbecaus;zbecause;zbemptyv;zbepsi;zbernou;zbeta;zbeth;zbetween;zbfr;zbigcap;zbigcirc;zbigcup;zbigodot;z bigoplus;z bigotimes;z bigsqcup;zbigstar;zbigtriangledown;zbigtriangleup;z biguplus;zbigvee;z bigwedge;zbkarow;z blacklozenge;z blacksquare;zblacktriangle;zblacktriangledown;zblacktriangleleft;zblacktriangleright;zblank;zblk12;zblk14;zblk34;zblock;zbne;zbnequiv;zbnot;zbopf;zbot;zbottom;zbowtie;zboxDL;zboxDR;zboxDl;zboxDr;zboxH;zboxHD;zboxHU;zboxHd;zboxHu;zboxUL;zboxUR;zboxUl;zboxUr;zboxV;zboxVH;zboxVL;zboxVR;zboxVh;zboxVl;zboxVr;zboxbox;zboxdL;zboxdR;zboxdl;zboxdr;zboxh;zboxhD;zboxhU;zboxhd;zboxhu;z boxminus;zboxplus;z boxtimes;zboxuL;zboxuR;zboxul;zboxur;zboxv;zboxvH;zboxvL;zboxvR;zboxvh;zboxvl;zboxvr;zbprime;zbreve;Zbrvbarzbrvbar;zbscr;zbsemi;zbsim;zbsime;zbsol;zbsolb;z bsolhsub;zbull;zbullet;zbump;zbumpE;zbumpe;zbumpeq;zcacute;zcap;zcapand;z capbrcup;zcapcap;zcapcup;zcapdot;zcaps;zcaret;zcaron;zccaps;zccaron;Zccedilzccedil;zccirc;zccups;zccupssm;zcdot;Zcedilzcedil;zcemptyv;Zcentzcent;z centerdot;zcfr;zchcy;zcheck;z checkmark;zchi;zcir;zcirE;zcirc;zcirceq;zcirclearrowleft;zcirclearrowright;z circledR;z circledS;z circledast;z circledcirc;z circleddash;zcire;z cirfnint;zcirmid;zcirscir;zclubs;z clubsuit;zcolon;zcolone;zcoloneq;zcomma;zcommat;zcomp;zcompfn;z complement;z complexes;zcong;zcongdot;zconint;zcopf;zcoprod;copyzcopy;zcopysr;zcrarr;zcross;zcscr;zcsub;zcsube;zcsup;zcsupe;zctdot;zcudarrl;zcudarrr;zcuepr;zcuesc;zcularr;zcularrp;zcup;z cupbrcap;zcupcap;zcupcup;zcupdot;zcupor;zcups;zcurarr;zcurarrm;z curlyeqprec;z curlyeqsucc;z curlyvee;z curlywedge;Zcurrenzcurren;zcurvearrowleft;zcurvearrowright;zcuvee;zcuwed;z cwconint;zcwint;zcylcty;zdArr;zdHar;zdagger;zdaleth;zdarr;zdash;zdashv;zdbkarow;zdblac;zdcaron;zdcy;zdd;zddagger;zddarr;zddotseq;Zdegzdeg;zdelta;zdemptyv;zdfisht;zdfr;zdharl;zdharr;zdiam;zdiamond;z diamondsuit;zdiams;zdie;zdigamma;zdisin;zdiv;Zdividezdivide;zdivideontimes;zdivonx;zdjcy;zdlcorn;zdlcrop;zdollar;zdopf;zdot;zdoteq;z doteqdot;z dotminus;zdotplus;z dotsquare;zdoublebarwedge;z downarrow;zdowndownarrows;zdownharpoonleft;zdownharpoonright;z drbkarow;zdrcorn;zdrcrop;zdscr;zdscy;zdsol;zdstrok;zdtdot;zdtri;zdtrif;zduarr;zduhar;zdwangle;zdzcy;z dzigrarr;zeDDot;zeDot;Zeacutezeacute;zeaster;zecaron;zecir;Zecirczecirc;zecolon;zecy;zedot;zee;zefDot;zefr;zeg;Zegravezegrave;zegs;zegsdot;zel;z elinters;zell;zels;zelsdot;zemacr;zempty;z emptyset;zemptyv;zemsp13;zemsp14;zemsp;zeng;zensp;zeogon;zeopf;zepar;zeparsl;zeplus;zepsi;zepsilon;zepsiv;zeqcirc;zeqcolon;zeqsim;z eqslantgtr;z eqslantless;zequals;zequest;zequiv;zequivDD;z eqvparsl;zerDot;zerarr;zescr;zesdot;zesim;zeta;Zethzeth;Zeumlzeuml;zeuro;zexcl;zexist;z expectation;z exponentiale;zfallingdotseq;zfcy;zfemale;zffilig;zfflig;zffllig;zffr;zfilig;zfjlig;zflat;zfllig;zfltns;zfnof;zfopf;zforall;zfork;zforkv;z fpartint;Zfrac12zfrac12;zfrac13;Zfrac14zfrac14;zfrac15;zfrac16;zfrac18;zfrac23;zfrac25;Zfrac34zfrac34;zfrac35;zfrac38;zfrac45;zfrac56;zfrac58;zfrac78;zfrasl;zfrown;zfscr;zgE;zgEl;zgacute;zgamma;zgammad;zgap;zgbreve;zgcirc;zgcy;zgdot;zge;zgel;zgeq;zgeqq;z geqslant;zges;zgescc;zgesdot;zgesdoto;z gesdotol;zgesl;zgesles;zgfr;zgg;zggg;zgimel;zgjcy;zgl;zglE;zgla;zglj;zgnE;zgnap;z gnapprox;zgne;zgneq;zgneqq;zgnsim;zgopf;zgrave;zgscr;zgsim;zgsime;zgsiml;gtzgt;zgtcc;zgtcir;zgtdot;zgtlPar;zgtquest;z gtrapprox;zgtrarr;zgtrdot;z gtreqless;z gtreqqless;zgtrless;zgtrsim;z gvertneqq;zgvnE;zhArr;zhairsp;zhalf;zhamilt;zhardcy;zharr;zharrcir;zharrw;zhbar;zhcirc;zhearts;z heartsuit;zhellip;zhercon;zhfr;z hksearow;z hkswarow;zhoarr;zhomtht;zhookleftarrow;zhookrightarrow;zhopf;zhorbar;zhscr;zhslash;zhstrok;zhybull;zhyphen;Ziacuteziacute;zic;Zicirczicirc;zicy;ziecy;Ziexclziexcl;ziff;zifr;Zigravezigrave;zii;ziiiint;ziiint;ziinfin;ziiota;zijlig;zimacr;zimage;z imagline;z imagpart;zimath;zimof;zimped;zin;zincare;zinfin;z infintie;zinodot;zint;zintcal;z integers;z intercal;z intlarhk;zintprod;ziocy;ziogon;ziopf;ziota;ziprod;Ziquestziquest;ziscr;zisin;zisinE;zisindot;zisins;zisinsv;zisinv;zit;zitilde;ziukcy;Ziumlziuml;zjcirc;zjcy;zjfr;zjmath;zjopf;zjscr;zjsercy;zjukcy;zkappa;zkappav;zkcedil;zkcy;zkfr;zkgreen;zkhcy;zkjcy;zkopf;zkscr;zlAarr;zlArr;zlAtail;zlBarr;zlE;zlEg;zlHar;zlacute;z laemptyv;zlagran;zlambda;zlang;zlangd;zlangle;zlap;Zlaquozlaquo;zlarr;zlarrb;zlarrbfs;zlarrfs;zlarrhk;zlarrlp;zlarrpl;zlarrsim;zlarrtl;zlat;zlatail;zlate;zlates;zlbarr;zlbbrk;zlbrace;zlbrack;zlbrke;zlbrksld;zlbrkslu;zlcaron;zlcedil;zlceil;zlcub;zlcy;zldca;zldquo;zldquor;zldrdhar;z ldrushar;zldsh;zle;z leftarrow;zleftarrowtail;zleftharpoondown;zleftharpoonup;zleftleftarrows;zleftrightarrow;zleftrightarrows;zleftrightharpoons;zleftrightsquigarrow;zleftthreetimes;zleg;zleq;zleqq;z leqslant;zles;zlescc;zlesdot;zlesdoto;z lesdotor;zlesg;zlesges;z lessapprox;zlessdot;z lesseqgtr;z lesseqqgtr;zlessgtr;zlesssim;zlfisht;zlfloor;zlfr;zlg;zlgE;zlhard;zlharu;zlharul;zlhblk;zljcy;zll;zllarr;z llcorner;zllhard;zlltri;zlmidot;zlmoust;z lmoustache;zlnE;zlnap;z lnapprox;zlne;zlneq;zlneqq;zlnsim;zloang;zloarr;zlobrk;zlongleftarrow;zlongleftrightarrow;z longmapsto;zlongrightarrow;zlooparrowleft;zlooparrowright;zlopar;zlopf;zloplus;zlotimes;zlowast;zlowbar;zloz;zlozenge;zlozf;zlpar;zlparlt;zlrarr;z lrcorner;zlrhar;zlrhard;zlrm;zlrtri;zlsaquo;zlscr;zlsh;zlsim;zlsime;zlsimg;zlsqb;zlsquo;zlsquor;zlstrok;ltzlt;zltcc;zltcir;zltdot;zlthree;zltimes;zltlarr;zltquest;zltrPar;zltri;zltrie;zltrif;z lurdshar;zluruhar;z lvertneqq;zlvnE;zmDDot;Zmacrzmacr;zmale;zmalt;zmaltese;zmap;zmapsto;z mapstodown;z mapstoleft;z mapstoup;zmarker;zmcomma;zmcy;zmdash;zmeasuredangle;zmfr;zmho;microzmicro;zmid;zmidast;zmidcir;Zmiddotzmiddot;zminus;zminusb;zminusd;zminusdu;zmlcp;zmldr;zmnplus;zmodels;zmopf;zmp;zmscr;zmstpos;zmu;z multimap;zmumap;znGg;znGt;znGtv;z nLeftarrow;znLeftrightarrow;znLl;znLt;znLtv;z nRightarrow;znVDash;znVdash;znabla;znacute;znang;znap;znapE;znapid;znapos;znapprox;znatur;znatural;z naturals;Znbspznbsp;znbump;znbumpe;zncap;zncaron;zncedil;zncong;z ncongdot;zncup;zncy;zndash;zne;zneArr;znearhk;znearr;znearrow;znedot;znequiv;znesear;znesim;znexist;znexists;znfr;zngE;znge;zngeq;zngeqq;z ngeqslant;znges;zngsim;zngt;zngtr;znhArr;znharr;znhpar;zni;znis;znisd;zniv;znjcy;znlArr;znlE;znlarr;znldr;znle;z nleftarrow;znleftrightarrow;znleq;znleqq;z nleqslant;znles;znless;znlsim;znlt;znltri;znltrie;znmid;znopf;notznot;znotin;znotinE;z notindot;znotinva;znotinvb;znotinvc;znotni;znotniva;znotnivb;znotnivc;znpar;z nparallel;znparsl;znpart;znpolint;znpr;znprcue;znpre;znprec;znpreceq;znrArr;znrarr;znrarrc;znrarrw;z nrightarrow;znrtri;znrtrie;znsc;znsccue;znsce;znscr;z nshortmid;znshortparallel;znsim;znsime;znsimeq;znsmid;znspar;znsqsube;znsqsupe;znsub;znsubE;znsube;znsubset;z nsubseteq;z nsubseteqq;znsucc;znsucceq;znsup;znsupE;znsupe;znsupset;z nsupseteq;z nsupseteqq;zntgl;Zntildezntilde;zntlg;zntriangleleft;zntrianglelefteq;zntriangleright;zntrianglerighteq;znu;znum;znumero;znumsp;znvDash;znvHarr;znvap;znvdash;znvge;znvgt;znvinfin;znvlArr;znvle;znvlt;znvltrie;znvrArr;znvrtrie;znvsim;znwArr;znwarhk;znwarr;znwarrow;znwnear;zoS;Zoacutezoacute;zoast;zocir;Zocirczocirc;zocy;zodash;zodblac;zodiv;zodot;zodsold;zoelig;zofcir;zofr;zogon;Zogravezograve;zogt;zohbar;zohm;zoint;zolarr;zolcir;zolcross;zoline;zolt;zomacr;zomega;zomicron;zomid;zominus;zoopf;zopar;zoperp;zoplus;zor;zorarr;zord;zorder;zorderof;Zordfzordf;Zordmzordm;zorigof;zoror;zorslope;zorv;zoscr;Zoslashzoslash;zosol;Zotildezotilde;zotimes;z otimesas;Zoumlzouml;zovbar;zpar;Zparazpara;z parallel;zparsim;zparsl;zpart;zpcy;zpercnt;zperiod;zpermil;zperp;zpertenk;zpfr;zphi;zphiv;zphmmat;zphone;zpi;z pitchfork;zpiv;zplanck;zplanckh;zplankv;zplus;z plusacir;zplusb;zpluscir;zplusdo;zplusdu;zpluse;Zplusmnzplusmn;zplussim;zplustwo;zpm;z pointint;zpopf;Zpoundzpound;zpr;zprE;zprap;zprcue;zpre;zprec;z precapprox;z preccurlyeq;zpreceq;z precnapprox;z precneqq;z precnsim;zprecsim;zprime;zprimes;zprnE;zprnap;zprnsim;zprod;z profalar;z profline;z profsurf;zprop;zpropto;zprsim;zprurel;zpscr;zpsi;zpuncsp;zqfr;zqint;zqopf;zqprime;zqscr;z quaternions;zquatint;zquest;zquesteq;Zquotzquot;zrAarr;zrArr;zrAtail;zrBarr;zrHar;zrace;zracute;zradic;z raemptyv;zrang;zrangd;zrange;zrangle;Zraquozraquo;zrarr;zrarrap;zrarrb;zrarrbfs;zrarrc;zrarrfs;zrarrhk;zrarrlp;zrarrpl;zrarrsim;zrarrtl;zrarrw;zratail;zratio;z rationals;zrbarr;zrbbrk;zrbrace;zrbrack;zrbrke;zrbrksld;zrbrkslu;zrcaron;zrcedil;zrceil;zrcub;zrcy;zrdca;zrdldhar;zrdquo;zrdquor;zrdsh;zreal;zrealine;z realpart;zreals;zrect;Zregzreg;zrfisht;zrfloor;zrfr;zrhard;zrharu;zrharul;zrho;zrhov;z rightarrow;zrightarrowtail;zrightharpoondown;zrightharpoonup;zrightleftarrows;zrightleftharpoons;zrightrightarrows;zrightsquigarrow;zrightthreetimes;zring;z risingdotseq;zrlarr;zrlhar;zrlm;zrmoust;z rmoustache;zrnmid;zroang;zroarr;zrobrk;zropar;zropf;zroplus;zrotimes;zrpar;zrpargt;z rppolint;zrrarr;zrsaquo;zrscr;zrsh;zrsqb;zrsquo;zrsquor;zrthree;zrtimes;zrtri;zrtrie;zrtrif;z rtriltri;zruluhar;zrx;zsacute;zsbquo;zsc;zscE;zscap;zscaron;zsccue;zsce;zscedil;zscirc;zscnE;zscnap;zscnsim;z scpolint;zscsim;zscy;zsdot;zsdotb;zsdote;zseArr;zsearhk;zsearr;zsearrow;Zsectzsect;zsemi;zseswar;z setminus;zsetmn;zsext;zsfr;zsfrown;zsharp;zshchcy;zshcy;z shortmid;zshortparallel;Zshyzshy;zsigma;zsigmaf;zsigmav;zsim;zsimdot;zsime;zsimeq;zsimg;zsimgE;zsiml;zsimlE;zsimne;zsimplus;zsimrarr;zslarr;zsmallsetminus;zsmashp;z smeparsl;zsmid;zsmile;zsmt;zsmte;zsmtes;zsoftcy;zsol;zsolb;zsolbar;zsopf;zspades;z spadesuit;zspar;zsqcap;zsqcaps;zsqcup;zsqcups;zsqsub;zsqsube;z sqsubset;z sqsubseteq;zsqsup;zsqsupe;z sqsupset;z sqsupseteq;zsqu;zsquare;zsquarf;zsquf;zsrarr;zsscr;zssetmn;zssmile;zsstarf;zstar;zstarf;zstraightepsilon;z straightphi;zstrns;zsub;zsubE;zsubdot;zsube;zsubedot;zsubmult;zsubnE;zsubne;zsubplus;zsubrarr;zsubset;z subseteq;z subseteqq;z subsetneq;z subsetneqq;zsubsim;zsubsub;zsubsup;zsucc;z succapprox;z succcurlyeq;zsucceq;z succnapprox;z succneqq;z succnsim;zsuccsim;zsum;zsung;Zsup1zsup1;Zsup2zsup2;Zsup3zsup3;zsup;zsupE;zsupdot;zsupdsub;zsupe;zsupedot;zsuphsol;zsuphsub;zsuplarr;zsupmult;zsupnE;zsupne;zsupplus;zsupset;z supseteq;z supseteqq;z supsetneq;z supsetneqq;zsupsim;zsupsub;zsupsup;zswArr;zswarhk;zswarr;zswarrow;zswnwar;Zszligzszlig;ztarget;ztau;ztbrk;ztcaron;ztcedil;ztcy;ztdot;ztelrec;ztfr;zthere4;z therefore;ztheta;z thetasym;zthetav;z thickapprox;z thicksim;zthinsp;zthkap;zthksim;Zthornzthorn;ztilde;timesztimes;ztimesb;z timesbar;ztimesd;ztint;ztoea;ztop;ztopbot;ztopcir;ztopf;ztopfork;ztosa;ztprime;ztrade;z triangle;z triangledown;z triangleleft;ztrianglelefteq;z triangleq;ztriangleright;ztrianglerighteq;ztridot;ztrie;z triminus;ztriplus;ztrisb;ztritime;z trpezium;ztscr;ztscy;ztshcy;ztstrok;ztwixt;ztwoheadleftarrow;ztwoheadrightarrow;zuArr;zuHar;Zuacutezuacute;zuarr;zubrcy;zubreve;Zucirczucirc;zucy;zudarr;zudblac;zudhar;zufisht;zufr;Zugravezugrave;zuharl;zuharr;zuhblk;zulcorn;z ulcorner;zulcrop;zultri;zumacr;Zumlzuml;zuogon;zuopf;zuparrow;z updownarrow;zupharpoonleft;zupharpoonright;zuplus;zupsi;zupsih;zupsilon;z upuparrows;zurcorn;z urcorner;zurcrop;zuring;zurtri;zuscr;zutdot;zutilde;zutri;zutrif;zuuarr;Zuumlzuuml;zuwangle;zvArr;zvBar;zvBarv;zvDash;zvangrt;z varepsilon;z varkappa;z varnothing;zvarphi;zvarpi;z varpropto;zvarr;zvarrho;z varsigma;z varsubsetneq;zvarsubsetneqq;z varsupsetneq;zvarsupsetneqq;z vartheta;zvartriangleleft;zvartriangleright;zvcy;zvdash;zvee;zveebar;zveeeq;zvellip;zverbar;zvert;zvfr;zvltri;zvnsub;zvnsup;zvopf;zvprop;zvrtri;zvscr;zvsubnE;zvsubne;zvsupnE;zvsupne;zvzigzag;zwcirc;zwedbar;zwedge;zwedgeq;zweierp;zwfr;zwopf;zwp;zwr;zwreath;zwscr;zxcap;zxcirc;zxcup;zxdtri;zxfr;zxhArr;zxharr;zxi;zxlArr;zxlarr;zxmap;zxnis;zxodot;zxopf;zxoplus;zxotime;zxrArr;zxrarr;zxscr;zxsqcup;zxuplus;zxutri;zxvee;zxwedge;Zyacutezyacute;zyacy;zycirc;zycy;Zyenzyen;zyfr;zyicy;zyopf;zyscr;zyucy;Zyumlzyuml;zzacute;zzcaron;zzcy;zzdot;zzeetrf;zzeta;zzfr;zzhcy;zzigrarr;zzopf;zzscr;zzwj;zzwnj;u�)"r )ZDoctypeZ CharactersZSpaceCharactersStartTagEndTagEmptyTagCommentZ ParseErrorrrrcCsg|]\}}||fqSr2r2)r3kvr2r2r6r7x sZmathc@s eZdZdS)DataLossWarningN)__name__ __module__ __qualname__r2r2r2r6r| src@s eZdZdS)ReparseExceptionN)rrrr2r2r2r6r sr)rr r!r"r#r$) rGrHrIrJrKrLrMrNrOrPrQrRrSrHrTrHrHrUrVrWrXrYrZr[r\r]r^r_r`rHrarb)0Z __future__rrrstringZEOFEZ namespaces frozensetZscopingElementsZformattingElementsZspecialElementsZhtmlIntegrationPointElementsZ"mathmlTextIntegrationPointElementsZadjustSVGAttributesZadjustMathMLAttributesZadjustForeignAttributesdictitemsZunadjustForeignAttributesZspaceCharactersZtableInsertModeElementsZascii_lowercaseZasciiLowercaseZascii_uppercaseZasciiUppercaseZ ascii_lettersZ asciiLettersZdigitsZ hexdigitsZ hexDigitsZasciiUpper2LowerZheadingElementsZ voidElementsZ cdataElementsZrcdataElementsZbooleanAttributesZentitiesWindows1252Z xmlEntitiesZentitiesZreplacementCharactersZ tokenTypesZ tagTokenTypesprefixes UserWarningr Exceptionrr2r2r2r6s<                                                                                                                                       PKe%1]ؠ !__pycache__/_utils.cpython-36.pycnu[3 B;W@s ddlmZmZmZddlZddlmZddlmZyddl j j Z Wn e k rdddlj jZ YnXddddd d d gZejdd koejd dkZy,edZeeesedZeeestWndZYnXdZGdddeZddZddZdd ZddZdS))absolute_importdivisionunicode_literalsN) ModuleType) text_type default_etreeMethodDispatcherisSurrogatePairsurrogatePairToCodepointmoduleFactoryFactorysupports_lone_surrogatesPY27z"\uD800"z u"\uD800"FTc@s$eZdZdZffddZddZdS)rapDict with 2 special properties: On initiation, keys that are lists, sets or tuples are converted to multiple keys so accessing any one of the items in the original list-like object returns the matching value md = MethodDispatcher({("foo", "bar"):"baz"}) md["foo"] == "baz" A default value which can be set through the default attribute. cCs~g}xN|D]F\}}t|ttttfrBx*|D]}|j||fq*Wq |j||fq Wtj||t|t|kstt d|_ dS)N) isinstancelisttuple frozensetsetappenddict__init__lenAssertionErrordefault)selfitemsZ _dictEntriesnamevalueitemr!/usr/lib/python3.6/_utils.pyr4s  zMethodDispatcher.__init__cCstj|||jS)N)rgetr)rkeyr!r!r" __getitem__CszMethodDispatcher.__getitem__N)__name__ __module__ __qualname____doc__rr%r!r!r!r"r's  cCsLt|dkoJt|ddkoJt|ddkoJt|ddkoJt|ddkS)Nrriirii)rord)datar!r!r"r Js  cCs,dt|dddt|dd}|S)Niriiri)r*)r+Zchar_valr!r!r"r Pscsifdd}|S)Nc sttjtdrd|j}n d|j}t|j}y|||Stk rt|}|f||}|jj|dkri|<d|kri||<d||kri|||<||||<|SXdS)Nz _%s_factorys _%s_factoryrargskwargs) rrr&typerrKeyError__dict__update)Z baseModuler-r.rZ kwargs_tuplemodZobjs)factory moduleCacher!r" moduleFactory\s$      z+moduleFactoryFactory..moduleFactoryr!)r4r6r!)r4r5r"r Yscsifdd}|S)Ncs2t|t|jf}|kr*|||<|S)N)rr)r-r.r$)cachefuncr!r"wrappedyszmemoize..wrappedr!)r8r9r!)r7r8r"memoizevsr:)Z __future__rrrsystypesrZsixrZxml.etree.cElementTreeZetreeZ cElementTreer ImportErrorZxml.etree.ElementTreeZ ElementTree__all__ version_infor evalZ_xrrr rrr r r r:r!r!r!r"s0    # PKe%1]y% '__pycache__/_utils.cpython-36.opt-1.pycnu[3 B;W@sddlmZmZmZddlZddlmZddlmZyddl j j Z Wn e k rdddlj jZ YnXddddd d d gZejdd koejd dkZyedZeeesedZWndZYnXdZGdddeZddZddZdd ZddZdS))absolute_importdivisionunicode_literalsN) ModuleType) text_type default_etreeMethodDispatcherisSurrogatePairsurrogatePairToCodepointmoduleFactoryFactorysupports_lone_surrogatesPY27z"\uD800"z u"\uD800"FTc@s$eZdZdZffddZddZdS)rapDict with 2 special properties: On initiation, keys that are lists, sets or tuples are converted to multiple keys so accessing any one of the items in the original list-like object returns the matching value md = MethodDispatcher({("foo", "bar"):"baz"}) md["foo"] == "baz" A default value which can be set through the default attribute. cCsjg}xN|D]F\}}t|ttttfrBx*|D]}|j||fq*Wq |j||fq Wtj||d|_dS)N) isinstancelisttuple frozensetsetappenddict__init__default)selfitemsZ _dictEntriesnamevalueitemr/usr/lib/python3.6/_utils.pyr4s  zMethodDispatcher.__init__cCstj|||jS)N)rgetr)rkeyrrr __getitem__CszMethodDispatcher.__getitem__N)__name__ __module__ __qualname____doc__rr#rrrr r's  cCsLt|dkoJt|ddkoJt|ddkoJt|ddkoJt|ddkS)Nrriirii)lenord)datarrr r Js  cCs,dt|dddt|dd}|S)Niriiri)r))r*Zchar_valrrr r Pscsifdd}|S)Nc sttjtdrd|j}n d|j}t|j}y|||Stk rt|}|f||}|jj|dkri|<d|kri||<d||kri|||<||||<|SXdS)Nz _%s_factorys _%s_factoryrargskwargs) rrr$typerrKeyError__dict__update)Z baseModuler,r-rZ kwargs_tuplemodZobjs)factory moduleCacherr moduleFactory\s$      z+moduleFactoryFactory..moduleFactoryr)r3r5r)r3r4r r Yscsifdd}|S)Ncs2t|t|jf}|kr*|||<|S)N)rr)r,r-r")cachefuncrr wrappedyszmemoize..wrappedr)r7r8r)r6r7r memoizevsr9)Z __future__rrrsystypesrZsixrZxml.etree.cElementTreeZetreeZ cElementTreer ImportErrorZxml.etree.ElementTreeZ ElementTree__all__ version_infor evalZ_xrr rrr r r r9rrrr s0    # PKe%1] Բxx)__pycache__/__init__.cpython-36.opt-1.pycnu[3 B;W@shdZddlmZmZmZddlmZmZmZddl m Z ddl m Z ddl mZdd d d d d gZdZdS)aM HTML parsing library based on the WHATWG "HTML5" specification. The parser is designed to be compatible with existing HTML found in the wild and implements well-defined error recovery that is largely compatible with modern desktop web browsers. Example usage: import html5lib f = open("my_document.html") tree = html5lib.parse(f) )absolute_importdivisionunicode_literals) HTMLParserparse parseFragment)getTreeBuilder) getTreeWalker) serializerrrr r r z 0.999999999N)__doc__Z __future__rrrZ html5parserrrrZ treebuildersr Z treewalkersr Z serializerr __all__ __version__rr/usr/lib/python3.6/__init__.py s   PKe%1]^ u{u{,__pycache__/html5parser.cpython-36.opt-1.pycnu[3 B;W @sFddlmZmZmZddlmZmZmZddlZyddl m Z Wn e k r`ddl m Z YnXddl mZddl mZddl mZdd lmZdd l mZdd lmZmZmZmZmZmZmZmZmZmZmZm Z!m"Z"m#Z#m$Z$m%Z%d!ddZ&d"ddZ'ddZ(Gddde)Z*ej+ddZ,ddZ-d#ddZ.Gdd d e/Z0dS)$)absolute_importdivisionunicode_literals)with_metaclassviewkeysPY3N) OrderedDict) _inputstream) _tokenizer) treebuilders)Marker)_utils)spaceCharactersasciiUpper2LowerspecialElementsheadingElements cdataElementsrcdataElements tokenTypes tagTokenTypes namespaceshtmlIntegrationPointElements"mathmlTextIntegrationPointElementsadjustForeignAttributesadjustMathMLAttributesadjustSVGAttributesEReparseExceptionetreeTcKs$tj|}t||d}|j|f|S)z.Parse a string or file-like object into a tree)namespaceHTMLElements)r getTreeBuilder HTMLParserparse)doc treebuilderr kwargstbpr)!/usr/lib/python3.6/html5parser.pyr#s  r#divcKs,tj|}t||d}|j|fd|i|S)N)r container)r r!r" parseFragment)r$r,r%r r&r'r(r)r)r*r-&s  r-csGfdddt}|S)NcseZdZfddZdS)z-method_decorator_metaclass..DecoratedcsBx0|jD]$\}}t|tjr&|}|||<q Wtj||||S)N)items isinstancetypes FunctionTypetype__new__)metaZ classnamebasesZ classDictZ attributeNameZ attribute)functionr)r*r3.s   z5method_decorator_metaclass..Decorated.__new__N)__name__ __module__ __qualname__r3r))r6r)r* Decorated-sr:)r2)r6r:r))r6r*method_decorator_metaclass,sr;c@seZdZdZd+ddZd,dd Zd d Zed d ZddZ ddZ ddZ ddZ ddZ ddZd-ddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*ZdS).r"zZHTML parser. Generates a tree structure from a stream of (possibly malformed) HTMLNFTcsL|_|dkrtjd}||_g_tfddt|jD_dS)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) Nrcs g|]\}}||jfqSr))tree).0namecls)selfr)r* Msz'HTMLParser.__init__..) strictr r!r<errorsdict getPhasesr.phases)r@r<rBr debugr))r@r*__init__<s    zHTMLParser.__init__r+c Ksh||_||_||_tj|fd|i||_|jy |jWn$tk rb|j|jYnXdS)Nparser) innerHTMLModer, scriptingr Z HTMLTokenizer tokenizerresetmainLoopr)r@stream innerHTMLr,rKr&r)r)r*_parsePs zHTMLParser._parsecCs|jjd|_g|_g|_d|_|jr|jj|_ |j t krL|j j |j _ n0|j tkrd|j j|j _ n|j dkr||j j|j _ n|jd|_|jj|jnd|_ |jd|_d|_d|_d|_dS)NFz no quirks plaintext beforeHtmlinitialT)r<rM firstStartTagrClog compatModerJr,lowerrPrrL rcdataStatestater rawtextStateplaintextStaterFphaseinsertHtmlElementresetInsertionModeZ lastPhaseZbeforeRCDataPhase framesetOK)r@r)r)r*rM^s*         zHTMLParser.resetcCst|dsdS|jjjdjS)zThe name of the character encoding that was used to decode the input stream, or :obj:`None` if that is not determined yet. rLNr)hasattrrLrO charEncodingr>)r@r)r)r*documentEncodings zHTMLParser.documentEncodingcCsJ|jdkr6|jtdkr6d|jko4|jdjtdkS|j|jftkSdS)Nzannotation-xmlmathmlencoding text/htmlapplication/xhtml+xml)rfrg)r> namespacer attributes translaterr)r@elementr)r)r*isHTMLIntegrationPoints   z!HTMLParser.isHTMLIntegrationPointcCs|j|jftkS)N)rhr>r)r@rkr)r)r*isMathMLTextIntegrationPointsz'HTMLParser.isMathMLTextIntegrationPointcCsjtd}td}td}td}td}td}td}x|jD]}d} |} x| dk r| } |jjrx|jjdnd} | r| jnd} | r| jnd} | d }||kr|j| d | jd id} qVt|jjd ksl| |jj ksl|j | r ||kr|d t ddgksl|||fksl| t dkrP| dkrP||krP|d dksl|j | rt||||fkrt|j}n |jd}||kr|j| } qV||kr|j| } qV||kr|j| } qV||kr|j| } qV||kr|j| } qV||krV|j| } qVW||krD| drD| d rD|jdd | d iqDWd}g}x(|rd|j|j|jj}|r>q>WdS)N CharactersZSpaceCharactersStartTagEndTagCommentZDoctype ParseErrorr r2datadatavarsrr>ZmglyphZ malignmarkrdzannotation-xmlsvginForeignContent selfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)rnormalizedTokensr< openElementsrhr> parseErrorgetlendefaultNamespacerm frozensetrrlr]rFprocessCharactersprocessSpaceCharactersprocessStartTag processEndTagprocessCommentprocessDoctypeappend processEOF)r@ZCharactersTokenZSpaceCharactersTokenZ StartTagTokenZ EndTagTokenZ CommentTokenZ DoctypeTokenZParseErrorTokentokenZ prev_token new_token currentNodeZcurrentNodeNamespaceZcurrentNodeNamer2r]Z reprocessrFr)r)r*rNsp                   zHTMLParser.mainLoopccs x|jD]}|j|VqWdS)N)rLnormalizeToken)r@rr)r)r*rzs zHTMLParser.normalizedTokenscOs |j|ddf|||jjS)aParse 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) scripting - treat noscript elements as if javascript was turned on FN)rQr<Z getDocument)r@rOargsr&r)r)r*r#s zHTMLParser.parsecOs|j|df|||jjS)a2Parse 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) scripting - treat noscript elements as if javascript was turned on T)rQr<Z getFragment)r@rOrr&r)r)r*r-szHTMLParser.parseFragmentXXX-undefined-errorcCs@|dkr i}|jj|jjj||f|jrrPrhrrFr])r@ZlastZnewModesnodeZnodeNameZ new_phaser)r)r*r_!s> zHTMLParser.resetInsertionModecCsF|jj||dkr"|jj|j_n |jj|j_|j|_|jd|_dS)zYGeneric RCDATA/RAWTEXT Parsing algorithm contentType - RCDATA or RAWTEXT RAWTEXTtextN) r< insertElementrLr[rZrYr] originalPhaserF)r@rZ contentTyper)r)r*parseRCDataRawtextMs   zHTMLParser.parseRCDataRawtext)NFTF)Fr+F)rN)r7r8r9__doc__rHrQrMpropertyrcrlrmrNrzr#r-r|rrrrrr_rr)r)r)r*r"8s&  "  C  ,r"cs"dd}dd}Gdddt|||Gddd}Gd d d }Gfd d d }Gfd dd}Gfddd}Gfddd}Gfddd} Gfddd} Gfddd} Gfddd} Gfddd} Gfddd}Gfdd d }Gfd!d"d"}Gfd#d$d$}Gfd%d&d&}Gfd'd(d(}Gfd)d*d*}Gfd+d,d,}Gfd-d.d.}Gfd/d0d0}Gfd1d2d2}Gfd3d4d4}||||||| | | | | ||||||||||||d5S)6Ncs(tddtjDfdd}|S)z4Logger that records which phase processes each tokencss|]\}}||fVqdS)Nr))r=keyvaluer)r)r* csz)getPhases..log..c sjjdrt|dkr|d}yd|di}WnYnX|dtkr\|d|d<|jjj|jjjj|jj j j|j jj|f|f||S|f||SdS)NZprocessrr2r>) r7 startswithr~rrIrVrrLrZr] __class__)r@rr&rinfo)r6 type_namesr)r*wrappedfs   z'getPhases..log..wrapped)rDrr.)r6rr))r6rr*rVaszgetPhases..logcSs|r t|StSdS)N)r;r2)Z use_metaclassZmetaclass_funcr)r)r* getMetaclasszszgetPhases..getMetaclassc@sXeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)zgetPhases..PhasezNBase class for helper object that implements each phase of processing cSs||_||_dS)N)rIr<)r@rIr<r)r)r*rHsz!getPhases..Phase.__init__cSstdS)N)NotImplementedError)r@r)r)r*rsz#getPhases..Phase.processEOFcSs|jj||jjddS)Nr ry)r< insertCommentr{)r@rr)r)r*rsz'getPhases..Phase.processCommentcSs|jjddS)Nzunexpected-doctype)rIr|)r@rr)r)r*rsz'getPhases..Phase.processDoctypecSs|jj|ddS)Nrs)r< insertText)r@rr)r)r*rsz*getPhases..Phase.processCharacterscSs|jj|ddS)Nrs)r<r)r@rr)r)r*rsz/getPhases..Phase.processSpaceCharacterscSs|j|d|S)Nr>)startTagHandler)r@rr)r)r*rsz(getPhases..Phase.processStartTagcSsl|jj r"|ddkr"|jjdx<|djD],\}}||jjdjkr0||jjdj|<q0Wd|j_dS)Nr>rz non-html-rootrsrF)rIrUr|r.r<r{ri)r@rattrrr)r)r* startTagHtmls  z%getPhases..Phase.startTagHtmlcSs|j|d|S)Nr>) endTagHandler)r@rr)r)r*rsz&getPhases..Phase.processEndTagN) r7r8r9rrHrrrrrrrrr)r)r)r*Phases rc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)zgetPhases..InitialPhasecSsdS)Nr))r@rr)r)r*rsz6getPhases..InitialPhase.processSpaceCharacterscSs|jj||jjdS)N)r<rdocument)r@rr)r)r*rsz.getPhases..InitialPhase.processCommentc8Ss|d}|d}|d}|d}|dks@|dk s@|dk rL|dkrL|jjd|dkrXd}|jj||dkrv|jt}| s|ddks|jdJs|dKks|jdLr|dks|r|jdDkrdE|j_n*|jdMs|jdNr|dk rdH|j_|jj dI|j_ dS)ONr>publicIdsystemIdcorrectrzabout:legacy-compatzunknown-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.dtdquirks -//w3c//dtd xhtml 1.0 frameset//$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrS)7rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr)rrr)rr)rr)rr) rIr|r<Z insertDoctyperjrrrXrWrFr])r@rr>rrrr)r)r*rs      z.getPhases..InitialPhase.processDoctypecSsd|j_|jjd|j_dS)NrrS)rIrWrFr])r@r)r)r* anythingElsesz,getPhases..InitialPhase.anythingElsecSs|jjd|j|S)Nzexpected-doctype-but-got-chars)rIr|r )r@rr)r)r*rs z1getPhases..InitialPhase.processCharacterscSs"|jjdd|di|j|S)Nz"expected-doctype-but-got-start-tagr>)rIr|r )r@rr)r)r*rsz/getPhases..InitialPhase.processStartTagcSs"|jjdd|di|j|S)Nz expected-doctype-but-got-end-tagr>)rIr|r )r@rr)r)r*rsz-getPhases..InitialPhase.processEndTagcSs|jjd|jdS)Nzexpected-doctype-but-got-eofT)rIr|r )r@r)r)r*r%s z*getPhases..InitialPhase.processEOFN) r7r8r9rrrr rrrrr)r)r)r* InitialPhases_r c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)z"getPhases..BeforeHtmlPhasecSs&|jjtdd|jjd|j_dS)Nrror)r<Z insertRootimpliedTagTokenrIrFr])r@r)r)r*r^,sz4getPhases..BeforeHtmlPhase.insertHtmlElementcSs |jdS)NT)r^)r@r)r)r*r1sz-getPhases..BeforeHtmlPhase.processEOFcSs|jj||jjdS)N)r<rr)r@rr)r)r*r5sz1getPhases..BeforeHtmlPhase.processCommentcSsdS)Nr))r@rr)r)r*r8sz9getPhases..BeforeHtmlPhase.processSpaceCharacterscSs |j|S)N)r^)r@rr)r)r*r;sz4getPhases..BeforeHtmlPhase.processCharacterscSs |ddkrd|j_|j|S)Nr>rT)rIrUr^)r@rr)r)r*r?s z2getPhases..BeforeHtmlPhase.processStartTagcSs4|ddkr$|jjdd|din |j|SdS)Nr>rrrbrzunexpected-end-tag-before-html)rrrr )rIr|r^)r@rr)r)r*rEs  z0getPhases..BeforeHtmlPhase.processEndTagN) r7r8r9r^rrrrrrr)r)r)r*BeforeHtmlPhase*sr csXeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)z"getPhases..BeforeHeadPhasecsVj|||tjd|jfd|jfg|_|j|j_tjd|jfg|_ |j |j _dS)Nrrrr )rrrr ) rHrMethodDispatcherr startTagHeadr startTagOtherdefaultendTagImplyHeadr endTagOther)r@rIr<)rr)r*rHNs z+getPhases..BeforeHeadPhase.__init__cSs|jtdddS)NrroT)rr )r@r)r)r*r\sz-getPhases..BeforeHeadPhase.processEOFcSsdS)Nr))r@rr)r)r*r`sz9getPhases..BeforeHeadPhase.processSpaceCharacterscSs|jtdd|S)Nrro)rr )r@rr)r)r*rcsz4getPhases..BeforeHeadPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rgsz/getPhases..BeforeHeadPhase.startTagHtmlcSs0|jj||jjd|j_|jjd|j_dS)Nr inHeadry)r<rr{ headPointerrIrFr])r@rr)r)r*rjs z/getPhases..BeforeHeadPhase.startTagHeadcSs|jtdd|S)Nrro)rr )r@rr)r)r*rosz0getPhases..BeforeHeadPhase.startTagOthercSs|jtdd|S)Nrro)rr )r@rr)r)r*rssz2getPhases..BeforeHeadPhase.endTagImplyHeadcSs|jjdd|didS)Nzend-tag-after-implied-rootr>)rIr|)r@rr)r)r*rwsz.getPhases..BeforeHeadPhase.endTagOtherN) r7r8r9rHrrrrrrrrr))rr)r*BeforeHeadPhaseMs rcseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!S)"zgetPhases..InHeadPhasec sj|||tjd|jfd|jfd|jfd|jfd|jfd|jfd |j fd |j fg|_ |j |j _ tjd |jfd|jfg|_|j|j_ dS)Nrtitlenoframesstylenoscriptscriptbasebasefontbgsoundcommandlinkr4rr r)rr)rrrrr )r rr)rHrrr startTagTitlestartTagNoFramesStylestartTagNoscriptstartTagScriptstartTagBaseLinkCommand startTagMetarrrr endTagHeadendTagHtmlBodyBrrr)r@rIr<)rr)r*rH|s  z'getPhases..InHeadPhase.__init__cSs |jdS)NT)r )r@r)r)r*rsz)getPhases..InHeadPhase.processEOFcSs |j|S)N)r )r@rr)r)r*rsz0getPhases..InHeadPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz+getPhases..InHeadPhase.startTagHtmlcSs|jjddS)Nz!two-heads-are-not-better-than-one)rIr|)r@rr)r)r*rsz+getPhases..InHeadPhase.startTagHeadcSs$|jj||jjjd|d<dS)NTrx)r<rr{pop)r@rr)r)r*r%s  z6getPhases..InHeadPhase.startTagBaseLinkCommandcSs|jj||jjjd|d<|d}|jjjjddkrd|krZ|jjjj|dnVd|krd|kr|dj d krt j |dj d }t j |}|j}|jjjj|dS) NTrxrsr Z tentativecharsetZcontentz http-equivz content-typezutf-8)r<rr{r)rIrLrOrbZchangeEncodingrXr Z EncodingBytesencodeZContentAttrParserr#)r@rrirsrIcodecr)r)r*r&s   z+getPhases..InHeadPhase.startTagMetacSs|jj|ddS)NZRCDATA)rIr)r@rr)r)r*r!sz,getPhases..InHeadPhase.startTagTitlecSs|jj|ddS)Nr)rIr)r@rr)r)r*r"sz4getPhases..InHeadPhase.startTagNoFramesStylecSs8|jjr|jj|dn|jj||jjd|j_dS)NrinHeadNoscript)rIrKrr<rrFr])r@rr)r)r*r#s z/getPhases..InHeadPhase.startTagNoscriptcSs<|jj||jjj|jj_|jj|j_|jjd|j_dS)Nr) r<rrIrLZscriptDataStaterZr]rrF)r@rr)r)r*r$s  z-getPhases..InHeadPhase.startTagScriptcSs |j|S)N)r )r@rr)r)r*rsz,getPhases..InHeadPhase.startTagOthercSs"|jjjj}|jjd|j_dS)N afterHead)rIr<r{r)rFr])r@rrr)r)r*r'sz)getPhases..InHeadPhase.endTagHeadcSs |j|S)N)r )r@rr)r)r*r(sz/getPhases..InHeadPhase.endTagHtmlBodyBrcSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rsz*getPhases..InHeadPhase.endTagOthercSs|jtddS)Nr)r'r )r@r)r)r*r sz+getPhases..InHeadPhase.anythingElseN)r7r8r9rHrrrrr%r&r!r"r#r$rr'r(rr r))rr)r* InHeadPhase{s  r/csxeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)z&getPhases..InHeadNoscriptPhasecsfj|||tjd|jfd |jfd |jfg|_|j|j_tjd |j fd |j fg|_ |j |j _dS) Nrrrr r4rrrrr )rrr r4rr)rr) rHrrrr%startTagHeadNoscriptrrrendTagNoscriptendTagBrrr)r@rIr<)rr)r*rHs z/getPhases..InHeadNoscriptPhase.__init__cSs|jjd|jdS)Nzeof-in-head-noscriptT)rIr|r )r@r)r)r*rs z1getPhases..InHeadNoscriptPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz5getPhases..InHeadNoscriptPhase.processCommentcSs|jjd|j|S)Nzchar-in-head-noscript)rIr|r )r@rr)r)r*rs z8getPhases..InHeadNoscriptPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz=getPhases..InHeadNoscriptPhase.processSpaceCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz3getPhases..InHeadNoscriptPhase.startTagHtmlcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r%sz>getPhases..InHeadNoscriptPhase.startTagBaseLinkCommandcSs|jjdd|didS)Nzunexpected-start-tagr>)rIr|)r@rr)r)r*r0 sz;getPhases..InHeadNoscriptPhase.startTagHeadNoscriptcSs"|jjdd|di|j|S)Nzunexpected-inhead-noscript-tagr>)rIr|r )r@rr)r)r*r sz4getPhases..InHeadNoscriptPhase.startTagOthercSs"|jjjj}|jjd|j_dS)Nr)rIr<r{r)rFr])r@rrr)r)r*r1sz5getPhases..InHeadNoscriptPhase.endTagNoscriptcSs"|jjdd|di|j|S)Nzunexpected-inhead-noscript-tagr>)rIr|r )r@rr)r)r*r2sz/getPhases..InHeadNoscriptPhase.endTagBrcSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rsz2getPhases..InHeadNoscriptPhase.endTagOthercSs|jtddS)Nr)r1r )r@r)r)r*r sz3getPhases..InHeadNoscriptPhase.anythingElseN)r7r8r9rHrrrrrr%r0rr1r2rr r))rr)r*InHeadNoscriptPhases r3cspeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS)z!getPhases..AfterHeadPhasec snj|||tjd|jfd|jfd|jfd|jfd |jfg|_|j |j_ tjd|j fg|_ |j |j _ dS)Nrrrrrrr r4rrrrrr ) rrrr r4rrrr)rrr )rHrrr startTagBodystartTagFramesetstartTagFromHeadrrrrr(rr)r@rIr<)rr)r*rH#s z*getPhases..AfterHeadPhase.__init__cSs |jdS)NT)r )r@r)r)r*r4sz,getPhases..AfterHeadPhase.processEOFcSs |j|S)N)r )r@rr)r)r*r8sz3getPhases..AfterHeadPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r<sz.getPhases..AfterHeadPhase.startTagHtmlcSs(d|j_|jj||jjd|j_dS)NFr)rIr`r<rrFr])r@rr)r)r*r4?s z.getPhases..AfterHeadPhase.startTagBodycSs |jj||jjd|j_dS)Nr)r<rrIrFr])r@rr)r)r*r5Ds z2getPhases..AfterHeadPhase.startTagFramesetcSst|jjdd|di|jjj|jj|jjdj|x4|jjdddD]}|jdkrN|jjj |PqNWdS)Nz#unexpected-start-tag-out-of-my-headr>rr rry) rIr|r<r{rrrFrr>remove)r@rrr)r)r*r6Hs z2getPhases..AfterHeadPhase.startTagFromHeadcSs|jjdd|didS)Nzunexpected-start-tagr>)rIr|)r@rr)r)r*rRsz.getPhases..AfterHeadPhase.startTagHeadcSs |j|S)N)r )r@rr)r)r*rUsz/getPhases..AfterHeadPhase.startTagOthercSs |j|S)N)r )r@rr)r)r*r(Ysz2getPhases..AfterHeadPhase.endTagHtmlBodyBrcSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*r]sz-getPhases..AfterHeadPhase.endTagOthercSs.|jjtdd|jjd|j_d|j_dS)NrrorT)r<rr rIrFr]r`)r@r)r)r*r `sz.getPhases..AfterHeadPhase.anythingElseN)r7r8r9rHrrrr4r5r6rrr(rr r))rr)r*AfterHeadPhase"s  r8cseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAdBZ#dCdDZ$dEdFZ%dGdHZ&dIdJZ'dKdLZ(dMdNZ)dOdPZ*dQdRZ+dSdTZ,dUdVZ-dWdXZ.dYdZZ/d[d\Z0d]d^Z1d_d`Z2dadbZ3dcddZ4dedfZ5dgS)hzgetPhases..InBodyPhasec,sj||||j|_tjd|jfdd|jfd |jfd |jfde|j ft |j fdf|j fd&|j fdg|jfd*|jfd+|jfdh|jfd8|jfd9|jfdi|jfd=|jfd>|jfdj|jfdk|jfdH|jfdI|jfdJ|jfdK|jfdL|jfdM|jfdN|jfdl|j fdQ|j!fdm|j"fdn|j#fdV|j$fdW|j%fdo|j&fg!|_'|j(|j'_)tjd |j*fd|j+fdp|j,fd&|j-fd |j.fdq|j/ft |j0fdr|j1fds|j2fd@|j3fg |_4|j5|j4_)dS)tNrrrrrr r4rrrrraddressarticleaside blockquotecenterdetailsdirr+dlfieldset figcaptionfigurefooterheaderhgroupmainmenunavolr(sectionsummaryulprelistingformlidddtrRabbigcodeemfontissmallstrikestrongttunobrbuttonappletmarqueeobjectZxmprarear embedimgkeygenwbrparamsourcetrackinputhrimageisindextextareaZiframernoembedrrrprtoptionoptgroupZmathrurcolrframerrrrrrrdialog) rrrrr r4rrr)r9r:r;r<r=r>r?r+r@rArBrCrDrErFrGrHrIrJr(rKrLrM)rNrO)rQrRrS) rUrVrWrXrYrZr[r\r]r^r_r`)rcrdre)rfr rgrhrirj)rkrlrm)rsr)rtru)rvrw) rrxrryrrrrrrr)r9r:r;r<rbr=r>rzr?r+r@rArBrCrDrErFrOrGrHrIrJrNrKrLrM)rRrSrQ)rTrUrVrWrXrYrZrar[r\r]r^r_r`)rcrdre)6rHprocessSpaceCharactersNonPrerrrrstartTagProcessInHeadr4r5startTagClosePrstartTagHeadingstartTagPreListing startTagFormstartTagListItemstartTagPlaintext startTagAstartTagFormatting startTagNobrstartTagButtonstartTagAppletMarqueeObject startTagXmp startTagTablestartTagVoidFormattingstartTagParamSource startTagInput startTagHr startTagImagestartTagIsIndexstartTagTextareastartTagIFramer#startTagRawtextstartTagSelect startTagRpRt startTagOpt startTagMath startTagSvgstartTagMisplacedrrr endTagBody endTagHtml endTagBlock endTagFormendTagPendTagListItem endTagHeadingendTagFormattingendTagAppletMarqueeObjectr2rr)r@rIr<)rr)r*rHhs~ z'getPhases..InBodyPhase.__init__cSs$|j|jko"|j|jko"|j|jkS)N)r>rhri)r@Znode1Znode2r)r)r*isMatchingFormattingElements  z:getPhases..InBodyPhase.isMatchingFormattingElementcSs|jj||jjd}g}x<|jjdddD]&}|tkr@Pq0|j||r0|j|q0Wt|dkrx|jjj|d|jjj|dS)Nr ryryry) r<rr{activeFormattingElementsr rrr~r7)r@rrkZmatchingElementsrr)r)r*addFormattingElements    z3getPhases..InBodyPhase.addFormattingElementc Ss@td}x2|jjdddD]}|j|kr|jjdPqWdS)NrRrSrQr(rrrrrrrrr z expected-closing-tag-but-got-eof) rRrSrQr(rrrrrrrrry)rr<r{r>rIr|)r@Zallowed_elementsrr)r)r*rs  z)getPhases..InBodyPhase.processEOFcSsh|d}|j|_|jdrJ|jjdjdkrJ|jjd j rJ|dd}|rd|jj|jj|dS) Nrs r rNrOrrry)rNrOrrry) r{rrr<r{r>Z hasContent#reconstructActiveFormattingElementsr)r@rrsr)r)r*!processSpaceCharactersDropNewlines   z@getPhases..InBodyPhase.processSpaceCharactersDropNewlinecSsT|ddkrdS|jj|jj|d|jjrPtdd|dDrPd|j_dS)NrscSsg|] }|tkqSr))r)r=charr)r)r*rAszDgetPhases..InBodyPhase.processCharacters..F)r<rrrIr`any)r@rr)r)r*rs  z0getPhases..InBodyPhase.processCharacterscSs|jj|jj|ddS)Nrs)r<rr)r@rr)r)r*r{s z;getPhases..InBodyPhase.processSpaceCharactersNonPrecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r|sz4getPhases..InBodyPhase.startTagProcessInHeadcSs|jjdddit|jjdks||jjdjdkr6nFd|j_x<|djD],\}}||jjdjkrL||jjdj|<qLWdS)Nzunexpected-start-tagr>rr Frs) rIr|r~r<r{r>r`r.ri)r@rrrr)r)r*r4sz+getPhases..InBodyPhase.startTagBodycSs|jjdddit|jjdks|jjdjdkr6nt|jjs@nj|jjdjrj|jjdjj|jjdx"|jjdjdkr|jjj qlW|jj ||jj d|j_ dS) Nzunexpected-start-tagr>rr rrrry) rIr|r~r<r{r>r`parent removeChildr)rrFr])r@rr)r)r*r5s" z/getPhases..InBodyPhase.startTagFramesetcSs.|jjdddr|jtd|jj|dS)Nr(rb)variant)r<elementInScoperr r)r@rr)r)r*r} sz-getPhases..InBodyPhase.startTagClosePcSs>|jjdddr|jtd|jj|d|j_|j|_dS)Nr(rb)rF) r<rrr rrIr`rr)r@rr)r)r*rs  z1getPhases..InBodyPhase.startTagPreListingcSsZ|jjr|jjdddin:|jjdddr:|jtd|jj||jjd|j_dS) Nzunexpected-start-tagr>rPr(rb)rr ry) r< formPointerrIr|rrr rr{)r@rr)r)r*rs  z+getPhases..InBodyPhase.startTagFormcSsd|j_dgddgddgd}||d}xLt|jjD]<}|j|kr^|jjjt|jdP|j t kr8|jd kr8Pq8W|jj d d d r|jjjtd d|jj |dS)NFrQrSrR)rQrSrRr>rpr9r+r(rb)r)r9r+r() rIr`reversedr<r{r>r]rr  nameTuplerrr)r@rZ stopNamesMapZ stopNamesrr)r)r*rs"      z/getPhases..InBodyPhase.startTagListItemcSs>|jjdddr|jtd|jj||jjj|jj_dS)Nr(rb)r) r<rrr rrIrLr\rZ)r@rr)r)r*r4s z0getPhases..InBodyPhase.startTagPlaintextcSsb|jjdddr|jtd|jjdjtkrR|jjdd|di|jjj |jj |dS)Nr(rb)rr zunexpected-start-tagr>ry) r<rrr r{r>rrIr|r)r)r@rr)r)r*r~:s  z.getPhases..InBodyPhase.startTagHeadingcSs~|jjd}|rf|jjdddd|jtd||jjkrL|jjj|||jjkrf|jjj||jj |j |dS)NrTz$unexpected-start-tag-implies-end-tag) startNameendName) r<!elementInActiveFormattingElementsrIr|rr r{r7rrr)r@rZ afeAElementr)r)r*rBs     z(getPhases..InBodyPhase.startTagAcSs|jj|j|dS)N)r<rr)r@rr)r)r*rOs z1getPhases..InBodyPhase.startTagFormattingcSsP|jj|jjdrB|jjdddd|jtd|jj|j|dS)Nraz$unexpected-start-tag-implies-end-tag)rr)r<rrrIr|rr r)r@rr)r)r*rSs    z+getPhases..InBodyPhase.startTagNobrcSsT|jjdr2|jjdddd|jtd|S|jj|jj|d|j_dS)Nrbz$unexpected-start-tag-implies-end-tag)rrF) r<rrIr|rr rrr`)r@rr)r)r*r]s    z-getPhases..InBodyPhase.startTagButtoncSs0|jj|jj||jjjtd|j_dS)NF)r<rrrrr rIr`)r@rr)r)r*rhs  z:getPhases..InBodyPhase.startTagAppletMarqueeObjectcSsB|jjdddr|jtd|jjd|j_|jj|ddS)Nr(rb)rFr)r<rrr rrIr`r)r@rr)r)r*rns  z*getPhases..InBodyPhase.startTagXmpcSsR|jjdkr*|jjdddr*|jtd|jj|d|j_|jjd|j_ dS)Nrr(rb)rFr) rIrWr<rrr rr`rFr])r@rr)r)r*rus   z,getPhases..InBodyPhase.startTagTablecSs6|jj|jj||jjjd|d<d|j_dS)NTrxF)r<rrr{r)rIr`)r@rr)r)r*r}s    z5getPhases..InBodyPhase.startTagVoidFormattingcSs@|jj}|j|d|dkr<|ddjtdkr<||j_dS)Nr2rshidden)rIr`rrjr)r@rr`r)r)r*rs   z,getPhases..InBodyPhase.startTagInputcSs$|jj||jjjd|d<dS)NTrx)r<rr{r))r@rr)r)r*rs  z2getPhases..InBodyPhase.startTagParamSourcecSsJ|jjdddr|jtd|jj||jjjd|d<d|j_dS)Nr(rb)rTrxF) r<rrr rr{r)rIr`)r@rr)r)r*rs   z)getPhases..InBodyPhase.startTagHrcSs6|jjdddd|jtdd|d|dddS) Nzunexpected-start-tag-treated-asrprh) originalNamenewNamerorsrw)rirw)rIr|rr )r@rr)r)r*rs   z,getPhases..InBodyPhase.startTagImagecSs|jjdddi|jjrdSi}d|dkr>|dd|d<|jtdd|d|jtd d|jtd dd |dkr|dd }nd }|jtd |d|dj}d|kr|d=d |kr|d =d|d<|jtdd||dd|j td |jtd d|j tddS)Nzdeprecated-tagr>rqactionrsrPro)riroZlabelpromptz3This is a searchable index. Enter search keywords: rn)r2rsrnrw)rirw) rIr|r<rrr rrcopyr)r@rZ form_attrsrrir)r)r*rs6      z.getPhases..InBodyPhase.startTagIsIndexcSs0|jj||jjj|jj_|j|_d|j_dS)NF) r<rrIrLrYrZrrr`)r@rr)r)r*rs z/getPhases..InBodyPhase.startTagTextareacSsd|j_|j|dS)NF)rIr`r)r@rr)r)r*rsz-getPhases..InBodyPhase.startTagIFramecSs"|jjr|j|n |j|dS)N)rIrKrr)r@rr)r)r*r#s z/getPhases..InBodyPhase.startTagNoscriptcSs|jj|ddS)z8iframe, noembed noframes, noscript(if scripting enabled)rN)rIr)r@rr)r)r*rsz.getPhases..InBodyPhase.startTagRawtextcSs@|jjdjdkr$|jjjtd|jj|jjj|dS)Nr rvry) r<r{r>rIr]rr rr)r@rr)r)r*rs z*getPhases..InBodyPhase.startTagOptcSs|jj|jj|d|j_|jj|jjd|jjd|jjd|jjd|jjd|jjdfkrx|jjd|j_n|jjd |j_dS) NFrrrrrrinSelectInTabler)r<rrrIr`r]rF)r@rr)r)r*rs      z-getPhases..InBodyPhase.startTagSelectcSsB|jjdr2|jj|jjdjdkr2|jj|jj|dS)Nrubyr ry)r<rgenerateImpliedEndTagsr{r>rIr|r)r@rr)r)r*rs    z+getPhases..InBodyPhase.startTagRpRtcSsZ|jj|jj||jj|td|d<|jj||drV|jjjd|d<dS)NrdrhrwTrx) r<rrIrrrrr{r))r@rr)r)r*rs      z+getPhases..InBodyPhase.startTagMathcSsZ|jj|jj||jj|td|d<|jj||drV|jjjd|d<dS)NrurhrwTrx) r<rrIrrrrr{r))r@rr)r)r*rs      z*getPhases..InBodyPhase.startTagSvgcSs|jjdd|didS)a5 Elements that should be children of other elements that have a different insertion mode; here they are ignored "caption", "col", "colgroup", "frame", "frameset", "head", "option", "optgroup", "tbody", "td", "tfoot", "th", "thead", "tr", "noscript" zunexpected-start-tag-ignoredr>N)rIr|)r@rr)r)r*rsz0getPhases..InBodyPhase.startTagMisplacedcSs|jj|jj|dS)N)r<rr)r@rr)r)r*rs z,getPhases..InBodyPhase.startTagOthercSs|jjdddsD|jtdd|jjdddi|jtddnX|jjd|jjd j dkrt|jjdddi|jjj }x|j dkr|jjj }qWdS) Nr(rb)rrozunexpected-end-tagr>rpr ry) r<rr}r rIr|rrr{r>r))r@rrr)r)r*rs   z&getPhases..InBodyPhase.endTagPcSs|jjds|jjdS|jjdjdkrlx>|jjddD]*}|jtdkr>|jjdd|jdPq>W|jjd|j_dS)Nrr rRrSrQrwrvr(rtrurrrrrrrz$expected-one-end-tag-but-got-another)gotName expectedName afterBodyry)rRrSrQrwrvr(rtrurrrrrrrr) r<rrIr|r{r>rrFr])r@rrr)r)r*r!s  z)getPhases..InBodyPhase.endTagBodycSs"|jjdr|jtd|SdS)Nr)r<rrr )r@rr)r)r*r3s z)getPhases..InBodyPhase.endTagHtmlcSs|ddkr|j|_|jj|d}|r2|jj|jjdj|dkr^|jjdd|di|r|jjj }x|j|dkr|jjj }qpWdS)Nr>rNr zend-tag-too-earlyry) r{rr<rrr{r>rIr|r))r@rZinScoperr)r)r*r9s   z*getPhases..InBodyPhase.endTagBlockcSsx|jj}d|j_|dks&|jj| r:|jjdddin:|jj|jjd|krf|jjdddi|jjj|dS)Nzunexpected-end-tagr>rPr zend-tag-too-early-ignoredry)r<rrrIr|rr{r7)r@rrr)r)r*rGs   z)getPhases..InBodyPhase.endTagFormcSs|ddkrd}nd}|jj|d|dsB|jjdd|dinj|jj|dd|jjd j|dkr|jjdd|di|jjj}x|j|dkr|jjj}qWdS) Nr>rQlist)rzunexpected-end-tag)excluder zend-tag-too-earlyry)r<rrIr|rr{r>r))r@rrrr)r)r*rTs  z-getPhases..InBodyPhase.endTagListItemcSsx$tD]}|jj|r|jjPqW|jjdj|dkrR|jjdd|dixBtD]:}|jj|rX|jjj}x|jtkr|jjj}qvWPqXWdS)Nr r>zend-tag-too-earlyry) rr<rrr{r>rIr|r))r@ritemr)r)r*res       z,getPhases..InBodyPhase.endTagHeadingcSs"d}x|dkr|d7}|jj|d}| sL||jjkrZ|jj|j rZ|j|dS||jjkr|jjdd|di|jjj |dS|jj|js|jjdd|didS||jjdkr|jjdd|di|jjj |}d}x,|jj|dD]}|j t kr|}PqW|dkrb|jjj }x||krN|jjj }q4W|jjj |dS|jj|d}|jjj |}|} } d} |jjj | } x| d krh| d7} | d8} |jj| } | |jjkr|jjj | q| |krP| |kr |jjj | d}| j} | |jj|jjj | <| |jj|jjj | <| } | jrV| jj| | j| | } qW| jr~| jj| |jtdkr|jj\}}|j| |n |j| |j} |j| |j| |jjj ||jjj|| |jjj ||jjj|jjj |d| qWdS)z)The much-feared adoption agency algorithmrr r>Nzadoption-agency-1.2zadoption-agency-4.4zadoption-agency-1.3rrrrrrry)rrrrr)r<rr{rr>rrIr|rr7indexrrr)Z cloneNoderrZ appendChildrZgetTableMisnestedNodePosition insertBeforeZreparentChildreninsert)r@rZouterLoopCounterZformattingElementZafeIndexZ furthestBlockrkZcommonAncestorZbookmarkZlastNoderZinnerLoopCounterrZclonerrr)r)r*rts                    z/getPhases..InBodyPhase.endTagFormattingcSs|jj|dr|jj|jjdj|dkrF|jjdd|di|jj|dr|jjj}x|j|dkr|jjj}qdW|jjdS)Nr>r zend-tag-too-earlyry) r<rrr{r>rIr|r)clearActiveFormattingElements)r@rrkr)r)r*rs  z8getPhases..InBodyPhase.endTagAppletMarqueeObjectcSs@|jjdddd|jj|jjtdd|jjjdS)Nzunexpected-end-tag-treated-asr z br element)rrro)rIr|r<rrr r{r))r@rr)r)r*r2#s   z'getPhases..InBodyPhase.endTagBrcSsx|jjdddD]}|j|dkr~|jj|dd|jjdj|dkrd|jjdd|dix|jjj|krxqfWPq|jtkr|jjdd|diPqWdS)Nr r>)rzunexpected-end-tagryry) r<r{r>rrIr|r)rr)r@rrr)r)r*r*s z*getPhases..InBodyPhase.endTagOtherN)6r7r8r9rHrrrrrr{r|r4r5r}rrrrr~rrrrrrrrrrrrrrrr#rrrrrrrrrrrrrrrrrr2rr))rr)r* InBodyPhaseesh G             $ rcs@eZdZfddZddZddZddZd d Zd d Zd S)zgetPhases..TextPhasecsFj|||tjg|_|j|j_tjd|jfg|_|j|j_dS)Nr) rHrrrrr endTagScriptrr)r@rIr<)rr)r*rH9s   z%getPhases..TextPhase.__init__cSs|jj|ddS)Nrs)r<r)r@rr)r)r*rAsz.getPhases..TextPhase.processCharacterscSs8|jjdd|jjdji|jjj|jj|j_dS)Nz&expected-named-closing-tag-but-got-eofr>r Try)rIr|r<r{r>r)rr])r@r)r)r*rDs   z'getPhases..TextPhase.processEOFcSsdS)Nr))r@rr)r)r*rKsz*getPhases..TextPhase.startTagOthercSs|jjj}|jj|j_dS)N)r<r{r)rIrr])r@rrr)r)r*rNs z)getPhases..TextPhase.endTagScriptcSs|jjj|jj|j_dS)N)r<r{r)rIrr])r@rr)r)r*rUs z(getPhases..TextPhase.endTagOtherN) r7r8r9rHrrrrrr))rr)r* TextPhase8s  rcseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'S)(zgetPhases..InTablePhasec sj|||tjd|jfd|jfd|jfd|jfd|jfd|jfd |j fd|j fd|j fd|j fg |_ |j|j _tjd |jfd|jfg|_|j|j_dS)NrrrrxrrrrrrrrrrnrPr)rrr)rrr)rr) rrrxrrrrrrrr)rHrrrstartTagCaptionstartTagColgroup startTagColstartTagRowGroupstartTagImplyTbodyrstartTagStyleScriptrrrrr endTagTable endTagIgnorerr)r@rIr<)rr)r*rH[s$ z(getPhases..InTablePhase.__init__cSs(x"|jjdjdkr"|jjjqWdS)Nr rrry)rr)r<r{r>r))r@r)r)r*clearStackToTableContextssz8getPhases..InTablePhase.clearStackToTableContextcSs$|jjdjdkr |jjdndS)Nr rz eof-in-tablery)r<r{r>rIr|)r@r)r)r*r|sz*getPhases..InTablePhase.processEOFcSs4|jj}|jjd|j_||jj_|jjj|dS)N inTableText)rIr]rFrr)r@rrr)r)r*rs z6getPhases..InTablePhase.processSpaceCharacterscSs4|jj}|jjd|j_||jj_|jjj|dS)Nr)rIr]rFrr)r@rrr)r)r*rs z1getPhases..InTablePhase.processCharacterscSs&d|j_|jjdj|d|j_dS)NTrF)r<insertFromTablerIrFr)r@rr)r)r*rsz*getPhases..InTablePhase.insertTextcSs6|j|jjjt|jj||jjd|j_dS)Nr) rr<rrr rrIrFr])r@rr)r)r*rs z/getPhases..InTablePhase.startTagCaptioncSs(|j|jj||jjd|j_dS)Nr)rr<rrIrFr])r@rr)r)r*rs z0getPhases..InTablePhase.startTagColgroupcSs|jtdd|S)Nrro)rr )r@rr)r)r*rsz+getPhases..InTablePhase.startTagColcSs(|j|jj||jjd|j_dS)Nr)rr<rrIrFr])r@rr)r)r*rs z0getPhases..InTablePhase.startTagRowGroupcSs|jtdd|S)Nrro)rr )r@rr)r)r*rsz2getPhases..InTablePhase.startTagImplyTbodycSs6|jjdddd|jjjtd|jjs2|SdS)Nz$unexpected-start-tag-implies-end-tagr)rr)rIr|r]rr rP)r@rr)r)r*rs  z-getPhases..InTablePhase.startTagTablecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz3getPhases..InTablePhase.startTagStyleScriptcSsVd|dkrH|ddjtdkrH|jjd|jj||jjjn |j|dS)Nr2rsrz unexpected-hidden-input-in-table) rjrrIr|r<rr{r)r)r@rr)r)r*rs    z-getPhases..InTablePhase.startTagInputcSsD|jjd|jjdkr@|jj||jjd|j_|jjjdS)Nzunexpected-form-in-tabler ry)rIr|r<rrr{r))r@rr)r)r*rs    z,getPhases..InTablePhase.startTagFormcSs<|jjdd|did|j_|jjdj|d|j_dS)Nz)unexpected-start-tag-implies-table-voodoor>TrF)rIr|r<rrFr)r@rr)r)r*rsz-getPhases..InTablePhase.startTagOthercSs|jjdddr|jj|jjdjdkrJ|jjdd|jjdjdx"|jjdjdkrl|jjjqLW|jjj|jjn |jjdS) Nr)rr zend-tag-too-early-named)rrryryry) r<rrr{r>rIr|r)r_)r@rr)r)r*rs   z+getPhases..InTablePhase.endTagTablecSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rsz,getPhases..InTablePhase.endTagIgnorecSs<|jjdd|did|j_|jjdj|d|j_dS)Nz'unexpected-end-tag-implies-table-voodoor>TrF)rIr|r<rrFr)r@rr)r)r*rsz+getPhases..InTablePhase.endTagOtherN)r7r8r9rHrrrrrrrrrrrrrrrrrrr))rr)r* InTablePhaseYs&   rcsPeZdZfddZddZddZddZd d Zd d Zd dZ ddZ dS)z#getPhases..InTableTextPhasecsj|||d|_g|_dS)N)rHrcharacterTokens)r@rIr<)rr)r*rHsz,getPhases..InTableTextPhase.__init__cSsddjdd|jD}tdd|DrJtd|d}|jjdj|n|rZ|jj|g|_dS)NrcSsg|] }|dqS)rsr))r=rr)r)r*rAszGgetPhases..InTableTextPhase.flushCharacters..cSsg|] }|tkqSr))r)r=rr)r)r*rAsrn)r2rsr)joinrrrrIrFrr<)r@rsrr)r)r*flushCharacterss z3getPhases..InTableTextPhase.flushCharacterscSs|j|j|j_|S)N)rrrIr])r@rr)r)r*rs z2getPhases..InTableTextPhase.processCommentcSs|j|j|j_dS)NT)rrrIr])r@r)r)r*rs z.getPhases..InTableTextPhase.processEOFcSs |ddkrdS|jj|dS)Nrsr)rr)r@rr)r)r*rs z5getPhases..InTableTextPhase.processCharacterscSs|jj|dS)N)rr)r@rr)r)r*rsz:getPhases..InTableTextPhase.processSpaceCharacterscSs|j|j|j_|S)N)rrrIr])r@rr)r)r*r s z3getPhases..InTableTextPhase.processStartTagcSs|j|j|j_|S)N)rrrIr])r@rr)r)r*rs z1getPhases..InTableTextPhase.processEndTagN) r7r8r9rHrrrrrrrr))rr)r*InTableTextPhases  rcs`eZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)z!getPhases..InCaptionPhasec sfj|||tjd|jfd |jfg|_|j|j_tjd|jfd |j fd|j fg|_ |j |j _dS)Nrrrxrrrrrrrrr) rrxrrrrrrr) rrxrrrrrrrr) rHrrrstartTagTableElementrrr endTagCaptionrrrr)r@rIr<)rr)r*rHs z*getPhases..InCaptionPhase.__init__cSs|jjddd S)Nrr)r)r<r)r@r)r)r*ignoreEndTagCaption+sz5getPhases..InCaptionPhase.ignoreEndTagCaptioncSs|jjdjdS)Nr)rIrFr)r@r)r)r*r.sz,getPhases..InCaptionPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r1sz3getPhases..InCaptionPhase.processCharacterscSs0|jj|j}|jjjtd|s,|SdS)Nr)rIr|rr]rr )r@r ignoreEndTagr)r)r*r4s  z6getPhases..InCaptionPhase.startTagTableElementcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r<sz/getPhases..InCaptionPhase.startTagOthercSs|js|jj|jjdjdkrB|jjdd|jjdjdx"|jjdjdkrd|jjjqDW|jjj|jj|jj d|j_ n |jjdS) Nr rz$expected-one-end-tag-but-got-another)rrrryryry) rr<rr{r>rIr|r)rrFr])r@rr)r)r*r?s   z/getPhases..InCaptionPhase.endTagCaptioncSs0|jj|j}|jjjtd|s,|SdS)Nr)rIr|rr]rr )r@rrr)r)r*rQs  z-getPhases..InCaptionPhase.endTagTablecSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rXsz.getPhases..InCaptionPhase.endTagIgnorecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r[sz-getPhases..InCaptionPhase.endTagOtherN) r7r8r9rHrrrrrrrrrr))rr)r*InCaptionPhases rcsXeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)z%getPhases..InColumnGroupPhasecs^j|||tjd|jfd|jfg|_|j|j_tjd|jfd|j fg|_ |j |j _dS)Nrrxr) rHrrrrrrrendTagColgroup endTagColrr)r@rIr<)rr)r*rHas z.getPhases..InColumnGroupPhase.__init__cSs|jjdjdkS)Nr rry)r<r{r>)r@r)r)r*ignoreEndTagColgrouppsz:getPhases..InColumnGroupPhase.ignoreEndTagColgroupcSs8|jjdjdkrdS|j}|jtd|s4dSdS)Nr rrTry)r<r{r>rrr )r@rr)r)r*rss z0getPhases..InColumnGroupPhase.processEOFcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*r}sz7getPhases..InColumnGroupPhase.processCharacterscSs$|jj||jjjd|d<dS)NTrx)r<rr{r))r@rr)r)r*rs  z1getPhases..InColumnGroupPhase.startTagColcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*rsz3getPhases..InColumnGroupPhase.startTagOthercSs4|jr|jjn|jjj|jjd|j_dS)Nr)rrIr|r<r{r)rFr])r@rr)r)r*rs  z4getPhases..InColumnGroupPhase.endTagColgroupcSs|jjdddidS)Nz no-end-tagr>rx)rIr|)r@rr)r)r*rsz/getPhases..InColumnGroupPhase.endTagColcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*rsz1getPhases..InColumnGroupPhase.endTagOtherN) r7r8r9rHrrrrrrrrr))rr)r*InColumnGroupPhase^s   rcsxeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)z#getPhases..InTableBodyPhasec svj|||tjd|jfd|jfd |jfd|jfg|_|j|j_ tjd|j fd |j fd|j fg|_ |j|j _ dS)Nrrrrrrxrrrrrr)rr)rrxrrrr)rrr)rrrxrrrrr)rHrrr startTagTrstartTagTableCellstartTagTableOtherrrrendTagTableRowGrouprrrr)r@rIr<)rr)r*rHs z,getPhases..InTableBodyPhase.__init__cSs:x"|jjdjdkr"|jjjqW|jjdjdkr6dS) Nr rrrrry)rrrrry)r<r{r>r))r@r)r)r*clearStackToTableBodyContexts z@getPhases..InTableBodyPhase.clearStackToTableBodyContextcSs|jjdjdS)Nr)rIrFr)r@r)r)r*rsz.getPhases..InTableBodyPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz:getPhases..InTableBodyPhase.processSpaceCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz5getPhases..InTableBodyPhase.processCharacterscSs(|j|jj||jjd|j_dS)Nr)rr<rrIrFr])r@rr)r)r*rs z.getPhases..InTableBodyPhase.startTagTrcSs*|jjdd|di|jtdd|S)Nzunexpected-cell-in-table-bodyr>rro)rIr|rr )r@rr)r)r*rsz5getPhases..InTableBodyPhase.startTagTableCellcSsb|jjddds0|jjddds0|jjdddrT|j|jt|jjdj|S|jjdS)Nrr)rrrr ry) r<rrrr r{r>rIr|)r@rr)r)r*rsz6getPhases..InTableBodyPhase.startTagTableOthercSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz1getPhases..InTableBodyPhase.startTagOthercSsT|jj|dddr:|j|jjj|jjd|j_n|jjdd|didS)Nr>r)rrz unexpected-end-tag-in-table-body) r<rrr{r)rIrFr]r|)r@rr)r)r*rs  z7getPhases..InTableBodyPhase.endTagTableRowGroupcSsb|jjddds0|jjddds0|jjdddrT|j|jt|jjdj|S|jjdS)Nrr)rrrr ry) r<rrrr r{r>rIr|)r@rr)r)r*rsz/getPhases..InTableBodyPhase.endTagTablecSs|jjdd|didS)Nz unexpected-end-tag-in-table-bodyr>)rIr|)r@rr)r)r*rsz0getPhases..InTableBodyPhase.endTagIgnorecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz/getPhases..InTableBodyPhase.endTagOtherN)r7r8r9rHrrrrrrrrrrrrr))rr)r*InTableBodyPhases    rcseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS)zgetPhases..InRowPhasec svj|||tjd|jfd |jfd|jfg|_|j|j_tjd |j fd |j fd|j fd|j fg|_ |j|j _dS)Nrrrrrxrrrrrrr)rr)rrxrrrrr)rrr)rrrxrrrr)rHrrrrrrrrendTagTrrrrrr)r@rIr<)rr)r*rHs z&getPhases..InRowPhase.__init__cSsDx>|jjdjdkr>|jjdd|jjdji|jjjqWdS) Nr rrz'unexpected-implied-end-tag-in-table-rowr>ry)rrry)r<r{r>rIr|r))r@r)r)r*clearStackToTableRowContextsz9getPhases..InRowPhase.clearStackToTableRowContextcSs|jjddd S)Nrr)r)r<r)r@r)r)r*ignoreEndTagTrsz,getPhases..InRowPhase.ignoreEndTagTrcSs|jjdjdS)Nr)rIrFr)r@r)r)r*r"sz(getPhases..InRowPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r%sz4getPhases..InRowPhase.processSpaceCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r(sz/getPhases..InRowPhase.processCharacterscSs6|j|jj||jjd|j_|jjjtdS)Nr) rr<rrIrFr]rrr )r@rr)r)r*r+s z/getPhases..InRowPhase.startTagTableCellcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*r1sz0getPhases..InRowPhase.startTagTableOthercSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r8sz+getPhases..InRowPhase.startTagOthercSs<|js.|j|jjj|jjd|j_n |jjdS)Nr) rrr<r{r)rIrFr]r|)r@rr)r)r*r;s  z&getPhases..InRowPhase.endTagTrcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*rEsz)getPhases..InRowPhase.endTagTablecSs4|jj|dddr&|jtd|S|jjdS)Nr>r)rr)r<rrr rIr|)r@rr)r)r*rMsz1getPhases..InRowPhase.endTagTableRowGroupcSs|jjdd|didS)Nzunexpected-end-tag-in-table-rowr>)rIr|)r@rr)r)r*rTsz*getPhases..InRowPhase.endTagIgnorecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rXsz)getPhases..InRowPhase.endTagOtherN)r7r8r9rHrrrrrrrrrrrrrr))rr)r* InRowPhases  rcs`eZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)zgetPhases..InCellPhasec sfj|||tjd|jfd |jfg|_|j|j_tjd|jfd|j fd|j fg|_ |j |j _dS)Nrrrxrrrrrrrrr) rrxrrrrrrr)rr)rrrxrr)rrrrr) rHrrrrrrrendTagTableCellr endTagImplyrr)r@rIr<)rr)r*rH]s z'getPhases..InCellPhase.__init__cSsB|jjdddr |jtdn|jjdddr>|jtddS)Nrr)rr)r<rrr )r@r)r)r* closeCellnsz(getPhases..InCellPhase.closeCellcSs|jjdjdS)Nr)rIrFr)r@r)r)r*rusz)getPhases..InCellPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rxsz0getPhases..InCellPhase.processCharacterscSs:|jjddds |jjdddr,|j|S|jjdS)Nrr)rr)r<rrrIr|)r@rr)r)r*r{s z1getPhases..InCellPhase.startTagTableOthercSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz,getPhases..InCellPhase.startTagOthercSs|jj|dddr|jj|d|jjdj|dkrt|jjdd|dix.|jjj}|j|dkrRPqRWn |jjj|jj|jj d|j_ n|jjdd|didS) Nr>r)rr zunexpected-cell-end-tagrzunexpected-end-tagry) r<rrr{r>rIr|r)rrFr])r@rrr)r)r*rs   z.getPhases..InCellPhase.endTagTableCellcSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rsz+getPhases..InCellPhase.endTagIgnorecSs.|jj|dddr |j|S|jjdS)Nr>r)r)r<rrrIr|)r@rr)r)r*rsz*getPhases..InCellPhase.endTagImplycSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz*getPhases..InCellPhase.endTagOtherN) r7r8r9rHrrrrrrrrrr))rr)r* InCellPhase[s  rcsxeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)z getPhases..InSelectPhasecsj|||tjd|jfd|jfd|jfd|jfd |jfd|jfg|_ |j |j _ tjd|j fd|j fd|jfg|_|j|j_ dS) Nrrvrwrrnrirrr)rnrirr)rHrrrstartTagOptionstartTagOptgrouprrr$rrr endTagOptionendTagOptgroup endTagSelectrr)r@rIr<)rr)r*rHs z)getPhases..InSelectPhase.__init__cSs$|jjdjdkr |jjdndS)Nr rz eof-in-selectry)r<r{r>rIr|)r@r)r)r*rsz+getPhases..InSelectPhase.processEOFcSs$|ddkrdS|jj|ddS)Nrsr)r<r)r@rr)r)r*rs z2getPhases..InSelectPhase.processCharacterscSs.|jjdjdkr|jjj|jj|dS)Nr rvry)r<r{r>r)r)r@rr)r)r*rs z/getPhases..InSelectPhase.startTagOptioncSsL|jjdjdkr|jjj|jjdjdkr<|jjj|jj|dS)Nr rvrwryry)r<r{r>r)r)r@rr)r)r*rs   z1getPhases..InSelectPhase.startTagOptgroupcSs|jjd|jtddS)Nzunexpected-select-in-selectr)rIr|rr )r@rr)r)r*rs z/getPhases..InSelectPhase.startTagSelectcSs2|jjd|jjdddr.|jtd|SdS)Nzunexpected-input-in-selectr)r)rIr|r<rrr )r@rr)r)r*rs  z.getPhases..InSelectPhase.startTagInputcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r$sz/getPhases..InSelectPhase.startTagScriptcSs|jjdd|didS)Nzunexpected-start-tag-in-selectr>)rIr|)r@rr)r)r*rsz.getPhases..InSelectPhase.startTagOthercSs6|jjdjdkr |jjjn|jjdddidS)Nr rvzunexpected-end-tag-in-selectr>ry)r<r{r>r)rIr|)r@rr)r)r*rsz-getPhases..InSelectPhase.endTagOptioncSsf|jjdjdkr0|jjdjdkr0|jjj|jjd jdkrP|jjjn|jjdddidS) Nr rvrrwzunexpected-end-tag-in-selectr>ryry)r<r{r>r)rIr|)r@rr)r)r*rs z/getPhases..InSelectPhase.endTagOptgroupcSsR|jjdddrD|jjj}x|jdkr6|jjj}qW|jjn |jjdS)Nr)r)r<rr{r)r>rIr_r|)r@rrr)r)r*rs    z-getPhases..InSelectPhase.endTagSelectcSs|jjdd|didS)Nzunexpected-end-tag-in-selectr>)rIr|)r@rr)r)r*r sz,getPhases..InSelectPhase.endTagOtherN)r7r8r9rHrrrrrrr$rrrrrr))rr)r* InSelectPhases   rcsHeZdZfddZddZddZddZd d Zd d Zd dZ dS)z'getPhases..InSelectInTablePhasec sNj|||tjd |jfg|_|j|j_tjd |jfg|_|j |j_dS) Nrrrrrrrr)rrrrrrrr)rrrrrrrr) rHrrrrrrrrr)r@rIr<)rr)r*rH s z0getPhases..InSelectInTablePhase.__init__cSs|jjdjdS)Nr)rIrFr)r@r)r)r*r sz2getPhases..InSelectInTablePhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r sz9getPhases..InSelectInTablePhase.processCharacterscSs(|jjdd|di|jtd|S)Nz5unexpected-table-element-start-tag-in-select-in-tabler>r)rIr|rr )r@rr)r)r*r! sz5getPhases..InSelectInTablePhase.startTagTablecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r& sz5getPhases..InSelectInTablePhase.startTagOthercSs@|jjdd|di|jj|dddr<|jtd|SdS)Nz3unexpected-table-element-end-tag-in-select-in-tabler>r)rr)rIr|r<rrr )r@rr)r)r*r) sz3getPhases..InSelectInTablePhase.endTagTablecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r/ sz3getPhases..InSelectInTablePhase.endTagOtherN) r7r8r9rHrrrrrrr))rr)r*InSelectInTablePhase s rc-seZdZeddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,g,Zfd-d.Zd/d0Zfd1d2Zd3d4Zd5d6Z d7S)8z(getPhases..InForeignContentPhaserUrVr<rr r=rWrRr+r@rSrXrgZh1Zh2Zh3Zh4Zh5Zh6rrorZrhrQrOrHr4rarJr(rNrr[r\spanr^r]subZsuprr_r`rMvarcsj|||dS)N)rH)r@rIr<)rr)r*rH< sz1getPhases..InForeignContentPhase.__init__c%Ssnddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%$}|d&|krj||d&|d&<dS)'NZaltGlyphZ altGlyphDefZ altGlyphItemZ animateColorZ animateMotionZanimateTransformZclipPathZfeBlendZ feColorMatrixZfeComponentTransferZ feCompositeZfeConvolveMatrixZfeDiffuseLightingZfeDisplacementMapZfeDistantLightZfeFloodZfeFuncAZfeFuncBZfeFuncGZfeFuncRZfeGaussianBlurZfeImageZfeMergeZ feMergeNodeZ feMorphologyZfeOffsetZ fePointLightZfeSpecularLightingZ feSpotLightZfeTileZ feTurbulenceZ foreignObjectZglyphRefZlinearGradientZradialGradientZtextPath)$ZaltglyphZ altglyphdefZ altglyphitemZ animatecolorZ animatemotionZanimatetransformZclippathZfeblendZ fecolormatrixZfecomponenttransferZ fecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZ femergenodeZ femorphologyZfeoffsetZ fepointlightZfespecularlightingZ fespotlightZfetileZ feturbulenceZ foreignobjectZglyphrefZlineargradientZradialgradientZtextpathr>r))r@r replacementsr)r)r*adjustSVGTagNames? sL z:getPhases..InForeignContentPhase.adjustSVGTagNamescsL|ddkrd|d<n&|jjr.InForeignContentPhase.processCharacters..F)rIr`rr)r@r)rr)r*rh s   z:getPhases..InForeignContentPhase.processCharacterscSs6|jjd}|d|jksD|ddkrt|djtdddg@r|jjdd|dixR|jjdj|jjkr|jj |jjd r|jj |jjd r|jjj q\W|S|jt d kr|jj |n$|jt d kr|j||jj||jj||j|d <|jj||d r2|jjj d |d<dS)Nr r>rYrsZcolorZfacesizez*unexpected-html-element-in-foreign-contentrdrurhrwTrxryryryry)r<r{breakoutElementssetkeysrIr|rhrrlrmr)rrrrrr)r@rrr)r)r*rp s.          z8getPhases..InForeignContentPhase.processStartTagcSst|jjd}|jjd}|jjt|dkrF|jjdd|dix|jjt|dkr|jj|jj dkr|jjj |jjj |j_x|jjj |krqWd}P|d8}|jj|}|j |jjkrqHqH|jjj|}PqHW|S)Nr r>zunexpected-end-tagrry)r~r<r{r>rjrrIr|r]rFrrr)rhrr)r@rZ nodeIndexrrr)r)r*r s(   z6getPhases..InForeignContentPhase.processEndTagN) r7r8r9rrrHrrrrr))rr)r*InForeignContentPhase2 s       ) rcsPeZdZfddZddZddZddZd d Zd d Zd dZ ddZ dS)z!getPhases..AfterBodyPhasecsNj|||tjd|jfg|_|j|j_tjd|jfg|_|j |j_dS)Nr) rHrrrrrrrrr)r@rIr<)rr)r*rH s  z*getPhases..AfterBodyPhase.__init__cSsdS)Nr))r@r)r)r*r sz,getPhases..AfterBodyPhase.processEOFcSs|jj||jjddS)Nr)r<rr{)r@rr)r)r*r sz0getPhases..AfterBodyPhase.processCommentcSs |jjd|jjd|j_|S)Nzunexpected-char-after-bodyr)rIr|rFr])r@rr)r)r*r s z3getPhases..AfterBodyPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r sz.getPhases..AfterBodyPhase.startTagHtmlcSs*|jjdd|di|jjd|j_|S)Nzunexpected-start-tag-after-bodyr>r)rIr|rFr])r@rr)r)r*r sz/getPhases..AfterBodyPhase.startTagOthercSs*|jjr|jjdn|jjd|j_dS)Nz'unexpected-end-tag-after-body-innerhtmlafterAfterBody)rIrPr|rFr])r@r>r)r)r*r sz,getPhases..AfterBodyPhase.endTagHtmlcSs*|jjdd|di|jjd|j_|S)Nzunexpected-end-tag-after-bodyr>r)rIr|rFr])r@rr)r)r*r sz-getPhases..AfterBodyPhase.endTagOtherN) r7r8r9rHrrrrrrrr))rr)r*AfterBodyPhase s rcsXeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)z"getPhases..InFramesetPhasecsfj|||tjd|jfd|jfd|jfd|jfg|_|j|j_ tjd|j fg|_ |j |j _ dS)Nrrryr) rHrrrr5 startTagFramestartTagNoframesrrrendTagFramesetrr)r@rIr<)rr)r*rH s z+getPhases..InFramesetPhase.__init__cSs$|jjdjdkr |jjdndS)Nr rzeof-in-framesetry)r<r{r>rIr|)r@r)r)r*r sz-getPhases..InFramesetPhase.processEOFcSs|jjddS)Nzunexpected-char-in-frameset)rIr|)r@rr)r)r*r sz4getPhases..InFramesetPhase.processCharacterscSs|jj|dS)N)r<r)r@rr)r)r*r5 sz3getPhases..InFramesetPhase.startTagFramesetcSs|jj||jjjdS)N)r<rr{r))r@rr)r)r*r  s z0getPhases..InFramesetPhase.startTagFramecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r  sz3getPhases..InFramesetPhase.startTagNoframescSs|jjdd|didS)Nz unexpected-start-tag-in-framesetr>)rIr|)r@rr)r)r*r sz0getPhases..InFramesetPhase.startTagOthercSs\|jjdjdkr |jjdn |jjj|jj rX|jjdjdkrX|jjd|j_dS)Nr rz)unexpected-frameset-in-frameset-innerhtmlr afterFramesetryry) r<r{r>rIr|r)rPrFr])r@rr)r)r*r  s   z1getPhases..InFramesetPhase.endTagFramesetcSs|jjdd|didS)Nzunexpected-end-tag-in-framesetr>)rIr|)r@rr)r)r*r sz.getPhases..InFramesetPhase.endTagOtherN) r7r8r9rHrrr5r r rr rr))rr)r*InFramesetPhase s  r csHeZdZfddZddZddZddZd d Zd d Zd dZ dS)z%getPhases..AfterFramesetPhasecsVj|||tjd|jfd|jfg|_|j|j_tjd|jfg|_ |j |j _dS)Nrr) rHrrrr rrrrrr)r@rIr<)rr)r*rH s z.getPhases..AfterFramesetPhase.__init__cSsdS)Nr))r@r)r)r*r sz0getPhases..AfterFramesetPhase.processEOFcSs|jjddS)Nzunexpected-char-after-frameset)rIr|)r@rr)r)r*r! sz7getPhases..AfterFramesetPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r $ sz6getPhases..AfterFramesetPhase.startTagNoframescSs|jjdd|didS)Nz#unexpected-start-tag-after-framesetr>)rIr|)r@rr)r)r*r' sz3getPhases..AfterFramesetPhase.startTagOthercSs|jjd|j_dS)NafterAfterFrameset)rIrFr])r@rr)r)r*r+ sz0getPhases..AfterFramesetPhase.endTagHtmlcSs|jjdd|didS)Nz!unexpected-end-tag-after-framesetr>)rIr|)r@rr)r)r*r. sz1getPhases..AfterFramesetPhase.endTagOtherN) r7r8r9rHrrr rrrr))rr)r*AfterFramesetPhase s rcsPeZdZfddZddZddZddZd d Zd d Zd dZ ddZ dS)z&getPhases..AfterAfterBodyPhasecs0j|||tjd|jfg|_|j|j_dS)Nr)rHrrrrrr)r@rIr<)rr)r*rH3 sz/getPhases..AfterAfterBodyPhase.__init__cSsdS)Nr))r@r)r)r*r; sz1getPhases..AfterAfterBodyPhase.processEOFcSs|jj||jjdS)N)r<rr)r@rr)r)r*r> sz5getPhases..AfterAfterBodyPhase.processCommentcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rA sz=getPhases..AfterAfterBodyPhase.processSpaceCharacterscSs |jjd|jjd|j_|S)Nzexpected-eof-but-got-charr)rIr|rFr])r@rr)r)r*rD s z8getPhases..AfterAfterBodyPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rI sz3getPhases..AfterAfterBodyPhase.startTagHtmlcSs*|jjdd|di|jjd|j_|S)Nzexpected-eof-but-got-start-tagr>r)rIr|rFr])r@rr)r)r*rL sz4getPhases..AfterAfterBodyPhase.startTagOthercSs*|jjdd|di|jjd|j_|S)Nzexpected-eof-but-got-end-tagr>r)rIr|rFr])r@rr)r)r*rR sz4getPhases..AfterAfterBodyPhase.processEndTagN) r7r8r9rHrrrrrrrr))rr)r*AfterAfterBodyPhase2 s rcsXeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)z*getPhases..AfterAfterFramesetPhasecs8j|||tjd|jfd|jfg|_|j|j_dS)Nrr)rHrrrstartTagNoFramesrrr)r@rIr<)rr)r*rHY s z3getPhases..AfterAfterFramesetPhase.__init__cSsdS)Nr))r@r)r)r*rb sz5getPhases..AfterAfterFramesetPhase.processEOFcSs|jj||jjdS)N)r<rr)r@rr)r)r*re sz9getPhases..AfterAfterFramesetPhase.processCommentcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rh szAgetPhases..AfterAfterFramesetPhase.processSpaceCharacterscSs|jjddS)Nzexpected-eof-but-got-char)rIr|)r@rr)r)r*rk sz.AfterAfterFramesetPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rn sz7getPhases..AfterAfterFramesetPhase.startTagHtmlcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rq sz;getPhases..AfterAfterFramesetPhase.startTagNoFramescSs|jjdd|didS)Nzexpected-eof-but-got-start-tagr>)rIr|)r@rr)r)r*rt sz8getPhases..AfterAfterFramesetPhase.startTagOthercSs|jjdd|didS)Nzexpected-eof-but-got-end-tagr>)rIr|)r@rr)r)r*rx sz8getPhases..AfterAfterFramesetPhase.processEndTagN) r7r8r9rHrrrrrrrrr))rr)r*AfterAfterFramesetPhaseX s r)rTrSrrr-r.rrrrrrrrrrrrvrrr rr)r)rGrVrr r rr/r3r8rrrrrrrrrrrrrr rrrr))rr*rE_sp)#.g@CX!-GBbYLd's/9%&&rEcs^ts tjr t|dt@}nt|dt@}|rZtfdd|djD|d<dS)Nrsc3s"|]\}}j|||fVqdS)N)r})r=kv)rr)r*r sz$adjust_attributes..)rrZPY27rrrr.)rrZneeds_adjustmentr))rr*r s   rrpFcCs|dkr i}t||||dS)N)r2r>rsrw)r)r>r2rirwr)r)r*r  s r c@seZdZdZdS)rrzError in parsed documentN)r7r8r9rr)r)r)r*rr srr)rT)r+rT)rpNF)1Z __future__rrrZsixrrrr0 collectionsr ImportErrorZ ordereddictrr r r Ztreebuilders.baser rZ constantsrrrrrrrrrrrrrrrrrr#r-r;rer"ZmemoizerErr  Exceptionrrr)r)r)r*sR     H   )L  PKe%1]о##+__pycache__/serializer.cpython-36.opt-1.pycnu[3 B;WU7@sddlmZmZmZddlmZddlZddlmZm Z ddl m Z m Z m Z ddl mZmZmZddlmZmZdd lmZd je d Zejd ed Zejd edZiZeddkZxeejD]p\Z Z!eree!dkse ree!dkrqe!dkree!dkrej"e!Z!ne#e!Z!e!eks4e j$re ee!<qWddZ%ede%dddZ&Gddde'Z(Gddde)Z*dS))absolute_importdivisionunicode_literals) text_typeN)register_errorxmlcharrefreplace_errors) voidElementsbooleanAttributesspaceCharacters)rcdataElementsentities xmlEntities) treewalkers_utils)escapez"'=<>`[]u_  /`  ᠎᠏           

   ]u􏿿&c Cs"t|ttfrg}g}d}xt|j|j|jD]n\}}|rFd}q4||j}tj|j|t |j|dgrtj |j||d}d}nt |}|j |q4Wx^|D]V}t j|} | r|j d|j | | jds|j dq|j dt|ddqWdj||jfSt|SdS)NFrTr;z&#x%s;r) isinstanceUnicodeEncodeErrorUnicodeTranslateError enumerateobjectstartendrZisSurrogatePairminsurrogatePairToCodepointordappend_encode_entity_mapgetendswithhexjoinr) excresZ codepointsskipicindexZ codepointZcper/ /usr/lib/python3.6/serializer.pyhtmlentityreplace_errors*s0  "      r1htmlentityreplaceetreecKs$tj|}tf|}|j|||S)N)rZ getTreeWalkerHTMLSerializerrender)inputZtreeencodingZserializer_optsZwalkersr/r/r0 serializeJs  r9c@s~eZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZdZdZd!ZddZddZddZd"ddZd#ddZd$dd ZdS)%r4legacy"TFquote_attr_values quote_charuse_best_quote_charomit_optional_tagsminimize_boolean_attributesuse_trailing_solidusspace_before_trailing_solidusescape_lt_in_attrs escape_rcdataresolve_entitiesalphabetical_attributesinject_meta_charsetstrip_whitespacesanitizec Kszt|t|j}t|dkr2tdtt|d|kr@d|_x(|jD]}t|||j|t ||qHWg|_ d|_ dS)a6 Initialize HTMLSerializer. Keyword options (default given first unless specified) include: inject_meta_charset=True|False Whether it insert a meta element to define the character set of the document. quote_attr_values="legacy"|"spec"|"always" Whether to quote attribute values that don't require quoting per legacy browser behaviour, when required by the standard, or always. quote_char=u'"'|u"'" Use given quote character for attribute quoting. Default is to use double quote unless attribute value contains a double quote, in which case single quotes are used instead. escape_lt_in_attrs=False|True Whether to escape < in attribute values. escape_rcdata=False|True Whether to escape characters that need to be escaped within normal elements within rcdata elements such as style. resolve_entities=True|False Whether to resolve named character entities that appear in the source tree. The XML predefined entities < > & " ' are unaffected by this setting. strip_whitespace=False|True Whether to remove semantically meaningless whitespace. (This compresses all whitespace to a single space except within pre.) minimize_boolean_attributes=True|False Shortens boolean attributes to give just the attribute value, for example becomes . use_trailing_solidus=False|True Includes a close-tag slash at the end of the start tag of void elements (empty elements whose end tag is forbidden). E.g.
. space_before_trailing_solidus=True|False Places a space immediately before the closing slash in a tag using a trailing solidus. E.g.
. Requires use_trailing_solidus. sanitize=False|True Strip all unsafe or unknown constructs from output. See `html5lib user documentation`_ omit_optional_tags=True|False Omit start/end tags that are optional. alphabetical_attributes=False|True Reorder attributes to be in alphabetical order. .. _html5lib user documentation: http://code.google.com/p/html5lib/wiki/UserDocumentation rz2__init__() got an unexpected keyword argument '%s'r=FN) frozensetoptionslen TypeErrornextiterr>setattrr$getattrerrorsstrict)selfkwargsZunexpected_argsattrr/r/r0__init__ps.  zHTMLSerializer.__init__cCs|jr|j|jdS|SdS)Nr2)r7encode)rTstringr/r/r0rXszHTMLSerializer.encodecCs|jr|j|jdS|SdS)NrS)r7rX)rTrYr/r/r0 encodeStrictszHTMLSerializer.encodeStrictNccs||_d}g|_|r0|jr0ddlm}|||}|jrJddlm}||}|jrdddlm}||}|j r~ddl m}||}|j rddl m}||}xR|D]H}|d}|dkr`d|d}|dr|d |d7}n|d r|d 7}|d rJ|d j d d kr0|d j dd kr*|jdd}nd }|d||d |f7}|d7}|j|Vq|d5kr|dksz|r|r|dj dd kr|jd|j|dVn|jt|dVq|d6kr|d} |jd| V| tkr|j rd}n|r|jdx|djD]\\} } } | } | }|jdV|j| V|j s| tj| tkr"| tjdtkr"|jdV|jdkst|d krd}n@|jd krtj|dk }n$|jd!krtj|dk }ntd"|jd#d$}|j r|jd%d&}|r|j!}|j"rTd|kr CharactersSpaceCharactersdatazCommentz--zComment contains --z ZEntityrzEntity %s not recognizedz&%s;)r`ra)rcrd))r7rRrGZfilters.inject_meta_charsetr[rFZfilters.alphabeticalattributesrHZfilters.whitespacerIZfilters.sanitizerr?Zfilters.optionaltagsfindserializeErrorrZrXrr rDitemsr@r r$tupler<rL_quoteAttributeSpecsearch_quoteAttributeLegacy ValueErrorreplacerCr=r>r rArBr rEr)rT treewalkerr7Zin_cdatar[tokenr\Zdoctyper=r]_Z attr_nameZ attr_valuekvZ quote_attrrbkeyr/r/r0r9s                                    zHTMLSerializer.serializecCs2|rdjt|j||Sdjt|j|SdS)Nr)r'listr9)rTrur7r/r/r0r5?szHTMLSerializer.renderXXX ERROR MESSAGE NEEDEDcCs|jj||jrtdS)N)rRr"rSSerializeError)rTrbr/r/r0rmEs zHTMLSerializer.serializeError)r<r=r>r?r@rArBrCrDrErFrGrHrI)N)N)r})__name__ __module__ __qualname__r<r=r>r?r@rArBrCrDrErFrGrHrIrKrWrXrZr9r5rmr/r/r/r0r4Qs68  r4c@seZdZdZdS)r~zError in serialized treeN)rrr__doc__r/r/r/r0r~Lsr~)r3N)+Z __future__rrrZsixrrecodecsrrZ constantsr r r r r rrrrZxml.sax.saxutilsrr'Z_quoteAttributeSpecCharscompilerprrr#rLZ_is_ucs4r|rnrxryr r!islowerr1r9rr4 Exceptionr~r/r/r/r0s:         |PKe%1](S55*__pycache__/_ihatexml.cpython-36.opt-1.pycnu[3 B;WAA@sddlmZmZmZddlZddlZddlmZdZdZ dZ dZ d Z d j ee gZd j ee d d d e e gZd j ed gZejdZejdZddZddZeddZddZddZddZddZejdZejdZejd ZGd!d"d"eZ dS)#)absolute_importdivisionunicode_literalsN)DataLossWarninga^ [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | [#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | [#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | [#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | [#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | [#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | [#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | [#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | [#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | [#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | [#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | [#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | [#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | [#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | [#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | [#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | [#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | [#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | [#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | [#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | [#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] | [#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] | [#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] | #x0E8A | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5 | #x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | #x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] | [#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] | [#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] | #x113C | #x113E | #x1140 | #x114C | #x114E | #x1150 | [#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163 | #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | [#x1172-#x1173] | #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | [#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | [#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | [#x1F20-#x1F45] | [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | [#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | [#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | [#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | [#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]z*[#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]a [#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | [#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | [#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | [#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | #x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963] | [#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | [#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | #x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | [#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | [#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | #x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | [#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | [#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | [#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | [#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | [#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | #x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | [#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | #x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | [#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | [#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | #x3099 | #x309Aa  [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | [#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | [#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | [#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]z} #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | #[#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]z | .-_z#x([\d|A-F]{4,4})z'\[#x([\d|A-F]{4,4})-#x([\d|A-F]{4,4})\]cCsdd|jdD}g}x|D]}d}x`ttfD]T}|j|}|dk r0|jdd|jDt|d dkr~|d d|d <d}Pq0W|s|jt|gdqWt|}|S) NcSsg|] }|jqS)strip).0itemr r /usr/lib/python3.6/_ihatexml.py hsz$charStringToList..z | FcSsg|] }t|qSr )hexToInt)r r r r rrosrTrr) splitreChar reCharRangematchappendgroupslenordnormaliseCharList)charsZ charRangesrvr Z foundMatchZregexprr r rcharStringToListgs   rcCst|}x |D]}qWg}d}x|t|krd}|j||xT||t|kr|||d|dddkr|||d|dd<|d7}q@W||7}q W|S)Nrrrr)sortedrr)charListr rijr r rr|s 2  rZFFFFcCsg}|ddkr*|jd|dddgxBt|ddD].\}}|j|dd||dddgqr?r@rArBrCr r r__init__szInfosetFilter.__init__NcCsL|jr |jdr tjdtdS|jr>|dkr>tjdtdS|j|SdS)Nzxmlns:z"Attributes cannot begin with xmlnszhttp://www.w3.org/2000/xmlns/z)Attributes cannot be in the xml namespace)r> startswithwarningswarnrr? toXmlName)rEname namespacer r rcoerceAttributes  zInfosetFilter.coerceAttributecCs |j|S)N)rJ)rErKr r r coerceElementszInfosetFilter.coerceElementcCsN|jrJx$d|kr*tjdt|jdd}qW|jdrJtjdt|d7}|S)Nz--z'Comments cannot contain adjacent dashesz- -rzComments cannot end in a dash )r@rHrIrr:endswith)rEdatar r r coerceComments    zInfosetFilter.coerceCommentcCs:|jr6x"t|jdD]}tjdtqW|jdd}|S)N zText cannot contain U+000CrO)rBrangecountrHrIrr:)rErQr r r rcoerceCharacterss  zInfosetFilter.coerceCharacterscCsp|}x4tj|D]&}tjdt|j|}|j||}qW|jrl|jddkrltjdt|jd|jd}|S)NzCoercing non-XML pubid'rz!Pubid cannot contain single quote) nonPubidCharRegexpfindallrHrIrgetReplacementCharacterr:rCfind)rErQZ dataOutputr< replacementr r r coercePubids   zInfosetFilter.coercePubidc Cs|d}|dd}tj|}|r:tjdt|j|}n|}|}ttj|}x.|D]&}tjdt|j|} |j || }qVW||S)NrrzCoercing non-XML name) nonXmlNameFirstBMPRegexprrHrIrrZsetnonXmlNameBMPRegexprYr:) rErK nameFirstZnameRestmZnameFirstOutputZnameRestOutputZ replaceCharsr<r\r r rrJs       zInfosetFilter.toXmlNamecCs$||jkr|j|}n |j|}|S)N)rD escapeChar)rEr<r\r r rrZs   z%InfosetFilter.getReplacementCharactercCs0x*t|jj|D]}|j||j|}qW|S)N)r_replacementRegexprYr: unescapeChar)rErKr r r r fromXmlNameszInfosetFilter.fromXmlNamecCsdt|}||j|<|S)NzU%05X)rrD)rEr<r\r r rrcs  zInfosetFilter.escapeCharcCstt|dddS)Nrr#)r)r,)rEZcharcoder r rreszInfosetFilter.unescapeChar)FFFFTF)N)__name__ __module__ __qualname__recompilerdrFrMrNrRrVr]rJrZrfrcrer r r rr=s"     r=)!Z __future__rrrrjrHZ constantsrZbaseCharZ ideographicZcombiningCharacterZdigitZextenderr*ZletterrKrarkrrrrr,r%r&r+rr(r`r^rXobjectr=r r r rs2 0        PKe%1]>(X7X7X'__pycache__/_inputstream.cpython-36.pycnu[3 B;W~)@sddlmZmZmZddlmZmZddlmZm Z ddl Z ddl Z ddl Z ddl mZmZmZmZddl mZddlmZdd lmZydd lmZWnek reZYnXed d eDZed d eDZedd eDZeeddgBZdZejrFedEdkr"ej ddks&t!e j"eddFe#ddZ$n e j"eZ$e%ddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3g Z&e j"d4Z'iZ(Gd5d6d6e)Z*d7d8Z+Gd9d:d:e)Z,Gd;d<dd>e.Z/Gd?d@d@e)Z0GdAdBdBe)Z1dCdDZ2dS)G)absolute_importdivisionunicode_literals) text_type binary_type) http_clienturllibN)EOFspaceCharacters asciiLettersasciiUppercase)ReparseException)_utils)StringIO)BytesIOcCsg|]}|jdqS)ascii)encode).0itemr"/usr/lib/python3.6/_inputstream.py srcCsg|]}|jdqS)r)r)rrrrrrscCsg|]}|jdqS)r)r)rrrrrrs>.)sumr)r!rrrr'^szBufferedStream._bufferedBytescCs<|jj|}|jj||jdd7<t||jd<|S)Nrr )rr/rappendr r#)r!r.datarrrr,as   zBufferedStream._readStreamcCs|}g}|jd}|jd}x|t|jkr|dkr|dks@t|j|}|t||krn|}|||g|_n"t||}|t|g|_|d7}|j||||||8}d}qW|r|j|j|dj|S)Nrr )r r#rr(r1r,join)r!r.ZremainingBytesrvZ bufferIndexZ bufferOffsetZ bufferedDataZ bytesToReadrrrr-hs&     zBufferedStream._readFromBufferN) __name__ __module__ __qualname____doc__r"r&r+r/r'r,r-rrrrr9s  rcKst|tjs(t|tjjr.t|jtjr.d}n&t|drJt|jdt }n t|t }|rdd|D}|rvt d|t |f|St |f|SdS)NFr/rcSsg|]}|jdr|qS)Z _encoding)endswith)rxrrrrsz#HTMLInputStream..z3Cannot set an encoding with a unicode input, set %r) isinstancerZ HTTPResponserZresponseZaddbasefphasattrr/r TypeErrorHTMLUnicodeInputStreamHTMLBinaryInputStream)sourcekwargsZ isUnicodeZ encodingsrrrHTMLInputStreams     rDc@speZdZdZdZddZddZddZd d Zd d Z d dZ dddZ ddZ ddZ dddZddZdS)r@zProvides a unicode stream of characters to the HTMLTokenizer. This class takes care of character encoding and removing or replacing incorrect byte-sequences and also provides column and line tracking. i(cCsZtjsd|_ntddkr$|j|_n|j|_dg|_tddf|_|j ||_ |j dS)aInitialises the HTMLInputStream. HTMLInputStream(source, [encoding]) -> Normalized stream from source for use by html5lib. source can be either a file-object, local filename or a string. 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) Nu􏿿r rzutf-8certain) rsupports_lone_surrogatesreportCharacterErrorsr#characterErrorsUCS4characterErrorsUCS2ZnewLineslookupEncoding charEncoding openStream dataStreamreset)r!rBrrrr"s   zHTMLUnicodeInputStream.__init__cCs.d|_d|_d|_g|_d|_d|_d|_dS)Nr)r% chunkSize chunkOffseterrors prevNumLines prevNumCols_bufferedCharacter)r!rrrrNszHTMLUnicodeInputStream.resetcCst|dr|}nt|}|S)zvProduces a file object from source. source can be either a file object, local filename or a string. r/)r>r)r!rBrrrrrLs z!HTMLUnicodeInputStream.openStreamcCsT|j}|jdd|}|j|}|jdd|}|dkr@|j|}n ||d}||fS)N rr r)r%countrSrfindrT)r!r)r%ZnLinesZ positionLineZ lastLinePosZpositionColumnrrr _positions   z HTMLUnicodeInputStream._positioncCs|j|j\}}|d|fS)z:Returns (line, col) of the current position in the stream.r )rYrQ)r!linecolrrrr szHTMLUnicodeInputStream.positioncCs6|j|jkr|jstS|j}|j|}|d|_|S)zo Read one character from the stream or queue if available. Return EOF when EOF is reached. r )rQrP readChunkr r%)r!rQcharrrrr]s   zHTMLUnicodeInputStream.charNcCs|dkr|j}|j|j\|_|_d|_d|_d|_|jj|}|j rX|j |}d|_ n|s`dSt |dkrt |d }|dksd|kodknr|d |_ |dd}|j r|j ||j dd }|j d d }||_t ||_d S)NrOrFr iiz rV Trrr)_defaultChunkSizerYrPrSrTr%rQrMr/rUr#ordrGreplace)r!rPr2Zlastvrrrr\s0           z HTMLUnicodeInputStream.readChunkcCs,x&tttj|D]}|jjdqWdS)Nzinvalid-codepoint)ranger#invalid_unicode_refindallrRr1)r!r2_rrrrH%sz*HTMLUnicodeInputStream.characterErrorsUCS4cCsd}xtj|D]}|rqt|j}|j}tj|||drttj|||d}|tkrn|j j dd}q|dkr|dkr|t |dkr|j j dqd}|j j dqWdS)NFzinvalid-codepointTiir ) rdfinditerragroupstartrZisSurrogatePairZsurrogatePairToCodepointnon_bmp_invalid_codepointsrRr1r#)r!r2skipmatchZ codepointr$Zchar_valrrrrI)s   z*HTMLUnicodeInputStream.characterErrorsUCS2Fc Csyt||f}Wnltk r|x|D]}t|dks&tq&Wdjdd|D}|s^d|}tjd|}t||f<YnXg}x||j|j|j }|dkr|j |j krPn0|j }||j kr|j |j|j |||_ P|j |j|j d|j sPqWdj|} | S)z Returns a string of characters from the stream up to but not including any character in 'characters' or EOF. 'characters' must be a container that supports the 'in' method and iteration over its characters. rOcSsg|]}dt|qS)z\x%02x)ra)rcrrrrNsz5HTMLUnicodeInputStream.charsUntil..z^%sz[%s]+N)charsUntilRegExKeyErrorrar(r4recompilermr%rQrPendr1r\) r!Z charactersZoppositecharsroZregexr5mrtrrrr charsUntil@s2     z!HTMLUnicodeInputStream.charsUntilcCsT|dk rP|jdkr.||j|_|jd7_n"|jd8_|j|j|ksPtdS)Nrr )rQr%rPr()r!r]rrrungetos   zHTMLUnicodeInputStream.unget)N)F)r6r7r8r9r`r"rNrLrYr r]r\rHrIrxryrrrrr@s   & /r@c@sLeZdZdZdddZddZd d Zdd d Zd dZddZ ddZ dS)rAzProvides a unicode stream of characters to the HTMLTokenizer. This class takes care of character encoding and removing or replacing incorrect byte-sequences and also provides column and line tracking. N windows-1252TcCsn|j||_tj||jd|_d|_||_||_||_||_ ||_ |j ||_ |j ddk sbt |jdS)aInitialises the HTMLInputStream. HTMLInputStream(source, [encoding]) -> Normalized stream from source for use by html5lib. source can be either a file-object, local filename or a string. 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) idrN)rL rawStreamr@r" numBytesMetanumBytesChardetoverride_encodingtransport_encodingsame_origin_parent_encodinglikely_encodingdefault_encodingdetermineEncodingrKr(rN)r!rBrrrrrZ useChardetrrrr"s  zHTMLBinaryInputStream.__init__cCs&|jdjj|jd|_tj|dS)Nrrb)rKZ codec_info streamreaderr|rMr@rN)r!rrrrNszHTMLBinaryInputStream.resetc CsDt|dr|}nt|}y|j|jWnt|}YnX|S)zvProduces a file object from source. source can be either a file object, local filename or a string. r/)r>rr+r&r)r!rBrrrrrLs z HTMLBinaryInputStream.openStreamc Cs|jdf}|ddk r|St|jdf}|ddk r:|St|jdf}|ddk rX|S|jdf}|ddk rt|St|jdf}|ddk r|djjd r|St|jdf}|ddk r|S|rtyddl m }Wnt k rYnXg}|}xF|j s>|j j|j}t|ts t|s(P|j||j|qW|jt|jd}|j jd|dk rt|dfSt|jdf}|ddk r|StddfS)NrErZ tentativezutf-16)UniversalDetectorencodingz windows-1252) detectBOMrJrrdetectEncodingMetarname startswithrZchardet.universaldetectorr ImportErrordoner|r/r~r<r.r(r1Zfeedcloseresultr+r)r!ZchardetrKrZbuffersZdetectorrrrrrrsR           z'HTMLBinaryInputStream.determineEncodingcCs|jddkstt|}|dkr&dS|jdkrFtd}|dk stnT||jdkrf|jddf|_n4|jjd|df|_|jtd|jd|fdS) Nr rEutf-16beutf-16lezutf-8rzEncoding changed from %s to %s)rr)rKr(rJrr|r+rNr)r!Z newEncodingrrrchangeEncodings   z$HTMLBinaryInputStream.changeEncodingc Cstjdtjdtjdtjdtjdi}|jjd}t|t s"rAc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ e e e Z ddZe eZefddZddZddZddZdS) EncodingByteszString-like object with an associated position and various extra methods If the position is ever greater than the string length then an exception is raisedcCst|tsttj||jS)N)r<r.r(__new__lower)r!valuerrrrLszEncodingBytes.__new__cCs d|_dS)Nr r)rY)r!rrrrr"PszEncodingBytes.__init__cCs|S)Nr)r!rrr__iter__TszEncodingBytes.__iter__cCs>|jd}|_|t|kr"tn |dkr.t|||dS)Nr r)rYr# StopIterationr?)r!prrr__next__Ws  zEncodingBytes.__next__cCs|jS)N)r)r!rrrnext_szEncodingBytes.nextcCsB|j}|t|krtn |dkr$t|d|_}|||dS)Nrr )rYr#rr?)r!rrrrpreviouscs zEncodingBytes.previouscCs|jt|krt||_dS)N)rYr#r)r!r rrr setPositionlszEncodingBytes.setPositioncCs*|jt|krt|jdkr"|jSdSdS)Nr)rYr#r)r!rrr getPositionqs  zEncodingBytes.getPositioncCs||j|jdS)Nr )r )r!rrrgetCurrentByte{szEncodingBytes.getCurrentBytecCsL|j}x:|t|kr@|||d}||kr6||_|S|d7}qW||_dS)zSkip past a list of charactersr N)r r#rY)r!rurrorrrrls zEncodingBytes.skipcCsL|j}x:|t|kr@|||d}||kr6||_|S|d7}qW||_dS)Nr )r r#rY)r!rurrorrr skipUntils zEncodingBytes.skipUntilcCs>|j}|||t|}|j|}|r:|jt|7_|S)zLook for a sequence of bytes at the start of a string. If the bytes are found return True and advance the position to the byte after the match. Otherwise return False and leave the position alone)r r#r)r!r.rr2r5rrr matchBytess  zEncodingBytes.matchBytescCsR||jdj|}|dkrJ|jdkr,d|_|j|t|d7_dStdS)zLook for the next sequence of bytes matching a given sequence. If a match is found advance the position to the last byte of the matchNr rTrr)r findrYr#r)r!r.Z newPositionrrrjumpTos zEncodingBytes.jumpToN)r6r7r8r9rr"rrrrrrpropertyr r currentBytespaceCharactersBytesrlrrrrrrrrHs      rc@sXeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)rz?Mini parser for detecting character encoding from meta elementscCst||_d|_dS)z3string - the data to work on for encoding detectionN)rr2r)r!r2rrrr"s zEncodingParser.__init__c Csd|jfd|jfd|jfd|jfd|jfd|jff}x^|jD]T}d}xD|D]<\}}|jj|rJy |}PWqJtk rd}PYqJXqJW|s)r2r)r!rrrrszEncodingParser.handleCommentcCs|jjtkrdSd}d}x|j}|dkr.dS|ddkr^|ddk}|r|dk r||_dSq|ddkr|d}t|}|dk r||_dSq|ddkrtt|d}|j}|dk rt|}|dk r|r||_dS|}qWdS) NTFrs http-equivr s content-typescharsetscontent) r2rr getAttributerrJContentAttrParserrparse)r!Z hasPragmaZpendingEncodingattrZtentativeEncodingcodecZ contentParserrrrrs:      zEncodingParser.handleMetacCs |jdS)NF)handlePossibleTag)r!rrrrsz%EncodingParser.handlePossibleStartTagcCst|j|jdS)NT)rr2r)r!rrrrs z#EncodingParser.handlePossibleEndTagcCsf|j}|jtkr(|r$|j|jdS|jt}|dkrD|jn|j}x|dk r`|j}qNWdS)NTr)r2rasciiLettersBytesrrrspacesAngleBracketsr)r!ZendTagr2rorrrrrs     z EncodingParser.handlePossibleTagcCs |jjdS)Nr)r2r)r!rrrrszEncodingParser.handleOthercCs|j}|jttdgB}|dks2t|dks2t|d kr>dSg}g}xt|dkrX|rXPnX|tkrl|j}PnD|d krdj|dfS|tkr|j|j n|dkrdS|j|t |}qHW|dkr|j dj|dfSt ||j}|d krT|}xt |}||kr(t |dj|dj|fS|tkrB|j|j n |j|qWnJ|dkrldj|dfS|tkr|j|j n|dkrdS|j|x^t |}|t krdj|dj|fS|tkr|j|j n|dkrdS|j|qWdS) z_Return a name,value pair for the next attribute in the stream, if one is found, or None/Nr r=r3'")rN)rr)rr) r2rlr frozensetr#r(r4asciiUppercaseBytesr1rrrr)r!r2roZattrNameZ attrValueZ quoteCharrrrrsh             zEncodingParser.getAttributeN) r6r7r8r9r"rrrrrrrrrrrrrs$rc@seZdZddZddZdS)rcCst|tst||_dS)N)r<r.r(r2)r!r2rrrr"fszContentAttrParser.__init__cCsy|jjd|jjd7_|jj|jjdks8dS|jjd7_|jj|jjdkr|jj}|jjd7_|jj}|jj|r|j||jjSdSnF|jj}y|jjt|j||jjStk r|j|dSXWntk rdSXdS)Nscharsetr rrr)rr)r2rr rlrrrr)r!Z quoteMarkZ oldPositionrrrrjs.       zContentAttrParser.parseN)r6r7r8r"rrrrrresrcCs`t|tr.y|jd}Wntk r,dSX|dk rXy tj|Stk rTdSXndSdS)z{Return the python codec name corresponding to an encoding or None if the string doesn't correspond to a valid encoding.rN)r<rdecodeUnicodeDecodeError webencodingslookupAttributeError)rrrrrJs  rJrr)3Z __future__rrrZsixrrZ six.movesrrrrrrZ constantsr r r r rrOriorrrrrrrrZinvalid_unicode_no_surrogaterFrWr(rsevalrdsetrkZascii_punctuation_rerpobjectrrDr@rAr.rrrrJrrrrsX    "          JgIh6'PKe%1]2*__pycache__/constants.cpython-36.opt-1.pycnu[3 B;WE@s-ddlmZmZmZddlZdZddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d,d,d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddZdddddddZeeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfgZ eeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfgZ eeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfgNZ eeddfeddfeddfeddfgZ eeddfeddfeddfeddfeddfgZ ddddddddddddddddddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/>Zd0d1iZd2d3ed2fd2d4ed2fd2d5ed2fd2d6ed2fd2d7ed2fd2ded2fd2d8ed2fd9ded9fd9d:ed9fd9d;ed9fddd?ejDZed@dAdBdCdDgZedddddgZeejZeejZeejZeejZeejZedEd?ejDZd|Z edddFddddddddddԐdGdHgZ!eddgZ"edddddddgZ#edIgedJgedKgedLdMgedLdMgedNdOgedPgedQdRgedSdRdTdUgedVgedWgedRdXgedRdXdYgedRdXgedRdZgedRdXd[dZdTdKgedRdXdZdQgedRdXgd\Z$d}Z%edydzd{d|d}gZ&d~d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐddѐdԐdՐd֐dÐdאdؐdِdڐdېdܐdݐdސdߐdddddddddddddԐddddddddddddddddddddddddddddddddddd d d d d d dddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d(d+dd,d-d.d/d0d0d1d1d2d3d4d5d5d4d6d7dڐd8d9d:d;d<d=d>d?d@dAdBdCdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdՐd֐dudvdwdxdydzd{d|d}d~ddddאdؐdِddddXdddddddddddddddddddddd"ddAddddddddddddddddddddddddddddddddddddddddddddd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ߐdddddddddddddddddd'ddddddddddddddddddddddddddddddd dd d d d ddddddddddddddddddd dڐd!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0dߐd^d d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d?d@dAdBdCdDddEdFdGdHdFdIdIdJdKdLd@dMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d^d_d`dadbdcdcdddedfdgdgdhdidjdkdldmdndodpd1dqdrdsdtdudvdܐdݐdwdxdydzd{d|d}d~d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddɐdɐddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐dd͐dΐdϐdYdАdѐdҐdӐdԐdYdҐdՐdՐd֐dאdYddؐdؐdِdِddڐdېdܐdݐdސdߐdddddkddܐddddddݐdddddd:ddmddddddddddddd ddddddddddddddududdddddd d d d d dddddddddddddddd*dddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.dސdd/d/d0d1dߐdd2d3d4d5d5dd6d,d,d7d8d9d:d;d<d=d>d?d$d@dAdBdBdCdDdEdFdddGdHdHddIdJdKdKdLdMdNdOdPdQdRddSdTdUdVdPdWdXdYdZdZd[ddd\d]d^d3d^ddXd_dd`ddddadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdldmdydzd{d{dndwdydzdd|d}dԐd~dddߐddiddːdddϐdddddddddddddΐdΐdddѐdddddddddddddʐdӐddddddߐdddddddddddddddd ddddddddddddddddddddddddddddddddddddddddddÐdĐdĐdŐddddddƐdǐddȐdɐdʐdːd̐dӐdd͐dΐdΐdϐdϐdАdѐdddddҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސd dߐddddddddddddddddddddddddddddddddddddddddddddddd"ddddddddd d d d dd d d̐d d dddddddddddddddd ddd֐ddd(ddgdddddddddd d!d"d#d$d%d&d'd(dd)d*dd+d+d;d,d,d-d.d/d/d֐d0d1d1d7d2d3d4d5d6d7d4d@d4d8d9d:dd;d<d=d8d9d>dd>d?d@dAdBdCdDd@dEdEdFddGdHdIdJdd<dKdLdMdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d}dՐd`dadvdbdcdddedXdfd]dgd]dhdidid^d_djdkd$dldmdndodpdqdrdsdtdudvdwdxdydzd{d|dadvd}d~dܐdddddd^doddsddgd`dddduddvdydydddddddhddudbdwdzddfddwdddsdddddddddddddddddddddbdddddldddddddidddddd`dddddddddzdddwdݐdddTdTddddddddddndddddddddddddddjdvddddddddÐdÐddאdĐdddŐd!ddƐdǐdddȐdɐddʐddːd̐d̐d͐dΐddϐdАdѐdҐddӐdԐdՐdƐd֐dאd̐dؐdِdڐd̐dېdېddddddܐdݐdސdːdߐdddddddxdxdddddddddddddddddАddddddddϐdddddddddddddddd͐ddddddddddddddddddddddddӐdddddddÐdŐdĐdd͐ddɐdʐdʐd͐ddddddddddÐdĐdddȐdǐdȐddddddddddddddd d d d d dddddddddddwdwddSdddTdUddddVdddddd d!d"d#d#d$d%dِddQd&d'dd(d)d*d+d,dd-d.d/dd0dRd1d2d2d3d3d4d4d5d6d7d8d2d9d9d:d;d;dd<d=d=d>dސd?d?dސd@dAddBdCdDdEdudFdGdHdIddJdKdߐdLddMddNdOd"dPddQdRdddSdTddUdVdWdWddXdYddddYdddZd[d\dd]dd[dZd\dd^d_d`ddddadbdcddded2dfdgdhd)didjdǐddd#dڐdkddldmdnd5dod dpdqd drdrd dsd dtdudvd%ddwdxdydzd{d|ddd}d~dddddddd~dddddddd$dd!dddddddddddd dyddddddzdddʐdddddddddddddddddddd%ddddddddddddddAddddCdBdddddddDdddddd ddddddddddddddddސddddddVddWdWdddddÐdĐdŐd^ddƐdǐddȐdɐdʐdːd̐d͐dΐdϐdАdѐdѐdސd7dҐd<dӐd8d9d8d9d:d;d:d;d6d6d d d dԐddȐd>dՐddŐdIdd֐dאdؐd@dِdڐdېdܐdݐdސd֐d@dאdܐdېdߐdddAddCdBddddDdEddddddddGddddHdddddddddGdHdddddddd!dddddddddddd[dddRdRddddYdVdUdYdVddd͐ddd#ddd3dddddddddJd dddnd ddd d d d dddddddddYddܐdddd1ddddddrddtdddddqddd d d!d"d#dѐdѐd$d%d1dsdqddnd&dyd&d'd(d(d)d*d+d,d-d.d dd'd/d/d0dݐd1d2dېd3dŐdWddIdLddsddd4d5d6d7ddldd8dd0d9d:d;ddd<dlddǐd=ddd>d5d4d7d6d?d@dAddBdCdDdEdCdddFd:ddmddGdؐddHdאdddIddJdddِddKddddddLdLdMdNdOdPdPdQdRdSdTdUdVdVdWdXdYdZdd[d\d]d^d_d`dadbdcZ'dddDdАdeddݐdddddOdEd,ddѐdfddgdhdݐddܐdd5ddd͐dJddddidXddj"Z(ddkdldmdndodpdqdrZ)ee)dse)dte)dugZ*edvd?ejDZ+dwe+d<Gdxdydye,Z-Gdzd{d{e.Z/dS(~)absolute_importdivisionunicode_literalsNz5Null character in input stream, replaced with U+FFFD.zInvalid codepoint in stream.z&Solidus (/) incorrectly placed in tag.z.Incorrect CR newline entity, replaced with LF.z9Entity used with illegal number (windows-1252 reference).zPNumeric entity couldn't be converted to character (codepoint U+%(charAsInt)08x).zBNumeric entity represents an illegal codepoint: U+%(charAsInt)08x.z#Numeric entity didn't end with ';'.z1Numeric entity expected. Got end of file instead.z'Numeric entity expected but none found.z!Named entity didn't end with ';'.z Named entity expected. Got none.z'End tag contains unexpected attributes.z.End tag contains unexpected self-closing flag.z#Expected tag name. Got '>' instead.zSExpected tag name. Got '?' instead. (HTML doesn't support processing instructions.)z-Expected tag name. Got something else insteadz6Expected closing tag. Got '>' instead. Ignoring ''.z-Expected closing tag. Unexpected end of file.z' instead.z"Unexpected = in unquoted attributez*Unexpected character in unquoted attributez*Unexpected character after attribute name.z+Unexpected character after attribute value.z.Unexpected end of file in attribute value (").z.Unexpected end of file in attribute value (').z*Unexpected end of file in attribute value.z)Unexpected end of file in tag. Expected >z/Unexpected character after / in tag. Expected >z&Expected '--' or 'DOCTYPE'. Not found.z Unexpected ! after -- in commentz$Unexpected space after -- in commentzIncorrect comment.z"Unexpected end of file in comment.z%Unexpected end of file in comment (-)z+Unexpected '-' after '--' found in comment.z'Unexpected end of file in comment (--).z&Unexpected character in comment found.z(No space after literal string 'DOCTYPE'.z.Unexpected > character. Expected DOCTYPE name.z.Unexpected end of file. Expected DOCTYPE name.z'Unexpected end of file in DOCTYPE name.z"Unexpected end of file in DOCTYPE.z%Expected space or '>'. Got '%(data)s'zUnexpected end of DOCTYPE.z Unexpected character in DOCTYPE.zXXX innerHTML EOFzUnexpected DOCTYPE. Ignored.z%html needs to be the first start tag.z)Unexpected End of file. Expected DOCTYPE.zErroneous DOCTYPE.z2Unexpected non-space characters. Expected DOCTYPE.z2Unexpected start tag (%(name)s). Expected DOCTYPE.z0Unexpected end tag (%(name)s). Expected DOCTYPE.z?Unexpected end tag (%(name)s) after the (implied) root element.z4Unexpected end of file. Expected end tag (%(name)s).z4Unexpected start tag head in existing head. Ignored.z'Unexpected end tag (%(name)s). Ignored.z;Unexpected start tag (%(name)s) that can be in head. Moved.z Unexpected start tag (%(name)s).zMissing end tag (%(name)s).zMissing end tags (%(name)s).zCUnexpected start tag (%(startName)s) implies end tag (%(endName)s).z@Unexpected start tag (%(originalName)s). Treated as %(newName)s.z,Unexpected start tag %(name)s. Don't use it!z'Unexpected start tag %(name)s. Ignored.zEUnexpected end tag (%(gotName)s). Missing end tag (%(expectedName)s).z:End tag (%(name)s) seen too early. Expected other end tag.zFUnexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s).z+End tag (%(name)s) seen too early. Ignored.zQEnd tag (%(name)s) violates step 1, paragraph 1 of the adoption agency algorithm.zQEnd tag (%(name)s) violates step 1, paragraph 2 of the adoption agency algorithm.zQEnd tag (%(name)s) violates step 1, paragraph 3 of the adoption agency algorithm.zQEnd tag (%(name)s) violates step 4, paragraph 4 of the adoption agency algorithm.z>Unexpected end tag (%(originalName)s). Treated as %(newName)s.z'This element (%(name)s) has no end tag.z9Unexpected implied end tag (%(name)s) in the table phase.z>Unexpected implied end tag (%(name)s) in the table body phase.zDUnexpected non-space characters in table context caused voodoo mode.z3Unexpected input with type hidden in table context.z!Unexpected form in table context.zDUnexpected start tag (%(name)s) in table context caused voodoo mode.zBUnexpected end tag (%(name)s) in table context caused voodoo mode.zCUnexpected table cell start tag (%(name)s) in the table body phase.zFGot table cell end tag (%(name)s) while required end tags are missing.z?Unexpected end tag (%(name)s) in the table body phase. Ignored.z=Unexpected implied end tag (%(name)s) in the table row phase.z>Unexpected end tag (%(name)s) in the table row phase. Ignored.zJUnexpected select start tag in the select phase treated as select end tag.z/Unexpected input start tag in the select phase.zBUnexpected start tag token (%(name)s in the select phase. Ignored.z;Unexpected end tag (%(name)s) in the select phase. Ignored.zKUnexpected table element start tag (%(name)s) in the select in table phase.zIUnexpected table element end tag (%(name)s) in the select in table phase.z8Unexpected non-space characters in the after body phase.z>Unexpected start tag token (%(name)s) in the after body phase.zZ attributenameZ attributetypeZ basefrequencyZ baseprofileZcalcmodeZ clippathunitsZcontentscripttypeZcontentstyletypeZdiffuseconstantZedgemodeZexternalresourcesrequiredZ filterresZ filterunitsZglyphrefZgradienttransformZ gradientunitsZ kernelmatrixZkernelunitlengthZ keypointsZ keysplinesZkeytimesZ lengthadjustZlimitingconeangleZ markerheightZ markerunitsZ markerwidthZmaskcontentunitsZ maskunitsZ numoctavesZ pathlengthZpatterncontentunitsZpatterntransformZ patternunitsZ pointsatxZ pointsatyZ pointsatzZ preservealphaZpreserveaspectratioZprimitiveunitsZrefxZrefyZ repeatcountZ repeatdurZrequiredextensionsZrequiredfeaturesZspecularconstantZspecularexponentZ spreadmethodZ startoffsetZ stddeviationZ stitchtilesZ surfacescaleZsystemlanguageZ tablevaluesZtargetxZtargetyZ textlengthZviewboxZ viewtargetZxchannelselectorZychannelselectorZ zoomandpanZ definitionurlZ definitionURLrZactuateZarcroleZhrefZroleZshowtyper ZlangZspacer ) z xlink:actuatez xlink:arcrolez xlink:hrefz xlink:rolez xlink:showz xlink:titlez xlink:typezxml:basezxml:langz xml:spacer z xmlns:xlinkcCs"g|]\}\}}}||f|fqSr2).0ZqnameprefixZlocalnsr2r2/usr/lib/python3.6/constants.py sr7     cCs g|]}t|t|jfqSr2)ordlower)r3cr2r2r6r7#sz event-sourcesourceZtrackZ irrelevantZscopedZismapZautoplayZcontrolsZdeferasyncopenZmultipleZdisabledZhiddenZcheckeddefaultZnoshadeZ autosubmitreadonlyZselectedZ autofocusZrequired)r0r(ZaudioZvideor.rZdatagridrr'r+rZoptionZoptgrouprr)r/output   & ! 0 `9 R}    "   "!a: S~xzlt;zgt;zamp;zapos;zquot;Æ&ÁuĂÂuАu𝔄ÀuΑuĀu⩓uĄu𝔸u⁡Åu𝒜u≔ÃÄu∖u⫧u⌆uБu∵uℬuΒu𝔅u𝔹u˘u≎uЧ©uĆu⋒uⅅuℭuČÇuĈu∰uĊ¸·uΧu⊙u⊖u⊕u⊗u∲u”u’u∷u⩴u≡u∯u∮uℂu∐u∳u⨯u𝒞u⋓u≍u⤑uЂuЅuЏu‡u↡u⫤uĎuДu∇uΔu𝔇´u˙u˝`u˜u⋄uⅆu𝔻¨u⃜u≐u⇓u⇐u⇔u⟸u⟺u⟹u⇒u⊨u⇑u⇕u∥u↓u⤓u⇵ȗu⥐u⥞u↽u⥖u⥟u⇁u⥗u⊤u↧u𝒟uĐuŊÐÉuĚÊuЭuĖu𝔈Èu∈uĒu◻u▫uĘu𝔼uΕu⩵u≂u⇌uℰu⩳uΗËu∃uⅇuФu𝔉u◼u▪u𝔽u∀uℱuЃ>uΓuϜuĞuĢuĜuГuĠu𝔊u⋙u𝔾u≥u⋛u≧u⪢u≷u⩾u≳u𝒢u≫uЪuˇ^uĤuℌuℋuℍu─uĦu≏uЕuIJuЁÍÎuИuİuℑÌuĪuⅈu∬u∫u⋂u⁣u⁢uĮu𝕀uΙuℐuĨuІÏuĴuЙu𝔍u𝕁u𝒥uЈuЄuХuЌuΚuĶuКu𝔎u𝕂u𝒦uЉ⃒u⧞u⤂u≤⃒u<⃒u⊴⃒u⤃u⊵⃒u∼⃒u⇖u⤣u⤧óôuоuőu⨸u⦼uœu⦿u𝔬u˛òu⧁u⦵u⦾u⦻u⧀uōuωuοu⦶u𝕠u⦷u⦹u∨u⩝uℴªºu⊶u⩖u⩗u⩛øu⊘õu⨶öu⌽¶u⫳u⫽uп%.u‰u‱u𝔭uφuϕu☎uπuϖuℎ+u⨣u⨢u⨥u⩲u⨦u⨧u⨕u𝕡£u⪳u⪷u⪹u⪵u⋨u′u⌮u⌒u⌓u⊰u𝓅uψu u𝔮u𝕢u⁗u𝓆u⨖?u⤜u⥤u∽̱uŕu⦳u⦒u⦥»u⥵u⤠u⤳u⤞u⥅u⥴u↣u↝u⤚u∶u❳}]u⦌u⦎u⦐uřuŗuрu⤷u⥩u↳u▭u⥽u𝔯u⥬uρuϱu⇉u⋌u˚u‏u⎱u⫮u⟭u⇾u⦆u𝕣u⨮u⨵)u⦔u⨒u›u𝓇u⋊u▹u⧎u⥨u℞uśu⪴u⪸ušuşuŝu⪶u⪺u⋩u⨓uсu⋅u⩦u⇘§;u⤩u✶u𝔰u♯uщuш­uσuςu⩪u⪞u⪠u⪝u⪟u≆u⨤u⥲u⨳u⧤u⌣u⪪u⪬u⪬︀uь/u⧄u⌿u𝕤u♠u⊓︀u⊔︀u𝓈u☆u⊂u⫅u⪽u⫃u⫁u⫋u⊊u⪿u⥹u⫇u⫕u⫓u♪¹²³u⫆u⪾u⫘u⫄u⟉u⫗u⥻u⫂u⫌u⊋u⫀u⫈u⫔u⫖u⇙u⤪ßu⌖uτuťuţuтu⌕u𝔱uθuϑþ×u⨱u⨰u⌶u⫱u𝕥u⫚u‴u▵u≜u◬u⨺u⨹u⧍u⨻u⏢u𝓉uцuћuŧu⥣úuўuŭûuуuűu⥾u𝔲ùu▀u⌜u⌏u◸uūuųu𝕦uυu⇈u⌝u⌎uůu◹u𝓊u⋰uũüu⦧u⫨u⫩u⦜u⊊︀u⫋︀u⊋︀u⫌︀uвu⊻u≚u⋮u𝔳u𝕧u𝓋u⦚uŵu⩟u≙u℘u𝔴u𝕨u𝓌u𝔵uξu⋻u𝕩u𝓍ýuяuŷuы¥u𝔶uїu𝕪u𝓎uюÿuźužuзużuζu𝔷uжu⇝u𝕫u𝓏u‍u‌(ZAEligzAElig;ZAMPzAMP;ZAacutezAacute;zAbreve;ZAcirczAcirc;zAcy;zAfr;ZAgravezAgrave;zAlpha;zAmacr;zAnd;zAogon;zAopf;zApplyFunction;ZAringzAring;zAscr;zAssign;ZAtildezAtilde;ZAumlzAuml;z Backslash;zBarv;zBarwed;zBcy;zBecause;z Bernoullis;zBeta;zBfr;zBopf;zBreve;zBscr;zBumpeq;zCHcy;ZCOPYzCOPY;zCacute;zCap;zCapitalDifferentialD;zCayleys;zCcaron;ZCcedilzCcedil;zCcirc;zCconint;zCdot;zCedilla;z CenterDot;zCfr;zChi;z CircleDot;z CircleMinus;z CirclePlus;z CircleTimes;zClockwiseContourIntegral;zCloseCurlyDoubleQuote;zCloseCurlyQuote;zColon;zColone;z Congruent;zConint;zContourIntegral;zCopf;z Coproduct;z CounterClockwiseContourIntegral;zCross;zCscr;zCup;zCupCap;zDD;z DDotrahd;zDJcy;zDScy;zDZcy;zDagger;zDarr;zDashv;zDcaron;zDcy;zDel;zDelta;zDfr;zDiacriticalAcute;zDiacriticalDot;zDiacriticalDoubleAcute;zDiacriticalGrave;zDiacriticalTilde;zDiamond;zDifferentialD;zDopf;zDot;zDotDot;z DotEqual;zDoubleContourIntegral;z DoubleDot;zDoubleDownArrow;zDoubleLeftArrow;zDoubleLeftRightArrow;zDoubleLeftTee;zDoubleLongLeftArrow;zDoubleLongLeftRightArrow;zDoubleLongRightArrow;zDoubleRightArrow;zDoubleRightTee;zDoubleUpArrow;zDoubleUpDownArrow;zDoubleVerticalBar;z DownArrow;z DownArrowBar;zDownArrowUpArrow;z DownBreve;zDownLeftRightVector;zDownLeftTeeVector;zDownLeftVector;zDownLeftVectorBar;zDownRightTeeVector;zDownRightVector;zDownRightVectorBar;zDownTee;z DownTeeArrow;z Downarrow;zDscr;zDstrok;zENG;ZETHzETH;ZEacutezEacute;zEcaron;ZEcirczEcirc;zEcy;zEdot;zEfr;ZEgravezEgrave;zElement;zEmacr;zEmptySmallSquare;zEmptyVerySmallSquare;zEogon;zEopf;zEpsilon;zEqual;z EqualTilde;z Equilibrium;zEscr;zEsim;zEta;ZEumlzEuml;zExists;z ExponentialE;zFcy;zFfr;zFilledSmallSquare;zFilledVerySmallSquare;zFopf;zForAll;z Fouriertrf;zFscr;zGJcy;ZGTzGT;zGamma;zGammad;zGbreve;zGcedil;zGcirc;zGcy;zGdot;zGfr;zGg;zGopf;z GreaterEqual;zGreaterEqualLess;zGreaterFullEqual;zGreaterGreater;z GreaterLess;zGreaterSlantEqual;z GreaterTilde;zGscr;zGt;zHARDcy;zHacek;zHat;zHcirc;zHfr;z HilbertSpace;zHopf;zHorizontalLine;zHscr;zHstrok;z HumpDownHump;z HumpEqual;zIEcy;zIJlig;zIOcy;ZIacutezIacute;ZIcirczIcirc;zIcy;zIdot;zIfr;ZIgravezIgrave;zIm;zImacr;z ImaginaryI;zImplies;zInt;z Integral;z Intersection;zInvisibleComma;zInvisibleTimes;zIogon;zIopf;zIota;zIscr;zItilde;zIukcy;ZIumlzIuml;zJcirc;zJcy;zJfr;zJopf;zJscr;zJsercy;zJukcy;zKHcy;zKJcy;zKappa;zKcedil;zKcy;zKfr;zKopf;zKscr;zLJcy;ZLTzLT;zLacute;zLambda;zLang;z Laplacetrf;zLarr;zLcaron;zLcedil;zLcy;zLeftAngleBracket;z LeftArrow;z LeftArrowBar;zLeftArrowRightArrow;z LeftCeiling;zLeftDoubleBracket;zLeftDownTeeVector;zLeftDownVector;zLeftDownVectorBar;z LeftFloor;zLeftRightArrow;zLeftRightVector;zLeftTee;z LeftTeeArrow;zLeftTeeVector;z LeftTriangle;zLeftTriangleBar;zLeftTriangleEqual;zLeftUpDownVector;zLeftUpTeeVector;z LeftUpVector;zLeftUpVectorBar;z LeftVector;zLeftVectorBar;z Leftarrow;zLeftrightarrow;zLessEqualGreater;zLessFullEqual;z LessGreater;z LessLess;zLessSlantEqual;z LessTilde;zLfr;zLl;z Lleftarrow;zLmidot;zLongLeftArrow;zLongLeftRightArrow;zLongRightArrow;zLongleftarrow;zLongleftrightarrow;zLongrightarrow;zLopf;zLowerLeftArrow;zLowerRightArrow;zLscr;zLsh;zLstrok;zLt;zMap;zMcy;z MediumSpace;z Mellintrf;zMfr;z MinusPlus;zMopf;zMscr;zMu;zNJcy;zNacute;zNcaron;zNcedil;zNcy;zNegativeMediumSpace;zNegativeThickSpace;zNegativeThinSpace;zNegativeVeryThinSpace;zNestedGreaterGreater;zNestedLessLess;zNewLine;zNfr;zNoBreak;zNonBreakingSpace;zNopf;zNot;z NotCongruent;z NotCupCap;zNotDoubleVerticalBar;z NotElement;z NotEqual;zNotEqualTilde;z NotExists;z NotGreater;zNotGreaterEqual;zNotGreaterFullEqual;zNotGreaterGreater;zNotGreaterLess;zNotGreaterSlantEqual;zNotGreaterTilde;zNotHumpDownHump;z NotHumpEqual;zNotLeftTriangle;zNotLeftTriangleBar;zNotLeftTriangleEqual;zNotLess;z NotLessEqual;zNotLessGreater;z NotLessLess;zNotLessSlantEqual;z NotLessTilde;zNotNestedGreaterGreater;zNotNestedLessLess;z NotPrecedes;zNotPrecedesEqual;zNotPrecedesSlantEqual;zNotReverseElement;zNotRightTriangle;zNotRightTriangleBar;zNotRightTriangleEqual;zNotSquareSubset;zNotSquareSubsetEqual;zNotSquareSuperset;zNotSquareSupersetEqual;z NotSubset;zNotSubsetEqual;z NotSucceeds;zNotSucceedsEqual;zNotSucceedsSlantEqual;zNotSucceedsTilde;z NotSuperset;zNotSupersetEqual;z NotTilde;zNotTildeEqual;zNotTildeFullEqual;zNotTildeTilde;zNotVerticalBar;zNscr;ZNtildezNtilde;zNu;zOElig;ZOacutezOacute;ZOcirczOcirc;zOcy;zOdblac;zOfr;ZOgravezOgrave;zOmacr;zOmega;zOmicron;zOopf;zOpenCurlyDoubleQuote;zOpenCurlyQuote;zOr;zOscr;ZOslashzOslash;ZOtildezOtilde;zOtimes;ZOumlzOuml;zOverBar;z OverBrace;z OverBracket;zOverParenthesis;z PartialD;zPcy;zPfr;zPhi;zPi;z PlusMinus;zPoincareplane;zPopf;zPr;z Precedes;zPrecedesEqual;zPrecedesSlantEqual;zPrecedesTilde;zPrime;zProduct;z Proportion;z Proportional;zPscr;zPsi;ZQUOTzQUOT;zQfr;zQopf;zQscr;zRBarr;ZREGzREG;zRacute;zRang;zRarr;zRarrtl;zRcaron;zRcedil;zRcy;zRe;zReverseElement;zReverseEquilibrium;zReverseUpEquilibrium;zRfr;zRho;zRightAngleBracket;z RightArrow;zRightArrowBar;zRightArrowLeftArrow;z RightCeiling;zRightDoubleBracket;zRightDownTeeVector;zRightDownVector;zRightDownVectorBar;z RightFloor;z RightTee;zRightTeeArrow;zRightTeeVector;zRightTriangle;zRightTriangleBar;zRightTriangleEqual;zRightUpDownVector;zRightUpTeeVector;zRightUpVector;zRightUpVectorBar;z RightVector;zRightVectorBar;z Rightarrow;zRopf;z RoundImplies;z Rrightarrow;zRscr;zRsh;z RuleDelayed;zSHCHcy;zSHcy;zSOFTcy;zSacute;zSc;zScaron;zScedil;zScirc;zScy;zSfr;zShortDownArrow;zShortLeftArrow;zShortRightArrow;z ShortUpArrow;zSigma;z SmallCircle;zSopf;zSqrt;zSquare;zSquareIntersection;z SquareSubset;zSquareSubsetEqual;zSquareSuperset;zSquareSupersetEqual;z SquareUnion;zSscr;zStar;zSub;zSubset;z SubsetEqual;z Succeeds;zSucceedsEqual;zSucceedsSlantEqual;zSucceedsTilde;z SuchThat;zSum;zSup;z Superset;zSupersetEqual;zSupset;ZTHORNzTHORN;zTRADE;zTSHcy;zTScy;zTab;zTau;zTcaron;zTcedil;zTcy;zTfr;z Therefore;zTheta;z ThickSpace;z ThinSpace;zTilde;z TildeEqual;zTildeFullEqual;z TildeTilde;zTopf;z TripleDot;zTscr;zTstrok;ZUacutezUacute;zUarr;z Uarrocir;zUbrcy;zUbreve;ZUcirczUcirc;zUcy;zUdblac;zUfr;ZUgravezUgrave;zUmacr;z UnderBar;z UnderBrace;z UnderBracket;zUnderParenthesis;zUnion;z UnionPlus;zUogon;zUopf;zUpArrow;z UpArrowBar;zUpArrowDownArrow;z UpDownArrow;zUpEquilibrium;zUpTee;z UpTeeArrow;zUparrow;z Updownarrow;zUpperLeftArrow;zUpperRightArrow;zUpsi;zUpsilon;zUring;zUscr;zUtilde;ZUumlzUuml;zVDash;zVbar;zVcy;zVdash;zVdashl;zVee;zVerbar;zVert;z VerticalBar;z VerticalLine;zVerticalSeparator;zVerticalTilde;zVeryThinSpace;zVfr;zVopf;zVscr;zVvdash;zWcirc;zWedge;zWfr;zWopf;zWscr;zXfr;zXi;zXopf;zXscr;zYAcy;zYIcy;zYUcy;ZYacutezYacute;zYcirc;zYcy;zYfr;zYopf;zYscr;zYuml;zZHcy;zZacute;zZcaron;zZcy;zZdot;zZeroWidthSpace;zZeta;zZfr;zZopf;zZscr;Zaacutezaacute;zabreve;zac;zacE;zacd;Zacirczacirc;Zacutezacute;zacy;Zaeligzaelig;zaf;zafr;Zagravezagrave;zalefsym;zaleph;zalpha;zamacr;zamalg;Zampzamp;zand;zandand;zandd;z andslope;zandv;zang;zange;zangle;zangmsd;z angmsdaa;z angmsdab;z angmsdac;z angmsdad;z angmsdae;z angmsdaf;z angmsdag;z angmsdah;zangrt;zangrtvb;z angrtvbd;zangsph;zangst;zangzarr;zaogon;zaopf;zap;zapE;zapacir;zape;zapid;zapos;zapprox;z approxeq;Zaringzaring;zascr;zast;zasymp;zasympeq;Zatildezatilde;Zaumlzauml;z awconint;zawint;zbNot;z backcong;z backepsilon;z backprime;zbacksim;z backsimeq;zbarvee;zbarwed;z barwedge;zbbrk;z bbrktbrk;zbcong;zbcy;zbdquo;zbecaus;zbecause;zbemptyv;zbepsi;zbernou;zbeta;zbeth;zbetween;zbfr;zbigcap;zbigcirc;zbigcup;zbigodot;z bigoplus;z bigotimes;z bigsqcup;zbigstar;zbigtriangledown;zbigtriangleup;z biguplus;zbigvee;z bigwedge;zbkarow;z blacklozenge;z blacksquare;zblacktriangle;zblacktriangledown;zblacktriangleleft;zblacktriangleright;zblank;zblk12;zblk14;zblk34;zblock;zbne;zbnequiv;zbnot;zbopf;zbot;zbottom;zbowtie;zboxDL;zboxDR;zboxDl;zboxDr;zboxH;zboxHD;zboxHU;zboxHd;zboxHu;zboxUL;zboxUR;zboxUl;zboxUr;zboxV;zboxVH;zboxVL;zboxVR;zboxVh;zboxVl;zboxVr;zboxbox;zboxdL;zboxdR;zboxdl;zboxdr;zboxh;zboxhD;zboxhU;zboxhd;zboxhu;z boxminus;zboxplus;z boxtimes;zboxuL;zboxuR;zboxul;zboxur;zboxv;zboxvH;zboxvL;zboxvR;zboxvh;zboxvl;zboxvr;zbprime;zbreve;Zbrvbarzbrvbar;zbscr;zbsemi;zbsim;zbsime;zbsol;zbsolb;z bsolhsub;zbull;zbullet;zbump;zbumpE;zbumpe;zbumpeq;zcacute;zcap;zcapand;z capbrcup;zcapcap;zcapcup;zcapdot;zcaps;zcaret;zcaron;zccaps;zccaron;Zccedilzccedil;zccirc;zccups;zccupssm;zcdot;Zcedilzcedil;zcemptyv;Zcentzcent;z centerdot;zcfr;zchcy;zcheck;z checkmark;zchi;zcir;zcirE;zcirc;zcirceq;zcirclearrowleft;zcirclearrowright;z circledR;z circledS;z circledast;z circledcirc;z circleddash;zcire;z cirfnint;zcirmid;zcirscir;zclubs;z clubsuit;zcolon;zcolone;zcoloneq;zcomma;zcommat;zcomp;zcompfn;z complement;z complexes;zcong;zcongdot;zconint;zcopf;zcoprod;copyzcopy;zcopysr;zcrarr;zcross;zcscr;zcsub;zcsube;zcsup;zcsupe;zctdot;zcudarrl;zcudarrr;zcuepr;zcuesc;zcularr;zcularrp;zcup;z cupbrcap;zcupcap;zcupcup;zcupdot;zcupor;zcups;zcurarr;zcurarrm;z curlyeqprec;z curlyeqsucc;z curlyvee;z curlywedge;Zcurrenzcurren;zcurvearrowleft;zcurvearrowright;zcuvee;zcuwed;z cwconint;zcwint;zcylcty;zdArr;zdHar;zdagger;zdaleth;zdarr;zdash;zdashv;zdbkarow;zdblac;zdcaron;zdcy;zdd;zddagger;zddarr;zddotseq;Zdegzdeg;zdelta;zdemptyv;zdfisht;zdfr;zdharl;zdharr;zdiam;zdiamond;z diamondsuit;zdiams;zdie;zdigamma;zdisin;zdiv;Zdividezdivide;zdivideontimes;zdivonx;zdjcy;zdlcorn;zdlcrop;zdollar;zdopf;zdot;zdoteq;z doteqdot;z dotminus;zdotplus;z dotsquare;zdoublebarwedge;z downarrow;zdowndownarrows;zdownharpoonleft;zdownharpoonright;z drbkarow;zdrcorn;zdrcrop;zdscr;zdscy;zdsol;zdstrok;zdtdot;zdtri;zdtrif;zduarr;zduhar;zdwangle;zdzcy;z dzigrarr;zeDDot;zeDot;Zeacutezeacute;zeaster;zecaron;zecir;Zecirczecirc;zecolon;zecy;zedot;zee;zefDot;zefr;zeg;Zegravezegrave;zegs;zegsdot;zel;z elinters;zell;zels;zelsdot;zemacr;zempty;z emptyset;zemptyv;zemsp13;zemsp14;zemsp;zeng;zensp;zeogon;zeopf;zepar;zeparsl;zeplus;zepsi;zepsilon;zepsiv;zeqcirc;zeqcolon;zeqsim;z eqslantgtr;z eqslantless;zequals;zequest;zequiv;zequivDD;z eqvparsl;zerDot;zerarr;zescr;zesdot;zesim;zeta;Zethzeth;Zeumlzeuml;zeuro;zexcl;zexist;z expectation;z exponentiale;zfallingdotseq;zfcy;zfemale;zffilig;zfflig;zffllig;zffr;zfilig;zfjlig;zflat;zfllig;zfltns;zfnof;zfopf;zforall;zfork;zforkv;z fpartint;Zfrac12zfrac12;zfrac13;Zfrac14zfrac14;zfrac15;zfrac16;zfrac18;zfrac23;zfrac25;Zfrac34zfrac34;zfrac35;zfrac38;zfrac45;zfrac56;zfrac58;zfrac78;zfrasl;zfrown;zfscr;zgE;zgEl;zgacute;zgamma;zgammad;zgap;zgbreve;zgcirc;zgcy;zgdot;zge;zgel;zgeq;zgeqq;z geqslant;zges;zgescc;zgesdot;zgesdoto;z gesdotol;zgesl;zgesles;zgfr;zgg;zggg;zgimel;zgjcy;zgl;zglE;zgla;zglj;zgnE;zgnap;z gnapprox;zgne;zgneq;zgneqq;zgnsim;zgopf;zgrave;zgscr;zgsim;zgsime;zgsiml;gtzgt;zgtcc;zgtcir;zgtdot;zgtlPar;zgtquest;z gtrapprox;zgtrarr;zgtrdot;z gtreqless;z gtreqqless;zgtrless;zgtrsim;z gvertneqq;zgvnE;zhArr;zhairsp;zhalf;zhamilt;zhardcy;zharr;zharrcir;zharrw;zhbar;zhcirc;zhearts;z heartsuit;zhellip;zhercon;zhfr;z hksearow;z hkswarow;zhoarr;zhomtht;zhookleftarrow;zhookrightarrow;zhopf;zhorbar;zhscr;zhslash;zhstrok;zhybull;zhyphen;Ziacuteziacute;zic;Zicirczicirc;zicy;ziecy;Ziexclziexcl;ziff;zifr;Zigravezigrave;zii;ziiiint;ziiint;ziinfin;ziiota;zijlig;zimacr;zimage;z imagline;z imagpart;zimath;zimof;zimped;zin;zincare;zinfin;z infintie;zinodot;zint;zintcal;z integers;z intercal;z intlarhk;zintprod;ziocy;ziogon;ziopf;ziota;ziprod;Ziquestziquest;ziscr;zisin;zisinE;zisindot;zisins;zisinsv;zisinv;zit;zitilde;ziukcy;Ziumlziuml;zjcirc;zjcy;zjfr;zjmath;zjopf;zjscr;zjsercy;zjukcy;zkappa;zkappav;zkcedil;zkcy;zkfr;zkgreen;zkhcy;zkjcy;zkopf;zkscr;zlAarr;zlArr;zlAtail;zlBarr;zlE;zlEg;zlHar;zlacute;z laemptyv;zlagran;zlambda;zlang;zlangd;zlangle;zlap;Zlaquozlaquo;zlarr;zlarrb;zlarrbfs;zlarrfs;zlarrhk;zlarrlp;zlarrpl;zlarrsim;zlarrtl;zlat;zlatail;zlate;zlates;zlbarr;zlbbrk;zlbrace;zlbrack;zlbrke;zlbrksld;zlbrkslu;zlcaron;zlcedil;zlceil;zlcub;zlcy;zldca;zldquo;zldquor;zldrdhar;z ldrushar;zldsh;zle;z leftarrow;zleftarrowtail;zleftharpoondown;zleftharpoonup;zleftleftarrows;zleftrightarrow;zleftrightarrows;zleftrightharpoons;zleftrightsquigarrow;zleftthreetimes;zleg;zleq;zleqq;z leqslant;zles;zlescc;zlesdot;zlesdoto;z lesdotor;zlesg;zlesges;z lessapprox;zlessdot;z lesseqgtr;z lesseqqgtr;zlessgtr;zlesssim;zlfisht;zlfloor;zlfr;zlg;zlgE;zlhard;zlharu;zlharul;zlhblk;zljcy;zll;zllarr;z llcorner;zllhard;zlltri;zlmidot;zlmoust;z lmoustache;zlnE;zlnap;z lnapprox;zlne;zlneq;zlneqq;zlnsim;zloang;zloarr;zlobrk;zlongleftarrow;zlongleftrightarrow;z longmapsto;zlongrightarrow;zlooparrowleft;zlooparrowright;zlopar;zlopf;zloplus;zlotimes;zlowast;zlowbar;zloz;zlozenge;zlozf;zlpar;zlparlt;zlrarr;z lrcorner;zlrhar;zlrhard;zlrm;zlrtri;zlsaquo;zlscr;zlsh;zlsim;zlsime;zlsimg;zlsqb;zlsquo;zlsquor;zlstrok;ltzlt;zltcc;zltcir;zltdot;zlthree;zltimes;zltlarr;zltquest;zltrPar;zltri;zltrie;zltrif;z lurdshar;zluruhar;z lvertneqq;zlvnE;zmDDot;Zmacrzmacr;zmale;zmalt;zmaltese;zmap;zmapsto;z mapstodown;z mapstoleft;z mapstoup;zmarker;zmcomma;zmcy;zmdash;zmeasuredangle;zmfr;zmho;microzmicro;zmid;zmidast;zmidcir;Zmiddotzmiddot;zminus;zminusb;zminusd;zminusdu;zmlcp;zmldr;zmnplus;zmodels;zmopf;zmp;zmscr;zmstpos;zmu;z multimap;zmumap;znGg;znGt;znGtv;z nLeftarrow;znLeftrightarrow;znLl;znLt;znLtv;z nRightarrow;znVDash;znVdash;znabla;znacute;znang;znap;znapE;znapid;znapos;znapprox;znatur;znatural;z naturals;Znbspznbsp;znbump;znbumpe;zncap;zncaron;zncedil;zncong;z ncongdot;zncup;zncy;zndash;zne;zneArr;znearhk;znearr;znearrow;znedot;znequiv;znesear;znesim;znexist;znexists;znfr;zngE;znge;zngeq;zngeqq;z ngeqslant;znges;zngsim;zngt;zngtr;znhArr;znharr;znhpar;zni;znis;znisd;zniv;znjcy;znlArr;znlE;znlarr;znldr;znle;z nleftarrow;znleftrightarrow;znleq;znleqq;z nleqslant;znles;znless;znlsim;znlt;znltri;znltrie;znmid;znopf;notznot;znotin;znotinE;z notindot;znotinva;znotinvb;znotinvc;znotni;znotniva;znotnivb;znotnivc;znpar;z nparallel;znparsl;znpart;znpolint;znpr;znprcue;znpre;znprec;znpreceq;znrArr;znrarr;znrarrc;znrarrw;z nrightarrow;znrtri;znrtrie;znsc;znsccue;znsce;znscr;z nshortmid;znshortparallel;znsim;znsime;znsimeq;znsmid;znspar;znsqsube;znsqsupe;znsub;znsubE;znsube;znsubset;z nsubseteq;z nsubseteqq;znsucc;znsucceq;znsup;znsupE;znsupe;znsupset;z nsupseteq;z nsupseteqq;zntgl;Zntildezntilde;zntlg;zntriangleleft;zntrianglelefteq;zntriangleright;zntrianglerighteq;znu;znum;znumero;znumsp;znvDash;znvHarr;znvap;znvdash;znvge;znvgt;znvinfin;znvlArr;znvle;znvlt;znvltrie;znvrArr;znvrtrie;znvsim;znwArr;znwarhk;znwarr;znwarrow;znwnear;zoS;Zoacutezoacute;zoast;zocir;Zocirczocirc;zocy;zodash;zodblac;zodiv;zodot;zodsold;zoelig;zofcir;zofr;zogon;Zogravezograve;zogt;zohbar;zohm;zoint;zolarr;zolcir;zolcross;zoline;zolt;zomacr;zomega;zomicron;zomid;zominus;zoopf;zopar;zoperp;zoplus;zor;zorarr;zord;zorder;zorderof;Zordfzordf;Zordmzordm;zorigof;zoror;zorslope;zorv;zoscr;Zoslashzoslash;zosol;Zotildezotilde;zotimes;z otimesas;Zoumlzouml;zovbar;zpar;Zparazpara;z parallel;zparsim;zparsl;zpart;zpcy;zpercnt;zperiod;zpermil;zperp;zpertenk;zpfr;zphi;zphiv;zphmmat;zphone;zpi;z pitchfork;zpiv;zplanck;zplanckh;zplankv;zplus;z plusacir;zplusb;zpluscir;zplusdo;zplusdu;zpluse;Zplusmnzplusmn;zplussim;zplustwo;zpm;z pointint;zpopf;Zpoundzpound;zpr;zprE;zprap;zprcue;zpre;zprec;z precapprox;z preccurlyeq;zpreceq;z precnapprox;z precneqq;z precnsim;zprecsim;zprime;zprimes;zprnE;zprnap;zprnsim;zprod;z profalar;z profline;z profsurf;zprop;zpropto;zprsim;zprurel;zpscr;zpsi;zpuncsp;zqfr;zqint;zqopf;zqprime;zqscr;z quaternions;zquatint;zquest;zquesteq;Zquotzquot;zrAarr;zrArr;zrAtail;zrBarr;zrHar;zrace;zracute;zradic;z raemptyv;zrang;zrangd;zrange;zrangle;Zraquozraquo;zrarr;zrarrap;zrarrb;zrarrbfs;zrarrc;zrarrfs;zrarrhk;zrarrlp;zrarrpl;zrarrsim;zrarrtl;zrarrw;zratail;zratio;z rationals;zrbarr;zrbbrk;zrbrace;zrbrack;zrbrke;zrbrksld;zrbrkslu;zrcaron;zrcedil;zrceil;zrcub;zrcy;zrdca;zrdldhar;zrdquo;zrdquor;zrdsh;zreal;zrealine;z realpart;zreals;zrect;Zregzreg;zrfisht;zrfloor;zrfr;zrhard;zrharu;zrharul;zrho;zrhov;z rightarrow;zrightarrowtail;zrightharpoondown;zrightharpoonup;zrightleftarrows;zrightleftharpoons;zrightrightarrows;zrightsquigarrow;zrightthreetimes;zring;z risingdotseq;zrlarr;zrlhar;zrlm;zrmoust;z rmoustache;zrnmid;zroang;zroarr;zrobrk;zropar;zropf;zroplus;zrotimes;zrpar;zrpargt;z rppolint;zrrarr;zrsaquo;zrscr;zrsh;zrsqb;zrsquo;zrsquor;zrthree;zrtimes;zrtri;zrtrie;zrtrif;z rtriltri;zruluhar;zrx;zsacute;zsbquo;zsc;zscE;zscap;zscaron;zsccue;zsce;zscedil;zscirc;zscnE;zscnap;zscnsim;z scpolint;zscsim;zscy;zsdot;zsdotb;zsdote;zseArr;zsearhk;zsearr;zsearrow;Zsectzsect;zsemi;zseswar;z setminus;zsetmn;zsext;zsfr;zsfrown;zsharp;zshchcy;zshcy;z shortmid;zshortparallel;Zshyzshy;zsigma;zsigmaf;zsigmav;zsim;zsimdot;zsime;zsimeq;zsimg;zsimgE;zsiml;zsimlE;zsimne;zsimplus;zsimrarr;zslarr;zsmallsetminus;zsmashp;z smeparsl;zsmid;zsmile;zsmt;zsmte;zsmtes;zsoftcy;zsol;zsolb;zsolbar;zsopf;zspades;z spadesuit;zspar;zsqcap;zsqcaps;zsqcup;zsqcups;zsqsub;zsqsube;z sqsubset;z sqsubseteq;zsqsup;zsqsupe;z sqsupset;z sqsupseteq;zsqu;zsquare;zsquarf;zsquf;zsrarr;zsscr;zssetmn;zssmile;zsstarf;zstar;zstarf;zstraightepsilon;z straightphi;zstrns;zsub;zsubE;zsubdot;zsube;zsubedot;zsubmult;zsubnE;zsubne;zsubplus;zsubrarr;zsubset;z subseteq;z subseteqq;z subsetneq;z subsetneqq;zsubsim;zsubsub;zsubsup;zsucc;z succapprox;z succcurlyeq;zsucceq;z succnapprox;z succneqq;z succnsim;zsuccsim;zsum;zsung;Zsup1zsup1;Zsup2zsup2;Zsup3zsup3;zsup;zsupE;zsupdot;zsupdsub;zsupe;zsupedot;zsuphsol;zsuphsub;zsuplarr;zsupmult;zsupnE;zsupne;zsupplus;zsupset;z supseteq;z supseteqq;z supsetneq;z supsetneqq;zsupsim;zsupsub;zsupsup;zswArr;zswarhk;zswarr;zswarrow;zswnwar;Zszligzszlig;ztarget;ztau;ztbrk;ztcaron;ztcedil;ztcy;ztdot;ztelrec;ztfr;zthere4;z therefore;ztheta;z thetasym;zthetav;z thickapprox;z thicksim;zthinsp;zthkap;zthksim;Zthornzthorn;ztilde;timesztimes;ztimesb;z timesbar;ztimesd;ztint;ztoea;ztop;ztopbot;ztopcir;ztopf;ztopfork;ztosa;ztprime;ztrade;z triangle;z triangledown;z triangleleft;ztrianglelefteq;z triangleq;ztriangleright;ztrianglerighteq;ztridot;ztrie;z triminus;ztriplus;ztrisb;ztritime;z trpezium;ztscr;ztscy;ztshcy;ztstrok;ztwixt;ztwoheadleftarrow;ztwoheadrightarrow;zuArr;zuHar;Zuacutezuacute;zuarr;zubrcy;zubreve;Zucirczucirc;zucy;zudarr;zudblac;zudhar;zufisht;zufr;Zugravezugrave;zuharl;zuharr;zuhblk;zulcorn;z ulcorner;zulcrop;zultri;zumacr;Zumlzuml;zuogon;zuopf;zuparrow;z updownarrow;zupharpoonleft;zupharpoonright;zuplus;zupsi;zupsih;zupsilon;z upuparrows;zurcorn;z urcorner;zurcrop;zuring;zurtri;zuscr;zutdot;zutilde;zutri;zutrif;zuuarr;Zuumlzuuml;zuwangle;zvArr;zvBar;zvBarv;zvDash;zvangrt;z varepsilon;z varkappa;z varnothing;zvarphi;zvarpi;z varpropto;zvarr;zvarrho;z varsigma;z varsubsetneq;zvarsubsetneqq;z varsupsetneq;zvarsupsetneqq;z vartheta;zvartriangleleft;zvartriangleright;zvcy;zvdash;zvee;zveebar;zveeeq;zvellip;zverbar;zvert;zvfr;zvltri;zvnsub;zvnsup;zvopf;zvprop;zvrtri;zvscr;zvsubnE;zvsubne;zvsupnE;zvsupne;zvzigzag;zwcirc;zwedbar;zwedge;zwedgeq;zweierp;zwfr;zwopf;zwp;zwr;zwreath;zwscr;zxcap;zxcirc;zxcup;zxdtri;zxfr;zxhArr;zxharr;zxi;zxlArr;zxlarr;zxmap;zxnis;zxodot;zxopf;zxoplus;zxotime;zxrArr;zxrarr;zxscr;zxsqcup;zxuplus;zxutri;zxvee;zxwedge;Zyacutezyacute;zyacy;zycirc;zycy;Zyenzyen;zyfr;zyicy;zyopf;zyscr;zyucy;Zyumlzyuml;zzacute;zzcaron;zzcy;zzdot;zzeetrf;zzeta;zzfr;zzhcy;zzigrarr;zzopf;zzscr;zzwj;zzwnj;u�)"r )ZDoctypeZ CharactersZSpaceCharactersStartTagEndTagEmptyTagCommentZ ParseErrorrrrcCsg|]\}}||fqSr2r2)r3kvr2r2r6r7x sZmathc@s eZdZdS)DataLossWarningN)__name__ __module__ __qualname__r2r2r2r6r| src@s eZdZdS)ReparseExceptionN)rrrr2r2r2r6r sr)rr r!r"r#r$) rGrHrIrJrKrLrMrNrOrPrQrRrSrHrTrHrHrUrVrWrXrYrZr[r\r]r^r_r`rHrarb)0Z __future__rrrstringZEOFEZ namespaces frozensetZscopingElementsZformattingElementsZspecialElementsZhtmlIntegrationPointElementsZ"mathmlTextIntegrationPointElementsZadjustSVGAttributesZadjustMathMLAttributesZadjustForeignAttributesdictitemsZunadjustForeignAttributesZspaceCharactersZtableInsertModeElementsZascii_lowercaseZasciiLowercaseZascii_uppercaseZasciiUppercaseZ ascii_lettersZ asciiLettersZdigitsZ hexdigitsZ hexDigitsZasciiUpper2LowerZheadingElementsZ voidElementsZ cdataElementsZrcdataElementsZbooleanAttributesZentitiesWindows1252Z xmlEntitiesZentitiesZreplacementCharactersZ tokenTypesZ tagTokenTypesprefixes UserWarningr Exceptionrr2r2r2r6s<                                                                                                                                       PKe%1]UU%__pycache__/_tokenizer.cpython-36.pycnu[3 B;W+@sddlmZmZmZddlmZddlmZddl m Z ddl m Z ddl m Z m Z ddl mZmZmZdd l mZmZdd l mZdd lmZdd lmZee ZGd ddeZdS))absolute_importdivisionunicode_literals)unichr)deque)spaceCharacters)entities) asciiLettersasciiUpper2Lower)digits hexDigitsEOF) tokenTypes tagTokenTypes)replacementCharacters)HTMLInputStream)TriecsdeZdZdZdfdd ZddZddZdd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zdd?Z!d@dAZ"dBdCZ#dDdEZ$dFdGZ%dHdIZ&dJdKZ'dLdMZ(dNdOZ)dPdQZ*dRdSZ+dTdUZ,dVdWZ-dXdYZ.dZd[Z/d\d]Z0d^d_Z1d`daZ2dbdcZ3dddeZ4dfdgZ5dhdiZ6djdkZ7dldmZ8dndoZ9dpdqZ:drdsZ;dtduZdzd{Z?d|d}Z@d~dZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLZMS) HTMLTokenizera  This class takes care of tokenizing HTML. * self.currentToken Holds the token that is currently being processed. * self.state Holds a reference to the method to be invoked... XXX * self.stream Points to HTMLInputStream object. Nc sFt|f||_||_d|_g|_|j|_d|_d|_t t |j dS)NF) rstreamparserZ escapeFlagZ lastFourChars dataStatestateescape currentTokensuperr__init__)selfrrkwargs) __class__ /usr/lib/python3.6/_tokenizer.pyr"szHTMLTokenizer.__init__ccs\tg|_xL|jrVx&|jjr:td|jjjddVqWx|jrR|jjVq>Wq WdS)z This is where the magic happens. We do our usually processing through the states and when we have a token to return we yield the token which pauses processing until the next token is requested. ParseErrorr)typedataN)r tokenQueuerrerrorsrpoppopleft)rr r r!__iter__1s    zHTMLTokenizer.__iter__c %Cs(t}d}|rt}d}g}|jj}x(||krJ|tk rJ|j||jj}q$Wtdj||}|tkrt|}|j jt ddd|idnld|kod kns|d krd }|j jt ddd|idn(d |kod knsd|kodknsd|kodknsd|ko4dkns|t ddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d g#kr|j jt ddd|idy t |}Wn>t k r|d6}t d|d?Bt d7|d8@B}YnX|d9kr$|j jt dd:d;|jj||S)r"z'expected-tag-name-but-got-right-bracket)r#r$rJz<>?z'expected-tag-name-but-got-question-markzexpected-tag-namerDT)rr6markupDeclarationOpenStatercloseTagOpenStater rr tagNameStater%r7rr=bogusCommentState)rr$r r r!r]is6               zHTMLTokenizer.tagOpenStatecCs|jj}|tkr0td|gdd|_|j|_n|dkrX|jjtddd|j |_nn|t kr|jjtddd|jjtd d d|j |_n0|jjtdd d |id |jj ||j |_dS)NrVF)r#rUr$rWrjr"z*expected-closing-tag-but-got-right-bracket)r#r$z expected-closing-tag-but-got-eofrJz|tkr|jjtdd d|j |_n|jjtd|dd S) Nr|rJ)r#r$rDr[r"zinvalid-codepointu�zeof-in-script-in-scriptT) rr6r%r7r scriptDataDoubleEscapedDashStater(scriptDataDoubleEscapedLessThanSignStaterr)rr$r r r!rs$          z*HTMLTokenizer.scriptDataDoubleEscapedStatecCs|jj}|dkr2|jjtddd|j|_n|dkrZ|jjtddd|j|_n|dkr|jjtddd|jjtddd|j|_nF|t kr|jjtdd d|j |_n|jjtd|d|j|_d S) Nr|rJ)r#r$rDr[r"zinvalid-codepointu�zeof-in-script-in-scriptT) rr6r%r7r$scriptDataDoubleEscapedDashDashStaterrrrr)rr$r r r!rs(           z.HTMLTokenizer.scriptDataDoubleEscapedDashStatecCs|jj}|dkr*|jjtdddn|dkrR|jjtddd|j|_n|dkrz|jjtddd|j|_n|dkr|jjtddd|jjtdd d|j|_nF|t kr|jjtdd d|j |_n|jjtd|d|j|_d S) Nr|rJ)r#r$rDrjr[r"zinvalid-codepointu�zeof-in-script-in-scriptT) rr6r%r7rrrrfrrr)rr$r r r!rs,           z2HTMLTokenizer.scriptDataDoubleEscapedDashDashStatecCsP|jj}|dkr8|jjtdddd|_|j|_n|jj||j |_dS)NrirJ)r#r$r,T) rr6r%r7rrrscriptDataDoubleEscapeEndStaterr=r)rr$r r r!r0s   z6HTMLTokenizer.scriptDataDoubleEscapedLessThanSignStatecCs|jj}|ttdBkrR|jjtd|d|jjdkrH|j |_ q|j |_ nB|t kr|jjtd|d|j|7_n|jj ||j |_ dS)NrirjrJ)r#r$rT)rirj)rr6rr:r%r7rrrrurrrr r=)rr$r r r!r;s    z,HTMLTokenizer.scriptDataDoubleEscapeEndStatecCs0|jj}|tkr$|jjtdn|tkrJ|jdj|dg|j|_n|dkr\|j n|dkrn|j |_n|dkr|j jt d d d |jdj|dg|j|_n|d kr|j jt d dd |jdjddg|j|_nF|t kr|j jt d dd |j|_n|jdj|dg|j|_dS)NTr$r,rjri'"rHrDr"z#invalid-character-in-attribute-name)r#r$r[zinvalid-codepointu�z#expected-attribute-name-but-got-eof)rrrHrD)rr6rr^r rr7attributeNameStaterrZrqr%rrr)rr$r r r!rpKs6              z&HTMLTokenizer.beforeAttributeNameStatecCs|jj}d}d}|dkr&|j|_n0|tkr^|jddd||jjtd7<d}n|dkrld}n|tkr~|j|_n|dkr|j |_n|d kr|j j t d d d |jdddd 7<d}n|dkr|j j t d dd |jddd|7<d}nH|t kr8|j j t d dd |j|_n|jddd|7<d}|r|jdddjt|jddd<xP|jdddD]:\}}|jddd|kr|j j t d dd PqW|r|jdS)NTFrHr$rrrjrir[r"zinvalid-codepoint)r#r$u�rrrDz#invalid-character-in-attribute-namezeof-in-attribute-namezduplicate-attributerKrK)rrrDrKrKrKrKrKrK)rr6beforeAttributeValueStaterr rr^rafterAttributeNameStaterqr%r7rrrrXr rZ)rr$ZleavingThisStateZ emitTokenrU_r r r!risR             &  z HTMLTokenizer.attributeNameStatecCsF|jj}|tkr$|jjtdn|dkr8|j|_n |dkrJ|jn|tkrp|jdj |dg|j |_n|dkr|j |_n|dkr|j j t dd d |jdj d dg|j |_n|dkr|j j t ddd |jdj |dg|j |_nF|tkr&|j j t ddd |j|_n|jdj |dg|j |_dS)NTrHrjr$r,rir[r"zinvalid-codepoint)r#r$u�rrrDz&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)rrrD)rr6rr^rrrZr rr7rrqr%rrr)rr$r r r!rs:                z%HTMLTokenizer.afterAttributeNameStatecCsj|jj}|tkr$|jjtdnB|dkr8|j|_n.|dkrX|j|_|jj|n|dkrl|j|_n|dkr|j j t ddd|j n|d kr|j j t dd d|j d dd d 7<|j|_n|dkr|j j t ddd|j d dd |7<|j|_nL|tkrD|j j t ddd|j|_n"|j d dd |7<|j|_dS)NTrrCrrjr"z.expected-attribute-value-but-got-right-bracket)r#r$r[zinvalid-codepointr$ru�rHrD`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eofrK)rHrDrrKrK)rr6rr^attributeValueDoubleQuotedStaterattributeValueUnQuotedStater=attributeValueSingleQuotedStater%r7rrZrrr)rr$r r r!rs>                 z'HTMLTokenizer.beforeAttributeValueStatecCs|jj}|dkr|j|_n|dkr0|jdn|dkrj|jjtddd|jdd dd 7<nN|t kr|jjtdd d|j |_n&|jdd d||jj d7<d S)NrrCr[r"zinvalid-codepoint)r#r$r$ru�z#eof-in-attribute-value-double-quoteTrKrK)rrCr[) rr6afterAttributeValueStaterrTr%r7rrrrr^)rr$r r r!rs         z-HTMLTokenizer.attributeValueDoubleQuotedStatecCs|jj}|dkr|j|_n|dkr0|jdn|dkrj|jjtddd|jdd dd 7<nN|t kr|jjtdd d|j |_n&|jdd d||jj d7<d S)NrrCr[r"zinvalid-codepoint)r#r$r$ru�z#eof-in-attribute-value-single-quoteTrKrK)rrCr[) rr6rrrTr%r7rrrrr^)rr$r r r!rs         z-HTMLTokenizer.attributeValueSingleQuotedStatecCs|jj}|tkr|j|_n|dkr2|jdn|dkrD|jn|dkr~|jjt dd d |j d dd |7<n|d kr|jjt ddd |j d dd d7<nV|t kr|jjt ddd |j |_n.|j d dd ||jj tdtB7<dS)NrCrjrrrHrDrr"z0unexpected-character-in-unquoted-attribute-value)r#r$r$rr[zinvalid-codepointu�z eof-in-attribute-value-no-quotesT)rrrHrDrrKrKrK)rCrjrrrHrDrr[)rr6rrprrTrZr%r7rrrrr^r:)rr$r r r!rs,           z)HTMLTokenizer.attributeValueUnQuotedStatecCs|jj}|tkr|j|_n|dkr.|jnp|dkr@|j|_n^|tkrt|jj t ddd|jj ||j |_n*|jj t ddd|jj ||j|_dS)Nrjrir"z$unexpected-EOF-after-attribute-value)r#r$z*unexpected-character-after-attribute-valueT) rr6rrprrZrqrr%r7rr=r)rr$r r r!r s"           z&HTMLTokenizer.afterAttributeValueStatecCs|jj}|dkr&d|jd<|jn^|tkrZ|jjtddd|jj||j |_ n*|jjtddd|jj||j |_ dS)NrjTrWr"z#unexpected-EOF-after-solidus-in-tag)r#r$z)unexpected-character-after-solidus-in-tag) rr6rrZrr%r7rr=rrrp)rr$r r r!rq4s          z&HTMLTokenizer.selfClosingStartTagStatecCsD|jjd}|jdd}|jjtd|d|jj|j|_dS)Nrjr[u�Comment)r#r$T) rr^replacer%r7rr6rr)rr$r r r!roFs   zHTMLTokenizer.bogusCommentStatecCs|jjg}|ddkrT|j|jj|ddkrPtddd|_|j|_dSn|ddkrd}x.d&D]&}|j|jj|d'|krjd}PqjW|rtdddddd|_|j|_dSn|d(dkrH|jdk rH|jj j rH|jj j d)j |jj j krHd}x2d*D]*}|j|jj|d+|krd}PqW|rH|j |_dS|jjtdddx|rz|jj|jq`W|j|_dS),Nrr|rr,)r#r$TdDoOr@CtTyYpPeEFZDoctype)r#rUpublicIdsystemIdcorrect[Ar"zexpected-dashes-or-doctyperKrKrK)rrrrr@rrrrrrrrr)rrrrrrrKrKrK)rrrrrrrK)rr6r7rrcommentStartStater doctypeStaterZtreeZ openElements namespaceZdefaultNamespacecdataSectionStater%r=r'ro)rr?matchedexpectedr r r!rlUsR           z(HTMLTokenizer.markupDeclarationOpenStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd d|jj|j|j|_nP|t kr|jjtdd d|jj|j|j|_n|jd|7<|j |_d S) Nr|r[r"zinvalid-codepoint)r#r$r$u�rjzincorrect-commentzeof-in-commentT) rr6commentStartDashStaterr%r7rrrr commentState)rr$r r r!rs(          zHTMLTokenizer.commentStartStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd d|jj|j|j|_nT|t kr|jjtdd d|jj|j|j|_n|jdd|7<|j |_d S) Nr|r[r"zinvalid-codepoint)r#r$r$u-�rjzincorrect-commentzeof-in-commentT) rr6commentEndStaterr%r7rrrrr)rr$r r r!rs(          z#HTMLTokenizer.commentStartDashStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<nT|tkr|jjtddd|jj|j|j |_n|jd||jj d 7<d S) Nr|r[r"zinvalid-codepoint)r#r$r$u�zeof-in-commentT)r|r[) rr6commentEndDashStaterr%r7rrrrr^)rr$r r r!rs        zHTMLTokenizer.commentStatecCs|jj}|dkr|j|_n|dkrV|jjtddd|jdd7<|j|_nT|t kr|jjtddd|jj|j|j |_n|jdd|7<|j|_d S) Nr|r[r"zinvalid-codepoint)r#r$r$u-�zeof-in-comment-end-dashT) rr6rrr%r7rrrrr)rr$r r r!rs         z!HTMLTokenizer.commentEndDashStatecCs,|jj}|dkr*|jj|j|j|_n|dkrd|jjtddd|jdd7<|j|_n|dkr|jjtdd d|j |_n|d kr|jjtdd d|jd|7<nj|t kr|jjtdd d|jj|j|j|_n4|jjtdd d|jdd|7<|j|_dS)Nrjr[r"zinvalid-codepoint)r#r$r$u--�rhz,unexpected-bang-after-double-dash-in-commentr|z,unexpected-dash-after-double-dash-in-commentzeof-in-comment-double-dashzunexpected-char-in-commentz--T) rr6r%r7rrrrrcommentEndBangStater)rr$r r r!rs6               zHTMLTokenizer.commentEndStatecCs|jj}|dkr*|jj|j|j|_n|dkrN|jdd7<|j|_n|dkr|jjtddd|jdd 7<|j |_nT|t kr|jjtdd d|jj|j|j|_n|jdd|7<|j |_d S) Nrjr|r$z--!r[r"zinvalid-codepoint)r#r$u--!�zeof-in-comment-end-bang-stateT) rr6r%r7rrrrrrr)rr$r r r!rs(         z!HTMLTokenizer.commentEndBangStatecCs|jj}|tkr|j|_nj|tkr\|jjtdddd|j d<|jj|j |j |_n*|jjtddd|jj ||j|_dS)Nr"z!expected-doctype-name-but-got-eof)r#r$Frzneed-space-after-doctypeT) rr6rbeforeDoctypeNameStaterrr%r7rrrr=)rr$r r r!r s         zHTMLTokenizer.doctypeStatecCs|jj}|tkrn|dkrT|jjtdddd|jd<|jj|j|j|_n|dkr|jjtdddd |jd <|j |_nR|t kr|jjtdd dd|jd<|jj|j|j|_n||jd <|j |_d S) Nrjr"z+expected-doctype-name-but-got-right-bracket)r#r$Frr[zinvalid-codepointu�rUz!expected-doctype-name-but-got-eofT) rr6rr%r7rrrrdoctypeNameStater)rr$r r r!rs.              z$HTMLTokenizer.beforeDoctypeNameStatecCs|jj}|tkr2|jdjt|jd<|j|_n|dkrh|jdjt|jd<|jj |j|j |_n|dkr|jj t ddd|jdd7<|j |_nh|t kr|jj t dddd |jd <|jdjt|jd<|jj |j|j |_n|jd|7<d S) NrUrjr[r"zinvalid-codepoint)r#r$u�zeof-in-doctype-nameFrT)rr6rrrXr afterDoctypeNameStaterr%r7rrrr)rr$r r r!r6s,          zHTMLTokenizer.doctypeNameStatecCsR|jj}|tkrn8|dkr8|jj|j|j|_n|tkrd|jd<|jj ||jjt ddd|jj|j|j|_n|d!krd }x$d'D]}|jj}||krd}PqW|r|j |_d SnJ|d(krd }x(d.D] }|jj}||krd}PqW|r|j |_d S|jj ||jjt ddd|id d|jd<|j |_d S)/NrjFrr"zeof-in-doctype)r#r$rrTuUbBlLiIr@rsSrrrrrrmMz*expected-space-or-right-bracket-in-doctyper$)r#r$r.)rrrrrrrrrrr@r)rrrrr)rrrrrrrrrrrr)rrrrr)rr6rr%r7rrrrr=rafterDoctypePublicKeywordStateafterDoctypeSystemKeywordStatebogusDoctypeState)rr$rrr r r!rOsT              z#HTMLTokenizer.afterDoctypeNameStatecCs|jj}|tkr|j|_n|d krP|jjtddd|jj||j|_nT|t kr|jjtdddd|j d<|jj|j |j |_n|jj||j|_d S) Nrrr"zunexpected-char-in-doctype)r#r$zeof-in-doctypeFrT)rr) rr6r"beforeDoctypePublicIdentifierStaterr%r7rr=rrr)rr$r r r!rs"           z,HTMLTokenizer.afterDoctypePublicKeywordStatecCs|jj}|tkrn|dkr0d|jd<|j|_n|dkrLd|jd<|j|_n|dkr|jjt dddd |jd <|jj|j|j |_nh|t kr|jjt dd dd |jd <|jj|j|j |_n(|jjt dd dd |jd <|j |_d S)Nrr,rrrjr"zunexpected-end-of-doctype)r#r$Frzeof-in-doctypezunexpected-char-in-doctypeT) rr6rr(doctypePublicIdentifierDoubleQuotedStater(doctypePublicIdentifierSingleQuotedStater%r7rrrr)rr$r r r!rs4                z0HTMLTokenizer.beforeDoctypePublicIdentifierStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd dd |jd <|jj|j|j|_nR|t kr|jjtdd dd |jd <|jj|j|j|_n|jd|7<d S)Nrr[r"zinvalid-codepoint)r#r$ru�rjzunexpected-end-of-doctypeFrzeof-in-doctypeT) rr6!afterDoctypePublicIdentifierStaterr%r7rrrr)rr$r r r!rs*            z6HTMLTokenizer.doctypePublicIdentifierDoubleQuotedStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd dd |jd <|jj|j|j|_nR|t kr|jjtdd dd |jd <|jj|j|j|_n|jd|7<d S)Nrr[r"zinvalid-codepoint)r#r$ru�rjzunexpected-end-of-doctypeFrzeof-in-doctypeT) rr6rrr%r7rrrr)rr$r r r!rs*            z6HTMLTokenizer.doctypePublicIdentifierSingleQuotedStatecCs |jj}|tkr|j|_n|dkr<|jj|j|j|_n|dkrn|jjt dddd|jd<|j |_n|dkr|jjt dddd|jd<|j |_nh|t kr|jjt dd dd |jd <|jj|j|j|_n(|jjt dddd |jd <|j |_d S) Nrjrr"zunexpected-char-in-doctype)r#r$r,rrzeof-in-doctypeFrT)rr6r-betweenDoctypePublicAndSystemIdentifiersStaterr%r7rrr(doctypeSystemIdentifierDoubleQuotedState(doctypeSystemIdentifierSingleQuotedStaterr)rr$r r r!rs6                  z/HTMLTokenizer.afterDoctypePublicIdentifierStatecCs|jj}|tkrn|dkr4|jj|j|j|_n|dkrPd|jd<|j|_n|dkrld|jd<|j |_nh|t kr|jjt dddd |jd <|jj|j|j|_n(|jjt dd dd |jd <|j |_d S) Nrjrr,rrr"zeof-in-doctype)r#r$Frzunexpected-char-in-doctypeT) rr6rr%r7rrrrrrrr)rr$r r r!rs.             z;HTMLTokenizer.betweenDoctypePublicAndSystemIdentifiersStatecCs|jj}|tkr|j|_n|d krP|jjtddd|jj||j|_nT|t kr|jjtdddd|j d<|jj|j |j |_n|jj||j|_d S) Nrrr"zunexpected-char-in-doctype)r#r$zeof-in-doctypeFrT)rr) rr6r"beforeDoctypeSystemIdentifierStaterr%r7rr=rrr)rr$r r r!rs"           z,HTMLTokenizer.afterDoctypeSystemKeywordStatecCs|jj}|tkrn|dkr0d|jd<|j|_n|dkrLd|jd<|j|_n|dkr|jjt dddd |jd <|jj|j|j |_nh|t kr|jjt dd dd |jd <|jj|j|j |_n(|jjt dddd |jd <|j |_d S) Nrr,rrrjr"zunexpected-char-in-doctype)r#r$Frzeof-in-doctypeT) rr6rrrrrr%r7rrrr)rr$r r r!r/s4                z0HTMLTokenizer.beforeDoctypeSystemIdentifierStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd dd |jd <|jj|j|j|_nR|t kr|jjtdd dd |jd <|jj|j|j|_n|jd|7<d S)Nrr[r"zinvalid-codepoint)r#r$ru�rjzunexpected-end-of-doctypeFrzeof-in-doctypeT) rr6!afterDoctypeSystemIdentifierStaterr%r7rrrr)rr$r r r!rLs*            z6HTMLTokenizer.doctypeSystemIdentifierDoubleQuotedStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd dd |jd <|jj|j|j|_nR|t kr|jjtdd dd |jd <|jj|j|j|_n|jd|7<d S)Nrr[r"zinvalid-codepoint)r#r$ru�rjzunexpected-end-of-doctypeFrzeof-in-doctypeT) rr6rrr%r7rrrr)rr$r r r!rds*            z6HTMLTokenizer.doctypeSystemIdentifierSingleQuotedStatecCs|jj}|tkrn~|dkr4|jj|j|j|_n^|tkrt|jjt dddd|jd<|jj|j|j|_n|jjt ddd|j |_dS) Nrjr"zeof-in-doctype)r#r$Frzunexpected-char-in-doctypeT) rr6rr%r7rrrrrr)rr$r r r!r|s         z/HTMLTokenizer.afterDoctypeSystemIdentifierStatecCsZ|jj}|dkr*|jj|j|j|_n,|tkrV|jj||jj|j|j|_ndS)NrjT) rr6r%r7rrrrr=)rr$r r r!rs    zHTMLTokenizer.bogusDoctypeStatecCsg}x|j|jjd|j|jjd|jj}|tkr@Pq|dksLt|ddddkrx|ddd|d<Pq|j|qWdj|}|jd}|dkrx&t|D]}|j jt d d d qW|j dd }|r|j jt d |d |j |_ dS)N]rjrz]]r,r[rr"zinvalid-codepoint)r#r$u�rJTrKrKrrK)r7rr^r6rAssertionErrorr9countranger%rrrr)rr$r6Z nullCountrr r r!rs0        zHTMLTokenizer.cdataSectionState)N)NF)N__name__ __module__ __qualname____doc__rr)rBrSrTrZrr\rbr`rdrfrgr]rmrnrarsrtrcrwrxreryr{rzr}rrr~rrrrrrrrrrprrrrrrrrqrorlrrrrrrrrrrrrrrrrrrrrrrr __classcell__r r )rr!rs H P#         6 "-3rN)Z __future__rrrZsixrr; collectionsrZ constantsrr r r r r rrrrZ _inputstreamrZ_trierrLobjectrr r r r!s       PKe%1]!77+__pycache__/_tokenizer.cpython-36.opt-1.pycnu[3 B;W+@sddlmZmZmZddlmZddlmZddl m Z ddl m Z ddl m Z m Z ddl mZmZmZdd l mZmZdd l mZdd lmZdd lmZee ZGd ddeZdS))absolute_importdivisionunicode_literals)unichr)deque)spaceCharacters)entities) asciiLettersasciiUpper2Lower)digits hexDigitsEOF) tokenTypes tagTokenTypes)replacementCharacters)HTMLInputStream)TriecsdeZdZdZdfdd ZddZddZdd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zdd?Z!d@dAZ"dBdCZ#dDdEZ$dFdGZ%dHdIZ&dJdKZ'dLdMZ(dNdOZ)dPdQZ*dRdSZ+dTdUZ,dVdWZ-dXdYZ.dZd[Z/d\d]Z0d^d_Z1d`daZ2dbdcZ3dddeZ4dfdgZ5dhdiZ6djdkZ7dldmZ8dndoZ9dpdqZ:drdsZ;dtduZdzd{Z?d|d}Z@d~dZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLZMS) HTMLTokenizera  This class takes care of tokenizing HTML. * self.currentToken Holds the token that is currently being processed. * self.state Holds a reference to the method to be invoked... XXX * self.stream Points to HTMLInputStream object. Nc sFt|f||_||_d|_g|_|j|_d|_d|_t t |j dS)NF) rstreamparserZ escapeFlagZ lastFourChars dataStatestateescape currentTokensuperr__init__)selfrrkwargs) __class__ /usr/lib/python3.6/_tokenizer.pyr"szHTMLTokenizer.__init__ccs\tg|_xL|jrVx&|jjr:td|jjjddVqWx|jrR|jjVq>Wq WdS)z This is where the magic happens. We do our usually processing through the states and when we have a token to return we yield the token which pauses processing until the next token is requested. ParseErrorr)typedataN)r tokenQueuerrerrorsrpoppopleft)rr r r!__iter__1s    zHTMLTokenizer.__iter__c %Cs(t}d}|rt}d}g}|jj}x(||krJ|tk rJ|j||jj}q$Wtdj||}|tkrt|}|j jt ddd|idnld|kod kns|d krd }|j jt ddd|idn(d |kod knsd|kodknsd|kodknsd|ko4dkns|t ddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d g#kr|j jt ddd|idy t |}Wn>t k r|d6}t d|d?Bt d7|d8@B}YnX|d9kr$|j jt dd:d;|jj||S)r"z'expected-tag-name-but-got-right-bracket)r#r$rJz<>?z'expected-tag-name-but-got-question-markzexpected-tag-namerDT)rr6markupDeclarationOpenStatercloseTagOpenStater rr tagNameStater%r7rr=bogusCommentState)rr$r r r!r]is6               zHTMLTokenizer.tagOpenStatecCs|jj}|tkr0td|gdd|_|j|_n|dkrX|jjtddd|j |_nn|t kr|jjtddd|jjtd d d|j |_n0|jjtdd d |id |jj ||j |_dS)NrVF)r#rUr$rWrjr"z*expected-closing-tag-but-got-right-bracket)r#r$z expected-closing-tag-but-got-eofrJz|tkr|jjtdd d|j |_n|jjtd|dd S) Nr|rJ)r#r$rDr[r"zinvalid-codepointu�zeof-in-script-in-scriptT) rr6r%r7r scriptDataDoubleEscapedDashStater(scriptDataDoubleEscapedLessThanSignStaterr)rr$r r r!rs$          z*HTMLTokenizer.scriptDataDoubleEscapedStatecCs|jj}|dkr2|jjtddd|j|_n|dkrZ|jjtddd|j|_n|dkr|jjtddd|jjtddd|j|_nF|t kr|jjtdd d|j |_n|jjtd|d|j|_d S) Nr|rJ)r#r$rDr[r"zinvalid-codepointu�zeof-in-script-in-scriptT) rr6r%r7r$scriptDataDoubleEscapedDashDashStaterrrrr)rr$r r r!rs(           z.HTMLTokenizer.scriptDataDoubleEscapedDashStatecCs|jj}|dkr*|jjtdddn|dkrR|jjtddd|j|_n|dkrz|jjtddd|j|_n|dkr|jjtddd|jjtdd d|j|_nF|t kr|jjtdd d|j |_n|jjtd|d|j|_d S) Nr|rJ)r#r$rDrjr[r"zinvalid-codepointu�zeof-in-script-in-scriptT) rr6r%r7rrrrfrrr)rr$r r r!rs,           z2HTMLTokenizer.scriptDataDoubleEscapedDashDashStatecCsP|jj}|dkr8|jjtdddd|_|j|_n|jj||j |_dS)NrirJ)r#r$r,T) rr6r%r7rrrscriptDataDoubleEscapeEndStaterr=r)rr$r r r!r0s   z6HTMLTokenizer.scriptDataDoubleEscapedLessThanSignStatecCs|jj}|ttdBkrR|jjtd|d|jjdkrH|j |_ q|j |_ nB|t kr|jjtd|d|j|7_n|jj ||j |_ dS)NrirjrJ)r#r$rT)rirj)rr6rr:r%r7rrrrurrrr r=)rr$r r r!r;s    z,HTMLTokenizer.scriptDataDoubleEscapeEndStatecCs0|jj}|tkr$|jjtdn|tkrJ|jdj|dg|j|_n|dkr\|j n|dkrn|j |_n|dkr|j jt d d d |jdj|dg|j|_n|d kr|j jt d dd |jdjddg|j|_nF|t kr|j jt d dd |j|_n|jdj|dg|j|_dS)NTr$r,rjri'"rHrDr"z#invalid-character-in-attribute-name)r#r$r[zinvalid-codepointu�z#expected-attribute-name-but-got-eof)rrrHrD)rr6rr^r rr7attributeNameStaterrZrqr%rrr)rr$r r r!rpKs6              z&HTMLTokenizer.beforeAttributeNameStatecCs|jj}d}d}|dkr&|j|_n0|tkr^|jddd||jjtd7<d}n|dkrld}n|tkr~|j|_n|dkr|j |_n|d kr|j j t d d d |jdddd 7<d}n|dkr|j j t d dd |jddd|7<d}nH|t kr8|j j t d dd |j|_n|jddd|7<d}|r|jdddjt|jddd<xP|jdddD]:\}}|jddd|kr|j j t d dd PqW|r|jdS)NTFrHr$rrrjrir[r"zinvalid-codepoint)r#r$u�rrrDz#invalid-character-in-attribute-namezeof-in-attribute-namezduplicate-attributerKrK)rrrDrKrKrKrKrKrK)rr6beforeAttributeValueStaterr rr^rafterAttributeNameStaterqr%r7rrrrXr rZ)rr$ZleavingThisStateZ emitTokenrU_r r r!risR             &  z HTMLTokenizer.attributeNameStatecCsF|jj}|tkr$|jjtdn|dkr8|j|_n |dkrJ|jn|tkrp|jdj |dg|j |_n|dkr|j |_n|dkr|j j t dd d |jdj d dg|j |_n|dkr|j j t ddd |jdj |dg|j |_nF|tkr&|j j t ddd |j|_n|jdj |dg|j |_dS)NTrHrjr$r,rir[r"zinvalid-codepoint)r#r$u�rrrDz&invalid-character-after-attribute-namezexpected-end-of-tag-but-got-eof)rrrD)rr6rr^rrrZr rr7rrqr%rrr)rr$r r r!rs:                z%HTMLTokenizer.afterAttributeNameStatecCsj|jj}|tkr$|jjtdnB|dkr8|j|_n.|dkrX|j|_|jj|n|dkrl|j|_n|dkr|j j t ddd|j n|d kr|j j t dd d|j d dd d 7<|j|_n|dkr|j j t ddd|j d dd |7<|j|_nL|tkrD|j j t ddd|j|_n"|j d dd |7<|j|_dS)NTrrCrrjr"z.expected-attribute-value-but-got-right-bracket)r#r$r[zinvalid-codepointr$ru�rHrD`z"equals-in-unquoted-attribute-valuez$expected-attribute-value-but-got-eofrK)rHrDrrKrK)rr6rr^attributeValueDoubleQuotedStaterattributeValueUnQuotedStater=attributeValueSingleQuotedStater%r7rrZrrr)rr$r r r!rs>                 z'HTMLTokenizer.beforeAttributeValueStatecCs|jj}|dkr|j|_n|dkr0|jdn|dkrj|jjtddd|jdd dd 7<nN|t kr|jjtdd d|j |_n&|jdd d||jj d7<d S)NrrCr[r"zinvalid-codepoint)r#r$r$ru�z#eof-in-attribute-value-double-quoteTrKrK)rrCr[) rr6afterAttributeValueStaterrTr%r7rrrrr^)rr$r r r!rs         z-HTMLTokenizer.attributeValueDoubleQuotedStatecCs|jj}|dkr|j|_n|dkr0|jdn|dkrj|jjtddd|jdd dd 7<nN|t kr|jjtdd d|j |_n&|jdd d||jj d7<d S)NrrCr[r"zinvalid-codepoint)r#r$r$ru�z#eof-in-attribute-value-single-quoteTrKrK)rrCr[) rr6rrrTr%r7rrrrr^)rr$r r r!rs         z-HTMLTokenizer.attributeValueSingleQuotedStatecCs|jj}|tkr|j|_n|dkr2|jdn|dkrD|jn|dkr~|jjt dd d |j d dd |7<n|d kr|jjt ddd |j d dd d7<nV|t kr|jjt ddd |j |_n.|j d dd ||jj tdtB7<dS)NrCrjrrrHrDrr"z0unexpected-character-in-unquoted-attribute-value)r#r$r$rr[zinvalid-codepointu�z eof-in-attribute-value-no-quotesT)rrrHrDrrKrKrK)rCrjrrrHrDrr[)rr6rrprrTrZr%r7rrrrr^r:)rr$r r r!rs,           z)HTMLTokenizer.attributeValueUnQuotedStatecCs|jj}|tkr|j|_n|dkr.|jnp|dkr@|j|_n^|tkrt|jj t ddd|jj ||j |_n*|jj t ddd|jj ||j|_dS)Nrjrir"z$unexpected-EOF-after-attribute-value)r#r$z*unexpected-character-after-attribute-valueT) rr6rrprrZrqrr%r7rr=r)rr$r r r!r s"           z&HTMLTokenizer.afterAttributeValueStatecCs|jj}|dkr&d|jd<|jn^|tkrZ|jjtddd|jj||j |_ n*|jjtddd|jj||j |_ dS)NrjTrWr"z#unexpected-EOF-after-solidus-in-tag)r#r$z)unexpected-character-after-solidus-in-tag) rr6rrZrr%r7rr=rrrp)rr$r r r!rq4s          z&HTMLTokenizer.selfClosingStartTagStatecCsD|jjd}|jdd}|jjtd|d|jj|j|_dS)Nrjr[u�Comment)r#r$T) rr^replacer%r7rr6rr)rr$r r r!roFs   zHTMLTokenizer.bogusCommentStatecCs|jjg}|ddkrT|j|jj|ddkrPtddd|_|j|_dSn|ddkrd}x.d&D]&}|j|jj|d'|krjd}PqjW|rtdddddd|_|j|_dSn|d(dkrH|jdk rH|jj j rH|jj j d)j |jj j krHd}x2d*D]*}|j|jj|d+|krd}PqW|rH|j |_dS|jjtdddx|rz|jj|jq`W|j|_dS),Nrr|rr,)r#r$TdDoOr@CtTyYpPeEFZDoctype)r#rUpublicIdsystemIdcorrect[Ar"zexpected-dashes-or-doctyperKrKrK)rrrrr@rrrrrrrrr)rrrrrrrKrKrK)rrrrrrrK)rr6r7rrcommentStartStater doctypeStaterZtreeZ openElements namespaceZdefaultNamespacecdataSectionStater%r=r'ro)rr?matchedexpectedr r r!rlUsR           z(HTMLTokenizer.markupDeclarationOpenStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd d|jj|j|j|_nP|t kr|jjtdd d|jj|j|j|_n|jd|7<|j |_d S) Nr|r[r"zinvalid-codepoint)r#r$r$u�rjzincorrect-commentzeof-in-commentT) rr6commentStartDashStaterr%r7rrrr commentState)rr$r r r!rs(          zHTMLTokenizer.commentStartStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd d|jj|j|j|_nT|t kr|jjtdd d|jj|j|j|_n|jdd|7<|j |_d S) Nr|r[r"zinvalid-codepoint)r#r$r$u-�rjzincorrect-commentzeof-in-commentT) rr6commentEndStaterr%r7rrrrr)rr$r r r!rs(          z#HTMLTokenizer.commentStartDashStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<nT|tkr|jjtddd|jj|j|j |_n|jd||jj d 7<d S) Nr|r[r"zinvalid-codepoint)r#r$r$u�zeof-in-commentT)r|r[) rr6commentEndDashStaterr%r7rrrrr^)rr$r r r!rs        zHTMLTokenizer.commentStatecCs|jj}|dkr|j|_n|dkrV|jjtddd|jdd7<|j|_nT|t kr|jjtddd|jj|j|j |_n|jdd|7<|j|_d S) Nr|r[r"zinvalid-codepoint)r#r$r$u-�zeof-in-comment-end-dashT) rr6rrr%r7rrrrr)rr$r r r!rs         z!HTMLTokenizer.commentEndDashStatecCs,|jj}|dkr*|jj|j|j|_n|dkrd|jjtddd|jdd7<|j|_n|dkr|jjtdd d|j |_n|d kr|jjtdd d|jd|7<nj|t kr|jjtdd d|jj|j|j|_n4|jjtdd d|jdd|7<|j|_dS)Nrjr[r"zinvalid-codepoint)r#r$r$u--�rhz,unexpected-bang-after-double-dash-in-commentr|z,unexpected-dash-after-double-dash-in-commentzeof-in-comment-double-dashzunexpected-char-in-commentz--T) rr6r%r7rrrrrcommentEndBangStater)rr$r r r!rs6               zHTMLTokenizer.commentEndStatecCs|jj}|dkr*|jj|j|j|_n|dkrN|jdd7<|j|_n|dkr|jjtddd|jdd 7<|j |_nT|t kr|jjtdd d|jj|j|j|_n|jdd|7<|j |_d S) Nrjr|r$z--!r[r"zinvalid-codepoint)r#r$u--!�zeof-in-comment-end-bang-stateT) rr6r%r7rrrrrrr)rr$r r r!rs(         z!HTMLTokenizer.commentEndBangStatecCs|jj}|tkr|j|_nj|tkr\|jjtdddd|j d<|jj|j |j |_n*|jjtddd|jj ||j|_dS)Nr"z!expected-doctype-name-but-got-eof)r#r$Frzneed-space-after-doctypeT) rr6rbeforeDoctypeNameStaterrr%r7rrrr=)rr$r r r!r s         zHTMLTokenizer.doctypeStatecCs|jj}|tkrn|dkrT|jjtdddd|jd<|jj|j|j|_n|dkr|jjtdddd |jd <|j |_nR|t kr|jjtdd dd|jd<|jj|j|j|_n||jd <|j |_d S) Nrjr"z+expected-doctype-name-but-got-right-bracket)r#r$Frr[zinvalid-codepointu�rUz!expected-doctype-name-but-got-eofT) rr6rr%r7rrrrdoctypeNameStater)rr$r r r!rs.              z$HTMLTokenizer.beforeDoctypeNameStatecCs|jj}|tkr2|jdjt|jd<|j|_n|dkrh|jdjt|jd<|jj |j|j |_n|dkr|jj t ddd|jdd7<|j |_nh|t kr|jj t dddd |jd <|jdjt|jd<|jj |j|j |_n|jd|7<d S) NrUrjr[r"zinvalid-codepoint)r#r$u�zeof-in-doctype-nameFrT)rr6rrrXr afterDoctypeNameStaterr%r7rrrr)rr$r r r!r6s,          zHTMLTokenizer.doctypeNameStatecCsR|jj}|tkrn8|dkr8|jj|j|j|_n|tkrd|jd<|jj ||jjt ddd|jj|j|j|_n|d!krd }x$d'D]}|jj}||krd}PqW|r|j |_d SnJ|d(krd }x(d.D] }|jj}||krd}PqW|r|j |_d S|jj ||jjt ddd|id d|jd<|j |_d S)/NrjFrr"zeof-in-doctype)r#r$rrTuUbBlLiIr@rsSrrrrrrmMz*expected-space-or-right-bracket-in-doctyper$)r#r$r.)rrrrrrrrrrr@r)rrrrr)rrrrrrrrrrrr)rrrrr)rr6rr%r7rrrrr=rafterDoctypePublicKeywordStateafterDoctypeSystemKeywordStatebogusDoctypeState)rr$rrr r r!rOsT              z#HTMLTokenizer.afterDoctypeNameStatecCs|jj}|tkr|j|_n|d krP|jjtddd|jj||j|_nT|t kr|jjtdddd|j d<|jj|j |j |_n|jj||j|_d S) Nrrr"zunexpected-char-in-doctype)r#r$zeof-in-doctypeFrT)rr) rr6r"beforeDoctypePublicIdentifierStaterr%r7rr=rrr)rr$r r r!rs"           z,HTMLTokenizer.afterDoctypePublicKeywordStatecCs|jj}|tkrn|dkr0d|jd<|j|_n|dkrLd|jd<|j|_n|dkr|jjt dddd |jd <|jj|j|j |_nh|t kr|jjt dd dd |jd <|jj|j|j |_n(|jjt dd dd |jd <|j |_d S)Nrr,rrrjr"zunexpected-end-of-doctype)r#r$Frzeof-in-doctypezunexpected-char-in-doctypeT) rr6rr(doctypePublicIdentifierDoubleQuotedStater(doctypePublicIdentifierSingleQuotedStater%r7rrrr)rr$r r r!rs4                z0HTMLTokenizer.beforeDoctypePublicIdentifierStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd dd |jd <|jj|j|j|_nR|t kr|jjtdd dd |jd <|jj|j|j|_n|jd|7<d S)Nrr[r"zinvalid-codepoint)r#r$ru�rjzunexpected-end-of-doctypeFrzeof-in-doctypeT) rr6!afterDoctypePublicIdentifierStaterr%r7rrrr)rr$r r r!rs*            z6HTMLTokenizer.doctypePublicIdentifierDoubleQuotedStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd dd |jd <|jj|j|j|_nR|t kr|jjtdd dd |jd <|jj|j|j|_n|jd|7<d S)Nrr[r"zinvalid-codepoint)r#r$ru�rjzunexpected-end-of-doctypeFrzeof-in-doctypeT) rr6rrr%r7rrrr)rr$r r r!rs*            z6HTMLTokenizer.doctypePublicIdentifierSingleQuotedStatecCs |jj}|tkr|j|_n|dkr<|jj|j|j|_n|dkrn|jjt dddd|jd<|j |_n|dkr|jjt dddd|jd<|j |_nh|t kr|jjt dd dd |jd <|jj|j|j|_n(|jjt dddd |jd <|j |_d S) Nrjrr"zunexpected-char-in-doctype)r#r$r,rrzeof-in-doctypeFrT)rr6r-betweenDoctypePublicAndSystemIdentifiersStaterr%r7rrr(doctypeSystemIdentifierDoubleQuotedState(doctypeSystemIdentifierSingleQuotedStaterr)rr$r r r!rs6                  z/HTMLTokenizer.afterDoctypePublicIdentifierStatecCs|jj}|tkrn|dkr4|jj|j|j|_n|dkrPd|jd<|j|_n|dkrld|jd<|j |_nh|t kr|jjt dddd |jd <|jj|j|j|_n(|jjt dd dd |jd <|j |_d S) Nrjrr,rrr"zeof-in-doctype)r#r$Frzunexpected-char-in-doctypeT) rr6rr%r7rrrrrrrr)rr$r r r!rs.             z;HTMLTokenizer.betweenDoctypePublicAndSystemIdentifiersStatecCs|jj}|tkr|j|_n|d krP|jjtddd|jj||j|_nT|t kr|jjtdddd|j d<|jj|j |j |_n|jj||j|_d S) Nrrr"zunexpected-char-in-doctype)r#r$zeof-in-doctypeFrT)rr) rr6r"beforeDoctypeSystemIdentifierStaterr%r7rr=rrr)rr$r r r!rs"           z,HTMLTokenizer.afterDoctypeSystemKeywordStatecCs|jj}|tkrn|dkr0d|jd<|j|_n|dkrLd|jd<|j|_n|dkr|jjt dddd |jd <|jj|j|j |_nh|t kr|jjt dd dd |jd <|jj|j|j |_n(|jjt dddd |jd <|j |_d S) Nrr,rrrjr"zunexpected-char-in-doctype)r#r$Frzeof-in-doctypeT) rr6rrrrrr%r7rrrr)rr$r r r!r/s4                z0HTMLTokenizer.beforeDoctypeSystemIdentifierStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd dd |jd <|jj|j|j|_nR|t kr|jjtdd dd |jd <|jj|j|j|_n|jd|7<d S)Nrr[r"zinvalid-codepoint)r#r$ru�rjzunexpected-end-of-doctypeFrzeof-in-doctypeT) rr6!afterDoctypeSystemIdentifierStaterr%r7rrrr)rr$r r r!rLs*            z6HTMLTokenizer.doctypeSystemIdentifierDoubleQuotedStatecCs|jj}|dkr|j|_n|dkrN|jjtddd|jdd7<n|dkr|jjtdd dd |jd <|jj|j|j|_nR|t kr|jjtdd dd |jd <|jj|j|j|_n|jd|7<d S)Nrr[r"zinvalid-codepoint)r#r$ru�rjzunexpected-end-of-doctypeFrzeof-in-doctypeT) rr6rrr%r7rrrr)rr$r r r!rds*            z6HTMLTokenizer.doctypeSystemIdentifierSingleQuotedStatecCs|jj}|tkrn~|dkr4|jj|j|j|_n^|tkrt|jjt dddd|jd<|jj|j|j|_n|jjt ddd|j |_dS) Nrjr"zeof-in-doctype)r#r$Frzunexpected-char-in-doctypeT) rr6rr%r7rrrrrr)rr$r r r!r|s         z/HTMLTokenizer.afterDoctypeSystemIdentifierStatecCsZ|jj}|dkr*|jj|j|j|_n,|tkrV|jj||jj|j|j|_ndS)NrjT) rr6r%r7rrrrr=)rr$r r r!rs    zHTMLTokenizer.bogusDoctypeStatecCsg}xt|j|jjd|j|jjd|jj}|tkr@Pq|ddddkrl|ddd|d<Pq|j|qWdj|}|jd}|dkrx&t|D]}|jjt d d d qW|j dd }|r|jjt d |d |j |_ dS)N]rjrz]]r,r[rr"zinvalid-codepoint)r#r$u�rJTrKrKrrK) r7rr^r6rr9countranger%rrrr)rr$r6Z nullCountrr r r!rs.       zHTMLTokenizer.cdataSectionState)N)NF)N__name__ __module__ __qualname____doc__rr)rBrSrTrZrr\rbr`rdrfrgr]rmrnrarsrtrcrwrxreryr{rzr}rrr~rrrrrrrrrrprrrrrrrrqrorlrrrrrrrrrrrrrrrrrrrrrrr __classcell__r r )rr!rs H P#         6 "-3rN)Z __future__rrrZsixrr; collectionsrZ constantsrr r r r r rrrrZ _inputstreamrZ_trierrLobjectrr r r r!s       PKe%1]^*m~m~&__pycache__/html5parser.cpython-36.pycnu[3 B;W @sFddlmZmZmZddlmZmZmZddlZyddl m Z Wn e k r`ddl m Z YnXddl mZddl mZddl mZdd lmZdd l mZdd lmZmZmZmZmZmZmZmZmZmZmZm Z!m"Z"m#Z#m$Z$m%Z%d!ddZ&d"ddZ'ddZ(Gddde)Z*ej+ddZ,ddZ-d#ddZ.Gdd d e/Z0dS)$)absolute_importdivisionunicode_literals)with_metaclassviewkeysPY3N) OrderedDict) _inputstream) _tokenizer) treebuilders)Marker)_utils)spaceCharactersasciiUpper2LowerspecialElementsheadingElements cdataElementsrcdataElements tokenTypes tagTokenTypes namespaceshtmlIntegrationPointElements"mathmlTextIntegrationPointElementsadjustForeignAttributesadjustMathMLAttributesadjustSVGAttributesEReparseExceptionetreeTcKs$tj|}t||d}|j|f|S)z.Parse a string or file-like object into a tree)namespaceHTMLElements)r getTreeBuilder HTMLParserparse)doc treebuilderr kwargstbpr)!/usr/lib/python3.6/html5parser.pyr#s  r#divcKs,tj|}t||d}|j|fd|i|S)N)r container)r r!r" parseFragment)r$r,r%r r&r'r(r)r)r*r-&s  r-csGfdddt}|S)NcseZdZfddZdS)z-method_decorator_metaclass..DecoratedcsBx0|jD]$\}}t|tjr&|}|||<q Wtj||||S)N)items isinstancetypes FunctionTypetype__new__)metaZ classnamebasesZ classDictZ attributeNameZ attribute)functionr)r*r3.s   z5method_decorator_metaclass..Decorated.__new__N)__name__ __module__ __qualname__r3r))r6r)r* Decorated-sr:)r2)r6r:r))r6r*method_decorator_metaclass,sr;c@seZdZdZd+ddZd,dd Zd d Zed d ZddZ ddZ ddZ ddZ ddZ ddZd-ddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*ZdS).r"zZHTML parser. Generates a tree structure from a stream of (possibly malformed) HTMLNFTcsL|_|dkrtjd}||_g_tfddt|jD_dS)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) Nrcs g|]\}}||jfqSr))tree).0namecls)selfr)r* Msz'HTMLParser.__init__..) strictr r!r<errorsdict getPhasesr.phases)r@r<rBr debugr))r@r*__init__<s    zHTMLParser.__init__r+c Ksh||_||_||_tj|fd|i||_|jy |jWn$tk rb|j|jYnXdS)Nparser) innerHTMLModer, scriptingr Z HTMLTokenizer tokenizerresetmainLoopr)r@stream innerHTMLr,rKr&r)r)r*_parsePs zHTMLParser._parsecCs|jjd|_g|_g|_d|_|jr|jj|_ |j t krL|j j |j _ n0|j tkrd|j j|j _ n|j dkr||j j|j _ n|jd|_|jj|jnd|_ |jd|_d|_d|_d|_dS)NFz no quirks plaintext beforeHtmlinitialT)r<rM firstStartTagrClog compatModerJr,lowerrPrrL rcdataStatestater rawtextStateplaintextStaterFphaseinsertHtmlElementresetInsertionModeZ lastPhaseZbeforeRCDataPhase framesetOK)r@r)r)r*rM^s*         zHTMLParser.resetcCst|dsdS|jjjdjS)zThe name of the character encoding that was used to decode the input stream, or :obj:`None` if that is not determined yet. rLNr)hasattrrLrO charEncodingr>)r@r)r)r*documentEncodings zHTMLParser.documentEncodingcCsJ|jdkr6|jtdkr6d|jko4|jdjtdkS|j|jftkSdS)Nzannotation-xmlmathmlencoding text/htmlapplication/xhtml+xml)rfrg)r> namespacer attributes translaterr)r@elementr)r)r*isHTMLIntegrationPoints   z!HTMLParser.isHTMLIntegrationPointcCs|j|jftkS)N)rhr>r)r@rkr)r)r*isMathMLTextIntegrationPointsz'HTMLParser.isMathMLTextIntegrationPointcCsztd}td}td}td}td}td}td}x|jD]}d} |} x| dk r| } |jjrx|jjdnd} | r| jnd} | r| jnd} | d }||kr|j| d | jd id} qVt|jjd ksl| |jj ksl|j | r ||kr|d t ddgksl|||fksl| t dkrP| dkrP||krP|d dksl|j | rt||||fkrt|j}n |jd}||kr|j| } qV||kr|j| } qV||kr|j| } qV||kr|j| } qV||kr|j| } qV||krV|j| } qVW||krD| drD| d rD|jdd | d iqDWd}g}x8|rt|j|j|jj}|r>|j|ks>tq>WdS)N CharactersZSpaceCharactersStartTagEndTagCommentZDoctype ParseErrorr r2datadatavarsrr>ZmglyphZ malignmarkrdzannotation-xmlsvginForeignContent selfClosingselfClosingAcknowledgedz&non-void-element-with-trailing-solidusT)rnormalizedTokensr< openElementsrhr> parseErrorgetlendefaultNamespacerm frozensetrrlr]rFprocessCharactersprocessSpaceCharactersprocessStartTag processEndTagprocessCommentprocessDoctypeappend processEOFAssertionError)r@ZCharactersTokenZSpaceCharactersTokenZ StartTagTokenZ EndTagTokenZ CommentTokenZ DoctypeTokenZParseErrorTokentokenZ prev_token new_token currentNodeZcurrentNodeNamespaceZcurrentNodeNamer2r]Z reprocessrFr)r)r*rNsp                   zHTMLParser.mainLoopccs x|jD]}|j|VqWdS)N)rLnormalizeToken)r@rr)r)r*rzs zHTMLParser.normalizedTokenscOs |j|ddf|||jjS)aParse 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) scripting - treat noscript elements as if javascript was turned on FN)rQr<Z getDocument)r@rOargsr&r)r)r*r#s zHTMLParser.parsecOs|j|df|||jjS)a2Parse 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) scripting - treat noscript elements as if javascript was turned on T)rQr<Z getFragment)r@rOrr&r)r)r*r-szHTMLParser.parseFragmentXXX-undefined-errorcCs@|dkr i}|jj|jjj||f|jrrPrrhrrFr])r@ZlastZnewModesnodeZnodeNameZ new_phaser)r)r*r_!sB   zHTMLParser.resetInsertionModecCsR|dks t|jj||dkr.|jj|j_n |jj|j_|j|_|j d|_dS)zYGeneric RCDATA/RAWTEXT Parsing algorithm contentType - RCDATA or RAWTEXT RAWTEXTRCDATAtextN)rr) rr< insertElementrLr[rZrYr] originalPhaserF)r@rZ contentTyper)r)r*parseRCDataRawtextMs   zHTMLParser.parseRCDataRawtext)NFTF)Fr+F)rN)r7r8r9__doc__rHrQrMpropertyrcrlrmrNrzr#r-r|rrrrrr_rr)r)r)r*r"8s&  "  C  ,r"cs"dd}dd}Gdddt|||Gddd}Gd d d }Gfd d d }Gfd dd}Gfddd}Gfddd}Gfddd} Gfddd} Gfddd} Gfddd} Gfddd} Gfddd}Gfdd d }Gfd!d"d"}Gfd#d$d$}Gfd%d&d&}Gfd'd(d(}Gfd)d*d*}Gfd+d,d,}Gfd-d.d.}Gfd/d0d0}Gfd1d2d2}Gfd3d4d4}||||||| | | | | ||||||||||||d5S)6Ncs(tddtjDfdd}|S)z4Logger that records which phase processes each tokencss|]\}}||fVqdS)Nr))r=keyvaluer)r)r* csz)getPhases..log..c sjjdrt|dkr|d}yd|di}WnYnX|dtkr\|d|d<|jjj|jjjj|jj j j|j jj|f|f||S|f||SdS)NZprocessrr2r>) r7 startswithr~rrIrVrrLrZr] __class__)r@rr&rinfo)r6 type_namesr)r*wrappedfs   z'getPhases..log..wrapped)rDrr.)r6rr))r6rr*rVaszgetPhases..logcSs|r t|StSdS)N)r;r2)Z use_metaclassZmetaclass_funcr)r)r* getMetaclasszszgetPhases..getMetaclassc@sXeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)zgetPhases..PhasezNBase class for helper object that implements each phase of processing cSs||_||_dS)N)rIr<)r@rIr<r)r)r*rHsz!getPhases..Phase.__init__cSstdS)N)NotImplementedError)r@r)r)r*rsz#getPhases..Phase.processEOFcSs|jj||jjddS)Nr ry)r< insertCommentr{)r@rr)r)r*rsz'getPhases..Phase.processCommentcSs|jjddS)Nzunexpected-doctype)rIr|)r@rr)r)r*rsz'getPhases..Phase.processDoctypecSs|jj|ddS)Nrs)r< insertText)r@rr)r)r*rsz*getPhases..Phase.processCharacterscSs|jj|ddS)Nrs)r<r)r@rr)r)r*rsz/getPhases..Phase.processSpaceCharacterscSs|j|d|S)Nr>)startTagHandler)r@rr)r)r*rsz(getPhases..Phase.processStartTagcSsl|jj r"|ddkr"|jjdx<|djD],\}}||jjdjkr0||jjdj|<q0Wd|j_dS)Nr>rz non-html-rootrsrF)rIrUr|r.r<r{ri)r@rattrrr)r)r* startTagHtmls  z%getPhases..Phase.startTagHtmlcSs|j|d|S)Nr>) endTagHandler)r@rr)r)r*rsz&getPhases..Phase.processEndTagN) r7r8r9rrHrrrrrrrrr)r)r)r*Phases rc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)zgetPhases..InitialPhasecSsdS)Nr))r@rr)r)r*rsz6getPhases..InitialPhase.processSpaceCharacterscSs|jj||jjdS)N)r<rdocument)r@rr)r)r*rsz.getPhases..InitialPhase.processCommentc8Ss|d}|d}|d}|d}|dks@|dk s@|dk rL|dkrL|jjd|dkrXd}|jj||dkrv|jt}| s|ddks|jdJs|dKks|jdLr|dks|r|jdDkrdE|j_n*|jdMs|jdNr|dk rdH|j_|jj dI|j_ dS)ONr>publicIdsystemIdcorrectrzabout:legacy-compatzunknown-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.dtdquirks -//w3c//dtd xhtml 1.0 frameset//$-//w3c//dtd xhtml 1.0 transitional//zlimited quirksrS)7rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr)rrr)rr)r r )rr) rIr|r<Z insertDoctyperjrrrXrWrFr])r@rr>rrrr)r)r*rs      z.getPhases..InitialPhase.processDoctypecSsd|j_|jjd|j_dS)NrrS)rIrWrFr])r@r)r)r* anythingElsesz,getPhases..InitialPhase.anythingElsecSs|jjd|j|S)Nzexpected-doctype-but-got-chars)rIr|r )r@rr)r)r*rs z1getPhases..InitialPhase.processCharacterscSs"|jjdd|di|j|S)Nz"expected-doctype-but-got-start-tagr>)rIr|r )r@rr)r)r*rsz/getPhases..InitialPhase.processStartTagcSs"|jjdd|di|j|S)Nz expected-doctype-but-got-end-tagr>)rIr|r )r@rr)r)r*rsz-getPhases..InitialPhase.processEndTagcSs|jjd|jdS)Nzexpected-doctype-but-got-eofT)rIr|r )r@r)r)r*r%s z*getPhases..InitialPhase.processEOFN) r7r8r9rrrr rrrrr)r)r)r* InitialPhases_r c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)z"getPhases..BeforeHtmlPhasecSs&|jjtdd|jjd|j_dS)Nrror)r<Z insertRootimpliedTagTokenrIrFr])r@r)r)r*r^,sz4getPhases..BeforeHtmlPhase.insertHtmlElementcSs |jdS)NT)r^)r@r)r)r*r1sz-getPhases..BeforeHtmlPhase.processEOFcSs|jj||jjdS)N)r<rr)r@rr)r)r*r5sz1getPhases..BeforeHtmlPhase.processCommentcSsdS)Nr))r@rr)r)r*r8sz9getPhases..BeforeHtmlPhase.processSpaceCharacterscSs |j|S)N)r^)r@rr)r)r*r;sz4getPhases..BeforeHtmlPhase.processCharacterscSs |ddkrd|j_|j|S)Nr>rT)rIrUr^)r@rr)r)r*r?s z2getPhases..BeforeHtmlPhase.processStartTagcSs4|ddkr$|jjdd|din |j|SdS)Nr>rrrbrzunexpected-end-tag-before-html)rrrr)rIr|r^)r@rr)r)r*rEs  z0getPhases..BeforeHtmlPhase.processEndTagN) r7r8r9r^rrrrrrr)r)r)r*BeforeHtmlPhase*srcsXeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)z"getPhases..BeforeHeadPhasecsVj|||tjd|jfd|jfg|_|j|j_tjd|jfg|_ |j |j _dS)Nrrrr)rrrr) rHrMethodDispatcherr startTagHeadr startTagOtherdefaultendTagImplyHeadr endTagOther)r@rIr<)rr)r*rHNs z+getPhases..BeforeHeadPhase.__init__cSs|jtdddS)NrroT)rr )r@r)r)r*r\sz-getPhases..BeforeHeadPhase.processEOFcSsdS)Nr))r@rr)r)r*r`sz9getPhases..BeforeHeadPhase.processSpaceCharacterscSs|jtdd|S)Nrro)rr )r@rr)r)r*rcsz4getPhases..BeforeHeadPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rgsz/getPhases..BeforeHeadPhase.startTagHtmlcSs0|jj||jjd|j_|jjd|j_dS)Nr inHeadry)r<rr{ headPointerrIrFr])r@rr)r)r*rjs z/getPhases..BeforeHeadPhase.startTagHeadcSs|jtdd|S)Nrro)rr )r@rr)r)r*rosz0getPhases..BeforeHeadPhase.startTagOthercSs|jtdd|S)Nrro)rr )r@rr)r)r*rssz2getPhases..BeforeHeadPhase.endTagImplyHeadcSs|jjdd|didS)Nzend-tag-after-implied-rootr>)rIr|)r@rr)r)r*rwsz.getPhases..BeforeHeadPhase.endTagOtherN) r7r8r9rHrrrrrrrrr))rr)r*BeforeHeadPhaseMs rcseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!S)"zgetPhases..InHeadPhasec sj|||tjd|jfd|jfd|jfd|jfd|jfd|jfd |j fd |j fg|_ |j |j _ tjd |jfd|jfg|_|j|j_ dS)Nrtitlenoframesstylenoscriptscriptbasebasefontbgsoundcommandlinkr4rrr)rr)rrr r!r")rrr)rHrrr startTagTitlestartTagNoFramesStylestartTagNoscriptstartTagScriptstartTagBaseLinkCommand startTagMetarrrr endTagHeadendTagHtmlBodyBrrr)r@rIr<)rr)r*rH|s  z'getPhases..InHeadPhase.__init__cSs |jdS)NT)r )r@r)r)r*rsz)getPhases..InHeadPhase.processEOFcSs |j|S)N)r )r@rr)r)r*rsz0getPhases..InHeadPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz+getPhases..InHeadPhase.startTagHtmlcSs|jjddS)Nz!two-heads-are-not-better-than-one)rIr|)r@rr)r)r*rsz+getPhases..InHeadPhase.startTagHeadcSs$|jj||jjjd|d<dS)NTrx)r<rr{pop)r@rr)r)r*r's  z6getPhases..InHeadPhase.startTagBaseLinkCommandcSs|jj||jjjd|d<|d}|jjjjddkrd|krZ|jjjj|dnVd|krd|kr|dj d krt j |dj d }t j |}|j}|jjjj|dS) NTrxrsr Z tentativecharsetZcontentz http-equivz content-typezutf-8)r<rr{r+rIrLrOrbZchangeEncodingrXr Z EncodingBytesencodeZContentAttrParserr#)r@rrirsrIcodecr)r)r*r(s   z+getPhases..InHeadPhase.startTagMetacSs|jj|ddS)Nr)rIr)r@rr)r)r*r#sz,getPhases..InHeadPhase.startTagTitlecSs|jj|ddS)Nr)rIr)r@rr)r)r*r$sz4getPhases..InHeadPhase.startTagNoFramesStylecSs8|jjr|jj|dn|jj||jjd|j_dS)NrinHeadNoscript)rIrKrr<rrFr])r@rr)r)r*r%s z/getPhases..InHeadPhase.startTagNoscriptcSs<|jj||jjj|jj_|jj|j_|jjd|j_dS)Nr) r<rrIrLZscriptDataStaterZr]rrF)r@rr)r)r*r&s  z-getPhases..InHeadPhase.startTagScriptcSs |j|S)N)r )r@rr)r)r*rsz,getPhases..InHeadPhase.startTagOthercSs:|jjjj}|jdks&td|j|jjd|j_dS)NrzExpected head got %s afterHead)rIr<r{r+r>rrFr])r@rrr)r)r*r)sz)getPhases..InHeadPhase.endTagHeadcSs |j|S)N)r )r@rr)r)r*r*sz/getPhases..InHeadPhase.endTagHtmlBodyBrcSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rsz*getPhases..InHeadPhase.endTagOthercSs|jtddS)Nr)r)r )r@r)r)r*r sz+getPhases..InHeadPhase.anythingElseN)r7r8r9rHrrrrr'r(r#r$r%r&rr)r*rr r))rr)r* InHeadPhase{s  r1csxeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)z&getPhases..InHeadNoscriptPhasecsfj|||tjd|jfd |jfd |jfg|_|j|j_tjd |j fd |j fg|_ |j |j _dS) Nrrr r"r4rrrrr)rr r"r4rr)rr) rHrrrr'startTagHeadNoscriptrrrendTagNoscriptendTagBrrr)r@rIr<)rr)r*rHs z/getPhases..InHeadNoscriptPhase.__init__cSs|jjd|jdS)Nzeof-in-head-noscriptT)rIr|r )r@r)r)r*rs z1getPhases..InHeadNoscriptPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz5getPhases..InHeadNoscriptPhase.processCommentcSs|jjd|j|S)Nzchar-in-head-noscript)rIr|r )r@rr)r)r*rs z8getPhases..InHeadNoscriptPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz=getPhases..InHeadNoscriptPhase.processSpaceCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz3getPhases..InHeadNoscriptPhase.startTagHtmlcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r'sz>getPhases..InHeadNoscriptPhase.startTagBaseLinkCommandcSs|jjdd|didS)Nzunexpected-start-tagr>)rIr|)r@rr)r)r*r2 sz;getPhases..InHeadNoscriptPhase.startTagHeadNoscriptcSs"|jjdd|di|j|S)Nzunexpected-inhead-noscript-tagr>)rIr|r )r@rr)r)r*r sz4getPhases..InHeadNoscriptPhase.startTagOthercSs:|jjjj}|jdks&td|j|jjd|j_dS)NrzExpected noscript got %sr)rIr<r{r+r>rrFr])r@rrr)r)r*r3sz5getPhases..InHeadNoscriptPhase.endTagNoscriptcSs"|jjdd|di|j|S)Nzunexpected-inhead-noscript-tagr>)rIr|r )r@rr)r)r*r4sz/getPhases..InHeadNoscriptPhase.endTagBrcSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rsz2getPhases..InHeadNoscriptPhase.endTagOthercSs|jtddS)Nr)r3r )r@r)r)r*r sz3getPhases..InHeadNoscriptPhase.anythingElseN)r7r8r9rHrrrrrr'r2rr3r4rr r))rr)r*InHeadNoscriptPhases r5cspeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS)z!getPhases..AfterHeadPhasec snj|||tjd|jfd|jfd|jfd|jfd |jfg|_|j |j_ tjd|j fg|_ |j |j _ dS)Nrrrrrr r"r4rrrrrr) rrr r"r4rrrr)rrr)rHrrr startTagBodystartTagFramesetstartTagFromHeadrrrrr*rr)r@rIr<)rr)r*rH#s z*getPhases..AfterHeadPhase.__init__cSs |jdS)NT)r )r@r)r)r*r4sz,getPhases..AfterHeadPhase.processEOFcSs |j|S)N)r )r@rr)r)r*r8sz3getPhases..AfterHeadPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r<sz.getPhases..AfterHeadPhase.startTagHtmlcSs(d|j_|jj||jjd|j_dS)NFr)rIr`r<rrFr])r@rr)r)r*r6?s z.getPhases..AfterHeadPhase.startTagBodycSs |jj||jjd|j_dS)Nr)r<rrIrFr])r@rr)r)r*r7Ds z2getPhases..AfterHeadPhase.startTagFramesetcSst|jjdd|di|jjj|jj|jjdj|x4|jjdddD]}|jdkrN|jjj |PqNWdS)Nz#unexpected-start-tag-out-of-my-headr>rr rry) rIr|r<r{rrrFrr>remove)r@rrr)r)r*r8Hs z2getPhases..AfterHeadPhase.startTagFromHeadcSs|jjdd|didS)Nzunexpected-start-tagr>)rIr|)r@rr)r)r*rRsz.getPhases..AfterHeadPhase.startTagHeadcSs |j|S)N)r )r@rr)r)r*rUsz/getPhases..AfterHeadPhase.startTagOthercSs |j|S)N)r )r@rr)r)r*r*Ysz2getPhases..AfterHeadPhase.endTagHtmlBodyBrcSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*r]sz-getPhases..AfterHeadPhase.endTagOthercSs.|jjtdd|jjd|j_d|j_dS)NrrorT)r<rr rIrFr]r`)r@r)r)r*r `sz.getPhases..AfterHeadPhase.anythingElseN)r7r8r9rHrrrr6r7r8rrr*rr r))rr)r*AfterHeadPhase"s  r:cseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAdBZ#dCdDZ$dEdFZ%dGdHZ&dIdJZ'dKdLZ(dMdNZ)dOdPZ*dQdRZ+dSdTZ,dUdVZ-dWdXZ.dYdZZ/d[d\Z0d]d^Z1d_d`Z2dadbZ3dcddZ4dedfZ5dgS)hzgetPhases..InBodyPhasec,sj||||j|_tjd|jfdd|jfd |jfd |jfde|j ft |j fdf|j fd&|j fdg|jfd*|jfd+|jfdh|jfd8|jfd9|jfdi|jfd=|jfd>|jfdj|jfdk|jfdH|jfdI|jfdJ|jfdK|jfdL|jfdM|jfdN|jfdl|j fdQ|j!fdm|j"fdn|j#fdV|j$fdW|j%fdo|j&fg!|_'|j(|j'_)tjd |j*fd|j+fdp|j,fd&|j-fd |j.fdq|j/ft |j0fdr|j1fds|j2fd@|j3fg |_4|j5|j4_)dS)tNrrrr r!r"r4rrrrraddressarticleaside blockquotecenterdetailsdirr+dlfieldset figcaptionfigurefooterheaderhgroupmainmenunavolr(sectionsummaryulprelistingformlidddtrRabbigcodeemfontissmallstrikestrongttunobrbuttonappletmarqueeobjectZxmprarearembedimgkeygenwbrparamsourcetrackinputhrimageisindextextareaZiframernoembedrrrprtoptionoptgroupZmathrurcolrframerrrrrrrdialog) rrr r!r"r4rrr)r;r<r=r>r?r@rAr+rBrCrDrErFrGrHrIrJrKrLr(rMrNrO)rPrQ)rSrTrU) rWrXrYrZr[r\r]r^r_r`rarb)rerfrg)rhrrirjrkrl)rmrnro)rur)rvrw)rxry) rrzrr{rrrrrrr)r;r<r=r>rdr?r@r|rAr+rBrCrDrErFrGrHrQrIrJrKrLrPrMrNrO)rTrUrS)rVrWrXrYrZr[r\rcr]r^r_r`rarb)rerfrg)6rHprocessSpaceCharactersNonPrerrrrstartTagProcessInHeadr6r7startTagClosePrstartTagHeadingstartTagPreListing startTagFormstartTagListItemstartTagPlaintext startTagAstartTagFormatting startTagNobrstartTagButtonstartTagAppletMarqueeObject startTagXmp startTagTablestartTagVoidFormattingstartTagParamSource startTagInput startTagHr startTagImagestartTagIsIndexstartTagTextareastartTagIFramer%startTagRawtextstartTagSelect startTagRpRt startTagOpt startTagMath startTagSvgstartTagMisplacedrrr endTagBody endTagHtml endTagBlock endTagFormendTagPendTagListItem endTagHeadingendTagFormattingendTagAppletMarqueeObjectr4rr)r@rIr<)rr)r*rHhs~ z'getPhases..InBodyPhase.__init__cSs$|j|jko"|j|jko"|j|jkS)N)r>rhri)r@Znode1Znode2r)r)r*isMatchingFormattingElements  z:getPhases..InBodyPhase.isMatchingFormattingElementcSs|jj||jjd}g}x<|jjdddD]&}|tkr@Pq0|j||r0|j|q0Wt|dksjtt|dkr|jjj |d|jjj|dS)Nr ryryry) r<rr{activeFormattingElementsr rrr~rr9)r@rrkZmatchingElementsrr)r)r*addFormattingElements    z3getPhases..InBodyPhase.addFormattingElementc Ss@td}x2|jjdddD]}|j|kr|jjdPqWdS)NrTrUrSr(rrrrrrrrr z expected-closing-tag-but-got-eof) rTrUrSr(rrrrrrrrry)rr<r{r>rIr|)r@Zallowed_elementsrr)r)r*rs  z)getPhases..InBodyPhase.processEOFcSsh|d}|j|_|jdrJ|jjdjdkrJ|jjd j rJ|dd}|rd|jj|jj|dS) Nrs r rPrQrtry)rPrQrtry) r}rrr<r{r>Z hasContent#reconstructActiveFormattingElementsr)r@rrsr)r)r*!processSpaceCharactersDropNewlines   z@getPhases..InBodyPhase.processSpaceCharactersDropNewlinecSsT|ddkrdS|jj|jj|d|jjrPtdd|dDrPd|j_dS)NrscSsg|] }|tkqSr))r)r=charr)r)r*rAszDgetPhases..InBodyPhase.processCharacters..F)r<rrrIr`any)r@rr)r)r*rs  z0getPhases..InBodyPhase.processCharacterscSs|jj|jj|ddS)Nrs)r<rr)r@rr)r)r*r}s z;getPhases..InBodyPhase.processSpaceCharactersNonPrecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r~sz4getPhases..InBodyPhase.startTagProcessInHeadcSs|jjdddit|jjdks4|jjdjdkrB|jjstnFd|j_x<|dj D],\}}||jjdj krX||jjdj |<qXWdS)Nzunexpected-start-tagr>rr Frs) rIr|r~r<r{r>rPrr`r.ri)r@rrrr)r)r*r6sz+getPhases..InBodyPhase.startTagBodycSs|jjdddit|jjdks4|jjdjdkrB|jjstnt|jjsLnj|jjdj rv|jjdj j |jjdx"|jjdjdkr|jjj qxW|jj ||jj d|j_dS) Nzunexpected-start-tagr>rr rrrry)rIr|r~r<r{r>rPrr`parent removeChildr+rrFr])r@rr)r)r*r7s" z/getPhases..InBodyPhase.startTagFramesetcSs.|jjdddr|jtd|jj|dS)Nr(rd)variant)r<elementInScoperr r)r@rr)r)r*r sz-getPhases..InBodyPhase.startTagClosePcSs>|jjdddr|jtd|jj|d|j_|j|_dS)Nr(rd)rF) r<rrr rrIr`rr)r@rr)r)r*rs  z1getPhases..InBodyPhase.startTagPreListingcSsZ|jjr|jjdddin:|jjdddr:|jtd|jj||jjd|j_dS) Nzunexpected-start-tagr>rRr(rd)rr ry) r< formPointerrIr|rrr rr{)r@rr)r)r*rs  z+getPhases..InBodyPhase.startTagFormcSsd|j_dgddgddgd}||d}xLt|jjD]<}|j|kr^|jjjt|jdP|j t kr8|jd kr8Pq8W|jj d d d r|jjjtd d|jj |dS)NFrSrUrT)rSrUrTr>rpr;r+r(rd)r)r;r+r() rIr`reversedr<r{r>r]rr  nameTuplerrr)r@rZ stopNamesMapZ stopNamesrr)r)r*rs"      z/getPhases..InBodyPhase.startTagListItemcSs>|jjdddr|jtd|jj||jjj|jj_dS)Nr(rd)r) r<rrr rrIrLr\rZ)r@rr)r)r*r4s z0getPhases..InBodyPhase.startTagPlaintextcSsb|jjdddr|jtd|jjdjtkrR|jjdd|di|jjj |jj |dS)Nr(rd)rr zunexpected-start-tagr>ry) r<rrr r{r>rrIr|r+r)r@rr)r)r*r:s  z.getPhases..InBodyPhase.startTagHeadingcSs~|jjd}|rf|jjdddd|jtd||jjkrL|jjj|||jjkrf|jjj||jj |j |dS)NrVz$unexpected-start-tag-implies-end-tag) startNameendName) r<!elementInActiveFormattingElementsrIr|rr r{r9rrr)r@rZ afeAElementr)r)r*rBs     z(getPhases..InBodyPhase.startTagAcSs|jj|j|dS)N)r<rr)r@rr)r)r*rOs z1getPhases..InBodyPhase.startTagFormattingcSsP|jj|jjdrB|jjdddd|jtd|jj|j|dS)Nrcz$unexpected-start-tag-implies-end-tag)rr)r<rrrIr|rr r)r@rr)r)r*rSs    z+getPhases..InBodyPhase.startTagNobrcSsT|jjdr2|jjdddd|jtd|S|jj|jj|d|j_dS)Nrdz$unexpected-start-tag-implies-end-tag)rrF) r<rrIr|rr rrr`)r@rr)r)r*r]s    z-getPhases..InBodyPhase.startTagButtoncSs0|jj|jj||jjjtd|j_dS)NF)r<rrrrr rIr`)r@rr)r)r*rhs  z:getPhases..InBodyPhase.startTagAppletMarqueeObjectcSsB|jjdddr|jtd|jjd|j_|jj|ddS)Nr(rd)rFr)r<rrr rrIr`r)r@rr)r)r*rns  z*getPhases..InBodyPhase.startTagXmpcSsR|jjdkr*|jjdddr*|jtd|jj|d|j_|jjd|j_ dS)Nrr(rd)rFr) rIrWr<rrr rr`rFr])r@rr)r)r*rus   z,getPhases..InBodyPhase.startTagTablecSs6|jj|jj||jjjd|d<d|j_dS)NTrxF)r<rrr{r+rIr`)r@rr)r)r*r}s    z5getPhases..InBodyPhase.startTagVoidFormattingcSs@|jj}|j|d|dkr<|ddjtdkr<||j_dS)Nr2rshidden)rIr`rrjr)r@rr`r)r)r*rs   z,getPhases..InBodyPhase.startTagInputcSs$|jj||jjjd|d<dS)NTrx)r<rr{r+)r@rr)r)r*rs  z2getPhases..InBodyPhase.startTagParamSourcecSsJ|jjdddr|jtd|jj||jjjd|d<d|j_dS)Nr(rd)rTrxF) r<rrr rr{r+rIr`)r@rr)r)r*rs   z)getPhases..InBodyPhase.startTagHrcSs6|jjdddd|jtdd|d|dddS) Nzunexpected-start-tag-treated-asrrrj) originalNamenewNamerorsrw)rirw)rIr|rr )r@rr)r)r*rs   z,getPhases..InBodyPhase.startTagImagecSs|jjdddi|jjrdSi}d|dkr>|dd|d<|jtdd|d|jtd d|jtd dd |dkr|dd }nd }|jtd |d|dj}d|kr|d=d |kr|d =d|d<|jtdd||dd|j td |jtd d|j tddS)Nzdeprecated-tagr>rsactionrsrRro)rirqZlabelpromptz3This is a searchable index. Enter search keywords: rn)r2rsrprw)rirw) rIr|r<rrr rrcopyr)r@rZ form_attrsrrir)r)r*rs6      z.getPhases..InBodyPhase.startTagIsIndexcSs0|jj||jjj|jj_|j|_d|j_dS)NF) r<rrIrLrYrZrrr`)r@rr)r)r*rs z/getPhases..InBodyPhase.startTagTextareacSsd|j_|j|dS)NF)rIr`r)r@rr)r)r*rsz-getPhases..InBodyPhase.startTagIFramecSs"|jjr|j|n |j|dS)N)rIrKrr)r@rr)r)r*r%s z/getPhases..InBodyPhase.startTagNoscriptcSs|jj|ddS)z8iframe, noembed noframes, noscript(if scripting enabled)rN)rIr)r@rr)r)r*rsz.getPhases..InBodyPhase.startTagRawtextcSs@|jjdjdkr$|jjjtd|jj|jjj|dS)Nr rxry) r<r{r>rIr]rr rr)r@rr)r)r*rs z*getPhases..InBodyPhase.startTagOptcSs|jj|jj|d|j_|jj|jjd|jjd|jjd|jjd|jjd|jjdfkrx|jjd|j_n|jjd |j_dS) NFrrrrrrinSelectInTabler)r<rrrIr`r]rF)r@rr)r)r*rs      z-getPhases..InBodyPhase.startTagSelectcSsB|jjdr2|jj|jjdjdkr2|jj|jj|dS)Nrubyr ry)r<rgenerateImpliedEndTagsr{r>rIr|r)r@rr)r)r*rs    z+getPhases..InBodyPhase.startTagRpRtcSsZ|jj|jj||jj|td|d<|jj||drV|jjjd|d<dS)NrdrhrwTrx) r<rrIrrrrr{r+)r@rr)r)r*rs      z+getPhases..InBodyPhase.startTagMathcSsZ|jj|jj||jj|td|d<|jj||drV|jjjd|d<dS)NrurhrwTrx) r<rrIrrrrr{r+)r@rr)r)r*rs      z*getPhases..InBodyPhase.startTagSvgcSs|jjdd|didS)a5 Elements that should be children of other elements that have a different insertion mode; here they are ignored "caption", "col", "colgroup", "frame", "frameset", "head", "option", "optgroup", "tbody", "td", "tfoot", "th", "thead", "tr", "noscript" zunexpected-start-tag-ignoredr>N)rIr|)r@rr)r)r*rsz0getPhases..InBodyPhase.startTagMisplacedcSs|jj|jj|dS)N)r<rr)r@rr)r)r*rs z,getPhases..InBodyPhase.startTagOthercSs|jjdddsD|jtdd|jjdddi|jtddnX|jjd|jjd j dkrt|jjdddi|jjj }x|j dkr|jjj }qWdS) Nr(rd)rrozunexpected-end-tagr>rpr ry) r<rrr rIr|rrr{r>r+)r@rrr)r)r*rs   z&getPhases..InBodyPhase.endTagPcSs|jjds|jjdS|jjdjdkrlx>|jjddD]*}|jtdkr>|jjdd|jdPq>W|jjd|j_dS)Nrr rTrUrSryrxr(rvrwrrrrrrrz$expected-one-end-tag-but-got-another)gotName expectedName afterBodyry)rTrUrSryrxr(rvrwrrrrrrrr) r<rrIr|r{r>rrFr])r@rrr)r)r*r!s  z)getPhases..InBodyPhase.endTagBodycSs"|jjdr|jtd|SdS)Nr)r<rrr )r@rr)r)r*r3s z)getPhases..InBodyPhase.endTagHtmlcSs|ddkr|j|_|jj|d}|r2|jj|jjdj|dkr^|jjdd|di|r|jjj }x|j|dkr|jjj }qpWdS)Nr>rPr zend-tag-too-earlyry) r}rr<rrr{r>rIr|r+)r@rZinScoperr)r)r*r9s   z*getPhases..InBodyPhase.endTagBlockcSsx|jj}d|j_|dks&|jj| r:|jjdddin:|jj|jjd|krf|jjdddi|jjj|dS)Nzunexpected-end-tagr>rRr zend-tag-too-early-ignoredry)r<rrrIr|rr{r9)r@rrr)r)r*rGs   z)getPhases..InBodyPhase.endTagFormcSs|ddkrd}nd}|jj|d|dsB|jjdd|dinj|jj|dd|jjd j|dkr|jjdd|di|jjj}x|j|dkr|jjj}qWdS) Nr>rSlist)rzunexpected-end-tag)excluder zend-tag-too-earlyry)r<rrIr|rr{r>r+)r@rrrr)r)r*rTs  z-getPhases..InBodyPhase.endTagListItemcSsx$tD]}|jj|r|jjPqW|jjdj|dkrR|jjdd|dixBtD]:}|jj|rX|jjj}x|jtkr|jjj}qvWPqXWdS)Nr r>zend-tag-too-earlyry) rr<rrr{r>rIr|r+)r@ritemr)r)r*res       z,getPhases..InBodyPhase.endTagHeadingcSs"d}x|dkr|d7}|jj|d}| sL||jjkrZ|jj|j rZ|j|dS||jjkr|jjdd|di|jjj |dS|jj|js|jjdd|didS||jjdkr|jjdd|di|jjj |}d}x,|jj|dD]}|j t kr|}PqW|dkrb|jjj }x||krN|jjj }q4W|jjj |dS|jj|d}|jjj |}|} } d} |jjj | } x| d krh| d7} | d8} |jj| } | |jjkr|jjj | q| |krP| |kr |jjj | d}| j} | |jj|jjj | <| |jj|jjj | <| } | jrV| jj| | j| | } qW| jr~| jj| |jtdkr|jj\}}|j| |n |j| |j} |j| |j| |jjj ||jjj|| |jjj ||jjj|jjj |d| qWdS)z)The much-feared adoption agency algorithmrr r>Nzadoption-agency-1.2zadoption-agency-4.4zadoption-agency-1.3rrrrrrry)rrrrr)r<rr{rr>rrIr|rr9indexrrr+Z cloneNoderrZ appendChildrZgetTableMisnestedNodePosition insertBeforeZreparentChildreninsert)r@rZouterLoopCounterZformattingElementZafeIndexZ furthestBlockrkZcommonAncestorZbookmarkZlastNoderZinnerLoopCounterrZclonerrr)r)r*rts                    z/getPhases..InBodyPhase.endTagFormattingcSs|jj|dr|jj|jjdj|dkrF|jjdd|di|jj|dr|jjj}x|j|dkr|jjj}qdW|jjdS)Nr>r zend-tag-too-earlyry) r<rrr{r>rIr|r+clearActiveFormattingElements)r@rrkr)r)r*rs  z8getPhases..InBodyPhase.endTagAppletMarqueeObjectcSs@|jjdddd|jj|jjtdd|jjjdS)Nzunexpected-end-tag-treated-asrz br element)rrro)rIr|r<rrr r{r+)r@rr)r)r*r4#s   z'getPhases..InBodyPhase.endTagBrcSsx|jjdddD]}|j|dkr~|jj|dd|jjdj|dkrd|jjdd|dix|jjj|krxqfWPq|jtkr|jjdd|diPqWdS)Nr r>)rzunexpected-end-tagryry) r<r{r>rrIr|r+rr)r@rrr)r)r*r*s z*getPhases..InBodyPhase.endTagOtherN)6r7r8r9rHrrrrrr}r~r6r7rrrrrrrrrrrrrrrrrrrrrr%rrrrrrrrrrrrrrrrrr4rr))rr)r* InBodyPhaseesh G             $ rcs@eZdZfddZddZddZddZd d Zd d Zd S)zgetPhases..TextPhasecsFj|||tjg|_|j|j_tjd|jfg|_|j|j_dS)Nr) rHrrrrr endTagScriptrr)r@rIr<)rr)r*rH9s   z%getPhases..TextPhase.__init__cSs|jj|ddS)Nrs)r<r)r@rr)r)r*rAsz.getPhases..TextPhase.processCharacterscSs8|jjdd|jjdji|jjj|jj|j_dS)Nz&expected-named-closing-tag-but-got-eofr>r Try)rIr|r<r{r>r+rr])r@r)r)r*rDs   z'getPhases..TextPhase.processEOFcSsdstd|ddS)NFz4Tried to process start tag %s in RCDATA/RAWTEXT moder>)r)r@rr)r)r*rKsz*getPhases..TextPhase.startTagOthercSs*|jjj}|jdkst|jj|j_dS)Nr)r<r{r+r>rrIrr])r@rrr)r)r*rNs z)getPhases..TextPhase.endTagScriptcSs|jjj|jj|j_dS)N)r<r{r+rIrr])r@rr)r)r*rUs z(getPhases..TextPhase.endTagOtherN) r7r8r9rHrrrrrr))rr)r* TextPhase8s  rcseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'S)(zgetPhases..InTablePhasec sj|||tjd|jfd|jfd|jfd|jfd|jfd|jfd |j fd|j fd|j fd|j fg |_ |j|j _tjd |jfd|jfg|_|j|j_dS)NrrrrzrrrrrrrrrrprRr)rrr)rrr)rr) rrrzrrrrrrrr)rHrrrstartTagCaptionstartTagColgroup startTagColstartTagRowGroupstartTagImplyTbodyrstartTagStyleScriptrrrrr endTagTable endTagIgnorerr)r@rIr<)rr)r*rH[s$ z(getPhases..InTablePhase.__init__cSs(x"|jjdjdkr"|jjjqWdS)Nr rrry)rr)r<r{r>r+)r@r)r)r*clearStackToTableContextssz8getPhases..InTablePhase.clearStackToTableContextcSs0|jjdjdkr |jjdn |jjs,tdS)Nr rz eof-in-tablery)r<r{r>rIr|rPr)r@r)r)r*r|sz*getPhases..InTablePhase.processEOFcSs4|jj}|jjd|j_||jj_|jjj|dS)N inTableText)rIr]rFrr)r@rrr)r)r*rs z6getPhases..InTablePhase.processSpaceCharacterscSs4|jj}|jjd|j_||jj_|jjj|dS)Nr)rIr]rFrr)r@rrr)r)r*rs z1getPhases..InTablePhase.processCharacterscSs&d|j_|jjdj|d|j_dS)NTrF)r<insertFromTablerIrFr)r@rr)r)r*rsz*getPhases..InTablePhase.insertTextcSs6|j|jjjt|jj||jjd|j_dS)Nr) rr<rrr rrIrFr])r@rr)r)r*rs z/getPhases..InTablePhase.startTagCaptioncSs(|j|jj||jjd|j_dS)Nr)rr<rrIrFr])r@rr)r)r*rs z0getPhases..InTablePhase.startTagColgroupcSs|jtdd|S)Nrro)rr )r@rr)r)r*rsz+getPhases..InTablePhase.startTagColcSs(|j|jj||jjd|j_dS)Nr)rr<rrIrFr])r@rr)r)r*rs z0getPhases..InTablePhase.startTagRowGroupcSs|jtdd|S)Nrro)rr )r@rr)r)r*rsz2getPhases..InTablePhase.startTagImplyTbodycSs6|jjdddd|jjjtd|jjs2|SdS)Nz$unexpected-start-tag-implies-end-tagr)rr)rIr|r]rr rP)r@rr)r)r*rs  z-getPhases..InTablePhase.startTagTablecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz3getPhases..InTablePhase.startTagStyleScriptcSsVd|dkrH|ddjtdkrH|jjd|jj||jjjn |j|dS)Nr2rsrz unexpected-hidden-input-in-table) rjrrIr|r<rr{r+r)r@rr)r)r*rs    z-getPhases..InTablePhase.startTagInputcSsD|jjd|jjdkr@|jj||jjd|j_|jjjdS)Nzunexpected-form-in-tabler ry)rIr|r<rrr{r+)r@rr)r)r*rs    z,getPhases..InTablePhase.startTagFormcSs<|jjdd|did|j_|jjdj|d|j_dS)Nz)unexpected-start-tag-implies-table-voodoor>TrF)rIr|r<rrFr)r@rr)r)r*rsz-getPhases..InTablePhase.startTagOthercSs|jjdddr|jj|jjdjdkrJ|jjdd|jjdjdx"|jjdjdkrl|jjjqLW|jjj|jjn|jj st |jjdS) Nr)rr zend-tag-too-early-named)rrryryry) r<rrr{r>rIr|r+r_rPr)r@rr)r)r*rs    z+getPhases..InTablePhase.endTagTablecSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rsz,getPhases..InTablePhase.endTagIgnorecSs<|jjdd|did|j_|jjdj|d|j_dS)Nz'unexpected-end-tag-implies-table-voodoor>TrF)rIr|r<rrFr)r@rr)r)r*rsz+getPhases..InTablePhase.endTagOtherN)r7r8r9rHrrrrrrrrrrrrrrrrrrr))rr)r* InTablePhaseYs&   rcsPeZdZfddZddZddZddZd d Zd d Zd dZ ddZ dS)z#getPhases..InTableTextPhasecsj|||d|_g|_dS)N)rHrcharacterTokens)r@rIr<)rr)r*rHsz,getPhases..InTableTextPhase.__init__cSsddjdd|jD}tdd|DrJtd|d}|jjdj|n|rZ|jj|g|_dS)NrcSsg|] }|dqS)rsr))r=rr)r)r*rAszGgetPhases..InTableTextPhase.flushCharacters..cSsg|] }|tkqSr))r)r=rr)r)r*rAsrn)r2rsr)joinrrrrIrFrr<)r@rsrr)r)r*flushCharacterss z3getPhases..InTableTextPhase.flushCharacterscSs|j|j|j_|S)N)rrrIr])r@rr)r)r*rs z2getPhases..InTableTextPhase.processCommentcSs|j|j|j_dS)NT)rrrIr])r@r)r)r*rs z.getPhases..InTableTextPhase.processEOFcSs |ddkrdS|jj|dS)Nrsr)rr)r@rr)r)r*rs z5getPhases..InTableTextPhase.processCharacterscSs|jj|dS)N)rr)r@rr)r)r*rsz:getPhases..InTableTextPhase.processSpaceCharacterscSs|j|j|j_|S)N)rrrIr])r@rr)r)r*r s z3getPhases..InTableTextPhase.processStartTagcSs|j|j|j_|S)N)rrrIr])r@rr)r)r*rs z1getPhases..InTableTextPhase.processEndTagN) r7r8r9rHrrrrrrrr))rr)r*InTableTextPhases  rcs`eZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)z!getPhases..InCaptionPhasec sfj|||tjd|jfd |jfg|_|j|j_tjd|jfd |j fd|j fg|_ |j |j _dS)Nrrrzrrrrrrrrr) rrzrrrrrrr) rrzrrrrrrrr) rHrrrstartTagTableElementrrr endTagCaptionrrrr)r@rIr<)rr)r*rHs z*getPhases..InCaptionPhase.__init__cSs|jjddd S)Nrr)r)r<r)r@r)r)r*ignoreEndTagCaption+sz5getPhases..InCaptionPhase.ignoreEndTagCaptioncSs|jjdjdS)Nr)rIrFr)r@r)r)r*r.sz,getPhases..InCaptionPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r1sz3getPhases..InCaptionPhase.processCharacterscSs0|jj|j}|jjjtd|s,|SdS)Nr)rIr|rr]rr )r@r ignoreEndTagr)r)r*r4s  z6getPhases..InCaptionPhase.startTagTableElementcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r<sz/getPhases..InCaptionPhase.startTagOthercSs|js|jj|jjdjdkrB|jjdd|jjdjdx"|jjdjdkrd|jjjqDW|jjj|jj|jj d|j_ n|jj st |jjdS) Nr rz$expected-one-end-tag-but-got-another)rrrryryry) rr<rr{r>rIr|r+rrFr]rPr)r@rr)r)r*r?s    z/getPhases..InCaptionPhase.endTagCaptioncSs0|jj|j}|jjjtd|s,|SdS)Nr)rIr|rr]rr )r@rrr)r)r*rQs  z-getPhases..InCaptionPhase.endTagTablecSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rXsz.getPhases..InCaptionPhase.endTagIgnorecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r[sz-getPhases..InCaptionPhase.endTagOtherN) r7r8r9rHrrrrrrrrrr))rr)r*InCaptionPhases rcsXeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)z%getPhases..InColumnGroupPhasecs^j|||tjd|jfd|jfg|_|j|j_tjd|jfd|j fg|_ |j |j _dS)Nrrzr) rHrrrrrrrendTagColgroup endTagColrr)r@rIr<)rr)r*rHas z.getPhases..InColumnGroupPhase.__init__cSs|jjdjdkS)Nr rry)r<r{r>)r@r)r)r*ignoreEndTagColgrouppsz:getPhases..InColumnGroupPhase.ignoreEndTagColgroupcSsD|jjdjdkr"|jjstdS|j}|jtd|s@dSdS)Nr rrTry) r<r{r>rIrPrrrr )r@rr)r)r*rss z0getPhases..InColumnGroupPhase.processEOFcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*r}sz7getPhases..InColumnGroupPhase.processCharacterscSs$|jj||jjjd|d<dS)NTrx)r<rr{r+)r@rr)r)r*rs  z1getPhases..InColumnGroupPhase.startTagColcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*rsz3getPhases..InColumnGroupPhase.startTagOthercSs@|jr |jjst|jjn|jjj|jjd|j_ dS)Nr) rrIrPrr|r<r{r+rFr])r@rr)r)r*rs    z4getPhases..InColumnGroupPhase.endTagColgroupcSs|jjdddidS)Nz no-end-tagr>rz)rIr|)r@rr)r)r*rsz/getPhases..InColumnGroupPhase.endTagColcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*rsz1getPhases..InColumnGroupPhase.endTagOtherN) r7r8r9rHrrrrrrrrr))rr)r*InColumnGroupPhase^s   rcsxeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)z#getPhases..InTableBodyPhasec svj|||tjd|jfd|jfd |jfd|jfg|_|j|j_ tjd|j fd |j fd|j fg|_ |j|j _ dS)Nrrrrrrzrrrrrr)rr)rrzrrrr)rrr)rrrzrrrrr)rHrrr startTagTrstartTagTableCellstartTagTableOtherrrrendTagTableRowGrouprrrr)r@rIr<)rr)r*rHs z,getPhases..InTableBodyPhase.__init__cSsFx"|jjdjdkr"|jjjqW|jjdjdkrB|jjsBtdS) Nr rrrrry)rrrrry)r<r{r>r+rIrPr)r@r)r)r*clearStackToTableBodyContexts z@getPhases..InTableBodyPhase.clearStackToTableBodyContextcSs|jjdjdS)Nr)rIrFr)r@r)r)r*rsz.getPhases..InTableBodyPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz:getPhases..InTableBodyPhase.processSpaceCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz5getPhases..InTableBodyPhase.processCharacterscSs(|j|jj||jjd|j_dS)Nr)rr<rrIrFr])r@rr)r)r*rs z.getPhases..InTableBodyPhase.startTagTrcSs*|jjdd|di|jtdd|S)Nzunexpected-cell-in-table-bodyr>rro)rIr|rr )r@rr)r)r*rsz5getPhases..InTableBodyPhase.startTagTableCellcSsn|jjddds0|jjddds0|jjdddrT|j|jt|jjdj|S|jjs`t |jj dS)Nrr)rrrr ry) r<rrrr r{r>rIrPrr|)r@rr)r)r*rs z6getPhases..InTableBodyPhase.startTagTableOthercSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz1getPhases..InTableBodyPhase.startTagOthercSsT|jj|dddr:|j|jjj|jjd|j_n|jjdd|didS)Nr>r)rrz unexpected-end-tag-in-table-body) r<rrr{r+rIrFr]r|)r@rr)r)r*rs  z7getPhases..InTableBodyPhase.endTagTableRowGroupcSsn|jjddds0|jjddds0|jjdddrT|j|jt|jjdj|S|jjs`t |jj dS)Nrr)rrrr ry) r<rrrr r{r>rIrPrr|)r@rr)r)r*rs z/getPhases..InTableBodyPhase.endTagTablecSs|jjdd|didS)Nz unexpected-end-tag-in-table-bodyr>)rIr|)r@rr)r)r*rsz0getPhases..InTableBodyPhase.endTagIgnorecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz/getPhases..InTableBodyPhase.endTagOtherN)r7r8r9rHrrrrrrrrrrrrr))rr)r*InTableBodyPhases    rcseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS)zgetPhases..InRowPhasec svj|||tjd|jfd |jfd|jfg|_|j|j_tjd |j fd |j fd|j fd|j fg|_ |j|j _dS)Nrrrrrzrrrrrrr)rr)rrzrrrrr)rrr)rrrzrrrr)rHrrrrrrrrendTagTrrrrrr)r@rIr<)rr)r*rHs z&getPhases..InRowPhase.__init__cSsDx>|jjdjdkr>|jjdd|jjdji|jjjqWdS) Nr rrz'unexpected-implied-end-tag-in-table-rowr>ry)rrry)r<r{r>rIr|r+)r@r)r)r*clearStackToTableRowContextsz9getPhases..InRowPhase.clearStackToTableRowContextcSs|jjddd S)Nrr)r)r<r)r@r)r)r*ignoreEndTagTrsz,getPhases..InRowPhase.ignoreEndTagTrcSs|jjdjdS)Nr)rIrFr)r@r)r)r*r"sz(getPhases..InRowPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r%sz4getPhases..InRowPhase.processSpaceCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r(sz/getPhases..InRowPhase.processCharacterscSs6|j|jj||jjd|j_|jjjtdS)Nr) rr<rrIrFr]rrr )r@rr)r)r*r+s z/getPhases..InRowPhase.startTagTableCellcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*r1sz0getPhases..InRowPhase.startTagTableOthercSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r8sz+getPhases..InRowPhase.startTagOthercSsH|js.|j|jjj|jjd|j_n|jjs:t |jj dS)Nr) rrr<r{r+rIrFr]rPrr|)r@rr)r)r*r;s   z&getPhases..InRowPhase.endTagTrcSs"|j}|jtd|s|SdS)Nr)rrr )r@rrr)r)r*rEsz)getPhases..InRowPhase.endTagTablecSs4|jj|dddr&|jtd|S|jjdS)Nr>r)rr)r<rrr rIr|)r@rr)r)r*rMsz1getPhases..InRowPhase.endTagTableRowGroupcSs|jjdd|didS)Nzunexpected-end-tag-in-table-rowr>)rIr|)r@rr)r)r*rTsz*getPhases..InRowPhase.endTagIgnorecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rXsz)getPhases..InRowPhase.endTagOtherN)r7r8r9rHrrrrrrrrrrrrrr))rr)r* InRowPhases  rcs`eZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)zgetPhases..InCellPhasec sfj|||tjd|jfd |jfg|_|j|j_tjd|jfd|j fd|j fg|_ |j |j _dS)Nrrrzrrrrrrrrr) rrzrrrrrrr)rr)rrrzrr)rrrrr) rHrrrrrrrendTagTableCellr endTagImplyrr)r@rIr<)rr)r*rH]s z'getPhases..InCellPhase.__init__cSsB|jjdddr |jtdn|jjdddr>|jtddS)Nrr)rr)r<rrr )r@r)r)r* closeCellnsz(getPhases..InCellPhase.closeCellcSs|jjdjdS)Nr)rIrFr)r@r)r)r*rusz)getPhases..InCellPhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rxsz0getPhases..InCellPhase.processCharacterscSsF|jjddds |jjdddr,|j|S|jjs8t|jjdS)Nrr)rr)r<rrrIrPrr|)r@rr)r)r*r{s  z1getPhases..InCellPhase.startTagTableOthercSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz,getPhases..InCellPhase.startTagOthercSs|jj|dddr|jj|d|jjdj|dkrt|jjdd|dix.|jjj}|j|dkrRPqRWn |jjj|jj|jj d|j_ n|jjdd|didS) Nr>r)rr zunexpected-cell-end-tagrzunexpected-end-tagry) r<rrr{r>rIr|r+rrFr])r@rrr)r)r*rs   z.getPhases..InCellPhase.endTagTableCellcSs|jjdd|didS)Nzunexpected-end-tagr>)rIr|)r@rr)r)r*rsz+getPhases..InCellPhase.endTagIgnorecSs.|jj|dddr |j|S|jjdS)Nr>r)r)r<rrrIr|)r@rr)r)r*rsz*getPhases..InCellPhase.endTagImplycSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rsz*getPhases..InCellPhase.endTagOtherN) r7r8r9rHrrrrrrrrrr))rr)r* InCellPhase[s  rcsxeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)z getPhases..InSelectPhasecsj|||tjd|jfd|jfd|jfd|jfd |jfd|jfg|_ |j |j _ tjd|j fd|j fd|jfg|_|j|j_ dS) Nrrxryrrprkrtr)rprkrt)rHrrrstartTagOptionstartTagOptgrouprrr&rrr endTagOptionendTagOptgroup endTagSelectrr)r@rIr<)rr)r*rHs z)getPhases..InSelectPhase.__init__cSs0|jjdjdkr |jjdn |jjs,tdS)Nr rz eof-in-selectry)r<r{r>rIr|rPr)r@r)r)r*rsz+getPhases..InSelectPhase.processEOFcSs$|ddkrdS|jj|ddS)Nrsr)r<r)r@rr)r)r*rs z2getPhases..InSelectPhase.processCharacterscSs.|jjdjdkr|jjj|jj|dS)Nr rxry)r<r{r>r+r)r@rr)r)r*rs z/getPhases..InSelectPhase.startTagOptioncSsL|jjdjdkr|jjj|jjdjdkr<|jjj|jj|dS)Nr rxryryry)r<r{r>r+r)r@rr)r)r*rs   z1getPhases..InSelectPhase.startTagOptgroupcSs|jjd|jtddS)Nzunexpected-select-in-selectr)rIr|rr )r@rr)r)r*rs z/getPhases..InSelectPhase.startTagSelectcSs>|jjd|jjdddr.|jtd|S|jjs:tdS)Nzunexpected-input-in-selectr)r)rIr|r<rrr rPr)r@rr)r)r*rs  z.getPhases..InSelectPhase.startTagInputcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r&sz/getPhases..InSelectPhase.startTagScriptcSs|jjdd|didS)Nzunexpected-start-tag-in-selectr>)rIr|)r@rr)r)r*rsz.getPhases..InSelectPhase.startTagOthercSs6|jjdjdkr |jjjn|jjdddidS)Nr rxzunexpected-end-tag-in-selectr>ry)r<r{r>r+rIr|)r@rr)r)r*rsz-getPhases..InSelectPhase.endTagOptioncSsf|jjdjdkr0|jjdjdkr0|jjj|jjd jdkrP|jjjn|jjdddidS) Nr rxrryzunexpected-end-tag-in-selectr>ryry)r<r{r>r+rIr|)r@rr)r)r*rs z/getPhases..InSelectPhase.endTagOptgroupcSs^|jjdddrD|jjj}x|jdkr6|jjj}qW|jjn|jjsPt|jj dS)Nr)r) r<rr{r+r>rIr_rPrr|)r@rrr)r)r*rs    z-getPhases..InSelectPhase.endTagSelectcSs|jjdd|didS)Nzunexpected-end-tag-in-selectr>)rIr|)r@rr)r)r*r sz,getPhases..InSelectPhase.endTagOtherN)r7r8r9rHrrrrrrr&rrrrrr))rr)r* InSelectPhases   rcsHeZdZfddZddZddZddZd d Zd d Zd dZ dS)z'getPhases..InSelectInTablePhasec sNj|||tjd |jfg|_|j|j_tjd |jfg|_|j |j_dS) Nrrrrrrrr)rrrrrrrr)rrrrrrrr) rHrrrrrrrrr)r@rIr<)rr)r*rH s z0getPhases..InSelectInTablePhase.__init__cSs|jjdjdS)Nr)rIrFr)r@r)r)r*r sz2getPhases..InSelectInTablePhase.processEOFcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r sz9getPhases..InSelectInTablePhase.processCharacterscSs(|jjdd|di|jtd|S)Nz5unexpected-table-element-start-tag-in-select-in-tabler>r)rIr|rr )r@rr)r)r*r! sz5getPhases..InSelectInTablePhase.startTagTablecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r& sz5getPhases..InSelectInTablePhase.startTagOthercSs@|jjdd|di|jj|dddr<|jtd|SdS)Nz3unexpected-table-element-end-tag-in-select-in-tabler>r)rr)rIr|r<rrr )r@rr)r)r*r) sz3getPhases..InSelectInTablePhase.endTagTablecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r/ sz3getPhases..InSelectInTablePhase.endTagOtherN) r7r8r9rHrrrrrrr))rr)r*InSelectInTablePhase s rc-seZdZeddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,g,Zfd-d.Zd/d0Zfd1d2Zd3d4Zd5d6Z d7S)8z(getPhases..InForeignContentPhaserWrXr>rrr?rYrTr+rBrUrZriZh1Zh2Zh3Zh4Zh5Zh6rrqr\rjrSrQrJr4rcrLr(rPrr]r^spanr`r_subZsuprrarbrOvarcsj|||dS)N)rH)r@rIr<)rr)r*rH< sz1getPhases..InForeignContentPhase.__init__c%Ssnddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%$}|d&|krj||d&|d&<dS)'NZaltGlyphZ altGlyphDefZ altGlyphItemZ animateColorZ animateMotionZanimateTransformZclipPathZfeBlendZ feColorMatrixZfeComponentTransferZ feCompositeZfeConvolveMatrixZfeDiffuseLightingZfeDisplacementMapZfeDistantLightZfeFloodZfeFuncAZfeFuncBZfeFuncGZfeFuncRZfeGaussianBlurZfeImageZfeMergeZ feMergeNodeZ feMorphologyZfeOffsetZ fePointLightZfeSpecularLightingZ feSpotLightZfeTileZ feTurbulenceZ foreignObjectZglyphRefZlinearGradientZradialGradientZtextPath)$ZaltglyphZ altglyphdefZ altglyphitemZ animatecolorZ animatemotionZanimatetransformZclippathZfeblendZ fecolormatrixZfecomponenttransferZ fecompositeZfeconvolvematrixZfediffuselightingZfedisplacementmapZfedistantlightZfefloodZfefuncaZfefuncbZfefuncgZfefuncrZfegaussianblurZfeimageZfemergeZ femergenodeZ femorphologyZfeoffsetZ fepointlightZfespecularlightingZ fespotlightZfetileZ feturbulenceZ foreignobjectZglyphrefZlineargradientZradialgradientZtextpathr>r))r@r replacementsr)r)r*adjustSVGTagNames? sL z:getPhases..InForeignContentPhase.adjustSVGTagNamescsL|ddkrd|d<n&|jjr.InForeignContentPhase.processCharacters..F)rIr`rr)r@r)rr)r*rh s   z:getPhases..InForeignContentPhase.processCharacterscSs6|jjd}|d|jksD|ddkrt|djtdddg@r|jjdd|dixR|jjdj|jjkr|jj |jjd r|jj |jjd r|jjj q\W|S|jt d kr|jj |n$|jt d kr|j||jj||jj||j|d <|jj||d r2|jjj d |d<dS)Nr r>r[rsZcolorZfacesizez*unexpected-html-element-in-foreign-contentrdrurhrwTrxryryryry)r<r{breakoutElementssetkeysrIr|rhrrlrmr+rrrrrr)r@rrr)r)r*rp s.          z8getPhases..InForeignContentPhase.processStartTagcSst|jjd}|jjd}|jjt|dkrF|jjdd|dix|jjt|dkr|jj|jj dkr|jjj |jjj |j_x |jjj |kr|jjst qWd}P|d8}|jj|}|j|jjkrqHqH|jjj|}PqHW|S)Nr r>zunexpected-end-tagrry)r~r<r{r>rjrrIr|r]rFrrr+rrhrr)r@rZ nodeIndexrrr)r)r*r s(   z6getPhases..InForeignContentPhase.processEndTagN) r7r8r9rrrHrrrrr))rr)r*InForeignContentPhase2 s       ) rcsPeZdZfddZddZddZddZd d Zd d Zd dZ ddZ dS)z!getPhases..AfterBodyPhasecsNj|||tjd|jfg|_|j|j_tjd|jfg|_|j |j_dS)Nr) rHrrrrrrrrr)r@rIr<)rr)r*rH s  z*getPhases..AfterBodyPhase.__init__cSsdS)Nr))r@r)r)r*r sz,getPhases..AfterBodyPhase.processEOFcSs|jj||jjddS)Nr)r<rr{)r@rr)r)r*r sz0getPhases..AfterBodyPhase.processCommentcSs |jjd|jjd|j_|S)Nzunexpected-char-after-bodyr)rIr|rFr])r@rr)r)r*r s z3getPhases..AfterBodyPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r sz.getPhases..AfterBodyPhase.startTagHtmlcSs*|jjdd|di|jjd|j_|S)Nzunexpected-start-tag-after-bodyr>r)rIr|rFr])r@rr)r)r*r sz/getPhases..AfterBodyPhase.startTagOthercSs*|jjr|jjdn|jjd|j_dS)Nz'unexpected-end-tag-after-body-innerhtmlafterAfterBody)rIrPr|rFr])r@r>r)r)r*r sz,getPhases..AfterBodyPhase.endTagHtmlcSs*|jjdd|di|jjd|j_|S)Nzunexpected-end-tag-after-bodyr>r)rIr|rFr])r@rr)r)r*r sz-getPhases..AfterBodyPhase.endTagOtherN) r7r8r9rHrrrrrrrr))rr)r*AfterBodyPhase s r csXeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)z"getPhases..InFramesetPhasecsfj|||tjd|jfd|jfd|jfd|jfg|_|j|j_ tjd|j fg|_ |j |j _ dS)Nrrr{r) rHrrrr7 startTagFramestartTagNoframesrrrendTagFramesetrr)r@rIr<)rr)r*rH s z+getPhases..InFramesetPhase.__init__cSs0|jjdjdkr |jjdn |jjs,tdS)Nr rzeof-in-framesetry)r<r{r>rIr|rPr)r@r)r)r*r sz-getPhases..InFramesetPhase.processEOFcSs|jjddS)Nzunexpected-char-in-frameset)rIr|)r@rr)r)r*r sz4getPhases..InFramesetPhase.processCharacterscSs|jj|dS)N)r<r)r@rr)r)r*r7 sz3getPhases..InFramesetPhase.startTagFramesetcSs|jj||jjjdS)N)r<rr{r+)r@rr)r)r*r  s z0getPhases..InFramesetPhase.startTagFramecSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r  sz3getPhases..InFramesetPhase.startTagNoframescSs|jjdd|didS)Nz unexpected-start-tag-in-framesetr>)rIr|)r@rr)r)r*r sz0getPhases..InFramesetPhase.startTagOthercSs\|jjdjdkr |jjdn |jjj|jj rX|jjdjdkrX|jjd|j_dS)Nr rz)unexpected-frameset-in-frameset-innerhtmlr afterFramesetryry) r<r{r>rIr|r+rPrFr])r@rr)r)r*r  s   z1getPhases..InFramesetPhase.endTagFramesetcSs|jjdd|didS)Nzunexpected-end-tag-in-framesetr>)rIr|)r@rr)r)r*r sz.getPhases..InFramesetPhase.endTagOtherN) r7r8r9rHrrr7r r rr rr))rr)r*InFramesetPhase s  rcsHeZdZfddZddZddZddZd d Zd d Zd dZ dS)z%getPhases..AfterFramesetPhasecsVj|||tjd|jfd|jfg|_|j|j_tjd|jfg|_ |j |j _dS)Nrr) rHrrrr rrrrrr)r@rIr<)rr)r*rH s z.getPhases..AfterFramesetPhase.__init__cSsdS)Nr))r@r)r)r*r sz0getPhases..AfterFramesetPhase.processEOFcSs|jjddS)Nzunexpected-char-after-frameset)rIr|)r@rr)r)r*r! sz7getPhases..AfterFramesetPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*r $ sz6getPhases..AfterFramesetPhase.startTagNoframescSs|jjdd|didS)Nz#unexpected-start-tag-after-framesetr>)rIr|)r@rr)r)r*r' sz3getPhases..AfterFramesetPhase.startTagOthercSs|jjd|j_dS)NafterAfterFrameset)rIrFr])r@rr)r)r*r+ sz0getPhases..AfterFramesetPhase.endTagHtmlcSs|jjdd|didS)Nz!unexpected-end-tag-after-framesetr>)rIr|)r@rr)r)r*r. sz1getPhases..AfterFramesetPhase.endTagOtherN) r7r8r9rHrrr rrrr))rr)r*AfterFramesetPhase s rcsPeZdZfddZddZddZddZd d Zd d Zd dZ ddZ dS)z&getPhases..AfterAfterBodyPhasecs0j|||tjd|jfg|_|j|j_dS)Nr)rHrrrrrr)r@rIr<)rr)r*rH3 sz/getPhases..AfterAfterBodyPhase.__init__cSsdS)Nr))r@r)r)r*r; sz1getPhases..AfterAfterBodyPhase.processEOFcSs|jj||jjdS)N)r<rr)r@rr)r)r*r> sz5getPhases..AfterAfterBodyPhase.processCommentcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rA sz=getPhases..AfterAfterBodyPhase.processSpaceCharacterscSs |jjd|jjd|j_|S)Nzexpected-eof-but-got-charr)rIr|rFr])r@rr)r)r*rD s z8getPhases..AfterAfterBodyPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rI sz3getPhases..AfterAfterBodyPhase.startTagHtmlcSs*|jjdd|di|jjd|j_|S)Nzexpected-eof-but-got-start-tagr>r)rIr|rFr])r@rr)r)r*rL sz4getPhases..AfterAfterBodyPhase.startTagOthercSs*|jjdd|di|jjd|j_|S)Nzexpected-eof-but-got-end-tagr>r)rIr|rFr])r@rr)r)r*rR sz4getPhases..AfterAfterBodyPhase.processEndTagN) r7r8r9rHrrrrrrrr))rr)r*AfterAfterBodyPhase2 s rcsXeZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)z*getPhases..AfterAfterFramesetPhasecs8j|||tjd|jfd|jfg|_|j|j_dS)Nrr)rHrrrstartTagNoFramesrrr)r@rIr<)rr)r*rHY s z3getPhases..AfterAfterFramesetPhase.__init__cSsdS)Nr))r@r)r)r*rb sz5getPhases..AfterAfterFramesetPhase.processEOFcSs|jj||jjdS)N)r<rr)r@rr)r)r*re sz9getPhases..AfterAfterFramesetPhase.processCommentcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rh szAgetPhases..AfterAfterFramesetPhase.processSpaceCharacterscSs|jjddS)Nzexpected-eof-but-got-char)rIr|)r@rr)r)r*rk sz.AfterAfterFramesetPhase.processCharacterscSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rn sz7getPhases..AfterAfterFramesetPhase.startTagHtmlcSs|jjdj|S)Nr)rIrFr)r@rr)r)r*rq sz;getPhases..AfterAfterFramesetPhase.startTagNoFramescSs|jjdd|didS)Nzexpected-eof-but-got-start-tagr>)rIr|)r@rr)r)r*rt sz8getPhases..AfterAfterFramesetPhase.startTagOthercSs|jjdd|didS)Nzexpected-eof-but-got-end-tagr>)rIr|)r@rr)r)r*rx sz8getPhases..AfterAfterFramesetPhase.processEndTagN) r7r8r9rHrrrrrrrrr))rr)r*AfterAfterFramesetPhaseX s r)rTrSrrr/r0rrrrrrrrrrrrvrrrr r)r)rGrVrr rrr1r5r:rrrrrrrrrrrrr rrrrr))rr*rE_sp)#.g@CX!-GBbYLd's/9%&&rEcs^ts tjr t|dt@}nt|dt@}|rZtfdd|djD|d<dS)Nrsc3s"|]\}}j|||fVqdS)N)r})r=kv)rr)r*r sz$adjust_attributes..)rrZPY27rrrr.)rrZneeds_adjustmentr))rr*r s   rrpFcCs|dkr i}t||||dS)N)r2r>rsrw)r)r>r2rirwr)r)r*r  s r c@seZdZdZdS)rrzError in parsed documentN)r7r8r9rr)r)r)r*rr srr)rT)r+rT)rpNF)1Z __future__rrrZsixrrrr0 collectionsr ImportErrorZ ordereddictrr r r Ztreebuilders.baser rZ constantsrrrrrrrrrrrrrrrrrr#r-r;rgr"ZmemoizerErr  Exceptionrrr)r)r)r*sR     H   )L  PKe%1]0:$:$%__pycache__/serializer.cpython-36.pycnu[3 B;WU7@sddlmZmZmZddlmZddlZddlmZm Z ddl m Z m Z m Z ddl mZmZmZddlmZmZdd lmZd je d Zejd ed Zejd edZiZeddkZxeejD]p\Z Z!eree!dkse ree!dkrqe!dkree!dkrej"e!Z!ne#e!Z!e!eks4e j$re ee!<qWddZ%ede%dddZ&Gddde'Z(Gddde)Z*dS))absolute_importdivisionunicode_literals) text_typeN)register_errorxmlcharrefreplace_errors) voidElementsbooleanAttributesspaceCharacters)rcdataElementsentities xmlEntities) treewalkers_utils)escapez"'=<>`[]u_  /`  ᠎᠏           

   ]u􏿿&c Cs"t|ttfrg}g}d}xt|j|j|jD]n\}}|rFd}q4||j}tj|j|t |j|dgrtj |j||d}d}nt |}|j |q4Wx^|D]V}t j|} | r|j d|j | | jds|j dq|j dt|ddqWdj||jfSt|SdS)NFrTr;z&#x%s;r) isinstanceUnicodeEncodeErrorUnicodeTranslateError enumerateobjectstartendrZisSurrogatePairminsurrogatePairToCodepointordappend_encode_entity_mapgetendswithhexjoinr) excresZ codepointsskipicindexZ codepointZcper/ /usr/lib/python3.6/serializer.pyhtmlentityreplace_errors*s0  "      r1htmlentityreplaceetreecKs$tj|}tf|}|j|||S)N)rZ getTreeWalkerHTMLSerializerrender)inputZtreeencodingZserializer_optsZwalkersr/r/r0 serializeJs  r9c@s~eZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZdZdZd!ZddZddZddZd"ddZd#ddZd$dd ZdS)%r4legacy"TFquote_attr_values quote_charuse_best_quote_charomit_optional_tagsminimize_boolean_attributesuse_trailing_solidusspace_before_trailing_solidusescape_lt_in_attrs escape_rcdataresolve_entitiesalphabetical_attributesinject_meta_charsetstrip_whitespacesanitizec Kszt|t|j}t|dkr2tdtt|d|kr@d|_x(|jD]}t|||j|t ||qHWg|_ d|_ dS)a6 Initialize HTMLSerializer. Keyword options (default given first unless specified) include: inject_meta_charset=True|False Whether it insert a meta element to define the character set of the document. quote_attr_values="legacy"|"spec"|"always" Whether to quote attribute values that don't require quoting per legacy browser behaviour, when required by the standard, or always. quote_char=u'"'|u"'" Use given quote character for attribute quoting. Default is to use double quote unless attribute value contains a double quote, in which case single quotes are used instead. escape_lt_in_attrs=False|True Whether to escape < in attribute values. escape_rcdata=False|True Whether to escape characters that need to be escaped within normal elements within rcdata elements such as style. resolve_entities=True|False Whether to resolve named character entities that appear in the source tree. The XML predefined entities < > & " ' are unaffected by this setting. strip_whitespace=False|True Whether to remove semantically meaningless whitespace. (This compresses all whitespace to a single space except within pre.) minimize_boolean_attributes=True|False Shortens boolean attributes to give just the attribute value, for example becomes . use_trailing_solidus=False|True Includes a close-tag slash at the end of the start tag of void elements (empty elements whose end tag is forbidden). E.g.
. space_before_trailing_solidus=True|False Places a space immediately before the closing slash in a tag using a trailing solidus. E.g.
. Requires use_trailing_solidus. sanitize=False|True Strip all unsafe or unknown constructs from output. See `html5lib user documentation`_ omit_optional_tags=True|False Omit start/end tags that are optional. alphabetical_attributes=False|True Reorder attributes to be in alphabetical order. .. _html5lib user documentation: http://code.google.com/p/html5lib/wiki/UserDocumentation rz2__init__() got an unexpected keyword argument '%s'r=FN) frozensetoptionslen TypeErrornextiterr>setattrr$getattrerrorsstrict)selfkwargsZunexpected_argsattrr/r/r0__init__ps.  zHTMLSerializer.__init__cCs*t|tst|jr"|j|jdS|SdS)Nr2)rrAssertionErrorr7encode)rTstringr/r/r0rYszHTMLSerializer.encodecCs*t|tst|jr"|j|jdS|SdS)NrS)rrrXr7rY)rTrZr/r/r0 encodeStrictszHTMLSerializer.encodeStrictNccs||_d}g|_|r0|jr0ddlm}|||}|jrJddlm}||}|jrdddlm}||}|j r~ddl m}||}|j rddl m}||}xR|D]H}|d}|dkr`d|d}|dr|d |d7}n|d r|d 7}|d rJ|d j d d kr0|d j dd kr*|jdd}nd }|d||d |f7}|d7}|j|Vq|d5kr|dksz|r|r|dj dd kr|jd|j|dVn|jt|dVq|d6kr|d} |jd| V| tkr|j rd}n|r|jdx|djD]\\} } } | } | }|jdV|j| V|j s| tj| tkr"| tjdtkr"|jdV|jdkst|d krd}n@|jd krtj|dk }n$|jd!krtj|dk }ntd"|jd#d$}|j r|jd%d&}|r|j!}|j"rTd|kr CharactersSpaceCharactersdatazCommentz--zComment contains --z ZEntityrzEntity %s not recognizedz&%s;)rarb)rdre))r7rRrGZfilters.inject_meta_charsetr\rFZfilters.alphabeticalattributesrHZfilters.whitespacerIZfilters.sanitizerr?Zfilters.optionaltagsfindserializeErrorr[rYrr rDitemsr@r r$tupler<rL_quoteAttributeSpecsearch_quoteAttributeLegacy ValueErrorreplacerCr=r>r rArBr rEr)rT treewalkerr7Zin_cdatar\tokenr]Zdoctyper=r^_Z attr_nameZ attr_valuekvZ quote_attrrckeyr/r/r0r9s                                    zHTMLSerializer.serializecCs2|rdjt|j||Sdjt|j|SdS)Nr)r'listr9)rTrvr7r/r/r0r5?szHTMLSerializer.renderXXX ERROR MESSAGE NEEDEDcCs|jj||jrtdS)N)rRr"rSSerializeError)rTrcr/r/r0rnEs zHTMLSerializer.serializeError)r<r=r>r?r@rArBrCrDrErFrGrHrI)N)N)r~)__name__ __module__ __qualname__r<r=r>r?r@rArBrCrDrErFrGrHrIrKrWrYr[r9r5rnr/r/r/r0r4Qs68  r4c@seZdZdZdS)rzError in serialized treeN)rrr__doc__r/r/r/r0rLsr)r3N)+Z __future__rrrZsixrrecodecsrrZ constantsr r r r r rrrrZxml.sax.saxutilsrr'Z_quoteAttributeSpecCharscompilerqrsr#rLZ_is_ucs4r}roryrzr r!islowerr1r9rr4 Exceptionrr/r/r/r0s:         |PKe%1]l55$__pycache__/_ihatexml.cpython-36.pycnu[3 B;WAA@sddlmZmZmZddlZddlZddlmZdZdZ dZ dZ d Z d j ee gZd j ee d d d e e gZd j ed gZejdZejdZddZddZeddZddZddZddZddZejdZejdZejd ZGd!d"d"eZ dS)#)absolute_importdivisionunicode_literalsN)DataLossWarninga^ [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | [#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | [#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | [#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | [#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | [#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | [#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | [#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | [#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | [#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | [#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | [#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | [#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | [#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | [#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | [#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | [#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | [#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | [#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | [#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | [#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | [#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | [#x0C35-#x0C39] | [#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | [#x0C92-#x0CA8] | [#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | [#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] | [#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] | [#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] | #x0E8A | #x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5 | #x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | #x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] | [#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] | [#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] | #x113C | #x113E | #x1140 | #x114C | #x114E | #x1150 | [#x1154-#x1155] | #x1159 | [#x115F-#x1161] | #x1163 | #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | [#x1172-#x1173] | #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | [#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | [#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | [#x1F20-#x1F45] | [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | #x1F5D | [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | [#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | [#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | [#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | [#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]z*[#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]a [#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | [#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | [#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | [#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | #x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963] | [#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | [#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | #x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | [#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | [#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | #x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | [#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | [#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | [#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | [#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | [#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | #x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | [#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | #x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | [#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | [#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | #x3099 | #x309Aa  [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | [#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | [#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | [#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]z} #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | #[#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]z | .-_z#x([\d|A-F]{4,4})z'\[#x([\d|A-F]{4,4})-#x([\d|A-F]{4,4})\]cCsdd|jdD}g}x|D]}d}x`ttfD]T}|j|}|dk r0|jdd|jDt|d dkr~|d d|d <d}Pq0W|st|dkst|jt|gdqWt |}|S) NcSsg|] }|jqS)strip).0itemr r /usr/lib/python3.6/_ihatexml.py hsz$charStringToList..z | FcSsg|] }t|qSr )hexToInt)r r r r rrosrTrr) splitreChar reCharRangematchappendgroupslenAssertionErrorordnormaliseCharList)charsZ charRangesrvr Z foundMatchZregexprr r rcharStringToListgs"  rcCst|}x |D]}|d|dkstqWg}d}x|t|krd}|j||xT||t|kr|||d|dddkr|||d|dd<|d7}qTW||7}q4W|S)Nrrrr)sortedrrr)charListr rijr r rr|s 2  rZFFFFcCsg}|ddkr*|jd|dddgxBt|ddD].\}}|j|dd||dddgq|dkr>tjdtdS|j|SdS)Nzxmlns:z"Attributes cannot begin with xmlnszhttp://www.w3.org/2000/xmlns/z)Attributes cannot be in the xml namespace)r? startswithwarningswarnrr@ toXmlName)rFname namespacer r rcoerceAttributes  zInfosetFilter.coerceAttributecCs |j|S)N)rK)rFrLr r r coerceElementszInfosetFilter.coerceElementcCsN|jrJx$d|kr*tjdt|jdd}qW|jdrJtjdt|d7}|S)Nz--z'Comments cannot contain adjacent dashesz- -rzComments cannot end in a dash )rArIrJrr;endswith)rFdatar r r coerceComments    zInfosetFilter.coerceCommentcCs:|jr6x"t|jdD]}tjdtqW|jdd}|S)N zText cannot contain U+000CrP)rCrangecountrIrJrr;)rFrRr r r rcoerceCharacterss  zInfosetFilter.coerceCharacterscCsp|}x4tj|D]&}tjdt|j|}|j||}qW|jrl|jddkrltjdt|jd|jd}|S)NzCoercing non-XML pubid'rz!Pubid cannot contain single quote) nonPubidCharRegexpfindallrIrJrgetReplacementCharacterr;rDfind)rFrRZ dataOutputr= replacementr r r coercePubids   zInfosetFilter.coercePubidc Cs|d}|dd}tj|}|r:tjdt|j|}n|}|}ttj|}x.|D]&}tjdt|j|} |j || }qVW||S)NrrzCoercing non-XML name) nonXmlNameFirstBMPRegexprrIrJrr[setnonXmlNameBMPRegexprZr;) rFrL nameFirstZnameRestmZnameFirstOutputZnameRestOutputZ replaceCharsr=r]r r rrKs       zInfosetFilter.toXmlNamecCs$||jkr|j|}n |j|}|S)N)rE escapeChar)rFr=r]r r rr[s   z%InfosetFilter.getReplacementCharactercCs0x*t|jj|D]}|j||j|}qW|S)N)r`replacementRegexprZr; unescapeChar)rFrLr r r r fromXmlNameszInfosetFilter.fromXmlNamecCsdt|}||j|<|S)NzU%05X)rrE)rFr=r]r r rrds  zInfosetFilter.escapeCharcCstt|dddS)Nrr$)r*r-)rFZcharcoder r rrfszInfosetFilter.unescapeChar)FFFFTF)N)__name__ __module__ __qualname__recompilererGrNrOrSrWr^rKr[rgrdrfr r r rr>s"     r>)!Z __future__rrrrkrIZ constantsrZbaseCharZ ideographicZcombiningCharacterZdigitZextenderr+ZletterrLrbrlrrrrr-r&r'r,rr)rar_rYobjectr>r r r rs2 0        PKe%1]ӖpVpV-__pycache__/_inputstream.cpython-36.opt-1.pycnu[3 B;W~)@sddlmZmZmZddlmZmZddlmZm Z ddl Z ddl Z ddl Z ddl mZmZmZmZddl mZddlmZdd lmZydd lmZWnek reZYnXed d eDZed d eDZedd eDZeeddgBZdZejr$e j eddEe!ddZ"n e j eZ"e#ddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3g Z$e j d4Z%iZ&Gd5d6d6e'Z(d7d8Z)Gd9d:d:e'Z*Gd;d<dd>e,Z-Gd?d@d@e'Z.GdAdBdBe'Z/dCdDZ0dS)F)absolute_importdivisionunicode_literals) text_type binary_type) http_clienturllibN)EOFspaceCharacters asciiLettersasciiUppercase)ReparseException)_utils)StringIO)BytesIOcCsg|]}|jdqS)ascii)encode).0itemr"/usr/lib/python3.6/_inputstream.py srcCsg|]}|jdqS)r)r)rrrrrrscCsg|]}|jdqS)r)r)rrrrrrs>.)sumr)r!rrr_bufferedBytes^szBufferedStream._bufferedBytescCs<|jj|}|jj||jdd7<t||jd<|S)Nrr )rr-rappendr r#)r!r,datarrrr*as   zBufferedStream._readStreamcCs|}g}|jd}|jd}x|t|jkr|dkr|j|}|t||krb|}|||g|_n"t||}|t|g|_|d7}|j||||||8}d}qW|r|j|j|dj|S)Nrr )r r#rr0r*join)r!r,ZremainingBytesrvZ bufferIndexZ bufferOffsetZ bufferedDataZ bytesToReadrrrr+hs$    zBufferedStream._readFromBufferN) __name__ __module__ __qualname____doc__r"r&r)r-r/r*r+rrrrr9s  rcKst|tjs(t|tjjr.t|jtjr.d}n&t|drJt|jdt }n t|t }|rdd|D}|rvt d|t |f|St |f|SdS)NFr-rcSsg|]}|jdr|qS)Z _encoding)endswith)rxrrrrsz#HTMLInputStream..z3Cannot set an encoding with a unicode input, set %r) isinstancerZ HTTPResponserZresponseZaddbasefphasattrr-r TypeErrorHTMLUnicodeInputStreamHTMLBinaryInputStream)sourcekwargsZ isUnicodeZ encodingsrrrHTMLInputStreams     rCc@speZdZdZdZddZddZddZd d Zd d Z d dZ dddZ ddZ ddZ dddZddZdS)r?zProvides a unicode stream of characters to the HTMLTokenizer. This class takes care of character encoding and removing or replacing incorrect byte-sequences and also provides column and line tracking. i(cCsZtjsd|_ntddkr$|j|_n|j|_dg|_tddf|_|j ||_ |j dS)aInitialises the HTMLInputStream. HTMLInputStream(source, [encoding]) -> Normalized stream from source for use by html5lib. source can be either a file-object, local filename or a string. 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) Nu􏿿r rzutf-8certain) rsupports_lone_surrogatesreportCharacterErrorsr#characterErrorsUCS4characterErrorsUCS2ZnewLineslookupEncoding charEncoding openStream dataStreamreset)r!rArrrr"s   zHTMLUnicodeInputStream.__init__cCs.d|_d|_d|_g|_d|_d|_d|_dS)Nr)r% chunkSize chunkOffseterrors prevNumLines prevNumCols_bufferedCharacter)r!rrrrMszHTMLUnicodeInputStream.resetcCst|dr|}nt|}|S)zvProduces a file object from source. source can be either a file object, local filename or a string. r-)r=r)r!rArrrrrKs z!HTMLUnicodeInputStream.openStreamcCsT|j}|jdd|}|j|}|jdd|}|dkr@|j|}n ||d}||fS)N rr r)r%countrRrfindrS)r!r'r%ZnLinesZ positionLineZ lastLinePosZpositionColumnrrr _positions   z HTMLUnicodeInputStream._positioncCs|j|j\}}|d|fS)z:Returns (line, col) of the current position in the stream.r )rXrP)r!linecolrrrr szHTMLUnicodeInputStream.positioncCs6|j|jkr|jstS|j}|j|}|d|_|S)zo Read one character from the stream or queue if available. Return EOF when EOF is reached. r )rPrO readChunkr r%)r!rPcharrrrr\s   zHTMLUnicodeInputStream.charNcCs|dkr|j}|j|j\|_|_d|_d|_d|_|jj|}|j rX|j |}d|_ n|s`dSt |dkrt |d }|dksd|kodknr|d |_ |dd}|j r|j ||j dd }|j d d }||_t ||_d S)NrNrFr iiz rU Trrr)_defaultChunkSizerXrOrRrSr%rPrLr-rTr#ordrFreplace)r!rOr1Zlastvrrrr[s0           z HTMLUnicodeInputStream.readChunkcCs,x&tttj|D]}|jjdqWdS)Nzinvalid-codepoint)ranger#invalid_unicode_refindallrQr0)r!r1_rrrrG%sz*HTMLUnicodeInputStream.characterErrorsUCS4cCsd}xtj|D]}|rqt|j}|j}tj|||drttj|||d}|tkrn|j j dd}q|dkr|dkr|t |dkr|j j dqd}|j j dqWdS)NFzinvalid-codepointTiir ) rcfinditerr`groupstartrZisSurrogatePairZsurrogatePairToCodepointnon_bmp_invalid_codepointsrQr0r#)r!r1skipmatchZ codepointr$Zchar_valrrrrH)s   z*HTMLUnicodeInputStream.characterErrorsUCS2Fc Csyt||f}WnNtk r^djdd|D}|s@d|}tjd|}t||f<YnXg}x||j|j|j}|dkr|j|jkrPn0|j }||jkr|j |j|j|||_P|j |j|jd|j sfPqfWdj|}|S)z Returns a string of characters from the stream up to but not including any character in 'characters' or EOF. 'characters' must be a container that supports the 'in' method and iteration over its characters. rNcSsg|]}dt|qS)z\x%02x)r`)rcrrrrNsz5HTMLUnicodeInputStream.charsUntil..z^%sz[%s]+N) charsUntilRegExKeyErrorr3recompilerlr%rPrOendr0r[) r!Z charactersZoppositecharsZregexr4mrrrrrr charsUntil@s.    z!HTMLUnicodeInputStream.charsUntilcCs@|dk r<|jdkr.||j|_|jd7_n|jd8_dS)Nrr )rPr%rO)r!r\rrrungetos   zHTMLUnicodeInputStream.unget)N)F)r5r6r7r8r_r"rMrKrXr r\r[rGrHrvrwrrrrr?s   & /r?c@sLeZdZdZdddZddZd d Zdd d Zd dZddZ ddZ dS)r@zProvides a unicode stream of characters to the HTMLTokenizer. This class takes care of character encoding and removing or replacing incorrect byte-sequences and also provides column and line tracking. N windows-1252TcCs\|j||_tj||jd|_d|_||_||_||_||_ ||_ |j ||_ |j dS)aInitialises the HTMLInputStream. HTMLInputStream(source, [encoding]) -> Normalized stream from source for use by html5lib. source can be either a file-object, local filename or a string. 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) idN)rK rawStreamr?r" numBytesMetanumBytesChardetoverride_encodingtransport_encodingsame_origin_parent_encodinglikely_encodingdefault_encodingdetermineEncodingrJrM)r!rAr}r~rrrZ useChardetrrrr"s  zHTMLBinaryInputStream.__init__cCs&|jdjj|jd|_tj|dS)Nrra)rJZ codec_info streamreaderrzrLr?rM)r!rrrrMszHTMLBinaryInputStream.resetc CsDt|dr|}nt|}y|j|jWnt|}YnX|S)zvProduces a file object from source. source can be either a file object, local filename or a string. r-)r=rr)r&r)r!rArrrrrKs z HTMLBinaryInputStream.openStreamc Cs|jdf}|ddk r|St|jdf}|ddk r:|St|jdf}|ddk rX|S|jdf}|ddk rt|St|jdf}|ddk r|djjd r|St|jdf}|ddk r|S|rdyddl m }Wnt k rYnxXg}|}x6|j s.|j j|j}|sP|j||j|qW|jt|jd}|j jd|dk rd|dfSt|jdf}|ddk r|StddfS)NrDrZ tentativezutf-16)UniversalDetectorencodingz windows-1252) detectBOMrIr}r~detectEncodingMetarname startswithrZchardet.universaldetectorr ImportErrordonerzr-r|r0Zfeedcloseresultr)r)r!ZchardetrJrZbuffersZdetectorrrrrrrsP           z'HTMLBinaryInputStream.determineEncodingcCst|}|dkrdS|jdkr(td}nT||jdkrH|jddf|_n4|jjd|df|_|jtd|jd|fdS)Nutf-16beutf-16lezutf-8rrDzEncoding changed from %s to %s)rr)rIrrJrzr)rMr)r!Z newEncodingrrrchangeEncodings   z$HTMLBinaryInputStream.changeEncodingc Cstjdtjdtjdtjdtjdi}|jjd}|j|dd}d}|sp|j|}d}|sp|j|dd }d }|r|jj |t |S|jj d dSdS) zAttempts to detect at BOM at the start of the stream. If an encoding can be determined from the BOM return the name of the encoding otherwise return Nonezutf-8zutf-16lezutf-16bezutf-32lezutf-32beNrfr) codecsBOM_UTF8 BOM_UTF16_LE BOM_UTF16_BE BOM_UTF32_LE BOM_UTF32_BErzr-getr)rI)r!ZbomDictstringrr)rrrrs"     zHTMLBinaryInputStream.detectBOMcCsH|jj|j}t|}|jjd|j}|dk rD|jdkrDtd}|S)z9Report the encoding declared by the meta element rNutf-16beutf-16lezutf-8)rr)rzr-r{EncodingParserr) getEncodingrrI)r!rparserrrrrr9s z(HTMLBinaryInputStream.detectEncodingMeta)NNNNrxT)T) r5r6r7r8r"rMrKrrrrrrrrr@s ( >"r@c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ e e e Z ddZe eZefddZddZddZddZdS) EncodingByteszString-like object with an associated position and various extra methods If the position is ever greater than the string length then an exception is raisedcCstj||jS)N)r,__new__lower)r!valuerrrrLszEncodingBytes.__new__cCs d|_dS)Nr r)rX)r!rrrrr"PszEncodingBytes.__init__cCs|S)Nr)r!rrr__iter__TszEncodingBytes.__iter__cCs>|jd}|_|t|kr"tn |dkr.t|||dS)Nr r)rXr# StopIterationr>)r!prrr__next__Ws  zEncodingBytes.__next__cCs|jS)N)r)r!rrrnext_szEncodingBytes.nextcCsB|j}|t|krtn |dkr$t|d|_}|||dS)Nrr )rXr#rr>)r!rrrrpreviouscs zEncodingBytes.previouscCs|jt|krt||_dS)N)rXr#r)r!r rrr setPositionlszEncodingBytes.setPositioncCs*|jt|krt|jdkr"|jSdSdS)Nr)rXr#r)r!rrr getPositionqs  zEncodingBytes.getPositioncCs||j|jdS)Nr )r )r!rrrgetCurrentByte{szEncodingBytes.getCurrentBytecCsL|j}x:|t|kr@|||d}||kr6||_|S|d7}qW||_dS)zSkip past a list of charactersr N)r r#rX)r!rsrrmrrrrks zEncodingBytes.skipcCsL|j}x:|t|kr@|||d}||kr6||_|S|d7}qW||_dS)Nr )r r#rX)r!rsrrmrrr skipUntils zEncodingBytes.skipUntilcCs>|j}|||t|}|j|}|r:|jt|7_|S)zLook for a sequence of bytes at the start of a string. If the bytes are found return True and advance the position to the byte after the match. Otherwise return False and leave the position alone)r r#r)r!r,rr1r4rrr matchBytess  zEncodingBytes.matchBytescCsR||jdj|}|dkrJ|jdkr,d|_|j|t|d7_dStdS)zLook for the next sequence of bytes matching a given sequence. If a match is found advance the position to the last byte of the matchNr rTrr)r findrXr#r)r!r,Z newPositionrrrjumpTos zEncodingBytes.jumpToN)r5r6r7r8rr"rrrrrrpropertyr r currentBytespaceCharactersBytesrkrrrrrrrrHs      rc@sXeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)rz?Mini parser for detecting character encoding from meta elementscCst||_d|_dS)z3string - the data to work on for encoding detectionN)rr1r)r!r1rrrr"s zEncodingParser.__init__c Csd|jfd|jfd|jfd|jfd|jfd|jff}x^|jD]T}d}xD|D]<\}}|jj|rJy |}PWqJtk rd}PYqJXqJW|s)r1r)r!rrrrszEncodingParser.handleCommentcCs|jjtkrdSd}d}x|j}|dkr.dS|ddkr^|ddk}|r|dk r||_dSq|ddkr|d}t|}|dk r||_dSq|ddkrtt|d}|j}|dk rt|}|dk r|r||_dS|}qWdS) NTFrs http-equivr s content-typescharsetscontent) r1rr getAttributerrIContentAttrParserrparse)r!Z hasPragmaZpendingEncodingattrZtentativeEncodingcodecZ contentParserrrrrs:      zEncodingParser.handleMetacCs |jdS)NF)handlePossibleTag)r!rrrrsz%EncodingParser.handlePossibleStartTagcCst|j|jdS)NT)rr1r)r!rrrrs z#EncodingParser.handlePossibleEndTagcCsf|j}|jtkr(|r$|j|jdS|jt}|dkrD|jn|j}x|dk r`|j}qNWdS)NTr)r1rasciiLettersBytesrrrspacesAngleBracketsr)r!ZendTagr1rmrrrrrs     z EncodingParser.handlePossibleTagcCs |jjdS)Nr)r1r)r!rrrrszEncodingParser.handleOthercCs|j}|jttdgB}|dkr&dSg}g}xt|dkr@|r@PnX|tkrT|j}PnD|d krjdj|dfS|tkr|j|jn|dkrdS|j|t|}q0W|dkr|j dj|dfSt||j}|d kr:|}xt|}||krt|dj|dj|fS|tkr*|j|jq|j|qWnJ|dkrRdj|dfS|tkrl|j|jn|dkrzdS|j|x^t|}|t krdj|dj|fS|tkr|j|jn|dkrdS|j|qWdS) z_Return a name,value pair for the next attribute in the stream, if one is found, or None/rN=r2'")rN)rr)rr) r1rkr frozensetr3asciiUppercaseBytesr0rrrr)r!r1rmZattrNameZ attrValueZ quoteCharrrrrsf             zEncodingParser.getAttributeN) r5r6r7r8r"rrrrrrrrrrrrrs$rc@seZdZddZddZdS)rcCs ||_dS)N)r1)r!r1rrrr"fszContentAttrParser.__init__cCsy|jjd|jjd7_|jj|jjdks8dS|jjd7_|jj|jjdkr|jj}|jjd7_|jj}|jj|r|j||jjSdSnF|jj}y|jjt|j||jjStk r|j|dSXWntk rdSXdS)Nscharsetr rrr)rr)r1rr rkrrrr)r!Z quoteMarkZ oldPositionrrrrjs.       zContentAttrParser.parseN)r5r6r7r"rrrrrresrcCs`t|tr.y|jd}Wntk r,dSX|dk rXy tj|Stk rTdSXndSdS)z{Return the python codec name corresponding to an encoding or None if the string doesn't correspond to a valid encoding.rN)r;rdecodeUnicodeDecodeError webencodingslookupAttributeError)rrrrrIs  rIr)1Z __future__rrrZsixrrZ six.movesrrrrprZ constantsr r r r rrNriorrrrrrrrZinvalid_unicode_no_surrogaterErqevalrcsetrjZascii_punctuation_rernobjectrrCr?r@r,rrrrIrrrrsV              JgIh6'PKe%1] Բxx#__pycache__/__init__.cpython-36.pycnu[3 B;W@shdZddlmZmZmZddlmZmZmZddl m Z ddl m Z ddl mZdd d d d d gZdZdS)aM HTML parsing library based on the WHATWG "HTML5" specification. The parser is designed to be compatible with existing HTML found in the wild and implements well-defined error recovery that is largely compatible with modern desktop web browsers. Example usage: import html5lib f = open("my_document.html") tree = html5lib.parse(f) )absolute_importdivisionunicode_literals) HTMLParserparse parseFragment)getTreeBuilder) getTreeWalker) serializerrrr r r z 0.999999999N)__doc__Z __future__rrrZ html5parserrrrZ treebuildersr Z treewalkersr Z serializerr __all__ __version__rr/usr/lib/python3.6/__init__.py s   PKe%1]r/X _utils.pynu[from __future__ import absolute_import, division, unicode_literals import sys from types import ModuleType from six import text_type try: import xml.etree.cElementTree as default_etree except ImportError: import xml.etree.ElementTree as default_etree __all__ = ["default_etree", "MethodDispatcher", "isSurrogatePair", "surrogatePairToCodepoint", "moduleFactoryFactory", "supports_lone_surrogates", "PY27"] PY27 = sys.version_info[0] == 2 and sys.version_info[1] >= 7 # Platforms not supporting lone surrogates (\uD800-\uDFFF) should be # caught by the below test. In general this would be any platform # using UTF-16 as its encoding of unicode strings, such as # Jython. This is because UTF-16 itself is based on the use of such # surrogates, and there is no mechanism to further escape such # escapes. try: _x = eval('"\\uD800"') # pylint:disable=eval-used if not isinstance(_x, text_type): # We need this with u"" because of http://bugs.jython.org/issue2039 _x = eval('u"\\uD800"') # pylint:disable=eval-used assert isinstance(_x, text_type) except: # pylint:disable=bare-except supports_lone_surrogates = False else: supports_lone_surrogates = True class MethodDispatcher(dict): """Dict with 2 special properties: On initiation, keys that are lists, sets or tuples are converted to multiple keys so accessing any one of the items in the original list-like object returns the matching value md = MethodDispatcher({("foo", "bar"):"baz"}) md["foo"] == "baz" A default value which can be set through the default attribute. """ def __init__(self, items=()): # Using _dictEntries instead of directly assigning to self is about # twice as fast. Please do careful performance testing before changing # anything here. _dictEntries = [] for name, value in items: if isinstance(name, (list, tuple, frozenset, set)): for item in name: _dictEntries.append((item, value)) else: _dictEntries.append((name, value)) dict.__init__(self, _dictEntries) assert len(self) == len(_dictEntries) self.default = None def __getitem__(self, key): return dict.get(self, key, self.default) # Some utility functions to deal with weirdness around UCS2 vs UCS4 # python builds def isSurrogatePair(data): return (len(data) == 2 and ord(data[0]) >= 0xD800 and ord(data[0]) <= 0xDBFF and ord(data[1]) >= 0xDC00 and ord(data[1]) <= 0xDFFF) def surrogatePairToCodepoint(data): char_val = (0x10000 + (ord(data[0]) - 0xD800) * 0x400 + (ord(data[1]) - 0xDC00)) return char_val # Module Factory Factory (no, this isn't Java, I know) # Here to stop this being duplicated all over the place. def moduleFactoryFactory(factory): moduleCache = {} def moduleFactory(baseModule, *args, **kwargs): if isinstance(ModuleType.__name__, type("")): name = "_%s_factory" % baseModule.__name__ else: name = b"_%s_factory" % baseModule.__name__ kwargs_tuple = tuple(kwargs.items()) try: return moduleCache[name][args][kwargs_tuple] except KeyError: mod = ModuleType(name) objs = factory(baseModule, *args, **kwargs) mod.__dict__.update(objs) if "name" not in moduleCache: moduleCache[name] = {} if "args" not in moduleCache[name]: moduleCache[name][args] = {} if "kwargs" not in moduleCache[name][args]: moduleCache[name][args][kwargs_tuple] = {} moduleCache[name][args][kwargs_tuple] = mod return mod return moduleFactory def memoize(func): cache = {} def wrapped(*args, **kwargs): key = (tuple(args), tuple(kwargs.items())) if key not in cache: cache[key] = func(*args, **kwargs) return cache[key] return wrapped PKe%1]jssfilters/whitespace.pynu[from __future__ import absolute_import, division, unicode_literals import re from . import base from ..constants import rcdataElements, spaceCharacters spaceCharacters = "".join(spaceCharacters) SPACES_REGEX = re.compile("[%s]+" % spaceCharacters) class Filter(base.Filter): spacePreserveElements = frozenset(["pre", "textarea"] + list(rcdataElements)) def __iter__(self): preserve = 0 for token in base.Filter.__iter__(self): type = token["type"] if type == "StartTag" \ and (preserve or token["name"] in self.spacePreserveElements): preserve += 1 elif type == "EndTag" and preserve: preserve -= 1 elif not preserve and type == "SpaceCharacters" and token["data"]: # Test on token["data"] above to not introduce spaces where there were not token["data"] = " " elif not preserve and type == "Characters": token["data"] = collapse_spaces(token["data"]) yield token def collapse_spaces(text): return SPACES_REGEX.sub(' ', text) PKe%1]# b bfilters/sanitizer.pynu[from __future__ import absolute_import, division, unicode_literals import re from xml.sax.saxutils import escape, unescape from six.moves import urllib_parse as urlparse from . import base from ..constants import namespaces, prefixes __all__ = ["Filter"] allowed_elements = frozenset(( (namespaces['html'], 'a'), (namespaces['html'], 'abbr'), (namespaces['html'], 'acronym'), (namespaces['html'], 'address'), (namespaces['html'], 'area'), (namespaces['html'], 'article'), (namespaces['html'], 'aside'), (namespaces['html'], 'audio'), (namespaces['html'], 'b'), (namespaces['html'], 'big'), (namespaces['html'], 'blockquote'), (namespaces['html'], 'br'), (namespaces['html'], 'button'), (namespaces['html'], 'canvas'), (namespaces['html'], 'caption'), (namespaces['html'], 'center'), (namespaces['html'], 'cite'), (namespaces['html'], 'code'), (namespaces['html'], 'col'), (namespaces['html'], 'colgroup'), (namespaces['html'], 'command'), (namespaces['html'], 'datagrid'), (namespaces['html'], 'datalist'), (namespaces['html'], 'dd'), (namespaces['html'], 'del'), (namespaces['html'], 'details'), (namespaces['html'], 'dfn'), (namespaces['html'], 'dialog'), (namespaces['html'], 'dir'), (namespaces['html'], 'div'), (namespaces['html'], 'dl'), (namespaces['html'], 'dt'), (namespaces['html'], 'em'), (namespaces['html'], 'event-source'), (namespaces['html'], 'fieldset'), (namespaces['html'], 'figcaption'), (namespaces['html'], 'figure'), (namespaces['html'], 'footer'), (namespaces['html'], 'font'), (namespaces['html'], 'form'), (namespaces['html'], 'header'), (namespaces['html'], 'h1'), (namespaces['html'], 'h2'), (namespaces['html'], 'h3'), (namespaces['html'], 'h4'), (namespaces['html'], 'h5'), (namespaces['html'], 'h6'), (namespaces['html'], 'hr'), (namespaces['html'], 'i'), (namespaces['html'], 'img'), (namespaces['html'], 'input'), (namespaces['html'], 'ins'), (namespaces['html'], 'keygen'), (namespaces['html'], 'kbd'), (namespaces['html'], 'label'), (namespaces['html'], 'legend'), (namespaces['html'], 'li'), (namespaces['html'], 'm'), (namespaces['html'], 'map'), (namespaces['html'], 'menu'), (namespaces['html'], 'meter'), (namespaces['html'], 'multicol'), (namespaces['html'], 'nav'), (namespaces['html'], 'nextid'), (namespaces['html'], 'ol'), (namespaces['html'], 'output'), (namespaces['html'], 'optgroup'), (namespaces['html'], 'option'), (namespaces['html'], 'p'), (namespaces['html'], 'pre'), (namespaces['html'], 'progress'), (namespaces['html'], 'q'), (namespaces['html'], 's'), (namespaces['html'], 'samp'), (namespaces['html'], 'section'), (namespaces['html'], 'select'), (namespaces['html'], 'small'), (namespaces['html'], 'sound'), (namespaces['html'], 'source'), (namespaces['html'], 'spacer'), (namespaces['html'], 'span'), (namespaces['html'], 'strike'), (namespaces['html'], 'strong'), (namespaces['html'], 'sub'), (namespaces['html'], 'sup'), (namespaces['html'], 'table'), (namespaces['html'], 'tbody'), (namespaces['html'], 'td'), (namespaces['html'], 'textarea'), (namespaces['html'], 'time'), (namespaces['html'], 'tfoot'), (namespaces['html'], 'th'), (namespaces['html'], 'thead'), (namespaces['html'], 'tr'), (namespaces['html'], 'tt'), (namespaces['html'], 'u'), (namespaces['html'], 'ul'), (namespaces['html'], 'var'), (namespaces['html'], 'video'), (namespaces['mathml'], 'maction'), (namespaces['mathml'], 'math'), (namespaces['mathml'], 'merror'), (namespaces['mathml'], 'mfrac'), (namespaces['mathml'], 'mi'), (namespaces['mathml'], 'mmultiscripts'), (namespaces['mathml'], 'mn'), (namespaces['mathml'], 'mo'), (namespaces['mathml'], 'mover'), (namespaces['mathml'], 'mpadded'), (namespaces['mathml'], 'mphantom'), (namespaces['mathml'], 'mprescripts'), (namespaces['mathml'], 'mroot'), (namespaces['mathml'], 'mrow'), (namespaces['mathml'], 'mspace'), (namespaces['mathml'], 'msqrt'), (namespaces['mathml'], 'mstyle'), (namespaces['mathml'], 'msub'), (namespaces['mathml'], 'msubsup'), (namespaces['mathml'], 'msup'), (namespaces['mathml'], 'mtable'), (namespaces['mathml'], 'mtd'), (namespaces['mathml'], 'mtext'), (namespaces['mathml'], 'mtr'), (namespaces['mathml'], 'munder'), (namespaces['mathml'], 'munderover'), (namespaces['mathml'], 'none'), (namespaces['svg'], 'a'), (namespaces['svg'], 'animate'), (namespaces['svg'], 'animateColor'), (namespaces['svg'], 'animateMotion'), (namespaces['svg'], 'animateTransform'), (namespaces['svg'], 'clipPath'), (namespaces['svg'], 'circle'), (namespaces['svg'], 'defs'), (namespaces['svg'], 'desc'), (namespaces['svg'], 'ellipse'), (namespaces['svg'], 'font-face'), (namespaces['svg'], 'font-face-name'), (namespaces['svg'], 'font-face-src'), (namespaces['svg'], 'g'), (namespaces['svg'], 'glyph'), (namespaces['svg'], 'hkern'), (namespaces['svg'], 'linearGradient'), (namespaces['svg'], 'line'), (namespaces['svg'], 'marker'), (namespaces['svg'], 'metadata'), (namespaces['svg'], 'missing-glyph'), (namespaces['svg'], 'mpath'), (namespaces['svg'], 'path'), (namespaces['svg'], 'polygon'), (namespaces['svg'], 'polyline'), (namespaces['svg'], 'radialGradient'), (namespaces['svg'], 'rect'), (namespaces['svg'], 'set'), (namespaces['svg'], 'stop'), (namespaces['svg'], 'svg'), (namespaces['svg'], 'switch'), (namespaces['svg'], 'text'), (namespaces['svg'], 'title'), (namespaces['svg'], 'tspan'), (namespaces['svg'], 'use'), )) allowed_attributes = frozenset(( # HTML attributes (None, 'abbr'), (None, 'accept'), (None, 'accept-charset'), (None, 'accesskey'), (None, 'action'), (None, 'align'), (None, 'alt'), (None, 'autocomplete'), (None, 'autofocus'), (None, 'axis'), (None, 'background'), (None, 'balance'), (None, 'bgcolor'), (None, 'bgproperties'), (None, 'border'), (None, 'bordercolor'), (None, 'bordercolordark'), (None, 'bordercolorlight'), (None, 'bottompadding'), (None, 'cellpadding'), (None, 'cellspacing'), (None, 'ch'), (None, 'challenge'), (None, 'char'), (None, 'charoff'), (None, 'choff'), (None, 'charset'), (None, 'checked'), (None, 'cite'), (None, 'class'), (None, 'clear'), (None, 'color'), (None, 'cols'), (None, 'colspan'), (None, 'compact'), (None, 'contenteditable'), (None, 'controls'), (None, 'coords'), (None, 'data'), (None, 'datafld'), (None, 'datapagesize'), (None, 'datasrc'), (None, 'datetime'), (None, 'default'), (None, 'delay'), (None, 'dir'), (None, 'disabled'), (None, 'draggable'), (None, 'dynsrc'), (None, 'enctype'), (None, 'end'), (None, 'face'), (None, 'for'), (None, 'form'), (None, 'frame'), (None, 'galleryimg'), (None, 'gutter'), (None, 'headers'), (None, 'height'), (None, 'hidefocus'), (None, 'hidden'), (None, 'high'), (None, 'href'), (None, 'hreflang'), (None, 'hspace'), (None, 'icon'), (None, 'id'), (None, 'inputmode'), (None, 'ismap'), (None, 'keytype'), (None, 'label'), (None, 'leftspacing'), (None, 'lang'), (None, 'list'), (None, 'longdesc'), (None, 'loop'), (None, 'loopcount'), (None, 'loopend'), (None, 'loopstart'), (None, 'low'), (None, 'lowsrc'), (None, 'max'), (None, 'maxlength'), (None, 'media'), (None, 'method'), (None, 'min'), (None, 'multiple'), (None, 'name'), (None, 'nohref'), (None, 'noshade'), (None, 'nowrap'), (None, 'open'), (None, 'optimum'), (None, 'pattern'), (None, 'ping'), (None, 'point-size'), (None, 'poster'), (None, 'pqg'), (None, 'preload'), (None, 'prompt'), (None, 'radiogroup'), (None, 'readonly'), (None, 'rel'), (None, 'repeat-max'), (None, 'repeat-min'), (None, 'replace'), (None, 'required'), (None, 'rev'), (None, 'rightspacing'), (None, 'rows'), (None, 'rowspan'), (None, 'rules'), (None, 'scope'), (None, 'selected'), (None, 'shape'), (None, 'size'), (None, 'span'), (None, 'src'), (None, 'start'), (None, 'step'), (None, 'style'), (None, 'summary'), (None, 'suppress'), (None, 'tabindex'), (None, 'target'), (None, 'template'), (None, 'title'), (None, 'toppadding'), (None, 'type'), (None, 'unselectable'), (None, 'usemap'), (None, 'urn'), (None, 'valign'), (None, 'value'), (None, 'variable'), (None, 'volume'), (None, 'vspace'), (None, 'vrml'), (None, 'width'), (None, 'wrap'), (namespaces['xml'], 'lang'), # MathML attributes (None, 'actiontype'), (None, 'align'), (None, 'columnalign'), (None, 'columnalign'), (None, 'columnalign'), (None, 'columnlines'), (None, 'columnspacing'), (None, 'columnspan'), (None, 'depth'), (None, 'display'), (None, 'displaystyle'), (None, 'equalcolumns'), (None, 'equalrows'), (None, 'fence'), (None, 'fontstyle'), (None, 'fontweight'), (None, 'frame'), (None, 'height'), (None, 'linethickness'), (None, 'lspace'), (None, 'mathbackground'), (None, 'mathcolor'), (None, 'mathvariant'), (None, 'mathvariant'), (None, 'maxsize'), (None, 'minsize'), (None, 'other'), (None, 'rowalign'), (None, 'rowalign'), (None, 'rowalign'), (None, 'rowlines'), (None, 'rowspacing'), (None, 'rowspan'), (None, 'rspace'), (None, 'scriptlevel'), (None, 'selection'), (None, 'separator'), (None, 'stretchy'), (None, 'width'), (None, 'width'), (namespaces['xlink'], 'href'), (namespaces['xlink'], 'show'), (namespaces['xlink'], 'type'), # SVG attributes (None, 'accent-height'), (None, 'accumulate'), (None, 'additive'), (None, 'alphabetic'), (None, 'arabic-form'), (None, 'ascent'), (None, 'attributeName'), (None, 'attributeType'), (None, 'baseProfile'), (None, 'bbox'), (None, 'begin'), (None, 'by'), (None, 'calcMode'), (None, 'cap-height'), (None, 'class'), (None, 'clip-path'), (None, 'color'), (None, 'color-rendering'), (None, 'content'), (None, 'cx'), (None, 'cy'), (None, 'd'), (None, 'dx'), (None, 'dy'), (None, 'descent'), (None, 'display'), (None, 'dur'), (None, 'end'), (None, 'fill'), (None, 'fill-opacity'), (None, 'fill-rule'), (None, 'font-family'), (None, 'font-size'), (None, 'font-stretch'), (None, 'font-style'), (None, 'font-variant'), (None, 'font-weight'), (None, 'from'), (None, 'fx'), (None, 'fy'), (None, 'g1'), (None, 'g2'), (None, 'glyph-name'), (None, 'gradientUnits'), (None, 'hanging'), (None, 'height'), (None, 'horiz-adv-x'), (None, 'horiz-origin-x'), (None, 'id'), (None, 'ideographic'), (None, 'k'), (None, 'keyPoints'), (None, 'keySplines'), (None, 'keyTimes'), (None, 'lang'), (None, 'marker-end'), (None, 'marker-mid'), (None, 'marker-start'), (None, 'markerHeight'), (None, 'markerUnits'), (None, 'markerWidth'), (None, 'mathematical'), (None, 'max'), (None, 'min'), (None, 'name'), (None, 'offset'), (None, 'opacity'), (None, 'orient'), (None, 'origin'), (None, 'overline-position'), (None, 'overline-thickness'), (None, 'panose-1'), (None, 'path'), (None, 'pathLength'), (None, 'points'), (None, 'preserveAspectRatio'), (None, 'r'), (None, 'refX'), (None, 'refY'), (None, 'repeatCount'), (None, 'repeatDur'), (None, 'requiredExtensions'), (None, 'requiredFeatures'), (None, 'restart'), (None, 'rotate'), (None, 'rx'), (None, 'ry'), (None, 'slope'), (None, 'stemh'), (None, 'stemv'), (None, 'stop-color'), (None, 'stop-opacity'), (None, 'strikethrough-position'), (None, 'strikethrough-thickness'), (None, 'stroke'), (None, 'stroke-dasharray'), (None, 'stroke-dashoffset'), (None, 'stroke-linecap'), (None, 'stroke-linejoin'), (None, 'stroke-miterlimit'), (None, 'stroke-opacity'), (None, 'stroke-width'), (None, 'systemLanguage'), (None, 'target'), (None, 'text-anchor'), (None, 'to'), (None, 'transform'), (None, 'type'), (None, 'u1'), (None, 'u2'), (None, 'underline-position'), (None, 'underline-thickness'), (None, 'unicode'), (None, 'unicode-range'), (None, 'units-per-em'), (None, 'values'), (None, 'version'), (None, 'viewBox'), (None, 'visibility'), (None, 'width'), (None, 'widths'), (None, 'x'), (None, 'x-height'), (None, 'x1'), (None, 'x2'), (namespaces['xlink'], 'actuate'), (namespaces['xlink'], 'arcrole'), (namespaces['xlink'], 'href'), (namespaces['xlink'], 'role'), (namespaces['xlink'], 'show'), (namespaces['xlink'], 'title'), (namespaces['xlink'], 'type'), (namespaces['xml'], 'base'), (namespaces['xml'], 'lang'), (namespaces['xml'], 'space'), (None, 'y'), (None, 'y1'), (None, 'y2'), (None, 'zoomAndPan'), )) attr_val_is_uri = frozenset(( (None, 'href'), (None, 'src'), (None, 'cite'), (None, 'action'), (None, 'longdesc'), (None, 'poster'), (None, 'background'), (None, 'datasrc'), (None, 'dynsrc'), (None, 'lowsrc'), (None, 'ping'), (namespaces['xlink'], 'href'), (namespaces['xml'], 'base'), )) svg_attr_val_allows_ref = frozenset(( (None, 'clip-path'), (None, 'color-profile'), (None, 'cursor'), (None, 'fill'), (None, 'filter'), (None, 'marker'), (None, 'marker-start'), (None, 'marker-mid'), (None, 'marker-end'), (None, 'mask'), (None, 'stroke'), )) svg_allow_local_href = frozenset(( (None, 'altGlyph'), (None, 'animate'), (None, 'animateColor'), (None, 'animateMotion'), (None, 'animateTransform'), (None, 'cursor'), (None, 'feImage'), (None, 'filter'), (None, 'linearGradient'), (None, 'pattern'), (None, 'radialGradient'), (None, 'textpath'), (None, 'tref'), (None, 'set'), (None, 'use') )) allowed_css_properties = frozenset(( 'azimuth', 'background-color', 'border-bottom-color', 'border-collapse', 'border-color', 'border-left-color', 'border-right-color', 'border-top-color', 'clear', 'color', 'cursor', 'direction', 'display', 'elevation', 'float', 'font', 'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight', 'height', 'letter-spacing', 'line-height', 'overflow', 'pause', 'pause-after', 'pause-before', 'pitch', 'pitch-range', 'richness', 'speak', 'speak-header', 'speak-numeral', 'speak-punctuation', 'speech-rate', 'stress', 'text-align', 'text-decoration', 'text-indent', 'unicode-bidi', 'vertical-align', 'voice-family', 'volume', 'white-space', 'width', )) allowed_css_keywords = frozenset(( 'auto', 'aqua', 'black', 'block', 'blue', 'bold', 'both', 'bottom', 'brown', 'center', 'collapse', 'dashed', 'dotted', 'fuchsia', 'gray', 'green', '!important', 'italic', 'left', 'lime', 'maroon', 'medium', 'none', 'navy', 'normal', 'nowrap', 'olive', 'pointer', 'purple', 'red', 'right', 'solid', 'silver', 'teal', 'top', 'transparent', 'underline', 'white', 'yellow', )) allowed_svg_properties = frozenset(( 'fill', 'fill-opacity', 'fill-rule', 'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin', 'stroke-opacity', )) allowed_protocols = frozenset(( 'ed2k', 'ftp', 'http', 'https', 'irc', 'mailto', 'news', 'gopher', 'nntp', 'telnet', 'webcal', 'xmpp', 'callto', 'feed', 'urn', 'aim', 'rsync', 'tag', 'ssh', 'sftp', 'rtsp', 'afs', 'data', )) allowed_content_types = frozenset(( 'image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/bmp', 'text/plain', )) data_content_type = re.compile(r''' ^ # Match a content type / (?P[-a-zA-Z0-9.]+/[-a-zA-Z0-9.]+) # Match any character set and encoding (?:(?:;charset=(?:[-a-zA-Z0-9]+)(?:;(?:base64))?) |(?:;(?:base64))?(?:;charset=(?:[-a-zA-Z0-9]+))?) # Assume the rest is data ,.* $ ''', re.VERBOSE) class Filter(base.Filter): """ sanitization of XHTML+MathML+SVG and of inline style attributes.""" def __init__(self, source, allowed_elements=allowed_elements, allowed_attributes=allowed_attributes, allowed_css_properties=allowed_css_properties, allowed_css_keywords=allowed_css_keywords, allowed_svg_properties=allowed_svg_properties, allowed_protocols=allowed_protocols, allowed_content_types=allowed_content_types, attr_val_is_uri=attr_val_is_uri, svg_attr_val_allows_ref=svg_attr_val_allows_ref, svg_allow_local_href=svg_allow_local_href): super(Filter, self).__init__(source) self.allowed_elements = allowed_elements self.allowed_attributes = allowed_attributes self.allowed_css_properties = allowed_css_properties self.allowed_css_keywords = allowed_css_keywords self.allowed_svg_properties = allowed_svg_properties self.allowed_protocols = allowed_protocols self.allowed_content_types = allowed_content_types self.attr_val_is_uri = attr_val_is_uri self.svg_attr_val_allows_ref = svg_attr_val_allows_ref self.svg_allow_local_href = svg_allow_local_href def __iter__(self): for token in base.Filter.__iter__(self): token = self.sanitize_token(token) if token: yield token # Sanitize the +html+, escaping all elements not in ALLOWED_ELEMENTS, and # stripping out all # attributes not in ALLOWED_ATTRIBUTES. Style # attributes are parsed, and a restricted set, # specified by # ALLOWED_CSS_PROPERTIES and ALLOWED_CSS_KEYWORDS, are allowed through. # attributes in ATTR_VAL_IS_URI are scanned, and only URI schemes specified # in ALLOWED_PROTOCOLS are allowed. # # sanitize_html('') # => <script> do_nasty_stuff() </script> # sanitize_html('Click here for $100') # => Click here for $100 def sanitize_token(self, token): # accommodate filters which use token_type differently token_type = token["type"] if token_type in ("StartTag", "EndTag", "EmptyTag"): name = token["name"] namespace = token["namespace"] if ((namespace, name) in self.allowed_elements or (namespace is None and (namespaces["html"], name) in self.allowed_elements)): return self.allowed_token(token) else: return self.disallowed_token(token) elif token_type == "Comment": pass else: return token def allowed_token(self, token): if "data" in token: attrs = token["data"] attr_names = set(attrs.keys()) # Remove forbidden attributes for to_remove in (attr_names - self.allowed_attributes): del token["data"][to_remove] attr_names.remove(to_remove) # Remove attributes with disallowed URL values for attr in (attr_names & self.attr_val_is_uri): assert attr in attrs # I don't have a clue where this regexp comes from or why it matches those # characters, nor why we call unescape. I just know it's always been here. # Should you be worried by this comment in a sanitizer? Yes. On the other hand, all # this will do is remove *more* than it otherwise would. val_unescaped = re.sub("[`\x00-\x20\x7f-\xa0\s]+", '', unescape(attrs[attr])).lower() # remove replacement characters from unescaped characters val_unescaped = val_unescaped.replace("\ufffd", "") try: uri = urlparse.urlparse(val_unescaped) except ValueError: uri = None del attrs[attr] if uri and uri.scheme: if uri.scheme not in self.allowed_protocols: del attrs[attr] if uri.scheme == 'data': m = data_content_type.match(uri.path) if not m: del attrs[attr] elif m.group('content_type') not in self.allowed_content_types: del attrs[attr] for attr in self.svg_attr_val_allows_ref: if attr in attrs: attrs[attr] = re.sub(r'url\s*\(\s*[^#\s][^)]+?\)', ' ', unescape(attrs[attr])) if (token["name"] in self.svg_allow_local_href and (namespaces['xlink'], 'href') in attrs and re.search('^\s*[^#\s].*', attrs[(namespaces['xlink'], 'href')])): del attrs[(namespaces['xlink'], 'href')] if (None, 'style') in attrs: attrs[(None, 'style')] = self.sanitize_css(attrs[(None, 'style')]) token["data"] = attrs return token def disallowed_token(self, token): token_type = token["type"] if token_type == "EndTag": token["data"] = "" % token["name"] elif token["data"]: assert token_type in ("StartTag", "EmptyTag") attrs = [] for (ns, name), v in token["data"].items(): attrs.append(' %s="%s"' % (name if ns is None else "%s:%s" % (prefixes[ns], name), escape(v))) token["data"] = "<%s%s>" % (token["name"], ''.join(attrs)) else: token["data"] = "<%s>" % token["name"] if token.get("selfClosing"): token["data"] = token["data"][:-1] + "/>" token["type"] = "Characters" del token["name"] return token def sanitize_css(self, style): # disallow urls style = re.compile('url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ', style) # gauntlet if not re.match("""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style): return '' if not re.match("^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$", style): return '' clean = [] for prop, value in re.findall("([-\w]+)\s*:\s*([^:;]*)", style): if not value: continue if prop.lower() in self.allowed_css_properties: clean.append(prop + ': ' + value + ';') elif prop.split('-')[0].lower() in ['background', 'border', 'margin', 'padding']: for keyword in value.split(): if keyword not in self.allowed_css_keywords and \ not re.match("^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$", keyword): # noqa break else: clean.append(prop + ': ' + value + ';') elif prop.lower() in self.allowed_svg_properties: clean.append(prop + ': ' + value + ';') return ' '.join(clean) PKe%1]"filters/base.pynu[from __future__ import absolute_import, division, unicode_literals class Filter(object): def __init__(self, source): self.source = source def __iter__(self): return iter(self.source) def __getattr__(self, name): return getattr(self.source, name) PKe%1]0FF,filters/__pycache__/sanitizer.cpython-36.pycnu[3 B;W bE@s ddlmZmZmZddlZddlmZmZddlm Z ddl m Z ddl mZmZd gZeed d fed d fed d fed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed d fed d!fed d"fed d#fed d$fed d%fed d&fed d'fed d(fed d)fed d*fed d+fed d,fed d-fed d.fed d/fed d0fed d1fed d2fed d3fed d4fed d5fed d6fed d7fed d8fed d9fed d:fed d;fed dfed d?fed d@fed dAfed dBfed dCfed dDfed dEfed dFfed dGfed dHfed dIfed dJfed dKfed dLfed dMfed dNfed dOfed dPfed dQfed dRfed dSfed dTfed dUfed dVfed dWfed dXfed dYfed dZfed d[fed d\fed d]fed d^fed d_fed d`fed dafed dbfed dcfed ddfed defed dffed dgfed dhfed difed djfed dkfed dlfed dmfedndofedndpfedndqfedndrfedndsfedndtfedndufedndvfedndwfedndxfedndyfedndzfednd{fednd|fednd}fednd~fedndfedndfedndfedndfedndfedndfedndfedndfedndfedndfedndfedd feddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddffZed3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddded1dfdddd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ߐdddddddedOdfedOdPfedOd%fddddddddddddddddddddddddddddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcedOdfedOdfedOdfedOdfedOdPfedOdfedOd%fed1dfed1dfed1dfdddedfdgfCZedhdidjdkdldmdndodpdqdredOdfed1dff Zed~ZedZedZedZedZedZedZejd1ejZGd2d d e jZdS()absolute_importdivisionunicode_literalsN)escapeunescape) urllib_parse)base) namespacesprefixesFilterhtmlaabbrZacronymZaddressZareaZarticleZasideZaudiobZbigZ blockquotebrZbuttonZcanvasZcaptioncentercitecodecolZcolgroupZcommandZdatagridZdatalistZdddelZdetailsZdfnZdialogdirZdivZdlZdtZemz event-sourceZfieldsetZ figcaptionZfigureZfooterfontformheaderZh1Zh2Zh3Zh4Zh5Zh6ZhriZimginputZinsZkeygenZkbdlabelZlegendZlimmapZmenuZmeterZmulticolZnavZnextidZoloutputZoptgroupZoptionpZpreZprogressqsZsampZsectionZselectZsmallZsoundsourceZspacerspanZstrikeZstrongsubZsuptableZtbodyZtdZtextareaZtimeZtfootZthZtheadZtrZttuZulvarZvideoZmathmlZmactionZmathZmerrorZmfracZmiZ mmultiscriptsZmnmoZmoverZmpaddedZmphantomZ mprescriptsZmrootZmrowZmspaceZmsqrtZmstyleZmsubZmsubsupZmsupZmtableZmtdZmtextZmtrZmunderZ munderovernoneZsvganimate animateColor animateMotionanimateTransformZclipPathZcircleZdefsZdescZellipsez font-facezfont-face-namez font-face-srcgZglyphZhkernlinearGradientlinemarkerZmetadataz missing-glyphZmpathpathZpolygonZpolylineradialGradientZrectsetstopZswitchtexttitleZtspanuseacceptaccept-charset accesskeyactionalignalt autocomplete autofocusaxis backgroundbalancebgcolor bgpropertiesborder bordercolorbordercolordarkbordercolorlight bottompadding cellpadding cellspacingch challengecharcharoffchoffcharsetcheckedclassclearcolorcolscolspancompactcontenteditablecontrolscoordsdatadatafld datapagesizedatasrcdatetimedefaultdelaydisabled draggabledynsrcenctypeendfaceforframe galleryimggutterheadersheight hidefocushiddenhighhrefhreflanghspaceiconid inputmodeismapkeytype leftspacinglanglistlongdescloop loopcountloopend loopstartlowlowsrcmax maxlengthmediamethodminmultiplenamenohrefnoshadenowrapopenoptimumpatternping point-sizeposterpqgpreloadprompt radiogroupreadonlyrel repeat-max repeat-minreplacerequiredrev rightspacingrowsrowspanrulesscopeselectedshapesizesrcstartstepstylesummarysuppresstabindextargettemplate toppaddingtype unselectableusemapurnvalignvaluevariablevolumevspacevrmlwidthwrapZxml actiontype columnalign columnlines columnspacing columnspandepthdisplay displaystyle equalcolumns equalrowsfence fontstyle fontweight linethicknesslspacemathbackground mathcolor mathvariantmaxsizeminsizeotherrowalignrowlines rowspacingrspace scriptlevel selection separatorstretchyxlinkZshow accent-height accumulateadditive alphabetic arabic-formascent attributeName attributeType baseProfilebboxbeginbycalcMode cap-height clip-pathcolor-renderingcontentcxcyddxdydescentdurfill fill-opacity fill-rule font-family font-size font-stretch font-style font-variant font-weightfromfxfyg1g2 glyph-name gradientUnitshanging horiz-adv-xhoriz-origin-x ideographick keyPoints keySplineskeyTimes marker-end marker-mid marker-start markerHeight markerUnits markerWidth mathematicaloffsetopacityorientoriginoverline-positionoverline-thicknesspanose-1 pathLengthpointspreserveAspectRatiorrefXrefY repeatCount repeatDurrequiredExtensionsrequiredFeaturesrestartrotaterxryslopestemhstemv stop-color stop-opacitystrikethrough-positionstrikethrough-thicknessstrokestroke-dasharraystroke-dashoffsetstroke-linecapstroke-linejoinstroke-miterlimitstroke-opacity stroke-widthsystemLanguage text-anchorto transformu1u2underline-positionunderline-thicknessunicode unicode-range units-per-emvaluesversionviewBox visibilitywidthsxx-heightx1x2ZactuateZarcroleZroler Zspaceyy1y2 zoomAndPan color-profilecursorfiltermaskaltGlyphfeImagetextpathtrefazimuthbackground-colorborder-bottom-colorborder-collapse border-colorborder-left-colorborder-right-colorborder-top-color direction elevationfloatletter-spacing line-heightoverflowpause pause-after pause-beforepitch pitch-rangerichnessspeak speak-header speak-numeralspeak-punctuation speech-ratestress text-aligntext-decoration text-indent unicode-bidivertical-align voice-family white-spaceautoaquablackblockblueboldbothbottombrowncollapsedasheddottedfuchsiagraygreen !importantitalicleftlimemaroonmediumnavynormalolivepointerpurpleredrightsolidsilvertealtop transparent underlinewhiteyellowed2kftphttphttpsircmailtonewsgophernntptelnetwebcalxmppcalltofeedaimrsynctagsshsftprtspafs image/png image/jpeg image/gif image/webp image/bmp text/plainaL ^ # Match a content type / (?P[-a-zA-Z0-9.]+/[-a-zA-Z0-9.]+) # Match any character set and encoding (?:(?:;charset=(?:[-a-zA-Z0-9]+)(?:;(?:base64))?) |(?:;(?:base64))?(?:;charset=(?:[-a-zA-Z0-9]+))?) # Assume the rest is data ,.* $ c s^eZdZdZeeeeee e e e e f fdd ZddZddZdd Zd d Zd d ZZS)r zA sanitization of XHTML+MathML+SVG and of inline style attributes.c sPtt|j|||_||_||_||_||_||_||_ | |_ | |_ | |_ dS)N) superr __init__allowed_elementsallowed_attributesallowed_css_propertiesallowed_css_keywordsallowed_svg_propertiesallowed_protocolsallowed_content_typesattr_val_is_urisvg_attr_val_allows_refsvg_allow_local_href) selfr%rrrrrrrrrr) __class__/usr/lib/python3.6/sanitizer.pyrs zFilter.__init__ccs.x(tjj|D]}|j|}|r|VqWdS)N)r r __iter__sanitize_token)rtokenrrrrs zFilter.__iter__cCsp|d}|d kr^|d}|d}||f|jksH|dkrRtd|f|jkrR|j|S|j|Sn|dkrhn|SdS) NrStartTagEndTagEmptyTagr namespacerComment)rrr)rr allowed_tokendisallowed_token)rr token_typerrrrrrs  zFilter.sanitize_tokenc Csd|kr|d}t|j}x&||jD]}|d|=|j|q*Wx||j@D]}||ksbttjddt||j }|j dd}yt j |}Wnt k rd}||=YnX|o|j rR|j |jkr||=|j dkrRtj|j}|s||=qR|jd|jkrR||=qRWx4|jD]*}||krtjddt||||<qW|d|jkrtd d f|krtjd |td d fr|td d f=d |kr|j|d|d<||d<|S)Nr`u [`- - \s]+u�Z content_typezurl\s*\(\s*[^#\s][^)]+?\) rrrvz ^\s*[^#\s].*r)Nr)Nr)Nr)r7keysrremoverAssertionErrorrer'rlowerrurlparse ValueErrorschemerdata_content_typematchr5grouprrrr search sanitize_css) rrattrsZ attr_namesZ to_removeattrZ val_unescapedZurirrrrrsL              zFilter.allowed_tokencCs|d}|dkr"d|d|d<n|dr|dks6tg}xJ|djD]:\\}}}|jd|dkrf|nd t||ft|fqHWd |dd j|f|d<nd |d|d<|jd r|dddd|d<d|d<|d=|S)Nrrzrr`rrz %s="%s"z%s:%sz<%s%s>rz<%s>Z selfClosingrz/>Z Characters)rr)ritemsappendr rjoinget)rrrrnsrvrrrr2s 2 zFilter.disallowed_tokencCstjdjd|}tjd|s"dStjd|s2dSg}xtjd|D]\}}|sRqD|j|jkrx|j|d|dqD|jd d jdkrxf|jD]}||j krtjd| rPqW|j|d|dqD|j|j krD|j|d|dqDWdj |S)Nzurl\s*\(\s*[^\s)]+?\s*\)\s*rz@^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$rz ^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$z([-\w]+)\s*:\s*([^:;]*)z: ;-rrErImarginpaddingz\^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$)rErIrr) rcompiler'rfindallrrrsplitrrr)rrZcleanZproprkeywordrrrrFs*   zFilter.sanitize_css)__name__ __module__ __qualname____doc__rrrrrrrrrrrrrrrr __classcell__rr)rrr s  2)Nr)Nr<)Nr=)Nr>)Nr?)Nr@)NrA)NrB)NrC)NrD)NrE)NrF)NrG)NrH)NrI)NrJ)NrK)NrL)NrM)NrN)NrO)NrP)NrQ)NrR)NrS)NrT)NrU)NrV)Nr)NrW)NrX)NrY)NrZ)Nr[)Nr\)Nr])Nr^)Nr_)Nr`)Nra)Nrb)Nrc)Nrd)Nre)Nrf)Nr)Nrg)Nrh)Nri)Nrj)Nrk)Nrl)Nrm)Nr)Nrn)Nro)Nrp)Nrq)Nrr)Nrs)Nrt)Nru)Nrv)Nrw)Nrx)Nry)Nrz)Nr{)Nr|)Nr})Nr)Nr~)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr&)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr:)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr@)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nrn)Nrr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)NrW)Nr)NrY)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nrk)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nrr)Nr)Nr )Nrz)Nr )Nr )Nr )Nr )Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr5)Nr)Nr)Nr)Nr )Nr!)Nr")Nr#)Nr$)Nr%)Nr&)Nr')Nr()Nr))Nr*)Nr+)Nr,)Nr-)Nr.)Nr/)Nr0)Nr1)Nr2)Nr3)Nr4)Nr5)Nr6)Nr7)Nr8)Nr9)Nr:)Nr)Nr;)Nr<)Nr=)Nr)Nr>)Nr?)Nr@)NrA)NrB)NrC)NrD)NrE)NrF)NrG)NrH)Nr)NrI)NrJ)NrK)NrL)NrM)NrN)NrO)NrP)NrQ)Nrv)Nr)Nr)Nr?)Nr)Nr)NrE)Nrc)Nri)Nr)NrNrNrRNrSNrNrTNr4NrNrNrNrUNr2) rrrrrrrrrrrNrVNr-Nr.Nr/Nr0NrSNrWNrTNr2NrNr6NrXNrYNr7Nr;)rrrrr r r r r rrrrrr).rZr[r\r]r^r_r`rarXrYrSrbrrcrdrrrrrrrrrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrrzr)'r{r|r}r~rrrrrrrrrrrrrrrrrrr,rrrrrrrrrrrrrrrr)rrrr2r9r5r6r8)rrrrrrrrrrrrrrrrrrrrrrr`)rrrrrr) Z __future__rrrrZxml.sax.saxutilsrrZ six.movesrrrr Z constantsr r __all__ frozensetrrrrrrrrrrrVERBOSErr rrrrs2                                                                                                                                                                          PKe%1]Tt*Gqq1filters/__pycache__/__init__.cpython-36.opt-1.pycnu[3 B;W@sdS)Nrrr/usr/lib/python3.6/__init__.pysPKe%1]lNN<filters/__pycache__/inject_meta_charset.cpython-36.opt-1.pycnu[3 B;W @s6ddlmZmZmZddlmZGdddejZdS))absolute_importdivisionunicode_literals)basec@seZdZddZddZdS)FiltercCstjj||||_dS)N)rr__init__encoding)selfsourcer r )/usr/lib/python3.6/inject_meta_charset.pyrszFilter.__init__c csd}|jdk}g}xtjj|D]}|d}|dkrP|djdkrLd}np|dkrV|djdkrd }x|d jD]V\\}}} |dk rq~q~|jd kr|j|d ||f<d }Pq~|d kr~| jdkr~d }q~W|od|d krTd|j|d d<d }nR|djdkr| rdd|d dVddd|jidVdddVd }q"nj|dkr|djdkr|r|jdV|sddd|jidVx|r|jdVqWd }d}|dkr|j|q"|Vq"WdS)NZpre_headtypeZStartTagnameheadZin_headZEmptyTagmetaFdatacharsetTz http-equivz content-typecontentztext/html; charset=%s)rrrZEndTag)rrrZ post_head)Nr)Nr)Nr)Nr)r rr__iter__loweritemspopappend) r stateZ meta_foundpendingtokenrZhas_http_equiv_content_type namespacervaluer r r r sX        zFilter.__iter__N)__name__ __module__ __qualname__rrr r r r rsrN)Z __future__rrrrrr r r r s PKe%1]Z9filters/__pycache__/alphabeticalattributes.cpython-36.pycnu[3 B;Wm @shddlmZmZmZddlmZyddlmZWn ek rPddl mZYnXGdddej Z dS))absolute_importdivisionunicode_literals)base) OrderedDictc@seZdZddZdS)Filterccshxbtjj|D]R}|ddkrZt}x,t|djdddD]\}}|||<q>W||d<|VqWdS) NtypeStartTagEmptyTagdatacSs|dS)Nr)xr r ,/usr/lib/python3.6/alphabeticalattributes.pysz!Filter.__iter__..)key)r r )rr__iter__rsorteditems)selftokenZattrsnamevaluer r rr s  zFilter.__iter__N)__name__ __module__ __qualname__rr r r rr srN) Z __future__rrrr collectionsr ImportErrorZ ordereddictrr r r rs  PKe%1]'filters/__pycache__/lint.cpython-36.pycnu[3 B;W @shddlmZmZmZddlmZddlmZddlm Z m Z ddlm Z dj e Z Gd d d ej Z d S) )absolute_importdivisionunicode_literals) text_type)base) namespaces voidElements)spaceCharacterscs&eZdZdfdd ZddZZS)FilterTcstt|j|||_dS)N)superr __init__require_matching_tags)selfsourcer) __class__/usr/lib/python3.6/lint.pyr szFilter.__init__c csRg}xFtjj|D]4}|d}|dkrP|d}|d}|dksRt|tsRt|dks^tt|tslt|dksxtt|dtst| s|tdkr|tkr|dkstn |dkst|dkr|j r|j ||fxp|dj D]`\\}}}|dkst|tst|dkstt|ts,t|dks:tt|tstqWn|d kr|d}|d}|dkst|tst|dkstt|tst|dkst| s|tdkr|tkrd s td d |in"|j rD|j }|||fksDtn6|d kr4|d}t|tsDtn|dkr|d}t|tsVt|dksdt|dkrD|j tdksDtn|dkr|d}|dkst|tst|ddkst|tst|ddksDt|tsDtnV|dkrt|dtsDtn6|dkr.t|dtsDtnd sDtdd|i|VqWdS)NtypeStartTagEmptyTag namespacenamer dataZhtmlZEndTagFz.Void element reported as EndTag token: %(tag)stagComment CharactersSpaceCharactersZDoctypeZpublicIdZsystemIdZEntityZSerializerErrorzUnknown token type: %(type)s)rr)rr)rr __iter__ isinstancerAssertionErrordictr r rappenditemspopstripr ) rZ open_elementstokenrrrvaluestartrrrrr sl             zFilter.__iter__)T)__name__ __module__ __qualname__rr __classcell__rr)rrr sr N)Z __future__rrrZsixrr rZ constantsr r r joinr rrrrs     PKe%1]Y-filters/__pycache__/whitespace.cpython-36.pycnu[3 B;Ws@snddlmZmZmZddlZddlmZddlmZm Z dj e Z ej de Z Gd d d ej Z d d ZdS) )absolute_importdivisionunicode_literalsN)base)rcdataElementsspaceCharactersz[%s]+c@s(eZdZeddgeeZddZdS)FilterZpreZtextareaccsd}xtjj|D]}|d}|dkrB|s8|d|jkrB|d7}nT|dkrX|rX|d8}n>| rx|dkrx|drxd |d<n| r|d krt|d|d<|VqWdS) NrtypeZStartTagnamerZEndTagZSpaceCharactersdata Z Characters)rr __iter__spacePreserveElementscollapse_spaces)selfZpreservetokenr r /usr/lib/python3.6/whitespace.pyrs    zFilter.__iter__N)__name__ __module__ __qualname__ frozensetlistrrrrrrrr sr cCs tjd|S)Nr) SPACES_REGEXsub)textrrrr%sr)Z __future__rrrrer rZ constantsrr joincompilerr rrrrrs  PKe%1]э /filters/__pycache__/optionaltags.cpython-36.pycnu[3 B;W&)@s6ddlmZmZmZddlmZGdddejZdS))absolute_importdivisionunicode_literals)basec@s,eZdZddZddZddZddZd S) FilterccsLd}}x*|jD] }|dk r(|||fV|}|}qW|dk rH||dfVdS)N)source)selfZ previous1Z previous2tokenr "/usr/lib/python3.6/optionaltags.pysliders  z Filter.sliderccsvxp|jD]d\}}}|d}|dkrH|ds@|j|d|| rn|Vq |dkrh|j|d|sn|Vq |Vq WdS)NtypeStartTagdatanameEndTag)r is_optional_startis_optional_end)r previousr nextrr r r __iter__szFilter.__iter__cCs|r |dpd}|dkr |dkS|dkrJ|dkr4dS|d krH|d dkSn|d krx|dkr^d S|dkrr|d dkSdSnd|dkr|dkr|d dkSd SnB|dkr|dkr|r|dd kr|d dkrd S|d dkSd Sd S)NrhtmlCommentSpaceCharactersheadrEmptyTagTrrbodyFscriptstylecolgroupcoltbodytheadtfoottr)rr)rr)rr)rr)rr)r"r#r$r )r tagnamerrrr r r rs4     zFilter.is_optional_startcCs |r |dpd}|d7kr |d8kS|d9krP|d kr<|d |kS|d kpJ|dkSn|d:kr|d krl|d d;kS|dkr|d kp|dkSdSn||dkr|dkS|d kp|dkSn|d?kr,|d kr|d d@kS|d kp(|dkSn|d0kr`|dAkrDdS|d krZ|d d0kSd1Sn|dBkr|d kr|d dCkS|d3kr|d kp|dkSdSnf|d4kr|d kr|d d3kS|d kp|dkSn2|dDkr|d kr|d dEkS|d kp|dkSdS)FNrrrrrrlioptgroupr%rrrdtddFpraddressarticleaside blockquotedatagriddialogdirdivdlfieldsetfooterformh1h2h3h4h5h6headerhrmenunavolpresectiontableuloptionrtrpr Tr#r"r$tdth)rrr)rr)r'r(r%)r)r*)r)r*)rr)r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBr+rCrDrErF)rGr()rHrI)rHrI)rr)r#r")r"r$)rJrK)rJrKr )r r&rrr r r rWsf                        zFilter.is_optional_endN)__name__ __module__ __qualname__r rrrr r r r rs  9rN)Z __future__rrrrrr r r r s PKe%1]AEE2filters/__pycache__/sanitizer.cpython-36.opt-1.pycnu[3 B;W bE@s ddlmZmZmZddlZddlmZmZddlm Z ddl m Z ddl mZmZd gZeed d fed d fed d fed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed dfed d fed d!fed d"fed d#fed d$fed d%fed d&fed d'fed d(fed d)fed d*fed d+fed d,fed d-fed d.fed d/fed d0fed d1fed d2fed d3fed d4fed d5fed d6fed d7fed d8fed d9fed d:fed d;fed dfed d?fed d@fed dAfed dBfed dCfed dDfed dEfed dFfed dGfed dHfed dIfed dJfed dKfed dLfed dMfed dNfed dOfed dPfed dQfed dRfed dSfed dTfed dUfed dVfed dWfed dXfed dYfed dZfed d[fed d\fed d]fed d^fed d_fed d`fed dafed dbfed dcfed ddfed defed dffed dgfed dhfed difed djfed dkfed dlfed dmfedndofedndpfedndqfedndrfedndsfedndtfedndufedndvfedndwfedndxfedndyfedndzfednd{fednd|fednd}fednd~fedndfedndfedndfedndfedndfedndfedndfedndfedndfedndfedndfedd feddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddfeddffZed3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddded1dfdddd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ߐdddddddedOdfedOdPfedOd%fddddddddddddddddddddddddddddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcedOdfedOdfedOdfedOdfedOdPfedOdfedOd%fed1dfed1dfed1dfdddedfdgfCZedhdidjdkdldmdndodpdqdredOdfed1dff Zed~ZedZedZedZedZedZedZejd1ejZGd2d d e jZdS()absolute_importdivisionunicode_literalsN)escapeunescape) urllib_parse)base) namespacesprefixesFilterhtmlaabbrZacronymZaddressZareaZarticleZasideZaudiobZbigZ blockquotebrZbuttonZcanvasZcaptioncentercitecodecolZcolgroupZcommandZdatagridZdatalistZdddelZdetailsZdfnZdialogdirZdivZdlZdtZemz event-sourceZfieldsetZ figcaptionZfigureZfooterfontformheaderZh1Zh2Zh3Zh4Zh5Zh6ZhriZimginputZinsZkeygenZkbdlabelZlegendZlimmapZmenuZmeterZmulticolZnavZnextidZoloutputZoptgroupZoptionpZpreZprogressqsZsampZsectionZselectZsmallZsoundsourceZspacerspanZstrikeZstrongsubZsuptableZtbodyZtdZtextareaZtimeZtfootZthZtheadZtrZttuZulvarZvideoZmathmlZmactionZmathZmerrorZmfracZmiZ mmultiscriptsZmnmoZmoverZmpaddedZmphantomZ mprescriptsZmrootZmrowZmspaceZmsqrtZmstyleZmsubZmsubsupZmsupZmtableZmtdZmtextZmtrZmunderZ munderovernoneZsvganimate animateColor animateMotionanimateTransformZclipPathZcircleZdefsZdescZellipsez font-facezfont-face-namez font-face-srcgZglyphZhkernlinearGradientlinemarkerZmetadataz missing-glyphZmpathpathZpolygonZpolylineradialGradientZrectsetstopZswitchtexttitleZtspanuseacceptaccept-charset accesskeyactionalignalt autocomplete autofocusaxis backgroundbalancebgcolor bgpropertiesborder bordercolorbordercolordarkbordercolorlight bottompadding cellpadding cellspacingch challengecharcharoffchoffcharsetcheckedclassclearcolorcolscolspancompactcontenteditablecontrolscoordsdatadatafld datapagesizedatasrcdatetimedefaultdelaydisabled draggabledynsrcenctypeendfaceforframe galleryimggutterheadersheight hidefocushiddenhighhrefhreflanghspaceiconid inputmodeismapkeytype leftspacinglanglistlongdescloop loopcountloopend loopstartlowlowsrcmax maxlengthmediamethodminmultiplenamenohrefnoshadenowrapopenoptimumpatternping point-sizeposterpqgpreloadprompt radiogroupreadonlyrel repeat-max repeat-minreplacerequiredrev rightspacingrowsrowspanrulesscopeselectedshapesizesrcstartstepstylesummarysuppresstabindextargettemplate toppaddingtype unselectableusemapurnvalignvaluevariablevolumevspacevrmlwidthwrapZxml actiontype columnalign columnlines columnspacing columnspandepthdisplay displaystyle equalcolumns equalrowsfence fontstyle fontweight linethicknesslspacemathbackground mathcolor mathvariantmaxsizeminsizeotherrowalignrowlines rowspacingrspace scriptlevel selection separatorstretchyxlinkZshow accent-height accumulateadditive alphabetic arabic-formascent attributeName attributeType baseProfilebboxbeginbycalcMode cap-height clip-pathcolor-renderingcontentcxcyddxdydescentdurfill fill-opacity fill-rule font-family font-size font-stretch font-style font-variant font-weightfromfxfyg1g2 glyph-name gradientUnitshanging horiz-adv-xhoriz-origin-x ideographick keyPoints keySplineskeyTimes marker-end marker-mid marker-start markerHeight markerUnits markerWidth mathematicaloffsetopacityorientoriginoverline-positionoverline-thicknesspanose-1 pathLengthpointspreserveAspectRatiorrefXrefY repeatCount repeatDurrequiredExtensionsrequiredFeaturesrestartrotaterxryslopestemhstemv stop-color stop-opacitystrikethrough-positionstrikethrough-thicknessstrokestroke-dasharraystroke-dashoffsetstroke-linecapstroke-linejoinstroke-miterlimitstroke-opacity stroke-widthsystemLanguage text-anchorto transformu1u2underline-positionunderline-thicknessunicode unicode-range units-per-emvaluesversionviewBox visibilitywidthsxx-heightx1x2ZactuateZarcroleZroler Zspaceyy1y2 zoomAndPan color-profilecursorfiltermaskaltGlyphfeImagetextpathtrefazimuthbackground-colorborder-bottom-colorborder-collapse border-colorborder-left-colorborder-right-colorborder-top-color direction elevationfloatletter-spacing line-heightoverflowpause pause-after pause-beforepitch pitch-rangerichnessspeak speak-header speak-numeralspeak-punctuation speech-ratestress text-aligntext-decoration text-indent unicode-bidivertical-align voice-family white-spaceautoaquablackblockblueboldbothbottombrowncollapsedasheddottedfuchsiagraygreen !importantitalicleftlimemaroonmediumnavynormalolivepointerpurpleredrightsolidsilvertealtop transparent underlinewhiteyellowed2kftphttphttpsircmailtonewsgophernntptelnetwebcalxmppcalltofeedaimrsynctagsshsftprtspafs image/png image/jpeg image/gif image/webp image/bmp text/plainaL ^ # Match a content type / (?P[-a-zA-Z0-9.]+/[-a-zA-Z0-9.]+) # Match any character set and encoding (?:(?:;charset=(?:[-a-zA-Z0-9]+)(?:;(?:base64))?) |(?:;(?:base64))?(?:;charset=(?:[-a-zA-Z0-9]+))?) # Assume the rest is data ,.* $ c s^eZdZdZeeeeee e e e e f fdd ZddZddZdd Zd d Zd d ZZS)r zA sanitization of XHTML+MathML+SVG and of inline style attributes.c sPtt|j|||_||_||_||_||_||_||_ | |_ | |_ | |_ dS)N) superr __init__allowed_elementsallowed_attributesallowed_css_propertiesallowed_css_keywordsallowed_svg_propertiesallowed_protocolsallowed_content_typesattr_val_is_urisvg_attr_val_allows_refsvg_allow_local_href) selfr%rrrrrrrrrr) __class__/usr/lib/python3.6/sanitizer.pyrs zFilter.__init__ccs.x(tjj|D]}|j|}|r|VqWdS)N)r r __iter__sanitize_token)rtokenrrrrs zFilter.__iter__cCsp|d}|d kr^|d}|d}||f|jksH|dkrRtd|f|jkrR|j|S|j|Sn|dkrhn|SdS) NrStartTagEndTagEmptyTagr namespacerComment)rrr)rr allowed_tokendisallowed_token)rr token_typerrrrrrs  zFilter.sanitize_tokenc Csd|kr|d}t|j}x&||jD]}|d|=|j|q*Wx||j@D]}tjddt||j}|j dd}yt j |}Wnt k rd}||=YnX|o|j rR|j |j kr||=|j dkrRtj|j}|s||=qR|jd|jkrR||=qRWx4|jD]*}||kr tjddt||||<q W|d|jkrtd d f|krtjd |td d fr|td d f=d |kr|j|d|d<||d<|S)Nr`u [`- - \s]+u�Z content_typezurl\s*\(\s*[^#\s][^)]+?\) rrrvz ^\s*[^#\s].*r)Nr)Nr)Nr)r7keysrremoverrer'rlowerrurlparse ValueErrorschemerdata_content_typematchr5grouprrrr search sanitize_css) rrattrsZ attr_namesZ to_removeattrZ val_unescapedZurirrrrrsJ             zFilter.allowed_tokencCs|d}|dkr"d|d|d<n|drg}xJ|djD]:\\}}}|jd|dkrZ|ndt||ft|fqrr`z %s="%s"z%s:%sz<%s%s>rz<%s>Z selfClosingrz/>Z Characters)itemsappendr rjoinget)rrrrnsrvrrrr2s2 zFilter.disallowed_tokencCstjdjd|}tjd|s"dStjd|s2dSg}xtjd|D]\}}|sRqD|j|jkrx|j|d|dqD|jd d jdkrxf|jD]}||j krtjd| rPqW|j|d|dqD|j|j krD|j|d|dqDWdj |S)Nzurl\s*\(\s*[^\s)]+?\s*\)\s*rz@^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$rz ^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$z([-\w]+)\s*:\s*([^:;]*)z: ;-rrErImarginpaddingz\^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$)rErIrr) rcompiler'rfindallrrrsplitrrr)rrZcleanZproprkeywordrrrrFs*   zFilter.sanitize_css)__name__ __module__ __qualname____doc__rrrrrrrrrrrrrrrr __classcell__rr)rrr s  2)Nr)Nr<)Nr=)Nr>)Nr?)Nr@)NrA)NrB)NrC)NrD)NrE)NrF)NrG)NrH)NrI)NrJ)NrK)NrL)NrM)NrN)NrO)NrP)NrQ)NrR)NrS)NrT)NrU)NrV)Nr)NrW)NrX)NrY)NrZ)Nr[)Nr\)Nr])Nr^)Nr_)Nr`)Nra)Nrb)Nrc)Nrd)Nre)Nrf)Nr)Nrg)Nrh)Nri)Nrj)Nrk)Nrl)Nrm)Nr)Nrn)Nro)Nrp)Nrq)Nrr)Nrs)Nrt)Nru)Nrv)Nrw)Nrx)Nry)Nrz)Nr{)Nr|)Nr})Nr)Nr~)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr&)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr:)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr@)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nrn)Nrr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)NrW)Nr)NrY)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nrk)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nrr)Nr)Nr )Nrz)Nr )Nr )Nr )Nr )Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr)Nr5)Nr)Nr)Nr)Nr )Nr!)Nr")Nr#)Nr$)Nr%)Nr&)Nr')Nr()Nr))Nr*)Nr+)Nr,)Nr-)Nr.)Nr/)Nr0)Nr1)Nr2)Nr3)Nr4)Nr5)Nr6)Nr7)Nr8)Nr9)Nr:)Nr)Nr;)Nr<)Nr=)Nr)Nr>)Nr?)Nr@)NrA)NrB)NrC)NrD)NrE)NrF)NrG)NrH)Nr)NrI)NrJ)NrK)NrL)NrM)NrN)NrO)NrP)NrQ)Nrv)Nr)Nr)Nr?)Nr)Nr)NrE)Nrc)Nri)Nr)NrNrNrRNrSNrNrTNr4NrNrNrNrUNr2) rrrrrrrrrrrNrVNr-Nr.Nr/Nr0NrSNrWNrTNr2NrNr6NrXNrYNr7Nr;)rrrrrr r r r r rrrrr).rZr[r\r]r^r_r`rarXrYrSrbrrcrdrrrrrrrrrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrrzr)'r{r|r}r~rrrrrrrrrrrrrrrrrrr,rrrrrrrrrrrrrrrr)rrrr2r9r5r6r8)rrrrrrrrrrrrrrrrrrrrrrr`)rrrrrr) Z __future__rrrrZxml.sax.saxutilsrrZ six.movesrrrr Z constantsr r __all__ frozensetrrrrrrrrrrrVERBOSErr rrrrs2                                                                                                                                                                          PKe%1]Z?filters/__pycache__/alphabeticalattributes.cpython-36.opt-1.pycnu[3 B;Wm @shddlmZmZmZddlmZyddlmZWn ek rPddl mZYnXGdddej Z dS))absolute_importdivisionunicode_literals)base) OrderedDictc@seZdZddZdS)Filterccshxbtjj|D]R}|ddkrZt}x,t|djdddD]\}}|||<q>W||d<|VqWdS) NtypeStartTagEmptyTagdatacSs|dS)Nr)xr r ,/usr/lib/python3.6/alphabeticalattributes.pysz!Filter.__iter__..)key)r r )rr__iter__rsorteditems)selftokenZattrsnamevaluer r rr s  zFilter.__iter__N)__name__ __module__ __qualname__rr r r rr srN) Z __future__rrrr collectionsr ImportErrorZ ordereddictrr r r rs  PKe%1]Y3filters/__pycache__/whitespace.cpython-36.opt-1.pycnu[3 B;Ws@snddlmZmZmZddlZddlmZddlmZm Z dj e Z ej de Z Gd d d ej Z d d ZdS) )absolute_importdivisionunicode_literalsN)base)rcdataElementsspaceCharactersz[%s]+c@s(eZdZeddgeeZddZdS)FilterZpreZtextareaccsd}xtjj|D]}|d}|dkrB|s8|d|jkrB|d7}nT|dkrX|rX|d8}n>| rx|dkrx|drxd |d<n| r|d krt|d|d<|VqWdS) NrtypeZStartTagnamerZEndTagZSpaceCharactersdata Z Characters)rr __iter__spacePreserveElementscollapse_spaces)selfZpreservetokenr r /usr/lib/python3.6/whitespace.pyrs    zFilter.__iter__N)__name__ __module__ __qualname__ frozensetlistrrrrrrrr sr cCs tjd|S)Nr) SPACES_REGEXsub)textrrrr%sr)Z __future__rrrrer rZ constantsrr joincompilerr rrrrrs  PKe%1]э 5filters/__pycache__/optionaltags.cpython-36.opt-1.pycnu[3 B;W&)@s6ddlmZmZmZddlmZGdddejZdS))absolute_importdivisionunicode_literals)basec@s,eZdZddZddZddZddZd S) FilterccsLd}}x*|jD] }|dk r(|||fV|}|}qW|dk rH||dfVdS)N)source)selfZ previous1Z previous2tokenr "/usr/lib/python3.6/optionaltags.pysliders  z Filter.sliderccsvxp|jD]d\}}}|d}|dkrH|ds@|j|d|| rn|Vq |dkrh|j|d|sn|Vq |Vq WdS)NtypeStartTagdatanameEndTag)r is_optional_startis_optional_end)r previousr nextrr r r __iter__szFilter.__iter__cCs|r |dpd}|dkr |dkS|dkrJ|dkr4dS|d krH|d dkSn|d krx|dkr^d S|dkrr|d dkSdSnd|dkr|dkr|d dkSd SnB|dkr|dkr|r|dd kr|d dkrd S|d dkSd Sd S)NrhtmlCommentSpaceCharactersheadrEmptyTagTrrbodyFscriptstylecolgroupcoltbodytheadtfoottr)rr)rr)rr)rr)rr)r"r#r$r )r tagnamerrrr r r rs4     zFilter.is_optional_startcCs |r |dpd}|d7kr |d8kS|d9krP|d kr<|d |kS|d kpJ|dkSn|d:kr|d krl|d d;kS|dkr|d kp|dkSdSn||dkr|dkS|d kp|dkSn|d?kr,|d kr|d d@kS|d kp(|dkSn|d0kr`|dAkrDdS|d krZ|d d0kSd1Sn|dBkr|d kr|d dCkS|d3kr|d kp|dkSdSnf|d4kr|d kr|d d3kS|d kp|dkSn2|dDkr|d kr|d dEkS|d kp|dkSdS)FNrrrrrrlioptgroupr%rrrdtddFpraddressarticleaside blockquotedatagriddialogdirdivdlfieldsetfooterformh1h2h3h4h5h6headerhrmenunavolpresectiontableuloptionrtrpr Tr#r"r$tdth)rrr)rr)r'r(r%)r)r*)r)r*)rr)r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBr+rCrDrErF)rGr()rHrI)rHrI)rr)r#r")r"r$)rJrK)rJrKr )r r&rrr r r rWsf                        zFilter.is_optional_endN)__name__ __module__ __qualname__r rrrr r r r rs  9rN)Z __future__rrrrrr r r r s PKe%1]lNN6filters/__pycache__/inject_meta_charset.cpython-36.pycnu[3 B;W @s6ddlmZmZmZddlmZGdddejZdS))absolute_importdivisionunicode_literals)basec@seZdZddZddZdS)FiltercCstjj||||_dS)N)rr__init__encoding)selfsourcer r )/usr/lib/python3.6/inject_meta_charset.pyrszFilter.__init__c csd}|jdk}g}xtjj|D]}|d}|dkrP|djdkrLd}np|dkrV|djdkrd }x|d jD]V\\}}} |dk rq~q~|jd kr|j|d ||f<d }Pq~|d kr~| jdkr~d }q~W|od|d krTd|j|d d<d }nR|djdkr| rdd|d dVddd|jidVdddVd }q"nj|dkr|djdkr|r|jdV|sddd|jidVx|r|jdVqWd }d}|dkr|j|q"|Vq"WdS)NZpre_headtypeZStartTagnameheadZin_headZEmptyTagmetaFdatacharsetTz http-equivz content-typecontentztext/html; charset=%s)rrrZEndTag)rrrZ post_head)Nr)Nr)Nr)Nr)r rr__iter__loweritemspopappend) r stateZ meta_foundpendingtokenrZhas_http_equiv_content_type namespacervaluer r r r sX        zFilter.__iter__N)__name__ __module__ __qualname__rrr r r r rsrN)Z __future__rrrrrr r r r s PKe%1]e  -filters/__pycache__/lint.cpython-36.opt-1.pycnu[3 B;W @shddlmZmZmZddlmZddlmZddlm Z m Z ddlm Z dj e Z Gd d d ej Z d S) )absolute_importdivisionunicode_literals) text_type)base) namespaces voidElements)spaceCharacterscs&eZdZdfdd ZddZZS)FilterTcstt|j|||_dS)N)superr __init__require_matching_tags)selfsourcer) __class__/usr/lib/python3.6/lint.pyr szFilter.__init__c cs@g}x4tjj|D]"}|d}|dkr|d}|d}| sL|tdkrV|tkrVn|dkrr|jrr|j||fx|djD] \\}}}qWn|dkr|d}|d}| s|tdkr|tkrn|jr|j}n\|d kr|d}nJ|dkr|d}|d kr2n,|d kr|d}n|d kr&n |dkr2n|VqWdS)NtypeStartTagEmptyTag namespacenameZhtmldataZEndTagComment CharactersSpaceCharactersZDoctypeZEntityZSerializerError)rr)rr) rr __iter__r r rappenditemspop) rZ open_elementstokenrrrvaluestartrrrrrsF     zFilter.__iter__)T)__name__ __module__ __qualname__rr __classcell__rr)rrr sr N)Z __future__rrrZsixrr rZ constantsr r r joinr rrrrs     PKe%1]<-filters/__pycache__/base.cpython-36.opt-1.pycnu[3 B;W@s(ddlmZmZmZGdddeZdS))absolute_importdivisionunicode_literalsc@s$eZdZddZddZddZdS)FiltercCs ||_dS)N)source)selfrr/usr/lib/python3.6/base.py__init__szFilter.__init__cCs t|jS)N)iterr)rrrr __iter__szFilter.__iter__cCs t|j|S)N)getattrr)rnamerrr __getattr__ szFilter.__getattr__N)__name__ __module__ __qualname__r r rrrrr rsrN)Z __future__rrrobjectrrrrr sPKe%1]Tt*Gqq+filters/__pycache__/__init__.cpython-36.pycnu[3 B;W@sdS)Nrrr/usr/lib/python3.6/__init__.pysPKe%1]<'filters/__pycache__/base.cpython-36.pycnu[3 B;W@s(ddlmZmZmZGdddeZdS))absolute_importdivisionunicode_literalsc@s$eZdZddZddZddZdS)FiltercCs ||_dS)N)source)selfrr/usr/lib/python3.6/base.py__init__szFilter.__init__cCs t|jS)N)iterr)rrrr __iter__szFilter.__iter__cCs t|j|S)N)getattrr)rnamerrr __getattr__ szFilter.__getattr__N)__name__ __module__ __qualname__r r rrrrr rsrN)Z __future__rrrobjectrrrrr sPKe%1]F  filters/lint.pynu[from __future__ import absolute_import, division, unicode_literals from six import text_type from . import base from ..constants import namespaces, voidElements from ..constants import spaceCharacters spaceCharacters = "".join(spaceCharacters) class Filter(base.Filter): def __init__(self, source, require_matching_tags=True): super(Filter, self).__init__(source) self.require_matching_tags = require_matching_tags def __iter__(self): open_elements = [] for token in base.Filter.__iter__(self): type = token["type"] if type in ("StartTag", "EmptyTag"): namespace = token["namespace"] name = token["name"] assert namespace is None or isinstance(namespace, text_type) assert namespace != "" assert isinstance(name, text_type) assert name != "" assert isinstance(token["data"], dict) if (not namespace or namespace == namespaces["html"]) and name in voidElements: assert type == "EmptyTag" else: assert type == "StartTag" if type == "StartTag" and self.require_matching_tags: open_elements.append((namespace, name)) for (namespace, name), value in token["data"].items(): assert namespace is None or isinstance(namespace, text_type) assert namespace != "" assert isinstance(name, text_type) assert name != "" assert isinstance(value, text_type) elif type == "EndTag": namespace = token["namespace"] name = token["name"] assert namespace is None or isinstance(namespace, text_type) assert namespace != "" assert isinstance(name, text_type) assert name != "" if (not namespace or namespace == namespaces["html"]) and name in voidElements: assert False, "Void element reported as EndTag token: %(tag)s" % {"tag": name} elif self.require_matching_tags: start = open_elements.pop() assert start == (namespace, name) elif type == "Comment": data = token["data"] assert isinstance(data, text_type) elif type in ("Characters", "SpaceCharacters"): data = token["data"] assert isinstance(data, text_type) assert data != "" if type == "SpaceCharacters": assert data.strip(spaceCharacters) == "" elif type == "Doctype": name = token["name"] assert name is None or isinstance(name, text_type) assert token["publicId"] is None or isinstance(name, text_type) assert token["systemId"] is None or isinstance(name, text_type) elif type == "Entity": assert isinstance(token["name"], text_type) elif type == "SerializerError": assert isinstance(token["data"], text_type) else: assert False, "Unknown token type: %(type)s" % {"type": type} yield token PKe%1]!< filters/inject_meta_charset.pynu[from __future__ import absolute_import, division, unicode_literals from . import base class Filter(base.Filter): def __init__(self, source, encoding): base.Filter.__init__(self, source) self.encoding = encoding def __iter__(self): state = "pre_head" meta_found = (self.encoding is None) pending = [] for token in base.Filter.__iter__(self): type = token["type"] if type == "StartTag": if token["name"].lower() == "head": state = "in_head" elif type == "EmptyTag": if token["name"].lower() == "meta": # replace charset with actual encoding has_http_equiv_content_type = False for (namespace, name), value in token["data"].items(): if namespace is not None: continue elif name.lower() == 'charset': token["data"][(namespace, name)] = self.encoding meta_found = True break elif name == 'http-equiv' and value.lower() == 'content-type': has_http_equiv_content_type = True else: if has_http_equiv_content_type and (None, "content") in token["data"]: token["data"][(None, "content")] = 'text/html; charset=%s' % self.encoding meta_found = True elif token["name"].lower() == "head" and not meta_found: # insert meta into empty head yield {"type": "StartTag", "name": "head", "data": token["data"]} yield {"type": "EmptyTag", "name": "meta", "data": {(None, "charset"): self.encoding}} yield {"type": "EndTag", "name": "head"} meta_found = True continue elif type == "EndTag": if token["name"].lower() == "head" and pending: # insert meta into head (if necessary) and flush pending queue yield pending.pop(0) if not meta_found: yield {"type": "EmptyTag", "name": "meta", "data": {(None, "charset"): self.encoding}} while pending: yield pending.pop(0) meta_found = True state = "post_head" if state == "in_head": pending.append(token) else: yield token PKe%1]!$&)&)filters/optionaltags.pynu[from __future__ import absolute_import, division, unicode_literals from . import base class Filter(base.Filter): def slider(self): previous1 = previous2 = None for token in self.source: if previous1 is not None: yield previous2, previous1, token previous2 = previous1 previous1 = token if previous1 is not None: yield previous2, previous1, None def __iter__(self): for previous, token, next in self.slider(): type = token["type"] if type == "StartTag": if (token["data"] or not self.is_optional_start(token["name"], previous, next)): yield token elif type == "EndTag": if not self.is_optional_end(token["name"], next): yield token else: yield token def is_optional_start(self, tagname, previous, next): type = next and next["type"] or None if tagname in 'html': # An html element's start tag may be omitted if the first thing # inside the html element is not a space character or a comment. return type not in ("Comment", "SpaceCharacters") elif tagname == 'head': # A head element's start tag may be omitted if the first thing # inside the head element is an element. # XXX: we also omit the start tag if the head element is empty if type in ("StartTag", "EmptyTag"): return True elif type == "EndTag": return next["name"] == "head" elif tagname == 'body': # A body element's start tag may be omitted if the first thing # inside the body element is not a space character or a comment, # except if the first thing inside the body element is a script # or style element and the node immediately preceding the body # element is a head element whose end tag has been omitted. if type in ("Comment", "SpaceCharacters"): return False elif type == "StartTag": # XXX: we do not look at the preceding event, so we never omit # the body element's start tag if it's followed by a script or # a style element. return next["name"] not in ('script', 'style') else: return True elif tagname == 'colgroup': # A colgroup element's start tag may be omitted if the first thing # inside the colgroup element is a col element, and if the element # is not immediately preceded by another colgroup element whose # end tag has been omitted. if type in ("StartTag", "EmptyTag"): # XXX: we do not look at the preceding event, so instead we never # omit the colgroup element's end tag when it is immediately # followed by another colgroup element. See is_optional_end. return next["name"] == "col" else: return False elif tagname == 'tbody': # A tbody element's start tag may be omitted if the first thing # inside the tbody element is a tr element, and if the element is # not immediately preceded by a tbody, thead, or tfoot element # whose end tag has been omitted. if type == "StartTag": # omit the thead and tfoot elements' end tag when they are # immediately followed by a tbody element. See is_optional_end. if previous and previous['type'] == 'EndTag' and \ previous['name'] in ('tbody', 'thead', 'tfoot'): return False return next["name"] == 'tr' else: return False return False def is_optional_end(self, tagname, next): type = next and next["type"] or None if tagname in ('html', 'head', 'body'): # An html element's end tag may be omitted if the html element # is not immediately followed by a space character or a comment. return type not in ("Comment", "SpaceCharacters") elif tagname in ('li', 'optgroup', 'tr'): # A li element's end tag may be omitted if the li element is # immediately followed by another li element or if there is # no more content in the parent element. # An optgroup element's end tag may be omitted if the optgroup # element is immediately followed by another optgroup element, # or if there is no more content in the parent element. # A tr element's end tag may be omitted if the tr element is # immediately followed by another tr element, or if there is # no more content in the parent element. if type == "StartTag": return next["name"] == tagname else: return type == "EndTag" or type is None elif tagname in ('dt', 'dd'): # A dt element's end tag may be omitted if the dt element is # immediately followed by another dt element or a dd element. # A dd element's end tag may be omitted if the dd element is # immediately followed by another dd element or a dt element, # or if there is no more content in the parent element. if type == "StartTag": return next["name"] in ('dt', 'dd') elif tagname == 'dd': return type == "EndTag" or type is None else: return False elif tagname == 'p': # A p element's end tag may be omitted if the p element is # immediately followed by an address, article, aside, # blockquote, datagrid, dialog, dir, div, dl, fieldset, # footer, form, h1, h2, h3, h4, h5, h6, header, hr, menu, # nav, ol, p, pre, section, table, or ul, element, or if # there is no more content in the parent element. if type in ("StartTag", "EmptyTag"): return next["name"] in ('address', 'article', 'aside', 'blockquote', 'datagrid', 'dialog', 'dir', 'div', 'dl', 'fieldset', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'menu', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul') else: return type == "EndTag" or type is None elif tagname == 'option': # An option element's end tag may be omitted if the option # element is immediately followed by another option element, # or if it is immediately followed by an optgroup # element, or if there is no more content in the parent # element. if type == "StartTag": return next["name"] in ('option', 'optgroup') else: return type == "EndTag" or type is None elif tagname in ('rt', 'rp'): # An rt element's end tag may be omitted if the rt element is # immediately followed by an rt or rp element, or if there is # no more content in the parent element. # An rp element's end tag may be omitted if the rp element is # immediately followed by an rt or rp element, or if there is # no more content in the parent element. if type == "StartTag": return next["name"] in ('rt', 'rp') else: return type == "EndTag" or type is None elif tagname == 'colgroup': # A colgroup element's end tag may be omitted if the colgroup # element is not immediately followed by a space character or # a comment. if type in ("Comment", "SpaceCharacters"): return False elif type == "StartTag": # XXX: we also look for an immediately following colgroup # element. See is_optional_start. return next["name"] != 'colgroup' else: return True elif tagname in ('thead', 'tbody'): # A thead element's end tag may be omitted if the thead element # is immediately followed by a tbody or tfoot element. # A tbody element's end tag may be omitted if the tbody element # is immediately followed by a tbody or tfoot element, or if # there is no more content in the parent element. # A tfoot element's end tag may be omitted if the tfoot element # is immediately followed by a tbody element, or if there is no # more content in the parent element. # XXX: we never omit the end tag when the following element is # a tbody. See is_optional_start. if type == "StartTag": return next["name"] in ['tbody', 'tfoot'] elif tagname == 'tbody': return type == "EndTag" or type is None else: return False elif tagname == 'tfoot': # A tfoot element's end tag may be omitted if the tfoot element # is immediately followed by a tbody element, or if there is no # more content in the parent element. # XXX: we never omit the end tag when the following element is # a tbody. See is_optional_start. if type == "StartTag": return next["name"] == 'tbody' else: return type == "EndTag" or type is None elif tagname in ('td', 'th'): # A td element's end tag may be omitted if the td element is # immediately followed by a td or th element, or if there is # no more content in the parent element. # A th element's end tag may be omitted if the th element is # immediately followed by a td or th element, or if there is # no more content in the parent element. if type == "StartTag": return next["name"] in ('td', 'th') else: return type == "EndTag" or type is None return False PKe%1]filters/__init__.pynu[PKe%1]n|mm!filters/alphabeticalattributes.pynu[from __future__ import absolute_import, division, unicode_literals from . import base try: from collections import OrderedDict except ImportError: from ordereddict import OrderedDict class Filter(base.Filter): def __iter__(self): for token in base.Filter.__iter__(self): if token["type"] in ("StartTag", "EmptyTag"): attrs = OrderedDict() for name, value in sorted(token["data"].items(), key=lambda x: x[0]): attrs[name] = value token["data"] = attrs yield token PKe%1]Byhtml5parser.pynu[from __future__ import absolute_import, division, unicode_literals from six import with_metaclass, viewkeys, PY3 import types try: from collections import OrderedDict except ImportError: from ordereddict import OrderedDict from . import _inputstream from . import _tokenizer from . import treebuilders from .treebuilders.base import Marker from . import _utils from .constants import ( spaceCharacters, asciiUpper2Lower, specialElements, headingElements, cdataElements, rcdataElements, tokenTypes, tagTokenTypes, namespaces, htmlIntegrationPointElements, mathmlTextIntegrationPointElements, adjustForeignAttributes as adjustForeignAttributesMap, adjustMathMLAttributes, adjustSVGAttributes, E, ReparseException ) def parse(doc, treebuilder="etree", namespaceHTMLElements=True, **kwargs): """Parse a string or file-like object into a tree""" tb = treebuilders.getTreeBuilder(treebuilder) p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) return p.parse(doc, **kwargs) def parseFragment(doc, container="div", treebuilder="etree", namespaceHTMLElements=True, **kwargs): tb = treebuilders.getTreeBuilder(treebuilder) p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) return p.parseFragment(doc, container=container, **kwargs) def method_decorator_metaclass(function): class Decorated(type): def __new__(meta, classname, bases, classDict): for attributeName, attribute in classDict.items(): if isinstance(attribute, types.FunctionType): attribute = function(attribute) classDict[attributeName] = attribute return type.__new__(meta, classname, bases, classDict) return Decorated class HTMLParser(object): """HTML parser. Generates a tree structure from a stream of (possibly malformed) HTML""" def __init__(self, tree=None, strict=False, namespaceHTMLElements=True, debug=False): """ 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) """ # Raise an exception on the first error encountered self.strict = strict if tree is None: tree = treebuilders.getTreeBuilder("etree") self.tree = tree(namespaceHTMLElements) self.errors = [] self.phases = dict([(name, cls(self, self.tree)) for name, cls in getPhases(debug).items()]) def _parse(self, stream, innerHTML=False, container="div", scripting=False, **kwargs): self.innerHTMLMode = innerHTML self.container = container self.scripting = scripting self.tokenizer = _tokenizer.HTMLTokenizer(stream, parser=self, **kwargs) self.reset() try: self.mainLoop() except ReparseException: self.reset() self.mainLoop() def reset(self): self.tree.reset() self.firstStartTag = False self.errors = [] self.log = [] # only used with debug mode # "quirks" / "limited quirks" / "no quirks" self.compatMode = "no quirks" if self.innerHTMLMode: self.innerHTML = self.container.lower() if self.innerHTML in cdataElements: self.tokenizer.state = self.tokenizer.rcdataState elif self.innerHTML in rcdataElements: self.tokenizer.state = self.tokenizer.rawtextState elif self.innerHTML == 'plaintext': self.tokenizer.state = self.tokenizer.plaintextState else: # state already is data state # self.tokenizer.state = self.tokenizer.dataState pass self.phase = self.phases["beforeHtml"] self.phase.insertHtmlElement() self.resetInsertionMode() else: self.innerHTML = False # pylint:disable=redefined-variable-type self.phase = self.phases["initial"] self.lastPhase = None self.beforeRCDataPhase = None self.framesetOK = True @property def documentEncoding(self): """The name of the character encoding that was used to decode the input stream, or :obj:`None` if that is not determined yet. """ if not hasattr(self, 'tokenizer'): return None return self.tokenizer.stream.charEncoding[0].name def isHTMLIntegrationPoint(self, element): if (element.name == "annotation-xml" and element.namespace == namespaces["mathml"]): return ("encoding" in element.attributes and element.attributes["encoding"].translate( asciiUpper2Lower) in ("text/html", "application/xhtml+xml")) else: return (element.namespace, element.name) in htmlIntegrationPointElements def isMathMLTextIntegrationPoint(self, element): return (element.namespace, element.name) in mathmlTextIntegrationPointElements def mainLoop(self): CharactersToken = tokenTypes["Characters"] SpaceCharactersToken = tokenTypes["SpaceCharacters"] StartTagToken = tokenTypes["StartTag"] EndTagToken = tokenTypes["EndTag"] CommentToken = tokenTypes["Comment"] DoctypeToken = tokenTypes["Doctype"] ParseErrorToken = tokenTypes["ParseError"] for token in self.normalizedTokens(): prev_token = None new_token = token while new_token is not None: prev_token = new_token currentNode = self.tree.openElements[-1] if self.tree.openElements else None currentNodeNamespace = currentNode.namespace if currentNode else None currentNodeName = currentNode.name if currentNode else None type = new_token["type"] if type == ParseErrorToken: self.parseError(new_token["data"], new_token.get("datavars", {})) new_token = None else: if (len(self.tree.openElements) == 0 or currentNodeNamespace == self.tree.defaultNamespace or (self.isMathMLTextIntegrationPoint(currentNode) and ((type == StartTagToken and token["name"] not in frozenset(["mglyph", "malignmark"])) or type in (CharactersToken, SpaceCharactersToken))) or (currentNodeNamespace == namespaces["mathml"] and currentNodeName == "annotation-xml" and type == StartTagToken and token["name"] == "svg") or (self.isHTMLIntegrationPoint(currentNode) and type in (StartTagToken, CharactersToken, SpaceCharactersToken))): phase = self.phase else: phase = self.phases["inForeignContent"] if type == CharactersToken: new_token = phase.processCharacters(new_token) elif type == SpaceCharactersToken: new_token = phase.processSpaceCharacters(new_token) elif type == StartTagToken: new_token = phase.processStartTag(new_token) elif type == EndTagToken: new_token = phase.processEndTag(new_token) elif type == CommentToken: new_token = phase.processComment(new_token) elif type == DoctypeToken: new_token = phase.processDoctype(new_token) if (type == StartTagToken and prev_token["selfClosing"] and not prev_token["selfClosingAcknowledged"]): self.parseError("non-void-element-with-trailing-solidus", {"name": prev_token["name"]}) # When the loop finishes it's EOF reprocess = True phases = [] while reprocess: phases.append(self.phase) reprocess = self.phase.processEOF() if reprocess: assert self.phase not in phases def normalizedTokens(self): for token in self.tokenizer: yield self.normalizeToken(token) def parse(self, stream, *args, **kwargs): """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) scripting - treat noscript elements as if javascript was turned on """ self._parse(stream, False, None, *args, **kwargs) return self.tree.getDocument() def parseFragment(self, stream, *args, **kwargs): """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) scripting - treat noscript elements as if javascript was turned on """ self._parse(stream, True, *args, **kwargs) return self.tree.getFragment() def parseError(self, errorcode="XXX-undefined-error", datavars=None): # XXX The idea is to make errorcode mandatory. if datavars is None: datavars = {} self.errors.append((self.tokenizer.stream.position(), errorcode, datavars)) if self.strict: raise ParseError(E[errorcode] % datavars) def normalizeToken(self, token): """ HTML5 specific normalizations to the token stream """ if token["type"] == tokenTypes["StartTag"]: raw = token["data"] token["data"] = OrderedDict(raw) if len(raw) > len(token["data"]): # we had some duplicated attribute, fix so first wins token["data"].update(raw[::-1]) return token def adjustMathMLAttributes(self, token): adjust_attributes(token, adjustMathMLAttributes) def adjustSVGAttributes(self, token): adjust_attributes(token, adjustSVGAttributes) def adjustForeignAttributes(self, token): adjust_attributes(token, adjustForeignAttributesMap) def reparseTokenNormal(self, token): # pylint:disable=unused-argument self.parser.phase() def resetInsertionMode(self): # The name of this method is mostly historical. (It's also used in the # specification.) last = False newModes = { "select": "inSelect", "td": "inCell", "th": "inCell", "tr": "inRow", "tbody": "inTableBody", "thead": "inTableBody", "tfoot": "inTableBody", "caption": "inCaption", "colgroup": "inColumnGroup", "table": "inTable", "head": "inBody", "body": "inBody", "frameset": "inFrameset", "html": "beforeHead" } for node in self.tree.openElements[::-1]: nodeName = node.name new_phase = None if node == self.tree.openElements[0]: assert self.innerHTML last = True nodeName = self.innerHTML # Check for conditions that should only happen in the innerHTML # case if nodeName in ("select", "colgroup", "head", "html"): assert self.innerHTML if not last and node.namespace != self.tree.defaultNamespace: continue if nodeName in newModes: new_phase = self.phases[newModes[nodeName]] break elif last: new_phase = self.phases["inBody"] break self.phase = new_phase def parseRCDataRawtext(self, token, contentType): """Generic RCDATA/RAWTEXT Parsing algorithm contentType - RCDATA or RAWTEXT """ assert contentType in ("RAWTEXT", "RCDATA") self.tree.insertElement(token) if contentType == "RAWTEXT": self.tokenizer.state = self.tokenizer.rawtextState else: self.tokenizer.state = self.tokenizer.rcdataState self.originalPhase = self.phase self.phase = self.phases["text"] @_utils.memoize def getPhases(debug): def log(function): """Logger that records which phase processes each token""" type_names = dict((value, key) for key, value in tokenTypes.items()) def wrapped(self, *args, **kwargs): if function.__name__.startswith("process") and len(args) > 0: token = args[0] try: info = {"type": type_names[token['type']]} except: raise if token['type'] in tagTokenTypes: info["name"] = token['name'] self.parser.log.append((self.parser.tokenizer.state.__name__, self.parser.phase.__class__.__name__, self.__class__.__name__, function.__name__, info)) return function(self, *args, **kwargs) else: return function(self, *args, **kwargs) return wrapped def getMetaclass(use_metaclass, metaclass_func): if use_metaclass: return method_decorator_metaclass(metaclass_func) else: return type # pylint:disable=unused-argument class Phase(with_metaclass(getMetaclass(debug, log))): """Base class for helper object that implements each phase of processing """ def __init__(self, parser, tree): self.parser = parser self.tree = tree def processEOF(self): raise NotImplementedError def processComment(self, token): # For most phases the following is correct. Where it's not it will be # overridden. self.tree.insertComment(token, self.tree.openElements[-1]) def processDoctype(self, token): self.parser.parseError("unexpected-doctype") def processCharacters(self, token): self.tree.insertText(token["data"]) def processSpaceCharacters(self, token): self.tree.insertText(token["data"]) def processStartTag(self, token): return self.startTagHandler[token["name"]](token) def startTagHtml(self, token): if not self.parser.firstStartTag and token["name"] == "html": self.parser.parseError("non-html-root") # XXX Need a check here to see if the first start tag token emitted is # this token... If it's not, invoke self.parser.parseError(). for attr, value in token["data"].items(): if attr not in self.tree.openElements[0].attributes: self.tree.openElements[0].attributes[attr] = value self.parser.firstStartTag = False def processEndTag(self, token): return self.endTagHandler[token["name"]](token) class InitialPhase(Phase): def processSpaceCharacters(self, token): pass def processComment(self, token): self.tree.insertComment(token, self.tree.document) def processDoctype(self, token): name = token["name"] publicId = token["publicId"] systemId = token["systemId"] correct = token["correct"] if (name != "html" or publicId is not None or systemId is not None and systemId != "about:legacy-compat"): self.parser.parseError("unknown-doctype") if publicId is None: publicId = "" self.tree.insertDoctype(token) if publicId != "": publicId = publicId.translate(asciiUpper2Lower) if (not correct or token["name"] != "html" or publicId.startswith( ("+//silmaril//dtd html pro v0r11 19970101//", "-//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//", "-//microsoft//dtd internet explorer 2.0 html strict//", "-//microsoft//dtd internet explorer 2.0 html//", "-//microsoft//dtd internet explorer 2.0 tables//", "-//microsoft//dtd internet explorer 3.0 html strict//", "-//microsoft//dtd internet explorer 3.0 html//", "-//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//", "-//o'reilly and associates//dtd html extended 1.0//", "-//o'reilly and associates//dtd html extended relaxed 1.0//", "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", "-//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//", "-//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//")) or publicId in ("-//w3o//dtd w3 html strict 3.0//en//", "-/w3c/dtd html 4.0 transitional/en", "html") or publicId.startswith( ("-//w3c//dtd html 4.01 frameset//", "-//w3c//dtd html 4.01 transitional//")) and systemId is None or systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"): self.parser.compatMode = "quirks" elif (publicId.startswith( ("-//w3c//dtd xhtml 1.0 frameset//", "-//w3c//dtd xhtml 1.0 transitional//")) or publicId.startswith( ("-//w3c//dtd html 4.01 frameset//", "-//w3c//dtd html 4.01 transitional//")) and systemId is not None): self.parser.compatMode = "limited quirks" self.parser.phase = self.parser.phases["beforeHtml"] def anythingElse(self): self.parser.compatMode = "quirks" self.parser.phase = self.parser.phases["beforeHtml"] def processCharacters(self, token): self.parser.parseError("expected-doctype-but-got-chars") self.anythingElse() return token def processStartTag(self, token): self.parser.parseError("expected-doctype-but-got-start-tag", {"name": token["name"]}) self.anythingElse() return token def processEndTag(self, token): self.parser.parseError("expected-doctype-but-got-end-tag", {"name": token["name"]}) self.anythingElse() return token def processEOF(self): self.parser.parseError("expected-doctype-but-got-eof") self.anythingElse() return True class BeforeHtmlPhase(Phase): # helper methods def insertHtmlElement(self): self.tree.insertRoot(impliedTagToken("html", "StartTag")) self.parser.phase = self.parser.phases["beforeHead"] # other def processEOF(self): self.insertHtmlElement() return True def processComment(self, token): self.tree.insertComment(token, self.tree.document) def processSpaceCharacters(self, token): pass def processCharacters(self, token): self.insertHtmlElement() return token def processStartTag(self, token): if token["name"] == "html": self.parser.firstStartTag = True self.insertHtmlElement() return token def processEndTag(self, token): if token["name"] not in ("head", "body", "html", "br"): self.parser.parseError("unexpected-end-tag-before-html", {"name": token["name"]}) else: self.insertHtmlElement() return token class BeforeHeadPhase(Phase): def __init__(self, parser, tree): Phase.__init__(self, parser, tree) self.startTagHandler = _utils.MethodDispatcher([ ("html", self.startTagHtml), ("head", self.startTagHead) ]) self.startTagHandler.default = self.startTagOther self.endTagHandler = _utils.MethodDispatcher([ (("head", "body", "html", "br"), self.endTagImplyHead) ]) self.endTagHandler.default = self.endTagOther def processEOF(self): self.startTagHead(impliedTagToken("head", "StartTag")) return True def processSpaceCharacters(self, token): pass def processCharacters(self, token): self.startTagHead(impliedTagToken("head", "StartTag")) return token def startTagHtml(self, token): return self.parser.phases["inBody"].processStartTag(token) def startTagHead(self, token): self.tree.insertElement(token) self.tree.headPointer = self.tree.openElements[-1] self.parser.phase = self.parser.phases["inHead"] def startTagOther(self, token): self.startTagHead(impliedTagToken("head", "StartTag")) return token def endTagImplyHead(self, token): self.startTagHead(impliedTagToken("head", "StartTag")) return token def endTagOther(self, token): self.parser.parseError("end-tag-after-implied-root", {"name": token["name"]}) class InHeadPhase(Phase): def __init__(self, parser, tree): Phase.__init__(self, parser, tree) self.startTagHandler = _utils.MethodDispatcher([ ("html", self.startTagHtml), ("title", self.startTagTitle), (("noframes", "style"), self.startTagNoFramesStyle), ("noscript", self.startTagNoscript), ("script", self.startTagScript), (("base", "basefont", "bgsound", "command", "link"), self.startTagBaseLinkCommand), ("meta", self.startTagMeta), ("head", self.startTagHead) ]) self.startTagHandler.default = self.startTagOther self.endTagHandler = _utils.MethodDispatcher([ ("head", self.endTagHead), (("br", "html", "body"), self.endTagHtmlBodyBr) ]) self.endTagHandler.default = self.endTagOther # the real thing def processEOF(self): self.anythingElse() return True def processCharacters(self, token): self.anythingElse() return token def startTagHtml(self, token): return self.parser.phases["inBody"].processStartTag(token) def startTagHead(self, token): self.parser.parseError("two-heads-are-not-better-than-one") def startTagBaseLinkCommand(self, token): self.tree.insertElement(token) self.tree.openElements.pop() token["selfClosingAcknowledged"] = True def startTagMeta(self, token): self.tree.insertElement(token) self.tree.openElements.pop() token["selfClosingAcknowledged"] = True attributes = token["data"] if self.parser.tokenizer.stream.charEncoding[1] == "tentative": if "charset" in attributes: self.parser.tokenizer.stream.changeEncoding(attributes["charset"]) elif ("content" in attributes and "http-equiv" in attributes and attributes["http-equiv"].lower() == "content-type"): # Encoding it as UTF-8 here is a hack, as really we should pass # the abstract Unicode string, and just use the # ContentAttrParser on that, but using UTF-8 allows all chars # to be encoded and as a ASCII-superset works. data = _inputstream.EncodingBytes(attributes["content"].encode("utf-8")) parser = _inputstream.ContentAttrParser(data) codec = parser.parse() self.parser.tokenizer.stream.changeEncoding(codec) def startTagTitle(self, token): self.parser.parseRCDataRawtext(token, "RCDATA") def startTagNoFramesStyle(self, token): # Need to decide whether to implement the scripting-disabled case self.parser.parseRCDataRawtext(token, "RAWTEXT") def startTagNoscript(self, token): if self.parser.scripting: self.parser.parseRCDataRawtext(token, "RAWTEXT") else: self.tree.insertElement(token) self.parser.phase = self.parser.phases["inHeadNoscript"] def startTagScript(self, token): self.tree.insertElement(token) self.parser.tokenizer.state = self.parser.tokenizer.scriptDataState self.parser.originalPhase = self.parser.phase self.parser.phase = self.parser.phases["text"] def startTagOther(self, token): self.anythingElse() return token def endTagHead(self, token): node = self.parser.tree.openElements.pop() assert node.name == "head", "Expected head got %s" % node.name self.parser.phase = self.parser.phases["afterHead"] def endTagHtmlBodyBr(self, token): self.anythingElse() return token def endTagOther(self, token): self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) def anythingElse(self): self.endTagHead(impliedTagToken("head")) class InHeadNoscriptPhase(Phase): def __init__(self, parser, tree): Phase.__init__(self, parser, tree) self.startTagHandler = _utils.MethodDispatcher([ ("html", self.startTagHtml), (("basefont", "bgsound", "link", "meta", "noframes", "style"), self.startTagBaseLinkCommand), (("head", "noscript"), self.startTagHeadNoscript), ]) self.startTagHandler.default = self.startTagOther self.endTagHandler = _utils.MethodDispatcher([ ("noscript", self.endTagNoscript), ("br", self.endTagBr), ]) self.endTagHandler.default = self.endTagOther def processEOF(self): self.parser.parseError("eof-in-head-noscript") self.anythingElse() return True def processComment(self, token): return self.parser.phases["inHead"].processComment(token) def processCharacters(self, token): self.parser.parseError("char-in-head-noscript") self.anythingElse() return token def processSpaceCharacters(self, token): return self.parser.phases["inHead"].processSpaceCharacters(token) def startTagHtml(self, token): return self.parser.phases["inBody"].processStartTag(token) def startTagBaseLinkCommand(self, token): return self.parser.phases["inHead"].processStartTag(token) def startTagHeadNoscript(self, token): self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) def startTagOther(self, token): self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) self.anythingElse() return token def endTagNoscript(self, token): node = self.parser.tree.openElements.pop() assert node.name == "noscript", "Expected noscript got %s" % node.name self.parser.phase = self.parser.phases["inHead"] def endTagBr(self, token): self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) self.anythingElse() return token def endTagOther(self, token): self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) def anythingElse(self): # Caller must raise parse error first! self.endTagNoscript(impliedTagToken("noscript")) class AfterHeadPhase(Phase): def __init__(self, parser, tree): Phase.__init__(self, parser, tree) self.startTagHandler = _utils.MethodDispatcher([ ("html", self.startTagHtml), ("body", self.startTagBody), ("frameset", self.startTagFrameset), (("base", "basefont", "bgsound", "link", "meta", "noframes", "script", "style", "title"), self.startTagFromHead), ("head", self.startTagHead) ]) self.startTagHandler.default = self.startTagOther self.endTagHandler = _utils.MethodDispatcher([(("body", "html", "br"), self.endTagHtmlBodyBr)]) self.endTagHandler.default = self.endTagOther def processEOF(self): self.anythingElse() return True def processCharacters(self, token): self.anythingElse() return token def startTagHtml(self, token): return self.parser.phases["inBody"].processStartTag(token) def startTagBody(self, token): self.parser.framesetOK = False self.tree.insertElement(token) self.parser.phase = self.parser.phases["inBody"] def startTagFrameset(self, token): self.tree.insertElement(token) self.parser.phase = self.parser.phases["inFrameset"] def startTagFromHead(self, token): self.parser.parseError("unexpected-start-tag-out-of-my-head", {"name": token["name"]}) self.tree.openElements.append(self.tree.headPointer) self.parser.phases["inHead"].processStartTag(token) for node in self.tree.openElements[::-1]: if node.name == "head": self.tree.openElements.remove(node) break def startTagHead(self, token): self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) def startTagOther(self, token): self.anythingElse() return token def endTagHtmlBodyBr(self, token): self.anythingElse() return token def endTagOther(self, token): self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) def anythingElse(self): self.tree.insertElement(impliedTagToken("body", "StartTag")) self.parser.phase = self.parser.phases["inBody"] self.parser.framesetOK = True class InBodyPhase(Phase): # http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody # the really-really-really-very crazy mode def __init__(self, parser, tree): Phase.__init__(self, parser, tree) # Set this to the default handler self.processSpaceCharacters = self.processSpaceCharactersNonPre self.startTagHandler = _utils.MethodDispatcher([ ("html", self.startTagHtml), (("base", "basefont", "bgsound", "command", "link", "meta", "script", "style", "title"), self.startTagProcessInHead), ("body", self.startTagBody), ("frameset", self.startTagFrameset), (("address", "article", "aside", "blockquote", "center", "details", "dir", "div", "dl", "fieldset", "figcaption", "figure", "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p", "section", "summary", "ul"), self.startTagCloseP), (headingElements, self.startTagHeading), (("pre", "listing"), self.startTagPreListing), ("form", self.startTagForm), (("li", "dd", "dt"), self.startTagListItem), ("plaintext", self.startTagPlaintext), ("a", self.startTagA), (("b", "big", "code", "em", "font", "i", "s", "small", "strike", "strong", "tt", "u"), self.startTagFormatting), ("nobr", self.startTagNobr), ("button", self.startTagButton), (("applet", "marquee", "object"), self.startTagAppletMarqueeObject), ("xmp", self.startTagXmp), ("table", self.startTagTable), (("area", "br", "embed", "img", "keygen", "wbr"), self.startTagVoidFormatting), (("param", "source", "track"), self.startTagParamSource), ("input", self.startTagInput), ("hr", self.startTagHr), ("image", self.startTagImage), ("isindex", self.startTagIsIndex), ("textarea", self.startTagTextarea), ("iframe", self.startTagIFrame), ("noscript", self.startTagNoscript), (("noembed", "noframes"), self.startTagRawtext), ("select", self.startTagSelect), (("rp", "rt"), self.startTagRpRt), (("option", "optgroup"), self.startTagOpt), (("math"), self.startTagMath), (("svg"), self.startTagSvg), (("caption", "col", "colgroup", "frame", "head", "tbody", "td", "tfoot", "th", "thead", "tr"), self.startTagMisplaced) ]) self.startTagHandler.default = self.startTagOther self.endTagHandler = _utils.MethodDispatcher([ ("body", self.endTagBody), ("html", self.endTagHtml), (("address", "article", "aside", "blockquote", "button", "center", "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure", "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre", "section", "summary", "ul"), self.endTagBlock), ("form", self.endTagForm), ("p", self.endTagP), (("dd", "dt", "li"), self.endTagListItem), (headingElements, self.endTagHeading), (("a", "b", "big", "code", "em", "font", "i", "nobr", "s", "small", "strike", "strong", "tt", "u"), self.endTagFormatting), (("applet", "marquee", "object"), self.endTagAppletMarqueeObject), ("br", self.endTagBr), ]) self.endTagHandler.default = self.endTagOther def isMatchingFormattingElement(self, node1, node2): return (node1.name == node2.name and node1.namespace == node2.namespace and node1.attributes == node2.attributes) # helper def addFormattingElement(self, token): self.tree.insertElement(token) element = self.tree.openElements[-1] matchingElements = [] for node in self.tree.activeFormattingElements[::-1]: if node is Marker: break elif self.isMatchingFormattingElement(node, element): matchingElements.append(node) assert len(matchingElements) <= 3 if len(matchingElements) == 3: self.tree.activeFormattingElements.remove(matchingElements[-1]) self.tree.activeFormattingElements.append(element) # the real deal def processEOF(self): allowed_elements = frozenset(("dd", "dt", "li", "p", "tbody", "td", "tfoot", "th", "thead", "tr", "body", "html")) for node in self.tree.openElements[::-1]: if node.name not in allowed_elements: self.parser.parseError("expected-closing-tag-but-got-eof") break # Stop parsing def processSpaceCharactersDropNewline(self, token): # Sometimes (start of
, , and