3 \ @sdZddlZddlZddlmZiZdZdgZejZGddde e Z d d Z d d Z eje ejd kr|ddZejedS)a3 Standard "encodings" Package Standard Python encoding modules are stored in this package directory. Codec modules must have names corresponding to normalized encoding names as defined in the normalize_encoding() function below, e.g. 'utf-8' must be implemented by the module 'utf_8.py'. Each codec module must export the following interface: * getregentry() -> codecs.CodecInfo object The getregentry() API must return a CodecInfo object with encoder, decoder, incrementalencoder, incrementaldecoder, streamwriter and streamreader atttributes which adhere to the Python Codec Interface Standard. In addition, a module may optionally also define the following APIs which are then used by the package's codec search function: * getaliases() -> sequence of encoding name strings to use as aliases Alias names returned by getaliases() must be normalized encoding names as defined by normalize_encoding(). Written by Marc-Andre Lemburg (mal@lemburg.com). (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. N)aliasesz --unknown--*c@s eZdZdS)CodecRegistryErrorN)__name__ __module__ __qualname__r r /usr/lib64/python3.6/__init__.pyr(srcCsjt|trt|d}g}d}xB|D]:}|js6|dkrX|rH|rH|jd|j|d}q"d}q"Wdj|S)a Normalize an encoding name. Normalization works as follows: all non-alphanumeric characters except the dot used for Python package names are collapsed and replaced with a single underscore, e.g. ' -;#' becomes '_'. Leading and trailing underscores are removed. Note that encoding names should be ASCII only; if they do use non-ASCII characters, these must be Latin-1 compatible. asciiF._T) isinstancebytesstrisalnumappendjoin)encodingcharspunctcr r r normalize_encoding+s     rc Cstj|t}|tk r|St|}tj|p:tj|jdd}|dk rN||g}n|g}xN|D]B}| sZd|krnqZytd|tdd}Wntk rYqZXPqZWd}y |j }Wnt k rd}YnX|dkrdt|<dS|}t |t j s:dt|kodkns$td|j|jft|d st|d  s|d dk rbt|d  s|d dk rt|d  st|dkr|ddk rt|d st|d kr|d dk rt|d  rtd |j|jft|dks|ddkr0|ddt||jjdd d f7}t j |}|t|<y |j}Wnt k rdYn$Xx |D]} | tkrl|t| <qlW|S)Nr r z encodings.r)fromlistlevelz#module "%s" (%s) failed to registerrz'incompatible codecs in module "%s" (%s))N)_cacheget_unknownr_aliasesreplace __import__ _import_tail ImportError getregentryAttributeErrorrcodecs CodecInfolenrr__file__callablesplit getaliases) rentry norm_encodingaliased_encodingmodnamesmodnamemodr* codecaliasesaliasr r r search_functionGsf          ,,(    r;Zwin32c CsFy,ddl}||jdkr*ddl}|jjSWntk r@YnXdS)NrF) _bootlocalegetpreferredencodingZencodings.mbcsmbcsr*r))rr<Z encodingsr r r _alias_mbcssr?)__doc__r,sysrrr"r$r(r% LookupError SystemErrorrrr;registerplatformr?r r r r s U