
    *'hH                        U d dl Z d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
 ddlmZmZ ddlmZmZ ddlmZmZmZmZ d	ed
ededeeee	eeeef   f   eeef   ef   fdZd
ededeeee	eeeef   f   eeef   f   fdZddej9                   ed      d      i fZeeee	eeeef   f   eeef   f   ed<   i ddddddddddddddddd d!d"d!d#d$d%d$d&d$d'd$d(dd)dd*d!d+d!iZ eeef   ed,<   i d-d.d/d.d0d.d1d.d2d3d4d3d5d3d6d3d7d8d9d8d:d8d;d8d<d=d>d=d?d=d@d=dAd=dBd3iZ!eeef   edC<   dedee	eeeef   f   eeef   f   fdDZ"dede	eeeef   f   fdEZ#dedeeeef   ee   f   fdFZ$dGedHe	eeeef   f   dIeeef   defdJZ%dede&fdKZ'dLe&dMe(dNe(dOe	deeef   f   dIeeef   dPee   dee(e(e	deeef   f   f   fdQZ)dLe&dIeeef   dPee   dOe	deeef   f   de	deeef   f   f
dRZ*dLe&dIeeef   dPee   ddfdSZ+dedTedeeef   fdUZ,dVeeef   dWedefdXZ-dVeeef   dYedefdZZ.dedIeeef   dPee   deeeef   ee   f   fd[Z/y)\    N)	unhexlify)ceil)AnyDictListTupleUnioncast   )adobe_glyphscharset_encoding)logger_errorlogger_warning)DecodedStreamObjectDictionaryObjectStreamObjectis_null_or_none	font_namespace_widthobjreturnc                 H    |d   d   |    }t        ||      \  }}}}|||||fS )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           R/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/pypdf/_cmap.pybuild_char_mapr       sC      |,W5i@B<TR=9L.- "DD    r   c                     t        t        |d   j                               }t        |      \  }}t	        d||      }t        || dz        }t        ||      dz  }||||fS )ak  
    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   (   su      S"Z.3356I%b)Hh'Xx@N)"kC.?@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                     t        |       }t        |       \  }}t        |t              r|D ]  }|dk  s	t	        |      ||<    ||fS )N   )_parse_encoding_parse_to_unicode
isinstancedictchr)r   r-   r.   	int_entryxs        r   r(   r(   ~   sY     r"H+B/Hi (D! 	%ACx!!f	% Xr!   c                 @   g }d| vrYd| v rQt        t        | d         t        v r8t        t	        t        d      t        t        t        | d                        }|S d}|S | d   j                         }t        |t              rF	 |t        v rt        |   j                         }n$|t        v r
t        |   }nd|v rd}nt        d      nUt        |t              r.d
|v r*	 t        t        t        |d
            j                         }nt        d   j                         }d|v r[d}t        t        t        t        |      d         D ]5  }t        |t              r|}	 |t        |      k  rt         |   ||<   |dz  }7 t        |t"              rt        t	        t        d      |            }|S # t        $ r t        d| d	t               |}Y w xY w# t        $ r. t        d| d	t               t        d   j                         }Y w xY w# t        $ r |||<   Y w xY w)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'   rB   copyr:   	Exceptionr   __name__r   intlenr   list)r   r-   encrF   os        r   r@   r@      s4    79H""c2k?!;?O!OE#J 0c2k?1K LMH
  !H(*;(B(B(DC#s	 &&+C0557((+C0S&,, 
C)	*#/E	D'S#o2F(GHMMOH $$78==?&-=s(CN(ST 		A!S!$3x=(&21o Q		 (D!E#J12O;  	-cU2FGRH	  	D$XJ.BC ((;<AACH	D$ ! $"#HQK$s7   AF- (G H-GG4H	H	HHc           	          i }g }d| vr&| j                  dd      dk(  rt        | ||      S i g fS d}d}d }t        |       }|j                  d      D ]%  }t	        |j                  d      |||||      \  }}}' ||fS )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-%b(I>>2vJL 	  
BB 
1@JJv2
.
L,
 Yr!   
value_charr-   r.   c                    i }t        |t              r3|j                         D ci c]  \  }}|| k(  s|t        |       }}}n)|j                         D ci c]  \  }}|| k(  s|| }}}|j	                  | |       S c c}}w c c}}w )N)rB   rC   itemsrD   rX   )rc   r-   r.   key_dictkeyvalues         r   r)   r)      s     H(D!6>nn6F^
U%S]J]E3s8O^^191AY:3UjEXE3JYY<<
J// _Ys   BBB'Bc                 
   | d   }t        |t              r"t        t        | d         j	                         }nd}t        |t
              r|j                         }|j                         j                  dd      j                  dd      j                  dd      j                  d	d
      j                  dd      j                  dd      }|j                  d      }t        t        |            D ]P  }||   j                  d      }|dk\  s|dk(  rd}n||   d | j                  dd      }|dz   ||   |dz   d  z   ||<   R dj                  |      j                  dd      j                  dd      j                  dd      }|S )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      so   	L	B"l#%r,'78AAC ?"cYY[ 	
	!3	4	/	0	"5	6	 1	2		!		!  
$B3r7^ 	4qEJJt6Av Q%)++D#6dNRU1q57^3BqE	4 
2	v		x	 			  Ir!   rb   r^   r_   r`   rE   c                 :   | dk(  s| d   dk(  r|||fS | j                  dd      } d| v rd}n6d| v rd	}n/d
| v rd}n(d| v rd	}n!|r	 t        | |||      }n|rt        | ||       |||fS # t        j                  $ r }t	        d| d| t
               Y d }~3d }~ww xY w)Nr!   r   %      	rq   rl   Trm   Frj   rk   zSkipping broken line z: )rw   parse_bfrangebinasciiErrorr   rN   parse_bfchar)rb   r^   r_   r`   r.   rE   errors          r   r\   r\     s     s{d1gm<55<<t$D$
	$	
	4					P(xLQL 
T8Y/|\11	 ~~ 	P24("UGDhOO	Ps   A' 'B:BBc                 D   | j                  d      D cg c]  }|s|	 }}d}|d|d   dz  z  }|d   }|d   }	|D ]f  }
|
dk(  rd	} nt        |
      j                  d
d      |t        ||z        j                  |d   dk(  rdnd
d      <   |j                  |       |dz  }h nmt	        |d   d      }t	        |d   d      }	t        t        |d         t        |d               }t        |dz        |d<   d|d   dz  z  }|d   dk(  rn|dd  D ]e  }
|
dk(  rd	} nt        |
      j                  d
d      |t        ||z        j                  |d   dk(  rdnd
d      <   |j                  |       |dz  }g nt	        |d   d      }dt        dt        |d               z  }d	}||	k  rht        ||z        j                  d
d      |t        ||z        j                  |d   dk(  rdnd
d      <   |j                  |       |dz  }|dz  }||	k  rh|rd S ||	fS c c}w )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   ;  s    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 cAg&--%-b\Q%6	K'   #Q CFBAs1c#a&k22D Mq& dQh'..{OL cAg&--%-b\Q%6	K'   #QQ q& !4,q!f,g -s
   HHc                    | j                  d      D cg c]  }|s|	 }}t        |d         dz  |d<   t        |      dkD  rd}|d   dk7  r1t        |d         j                  t        |d         dk  rd	nd
d      }||t        |d         j                  |d   dk(  rd	nd
d      <   |j	                  t        |d   d             |dd  }t        |      dkD  ry y c c}w )Nrq   r   r   r   r   rV   rp   r   rI   r5   r   r   )r[   rP   r   r   r   rO   )rb   r.   rE   rF   r   map_tos         r   r   r   w  s    jj&
,!1
,C
,s1v;!#HRL
c(Q,q6T>s1v&-- Q[1_	+F 	 	c!f$$%b\Q.	K	

 	SVR)!"g c(Q, -s
   CCdefault_font_widthc                    i }d}d}	 t         t        t        | d   j                                  dz  }d| v r| d   d   j                         }d|v r%t        t
        |d   j                               |d<   n||d<   d|v r|d   j                         }ng }t        |      dkD  rt        |d   t              r|d   n|d   j                         }|d   j                         }t        |t              rm|}|d	   j                         }t        |t        t
        f      st        d
| dt               |dd  }t        ||dz         D ]  }	||t        |	      <    |dd  }ngt        |t              r2|}	|D ]%  }
|
j                         }||t        |	      <   |	dz  }	' |d	d  }n%t        d|d   j                         z   t               nt        |      dkD  r2nd| v r| d   j                         }d| v r/dt        t        | d         v r| d   d   j                         |d<   n=d}d}|D ]"  }|j                         }|dkD  s||z  }|dz  }$ |t!        d|      z  |d<   t        t        | d         }t        t        | d         }t        ||dz         D ]'  }		 ||	|z
     j                         }||t        |	      <   ) t%        |j'                  d            r	|r|nd|d<   |S # t        $ r Y w xY w# t"        t        f$ r Y pw xY w)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   
IndexErrorr   rX   )r   r   r0   stenft1wsecondwidthc_codewwmcptxxs                 r   r*   r*     s`    (*NBB7S"[/B\B\B^8_`cff R #$Q'224C<(,UCJ4I4I4K(LN9%(:N9%3;D	$$&AA!fqj#AaD#.1AaDOO4EBqT__&F&#&!)!%#u6"%KE7R`#ackl!"A#BQ/ 8F27N3v;/8abEFD)   BMMOE27N3v;/aKF  abE)SY,@,@,BB 7 !fqj8 
byM$$&"$b!23;
 (
 )++<(=o(N(Y(Y([N9% AC ]]_6GA1HC	
 )*C3KN9%#r,'(#r+'BQ' 	F&2+113.3s6{+	 ~)))45:L$6RUy!O  B )  s#   +K# $K3#	K0/K03LLr0   
space_charc                 p    	 | |   }|dk(  rt        d      	 |S # t        t         f$ r | d   dz  }Y |S w xY w)Nr   z
Zero widthr   r%   )
ValueErrorr   )r0   r   sp_widths      r   r+   r+     s^    
!*-q=\**  O j! 
9%+ 	 O
s    55charc                 @    d}	 | |   }|S # t         $ r	 | d   }Y |S w xY w)Nr   r   )r   )r0   r   
char_widths      r   compute_font_widthr     sF     J
#D)
   
9% 	 
s    c           	      b   d| vr||fS t        t        | d         j                  d      }t        |      r||fS |J d       |j	                         j                         }|j                  d      d   }|j                  d      d   }|j                  dd	      j                  d	      }|D ]  }|j                  d
      s|j                  d      D cg c]
  }|dk7  s	| }}t        |      dkD  r	|d   dk7  rP	 t        |d         }		 t        |d   j                            }
|
|t        |	      <   |j!                  |	        ||fS c c}w # t        $ r Y w xY w# t        $ rF |d   j                  d      r-	 t        t        |d   dd  d            }
n# t        $ r Y Y w xY wY Y w xY w)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.>BB#IR>E>5zA~%(f"4aM	 q!23  !HSVQ) * Y' ?
    8&&w/!E!HQRL" 56% ! ! 	 sT   
EE=EE	EEF.=FF.	F&"F.%F&&F.-F.)0r   r   mathr   typingr   r   r   r   r	   r
   _codecsr   r   _utilsr   r   genericr   r   r   r   r&   r   rO   r    r   rC   fromkeysrK   r4   __annotations__r:   r=   r(   r@   rA   r)   bytesrZ   boolr\   r   r   r*   r+   r   rY    r!   r   <module>r      s      6 6 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$66
3S#X6r
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!   