U
    '1e"1                  	   @   sB  i Z i Zeed d Zdd lZeeddZ[eD ]RZ	i Z
z*ede	 e
 e
d e e	< erdd ee	< W n ek
r   d ee	< Y nX [
q4erddlmZmZmZmZmZ ddlmZ dd	lmZ d
ekr
eedfddZdZdd
 ZdedkreZdd Zeed
< dekr$dd Zeed< dekr@d=ddZeed< dekr\d>ddZeed< dekrvdd Zeed< dekrdd Z e ed< d ekrd!d  Z!e!ed < d"ekr6i Z"e#d#D ]bZ$e$d$k se$d%krd&e$ e"e$< n:e$e%d'e%d(e%d)fkrd'e&e$ e"e$< ne&e$e"e$< q[$d*d" Z'e'ed"< d+ekrPd,d+ Z(e(ed+< d-ekrjd.d- Z)e)ed-< d/ekrd0d/ Z*e*ed/< e+ Z,eD ]:Z	e	e kre e	 nee	 Z-e-se.d1e	 e-e,e	< q[	[-[,e/d2kr>dd l0Z0dd l1Z1d3D ]NZ2d4D ]BZ3e4d5e2e3f  d65d7d8e2 d9d:fZ6e17e0j8d;d<e6e3g qqd S )?Nz
        fp_str
        unicode2T1
        instanceStringWidthT1
        instanceStringWidthTTF
        asciiBase85Encode
        asciiBase85Decode
        escapePDF
        sameFrag
        calcChecksum
        add32
        hex32
            Z_rl_testingFzfrom _rl_accel import %s as ff)	isUnicodeisSeqrawBytesasNativeasBytes)log)unpackfp_strg      $@c                 C   s   || | S N )xr   Z	_log_e_10r   r   :/tmp/pip-unpacked-wheel-109iniqw/reportlab/lib/rl_accel.py<lambda>'       r   )z%.0fz%.1fz%.2fz%.3fz%.4fz%.5fz%.6fc                  G   s   t | dkr t| d r | d } g }|j}| D ]}t|}|dkrL|d q.|dkrXdprttddtt| d}t| | }|rt |}|r|d8 }|| dkr|| dkr|d7 }qq|d| }||d dkst |dkr|p|dd  q.d	|S )	zXconvert separate arguments (or single sequence arg) into space separated numeric strings   r   gHz>0   .N )
lenr   appendabsminmaxint_log_10_fp_fmtsjoin)asAisalnjr   r   r   r
   )   s*      
( .,g      ?c                  G   s   t |  ddS )Nr'   r   )_FP_STRreplace)r   r   r   r   _fp_strB   s    r*   
unicode2T1c           	   
   C   s   g }|d |dd  }}|j }d|kr,d}| rz.t| rF| |}n| }|||f W qW q, tk
r } zz|jdd \}}|r||| d| |f |r|t| || | n||j|j	||  f | |d } W 5 d}~X Y q,X q,|S )zBreturn a list of (font,string) pairs representing the unicode textr   r   NzUCS-2ZUTF16      )
ZencNamer   encoder   UnicodeEncodeErrorargsextendr+   Z_notdefFontZ_notdefChar)	ZutextZfontsRfontencr    eZi0Zilr   r   r   r+   G   s*     instanceStringWidthT1utf8c                 C   s:   t |s||}tdd t|| g| j D d | S )z&This is the "purist" approach to widthc                 s   s$   | ]\}}t t|jj|V  qd S r   )summapZwidths__getitem__).0r   tr   r   r   	<genexpr>f   s     z(instanceStringWidthT1.<locals>.<genexpr>MbP?)r   decoder8   r+   ZsubstitutionFontsselftextsizeencodingr   r   r   r6   c   s     
instanceStringWidthTTFutf-8c                    sH   t |s||pd}| jjj| jj d| t fdd|D  S )zCalculate text widthrF   r>   c                 3   s   | ]}t | V  qd S r   )ord)r;   uZdwgr   r   r=   p   s     z)instanceStringWidthTTF.<locals>.<genexpr>)r   r?   faceZ
charWidthsgetZdefaultWidthr8   r@   r   rI   r   rE   j   s
    
hex32c                 C   s   dt | d@  S )Nz0X%8.8X    )r   )r"   r   r   r   rM   t   s    add32c                 C   s   | | d@ S )zCalculate (x + y) modulo 2**32rN   r   )r   yr   r   r   rO   y   s    calcChecksumc                 C   sJ   t | } t| d@ r,| dt| d@  d  } ttdt| d?  | d@ S )zCalculates TTF-style checksums   r-       z>%dlr,   rN   )r   r   r8   r	   )datar   r   r   rQ      s     	escapePDF          z\%03o\()c                 C   s:   g }| D ]&}t |tk	r t|}|t|  qd|S )N )typer   rG   r   _ESCAPEDICTr   )r    rcr   r   r   rU      s    asciiBase85Encodec                 C   s  t | }tt| d\}}d| }| d| | |d  }}g j}t|D ]j}|d }	||	 }
||	d  }||	d  }||	d  }|rt|
}
t|}t|}t|}|
dk r|
d> |B d> |B d> |B }nd	|
 d
|  d|  | }|dkr|d qJt|d\}}t|d\}}t|d\}}t|d\}}d| d|  d|  d|  | |ksftd|t|d  |t|d  |t|d  |t|d  |t|d  qJ|dkr|dt| |rdnd 7 }|d }
|d }|d }|d }|r&t|
}
t|}t|}t|}d	|
 d
|  d|  | }t|d\}}t|d\}}t|d\}}t|d\}}t|d t|d  t|d  t|d  t|d  }||d|d   |d d|j	S )zEncodes input using ASCII-Base85 coding.

        This is a compact encoding used for binary data within
        a PDF file.  Four bytes of binary data become five bytes of
        ASCII.  This is the default method used for encoding images.r-   r   Nr   r,   rR               rV   zU   鱄^	 9  dodgy code!!    rS   ~>r\   )
r   divmodr   r   rangerG   AssertionErrorchrr   __self__)inputZdoOrdwhole_word_countremainder_sizecutbodylastbitoutr"   offsetb1b2b3b4numtempc5c4c3c1c2lastwordr   r   r   ra      sf    
2
<asciiBase85Decodec                 C   s  d t|  }|dd dks*td|dd }|dd}tt|d\}}d| }|d	| ||d  }}g j}t|D ]}|d }	t	||	 d
 }
t	||	d  d
 }t	||	d  d
 }t	||	d  d
 }t	||	d  d
 }d|
 d|  d|  d|  | }t|d\}}t|d\}}t|d\}}|d| d|  d|  | ksjtd|t
| |t
| |t
| |t
| q|d	krt|dk r|d }qt	|d	 d
 }
t	|d d
 }t	|d d
 }t	|d d
 }t	|d d
 }d|
 | d | d | d |d|   }t|d\}}t|d\}}t|d\}}|d| d|  d|  | kstd|dkrt
|}nD|dkrt
|t
| }n(|dkrt
|t
| t
| }nd}|| d |j}t|ddS )zDecodes input using ASCII-Base85 coding.

        This is not normally used - Acrobat Reader decodes for you
        - but a round trip is essential for testing.r\   Nrn   z+Invalid terminator for Ascii Base 85 Streamrf   z!!!!!   r   rl   r   r,   rR   r-   rh   ri   rj   rg   rV   rd   re   rk   !)r   r   i i     latin1)r4   )r   r   splitrq   r)   ro   r   r   rp   rG   rr   rs   r   )rt   strippedru   rv   rw   rx   ry   rz   r"   r{   r   r   r   r   r   r   r   r   r~   r|   r}   r   r_   r   r   r   r      sb    $*
 *



sameFragc                 C   sX   t | ds(t |ds(t | ds(t |dr,dS dD ]"}t| |dt||dkr0 dS q0dS )z+returns 1 if two ParaFrags map out the sameZcbDefnZ	lineBreakr   )ZfontNameZfontSizeZ	textColorZriseZus_lineslinkZ	backColornobrNr   )hasattrgetattr)r   rJ   r   r   r   r   r   ;  s     z#function %s is not properly defined__main__)Z	_rl_accelzreportlab.lib.rl_accel)z7instanceStringWidthT1(font,'abcde fghi . jkl ; mno',10)z8instanceStringWidthT1(font,u'abcde fghi . jkl ; mno',10)z%s %s;z0from reportlab.pdfbase.pdfmetrics import getFontz/from %s import unicode2T1,instanceStringWidthT1zCfonts=[getFont('Helvetica')]+getFont('Helvetica').substitutionFontszfont=fonts[0]z-mtimeitz-s)r7   )rF   )9Z_c_funcsZ	_py_funcslistfilterr   __all__Z	reportlabr   ZtestingfnDexecImportErrorZreportlab.lib.utilsr   r   r   r   r   mathr   structr	   r   r   r
   r*   r(   r+   r6   rE   rM   rO   rQ   r^   rp   r`   rG   rr   rU   ra   r   r   globalsGr   RuntimeError__name__sys
subprocessmodnamecmdprintr   r    
check_call
executabler   r   r   r   <module>   s    










P
J

