
    '	4j[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 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!y	# e$ r d	ZY Fw xY w)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        | _        y )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     ?/DATA/.local/lib/python3.12/site-packages/fpdf/linearization.pyr   zPDFLinearization.__init__&   s?    627(    )__name__
__module____qualname__intr   __classcell__r(   s   @r)   r   r   %   s    
)C 
)D 
) 
)r*   r   c                   f    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y)PDFXrefAndTrailerz0%1*2+3-2/1^output_builderr   Nc                     || _         |j                  dz   | _        d| _        d | _        d | _        d | _        d | _        d | _        y )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   sH    ,#**Q.
15+/9=8<(,r*   c                 ,    t        | j                        S N)boolr;   r'   s    r)   is_first_xrefzPDFXrefAndTrailer.is_first_xrefB   s    DNN##r*   c                 ,    t        | j                        S r>   )r?   r:   r@   s    r)   is_main_xrefzPDFXrefAndTrailer.is_main_xrefF   s    DOO$$r*   _security_handlerr   c                    | j                   }|J |j                  J g }t        t        |j                              | _        | j
                  r@t        |j                  | j                  | j                  j                  dd            |_        |j                  d       |j                  | j                  dk(  rdn| j                   d| j                          | j                  s|j                  d       t        |j                        dkD  sJ d       t        | j                  | j                  | j                  z         D ]$  }|j                  |j                  |   dd	       & |j                  d
       |j                  d       | j
                  rE| j                  J |j                  d| j                  | j                  j                  z
          nP| j                  rU| j                   J |j                  d| j                   j                          |j                  d| j                          n|j                  d| j                          | j"                  J | j$                  J |j                  dt'        | j"                  j(                                |j                  dt'        | j$                  j(                                |j*                  }|j-                         }|dk(  r|j/                  |j                        }|r|j                  d| d       |j                  d       |j                  d       | j                  }| j
                  r1| j                  J t        | j                  j                  xs d      }| j                  rd}|j                  |       |j                  d       dj1                  |      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   s9    %%"""~~)))S01)55$$R-GN
 	

6

4,,1at7H7HI4::,WX!!JJ,- 1$	JI	J$D--t/@/@4::/MNFJJ'//&1#6i@A O

9

4??...JJ

T__-B-B BCDE!!~~111

VDNN$8$8#9:;

VD$I$I#JKL

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

U7)1-.

4

;NN	??...DOO5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   ss    '5$
-~ 
-$ 
- $t $ $ %d % % HL9!)*C!D9	9r*   r2   c                   .     e Zd Zddededdf fdZ xZS )PDFHintStreamcontentscompressr   Nc                     t         |   ||       d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d | _        y )N)rd   re   )r   r   sr$   r    ar"   vicr&   rb)r'   rd   re   r(   s      r)   r   zPDFHintStream.__init__   sb    (X>r*   )F)r+   r,   r-   bytesr?   r   r/   r0   s   @r)   rc   rc      s"     $ 4  r*   rc   c                       e Zd ZdefdZy)LinearizedOutputProducerr   c           	      x   | j                   }| j                  j                  t        |j                               t        |j                        }| j                  |       t        |       }| j                  j                  |       | j                         }t        dj                  d            }| j                  j                  |       | j                  t        dd            }| j                  dz   |_        t!        | j                        }d| _        |j#                  | j                  t        dd                    | j%                         }| j'                         }	| j)                         }
| j+                         }| j-                         }| j/                         }| j1                  |
||      }| j3                  ||
|||      }|j4                  D ]  }| j                  |d        | j7                         }| j9                         \  }}| j;                         }| j=                         }t        |       }| j                  j                  |       | j                  dz   |_        |D ]>  }tA        |tB              r||us| xj                  dz  c_        | j                  |_"        @ | xj                  dz  c_        | j                  |_"        |d   jD                  |_#        tI        |      |_%        | jM                  |||d   |	|||       g }|D ]  }||_'        ||_(        |jR                  J |jR                  D ]r  }|jT                  r|j                  |jT                         |jV                  s7tY        |jV                  d      sN|j                  |jV                  jT                         t |jR                  rd |_)         |D ]*  }|jT                  |j                  |jT                         , |D ],  }t[        ||j\                  dz
     jD                        |_/        . |j`                  jb                  jd                  D ]  }||j]                         dz
     |_3         ||_4        ||_5        ||fD ]  }||_6        ||_7         | jp                  rJ d| jp                          | jr                  rJ d	tu        | jr                                | j                  D ]  }tA        |tB              rd }nQtu        | jp                        | jr                  |jD                  <   | jv                  jy                  |jD                        }|r:| j{                  |      5  | j}                  |j                                d d d        | j}                  |j                                 | j                          | jr                  |jD                     } tu        |j                               }!t        | jp                  t        d
| dd|!dd      | _8        t        | jp                  t        | jr                  |d   jD                  dz      d      | _8        t        | jp                  t        | jr                  |j>                     d      | _8        t        | jp                  t        tu        | jp                        d      | _8        |j                  rVt        t        | jp                  |j                  |j                  |j                  |j                  |j                        | _8        | jp                  S # 1 sw Y   TxY w)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   s@   yy 	Yt'7'789,T-=-=>+,&t,
Z('')'		)(<=_-OOE!QK0	  ;;?
"4==1 	q$89 --/!==?!--/!%!4!4!6 $ 2 2 4 $ 2 2 4"oo"!

 "55"!!
 "00Mm-=> 1#779*.*D*D*F'-113>>#%d+	Y' #'++/
*Gw(89?2q ![[
 + 	q![[ (loo&y1)$Q<1-!5- 	 	
 ')!H,HO!3H??...!::LL,77wuww7LL.	 )
 ??"& " *L  ,\../ * D#$$q("DM   ..>>@@K&{'>'>'@1'DEKN A)	(

+D*D$DM , 	\Mdkk][	\ 	P;C<M;NO	P}}G'#34"+.t{{+;WZZ("::>>wzzJ%%k2IIg//12 32 		'++-. % 	&&( \\/"4"45
2245
"KK1
4 *T!2!4

 #KK-||IaLOOa/06

 #KK2||I223D9

 #KK#4;;%
 >>&&&##DK {{U 32s    \//\9	N)r+   r,   r-   	bytearrayr   ra   r*   r)   rp   rp      s    r9 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    3(E %$2 !)7 &( )y )P( Pf$  s~ s{  Fs   A7 7B B