
    kh                        d dl Z d dl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 d dlmZ d dlmZmZmZmZmZ d dlmZmZmZ d dlmZmZ d dlmZmZ d d	lm Z m!Z! d d
l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF  e j                  eH      ZI G d de       ZJ G d de       ZK e8d      ZL e8d      ZM e8d      ZN e8d      ZO e8d      ZP G d d      ZQeeRe
eReReRf   e
eReReReRf   f   ZS G d d      ZT G d d      ZU G d d e;ee9e.f            ZVe<e.   ZW	  G d! d"      ZXy)#    N)BytesIO)DictListMappingOptionalSequenceTupleUnioncast)settings)	safe_cmyk
safe_floatsafe_intsafe_matrixsafe_rgb)CMapCMapBaseCMapDB)PREDEFINED_COLORSPACEPDFColorSpace)	PDFDevice
PDFTextSeq)PDFExceptionPDFValueError)
PDFCIDFontPDFFontPDFFontErrorPDFTrueTypeFontPDFType1FontPDFType3Font)PDFPage)LITERALS_ASCII85_DECODE	PDFObjRef	PDFStream
dict_value
list_valueresolve1stream_value)PSEOFPSTypeError)KWDLIT	PSKeyword	PSLiteralPSStackParserPSStackTypekeyword_nameliteral_name)MATRIX_IDENTITYMatrixPathSegmentPointRectchoplistmult_matrixc                       e Zd Zy)PDFResourceErrorN__name__
__module____qualname__     N/var/www/teggl/fontify/venv/lib/python3.12/site-packages/pdfminer/pdfinterp.pyr;   r;   6       rA   r;   c                       e Zd Zy)PDFInterpreterErrorNr<   r@   rA   rB   rE   rE   :   rC   rA   rE   PDFTextFontFormImagec                   F    e Zd ZU eed<   eed<   d	dZdefdZd
dZ	d	dZ
y)PDFTextStatematrix
linematrixreturnNc                     d | _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        | j                          y )Nr   d   )	fontfontsize	charspace	wordspacescalingleadingrenderriseresetselfs    rB   __init__zPDFTextState.__init__I   sC    '+	  ! !!	

rA   c                    d| j                   d| j                  d| j                  d| j                  d| j                  d| j
                  d| j                  d| j                  d	| j                  d
| j                  dS )Nz<PDFTextState: font=z, fontsize=z, charspace=z, wordspace=z
, scaling=z
, leading=z	, render=z, rise=z	, matrix=z, linematrix=>)
rR   rS   rT   rU   rV   rW   rX   rY   rM   rN   r[   s    rB   __repr__zPDFTextState.__repr__V   sT     					
rA   c                 n   t               }| j                  |_        | j                  |_        | j                  |_        | j                  |_        | j
                  |_        | j                  |_        | j                  |_        | j                  |_        | j                  |_	        | j                  |_
        |S N)rL   rR   rS   rT   rU   rV   rW   rX   rY   rM   rN   r\   objs     rB   copyzPDFTextState.copyi   s|    n99}}llll[[
99[[

rA   c                 (    t         | _        d| _        y )Nr   r   )r3   rM   rN   r[   s    rB   rZ   zPDFTextState.resetw   s    % rA   rO   N)rO   rL   )r=   r>   r?   r4   __annotations__r6   r]   strr`   re   rZ   r@   rA   rB   rL   rL   E   s(    N	
# 
&!rA   rL   c                   (    e Zd ZddZddZdefdZy)PDFGraphicStaterO   Nc                     d| _         d | _        d | _        d | _        d | _        d | _        d | _        d| _        t        d   | _	        d| _
        t        d   | _        y )Nr   
DeviceGray)	linewidthlinecaplinejoin
miterlimitdashintentflatnessscolorr   scsncolorncsr[   s    rB   r]   zPDFGraphicState.__init__   s]     !)-*.,059	(,*. "7"E "7"ErA   c                 L   t               }| j                  |_        | j                  |_        | j                  |_        | j                  |_        | j
                  |_        | j                  |_        | j                  |_        | j                  |_        | j                  |_	        |S rb   )
rl   ro   rp   rq   rr   rs   rt   ru   rv   rx   rc   s     rB   re   zPDFGraphicState.copy   sr    ll}}99[[
}}[[
[[

rA   c                     d| j                   d| j                  d| j                  d| j                  d| j                  d| j
                  d| j                  d| j                  d	| j                  d
S )Nz<PDFGraphicState: linewidth=z
, linecap=z, linejoin=z,  miterlimit=z, dash=z	, intent=z, flatness=z,  stroking color=z, non stroking color=r_   )	ro   rp   rq   rr   rs   rt   ru   rv   rx   r[   s    rB   r`   zPDFGraphicState.__repr__   sM     			
rA   rh   )rO   rl   )r=   r>   r?   r]   re   rj   r`   r@   rA   rB   rl   rl      s    F"
# 
rA   rl   c                   l    e Zd ZdZddeddfdZdee   ddfdZdde	d	ede
fd
Zdedee	ef   defdZy)PDFResourceManagerzRepository of shared resources.

    ResourceManager facilitates reuse of shared resources
    such as fonts and images so that large objects are not
    allocated multiple times.
    cachingrO   Nc                      || _         i | _        y rb   )r~   _cached_fonts)r\   r~   s     rB   r]   zPDFResourceManager.__init__   s    46rA   procsc                 4    |D ]  }|t         u s|t        u r y rb   )LITERAL_PDFLITERAL_TEXT)r\   r   procs      rB   get_procsetzPDFResourceManager.get_procset   s&     	D{"dl&:		rA   cmapnamestrictc                 z    	 t        j                  |      S # t         j                  $ r |r t               cY S w xY wrb   )r   get_cmapCMapNotFoundr   )r\   r   r   s      rB   r   zPDFResourceManager.get_cmap   s8    	??8,,"" 	6M	s     ::objidspecc                    |r|| j                   v r| j                   |   }|S t        j                  d||       t        j                  r|d   t
        urt        d      d|v rt        |d         }nt        j                  rt        d      d}|dv rt        | |      }n|dk(  rt        | |      }n|d	k(  rt        | |      }n|d
v rt        | |      }n|dk(  r^t        |d         }|sJ t        |d         j                         }dD ]  }||v st        ||         ||<    | j!                  d |      }n*t        j                  rt        d|z        t        | |      }|r| j"                  r|| j                   |<   |S )Nz#get_font: create: objid=%r, spec=%rTypezType is not /FontSubtypezFont Subtype is not specified.Type1)r   MMType1TrueTypeType3)CIDFontType0CIDFontType2Type0DescendantFontsr   )Encoding	ToUnicodezInvalid Font spec: %r)r   logdebugr   STRICTLITERAL_FONTr   r2   r   r   r    r   r&   r%   re   r'   get_fontr~   )r\   r   r   rR   subtypedfontssubspecks           rB   r   zPDFResourceManager.get_font   s   Ud000%%e,DP M II;UDI<|3&':;;D &tI7??&'GHH!..#D$/J&&tT2G##D$/<<!$-G##D):$;<v$VAY/4462 7ADy%-d1g%6
7 }}T73??&'>'EFF#D$/,0""5)rA   )T)F)r=   r>   r?   __doc__boolr]   r   objectr   rj   r   r   r   r   r   r@   rA   rB   r}   r}      so    7 7 7&!1 d  d x *f *GCK,@ *W *rA   r}   c            	           e Zd Zdee   ddfdZddZdeddfdZddZ	dded
e
deee
f   fdZddZ ed      Z ed      Z ed	      ZdededdfdZy)PDFContentParserstreamsrO   Nc                 L    || _         d| _        t        j                  | d        y Nr   )r   istreamr/   r]   )r\   r   s     rB   r]   zPDFContentParser.__init__   s"     	tT*rA   c                 $   | j                   s| j                  t        | j                        k  r8t	        | j                  | j                           }| xj                  dz  c_        nt        d      t        |j                               | _         y y )N   zUnexpected EOF, file truncated?)fpr   lenr   r(   r)   r   get_data)r\   strms     rB   fillfpzPDFContentParser.fillfp  sf    ww||c$,,//#DLL$>?!=>>dmmo.DG rA   posc                 P    | j                          t        j                  | |       y rb   )r   r/   seek)r\   r   s     rB   r   zPDFContentParser.seek  s    4%rA   c                 6   | j                   t        | j                        k  ry 	 | j                          | j                  j                         | _        | j                  j                  | j                        | _        | j                  r		 d| _         y d | _        vr   )	charposr   bufr   r   tellbufposreadBUFSIZr[   s    rB   fillbufzPDFContentParser.fillbuf  sm    <<#dhh-'KKM'',,.DKww||DKK0DHxx DG rA      EItargetc                 $   | j                  |       d}d}|t        |      k  r| j                          |r| j                  | j                     }t        |f      }||z  }| xj                  dz  c_        t        |      |k  r|j                         s |t        |      k  r|t        ||   f      k(  r|dz  }nXd}nU	 | j                  j                  |d   | j                        }|| j                  | j                  |dz    z  }|dz   | _        d}|t        |      k  r|d t        |      dz     }t        j                  dd|      }||fS # t        $ r9 || j                  | j                  d  z  }t        | j                        | _        Y }w xY w)Nr   rA   r   s   (\x0d\x0a|[\x0d\x0a])$)r   r   r   r   r   bytesisspaceindex
ValueErrorresub)r\   r   r   idatacicjs           rB   get_inline_dataz PDFContentParser.get_inline_data  sp   		#3v;LLNXXdll+2%L	!K1$		3v;eVAYL12FAA1vay$,,?ADHHT\\AE::D#$q5DLA+ 3v;2 (Fa()vv0#t<T{ " 1DHHT\\^44D#&txx=DL1s   =AE ?FFc                 >     | j                   | j                           y rb   )add_resultspopallr[   s    rB   flushzPDFContentParser.flush@  s    $++-(rA   s   BIs   IDtokenc                    || j                   u r| j                  |d       y || j                  u r	 | j                  d      \  }}t	        |      dz  dk7  rd|}t        |      t        d|      D ci c]  \  }}t        |      t        |       }}}d}	|j                  dd       }
|
 t        |
t              r|
g}
|
d   t        v rd}	| j                  |t	        d      z   |		      \  }}|	dk7  r||	z  }t        ||      }| j                  ||f       |	dk(  r| j                  || j                   f       y y | j                  ||f       y c c}}w # t
        $ r t"        j$                  r Y y w xY w)
Ninline   r   zInvalid dictionary construct: r   Fs   ~>s   ID )r   )
KEYWORD_BI
start_type
KEYWORD_IDend_typer   r*   r8   r2   r'   get
isinstancer.   r"   r   r$   push
KEYWORD_EIr   r   )r\   r   r   _objs	error_msgr   vdeosfilterr   rd   s                rB   
do_keywordzPDFContentParser.do_keywordG  sv   DOO#OOC*doo% MM(3	Dt9q=A%"@ II%i00@HD@QRfq!\!_hqk1RRsD)%!&)4"(ay$;;#"223V3DS2Qd%<CKD4(		3*%%<IIsDOO45   IIsEl#' S  ?? #s%   AE 6EB&E E E43E4rh   )r   )r=   r>   r?   r   r   r]   r   intr   r   r   r	   r   r   r+   r   r   r   r-   r   r@   rA   rB   r   r      s    + 0 +T +/& & &
3  %U
BS B) UJUJUJ$c $) $ $rA   r   c                   J   e Zd ZdZdededdfdZddZdee	e	f   ddfd	Z
d
eddfdZdeddfdZdedee   fdZdeeeef   fdZdeeeef   ddfdZddZddZdededededededdfdZdeddfdZdeddfdZd eddfd!Zd"eddfd#Zd$ed%eddfd&Zd'eddfd(Zd)eddfd*Z d+eddfd,Z!d-ed.eddfd/Z"d-ed.eddfd0Z#d1ed2ed3ed4ed5ed6eddfd7Z$d3ed4ed5ed6eddf
d8Z%d1ed2ed5ed6eddf
d9Z&dd:Z'd-ed.ed;ed<eddf
d=Z(dd>Z)dd?Z*dd@Z+ddAZ,ddBZ-ddCZ.ddDZ/ddEZ0ddFZ1ddGZ2ddHZ3ddIZ4d+eddfdJZ5d+eddfdKZ6dLeddfdMZ7dLeddfdNZ8dOedPedQeddfdRZ9dOedPedQeddfdSZ:dTedUed.edVeddf
dWZ;dTedUed.edVeddf
dXZ<ddYZ=ddZZ>dd[Z?dd\Z@d+e	ddfd]ZAdd^ZBdd_ZCdd`ZDddaZEdbeddfdcZFdbeddeddfdeZGdbeddfdfZHdbeddeddfdgZIddhZJdieddfdjZKdieddfdkZLdleddfdmZMdneddfdoZNdpedqeddfdrZOdseddfdtZPdueddfdvZQdwedxeddfdyZRdwedxeddfdzZSd{edQedTed|ed}ed~eddfdZTddZUdeddfdZVdeddfdZWdeddfdZXdedededdfdZYddZZddZ[deddfdZ\deddfdZ]de^ddfdZ_e`fdee	e	f   deae	   d
eddfdZbdeae	   ddfdZcy)PDFPageInterpreterzhProcessor for the content of a PDF page

    Reference: PDF Reference, Appendix A, Operator Summary
    rsrcmgrdevicerO   Nc                      || _         || _        y rb   )r   r   )r\   r   r   s      rB   r]   zPDFPageInterpreter.__init__q  s    rA   c                 N    | j                  | j                  | j                        S rb   )	__class__r   r   r[   s    rB   dupzPDFPageInterpreter.dupu  s    ~~dllDKK88rA   	resourcesc                 R   || _         i | _        i | _        t        j                         | _        |sydt        dt        t           fd}t        |      j                         D ]B  \  }}t        j                  d||       |dk(  rtt        |      j                         D ]W  \  }}d}t        |t              r|j                  }t        |      }| j                   j#                  ||      | j                  |<   Y |dk(  rEt        |      j                         D ](  \  }} |t%        |            }	|	|	| j
                  |<   * |dk(  r&| j                   j'                  t)        |             |d	k(  st        |      j                         D ]  \  }
}|| j                  |
<    E y)
z@Prepare the fonts and XObjects listed in the Resource attribute.Nr   rO   c           	         t        | t              rt        | d         }nt        |       }|dk(  r9t        | t              r)t        |       dk\  rt	        |t        | d         d         S |dk(  r?t        | t              r/t        |       dk\  r!t	        |t        t        | d                     S t        j                  |      S )Nr   ICCBasedr   r   NDeviceN)	r   listr2   r   r   r(   r&   r   r   )r   names     rB   get_colorspacez9PDFPageInterpreter.init_resources.<locals>.get_colorspace  s    $%#DG,#D)z!jt&<Ta$T<Q+@+EFF"z$'=#d)q.$T3z$q'/B+CDD,0066rA   zResource: %r: %rrH   
ColorSpaceProcSetXObject)r   fontmapxobjmapr   re   csmapr   r   r   r%   itemsr   r   r   r#   r   r   r   r'   r   r&   )r\   r   r   r   r   fontidr   r   csid
colorspacexobjidxobjstrms               rB   init_resourcesz!PDFPageInterpreter.init_resourcesx  s   ".0/D/I/I/K

	7 
	7H],C 
	7 y)//1 	4DAqII(!Q/F{$.qM$7$7$9 NLFD E!$	2 $

%d+D+/<<+@+@+MDLL(N l"",Q-"5"5"7 6JD$!/!?J!-+5

4(6 i((A7i(21(;(;(= 4$FH+3DLL(4#	4rA   ctmc                     g | _         || _        | j                  j                  | j                         t	               | _        t               | _        g | _        g | _	        y)z<Initialize the text and graphic states for rendering a page.N)
gstackr  r   set_ctmrL   	textstaterl   graphicstatecurpathargstack)r\   r  s     rB   
init_statezPDFPageInterpreter.init_state  sL     KMDHH%%+-*,)+rA   rd   c                 :    | j                   j                  |       y rb   )r  appendrc   s     rB   r   zPDFPageInterpreter.push  s    S!rA   nc                 ^    |dk(  rg S | j                   | d  }| j                   d |  | _         |S r   )r  )r\   r  xs      rB   popzPDFPageInterpreter.pop  s9    6IMM1"#cr*rA   c                     | j                   | j                  j                         | j                  j                         fS rb   )r  r
  re   r  r[   s    rB   get_current_statez$PDFPageInterpreter.get_current_state  s/    $..--/1B1B1G1G1IJJrA   statec                 x    |\  | _         | _        | _        | j                  j	                  | j                          y rb   )r  r
  r  r   r	  )r\   r  s     rB   set_current_statez$PDFPageInterpreter.set_current_state  s-     9>54>4#4DHH%rA   c                 V    | j                   j                  | j                                y)zSave graphics stateN)r  r  r  r[   s    rB   do_qzPDFPageInterpreter.do_q  s    41134rA   c                 p    | j                   r*| j                  | j                   j                                yy)zRestore graphics stateN)r  r  r  r[   s    rB   do_QzPDFPageInterpreter.do_Q  s'    ;;""4;;??#45 rA   a1b1c1d1e1f1c           	          t        ||||||      }| t        j                  d||||||fd       yt        || j                        | _        | j
                  j                  | j                         y)z3Concatenate matrix to current transformation matrixNzUCannot concatenate matrix to current transformation matrix because not all values in  can be parsed as floats)r   r   warningr9   r  r   r	  )r\   r  r  r   r!  r"  r#  rM   s           rB   do_cmzPDFPageInterpreter.do_cm  s     RRR4>KKgikmoqsuwy{}  iA  hD  D\  ] #64884DHKK)rA   ro   c                 t    t        |      }|t        j                  d|d       y|| j                  _        y)zSet line widthNzCannot set line width because  is an invalid float value)r   r   r&  r  ro   )r\   ro   linewidth_fs      rB   do_wzPDFPageInterpreter.do_w  s;     +KK0=WX +6D'rA   rp   c                 &    || j                   _        y)zSet line cap styleN)r  rp   )r\   rp   s     rB   do_JzPDFPageInterpreter.do_J  s    $+!rA   rq   c                 &    || j                   _        y)zSet line join styleN)r  rq   )r\   rq   s     rB   do_jzPDFPageInterpreter.do_j      %-"rA   rr   c                 &    || j                   _        y)zSet miter limitN)r  rr   )r\   rr   s     rB   do_MzPDFPageInterpreter.do_M  s    '1$rA   rs   phasec                 *    ||f| j                   _        y)zSet line dash patternN)r  rs   )r\   rs   r3  s      rB   do_dzPDFPageInterpreter.do_d  s    "&rA   rt   c                 &    || j                   _        y)zSet color rendering intentN)r  rt   )r\   rt   s     rB   do_rizPDFPageInterpreter.do_ri  s    #) rA   ru   c                 &    || j                   _        y)zSet flatness toleranceN)r  ru   )r\   ru   s     rB   do_izPDFPageInterpreter.do_i  r0  rA   r   c                      y)z7Set parameters from graphics state parameter dictionaryNr@   r\   r   s     rB   do_gszPDFPageInterpreter.do_gs       rA   r  yc                     t        |      }t        |      }||d||f}t        j                  d|d       yd||f}| j                  j	                  |       y)zBegin new subpathNmz3Cannot start new subpath because not all values in r%  r   r   r&  r  r  r\   r  r>  x_fy_fpoints         rB   do_mzPDFPageInterpreter.do_m  s`    mm;#+!QKEKKEeYNfg #sOELL&rA   c                     t        |      }t        |      }||d||f}t        j                  d|d       yd||f}| j                  j	                  |       y)z$Append straight line segment to pathNlzFCannot append straight line segment to path because not all values in r%  rA  rB  s         rB   do_lzPDFPageInterpreter.do_l  sb    mm;#+!QKEKKXY^Xaayz #sOELL&rA   x1y1x2y2x3y3c                 .   t        |      }t        |      }t        |      }	t        |      }
t        |      }t        |      }|
||	|
||#d||||||f}t        j                  d|d       yd|||	|
||f}| j                  j	                  |       y)z4Append curved segment to path (three control points)Nr   ?Cannot append curved segment to path because not all values in r%  rA  )r\   rJ  rK  rL  rM  rN  rO  x1_fy1_fx2_fy2_fx3_fy3_frE  s                 rB   do_czPDFPageInterpreter.do_c  s     "~"~"~"~"~"~L|||||"b"b"b1EKKQRWQZZrs $dD$=ELL&rA   c                     t        |      }t        |      }t        |      }t        |      }||||!d||||f}	t        j                  d|	d       yd||||f}	| j                  j	                  |	       y)z8Append curved segment to path (initial point replicated)Nr   rQ  r%  rA  )
r\   rL  rM  rN  rO  rT  rU  rV  rW  rE  s
             rB   do_vzPDFPageInterpreter.do_v?      "~"~"~"~<4<4<4<"b"b)EKKQRWQZZrs $dD1ELL&rA   c                     t        |      }t        |      }t        |      }t        |      }||||!d||||f}	t        j                  d|	d       yd||||f}	| j                  j	                  |	       y)z6Append curved segment to path (final point replicated)Nr>  rQ  r%  rA  )
r\   rJ  rK  rN  rO  rR  rS  rV  rW  rE  s
             rB   do_yzPDFPageInterpreter.do_yN  r[  rA   c                 :    | j                   j                  d       y)zClose subpathhN)r  r  r[   s    rB   do_hzPDFPageInterpreter.do_h]  s    F#rA   wr`  c                    t        |      }t        |      }t        |      }t        |      }|||| ||||f}	t        j                  d|	d       y| j                  j	                  d||f       | j                  j	                  d||z   |f       | j                  j	                  d||z   ||z   f       | j                  j	                  d|||z   f       | j                  j	                  d       y)zAppend rectangle to pathNz:Cannot append rectangle to path because not all values in r%  r@  rH  r_  rA  )
r\   r  r>  rb  r`  rC  rD  w_fh_fvaluess
             rB   do_rezPDFPageInterpreter.do_rea  s    mmmm;#+Aq\FKKLVJVno LLc30LLcCi 56LLcCis ;<LLc39 56LL'rA   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)zStroke pathTFNr   
paint_pathr  r  r[   s    rB   do_SzPDFPageInterpreter.do_St  s-    t00$udllSrA   c                 D    | j                          | j                          y)zClose and stroke pathN)ra  rk  r[   s    rB   do_szPDFPageInterpreter.do_sy      				rA   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)z+Fill path using nonzero winding number ruleFTNri  r[   s    rB   do_fzPDFPageInterpreter.do_f~  s-    t00%udllSrA   c                      y)z6Fill path using nonzero winding number rule (obsolete)Nr@   r[   s    rB   do_FzPDFPageInterpreter.do_F  r=  rA   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)zFill path using even-odd ruleFTNri  r[   s    rB   do_f_azPDFPageInterpreter.do_f_a  s-    t00%tT\\RrA   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)z6Fill and stroke path using nonzero winding number ruleTFNri  r[   s    rB   do_BzPDFPageInterpreter.do_B  s-    t00$eT\\RrA   c                 x    | j                   j                  | j                  ddd| j                         g | _        y)z(Fill and stroke path using even-odd ruleTNri  r[   s    rB   do_B_azPDFPageInterpreter.do_B_a  s-    t00$dDLLQrA   c                 D    | j                          | j                          y)z>Close, fill, and stroke path using nonzero winding number ruleN)ra  rv  r[   s    rB   do_bzPDFPageInterpreter.do_b  rn  rA   c                 D    | j                          | j                          y)z0Close, fill, and stroke path using even-odd ruleN)ra  rx  r[   s    rB   do_b_azPDFPageInterpreter.do_b_a  s    		rA   c                     g | _         y)z$End path without filling or strokingN)r  r[   s    rB   do_nzPDFPageInterpreter.do_n  s	    rA   c                      y)z3Set clipping path using nonzero winding number ruleNr@   r[   s    rB   do_WzPDFPageInterpreter.do_W  r=  rA   c                      y)z%Set clipping path using even-odd ruleNr@   r[   s    rB   do_W_azPDFPageInterpreter.do_W_a  r=  rA   c                     	 | j                   t        |         | j                  _        y# t        $ r! t
        j                  rt        d|z        Y yw xY w)zOSet color space for stroking operations

        Introduced in PDF 1.1
        Undefined ColorSpace: %rN)r   r2   r  rw   KeyErrorr   r   rE   r;  s     rB   do_CSzPDFPageInterpreter.do_CS  sR    
	M$(JJ|D/A$BD! 	M)*Dt*KLL 	M   '* 'AAc                     	 | j                   t        |         | j                  _        y# t        $ r! t
        j                  rt        d|z        Y yw xY w)z*Set color space for nonstroking operationsr  N)r   r2   r  ry   r  r   r   rE   r;  s     rB   do_cszPDFPageInterpreter.do_cs  sR    	M$(JJ|D/A$BD! 	M)*Dt*KLL 	Mr  grayc                     t        |      }|t        j                  d|d       y|| j                  _        | j
                  d   | j                  _        y)z&Set gray level for stroking operationsNCannot set gray level because r)  rn   )r   r   r&  r  rv   r   rw   r\   r  gray_fs      rB   do_GzPDFPageInterpreter.do_G  Q    D!>KK08RS (.D$$(JJ|$<D!rA   c                     t        |      }|t        j                  d|d       y|| j                  _        | j
                  d   | j                  _        y)z)Set gray level for nonstroking operationsNr  r)  rn   )r   r   r&  r  rx   r   ry   r  s      rB   do_gzPDFPageInterpreter.do_g  r  rA   rgbc                     t        |||      }|t        j                  d|||fd       y|| j                  _        | j
                  d   | j                  _        y)z%Set RGB color for stroking operationsNz6Cannot set RGB stroke color because not all values in r%  	DeviceRGB)r   r   r&  r  rv   r   rw   r\   r  r  r  rgbs        rB   do_RGzPDFPageInterpreter.do_RG  s\    q!Q;KKH!QPQUmn (+D$$(JJ{$;D!rA   c                     t        |||      }|t        j                  d|||fd       y|| j                  _        | j
                  d   | j                  _        y)z(Set RGB color for nonstroking operationsNz:Cannot set RGB non-stroke color because not all values in r%  r  )r   r   r&  r  rx   r   ry   r  s        rB   do_rgzPDFPageInterpreter.do_rg  s]    q!Q;KKLaQRTUYMYqr (+D$$(JJ{$;D!rA   r   r@  r   c                     t        ||||      }|t        j                  d||||fd       y|| j                  _        | j
                  d   | j                  _        y)z&Set CMYK color for stroking operationsNz7Cannot set CMYK stroke color because not all values in r%  
DeviceCMYK)r   r   r&  r  rv   r   rw   r\   r   r@  r>  r   cmyks         rB   do_KzPDFPageInterpreter.do_K  sb    Aq!$<KKI1aQRTU,IYYqr (,D$$(JJ|$<D!rA   c                     t        ||||      }|t        j                  d||||fd       y|| j                  _        | j
                  d   | j                  _        y)z)Set CMYK color for nonstroking operationsNz;Cannot set CMYK non-stroke color because not all values in r%  r  )r   r   r&  r  rx   r   ry   r  s         rB   do_kzPDFPageInterpreter.do_k  sc    Aq!$<KKMqRSUVXYlM]]uv (,D$$(JJ|$<D!rA   c                    | j                   j                  j                  }| j                  |      }t	        |      |k7  rt
        j                  d| d|d       yt	        |      dk(  r>|d   }t        |      }|t
        j                  d|d       y|| j                   _        yt	        |      d	k(  r6t        | }|t
        j                  d
|d       y|| j                   _        yt	        |      dk(  r6t        | }|t
        j                  d|d       y|| j                   _        yt
        j                  dt	        |       d       y)z"Set color for stroking operations.z)Cannot set stroke color because expected  components but got !rr   r   Nz%Cannot set gray stroke color because r)     z/Cannot set RGB stroke color because components  cannot be parsed as RGB   z0Cannot set CMYK stroke color because components  cannot be parsed as CMYKz Cannot set stroke color because T components are specified but only 1 (grayscale), 3 (rgb) and 4 (cmyk) are supported)r  rw   ncomponentsr  r   r   r&  r   rv   r   r   r\   r  
componentsr  r  r  r  s          rB   do_SCNzPDFPageInterpreter.do_SCN  sR   !!--XXa[
z?aKK;A3>RS]^`Rab _!a=D%F~;D8C]^ ,2!!(_!J'C{Ej^Skl ,/!!(_!j)D|FznTmn ,0!!( KK23z?2C  DX  YrA   c                    | j                   j                  j                  }| j                  |      }t	        |      |k7  rt
        j                  d| d|d       yt	        |      dk(  r>|d   }t        |      }|t
        j                  d|d       y|| j                   _        yt	        |      d	k(  r6t        | }|t
        j                  d
|d       y|| j                   _        yt	        |      dk(  r6t        | }|t
        j                  d|d       y|| j                   _        yt
        j                  dt	        |       d       y)$Set color for nonstroking operationsz-Cannot set non-stroke color because expected r  r  r   r   Nz)Cannot set gray non-stroke color because r)  r  z3Cannot set RGB non-stroke color because components r  r  z4Cannot set CMYK non-stroke color because components r  z$Cannot set non-stroke color because r  )r  ry   r  r  r   r   r&  r   rx   r   r   r  s          rB   do_scnzPDFPageInterpreter.do_scn1  sR   !!--XXa[
z?aKK?sBVWabdVef _!a=D%F~?xGab ,2!!(_!J'C{I*Wop ,/!!(_!j)D|J:.Xqr ,0!!( KK6s:6G  H\  ]rA   c                 $    | j                          y)z!Set color for stroking operationsN)r  r[   s    rB   do_SCzPDFPageInterpreter.do_SC^      rA   c                 $    | j                          y)r  N)r  r[   s    rB   do_sczPDFPageInterpreter.do_scb  r  rA   c                      y)z%Paint area defined by shading patternNr@   r;  s     rB   do_shzPDFPageInterpreter.do_shf  r=  rA   c                 8    | j                   j                          y)zBegin text object

        Initializing the text matrix, Tm, and the text line matrix, Tlm, to
        the identity matrix. Text objects cannot be nested; a second BT cannot
        appear before an ET.
        N)r
  rZ   r[   s    rB   do_BTzPDFPageInterpreter.do_BTi  s     	rA   c                      y)zEnd a text objectNr@   r[   s    rB   do_ETzPDFPageInterpreter.do_ETr  r=  rA   c                      y)zBegin compatibility sectionNr@   r[   s    rB   do_BXzPDFPageInterpreter.do_BXu  r=  rA   c                      y)zEnd compatibility sectionNr@   r[   s    rB   do_EXzPDFPageInterpreter.do_EXx  r=  rA   tagc                     t        |t              r| j                  j                  |       yt        j                  d|d       y)zDefine marked-content pointz+Cannot define marked-content point because  is not a PSLiteralNr   r.   r   do_tagr   r&  r\   r  s     rB   do_MPzPDFPageInterpreter.do_MP{  s7    c9%KKs#KK=cWDWXrA   propsc                     t        |t              r| j                  j                  ||       yt        j                  d|d       y)z.Define marked-content point with property listz>Cannot define marked-content point with property list because r  Nr  r\   r  r  s      rB   do_DPzPDFPageInterpreter.do_DP  s;    c9%KKsE*KKPQTPWWjkrA   c                     t        |t              r| j                  j                  |       yt        j                  d|d       y)zBegin marked-content sequencez-Cannot begin marked-content sequence because r  Nr   r.   r   	begin_tagr   r&  r  s     rB   do_BMCzPDFPageInterpreter.do_BMC  s7    c9%KK!!#&KK?wFYZrA   c                     t        |t              r| j                  j                  ||       yt        j                  d|d       y)z0Begin marked-content sequence with property listz@Cannot begin marked-content sequence with property list because r  Nr  r  s      rB   do_BDCzPDFPageInterpreter.do_BDC  s;    c9%KK!!#u-KKRSVRYYlmrA   c                 8    | j                   j                          y)zEnd marked-content sequenceN)r   end_tagr[   s    rB   do_EMCzPDFPageInterpreter.do_EMC  s    rA   spacec                 t    t        |      }|t        j                  d|d       y|| j                  _        y)zSet character spacing.

        Character spacing is used by the Tj, TJ, and ' operators.

        :param space: a number expressed in unscaled text space units.
        Nz(Could not set character spacing because r)  )r   r   r&  r
  rT   )r\   r  rT   s      rB   do_TczPDFPageInterpreter.do_Tc  s;     u%	KK:5)C]^ (1DNN$rA   c                 t    t        |      }|t        j                  d|d       y|| j                  _        y)zSet the word spacing.

        Word spacing is used by the Tj, TJ, and ' operators.

        :param space: a number expressed in unscaled text space units
        Nz#Could not set word spacing becuase r)  )r   r   r&  r
  rU   )r\   r  rU   s      rB   do_TwzPDFPageInterpreter.do_Tw  s;     u%	KK5eY>XY (1DNN$rA   scalec                 t    t        |      }|t        j                  d|d       y|| j                  _        y)zuSet the horizontal scaling.

        :param scale: is a number specifying the percentage of the normal width
        Nz)Could not set horizontal scaling because r)  )r   r   r&  r
  rV   )r\   r  scale_fs      rB   do_TzzPDFPageInterpreter.do_Tz  s:    
 U#?KK;E9D^_ &-DNN"rA   rW   c                 v    t        |      }|t        j                  d|d       y| | j                  _        y)zSet the text leading.

        Text leading is used only by the T*, ', and " operators.

        :param leading: a number expressed in unscaled text space units
        Nz#Could not set text leading because r)  )r   r   r&  r
  rW   )r\   rW   	leading_fs      rB   do_TLzPDFPageInterpreter.do_TL  s=     w'	KK5g[@Z[ '0ZDNN"rA   r   rS   c                 t   	 | j                   t        |         | j                  _        t        |      }|t        j                  d|d       y|| j                  _        y# t        $ rL t
        j                  rt        d|z        | j                  j                  di       | j                  _        Y w xY w)zSet the text font

        :param fontid: the name of a font resource in the Font subdictionary
            of the current resource dictionary
        :param fontsize: size is a number representing a scale factor.
        zUndefined Font id: %rNz Could not set text font because r)  )r   r2   r
  rR   r  r   r   rE   r   r   r   r   r&  rS   )r\   r   rS   
fontsize_fs       rB   do_TfzPDFPageInterpreter.do_Tf  s    	B"&,,|F/C"DDNN  )
KK28,>XY '1DNN#  	B)*AF*JKK"&,,"7"7b"ADNN	Bs   'A" "AB76B7rX   c                 t    t        |      }|t        j                  d|d       y|| j                  _        y)zSet the text rendering modeNz*Could not set text rendering mode because z is an invalid int value)r   r   r&  r
  rX   )r\   rX   render_is      rB   do_TrzPDFPageInterpreter.do_Tr  s9    F#KK<VJF^_ %-DNN!rA   rY   c                 t    t        |      }|t        j                  d|d       y|| j                  _        y)z`Set the text rise

        :param rise: a number expressed in unscaled text space units
        Nz Could not set text rise because r)  )r   r   r&  r
  rY   )r\   rY   rise_fs      rB   do_TszPDFPageInterpreter.do_Ts  s:    
 D!>KK24(:TU #)DNNrA   txtyc                 @   t        |      }t        |      }|S|Q| j                  j                  \  }}}}}	}
||z  ||z  z   |	z   }||z  ||z  z   |
z   }||||||f| j                  _        n"t        j                  rt        d|d|d      d| j                  _        y)zlMove to the start of the next line

        Offset from the start of the current line by (tx , ty).
        NzInvalid offset (z, z) for Tdrg   )r   r
  rM   r   r   r   rN   r\   r  r  tx_ty_ar  r   r   efe_newf_news                rB   do_TdzPDFPageInterpreter.do_Td  s    
 nn?s!%!6!6Q1aA!GcAg%)E!GcAg%)E%&1a$>DNN!__"22&2& IJJ$*!rA   c                 X   t        |      }t        |      }|S|Q| j                  j                  \  }}}}}	}
||z  ||z  z   |	z   }||z  ||z  z   |
z   }||||||f| j                  _        nt        j                  rt        d      ||| j                  _        d| j                  _        y)zMove to the start of the next line.

        offset from the start of the current line by (tx , ty). As a side effect, this
        operator sets the leading parameter in the text state.
        Nz"Invalid offset ({tx}, {ty}) for TDrg   )r   r
  rM   r   r   r   rW   rN   r  s                rB   do_TDzPDFPageInterpreter.do_TD  s     nn?s!%!6!6Q1aA!GcAg%)E!GcAg%)E%&1a$>DNN!__ DEE?%(DNN"$*!rA   r  r   r  r  c                     ||||||f}t        | }|t        j                  d|d       y|| j                  _        d| j                  _        y)z$Set text matrix and text line matrixNz4Could not set text matrix because not all values in r%  rg   )r   r   r&  r
  rM   rN   )	r\   r  r  r   r   r  r  rf  rM   s	            rB   do_TmzPDFPageInterpreter.do_Tm6  sX     Q1a#f%>KKFvjPhi %+DNN!(.DNN%rA   c                     | j                   j                  \  }}}}}}||||| j                   j                  |z  |z   | j                   j                  |z  |z   f| j                   _        d| j                   _        y)zMove to start of next text linerg   N)r
  rM   rW   rN   )r\   r  r  r   r   r  r  s          rB   do_T_azPDFPageInterpreter.do_T_aK  st    !^^22Aq!QNN""Q&*NN""Q&*!
 %+!rA   seqc                 ,   | j                   j                  t        j                  rt	        d      y| j
                  j                  | j                   t        t        |      | j                  j                  | j                  j                                y)z0Show text, allowing individual glyph positioningNzNo font specified!)r
  rR   r   r   rE   r   render_stringr   r   r  ry   re   )r\   r  s     rB   do_TJzPDFPageInterpreter.do_TJX  sl    >>&)*>??!!NNS!!!""$		
rA   sc                 (    | j                  |g       y)z	Show textN)r   r\   r  s     rB   do_TjzPDFPageInterpreter.do_Tje  s    

A3rA   c                 H    | j                          | j                  |g       y)zPMove to next line and show text

        The ' (single quote) operator.
        N)r  r   r  s     rB   do__qzPDFPageInterpreter.do__qi  s    
 	

A3rA   awacc                 l    | j                  |       | j                  |       | j                  |g       y)zqSet word and character spacing, move to next line, and show text

        The " (double quote) operator.
        N)r  r  r   )r\   r  r  r  s       rB   do__wzPDFPageInterpreter.do__wq  s'    
 	

2

2

A3rA   c                      y)zBegin inline image objectNr@   r[   s    rB   do_BIzPDFPageInterpreter.do_BIz  r=  rA   c                      y)zBegin inline image dataNr@   r[   s    rB   do_IDzPDFPageInterpreter.do_ID}  r=  rA   c                    t        |t              rwd|v rrd|v rmt        t        |            }| j                  j                  |dt               | j                  j                  ||       | j                  j                  |       yyyy)zEnd inline image objectWHr   r   r   r   N)	r   r$   rj   idr   begin_figurer3   render_image
end_figure)r\   rd   iobjids      rB   do_EIzPDFPageInterpreter.do_EI  sl    c9%#*C\FKK$$V\?KKK$$VS1KK""6*	 :D*%rA   
xobjid_argc           	         t        |      }	 t        | j                  |         }t        j                  d|       |j                  d      }|t        u rd|v r| j                         }t        t        t        |d               }t        t        t        |j                  dt                           }|j                  d      }|rt#        |      }	n| j$                  j'                         }	| j(                  j+                  |||       |j-                  |	|gt/        || j0                               | j(                  j3                  |       y|t4        u rad	|v r]d
|v rY| j(                  j+                  |dt                | j(                  j7                  ||       | j(                  j3                  |       yy# t        $ r! t        j
                  rt        d|z        Y yw xY w)zInvoke named XObjectzUndefined xobject id: %rNzProcessing xobj: %rr   BBoxr4   	Resourcesr  WidthHeightr  )r2   r(   r   r  r   r   rE   r   r   r   LITERAL_FORMr   r   r7   r&   r4   r3   r%   r   re   r   r  render_contentsr9   r  r  LITERAL_IMAGEr  )
r\   r  r  xobjr   interpreterbboxrM   xobjresr   s
             rB   do_DozPDFPageInterpreter.do_Do  s   j)	V 45D
 			'.((9%l"v~((*Kjf67D&*TXXh-P"QRF hh{+G&w/	 NN//1	KK$$VT6:''1 ( 
 KK""6*%'T/h$>NKK$$V\?KKK$$VT2KK""6* ?  	)*Dv*MNN	s   F6 6'G G pagec                    t         j                  d|       |j                  \  }}}}|j                  dk(  r
dddd| |f}n;|j                  dk(  r	dddd||f}n#|j                  dk(  r
dddd|| f}n
dddd| | f}| j                  j                  ||       | j                  |j                  |j                  |       | j                  j                  |       y )	NzProcessing page: %rZ   r   r      i  r  )
r   r   mediaboxrotater   
begin_pager!  r   contentsend_page)r\   r(  x0y0rJ  rK  r  s          rB   process_pagezPDFPageInterpreter.process_page  s    		'.==RR;;"b!QR(C[[Cq!RR(C[[CaQRC(CaAsRC(CtS)T^^T]]DT"rA   r   c                     t         j                  d|||       | j                  |       | j                  |       | j	                  t        |             y)zTRender the content streams.

        This method may be called recursively.
        z1render_contents: resources=%r, streams=%r, ctm=%rN)r   r   r  r  executer&   )r\   r   r   r  s       rB   r!  z"PDFPageInterpreter.render_contents  sI     			?		
 	I&Z()rA   c                    	 t        |      }	 	 |j                         \  }}t        |t              rt        |      }d|j                  dd      j                  dd      j                  dd      z  }t        | |      rt        | |      }|j                  j                  dz
  }|r<| j                  |      }	t        j                  d	||	       t        |	      |k(  rU ||	  nOt        j                  d
|        |        n1t        j                   r!d|z  }
t#        |
      | j%                  |       $# t        $ r Y y w xY w# t        $ r Y y w xY w)Nzdo_%s*_a"_w'_qr   zexec: %s %rzexec: %szUnknown operator: %r)r   r)   
nextobjectr   r-   r1   replacehasattrgetattr__code__co_argcountr  r   r   r   r   r   rE   r   )r\   r   parserr   rd   r   methodfuncnargsargsr   s              rB   r6  zPDFPageInterpreter.execute  s=   	%g.F !,,.C #y)#C( 4<<T#:#B#B3#M#U#U$  4("40D MM559E#xx		-t<t9- $K		*d3__ 6 =I-i88		#5   		  s"   D2 E 2	D>=D>	EE)rO   r   rh   )dr=   r>   r?   r   r}   r   r]   r   r   r   r  r4   r  	PDFStackTr   r   r   r  r	   rL   rl   r  r  r  r  r'  r+  r-  r/  r2  r5  r7  r9  r<  rF  rI  rX  rZ  r]  ra  rg  rk  rm  rp  rr  rt  rv  rx  rz  r|  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r
  r  r  r  r'  r!   r4  r3   r   r!  r6  r@   rA   rB   r   r   k  sp   
 2 I $ 9'4VV^(< '4 '4R
,f 
, 
,"	 "d "S T)_ K5)N#O K&V\?:;& 
&56
** * 	*
 * * * 
*(6i 6D 6,I ,$ ,.Y .4 .2y 2T 2/ /9 / /*I *$ *.Y .4 .F) F F'i 'I '$ ''i 'I '$ ''' ' 	'
 ' ' ' 
'@'y 'i 'Y 'I 'RV ''y 'i 'Y 'I 'RV '$(y (Y (9 ( (t (&


E




B4	M) 	M 	MM) M M
= 
=t 
=
= 
=t 
=
<y 
<Y 
<9 
< 
<
<y 
<Y 
<9 
< 
<
=i 
=I 
=) 
=	 
=d 
=
=i 
=I 
=) 
=	 
=d 
=+Z+Z4& 4T 4 *( t  9  )  ) I $ 19 1 119 1 1-9 - -0Y 04 01I 1 1t 1,	-I 	-$ 	-)) ) )+	 +y +T +$+	 +y +T +.// / 	/
 / / / 
/*+
 
t 
y T y T 	 y Y 4 (&+ +t +$	 $d $L# #T #& &	*'* &!* 	*
 
*( x/  D  rA   r   )Yloggingr   ior   typingr   r   r   r   r   r	   r
   r   pdfminerr   pdfminer.castingr   r   r   r   r   pdfminer.cmapdbr   r   r   pdfminer.pdfcolorr   r   pdfminer.pdfdevicer   r   pdfminer.pdfexceptionsr   r   pdfminer.pdffontr   r   r   r   r   r    pdfminer.pdfpager!   pdfminer.pdftypesr"   r#   r$   r%   r&   r'   r(   pdfminer.psexceptionsr)   r*   pdfminer.psparserr+   r,   r-   r.   r/   r0   r1   r2   pdfminer.utilsr3   r4   r5   r6   r7   r8   r9   	getLoggerr=   r   r;   rE   r   r   r   r   r"  rL   floatColorrl   r}   r   rI  r   r@   rA   rB   <module>r\     s[    	  N N N  S S 2 2 B 4 >  %   5	 	 	   g!	| 		, 	 %j6{6{6{G4! 4!n 			%
	%u
$%'	/
 /
dE EPg$}U9i+?%@A g$T 	"	 6F FrA   