
    mj                     H   d dl Z d dlZd dlZd dl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mZmZmZmZmZ ej$                  dd dk\  rd dlmZ nd dlmZ ej$                  d	k\  rd d
lmZ nd d
lmZ ddlmZ ddlmZmZ ddlmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z%m&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Z- G d de.e)      Z/ G d de0e)      Z1 G d de2e)      Z3 G d  d!e4e)      Z5 G d" d#e4e)      Z6d$e4d%e2fd&Z7d'ed%eede*e,f      fd(Z8y))    N)Sequence)log10)iter_unpack)AnyCallableClassVarOptionalUnioncast   )   
   )	TypeGuard)r      )Self)_pdfdoc_encoding_rev)PdfObjectProtocolPdfWriterProtocol)
StreamTypeclasspropertydeprecation_no_replacementdeprecation_with_replacementlogger_warningread_non_whitespaceread_until_regex)STREAM_TRUNCATED_PREMATURELYPdfReadErrorPdfStreamErrorzMathieu Fenniakzbiziqe@mathieu.fenniak.netc                       e Zd ZU ej                  Zed   ed<   ed   ed<   de	fdZ
defdZdefdZd	edd fd
Z	 	 dd	ededeeeee	f         dd fdZ	 ddd d	ededd fdZded    fdZ	 ddededeef   ddfdZy)	PdfObject).zhashlib._Hash	hash_funcIndirectObjectindirect_referencereturnc                 F    t        | j                  j                   d      )q
        Used to detect modified object.

        Returns:
            Hash considering type and value.

        z& does not implement .hash_bin() so farNotImplementedError	__class____name__selfs    F/root/.hermes/venv/lib/python3.12/site-packages/pypdf/generic/_base.pyhash_binzPdfObject.hash_binE   s'     "~~&&''MN
 	
    c                 $    |  j                         S Nencoder+   s    r-   hash_value_datazPdfObject.hash_value_dataQ   s    !!r/   c                     | j                   j                   d| j                  | j                               j	                          j                         S )N:)r)   r*   r!   r4   	hexdigestr3   r+   s    r-   
hash_valuezPdfObject.hash_valueT   sG    ~~&&'q~~d2245??ABD
&(	r/   pdf_destc                 $    | j                  |      S )a/  
        Clone object into pdf_dest (PdfWriterProtocol which is an interface for PdfWriter)
        without ensuring links. This is used in clone_document_from_root with incremental = True.

        Args:
          pdf_dest: Target to clone to.

        Returns:
          The cloned PdfObject

        )cloner,   r9   s     r-   	replicatezPdfObject.replicateZ   s     zz(##r/   force_duplicateignore_fieldsc                 F    t        | j                  j                   d      )a  
        Clone object into pdf_dest (PdfWriterProtocol which is an interface for PdfWriter).

        By default, this method will call ``_reference_clone`` (see ``_reference``).


        Args:
          pdf_dest: Target to clone to.
          force_duplicate: By default, if the object has already been cloned and referenced,
            the copy will be returned; when ``True``, a new copy will be created.
            (Default value = ``False``)
          ignore_fields: List/tuple of field names (for dictionaries) that will be ignored
            during cloning (applies to children duplication as well). If fields are to be
            considered for a limited number of levels, you have to add it as integer, for
            example ``[1,"/B","/TOTO"]`` means that ``"/B"`` will be ignored at the first
            level only but ``"/TOTO"`` on all levels.

        Returns:
          The cloned PdfObject

        z! does not implement .clone so farr'   r,   r9   r>   r?   s       r-   r;   zPdfObject.clonek   s'    6 "~~&&''HI
 	
r/   r;   c                    	 |s'|j                   |j                   j                  |k(  r|S 	 | j                   }|j                  rJ|H|j                  |j
                  k(  r/|j                  t        |j                        k  r|j                  }nt        |j                        dz   }|(t        |j                        |j                  vrQi |j                  t        |j                        <   |j                  |j                  t        |j                           d<   |s|j                  |j                  t        |j                           v rW|j                  |j                  t        |j                           |j                           }t        |t              sJ d       |S ||j                  t        |j                           |j                  <   	 ||j                  |dz
  <   t!        |d|      |_         |S # t        $ r Y w xY w# t        $ r |cY S w xY w# t        $ r3 |j                  j                  |       t        |j                        }Y pw xY w)aX  
        Reference the object within the _objects of pdf_dest only if
        indirect_reference attribute exists (which means the objects was
        already identified in xref/xobjstm) if object has been already
        referenced do nothing.

        Args:
          clone:
          pdf_dest:

        Returns:
          The clone

           	PreventGCmypyr   )r#   pdf	ExceptionAttributeErrorincremental_readeridnumlen_objectsid_id_translated
get_object
isinstancer    
IndexErrorappendr"   )r,   r;   r9   r>   indiobjs          r-   _reference_clonezPdfObject._reference_clone   s   "	#,,8,,00H<	))C   8+++		S!2!233		AH%%&*A?#''{("9"9979''3774DGGG''3774[A#II!8!8CGG!EE))++BswwK8C "#y19691
>?H##BswwK0;	'',Ha!e$ $2!Q#A I  		
  	L	6  	'$$U+H%%&A	's4   (G8 H H 8	HHHH9IIc                     | S )zResolve indirect references. r+   s    r-   rP   zPdfObject.get_object       r/   Nstreamencryption_keyc                     t         r1   )r(   r,   r[   r\   s      r-   write_to_streamzPdfObject.write_to_stream   s
     "!r/   FrY   )Fr1   )r*   
__module____qualname__hashlibsha1r!   r   __annotations__r	   intr.   bytesr4   r8   r   r=   boolr   r
   strr;   rW   rP   r   r_   rY   r/   r-   r    r    @   s   07Ix,-< !122

# 

" "E $#$ 
$( !&=?	
#
 
  sCx 9:	

 

@ X]< <,=<PT<	<|H[1 
 MQ" "27c58H2I"	"r/   r    c                       e Zd Z	 	 ddededeeeee	f         dd fdZ
de	fdZ	 dded	edeef   ddfd
Zededd fd       ZdefdZdedefdZde	fdZy)
NullObjectr9   r>   r?   r$   c                 L    t        d| j                  t               ||            S )Clone object into pdf_dest.rk   )r   rW   rk   rA   s       r-   r;   zNullObject.clone   s'     $//
hX
 	
r/   c                 .    t        | j                  f      S r&   hashr)   r+   s    r-   r.   zNullObject.hash_bin   s     T^^%&&r/   Nr[   r\   c                 B    |t        dd       |j                  d       y )N/the encryption_key parameter of write_to_stream5.0.0   null)r   writer^   s      r-   r_   zNullObject.write_to_stream   s%     %&A7 	Wr/   c                 X    | j                  d      }|dk7  rt        d      t               S )N   ru   zCould not read Null object)readr   rk   )r[   nulltxts     r-   read_from_streamzNullObject.read_from_stream   s+    ++a.g;<<|r/   c                      y)Nrk   rY   r+   s    r-   __repr__zNullObject.__repr__   s    r/   otherc                 "    t        |t              S r1   )rQ   rk   r,   r~   s     r-   __eq__zNullObject.__eq__   s    %,,r/   c                 "    | j                         S r1   r.   r+   s    r-   __hash__zNullObject.__hash__       }}r/   r`   r1   )r*   ra   rb   r   rh   r	   r   r
   ri   rf   r;   r.   r   rg   r_   staticmethodr{   r}   objectr   r   rY   r/   r-   rk   rk      s     !&=?		
#	
 	
  sCx 9:		

 
	
'# ' MQ 27c58H2I	    # -F -t -# r/   rk   c                       e Zd ZU eed<   deddfdZ	 	 ddededee	e
eef         dd fdZdefd	Zd
edefdZdefdZdefdZ	 ddede
deef   ddfdZededd fd       Zy)BooleanObjectvaluer$   Nc                     || _         y r1   r   )r,   r   s     r-   __init__zBooleanObject.__init__  s	    
r/   r9   r>   r?   c                 b    t        d| j                  t        | j                        ||            S )rm   r   )r   rW   r   r   rA   s       r-   r;   zBooleanObject.clone  s/     !!-

";XW
 	
r/   c                 D    t        | j                  | j                  f      S ro   )rq   r)   r   r+   s    r-   r.   zBooleanObject.hash_bin  s     T^^TZZ011r/   oc                    t        |t              r| j                  |j                  k(  S t        |t              r| j                  |k(  S y)NF)rQ   r   r   rh   r,   r   s     r-   r   zBooleanObject.__eq__  s:    a'::((a::?"r/   c                 "    | j                         S r1   r   r+   s    r-   r   zBooleanObject.__hash__%  r   r/   c                 "    | j                   rdS dS )NTrueFalser   r+   s    r-   r}   zBooleanObject.__repr__(  s    v00r/   r[   r\   c                 ~    |t        dd       | j                  r|j                  d       y |j                  d       y )Nrs   rt      trues   false)r   r   rv   r^   s      r-   r_   zBooleanObject.write_to_stream+  s8     %&A7 ::LL!LL"r/   c                     | j                  d      }|dk(  rt        d      S |dk(  r| j                  d       t        d      S t        d      )Nrx   r   Ts   falsrC   FzCould not read Boolean object)ry   r   r   )r[   words     r-   r{   zBooleanObject.read_from_stream7  sJ    {{1~7? &&7?KKN '':;;r/   r`   r1   )r*   ra   rb   rh   re   r   r   r   r	   r   r
   ri   rf   r;   r.   r   r   r   r}   r   rg   r_   r   r{   rY   r/   r-   r   r     s    Kc d  !&=?	

#

 

  sCx 9:	


 


2# 2 d # 1# 1 MQ
# 
#27c58H2I
#	
# < < < <r/   r   c                      e Zd ZdedededdfdZdefdZdefdZd	edd
fdZ		 	 d%d	ede
deeeeef         dd fdZed&d       Zded
   fdZdedd fdZded
   fdZdedefdZdedefdZdede
fdZdefdZdefdZdefdZdefdZdefdZdede
fdZdede
fd Z	 d'd!e d"edee!f   ddfd#Z"e#d!e dedd fd$       Z$y)(r"   rK   
generationrF   r$   Nc                 .    || _         || _        || _        y r1   )rK   r   rF   )r,   rK   r   rF   s       r-   r   zIndirectObject.__init__C  s    
$r/   c                 l    t        | j                  | j                  t        | j                        f      S r1   )rq   rK   r   rN   rF   r+   s    r-   r   zIndirectObject.__hash__H  s$    TZZ"TXX,?@@r/   c                     t        | j                  | j                  | j                  t	        | j
                        f      S ro   )rq   r)   rK   r   rN   rF   r+   s    r-   r.   zIndirectObject.hash_binK  s,     T^^TZZ"TXX,OPPr/   r9   r    c                 D    t        | j                  | j                  |      S r1   )r"   rK   r   r<   s     r-   r=   zIndirectObject.replicateU  s     djj$//8DDr/   r>   r?   c                    | j                   |k(  r|s| S t        | j                         |j                  vrQi |j                  t        | j                         <   | j                   |j                  t        | j                            d<   | j                  |j                  t        | j                            v r|j	                  |j                  t        | j                            | j                           }|r|J |j
                  J |j
                  }t        |j                  |j                  |j                         S | j	                         }|$t               }t        | t        f      sJ | |_        |j                  |j                  |||            }t        |t              sJ d       |j
                  J d       |j
                  S )rm   rD   rE   )rF   rN   rO   rK   rP   r#   r"   r   rk   rQ   _add_objectr;   r    )r,   r9   r>   r?   dupidrefrV   s          r-   r;   zIndirectObject.clone[  s    88xKdhh<x66646H##BtxxL1AEH##BtxxL1+>::00DHH>>%%h&=&=bl&KDJJ&WXC&--999..%ekk53C3CUYYOO//#C{ l!$(9:::)-&&&		(O]CC #y)161)%%19691%%%r/   c                     | S r1   rY   r+   s    r-   r#   z!IndirectObject.indirect_reference  rZ   r/   c                 <    | j                   j                  |       }|S r1   )rF   rP   )r,   rV   s     r-   rP   zIndirectObject.get_object  s    #'88#6#6t#<
r/   memoc                 X    t        | j                  | j                  | j                        S r1   )r"   rK   r   rF   )r,   r   s     r-   __deepcopy__zIndirectObject.__deepcopy__  s    djj$//488DDr/   c                     | j                         }t        |t              r,t        | j	                          d|j	                                |S )Nz references an IndirectObject )rP   rQ   r"   r   r}   r   s     r-   _get_object_with_checkz%IndirectObject._get_object_with_check  sH    OOa( ==?##A!**,P  r/   namec                 p    	 t        | j                         |      S # t        $ r t        d| d      w xY w)NzNo attribute z* found in IndirectObject or pointed object)getattrr   rH   r,   r   s     r-   __getattr__zIndirectObject.__getattr__  sF    	4668$?? 	 v%OP 	s    5keyc                 (    | j                         |   S r1   r   r,   r   s     r-   __getitem__zIndirectObject.__getitem__  s    **,S11r/   c                 &    || j                         v S r1   r   r   s     r-   __contains__zIndirectObject.__contains__  s    d11333r/   c                 >    | j                         j                         S r1   )r   __iter__r+   s    r-   r   zIndirectObject.__iter__  s    **,5577r/   c                 >    | j                         j                         S r1   )rP   	__float__r+   s    r-   r   zIndirectObject.__float__  s     **,,r/   c                 >    | j                         j                         S r1   )rP   __int__r+   s    r-   r   zIndirectObject.__int__       ((**r/   c                 >    | j                         j                         S r1   )rP   __str__r+   s    r-   r   zIndirectObject.__str__  r   r/   c                 h    d| j                   d| j                  dt        | j                         dS )NzIndirectObject(z, ))rK   r   rN   rF   r+   s    r-   r}   zIndirectObject.__repr__  s/     b0C2bl^STUUr/   r~   c                     |d uxr` t        |t              xrN | j                  |j                  k(  xr3 | j                  |j                  k(  xr | j                  |j                  u S r1   )rQ   r"   rK   r   rF   r   s     r-   r   zIndirectObject.__eq__  sc     &5.1&

ekk)& 5#3#33& EII%	
r/   c                 &    | j                  |       S r1   )r   r   s     r-   __ne__zIndirectObject.__ne__  s    ;;u%%%r/   r[   r\   c                     |t        dd       |j                  | j                   d| j                   dj	                                y )Nrs   rt    z R)r   rv   rK   r   r3   r^   s      r-   r_   zIndirectObject.write_to_stream  sD     %&A7 	

|1T__$5R8??ABr/   c                    d}	 | j                  d      }|st        t              |j                         rn||z  }9d}	 | j                  d      }|st        t              |j                         r|s6n||z  }<t	        |       }|dk7  r%t        dt        | j                                      t        t        |      t        |      |      S )Nr/   rC      Rz0Error reading indirect object reference at byte )
ry   r   r   isspacer   r   hextellr"   rf   )r[   rF   rK   tokr   rs         r-   r{   zIndirectObject.read_from_stream  s    ++a.C$%ABB{{}SLE  
++a.C$%ABB{{}!#J   '9B3v{{}CUBVW  c%j#j/3??r/   r`   )r$   r"   r1   )%r*   ra   rb   rf   r   r   r   r.   r   r=   rh   r	   r   r
   ri   r;   propertyr#   rP   r   r   r   r   r   r   r   r   r   r}   r   r   r   r   rg   r_   r   r{   rY   r/   r-   r"   r"   B  s   c s   
A# AQ# QE#E 
E !&=?	"&#"& "&  sCx 9:	"&
 
"&H  H[1 E E)9 E(=   2s 2s 24 4 48# 8-3 -+ ++ +V# V
F 
t 
&F &t & MQC C27c58H2IC	C @ @# @:J @ @r/   r"      c                       e Zd Z	 ddedee   defdZ	 	 ddededeee	e
ef         dd fd	Zdefd
Zde
fdZde
fdZdefdZ	 ddede	de
ef   ddfdZy)FloatObjectNr   contextr$   c                     	 t        |      }t         j                  | |      S # t        $ r3}t        dt        ||       t         j                  | d      cY d }~S d }~ww xY w)Nz<%(error)s : FloatObject (%(value)s) invalid; use 0.0 instead)sourceerrorr   g        )float__new__rG   r   r*   )clsr   r   es       r-   r   zFloatObject.__new__  sZ    	+%LE==e,, 		+ N	 ==c**		+s    # 	A(AAAr9   r>   r?   c                 N    t        d| j                  t        |       ||            S )rm   r   )r   rW   r   rA   s       r-   r;   zFloatObject.clone  s+     !!+d"3XO
 	
r/   c                 D    t        | j                  | j                  f      S ro   rq   r)   
as_numericr+   s    r-   r.   zFloatObject.hash_bin  s     T^^T__566r/   c                     | dk(  ryt         t        t        t        |                   z
  }| dt	        d|       dj                  d      j                  d      S )Nr   0.0.rC   f0)FLOAT_WRITE_PRECISIONrf   r   absmaxrstrip)r,   nbs     r-   myreprzFloatObject.myrepr  sS    19"Ss4y)9%::qQAo&..s3::3??r/   c                 "    | j                         S r1   )r   r+   s    r-   r}   zFloatObject.__repr__  s    {{}r/   c                     t        |       S r1   )r   r+   s    r-   r   zFloatObject.as_numeric  s    T{r/   r[   r\   c                 |    |t        dd       |j                  | j                         j                  d             y Nrs   rt   utf8)r   rv   r   r3   r^   s      r-   r_   zFloatObject.write_to_stream  s6     %&A7 	T[[]))&12r/   )r   Nr`   r1   )r*   ra   rb   r   r	   r   r   rh   r   r
   ri   rf   r;   r.   r   r}   r   r   r   rg   r_   rY   r/   r-   r   r     s    :>++*23-+	+( !&=?	



 

  sCx 9:	


 


7# 7@ @# E  MQ3 327c58H2I3	3r/   r   c                       e Zd Z ej                  d      ZdZdedefdZ		 	 ddede
deeeeef         dd fd	Zdefd
ZdefdZ	 ddededeef   ddfdZededed   fd       Zy)NumberObjects	   [^+-.0-9]@   r   r$   c                     	 t         j                  | t        |            S # t        $ r+ t        dt        |       t         j                  | d      cY S w xY w)Nz.NumberObject(%(value)s) invalid; use 0 instead)r   r   r   )rf   r   
ValueErrorr   r*   )r   r   s     r-   r   zNumberObject.__new__+  sK    	';;sCJ// 	'KT\dij;;sA&&	's   ! 1AAr9   r>   r?   c                 N    t        d| j                  t        |       ||            S )rm   r   )r   rW   r   rA   s       r-   r;   zNumberObject.clone2  s+     !!,t"4hP
 	
r/   c                 L    t        | j                  | j                         f      S ro   r   r+   s    r-   r.   zNumberObject.hash_bin>  s     T^^T__%6788r/   c                 H    t        t        |       j                  d            S )Nr   )rf   reprr3   r+   s    r-   r   zNumberObject.as_numericH  s    4:$$V,--r/   Nr[   r\   c                 r    |t        dd       |j                  t        |       j                  d             y r   )r   rv   r   r3   r^   s      r-   r_   zNumberObject.write_to_streamK  s4     %&A7 	T$Z&&v./r/   )r   r   c                     t        | t        j                  t        j                        }d|v rt	        |      S t        |      S )Nr[   regexlength   .)r   r   NumberPattern_LENGTH_LIMITr   )r[   nums     r-   r{   zNumberObject.read_from_streamT  s:    fL4N4NWcWqWqr3;s##C  r/   r`   r1   )r*   ra   rb   recompiler   r   r   r   r   rh   r	   r   r
   ri   rf   r;   r.   r   r   rg   r_   r   r{   rY   r/   r-   r   r   '  s    BJJ|,MM'C 'D ' !&=?	



 

  sCx 9:	


 


9# 9.C . MQ0 027c58H2I0	0 ! !6S0T ! !r/   r   c                       e Zd ZdZ	 	 ddededeeee	e
f         dd fdZde
fdZedefd       Z	 dd
eded	e	ef   dd	fdZde	fdZy	)ByteStringObjecta>  
    Represents a string object where the text encoding could not be determined.

    This occurs quite often, as the PDF spec doesn't provide an alternate way to
    represent strings -- for example, the encryption data stored in files (like
    /O) is clearly not text, but is still stored in a "String" object.
    r9   r>   r?   r$   c           
      `    t        d| j                  t        t        |             ||            S )rm   r  )r   rW   r  rg   rA   s       r-   r;   zByteStringObject.clonee  s2     !! t-x
 	
r/   c                 B    t        | j                  t        |       f      S ro   )rq   r)   rg   r+   s    r-   r.   zByteStringObject.hash_bins  s     T^^U4[122r/   c                     | S )z7For compatibility with TextStringObject.original_bytes.rY   r+   s    r-   original_byteszByteStringObject.original_bytes}  s	     r/   Nr[   r\   c                     |t        dd       |j                  d       |j                  t        j                  |              |j                  d       y )Nrs   rt      <   >)r   rv   binasciihexlifyr^   s      r-   r_   z ByteStringObject.write_to_stream  sH     %&A7 	TX%%d+,Tr/   c                     dgt        t        j                        }|D ]  }	 | j                  |      c S  t        d      # t        $ r Y .w xY w)Nutf-16zCannot decode ByteStringObject.)list
NameObjectCHARSETSdecodeUnicodeDecodeErrorr   )r,   charset_to_tryencs      r-   r   zByteStringObject.__str__  s_    "?T**=*=%>?! 	C{{3''	
 <== & s   A	AAr`   r1   )r*   ra   rb   __doc__r   rh   r	   r   r
   ri   rf   r;   r.   r   rg   r  r   r_   r   rY   r/   r-   r  r  \  s     !&=?	

 
  sCx 9:	

 

3# 3   
 MQ	 	27c58H2I			> >r/   r  c                       e Zd ZU dZeed<   eed<   eed<   dZee   ed<   de	de
fd	Z	 	 dd
e	dedeeeeef         dd fdZdefdZedefd       ZdefdZdefdZ	 ddededeef   ddfdZy)TextStringObjectz
    A string object that has been decoded into a real unicode string.

    If read from a PDF document, this string appeared to match the
    PDFDocEncoding, or contained a UTF-16BE BOM mark to cause UTF-16 decoding
    to occur.
    autodetect_pdfdocencodingautodetect_utf16	utf16_bomN_original_bytesr   r$   c                    d }t        |t              r|}|j                  d      }t        j	                  | |      }||_        d|_        d|_        d|_        |e|d d t        j                  t        j                  hv r@	 t        j	                  | |j                  d            }||_        d|_        |d d |_        |S 	 t#        |       d|_        |S # t        $ rc}t        dt        ||j                         t        j	                  | |j                  d |j                    j                  d            }Y d }~d }~ww xY w# t$        $ r  d|_        t        j                  |_        Y |S w xY w)	NcharmapFr/   r   r  z1%(exception)s; initial string: %(initial_string)r)r   	exceptioninitial_stringT)rQ   rg   r  ri   r   r  r  r  r  codecsBOM_UTF16_LEBOM_UTF16_BEr  r   r*   r   startencode_pdfdocencodingUnicodeEncodeError)r   r   r  text_string_objectr   s        r-   r   zTextStringObject.__new__  s}   eU#"NLL+E [[e4-;*.3+7<4'*$%.!*<ATATV\ViVi@j*j
	l%([[n6K6KH6U%V" 2@.26/+9"1+=( "!C%&89?C"< "!% & lG#'#,#3#3	 &)[[i6F6FGX6Y6`6`ai6j%k"l & C6:"3/5/B/B",!!Cs+    %C  E 	E AD;;E %E,+E,r9   r>   r?   c                     t        |       }| j                  |_        | j                  |_        | j                  |_        | j                  |_        t        d| j                  |||            S )rm   r  )r  r  r  r  r  r   rW   )r,   r9   r>   r?   rV   s        r-   r;   zTextStringObject.clone  sd     t$"22(,(F(F%#44 5 5c8_ U
 	
r/   c                 D    t        | j                  | j                  f      S ro   )rq   r)   r  r+   s    r-   r.   zTextStringObject.hash_bin  s     T^^T%8%89::r/   c                 R    | j                   | j                   S | j                         S )a-  
        It is occasionally possible that a text string object gets created where
        a byte string object was expected due to the autodetection mechanism --
        if that occurs, this "original_bytes" property can be used to
        back-calculate what the original encoded bytes were.
        )r  get_original_bytesr+   s    r-   r  zTextStringObject.original_bytes  s+     +'''&&((r/   c                 |   | j                   r| j                  t        j                  k(  r"t        j                  | j	                  d      z   S | j                  t        j
                  k(  r"t        j
                  | j	                  d      z   S | j	                  d      S | j                  rt        |       S t        d      )Nutf-16leutf-16bez#no information about original bytes)	r  r  r"  r#  r3   r$  r  r&  rG   r+   s    r-   r,  z#TextStringObject.get_original_bytes  s       ~~!4!44**T[[-DDD~~!4!44**T[[-DDD;;z**))(..=>>r/   c                    	 | j                   | j                   S | j                  rt        ddddd      t        |       }|S # t        $ r | j                  t
        j                  k(  r%t
        j                  | j                  d      z   }Y |S | j                  t
        j                  k(  r%t
        j                  | j                  d      z   }Y |S | j                  d      }Y |S w xY w)N forcedr.  r/  )	r  r  r'  r&  r  r"  r#  r3   r$  )r,   bytearrs     r-   get_encoded_bytesz"TextStringObject.get_encoded_bytes   s    	2##/+++$$(Xr2rBB+D1G  " 	2~~!4!44 --J0GG
 	 6#6#66 --J0GG  ++j1	2s#   A &A AC$?C$C$#C$r[   r\   c                 T   |t        dd       | j                         }|j                  d       t        d|      D ]Y  }t	        t
        |d         }|j                         s#|dk7  r|j                  dt        |      z         I|j                  |       [ |j                  d       y )	Nrs   rt      (cr       s   \%03o   ))r   r5  rv   r   r   rg   isalnumord)r,   r[   r\   r4  c_r8  s         r-   r_   z TextStringObject.write_to_stream  s     %&A7 ((*Tc7+ 		 BUBqE"A99;19
 YQ/0Q		  	Tr/   r`   r1   )r*   ra   rb   r  rh   re   rg   r  r	   r   r   r   r   r
   ri   rf   r;   r.   r   r  r,  r5  r   r_   rY   r/   r-   r  r    s      $#'+OXe_+#"C #"D #"P !&=?	

 
  sCx 9:	

 

 ;# ; 	) 	) 	)?E ? 5 ( MQ 27c58H2I	r/   r  c                   
   e Zd ZU  ej                  d      ZdZi dD  ci c]   }t        |      d|dj                         " c}}}  e	d      D  ci c]   }t        |      d|dj                         " c}}} Z
eeeef      ed<   dZ	 	 dd	ed
edeeeeef         dd fdZdefdZ	 ddededeef   ddfdZdefdZddZedefd       Zededefd       Z dZ!edededd fd       Z"yc c}}} w c c}}} w )r  s   \s+|[\(\)<>\[\]{}/%]   /s   #()<>[]{}/%#02X!   renumber_tablei   r9   r>   r?   r$   c                 N    t        d| j                  t        |       ||            S )rm   r  )r   rW   r  rA   s       r-   r;   zNameObject.clone2  s+     !!*T"2HoN
 	
r/   c                 0    t        | j                  | f      S ro   rp   r+   s    r-   r.   zNameObject.hash_bin>  s     T^^T*++r/   Nr[   r\   c                 ^    |t        dd       |j                  | j                                y )Nrs   rt   )r   rv   renumberr^   s      r-   r_   zNameObject.write_to_streamH  s+     %&A7 	T]]_%r/   c                    | d   j                  d      }|dk7  rt        d|  dd       |g}| dd  D ]N  }|dkD  r(|j                  d	 |j                  d      D               0	 |j                  | j                  |          P d
j                  |      S # t
        $ r# |j                  |j                  d             Y w xY w)Nr   utf-8r?  z<Incorrect first char in NameObject, should start with '/': (r   rt   rC   ~c              3   D   K   | ]  }d |dj                           yw)r@  rA  Nr2   ).0xs     r-   	<genexpr>z&NameObject.renumber.<locals>.<genexpr>[  s!     Maq3[//1Ms    r/   )r3   r   extendrS   rC  KeyErrorjoin)r,   outpartsr8  s       r-   rG  zNameObject.renumberQ  s    1gnnW%$;&NtfTUV ab 	4A3wM188G;LMM4LL!4!4Q!78	4 xx   4LL'!234s   #B)C ?C c                     t        |       j                  d      }t        j                  dd|      }t        j                  dd|      }t	        d|z         S )a0  
        Sanitize the NameObject's name to be a valid PDF name part
        (alphanumeric, underscore, hyphen). The _sanitize method replaces
        spaces and any non-alphanumeric/non-underscore/non-hyphen with
        underscores.

        Returns:
            NameObject with sanitized name.
        /r   _z[^a-zA-Z0-9_-])ri   removeprefixr  subr  r   s     r-   	_sanitizezNameObject._sanitizec  sL     4y%%c*vvdC&vv'd3#*%%r/   c                     t        ddd       y)Nsurfixprefixrt   r?  )r   )r   s    r-   r[  zNameObject.surfixr  s    $XxAr/   sinc                 2   t               }d}|t        |       k  r^| ||dz    dk(  r+	 |j                  t        | |dz   |dz    d             |dz  }D|j                  | |          |dz  }|t        |       k  r^t        |      S # t        t
        f$ r Y Dw xY w)Nr   rC      #r      )	bytearrayrL   rS   rf   r   rR   rg   )r]  resultrU   s      r-   unnumberzNameObject.unnumberw  s    #c(l1QU|t#MM#c!a%!a%&8""=>FA
 MM#a&!FA #c(l V} #J/  s   )B BB)rI  gbklatin1rF   c                 P   | j                  d      }|t        j                  k7  rt        d      |t	        | t        j
                  t        j                        z  }	 t        j                  |      }t        j                  D ]   }	 |j                  |      }t        |      c S  t        d|ddd      # t        $ r Y =w xY w# t        t        f$ rR}|j                  s1t        dt        |       t        |j                  d	            cY d }~S t        d
|d      |d }~ww xY w)NrC   zName read errorr   r1  r   zCode Not FoundzVIllegal character in NameObject (%(name)r), you may need to adjust NameObject.CHARSETS)r   r   r  z!Illegal character in NameObject (z.). You may need to adjust NameObject.CHARSETS.)ry   r  r\  r   r   delimiter_patternr   rc  r  r  rG   r  r'  strictr   r*   )r[   rF   r   r  retr   s         r-   r{   zNameObject.read_from_stream  s%   {{1~:$$$011 j6R6R[e[s[stt	 &&t,D!** ++c*C%c?* %Rq!5EFF !  #$67 	::l#
 "$++i"8993D8 <> > 	sN   (C B5"C %C 5	C>C  CC D%7D 
D%D  D%r`   r1   )r$   r  )#r*   ra   rb   r  r  rg  r\  chrr3   rangerC  r   dictri   rg   re   r   r   rh   r	   r   r
   rf   r;   r.   r   r_   rG  rY  r   r[  r   rc  r  r{   )rL  rU   rj  s   000r-   r  r  )  s   "

#;<F21?
@
@A3q6Qqg;%%''
@216r
;
;A3q6Qqg;%%''
;2NHT#u*-.  M
 !&=?	



 

  sCx 9:	


 


,# , MQ& &27c58H2I&	&% $& u   e   " *H # ,   A
;s   %C7
%C>
r  unicode_stringr$   c                     	 t        | D cg c]  }t        |    c}      S c c}w # t        $ r t        d| ddd      w xY w)Npdfdocencodingr3  z#does not exist in translation table)rg   r   rP  r'  )rm  ks     r-   r&  r&    sQ    	
~F!*1-FGGF 
 1
 	

s   	' "' ' A rM  c                     | du xsD t        | t              xr2 | j                         du xs t        | j                         t              S )z<
    Returns:
        True if x is None or NullObject.

    N)rQ   r    rP   rk   )rM  s    r-   is_null_or_nonerr    sE     9 1i  	O\\^t#Mz!,,.*'Mr/   )9r  r"  rc   r  syscollections.abcr   mathr   structr   typingr   r   r   r	   r
   r   version_infor   typing_extensionsr   _codecsr   
_protocolsr   r   _utilsr   r   r   r   r   r   r   errorsr   r   r   
__author____author_email__r    rk   r   r"   r   r   r   rf   r   rg   r  ri   r  r  r&  rr  rY   r/   r-   <module>r     sF  6    	 
 $   A ABQ7" +w& * =   P O
/ O"! O"d- -`=<I =<@a@Y a@H  ;3% ;3|2!3	 2!j8>ui 8>vOsI Od~i ~B

# 

% 

	s 	ytZ/O)PQ 	r/   