3
^}O#                 @   s  d Z ddlmZ ddlmZ ddlZddlZddlZdgZd3ddZ	d4dd	Z
d
d ZG dd deZe Zedd dfejedd ed jfdejedjfedd dfejedd ed jfeddd dfejedd ed jfeddd dfejedd ed jfeddd dfejedd ed jfeddd dfejed d ed jfed!dd" dfejed#d$ ed% jfed!dd" dfejed&d$ ed% jfeddd" dfejed'd( ed) jfeddd" dfejed*d( ed) jfd+ejed,jfd-ejed.jfd/ejed0jfd1ejed2jfgZdS )5z
    tinycss.decoding
    ----------------

    Decoding stylesheets from bytes to Unicode.
    http://www.w3.org/TR/CSS21/syndata.html#charset

    :copyright: (c) 2012 by Simon Sapin.
    :license: BSD, see LICENSE for more details.
    )unicode_literals)	unhexlifyNdecodec             C   s6  |rt | |}|dk	r||fS xtD ]\}}|| }|r$t|t}|r|\}	}
|	|jd}|jdd}|jdd}|jddjd	dj dkr||
7 }|jddjd}t | |}|r|o|j	d  r||fS P q$W x.||gD ]"}|rt | |}|dk	r||fS qW t | d}|dk	r$|dfS t | ddddfS )a;  
    Determine the character encoding from the passed metadata and the
    ``@charset`` rule in the stylesheet (if any); and decode accordingly.
    If no encoding information is available or decoding fails,
    decoding defaults to UTF-8 and then fall back on ISO-8859-1.

    :param css_bytes:
        a CSS stylesheet as a byte string
    :param protocol_encoding:
        The "charset" parameter of a "Content-Type" HTTP header (if any),
        or similar metadata for other protocols.
    :param linking_encoding:
        ``<link charset="">`` or other metadata from the linking mechanism
        (if any)
    :param document_encoding:
        Encoding of the referring style sheet or document (if any)
    :return:
        A tuple of an Unicode string, with any BOM removed, and the
        encoding that was used.

    N   asciireplaceu   �?- _utf16utf32z
@charset "zUTF-8z
ISO-8859-1F)fallback)r   r   )
try_encodingENCODING_MAGIC_NUMBERS
isinstancetuplegroupr   r   lowerencode
startswith)	css_bytesZprotocol_encodingZlinking_encodingZdocument_encodingcss_unicodeencodingpatternmatchZhas_at_charsetextractZ
endianness r   P/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/tinycss/decoding.pyr      s>    





Tc             C   sX   |r.y| j |}W q8 ttfk
r*   d S X n
| j |}|rT|d dkrT|dd  }|S )Nr   u   ﻿r   )r   UnicodeDecodeErrorLookupError)r   r   r   r   r   r   r   r   U   s    
r   c             C   s   t jt| jddjdS )N r
   r   )reescaper   r   r   )Zhex_datar   r   r   hex2red   s    r$   c               @   s   e Zd ZdZdd ZdS )Slicerz2Slice()[start:stop:end] == slice(start, stop, end)c             C   s
   t j|S )N)operator
itemgetter)selfZslice_r   r   r   __getitem__j   s    zSlicer.__getitem__N)__name__
__module____qualname____doc__r)   r   r   r   r   r%   h   s   r%   r
   z&EF BB BF 40 63 68 61 72 73 65 74 20 22s   ([^"]*?)z22 3BzUTF-8zEF BB BFz40 63 68 61 72 73 65 74 20 22r      z-BEz@FE FF 00 40 00 63 00 68 00 61 00 72 00 73 00 65 0074 00 20 00 22s   (( [^"])*?)z00 22 00 3Bz:00 40 00 63 00 68 00 61 00 72 00 73 00 65 00 74 0020 00 22z-LEz@FF FE 40 00 63 00 68 00 61 00 72 00 73 00 65 00 7400 20 00 22 00s   (([^"] )*?)z22 00 3B 00z:40 00 63 00 68 00 61 00 72 00 73 00 65 00 74 00 2000 22 00      z00 00 FE FF 00 00 00 40 00 00 00 63 00 00 00 68 0000 00 61 00 00 00 72 00 00 00 73 00 00 00 65 00 0000 74 00 00 00 20 00 00 00 22s   ((   [^"])*?)z00 00 00 22 00 00 00 3Bzu00 00 00 40 00 00 00 63 00 00 00 68 00 00 00 61 0000 00 72 00 00 00 73 00 00 00 65 00 00 00 74 00 0000 20 00 00 00 22zFF FE 00 00 40 00 00 00 63 00 00 00 68 00 00 00 6100 00 00 72 00 00 00 73 00 00 00 65 00 00 00 74 0000 00 20 00 00 00 22 00 00 00s   (([^"]   )*?)z22 00 00 00 3B 00 00 00zu40 00 00 00 63 00 00 00 68 00 00 00 61 00 00 00 7200 00 00 73 00 00 00 65 00 00 00 74 00 00 00 20 0000 00 22 00 00 00z	UTF-32-BEz00 00 FE FFz	UTF-32-LEzFF FE 00 00z	UTF-16-BEzFE FFz	UTF-16-LEzFF FE)NNN)T)r-   
__future__r   binasciir   r&   r"   sys__all__r   r   r$   objectr%   Slicecompiler   r   r   r   r   r   <module>   sT    
<
	"