
    .i              	          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mZmZmZmZ d dlmZ d dlmZmZ d dlmZmZmZmZmZmZmZ d dlmZm Z  d dl!m"Z" d d	l#m$Z$m%Z%m&Z& d d
l'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? erd dl@mAZA  e jB        eC          ZDde	eE         deeeFeGf         eHf         fdZIde	eE         deeGeeHe;f         f         fdZJ G d d          ZK G d de7eG                   ZLdZMdddZNdeOdeeGeeeHeGf                  f         fdZP G d d          ZQ G d d           ZR G d! d"e$          ZS G d# d$eS          ZT e4d%          ZU e4d&          ZVeeeGeFf         eHf         ZW G d' d(          ZX G d) d*eX          ZY G d+ d,eY          ZZ G d- d.eZ          Z[ G d/ d0eY          Z\ G d1 d2eX          Z]dS )3    N)BytesIO)TYPE_CHECKINGAnyBinaryIODictIterableIteratorListMappingOptionalTupleUnioncast)settings)
safe_floatsafe_rect_list)CMapCMapBaseCMapDB
CMapParserFileUnicodeMapIdentityUnicodeMap
UnicodeMap)
EncodingDBname2unicodeFONT_METRICS)PDFExceptionPDFKeyErrorPDFValueError)	PDFStream
dict_value	int_value
list_value	num_valueresolve1resolve_allstream_value)PSEOF)KWDLIT	PSKeyword	PSLiteralPSStackParserliteral_name)MatrixPointRectapply_matrix_normchoplistnunpack)PDFResourceManagerseqreturnc                 >   i }g }| D ]]}t          |          }t          |t                    r=|r:|d         }t          |          D ] \  }}||t	          t
          |          |z   <   !g }dt          |t
          t          f          r|                    |           t          |          dk    r|\  }}}t          |t
                    rWt          |t
                    rBt          t	          t
          |          t	          t
          |          dz             D ]}|||<   n!t                              d| d| d           g }?t                              d| d           _t	          t          t          t          t
          f         t          f         |          S )z;Build a mapping of character widths for horizontal writing.      z.Skipping invalid font width specification for z to z% because either of them is not an intz% because it is not a number or a list)r&   
isinstancelist	enumerater   intfloatappendlenrangelogwarningr   r   str)r7   widthsrvchar1iwchar2s           L/var/www/html/analyses/venv/lib/python3.11/site-packages/pdfminer/pdffont.py
get_widthsrP   <   s   !FA  QKKa 	 "%aLL 5 5DAq34F4U++a/00C<(( 	HHQKKK1vv{{$%!qeS)) j.D.D "4U#3#3T#u5E5E5IJJ & &$%q		& KK A  A  ATY  A  A  A   KKiiii    U38_e+,f555    c                    i }g }| D ]}t          |t                    rS|rP|d         }t          t          d|                    D ](\  }\  }}}|||ff|t	          t
          |          |z   <   )g }jt          |t
          t          f          rw|                    |           t          |          dk    rO|\  }}	}}}t          t	          t
          |          t	          t
          |	          dz             D ]}|||ff||<   g }|S )z9Build a mapping of character widths for vertical writing.r:   r;      r<   )
r=   r>   r?   r4   r   r@   rA   rB   rC   rD   )
r7   rH   rI   rJ   rK   rL   rM   vxvyrN   s
             rO   get_widths2rV   [   s'   -/FA  a 	 "&/A&?&? A ANA{2r45Bx=F4U++a/00C<(( 	HHQKKK1vv{{,-)q"btC//c51A1AA1EFF . .A!"RHF1IIMrQ   c            	       ^    e Zd Zededeeeef         eeef         f         fd            Z	dS )FontMetricsDBfontnamer8   c                     t           |         S Nr   )clsrY   s     rO   get_metricszFontMetricsDB.get_metricsq   s    H%%rQ   N)
__name__
__module____qualname__classmethodrG   r   r   objectr@   r]    rQ   rO   rX   rX   p   s[        &3 &5c6k1BDcN1R+S & & & [& & &rQ   rX   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	ed
dfdZd
eeef         fdZdeded
dfdZdS )Type1FontHeaderParsers   begins   ends   defs   puts   dicts   arrays   readonlys   fordatar8   Nc                 >    t          j        | |           i | _        d S r[   )r.   __init___cid2unicode)selfrf   s     rO   rh   zType1FontHeaderParser.__init__   s#    tT***,.rQ   c                 :   	 	 |                                  \  }}n# t          $ r Y now xY w	 t          t          t          |                    | j        |<   n># t          $ r1}t                              t	          |                     Y d}~nd}~ww xY w| j        S )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.

        Reference: Adobe Systems Incorporated, Adobe Type 1 Font Format

        :returns mapping of character identifiers (cid's) to unicode characters
        r<   N)	
nextobjectr)   r   r   rG   ri   KeyErrorrE   debug)rj   cidnamees       rO   get_encodingz"Type1FontHeaderParser.get_encoding   s    	""oo//dd   ")5d3oo)F)F!#&& " " "		#a&&!!!!!!!!"	"   s#    
((*A 
B!'BBpostokenc                     || j         u rn|                     d          \  \  }}\  }}t          |t                    r=t          |t                    r*|                     |t          |          f           d S d S d S d S )N   )KEYWORD_PUTpopr=   r@   r-   add_resultsr/   )rj   rs   rt   _keyvalues         rO   
do_keywordz Type1FontHeaderParser.do_keyword   s    D$$$%)XXa[["Xaz5#s## =
5)(D(D =  #|E':':!;<<<<< %$= = = =rQ   )r^   r_   r`   r*   KEYWORD_BEGINKEYWORD_ENDKEYWORD_DEFrw   KEYWORD_DICTKEYWORD_ARRAYKEYWORD_READONLYKEYWORD_FORr   rh   r   r@   rG   rr   r,   r}   rc   rQ   rO   re   re   w   s        CMMM#f++K#f++K#f++K3w<<LCMMMs;''#f++K/X /$ / / / /!d38n ! ! ! !2=c =) = = = = = = =rQ   re   )0123456789.rq   ze-N-z
Identity-Hz
Identity-V)z	DLIdent-Hz	DLIdent-Vrf   c                 b   i }t          |           }g }	 |                    d          }|snt          |          }|dk    r|||<   g }7|dk    rfd}d}|rPt          |                    d                    }|dz	  |dz  fD ]!}	|	dk    rd}t          |	         }
|
J ||
z  }"|Pt	          |          }n|d	k    r|d
k    r|dz
  }nt          |                    d                    }|dk    r|dk    r|dz
  dz  |z   dz   }n|dk    r|dk    r|dz
  dz   |z
  dz
  }nvt          |                    d                    }|dk    r|dz  }|dk    r	|dz  |z  }n:|dz  |dz  z  t          j        d|                    d                    d         z  }|                    |           |S )Nr<          T      F                   l                        >Hrv   r   )r   readordNIBBLESrA   structunpackrB   )rf   dfpstackcb0sloopbnnibbler|   b1b2s                 rO   getdictr      s
   ,.A	B%'E&GGAJJ 	VV88AbEE88AD $

OOq&!b&) $ $ABww$!(%111V  $ !HHEE2XX"))HEERWWQZZBSyyR3YYs(qB.4srSyy8/*R/#5__99#IB88!GbLEE"HrRx/&-bggajj2Q2QRS2TTEUM&N HrQ   c                   `    e Zd ZdZ G d d          ZdededdfdZd	ede	ee
f         fd
ZdS )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   rq   fghrL   jklmr   opqrI   r   turJ   rM   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eddfdZdefdZdefdZdede	fdZ
dee	         fd	ZdS )
CFFFont.INDEXr   r8   Nc                    || _         g | _        t          j        d| j                             d                    \  }}t          |dz             D ]A}| j                            t          | j                             |                               B| j                                         dz
  | _	        | j         
                    | j	        | j        d         z              d S )Nz>HBr;   r<   r:   )r   offsetsr   r   r   rD   rB   r5   tellbaseseek)rj   r   countoffsizerL   s        rO   rh   zCFFFont.INDEX.__init__i  s    DG&(DL%}UDGLLOODDUG519%% D D##GDGLL,A,A$B$BCCCC*DIGLLT\"%5566666rQ   c                 &    dt          |           z  S )Nz<INDEX: size=%d>)rC   rj   s    rO   __repr__zCFFFont.INDEX.__repr__r  s    %D		11rQ   c                 0    t          | j                  dz
  S Nr<   )rC   r5  r<  s    rO   __len__zCFFFont.INDEX.__len__u  s    t|$$q((rQ   rL   c                     | j                             | j        | j        |         z              | j                             | j        |dz            | j        |         z
            S r?  )r   r8  r7  r5  r   )rj   rL   s     rO   __getitem__zCFFFont.INDEX.__getitem__x  sM    GLLT\!_45557<<QU 3dl1o EFFFrQ   c                 n     t           fdt          t                               D                       S )Nc              3   (   K   | ]}|         V  d S r[   rc   ).0rL   rj   s     rO   	<genexpr>z)CFFFont.INDEX.__iter__.<locals>.<genexpr>}  s'      ::AQ::::::rQ   )iterrD   rC   r<  s   `rO   __iter__zCFFFont.INDEX.__iter__|  s4    ::::s4yy)9)9::::::rQ   )r^   r_   r`   r   rh   rG   r=  r@   r@  bytesrB  r	   rH  rc   rQ   rO   INDEXr3  h  s        	7x 	7D 	7 	7 	7 	7	2c 	2 	2 	2 	2	)S 	) 	) 	) 	)	G 	G 	G 	G 	G 	G	;huo 	; 	; 	; 	; 	; 	;rQ   rJ  rp   r   r8   Nc                 
   || _         || _        t          j        d| j                            d                    \  }}}}| j                            |dz
             |                     | j                  | _        |                     | j                  | _        |                     | j                  | _        |                     | j                  | _	        t          | j        d                   | _        | j                            ddg          \  }| j                            ddg          \  }| j                            ddg          \  }	| j                            t          t          |	                     |                     | j                  | _        t#          | j                  | _        i | _        i | _        | j                            t          t          |                     | j                            d          }
|
dk    rt          j        d	| j                            d                    \  }t+          t          j        d	|z  | j                            |                              D ]\  }}|| j        |<   || j        |<   n|
d
k    rt          j        d	| j                            d                    \  }d}t-          |          D ]d}t          j        d| j                            d                    \  }}t-          |||z   dz             D ]}|| j        |<   || j        |<   |dz  }ent/          d|
z            i | _        i | _        | j                            t          t          |                     | j                            d          }
|
dk    r| j        dz
  }t+          t          t4          t          df         t          j        dd|z  z   | j                            d|z                                          D ]3\  }}|dz  }|                     |          }|| j        |<   || j        |<   4d S |
d
k    rt          j        d	| j                            d                    \  }d}t-          |          D ]y}t          j        d| j                            d                    \  }}t-          |||z   dz             D ]0}|                     |          }|| j        |<   || j        |<   |dz  }1zd S |
dk    rJ t9          d|
f                      t/          d|
z            )NBBBBr   r   r   r      r<       r      BBrv   zunsupported encoding format: %r.>r      F	Unhandledzunsupported charset format: %r)rp   r   r   r   r   rJ  
name_index
dict_indexstring_index
subr_indexr   top_dictgetr8  r   r@   
charstringrC   nglyphscode2gidgid2coder?   rD   r    name2gidgid2namer   getstrrG   )rj   rp   r   _major_minorhdrsizer:  charset_posencoding_poscharstring_posformatr   codegidrL   firstnleftsidsidnames                      rO   rh   zCFFFont.__init__  s   	-3]647<<PQ??-S-S*'Wq[!!!**TW--**TW-- JJtw//**TW-- 233**2s33-++B44 M--b1#66T#~..///**TW--4?++T#|,,---aW=dgll1oo66DQ&v}S1Wdgll1oo'N'NOO * *	c&)d#%)c""* w=dgll1oo66DQD1XX  !'tTW\\!__!E!E (9::  C*-DM$')-DM#&AIDD   AF JKKKT#{++,,,aWq A%#s(OV]3q=$',,qSTuBUBU%V%V   - -S
 q++c**),g&%,c""- - w=dgll1oo66DQC1XX  !'tTW\\!__!E!E (9::  C"kk#..G-0DM'*)0DM#&1HCC	  w4#{F344444 @6 IJJJrQ   rl  c                     |t          | j                  k     r| j        |         S | j        |t          | j                  z
           S r[   )rC   STANDARD_STRINGSrV  )rj   rl  s     rO   r`  zCFFFont.getstr  sF     T*++++(-- s4+@'A'A!ABBrQ   )r^   r_   r`   ro  rJ  rG   r   rh   r@   r   rI  r`  rc   rQ   rO   r   r      s        HT; ; ; ; ; ; ; ;.NKS NKh NK4 NK NK NK NK`C# C%U
"3 C C C C C CrQ   r   c                   J    e Zd Z G d de          ZdededdfdZdefdZ	dS )	TrueTypeFontc                       e Zd ZdS )TrueTypeFont.CMapNotFoundNr^   r_   r`   rc   rQ   rO   CMapNotFoundrs    s        rQ   ru  rp   r   r8   Nc           
      F   || _         || _        i | _        |                    d          | _        	 t          t          t          t          t          t          f         t          j	        d|                    d                              \  }}}}t          |          D ]l}t          t          t          t          t          t          f         t          j	        d|                    d                              \  }}	}
}|
|f| j        |<   md S # t          j        $ r Y d S w xY w)Nr   >HHHHr   z>4sLLLr   )rp   r   tablesr   fonttyper   r   r@   r   r   rD   rI  error)rj   rp   r   ntables_1_2_3rz   
name_bytestsumoffsetlengths               rO   rh   zTrueTypeFont.__init__  s   	46

	$(c3S()grwwqzz22% %!Wb"b 7^^ ; ;59%c3./M(BGGBKK886 62T66 ,26*:J''; ; | 	 	 	 DD		s   CD D D c                    d| j         vrt          j        | j         d         \  }}| j        }|                    |           t          t          t          t          f         t          j	        d|
                    d                              \  }}g }t          |          D ]h}|                    t          t          t          t          t          f         t          j	        d|
                    d                                         ii }|D ]h\  }	}
}|	dk    s|	dk    r|
dv s|                    ||z              t          t          t          t          t          f         t          j	        d	|
                    d
                              \  }}}|dk    ri|                    t          t          t          t          df         t          j	        d|
                    d                                                   |dk    rt          t          t          df         t          j	        d|
                    d                              }dgdz  }t          |          D ]\  }}|||dz  <   t          |          dz  dz   }g }t          |          D ]}t          t          t          t          t          t          f         t          j	        d|
                    d                              \  }}}}|                    |||||                                dz
  |z   f           |D ]\  }}}}}|s|||         dz  z   }|                    |           t          |          D ]]}t          t          t                   t          j	        d|
                    d                              d         }|r||z  }||||z   <   ^|dk    rt          t          t          t          t          t          f         t          j	        d|
                    d                              \  }}}}|dz  }t          t          t          df         t          j	        d|z  |
                    d|z                                } |
                    d           t          t          t          df         t          j	        d|z  |
                    d|z                                }!t          t          t          df         t          j	        d|z  |
                    d|z                                }"|                                }t          t          t          df         t          j	        d|z  |
                    d|z                                }#t#          | |!|"|#          D ]\  }$}%}&}'|'r|                    ||'z              t          |%|$dz             D ]Y}t          t          t                   t          j	        d|
                    d                              d         }(|(|&z   dz  ||<   Zt          |%|$dz             D ]}||&z   dz  ||<   QJ t%          d|f                      |st          j        t'                      })|                                D ]\  }*}|)                    ||*           |)S )Ns   cmapz>HHr   z>HHLr   r   r;   )r<   
   z>HHH   .z>256Br   rv   z>256Hi   i    r<   z>HHhHr   rw  z>%dHz>%dhi  FrS  )rx  rq  ru  r   r8  r   r   r@   r   r   r   rD   rB   updater?   maxr6  ziprG   r   itemsadd_cid2unichr)+rj   base_offsetr  r   version
nsubtables	subtablesrL   char2gidplatform_idencoding_id	st_offsetfmttypefmtlenfmtlangsubheaderkeys
firstbytesr   nhdrshdrs	firstcodeentcountdeltar  rs   rj  r   ri  segcountr|  r}  r~  ecsscsiddsidrsecsciddidrr   unicode_mapchars+                                              rO   create_unicode_mapzTrueTypeFont.create_unicode_map  sw   $+%%++ $G 4fW
 $U38_fmE277ST::6V6V W W*02	z"" 	 	AU3S=)6=+L+LMM    $&3< L	: L	:/Ki  1$$)9)9kW>T>TGGK)+,,,)-c3m$fbggajj11* *&Wfg !||U38_fmGRWWS\\.R.RSS    
 A $#s(OM'2773<<88! !  S4Z
%m44 + +DAq)*JqAv&&M**a/!3=?u Y YA;?c3S01grwwqzz::< <8Y% KKIx		APV@V WXXXX:> 	2 	26Ay(E3# ! %A!);<EGGCLLL"8__ 2 2"5:v}T2771::/N/NOOPQR )5LC.1++	2	2 A)-#sC,-M'2771::66* *&2r2 Q#s(OM&8"3RWWQ\5J5JKK  


#s(OM&8"3RWWQ\5J5JKK  #s(OM&8"3RWWQ\5J5JKK  ggii#s(OM&8"3RWWQ\5J5JKK  ),CdD(A(A = =$BC =c	***!&r26!2!2 = =A $U3ZtRWWQZZ1P1P Q QRS TA+,s7f*<HQKK= "'r26!2!2 = =A+,s7f*<HQKK== :c;"899999 	,++$&&!)) 	2 	2ID#&&sD1111rQ   )
r^   r_   r`   r   ru  rG   r   rh   r   r  rc   rQ   rO   rq  rq    s            |   S h 4    ,aN a a a a a arQ   rq  c                       e Zd ZdS )PDFFontErrorNrt  rc   rQ   rO   r  r  U          DrQ   r  c                       e Zd ZdS )PDFUnicodeNotDefinedNrt  rc   rQ   rO   r  r  Y  r  rQ   r  StandardEncodingType1Cc            	       R   e Zd Z	 ddeeef         dedee         ddfdZ	defdZ
defdZdefd	Zd
edee         fdZdefdZdefdZdefdZdefdZdedefdZdedeeeee         ef         f         fdZdedefdZdedefdZedeeef         defd            ZdS )PDFFontN
descriptorrH   default_widthr8   c                    || _         t          |          | _        t          |                    dd                    | _        t          | j        t                    rt          | j                  | _        t          |                    dd                    | _
        t          |                    dd                    | _        t          |                    dd                    | _        t          |                    dd                    | _        |)t          |                    dd                    | _        n|| _        t          | j                  | _        t          |                    d	d                    | _        |                     |          | _        d
x| _        | _        | j        dk    r| j         | _        d S d S )NFontNameunknownFlagsr   AscentDescentItalicAngleMissingWidthLeadinggMbP?)r  r'   rH   r&   rY  rY   r=   r-   r/   r#   flagsr%   ascentdescentitalic_angler  leading_parse_bboxbboxhscalevscale)rj   r  rH   r  s       rO   rh   zPDFFont.__init__f  sy    %%0%8%8 
I!F!FGGdmY// 	8(77DMz~~gq99::

x ; ;<< 	1!=!=>>%jnn]A&F&FGG !*:>>.!+L+L!M!MD!.D%d&899 	1!=!=>>$$Z00	$))dk <! L=DLLL rQ   c                     dS )Nz	<PDFFont>rc   r<  s    rO   r=  zPDFFont.__repr__  s    {rQ   c                     dS NFrc   r<  s    rO   is_verticalzPDFFont.is_vertical      urQ   c                     dS r  rc   r<  s    rO   is_multibytezPDFFont.is_multibyte  r  rQ   rI  c                      t          |          S r[   )	bytearrayrj   rI  s     rO   decodezPDFFont.decode  s    rQ   c                      | j         | j        z  S )z.Ascent above the baseline, in text space units)r  r  r<  s    rO   
get_ascentzPDFFont.get_ascent  s    {T[((rQ   c                      | j         | j        z  S )z@Descent below the baseline, in text space units; always negative)r  r  r<  s    rO   get_descentzPDFFont.get_descent  s    |dk))rQ   c                 h    | j         d         | j         d         z
  }|dk    r| j         }|| j        z  S )Nrv   r   )r  r  r  )rj   rM   s     rO   	get_widthzPDFFont.get_width  s8    IaL49Q<'66##A4;rQ   c                 v    | j         d         | j         d         z
  }|dk    r| j        | j        z
  }|| j        z  S )Nr;   r<   r   )r  r  r  r  )rj   r   s     rO   
get_heightzPDFFont.get_height  s;    IaL49Q<'66dl*A4;rQ   ro   c                 :   t          | j                            |                    }|
|| j        z  S 	 |                     |          }t          | j                            |                    }|
|| j        z  S n# t
          $ r Y nw xY w| j        | j        z  S r[   )r   rH   rY  r  	to_unichrr  r  )rj   ro   	cid_widthstr_cids       rO   
char_widthzPDFFont.char_width  s     t{s3344	 t{**	nnS))G"4;??7#;#;<<I$ 4;.. % $ 	 	 	D	 !DK//s   AA> >
B
Bc                     dS )DReturns an integer for horizontal fonts, a tuple for vertical fonts.r   rc   rj   ro   s     rO   	char_dispzPDFFont.char_disp  s    qrQ   r   c                 `     t           fd                     |          D                       S )Nc              3   B   K   | ]}                     |          V  d S r[   )r  )rE  ro   rj   s     rO   rF  z'PDFFont.string_width.<locals>.<genexpr>  s/      BBC4??3''BBBBBBrQ   )sumr  )rj   r   s   ` rO   string_widthzPDFFont.string_width  s0    BBBB4;;q>>BBBBBBrQ   c                     t           r[   )NotImplementedErrorr  s     rO   r  zPDFFont.to_unichr  s    !!rQ   c                     t          |                     d                    }t          |          }| t                              d|d           dS |S )z(Parse FontBBox from the fonts descriptorFontBBoxNz0Could get FontBBox from font descriptor because z cannot be parsed as 4 floats)        r  r  r  )r'   rY  r   rE   rF   )r  	font_bboxr  s      rO   r  zPDFFont._parse_bbox  s`      
z : :;;	i((<KKm9mmm   &%rQ   r[   )r^   r_   r`   r   rG   r   FontWidthDictr   rA   rh   r=  boolr  r  rI  r   r@   r  r  r  r  r  r  r   r   r  r  r  staticmethodr2   r  rc   rQ   rO   r  r  e  s%       
 *.	) )CH%) )  	)
 
) ) ) )>#    T    d     E  hsm        )E ) ) ) )*U * * * *5    E    0c 0e 0 0 0 0$S U5%8N2O+O%P    Ce C C C C C"S "S " " " " 	S 1 	d 	 	 	 \	 	 	rQ   r  c                   V    e Zd Zdeeef         dedeeef         ddfdZdedefdZ	dS )	PDFSimpleFontr  rH   specr8   Nc                    d|v rt          |d                   }nt          }t          |t                    rft	          |                    dt                              }t          |                    dg                     }t          j        ||          | _	        n&t          j        t	          |                    | _	        d | _
        d|v rnt          |d                   }t                      | _
        t          | j
        t          |                                                                                     t"                              | ||           d S )NEncodingBaseEncodingDifferences	ToUnicode)r&   LITERAL_STANDARD_ENCODINGr=   dictr/   rY  r$   r   rr   cid2unicoder  r(   r   r   r   get_datarunr  rh   )rj   r  rH   r  encodingrp   diffstrms           rO   rh   zPDFSimpleFont.__init__  s%    Z 011HH0Hh%% 	O^=V W WXXDhll="==>>D)6tTBBD)6|H7M7MNND15$[ 122D-//Dt')A)ABBFFHHHz622222rQ   ro   c                     | j         r+	 | j                             |          S # t          $ r Y nw xY w	 | j        |         S # t          $ r t	          d |          w xY wr[   )r  
get_unichrrm   r  r  r  s     rO   r  zPDFSimpleFont.to_unichr  s     	'223777   	2#C(( 	2 	2 	2&tS111	2s   # 
00A A)
r^   r_   r`   r   rG   r   r  rh   r@   r  rc   rQ   rO   r  r    s        3CH%3 3 c3h	3
 
3 3 3 34	2S 	2S 	2 	2 	2 	2 	2 	2rQ   r  c                   >    e Zd Zdddeeef         ddfdZdefdZdS )PDFType1Fontrsrcmgrr6   r  r8   Nc                   
 	 t          |d                   | _        n2# t          $ r% t          j        rt          d          d| _        Y nw xY w	 t                              | j                  \  }}t          t          t          t          t          f         t          f         |          }n# t          $ r t          |                    di                     }t!          |                    dd                    
t#          |                    ddgdz                      }
fd	t%          |          D             }Y nw xY wt&                              | |||           d
|vrd|v rt+          |                    d                    | _        t!          | j        d                   }| j                                        d |         }t1          t3          |                    }	|	                                | _        d S d S d S )NBaseFontBaseFont is missingr  FontDescriptor	FirstCharr   Widthsr   c                 <    i | ]\  }}|z   t          |          S rc   )r&   rE  rL   rM   	firstchars      rO   
<dictcomp>z)PDFType1Font.__init__.<locals>.<dictcomp>	  s)    UUUVaa)mXa[[UUUrQ   r  FontFileLength1)r/   basefontrm   r   STRICTr  rX   r]   r   r   r   rG   r@   rA   r"   rY  r#   r$   r?   r  rh   r(   fontfiler  re   r   rr   r  )rj   r  r  r  
int_widthsrH   
width_listlength1rf   parserr  s             @rO   rh   zPDFType1Font.__init__  s   	&(j)9::DMM 	& 	& 	& :"#8999%DMMM	&
	V'4'@'@'O'O$ZU38_e+,j FF  	V 	V 	V#DHH-=r$B$BCCJ!$((;":":;;I#DHHXsSy$A$ABBJUUUUy?T?TUUUFFF	V 	tZ>>>T!!jJ&>&>(
)C)CDDDMi 899G=))++HWH5D*74==99F%2244D "!&>&>s#    ,AAAB- -BEEc                     d| j         z  S )Nz<PDFType1Font: basefont=%r>r  r<  s    rO   r=  zPDFType1Font.__repr__  s    ,t}<<rQ   r^   r_   r`   r   rG   r   rh   r=  rc   rQ   rO   r  r    sc        5 4 5GCH<M 5RV 5 5 5 5:=# = = = = = =rQ   r  c                       e Zd ZdefdZdS )PDFTrueTypeFontr8   c                     d| j         z  S )Nz<PDFTrueTypeFont: basefont=%r>r  r<  s    rO   r=  zPDFTrueTypeFont.__repr__  s    /$-??rQ   N)r^   r_   r`   rG   r=  rc   rQ   rO   r  r    s6        @# @ @ @ @ @ @rQ   r  c                   >    e Zd Zdddeeef         ddfdZdefdZdS )PDFType3Fontr  r6   r  r8   Nc           
      V   t          |                    dd                    t          |                    ddgdz                      }fdt          |          D             }d|v rt	          |d                   }ndd|d         d}t
                              | |||           t          t          t          t          |                    d	                                        | _
        | j        \  }| _        }| _        t          | j
        d
          \  | _        | _        d S )Nr  r   r	  r   c                 "    i | ]\  }}|z   |S rc   rc   r  s      rO   r  z)PDFType3Font.__init__.<locals>.<dictcomp>!  s0     0
 0
 0
!'!QA	M10
 0
 0
rQ   r  r  )r  r  r  
FontMatrix)r<   r<   )r#   rY  r$   r?   r"   r  rh   r   r0   tuplematrixr  r  r  r3   r  r  )rj   r  r  r  rH   r  rz   r  s          @rO   rh   zPDFType3Font.__init__  s   dhh{A6677	A39 = =>>
0
 0
 0
 0
+4Z+@+@0
 0
 0
 t###D)9$:;;JJ$%!jAQRRJtZ>>>65DHH\4J4J)K)K#L#LMM,0I)DL!T[%6t{F%K%K"dkkkrQ   c                     dS )Nz<PDFType3Font>rc   r<  s    rO   r=  zPDFType3Font.__repr__-  s    rQ   r  rc   rQ   rO   r  r    sj        L 4 LGCH<M LRV L L L L  #            rQ   r  c            	       `   e Zd ZU eeeee         ef         f         ed<   ej	        fddde
eef         deddfdZde
eef         dedefd	Zede
eef         dedefd
            ZdefdZdefdZdefdZdedee         fdZdedeeeee         ef         f         fdZdedefdZdS )
PDFCIDFontdefault_dispr  r6   r  strictr8   Nc                    	 t          |d                   | _        n(# t          $ r |rt          d          d| _        Y nw xY wt	          |                    di                     | _        t          | j                            dd                                        d          }t          | j                            dd                                        d          }|	                                 d	|	                                 | _
        |                     ||          | _        	 t	          |d
                   }n## t          $ r |rt          d          i }Y nw xY wd }d|v r`t          |                    d                    | _        t          | j        t!          | j                                                            }d | _        d|v rt'          |d         t(                    rot          |d                   }t+                      | _        t-          | j        t!          |                                                                                     nt          |d                   }	t          |d                   }
d|v sd|	v sd|
v rt1                      | _        n| j
        dv r3|r0	 |                                | _        nc# t          j        $ r Y nRw xY wnM	 t7          j        | j
        | j                                                  | _        n# t6          j        $ r Y nw xY w| j                                        | _        | j        rt?          tA          |                    dg                               }d |!                                D             | _"        t          |                    dddg                    \  }}d |f| _#        d |!                                D             }|}nTi | _"        d| _#        tI          tA          |                    dg                               }|                    dd          }tJ          &                    | |||           d S )Nr  r  r  CIDSystemInfoRegistrys   unknownlatin1Orderingr   r  zFontDescriptor is missing	FontFile2r  r  Identity)zAdobe-Identityz	Adobe-UCSW2c                 *    i | ]\  }\  }\  }}|||fS rc   rc   )rE  ro   rz   rT   rU   s        rO   r  z'PDFCIDFont.__init__.<locals>.<dictcomp>v  s+    TTT,@S-1hr2#BxTTTrQ   DW2ip  ic                      i | ]\  }\  }}||S rc   rc   )rE  ro   rM   rz   s       rO   r  z'PDFCIDFont.__init__.<locals>.<dictcomp>y  s/     4 4 4(C!QQ4 4 4rQ   r   r   DWi  )r  )'r/   r  rm   r  r"   rY  cidsysteminfor&   r  strip	cidcodingget_cmap_from_speccmapr(   r  rq  r   r  r  r=   r!   r   r   r  r   r  ru  r   get_unicode_mapr  verticalrV   r$   r  dispsr'  rP   r  rh   )rj   r  r  r(  cid_registrycid_orderingr  ttfr  	cmap_namer  widths2rU   rM   rH   r  s                   rO   rh   zPDFCIDFont.__init__4  s}   	&(j)9::DMM 	& 	& 	& :"#8999%DMMM	& ("(E(EFF 2 6 6z: N NOOVV
 
   2 6 6z: N NOOVV
 
 )..00II<3E3E3G3GII"55dFCC		#D)9$:;;JJ 	 	 	 @"#>???JJJ	 *$$()D)DEEDMt}gdm6L6L6N6N.O.OPPC15$${+Y77 <#D$566#1#3#3 4+WT]]__-E-EFFJJLLLL(k):;;	'Z(899,..!Y..!X--'9';';D$^>>> '*'='='?'?D$$#0   D#)#9NI))++$ $   &    	--//= 	1!*TXXdB-?-?"@"@AAGTTGMMOOTTTDJtxxU|<<==GR!%r
D4 4,3MMOO4 4 4F MM DJ !D
488C+<+< = =>>F HHT400Mz6OOOOOsE    "AA/E E%$E%9K K%$K%*6L! !L32L3c                     |                      ||          }	 t          j        |          S # t          j        $ r)}|rt	          |          t                      cY d}~S d}~ww xY w)an  Get cmap from font specification

        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'.
        N)_get_cmap_namer   get_cmapru  r  r   )rj   r  r(  r@  rq   s        rO   r8  zPDFCIDFont.get_cmap_from_spec  sw     ''f55		?9---" 	 	 	 &"1oo%66MMMMMM	s   , A$AA$A$c                    d}	 | d         }t          |d          rt          | d                   }nt          |d                   }n!# t          $ r |rt          d          Y nw xY wt	          |          t
          u rEt          t
          |          }d|v r|                    d          j        }n|rt          d          t                              ||          S )z%Get cmap name from font specificationr  r  rp   CMapNamezEncoding is unspecifiedz!CMapName unspecified for encoding)
hasattrr/   rm   r  typer!   r   rY  rp   IDENTITY_ENCODER)r  r(  r@  spec_encodingcmap_name_streams        rO   rC  zPDFCIDFont._get_cmap_name  s    		> ,M}f-- D(j)9::		(z)BCC	 	> 	> 	> >"#<===> >	> 	??i''*.y)*D*D---,00<<A		 H"#FGGG##Iy999s   AA A&%A&c                 (    d| j         d| j        dS )Nz<PDFCIDFont: basefont=z, cidcoding=rQ  )r  r7  r<  s    rO   r=  zPDFCIDFont.__repr__  s    XXXT^XXXXrQ   c                     | j         S r[   )r;  r<  s    rO   r  zPDFCIDFont.is_vertical  s
    }rQ   c                     dS )NTrc   r<  s    rO   r  zPDFCIDFont.is_multibyte  s    trQ   rI  c                 6    | j                             |          S r[   )r9  r  r  s     rO   r  zPDFCIDFont.decode  s    y&&&rQ   ro   c                 B    | j                             || j                  S )r  )r<  rY  r'  r  s     rO   r  zPDFCIDFont.char_disp  s    z~~c4#4555rQ   c                     	 | j         st          |          | j                             |          S # t          $ r t	          | j        |          w xY wr[   )r  r   r   rm   r  r7  r  s     rO   r  zPDFCIDFont.to_unichr  sd    	<# '!#&&&#..s333 	< 	< 	<&t~s;;;	<s	   /2  A)r^   r_   r`   r   rA   r   r   __annotations__r   r  r   rG   r   r  rh   r   r8  r  rC  r=  r  r  rI  r   r@   r  r  r  rc   rQ   rO   r&  r&  1  s        uXe_e%;<<====  	OP OP%OP c3hOP 	OP
 
OP OP OP OPbwsCx'8 $ 8    $ :WS#X. : : : : : \:.Y# Y Y Y YT    d    'E 'hsm ' ' ' '6S 6U5%8N2O+O%P 6 6 6 6<S <S < < < < < <rQ   r&  )^loggingr   ior   typingr   r   r   r   r   r	   r
   r   r   r   r   r   pdfminerr   pdfminer.castingr   r   pdfminer.cmapdbr   r   r   r   r   r   r   pdfminer.encodingdbr   r   pdfminer.fontmetricsr   pdfminer.pdfexceptionsr   r   r    pdfminer.pdftypesr!   r"   r#   r$   r%   r&   r'   r(   pdfminer.psexceptionsr)   pdfminer.psparserr*   r+   r,   r-   r.   r/   pdfminer.utilsr0   r1   r2   r3   r4   r5   pdfminer.pdfinterpr6   	getLoggerr^   rE   rb   rG   r@   rA   rP   rV   rX   re   r   rI  rI  r   r   rq  r  r  r  LITERAL_TYPE1Cr  r  r  r  r  r  r&  rc   rQ   rO   <module>rc     s                                            7 7 7 7 7 7 7 7                  9 8 8 8 8 8 8 8 - - - - - - K K K K K K K K K K	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ( ' ' ' ' '                U T T T T T T T T T T T T T T T 6555555g!!6HV$ 6eCHou.D)E 6 6 6 6>Xf% $sE%,4G/G*H    *& & & & & & & &+= += += += +=M#. += += +=\ X
   +% +Dd5+<&=!=> + + + +\wC wC wC wC wC wC wC wCt{ { { { { { { {|	 	 	 	 	< 	 	 		 	 	 	 	< 	 	 	  C 233 X U38_e+,f f f f f f f fR$2 $2 $2 $2 $2G $2 $2 $2N= = = = == = = =D@ @ @ @ @l @ @ @
         =      *T< T< T< T< T< T< T< T< T< T<rQ   