o
    e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   >D:\Projects\ConvertPro\env\Lib\site-packages\cssutils/codec.py	<genexpr>   s    zchars.<locals>.<genexpr>)join)Z
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finalZCANDIDATE_UTF_8_SIGZCANDIDATE_UTF_16_AS_LEZCANDIDATE_UTF_16_AS_BEZCANDIDATE_UTF_16_LEZCANDIDATE_UTF_16_BEZCANDIDATE_UTF_32_AS_LEZCANDIDATE_UTF_32_AS_BEZCANDIDATE_UTF_32_LEZCANDIDATE_UTF_32_BEZCANDIDATE_CHARSET
candidateslicprefixZ
charsinputposr   r   r   detectencoding_str   s   

























r-   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'   r+   r,   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'   r+   r,   r   r   r   _fixencoding   s   

r5   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AttributeErrorr-   
ValueErrorcodecs
getdecoderr5   str)r&   errorsr4   force	_encodingexplicitconsumedr   r   r   decode   s"   rD   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   r0   r1   r    r   r7   r8   )	r$   r/   r2   r3   r5   r>   r;   r<   
getencoder)r&   r?   r4   rC   encoderr   r   r   encode   s   
rG   c                 C   s"   d}| D ]
}|d> t | }q|S )Nr   r   ord)bytesir   r   r   r   
_bytes2int   s   rL   c                 C   s2   g }| r| dt| d@  | dL } | sd|S )Nr   r   r   r   )insertr   r
   )rK   vr   r   r   
_int2bytes  s   
rO   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 )IncrementalDecoderr6   NTc                 C   s6   d | _ || _|| _tj| | || _d| _d| _d S N    F)	decoderr4   r@   r<   rP   __init___errorsbufferheaderfixed)selfr?   r4   r@   r   r   r   rT     s   
zIncrementalDecoder.__init__c                 c   @    |D ]}|  |d}|r|V  q|  dd}|r|V  d S d S NFr   T)rD   rX   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   r7   r8   r0   r1   r    r   T)rS   rV   r4   r@   r-   r;   r<   getincrementaldecoderrU   rW   rD   r2   r3   r5   r>   )rX   r&   r'   r4   rB   rS   output	newoutputr   r   r   rD   $  s<   


zIncrementalDecoder.decodec                 C   s"   t j|  d | _d| _d| _d S rQ   )r<   rP   resetrS   rV   rW   rX   r   r   r   rc   K  s   
zIncrementalDecoder.resetc                 C      | j S r   rU   rd   r   r   r   
_geterrorsQ     zIncrementalDecoder._geterrorsc                 C      | j d ur	|| j _|| _d S r   )rS   r?   rU   rX   r?   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   )rS   r4   rV   rW   getstaterL   marshaldumpsrX   stater   r   r   rm   \  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   )rO   rn   loadsr4   rV   rW   r<   r`   rU   rS   setstaterp   r   r   r   rs   i  s   



zIncrementalDecoder.setstater6   NTF)__name__
__module____qualname__rT   r^   rD   rc   rg   rk   propertyr?   rm   rs   r   r   r   r   rP     s    

	'
rP   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 )IncrementalEncoderr6   Nc                 C   s*   d | _ || _tj| | || _d| _d S Nr   )rF   r4   r<   rz   rT   rU   rV   )rX   r?   r4   r   r   r   rT   v  s
   
zIncrementalEncoder.__init__c                 c   rY   rZ   )rG   r[   r   r   r   
iterencode  r_   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 )
Nr0   r1   r    r   r   r   r7   r8   T)rF   rV   r4   r2   r3   r5   r>   r/   r;   r<   lookupincrementalencoderrU   rG   )rX   r&   r'   r4   newinputinfor   r   r   rG     s0   




zIncrementalEncoder.encodec                 C   s   t j|  d | _d| _d S r{   )r<   rz   rc   rF   rV   rd   r   r   r   rc     s   
zIncrementalEncoder.resetc                 C   re   r   rf   rd   r   r   r   rg     rh   zIncrementalEncoder._geterrorsc                 C   ri   r   )rF   r?   rU   rj   r   r   r   rk     rl   zIncrementalEncoder._seterrorsc                 C   s@   | j d ur| j| jd| j  f}n| j| jdd f}tt|S )NTF)rF   r4   rV   rm   rL   rn   ro   rp   r   r   r   rm     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   )
rO   rn   rr   r4   rV   r<   getincrementalencoderrU   rF   rs   rp   r   r   r   rs     s   


zIncrementalEncoder.setstater6   Nru   )rv   rw   rx   rT   r|   rG   rc   rg   rk   ry   r?   rm   rs   r   r   r   r   rz   u  s    
	
	
rz   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 )StreamWriterr6   NFc                 C   s,   t j| || d | _|| _|| _d| _d S r{   )r<   r   rT   streamwriterr4   rU   rV   )rX   streamr?   r4   headerr   r   r   rT     
   
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 )Nr0   r1   r    r   Fr   r   r   r7   r8   Tr   )r$   r   rV   r4   r2   r3   r5   r>   r/   r;   r<   	getwriterr   rU   rG   )rX   r&   r?   r)   r4   r   r   r   r   rG     s6   





zStreamWriter.encodec                 C   re   r   rf   rd   r   r   r   rg     rh   zStreamWriter._geterrorsc                 C   4   z| j d ur
|| j _W n	 ty   Y nw || _d S r   )r   r?   r:   rU   rj   r   r   r   rk        

zStreamWriter._seterrors)r6   NFr6   )	rv   rw   rx   rT   rG   rg   rk   ry   r?   r   r   r   r   r     s    

!r   c                   @   r   )StreamReaderr6   NTc                 C   s,   t j| || d | _|| _|| _|| _d S r   )r<   r   rT   streamreaderr4   r@   rU   )rX   r   r?   r4   r@   r   r   r   rT     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   r7   r8   r0   r1   r    r   )r   r4   r@   r-   r;   r<   	getreaderr   rU   rD   r2   r3   r5   r>   )	rX   r&   r?   r4   rB   r   ra   rC   rb   r   r   r   rD   
  s2   

zStreamReader.decodec                 C   re   r   rf   rd   r   r   r   rg   #  rh   zStreamReader._geterrorsc                 C   r   r   )r   r?   r:   rU   rj   r   r   r   rk   &  r   zStreamReader._seterrorsrt   r   )	rv   rw   rx   rT   rD   rg   rk   ry   r?   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 )Nr7   )namerG   rD   r~   incrementaldecoderr   r   )r<   	CodecInforG   rD   rz   rP   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\%06xNrH   )r   r*   r   r   r   r	   K  s    zcssescape.<locals>.<genexpr>)
isinstanceUnicodeEncodeError	TypeErrorr
   objectstartend)excr   r   r   r   C  s
   
 ru   rt   r   )__doc__r<   rn   	functoolsr   r-   r/   r5   rD   rG   rL   rO   rP   rz   r   r   registerr   partialregister_errorr   r   r   r   r   <module>   s*    
 



	fS:2
