a
    [Xhm,                     @   s@   d Z ddlmZ ddlmZ dd Zdd ZG d	d
 d
eZdS )zImplement counter styles.

These are defined in CSS Counter Styles Level 3:
https://www.w3.org/TR/css-counter-styles-3/#counter-style-system

    )inf   )remove_whitespacec                 C   s   | \}}|dkr|S dS )zCreate a string from a symbol.string  )Zstring_or_urltype_valuer   r   \/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/weasyprint/css/counters.pysymbol   s    r   c                 C   sT   t | } t| dkrP| \}|jdkrP|jdv r@|j|vrP|jS n|jdkrP|jS d S )Nr   ident)decimalZdiscnone)r   lentypeZlower_valuer	   )tokensZcounter_styletokenr   r   r
   parse_counter_style_name   s    



r   c                       s<   e Zd ZdZdddZdddZdd Z fd	d
Z  ZS )CounterStylezCounter styles dictionary.

    Keep a list of counter styles defined by ``@counter-style`` rules, indexed
    by their names.

    See https://www.w3.org/TR/css-counter-styles-3/.

    Nc              
   C   s  |d dv r|\}}|dkr0d}d|ff}d}nD|dkrtd |d |d dkrPdnd f}t d	d
 |dd  D }d}|dd|ddd|dd	S || v r|d u rg }n||v rd S || | |  }|d r|d \}	}}
nd\}	}|	r|| v r| | }|d |d< || |d r.|d \}	}}
nd\}	}|	rP||v rPd\}	}q| D ]*\}}|| d u rX|d urX|||< qXq|S q|S d S )Nr   )	symbols()r   r   )NcyclicNr   r   r   fixedr   c                 s   s   | ]}d |fV  qdS )r   Nr   ).0argumentr   r   r
   	<genexpr>6   s   z/CounterStyle.resolve_counter.<locals>.<genexpr>)r    )r   -r   autor   r   r   r   )	systemnegativeprefixsuffixrangepadfallbacksymbolsadditive_symbolsr!   )Nsymbolic)extendsr   )tupleappendcopyitems)selfcounter_nameprevious_typesZcounter_type	argumentsr!   r(   r$   counterr+   _extended_counternamer	   r   r   r
   resolve_counter,   sb    






zCounterStyle.resolve_counterc                 C   s  |s|sJ |p|  ||}|du r<d| v r8| |dS dS |d rT|d \}}}n
d\}}}|du rlg }n||v r| |dS || |r,|| v r| | }|d |d< |d r|d \}}}n
d\}}}||v r| |dS || | D ]$\}	}
||	 du r|
dur|
||	< qq| |dS q|d dv rpt t }}|dv rVd	}n|d
krdd}||ff}n|d }|D ],\}}||  kr|kr|n n qĐq|| j||d pd|dS d}|dk }|rdd |d pdD \}}|dv }|rt|}|dkrTt|d }|d	k r4| |dS |d	 | }t|d | }n|dkrt|d }|d	k r| |dS || }d|  kr|k rn nt|d | }n| j||d pd|dS nF|dkr4t|d }|d	k r | |dS |d	 | }|d	 | d	 }t|d | | }n|dkrt|d }|dk r`| |dS g }|dkr|d	8 }|t|d ||   || }qddt	|}nl|dkrB|dkrt|d d }nlg }t|d }|dk r| |dS t|}|dkr2|t|d ||   || }qdt	|}n|d
kr|dkr~|d D ]\}}|dkr^t|}q^nxg }t|d d	k r| |dS |d D ]L\}}|| }|
t|g|  ||| 8 }|dkrd|} qq|du r| j||d pd|dS |dus(J |d p4d}|d t| }|rf|rf|t|t| 8 }|dkr|t|d	  | }|r|r|| | }|S )zzGenerate the counter representation.

        See https://www.w3.org/TR/css-counter-styles-3/#generate-a-counter

        Nr   r   r!   )Nr*   Nr%   )r   N)
alphabeticr*   r   additiver   r'   )r2   c                 s   s   | ]}t |V  qd S N)r   )r   	characterr   r   r
   r      s   z,CounterStyle.render_value.<locals>.<genexpr>r"   r   )r*   r9   numericr:   r   r(   r   r*   r9      r=   r)   r&   r    )r8   render_valuer-   r/   r   absr   r   joinreversedextend)r0   counter_valuer1   r4   r2   r+   r!   Zfixed_numberr6   r7   r	   Z	min_rangeZ	max_rangeZcounter_rangesinitialZis_negativeZnegative_prefixZnegative_suffixZuse_negativelengthindexrepeatZreversed_partsZweightZsymbol_stringpartsZrepetitionsr&   Zpad_differencer   r   r
   r?   g   s   






























zCounterStyle.render_valuec                 C   sp   |  |}|du r*d| v r&| d|S dS t|d p6d}t|d pFd}| j||d}|dusdJ || | S )	z2Generate the content of a ::marker pseudo-element.Nr   r   r#   r   r$   )r   z. )r1   )r8   render_markerr   r?   )r0   r1   rD   r4   r#   r$   r	   r   r   r
   rJ     s    
zCounterStyle.render_markerc                    s   t t  S r;   )r   superr.   )r0   	__class__r   r
   r.   &  s    zCounterStyle.copy)N)NNN)	__name__
__module____qualname____doc__r8   r?   rJ   r.   __classcell__r   r   rL   r
   r   #   s   
;  
 /r   N)	rQ   mathr   utilsr   r   r   dictr   r   r   r   r
   <module>   s
   
