U
    dQ                    @   s  d Z dZdZddlZddlmZmZmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlZdd	lmZ dd
lmZ ddlZddlZddlZedZedZeedZd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eZG dd deZG dd dejeZ G dd de!eZ"dd Z#d d! Z$d"d# Z%G d$d% d%ej&eZ'G d&d' d'ej(eZ)G d(d) d)e*eZ+G d*d+ d+e,eZ-G d,d- d-e-Z.G d.d/ d/e-Z/G d0d1 d1e/Z0G d2d3 d3e/Z1G d4d5 d5eZ2G d6d7 d7e.Z3G d8d9 d9e.Z4G d:d; d;e4Z5d<d= Z6d>d? Z7e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	d@e	dAe	dBe	dCe	dDe	dEe	dFe	dGe	dHe	dIe	dJe	dKe	dLe	dMe	dNe	dOe	dPe	dQe	dRe	dSe	dTe	dUe	dVe	dWe	dXe	dYe	dZe	d[e	d\e	d]e	d^e	d_e	d`e	dae	dbe	dce	dde	dee	dfe	dge	dhe	die	dje	dke	dle	dme	dne	doe	dpe	dqe	dre	dse	dte	due	dve	dwe	dxe	dye	dze	d{e	d|e	d}e	d~e	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	d@e	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	dÃe	dăe	dŃe	dƃe	d@e	dǃe	dȃe	dɃe	dʃe	d˃e	d̃e	d̓e	d΃e	dσe	dЃe	dуe	d҃e	dӃe	d@e	dԃe	dՃe	dփe	d׃e	d؃e	dكe	dڃe	dۃe	d܃e	d݃e	dރe	d߃e	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	d e	de	de	de	de	de	de	de	de	d	e	d
e	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	de	d e	d!e	d"e	d#e	d$e	d%f Z8e9e8d&ks|t:i Z;e<d&D ]6Z=e8e= Z>e>e	d@krqe>e;kst:e=e;e>< qdS ('  zO
Implementation of generic PDF objects (dictionary, number, string, and so on)
zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N   )readNonWhitespaceRC4_encryptskipOverComment)b_u_chr_ord_)PdfStreamError)filters)utilsz/<[tf(n%z+-z[+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]c                 C   sh  |  d}| dd t|}|dkr4t| |S |dkrt|  d}| dd |tdkrjt| |S t| S n|dkrt	| |S |dks|dkrt
| S |d	krt| S |d
krt| S |dkr"|tdtdfkr|  d}t|dkrtdqt| }| dd t| |S |  d}| t| d t|d krZt| |S t| S d S )Nr   r      <<               
zFile ended unexpectedly.   )readseekObjectPrefixfind
NameObjectreadFromStreamr   DictionaryObjectreadHexStringFromStreamArrayObjectBooleanObjectreadStringFromStream
NullObjectlenr
   r   
readObjectIndirectPatternmatchIndirectObjectNumberObject)streampdftokidxpeek r0   2/tmp/pip-unpacked-wheel-eeeohlmn/PyPDF3/generic.pyr&   6   s@    










r&   c                   @   s   e Zd Zdd ZdS )	PdfObjectc                 C   s   | S )zResolves indirect references.r0   selfr0   r0   r1   	getObjectg   s    zPdfObject.getObjectN)__name__
__module____qualname__r5   r0   r0   r0   r1   r2   f   s   r2   c                   @   s$   e Zd Zdd Zdd ZeeZdS )r$   c                 C   s   | td d S )Nnullwriter   r4   r+   encryption_keyr0   r0   r1   writeToStreamm   s    zNullObject.writeToStreamc                 C   s&   |  d}|tdkr tdt S )Nr   r9   zCould not read Null object)r   r   r   PdfReadErrorr$   )r+   Znulltxtr0   r0   r1   r   p   s    

zNullObject.readFromStreamNr6   r7   r8   r>   r   staticmethodr0   r0   r0   r1   r$   l   s   r$   c                   @   s,   e Zd Zdd Zdd Zdd ZeeZdS )r"   c                 C   s
   || _ d S N)valuer4   rC   r0   r0   r1   __init__y   s    zBooleanObject.__init__c                 C   s(   | j r|td n|td d S )Ntruefalse)rC   r;   r   r<   r0   r0   r1   r>   |   s    zBooleanObject.writeToStreamc                 C   sJ   |  d}|tdkrtdS |tdkr<|  d tdS tdd S )Nr   rF   TZfalsr   FzCould not read Boolean object)r   r   r"   r   r?   )r+   wordr0   r0   r1   r      s    

zBooleanObject.readFromStreamN)r6   r7   r8   rE   r>   r   rA   r0   r0   r0   r1   r"   x   s   	r"   c                   @   s$   e Zd Zdd Zdd ZeeZdS )r!   c                 C   sD   | td | D ]}| td ||| q| td d S )N[ z ])r;   r   r>   r4   r+   r=   datar0   r0   r1   r>      s
    zArrayObject.writeToStreamc                 C   s   t  }| d}|tdkr&td| d}| rD| d}q0| dd | d}|tdkrhq| dd |t| | q&|S )Nr   rI   zCould not read arrayr   ])	r!   r   r   r   r?   isspacer   appendr&   )r+   r,   arrtmpr-   Z	peekaheadr0   r0   r1   r      s    



zArrayObject.readFromStreamNr@   r0   r0   r0   r1   r!      s   r!   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
e	Z	dS )r)   c                 C   s   || _ || _|| _d S rB   )idnum
generationr,   )r4   rR   rS   r,   r0   r0   r1   rE      s    zIndirectObject.__init__c                 C   s   | j |  S rB   )r,   r5   r3   r0   r0   r1   r5      s    zIndirectObject.getObjectc                 C   s   d| j | jf S )NzIndirectObject(%r, %r))rR   rS   r3   r0   r0   r1   __repr__   s    zIndirectObject.__repr__c                 C   s6   |d ko4t |to4| j|jko4| j|jko4| j|jkS rB   )
isinstancer)   rR   rS   r,   r4   otherr0   r0   r1   __eq__   s    


zIndirectObject.__eq__c                 C   s   |  | S rB   )rX   rV   r0   r0   r1   __ne__   s    zIndirectObject.__ne__c                 C   s   | td| j| jf  d S )Nz%s %s R)r;   r   rR   rS   r<   r0   r0   r1   r>      s    zIndirectObject.writeToStreamc                 C   s   t d}| d}|std| r(q2||7 }qt d}| d}|sPtd| r`|sjq:qj||7 }q:t| }|t dkrtdt|   t	t
|t
||S )N r   Stream has ended unexpectedlyRz2Error reading indirect object reference at byte %s)r   r   r
   rN   r   r   r?   hexStrtellr)   int)r+   r,   rR   r-   rS   rr0   r0   r1   r      s(    



zIndirectObject.readFromStreamN)r6   r7   r8   rE   r5   rT   rX   rY   r>   r   rA   r0   r0   r0   r1   r)      s   	r)   c                   @   s.   e Zd ZdddZdd Zdd Zd	d
 ZdS )FloatObject0Nc                 C   s<   zt j| t||W S    t j| t| Y S X d S rB   )decimalDecimal__new__r   Zstr_str)clsrC   contextr0   r0   r1   re      s    zFloatObject.__new__c                 C   sN   | |   kr t| tdS d|  }|rF|d dkrF|d d }q(|S d S )Nr   z%.5fr   rb   )to_integralrf   quantizerc   rd   )r4   or0   r0   r1   rT      s    zFloatObject.__repr__c                 C   s   t tt| S rB   )floatr   reprr3   r0   r0   r1   
as_numeric   s    zFloatObject.as_numericc                 C   s   | tt|  d S rB   r;   r   rm   r<   r0   r0   r1   r>      s    zFloatObject.writeToStream)rb   N)r6   r7   r8   re   rT   rn   r>   r0   r0   r0   r1   ra      s   
ra   c                   @   sJ   e Zd ZeedZedZdd Zdd Z	dd Z
d	d
 ZeeZdS )r*   z	[^+-.0-9].c                 C   s<   t |}zt | |W S  tk
r6   t | d Y S X d S Nr   )r_   re   OverflowError)rg   rC   valr0   r0   r1   re      s
    zNumberObject.__new__c                 C   s   t tt| S rB   )r_   r   rm   r3   r0   r0   r1   rn     s    zNumberObject.as_numericc                 C   s   | tt|  d S rB   ro   r<   r0   r0   r1   r>   
  s    zNumberObject.writeToStreamc                 C   s2   t | tj}|tjdkr&t|S t|S d S )Nr   )r   readUntilRegexr*   NumberPatternr   ByteDotra   )r+   numr0   r0   r1   r     s    zNumberObject.readFromStreamN)r6   r7   r8   recompiler   ru   rv   re   rn   r>   r   rA   r0   r0   r0   r1   r*      s   r*   c                 C   s   t | tjrt| S t | tjrzB| tjrHt| d}d|_	|W S tt
| }d|_|W S W q tk
r~   t|  Y S X ntdd S )Nzutf-16Tz1createStringObject should have str or unicode arg)rU   r   string_typeTextStringObject
bytes_type
startswithcodecsBOM_UTF16_BEdecodeautodetect_utf16decode_pdfdocencodingautodetect_pdfdocencodingUnicodeDecodeErrorByteStringObject	TypeError)stringretvalr0   r0   r1   createStringObject  s    
r   c                 C   s   |  d d}td}t| }|s*td|tdkr8qj||7 }t|dkr|tt|dd7 }td}qt|dkr|td7 }t|dkr|tt|dd7 }tt|S )	Nr   rZ   r[   >r      baserb   )r   r   r   r
   r%   chrr_   r   )r+   txtxr-   r0   r0   r1   r    0  s"    

r    c              +   C   sT  |  d}d}td}|  d}|s,td|tdkrD|d7 }n|tdkrh|d8 }|dkrdqLn|tdkrB|  d}tdtd	td
tdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdi}z|| }W n tk
r@   | rtdD ]*}|  d}| r||7 }n qܐqttt|d d!}nJ|td"kr.|  d}|td"kr$| d#d td}nt	
d$| Y nX ||7 }qt|S )%Nr   rZ   r[   ()r   \nr   r`   r   t	bfcz\c/rJ   %<r   rI   rM   #_&$r      r   z
r   zUnexpected escaped string: %s)r   r   r
   KeyErrorisdigitranger   r_   r   r   r?   r   )r+   r-   parensr   ZESCAPE_DICTiZntokr0   r0   r1   r#   F  s    


                    







r#   c                   @   s    e Zd Zedd Zdd ZdS )r   c                 C   s   | S rB   r0   r3   r0   r0   r1   <lambda>      zByteStringObject.<lambda>c                 C   sB   | }|rt ||}|td |t| |td d S )Nr   r   )r   r;   r   r   Z	hexencode)r4   r+   r=   bytearrr0   r0   r1   r>     s    
zByteStringObject.writeToStreamN)r6   r7   r8   propertyoriginal_bytesr>   r0   r0   r0   r1   r     s   r   c                   @   s0   e Zd ZdZdZedd Zdd Zdd ZdS )	r{   Fc                 C   s   |   S rB   )get_original_bytesr3   r0   r0   r1   r     r   zTextStringObject.<lambda>c                 C   s0   | j rtj| d S | jr$t| S tdd S )Nutf-16bez#no information about original bytes)r   r~   r   encoder   encode_pdfdocencoding	Exceptionr3   r0   r0   r1   r     s
    z#TextStringObject.get_original_bytesc                 C   s   zt | }W n$ tk
r0   tj| d }Y nX |rVt||}t|}||d  nh|t	d |D ]F}t
| s|t	dkr|t	dt|  qh|t	t
| qh|t	d d S )Nr   r   rJ   z\%03or   )r   UnicodeEncodeErrorr~   r   r   r   r   r>   r;   r   r   isalnumr	   )r4   r+   r=   r   objr   r0   r0   r1   r>     s    
zTextStringObject.writeToStreamN)	r6   r7   r8   r   r   r   r   r   r>   r0   r0   r0   r1   r{     s
   r{   c                   @   s:   e Zd ZeedZedZdd Zdd Z	e
e	Z	dS )r   z\s+|[\(\)<>\[\]{}/%]r   c                 C   s   | t|  d S rB   r:   r<   r0   r0   r1   r>     s    zNameObject.writeToStreamc                 C   s:  d}|rt |   | d}|tjkr2td|tj| tjdd7 }|rTt | zt|	dW S  t
tfk
r4 } z|jstdtj zH|	dd	}t|d
  d	ddd |d  D  W  W Y NS  t
tfk
r } zt| W Y 
 W Y  S d }~X Y nX n
tdW 5 d }~X Y nX d S )NFr   zname read errorT)Z
ignore_eofzutf-8z Illegal character in Name Objectz	Shift-JIS+r   rZ   c                 S   s   g | ]}d |dqS )r   Xr0   ).0r   r0   r0   r1   
<listcomp>  s     z-NameObject.readFromStream.<locals>.<listcomp>)printr^   r   r   surfixr   r?   rt   delimiterPatternr   r   r   strictwarningswarnPdfReadWarningsplitjoinr   )r+   r,   debugnameessr0   r0   r1   r     s,     


 8(zNameObject.readFromStreamN)r6   r7   r8   rx   ry   r   r   r   r>   r   rA   r0   r0   r0   r1   r     s
   r   c                   @   s^   e Zd Zdd Zdd ZdddZdd	 Zd
d Zedd ddZ	dd Z
dd ZeeZdS )r   c                 C   s   t | |S rB   )dict__getitem__r4   keyr0   r0   r1   raw_get  s    zDictionaryObject.raw_getc                 C   s2   t |tstdt |ts$tdt| ||S Nzkey must be PdfObjectzvalue must be PdfObject)rU   r2   
ValueErrorr   __setitem__r4   r   rC   r0   r0   r1   r     s
    

zDictionaryObject.__setitem__Nc                 C   s2   t |tstdt |ts$tdt| ||S r   )rU   r2   r   r   
setdefaultr   r0   r0   r1   r     s
    

zDictionaryObject.setdefaultc                 C   s   t | | S rB   )r   r   r5   r   r0   r0   r1   r   	  s    zDictionaryObject.__getitem__c                 C   sR   |  dd }|d krd S | }ddlm} t||jsN||}|| td< |S )Nz	/Metadatar   )xmp)getr5   rZ   r   rU   ZXmpInformationr   )r4   metadatar   r0   r0   r1   getXmpMetadata  s    
zDictionaryObject.getXmpMetadatac                 C   s   |   S rB   )r   r3   r0   r0   r1   r   $  r   zDictionaryObject.<lambda>c                 C   sj   | td t|  D ]<\}}||| | td ||| | td q| td d S )N<<
rJ   r   >>)r;   r   listitemsr>   r4   r+   r=   r   rC   r0   r0   r1   r>   &  s    zDictionaryObject.writeToStreamc                 C   s   d}|  d}|tdkr2tdt|   i }t| }|tdkrNq6n"|tdkrp| dd t|  q6|s|t	d	|rt
d
|f |tdkr|  d q6| dd t| |}t| }| dd t| |}||s|||< q6|jrtdt|  |f q6tdt|  |f tj q6|  }t| }	|	tdkr|  dtdkr|  d}
|
tdkr|  d}
qr|
tdtdfkst|
tdkr|  dtdkr| dd d|kst|d }|rt
| t|tr$|  }||}| |d |  ||d< |r@t
d t| }|  d}|| tdkr|  }| dd |  d}|tdkr|d d d |d< n@|rt
d||t|f | |d tdt|   n| |d d|krt|S t }|| |S d S )NFr   r   z=Dictionary read error at byte %s: stream must begin with '<<' r   r   r   r[   zTok:r   z8Multiple definitions in dictionary at byte %s for key %ssr   ZtreamrJ   r   r   /Lengthr   __streamdata__herer   Z	endstreami	   Ez:Unable to find 'endstream' marker after stream at byte %s.)r   r   r   r?   r]   r^   r   r   r   r
   r   r&   r   r   r   r   r   AssertionErrorrU   r)   r5   	debuggingZtoHexStreamObjectinitializeFromDictionaryr   update)r+   r,   r   rQ   rL   r-   r   rC   posr   eollengthr   r   Zndstreamendr   r0   r0   r1   r   /  s    
 




"
 
 

 


zDictionaryObject.readFromStream)N)r6   r7   r8   r   r   r   r   r   r   ZxmpMetadatar>   r   rA   r0   r0   r0   r1   r     s   
	Xr   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )
TreeObjectc                 C   s   t |  d S rB   )r   rE   r3   r0   r0   r1   rE     s    zTreeObject.__init__c                 C   s   d| kS )N/Firstr0   r3   r0   r0   r1   hasChildren  s    zTreeObject.hasChildrenc                 C   s   |   S rB   )childrenr3   r0   r0   r1   __iter__  s    zTreeObject.__iter__c                 c   s8   |   st| d }|V  || d kr*t|d }qd S )Nr   /Last/Next)r   StopIteration)r4   childr0   r0   r1   r     s    zTreeObject.childrenc                 C   s   |  }||}t|ts td| krJ|| td< td| td< d }n| d }|| td< t| td d | td< |r||}t|tst||td< ||td< || }t|tst||td< d S )	Nr   r   /Countr   r   /Prevr   /Parent)r5   ZgetReferencerU   r)   r   r   r*   )r4   r   r,   childObjprevprevRefZ	parentRefr0   r0   r1   addChild  s$    


zTreeObject.addChildc                 C   s4  |  }td|krtdn|td | kr6tdd}d }d }| td }|  }| td }|  }	|d kr||kr|d krtd|kr|td }
|
  }|td= |
| td< | td	 d
 | td	< n@| td	 d
kst| td	= | td= td| kr| td= ntd|krn|td }
|
  }||td< |
|td< | td	 d
 | td	< n<||	ks|t|td= || td< | td	 d
 | td	< d}q|}|}td|kr|td }|  }qjd }d }qj|std|td= td|kr|td= td|kr0|td= d S )Nr   z/Removed child does not appear to be a tree itemz*Removed child is not a member of this treeFr   r   r   r   r   r   Tz"Removal couldn't find item in tree)r5   r   r   r   )r4   r   r   foundr   r   ZcurRefcurZlastReflastZnextRefnextr0   r0   r1   removeChild  sh    










zTreeObject.removeChildc                 C   s   | D ]B}|  }|td= td|kr0|td= td|kr|td= qtd| kr^| td= td| krt| td= td| kr| td= d S )Nr   r   r   r   r   r   )r5   r   )r4   r   r   r0   r0   r1   	emptyTree  s    



zTreeObject.emptyTreeN)
r6   r7   r8   rE   r   r   r   r   r   r   r0   r0   r0   r1   r     s   Dr   c                   @   s4   e Zd Zdd Zdd Zdd ZeeZdd Zd	S )
r   c                 C   s   d | _ d | _d S rB   )_datadecodedSelfr3   r0   r0   r1   rE     s    zStreamObject.__init__c                 C   sh   t t| j| td< t| || | d= |td | j}|rLt||}|| |td d S )Nr   z
stream
z

endstream)	r*   r%   r   r   r   r>   r;   r   r   rK   r0   r0   r1   r>     s    

zStreamObject.writeToStreamc                 C   s:   d| krt  }nt }| d |_| d= | d= ||  |S )N/Filterr   r   )EncodedStreamObjectDecodedStreamObjectr   r   )rL   r   r0   r0   r1   r     s    

z%StreamObject.initializeFromDictionaryc                 C   s~   d| krP| d }t |tr,|dtd qXt }|td || |}ntd}t }||td< tj| j	|_	|S )Nr  r   z/FlateDecode)
rU   r!   insertr   rO   r  r   ZFlateDecoder   r   )r4   r   Znewfr   r0   r0   r1   flateEncode)  s    

zStreamObject.flateEncodeN)r6   r7   r8   rE   r>   r   rA   r  r0   r0   r0   r1   r     s
   
r   c                   @   s   e Zd Zdd Zdd ZdS )r  c                 C   s   | j S rB   r   r3   r0   r0   r1   getData<  s    zDecodedStreamObject.getDatac                 C   s
   || _ d S rB   r  r4   rL   r0   r0   r1   setData?  s    zDecodedStreamObject.setDataN)r6   r7   r8   r  r
  r0   r0   r0   r1   r  ;  s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r  c                 C   s
   d | _ d S rB   )r  r3   r0   r0   r1   rE   D  s    zEncodedStreamObject.__init__c                 C   sX   | j r| j  S t }t| |_t|  D ]\}}|dkr.|||< q.|| _ |jS d S )N)r   r  z/DecodeParms)r  r  r  r   ZdecodeStreamDatar   r   r   )r4   decodedr   rC   r0   r0   r1   r  G  s    

zEncodedStreamObject.getDatac                 C   s   t dd S )Nz7Creating EncodedStreamObject is not currently supported)r   r?   r	  r0   r0   r1   r
  V  s    zEncodedStreamObject.setDataN)r6   r7   r8   rE   r  r
  r0   r0   r0   r1   r  C  s   r  c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zeeed,d,Zeeed,d,Zeeed,d,Zeeed,d,Zd,S )-RectangleObjecta{  
    This class is used to represent *page boxes* in PyPDF3. These boxes include:

        * :attr:`artBox <PyPDF3.pdf.PageObject.artBox>`
        * :attr:`bleedBox <PyPDF3.pdf.PageObject.bleedBox>`
        * :attr:`cropBox <PyPDF3.pdf.PageObject.cropBox>`
        * :attr:`mediaBox <PyPDF3.pdf.PageObject.mediaBox>`
        * :attr:`trimBox <PyPDF3.pdf.PageObject.trimBox>`
    c                    s.   t |dkstt  fdd|D  d S )Nr   c                    s   g | ]}  |qS r0   ensureIsNumberr   r   r3   r0   r1   r   h  s     z,RectangleObject.__init__.<locals>.<listcomp>)r%   r   r!   rE   )r4   rP   r0   r3   r1   rE   d  s    zRectangleObject.__init__c                 C   s   t |ttfst|}|S rB   )rU   r*   ra   rD   r0   r0   r1   r  j  s    zRectangleObject.ensureIsNumberc                 C   s   dt t|  S )NzRectangleObject(%s))rm   r   r3   r0   r0   r1   rT   o  s    zRectangleObject.__repr__c                 C   s   | d S rq   r0   r3   r0   r0   r1   getLowerLeft_xr  s    zRectangleObject.getLowerLeft_xc                 C   s   | d S )Nr   r0   r3   r0   r0   r1   getLowerLeft_yu  s    zRectangleObject.getLowerLeft_yc                 C   s   | d S )Nr   r0   r3   r0   r0   r1   getUpperRight_xx  s    zRectangleObject.getUpperRight_xc                 C   s   | d S )Nr   r0   r3   r0   r0   r1   getUpperRight_y{  s    zRectangleObject.getUpperRight_yc                 C   s   |   S rB   )r  r3   r0   r0   r1   getUpperLeft_x~  s    zRectangleObject.getUpperLeft_xc                 C   s   |   S rB   )r  r3   r0   r0   r1   getUpperLeft_y  s    zRectangleObject.getUpperLeft_yc                 C   s   |   S rB   )r  r3   r0   r0   r1   getLowerRight_x  s    zRectangleObject.getLowerRight_xc                 C   s   |   S rB   )r  r3   r0   r0   r1   getLowerRight_y  s    zRectangleObject.getLowerRight_yc                 C   s   |   |  fS rB   )r  r  r3   r0   r0   r1   getLowerLeft  s    zRectangleObject.getLowerLeftc                 C   s   |   |  fS rB   )r  r  r3   r0   r0   r1   getLowerRight  s    zRectangleObject.getLowerRightc                 C   s   |   |  fS rB   )r  r  r3   r0   r0   r1   getUpperLeft  s    zRectangleObject.getUpperLeftc                 C   s   |   |  fS rB   )r  r  r3   r0   r0   r1   getUpperRight  s    zRectangleObject.getUpperRightc                    s"    fdd|D \ d<  d< d S )Nc                    s   g | ]}  |qS r0   r  r  r3   r0   r1   r     s     z0RectangleObject.setLowerLeft.<locals>.<listcomp>r   r   r0   rD   r0   r3   r1   setLowerLeft  s    zRectangleObject.setLowerLeftc                    s"    fdd|D \ d<  d< d S )Nc                    s   g | ]}  |qS r0   r  r  r3   r0   r1   r     s     z1RectangleObject.setLowerRight.<locals>.<listcomp>r   r   r0   rD   r0   r3   r1   setLowerRight  s    zRectangleObject.setLowerRightc                    s"    fdd|D \ d<  d< d S )Nc                    s   g | ]}  |qS r0   r  r  r3   r0   r1   r     s     z0RectangleObject.setUpperLeft.<locals>.<listcomp>r   r   r0   rD   r0   r3   r1   setUpperLeft  s    zRectangleObject.setUpperLeftc                    s"    fdd|D \ d<  d< d S )Nc                    s   g | ]}  |qS r0   r  r  r3   r0   r1   r     s     z1RectangleObject.setUpperRight.<locals>.<listcomp>r   r   r0   rD   r0   r3   r1   setUpperRight  s    zRectangleObject.setUpperRightc                 C   s   |   |   S rB   )r  r  r3   r0   r0   r1   getWidth  s    zRectangleObject.getWidthc                 C   s   |   |   S rB   )r  r  r3   r0   r0   r1   	getHeight  s    zRectangleObject.getHeightN)r6   r7   r8   __doc__rE   r  rT   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r   Z	lowerLeftZ
lowerRightZ	upperLeftZ
upperRightr0   r0   r0   r1   r  Z  s6   	r  c                   @   s   e Zd ZdZdd Zedd Zedd Zedd Zedd Z	ed	d Z
ed
d Zedd Zedd Zedd Zedd ZdS )Fieldz
    A class representing a field dictionary. This class is accessed through
    :meth:`getFields()<PyPDF3.PdfFileReader.getFields>`
    c              	   C   sF   t |  d}|D ].}z|| | t|< W q tk
r>   Y qX qd S )N)
/FTr   /Kids/T/TU/TM/Ff/V/DV/AA)r   rE   r   r   )r4   rL   
attributesattrr0   r0   r1   rE     s    
zField.__init__c                 C   s
   |  dS )Nr$  r   r3   r0   r0   r1   r     r   zField.<lambda>c                 C   s
   |  dS )Nr   r/  r3   r0   r0   r1   r     r   c                 C   s
   |  dS )Nr%  r/  r3   r0   r0   r1   r     r   c                 C   s
   |  dS )Nr&  r/  r3   r0   r0   r1   r     r   c                 C   s
   |  dS )Nr'  r/  r3   r0   r0   r1   r     r   c                 C   s
   |  dS )Nr(  r/  r3   r0   r0   r1   r     r   c                 C   s
   |  dS )Nr)  r/  r3   r0   r0   r1   r     r   c                 C   s
   |  dS )Nr*  r/  r3   r0   r0   r1   r     r   c                 C   s
   |  dS )Nr+  r/  r3   r0   r0   r1   r     r   c                 C   s
   |  dS )Nr,  r/  r3   r0   r0   r1   r     r   N)r6   r7   r8   r"  rE   r   Z	fieldTypeparentZkidsr   ZaltNameZmappingNameflagsrC   defaultValueZadditionalActionsr0   r0   r0   r1   r#    s   
r#  c                   @   s   e Zd ZdZdd Zdd Zdd Zedd	 Zed
d	 Z	edd	 Z
edd	 Zedd	 Zedd	 Zedd	 Zedd	 ZdS )Destinationa  
    A class representing a destination within a PDF file.
    See section 8.2.1 of the PDF 1.6 reference.

    :param str title: Title of this destination.
    :param int page: Page number of this destination.
    :param str typ: How the destination is displayed.
    :param args: Additional arguments may be necessary depending on the type.
    :raises PdfReadError: If destination type is invalid.

    Valid ``typ`` arguments (see PDF spec for details):
             /Fit       No additional arguments
             /XYZ       [left] [top] [zoomFactor]
             /FitH      [top]
             /FitV      [left]
             /FitR      [left] [bottom] [right] [top]
             /FitB      No additional arguments
             /FitBH     [top]
             /FitBV     [left]
    c                 G   s   t |  || td< || td< || td< |dkrZ|\| td< | td< | td< n~|dkr|\| td< | td	< | td
< | td< nH|dkr|\| td< n0|dkr|\| td< n|dkrntd| d S )N/Title/Page/Typez/XYZ/Left/Top/Zoomz/FitR/Bottom/Right)z/FitHz/FitBH)z/FitVz/FitBV)z/Fitz/FitBzUnknown Destination Type: %r)r   rE   r   r   r?   )r4   titlepagetypargsr0   r0   r1   rE     s,    


 
zDestination.__init__c                    s(   t  d d g fdddD  S )Nr5  r6  c                    s   g | ]}| kr | qS r0   r0   r  r3   r0   r1   r   2  s      z,Destination.getDestArray.<locals>.<listcomp>)r7  r:  r;  r8  r9  )r!   r   r3   r0   r3   r1   getDestArray1  s    zDestination.getDestArrayc                 C   s   | td td}||| | td |  }||| td}||| | td td}||| | td | td d S )Nr   z/DrJ   z/Sz/GoTor   r   )r;   r   r   r>   r@  r   r0   r0   r1   r>   4  s    zDestination.writeToStreamc                 C   s
   |  dS )Nr4  r/  r3   r0   r0   r1   r   E  r   zDestination.<lambda>c                 C   s
   |  dS )Nr5  r/  r3   r0   r0   r1   r   L  r   c                 C   s
   |  dS )Nr6  r/  r3   r0   r0   r1   r   S  r   c                 C   s   |  dd S )Nr9  r/  r3   r0   r0   r1   r   Z  r   c                 C   s   |  dd S )Nr7  r/  r3   r0   r0   r1   r   a  r   c                 C   s   |  dd S )Nr;  r/  r3   r0   r0   r1   r   h  r   c                 C   s   |  dd S )Nr8  r/  r3   r0   r0   r1   r   o  r   c                 C   s   |  dd S )Nr:  r/  r3   r0   r0   r1   r   v  r   N)r6   r7   r8   r"  rE   r@  r>   r   r<  r=  r>  ZzoomleftrighttopZbottomr0   r0   r0   r1   r3    s   r3  c                   @   s   e Zd Zdd ZdS )Bookmarkc                    s   | td  fdddD D ]B}||| | td  |}||| | td q td}||| | td   }||| | td | td d S )	Nr   c                    s   g | ]}| krt |qS r0   )r   r  r3   r0   r1   r     s      z*Bookmark.writeToStream.<locals>.<listcomp>)r4  r   r   r   r   r   rJ   r   z/Destr   )r;   r   r>   r   r   r@  r   r0   r3   r1   r>     s    
zBookmark.writeToStreamN)r6   r7   r8   r>   r0   r0   r0   r1   rD  ~  s   rD  c              
   C   sT   t d}| D ]B}z|t tt| 7 }W q tk
rL   td|dddY qX q|S )NrZ   pdfdocencodingr   #does not exist in translation table)r   r   _pdfDocEncoding_revr   r   )Zunicode_stringr   r   r0   r0   r1   r     s    
r   c                 C   sL   t d}| D ]:}tt| }|t dkr>tdt|ddd||7 }q|S )NrZ   r   rE  r   rF  )r   _pdfDocEncodingr	   r   r   Zbarray)Z
byte_arrayr   r   r   r0   r0   r1   r     s    
r   r   u   ˘u   ˇu   ˆu   ˙u   ˝u   ˛u   ˚u   ˜rJ   !"r   r   r   r   'r   r   *r   ,-rp   r   rb   123456789:;r   =r   ?@ABCDr   FGHIJKLMNOPQr\   STUVWr   YZrI   r   rM   ^r   `ar   r   dr   r   ghr   jklmr   rk   pqr`   r   r   uvwr   yz{|}~u   •u   †u   ‡u   …u   —u   –u   ƒu   ⁄u   ‹u   ›u   −u   ‰u   „u   “u   ”u   ‘u   ’u   ‚u   ™u   ﬁu   ﬂu   Łu   Œu   Šu   Ÿu   Žu   ıu   łu   œu   šu   žu   €   ¡   ¢   £   ¤   ¥   ¦   §   ¨   ©   ª   «   ¬   ®   ¯   °   ±   ²   ³   ´   µ   ¶   ·   ¸   ¹   º   »   ¼   ½   ¾   ¿   À   Á   Â   Ã   Ä   Å   Æ   Ç   È   É   Ê   Ë   Ì   Í   Î   Ï   Ð   Ñ   Ò   Ó   Ô   Õ   Ö   ×   Ø   Ù   Ú   Û   Ü   Ý   Þ   ß   à   á   â   ã   ä   å   æ   ç   è   é   ê   ë   ì   í   î   ï   ð   ñ   ò   ó   ô   õ   ö   ÷   ø   ù   ú   û   ü   ý   þ   ÿ   )?r"  
__author____author_email__rx   r   r   r   r   r   r   r   r	   r
   r   rZ   r   rc   r~   sysr   ZNumberSignsry   r'   r&   objectr2   r$   r"   r   r!   r)   rd   ra   r_   r*   r   r    r#   r|   r   rz   r{   rf   r   r   r   r   r   r  r  r  r#  r3  rD  r   r   rH  r%   r   rG  r   r   charr0   r0   r0   r1   <module>   sf  07L."  .dHx                                                                                                                                                                                                                                #