o
    Zh0h%,                     @   s^   d 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.    N   )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d9 fd-d.	Z fd/d0Zed1d2 Zed3d4 Zd5d6 Z  ZS );Streamz&PDF stream object with extra features.c                    s   t  j|i | || _g | _|| _|| _|| _|| _d  | _| _	d  | _
| _d  | _| _d  | _| _t g| _td| _td| _td| _d S )Nzunsigned int *zPangoRectangle *)super__init__page_rectanglemarked_fonts
_resources_images_mark_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markargskwargs	__class__ K/var/www/html/rh/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)   ctm0   s   
z
Stream.ctmc                    s   t    | j| j d S N)r
   
push_stater   appendr/   r.   r&   r(   r)   r1   4   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   8   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)   	transformC   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?   G   s   zStream.begin_textc                    s   | j d | _| _ t   d S r0   )r   r   r
   end_textr.   r&   r(   r)   r@   N   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   warn)r   colorstrokechannelsalpha	lightnessr8   r9   r(   r(   r)   	set_colorR   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   o   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\   u   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   z   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                    s\   | j sd S d }|d u r| |j}|r%tdt| ji}| j||f t 	|| d S )NMCID)
r   get_marked_content_tagelement_tagrb   rc   r[   r   r2   r
   begin_marked_content)r   boxmcidtagproperty_listr&   r(   r)   r      s   zStream.begin_marked_contentc                    s   | j sd S t   d S r0   )r   r
   end_marked_contentr.   r&   r(   r)   r     s   zStream.end_marked_contentc                 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_functionc                 C   s   |dkrdS |dkrdS |dkrdS |dkrdS |d	krd
S |dkr$dS |dv r,|  S |dv r2dS |dv r8dS |dkr>dS |dv rF|  S |dv rX|d d   |dd   S dS )NdivDivspanSpanarticleArtsectionSect
blockquote
BlockQuoter   P)h1h2h3h4h5h6)dlulolL)lidtddLItableTable)trthtd)theadtbodytfootr   	NonStruct)upper)r   r   r(   r(   r)   r     s2   zStream.get_marked_content_tag)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   staticmethodr   r   r   __classcell__r(   r(   r&   r)   r	      s:    



	
	r	   )r   rb   loggerr   r   r   text.ffir   
text.fontsr   r    r   r	   r(   r(   r(   r)   <module>   s    