U
    ߦwh{                     @   s  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mZmZ ejdd dkrd 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 deZ)G dd de)Z*G dd de)Z+G dd de)Z,dZ-G dd de.e)Z/G dd de0e)Z1G dd de2e)Z3G dd de4e)Z5G d d! d!e4e)Z6e4e2d"d#d$Z7eeede*e,f  d%d&d'Z8dS )(    N)	unhexlify)log10)iter_unpack)AnyCallableClassVarDictOptionalSequenceUnioncast   )   
   )	TypeGuard_pdfdoc_encoding_rev)PdfObjectProtocolPdfWriterProtocol)
StreamTypeclasspropertydeprecate_no_replacementdeprecate_with_replacementlogger_warningread_non_whitespaceread_until_regex)STREAM_TRUNCATED_PREMATURELYPdfReadErrorPdfStreamErrorzMathieu Fenniakzbiziqe@mathieu.fenniak.netc                   @   s   e Zd ZU ejZed ed< ed ed< e	dddZ
eddd	Zedd
dZed dddZdeeeeeee	f   d dddZdeeeedddZed  dddZdeedeef ddddZdS ) 	PdfObject).zhashlib._Hash	hash_funcIndirectObjectindirect_referencereturnc                 C   s   t | jj ddS )q
        Used to detect modified object.

        Returns:
            Hash considering type and value.

        z& does not implement .hash_bin() so farNNotImplementedError	__class____name__self r,   7/tmp/pip-unpacked-wheel-r8zeli8p/pypdf/generic/_base.pyhash_bin@   s    zPdfObject.hash_binc                 C   s
   |    S N)encoder*   r,   r,   r-   hash_value_dataL   s    zPdfObject.hash_value_datac                 C   s$   | j j d| |     S )N:)r(   r)   r    r1   	hexdigestr0   r*   r,   r,   r-   
hash_valueO   s    zPdfObject.hash_valuepdf_destr$   c                 C   s
   |  |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+   r6   r,   r,   r-   	replicateU   s    zPdfObject.replicateFr,   r6   force_duplicateignore_fieldsr$   c                 C   s   t | jj ddS )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 farNr&   r+   r6   r;   r<   r,   r,   r-   r7   f   s    zPdfObject.clone)r7   r6   r;   r$   c                 C   s  z|s|j j|kr|W S W n tk
r.   Y nX z
| j }W n tk
rR   | Y S X |jr|dk	r|j|jkr|jt|jkr|j}nt|jd }|dk	r6t	|j|j
kri |j
t	|j< |j|j
t	|j d< |s |j|j
t	|j kr ||j
t	|j |j }|dk	st|S ||j
t	|j |j< z||j|d < W n, tk
rt   |j| t|j}Y nX t|d||_ |S )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

        N   Z	PreventGCr   )r"   pdf	ExceptionAttributeErrorincrementalZ_readeridnumlen_objectsid_id_translated
get_objectAssertionError
IndexErrorappendr!   )r+   r7   r6   r;   indiobjr,   r,   r-   _reference_clone   sP    




zPdfObject._reference_clonec                 C   s   | S )zResolve indirect references.r,   r*   r,   r,   r-   rH      s    zPdfObject.get_objectNstreamencryption_keyr$   c                 C   s   t d S r/   )r'   r+   rQ   rR   r,   r,   r-   write_to_stream   s    zPdfObject.write_to_stream)Fr,   )F)N)r)   
__module____qualname__hashlibsha1r    r   __annotations__r	   intr.   bytesr1   r4   r   r9   boolr
   r   strr7   r   r   rO   rH   r   rT   r,   r,   r,   r-   r   ;   s<   
      :  r   c                   @   s   e Zd Zdeeeeeee	f   d dddZ
e	dddZdeed	eef d	d
ddZeed dddZedddZeedddZe	dddZd	S )
NullObjectFr,   r:   c                 C   s   t d| t ||S )Clone object into pdf_dest.r^   )r   rO   r^   r=   r,   r,   r-   r7      s     zNullObject.cloner#   c                 C   s   t | jfS r%   hashr(   r*   r,   r,   r-   r.      s    zNullObject.hash_binNrP   c                 C   s    |d k	rt dd |d d S )N/the encryption_key parameter of write_to_stream5.0.0   null)r   writerS   r,   r,   r-   rT      s     zNullObject.write_to_streamrQ   r$   c                 C   s    |  d}|dkrtdt S )N   re   zCould not read Null object)readr   r^   )rQ   Znulltxtr,   r,   r-   read_from_stream   s    
zNullObject.read_from_streamc                 C   s   dS )Nr^   r,   r*   r,   r,   r-   __repr__   s    zNullObject.__repr__otherr$   c                 C   s
   t |tS r/   )
isinstancer^   r+   rm   r,   r,   r-   __eq__   s    zNullObject.__eq__c                 C   s   |   S r/   r.   r*   r,   r,   r-   __hash__   s    zNullObject.__hash__)Fr,   )N)r)   rU   rV   r   r\   r	   r
   r   r]   rZ   r7   r.   r   r[   rT   staticmethodrj   rk   objectrp   rr   r,   r,   r,   r-   r^      s(       	r^   c                   @   s   e Zd ZeddddZdeeeee	e
ef   d ddd	Zed
ddZeedddZed
ddZe
d
ddZdee	de
ef ddddZeed dddZdS )BooleanObjectNvaluer$   c                 C   s
   || _ d S r/   rw   )r+   rw   r,   r,   r-   __init__   s    zBooleanObject.__init__Fr,   r:   c                 C   s   t d| t| j||S )r_   ru   )r   rO   ru   rw   r=   r,   r,   r-   r7      s    zBooleanObject.cloner#   c                 C   s   t | j| jfS r`   )rb   r(   rw   r*   r,   r,   r-   r.   	  s    zBooleanObject.hash_bin)or$   c                C   s.   t |tr| j|jkS t |tr*| j|kS dS )NF)rn   ru   rw   r\   r+   rz   r,   r,   r-   rp     s
    


zBooleanObject.__eq__c                 C   s   |   S r/   rq   r*   r,   r,   r-   rr     s    zBooleanObject.__hash__c                 C   s   | j r
dS dS )NTrueFalserx   r*   r,   r,   r-   rk     s    zBooleanObject.__repr__rP   c                 C   s2   |d k	rt dd | jr$|d n
|d d S )Nrc   rd      trues   false)r   rw   rf   rS   r,   r,   r-   rT      s     zBooleanObject.write_to_streamrg   c                 C   s@   |  d}|dkrtdS |dkr4|  d tdS tdd S )Nrh   r~   Ts   falsr>   FzCould not read Boolean object)ri   ru   r   )rQ   wordr,   r,   r-   rj   ,  s    

zBooleanObject.read_from_stream)Fr,   )N)r)   rU   rV   r   ry   r   r\   r	   r
   r   r]   rZ   r7   r.   rt   rp   rr   rk   r   r[   rT   rs   rj   r,   r,   r,   r-   ru      s*     
  ru   c                   @   s  e Zd ZeeeddddZedddZeddd	Zed
dddZ	d9ee
eeeeef   d dddZed dddZed
 dddZed dddZed
 dddZeedddZeedd d!Zee
dd"d#Zedd$d%Zedd&d'Zedd(d)Zedd*d+Zedd,d-Zee
d.d/d0Zee
d.d1d2Zd:e edee!f dd3d4d5Z"e#e ed d6d7d8Z$dS );r!   N)rC   
generationr?   r$   c                 C   s   || _ || _|| _d S r/   )rC   r   r?   )r+   rC   r   r?   r,   r,   r-   ry   8  s    zIndirectObject.__init__r#   c                 C   s   t | j| jt| jfS r/   )rb   rC   r   rF   r?   r*   r,   r,   r-   rr   =  s    zIndirectObject.__hash__c                 C   s   t | j| j| jt| jfS r`   )rb   r(   rC   r   rF   r?   r*   r,   r,   r-   r.   @  s    zIndirectObject.hash_binr   r5   c                 C   s   t | j| j|S r/   )r!   rC   r   r8   r,   r,   r-   r9   J  s    zIndirectObject.replicateFr,   r:   c                 C   s  | j |kr|s| S t| j |jkr2i |jt| j < | j|jt| j  kr||jt| j  | j }|r|dk	stt|jdk	st|j}t|j|j|j S n@|  }|dkrt	 }t
| tfst| |_|||||}|dk	std|jdk	std|jS )r_   Nmypy)r?   rF   rG   rC   rH   rI   r"   r!   r   r^   rn   Z_add_objectr7   )r+   r6   r;   r<   dupZidrefrN   r,   r,   r-   r7   P  s,    zIndirectObject.clonec                 C   s   | S r/   r,   r*   r,   r,   r-   r"   s  s    z!IndirectObject.indirect_referencec                 C   s   | j | S r/   )r?   rH   r*   r,   r,   r-   rH   w  s    zIndirectObject.get_object)memor$   c                 C   s   t | j| j| jS r/   )r!   rC   r   r?   )r+   r   r,   r,   r-   __deepcopy__z  s    zIndirectObject.__deepcopy__c                 C   s0   |   }t|tr,t|   d|  |S )Nz references an IndirectObject )rH   rn   r!   r   rk   r{   r,   r,   r-   _get_object_with_check}  s    
z%IndirectObject._get_object_with_check)namer$   c                 C   s:   zt |  |W S  tk
r4   td| dY nX d S )NzNo attribute z* found in IndirectObject or pointed object)getattrr   rA   r+   r   r,   r,   r-   __getattr__  s    
zIndirectObject.__getattr__)keyr$   c                 C   s   |   | S r/   r   r+   r   r,   r,   r-   __getitem__  s    zIndirectObject.__getitem__c                 C   s   ||   kS r/   r   r   r,   r,   r-   __contains__  s    zIndirectObject.__contains__c                 C   s   |    S r/   )r   __iter__r*   r,   r,   r-   r     s    zIndirectObject.__iter__c                 C   s   |    S r/   )rH   	__float__r*   r,   r,   r-   r     s    zIndirectObject.__float__c                 C   s   |    S r/   )rH   __int__r*   r,   r,   r-   r     s    zIndirectObject.__int__c                 C   s   |    S r/   )rH   __str__r*   r,   r,   r-   r     s    zIndirectObject.__str__c                 C   s"   d| j d| jdt| j dS )NzIndirectObject(z, ))rC   r   rF   r?   r*   r,   r,   r-   rk     s    zIndirectObject.__repr__rl   c                 C   s6   |d k	o4t |to4| j|jko4| j|jko4| j|jkS r/   )rn   r!   rC   r   r?   ro   r,   r,   r-   rp     s    


zIndirectObject.__eq__c                 C   s   |  | S r/   )rp   ro   r,   r,   r-   __ne__  s    zIndirectObject.__ne__rP   c                 C   s4   |d k	rt dd || j d| j d  d S )Nrc   rd    z R)r   rf   rC   r   r0   rS   r,   r,   r-   rT     s     zIndirectObject.write_to_streamrQ   r?   r$   c                 C   s   d}|  d}|stt| r$q.||7 }qd}|  d}|sHtt| rX|sbq2qb||7 }q2t| }|dkrtdt|   tt	|t	||S )N    r>      Rz0Error reading indirect object reference at byte )
ri   r   r   isspacer   r   hextellr!   rZ   )rQ   r?   rC   tokr   rr,   r,   r-   rj     s,    



zIndirectObject.read_from_stream)Fr,   )N)%r)   rU   rV   rZ   r   ry   rr   r.   r   r9   r\   r	   r
   r   r]   r7   propertyr"   rH   r   r   r   r   r   r   r   r   r   rk   rt   rp   r   r   r[   rT   rs   rj   r,   r,   r,   r-   r!   7  sJ   	  #			  	r!      c                   @   s   e Zd Zdeee d dddZdeeeeee	e
f   d dd	d
Ze
dddZe	dddZe	dddZedddZdeede	ef ddddZdS )FloatObject0.0N)rw   contextr$   c              
   C   sd   zt |}t | |W S  tk
r^ } z*t| d| dt t | d W Y S d }~X Y nX d S )Nz : FloatObject (z) invalid; use 0.0 insteadg        )float__new__r@   r   r)   )clsrw   r   er,   r,   r-   r     s     zFloatObject.__new__Fr,   r:   c                 C   s   t d| t| ||S )r_   r   )r   rO   r   r=   r,   r,   r-   r7     s    zFloatObject.cloner#   c                 C   s   t | j| jfS r`   rb   r(   
as_numericr*   r,   r,   r-   r.     s    zFloatObject.hash_binc                 C   sB   | dkrdS t ttt|  }| dtd| dddS )Nr   r   .r>   f0)FLOAT_WRITE_PRECISIONrZ   r   absmaxrstrip)r+   nbr,   r,   r-   myrepr  s    zFloatObject.myreprc                 C   s   |   S r/   )r   r*   r,   r,   r-   rk     s    zFloatObject.__repr__c                 C   s   t | S r/   )r   r*   r,   r,   r-   r   
  s    zFloatObject.as_numericrP   c                 C   s*   |d k	rt dd ||  d d S Nrc   rd   utf8)r   rf   r   r0   rS   r,   r,   r-   rT     s     zFloatObject.write_to_stream)r   N)Fr,   )N)r)   rU   rV   r   r	   r   r\   r
   r   r]   rZ   r7   r.   r   rk   r   r   r   r[   rT   r,   r,   r,   r-   r     s2         
  r   c                   @   s   e Zd ZedZed dddZdeee	e
eeef   d ddd	Zed
ddZed
ddZdeedeef ddddZeeed dddZdS )NumberObjects	   [^+-.0-9]rv   c                 C   sJ   zt | t |W S  tk
rD   td| dt t | d Y S X d S )NzNumberObject(z) invalid; use 0 insteadr   )rZ   r   
ValueErrorr   r)   )r   rw   r,   r,   r-   r     s
    zNumberObject.__new__Fr,   r:   c                 C   s   t d| t| ||S )r_   r   )r   rO   r   r=   r,   r,   r-   r7   !  s    zNumberObject.cloner#   c                 C   s   t | j|  fS r`   r   r*   r,   r,   r-   r.   -  s    zNumberObject.hash_binc                 C   s   t t| dS )Nr   )rZ   reprr0   r*   r,   r,   r-   r   7  s    zNumberObject.as_numericNrP   c                 C   s*   |d k	rt dd |t| d d S r   )r   rf   r   r0   rS   r,   r,   r-   rT   :  s     zNumberObject.write_to_stream)r   r   rg   c                 C   s$   t | tj}d|krt|S t|S )N   .)r   r   NumberPatternr   )rQ   numr,   r,   r-   rj   C  s    zNumberObject.read_from_stream)Fr,   )N)r)   rU   rV   recompiler   r   r   r\   r	   r
   r   r]   rZ   r7   r.   r   r   r[   rT   rs   rj   r,   r,   r,   r-   r     s(   

  
  	r   c                   @   s   e Zd ZdZdeeeeee	e
f   d dddZe
ddd	Zeedd
dZdeede	ef ddddZe	dddZdS )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.
    Fr,   r:   c                 C   s   t d| tt| ||S )r_   r   )r   rO   r   r[   r=   r,   r,   r-   r7   T  s    
  zByteStringObject.cloner#   c                 C   s   t | jt| fS r`   )rb   r(   r[   r*   r,   r,   r-   r.   b  s    zByteStringObject.hash_binc                 C   s   | S )z7For compatibility with TextStringObject.original_bytes.r,   r*   r,   r,   r-   original_bytesl  s    zByteStringObject.original_bytesNrP   c                 C   s:   |d k	rt dd |d |t|  |d d S )Nrc   rd      <   >)r   rf   binasciihexlifyrS   r,   r,   r-   rT   q  s     
z ByteStringObject.write_to_streamc              	   C   sJ   dt tj}|D ]*}z| |W   S  tk
r:   Y qX qtdd S )Nutf-16zCannot decode ByteStringObject.)r   )list
NameObjectCHARSETSdecodeUnicodeDecodeErrorr   )r+   Zcharset_to_tryencr,   r,   r-   r   |  s    zByteStringObject.__str__)Fr,   )N)r)   rU   rV   __doc__r   r\   r	   r
   r   r]   rZ   r7   r.   r   r[   r   r   rT   r   r,   r,   r,   r-   r   K  s&     
  r   c                   @   s   e Zd ZU dZeed< eed< eed< dZee ed< e	d ddd	Z
de	eeeeeef   d dddZedddZeedddZedddZedddZdeedeef ddddZdS )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_bytesrv   c              
   C   s   d }t |tr|}|d}t| |}||_d|_d|_d|_|	dr|d k	sZt
dzt| |d}W nV tk
r } z8t|d|jt t| |jd |j d}W 5 d }~X Y nX ||_d|_|d d	 |_n8zt| d|_W n$ tk
r   d|_tj|_Y nX |S )
NcharmapFr   )u   þÿu   ÿþr   r   z
initial string:Tr   )rn   r[   r   r]   r   r   r   r   r   
startswithrI   r   r   rt   r)   startencode_pdfdocencodingUnicodeEncodeErrorcodecsBOM_UTF16_BE)r   rw   orgrz   excr,   r,   r-   r     s:    


0
zTextStringObject.__new__Fr,   r:   c                 C   s<   t | }| j|_| j|_| j|_| j|_td| |||S )r_   r   )r   r   r   r   r   r   rO   )r+   r6   r;   r<   rN   r,   r,   r-   r7     s     zTextStringObject.cloner#   c                 C   s   t | j| jfS r`   )rb   r(   r   r*   r,   r,   r-   r.     s    zTextStringObject.hash_binc                 C   s   | j dk	r| j S |  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.
        N)r   get_original_bytesr*   r,   r,   r-   r     s    
zTextStringObject.original_bytesc                 C   sb   | j rH| jtjkr"tj| d S | jtjkr>tj| d S | dS | jrVt| S tdd S )Nutf-16leutf-16bez#no information about original bytes)	r   r   r   BOM_UTF16_LEr0   r   r   r   r@   r*   r,   r,   r-   r     s    
z#TextStringObject.get_original_bytesc                 C   s   z4| j d k	r| j W S | jr*tdddddt| }W nZ tk
r   | jtjkrbtj| d }n(| jtjkrtj| d }n
| d}Y nX |S )N Zforcedr   r   )	r   r   r   r   r   r   r   r0   r   )r+   bytearrr,   r,   r-   get_encoded_bytes  s    
z"TextStringObject.get_encoded_bytesrP   c                 C   s~   |d k	rt dd |  }|d td|D ]@}tt|d }| sd|dkrd|dt|  q.|| q.|d d S )	Nrc   rd      (cr       s   \%03o   ))r   r   rf   r   r   r[   isalnumord)r+   rQ   rR   r   Zc_r   r,   r,   r-   rT     s     
z TextStringObject.write_to_stream)Fr,   )N)r)   rU   rV   r   r\   rY   r[   r   r	   r   r   r
   r   r]   rZ   r7   r.   r   r   r   r   r   rT   r,   r,   r,   r-   r     s2   
#  
  r   c                   @   s   e Zd ZU edZdZdd dD dd edD Ze	e
eef  ed< d"eeeeeeef   d dddZedddZd#eedeef ddddZedddZd dddZeedddZeeedddZdZeeed dd d!ZdS )$r   s   \s+|[\(\)<>\[\]{}/%]   /c                 C   s"   i | ]}t |d |d qS #02Xchrr0   .0rM   r,   r,   r-   
<dictcomp>  s      zNameObject.<dictcomp>s   #()<>[]{}/%c                 C   s"   i | ]}t |d |d qS r   r   r   r,   r,   r-   r     s      !   renumber_tableFr,   r:   c                 C   s   t d| t| ||S )r_   r   )r   rO   r   r=   r,   r,   r-   r7     s    zNameObject.cloner#   c                 C   s   t | j| fS r`   ra   r*   r,   r,   r-   r.   '  s    zNameObject.hash_binNrP   c                 C   s$   |d k	rt dd ||   d S )Nrc   rd   )r   rf   renumberrS   r,   r,   r-   rT   1  s     zNameObject.write_to_streamc              	   C   s   | d  d}|dkr(td|  dd | dd  D ]h}|dkrf| dD ]}|d	|d
  7 }qJq4z|| j| 7 }W q4 tk
r   || d7 }Y q4X q4|S )Nr   utf-8r   z<Incorrect first char in NameObject, should start with '/': (r   6.0.0r>   ~r   r   )r0   r   r   KeyError)r+   outr   xr,   r,   r-   r   :  s    
zNameObject.renumberc                 C   s8   t | dd }tdd|}tdd|}td| 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>   Nz\ _z[^a-zA-Z0-9_-]/)r]   r   subr   r   r,   r,   r-   	_sanitizeL  s    
zNameObject._sanitizec                 C   s   t ddd dS )Nsurfixprefixr   r   )r   )r   r,   r,   r-   r   [  s    zNameObject.surfix)sinr$   c                 C   s   |  dd}|dkr|zH| d | t| |d |d   | |d d   } |  d|d }W q tk
rx   |d }Y qX q| S )N   #r   r>   r   )findr   r   )r   rM   r,   r,   r-   unnumber`  s    4zNameObject.unnumber)r   gbklatin1r   c              
   C   s   |  d}|tjkrtd|t| tj7 }zZt|}tjD ]4}z||}t|W   W S  t	k
rp   Y q>X q>t
d|dddW nf tt
fk
r } zD|jstd|dt t|d W Y S td|d	|W 5 d }~X Y nX d S )
Nr>   zName read errorr   r   zCode Not Foundz!Illegal character in NameObject (z-), you may need to adjust NameObject.CHARSETSr   z.). You may need to adjust NameObject.CHARSETS.)ri   r   r   r   r   delimiter_patternr  r   r   r@   r   r   strictr   r)   )rQ   r?   r   r   retr   r,   r,   r-   rj   o  s2    






zNameObject.read_from_stream)Fr,   )N) r)   rU   rV   r   r   r  r   ranger   r   r   r]   r[   rY   r   r\   r	   r
   r   rZ   r7   r.   r   rT   r   r   r   r   rs   r  r   rj   r,   r,   r,   r-   r     s:   

    	r   )unicode_stringr$   c              	   C   s>   zt dd | D W S  tk
r8   td| dddY nX d S )Nc                 S   s   g | ]}t | qS r,   r   )r   kr,   r,   r-   
<listcomp>  s     z)encode_pdfdocencoding.<locals>.<listcomp>Zpdfdocencodingr   z#does not exist in translation table)r[   r   r   )r  r,   r,   r-   r     s    r   )r   r$   c                 C   s,   | dkp*t | to*|  dkp*t |  tS )z<
    Returns:
        True if x is None or NullObject.

    N)rn   r   rH   r^   )r   r,   r,   r-   is_null_or_none  s    
r  )9r   r   rW   r   sysr   mathr   structr   typingr   r   r   r   r	   r
   r   r   version_infor   Ztyping_extensions_codecsr   Z
_protocolsr   r   _utilsr   r   r   r   r   r   r   errorsr   r   r   
__author____author_email__r   r^   ru   r!   r   r   r   rZ   r   r[   r   r]   r   r   r   r  r,   r,   r,   r-   <module>   s@   ($	 0> #;4; {