U
    nuf                     @   sF   d dl Z ddlmZmZ dd Zdd Zdd	 Zd
d Ze dZ	dS )    N   )_next_significant_to_token_iteratorc                 C   s  t | dd}t|}|dkr dS |j}|dkrB|jrBt|d|jS |dkr|jr|j}|dkrjt||jS |dkrt||jd	S t	
|}|rt||jt|d
S nf|dkr|j}|dkrt|ddS |dkrt|dd
S |dk rt|d
S |dkr
t|d	S |dkr t|d
d	S |dkr6t|d	d	S |d dkrtt	
|d
d }|rt|d	t|d
S n&t	
|}|rt|d
t|d
S nt|dkrt|}|jdkr|j}|dkrt|d
S |dkrt|d
d	S t	
|}|rt|d
t|d
S dS )aF  Parse `<An+B> <https://drafts.csswg.org/css-syntax-3/#anb>`_,
    as found in `:nth-child()
    <https://drafts.csswg.org/selectors/#nth-child-pseudo>`_
    and related Selector pseudo-classes.

    Although tinycss2 does not include a full Selector parser,
    this bit of syntax is included as it is particularly tricky to define
    on top of a CSS tokenizer.

    :type input: :obj:`str` or :term:`iterable`
    :param input: A string or an iterable of :term:`component values`.
    :returns:
        A ``(a, b)`` tuple of integers, or :obj:`None` if the input is invalid.

    T)Zskip_commentsNnumberr   Z	dimensionnzn-r   identZeven   Zoddz-nz-n--+)r   r   type
is_integer	parse_end	int_valueZ
lower_unitparse_bparse_signless_bN_DASH_DIGITS_REmatchintgroupZlower_valuenext)inputtokenstoken
token_typeunitr   r    r   0/tmp/pip-unpacked-wheel-29zdolzj/tinycss2/nth.py	parse_nth   s`    













r   c                 C   sp   t | }|d kr|dfS |dkr,t| |dS |dkr@t| |dS |jdkrl|jrl|jd dkrlt| ||jS d S )Nr   r   r   r
   r   r   -+)r   r   r   r   representationr   r   )r   ar   r   r   r   r   K   s    r   c                 C   s<   t | }|jdkr8|jr8|jd dkr8t| |||j S d S )Nr   r   r   )r   r   r   r    r   r   )r   r!   Zb_signr   r   r   r   r   X   s
    r   c                 C   s   t | d kr||fS d S )N)r   )r   r!   br   r   r   r   _   s    r   z^n(-[0-9]+)$)
reparserr   r   r   r   r   r   compiler   r   r   r   r   <module>   s   E