o
    a+)hS)                     @   s   d Z ddlmZ ddlZddlmZ dZddd	d
dZi Zdd Z	dd Z
dd ZG dd deZe
dZe
dZe
dZd+ddZdd ZedfddZd+dd Zd!d" Zedfd#d$Zd%d& ZG d'd( d(eZG d)d* d*eZdS ),a  

    webencodings
    ~~~~~~~~~~~~

    This is a Python implementation of the `WHATWG Encoding standard
    <http://encoding.spec.whatwg.org/>`. See README for details.

    :copyright: Copyright 2012 by Simon Sapin
    :license: BSD, see LICENSE for details.

    )unicode_literalsN   )LABELSz0.5.1z
iso-8859-8zmac-cyrillicz	mac-romanZcp874)ziso-8859-8-izx-mac-cyrillic	macintoshzwindows-874c                 C   s   |  d dS )a9  Transform (only) ASCII letters to lower case: A-Z is mapped to a-z.

    :param string: An Unicode string.
    :returns: A new Unicode string.

    This is used for `ASCII case-insensitive
    <http://encoding.spec.whatwg.org/#ascii-case-insensitive>`_
    matching of encoding labels.
    The same matching is also used, among other things,
    for `CSS keywords <http://dev.w3.org/csswg/css-values/#keywords>`_.

    This is different from the :meth:`~py:str.lower` method of Unicode strings
    which also affect non-ASCII characters,
    sometimes mapping them into the ASCII range:

        >>> keyword = u'Bac\N{KELVIN SIGN}ground'
        >>> assert keyword.lower() == u'background'
        >>> assert ascii_lower(keyword) != keyword.lower()
        >>> assert ascii_lower(keyword) == u'bac\N{KELVIN SIGN}ground'

    utf8)encodelowerdecode)string r   `C:\Users\User\Downloads\Proyecto_IoT\venv\Lib\site-packages\pip/_vendor/webencodings/__init__.pyascii_lower#   s   r   c                 C   sx   t | d} t| }|du rdS t|}|du r:|dkr&ddlm} nt||}t	|}t
||}|t|< |S )u<  
    Look for an encoding by its label.
    This is the spec’s `get an encoding
    <http://encoding.spec.whatwg.org/#concept-encoding-get>`_ algorithm.
    Supported labels are listed there.

    :param label: A string.
    :returns:
        An :class:`Encoding` object, or :obj:`None` for an unknown label.

    z	
 Nzx-user-definedr   )
codec_info)r   stripr   getCACHEZx_user_definedr   PYTHON_NAMEScodecslookupEncoding)labelnameencodingr   Zpython_namer   r   r   r   =   s   



r   c                 C   s.   t | dr| S t| }|du rtd|  |S )z
    Accept either an encoding object or label.

    :param encoding: An :class:`Encoding` object or a label string.
    :returns: An :class:`Encoding` object.
    :raises: :exc:`~exceptions.LookupError` for an unknown label.

    r   NzUnknown encoding label: %r)hasattrr   LookupError)Zencoding_or_labelr   r   r   r   _get_encoding[   s   
	r   c                   @   s    e Zd ZdZdd Zdd ZdS )r   aO  Reresents a character encoding such as UTF-8,
    that can be used for decoding or encoding.

    .. attribute:: name

        Canonical name of the encoding

    .. attribute:: codec_info

        The actual implementation of the encoding,
        a stdlib :class:`~codecs.CodecInfo` object.
        See :func:`codecs.register`.

    c                 C   s   || _ || _d S N)r   r   )selfr   r   r   r   r   __init__|   s   
zEncoding.__init__c                 C   s
   d| j  S )Nz<Encoding %s>)r   )r   r   r   r   __repr__   s   
zEncoding.__repr__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   m   s    r   zutf-8zutf-16lezutf-16bereplacec                 C   s2   t |}t| \}} |p|}|j| |d |fS )a  
    Decode a single string.

    :param input: A byte string
    :param fallback_encoding:
        An :class:`Encoding` object or a label string.
        The encoding to use if :obj:`input` does note have a BOM.
    :param errors: Type of error handling. See :func:`codecs.register`.
    :raises: :exc:`~exceptions.LookupError` for an unknown encoding label.
    :return:
        A ``(output, encoding)`` tuple of an Unicode string
        and an :obj:`Encoding`.

    r   )r   _detect_bomr   r	   )inputfallback_encodingerrorsZbom_encodingr   r   r   r   r	      s   r	   c                 C   sV   |  drt| dd fS |  drt| dd fS |  dr't| dd fS d| fS )zBReturn (bom_encoding, input), with any BOM removed from the input.s      Ns   s   ﻿   )
startswith_UTF16LE_UTF16BEUTF8)r&   r   r   r   r%      s   


r%   strictc                 C   s   t |j| |d S )a;  
    Encode a single string.

    :param input: An Unicode string.
    :param encoding: An :class:`Encoding` object or a label string.
    :param errors: Type of error handling. See :func:`codecs.register`.
    :raises: :exc:`~exceptions.LookupError` for an unknown encoding label.
    :return: A byte string.

    r   )r   r   r   )r&   r   r(   r   r   r   r      s   r   c                 C   s$   t ||}t| |}t|}||fS )a  
    "Pull"-based decoder.

    :param input:
        An iterable of byte strings.

        The input is first consumed just enough to determine the encoding
        based on the precense of a BOM,
        then consumed on demand when the return value is.
    :param fallback_encoding:
        An :class:`Encoding` object or a label string.
        The encoding to use if :obj:`input` does note have a BOM.
    :param errors: Type of error handling. See :func:`codecs.register`.
    :raises: :exc:`~exceptions.LookupError` for an unknown encoding label.
    :returns:
        An ``(output, encoding)`` tuple.
        :obj:`output` is an iterable of Unicode strings,
        :obj:`encoding` is the :obj:`Encoding` that is being used.

    )IncrementalDecoder_iter_decode_generatornext)r&   r'   r(   decoder	generatorr   r   r   r   iter_decode   s   

r5   c                 c   s    |j }t| } | D ]}||}|r"|jdusJ |jV  |V   nq
|ddd}|jdus0J |jV  |r9|V  dS | D ]}||}|rH|V  q=|ddd}|rV|V  dS dS )zqReturn a generator that first yields the :obj:`Encoding`,
    then yields output chukns as Unicode strings.

    N    Tfinal)r	   iterr   )r&   r3   r	   chunckoutputr   r   r   r1      s4   
r1   c                 C   s   t ||j}t| |S )uY  
    “Pull”-based encoder.

    :param input: An iterable of Unicode strings.
    :param encoding: An :class:`Encoding` object or a label string.
    :param errors: Type of error handling. See :func:`codecs.register`.
    :raises: :exc:`~exceptions.LookupError` for an unknown encoding label.
    :returns: An iterable of byte strings.

    )IncrementalEncoderr   _iter_encode_generator)r&   r   r(   r   r   r   r   iter_encode   s   
r>   c                 c   s<    | D ]}||}|r|V  q|ddd}|r|V  d S d S )N Tr7   r   )r&   r   r:   r;   r   r   r   r=     s   
r=   c                   @   s$   e Zd ZdZd	ddZd
ddZdS )r0   uO  
    “Push”-based decoder.

    :param fallback_encoding:
        An :class:`Encoding` object or a label string.
        The encoding to use if :obj:`input` does note have a BOM.
    :param errors: Type of error handling. See :func:`codecs.register`.
    :raises: :exc:`~exceptions.LookupError` for an unknown encoding label.

    r$   c                 C   s&   t || _|| _d| _d | _d | _d S )Nr6   )r   _fallback_encoding_errors_buffer_decoderr   )r   r'   r(   r   r   r   r     s
   

zIncrementalDecoder.__init__Fc                 C   s|   | j }|dur|||S | j| }t|\}}|du r+t|dk r(|s(|| _dS | j}|j| jj}|| _ || _	|||S )zDecode one chunk of the input.

        :param input: A byte string.
        :param final:
            Indicate that no more input is available.
            Must be :obj:`True` if this is the last call.
        :returns: An Unicode string.

        Nr*   r?   )
rC   rB   r%   lenr@   r   incrementaldecoderrA   r	   r   )r   r&   r8   r3   r   r   r   r   r	   '  s   



zIncrementalDecoder.decodeNr$   )F)r    r!   r"   r#   r   r	   r   r   r   r   r0     s    

r0   c                   @   s   e Zd ZdZedfddZdS )r<   u  
    “Push”-based encoder.

    :param encoding: An :class:`Encoding` object or a label string.
    :param errors: Type of error handling. See :func:`codecs.register`.
    :raises: :exc:`~exceptions.LookupError` for an unknown encoding label.

    .. method:: encode(input, final=False)

        :param input: An Unicode string.
        :param final:
            Indicate that no more input is available.
            Must be :obj:`True` if this is the last call.
        :returns: A byte string.

    r/   c                 C   s   t |}|j|j| _d S r   )r   r   incrementalencoderr   )r   r   r(   r   r   r   r   T  s   zIncrementalEncoder.__init__N)r    r!   r"   r#   r.   r   r   r   r   r   r<   C  s    r<   rF   )r#   
__future__r   r   labelsr   VERSIONr   r   r   r   r   objectr   r.   r,   r-   r	   r%   r   r5   r1   r>   r=   r0   r<   r   r   r   r   <module>   s6   

 
3