
    oe~              
           d dl Z d dlmZmZmZmZmZmZmZm	Z	 d dl
mZ dee         dee         fdZdee         dee         fdZdedefdZ	 dd
eeee         f         dededee         fdZddedededefdZdS )    N)AnyIterableIteratorListMatchPatternUnioncast)replace_entitiesxreturnc                 :    t          t          |                     S )a  flatten(sequence) -> list
    Returns a single, flat list which contains all elements retrieved
    from the sequence and all recursively contained sub-sequences
    (iterables).
    Examples:
    >>> [1, 2, [3,4], (5,6)]
    [1, 2, [3, 4], (5, 6)]
    >>> flatten([[[1,2,3], (42,None)], [4,5], [6], 7, (8,9,10)])
    [1, 2, 3, 42, None, 4, 5, 6, 7, 8, 9, 10]
    >>> flatten(["foo", "bar"])
    ['foo', 'bar']
    >>> flatten(["foo", ["baz", 42], "bar"])
    ['foo', 'baz', 42, 'bar']
    )listiflattenr   s    ,lib/python3.11/site-packages/parsel/utils.pyflattenr      s         c              #   f   K   | D ]+}t          |          rt          |          E d{V  '|V  ,dS )zZiflatten(sequence) -> Iterator
    Similar to ``.flatten()``, but returns iterator insteadN)_is_listliker   )r   els     r   r   r      s]          	r{{""""""""HHHH	 r   c                 \    t          | d          ot          | t          t          f           S )ai  
    >>> _is_listlike("foo")
    False
    >>> _is_listlike(5)
    False
    >>> _is_listlike(b"foo")
    False
    >>> _is_listlike([b"foo"])
    True
    >>> _is_listlike((b"foo",))
    True
    >>> _is_listlike({})
    True
    >>> _is_listlike(set())
    True
    >>> _is_listlike((x for x in range(3)))
    True
    >>> _is_listlike(range(5))
    True
    __iter__)hasattr
isinstancestrbytesr   s    r   r   r   "   s*    * 1j!!E*Qe*E*E&EEr   Tregextextr   c                    t          | t                    rt          j        | t          j                  } d| j        v ra	 t          t          t                   |                     |                    	                    d          }||gng }n'# t          $ r g }Y nw xY w|                     |          }t          |          }|s|S d |D             S )aZ  Extract a list of strings from the given text/encoding using the following policies:
    * if the regex contains a named group called "extract" that will be returned
    * if the regex contains multiple numbered groups, all those will be returned (flattened)
    * if the regex doesn't contain any group the entire regex matching is returned
    extractNc                 4    g | ]}t          |d dg          S )ltamp)keep)w3lib_replace_entities).0ss     r   
<listcomp>z!extract_regex.<locals>.<listcomp>T   s*    KKKa"1D%=999KKKr   )r   r   recompileUNICODE
groupindexr
   r   searchgroupAttributeErrorfindallr   )r   r   r   	extractedstringss        r   extract_regexr4   :   s     % .
5"*--E$$$	CU3Zd););<<BB9MMI &/%:ykkGG  	 	 	GGG	 --%%gG KK7KKKKs   AB BB...widthsuffixc                     t          |           |k    r| S |t          |          k    r| d|t          |          z
           |z   S |dk    r|t          |          |z
  d         S t          d          )z2Truncate the given text to fit in the given width.Nr   z%width must be equal or greater than 0)len
ValueError)r   r6   r7   s      r   shortenr;   W   s~    
4yyEs6{{)ec&kk))*V33zzc&kkE)++,,
<
=
==r   )T)r5   )r*   typingr   r   r   r   r   r   r	   r
   
w3lib.htmlr   r&   r   r   boolr   r   r4   intr;    r   r   <module>rA      sr   				 M M M M M M M M M M M M M M M M M M M M A A A A A Ax} c    $ (3-    FC FD F F F F2 JNL Lgcl"#L+.LBFL	#YL L L L:> ># >c >3 >3 > > > > > >r   