
    iI                        % S SK r S SK Jr  S SK Jr  S SKJr  S SKJrJrJ	r	  SSK
JrJr  SSKJrJr  SS	KJrJrJrJrJrJr  S
\S\S\S\\\\\\\\4   4   \\\4   \4   4S jrS\S\S\\\\\\\\4   4   \\\4   4   4S jrSS\R=                  \" S5      S5      0 4r \\\\\\\\4   4   \\\4   4   \!S'   0 SS_SS_SS_SS_SS_SS_SS_S S_S!S"_S#S"_S$S%_S&S%_S'S%_S(S%_S)S_S*S_S+S"_S,S"0Er"\\\4   \!S-'   0 S.S/_S0S/_S1S/_S2S/_S3S4_S5S4_S6S4_S7S4_S8S9_S:S9_S;S9_S<S9_S=S>_S?S>_S@S>_SAS>_SBS>_SCS40Er#\\\4   \!SD'   S\S\\\\\\4   4   \\\4   4   4SE jr$S\S\\\\\4   4   4SF jr%S\S\\\\4   \&\   4   4SG jr'SH\SI\\\\\4   4   SJ\\\4   S\4SK jr(S\S\)4SL jr*SM\)SN\+SO\+SP\S\\\4   4   SJ\\\4   SQ\&\   S\\+\+\S\\\4   4   4   4SR jr,SM\)SJ\\\4   SQ\&\   SP\S\\\4   4   S\S\\\4   4   4
SS jr-SM\)SJ\\\4   SQ\&\   SS4ST jr.S\SU\S\\\4   4SV jr/SW\\\4   SX\S\4SY jr0SW\\\4   SZ\S\4S[ jr1S\SJ\\\4   SQ\&\   S\\\\4   \&\   4   4S\ jr2g)]    N)Error)	unhexlify)ceil)AnyUnioncast   )adobe_glyphscharset_encoding)logger_errorlogger_warning)ArrayObjectDecodedStreamObjectDictionaryObject
NullObjectStreamObjectis_null_or_none	font_namespace_widthobjreturnc                 >    US   S   U    n[        X5      u  pEpgXEXgU4$ )a{  
Determine information about a font.

Args:
    font_name: font name as a string
    space_width: default space width if no data is found.
    obj: XObject or Page where you can find a /Resource dictionary

Returns:
    Font sub-type, space_width criteria (50% of width), encoding, map character-map, font-dictionary.
    The font-dictionary itself is suitable for the curious.

z
/Resourcesz/Font)build_char_map_from_dict)r   r   r   ftfont_subtypefont_halfspacefont_encodingfont_maps           E/home/james-whalen/.local/lib/python3.13/site-packages/pypdf/_cmap.pybuild_char_mapr       s9      |,W5i@B<T=9L- "DD    r   c                     [        [        US   R                  5       5      n[        U5      u  p4[	        SX45      n[        XS-  5      n[        Xe5      S-  nUUUU4$ )aG  
Determine information about a font.

Args:
    space_width: default space with if no data found
         (normally half the width of a character).
    ft: Font Dictionary

Returns:
    Font sub-type, space_width criteria(50% of width), encoding, map character-map.
    The font-dictionary itself is suitable for the curious.

/Subtype        @)r   str
get_objectget_encodingget_actual_str_keybuild_font_width_mapcompute_space_width)r   r   	font_typeencodingmap_dictspace_key_charfont_width_maphalf_space_widths           r   r   r   +   sm      S"Z.3356I%b)H'X@N)"C.?@N*>JSP 	 r!   Unknowni'     u   �unknown_char_mapz/Identity-H	utf-16-bez/Identity-Vz	/GB-EUC-Hgbkz	/GB-EUC-Vz/GBpc-EUC-Hgb2312z/GBpc-EUC-Vz
/GBK-EUC-Hz
/GBK-EUC-Vz/GBK2K-Hgb18030z/GBK2K-Vz
/ETen-B5-Hcp950z
/ETen-B5-Vz/ETenms-B5-Hz/ETenms-B5-Vz/UniCNS-UTF16-Hz/UniCNS-UTF16-Vz/UniGB-UTF16-Hz/UniGB-UTF16-V_predefined_cmapz/CourieriX  z/Courier-Boldz/Courier-BoldObliquez/Courier-Obliquez
/Helveticai  z/Helvetica-Boldz/Helvetica-BoldObliquez/Helvetica-Obliquez/Helvetica-Narrow   z/Helvetica-NarrowBoldz/Helvetica-NarrowBoldObliquez/Helvetica-NarrowObliquez/Times-Roman   z/Times-Boldz/Times-BoldItalicz/Times-Italicz/Symbolz/ZapfDingbats_default_fonts_space_widthc                     [        U 5      n[        U 5      u  p#[        U[        5      (       a  U H  nUS::  d  M  [	        U5      X'   M     X4$ )N   )_parse_encoding_parse_to_unicode
isinstancedictchr)r   r-   r.   	int_entryxs        r   r(   r(      sQ     r"H+B/H (D!!ACx!!f  r!   c                    / nSU ;  a]  SU ;   aS  [        [        U S   5      [        ;   a8  [        [	        [        S5      [        [        [        U S   5         5      5      nU$ SnU$ [        [        [        [        [        4   U S   R                  5       5      n[        U[        5      (       aK   U[        ;   a  [        U   R                  5       nOU[        ;   a
  [        U   nOpSU;   a  SnOg[        S5      e[        U[        5      (       a0  S
U;   a*   [        [        [        US
   5         R                  5       nO[        S   R                  5       n[        U[        5      (       a[  SU;   aU  Sn[        [        US   5       H<  n[        U[         5      (       a  UnM   U[#        U5      :  a  [$        U   X'   US-  nM>     [        U[&        5      (       a  [        [	        [        S5      U5      5      nU$ ! [         a    [        SU S	3[        5        Un Nf = f! [         a/    [        SU S	3[        5        [        S   R                  5       n GNf = f! [         a    XAU'    Nf = f)Nz	/Encoding	/BaseFontr3   charmapz-UCS2-r5   z	not foundzAdvanced encoding z not implemented yetz/BaseEncodingz/StandardEncodingz/Differencesr   r	   )r   r&   r   rC   zipranger   r   r   r'   rB   copyr:   	Exceptionr   __name__intlenr
   list)r   r-   encrF   os        r   r@   r@      sT    79H""c2k?!;?O!OE#J 0c2k?1K LMH
  !H48c#Z/0"[/2L2L2N5C #s	 &&+C0557((+C0S&,, 
C)	*	*#/E	D'S#o2F(GHMMOH $$78==?#'((^s-B&N(;<A!S!!$3x=(&21o Q = (D!!E#J12O;  	-cU2FGRH	  	D$XJ.BC ((;<AACH	D$ ! $"#QK$sH   /!G: G: %G: .G: (H  "I: HH 5III-,I-c           	          0 n/ nSU ;  a&  U R                  SS5      S:X  a  [        XU5      $ 0 / 4$ SnSnS n[        U 5      nUR                  S5       H%  n[	        UR                  S5      UUUUU5      u  p4nM'     X4$ )N
/ToUnicoder#    z/Type1F   
s    	)get_type1_alternative
prepare_cmsplitprocess_cm_linestrip)r   r.   rE   
process_rgprocess_charmultiline_rgcmlines           r   rA   rA      s    
  "H I266*b!X-%bI>>2vJL 	  
BB1@JJv2
.
,   r!   
value_charr-   r.   c                 ,   0 n[        U[        5      (       a6  UR                  5        VVs0 s H  u  pEXP:X  d  M  U[        U5      _M     nnnO+UR                  5        VVs0 s H  u  pEXP:X  d  M  XT_M     nnnUR	                  X 5      $ s  snnf s  snnf )N)rB   rC   itemsrD   rX   )rc   r-   r.   key_dictkeyvalues         r   r)   r)      s     H(D!!6>nn6F^6F
%J]OE3s8O6F^191AY1A:3UEXJEJ1AY<<
// _Ys   B
B
!B0Bc                     U S   n[        U[        5      (       a"  [        [        U S   5      R	                  5       nOSn[        U[
        5      (       a  UR                  5       nUR                  5       R                  SS5      R                  SS5      R                  SS5      R                  S	S
5      R                  SS5      R                  SS5      nUR                  S5      n[        [        U5      5       HP  nX4   R                  S5      nUS:  d  M  US:X  a  SnOX4   S U R                  SS5      nUS-   X4   US-   S  -   X4'   MR     SR                  U5      R                  SS5      R                  SS5      R                  SS5      nU$ )NrU   s,   beginbfrange
<0000> <0001> <0000>
endbfrange   beginbfchars   
beginbfchar
	   endbfchars   
endbfchar
   beginbfranges   
beginbfrange

   endbfranges   
endbfrange
s   <<s   
{
s   >>s   
}
   <   >r      .    r!   r	      [s    [    ]s    ]
    rW   )rB   r   r   r   get_datar&   encoder]   replacer[   rK   rP   findjoin)r   tura   llijcontents          r   rZ   rZ      sh   	L	B"l##%r,'78AAC ?"cYY[ 	
	!3	4	/	0	"5	6	 1	2		!		!  
$B3r7^EJJt6Av %)++D#6dNRU1q57^3BE  
2	v		x	 			  Ir!   rb   r^   r_   r`   rE   c                 \   U S:X  d	  U S   S:X  a  XU4$ U R                  SS5      n SU ;   a  SnOCSU ;   a  S	nO:S
U ;   a  SnO1SU ;   a  S	nO(U(       a   [        XXS5      nOU(       a  [        XU5        XU4$ ! [        R                   a!  n[	        SU < SU 3[
        5         S nAN4S nAff = f)Nr!   r   %      	rq   rl   Trm   Frj   rk   zSkipping broken line z: )rw   parse_bfrangebinasciir   r   rN   parse_bfchar)rb   r^   r_   r`   r.   rE   errors          r   r\   r\   #  s     s{d1gm55<<t$D$
	$	
	4					P(QL 
TY/\11	 ~~ 	P24("UGDhOO	Ps   A6 6B+
B&&B+c                 l   U R                  S5       Vs/ s H  oD(       d  M  UPM     nnSnUb  SUS   S-  -  nUS   nUS   n	U Hh  n
U
S:X  a  S	n  GO[        U
5      R                  S
S5      U[        Xx-  5      R                  US   S:X  a  SOS
S5      '   UR                  U5        US-  nMj     GOq[	        US   S5      n[	        US   S5      n	[        [        US   5      [        US   5      5      n[        US-  5      US'   SUS   S-  -  nUS   S:X  aq  USS   Hg  n
U
S:X  a  S	n  O[        U
5      R                  S
S5      U[        Xx-  5      R                  US   S:X  a  SOS
S5      '   UR                  U5        US-  nMi     O[	        US   S5      nS[        S[        US   5      5      -  nS	nX::  ah  [        X-  5      R                  S
S5      U[        Xx-  5      R                  US   S:X  a  SOS
S5      '   UR                  U5        US-  nUS-  nX::  a  Mh  U(       a  S $ X4$ s  snf )Nrq   Fs   %%0%dX   r   r	   rs   Tr5   surrogatepassrI      rr         )r[   r   decodeappendrO   maxrP   r   )rb   r.   rE   r`   rF   lstclosure_foundfmtabsqnbicfmt2s                 r   r   r   @  sy    jj&
,&!1&C
,M8B<!+,OOBTz $ "$$[/B #'"))!)"!2I# QFA  AOAO#c!f+s3q6{+C!G}8B<!+,q6T>!"g:$(M bM((oF cg&--%-b\Q%6	K'   #Q  CFBAs1c#a&k22D M& dh'..{OL cg&--%-b\Q%6	K'   #QQ & !4,qf,g -s
   
H1H1c                 J   U R                  S5       Vs/ s H  o3(       d  M  UPM     nn[        US   5      S-  US'   [        U5      S:  a  SnUS   S:w  a3   [        US   5      R                  [        US   5      S:  a  S	OS
S5      nUU[        US   5      R                  US   S:X  a  S	OS
S5      '   UR                  [        US   S5      5        USS  n[        U5      S:  a  M  g g s  snf ! [         a&  n[        SU< SUS   < S3[        5         S nANS nAff = f)Nrq   r   r   r   r	   rV   rp   r   rI   r5   r   zGot invalid hex string: z ()r   )	r[   rP   r   r   BinasciiErrorr   rN   r   rO   )rb   r.   rE   rF   r   map_to	exceptions          r   r   r   |  s.   jj&
,&!1&C
,s1v;!#HRL
c(Q,q6T>`"3q6*11!$SVqIk? 	 	c!f$$%b\Q.	K	

 	SVR)!"g! c(Q, - ! `!9)bQ
RSTV^__`s"   
C-C-2C2 2
D"<DD"default_font_widthc                    0 nSnSn [         [        [        U S   R                  5       5         S-  nSU ;   Ga  U S   S   R                  5       nSU;   a%  [        [
        US   R                  5       5      US'   OXS'   SU;   a  US   R                  5       nO/ n[        U5      S:  GaK  [        US   [        5      (       a  US   OUS   R                  5       nUS   R                  5       n[        U[        5      (       as  UnUS	   R                  5       n[        U[        [
        45      (       d  [        S
U S3[        5        USS  nM  [        X4S-   5       H  n	X[        U	5      '   M     USS  nOn[        U[        5      (       a3  Un	U H%  n
U
R                  5       nX[        U	5      '   U	S-  n	M'     US	S  nO&[        SUS   R                  5       -   [        5        GO[        U5      S:  a  GMK  OSU ;   a  [        [        U S   R                  5       5      nSU ;   a1  S[        [         U S   5      ;   a  U S   S   R                  5       US'   O@SnSnU H$  nUR                  5       nUS:  d  M  X-  nUS-  nM&     U[#        SU5      -  US'   [        [        U S   5      n[        [        U S   5      n[        X4S-   5       H&  n	 XiU-
     R                  5       nX[        U	5      '   M(     ['        UR)                  S5      5      (       a  U(       a  UOSUS'   U$ ! [         a     GNf = f! [$        [        4 a     M}  f = f)Nr   rH   r%   z/DescendantFontsz/DWdefaultz/Wr	   r   z&Expected numeric value for width, got z. Ignoring it.r   zunknown widths : 
z/Widths/FontDescriptorz/MissingWidthz
/FirstCharz	/LastChar        )r=   r   r&   r'   KeyErrorfloatrP   rB   rO   r   rN   rK   rD   rQ   __repr__r   r   r   
IndexErrorr   rX   )r   r   r0   stenft1wsecondwidthc_codewwmcptxxs                 r   r*   r*     sS    (*NBB7S"[/B\B\B^8_`cff R #$Q'224C<(,UCJ4I4I4K(LN9%(:9%3;D	$$&AA!fqj#AaD#..1AaDOO4EBqT__&F&#&&!)!%#u66"%KE7R`#ackl!"A#BQ/F273v;/ 0abEFD)) BMMOE273v;/aKF ! abE)SY,@,@,BB 7 !fqj8 
bbm6689"$b!23;
 (
 )++<(=o(N(Y(Y([N9% AC]]_6GA1HC	 
 )*C3KN9%#r,'(#r+'BQ'F2+113.3s6{+ ( ~)))455:L$6RUy!O  B )  s#   +L" "L3"
L0/L03MMr0   
space_charc                 r     X   nUS:X  a  [        S5      e U$ ! [        [         4 a    U S   S-  n U$ f = f)Nr   z
Zero widthr   r%   )
ValueErrorr   )r0   r   sp_widths      r   r+   r+     s\    
!-q=\**  O j! 
9%+ 	 O
s    66charc                 @    Sn X   nU$ ! [          a	    U S   n U$ f = f)Nr   r   )r   )r0   r   
char_widths      r   compute_font_widthr     sD     J
#)
   
9% 	 
s   
 c           	         SU ;  a  X4$ [        [        U S   5      R                  S5      n[        U5      (       a  X4$ Uc   S5       eUR	                  5       R                  5       nUR                  S5      S   nUR                  S5      S   nUR                  SS	5      R                  S	5      nU H  nUR                  S
5      (       d  M  UR                  S5       Vs/ s H  owS:w  d  M
  UPM     nn[        U5      S:  a  US   S:w  a  M]   [        US   5      n	 [        US   R                  5          n
X[        U	5      '   UR!                  U	5        M     X4$ s  snf ! [         a     M  f = f! [         aO    US   R                  S5      (       a1   [        [        US   SS  S5      5      n
 N|! [         a      GM  f = f GM  f = f)Nr   z	/FontFilemypys   eexec
r   s	   /Encodingr	   rt   rW   s   duprq   r!   r   s   putr   s   /unir   r   )r   r   rX   r   r'   ru   r[   rw   
startswithrP   rO   r   r
   r   r   rD   r   )r   r.   rE   ft_desctxtlinesli_wwordsr|   vs              r   rY   rY     s   
 """#R(9%:;??LGw""&&




'
'
)C
))J

"C
))L
!!
$CKKu%++E2E==  "$((4.>.B#IR.E>5zA~%(f"4aM	 q!23  !SVQ) * ' ?
    8&&w//!E!HQRL" 56% ! ! sN    	E-EE#E4#
E10E14#GF55
G?GGGG)3r   r   r   r   mathr   typingr   r   r   _codecsr
   r   _utilsr   r   genericr   r   r   r   r   r   r&   r   tuplerC   rO   r    r   fromkeysrK   r4   __annotations__r:   r=   r(   r@   rQ   rA   r)   bytesrZ   boolr\   r   r   r*   r+   r   rY    r!   r   <module>r      s    +   # # 3 0 EE!&E-=E
3uS$sCx.014S>CSSTE.,
3uS$sCx.014S>ABD MM%*e$	S %UE#tCH~*=$>S#XNO $;$;$ $ 	$
 8$ 8$ %$ %$ 	$ 	$ '$ '$ G$ G$ {$  {!$" i#$$ i%$ $sCx. ...S. C. 	.
 #. s. c. #. . S. #C. . C. 3. .  S!." s#.$ S%. DcN ,
5d38n$%tCH~56$88
3S#X8v
4S>49$%B00$S$sCx.%890EI#s(^00&# & &R2
22 2 eCHo-.	2
 38n2 Cy2 4uT5c?23342:9-
9-38n9- Cy9- eCHo-.	9-
 4sCx !9-xu S#X 49 QU ,OO.3O	#u*Ode$25
e$
 $$38n$ Cy$ 4S>49$%	$r!   