<[c@sddlZddlZddlZddlZddlZddlZddlZddlZddlm Z yddl m Z Wne k rej Z nXe rdZ n dZ dZ i)dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6d.d/6d0d16d2d36d4d56d6d76d8d96d:d;6d<d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6dLdM6dNdO6dPdQ6dRdS6dTdU6dVdW6dXdY6ZdZZd[efd\YZd]Zd^ejd_d`dagfdbYZdcefddYZdedtdfYZdgdudhYZdiefdjYZdke fdlYZdmdvdnYZdodwdpYZdqZdrdxdsYZdS(yiNi(tpy3(tUserDictcCs |jdS(Nsus-ascii(tencode(ts((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt make_bytesscCs|S(N((R((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRscCstj|jdS(Nt utf_16_be(tcodecst BOM_UTF16_BER(R((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt encode_textsuiu˘iuˇiuˆiu˙iu˝iu˛iu˚iu˜iu•iu†iu‡iu…iu—iu–iuƒiu⁄iu‹iu›iu−iu‰iu„iu“iu”iu‘iu’iu‚iu™iufiiufliuŁiuŒiuŠiuŸiuŽiuıiułiuœiušiužiu€icCsn|ttj tjkr6|ttjjdStrSdjd|DSdjd|DSdS(NRtcss'|]}tj|t|VqdS(N(tPDFDocEncodingtgettchr(t.0tbyte((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pys Psucss'|]}tjt||VqdS(N(R R tord(R R((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pys Rs(tlenRRtdecodeRtjoin(tb((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt decode_textLs tPdfFormatErrorcBseZdZRS(s\An error that probably indicates a syntactic or semantic error in the PDF file structure(t__name__t __module__t__doc__(((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRUscCs|st|ndS(N(R(t conditiont error_message((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pytcheck_format_condition[stIndirectReferencetIndirectReferenceTuplet object_idt generationcBs5eZdZdZdZdZdZRS(cCsd|S(Ns%s %s R((tself((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt__str__bscCs|jjdS(Nsus-ascii(R!R(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt __bytes__escCs4|j|jko3|j|jko3|j|jkS(N(t __class__RR(R tother((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt__eq__hscCs ||k S(N((R R$((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt__ne__mscCst|j|jfS(N(thashRR(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt__hash__ps(RRR!R"R%R&R((((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR`s     tIndirectObjectDefcBseZdZRS(cCsd|S(Ns %s %s obj((R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR!us(RRR!(((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR)tst XrefTablecBsPeZdZdZdZdZdZdZdZdZ RS(cCs/i|_i|_idd6|_t|_dS(Nii(texisting_entriest new_entriestdeleted_entriestFalsetreading_finished(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt__init__zs  cCsF|jr||j||j|dd}|j|=||j|expected the next deleted object ID to be %s, instead found %ss%010d %05d f (tsortedR:R,R;R-ttelltwritetNonet enumerateRRtpopRR6( R tfR;t deleted_keyst startxreftprevtindexR1tcontiguous_keysRtthis_deleted_object_idtnext_in_linked_list((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR?sB             ( RRR0R3R5R8R9R<R;R?(((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR*ys       tPdfNamecBs|eZdZdZdZdZdZedZe e dde dd DZ d Z e Z RS( cCsOt|tr|j|_n-t|tr9||_n|jd|_dS(Nsus-ascii(t isinstanceRKtnametbytesR(R RM((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR0s  cCs|jjdS(Nsus-ascii(RMR(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt name_as_strscCs.t|tr!|j|jkp-||jkS(N(RLRKRM(R R$((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR%s!cCs t|jS(N(R'RM(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR(scCsdt|jS(Ns PdfName(%s)(treprRM(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt__repr__scCs|tj|S(N(t PdfParsertinterpret_name(tclstdata((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pytfrom_pdf_streamsi!iccs|]}t|VqdS(N(R(R tc((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pys ss #%/()<>[]{}cCstd}x|jD]}tr[||jkrA|j|q|jtd|qt||jkr|j|q|jdt|qWt|S(Nt/s#%02X( t bytearrayRMRt allowed_charstappendtextendRRRN(R tresultR((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR"s (RRR0ROR%R(RQt classmethodRVR:trangeRZR"R!(((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRKs     ) tPdfArraycBseZdZeZRS(cCsddjd|DdS(Ns[ t css|]}t|VqdS(N(tpdf_repr(R tx((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pys ss ](R(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR"s(RRR"R!(((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR`s tPdfDictcBs2eZdZdZdZes0eZnRS(cCsp|dkrAttdr1tj|||ql||j|>(RYtitemsR@RbR\RNRK(R toutR1R2((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR"2s      (RRReRxR"RR!(((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRds   t PdfBinarycBs,eZdZer!dZn dZRS(cCs ||_dS(N(RU(R RU((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR0DscCs$tddjd|jDS(Ns<%s>R css|]}d|VqdS(s%02XN((R R((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pys Is(RRRU(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR"HscCsddjd|jDS(Ns<%s>R css|]}dt|VqdS(s%02XN(R(R R((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pys Ls(RRU(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR!Ks(RRR0RR"R!(((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR{Cs  t PdfStreamcBseZdZdZRS(cCs||_||_dS(N(t dictionarytbuf(R R}R~((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR0Ps cCsy|jj}Wntk r'|jSX|dkry|jj}Wntk rc|jj}nXtj|jdt|St dt |jjdS(Nt FlateDecodetbufsizes$stream filter %s unknown/unsupported( R}tFilterRlR~tDLtLengthtzlibt decompressRotNotImplementedErrorRP(R tfiltertexpected_length((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRTs   (RRR0R(((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR|Os cCs|tkrdS|tkr dS|dkr0dSt|tslt|tslt|tslt|trvt|St|t rt |j dSt|t j rdt jd|j ddSt|trtt|St|tr tt|Strt|t s4t rDt|trDtt|St|tr|jdd }|jd d }|jdd }d |dSt|SdS( Nttruetfalsetnullsus-asciis(D:s %Y%m%d%H%M%SZt)s\s\\t(s\(s\)(tTrueR.R@RLRKRdR`R{RNRoR7RRpt struct_timetstrftimetdicttlistRtunicodeRbRtreplace(Rc((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRbes4    ! RRcBseZdZdSdSdSdddZdZdZdZdZdZ d Z d Z d Z d Z d ZdSdZdZdZdZedZdZdSdZdZdZdZdZedZedZdZeeeZej ededededed ed!ej!Z"ej eded"ededed eej!Z#d#Z$d$Z%ej eZ&ej ed%ed&Z'ej ed'Z(ej ed(eZ)e*d)Z+ej d*Z,e*e-d+Z.ej ed,ed&Z/ej ed-ed&Z0ej ed.ed&Z1ej ed/ed&Z2ej ed0ed&Z3ej ed1Z4ej ed2Z5ej ed3ed4Z6ej ed5Z7ej ed6ed6ed7ed&Z8ej ed6ed6ed8ed&Z9ej ed9ed&Z:ej d:ed;ed<Z;ej ed=Z<ej ed>ed&Z=e*dSd?d@Z>ej dAZ?idBdC6dDdE6dFdG6dHdI6dJdK6d:d:6d&d&6dLdL6dBe@dC6dDe@dE6dFe@dG6dHe@dI6dJe@dK6d:e@d:6d&e@d&6dLe@dL6ZAe*dMZBej edNeZCej ededeeZDej dOZEdPZFd?dQZGdSdRZHRS(TsxBased on https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf Supports PDF up to 1.4 itrbcCs|r|rtdn||_||_||_||_t|_t|_|dk r|dkrt |||_}t |_n|dk r|j ||_}t |_| rt |dr|j |_qni|_|r|jn|d|_|_t|_d|_t|_d|_i|_g|_g|_d|_d|_i|_t|_t |j_|r|j ndS(Ns4specify buf or f or filename, but not both buf and fRMi(!t RuntimeErrortfilenameR~RCt start_offsetR.tshould_close_buftshould_close_fileR@topenRtget_buf_from_fileRfRMtcached_objectst read_pdf_infotfile_size_totaltfile_size_thisRdtroottroot_reftinfotinfo_reftpage_tree_roottpagest orig_pagest pages_reftlast_xref_section_offsett trailer_dictR*t xref_tableR/tseek_end(R RRCR~Rtmode((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR0sF                         cCs|S(N((R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt __enter__scCs|jtS(N(tcloseR.(R texc_typet exc_valuet traceback((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt__exit__s cCs|j|jdS(N(t close_bufR(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt start_writings cCs2y|jjWntk r$nXd|_dS(N(R~RRlR@(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRs  cCsK|jr|jn|jdk rG|jrG|jjd|_ndS(N(RRRCR@RR(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRs    cCs|jjdtjdS(Ni(RCtseektostSEEK_END(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRscCs|jjddS(Ns %PDF-1.4 (RCR?(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt write_headerscCs$|jjd|fjddS(Ns%% %s sutf-8(RCR?R(R R((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt write_commentscCs|j|j|jj|_|jd|_|j|j|jdtdd|j|j|jdtddt |j d|j |jS(NitTypetCatalogtPagestCounttKids( tdel_roottnext_object_idRCR>RRt rewrite_pagest write_objRKRR(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyt write_catalogs      c Csfg}xt|jD]\}}|j|}|j|j=|j|td||jkrhqni}x*|jD]\}}|||j td|dRRRR?RNR)RBRRb(R RRRRCRtobj((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRs$        cCs;|jdkrdS|j|jj=|j|jdj=dS(NR(RR@RRR(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR.scCsnt|dr|jSt|dr2|jSy#tj|jddtjSWntk ridSXdS(Nt getbuffertgetvalueitaccessR (RfRRtmmaptfilenot ACCESS_READt ValueError(RC((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR4s  # cCsYt|j|_|j|j|_|j|jd|_|jjdd|_ t |j |j|_ |j dkrt |_nt |j |j |_td|j kdt|j ddkdtd|j kdtt|j dtd |j d|_|j |j|_|j|j|_|j|_dS( NRRRs/Type missing in RootRs/Type in Root is not /CatalogRs/Pages missing in Roots+/Pages in Root is not an indirect reference(RR~RRRt read_trailerRRR R@RRdt read_indirectRRRRLRRRtlinearize_page_treeRR(R ((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyR@s( cCsry&tt|jjdd}Wn tk rHtdd}nX|dk rn|df|j|j{}/%]s$[][()<>{}/%\000\011\012\014\015\040]s[\000\011\012\014\015\040]s#[\000\011\012\014\015\0400-9a-fA-F]t*Rjs[\r\n]+ttrailers \<\<(.*\>\>)REs([0-9]+)s%%EOFt$s \<\<(.*?\>\>)cCst|jd}||jkr.|j}n|jj|j|}t|d|}x2|r|}|jj|j|jd}q\W|s|}n|jd}t|jd|_ |j ||_ t |_ |jd|j d|j kr|j|j dndS(Ni@strailer end not foundiiitxref_section_offsetR(RR~Rtre_trailer_endtsearchRtstarttgroupRoRtinterpret_trailerRR*Rtread_xref_tabletread_prev_trailer(R tsearch_start_offsettmt last_matcht trailer_data((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRus$   &  cCs|jd|}|jj|j||d!}t|d|jd}tt|jd|kd|j|}d|kr|j|dndS(NRi@sprevious trailer not foundiisGxref section offset in previous trailer doesn't match what was expectedR( Rtre_trailer_prevRR~RRRoRR(R Rttrailer_offsetRRR((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRs     s/([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=Rs\<\\>cCsi}d}xtr|jj||}|s||jj||}t|oc|jt|kdt||Pn|j|j d}|j ||j\}}|||s\(s ([-+]?[0-9]+)sR(?=sobj(?=s endobj(?=Rs %[^\r\n]*s)*s stream\r?\ns endstream(?=icCs|dkrdS|jj||}|r:|j}n|jj||}|rOtt|jddkdtt|jddkdt|dkp|tt|jdt|jdkd|j ||jd|d\}}|dkr|dfS|j j||}t|d||jfSt| d |j j||}|rtt|jddkd tt|jddkd tt|jdt|jd|jfS|j j||}|r|j}i}|j j||}x|s|j ||d|d\}}|dkrv|dfS|j ||d|d\} }| ||<|dkr|dfS|j j||}q8W|j}|jj||}|ryt|d } Wn6tttfk rDtd |jd dnX||j|j| !} |jj||j| }t|d|j}tt|| }n t|}||fS|jj||}|r|j}g}|jj||}xd|sp|j ||d|d\} }|j| |dkrX|dfS|jj||}q W||jfS|jj||}|rd|jfS|jj||}|rt|jfS|jj||}|rt|jfS|jj||}|rEt |j!|jd|jfS|j"j||}|rt|jd|jfS|j#j||}|rt$|jd|jfS|j%j||}|rVt&g|jdD]} | dkr| ^q} t'| ddkr4| jt(dnt&j)| j*d|jfS|j+j||}|r|j,||jStdt-|||d!dS(Niis<indirect object definition: object ID must be greater than 0is;indirect object definition: generation must be non-negatives2indirect object definition different than expectedt max_nestings(indirect object definition end not founds$indirect object definition not founds;indirect object reference: object ID must be greater than 0s:indirect object reference: generation must be non-negativeRs)bad or missing Length in stream dict (%r)sstream end not foundt0123456789abcdefABCDEFt0sus-asciisunrecognized object: i (NN(.R@t re_commentRRtre_indirect_def_startRRoRRRtre_indirect_def_endtre_indirect_referencet re_dict_startRtre_stream_startt TypeErrorR4RRR t re_stream_endR|Rdtre_array_startt re_array_endR[tre_nulltre_trueRtre_falseR.RRKRStre_inttre_realtfloatt re_string_hexRYRRRRt re_string_littget_literal_stringRP(RTRURvtexpect_indirectRRtobjectR]R1R2t stream_lent stream_dataRt hex_string((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRs -"    7                 ("sF(\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))s tns trs ttsRs RCs\cCsrd}t}xP|jj||D]9}|j|||j!|jdrx|j|j|jddn|jdr|jt|jdddn|jdrn|jdr|jdnt|jdr|jd |d7}nK|jd rR|dkr8t ||j fS|jd |d8}n|j }q%Wt d dS( Niiiiiis iRiRsunfinished literal string( RYtre_lit_str_tokenRR\RRt escaped_charsR[RoRNRR(RTRURvt nesting_depthR]R((s-/tmp/pip-build-SKekGm/pillow/PIL/PdfParser.pyRvs, $&     txrefs+([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)c Cst}|jj|j||j}t|d|j}xHtr|jj|j|}|svt|dPnt}|j}t |j d}t |j d}xt |||D]}|j j|j|}t|d|j}|j ddk}t |j d} |st |j d| f} t||j kpj|j || kd| |j |s                 Z.;