
    T-hm,                     B    d Z ddlmZ ddlmZ d Zd Z G d de      Zy	)
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                     | \  }}|dk(  r|S y)zCreate a string from a symbol.string  )string_or_urltype_values      ]/var/www/core.comfia.cic-ware.com/crm/lib/python3.12/site-packages/weasyprint/css/counters.pysymbolr      s     !LE5    c                     t        |       } t        |       dk(  rY| \  }|j                  dk(  rE|j                  dv r|j                  |vr|j                  S y |j                  dk7  r|j                  S y y y )Nr   ident)decimaldiscnone)r   lentypelower_valuer   )tokenscounter_styletokens      r   parse_counter_style_namer      s~    v&F
6{a::   $77$$M9 ;;& :""f,{{" -	 ! r   c                   <     e Zd ZdZddZ	 	 ddZd Z fdZ x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/.

    c           
         |d   dv rN|\  }}|dk(  r
d}d|ff}d}n.|dk(  r)d |d   |d   dk(  rdnd f}t        d	 |dd  D              }d
}ddddddd	S || v r|g }n||v ry |j                  |       | |   j                         }|d   r
|d   \  }	}}
nd\  }	}|	rn|| v re| |   }|d   |d<   |j                  |       |d   r
|d   \  }	}}
nd\  }	}|	r
||v rd\  }	}D|j                         D ]  \  }}||   ||||<    n|S |	rn|S y )Nr   )	symbols()r   r   )NcyclicNr   r   r   fixedr   c              3   $   K   | ]  }d |f 
 yw)r   Nr	   ).0arguments     r   	<genexpr>z/CounterStyle.resolve_counter.<locals>.<genexpr>6   s       H-5Xx( Hs   )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_typescounter_type	argumentsr,   r3   r/   counterr6   _extended_counternamer   s                 r   resolve_counterzCounterStyle.resolve_counter,   s   ?55&2#L)x'/$i02',)A,Yq\W-D$P  H9B12 H H( =( %"$&
 
 T!%!#/!!,/<(--/Gx %,X%6""2 T>'+F|$(8(BGH%"))&1x(-4X->**:6^#;*> '7'='='? 2e"4=0U5F,1GDM2 #N! $ NC "r   c                 	   |s|sJ |xs | j                  ||      }|d| v r| j                  |d      S y|d   r
|d   \  }}}nd\  }}}|g }n||v r| j                  |d      S |j                  |       |r|| v rp| |   }|d   |d<   |d   r
|d   \  }}}nd\  }}}||v r| j                  |d      S |j                  |       |j                         D ]  \  }	}
||	   |
|
||	<    n| j                  |d      S |r|d   dv r!t         t        }}|dv rd	}n|d
k(  rd}||ff}n|d   }|D ]  \  }}||cxk  r|k  sn  n | j                  ||d   xs d|      S d}|dk  }|r$d |d   xs dD        \  }}|dv }|rt        |      }|dk(  r@t        |d         }|d	k  r| j                  |d      S |d	z
  |z  }t        |d   |         }n|dk(  rft        |d         }|d	k  r| j                  |d      S ||z
  }d|cxk  r|k  rn nt        |d   |         }nF| j                  ||d   xs d|      S |dk(  rNt        |d         }|d	k  r| j                  |d      S |d	z
  |z  }|d	z
  |z  d	z   }t        |d   |         |z  }n|dk(  r{t        |d         }|dk  r| j                  |d      S g }|dk7  r3|d	z  }|j                  t        |d   ||z                  ||z  }|dk7  r3dj                  t        |            }nX|dk(  r|dk(  rt        |d   d         }n;g }t        |d         }|dk  r| j                  |d      S t        |      }|dk7  r.|j                  t        |d   ||z                  ||z  }|dk7  r.dj                  t        |            }n|d
k(  r|dk(  r|d   D ]  \  }}|dk(  st        |      } nug }t        |d         d	k  r| j                  |d      S |d   D ]H  \  }}||z  }|j                  t        |      g|z         |||z  z  }|dk(  s7dj                  |      } n || j                  ||d   xs d|      S |J |d   xs d}|d   t        |      z
  }|rr|t              t              z   z  }|dkD  r|t        |d	         z  |z   }|r
r|z   z   }|S )zzGenerate the counter representation.

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

        Nr   r   r,   )Nr5   Nr0   )r*   N)
alphabeticr5   r   additiver   r2   )r=   c              3   2   K   | ]  }t        |        y wN)r   )r$   	characters     r   r&   z,CounterStyle.render_value.<locals>.<genexpr>   s      0M&/y!0Ms   r-   r(   )r5   rF   numericrG   r    r3   r"   r5   rF      rK   r4   r1   r+   )rD   render_valuer8   r:   r   absr   r   joinreversedextend)r;   counter_valuer<   r@   r=   r6   r,   fixed_numberrB   rC   r   	min_range	max_rangecounter_rangesinitialis_negativenegative_prefixnegative_suffixuse_negativelengthindexrepeatreversed_partsweightsymbol_stringpartsrepetitionsr1   pad_differences                                r   rM   zCounterStyle.render_valueg   s|    ,&&OT11,O?D ((	BB 8,3H,=)GV\,B)GV\ !N~%$$]I>>l+ ~#'< $4X$>!8$4;H4E1GV\4J1GV\^+,,]IFF%%f-#3#9#9#; .KD%t},1B(-. ((	BB $ 7~-$'4yI33	:%	()46N$W-N$2 	/ IyM6Y6	/ $$wz2?i- % / /
 #a'0M:&K*K0M,O_ AB   #M 2 X+,Fz((	BB"Q&&0EWY/67Gw+,Fz((	BB!L0EE"F" !3E!:;((!7:#6#C)#1 ) 3 3 z!+,Fz((	BB"Q&&0E#a'F2Q6FWY/67&@G|#+,Fz((	BBN1$"%%fI&}v'=>'@ A&(	  1$
 ggh~67Gy ! !3A!67!#WY/0A:,,]IFF #M 2#q("))&	*=6+AB+D E!f,M $q( ''(>":;z!!-45G-H 8)FM{"("78 w123a7,,]IFF-45G-H )FM"/6"9KLL&"7!8;!FG!Vk%99M$)"$''%. ((!7:#6#C)#1 ) 3 3 """ en'Q#g,.<c/2S5IIINA$vc!f~5?G <%//AG r   c                     | j                  |      }|d| v r| j                  d|      S yt        |d   xs d      }t        |d   xs d      }| j                  ||      }|J ||z   |z   S )z2Generate the content of a ::marker pseudo-element.r   r   r.   r!   r/   )r   z. )r<   )rD   render_markerr   rM   )r;   r<   rR   r@   r.   r/   r   s          r   rf   zCounterStyle.render_marker  s    &&|4?D )))]CC );^<)=-=>!!-l!K   ~&&r   c                 2    t        t        | 	               S rI   )r   superr9   )r;   	__class__s    r   r9   zCounterStyle.copy&  s    EGLN++r   rI   )NNN)	__name__
__module____qualname____doc__rD   rM   rf   r9   __classcell__)ri   s   @r   r   r   #   s.    9v FJ$(l\'", ,r   r   N)	rm   mathr   utilsr   r   r   dictr   r	   r   r   <module>rr      s*     $	#E,4 E,r   