ReS)@sPdZddlmZddlZddlmZdZddd d d d d diZiZddZ ddZ ddZ Gddde Z e dZe dZe dZdddZddZedd d!Zdd"d#Zd$d%Zedd&d'Zd(d)ZGd*d+d+e ZGd,d-d-e ZdS).a webencodings ~~~~~~~~~~~~ This is a Python implementation of the `WHATWG Encoding standard `. See README for details. :copyright: Copyright 2012 by Simon Sapin :license: BSD, see LICENSE for details. )unicode_literalsN)LABELSz0.5.1z iso-8859-8-iz iso-8859-8zx-mac-cyrillicz mac-cyrillic macintoshz mac-romanz windows-874cp874cCs|jdjjdS)a9Transform (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 `_ matching of encoding labels. The same matching is also used, among other things, for `CSS 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)encodelowerdecode)stringr /builddir/build/BUILDROOT/alt-python35-pip-20.2.4-5.el8.x86_64/opt/alt/python35/lib/python3.5/site-packages/pip/_vendor/webencodings/__init__.py ascii_lower#srcCst|jd}tj|}|dkr4dStj|}|dkr|dkrnddlm}n!tj||}tj |}t ||}|t|<|S)u< Look for an encoding by its label. This is the spec’s `get an encoding `_ algorithm. Supported labels are listed there. :param label: A string. :returns: An :class:`Encoding` object, or :obj:`None` for an unknown label. z Nzx-user-definedr) codec_info) rstriprgetCACHEx_user_definedr PYTHON_NAMEScodecslookupEncoding)labelnameencodingr python_namer r r r=s     rcCs?t|dr|St|}|dkr;td||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. rNzUnknown encoding label: %r)hasattrr LookupError)encoding_or_labelrr r r _get_encoding[s   rc@s.eZdZdZddZddZdS)raOReresents 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`. cCs||_||_dS)N)rr)selfrrr r r __init__|s zEncoding.__init__cCs d|jS)Nz )r)r r r r __repr__szEncoding.__repr__N)__name__ __module__ __qualname____doc__r!r"r r r r rms  rzutf-8zutf-16lezutf-16bereplacecCsGt|}t|\}}|p'|}|jj||d|fS)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_bomrr )inputfallback_encodingerrors bom_encodingrr r r r s  r cCss|jdr#t|ddfS|jdrFt|ddfS|jdrit|ddfSd|fS)zBReturn (bom_encoding, input), with any BOM removed from the input.sNss) startswith_UTF16LE_UTF16BEUTF8)r)r r r r(sr(strictcCst|jj||dS)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)rrr)r)rr+r r r rs rcCs4t||}t||}t|}||fS)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_generatornext)r)r*r+decoder generatorrr r r iter_decodes r9ccs|j}t|}x|D];}||}|r|jdk sIt|jV|VPqW|ddd}|jdk st|jV|r|VdSx%|D]}||}|r|VqW|ddd}|r|VdS)zqReturn a generator that first yields the :obj:`Encoding`, then yields output chukns as Unicode strings. NfinalT)r iterrAssertionError)r)r7r chunckoutputr r r r5s,       r5cCst||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)rr+rr r r iter_encodes rBccsIx%|D]}||}|r|VqW|ddd}|rE|VdS)Nr;Tr )r)rr>r?r r r rAs   rAc@s4eZdZdZdddZdddZdS) r4uO “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'cCs7t||_||_d|_d|_d|_dS)Nr:)r_fallback_encoding_errors_buffer_decoderr)r r*r+r r r r!s    zIncrementalDecoder.__init__FcCs|j}|dk r"|||S|j|}t|\}}|dkr|t|dkrs| rs||_dS|j}|jj|jj}||_||_ |||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.rC) rGrFr(lenrDrincrementaldecoderrEr r)r r)r;r7rr r r r 's         zIncrementalDecoder.decodeN)r#r$r%r&r!r r r r r r4s  r4c@s(eZdZdZedddZdS)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. r3cCs(t|}|jj|j|_dS)N)rrincrementalencoderr)r rr+r r r r!Ts zIncrementalEncoder.__init__N)r#r$r%r&r2r!r r r r r@Cs r@)r& __future__rrlabelsrVERSIONrrrrrobjectrr2r0r1r r(rr9r5rBrAr4r@r r r r  s2           3