
    3vj/                         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	 ddl
mZ d	d
lmZ  G d dej                        Zy)zPDF stream.    )contextmanagerN   )LOGGER)Matrix)ffi)get_pango_font_key   )Fontc                   ,    e Zd ZdZ fdZd Zed        Z fdZ fdZ	d fd	Z
 fdZ fd	Zdd
Z fdZ fdZd fd	ZddZd Zd Zd Zd Zd Z	 ddZed        Ze fd       Ze fd       Zed        Zed        Zed        Z xZ S ) Streamz&PDF stream object with extra features.c                    t        
|   |i |	 || _        || _        || _        || _        || _        || _        || _        d x| _	        | _
        d x| _        | _        d x| _        | _        d x| _        | _        t#               g| _        t'        j(                  d      | _        t'        j(                  d      | _        t'        j(                  d      | _        y )Nzunsigned int *zPangoRectangle *)super__init__page_rectangle_fonts
_resources_images_tags_color_profiles_output_intent_current_color_current_color_stroke_current_alpha_current_alpha_stroke_current_font_current_font_size	_old_font_old_font_sizer   
_ctm_stackr   newlengthink_rectlogical_rect)selffontsr   	resourcesimagestagscolor_profilesoutput_intentargskwargs	__class__s             H/root/.hermes/venv/lib/python3.12/site-packages/weasyprint/pdf/stream.pyr   zStream.__init__   s    $)&),#
-+;??d8;??d87;;T4/33,!8* gg./ 23GG$67    c                 H   d|vr| j                   |d<   d|vr| j                  |d<   d|vr| j                  |d<   d|vr| j                  |d<   d|vr| j                  |d<   d|vr| j
                  |d<   d|vr| j                  |d<   d|vr| j                  |d<   t        d	i |S )
Nr%   r   r&   r'   r(   r)   r*   compress )	r   r   r   r   r   r   r   r1   r   )r$   r,   s     r.   clonezStream.clone%   s    & "kkF7O6)'+':':F#$f$"&//F;6!#||F8!ZZF6N6)'+';';F#$&(&*&9&9F?#V#!%F:r/   c                      | j                   d   S N)r   r$   s    r.   ctmz
Stream.ctm8   s    r""r/   c                 l    t         |           | j                  j                  | j                         y N)r   
push_stater   appendr8   r$   r-   s    r.   r;   zStream.push_state<   s$    txx(r/   c                 *   | j                   r-| j                   d   dk(  r| j                   j                          nt        |           d x| _        | _        d x| _        | _        d | _        | j                  j                          | j                  sJ y )Nr6      q)
streampopr   	pop_stater   r   r   r   r   r   r=   s    r.   rB   zStream.pop_state@   sv    ;;4;;r?d2KKOOG;??d8;??d8!r/   c                     t         |   ||||||       t        ||||||      | j                  z  | j                  d<   y r5   )r   
set_matrixr   r8   r   )r$   abcdefr-   s          r.   	transformzStream.transformK   s@    1aAq!,$Q1aA6Ar/   c                     | j                   r>| j                   d   dk(  r,| j                  | _        | j                   j                          y t        |           y )Nr6   s   ET)r@   r   r   rA   r   
begin_textr=   s    r.   rM   zStream.begin_textO   s>    ;;4;;r?e3!%DKKOOG r/   c                 T    | j                   d c| _        | _         t        |           y r:   )r   r   r   end_textr=   s    r.   rO   zStream.end_textV   s%    -1-?-?**r/   c                 B   |^ }}| j                  ||       |r4|j                  g|| j                  k(  ry |j                  g|| _        n3|j                  g|| j                  k(  ry |j                  g|| _        |j                  dv r. | j                  g |j                  d      j                  |  y |j                  dv rG| j                  d|       |j                  d      j                  \  }}}| j                  d ||||       y |j                  dv rG| j                  d|       |j                  d      j                  \  }}}| j                  d ||||       y |j                  dk(  r:| j                  d	|       |j                  \  }}	}
}| j                  d |||	|
|       y |j                  j                  d
      r`| j                  j                  |j                        r;| j                  |j                  |        | j                  d |g|j                    y t        j                  d|j                         t        |      dkD  r|d d }n-t        |      dk(  rg |d}nt        |      dk(  r	g |dd} | j                  g ||  y )N)srgbhslhwbrQ   )zxyz-d65oklaboklchzlab-d65lab)zxyz-d50rV   lchzlab-d50device-cmyk
DeviceCMYKz--z,Unsupported color space %s, use sRGB instead   r   r   r	   )	set_alphaspacer   r   set_color_rgbtocoordinatesset_color_spaceset_color_special
startswithr   getr   warninglen)r$   colorstrokechannelsalpha	lightnessrE   rF   rG   myks               r.   	set_colorzStream.set_colorZ   sd    5uf%'h'4+E+EE.3kk-EH-E*'h'4+>+>>',{{&>X&>#;;00DE 0 < <EfE[[99  F3#hhuo99OIq!""4AqA[[55  F3#hhuo99OIq!""4AqA[[M)  v6**JAq!Q""4Aq!<[[##D)d.B.B.F.Fu{{.S  f5"D""4D%2C2CDNNI5;;W8}q #BQ<X!#'H<a<X!#*H?a??D11&1r/   c                 \    ||f| j                   k(  ry ||f| _         t        | 	  ||       y r:   )r   r   set_font_size)r$   fontsizer-   s      r.   rp   zStream.set_font_size   s3    $<4---"D\dD)r/   c                 ~    dt        | j                  d          }|| j                  d   |<   t        |   |       y )Ns	ExtGState)re   r   r   	set_state)r$   statekeyr-   s      r.   rv   zStream.set_state   s>    #dook2345,1$S)#r/   c                    || }|rbd| }|| j                   k7  rN|| _         || j                  d   vr't        j                  d|i      | j                  d   |<   t        |   |       |rdd| }|| j                  k7  rO|| _        || j                  d   vr't        j                  d|i      | j                  d   |<   t        |   |       y y y )NAru   CArE   ca)r   r   pydyf
Dictionaryr   rv   r   )r$   ri   rg   fillrx   r-   s        r.   r[   zStream.set_alpha   s    <:DeW+Cd000-0*dook::8=8H8H$PU8WDOOK05!#&eW+Cd)))&)#dook::8=8H8H$PU8WDOOK05!#&	 * r/   c           	          | j                  ||||      }t        j                  dt        j                  dd|j                          |d      ddd      }| j	                  |       |S )N
/ExtGStatez/Mask/)TypeSGr	   false)r   SMaskr|   AIS)	add_groupr}   r~   
capitalizerv   )r$   xrl   widthheightmodealpha_streamalpha_states           r.   set_alpha_statezStream.set_alpha_state   su    ~~aE6:&& %%*+,!' 
 	(
 	 	{#r/   c                 X    | j                  t        j                  dd| d             y )Nr   r   )r   BM)rv   r}   r~   )r$   r   s     r.   set_blend_modezStream.set_blend_mode   s,    u'' dV*)
  	r/   c                     t        |      \  }}}|| j                  vrt        |||      | j                  |<   | j                  |   |fS r:   )r   r   r
   )r$   
pango_fontrx   description	font_sizes        r.   add_fontzStream.add_font   sJ    &8&D#[)dkk!#JYGDKK{{3**r/   c                 @   t        j                  t        j                         t        j                         t        j                         t        j                         | j                  d   d d      }t        j                  ddt        j                  ||||z   ||z   f      |t        j                  dddd| j                   d	      d
      }| j                  ||      }dt        | j                  d          |_        || j                  d   |j                  <   |S )N
ColorSpaceru   XObjectPatternShadingr   r
   z/XObjectz/Formz/Groupz/Transparencytruer   )r   r   ICS)r   SubtypeBBox	ResourcesGroupr&   extrar   r   )r}   r~   r   Array_default_color_spacer3   re   id)r$   r   rl   r   r   r&   r   groups           r.   r   zStream.add_group   s   $$))+'')'')'')//,7&
 	   KKAq5y!f* =>"%% $$3345	' "
  

Ye
<s4??95678/4	"588,r/   c                     d|j                    t        |       }d | j                  d   |<   || j                  v r#| j                  |   d   j	                  |       |S |||hd d| j                  |<   |S )Nir   
dpi_ratios)imageinterpolater   x_object)r   intr   r   add)r$   r   r   ratio
image_names        r.   	add_imagezStream.add_image   s    
3{#3"45
15	":.%LL$\266u= & '	$
Z  r/   c                 8   t        j                  t        j                         t        j                         t        j                         t        j                         | j                  d   d d      }t        j                  ddt        j                  ||||z   ||z   g      ||ddt        j                  |j                        |d	      }	| j                  ||	      }
dt        | j                  d          |
_        |
| j                  d   |
j                  <   |
S )	Nr   r   z/Patternr	   )	r   PatternTyper   XStepYStep
TilingType	PaintTyper   r   r   pr   )r}   r~   r   r   valuesr3   re   r   )r$   r   rl   r   r   repeat_widthrepeat_heightmatrixr&   r   patterns              r.   add_patternzStream.add_pattern   s    $$))+'')'')'')//,7&
 	   KKAq5y!f* =>!"kk&--0"
"
 
 **y*>T__Y789:
18	"7::.r/   c                 V   t        j                  |d|xs | j                   t        j                  |      t        j                  |      |d      }|rt        j                  d      |d<   dt	        | j
                  d          |_        || j
                  d   |j                  <   |S )Nr   )ShadingTyper   DomainCoordsFunction)   truer   Extendrt   r   )r}   r~   r   r   re   r   r   )r$   shading_typedomaincoordsextendfunctioncolor_spaceshadings           r.   add_shadingzStream.add_shading  s    ""'kFT-F-FGHkk&)kk&) $
   %,> ?GHT__Y789:
18	"7::.r/   c              #      K   | j                          	 d | j                          y# | j                          w xY ww)zDSave and restore stream context when used with the ``with`` keyword.N)r;   rB   r7   s    r.   stackedzStream.stacked  s.      		NNDNNs   >) >;>c              #   f  K   | j                   `d }t        | j                         }|| j                   vsJ ||d| j                   |<   t        j                  d|i      }t        |   ||       	 d  | j                   t        |           y y # | j                   t        |           w w xY ww)N)tagmcidMCID)r   re   r}   r~   r   begin_marked_contentend_marked_content)r$   boxr   property_listr   r-   s        r.   markedzStream.marked  s     ::! Mtzz?Ddjj(((&)48DJJsO!,,fd^<MG(m<	-zz%*, &tzz%*, &s   A-B11B 5B1B..B1c              #      K   | j                   t        | 	  d       	 d  | j                   t        |           y y # | j                   t        |           w w xY ww)NArtifact)r   r   r   r   r=   s    r.   artifactzStream.artifact(  sZ     ::!G(4	-zz%*, &tzz%*, &s   A A  A  AA c                     t        j                  dt        j                  |       t        j                  |      t        j                  |      |d      S )Nr   )FunctionTyper   C0C1Nr}   r~   r   )r   c0c1ns       r.   create_interpolation_functionz$Stream.create_interpolation_function2  sB    kk&)++b/++b/!
  	r/   c           	          t        j                  dt        j                  |       t        j                  |      t        j                  |      t        j                  |      d      S )NrZ   )r   r   EncodeBounds	Functionsr   )r   encodeboundssub_functionss       r.   create_stitching_functionz Stream.create_stitching_function<  sM    kk&)kk&)kk&)]3!
  	r/   c                     | j                   | j                  v r| j                   S | j                   dk(  ryd| j                  v ry| j                  rt        t        | j                              S y)NrX   rY   	DeviceRGB)r   r   nextiterr7   s    r.   r   zStream._default_color_spaceF  sf    $"6"66&&&  M1d222!!T11233r/   )r	   r   r   r	   r   r   )F)FN)
luminosityr:   )!__name__
__module____qualname____doc__r   r3   propertyr8   r;   rB   rK   rM   rO   rn   rp   rv   r[   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   __classcell__)r-   s   @r.   r   r      s    08* & # #)	B!(2T*
'(+4 4 !%   - - - -     
 
r/   r   )r   
contextlibr   r}   loggerr   r   r   text.ffir   
text.fontsr   r%   r
   r   r2   r/   r.   <module>r     s/     %     + CU\\ Cr/   