
    ,hs                     B   d dl Z d dlZd dlZd dlmZ d dlZddlmZ ddlm	Z	 ddlm
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddl#m$Z$ ddl#m%Z% ddl#m&Z& ddl#m'Z'  e jP                  e)      Z*d Z+d  Z, G d! d"e-      Z. G d# d$e!      Z/d%Z0d&d'd&d'd(d)d*Z1d+ Z2 G d, d-e-      Z3 G d. d/e-      Z4 G d0 d1e      Z5 G d2 d3e5      Z6 ed4      Z7 ed5      Z8 G d6 d7e-      Z9 G d8 d9e9      Z: G d: d;e:      Z; G d< d=e;      Z< G d> d?e:      Z= G d@ dAe9      Z>dB Z?e)dCk(  r# ej                   e?ej                               yy)D    N)BytesIO   )settings)CMap)CMapDB)
CMapParser)FileUnicodeMap)
EncodingDB)name2unicodeFONT_METRICS)PDFException)	PDFStream)resolve1)
dict_value)	int_value)
list_value)	num_value)r   resolve_all)stream_value)KWD)LIT)PSEOF)	PSLiteral)PSStackParser)literal_name)apply_matrix_norm)choplist)isnumber)nunpackc                 "   i }g }| D ]  }t        |t              r&|s|d   }t        |      D ]  \  }}||||z   <    g }9t        |      sE|j	                  |       t        |      dk(  se|\  }}}t        ||dz         D ]  }|||<   	 g } |S )N   r   )
isinstancelist	enumerater   appendlenrange)seqwidthsrvchar1iwchar2s           R/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/pdfminer/pdffont.py
get_widthsr3   &   s    F
A a"'l (FQ&'F57O(a[HHQK1v{$%!queAg. "A !F1I" M    c                 R   i }g }| D ]  }t        |t              r8|s|d   }t        t        d|            D ]  \  }\  }}}|||ff|||z   <    g }Kt	        |      sW|j                  |       t        |      dk(  sw|\  }}	}}}t        ||	dz         D ]  }|||ff||<    g } |S )Nr"   r#      r   )r$   r%   r&   r   r   r'   r(   r)   )
r*   r+   r,   r-   r.   r/   r0   vxvyr1   s
             r2   get_widths2r9   9   s    F
A a"(1(1a.(A 4$QB'(2r(mF57O4a[HHQK1v{,-)q"bueAg. .A!"RHF1I. Mr4   c                       e Zd Zed        Zy)FontMetricsDBc                     t         |   S Nr   )klassfontnames     r2   get_metricszFontMetricsDB.get_metricsO   s    H%%r4   N)__name__
__module____qualname__classmethodr@    r4   r2   r;   r;   M   s    & &r4   r;   c                       e Zd Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z	 ed      Z
 ed      Zd	 Zd
 Zd Zy)Type1FontHeaderParsers   begins   ends   defs   puts   dicts   arrays   readonlys   forc                 >    t        j                  | |       i | _        y r=   )r   __init___cid2unicode)selfdatas     r2   rI   zType1FontHeaderParser.__init___   s    tT*r4   c                     	 	 | j                         \  }}	 t        |      | j                  |<   .# t        $ r Y | j                  S w xY w# t        $ r(}t
        j                  t        |             Y d}~Gd}~ww xY w)a  Parse the font encoding

        The Type1 font encoding maps character codes to character names. These character names could either be standard
        Adobe glyph names, or character names associated with custom CharStrings for this font. A CharString is a
        sequence of operations that describe how the character should be drawn.
        Currently, this function returns '' (empty string) for character names that are associated with a CharStrings.

        References: http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/T1_SPEC.pdf

        :returns mapping of character identifiers (cid's) to unicode characters
        N)
nextobjectr   r   rJ   KeyErrorlogdebugstr)rK   cidnamees       r2   get_encodingz"Type1FontHeaderParser.get_encodingd   s     "oo/d")5d);!!#&   
      "		#a&!!"s&   0 A
 	AA
	A;A66A;c                     || j                   u rV| j                  d      \  \  }}\  }}t        |t              r,t        |t              r| j                  |t        |      f       y )N   )KEYWORD_PUTpopr$   intr   add_resultsr   )rK   postoken_keyvalues         r2   
do_keywordz Type1FontHeaderParser.do_keyword{   sY    D$$$%)XXa["Xaz53$5),  #|E':!;<r4   N)rA   rB   rC   r   KEYWORD_BEGINKEYWORD_ENDKEYWORD_DEFrY   KEYWORD_DICTKEYWORD_ARRAYKEYWORD_READONLYKEYWORD_FORrI   rV   rb   rE   r4   r2   rG   rG   T   s[    MMf+Kf+Kf+Kw<LMM;'f+K
!.r4   rG   )0123456789.rU   ze-N-
Identity-H
Identity-VOneByteIdentityHOneByteIdentityV)rv   rw   z	DLIdent-Hz	DLIdent-Vrx   ry   c                    i }t        |       }g }	 |j                  d      }|s	 |S t        |      }|dk  r|||<   g }/|dk(  rRd}d}|r@t        |j                  d            }|dz	  |dz  fD ]  }	|	dk(  rd}|t        |	   z  } |r@t	        |      }
nd	|k  r|d
k  r|dz
  }
nt        |j                  d            }d|k  r|dk  r|dz
  dz  |z   dz   }
nd|k  r|dk  r|dz
  dz   |z
  dz
  }
nft        |j                  d            }d|k  r|dz  }|dk(  r	|dz  |z  }
n4|dz  |dz  z  t        j                  d|j                  d            d   z  }
|j                  |
       [)Nr          T      F                   l                        >HrX   r   )r   readordNIBBLESfloatstructunpackr'   )rL   dfpstackcb0sloopbnra   b1b2s                r2   getdictr      s   
A	BE
GGAJD HC V8AbEE8AD
Oq&!b&) (ABw$WQZ	(  !HE2X")sFERWWQZBbyR3YS&Q*3.rSyc6a-(+C/_"9#IB8!GbLE"HrRx/&--bggaj2QRS2TTEUI r4   c                   2    e Zd ZdZ G d de      Zd Zd Zy)CFFFont(  z.notdefspaceexclamquotedbl
numbersigndollarpercent	ampersand
quoteright	parenleft
parenrightasteriskpluscommahyphenperiodslashzeroonetwothreefourfivesixseveneightninecolon	semicolonlessequalgreaterquestionatABCDEFGHIJKLMNOPQRSTUVWXYZbracketleft	backslashbracketrightasciicircum
underscore	quoteleftar   r   r   rU   fghr/   jklmr   opqr,   r   tur-   r0   xyz	braceleftbar
braceright
asciitilde
exclamdowncentsterlingfractionyenflorinsectioncurrencyquotesinglequotedblleftguillemotleftguilsinglleftguilsinglrightfiflendashdagger	daggerdblperiodcentered	paragraphbulletquotesinglbasequotedblbasequotedblrightguillemotrightellipsisperthousandquestiondowngraveacute
circumflextildemacronbreve	dotaccentdieresisringcedillahungarumlautogonekcaronemdashAEordfeminineLslashOslashOEordmasculineaedotlessilslashoslashoe
germandblsonesuperior
logicalnotmu	trademarkEthonehalf	plusminusThorn
onequarterdivide	brokenbardegreethornthreequarterstwosuperior
registeredminusethmultiplythreesuperior	copyrightAacuteAcircumflex	AdieresisAgraveAringAtildeCcedillaEacuteEcircumflex	EdieresisEgraveIacuteIcircumflex	IdieresisIgraveNtildeOacuteOcircumflex	OdieresisOgraveOtildeScaronUacuteUcircumflex	UdieresisUgraveYacute	YdieresisZcaronaacuteacircumflex	adieresisagravearingatildeccedillaeacuteecircumflex	edieresisegraveiacuteicircumflex	idieresisigraventildeoacuteocircumflex	odieresisograveotildescaronuacuteucircumflex	udieresisugraveyacute	ydieresiszcaronexclamsmallHungarumlautsmalldollaroldstyledollarsuperiorampersandsmall
Acutesmallparenleftsuperiorparenrightsuperiortwodotenleaderonedotenleaderzerooldstyleoneoldstyletwooldstylethreeoldstylefouroldstylefiveoldstylesixoldstylesevenoldstyleeightoldstylenineoldstylecommasuperiorthreequartersemdashperiodsuperiorquestionsmall	asuperior	bsuperiorcentsuperior	dsuperior	esuperior	isuperior	lsuperior	msuperior	nsuperior	osuperior	rsuperior	ssuperior	tsuperiorffffifflparenleftinferiorparenrightinferiorCircumflexsmallhyphensuperior
GravesmallAsmallBsmallCsmallDsmallEsmallFsmallGsmallHsmallIsmallJsmallKsmallLsmallMsmallNsmallOsmallPsmallQsmallRsmallSsmallTsmallUsmallVsmallWsmallXsmallYsmallZsmallcolonmonetary	onefittedrupiah
TildesmallexclamdownsmallcentoldstyleLslashsmallScaronsmallZcaronsmallDieresissmall
Brevesmall
CaronsmallDotaccentsmallMacronsmall
figuredashhypheninferiorOgoneksmall	RingsmallCedillasmallquestiondownsmall	oneeighththreeeighthsfiveeighthsseveneighthsonethird	twothirdszerosuperiorfoursuperiorfivesuperiorsixsuperiorsevensuperioreightsuperiorninesuperiorzeroinferioroneinferiortwoinferiorthreeinferiorfourinferiorfiveinferiorsixinferiorseveninferioreightinferiornineinferiorcentinferiordollarinferiorperiodinferiorcommainferiorAgravesmallAacutesmallAcircumflexsmallAtildesmallAdieresissmall
AringsmallAEsmallCcedillasmallEgravesmallEacutesmallEcircumflexsmallEdieresissmallIgravesmallIacutesmallIcircumflexsmallIdieresissmallEthsmallNtildesmallOgravesmallOacutesmallOcircumflexsmallOtildesmallOdieresissmallOEsmallOslashsmallUgravesmallUacutesmallUcircumflexsmallUdieresissmallYacutesmall
ThornsmallYdieresissmallz001.000z001.001z001.002z001.003BlackBoldBookLightMediumRegularRomanSemiboldc                   *    e Zd Zd Zd Zd Zd Zd Zy)CFFFont.INDEXc                    || _         g | _        t        j                  d| j                   j	                  d            \  }}t        |dz         D ]?  }| j                  j                  t        | j                   j	                  |                   A | j                   j                         dz
  | _	        | j                   j                  | j                  | j                  d   z          y )Nz>HBr#   r   r"   )r   offsetsr   r   r   r)   r'   r    tellbaseseek)rK   r   countoffsizer/   s        r2   rI   zCFFFont.INDEX.__init__  s    DGDL%}}UDGGLLODUG57^ D##GDGGLL,A$BCDq(DIGGLL4<<#334r4   c                     dt        |       z  S )Nz<INDEX: size=%d>)r(   rK   s    r2   __repr__zCFFFont.INDEX.__repr__  s    %D	11r4   c                 2    t        | j                        dz
  S Nr   )r(   r  r%  s    r2   __len__zCFFFont.INDEX.__len__  s    t||$Q&&r4   c                     | j                   j                  | j                  | j                  |   z          | j                   j	                  | j                  |dz      | j                  |   z
        S r(  )r   r!  r   r  r   )rK   r/   s     r2   __getitem__zCFFFont.INDEX.__getitem__"  sP    GGLL4<<?2377<<QqS 1$,,q/ ABBr4   c                 P     t         fdt        t                     D              S )Nc              3   (   K   | ]	  }|     y wr=   rE   ).0r/   rK   s     r2   	<genexpr>z)CFFFont.INDEX.__iter__.<locals>.<genexpr>'  s     :AQ:s   )iterr)   r(   r%  s   `r2   __iter__zCFFFont.INDEX.__iter__&  s    :s4y)9:::r4   N)rA   rB   rC   rI   r&  r)  r+  r1  rE   r4   r2   INDEXr    s    		2	'	C	;r4   r2  c           	       
   || _         || _        t        j                  d| j                  j	                  d            \  }}}}| j                  j	                  |dz
         | j                  | j                        | _        | j                  | j                        | _        | j                  | j                        | _        | j                  | j                        | _	        t        | j                  d         | _        | j                  j                  ddg      \  }| j                  j                  ddg      \  }| j                  j                  ddg      \  }	| j                  j                  |	       | j                  | j                        | _        t        | j                        | _        i | _        i | _        | j                  j                  |       | j                  j	                  d      }
|
dk(  rt        j                  d	| j                  j	                  d            \  }t'        t        j                  d	|z  | j                  j	                  |                  D ]#  \  }}|| j"                  |<   || j$                  |<   % n|
d
k(  rt        j                  d	| j                  j	                  d            \  }d}t)        |      D ]n  }t        j                  d| j                  j	                  d            \  }}t)        |||z   dz         D ]%  }|| j"                  |<   || j$                  |<   |dz  }' p nt+        d|
z        i | _        i | _        | j                  j                  |       | j                  j	                  d      }
|
dk(  r| j                   dz
  }t'        t        j                  dd|z  z   | j                  j	                  d|z                    D ]9  \  }}|dz  }| j1                  |      }|| j,                  |<   || j.                  |<   ; y |
d
k(  rt        j                  d	| j                  j	                  d            \  }d}t)        |      D ]  }t        j                  d| j                  j	                  d            \  }}t)        |||z   dz         D ]6  }| j1                  |      }|| j,                  |<   || j.                  |<   |dz  }8  y |
dk(  rJ t3        d|
f             t+        d|
z        )NBBBBr~   r   r   r      r       r      BBrX   zunsupported encoding format: %r>r      	Unhandledzunsupported charset format: %r)rT   r   r   r   r   r2  
name_index
dict_indexstring_index
subr_indexr   top_dictgetr!  
charstringr(   nglyphscode2gidgid2coder&   r)   
ValueErrorname2gidgid2namegetstrrR   )rK   rT   r   _major_minorhdrsizer#  charset_posencoding_poscharstring_posformatr   codegidr/   firstnleftsids                     r2   rI   zCFFFont.__init__)  s)   	-3]]6477<<PQ?-S*'WQY**TWW-**TWW- JJtww/**TWW- 23**2s3--++B4 MM--b1#6^$**TWW-4??+\"aW==dggll1o6DQ(s1udggll1o)NO *s&)d#%)c"* w==dggll1o6DQD1X !'tTWW\\!_!E eA6 C*-DMM$')-DMM#&AID >GHH[!aWQA'c#a%iaPQcAR(ST *
cq{{3'&)d#%)c"	** 	! w==dggll1o6DQC1X !'tTWW\\!_!E eA6 C;;s+D*-DMM$')-DMM#&1HC	 	 w4#{F344=FGGr4   c                     |t        | j                        k  r| j                  |   S | j                  |t        | j                        z
     S r=   )r(   STANDARD_STRINGSr>  )rK   rU  s     r2   rI  zCFFFont.getstrv  sG    T**++((--  S)>)>%?!?@@r4   N)rA   rB   rC   rW  objectr2  rI   rI  rE   r4   r2   r   r      s%    Od; ;2KZAr4   r   c                   .    e Zd Z G d de      Zd Zd Zy)TrueTypeFontc                       e Zd Zy)TrueTypeFont.CMapNotFoundNrA   rB   rC   rE   r4   r2   CMapNotFoundr\  ~  s    r4   r^  c                 z   || _         || _        i | _        |j                  d      | _        	 t        j                  d|j                  d            \  }}}}t        |      D ]=  }t        j                  d|j                  d            \  }}}	}
|	|
f| j                  |<   ? 	 y # t
        j                  $ r Y y w xY w)Nr~   >HHHHr   z>4sLLLr   )	rT   r   tablesr   fonttyper   r   r)   error)rK   rT   r   ntables_1_2_3r_   tsumoffsetlengths              r2   rI   zTrueTypeFont.__init__  s    	
		$*MM'2771:$F!Wb"b7^ 5/5}}Xrwwr{/S,tVV%+V$4D!5 	 || 	 	s   A5B$ $B:9B:c                    d| j                   vrt        j                  | j                   d   \  }}| j                  }|j	                  |       t        j                  d|j                  d            \  }}g }t        |      D ]6  }|j                  t        j                  d|j                  d                   8 i }|D ]c  \  }	}
}|j	                  ||z          t        j                  d|j                  d            \  }}}|dk(  r>|j                  t        t        j                  d	|j                  d
                         |dk(  r/t        j                  d|j                  d            }dgdz  }t        |      D ]  \  }}|||dz  <    t        |      dz  dz   }g }t        |      D ]V  }t        j                  d|j                  d            \  }}}}|j                  |||||j                         dz
  |z   f       X |D ]k  \  }}}}}|s|||   dz  z   }|j	                  |       t        |      D ]6  }t        j                  d|j                  d            }|r||z  }||||z   <   8 m |dk(  rt        j                  d|j                  d            \  }}	}
}|dz  }t        j                  d|z  |j                  d|z              }|j                  d       t        j                  d|z  |j                  d|z              }t        j                  d|z  |j                  d|z              } |j                         }t        j                  d|z  |j                  d|z              }!t        ||| |!      D ]  \  }"}#}$}%|%rZ|j	                  ||%z          t        |#|"dz         D ]3  }t        j                  d|j                  d            d   |$z   dz  ||<   5 dt        |#|"dz         D ]  }||$z   dz  ||<     TJ t        d|f              t!               }&t#        j$                  |      D ]  \  }'}|&j'                  ||'        |&S )Ncmapz>HHr~   z>HHLr   z>HHH   r   z>256Br   rX   z>256Hi   i    r   z>HHhHr   r`  z>%dHz>%dhi  r;  )ra  rZ  r^  r   r!  r   r   r   r)   r'   updater&   maxr  ziprR   r	   r   	iteritemsadd_cid2unichr)(rK   base_offsetrj  r   version
nsubtables	subtablesr/   char2gidre  rf  	st_offsetfmttypefmtlenfmtlangsubheaderkeys
firstbytesr   nhdrshdrs	firstcodeentcountdeltari  r]   rS  r   rR  segcountrg  ecsscsiddsidrsecsciddidrunicode_mapchars(                                           r2   create_unicode_mapzTrueTypeFont.create_unicode_map  s/   $+++ $F 3fWW
 &eRWWQZ @*	z" 	@AV]]62771:>?	@#, +	:RYGGK	)*)/vrwwqz)J&Wfg!|	&--*N OPA &grwws| DSX
'6 )FQ'(Jq!t$)M*A-1u UA;A==RTRYRYZ[R\;]8Y%KKIx	!F@R STU =A 	08Q	8UC# %A!);<EGGCL"8_ 0$mmD"''!*=5LC,/q)	0	0 A)/w
)K&2r2QmmFX$5rwwqz7JK
mmFX$5rwwqz7JK}}Vh%6(
8KLggi}}Vh%6(
8KL*-c3d*C =&RS#C(!&r2a4 ^A+1==rwwqz+J1+MPS+SW]*]HQK^ "'r2a4 =A+,s7f*<HQK== :c;"899W+	:Z %&==2 	2KT3&&sD1	2r4   N)rA   rB   rC   	Exceptionr^  rI   r  rE   r4   r2   rZ  rZ  |  s    y "<r4   rZ  c                       e Zd Zy)PDFFontErrorNr]  rE   r4   r2   r  r        r4   r  c                       e Zd Zy)PDFUnicodeNotDefinedNr]  rE   r4   r2   r  r    r  r4   r  StandardEncodingType1Cc                   V    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zy)PDFFontNc                    || _         t        |      | _        t        |j	                  dd            | _        t        | j
                  t              rt        | j
                        | _        t        |j	                  dd            | _
        t        |j	                  dd            | _        t        |j	                  dd            | _        t        |j	                  dd            | _        |xs t        |j	                  dd            | _        t        |j	                  d	d            | _        t#        t        |j	                  d
d                  | _        dx| _        | _        | j                  dkD  r| j                   | _        y )NFontNameunknownFlagsr   AscentDescentItalicAngleMissingWidthLeadingFontBBox)r   r   r   r   gMbP?)
descriptorr   r+   r   rA  r?   r$   r   r   r   flagsr   ascentdescentitalic_angledefault_widthleadingr   bboxhscalevscale)rK   r  r+   r  s       r2   rI   zPDFFont.__init__  s$   $!&) 
I!FGdmmY/(7DMz~~gq9:

x ;< 	1!=>%jnn]A&FG*Zi
~WX8Y.Z 	1!=>{:>>*l+STU	$((dk <<! LL=DLr4   c                      y)Nz	<PDFFont>rE   r%  s    r2   r&  zPDFFont.__repr__  s    r4   c                      yNFrE   r%  s    r2   is_verticalzPDFFont.is_vertical      r4   c                      yr  rE   r%  s    r2   is_multibytezPDFFont.is_multibyte  r  r4   c                     t        |      S r=   )	bytearrayrK   bytess     r2   decodezPDFFont.decode  s    r4   c                 4    | j                   | j                  z  S )z.Ascent above the baseline, in text space units)r  r  r%  s    r2   
get_ascentzPDFFont.get_ascent  s    {{T[[((r4   c                 4    | j                   | j                  z  S )z@Descent below the baseline, in text space units; always negative)r  r  r%  s    r2   get_descentzPDFFont.get_descent  s    ||dkk))r4   c                     | j                   d   | j                   d   z
  }|dk(  r| j                   }|| j                  z  S )NrX   r   )r  r  r  )rK   r0   s     r2   	get_widthzPDFFont.get_width	  s?    IIaL1%6###A4;;r4   c                     | j                   d   | j                   d   z
  }|dk(  r| j                  | j                  z
  }|| j                  z  S )Nr#   r   r   )r  r  r  r  )rK   r   s     r2   
get_heightzPDFFont.get_height  sC    IIaL1%6dll*A4;;r4   c                    	 | j                   |   | j                  z  S # t        $ r_ 	 | j                   | j                  |         | j                  z  cY S # t        t        f$ r | j
                  | j                  z  cY cY S w xY ww xY wr=   )r+   r  rO   	to_unichrr  r  rK   rS   s     r2   
char_widthzPDFFont.char_width  s~    	8;;s#dkk11 	88{{4>>##67$++EE23 8))DKK778	8s,    	B*AB(B=BBBc                      y)Nr   rE   r  s     r2   	char_dispzPDFFont.char_disp  s    r4   c                 J     t         fd j                  |      D              S )Nc              3   @   K   | ]  }j                  |        y wr=   )r  )r.  rS   rK   s     r2   r/  z'PDFFont.string_width.<locals>.<genexpr>"  s     BC4??3'Bs   )sumr  )rK   r   s   ` r2   string_widthzPDFFont.string_width!  s    B4;;q>BBBr4   r=   )rA   rB   rC   rI   r&  r  r  r  r  r  r  r  r  r  r  rE   r4   r2   r  r    s?    . )*8Cr4   r  c                       e Zd Zd Zd Zy)PDFSimpleFontc                 <   d|v rt        |d         }nt        }t        |t              rVt	        |j                  dt                    }t        |j                  dg             }t        j                  ||      | _	        n#t        j                  t	        |            | _	        d | _
        d|v rXt        |d         }t               | _
        t        | j                  t        |j                                     j!                          t"        j%                  | ||       y )NEncodingBaseEncodingDifferences	ToUnicode)r   LITERAL_STANDARD_ENCODINGr$   dictr   rA  r   r
   rV   cid2unicoder  r   r	   r   r   get_datarunr  rI   )rK   r  r+   specencodingrT   diffstrms           r2   rI   zPDFSimpleFont.__init__'  s     Z 01H0Hh%^=V WXDhll="=>D)66tTBD)66|H7MND$[ 12D-/Dt'')ABFFHz62r4   c                     | j                   r	 | j                   j                  |      S 	 | j                  |   S # t        $ r Y w xY w# t        $ r t	        d |      w xY wr=   )r  
get_unichrrO   r  r  r  s     r2   r  zPDFSimpleFont.to_unichr=  sn    ''22377	2##C((    	2&tS11	2s   9 A 	AAAN)rA   rB   rC   rI   r  rE   r4   r2   r  r  %  s    ,	2r4   r  c                       e Zd Zd Zd Zy)PDFType1Fontc                    	 t        |d         | _        	 t        j                  | j                        \  }}t        j                  | |||       d
|vrd|v r}t!        |j                  d            | _        t        | j"                  d         }| j"                  j%                         d | }t'        t)        |            }|j+                         | _        y # t        $ r% t        j                  rt        d      d| _        Y w xY w# t        $ rv t        |j                  di             }t        |j                  dd            t        |j                  ddgdz              }t        fd	t        |      D              }Y Mw xY w)NBaseFontBaseFont is missingr  FontDescriptor	FirstCharr   Widthsr   c              3   2   K   | ]  \  }}|z   |f  y wr=   rE   r.  r/   r0   	firstchars      r2   r/  z(PDFType1Font.__init__.<locals>.<genexpr>Y  s     Kv11Y;*K   r  FontFileLength1)r   basefontrO   r   STRICTr  r;   r@   r   rA  r   r   r  r&   r  rI   r   fontfiler  rG   r   rV   r  )	rK   rsrcmgrr  r  r+   length1rL   parserr  s	           @r2   rI   zPDFType1Font.__init__K  sX   	&(j)9:DM
	L#0#<#<T]]#K Z 	tZ>T!jJ&>(
)CDDMi 89G==))+HW5D*74=9F%224D)  	&"#899%DM	&  	L#DHH-=r$BCJ!$((;":;IA3s7 ;<FK69JKKF	Ls#   C "D +DDA;FFc                      d| j                   z  S )Nz<PDFType1Font: basefont=%r>r  r%  s    r2   r&  zPDFType1Font.__repr__d  s    ,t}}<<r4   NrA   rB   rC   rI   r&  rE   r4   r2   r  r  I  s    2=r4   r  c                       e Zd Zd Zy)PDFTrueTypeFontc                      d| j                   z  S )Nz<PDFTrueTypeFont: basefont=%r>r  r%  s    r2   r&  zPDFTrueTypeFont.__repr__j  s    /$--??r4   N)rA   rB   rC   r&  rE   r4   r2   r  r  h  s    @r4   r  c                       e Zd Zd Zd Zy)PDFType3Fontc                    t        |j                  dd            t        |j                  ddgdz              }t        fdt	        |      D              }d|v rt        |d         }n	dd|d   d}t        j                  | |||       t        t        |j                  d	                  | _	        | j                  \  }| _        }| _        t        | j                  d
      \  | _        | _        y )Nr  r   r  r   c              3   2   K   | ]  \  }}|z   |f  y wr=   rE   r  s      r2   r/  z(PDFType3Font.__init__.<locals>.<genexpr>t  s     G6Aqq{A&Gr  r  r  )r  r  r  
FontMatrix)r   r   )r   rA  r   r  r&   r   r  rI   tuplematrixr  r  r  r   r  r  )rK   r  r  r+   r  r_   r  s         @r2   rI   zPDFType3Font.__init__p  s    dhh{A67	DHHXs3w78GYv5FGGt##D)9$:;J$%!&*:&68JtZ>Jtxx'=>?,0II)DL!T[%6t{{F%K"dkr4   c                      y)Nz<PDFType3Font>rE   r%  s    r2   r&  zPDFType3Font.__repr__  s    r4   Nr  rE   r4   r2   r  r  n  s      r4   r  c                   T    e Zd Zej                  fdZd Zd Zd Zd Z	d Z
d Zd Zy	)

PDFCIDFontc                    	 t        |d         | _        t	        |j                  di             | _        t        | j                  j                  dd            j                  d      dt        | j                  j                  d	d            j                  d      | _	        | j                  ||      | _        	 t	        |d
         }d }d|v rVt        |j                  d            | _        t        | j                  t        | j                  j!                                     }d | _        d|v rYt        |d         }t%               | _        t'        | j"                  t        |j!                                     j)                          ne| j                  dv r|rU	 |j+                         | _        n>	 t/        j0                  | j                  | j                  j3                               | _        | j                  j3                         | _        | j4                  rt7        t9        |j                  dg                   }t;        d t=        j>                  |      D              | _         |j                  dddg      \  }	}
d |	f| _!        t;        d t=        j>                  |      D              }|
}nDi | _         d| _!        tE        t9        |j                  dg                   }|j                  dd      }tF        jI                  | |||       y # t        $ r |rt        d      d| _        Y w xY w# t        $ r |rt        d      i }Y w xY w# t        j,                  $ r Y xw xY w# t.        j,                  $ r}Y d }~d }~ww xY w)Nr  r  r  CIDSystemInfoRegistrys   unknownlatin1ru   Orderingr  zFontDescriptor is missing	FontFile2r  )zAdobe-Identityz	Adobe-UCSW2c              3   :   K   | ]  \  }\  }\  }}|||ff  y wr=   rE   )r.  rS   r_   r7   r8   s        r2   r/  z&PDFCIDFont.__init__.<locals>.<genexpr>  s%     `2F3HRsRHo`s   DW2ip  ic              3   0   K   | ]  \  }\  }}||f  y wr=   rE   )r.  rS   r0   r_   s       r2   r/  z&PDFCIDFont.__init__.<locals>.<genexpr>  s     N}Va3(Ns   r   r   DWi  )r  )%r   r  rO   r  r   rA  cidsysteminfor   r  	cidcodingget_cmap_from_specrl  r   r  rZ  r   r  r  r	   r   r  r  r^  r   get_unicode_mapr  verticalr9   r   r  r   rq  dispsdefault_dispr3   r  rI   )rK   r  r  strictr  ttfr  rU   r+   r8   r0   r  s               r2   rI   zPDFCIDFont.__init__  s   	&(j)9:DM
 ("(EF$,T-?-?-C-CJPZ-[$\$c$cdl$m$,T-?-?-C-CJPZ-[$\$c$cdl$mo++D&9		#D)9$:;J
 *$()DEDMt}}&t}}'='='?@BC$[ 12D-/Dt'')ABFFH^^>>'*'='='?D$#)#9#9$..$))J_J_Ja#b  		--/== DHHT2,>!?@F`#--X^J_``DJhhusEl3GR!%r
DNf8MNNFM DJ !D
488C+< =>F HHT40Mz6Ok  	&"#899%DM	&  	"#>??J	$ $00 
 && sG   L =L3 M 3=M, L0/L03MMM)(M),N
N
c                 x   	 |d   }t        |d      rt        |d         }nt        |d         }t	        |      t
        u r/d|v r|j                  d      j                  }n|rt        d      d}|t        v rt        j                  t        |         S t               S # t        $ r |rt        d      d}Y w xY w)aM  
        For certain PDFs, Encoding Type isn't mentioned as an attribute of
        Encoding but as an attribute of CMapName, where CMapName is an
        attribute of spec['Encoding'].
        The horizontal/vertical modes are mentioned with different name
        such as 'DLIdent-H/V','OneByteIdentityH/V','Identity-H/V'.
        r  rT   CMapNamezEncoding is unspecifiedr  z!CMapName unspecified for encoding)hasattrr   rO   r  typer   rA  rT   IDENTITY_ENCODERr   get_cmapr   )rK   r  r  spec_encoding	cmap_names        r2   r  zPDFCIDFont.get_cmap_from_spec  s    		" ,M}f-(j)9:	(z)BC	
 	?i'Y&%MM*5::	&'JKK%	((??#3I#>??6M  	""#<==!I	"s   .B B98B9c                 <    d| j                   d| j                  dS )Nz<PDFCIDFont: basefont=z, cidcoding=r9  )r  r  r%  s    r2   r&  zPDFCIDFont.__repr__  s    <@MM4>>ZZr4   c                     | j                   S r=   )r  r%  s    r2   r  zPDFCIDFont.is_vertical  s    }}r4   c                      y)NTrE   r%  s    r2   r  zPDFCIDFont.is_multibyte  s    r4   c                 8    | j                   j                  |      S r=   )rl  r  r  s     r2   r  zPDFCIDFont.decode  s    yy&&r4   c                 N    | j                   j                  || j                        S )zDReturns an integer for horizontal fonts, a tuple for vertical fonts.)r  rA  r  r  s     r2   r  zPDFCIDFont.char_disp  s    zz~~c4#4#455r4   c                     	 | j                   st        |      | j                   j                  |      S # t        $ r t        | j                  |      w xY wr=   )r  rO   r  r  r  r  s     r2   r  zPDFCIDFont.to_unichr  sQ    	<##sm###..s33 	<&t~~s;;	<s	   14  AN)rA   rB   rC   r   r  rI   r  r&  r  r  r  r  r  rE   r4   r2   r   r     s3    -5__ 8t<['6<r4   r   c                 ~    | dd  D ]5  }t        |d      }t        ||      }t        |       |j                          7 y )Nr   rb)openr   printclose)argvfnamer   fonts       r2   mainr+    sD    ab %ub!t

	
 r4   __main__)Bloggingr   sysior   r   r}   r   cmapdbr   r   r   r	   
encodingdbr
   r   fontmetricsr   pdftypesr   r   r   r   r   r   r   r   r   psparserr   r   r   r   r   r   utilsr   r   r   r    	getLoggerrA   rP   r3   r9   rX  r;   rG   r   r  r   r   rZ  r  r  r  LITERAL_TYPE1Cr  r  r  r  r  r   r+  exitr(  rE   r4   r2   <module>r9     s     
  
     " " $ % "         + "     # " $   g!&(&F &-M -` X ".!- , ,'9'9 )X}Af }A@R6 Rj	< 		< 	   23 XFCf FCR!2G !2H== =>@l @ =  ,p< p<d zCHHT#((^ r4   