
    Ng               	          d dl Z 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 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl!m#Z# ddl!m$Z$ ddl!m%Z% ddl!m&Z& ddl!m'Z' ddl!m(Z(m)Z) ddl!m*Z* ddl+m,Z, ddl+m-Z- ddl+m.Z. ddl+m/Z/ ddl+m0Z0 ddl+m1Z1 ddl+m2Z2 ddl3m4Z4m5Z5 dd l3m6Z6 dd!l3m7Z7 dd"l3m8Z8 dd#l3m9Z9 erdd$l:m;Z;  e j<        e=          Z>d%e	e?         d&ee@eAf         fd'ZBd%e	e?         d&ee@eeAe5f         f         fd(ZC G d) d*          ZD G d+ d,e1e@                   ZEd-ZFd.d/d0ZGd1eHd&ee@eeeAe@f                  f         fd2ZI G d3 d4          ZJ G d5 d6          ZK G d7 d8e"          ZL G d9 d:eL          ZM e-d;          ZN e-d<          ZOeee@eAf         eePeAf         f         ZQ G d= d>          ZR G d? d@eR          ZS G dA dBeS          ZT G dC dDeT          ZU G dE dFeS          ZV G dG dHeR          ZWdIeeP         d&dfdJZXe=dKk    r eXejY                   dS dS )L    N)BytesIO)AnyBinaryIODictIterableIteratorListMappingOptionalTupleUnioncastTYPE_CHECKING   )settings)CMap)CMapBase)CMapDB)
CMapParser)FileUnicodeMap)IdentityUnicodeMap)
UnicodeMap)
EncodingDB)name2unicodeFONT_METRICS)PDFException)	PDFStream)
dict_value)	int_value)
list_value)	num_value)resolve1resolve_all)stream_value)KWD)LIT)PSEOF)	PSKeyword)	PSLiteral)PSStackParser)literal_name)MatrixPoint)Rect)apply_matrix_norm)choplist)nunpack)PDFResourceManagerseqreturnc                    i }g }| D ]}t          |t                    r=|r:|d         }t          |          D ] \  }}||t          t          |          |z   <   !g }Tt          |t          t
          f          rq|                    |           t          |          dk    rI|\  }}}t          t          t          |          t          t          |          dz             D ]}|||<   g }|S )z;Build a mapping of character widths for horizontal writing.   r   )	
isinstancelist	enumerater   intfloatappendlenrange)r4   widthsrvchar1iwchar2s           L/var/www/html/ai-engine/env/lib/python3.11/site-packages/pdfminer/pdffont.py
get_widthsrI   :   s   !FA  a 	 "'ll 5 5FQ34F4U++a/00C<(( 	HHQKKK1vv{{$%!qtC//c51A1AA1EFF " "A !F1IIM    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.r7   r8      r   )
r9   r:   r;   r1   r   r<   r=   r>   r?   r@   )
r4   rA   rB   rC   rD   rE   rF   vxvyrG   s
             rH   get_widths2rO   O   s(   -/FA  a 	 "(1(1a..(A(A A A$QB45Bx=F4U++a/00C<(( 	HHQKKK1vv{{,-)q"btC//c51A1AA1EFF . .A!"RHF1IIMrJ   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fontnamer5   c                     t           |         S Nr   )clsrR   s     rH   get_metricszFontMetricsDB.get_metricse   s    H%%rJ   N)
__name__
__module____qualname__classmethodstrr   r   objectr<   rV    rJ   rH   rQ   rQ   d   s[        &3 &5c6k1BDcN1R+S & & & [& & &rJ   rQ   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datar5   Nc                 >    t          j        | |           i | _        d S rT   )r+   __init___cid2unicode)selfr`   s     rH   rb   zType1FontHeaderParser.__init__v   s"    tT***,.rJ   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   r[   rc   KeyErrorlogdebug)rd   cidnamees       rH   get_encodingz"Type1FontHeaderParser.get_encoding{   s    	""oo//dd   ")5d3oo)F)F!#&& " " "		#a&&!!!!!!!!"	"   s#    
((*A 
B!'BBpostokenc                     || j         u rl|                     d          \  \  }}\  }}t          |t                    r9t          |t                    r$|                     |t          |          f           d S )N   )KEYWORD_PUTpopr9   r<   r*   add_resultsr,   )rd   rn   ro   _keyvalues         rH   
do_keywordz Type1FontHeaderParser.do_keyword   su    D$$$%)XXa[["Xaz5#s## =
5)(D(D =  #|E':':!;<<<rJ   )rW   rX   rY   r&   KEYWORD_BEGINKEYWORD_ENDKEYWORD_DEFrr   KEYWORD_DICTKEYWORD_ARRAYKEYWORD_READONLYKEYWORD_FORr   rb   r   r<   r[   rm   r)   rx   r]   rJ   rH   r_   r_   k   s        CMMM#f++K#f++K#f++K3w<<LCMMMs;''#f++KX $    
!d38n ! ! ! !2c )       rJ   r_   )0123456789.rl   ze-N-z
Identity-Hz
Identity-V)z	DLIdent-Hz	DLIdent-Vr`   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	          |          }nd	|k    r|d
k    r|dz
  }nt          |                    d                    }d|k    r|dk    r|dz
  dz  |z   dz   }nd|k    r|dk    r|dz
  dz   |z
  dz
  }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                        >Hrq   r   )r   readordNIBBLESr=   structunpackr>   )r`   dfpstackcb0sloopbnnibblerw   b1b2s                 rH   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byyR3YYs(qB.4rSyy8/*R/#5__"99#IB88!GbLEE"HrRx/&-bggajj2Q2QRS2TTEUM&N HrJ   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   rl   fghrE   jklmr   opqrB   r   turC   rF   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   r5   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>HBr8   r   r7   )r   offsetsr   r   r   r@   r>   r2   tellbaseseek)rd   r   countoffsizerE   s        rH   rb   zCFFFont.INDEX.__init__a  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FrJ   c                 &    dt          |           z  S )Nz<INDEX: size=%d>)r?   rd   s    rH   __repr__zCFFFont.INDEX.__repr__k  s    %D		11rJ   c                 0    t          | j                  dz
  S Nr   )r?   r0  r7  s    rH   __len__zCFFFont.INDEX.__len__n  s    t|$$q((rJ   rE   c                     | j                             | j        | j        |         z              | j                             | j        |dz            | j        |         z
            S r:  )r   r3  r2  r0  r   )rd   rE   s     rH   __getitem__zCFFFont.INDEX.__getitem__q  sM    GLLT\!_45557<<QU 3dl1o EFFFrJ   c                 n     t           fdt          t                               D                       S )Nc              3   (   K   | ]}|         V  d S rT   r]   ).0rE   rd   s     rH   	<genexpr>z)CFFFont.INDEX.__iter__.<locals>.<genexpr>v  s'      ::AQ::::::rJ   )iterr@   r?   r7  s   `rH   __iter__zCFFFont.INDEX.__iter__u  s4    ::::s4yy)9)9::::::rJ   )rW   rX   rY   r   rb   r[   r8  r<   r;  bytesr=  r   rC  r]   rJ   rH   INDEXr.  `  s        	x 	D 	 	 	 		2c 	2 	2 	2 	2	)S 	) 	) 	) 	)	G 	G 	G 	G 	G 	G	;huo 	; 	; 	; 	; 	; 	;rJ   rE  rk   r   r5   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        |<   4n|
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  }1zn1|
dk    rJ t9          d|
f                      t/          d|
z            d S )NBBBBr   r   r   r      r       r      BBrq   zunsupported encoding format: %r.>r      F	Unhandledzunsupported charset format: %r)rk   r   r   r   r   rE  
name_index
dict_indexstring_index
subr_indexr   top_dictgetr3  r   r<   
charstringr?   nglyphscode2gidgid2coder;   r@   
ValueErrorname2gidgid2namer   getstrr[   )rd   rk   r   _major_minorhdrsizer5  charset_posencoding_poscharstring_posformatr   codegidrE   firstnleftsidsidnames                      rH   rb   zCFFFont.__init__x  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(sQwQ)P)PQQ * *s&)d#%)c""* w=dgll1oo66DQD1XX  !'tTW\\!__!E!E (9::  C*-DM$')-DM#&AIDD >GHHHT#{++,,,aWq A'U38_fmC#'M47<<PQTUPUCVCV&W&WXX  - -
c 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=FGGGrJ   rh  c                     |t          | j                  k     r| j        |         S | j        |t          | j                  z
           S rT   )r?   STANDARD_STRINGSrQ  )rd   rh  s     rH   r\  zCFFFont.getstr  sF     T*++++(-- s4+@'A'A!ABBrJ   )rW   rX   rY   rk  rE  r[   r   rb   r<   r   rD  r\  r]   rJ   rH   r   r      s        HT; ; ; ; ; ; ; ;0MS Mh M4 M M M M^C# C%U
"3 C C C C C CrJ   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rW   rX   rY   r]   rJ   rH   CMapNotFoundro    s        rJ   rq  rk   r   r5   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        |<   mn# t          j        $ r Y nw xY wd S )Nr   >HHHHr   z>4sLLLr   )rk   r   tablesr   fonttyper   r   r<   r   r   r@   rD  error)rd   rk   r   ntables_1_2_3ru   
name_bytestsumoffsetlengths               rH   rb   zTrueTypeFont.__init__  s   	46

	$(c3S()6="''!**+M+M% %!Wb"b 7^^ ; ;59%c3./xQS1U1U6 62T66 ,26*:J''	;
 | 	 	 	 D		
 	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   r8   )r   
   z>HHH   .z>256Br   rq   z>256Hi   i    r   z>HHhHr   rs  z>%dHz>%dhi  FrN  )rt  rm  rq  r   r3  r   r   r<   r   r   r   r@   r>   updater;   maxr1  zipr[   r   itemsadd_cid2unichr)+rd   base_offsetr~  r   version
nsubtables	subtablesrE   char2gidplatform_idencoding_id	st_offsetfmttypefmtlenfmtlangsubheaderkeys
firstbytesr   nhdrshdrs	firstcodeentcountdeltar}  rn   rf  r   re  segcountrx  ry  rz  ecsscsiddsidrsecsciddidrr   unicode_mapchars+                                              rH   create_unicode_mapzTrueTypeFont.create_unicode_map  st   $+%%++ $G 4fW
 $U38_fmE277ST::6V6V W W*02	z"" 	 	AU3S=)6=+L+LMM    $&5> H	: H	:1[+y  1$$)9)9kW>T>TGGK)+,,,)-c3m$fmFBGGAJJ&G&G* *&Wfg !||U38_fmGRWWS\\.R.RSS    
 A $#s(OV]7BGGCLL%I%I! !  S4Z
'66 + +FQ)*JqAv&&M**a/!3=?u Y YA;?c3S016="''RS**3U3U< <8Y% KKIx		APV@V WXXXX<@ 	2 	28Q	8UC# ! %A!);<EGGCLLL"8__ 2 2"5:v}T2771::/N/NOOPQR )5LC.1++	2	2 A)-#sC,-v}Wbggajj/Q/Q* *&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  +.c3d*C*C = =&RS# =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 	2KT3&&sD1111rJ   )
rW   rX   rY   	Exceptionrq  r[   r   rb   r   r  r]   rJ   rH   rm  rm    s            y   S h 4    *]N ] ] ] ] ] ]rJ   rm  c                       e Zd ZdS )PDFFontErrorNrp  r]   rJ   rH   r  r  H          DrJ   r  c                       e Zd ZdS )PDFUnicodeNotDefinedNrp  r]   rJ   rH   r  r  L  r  rJ   r  StandardEncodingType1Cc            	       "   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dS )PDFFontN
descriptorrA   default_widthr5   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                    | _        t#          t$          t'          t          |                    d
d                                        | _        dx| _        | _        | j        dk    r| j         | _        d S )NFontNameunknownFlagsr   AscentDescentItalicAngleMissingWidthLeadingFontBBox)r   r   r   r   gMbP?)r  r$   rA   r#   rT  rR   r9   r*   r,   r    flagsr"   ascentdescentitalic_angler  leadingr   r/   r!   bboxhscalevscale)rd   r  rA   r  s       rH   rb   zPDFFont.__init__Y  s    %%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!=!=>>*[
L)Q)QRRSS
 
	 %*)dk <! L=DLrJ   c                     dS )Nz	<PDFFont>r]   r7  s    rH   r8  zPDFFont.__repr__{  s    {rJ   c                     dS NFr]   r7  s    rH   is_verticalzPDFFont.is_vertical~      urJ   c                     dS r  r]   r7  s    rH   is_multibytezPDFFont.is_multibyte  r  rJ   rD  c                      t          |          S rT   )	bytearrayrd   rD  s     rH   decodezPDFFont.decode  s    rJ   c                      | j         | j        z  S )z.Ascent above the baseline, in text space units)r  r  r7  s    rH   
get_ascentzPDFFont.get_ascent  s    {T[((rJ   c                      | j         | j        z  S )z@Descent below the baseline, in text space units; always negative)r  r  r7  s    rH   get_descentzPDFFont.get_descent  s    |dk))rJ   c                 h    | j         d         | j         d         z
  }|dk    r| j         }|| j        z  S )Nrq   r   )r  r  r  )rd   rF   s     rH   	get_widthzPDFFont.get_width  s8    IaL49Q<'66##A4;rJ   c                 v    | j         d         | j         d         z
  }|dk    r| j        | j        z
  }|| j        z  S )Nr8   r   r   )r  r  r  r  )rd   r   s     rH   
get_heightzPDFFont.get_height  s;    IaL49Q<'66dl*A4;rJ   rj   c                    	 t          t          t          t          f         | j                  |         | j        z  S # t          $ r{ t          t          t          t          f         | j                  }	 ||                     |                   | j        z  cY S # t          t          f$ r | j
        | j        z  cY cY S w xY ww xY wrT   )r   r   r<   r=   rA   r  rg   r[   	to_unichrr  r  )rd   rj   
str_widthss      rH   
char_widthzPDFFont.char_width  s    	8S%Z($+66s;dkII 	8 	8 	8d3:.<<J8!$.."5"56DDDD23 8 8 8)DK7777778		8s-   9< 6C3"BC B=8C<B==Cc                     dS )DReturns an integer for horizontal fonts, a tuple for vertical fonts.r   r]   rd   rj   s     rH   	char_dispzPDFFont.char_disp  s    qrJ   r   c                 `     t           fd                     |          D                       S )Nc              3   B   K   | ]}                     |          V  d S rT   )r  )r@  rj   rd   s     rH   rA  z'PDFFont.string_width.<locals>.<genexpr>  s/      BBC4??3''BBBBBBrJ   )sumr  )rd   r   s   ` rH   string_widthzPDFFont.string_width  s0    BBBB4;;q>>BBBBBBrJ   c                     t           rT   )NotImplementedErrorr  s     rH   r  zPDFFont.to_unichr  s    !!rJ   rT   )rW   rX   rY   r
   r[   r   FontWidthDictr   r=   rb   r8  boolr  r  rD  r   r<   r  r  r  r  r  r  r   r   r  r  r  r]   rJ   rH   r  r  X  s       
 *.	   CH%     	 
 
       D#    T    d     E  hsm        )E ) ) ) )*U * * * *5    E    
8c 
8e 
8 
8 
8 
8S U5%8N2O+O%P    Ce C C C C C"S "S " " " " " "rJ   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  rA   specr5   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_ENCODINGr9   dictr,   rT  r!   r   rm   cid2unicoder  r%   r   r   r   get_datarunr  rb   )rd   r  rA   r  encodingrk   diffstrms           rH   rb   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rJ   rj   c                     | j         r+	 | j                             |          S # t          $ r Y nw xY w	 | j        |         S # t          $ r t	          d |          w xY wrT   )r  
get_unichrrg   r  r  r  s     rH   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)
rW   rX   rY   r
   r[   r   r  rb   r<   r  r]   rJ   rH   r  r    s        CH%  c3h	
 
   6	2S 	2S 	2 	2 	2 	2 	2 	2rJ   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rsrcmgrr3   r  r5   Nc                   
 	 t          |d                   | _        n2# t          $ r% t          j        rt          d          d| _        Y nw xY w	 t                              | j                  \  }}t          t          t          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-          t/          |                    }	|	                                | _        d S )NBaseFontBaseFont is missingr  FontDescriptor	FirstCharr   Widthsr   c                 "    i | ]\  }}|z   |S r]   r]   r@  rE   rF   	firstchars      rH   
<dictcomp>z)PDFType1Font.__init__.<locals>.<dictcomp>  s#    KKK6Aqa)mQKKKrJ   r  FontFileLength1)r,   basefontrg   r   STRICTr  rQ   rV   r   r   r[   r=   r   rT  r    r!   r;   r  rb   r%   fontfiler  r_   r   rm   r  )rd   r  r  r  
int_widthsrA   
width_listlength1r`   parserr  s             @rH   rb   zPDFType1Font.__init__  s   	&(j)9::DMM 	& 	& 	& :"#8999%DMMM	&	L'4'@'@'O'O$Z$sEz*J77FF 	L 	L 	L#DHH-=r$B$BCCJ!$((;":":;;I#DHHXsSy$A$ABBJKKKKYz5J5JKKKFFF	L 	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D0/D0c                     d| j         z  S )Nz<PDFType1Font: basefont=%r>r  r7  s    rH   r8  zPDFType1Font.__repr__  s    ,t}<<rJ   rW   rX   rY   r
   r[   r   rb   r8  r]   rJ   rH   r  r    sc         4 GCH<M RV    8=# = = = = = =rJ   r  c                       e Zd ZdefdZdS )PDFTrueTypeFontr5   c                     d| j         z  S )Nz<PDFTrueTypeFont: basefont=%r>r  r7  s    rH   r8  zPDFTrueTypeFont.__repr__  s    /$-??rJ   N)rW   rX   rY   r[   r8  r]   rJ   rH   r  r    s6        @# @ @ @ @ @ @rJ   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  r3   r  r5   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      rH   r  z)PDFType3Font.__init__.<locals>.<dictcomp>  s#    GGGv1!i-GGGrJ   r  r  )r  r  r  
FontMatrix)r   r   )r    rT  r!   r;   r   r  rb   r   r-   tuplematrixr  r  r  r0   r  r  )rd   r  r  r  rA   r  ru   r  s          @rH   rb   zPDFType3Font.__init__  s   dhh{A6677	A39 = =>>
GGGG:1F1FGGGt###D)9$:;;JJ$%!jAQRRJtZ>>>65DHH\4J4J)K)K#L#LMM,0I)DL!T[%6t{F%K%K"dkrJ   c                     dS )Nz<PDFType3Font>r]   r7  s    rH   r8  zPDFType3Font.__repr__  s    rJ   r  r]   rJ   rH   r  r     sc         4 GCH<M RV     #            rJ   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  r3   r  strictr5   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Orderingz{}-{}r  zFontDescriptor is missing	FontFile2r  r  Identity)zAdobe-Identityz	Adobe-UCSW2c                 *    i | ]\  }\  }\  }}|||fS r]   r]   )r@  rj   ru   rM   rN   s        rH   r  z'PDFCIDFont.__init__.<locals>.<dictcomp>X  s+    TTT,@S-1hr2#BxTTTrJ   DW2ip  ic                      i | ]\  }\  }}||S r]   r]   )r@  rj   rF   ru   s       rH   r  z'PDFCIDFont.__init__.<locals>.<dictcomp>[  s"    BBB#v1c1BBBrJ   r   r   DWi  )r  )'r,   r  rg   r  r   rT  cidsysteminfor#   r  rc  	cidcodingget_cmap_from_speccmapr%   r	  rm  r   r  r  r9   r   r   r   r  r   r  rq  r   get_unicode_mapr  verticalrO   r!   r  dispsr  rI   r  rb   )rd   r  r  r  cid_registrycid_orderingr  ttfr  	cmap_namer  widths2rN   rF   rA   r  s                   rH   rb   zPDFCIDFont.__init__  sV   	&(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
 
 !lCC"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NDI$9$9$;$;$ $   &    	--//= 	1!*TXXdB-?-?"@"@AAGTTGMMOOTTTDJtxxU|<<==GR!%r
DBB'--//BBBFMM DJ !D
488C+<+< = =>>F HHT400Mz6OOOsE    "AAD0 0EE$J> >KK6L LL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_cmaprq  r  r   )rd   r  r  r6  rl   s        rH   r.  zPDFCIDFont.get_cmap_from_specf  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  rk   CMapNamezEncoding is unspecifiedz!CMapName unspecified for encoding)
hasattrr,   rg   r  typer   r   rT  rk   IDENTITY_ENCODER)r  r  r6  spec_encodingcmap_name_streams        rH   r9  zPDFCIDFont._get_cmap_namex  s    		> ,M}f-- D(j)9::		(z)BCC	 	> 	> 	> >"#<===> >	> 	??i''*.y)*D*D---,00<<A		 L&'JKKK##Iy999s   AA A&%A&c                 B    d                     | j        | j                  S )Nz+<PDFCIDFont: basefont={!r}, cidcoding={!r}>)rc  r  r-  r7  s    rH   r8  zPDFCIDFont.__repr__  s#    <CCM4>
 
 	
rJ   c                     | j         S rT   )r1  r7  s    rH   r  zPDFCIDFont.is_vertical  s
    }rJ   c                     dS )NTr]   r7  s    rH   r  zPDFCIDFont.is_multibyte  s    trJ   rD  c                 6    | j                             |          S rT   )r/  r  r  s     rH   r  zPDFCIDFont.decode  s    y&&&rJ   rj   c                 B    | j                             || j                  S )r  )r2  rT  r  r  s     rH   r  zPDFCIDFont.char_disp  s    z~~c4#4555rJ   c                     	 | j         st          |          | j                             |          S # t          $ r t          | j        |          w xY wrT   )r  rg   r  r  r-  r  s     rH   r  zPDFCIDFont.to_unichr  sb    	<# $smm##..s333 	< 	< 	<&t~s;;;	<s	   /2  A)rW   rX   rY   r   r=   r   r   __annotations__r   r  r
   r[   r   r  rb   r   r.  staticmethodr9  r8  r  r  rD  r   r<   r  r  r  r]   rJ   rH   r  r    s        uXe_e%;<<====  	M M%M c3hM 	M
 
M M M M^wsCx'8 $ 8    $ :WS#X. : : : : : \:0
# 
 
 
 

T    d    'E 'hsm ' ' ' '6S 6U5%8N2O+O%P 6 6 6 6<S <S < < < < < <rJ   r  argvc                     ddl m}  |dt                     | dd          D ]E}t          |d          }t	          ||          }t          |           |                                 Fd S )Nr   )warnzThe function main() from pdffont.py will be removed in 2023. It was probably introduced for testing purposes a long time ago, and no longer relevant. Feel free to create a GitHub issue if you disagree.r   rb)warningsrL  DeprecationWarningopenr   printclose)rJ  rL  fnamer   fonts        rH   mainrU    s    D	> 		   abb  %ub!!d





FrJ   __main__)Zloggingr   sysior   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   cmapdbr   r   r   r   r   r   r   
encodingdbr   r   fontmetricsr   pdftypesr   r   r   r    r!   r"   r#   r$   r%   psparserr&   r'   r(   r)   r*   r+   r,   utilsr-   r.   r/   r0   r1   r2   	pdfinterpr3   	getLoggerrW   rh   r\   r<   r=   rI   rO   rQ   r_   r   r?  rD  r   r   rm  r  r  r  LITERAL_TYPE1Cr[   r  r  r  r  r  r  r  rU  rJ  r]   rJ   rH   <module>rd     s     



                                                                " " " " " " & & & & & &       " " " " " " $ $ $ $ $ $ % % % % % % " " " " " "                                           + + + + + + + + " " " " " "                               # # # # # # " " " " " "                       $ $ $ $ $ $             .------g!!HV$ c5j)9    *Xf% $sE%,4G/G*H    *& & & & & & & &. . . . .M#. . . .b X
   +% +Dd5+<&=!=> + + + +\xC xC xC xC xC xC xC xCvv v v v v v v vr	 	 	 	 	< 	 	 		 	 	 	 	< 	 	 	  C 233 X d3:&S%Z(889W" W" W" W" W" W" W" W"t%2 %2 %2 %2 %2G %2 %2 %2P= = = = == = = =B@ @ @ @ @l @ @ @
         =      (U< U< U< U< U< U< U< U<ptCy T    $ zDNNNNN rJ   