0{Ym2@s$ddlmZmZmZddlmZddlZejZyddlm Z Wne k riYnXddl m Z m Z mZddl mZmZmZddlmZdd lmZd jeZydd lmZmZWne k rd ZYnXd ZiZeddkZxeejD]\Z Z!er[ee!dks7e rzee!dkrzq7ne!dkr7ee!dkrej"e!Z!n e#e!Z!e!ekse j$re ee! 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 r9FN)r:optionssetattrr%getattrerrorsr)selfkwargsattrr3r3r4__init__ks .  ) zHTMLSerializer.__init__cCs9t|tst|jr1|j|jtS|SdS)N)rrAssertionErrorencodingencodeunicode_encode_errors)rJstringr3r3r4rPs zHTMLSerializer.encodecCs9t|tst|jr1|j|jdS|SdS)Nr)rrrNrOrP)rJrRr3r3r4 encodeStricts zHTMLSerializer.encodeStrictNc#sI||_d}g|_|rI|jrIddlm}|||}n|jrqddlm}||}n|jrddlm}||}n|j rddl m}||}n|j rddl m}||}nxY|D]Q}|d}|dkrd|d}|dr9|d |d7}n|d rP|d 7}n|d r|d j d d kr|d j dd kr|jtdnd}nd }|d||d |f7}n|d7}|j|Vq|d4krm|dks|rR|r=|dj dd kr=|jtdn|j|dVqA|jt|dVq|d5kr|d} |jd| V| tkr|j rd}n|r|jtdnx|djD]\\} } } | } | |jdV|j| V|j s[| tj| tkr| tjdtkr|jdV|jsy rd}n"tfdd td!d}jd"d#|jrjd$d%n|r|j}|j r1dkr d kr d }q1d kr1dkr1d}q1n|dkrRjdd&njd d'|j|V|jV|j|Vq|jVqqW| t!kr|j"r|j#r|jd(Vq|jd)Vn|jdVq|d*krS|d} | tkr"d}n|r>|jtdn|jd+| Vq|d,kr|d}|j d-d kr|jtd.n|jd/|dVq|d0kr0|d} | d1}|t$kr|jtd2| n|j%r|t&krt$|}n d3| }|j|Vq|j|dqWdS)6NFr)FiltertypeDoctypez CharactersSpaceCharactersdatazsz*HTMLSerializer.serialize..z>"'=rz&Commentz--zComment contains --z EntityrzEntity %s not recognizedz&%s;)z CharacterszSpaceCharacters)zStartTagzEmptyTag)'rOrIrCfilters.inject_meta_charsetrTrDfilters.whitespacerEfilters.sanitizerr;filters.optionaltagsrBfilters.alphabeticalattributesfindserializeError_rSrPrr r@itemsr<r r%tupler8rr replacer?r9r:rr=r>r rAr )rJ treewalkerrOin_cdatarTtokenrUdoctyper9rWattr_namespace attr_name attr_valuek quote_attrr^keyr3)rer4 serializes                   #                     zHTMLSerializer.serializecCsE|r%djt|j||Sdjt|j|SdS)Nr)r(listr)rJrwrOr3r3r4render1szHTMLSerializer.renderzXXX ERROR MESSAGE NEEDEDcCs&|jj||jr"tndS)N)rIr#rSerializeError)rJr^r3r3r4rr7s zHTMLSerializer.serializeError)zquote_attr_valuesz quote_charzuse_best_quote_charzomit_optional_tagszminimize_boolean_attributeszuse_trailing_soliduszspace_before_trailing_soliduszescape_lt_in_attrsz escape_rcdatazresolve_entitieszalphabetical_attributeszinject_meta_charsetzstrip_whitespacezsanitize)__name__ __module__ __qualname__r8r9r:r;r<r=r>r?r@rArBrCrDrErFrMrPrSrrrrr3r3r3r4r6Ls4  5  r6cCsdS)zError in serialized treeNr3) Exceptionr3r3r4r>sr)) __future__rrrZpip._vendor.sixrgettextrs functoolsr ImportError constantsrr r r r r rrxml.sax.saxutilsrr(codecsrrrQr$lenis_ucs4rrtr~rer!r"islowerr5rr6rr3r3r3r4sD