a
    ¥Q•hm,  ã                   @   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 )zŽImplement 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 )ÚCounterStylezºCounter 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 r¤g }n||v r°d 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ö|
||	< qöqŠ|  |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 �p¼d|d�S d}|dk }|�rdd„ |d �pèdD ƒ\}}|dv }|�rt|ƒ}|dk�rTt|d ƒ}|d	k �r4|  |d¡S |d	 | }t|d | ƒ}�nÆ|dk�rÔt|d ƒ}|d	k �r€|  |d¡S || }d|  k�r |k �r¶n nt|d | ƒ}n| j||d �pÈd|d�S �nF|dk�r4t|d ƒ}|d	k �r |  |d¡S |d	 | }|d	 | d	 }t|d | ƒ| }�næ|dk�r®t|d ƒ}|dk �r`|  |d¡S g }|dk�rœ|d	8 }| t|d ||  ƒ¡ || }�qdd t	|ƒ¡}�nl|dk�rB|dk�rÔt|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�r¨d |¡} �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
   
