
    ^h=                        S SK JrJrJr  S SKJr  S SKrS SKJrJ	r	  SSK
JrJrJr  SSK
JrJrJr  SSKJrJr  S S	KJr  S
R-                  \5      S-   r\R0                  " S\-   S-   5      r\R0                  " S\-   S-   5      r0 r\" S5      S:H  r\" \R>                  " 5       5       H  u  r r!\(       a  \" \!5      S:  d  \(       d  \" \!5      S:  a  M.  \!S:w  d  M6  \" \!5      S:X  a  \RD                  " \!5      r!O\#" \!5      r!\!\;  d  \ RI                  5       (       d  Mz  \ \\!'   M     S r%\" S\%5        SS jr& " S S\'5      r( " S S\)5      r*g)    )absolute_importdivisionunicode_literals)	text_typeN)register_errorxmlcharrefreplace_errors   )voidElementsbooleanAttributesspaceCharacters)rcdataElementsentitiesxmlEntities)treewalkers_utils)escape z"'=<>`[]u_    	
 /`  ᠎᠏               　]u   􏿿   &c           
      ^   [        U [        [        45      (       Ga  / n/ nSn[        U R                  U R
                  U R                   5       H  u  pEU(       a  SnM  X@R
                  -   n[        R                  " U R                  U[        U R                  US-   /5       5      (       a(  [        R                  " U R                  XfS-    5      nSnO[        U5      nUR                  U5        M     U H  n[        R                  U5      n	U	(       aM  UR                  S5        UR                  U	5        U	R                  S5      (       d  UR                  S5        Mj  Ml  UR                  S[!        U5      SS  -  5        M     SR#                  U5      U R                  4$ [%        U 5      $ )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
             \/home/james-whalen/.local/lib/python3.13/site-packages/bleach/_vendor/html5lib/serializer.pyhtmlentityreplace_errorsr6   *   sZ   #*,ABCC
cjj377;<DA		ME%%cjjsCGGUQY;O7P&QRR";;CJJuUVY<WX	F	i( = B"&&r*A

3

1zz#JJsO ' 

8s2wqr{34  cgg&&',,    htmlentityreplacec                 t    [         R                  " U5      n[        S0 UD6nUR                  U" U 5      U5      $ )ad  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88F5M8,,r7   c                       \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrSrSrSrSrSrS rS rS	 rSS jrSS jrSS jrSrg
)r<   h   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                 J   [        U5      [        U R                  5      -
  n[        U5      S:  a   [        S[	        [        U5      5      -  5      eSU;   a  SU l        U R                   H(  n[        XUR                  U[        X5      5      5        M*     / U l
        SU l        g)a  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'rJ   FN)	frozensetoptionslen	TypeErrornextiterrK   setattrr'   getattrerrorsstrict)selfkwargsunexpected_argsattrs       r5   __init__HTMLSerializer.__init__   s    ^ $F+i.EE!#PSWX\]lXmSnnoo6!',D$LLDD

41D EF !r7   c                     [        U[        5      (       d   eU R                  (       a  UR                  U R                  S5      $ U$ )Nr8   r   r   r@   encoderb   strings     r5   rj   HTMLSerializer.encode   s7    &),,-,====0CDDMr7   c                     [        U[        5      (       d   eU R                  (       a  UR                  U R                  S5      $ U$ )Nra   ri   rk   s     r5   encodeStrictHTMLSerializer.encodeStrict   s6    &),,-,====99Mr7   Nc              #     #    X l         Sn/ U l        U(       a  U R                  (       a  SSKJn  U" X5      nU R
                  (       a  SSKJn  U" U5      nU R                  (       a  SSKJn  U" U5      nU R                  (       a  SSK
Jn  U" U5      nU R                  (       a  SSKJn  U" U5      nU GH5  nUS   nUS:X  a  SUS   -  nUS   (       a  US	US   -  -  nOUS
   (       a  US-  nUS
   (       aX  US
   R                  S5      S:  a,  US
   R                  S5      S:  a  U R                  S5        SnOSnUSU< US
   < U< 3-  nUS-  nU R                  U5      v   M  US;   ax  US:X  d  U(       aI  U(       a)  US   R                  S5      S:  a  U R                  S5        U R!                  US   5      v   GM  U R!                  [#        US   5      5      v   GM6  US;   Ga  US   n	U R                  SU	-  5      v   U	[$        ;   a  U R&                  (       d  SnOU(       a  U R                  S5        US   R)                  5        GH  u  u  pnUnUnU R                  S5      v   U R                  U5      v   U R*                  (       aJ  U[,        R.                  " U	[1        5       5      ;  d  Mi  U[,        R.                  " S[1        5       5      ;  d  M  U R                  S5      v   U R2                  S:X  d  [5        U5      S:X  a  SnO[U R2                  S:X  a  [6        R9                  U5      S LnO3U R2                  S:X  a  [:        R9                  U5      S LnO[=        S 5      eUR?                  S!S"5      nU R@                  (       a  UR?                  S#S$5      nU(       a  U RB                  nU RD                  (       a  SU;   a	  SU;  a  SnOSU;   a  SU;  a  SnUS:X  a  UR?                  SS%5      nOUR?                  SS&5      nU R                  U5      v   U R!                  U5      v   U R                  U5      v   GM  U R!                  U5      v   GM     U	[F        ;   aI  U RH                  (       a8  U RJ                  (       a  U R                  S'5      v   OU R                  S(5      v   U R!                  S5      v   GM  US):X  aC  US   n	U	[$        ;   a  SnOU(       a  U R                  S5        U R                  S*U	-  5      v   GMf  US+:X  aG  US   nUR                  S,5      S:  a  U R                  S-5        U R                  S.US   -  5      v   GM  US/:X  ah  US   n	U	S0-   nU[L        ;  a  U R                  S1U	-  5        U RN                  (       a  U[P        ;  a
  [L        U   nOS2U	-  nU R                  U5      v   GM!  U R                  US   5        GM8     g 7f)3NFr	   )FiltertypeDoctypez<!DOCTYPE %snamepublicIdz PUBLIC "%s"systemIdz SYSTEMrH   r   'zBSystem identifier contains both single and double quote characters >)
CharactersSpaceCharactersr|   dataz</zUnexpected </ in CDATA)StartTagEmptyTagz<%sTz+Unexpected child element of a CDATA elementr   =alwaysspecrG   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`   rT   filters.inject_meta_charsetrr   rS   filters.alphabeticalattributesrU   filters.whitespacerV   filters.sanitizerrL   filters.optionaltagsfindserializeErrorro   rj   r   r   rQ   itemsrM   r   r'   tuplerI   rZ   _quoteAttributeSpecsearch_quoteAttributeLegacy
ValueErrorreplacerP   rJ   rK   r
   rN   rO   r   rR   r   )rb   
treewalkerr@   in_cdatarr   tokenrs   doctyperJ   ru   _	attr_name
attr_valuekv
quote_attrr}   keys                     r5   rD   HTMLSerializer.serialize   sF     00;
5J ''>
+J   2
+J==1
+J""4
+JE=Dy (5=8$~j0AAAG:&y(G$Z(--c2a7 ,11#6!; //0tu%(
%(
Jj8I:VVG3''00::,,E&M$6$6t$<$A++,DE++eFm44++fU6]&;<<11V}''55>)$2D2D#H''(UV27-2E2E2G.NQJ!A"A++C00++A..;;"3"7"7eg"FF"3"7"7EG"DD"//4411X=Q1)-J!33v=)<)C)CA)Fd)RJ!33x?)>)E)Ea)HPT)TJ", .M #N NIIc7322 !		#v 6A%)-J#77#&!8114J%(AX#Q,14J)S0$%IIc7$;$%IIc8$<"&"3"3J"??"&++a.0"&"3"3J"??"&++a.0M 3HN <'D,E,E99"//55"//44kk#&&!V}>)$H''(UV''$77"V}99T?a'''(=>''eFm(CDD!V}Sjh&''(BT(IJ((S-C#C=D!D=D''-- ##E&M2Y  s   J:W1 !W1%LW1c                     U(       a)  SR                  [        U R                  X5      5      5      $ SR                  [        U R                  U5      5      5      $ )a  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   )rb   r   r@   s      r5   r=   HTMLSerializer.renderw  sA    ( 88D
!EFGG774z :;<<r7   c                 h    U R                   R                  U5        U R                  (       a  [        eg N)r`   r%   ra   SerializeError)rb   r}   s     r5   r   HTMLSerializer.serializeError  s&    4 ;;   r7   )r@   r`   ra   rK   r   )zXXX ERROR MESSAGE NEEDED)__name__
__module____qualname____firstlineno__rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rY   rf   rj   ro   rD   r=   r   __static_attributes__r:   r7   r5   r<   r<   h   s     !J "& $(! M $H/GWrG3R=2!r7   r<   c                       \ rS rSrSrSrg)r   i  zError in serialized treer:   N)r   r   r   r   __doc__r   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&   rZ   _is_ucs4r   r   r   r   r#   r$   islowerr6   rD   r   r<   	Exceptionr   r:   r7   r5   <module>r      s?   B B % 	 ; G G < < ! #77?3i? jj'?!?#!EF 

3)A#A$-$- .   |!!"DAq	c!fqjc!fqjCxq6Q;//2AAA&&!))++$%q! #-< "$< =-:l!V l!^		Y 	r7   