o
    /hW                     @   s   d Z ddlZddlZddlZdd Zd"ddZd"dd	Zd"d
dZd#ddZd$ddZ	dd Z
dd ZG dd dejZG dd dejZG dd dejZG dd dejZejdd Zeejd d!d  ZdS )%zPython codec for CSS.    Nc                 C   s   d dd | D S )N c                 s   s    | ]}t |V  qd S N)chr).0byte r   B/var/www/html/myenv/lib/python3.10/site-packages/cssutils/codec.py	<genexpr>   s    zchars.<locals>.<genexpr>)join)
bytestringr   r   r   chars   s   r   Fc                 C   s  d}d}d}d}d}d}d}d}	d	}
d
}d}t | }|dkr!| d }|dkr,|| M }|dkr7|||B  M }|dkr@|| M }|dkrM||	|B |B  M }|dkrZ|||
B |B  M }|dkr!| d }|dkrl|| M }|dkrw|||B  M }|dkr|| M }|dkr|||B |	B |
B  M }|dkr|| M }|dkr|| M }|dkr!| d }|dkr|| M }|dkr|| M }|dkr|||	B |
B  M }|dkr|| M }|dkr|| M }|dkr!| d }| dd ddd kr|| M }|dkr|||B |	B  M }|dkr|| M }|dkr||
 M }|dkr!|| M }|dkr(dS ||d @ s||kr;|dkr;dS ||krG|dkrGdS ||krS|dkrSdS ||kr_|dkr_dS ||krk|dkrkdS ||krw|dkrwdS ||kr|dkrdS ||	kr|dkrdS ||
kr|dkrdS ||kr|dkrd}t| }|d t | |kr|d!t |}|dkr|t || d"fS |rdS d#S )$a%  
    Detect the encoding of the byte string ``input``, which contains the
    beginning of a CSS file. This function returns the detected encoding (or
    ``None`` if it hasn't got enough data), and a flag that indicates whether
    that encoding has been detected explicitely or implicitely. To detect the
    encoding the first few bytes are used (or if ``input`` is ASCII compatible
    and starts with a charset rule the encoding name from the rule). "Explicit"
    detection means that the bytes start with a BOM or a charset rule.

    If the encoding can't be detected yet, ``None`` is returned as the encoding.
    ``final`` specifies whether more data will be available in later calls or
    not. If ``final`` is true, ``detectencoding_str()`` will never return
    ``None`` as the encoding.
                       @         i   i  r               c         h   s     a   utf-8F)	utf-8-sigT)zutf-16T)z	utf-16-leF)z	utf-16-beF)zutf-32T)z	utf-32-leF)z	utf-32-beF
@charset "N"TNF)lenr   find)inputfinalCANDIDATE_UTF_8_SIGCANDIDATE_UTF_16_AS_LECANDIDATE_UTF_16_AS_BECANDIDATE_UTF_16_LECANDIDATE_UTF_16_BECANDIDATE_UTF_32_AS_LECANDIDATE_UTF_32_AS_BECANDIDATE_UTF_32_LECANDIDATE_UTF_32_BECANDIDATE_CHARSET
candidateslicprefix
charsinputposr   r   r   detectencoding_str   s   

























r9   c                 C   sT   d}|  |r| dt|}|dkr| t|| dfS dS |s&| | s(dS dS )a  
    Detect the encoding of the unicode string ``input``, which contains the
    beginning of a CSS file. The encoding is detected from the charset rule
    at the beginning of ``input``. If there is no charset rule, ``"utf-8"``
    will be returned.

    If the encoding can't be detected yet, ``None`` is returned. ``final``
    specifies whether more data will be available in later calls or not. If
    ``final`` is true, ``detectencoding_unicode()`` will never return ``None``.
    r"   r#   r   Tr   r$   )
startswithr&   r%   )r'   r(   r6   r8   r   r   r   detectencoding_unicode   s   
r;   c                 C   s   d}t | t |kr4| |r2| dt |}|dkr1|dd dkr'd}|| | |d  S n| S || r;|r=| S |rA| S dS )	a  
    Replace the name of the encoding in the charset rule at the beginning of
    ``input`` with ``encoding``. If ``input`` doesn't starts with a charset
    rule, ``input`` will be returned unmodified.

    If the encoding can't be found yet, ``None`` is returned. ``final``
    specifies whether more data will be available in later calls or not.
    If ``final`` is true, ``_fixencoding()`` will never return ``None``.
    r"   r#   r   _-r!   r    N)r%   r:   r&   replacelower)r'   encodingr(   r6   r8   r   r   r   _fixencoding   s   

rA   strictTc                 C   s   z|   } W n	 ty   Y nw |d u s|s/t| d\}}|dkr%td|r)|r-|d u r/|}t|| |\} }t| t|d|fS )NTcss css not allowed as encoding name)tobytesAttributeErrorr9   
ValueErrorcodecs
getdecoderrA   str)r'   errorsr@   force	_encodingexplicitconsumedr   r   r   decode   s"   rP   c                 C   s|   t | }|d u r t| dd }|dd dkrt| dd} nt| t|d} |dkr0tdt|}|| |d |fS )	NTr   r<   r=   r!   r    rC   rD   )	r%   r;   r>   r?   rA   rJ   rG   rH   
getencoder)r'   rK   r@   rO   encoderr   r   r   encode   s   
rS   c                 C   s"   d}| D ]
}|d> t | }q|S )Nr   r   ord)bytesir   r   r   r   
_bytes2int   s   rX   c                 C   s2   g }| r| dt| d@  | dL } | sd|S )Nr   r   r   r   )insertr   r
   )rW   vr   r   r   
_int2bytes  s   
r[   c                   @   sZ   e Zd ZdddZdd Zdd	d
Zdd Zdd Zdd Ze	eeZ
dd Zdd ZdS )IncrementalDecoderrB   NTc                 C   s6   d | _ || _|| _tj| | || _d| _d| _d S N    F)	decoderr@   rL   rH   r\   __init___errorsbufferheaderfixed)selfrK   r@   rL   r   r   r   r`     s   
zIncrementalDecoder.__init__c                 c   @    |D ]}|  |d}|r|V  q|  dd}|r|V  d S d S NFr   T)rP   rd   r'   partresultr   r   r   
iterdecode     
zIncrementalDecoder.iterdecodeFc                 C   s   | j d u rF| j| }| jd u s| js7t||\}}|d u r"|| _dS |dkr*td|r/| jr4| jd u r7|| _d| _t| j}|| j| _ | j	rP| j 
||S | j| j 
|| }| j}|dd dkrid}t|t||}|d u rz|| _dS d| _	|S )	Nr   rC   rD   r<   r=   r!   r    T)r_   rb   r@   rL   r9   rG   rH   getincrementaldecoderra   rc   rP   r>   r?   rA   rJ   )rd   r'   r(   r@   rN   r_   output	newoutputr   r   r   rP   $  s<   


zIncrementalDecoder.decodec                 C   s"   t j|  d | _d| _d| _d S r]   )rH   r\   resetr_   rb   rc   rd   r   r   r   ro   K  s   
zIncrementalDecoder.resetc                 C      | j S r   ra   rp   r   r   r   
_geterrorsQ     zIncrementalDecoder._geterrorsc                 C      | j d ur	|| j _|| _d S r   )r_   rK   ra   rd   rK   r   r   r   
_seterrorsT     

zIncrementalDecoder._seterrorsc                 C   sL   | j d ur| j| j| jd| j  f}n
| j| j| jdd f}dtt|fS )NTFr   )r_   r@   rb   rc   getstaterX   marshaldumpsrd   stater   r   r   ry   \  s   
zIncrementalDecoder.getstatec                 C   sn   t t|d }|d | _|d | _|d | _|d d ur2t| j| j| _	| j	
|d  d S d | _	d S )Nr   r   r   r   r   )r[   rz   loadsr@   rb   rc   rH   rl   ra   r_   setstater|   r   r   r   r   i  s   



zIncrementalDecoder.setstaterB   NTF)__name__
__module____qualname__r`   rj   rP   ro   rs   rw   propertyrK   ry   r   r   r   r   r   r\     s    

	'
r\   c                   @   sZ   e Zd ZdddZdd Zddd	Zd
d Zdd Zdd Ze	eeZ
dd Zdd ZdS )IncrementalEncoderrB   Nc                 C   s*   d | _ || _tj| | || _d| _d S Nr   )rR   r@   rH   r   r`   ra   rb   )rd   rK   r@   r   r   r   r`   v  s
   
zIncrementalEncoder.__init__c                 c   re   rf   )rS   rg   r   r   r   
iterencode  rk   zIncrementalEncoder.iterencodeFc                 C   s   | j d u rr| j| }| jd ur2| j}|dd dkrd}t|t||}|d u r/|| _dS |}nt||d | _| jd urm| jdkrHtdt	
| j}| j}| jdd dkrbt|dd	}|| j| _ d| _n|| _dS | j ||S )
Nr<   r=   r!   r    r   r   rC   rD   T)rR   rb   r@   r>   r?   rA   rJ   r;   rG   rH   lookupincrementalencoderra   rS   )rd   r'   r(   r@   newinputinfor   r   r   rS     s0   




zIncrementalEncoder.encodec                 C   s   t j|  d | _d| _d S r   )rH   r   ro   rR   rb   rp   r   r   r   ro     s   
zIncrementalEncoder.resetc                 C   rq   r   rr   rp   r   r   r   rs     rt   zIncrementalEncoder._geterrorsc                 C   ru   r   )rR   rK   ra   rv   r   r   r   rw     rx   zIncrementalEncoder._seterrorsc                 C   s@   | j d ur| j| jd| j  f}n| j| jdd f}tt|S )NTF)rR   r@   rb   ry   rX   rz   r{   r|   r   r   r   ry     s   
zIncrementalEncoder.getstatec                 C   s`   t t|}|d | _|d | _|d d ur+t| j| j| _| j	|d  d S d | _d S )Nr   r   r   r   )
r[   rz   r~   r@   rb   rH   getincrementalencoderra   rR   r   r|   r   r   r   r     s   


zIncrementalEncoder.setstaterB   Nr   )r   r   r   r`   r   rS   ro   rs   rw   r   rK   ry   r   r   r   r   r   r   u  s    
	
	
r   c                   @   :   e Zd ZdddZdddZdd	 Zd
d ZeeeZdS )StreamWriterrB   NFc                 C   s,   t j| || d | _|| _|| _d| _d S r   )rH   r   r`   streamwriterr@   ra   rb   )rd   streamrK   r@   headerr   r   r   r`     
   
zStreamWriter.__init__c                 C   s  t |}| jd u ry| j| }t |}| jd ur:| j}|dd dkr&d}t|t|d}|d u r7|| _dS |}nt|dd | _| jd urt| jdkrPt	d	t
| j| j| j| _| j}| jdd dkrpt|dd
}d| _n|| _dS | j||d |fS )Nr<   r=   r!   r    Fr   r   r   rC   rD   Tr   )r%   r   rb   r@   r>   r?   rA   rJ   r;   rG   rH   	getwriterr   ra   rS   )rd   r'   rK   r4   r@   r   r   r   r   rS     s6   





zStreamWriter.encodec                 C   rq   r   rr   rp   r   r   r   rs     rt   zStreamWriter._geterrorsc                 C   4   z| j d ur
|| j _W n	 ty   Y nw || _d S r   )r   rK   rF   ra   rv   r   r   r   rw        

zStreamWriter._seterrors)rB   NFrB   )	r   r   r   r`   rS   rs   rw   r   rK   r   r   r   r   r     s    

!r   c                   @   r   )StreamReaderrB   NTc                 C   s,   t j| || d | _|| _|| _|| _d S r   )rH   r   r`   streamreaderr@   rL   ra   )rd   r   rK   r@   rL   r   r   r   r`     r   zStreamReader.__init__c           	      C   s   | j d u rh| jd u s| js/t|d\}}|d u rdS |dkr"td|r'| jr,| jd u r/|| _t| j}|| j| j}|	||\}}| j}|
dd dkrSd}t|t|d}|d urf|| _ ||fS dS | j 	||S )	NFr   rC   rD   r<   r=   r!   r    )r   r@   rL   r9   rG   rH   	getreaderr   ra   rP   r>   r?   rA   rJ   )	rd   r'   rK   r@   rN   r   rm   rO   rn   r   r   r   rP   
  s2   

zStreamReader.decodec                 C   rq   r   rr   rp   r   r   r   rs   #  rt   zStreamReader._geterrorsc                 C   r   r   )r   rK   rF   ra   rv   r   r   r   rw   &  r   zStreamReader._seterrorsr   r   )	r   r   r   r`   rP   rs   rw   r   rK   r   r   r   r   r     s    

r   c              	   C   s$   | dkrd S t jdttttttdS )NrC   )namerS   rP   r   incrementaldecoderr   r   )rH   	CodecInforS   rP   r   r\   r   r   )r   r   r   r   search_function4  s   r   	cssescapec                 C   s>   t | tstd|  ddd | j| j| j D | jfS )z)
    Error handler for CSS escaping.
    zdon't know how to handle %rr   c                 s   s    | ]	}d t | V  qdS )z\%06xNrT   )r   r5   r   r   r   r	   K  s    zcssescape.<locals>.<genexpr>)
isinstanceUnicodeEncodeError	TypeErrorr
   objectstartend)excr   r   r   r   C  s
   
 r   r   r   )__doc__rH   	functoolsrz   r   r9   r;   rA   rP   rS   rX   r[   r\   r   r   r   registerr   partialregister_errorr   r   r   r   r   <module>   s*    
 



	fS:2
