
    Rj[7                     $   d Z ddlmZmZ ddlmZmZmZmZm	Z	 ddl
mZ ddlmZmZmZmZmZ ddlmZ 	 ddlmZ n# e$ r d	ZY nw xY werdd
lmZ dZdZdZdZ G d de          Z G d de          Z G d de          Z  G d de          Z!d	S )z
This module is in work-in-progress state.
Hint tables / hint streams have not been implemented yet,
and there are a few "TODO" comment remaining.
cf. https://github.com/py-pdf/fpdf2/issues/62
    )TYPE_CHECKINGOptional   )ContentWithoutIDOutputProducer
PDFCatalog	PDFHeaderPDFInfo)sign_content)DestinationXYZPDFArrayPDFContentStream	PDFObjectiobj_ref)buffer_subst)signerN)StandardSecurityHandlerz0%1%2%3%4%5%6%7%8%9%a%b%c%dz1%2%3%4%5%6%z2%3%4%5%6%7%z3%4%5%6%7%8%c                   (     e Zd Zdeddf fdZ xZS )PDFLinearizationpages_countreturnNc                     t                                                       d| _        || _        t          | _        d | _        t          | _        t          | _
        t          | _        d S )N1)super__init__
linearizedn%HINT_STREAM_OFFSET_LENGTH_PLACEHOLDERho!FIRST_PAGE_END_OFFSET_PLACEHOLDERe&MAIN_XREF_1ST_ENTRY_OFFSET_PLACEHOLDERtFILE_LENGTH_PLACEHOLDERl)selfr   	__class__s     S/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/fpdf/linearization.pyr   zPDFLinearization.__init__&   sN    627(    )__name__
__module____qualname__intr   __classcell__r(   s   @r)   r   r   %   sK        
)C 
)D 
) 
) 
) 
) 
) 
) 
) 
) 
) 
)r*   r   c                   z    e Zd ZdZdeddfdZedefd            Zedefd            Z		 dde
d	         defd
ZdS )PDFXrefAndTrailerz0%1*2+3-2/1^output_builderr   Nc                     || _         |j        dz   | _        d| _        d | _        d | _        d | _        d | _        d | _        d S )Nr   )	r3   obj_idcountstart_obj_idcatalog_objinfo_obj
first_xref	main_xref	startxref)r'   r3   s     r)   r   zPDFXrefAndTrailer.__init__6   sI    ,#*Q.
15+/9=8<(,r*   c                 *    t          | j                  S N)boolr;   r'   s    r)   is_first_xrefzPDFXrefAndTrailer.is_first_xrefB   s    DN###r*   c                 *    t          | j                  S r>   )r?   r:   r@   s    r)   is_main_xrefzPDFXrefAndTrailer.is_main_xrefF   s    DO$$$r*   _security_handlerr   c                    | j         }|J |j        J g }t          t          |j                            | _        | j        r9t          |j        | j        | j                            dd                    |_        |	                    d           |	                    | j
        dk    rdn| j
         d| j                    | j        s|	                    d           t          |j                  dk    s
J d            t          | j
        | j
        | j        z             D ]&}|	                    |j        |         dd	           '|	                    d
           |	                    d           | j        r5| j        J |	                    d| j        | j        j        z
              n3| j        rI| j        J |	                    d| j        j                    |	                    d| j                    n|	                    d| j                    | j        J | j        J |	                    dt'          | j        j                              |	                    dt'          | j        j                              |j        }|                                }|dk    r|                    |j                  }|r|	                    d| d           |	                    d           |	                    d           | j        }| j        r$| j        J t          | j        j        pd          }| j        rd}|	                    |           |	                    d           d                    |          S )N    xrefr   r   z0000000000 65535 f z<TODO: how to know the offsets in the 1st xref at this stage?010z	 00000 n trailerz<<z/Size z/Prev z/Root z/Info z/ID []z>>r<   0z%%EOF
)r3   bufferstrlenr<   rC   r    PREV_MAIN_XREF_START_PLACEHOLDERrjustappendr7   r6   rA   offsetsranger:   r;   r8   r9   pdf_refidfpdffile_id_default_file_idjoin)r'   rD   builderoutr5   rY   rZ   r<   s           r)   	serializezPDFXrefAndTrailer.serializeJ   s    %"""~)))S0011 	)5$$R-- GN
 	

6

4,11aat7HWW4:WWXXX! 	.JJ,---  1$$$I %$$D-t/@4:/MNN 	B 	BFJJ'/&1@@@@AAAA

9

4 	/?...JJD
T_-B BDDEEEE! 2~111

:DN$8::;;;

KD$IKKLLLL

0DJ00111#///=,,,JJ>(8(; < <>>???JJ;(8 9 9;;<<<<DllnnG"}}//N   /

-7---...

4

;N	 	>?...DO5<==I 	I

9

7yy~~r*   r>   )r+   r,   r-   rR   r   r   propertyr?   rA   rC   r   rP   r_    r*   r)   r2   r2   3   s        '5$
-~ 
-$ 
- 
- 
- 
- $t $ $ $ X$ %d % % % X% HL9 9!)*C!D9	9 9 9 9 9 9r*   r2   c                   .     e Zd Zddededdf fdZ xZS )PDFHintStreamFcontentscompressr   Nc                     t                                          ||           d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d S )N)rd   re   )r   r   sr$   r    ar"   vicr&   rb)r'   rd   re   r(   s      r)   r   zPDFHintStream.__init__   sq    (X>>>r*   )F)r+   r,   r-   bytesr?   r   r/   r0   s   @r)   rc   rc      sW          $ 4          r*   rc   c                       e Zd ZdefdZdS )LinearizedOutputProducerr   c           	         | j         }| j                            t          |j                             t          |j                  }|                     |           t          |           }| j                            |           | 	                                }t          d                    d                    }| j                            |           |                     t          dd                    }| j        dz   |_        t!          | j                  }d| _        |                    |                     t          dd                                |                                 }|                                 }	|                                 }
|                                 }|                                 }|                                 }|                     |
||          }|                     ||
|||          }|j        D ]}|                     |d           |                                 }|                                 \  }}|                                 }|                                 }t          |           }| j                            |           | j        dz   |_        |D ]7}tA          |tB                    s ||ur| xj        dz  c_        | j        |_"        8| xj        dz  c_        | j        |_"        |d         j"        |_#        tI          |          |_%        | &                    |||d         |	|||           g }|D ]}||_'        ||_(        |j)        J |j)        D ]^}|j*        r|                    |j*                   |j+        r4tY          |j+        d          r|                    |j+        j*                   _|j)        sd |_)        |D ]#}|j*        |                    |j*                   $|D ])}t[          ||j.        dz
           j"                  |_/        *|j0        j1        j2        D ]$}||.                                dz
           |_3        %||_4        ||_5        ||fD ]}||_6        ||_7        | j8        rJ d| j8                     | j9        rJ d	tu          | j9                               | j        D ]}tA          |tB                    rd }n@tu          | j8                  | j9        |j"        <   | j;        <                    |j"                  }|rU| =                    |          5  | >                    |?                                           d d d            n# 1 swxY w Y   | >                    |?                                           | @                                 | j9        |j"                 } tu          |?                                          }!t          | j8        t          d
| dd|!dd          | _8        t          | j8        t          | j9        |d         j"        dz            d          | _8        t          | j8        t          | j9        |j                 d          | _8        t          | j8        t          tu          | j8                  d          | _8        |jF        r=t          t          | j8        |jF        |jI        |jJ        |jK        |jL                  | _8        | j8        S )N zlatin-1r   r   embedded_files)pages_root_objfirst_page_objsig_annotation_objxmp_metadata_objstruct_tree_root_objoutline_dict_objdestz@Nothing should have been appended to the .buffer at this stage: z.No offset should have been set at this stage: [z 12drG   rL   )MrY   pdf_objsrT   r	   pdf_versionr   r   _add_pdf_objr2   _add_catalogrc   encode
_add_pagesslicer5   r6   listextend_add_pages_root_add_annotations_as_objects_add_images_add_gfxstates_add_shadings_add_patterns
_add_fonts_add_resources_dictrs   _add_structure_tree_add_document_outline_add_xmp_metadata	_add_infor7   
isinstancer   rX   r    r   kids_finalize_catalogparent	resourcesannotsrz   rh   hasattrrW   page_numberpage_refstruct_builderdoc_struct_elemkpgr:   r;   r8   r9   rO   rU   rQ   trace_labels_per_obj_idget_trace_size_outr_   _log_final_sections_sizesr   r   r!   r#   r%   	_sign_keyr   r   
_sign_cert_sign_extra_certs_sign_hashalgo
_sign_time)"r'   rY   linearization_objr:   r8   hint_stream_obj	page_objsfirst_xref_pdf_objsrt   rv   img_objs_per_indexgfxstate_objs_per_nameshading_objs_per_namepattern_objs_per_namefont_objs_per_indexresources_dict_objembedded_filerx   ry   outline_itemsrw   r9   r;   pdf_objdestspage_objannotoutline_itemrz   struct_elemrH   trace_label
hs1_offset
hs1_lengths"                                     r)   	bufferizez"LinearizedOutputProducer.bufferize   ss   y 	Yt'788999,T-=>>+,,,&t,,
Z(((''))'		)(<(<==_---OOE!QKK00	  ;?
"4=11 	q$88999 --//!==??!--//!%!4!4!6!6 $ 2 2 4 4 $ 2 2 4 4"oo"!
 

 "55"!!
 
 "0 	? 	?Mm-=>>>>#7799*.*D*D*F*F'-1133>>##%d++	Y''' #'+/
* 	) 	)Gw(899)?22q ![
q![ (lo&y11)$Q<1-!5- 	 	
 	
 	
 ')! 	' 	'H,HO!3H?...! / /: -LL,,,7 /wuw77 /LL...? '"&) 	0 	0L ,\./// 	 	D#$q( DMM
  .>@ 	F 	FK&{'>'>'@'@1'DEKNN)	(

+ 	% 	%D*D$DMM 	\ 	\[dk[[	\ 	\ 	P 	POC<M<MOO	P 	P} 	/ 	/G'#344 K"+.t{+;+;WZ(":>>wzJJ /%%k22 3 3IIg//112223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 		'++--....&&((( \/"45
224455
"K14
444*4444
 

 #K-|IaLOa/077
 

 #K2|I23::
 

 #K#4;&&
 
 > 		&&# DK {s   >(U22U6	9U6	N)r+   r,   r-   	bytearrayr   ra   r*   r)   rp   rp      s6        r9 r r r r r rr*   rp   )"__doc__typingr   r   outputr   r   r   r	   r
   signr   syntaxr   r   r   r   r   rW   utilr   endesiver   ImportError
encryptionr   r   r!   r#   r%   r   r2   rc   rp   ra   r*   r)   <module>r      s    + * * * * * * * T T T T T T T T T T T T T T                            FFF  4333333(E %$2 !)7 &( ) ) ) ) )y ) ) )P P P P P( P P Pf    $    s s s s s~ s s s s ss   ; AA