Ë
    á]j�=  ã                   ón  — d dl mZmZmZ d dlmZ d dlZd dlmZm	Z	 ddl
mZmZmZ ddl
mZmZmZ ddlmZmZ d d	lmZ d
j-                  e«      dz   Z ej0                  dez   dz   «      Z ej0                  dez   dz   «      Zi Z ed«      dk(  Z e ej>                  «       «      D ]f  \  Z Z!er ee!«      dkD  ses ee!«      dkD  rŒ!e!dk7  sŒ' ee!«      dk(  r ejD                  e!«      Z!n e#e!«      Z!e!evse jI                  «       sŒbe ee!<   Œh d„ Z% ede%«       dd„Z& G d„ de'«      Z( G d„ de)«      Z*y)é    )Úabsolute_importÚdivisionÚunicode_literals)Ú	text_typeN)Úregister_errorÚxmlcharrefreplace_errorsé   )ÚvoidElementsÚbooleanAttributesÚspaceCharacters)ÚrcdataElementsÚentitiesÚxmlEntities)ÚtreewalkersÚ_utils)ÚescapeÚ z"'=<>`ú[ú]u_    	
 /`Â áš€á Žá �â€€â€�â€‚â€ƒâ€„â€…â€†â€‡â€ˆâ€‰â€Šâ€¨â€©â€¯â�Ÿã€€]u   ô�¿¿é   ú&c           
      ó   — t        | t        t        f«      �rmg }g }d}t        | j                  | j
                  | j                   «      D ]—  \  }}|rd}Œ|| j
                  z   }t        j                  | j                  |t        | j                  |dz   g«       «      r(t        j                  | j                  ||dz    «      }d}nt        |«      }|j                  |«       Œ™ |D ]  }t        j                  |«      }	|	rF|j                  d«       |j                  |	«       |	j                  d«      rŒN|j                  d«       Œ`|j                  dt!        |«      dd  z  «       Œ� dj#                  |«      | j                  fS t%        | «      S )NFr   Tr   ú;z&#x%s;r   )Ú
isinstanceÚUnicodeEncodeErrorÚUnicodeTranslateErrorÚ	enumerateÚobjectÚstartÚendr   ÚisSurrogatePairÚminÚsurrogatePairToCodepointÚordÚappendÚ_encode_entity_mapÚgetÚendswithÚhexÚjoinr   )
ÚexcÚresÚ
codepointsÚskipÚiÚcÚindexÚ	codepointÚcpÚes
             úY/var/www/zogu/zoguvenv/lib/python3.12/site-packages/bleach/_vendor/html5lib/serializer.pyÚhtmlentityreplace_errorsr6   *   s[  € Ü�#Ô*Ô,AÐBÕCØˆØˆ
ØˆÜ˜cŸj™j¨¯©°3·7±7Ð;Ó<ò 
	)‰DˆAˆqÙØ�ØØ˜Ÿ	™	‘MˆEÜ×%Ñ% c§j¡j°´s¸C¿G¹GÀUÈQÁYÐ;OÓ7PÐ&QÔRÜ"×;Ñ;¸C¿J¹JÀuÈUÐUVÉYÐ<WÓX�	Ø‘ä ›F�	Ø×Ñ˜iÕ(ð
	)ð ò 	5ˆBÜ"×&Ñ& rÓ*ˆAÙØ—
‘
˜3”Ø—
‘
˜1”Ø—z‘z #•Ø—J‘J˜s•Oà—
‘
˜8¤s¨2£w¨q¨r {Ñ3Õ4ð	5ð —‘˜“˜cŸg™gÐ&Ð&ä'¨Ó,Ð,ó    Úhtmlentityreplacec                 ór   — t        j                  |«      }t        di |¤Ž}|j                   || «      |«      S )a˜  Serializes the input token stream using the specified treewalker

    :arg input: the token stream to serialize

    :arg tree: the treewalker to use

    :arg encoding: the encoding to use

    :arg serializer_opts: any options to pass to the
        :py:class:`html5lib.serializer.HTMLSerializer` that gets created

    :returns: the tree serialized as a string

    Example:

    >>> from html5lib.html5parser import parse
    >>> from html5lib.serializer import serialize
    >>> token_stream = parse('<html><body><p>Hi!</p></body></html>')
    >>> serialize(token_stream, omit_optional_tags=False)
    '<html><head></head><body><p>Hi!</p></body></html>'

    © )r   ÚgetTreeWalkerÚHTMLSerializerÚrender)ÚinputÚtreeÚencodingÚserializer_optsÚwalkerÚss         r5   Ú	serializerD   K   s6   € ô0 ×&Ñ& tÓ,€FÜÑ)˜Ñ)€AØ�8‰8‘F˜5“M 8Ó,Ð,r7   c                   ór   — e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZd„ Zd„ Zd„ Zdd
„Zdd„Zdd„Zy	)r<   Úlegacyú"TF)Ú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Úsanitizec                 óD  — t        |«      t        | j                  «      z
  }t        |«      dkD  r t        dt	        t        |«      «      z  «      ‚d|v rd| _        | j                  D ])  }t        | ||j                  |t        | |«      «      «       Œ+ g | _
        d| _        y)aB
  Initialize HTMLSerializer

        :arg inject_meta_charset: Whether or not to inject the meta charset.

            Defaults to ``True``.

        :arg quote_attr_values: Whether to quote attribute values that don't
            require quoting per legacy browser behavior (``"legacy"``), when
            required by the standard (``"spec"``), or always (``"always"``).

            Defaults to ``"legacy"``.

        :arg quote_char: Use given quote character for attribute quoting.

            Defaults to ``"`` which will use double quotes unless attribute
            value contains a double quote, in which case single quotes are
            used.

        :arg escape_lt_in_attrs: Whether or not to escape ``<`` in attribute
            values.

            Defaults to ``False``.

        :arg escape_rcdata: Whether to escape characters that need to be
            escaped within normal elements within rcdata elements such as
            style.

            Defaults to ``False``.

        :arg resolve_entities: Whether to resolve named character entities that
            appear in the source tree. The XML predefined entities &lt; &gt;
            &amp; &quot; &apos; are unaffected by this setting.

            Defaults to ``True``.

        :arg strip_whitespace: Whether to remove semantically meaningless
            whitespace. (This compresses all whitespace to a single space
            except within ``pre``.)

            Defaults to ``False``.

        :arg minimize_boolean_attributes: Shortens boolean attributes to give
            just the attribute value, for example::

              <input disabled="disabled">

            becomes::

              <input disabled>

            Defaults to ``True``.

        :arg use_trailing_solidus: Includes a close-tag slash at the end of the
            start tag of void elements (empty elements whose end tag is
            forbidden). E.g. ``<hr/>``.

            Defaults to ``False``.

        :arg space_before_trailing_solidus: Places a space immediately before
            the closing slash in a tag using a trailing solidus. E.g.
            ``<hr />``. Requires ``use_trailing_solidus=True``.

            Defaults to ``True``.

        :arg sanitize: Strip all unsafe or unknown constructs from output.
            See :py:class:`html5lib.filters.sanitizer.Filter`.

            Defaults to ``False``.

        :arg omit_optional_tags: Omit start/end tags that are optional.

            Defaults to ``True``.

        :arg alphabetical_attributes: Reorder attributes to be in alphabetical order.

            Defaults to ``False``.

        r   z2__init__() got an unexpected keyword argument '%s'rI   FN)Ú	frozensetÚoptionsÚlenÚ	TypeErrorÚnextÚiterrJ   Úsetattrr'   ÚgetattrÚerrorsÚstrict)ÚselfÚkwargsÚunexpected_argsÚattrs       r5   Ú__init__zHTMLSerializer.__init__‡   s™   € ô^ $ FÓ+¬i¸¿¹Ó.EÑEˆÜˆÓ !Ò#ÜÐPÔSWÔX\Ð]lÓXmÓSnÑnÓoÐoØ˜6Ñ!Ø',ˆDÔ$Ø—L‘Lò 	GˆDÜ�D˜$ §
¡
¨4´¸¸tÓ1DÓ EÕFð	GàˆŒØˆ�r7   c                 óz   — t        |t        «      sJ ‚| j                  r|j                  | j                  d«      S |S )Nr8   ©r   r   r@   Úencode©ra   Ústrings     r5   rh   zHTMLSerializer.encodeà   s4   € Ü˜&¤)Ô,Ð-Ð,Ø�=Š=Ø—=‘= §¡Ð0CÓDÐDàˆMr7   c                 óz   — t        |t        «      sJ ‚| j                  r|j                  | j                  d«      S |S )Nr`   rg   ri   s     r5   ÚencodeStrictzHTMLSerializer.encodeStrictç   s3   € Ü˜&¤)Ô,Ð-Ð,Ø�=Š=Ø—=‘= §¡°Ó9Ð9àˆMr7   Nc              #   ó¢
  K  — || _         d}g | _        |r| j                  rddlm}  |||«      }| j
                  rddlm}  ||«      }| j                  rddlm}  ||«      }| j                  rddl
m}  ||«      }| j                  rddlm}  ||«      }|D �]°  }|d   }|dk(  r”d|d   z  }|d   r|d	|d   z  z  }n
|d
   r|dz  }|d
   rS|d
   j                  d«      dk\  r+|d
   j                  d«      dk\  r| j                  d«       d}nd}|d|›|d
   ›|›�z  }|dz  }| j                  |«      –— Œ¢|dv ri|dk(  s|rA|r(|d   j                  d«      dk\  r| j                  d«       | j!                  |d   «      –— Œî| j!                  t#        |d   «      «      –— �Œ|dv �rœ|d   }	| j                  d|	z  «      –— |	t$        v r| j&                  sd}n|r| j                  d«       |d   j)                  «       D �]ä  \  \  }
}}|}|}| j                  d«      –— | j                  |«      –— | j*                  rB|t-        j.                  |	t1        «       «      vsŒa|t-        j.                  dt1        «       «      vsŒ‚| j                  d«      –— | j2                  dk(  st5        |«      dk(  rd}nY| j2                  dk(  rt6        j9                  |«      d u}n2| j2                  dk(  rt:        j9                  |«      d u}nt=        d «      ‚|j?                  d!d"«      }| j@                  r|j?                  d#d$«      }|r’| jB                  }| jD                  rd|v rd|vrd}n
d|v rd|vrd}|dk(  r|j?                  dd%«      }n|j?                  dd&«      }| j                  |«      –— | j!                  |«      –— | j                  |«      –— �ŒÒ| j!                  |«      –— �Œç |	tF        v r?| jH                  r3| jJ                  r| j                  d'«      –— n| j                  d(«      –— | j!                  d«      –— �Œ°|d)k(  r;|d   }	|	t$        v rd}n|r| j                  d«       | j                  d*|	z  «      –— �Œð|d+k(  rE|d   }|j                  d,«      dk\  r| j                  d-«       | j                  d.|d   z  «      –— �Œ:|d/k(  r^|d   }	|	d0z   }|tL        vr| j                  d1|	z  «       | jN                  r|tP        vr
tL        |   }nd2|	z  }| j                  |«      –— �Œ�| j                  |d   «       �Œ³ y ­w)3NFr	   )ÚFilterÚtypeÚDoctypez<!DOCTYPE %sÚnameÚpublicIdz PUBLIC "%s"ÚsystemIdz SYSTEMrG   r   ú'zBSystem identifier contains both single and double quote charactersú ú>)Ú
CharactersÚSpaceCharactersrx   Údataz</zUnexpected </ in CDATA)ÚStartTagÚEmptyTagz<%sTz+Unexpected child element of a CDATA elementr   ú=ÚalwaysÚspecrF   z?quote_attr_values must be one of: 'always', 'spec', or 'legacy'r   z&amp;ú<z&lt;z&#39;z&quot;z /ú/ÚEndTagz</%s>ÚCommentz--zComment contains --z	<!--%s-->ÚEntityr   zEntity %s not recognizedz&%s;))r@   r_   rS   Úfilters.inject_meta_charsetrn   rR   Úfilters.alphabeticalattributesrT   Úfilters.whitespacerU   Úfilters.sanitizerrK   Úfilters.optionaltagsÚfindÚserializeErrorrl   rh   r   r   rP   ÚitemsrL   r   r'   ÚtuplerH   rY   Ú_quoteAttributeSpecÚsearchÚ_quoteAttributeLegacyÚ
ValueErrorÚreplacerO   rI   rJ   r
   rM   rN   r   rQ   r   )ra   Ú
treewalkerr@   Úin_cdatarn   Útokenro   ÚdoctyperI   rq   Ú_Ú	attr_nameÚ
attr_valueÚkÚvÚ
quote_attrry   Úkeys                     r5   rD   zHTMLSerializer.serializeî   sX  è ø€ à ˆŒØˆØˆŒá˜×0Ò0Ý;Ù 
¨HÓ5ˆJð ×'Ò'Ý>Ù 
Ó+ˆJð × Ò Ý2Ù 
Ó+ˆJØ�=Š=Ý1Ù 
Ó+ˆJØ×"Ò"Ý4Ù 
Ó+ˆJàó l	3ˆEØ˜‘=ˆDØ�yÒ Ø(¨5°©=Ñ8�à˜Ò$Ø˜~°°jÑ0AÑAÑA‘GØ˜:Ò&Ø˜yÑ(�GØ˜Ò$Ø˜ZÑ(×-Ñ-¨cÓ2°aÒ7Ø  Ñ,×1Ñ1°#Ó6¸!Ò;Ø ×/Ñ/Ð0tÔuØ%(™
à%(˜
Ù©J¸¸jÒ8IÉ:ÐVÑV�Gà˜3‘�Ø×'Ñ'¨Ó0Ó0àÐ:Ñ:ØÐ,Ò,±Ù E¨&¡M×$6Ñ$6°tÓ$<ÀÒ$AØ×+Ñ+Ð,DÔEØŸ+™+ e¨F¡mÓ4Ó4àŸ+™+¤f¨U°6©]Ó&;Ó<Ô<àÐ1Ò1Ø˜V‘}�Ø×'Ñ'¨°©Ó5Ò5Øœ>Ñ)°$×2DÒ2DØ#‘HÙØ×'Ñ'Ð(UÔVØ27¸±-×2EÑ2EÓ2Gó &1Ñ.‘N�Q˜	 Jà!�AØ"�AØ×+Ñ+¨CÓ0Ò0à×+Ñ+¨AÓ.Ò.Ø×;Ò;ØÔ"3×"7Ñ"7¸¼e»gÓ"FÒFØÔ"3×"7Ñ"7¸¼E»GÓ"DÒDØ"×/Ñ/°Ó4Ò4Ø×1Ñ1°XÒ=ÄÀQÃÈ1ÂØ)-™JØ!×3Ñ3°vÒ=Ü)<×)CÑ)CÀAÓ)FÈdÐ)R™JØ!×3Ñ3°xÒ?Ü)>×)EÑ)EÀaÓ)HÐPTÐ)T™Jä",ð .Mó #Nð NàŸI™I c¨7Ó3˜Ø×2Ò2Ø !§	¡	¨#¨vÓ 6˜AÙ%Ø)-¯©˜JØ#×7Ò7Ø#&¨!¡8°¸1±Ø14¡JØ%(¨A¡X°#¸Q±,Ø14 JØ)¨SÒ0Ø$%§I¡I¨c°7Ó$;¡à$%§I¡I¨c°8Ó$< Ø"&×"3Ñ"3°JÓ"?Ò?Ø"&§+¡+¨a£.Ò0Ø"&×"3Ñ"3°JÓ"?Ô?à"&§+¡+¨a£.Ô0ðM&1ðN œ<Ñ'¨D×,EÒ,EØ×9Ò9Ø"×/Ñ/°Ó5Ó5à"×/Ñ/°Ó4Ò4Ø—k‘k #Ó&Ô&à˜Ò!Ø˜V‘}�Øœ>Ñ)Ø$‘HÙØ×'Ñ'Ð(UÔVØ×'Ñ'¨°$©Ó7Ô7à˜Ò"Ø˜V‘}�Ø—9‘9˜T“? aÒ'Ø×'Ñ'Ð(=Ô>Ø×'Ñ'¨°e¸F±mÑ(CÓDÔDà˜Ò!Ø˜V‘}�Ø˜S‘j�ØœhÑ&Ø×'Ñ'Ð(BÀTÑ(IÔJØ×(Ò(¨S¼Ñ-CÜ# C™=‘Dà! D™=�DØ×'Ñ'¨Ó-Ô-ð ×#Ñ# E¨&¡MÖ2ñYl	3ùs   ‚I$UÉ' UÊKUc                 ó¬   — |r*dj                  t        | j                  ||«      «      «      S dj                  t        | j                  |«      «      «      S )an  Serializes the stream from the treewalker into a string

        :arg treewalker: the treewalker to serialize

        :arg encoding: the string encoding to use

        :returns: the serialized tree

        Example:

        >>> from html5lib import parse, getTreeWalker
        >>> from html5lib.serializer import HTMLSerializer
        >>> token_stream = parse('<html><body>Hi!</body></html>')
        >>> walker = getTreeWalker('etree')
        >>> serializer = HTMLSerializer(omit_optional_tags=False)
        >>> serializer.render(walker(token_stream))
        '<html><head></head><body>Hi!</body></html>'

        r7   r   )r*   ÚlistrD   )ra   r’   r@   s      r5   r=   zHTMLSerializer.renderw  sC   € ñ( Ø—8‘8œD §¡°
¸HÓ!EÓFÓGÐGà—7‘7œ4 §¡¨zÓ :Ó;Ó<Ð<r7   c                 ó^   — | j                   j                  |«       | j                  rt        ‚y ©N)r_   r%   r`   ÚSerializeError)ra   ry   s     r5   rŠ   zHTMLSerializer.serializeError�  s&   € à�‰×Ñ˜4Ô Ø�;Š;Ü Ð ð r7   r    )zXXX ERROR MESSAGE NEEDED)Ú__name__Ú
__module__Ú__qualname__rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rX   re   rh   rl   rD   r=   rŠ   r:   r7   r5   r<   r<   h   s„   „ ð !ÐØ€JØÐð ÐØ"&ÐØ ÐØ$(Ð!ð ÐØ€MØÐð $ÐØÐØÐØ€Hð/€GòWòròóG3óR=ô2!r7   r<   c                   ó   — e Zd ZdZy)r¡   zError in serialized treeN)r¢   r£   r¤   Ú__doc__r:   r7   r5   r¡   r¡   —  s   „ Ù"Ør7   r¡   )ÚetreeN)+Ú
__future__r   r   r   Úbleach.six_shimr   ÚreÚcodecsr   r   Ú	constantsr
   r   r   r   r   r   r   r   r   Úxml.sax.saxutilsr   r*   Ú_quoteAttributeSpecCharsÚcompiler�   r�   r&   rY   Ú_is_ucs4rž   r‹   r™   rš   r#   r$   Úislowerr6   rD   r   r<   Ú	Exceptionr¡   r:   r7   r5   ú<module>r³      sJ  ðß BÑ BÝ %ã 	ç ;ç GÑ Gß <Ñ <ß !Ý #àŸ7™7 ?Ó3°iÑ?Ð Ø �b—j‘j Ð'?Ñ!?À#Ñ!EÓFÐ Ø"˜Ÿ
™
 3Ð)AÑ#Að$-ñ$-ó .Ð ð Ð Ùˆ|Ó Ñ!€Ù��—‘Ó!Ó"ò &�D€A€qá	‘c˜!“f˜q’jÙ™c !›f qšjØØˆCƒxÙˆq‹6�QŠ;Ø/�×/Ñ/°Ó2‰Aá�A“ˆAØÐ&Ñ&¨!¯)©)­+à$%Ð˜qÒ!ð&ò-ñ< Ð"Ð$<Ô =ó-ô:l!�Vô l!ô^		�Yõ 	r7   