
    3vj?.                     t   d Z ddlmZ ddlZddlmZ ddlmZ dd	lm	Z	m
Z
mZmZmZmZmZmZmZmZmZ i i i d
ZdZ G d d      Z G d d      Zd Zd/dZd Z ed      d0d       Z edd      e
d               Z ed      ed               Z ed      ed               Z ed      ed               Z ed      d        Z  ed      d        Z! ed      e
ed                      Z" ed      d        Z# edd      d         Z$ edd!d       edd"d      d#               Z% ed      e
d$               Z& edd      d%        Z' ed      ed&               Z( edd      d'        Z) edd      d(        Z* ed)d*d+      ed,               Z+ ed)      ed-               Z, ed)      e
d.               Z-y)1z,Validate descriptors used for some at-rules.    )infN   )LOGGER   )
properties   )InvalidValuescomma_separated_listget_custom_identget_keyword
get_numberget_single_keywordget_urlremove_whitespacesingle_keywordsingle_tokensplit_on_comma)	font-facecounter-stylecolor-profile)zfont-displayc                       e Zd ZdZdZy)NoneFakeTokenidentnoneN__name__
__module____qualname__typelower_value     X/root/.hermes/venv/lib/python3.12/site-packages/weasyprint/css/validation/descriptors.pyr   r      s    DKr"   r   c                       e Zd ZdZdZy)NormalFakeTokenr   normalNr   r!   r"   r#   r%   r%      s    DKr"   r%   c              #     K   |D ]  }|j                   dk7  s|j                  rt        |j                        }	 |j                  t
        v rH|j                  t        |    vrt        d      t        |    |j                     }|j                  r
 |||      }n ||      }|t        |j                  |ff}|D ]  \  }	}|	j!                  dd      |f   y# t        $ r}t        j                  d|j                  t        j                  |j                        |j                  |j                  |j                  r|j                  d   r|j                  d   nd       Y d}~dd}~ww xY ww)	zFilter unsupported names and values for descriptors.

    Log a warning for every ignored descriptor.

    Return a iterable of ``(name, value)`` tuples.

    declarationzdescriptor not supportedNzIgnored `%s:%s` at %d:%d, %s.r   zinvalid value-_)r   	importantr   valuenameNOT_PRINT_MEDIADESCRIPTORSr	   wants_base_urlr   warningtinycss2	serializesource_linesource_columnargsreplace)
rulebase_urldescriptors
descriptortokensfunctionr,   resultexc	long_names
             r#   preprocess_descriptorsrA   #   sY     " 5
??m+z/C/C":#3#34	/1D(99#$>??"4(9H&& 2 (}##!.0F !' 	5Iu##C-u44	555$  	NN/!3!3J4D4D!E&&
(@(@"xxCHHQK_	N
 	s<   7E1CE1A+C8#E1	E.$A?E)#E1)E..E1c                       fd}|S )ul  Decorator adding a function to the ``DESCRIPTORS``.

    The name of the descriptor covered by the decorated function is set to
    ``descriptor_name`` if given, or is inferred from the function name
    (replacing underscores by hyphens).

    :param wants_base_url:
        The function takes the stylesheet’s base URL as an additional
        parameter.

    c                     | j                   j                  dd      }n}|t           vsJ |       | _        | t           |<   | S )z(Add ``function`` to the ``DESCRIPTORS``.r*   r)   )r   r7   r/   r0   )r=   r-   descriptor_namer8   r0   s     r#   	decoratorzdescriptor.<locals>.decoratorU   sZ    "$$,,S#6D"D;t,,2d2,"0"*D$r"   r!   )r8   rD   r0   rE   s   ``` r#   r;   r;   I   s    
 r"   c              #     K   t        |       }|dv r+dD ]  }|t        gf  |dk(  rt        nt        }d|gf y g g g g g g d}| D ]f  }t        |      }|dk(  rt        |D ]D  }d|j                  dd       } t        t        |      |g      s0||   j                  |        a t         |j                         D ]  \  }} | s	d| | f  y w)	N)r&   r   )z-alternatesz-capsz-east-asianz-numericz	-positionr&   z
-ligatures)
alternatescapsz
east-asian	ligaturesnumericpositionfont_variant_r)   r*   )
r   r%   r   r   r	   r7   getattrr   appenditems)r<   keywordsuffixtokenfeaturesfeaturefunction_names          r#   expand_font_variantrV   c   s#     (G$$ 	,F ?+++	, $+h#6MUG##   	$E!%(G("### $"/S0I/J K57:}5ug>W%,,U3	$ $#	$  (~~/ 	.OGV7)}f--	.s   BC6C
Cr   c                     dg|rj                  d       t        |       dk(  r!| d   j                  dk(  r| d   j                  S | r-t	        fd| D              rdj                  d | D              S y	y	)
z&``font-family`` descriptor validation.r   
whitespacer   r   stringc              3   :   K   | ]  }|j                   v   y w)Nr   ).0rR   allowed_typess     r#   	<genexpr>zfont_family.<locals>.<genexpr>   s     FeejjM1Fs    c              3   T   K   | ]   }|j                   d k(  s|j                   " yw)r   N)r   r,   )r\   rR   s     r#   r^   zfont_family.<locals>.<genexpr>   s&      F!uzzW/DEKKFs   ((N)rN   lenr   r,   alljoin)r<   allow_spacesr]   s     @r#   font_familyre      s     IM\*
6{aF1INNh6ay#FvFFxx F%+F F 	F Gvr"   T)r0   c                 *   t        |       dv r| dd | d   }} |j                  dk(  r|j                  dk(  r
| dd | d   }} |j                  dk(  r(|j                  dk(  rdt        |j                  d      fS t        ||      }||d	   d
k(  r|d   S yyy)z``src`` descriptor validation.)r   r   Nr=   formatlocalT)rd   r   urlr   )ra   r   
lower_namere   	argumentsr   r<   r9   rR   rj   s       r#   srcrn      s     6{fsVBZ::#(8(8H(D"3BKEF::#(8(8G(CKdKKKeX&?s1vq6M  /? r"   c                 
    | dv S )z%``font-style`` descriptor validation.)r&   italicobliquer!   rP   s    r#   
font_stylers      s     555r"   c                 z    t        |       }|dv r|S t        | d      x}r|j                  dv r|j                  S yy)z&``font-weight`` descriptor validation.)r&   boldTinteger)	d      i,  i  i  iX  i  i   i  N)r   r   r,   )rR   rP   numbers      r#   font_weightr{      sP     % G$$E400v0<<HH<< I 1r"   c                 
    | dv S )z'``font-stretch`` descriptor validation.)	zultra-condensedzextra-condensed	condensedzsemi-condensedr&   zsemi-expandedexpandedzextra-expandedzultra-expandedr!   rr   s    r#   font_stretchr      s      I I Ir"   c                 ,    t        j                  |       S )z0``font-feature-settings`` descriptor validation.)r   font_feature_settings)r<   s    r#   r   r      s     ++F33r"   c                     t        |       dk(  rt        | d         }|dv rg S g }t        |       D ]0  \  }}	 |j                  t	        j
                  |d| d             2 |S # t        $ r Y  yw xY w)z'``font-variant`` descriptor validation.r   r   )r&   r   inheritzfont-variantT)requiredN)ra   r   rV   rN   r   validate_non_shorthandr	   )r<   rP   valuesr-   
sub_tokenss        r#   font_variantr      s     6{afQi(33IF/7 j	MM*;;l4&1DB C M  		s   *A%%	A21A2c                 &    | j                   dk(  r| S y)z(``unicode_range`` descriptor validation.zunicode-rangeNr[   )rR   s    r#   unicode_ranger      s    
 zz_$ %r"   r   c                 .   t        |       dkD  ryt        | d         }|dk(  r%t        |       dk(  rt        | d         x}r||dfS yy|dk(  r1t        |       dk(  ryt        | d   d	      x}rdd|j                  fS yt        |       dk(  r
|d
v rd|dfS yy)z!``system`` descriptor validation.r   Nr   extendsr   fixed)Nr   r   Trv   )cyclicrJ   
alphabeticsymbolicadditive)ra   r   r   r,   )r<   rP   second_keywordrz   s       r#   systemr      s     6{Q&)$G)v;!!,VAY!77~766 8  
G	v;!%!&)T::V:'6<<00 ;	V	g *G Ggt$$G	r"   c                 v   t        |       dkD  ryg }t        |       } | rl| j                  d      }|j                  dv r|j	                  d|j
                  f       ?t        ||      }||d   dk(  r|j	                  d|d   f       | rlt        |      dk(  r|j	                  d       t        |      dk(  r|S y)	z#``negative`` descriptor validation.r   Nr   rY   r   rY   rj   r   )rY    )ra   listpopr   rN   r,   r   r<   r9   r   rR   rj   s        r#   negativer      s     6{QF&\F


1::,,MM8U[[12eX&?s1vMM5#a&/*  6{an%
6{a r"   prefixrQ   c                     t        |       dk7  ry| \  }|j                  dv rd|j                  fS t        ||      }||d   dk(  rd|d   fS yy)z1``prefix`` and ``suffix`` descriptors validation.r   Nr   rY   r   rj   )ra   r   r,   r   rm   s       r#   prefix_suffixr     sf     6{aFEzz((%++&&
%
"C
3q6U?s1v +r"   c                    t        |       dk(  rt        |       }|dk(  ryy	t        |       dk(  rg }t        |       D ]m  \  }}|j                  dk(  r.|j                  dk(  r|j                  |rt        nt                Ct        |d      x}sS|j                  |j                         o t        |      dk(  r|d   |d   k  rt        |      S y	y	y	)
z ``range`` descriptor validation.r   autor   r   infiniteTrv   r   N)	ra   r   	enumerater   r,   rN   r   r   tuple)r<   rP   r   irR   rz   s         r#   ranger     s     6{a$V,f 	V	!&) 	,HAuzzW$
)BQcSD1%eT:::fll+		,
 v;!q	VAY 6=  !7 
r"   c                 "   t        |       dk(  rddg}| D ]h  }t        |dd      x}r|d   /|j                  |d<   n|j                  dv rd|j                  f|d	<   t	        ||      }|V|d   d
k(  s_d
|d	   f|d	<   j d|vrt        |      S yy)z``pad`` descriptor validation.r   NTF)rw   r   r   r   rY   r   rj   )ra   r   r,   r   r   r   )r<   r9   r   rR   rz   rj   s         r#   padr   -  s     6{a 	,E#E4%HHvH!9$ &F1I22%u{{3q	%*C3q6U?"CFOq		, v=   r"   c                 (    t        |       }|dk7  r|S y)z#``fallback`` descriptor validation.r   N)r   )rR   r   s     r#   fallbackr   @  s     U#E r"   c                     g }| D ]\  }|j                   dv r|j                  d|j                  f       /t        ||      }||d   dk(  r|j                  d|d   f       \ y t	        |      S )z"``symbols`` descriptor validation.r   rY   Nr   rj   r   )r   rN   r,   r   r   r   s        r#   symbolsr   I  s~     F ::,,MM8U[[12eX&?s1vMM5#a&/* =r"   c                     g }t        |       D ]>  }t        t        |      |      x}s y|r|d   d   |d   k  r y|j                  |       @ t	        |      S )z+``additive-symbols`` descriptor validation.Nrg   r   )r   r   r   rN   r   )r<   r9   resultspartr>   s        r#   additive_symbolsr   Y  si     Gv& /5x@@@wr{1~2v >r"   r   rn   )rD   r0   c                 <    t        | |      }||d   dk(  r|d   S y y )Nr   rj   r   )r   )rR   r9   rj   s      r#   color_profile_srcr   f  s/     %
"C
3q6U?1v +r"   c                     d}| |v r| S y )N)zrelative-colorimetriczabsolute-colorimetric
perceptual
saturationr!   )rP   possible_valuess     r#   rendering_intentr   n  s    VO/! "r"   c                 p    g }| D ].  }|j                   dk(  r|j                  |j                         . y  |S )Nr   )r   rN   r,   )r<   
componentsrR   s      r#   r   r   w  sA     J :: ekk*	
 r"   )NF)F).__doc__mathr   r2   loggerr   r   r   r<   r	   r
   r   r   r   r   r   r   r   r   r   r/   r.   r   r%   rA   r;   rV   re   rn   rs   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r"   r#   <module>r      s   2        

 
 
#5L4.D K	F 	F K-
  .
 K6  6
 K     KI  I K4 4
 K   K    O% %( OD1 2. OXd;OXd;
 < <
 O!  !" OD1! 2!$ O   OD1 2 OD1	 2	 OU4H  I O   O  r"   