o
    h**                     @   sj   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 dejZdS )zPDF stream.    )contextmanagerN   )LOGGER)Matrix)ffi)get_pango_font_key   )Fontc                       s   e Zd ZdZ fddZdd Zedd Z fdd	Z fd
dZ	d7 fdd	Z
 fddZ fddZd8ddZ fddZ fddZd9 fdd	Zd:dd Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zed-d. Ze fd/d0Ze fd1d2Zed3d4 Zed5d6 Z  ZS );Streamz&PDF stream object with extra features.c                    s   t  j|i | || _|| _|| _|| _|| _d  | _| _d  | _	| _
d  | _| _d  | _| _t g| _td| _td| _td| _d S )Nzunsigned int *zPangoRectangle *)super__init__page_rectangle_fonts
_resources_images_tags_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argskwargs	__class__ W/var/www/html/optinet_system/venv/lib/python3.10/site-packages/weasyprint/pdf/stream.pyr      s   
zStream.__init__c                 K   sz   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r6| j|d< tdi |S )Nr    r   r!   r"   r#   compressr(   )r   r   r   r   r   r*   r
   )r   r%   r(   r(   r)   clone"   s   





zStream.clonec                 C   s
   | j d S N)r   r   r(   r(   r)   ctm1   s   
z
Stream.ctmc                    s   t    | j| j d S N)r   
push_stater   appendr/   r.   r&   r(   r)   r1   5   s   
zStream.push_statec                    s`   | j r| j d dkr| j   nt   d  | _| _d  | _| _d | _| j	  | j	s.J d S )Nr-      q)
streampopr   	pop_stater   r   r   r   r   r   r.   r&   r(   r)   r6   9   s   

zStream.pop_stater   r   c                    s8   t  |||||| t||||||| j | jd< d S r,   )r   
set_matrixr   r/   r   )r   abcdefr&   r(   r)   	transformD   s   "zStream.transformc                    s8   | j r| j d dkr| j| _| j   d S t   d S )Nr-   s   ET)r4   r   r   r5   r   
begin_textr.   r&   r(   r)   r?   H   s   zStream.begin_textc                    s   | j d | _| _ t   d S r0   )r   r   r   end_textr.   r&   r(   r)   r@   O   s   zStream.end_textFc                 C   s8  |^ }}|  || |r"|jg|R | jkrd S |jg|R | _n|jg|R | jkr.d S |jg|R | _|jdv rK| jg |dj|R   d S |jdv rj| d| |dj\}}}| d |||| d S |jdv r| d| |dj\}}}| d |||| d S t	
d|j | jg ||R   d S )	N)srgbhslhwbrA   )zxyz-d65oklaboklchzlab-d65lab)zxyz-d50rF   lchzlab-d50z,Unsupported color space %s, use sRGB instead)	set_alphaspacer   r   set_color_rgbtocoordinatesset_color_spaceset_color_specialr   warning)r   colorstrokechannelsalpha	lightnessr8   r9   r(   r(   r)   	set_colorS   s*   

 

zStream.set_colorc                    s.   ||f| j kr	d S ||f| _ t || d S r0   )r   r   set_font_size)r   fontsizer&   r(   r)   rV   p   s   
zStream.set_font_sizec                    s2   dt | jd  }|| jd |< t | d S )Ns	ExtGState)lenr   r   	set_state)r   statekeyr&   r(   r)   r\   v   s   zStream.set_stateNc                    s   |d u r| }|r/d| }|| j kr/|| _ || jd vr)td|i| jd |< t | |rYd| }|| jkr[|| _|| jd vrQtd|i| jd |< t | d S d S d S )NArZ   CAr8   ca)r   r   pydyf
Dictionaryr   r\   r   )r   rS   rQ   fillr^   r&   r(   r)   rH   {   s$   



zStream.set_alpha
luminosityc              	   C   sJ   |  ||||}tdtdd|  |dddd}| | |S )N
/ExtGStatez/Mask/)TypeSGr   false)rh   SMaskra   AIS)	add_grouprb   rc   
capitalizer\   )r   xywidthheightmodealpha_streamalpha_stater(   r(   r)   set_alpha_state   s   

zStream.set_alpha_statec                 C   s    |  tdd| d d S )Nrf   rg   )rh   BM)r\   rb   rc   )r   rt   r(   r(   r)   set_blend_mode   s   zStream.set_blend_modec                 C   s8   t |\}}}|| jvrt|||| j|< | j| |fS r0   )r   r   r	   )r   
pango_fontr^   description	font_sizer(   r(   r)   add_font   s   
zStream.add_fontc                 C   s   t t  t  t  t  | jd d d}t ddt |||| || f|t ddddd	d
}| j||d}dt| jd  |_|| jd |j< |S )N
ColorSpacerZ   XObjectPatternShadingr~   r	   z/XObjectz/Formz/Groupz/Transparencytruez
/DeviceRGB)rh   ri   ICS)rh   SubtypeBBox	ResourcesGroupr!   extrarp   r   )rb   rc   r   Arrayr+   r[   id)r   rp   rq   rr   rs   r!   r   groupr(   r(   r)   rn      s0   zStream.add_groupc                 C   s^   d|j  t| }d | jd |< || jv r"| j| d | |S |||hd d| j|< |S )Nir   
dpi_ratios)imageinterpolater   x_object)r   intr   r   add)r   r   r   ratio
image_namer(   r(   r)   	add_image   s   
zStream.add_imagec                 C   s   t t  t  t  t  | jd d d}t ddt |||| || g||ddt |j|d	}	| j||	d}
dt| jd  |
_|
| jd |
j< |
S )	Nr~   r   z/Patternr   )	rh   PatternTyper   XStepYStep
TilingType	PaintTyper   r   r   pr   )rb   rc   r   r   valuesr+   r[   r   )r   rp   rq   rr   rs   repeat_widthrepeat_heightmatrixr!   r   patternr(   r(   r)   add_pattern   s.   
zStream.add_patternc                 C   sd   t |d| t |t ||d}|rt d|d< dt| jd  |_|| jd |j< |S )Nz/Device)ShadingTyper~   DomainCoordsFunction)   truer   ExtendrY   r   )rb   rc   r   r[   r   r   )r   shading_typecolor_spacedomaincoordsextendfunctionshadingr(   r(   r)   add_shading   s   zStream.add_shadingc                 c   s*    |    z
dV  W |   dS |   w )zDSave and restore stream context when used with the ``with`` keyword.N)r1   r6   r.   r(   r(   r)   stacked   s
   zStream.stackedc                 #   s    | j d ur*d }t| j }|| j vsJ ||d| j |< td|i}t || zd V  W | j d ur;t   d S d S | j d urHt   w w )N)tagmcidMCID)r   r[   rb   rc   r   begin_marked_contentend_marked_content)r   boxr   property_listr   r&   r(   r)   marked  s   


zStream.markedc                 #   sV    | j d urt d zd V  W | j d urt   d S d S | j d ur*t   w w )NArtifact)r   r   r   r   r.   r&   r(   r)   artifact  s   

zStream.artifactc                 C   s(   t dt | t |t ||dS )Nr   )FunctionTyper   C0C1Nrb   rc   r   )r   c0c1nr(   r(   r)   create_interpolation_function  s   z$Stream.create_interpolation_functionc              	   C   s.   t dt | t |t |t |dS )N   )r   r   EncodeBounds	Functionsr   )r   encodeboundssub_functionsr(   r(   r)   create_stitching_function(  s   z Stream.create_stitching_function)r   r   r   r   r   r   )F)FN)re   ) __name__
__module____qualname____doc__r   r+   propertyr/   r1   r6   r>   r?   r@   rU   rV   r\   rH   rw   ry   r}   rn   r   r   r   r   r   r   r   staticmethodr   r   __classcell__r(   r(   r&   r)   r
      s@    



	
	r
   )r   
contextlibr   rb   loggerr   r   r   text.ffir   
text.fontsr   r    r	   r
   r(   r(   r(   r)   <module>   s    