
    iC                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
  SSK	Jr  SSK	Jr  SSK	Jr  SSK	Jr  SS	K	Jr  SS
KJr  SSKJr  SSKJr   " S S\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      r " S S\5      r " S S\5      r " S S 5      r " S! S"\
5      r  " S# S$5      r!S% r"S& r#\$S':X  a#  \RJ                  " \#" \RL                  5      5        gg)(a  Adobe character mapping (CMap) support.

CMaps provide the mapping between character codes and Unicode
code-points to character ids (CIDs).

More information is available on the Adobe website:

  http://opensource.adobe.com/wiki/display/cmap/CMap+Resources

    N   )PSStackParser)PSSyntaxError)PSEOF)	PSLiteral)literal_name)KWD)name2unicode)choplist)nunpackc                       \ rS rSrSrg)	CMapError!    N__name__
__module____qualname____firstlineno____static_attributes__r       B/home/kodi/my-venv/lib/python3.13/site-packages/pdfminer/cmapdb.pyr   r   !   s    r   r   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)CMapBase'   r   c                 .    UR                  5       U l        g N)copyattrsselfkwargss     r   __init__CMapBase.__init__+   s    [[]
r   c                 @    U R                   R                  SS5      S:g  $ )NWModer   r   getr!   s    r   is_verticalCMapBase.is_vertical/   s    zz~~gq)Q..r   c                      X R                   U'   g r   r   )r!   kvs      r   set_attrCMapBase.set_attr2   s    

1r   c                     g r   r   )r!   codecids      r   add_code2cidCMapBase.add_code2cid6       r   c                     g r   r   r!   r4   r3   s      r   add_cid2unichrCMapBase.add_cid2unichr9   r7   r   c                     g r   r   )r!   cmaps     r   use_cmapCMapBase.use_cmap<   r7   r   r-   N)r   r   r   r   debugr#   r*   r0   r5   r:   r>   r   r   r   r   r   r   '   s%    E/r   r   c                   P    \ rS rSrS rS rS rS r\R                  SS4S jr
Srg)	CMapB   c                 @    [         R                  " U 40 UD6  0 U l        g r   )r   r#   code2cidr    s     r   r#   CMap.__init__D   s    $)&)r   c                 >    SU R                   R                  S5      -  $ )Nz
<CMap: %s>CMapNamer'   r)   s    r   __repr__CMap.__repr__I   s    djjnnZ888r   c                 z   ^ [        U[        5      (       d   eU4S jmT" U R                  UR                  5        g )Nc                    > UR                  5        H.  u  p#[        U[        5      (       a  0 nX@U'   T" XC5        M*  X0U'   M0     g r   )items
isinstancedict)dstsrcr.   r/   dr   s        r   r   CMap.use_cmap.<locals>.copyO   s<    ))+a&&AFJF &r   )rN   rB   rE   )r!   r=   r   s     @r   r>   CMap.use_cmapL   s2    $%%%%	 	T]]DMM*r   c              #     #    U R                   (       a  [        R                   " SU < SU< 35        U R                  nU HA  nX2;   a-  X#   n[        U[        5      (       a  Uv   U R                  nM3  M5  U R                  nMC     g 7f)Nzdecode: , )r@   loggingrE   rN   int)r!   r3   rR   cs       r   decodeCMap.decodeZ   sl     ::MMdD9:MMAvDa%%GA & MM  	s   BBNc                     Uc  U R                   nSn[        UR                  5       5       HF  u  pEX44-   n[        U[        5      (       a  UR                  SXe4-  5        M6  U R                  XUS9  MH     g )Nr   zcode %r = cid %d
)outrE   r3   )rE   sortedrM   rN   rX   writedump)r!   r]   rE   r3   r.   r/   rY   s          r   r`   	CMap.dumph   sm    }}HDX^^-.FQT	A!S!!		.!78		cA	6 / 	r   rE   )r   r   r   r   r#   rI   r>   rZ   sysstdoutr`   r   r   r   r   rB   rB   B   s(    
9 zzDt 
r   rB   c                       \ rS rSrS rSrg)IdentityCMapw   c                 b    [        U5      S-  nU(       a  [        R                  " SU-  U5      $ g)N   z>%dHr   )lenstructunpack)r!   r3   ns      r   rZ   IdentityCMap.decodey   s*    IqL==!T22r   r   N)r   r   r   r   rZ   r   r   r   r   rf   rf   w   s    r   rf   c                   F    \ rS rSrS rS rS r\R                  4S jr	Sr
g)
UnicodeMap   c                 @    [         R                  " U 40 UD6  0 U l        g r   )r   r#   
cid2unichrr    s     r   r#   UnicodeMap.__init__   s    $)&)r   c                 >    SU R                   R                  S5      -  $ )Nz<UnicodeMap: %s>rH   r'   r)   s    r   rI   UnicodeMap.__repr__   s    !DJJNN:$>>>r   c                 ~    U R                   (       a  [        R                   " SU < SU< 35        U R                  U   $ )Nzget_unichr: rV   )r@   rW   rs   )r!   r4   s     r   
get_unichrUnicodeMap.get_unichr   s)    ::MM$<=s##r   c                     [        U R                  R                  5       5       H  u  p#UR                  SX#4-  5        M     g )Nzcid %d = unicode %r
)r^   rs   rM   r_   )r!   r]   r.   r/   s       r   r`   UnicodeMap.dump   s7    T__2245FQII-67 6r   rs   N)r   r   r   r   r#   rI   rx   rc   rd   r`   r   r   r   r   rp   rp      s    
?$
 zz r   rp   c                       \ rS rSrS rSrg)FileCMap   c                     [        U[        5      (       a  [        U[        5      (       d   eU R                  nUS S  H!  n[	        U5      nXC;   a  X4   nM  0 nXSU'   UnM#     [	        US   5      nX#U'   g N)rN   bytesrX   rE   ord)r!   r3   r4   rR   rY   ts         r   r5   FileCMap.add_code2cid   sy    $&&:c3+?+???MMcrAAAvD!  RM!r   r   N)r   r   r   r   r5   r   r   r   r   r~   r~      s    r   r~   c                       \ rS rSrS rSrg)FileUnicodeMap   c                 |   [        U[        5      (       d   e[        U[        5      (       a#  [        UR                  5      U R
                  U'   g [        U[        5      (       a   UR                  SS5      U R
                  U'   g [        U[        5      (       a  [        U5      U R
                  U'   g [        U5      e)NzUTF-16BEignore)
rN   rX   r   r
   namers   r   rZ   chr	TypeErrorr9   s      r   r:   FileUnicodeMap.add_cid2unichr   s    #s####dI&&#/		#:DOOC  	 e$$#';;z8#DDOOC 
 		 c""#&t9DOOC  	 D/!r   r   N)r   r   r   r   r:   r   r   r   r   r   r      s    r   r   c                       \ rS rSrS rSrg)PyCMap   c                     [         R                  XS9  UR                  U l        UR                  (       a  SU R
                  S'   g N)rH   r   r&   )rB   r#   CODE2CIDrE   IS_VERTICALr   )r!   r   modules      r   r#   PyCMap.__init__   s5    d*"#DJJwr   rb   Nr   r   r   r   r#   r   r   r   r   r   r      s    r   r   c                       \ rS rSrS rSrg)PyUnicodeMap   c                     [         R                  XS9  U(       a!  UR                  U l        SU R                  S'   g UR
                  U l        g r   )rp   r#   CID2UNICHR_Vrs   r   CID2UNICHR_H)r!   r   r   verticals       r   r#   PyUnicodeMap.__init__   sH    D0$11DO"#DJJw 	 %11DOr   r|   Nr   r   r   r   r   r      s    r   r   c                   f    \ rS rSr0 r0 r " S S\5      r\S 5       r	\S 5       r
\S	S j5       rSrg)
CMapDB   c                       \ rS rSrSrg)CMapDB.CMapNotFound   r   Nr   r   r   r   CMapNotFoundr      s    r   r   c           	         SU-  n[         R                  " SU-  5        [        R                  R	                  SS5      [        R
                  R                  [        R
                  R                  [        5      S5      4nU H  n[        R
                  R                  XB5      n[        R
                  R                  U5      (       d  MH  [        R                  " U5      n [        [        U5      S[        R                  " UR!                  5       5      5      UR#                  5         s  $    [$        R'                  U5      e! UR#                  5         f = f)N%s.marshal.gzzloading: %r	CMAP_PATHz/usr/share/pdfminer/r=   r   )rW   infoosenvironr(   pathjoindirname__file__existsgzipopentypestrmarshalloadsreadcloser   r   )klassr   filename
cmap_paths	directoryr   gzfiles          r   
_load_dataCMapDB._load_data   s    "T)]T)*jjnn[2HIggll277??8#<fEH
#I77<<	4Dww~~d##4#D	2w}}V[[]/KLLLN $ %%d++ LLNs   !7EEc                     US:X  a	  [        SS9$ US:X  a	  [        SS9$  U R                  U   $ ! [         a     Of = fU R                  U5      n[	        X5      =U R                  U'   nU$ )Nz
Identity-Hr   )r&   z
Identity-Vr   )rf   _cmap_cacheKeyErrorr   r   )r   r   datar=   s       r   get_cmapCMapDB.get_cmap   s    <a((\!a((	$$T** 		%)/);;$$s   / 
<<c                      U R                   U   U   $ ! [         a     Of = fU R                  SU-  5      nS Vs/ s H  n[        XU5      PM     Os  snf sn=U R                   U'   nXR   $ )Nzto-unicode-%s)FT)_umap_cacher   r   r   )r   r   r   r   r/   umapss         r   get_unicode_mapCMapDB.get_unicode_map  sy    	$$T*844 		$ 67P]*^P]1<A+FP]*^^$%s    
!!Ar   NF)r   r   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   r      sT    KKy  , ,     r   r   c                   &   \ rS rSrS rS r\" S5      r\" S5      r\" S5      r	\" S5      r
\" S5      r\" S	5      r\" S
5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      rS rSrg)
CMapParseri  c                 J    [         R                  " X5        Xl        SU l        g )NT)r   r#   r=   _in_cmap)r!   r=   fps      r   r#   CMapParser.__init__  s    t(	r   c                 F     U R                  5         g ! [         a     g f = fr   )
nextobjectr   r)   s    r   runCMapParser.run  s-    	OO 	  		s    
  s	   begincmaps   endcmaps   usecmaps   defs   begincodespaceranges   endcodespaceranges   begincidranges   endcidranges   begincidchars
   endcidchars   beginbfranges
   endbfranges   beginbfchars	   endbfchars   beginnotdefranges   endnotdefrangec                 \   X R                   L a  SU l        U R                  5         g X R                  L a  SU l        g U R                  (       d  g X R                  L a?   U R                  S5      u  u  p4u  p5U R                  R                  [        U5      U5        g X R                  L aN   U R                  S5      u  u  p6U R                  R                  [        R                  [        U5      5      5        g X R                  L a  U R                  5         g X R                   L a  U R                  5         g X R"                  L a  U R                  5         g X R$                  L Ga(  U R                  5        VVs/ s H  u  pxUPM	     n	nn['        SU	5       H  u  pn[)        U
[*        5      (       aB  [)        U[*        5      (       a-  [)        U[,        5      (       a  [/        U
5      [/        U5      :w  a  M_  U
S S nUS S nX:w  a  Mp  U
SS  nUSS  n[1        U5      n[1        U5      n[/        U5      n[3        UU-
  S-   5       HC  nU[4        R6                  " SUU-   5      U* S  -   nU R                  R9                  UUU-   5        ME     M     g X R:                  L a  U R                  5         g X R<                  L a  U R                  5        VVs/ s H  u  pxUPM	     n	nn['        SU	5       HY  u  nn[)        U[*        5      (       d  M  [)        U[*        5      (       d  M4  U R                  R9                  U[1        U5      5        M[     g X R>                  L a  U R                  5         g X R@                  L Ga`  U R                  5        VVs/ s H  u  pxUPM	     n	nn['        SU	5       GH*  u  pn[)        U
[*        5      (       a-  [)        U[*        5      (       a  [/        U
5      [/        U5      :w  a  MK  [1        U
5      n[1        U5      n[)        U[B        5      (       a<  [3        UU-
  S-   5       H%  nU R                  RE                  UU-   UU   5        M'     M  USS  n[1        U5      nUS S n[/        U5      n[3        UU-
  S-   5       HC  nU[4        R6                  " SUU-   5      U* S  -   nU R                  RE                  UU-   U5        ME     GM-     g X RF                  L a  U R                  5         g X RH                  L a  U R                  5        VVs/ s H  u  pxUPM	     n	nn['        SU	5       HY  u  nn[)        U[*        5      (       d  M  [)        U[*        5      (       d  M4  U R                  RE                  [1        U5      U5        M[     g X RJ                  L a  U R                  5         g X RL                  L a  U R                  5         g U RO                  X45        g ! [         a     g f = f! [         a     g [        R                   a     g f = fs  snnf s  snnf s  snnf s  snnf )NTFri   r      z>L)(KEYWORD_BEGINCMAPr   popallKEYWORD_ENDCMAPKEYWORD_DEFpopr=   r0   r   r   KEYWORD_USECMAPr>   r   r   r   KEYWORD_BEGINCODESPACERANGEKEYWORD_ENDCODESPACERANGEKEYWORD_BEGINCIDRANGEKEYWORD_ENDCIDRANGEr   rN   r   rX   rj   r   rangerk   packr5   KEYWORD_BEGINCIDCHARKEYWORD_ENDCIDCHARKEYWORD_BEGINBFRANGEKEYWORD_ENDBFRANGElistr:   KEYWORD_BEGINBFCHARKEYWORD_ENDBFCHARKEYWORD_BEGINNOTDEFRANGEKEYWORD_ENDNOTDEFRANGEpush)r!   postoken_r.   r/   cmapname__objobjsser4   sprefixeprefixsvarevars1e1vlenixr3   varbaseprefixs                             r   
do_keywordCMapParser.do_keyword0  s0   *** DMKKM***!DM}}$$$#'88A; !!		""<?A6 (((#'88A; !		""6??<3I#JK
 444KKM222KKM...KKM,,,)-7IRCD7'40s"1e,,Jq%4H4H!#s++s1vQ/?CR&CR&%vvT]T]4yr"uQwAD"Q$ 7 ??AII**1c!e4 (  1" ---KKM+++)-7IRCD7'40ddE**z#u/E/EII**4>  1 ---KKM+++)-7IRCD7 (D 1t"1e,,Jq%4H4Hq6SV# QZQZdD))"2b57^		00AtAw? , rs)C"3<D!#2YFs8D"2b57^"6;;tT!V#<dUV#DD		00Aq9 , !2$ ,,,KKM***)-7IRCD7'40dc5))ju.E.EII,,WS\4@  1 111KKM///KKM		3,E !  !   &&  80 8 82 8sC   =W! +AW1 7XXX"X(!
W.-W.1
X=XX)r   r=   N)r   r   r   r   r#   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r     s     L)*oO*oOf+K"%&<"= #$8 9 01n-/]+/]+n-L)"#67 !23qr   r   c                   >    \ rS rSr0 4S jrS rS rS rS rS r	Sr
g	)
CMapConverteri  c                 H    Xl         0 U l        0 U l        0 U l        0 U l        g r   )	enc2codecrE   r*   cid2unichr_hcid2unichr_v)r!   r  s     r   r#   CMapConverter.__init__  s)    "r   c                 6    U R                   R                  5       $ r   )rE   keysr)   s    r   get_encsCMapConverter.get_encs  s    }}!!##r   c                 T   UR                  S5      (       a  US p2OUS:X  a  Su  p#O	US-   US-   p2X R                  ;   a  U R                  U   nO0 nX@R                  U'   S nU(       a@  SU R                  U'   X0R                  ;   a  U R                  U   nXE4$ 0 nXPR                  U'   XE4$ )Nz-HH)r  Vz-VT)endswithrE   r*   )r!   enchmapencvmapenchmapvmaps         r   get_mapsCMapConverter.get_maps  s    <<"%tgCZ!+Wg"%d(CHgmm#==)DD%)MM'"(,DW%--'}}W- | )-g&|r   c           
        ^  S nU GH  nUR                  5       R                  S5      u  n  nU(       d  M0  UR                  S5      nUc  US   S:X  d   eUnMS  SS jnU 4S jnS n[        US   5      n	0 n
0 n[	        X%5       GH  u  pUS:X  a  M  US:X  a  M  / n/ nUR                  S	5       Hu  nUR                  S
5      nU(       a  US S n [        R                  " US5      nU(       a  UR                  U5        U" XU5        M[  UR                  U5        U" XU5        Mw     T R                  U5      u  nnU(       a/  Uc   eU H  nU" UUU	S5        M     U H  nU" UUU	S5        M     M  U H  nU" UUU	5        U" UUU	5        M     GM     U
(       a  U" U
5      T R                  U	'   U(       d
  U
(       d  GM  U" U=(       d    U
5      T R                  U	'   GM     g !   [        [        US5      /5      n GN= f)N#	r   CIDc                 |    US S  H  nX@;   a  X   n M  0 nXPU'   Un M     US   nU(       d  X@;  d  X   U:X  a  X U'   g r   r   )dmapr3   r4   forcebrR   s         r   putCMapConverter.load.<locals>.put  sS    crAy#w"#Q  # Ham3!Gr   c                    >  TR                   U   nUR                  US5      n[        U5      S:X  a  X@;  a  SX'   X==   S-  ss'   g ! [         a     g [         a     g f = f)Nstrictr   r   )r  rZ   rj   r   UnicodeError)unimapr  r3   codecrY   r!   s        r   addCMapConverter.load.<locals>.add  sv    
 NN3/EE84A1v{?()FI	Q	
 	     $ s   AA	 	
A!	A! A!c                 H    [        U R                  5       S SS9nUS   u  p#U$ )Nc                 *    U S   [        U S   5      * 4$ )Nr   r   )r   )r  s    r   <lambda>2CMapConverter.load.<locals>.pick.<locals>.<lambda>  s    1Q4QqT
"3r   T)keyreverser   )r^   rM   )r-  charsrY   r   s       r   pick CMapConverter.load.<locals>.pick  s-    LLN3dD ar   *,r/   r   hex   Tr   )strip	partitionsplitrX   zipr  codecsrZ   r   appendr  r  r  )r!   r   encsliner   valuesr(  r/  r8  r4   unimap_hunimap_vr  valuehcodesvcodesr3   r   r  r  s   `                   r   loadCMapConverter.load  s   D//4JT!AZZ%F|ayE))) fQi.CHH"40%<C< !KK,D#}}S1H#CRy6%}}T59  d+H40d+H40 -  $}}S1t+++ &D$T2 !' &D$T2 !' !'D$,D$, !'=  1F )-h!!#&88)-h.B()C!!#&i l 	76$c$m_5s   G%%H 	c                     [        U R                  R                  US5      U R                  R                  U5      S9nUR	                  [
        R                  " U5      5        g )NF)r   r   )rO   r*   r(   rE   r_   r   dumps)r!   r   r  r   s       r   	dump_cmapCMapConverter.dump_cmap#  sN    ((,,S%8]]&&s+
 	t$%r   c                     [        U R                  U R                  S9nUR                  [        R
                  " U5      5        g )N)r   r   )rO   r  r  r_   r   rO  )r!   r   r   s      r   dump_unicodemapCMapConverter.dump_unicodemap+  s8    ****
 	t$%r   )r  r  rE   r  r*   N)r   r   r   r   r#   r  r  rL  rP  rS  r   r   r   r   r  r    s%    !# $,Xtr   r  c                     [        U5      nU H6  n[        SU-  5        [        U5       nUR                  U5        S S S 5        M8     / nUR	                  5        Hw  nSU-  n	[
        R                  R                  X	5      n[        SU-  5        [        R                  " US5       nUR                  Xh5        S S S 5        UR                  U5        My     SU-  n	[
        R                  R                  X	5      n[        SU-  5        [        R                  " US5       nUR                  U5        S S S 5        UR                  U5        U$ ! , (       d  f       GMM  = f! , (       d  f       N= f! , (       d  f       NE= f)Nzreading: %r...r   zwriting: %r...wbzto-unicode-%s.marshal.gz)r  printr   rL  r  r   r   r   r   rP  rC  rS  )
outdirregnamer  paths	converterr   r   filesr  fnames
             r   convert_cmapr^  4  s-   i(I%&$Z2NN2 Z 
 E!!##%ww||F*%&YYtT"b( #T $ '0E77<<&D	
T
!"	4	"!!"% 
	LLL% Z #" 
	s#   E&EE/
E	
E,	/
E=c                     U SS  nU HK  n[        US5       n[        5       n[        XC5      R                  5         UR	                  5         S S S 5        MM     g ! , (       d  f       M_  = f)Nr   rb)r   r   r   r   r`   )argvargsr]  r   r=   s        r   mainrc  O  s[    8D%"!#Dt $$&IIK	    s   4A
A'	__main__)'__doc__rc   r   os.pathr   rB  r   rk   rW   psparserr   r   r   r   r   r	   
encodingdbr
   utilsr   r   	Exceptionr   r   rB   rf   rp   r~   r   r   r   r   r   r  r^  rc  r   exitra  r   r   r   <module>rl     s   	  	       # #   "  $  		 	 608 0j8  .t (Z &T 	: 	/ /hR RnK K\6 zHHT#((^ r   