a
    Qhm,                     @   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   P/var/www/sistema_ama/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)decimaldiscnone)r   lentypelower_valuer	   )tokens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*   )r5   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-   r<   numericr=   r   r+   r   r-   r<      r@   r,   r)   r#   )r;   render_valuer0   r2   r   absr   r   joinreversedextend)r3   counter_valuer4   r7   r5   r.   r$   Zfixed_numberr9   r:   r	   Z	min_rangeZ	max_rangeZcounter_rangesinitialis_negativeZnegative_prefixZnegative_suffixZuse_negativelengthindexrepeatZreversed_partsweightZsymbol_stringpartsZrepetitionsr)   Zpad_differencer   r   r
   rB   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. )r4   )r;   render_markerr   rB   )r3   r4   rG   r7   r&   r'   r	   r   r   r
   rO     s    
zCounterStyle.render_markerc                    s   t t  S r>   )r   superr1   )r3   	__class__r   r
   r1   &  s    zCounterStyle.copy)N)NNN)	__name__
__module____qualname____doc__r;   rB   rO   r1   __classcell__r   r   rQ   r
   r   #   s   
;  
 /r   N)	rV   mathr   utilsr   r   r   dictr   r   r   r   r
   <module>   s
   
