
    Ng,~                        d dl mZmZmZ d dlmZ d dlmZmZ d dl	Z	d dl
Z
d dlmZmZ d dlZddlmZmZmZmZ ddlmZ dd	lmZ  ed
 eD                       Z ed eD                       Z ed eD                       Ze eddg          z  ZdZej        rOed         dk    re                    d          dk    sJ  e
j        edd          e d          z   dz             Z!n e
j        e          Z!h dZ" e
j        d          Z#i Z$ G d de%          Z&d Z' G d de%          Z( G d de(          Z) G d de*          Z+ G d de%          Z, G d  d!e%          Z-d" Z.dS )#    )absolute_importdivisionunicode_literals)	text_type)http_clienturllibN)BytesIOStringIO   )EOFspaceCharactersasciiLettersasciiUppercase)_ReparseException)_utilsc                 8    g | ]}|                     d           S asciiencode.0items     Q/var/www/html/ai-engine/env/lib/python3.11/site-packages/html5lib/_inputstream.py
<listcomp>r      s$    !S!S!S4$++g"6"6!S!S!S    c                 8    g | ]}|                     d           S r   r   r   s     r   r   r      s$    MMMt{{733MMMr   c                 8    g | ]}|                     d           S r   r   r   s     r   r   r      s$     Q Q Q$W!5!5 Q Q Qr      >   <u   [---﷐-﷯￾￿🿾🿿𯿾𯿿𿿾𿿿񏿾񏿿񟿾񟿿񯿾񯿿񿿾񿿿򏿾򏿿򟿾򟿿򯿾򯿿򿿾򿿿󏿾󏿿󟿾󟿿󯿾󯿿󿿾󿿿􏿾􏿿]]z"\uD800-\uDFFF">            	 
               	 
       z[	- -/:-@\[-`{-~]c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
BufferedStreamzBuffering for streams that do not have buffering of their own

    The buffer is implemented as a list of chunks on the assumption that
    joining many strings will be slow since it is O(n**2)
    c                 4    || _         g | _        ddg| _        d S )Nr!   r   )streambufferposition)selfrF   s     r   __init__zBufferedStream.__init__:   s    Qr   c                     d}| j         d | j        d                  D ]}|t          |          z  }|| j        d         z  }|S Nr   r   )rG   rH   len)rI   poschunks      r   tellzBufferedStream.tell?   sR    [!2$-"2!23 	 	E3u::CCt}Q
r   c                    ||                                  k    sJ |}d}t          | j        |                   |k     r@|t          | j        |                   z  }|dz  }t          | j        |                   |k     @||g| _        d S rL   )_bufferedBytesrM   rG   rH   )rI   rN   offsetis       r   seekzBufferedStream.seekF   s    d))++++++$+a.!!F**c$+a.)))FFA $+a.!!F** Fr   c                 &   | j         s|                     |          S | j        d         t          | j                   k    r>| j        d         t          | j         d                   k    r|                     |          S |                     |          S )Nr   r   r!   )rG   _readStreamrH   rM   _readFromBufferrI   bytess     r   readzBufferedStream.readO   s    { 	/##E***mA#dk"2"222mA#dk"o"6"666##E***''...r   c                 >    t          d | j        D                       S )Nc                 ,    g | ]}t          |          S  )rM   r   s     r   r   z1BufferedStream._bufferedBytes.<locals>.<listcomp>Y   s    666$CII666r   )sumrG   rI   s    r   rR   zBufferedStream._bufferedBytesX   s!    66$+666777r   c                     | j                             |          }| j                            |           | j        dxx         dz  cc<   t          |          | j        d<   |S rL   )rF   r[   rG   appendrH   rM   )rI   rZ   datas      r   rW   zBufferedStream._readStream[   sb    {&&4   aAt99ar   c                 P   |}g }| j         d         }| j         d         }|t          | j                  k     r|dk    r|dk    sJ | j        |         }|t          |          |z
  k    r|}|||z   g| _         n-t          |          |z
  }|t          |          g| _         |dz  }|                    ||||z                       ||z  }d}|t          | j                  k     r|dk    |r(|                    |                     |                     d                    |          S )Nr   r   r   )rH   rM   rG   rb   rW   join)rI   rZ   remainingBytesrvbufferIndexbufferOffsetbufferedDatabytesToReads           r   rX   zBufferedStream._readFromBufferb   sK   mA&}Q'C,,,,11D1D!A%%%%;{3L\!2!2\!AAA,!,l[.H I!,//,>!,c,.?.? @q IIl<{0J#JKLLLk)NL C,,,,11D1D   	8IId&&~66777xx||r   N)__name__
__module____qualname____doc__rJ   rP   rU   r[   rR   rW   rX   r^   r   r   rD   rD   3   s              
  $ $ $/ / /8 8 8      r   rD   c                    t          | t          j                  s>t          | t          j        j                  r"t          | j        t          j                  rd}nNt          | d          r)t          |                     d          t                    }nt          | t                    }|r-d |D             }|rt          d|z            t          | fi |S t          | fi |S )NFr[   r   c                 <    g | ]}|                     d           |S )	_encoding)endswith)r   xs     r   r   z#HTMLInputStream.<locals>.<listcomp>   s)    BBB1!**[*A*ABQBBBr   z3Cannot set an encoding with a unicode input, set %r)
isinstancer   HTTPResponser   responseaddbasefphasattrr[   r   	TypeErrorHTMLUnicodeInputStreamHTMLBinaryInputStream)sourcekwargs	isUnicode	encodingss       r   HTMLInputStreamr   }   s     	6;344 2	FFO3	4	42 
FI{7	8	82 				 	  2v{{1~~y99		vy11	 7BBBBB	 	_QT]]^^^%f77777$V66v666r   c                   \    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
dd
Zd Zd ZddZd Zd	S )r|   Provides 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 (  c                    t           j        sd| _        n,t          d          dk    r| j        | _        n| j        | _        dg| _        t          d          df| _        | 	                    |          | _
        |                                  dS )  Initialises 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   r   utf-8certain)r   supports_lone_surrogatesreportCharacterErrorsrM   characterErrorsUCS4characterErrorsUCS2newLineslookupEncodingcharEncoding
openStream
dataStreamreset)rI   r~   s     r   rJ   zHTMLUnicodeInputStream.__init__   s     . 	B *.D&&!##)-)AD&&)-)AD& +G44i@//&11

r   c                 h    d| _         d| _        d| _        g | _        d| _        d| _        d | _        d S )N r   )rO   	chunkSizechunkOffseterrorsprevNumLinesprevNumCols_bufferedCharacterr`   s    r   r   zHTMLUnicodeInputStream.reset   sA    
  #'r   c                 J    t          |d          r|}nt          |          }|S zvProduces a file object from source.

        source can be either a file object, local filename or a string.

        r[   )rz   r
   rI   r~   rF   s      r   r   z!HTMLUnicodeInputStream.openStream   s/     66"" 	&FFf%%Fr   c                     | j         }|                    dd|          }| j        |z   }|                    dd|          }|dk    r| j        |z   }n||dz   z
  }||fS )N
r   r!   r   )rO   countr   rfindr   )rI   rS   rO   nLinespositionLinelastLinePospositionColumns          r   	_positionz HTMLUnicodeInputStream._position   ss    
T1f--(61kk$622"!-6NN#{Q7Nn--r   c                 J    |                      | j                  \  }}|dz   |fS )z:Returns (line, col) of the current position in the stream.r   )r   r   )rI   linecols      r   rH   zHTMLUnicodeInputStream.position   s(    NN4#344	cq#r   c                     | j         | j        k    r|                                 st          S | j         }| j        |         }|dz   | _         |S )zo Read one character from the stream or queue if available. Return
            EOF when EOF is reached.
        r   )r   r   	readChunkr   rO   )rI   r   chars      r   r   zHTMLUnicodeInputStream.char   sP    
 t~-->>## 
&z+&&?r   Nc                 n   || j         }|                     | j                  \  | _        | _        d| _        d| _        d| _        | j                            |          }| j	        r| j	        |z   }d | _	        n|sdS t          |          dk    rBt          |d                   }|dk    sd|cxk    rdk    rn n|d         | _	        |d d         }| j        r|                     |           |                    d	d
          }|                    dd
          }|| _        t          |          | _        dS )Nr   r   Fr   r!         i  z
r   T)_defaultChunkSizer   r   r   r   rO   r   r   r[   r   rM   ordr   replace)rI   r   rc   lastvs       r   r   z HTMLUnicodeInputStream.readChunk   sL   .I.2nnT^.L.L+4+
##I.. " 	*T1D&*D## 	5t99q==RMME}}% 9 9 9 96 9 9 9 9 9*.r('CRCy% 	-&&t,,, ||FD))||D$''
Ttr   c                     t          t          t                              |                              D ]}| j                            d           d S )Ninvalid-codepoint)rangerM   invalid_unicode_refindallr   rb   )rI   rc   _s      r   r   z*HTMLUnicodeInputStream.characterErrorsUCS4  sT    s-55d;;<<== 	4 	4AK23333	4 	4r   c                 .   d}t                               |          D ]}|rt          |                                          }|                                }t          j        |||dz                      rEt          j        |||dz                      }|t          v r| j	        
                    d           d}|dk    r7|dk    r1|t          |          dz
  k    r| j	        
                    d           d}| j	        
                    d           d S )NF   r   Tr   i  r   )r   finditerr   groupstartr   isSurrogatePairsurrogatePairToCodepointnon_bmp_invalid_codepointsr   rb   rM   )rI   rc   skipmatch	codepointrN   char_vals          r   r   z*HTMLUnicodeInputStream.characterErrorsUCS2#  s'    '0066 	8 	8E EKKMM**I++--C%d3sQw;&788 8!:4C!G;LMM999K&&':;;;v%%)v*=*=TQ&&""#67777""#67777#	8 	8r   Fc                    	 t           ||f         }nt# t          $ rg 	 |D ]}t          |          dk     sJ d                    d |D                       }|sd|z  }t	          j        d|z            x}t           ||f<   Y nw xY wg }	 |                    | j        | j                  }|| j        | j	        k    rnnN|
                                }|| j	        k    r/|                    | j        | j        |                    || _        n=|                    | j        | j        d                    |                                 snd                    |          }	|	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.
        T   r   c                 2    g | ]}d t          |          z  S )z\x%02x)r   )r   cs     r   r   z5HTMLUnicodeInputStream.charsUntil.<locals>.<listcomp>H  s#    DDDAYQ/DDDr   z^%sz[%s]+N)charsUntilRegExKeyErrorr   re   recompiler   rO   r   r   endrb   r   )
rI   
charactersoppositecharsr   regexrg   mr   rs
             r   
charsUntilz!HTMLUnicodeInputStream.charsUntil:  s   		Z#Z$:;EE 	Z 	Z 	Z)# ) )Aq66C<<<<<GGDDDDDEEE &>@jSX>Y>YYEOZ$:;;;	Z 	DJ(899Ay #t~55 6 eegg $.((IIdj)9#)=>???'*D$ IIdj!1!2!23444>>## +	. GGBKKs    A.BBc                     |t           urT| j        dk    r!|| j        z   | _        | xj        dz  c_        d S | xj        dz  c_        | j        | j                 |k    sJ d S d S rL   )r   r   rO   r   )rI   r   s     r   ungetzHTMLUnicodeInputStream.ungeti  s}     s??1$$ "DJ.
!#  A%  z$"23t;;;; ? <;r   N)F)rl   rm   rn   ro   r   rJ   r   r   r   rH   r   r   r   r   r   r   r^   r   r   r|   r|      s            @' ' '  	. 	. 	.  
  $ $ $ $L4 4 48 8 8.- - - -^< < < < <r   r|   c                   F    e Zd ZdZ	 	 	 ddZd Zd ZddZd	 Zd
 Z	d Z
dS )r}   r   Nwindows-1252Tc                 V   |                      |          | _        t                              | | j                   d| _        d| _        || _        || _        || _        || _	        || _
        |                     |          | _        | j        d         J |                                  dS )r   i   d   r   N)r   	rawStreamr|   rJ   numBytesMetanumBytesChardetoverride_encodingtransport_encodingsame_origin_parent_encodinglikely_encodingdefault_encodingdetermineEncodingr   r   )rI   r~   r   r   r   r   r   
useChardets           r   rJ   zHTMLBinaryInputStream.__init__  s    $ 00''dn===
 !"!2"4+F(. 0 !22:>> #/// 	

r   c                     | j         d         j                            | j        d          | _        t
                              |            d S )Nr   r   )r   
codec_infostreamreaderr   r   r|   r   r`   s    r   r   zHTMLBinaryInputStream.reset  sA    +A.9FFt~W`aa$$T*****r   c                     t          |d          r|}nt          |          }	 |                    |                                           n# t          $ r t          |          }Y nw xY w|S r   )rz   r	   rU   rP   	ExceptionrD   r   s      r   r   z HTMLBinaryInputStream.openStream  s}     66"" 	%FFV__F	,KK&&&& 	, 	, 	,#F++FFF	, s   'A A('A(c                    |                                  df}|d         |S t          | j                  df}|d         |S t          | j                  df}|d         |S |                                 df}|d         |S t          | j                  df}|d         "|d         j                            d          s|S t          | j                  df}|d         |S |r	 ddl	m
} g } |            }|j        sj| j                            | j                  }t          |t                     sJ |sn1|                    |           |                    |           |j        j|                                 t          |j        d                   }| j                            d           ||dfS n# t,          $ r Y nw xY wt          | j                  df}|d         |S t          d          dfS )Nr   r   	tentativezutf-16)UniversalDetectorencodingr   )	detectBOMr   r   r   detectEncodingMetar   name
startswithr   chardet.universaldetectorr   doner   r[   r   ru   rZ   rb   feedcloseresultrU   ImportErrorr   )rI   chardetr   r   buffersdetectorrG   r   s           r   r   z'HTMLBinaryInputStream.determineEncoding  s_    ~~''2?& &d&<==yH?& &d&=>>	I?& ..00+=?& &d&FGGT?&|A/C/N/Nx/X/X& &d&:;;[H?&  	11GGGGGG ,,.."- *!^001EFFF%fe44444! NN6***MM&))) #- *    )(/**EFF##A&&&'#[00 (    & &d&;<<kI?& n--{::s   $F6 6
GGc                    | j         d         dk    sJ t          |          }|d S |j        dv rt          d          }|J d S || j         d         k    r| j         d         df| _         d S | j                            d           |df| _         |                                  t          d| j         d         d|          )Nr   r   utf-16beutf-16ler   r   zEncoding changed from z to )r   r   r   r   rU   r   r   )rI   newEncodings     r   changeEncodingz$HTMLBinaryInputStream.changeEncoding  s     #y0000$[11F777(11K*****D-a000!%!21!5y ADN"""!,i 8DJJLLL##HYZ[H\H\H\^i^i$jkkkr   c           
          t           j        dt           j        dt           j        dt           j        dt           j        di}| j                            d          }t          |t                    sJ |
                    |dd                   }d}|s8|
                    |          }d}|s|
                    |dd	                   }d	}|r)| j                            |           t          |          S | j                            d
           dS )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 Noner   r  r   zutf-32lezutf-32be   N   r   r   )codecsBOM_UTF8BOM_UTF16_LEBOM_UTF16_BEBOM_UTF32_LEBOM_UTF32_BEr   r[   ru   rZ   getrU   r   )rI   bomDictstringr   rU   s        r   r   zHTMLBinaryInputStream.detectBOM  s
   
 OWV-@*V-@*
 $$Q''&%((((( ;;vbqbz** 	{{6**HD ";;vbqbz22  	N%%%!(+++N"""4r   c                     | j                             | j                  }t          |t                    sJ t          |          }| j                             d           |                                }||j        dv rt          d          }|S )z9Report the encoding declared by the meta element
        r   Nr   r   )
r   r[   r   ru   rZ   EncodingParserrU   getEncodingr   r   )rI   rG   parserr   s       r   r   z(HTMLBinaryInputStream.detectEncodingMeta3  s     $$T%677&%(((((''A%%''HM5M$M$M%g..Hr   )NNNNr   T)T)rl   rm   rn   ro   rJ   r   r   r   r  r   r   r^   r   r   r}   r}   z  s          KOCG=A( ( ( (T+ + +  &<; <; <; <;|l l l      D    r   r}   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z eee
          Zd
 Z ee          ZefdZd Zd Zd ZdS )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
    raisedc                     t          |t                    sJ t                              | |                                          S r   )ru   rZ   __new__lowerrI   values     r   r  zEncodingBytes.__new__F  s4    %'''''}}T5;;==111r   c                     d| _         d S )Nr!   )r   r  s     r   rJ   zEncodingBytes.__init__J  s    r   c                     | S r   r^   r`   s    r   __iter__zEncodingBytes.__iter__N  s    r   c                     | j         dz   x}| _         |t          |           k    rt          |dk     rt          | ||dz            S )Nr   r   r   rM   StopIterationr{   rI   ps     r   __next__zEncodingBytes.__next__Q  sJ    !^a//DND		>>UUOAa!eG}r   c                 *    |                                  S r   )r#  r`   s    r   nextzEncodingBytes.nextY  s    }}r   c                     | j         }|t          |           k    rt          |dk     rt          |dz
  x| _         }| ||dz            S rL   r  r!  s     r   previouszEncodingBytes.previous]  sN    ND		>>UUOU"Aa!eG}r   c                 R    | j         t          |           k    rt          || _         d S r   r   rM   r   )rI   rH   s     r   setPositionzEncodingBytes.setPositionf  s&    >SYY&&!r   c                 h    | j         t          |           k    rt          | j         dk    r| j         S d S )Nr   r)  r`   s    r   getPositionzEncodingBytes.getPositionk  s5    >SYY&&>Q>!4r   c                 0    | | j         | j         dz            S Nr   )rH   r`   s    r   getCurrentBytezEncodingBytes.getCurrentByteu  s    DM$-!"3344r   c                     | j         }|t          |           k     r2| ||dz            }||vr	|| _        |S |dz  }|t          |           k     2|| _        dS )zSkip past a list of charactersr   NrH   rM   r   rI   r   r"  r   s       r   r   zEncodingBytes.skipz  sf    M#d))mmQq1uWA~~!"FA #d))mm tr   c                     | j         }|t          |           k     r2| ||dz            }||v r	|| _        |S |dz  }|t          |           k     2|| _        d S r.  r1  r2  s       r   	skipUntilzEncodingBytes.skipUntil  sf    M#d))mmQq1uWAEzz!"FA #d))mm tr   c                 z    |                      || j                  }|r| xj        t          |          z  c_        |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   rH   rM   )rI   rZ   rg   s      r   
matchByteszEncodingBytes.matchBytes  s<     __UDM22 	(MMSZZ'MM	r   c                     	 |                      || j                  t          |          z   dz
  | _        n# t          $ r t
          w xY wdS )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 matchr   T)indexrH   rM   r   
ValueErrorr   rY   s     r   jumpTozEncodingBytes.jumpTo  sV    	 !ZZt}==E

JQNDNN 	  	  	 	 ts	   36 AN)rl   rm   rn   ro   r  rJ   r  r#  r%  r'  r*  r,  propertyrH   r/  currentBytespaceCharactersBytesr   r4  r6  r:  r^   r   r   r  r  B  s        2 2 2          " " "
   x[11H5 5 5 (>**K- 
 
 
 
	 	 	      r   r  c                   H    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S )r  z?Mini parser for detecting character encoding from meta elementsc                 <    t          |          | _        d| _        dS )z3string - the data to work on for encoding detectionN)r  rc   r   rI   rc   s     r   rJ   zEncodingParser.__init__  s    !$''	r   c                    d| j         vrd S d| j        fd| j        fd| j        fd| j        fd| j        fd| j        ff}| j         D ]w}d}	 | j                             d           n# t          $ r Y  nKw xY w|D ]?\  }}| j                             |          r 	  |            } n# t          $ r d}Y  nw xY w@|s nx| j	        S )	Ns   <metas   <!--s   </s   <!s   <?r    TF)
rc   handleComment
handleMetahandlePossibleEndTaghandleOtherhandlePossibleStartTagr:  r   r6  r   )rI   methodDispatchr   keepParsingkeymethods         r   r  zEncodingParser.getEncoding  s@   49$$4 d()t'D-.D$%D$%4./1  	 	AK	  &&&&    -  V9'',, &,fhh(   &+	   }s$   
A%%
A32A3
B$$B43B4c                 6    | j                             d          S )zSkip over commentss   -->rc   r:  r`   s    r   rB  zEncodingParser.handleComment  s    y'''r   c                    | j         j        t          vrdS d}d }	 |                                 }|dS |d         dk    r|d         dk    }|r|	|| _        dS n|d         dk    r#|d         }t          |          }|	|| _        dS nb|d         dk    rVt          t          |d                             }|                                }|t          |          }||r	|| _        dS |})	NTFr   s
   http-equivr   s   content-type   charsets   content)	rc   r<  r=  getAttributer   r   ContentAttrParserr  parse)rI   	hasPragmapendingEncodingattrtentativeEncodingcodeccontentParsers          r   rC  zEncodingParser.handleMeta  s+   9 (<<<4		8$$&&D|t7m++ $Q? :I  %_%@(7$u!W
**(,Q%*+<==E((-$u ) !W
**$5mDG6L6L$M$MM(5(;(;(=(=%(4 ./@ A A ,( 805',u277	8r   c                 ,    |                      d          S )NF)handlePossibleTagr`   s    r   rF  z%EncodingParser.handlePossibleStartTag  s    %%e,,,r   c                 T    t          | j                   |                     d          S )NT)r%  rc   rY  r`   s    r   rD  z#EncodingParser.handlePossibleEndTag  s#    TY%%d+++r   c                 J   | j         }|j        t          vr,|r(|                                 |                                  dS |                    t                    }|dk    r|                                 n,|                                 }||                                 }|dS )NTr    )rc   r<  asciiLettersBytesr'  rE  r4  spacesAngleBracketsrO  )rI   endTagrc   r   rT  s        r   rY  z EncodingParser.handlePossibleTag  s    y#444  #  """4NN.//99 MMOOOO $$&&D"((** "tr   c                 6    | j                             d          S )Nr   rL  r`   s    r   rE  zEncodingParser.handleOther  s    y%%%r   c                    | j         }|                    t          t          dg          z            }|t	          |          dk    sJ |dv rdS g }g }	 |dk    r|rn|t          v r|                                }nu|dv rd                    |          dfS |t          v r(|                    |                                           n|dS |                    |           t          |          }|dk    r+|
                                 d                    |          dfS t          |           |                                }|d	v r|}	 t          |          }||k    r9t          |           d                    |          d                    |          fS |t          v r(|                    |                                           n|                    |           |d
k    rd                    |          dfS |t          v r(|                    |                                           n|dS |                    |           	 t          |          }|t          v r*d                    |          d                    |          fS |t          v r(|                    |                                           n|dS |                    |           )z_Return a name,value pair for the next attribute in the stream,
        if one is found, or None   /Nr   )r   NT   =)ra  r   r   )   '   "r   )rc   r   r=  	frozensetrM   re   asciiUppercaseBytesrb   r  r%  r'  r]  )rI   rc   r   attrName	attrValue	quoteChars         r   rO  zEncodingParser.getAttribute  s    yII*Yv->->>??yCFFaKKKK4		DyyXy***IIKKl""xx))3..)))		****t"""T

A!	$ 99MMOOO88H%%s**T


IIKKI(JJ	>>JJJ88H--sxx	/B/BBB---$$QWWYY//// $$Q'''( $YY88H%%s**%%%QWWYY''''Y4Q		$T

A'''xx))388I+>+>>>)))  ++++t  ###		$r   N)rl   rm   rn   ro   rJ   r  rB  rC  rF  rD  rY  rE  rO  r^   r   r   r  r    s        II  
  <( ( ("8 "8 "8H- - -, , ,  .& & &J$ J$ J$ J$ J$r   r  c                       e Zd Zd Zd ZdS )rP  c                 B    t          |t                    sJ || _        d S r   )ru   rZ   rc   r@  s     r   rJ   zContentAttrParser.__init__a  s#    $&&&&&			r   c                    	 | j                             d           | j         xj        dz  c_        | j                                          | j         j        dk    sd S | j         xj        dz  c_        | j                                          | j         j        dv rb| j         j        }| j         xj        dz  c_        | j         j        }| j                             |          r| j         || j         j                 S d S | j         j        }	 | j                             t                     | j         || j         j                 S # t          $ r | j         |d          cY S w xY w# t          $ r Y d S w xY w)NrN  r   rb  )rd  rc  )rc   r:  rH   r   r<  r4  r=  r   )rI   	quoteMarkoldPositions      r   rQ  zContentAttrParser.parsee  s   	 IZ(((I!#INN9(D00tI!#INNy$44 I1		""a'"""i09##I..  9[1C%CDD4 #i03I''(<===9[1C%CDD$ 3 3 39[\\22223  	 	 	44	s=   AE BE :E 7D? ?EE EE 
E,+E,N)rl   rm   rn   rJ   rQ  r^   r   r   rP  rP  `  s2              r   rP  c                     t          | t                    r(	 |                     d          } n# t          $ r Y dS w xY w| &	 t	          j        |           S # t          $ r Y dS w xY wdS )z{Return the python codec name corresponding to an encoding or None if the
    string doesn't correspond to a valid encoding.r   N)ru   rZ   decodeUnicodeDecodeErrorwebencodingslookupAttributeError)r   s    r   r   r     s     (E"" 	w//HH! 	 	 	44	 	&x000 	 	 	44	 ts   - 
;;A 
A#"A#)/
__future__r   r   r   sixr   	six.movesr   r   r  r   ior	   r
   rr  	constantsr   r   r   r   r   r   r   re  r=  r\  rf  r]  invalid_unicode_no_surrogater   r   r   evalr   r   ascii_punctuation_rer   objectrD   r   r|   r}   rZ   r  r  rP  r   r^   r   r   <module>r~     s_   B B B B B B B B B B       ) ) ) ) ) ) ) )  				                     I I I I I I I I I I I I ( ( ( ( ( (       !y!S!S?!S!S!STT IMMMMMNN i Q Q. Q Q QRR *YYd|-D-DD   j 	" 
B
 (+s227S7Y7YZ]7^7^bc7c7c7c7c#$@"$E$(D)<$=$=%>$'%( ) ) $$@AA2 2 2  "rz"mnn  G G G G GV G G GT7 7 7.c< c< c< c< c<V c< c< c<LE E E E E2 E E EP_ _ _ _ _E _ _ _Dy$ y$ y$ y$ y$V y$ y$ y$x$ $ $ $ $ $ $ $N    r   