
    #ja                        d dl Z d dlZd dlZd dlmZmZmZ d dlmZ d dl	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l-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< e
rd dl=m>Z>  ej?        e@          ZAdeeB         deCeDeEz  eFf         fdZGdeeB         deCeEeHeFe8f         f         fdZI G d d          ZJ G d de4eE                   ZKdZLdddZMdeNdeCeEeOeFeEz           f         fdZP G d d          ZQ G d  d!          ZR G d" d#e!          ZS G d$ d%eS          ZT e1d&          ZU e1d'          ZVeCeEeDz  eFf         ZW G d( d)          ZX G d* d+eX          ZY G d, d-eY          ZZ G d. d/eZ          Z[ G d0 d1eY          Z\ G d2 d3eX          Z]dS )4    N)IterableIteratorMapping)BytesIO)TYPE_CHECKINGAnyBinaryIO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 ]7}t          |          }t          |t                    r=|r:|d         }t          |          D ] \  }}||t	          t
          |          |z   <   !g }dt          |t
          t          f          r|                    |           t          |          dk    ro|\  }}}t          |t
                    r1t          |t
                    rt          ||dz             D ]}|||<   n!t                              d| d| d           g }t                              d| d           9t	          t          t          t
          z  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warningdictstr)r2   widthsrvchar1iwchar2s           X/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/pdfminer/pdffont.py
get_widthsrL   6   s   !FA  QKKa 	 "%aLL 5 5DAq34F4U++a/00C<(( 	HHQKKK1vv{{$%!qeS)) j.D.D "5%!)44 & &$%q		& KKH H H H H H   KK8 8 8 8    S3Y%&///    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.r5   r6      r7   )
r8   r9   r:   r/   r
   r;   r<   r=   r>   r?   )
r2   rD   rE   rF   rG   rH   rI   vxvyrJ   s
             rK   get_widths2rR   W   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MrM   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fontnamer3   c                     t           |         S Nr   )clsrU   s     rK   get_metricszFontMetricsDB.get_metricsm   s    H%%rM   N)
__name__
__module____qualname__classmethodrC   tuplerB   objectr;   rY    rM   rK   rT   rT   l   s[        &3 &5c6k1BDcN1R+S & & & [& & &rM   rT   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datar3   Nc                 >    t          j        | |           i | _        d S rW   )r)   __init___cid2unicode)selfrc   s     rK   re   zType1FontHeaderParser.__init__}   s#    tT***,.rM   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
        r7   N)	
nextobjectr$   r   r
   rC   rf   KeyErrorr@   debug)rg   cidnamees       rK   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popr8   r;   r(   add_resultsr*   )rg   rp   rq   _keyvalues         rK   
do_keywordz Type1FontHeaderParser.do_keyword   s    D$$$%)XXa[["Xaz5#s## =
5)(D(D =  #|E':':!;<<<<< %$= = = =rM   )rZ   r[   r\   r%   KEYWORD_BEGINKEYWORD_ENDKEYWORD_DEFrt   KEYWORD_DICTKEYWORD_ARRAYKEYWORD_READONLYKEYWORD_FORr	   re   rB   r;   rC   ro   r'   rz   r`   rM   rK   rb   rb   s   s        CMMM#f++K#f++K#f++K3w<<LCMMMs;''#f++K/X /$ / / / /!d38n ! ! ! !2=c =) = = = = = = =rM   rb   )0123456789.rn   ze-N-z
Identity-Hz
Identity-V)z	DLIdent-Hz	DLIdent-Vrc   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 )Nr7          T      F                   l                        >Hrs   r   )r   readordNIBBLESr<   structunpackr=   )rc   dfpstackcb0sloopbnnibblery   b1b2s                 rK   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 HrM   c                   V    e Zd ZdZ G d d          ZdededdfdZd	edee	z  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   rn   fghrH   jklmr   opqrE   r   turF   rI   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   r3   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>HBr6   r7   r5   )r   offsetsr   r   r   r?   r=   r0   tellbaseseek)rg   r   countoffsize_is        rK   re   zCFFFont.INDEX.__init__e  s    DG&(DL%}UDGLLOODDUGEAI&& D D##GDGLL,A,A$B$BCCCC*DIGLLT\"%5566666rM   c                 (    dt          |            dS )Nz<INDEX: size=>)r>   rg   s    rK   __repr__zCFFFont.INDEX.__repr__n  s    /3t99////rM   c                 0    t          | j                  dz
  S Nr7   )r>   r2  r;  s    rK   __len__zCFFFont.INDEX.__len__q  s    t|$$q((rM   rH   c                     | j                             | j        | j        |         z              | j                             | j        |dz            | j        |         z
            S r>  )r   r5  r4  r2  r   )rg   rH   s     rK   __getitem__zCFFFont.INDEX.__getitem__t  sM    GLLT\!_45557<<QU 3dl1o EFFFrM   c                 n     t           fdt          t                               D                       S )Nc              3   (   K   | ]}|         V  d S rW   r`   ).0rH   rg   s     rK   	<genexpr>z)CFFFont.INDEX.__iter__.<locals>.<genexpr>y  s'      ::AQ::::::rM   )iterr?   r>   r;  s   `rK   __iter__zCFFFont.INDEX.__iter__x  s4    ::::s4yy)9)9::::::rM   )rZ   r[   r\   r	   re   rC   r<  r;   r?  bytesrA  r   rG  r`   rM   rK   INDEXr0  d  s        	7x 	7D 	7 	7 	7 	7	0c 	0 	0 	0 	0	)S 	) 	) 	) 	)	G 	G 	G 	G 	G 	G	;huo 	; 	; 	; 	; 	; 	;rM   rI  rm   r   r3   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|
          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t9          t;          d|
f                    t/          d|
          )NBBBBr   r   r   r      r7       r      BBrs   zunsupported encoding format: .r:  r      	Unhandledzunsupported charset format: )rm   r   r   r   r   rI  
name_index
dict_indexstring_index
subr_indexr   top_dictgetr5  r
   r;   
charstringr>   nglyphscode2gidgid2coder:   r?   r   name2gidgid2namer^   getstrAssertionErrorrC   )rg   rm   r   _major_minorhdrsize_offsizecharset_posencoding_poscharstring_posformatr   codegidr8  firstnleftsidsidnames                      rK   re   zCFFFont.__init__{  s   	.4mFDGLLQROO.T.T+(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Ahh  !'tTW\\!__!E!E (9::  C*-DM$')-DM#&AIDD   J J 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Ahh  !'tTW\\!__!E!E (9::  C"kk#..G-0DM'*)0DM#&1HCC	  w k6%:!;!;<<< Iv I IJJJrM   rl  c                     |t          | j                  k     r| j        |         S | j        |t          | j                  z
           S rW   )r>   STANDARD_STRINGSrT  )rg   rl  s     rK   r^  zCFFFont.getstr  sF     T*++++(-- s4+@'A'A!ABBrM   )rZ   r[   r\   ro  rI  rC   r	   re   r;   rH  r^  r`   rM   rK   r   r      s        HT; ; ; ; ; ; ; ;.NKS NKh NK4 NK NK NK NK`C# C#+ C C C C C CrM   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rZ   r[   r\   r`   rM   rK   CMapNotFoundrs    s        rM   ru  rm   r   r3   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   )rm   r   tablesr   fonttyper
   r^   r;   r   r   r?   rH  error)rg   rm   r   ntables_1_2_3rw   
name_bytes_tsumoffsetlengths               rK   re   zTrueTypeFont.__init__  s   	46

	$(c3S()grwwqzz22% %!Wb"b 7^^ ; ;6:%c3./M(BGGBKK887 73UFF ,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 ]s\  }	}
}|	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| d|
                    d|z                                }!|
                    d           t          t          t          df         t          j	        d| d|
                    d|z                                }"t          t          t          df         t          j	        d| d|
                    d|z                                }#|                                }t          t          t          df         t          j	        d| d|
                    d|z                                }$t#          |!|"|#|$d          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  ||<   Wt%          t'          d|f                    |st          j        t)                      }*|                                D ]\  }+}|*                    ||+           |*S )Ns   cmapz>HHr   z>HHLr   r   r6   )r7   
   z>HHH   .z>256Br   rs   z>256Hi   i    r7   z>HHhHr   rw  r:  r   r   F)stricti  rQ  )rx  rq  ru  r   r5  r
   r^   r;   r   r   r   r?   r=   updater:   maxr3  zipr_  rC   r   itemsadd_cid2unichr),rg   base_offset_lengthr   _version
nsubtables	subtablesr8  char2gidplatform_idencoding_id	st_offsetfmttype_fmtlen_fmtlangsubheaderkeys
firstbytesrH   r   nhdrshdrs	firstcodeentcountdeltar  rp   rj  r   ri  segcountr|  r}  r~  ecsscsiddsidrsecsciddidrr   unicode_mapchars,                                               rK   create_unicode_mapzTrueTypeFont.create_unicode_map  s   $+%%++!%W!5gW
!%eCHov}UBGGTUJJ7W7W!X!X:02	
## 	 	BU3S=)6=+L+LMM    $&3< L	B L	B/Ki  1$$)9)9kW>T>TGGK)+,,,+/c3m$fbggajj11, ,(Wgx !||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/h///2771x<3H3HII  


#s(OM/h///2771x<3H3HII  #s(OM/h///2771x<3H3HII  ggii#s(OM/h///2771x<3H3HII  ),CdD(O(O(O = =$BC =c	***!&r26!2!2 = =A $U3ZtRWWQZZ1P1P Q QRS TA+,s7f*<HQKK= "'r26!2!2 = =A+,s7f*<HQKK== %S+w)?%@%@AAA 	,++$&&!)) 	2 	2ID#&&sD1111rM   )
rZ   r[   r\   r   ru  rC   r	   re   r   r  r`   rM   rK   rq  rq    s            |   S h 4    ,aN a a a a a arM   rq  c                       e Zd ZdS )PDFFontErrorNrt  r`   rM   rK   r  r  Q          DrM   r  c                       e Zd ZdS )PDFUnicodeNotDefinedNrt  r`   rM   rK   r  r  U  r  rM   r  StandardEncodingType1Cc            	       <   e Zd Z	 ddeeef         dededz  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dz  ef         z  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
descriptorrD   default_widthr3   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"   rD   r!   rW  rU   r8   r(   r*   r   flagsr    ascentdescentitalic_angler  leading_parse_bboxbboxhscalevscale)rg   r  rD   r  s       rK   re   zPDFFont.__init__b  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 rM   c                     dS )Nz	<PDFFont>r`   r;  s    rK   r<  zPDFFont.__repr__  s    {rM   c                     dS NFr`   r;  s    rK   is_verticalzPDFFont.is_vertical      urM   c                     dS r  r`   r;  s    rK   is_multibytezPDFFont.is_multibyte  r  rM   rH  c                      t          |          S rW   )	bytearrayrg   rH  s     rK   decodezPDFFont.decode  s    rM   c                      | j         | j        z  S )z.Ascent above the baseline, in text space units)r  r  r;  s    rK   
get_ascentzPDFFont.get_ascent  s    {T[((rM   c                      | j         | j        z  S )z@Descent below the baseline, in text space units; always negative)r  r  r;  s    rK   get_descentzPDFFont.get_descent  s    |dk))rM   c                 h    | j         d         | j         d         z
  }|dk    r| j         }|| j        z  S )Nrs   r   )r  r  r  )rg   rI   s     rK   	get_widthzPDFFont.get_width  s8    IaL49Q<'66##A4;rM   c                 v    | j         d         | j         d         z
  }|dk    r| j        | j        z
  }|| j        z  S )Nr6   r7   r   )r  r  r  r  )rg   r   s     rK   
get_heightzPDFFont.get_height  s;    IaL49Q<'66dl*A4;rM   rl   c                 :   t          | j                            |                    }|
|| j        z  S 	 |                     |          }t          | j                            |                    }|
|| j        z  S n# t
          $ r Y nw xY w| j        | j        z  S rW   )r   rD   rW  r  	to_unichrr  r  )rg   rl   	cid_widthstr_cids       rK   
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   r`   rg   rl   s     rK   	char_dispzPDFFont.char_disp  s    qrM   r   c                 `     t           fd                     |          D                       S )Nc              3   B   K   | ]}                     |          V  d S rW   )r  )rD  rl   rg   s     rK   rE  z'PDFFont.string_width.<locals>.<genexpr>  s/      BBC4??3''BBBBBBrM   )sumr  )rg   r   s   ` rK   string_widthzPDFFont.string_width  s0    BBBB4;;q>>BBBBBBrM   c                     t           rW   )NotImplementedErrorr  s     rK   r  zPDFFont.to_unichr  s    !!rM   c                     t          |                     d                    }t          |          }| t                              d|d           dS |S )z(Parse FontBBox from the fonts descriptorFontBBoxNz4Could not get FontBBox from font descriptor because z cannot be parsed as 4 floats)        r  r  r  )r"   rW  r   r@   rA   )r  	font_bboxr  s      rK   r  zPDFFont._parse_bbox  si      
z : :;;	i((<KK>> > >   &%rM   rW   )rZ   r[   r\   r   rC   r   FontWidthDictr<   re   r<  boolr  r  rH  r   r;   r  r  r  r  r  r  r^   r  r  r  staticmethodr-   r  r`   rM   rK   r  r  a  s        
 '+	) )CH%) ) t|	)
 
) ) ) )>#    T    d     E  hsm        )E ) ) ) )*U * * * *5    E    0c 0e 0 0 0 0$S UU54<3F-G%G    Ce C C C C C"S "S " " " " 
S 1 
d 
 
 
 \
 
 
rM   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  rD   specr3   Nc                    t           }t          |                    d                    dk    rt          d          }|}d|v rt	          |d                   }t          |t                    rat          |                    d|                    }t          |                    dg                     }t          j	        ||          | _
        n&t          j	        t          |                    | _
        d | _        d|v rnt          |d                   }t                      | _        t          | j        t          |                                                                                     t$                              | ||           d S )NSubtypeTrueTypeWinAnsiEncodingEncodingBaseEncodingDifferences	ToUnicode)LITERAL_STANDARD_ENCODINGr*   rW  r&   r!   r8   rB   r   r   ro   cid2unicoder  r#   r   r   r   get_datarunr  re   )	rg   r  rD   r  default_encodingencodingrm   diffstrms	            rK   re   zPDFSimpleFont.__init__  sW    5++,,
::"#455#Z 011Hh%% 	O^=M N NOODhll="==>>D)6tTBBD)6|H7M7MNND.2$[ 122D-//Dt')A)ABBFFHHHz622222rM   rl   c                     | j         r+	 | j                             |          S # t          $ r Y nw xY w	 | j        |         S # t          $ r}t	          d |          |d }~ww xY wrW   )r  
get_unichrrj   r  r  rg   rl   errs      rK   r  zPDFSimpleFont.to_unichr  s     	'223777   	;#C(( 	; 	; 	;&tS11s:	;s#   # 
00A 
A!AA!)
rZ   r[   r\   r   rC   r   r  re   r;   r  r`   rM   rK   r  r    s        3CH%3 3 c3h	3
 
3 3 3 3B	;S 	;S 	; 	; 	; 	; 	; 	;rM   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rsrcmgrr1   r  r3   Nc                   
 	 t          |d                   | _        n3# t          $ r& t          j        rt          d          d d| _        Y nw xY w	 t                              | j                  \  }}t          t          t          t          z  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 |         }t/          t1          |                    }	|	                                | _        d S d S d S )NBaseFontBaseFont is missingr  FontDescriptor	FirstCharr   Widthsr   c                 <    i | ]\  }}|z   t          |          S r`   )r!   rD  rH   rI   	firstchars      rK   
<dictcomp>z)PDFType1Font.__init__.<locals>.<dictcomp>  s)    UUUVaa)mXa[[UUUrM   r  FontFileLength1)r*   basefontrj   r   STRICTr  rT   rY   r
   rB   rC   r;   r<   r   rW  r   r   r:   r  re   r#   fontfiler  rb   r   ro   r  )rg   r
  r  r  
int_widthsrD   
width_listlength1rc   parserr  s             @rK   re   zPDFType1Font.__init__  s   	&(j)9::DMM 	& 	& 	& D"#899tC%DMMM	&	V'4'@'@'O'O$Z$sSy%/0*==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D98D9c                     d| j         dS )Nz<PDFType1Font: basefont=r:  r  r;  s    rK   r<  zPDFType1Font.__repr__  s    <$-<<<<rM   rZ   r[   r\   r   rC   r   re   r<  r`   rM   rK   r	  r	    sc        5 4 5GCH<M 5RV 5 5 5 56=# = = = = = =rM   r	  c                       e Zd ZdefdZdS )PDFTrueTypeFontr3   c                     d| j         dS )Nz<PDFTrueTypeFont: basefont=r:  r  r;  s    rK   r<  zPDFTrueTypeFont.__repr__  s    ?T]????rM   N)rZ   r[   r\   rC   r<  r`   rM   rK   r"  r"    s6        @# @ @ @ @ @ @rM   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
  r1   r  r3   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 r`   r`   r  s      rK   r  z)PDFType3Font.__init__.<locals>.<dictcomp>#  s0     *
 *
 *
!'!QA	M1*
 *
 *
rM   r  r  )r  r  r  
FontMatrix)r7   r7   )r   rW  r   r:   r   r  re   r
   r+   r^   matrixr  r  r  r.   r  r  )rg   r
  r  r  rD   r  rw   r  s          @rK   re   zPDFType3Font.__init__  s   dhh{A6677	A39 = =>>
*
 *
 *
 *
+4Z+@+@*
 *
 *
 t###D)9$:;;JJ$%!jAQRRJtZ>>>65DHH\4J4J)K)K#L#LMM,0I)DL!T[%6t{F%K%K"dkkkrM   c                     dS )Nz<PDFType3Font>r`   r;  s    rK   r<  zPDFType3Font.__repr__/  s    rM   r   r`   rM   rK   r%  r%    sj        L 4 LGCH<M LRV L L L L  #            rM   r%  c            	       @   e Zd ZU eeedz  ef         z  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dz  ef         z  fdZdede	fdZdS )
PDFCIDFontNdefault_dispr
  r1   r  r  r3   c                 j	   	 t          |d                   | _        n)# t          $ r |rt          d          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          d i }Y nw xY wd }d|v r`t          |                    d                    | _        t          | j        t!          | j                                                            }d | _        d|v rt'          |d         t(                    rpt          |d                   }t+                      | _        t-          | j        t!          |                                                                                     nt          |d                   }	t          |d                   }
d|v sd|	v sd|
v rt1                      | _        n| j
        dv rR|rOt3          j        t          j                  5  |                                | _        d d d            n# 1 swxY w Y   nlt3          j        t:          j                  5  t;          j        | j
        | j                                                  | _        d d d            n# 1 swxY w Y   | j                                        | _         | j         rtC          tE          |                    dg                               }d |#                                D             | _$        t          |                    dddg                    \  }}d |f| _%        d |#                                D             }|}nTi | _$        d| _%        tM          tE          |                    dg                               }|                    dd          }tN          (                    | |||           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 r`   r`   )rD  rl   rw   rP   rQ   s        rK   r  z'PDFCIDFont.__init__.<locals>.<dictcomp>t  s+    TTT,@S-1hr2#BxTTTrM   DW2ip  ic                      i | ]\  }\  }}||S r`   r`   )rD  rl   rI   rw   s       rK   r  z'PDFCIDFont.__init__.<locals>.<dictcomp>w  s/     . . .(C!QQ. . .rM   r   r   DWi  )r  ))r*   r  rj   r  r   rW  cidsysteminfor!   r  strip	cidcodingget_cmap_from_speccmapr#   r  rq  r   r  r  r8   r   r   r   r  r   
contextlibsuppressru  r  r   get_unicode_mapr  verticalrR   r   r  dispsr-  rL   r  re   )rg   r
  r  r  cid_registrycid_orderingr  ttfr  	cmap_namer  widths2rQ   rI   rD   r  s                   rK   re   zPDFCIDFont.__init__6  s   	&(j)9::DMM 	& 	& 	& D"#899tC%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 	 	 	 J"#>??TIJJJ	 *$$()D)DEEDMt}gdm6L6L6N6N.O.OPPC.2$${+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$^>>> @()BCC @ @'*'='='?'?D$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ $V%899  #)#9NI))++$ $                	--//= 	1!*TXXdB-?-?"@"@AAGTTGMMOOTTTDJtxxU|<<==GR!%r
D. .,3MMOO. . .F MM DJ !D
488C+<+< = =>>F HHT400Mz6OOOOOsE    #AA0E E'&E'K??LL)7M,,M03M0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   )rg   r  r  rG  rn   s        rK   r=  zPDFCIDFont.get_cmap_from_spec  sy     ''f55		?9---" 	 	 	 -"1oo1,66MMMMMM	s   , A%A A% A%c                    d}	 | d         }t          |d          rt          | d                   }nt          |d                   }n"# t          $ r |rt          d          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  rm   CMapNamezEncoding is unspecifiedNz!CMapName unspecified for encoding)
hasattrr*   rj   r  typer   r
   rW  rm   IDENTITY_ENCODER)r  r  rG  spec_encodingcmap_name_streams        rK   rJ  zPDFCIDFont._get_cmap_name  s    		H ,M}f-- D(j)9::		(z)BCC	 	H 	H 	H H"#<==4GH H	H 	??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=r:  )r  r<  r;  s    rK   r<  zPDFCIDFont.__repr__  s    XXXT^XXXXrM   c                     | j         S rW   )rB  r;  s    rK   r  zPDFCIDFont.is_vertical  s
    }rM   c                     dS )NTr`   r;  s    rK   r  zPDFCIDFont.is_multibyte  s    trM   rH  c                 6    | j                             |          S rW   )r>  r  r  s     rK   r  zPDFCIDFont.decode  s    y&&&rM   rl   c                 B    | j                             || j                  S )r  )rC  rW  r-  r  s     rK   r  zPDFCIDFont.char_disp  s    z~~c4#4555rM   c                     	 | j         st          |          | j                             |          S # t          $ r}t	          | j        |          |d }~ww xY wrW   )r  r   r  rj   r  r<  r  s      rK   r  zPDFCIDFont.to_unichr  so    	E# '!#&&&#..s333 	E 	E 	E&t~s;;D	Es   /2 
AAA)rZ   r[   r\   r<   r^   __annotations__r   r  r   rC   r   r  re   r   r=  r  rJ  r<  r  r  rH  r   r;   r  r  r  r`   rM   rK   r,  r,  3  s        %e 344444  	KP KP%KP c3hKP 	KP
 
KP KP KP KPZwsCx'8 $ 8    $ :WS#X. : : : : : \:.Y# Y Y Y YT    d    'E 'hsm ' ' ' '6S 6UU54<3F-G%G 6 6 6 6ES ES E E E E E ErM   r,  )^r?  loggingr   collections.abcr   r   r   ior   typingr   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.utilsr+   r,   r-   r.   r/   r0   pdfminer.pdfinterpr1   	getLoggerrZ   r@   r_   rB   rC   r;   r<   rL   r^   rR   rT   rb   r   rP  rH  r9   r   r   rq  r  r  r  LITERAL_TYPE1Cr  r  r  r	  r"  r%  r,  r`   rM   rK   <module>rk     s         7 7 7 7 7 7 7 7 7 7                        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!!0HV$ 0cCi.>)? 0 0 0 0BXf% $sE%,4G/G*H    *& & & & & & & &+= += += += +=M#. += += +=\ X
   +% +Dd53;&7!78 + + + +\wC wC wC wC wC wC wC wCt{ { { { { { { {|	 	 	 	 	< 	 	 		 	 	 	 	< 	 	 	  C 233 X S3Y%&g g g g g g g gT+; +; +; +; +;G +; +; +;\= = = = == = = =@@ @ @ @ @l @ @ @
         =      *PE PE PE PE PE PE PE PE PE PErM   