ó
æŽ‹]c           @  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 d l Z d d l	 Z	 e j
 j e ƒ Z e j d k Z e j d k Z e j d k Z e rô d d	 l m Z d d l Z d d
 l m Z m Z e Z e Z e Z e Z nJ d d	 l m Z d d l Z d d
 l  m Z m Z e! Z e Z e" Z e# Z d Z$ e	 j% d ƒ Z& e' d ƒ Z( e' d ƒ Z) e' d ƒ Z* e' d ƒ Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d e0 f d „  ƒ  YZ1 d d „ Z2 d d „ Z3 d „  Z4 d S(   u   Utility.iÿÿÿÿ(   t   unicode_literals(   t   wrapsNi   i    i   i   (   t	   lru_cache(   t   Hashablet   Mappingi   u   (?:\r\n|(?!\r\n)[\n\r])|$u   au   zu   Au   Zc         C  si   g  } xS |  D]K } t  | ƒ } | j t | k o< t k n rQ t | d ƒ n | ƒ q Wd j | ƒ S(   u   Lower.i    u    (   t   ordt   appendt   UC_At   UC_Zt   chrt   join(   t   stringt
   new_stringt   ct   o(    (    s-   lib/python2.7/site-packages/soupsieve/util.pyt   lower,   s
    =c         C  si   g  } xS |  D]K } t  | ƒ } | j t | k o< t k n rQ t | d ƒ n | ƒ q Wd j | ƒ S(   u   Lower.i    u    (   R   R   t   LC_At   LC_ZR	   R
   (   R   R   R   R   (    (    s-   lib/python2.7/site-packages/soupsieve/util.pyt   upper6   s
    =c         C  s<   y t  |  ƒ SWn' t k
 r7 t j d |  ƒ j d ƒ SXd S(   u8   Allow getting Unicode character on narrow python builds.u   iu   utf-32N(   t   unichart
   ValueErrort   structt   packt   decode(   t   i(    (    s-   lib/python2.7/site-packages/soupsieve/util.pyt   uchr@   s    c         C  sd   t  |  ƒ d k rT g  |  D] } t | ƒ ^ q \ } } | d d | d d } n t |  ƒ } | S(   u   Get Unicode ordinal.i   i Ø  i   i Ü  i   (   t   lenR   (   R   t   pt   hight   lowt   ordinal(    (    s-   lib/python2.7/site-packages/soupsieve/util.pyt   uordI   s
    %t   SelectorSyntaxErrorc           B  s   e  Z d  Z d d d „ Z RS(   u   Syntax error in a CSS selector.c         C  sŒ   d |  _ d |  _ d |  _ | d k	 rr | d k	 rr t | | ƒ \ |  _ |  _ |  _ d j | |  j |  j ƒ } n  t t |  ƒ j | ƒ d S(   u   Initialize.u   {}
  line {}:
{}N(	   t   Nonet   linet   colt   contextt   get_pattern_contextt   formatt   superR    t   __init__(   t   selft   msgt   patternt   index(    (    s-   lib/python2.7/site-packages/soupsieve/util.pyR(   X   s    			!N(   t   __name__t
   __module__t   __doc__R!   R(   (    (    (    s-   lib/python2.7/site-packages/soupsieve/util.pyR    U   s   i   c           s   ‡  ‡ f d †  } | S(   u   
    Raise a `DeprecationWarning` when wrapped function/method is called.

    Borrowed from https://stackoverflow.com/a/48632082/866026
    c           s%   t  ˆ  ƒ ‡  ‡ ‡ f d †  ƒ } | S(   Nc            s5   t  j d j ˆ  j ˆ ƒ d t d ˆ ƒˆ  |  | Ž  S(   Nu   '{}' is deprecated. {}t   categoryt
   stacklevel(   t   warningst   warnR&   R-   t   DeprecationWarning(   t   argst   kwargs(   t   funct   messageR1   (    s-   lib/python2.7/site-packages/soupsieve/util.pyt   _funco   s
    (   R   (   R7   R9   (   R8   R1   (   R7   s-   lib/python2.7/site-packages/soupsieve/util.pyt
   _decoratorn   s    !(    (   R8   R1   R:   (    (   R8   R1   s-   lib/python2.7/site-packages/soupsieve/util.pyt
   deprecatedg   s    
c         C  s   t  j |  d t d | ƒd S(   u   Warn deprecated.R0   R1   N(   R2   R3   R4   (   R8   R1   (    (    s-   lib/python2.7/site-packages/soupsieve/util.pyt   warn_deprecated{   s    c         C  sš  d } d } d } g  } d } xct  j |  ƒ D]R} |  | | j d ƒ !} t | j d ƒ ƒ rŠ t | ƒ rŠ d }	 d }
 | | d } nm | | k oª | j d ƒ k  n rë d }	 | | j d ƒ k rÐ d n d d }
 | | d } n d }	 d }
 t | ƒ r| j d ƒ n  | j d	 j |	 | ƒ ƒ |
 d k	 rg| j d ƒ | j d
 | |
 d ƒ | } n  | d 7} | j d ƒ } q. Wd j	 | ƒ | | f S(   u   Get the pattern context.i    i   u    iÿÿÿÿu   --> i   u       u   
u   {}{}u    u   ^N(
   t   RE_PATTERN_LINE_SPLITt   finditert   startR   t   groupt   endR!   R   R&   R
   (   R+   R,   t   lastt   current_lineR#   t   textR"   t   mt   linetextt   indentt   offset(    (    s-   lib/python2.7/site-packages/soupsieve/util.pyR%   …   s6    #%%	
(   i   i    (   i   i   (   i   i   (5   R/   t
   __future__R    t	   functoolsR   R2   t   sysR   t   ost   ret   patht   dirnamet   __file__t   MODULEt   version_infot   PY3t   PY35t   PY37R   t   copyregt   collections.abcR   R   t   strt   ustrt   bytest   bstrR	   R   R   t   backports.functools_lru_cachet   copy_regt   collectionst   unicodet   unichrt
   basestringt   DEBUGt   compileR=   R   R   R   R   R   R   R   R   R   t   SyntaxErrorR    R;   R<   R%   (    (    (    s-   lib/python2.7/site-packages/soupsieve/util.pyt   <module>   sP   		
	
			
