
    #jyC                     j   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZmZ ddlmZmZ ddlmZmZmZm Z m!Z! dd	l"m#Z#m$Z$  ej%        e&          Z' G d
 de          Z( G d d          Z) G d de)          Z* G d de)          Z+ G d de+          Z, G d de)          Z- G d de-          Z. G d de*          Z/ G d de-          Z0 G d de*          Z1 G d de-          Z2 G d  d!          Z3 G d" d#e e                   Z4dS )$zAdobe character mapping (CMap) support.

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

More information is available on:

  https://github.com/adobe-type-tools/cmap-resources

    N)IterableIteratorMutableMapping)AnyBinaryIOClassVarTextIOUnioncast)name2unicode)PDFExceptionPDFTypeError)PSEOFPSSyntaxError)KWD	PSKeyword	PSLiteralPSStackParserliteral_name)choplistnunpackc                       e Zd ZdS )	CMapErrorN__name__
__module____qualname__     W/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/pdfminer/cmapdb.pyr   r   '   s        Dr   r   c                       e Zd ZdZdeddfdZdefdZdededdfd	Z	d
ede
ddfdZde
d
eez  e
z  ddfdZddZd
edee
         fdZdS )CMapBaser   kwargsreturnNc                 8    |                                 | _        d S N)copyattrsselfr#   s     r    __init__zCMapBase.__init__.   s    28++--


r   c                 @    | j                             dd          dk    S )NWModer   )r(   getr*   s    r    is_verticalzCMapBase.is_vertical1   s    z~~gq))Q..r   kvc                     || j         |<   d S r&   )r(   )r*   r1   r2   s      r    set_attrzCMapBase.set_attr4   s    
1r   codecidc                     d S r&   r   )r*   r5   r6   s      r    add_code2cidzCMapBase.add_code2cid7       r   c                     d S r&   r   )r*   r6   r5   s      r    add_cid2unichrzCMapBase.add_cid2unichr:   r9   r   cmapc                     d S r&   r   )r*   r<   s     r    use_cmapzCMapBase.use_cmap=   r9   r   c                     t           r&   )NotImplementedError)r*   r5   s     r    decodezCMapBase.decode@   s    !!r   )r<   r"   r$   N)r   r   r   debugobjectr+   boolr0   strr4   intr8   r   bytesr;   r>   r   rA   r   r   r    r"   r"   +   s       E@ @D @ @ @ @/T / / / /# & T     3 4    # Y->-D        "5 "Xc] " " " " " "r   r"   c            	           e Zd Zdeez  ddfdZdefdZdeddfdZde	de
e         fd	Zej        dd
fdedeeef         dz  deedf         ddfdZdS )CMapr#   r$   Nc                 8    t          j        | fi | i | _        d S r&   )r"   r+   code2cidr)   s     r    r+   zCMap.__init__E   s&    $))&)))+-r   c                 \    d                     | j                            d                    S )Nz
<CMap: {}>CMapNameformatr(   r.   r/   s    r    __repr__zCMap.__repr__I   s$    ""4:>>*#=#=>>>r   r<   c                    t          |t                    s$J t          t          |                                dt          t
          t          f         dt          t
          t          f         dd ffd | j        |j                   d S )Ndstsrcr$   c                     |                                 D ]3\  }}t          |t                    ri }|| |<    ||           .|| |<   4d S r&   )items
isinstancedict)rR   rS   r1   r2   dr'   s        r    r'   zCMap.use_cmap.<locals>.copyO   sd    		  1a&& +-ACFDAJJJJCFF r   )rV   rI   rE   typerW   rF   rC   rK   )r*   r<   r'   s     @r    r>   zCMap.use_cmapL   s    $%%66s4::66%	d3;' 	d3;.? 	D 	 	 	 	 	 	 	T]DM*****r   r5   c              #   ,  K   t                               d| |           | j        }t          |          D ]^}||v rQ||         }t	          |t
                    r|V  | j        }/t          t          t
          t          f         |          }W| j        }_d S )Nzdecode: %r, %r)	logrB   rK   iterrV   rF   r   rW   rC   )r*   r5   rX   ixs        r    rA   zCMap.decodeZ   s      		"D$///Md 		" 		"AAvvaDa%% 3GGGAAT#v+.22AAM		" 		"r   r   outrK   .c           	      V   |	| j         }d}t          |                                          D ]{\  }}g ||R }t          |t                    r|                    d|d| d           >|                     |t          t          t          t          f         |          |           |d S )Nr   zcode z = cid 
)r_   rK   r5   )
rK   sortedrU   rV   rF   writedumpr   rW   rC   )r*   r_   rK   r5   r1   r2   cs          r    rd   z	CMap.dumph   s     }HD8>>++,, 	P 	PDAq$


A!S!! P		3!33a3334444		cDc6k1BA,F,FQ	OOOO	P 	Pr   )r   r   r   rE   rF   r+   rP   r"   r>   rG   r   rA   sysstdoutr	   rW   rC   tuplerd   r   r   r    rI   rI   D   s
       .s .t . . . .?# ? ? ? ?+X +$ + + + +"5 "Xc] " " " "  j-1 "	P PP sF{#d*P CHo	P
 
P P P P P Pr   rI   c                   .    e Zd Zdedeedf         fdZdS )IdentityCMapr5   r$   .c                 v    t          |          dz  }|r$t          j        d| d|d |dz                     S dS )N   >Hr   lenstructunpackr*   r5   ns      r    rA   zIdentityCMap.decodez   sD    IIN 	=Q4!a%=9992r   Nr   r   r   rG   rh   rF   rA   r   r   r    rj   rj   y   >        5 U38_      r   rj   c                   .    e Zd Zdedeedf         fdZdS )IdentityCMapByter5   r$   .c                 j    t          |          }|r!t          j        d| d|d |                   S dS )Nrm   Br   ro   rs   s      r    rA   zIdentityCMapByte.decode   s<    II 	=Q484442r   Nru   r   r   r    rx   rx      rv   r   rx   c                   ^    e Zd Zdeez  ddfdZdefdZdedefdZej	        fde
ddfd	ZdS )

UnicodeMapr#   r$   Nc                 8    t          j        | fi | i | _        d S r&   )r"   r+   
cid2unichrr)   s     r    r+   zUnicodeMap.__init__   s&    $))&)))*,r   c                 \    d                     | j                            d                    S )Nz<UnicodeMap: {}>rM   rN   r/   s    r    rP   zUnicodeMap.__repr__   s$    !((
)C)CDDDr   r6   c                 T    t                               d| |           | j        |         S )Nget_unichr: %r, %r)r[   rB   r~   r*   r6   s     r    
get_unichrzUnicodeMap.get_unichr   s&    		&c222s##r   r_   c                     t          | j                                                  D ]!\  }}|                    d| d|d           "d S )Nzcid z = unicode ra   )rb   r~   rU   rc   )r*   r_   r1   r2   s       r    rd   zUnicodeMap.dump   s^    4?002233 	4 	4DAqII2Q2212223333	4 	4r   )r   r   r   rE   rF   r+   rP   r   rf   rg   r	   rd   r   r   r    r|   r|      s        -s -t - - - -E# E E E E$c $c $ $ $ $ "% 4 4 4 4 4 4 4 4 4r   r|   c                       e Zd ZdedefdZdS )IdentityUnicodeMapr6   r$   c                 X    t                               d| |           t          |          S )z+Interpret character id as unicode codepointr   )r[   rB   chrr   s     r    r   zIdentityUnicodeMap.get_unichr   s$    		&c2223xxr   N)r   r   r   rF   rE   r   r   r   r    r   r      s6        c c      r   r   c                   "    e Zd ZdededdfdZdS )FileCMapr5   r6   r$   Nc                    t          |t                    rt          |t                    s3J t          t          |          t          |          f                      | j        }|d d         D ]L}t          |          }||v r.t          t          t          t          f         ||                   }Ci }|||<   |}Mt          |d                   }|||<   d S )N)	rV   rE   rF   rY   rK   ordr   rW   rC   )r*   r5   r6   rX   re   cits          r    r8   zFileCMap.add_code2cid   s    $$$ 	
C)=)= 	
 	
s$ZZc#@
 @
 	
 	
= Mcrc 	 	AQBQwwc6k*AbE22')"b]]"r   )r   r   r   rE   rF   r8   r   r   r    r   r      s=         3 4      r   r   c                   .    e Zd Zdedeez  ez  ddfdZdS )FileUnicodeMapr6   r5   r$   Nc                 $   t          |t                    s$J t          t          |                                t          |t                    r1t          |j        t                    sJ t          |j                  }n`t          |t                    r|                    dd          }n4t          |t                    rt          |          }nt          |          |dk    r | j                            |          dk    rd S || j        |<   d S )NzUTF-16BEignore     )rV   rF   rE   rY   r   namer   rG   rA   r   r   r~   r.   )r*   r6   r5   unichrs       r    r;   zFileUnicodeMap.add_cid2unichr   s    #s##33Sc^^33#dI&& 
	%di-----!$),,FFe$$ 	%[[X66FFc"" 	%YYFFt$$$ X$/"5"5c":":c"A"AF%r   )r   r   r   rF   r   rG   r;   r   r   r    r   r      sG        &# &Y->-D & & & & & & &r   r   c                   ,     e Zd Zdededdf fdZ xZS )PyCMapr   moduler$   Nc                     t                                          |           |j        | _        |j        rd| j        d<   d S d S N)rM      r-   )superr+   CODE2CIDrK   IS_VERTICALr(   )r*   r   r   	__class__s      r    r+   zPyCMap.__init__   sN    $''' 	$"#DJw	$ 	$r   )r   r   r   rE   r   r+   __classcell__r   s   @r    r   r      sR        $S $# $$ $ $ $ $ $ $ $ $ $ $r   r   c                   0     e Zd Zdedededdf fdZ xZS )PyUnicodeMapr   r   verticalr$   Nc                     t                                          |           |r|j        | _        d| j        d<   d S |j        | _        d S r   )r   r+   CID2UNICHR_Vr~   r(   CID2UNICHR_H)r*   r   r   r   r   s       r    r+   zPyUnicodeMap.__init__   sP    $''' 	2$1DO"#DJw$1DOOOr   )r   r   r   rE   r   rD   r+   r   r   s   @r    r   r      sY        2S 2# 2 2$ 2 2 2 2 2 2 2 2 2 2r   r   c                   ^   e Zd ZU i Zeeeef                  ed<   i Z	eeee
e         f                  ed<    G d de          Zedeeeef         ef         deeeef         ef         fd            Zededee         fd	            Zededefd
            Zeddededefd            ZdS )CMapDB_cmap_cache_umap_cachec                       e Zd ZdS )CMapDB.CMapNotFoundNr   r   r   r    CMapNotFoundr      s        r   r   rX   r$   c                 0   t          | t                    s| S i }|                                 D ]g\  }}	 t          |          }n# t          t
          f$ r |}Y nw xY wt          |t                    rt                              |          ||<   b|||<   h|S )zERecursively convert string keys to integers in CODE2CID dictionaries.)rV   rW   rU   rF   
ValueError	TypeErrorr   _convert_code2cid_keys)rX   resultr1   r2   new_keys        r    r   zCMapDB._convert_code2cid_keys   s    
 !T"" 	H$&GGII 
	$ 
	$DAqa&&	*    !T"" $"("?"?"B"Bw"#ws   AAAr   c                    |                     dd          }t                              d|           t          j                            dd          t          j                            t          j                            t                    d          f}|D ]}| d}t          j                            ||          }t          j        
                    |          }t          j        
                    |          }|                    |t          j        z             r't          j                            |          rt                              d|           t          j        |d	d
          5 }t!          j        |          }	d|	v r'd |	d                                         D             |	d<   d|	v r'd |	d                                         D             |	d<   |	                    d          r|                     |	d                   |	d<   t)          t+          |          d|	          cd d d            c S # 1 swxY w Y   t,                              |          )N  zloading: %r	CMAP_PATHz/usr/share/pdfminer/r<   z.json.gzzloading JSON: %rrtzutf-8)encodingr   c                 4    i | ]\  }}t          |          |S r   rF   .0r1   r2   s      r    
<dictcomp>z%CMapDB._load_data.<locals>.<dictcomp>  1     0 0 0*.!QCFFA0 0 0r   r   c                 4    i | ]\  }}t          |          |S r   r   r   s      r    r   z%CMapDB._load_data.<locals>.<dictcomp>  r   r   r   r   )replacer[   rB   osenvironr.   pathjoindirname__file__realpath
startswithsepexistsgzipopenjsonloadrU   r   rY   rE   r   r   )
clsr   
cmap_paths	directoryjson_filename	json_pathresolved_json_pathresolved_directorygzfiledatas
             r    
_load_datazCMapDB._load_data   s   ||D"%%		-&&&JNN;(>??GLL22F;;


 $ 	5 	5I#---MY>>I!#!1!1)!<!<!#!1!1)!<!< ",,"RV+  5'..!3445 		,i888Y14'JJJ 5f+/9V+<+<D%--0 026~2F2L2L2N2N0 0 0^, &--0 026~2F2L2L2N2N0 0 0^, xx
++ X+.+E+Ed:FV+W+WZ(D		2t445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5  !!$'''s   1B;H;;H?	H?	c                 P   |dk    rt          d          S |dk    rt          d          S |dk    rt          d          S |dk    rt          d          S 	 | j        |         S # t          $ r Y nw xY w|                     |          }t          ||          x| j        |<   }|S )Nz
Identity-Hr   )r-   z
Identity-Vr   OneByteIdentityHOneByteIdentityV)rj   rx   r   KeyErrorr   r   )r   r   r   r<   s       r    get_cmapzCMapDB.get_cmap  s    <a((((\!!a(((('''#!,,,,'''#!,,,,	?4(( 	 	 	D	~~d##'-dD'9'99s   A' '
A43A4Fr   c                     	 | j                  |         S # t          $ r Y nw xY w|                     d           fddD             | j         <   | j                  |         S )Nzto-unicode-c                 2    g | ]}t          |          S r   )r   )r   r2   r   r   s     r    
<listcomp>z*CMapDB.get_unicode_map.<locals>.<listcomp>8  s%     T T TdD!!<!< T T Tr   )FT)r   r   r   )r   r   r   r   s    ` @r    get_unicode_mapzCMapDB.get_unicode_map1  s    	?4(22 	 	 	D	~~2D2233 T T T T Tm T T Tt$X..s    
$$N)F)r   r   r   r   r   rW   rE   r   __annotations__r   listr   r   r   staticmethodr
   rC   rF   r   classmethodrY   r   r   r"   r   rD   r|   r   r   r   r    r   r      ss        /1K$sF{+,111;=K$sD$6678===    y    c6k"C'(	tCK #%	&   \( $(c $(d3i $( $( $( [$(L C H    [" / /3 /$ /: / / / [/ / /r   r   c                      e Zd ZdededdfdZd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 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eddfdZdeddfdZdS )
CMapParserr<   fpr$   Nc                 r    t          j        | |           || _        d| _        t	                      | _        d S )NT)r   r+   r<   _in_cmapset	_warnings)r*   r<   r   s      r    r+   zCMapParser.__init__=  s2    tR(((	#&55r   c                     t          j        t                    5  |                                  d d d            d S # 1 swxY w Y   d S r&   )
contextlibsuppressr   
nextobjectr/   s    r    runzCMapParser.runD  s     '' 	 	OO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   <A A s	   begincmaps   endcmaps   usecmaps   defs   begincodespaceranges   endcodespaceranges   begincidranges   endcidranges   begincidchars
   endcidchars   beginbfranges
   endbfranges   beginbfchars	   endbfchars   beginnotdefranges   endnotdefrangepostokenc                 ^   || j         u rd| _        |                                  dS || j        u r	d| _        dS | j        sdS || j        u rZ	 |                     d          \  \  }}\  }}| j                            t          |          |           n# t          $ r Y nw xY wdS || j
        u r}	 |                     d          \  \  }}| j                            t                              t          |                               n # t          $ r Y nt          j        $ r Y nw xY wdS || j        u r|                                  dS || j        u r|                                  dS || j        u r|                                  dS || j        u rd |                                 D             }t'          d|          D ]\  }}	}
t)          |t*                    s|                     d           2t)          |	t*                    s|                     d	           ]t)          |
t.                    s|                     d
           t1          |          t1          |	          k    r|                     d           |dd         }|	dd         }||k    r|                     d           |dd         }|	dd         }t3          |          }t3          |          }t1          |          }t5          ||z
  dz             D ]D}|t7          j        d||z             | d         z   }| j                            |
|z   |           EdS || j        u r|                                  dS || j        u r{d |                                 D             }t'          d|          D ]J\  }
}t)          |t*                    r0t)          |
t.                    r| j                            |
|           KdS || j         u r|                                  dS || j!        u rd |                                 D             }t'          d|          D ]\  }}	}t)          |t*                    s|                     d           2t)          |	t*                    s|                     d           ]t1          |          t1          |	          k    r|                     d           t3          |          }t3          |	          }t)          |tD                    rtt1          |          ||z
  dz   k    r|                     d           tG          t5          ||dz             |d          D ] \  }
}| j                            |
|           !:t)          |t*                    sJ |dd         }t3          |          }|dd         }t1          |          }t5          ||z
  dz             D ]D}|t7          j        d||z             | d         z   }| j                            ||z   |           EdS || j$        u r|                                  dS || j%        u rd |                                 D             }t'          d|          D ]W\  }
}t)          |
t*                    r=t)          |t*                    r(| j                            t3          |
          |           XdS || j&        u r|                                  dS || j'        u r|                                  dS | (                    ||f           dS )z[ToUnicode CMaps

        See Section 5.9.2 - ToUnicode CMaps of the PDF Reference.
        TNFrl   r   c                     g | ]\  }}|S r   r   r   __objs      r    r   z)CMapParser.do_keyword.<locals>.<listcomp>      777IRC777r      z0The start object of begincidrange is not a byte.z.The end object of begincidrange is not a byte.z.The cid object of begincidrange is not a byte.z?The start and end byte of begincidrange have different lengths.zGThe prefix of the start and end byte of begincidrange are not the same.z>Lc                     g | ]\  }}|S r   r   r   s      r    r   z)CMapParser.do_keyword.<locals>.<listcomp>  r   r   c                     g | ]\  }}|S r   r   r   s      r    r   z)CMapParser.do_keyword.<locals>.<listcomp>  r   r   zThe start object is not a byte.zThe end object is not a byte.z.The start and end byte have different lengths.zPThe difference between the start and end offsets does not match the code length.)strictc                     g | ]\  }}|S r   r   r   s      r    r   z)CMapParser.do_keyword.<locals>.<listcomp>  r   r   ))KEYWORD_BEGINCMAPr   popallKEYWORD_ENDCMAPKEYWORD_DEFpopr<   r4   r   r   KEYWORD_USECMAPr>   r   r   r   KEYWORD_BEGINCODESPACERANGEKEYWORD_ENDCODESPACERANGEKEYWORD_BEGINCIDRANGEKEYWORD_ENDCIDRANGEr   rV   rG   
_warn_oncerF   rp   r   rangerq   packr;   KEYWORD_BEGINCIDCHARKEYWORD_ENDCIDCHARKEYWORD_BEGINBFRANGEKEYWORD_ENDBFRANGEr   zipKEYWORD_BEGINBFCHARKEYWORD_ENDBFCHARKEYWORD_BEGINNOTDEFRANGEKEYWORD_ENDNOTDEFRANGEpush)r*   r   r   _r1   r2   cmapnameobjs
start_byteend_byter6   start_prefix
end_prefixsvarevarstartendvlenr]   r^   r5   unicode_valuevarbaseprefixs                            r    
do_keywordzCMapParser.do_keywordY  s   
 D*** DMKKMMMFd***!DMF} 	FD$$$#'88A;; !Q!Q	""<??A6666    FD(((#'88A;; !X	""6??<3I3I#J#JKKKK    &   FD444KKMMMFD222KKMMMFD...KKMMMFD,,,77777D-5a->-> 9 9)
Hc!*e44 OO$VWWW!(E22 OO$TUUU!#s++ OO$TUUUz??c(mm33OO-   )#2#%crc]
:--OO:   !"##}dmm4yysU{Q// 9 9A$v{4'C'CTEFF'KKAI,,S1Wa88889 FD---KKMMMFD+++77777D%a.. 8 8	TdE** 8z#s/C/C 8I,,S$777FD---KKMMMFD+++77777D.6q$.?.? ? ?*
Hd!*e44 OO$EFFF!(E22 OO$CDDDz??c(mm33OO$TUUU
++h''dD)) ?4yyC%K!O33F   /2eS1W--tE/ / / E E*] 	00mDDDDE
 &dE22222rss)C"3<<D!#2#YFs88D"3;?33 ? ?"V[tax%@%@$%HH	00A>>>>? FD,,,KKMMMFD***77777D%a.. A A	Tc5)) Aju.E.E AI,,WS\\4@@@FD111KKMMMFD///KKMMMF		3,s,   AB 
B B /AD	 	
D&D&%D&msgc                     || j         vr;| j                             |           d}t                              ||z              dS dS )z!Warn once for each unique messagezIgnoring (part of) ToUnicode map because the PDF data does not conform to the format. This could result in (cid) values in the output. N)r   addr[   warning)r*   r,  base_msgs      r    r  zCMapParser._warn_once  sU    dn$$Ns###/ 
 KK3''''' %$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  rF   r   r+  rE   r  r   r   r    r   r   <  s       )X )8 ) ) ) ) )    L))c*ooOc*ooO#f++K"%#&<"="= #$8 9 9C 011#n--3//]++3//]++#n--L))"s#677 S!233W c W ) W  W  W  W  W r	(c 	(d 	( 	( 	( 	( 	( 	(r   r   )5__doc__r   r   r   loggingr   os.pathrq   rf   collections.abcr   r   r   typingr   r   r   r	   r
   r   pdfminer.encodingdbr   pdfminer.pdfexceptionsr   r   pdfminer.psexceptionsr   r   pdfminer.psparserr   r   r   r   r   pdfminer.utilsr   r   	getLoggerr   r[   r   r"   rI   rj   rx   r|   r   r   r   r   r   r   r   r   r   r    <module>r<     s  	 	        				   



 > > > > > > > > > >                - , , , , , = = = = = = = = 6 6 6 6 6 6 6 6 T T T T T T T T T T T T T T , , , , , , , ,g!!	 	 	 	 	 	 	 	" " " " " " " "22P 2P 2P 2P 2P8 2P 2P 2Pj    8       |   4 4 4 4 4 4 4 4"           t   $& & & & &Z & & &*$ $ $ $ $T $ $ $2 2 2 2 2: 2 2 2]/ ]/ ]/ ]/ ]/ ]/ ]/ ]/@( ( ( ( (y) ( ( ( ( (r   