§
    £”ju  ã                   óæ  — d Z dZddlZddlZ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mZmZ ddlmZmZ ddlmZmZ dd	lmZ d
Zej                             ¦   «          ej        Zej        Zi Zi Zi Z i Z! G d„ de"¦  «        Z# G d„ de"¦  «        Z$d„ Z% G d„ d¦  «        Z&d7d„Z'd„ Z( G d„ d¦  «        Z)g Z* G d„ d¦  «        Z+ e,d¦  «        Z- e,d¦  «        Z. e,d¦  «        Z/ e,d¦  «        Z0d„ Z1da2 G d„ de&¦  «        Z3d„ Z4d „ Z5d8d!„Z6d"„ Z7d#„ Z8d$„ Z9d%„ Z:d&„ Z; e;d'¦  «        Z<e* =                     e;d(¦  «        e<g¦  «         d7d)„Z>d7d*„Z?d7d+„Z@d,„ ZAd9d.„ZBd/„ ZCd0„ ZDd1„ ZEd2„ ZF eGe H                    ¦   «         e H                    ¦   «         e  H                    ¦   «         e! H                    ¦   «         ¬3¦  «        fd4„ZIdd5lmJZJ  eJeI¦  «         [JeKd6k    r eF¦   «           eE¦   «          dS dS ):z3.3.0aŽ  This provides a database of font metric information and
efines Font, Encoding and TypeFace classes aimed at end users.

There are counterparts to some of these in pdfbase/pdfdoc.py, but
the latter focus on constructing the right PDF objects.  These
classes are declarative and focus on letting the user construct
and query font objects.

The module maintains a registry of font objects at run time.

It is independent of the canvas or any particular context.  It keeps
a registry of Font, TypeFace and Encoding objects.  Ideally these
would be pre-loaded, but due to a nasty circularity problem we
trap attempts to access them and do it on first access.
é    N)Ú	_fontdata)ÚwarnOnce)Ú	rl_isfileÚrl_globÚrl_isdirÚopen_and_readÚopen_and_readlinesÚfindInPathsÚisSeqÚisStr)ÚdefaultEncodingÚT1SearchPath)Ú
unicode2T1ÚinstanceStringWidthT1)Ú	rl_codecsó   nc                   ó   — e Zd ZdS )Ú	FontErrorN©Ú__name__Ú
__module__Ú__qualname__© ó    úk/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/reportlab/pdfbase/pdfmetrics.pyr   r   '   ó   € € € € € Ø€Dr   r   c                   ó   — e Zd ZdS )ÚFontNotFoundErrorNr   r   r   r   r   r   )   r   r   r   c           	      óŒ  — t          | d¦  «        }t          |¦  «        dk    rB|r|d                              d¦  «        }t          |¦  «        dk    rt          d| z  ¦  «        ‚i }g }d„ |D ¦   «         }d„ |D ¦   «         }d}|D �].}|dd…         d	k    rd}Œ|dd
…         dk    rd}Œ%|�r|                     d¦  «        }d„ |D ¦   «         }|dd…         \  }}}	|                     ¦   «         \  }
}|
dk    sJ d|z  ¦   «         ‚t	          |¦  «        }|                     ¦   «         \  }
}|
dk    sJ d|z  ¦   «         ‚	 t	          |¦  «        }n# t          $ r t          |¦  «        }Y nw xY w|	                     ¦   «         \  }
}|
dk    sJ d|z  ¦   «         ‚|}|                     |||f¦  «         �Œ0d}|D ]‡}|dd…         dk    rd}|dd…         d	k    rd}Œ#|rb|dd…         dk    r	 	 |                     dd¦  «        \  }}n#  t          d| ›d|›d�¦  «        ‚xY w	 t	          |¦  «        }n#  Y nxY w|||<   Œˆ||fS )a  Quick and dirty - gives back a top-level dictionary
    with top-level items, and a 'widths' key containing
    a dictionary of glyph names and widths.  Just enough
    needed for embedding.  A better parser would accept
    options for what data you wwanted, and preserve the
    order.Úré   r   úzAFM file %s hasn't enough datac                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   ©Ústrip©Ú.0Úls     r   ú
<listcomp>z parseAFMFile.<locals>.<listcomp>=   s    € Ð&Ð&Ð&˜1ˆQ�WŠW‰YŒYÐ&Ð&Ð&r   c                 ó`   — g | ]+}|                      ¦   «                              d ¦  «        °)|‘Œ,S )Úcomment)ÚlowerÚ
startswithr&   s     r   r)   z parseAFMFile.<locals>.<listcomp>>   s3   € ÐEÐEÐE�1 Q§W¢W¡Y¤Y×%9Ò%9¸)Ñ%DÔ%DÐEˆQÐEÐEÐEr   é   ÚStartCharMetricsé   ÚEndCharMetricsú;c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   r$   )r'   Úchunks     r   r)   z parseAFMFile.<locals>.<listcomp>H   s    € Ð8Ð8Ð8¨�e—k’k‘m”mÐ8Ð8Ð8r   é   ÚCzbad line in font file %sÚWXÚNÚStartFontMetricsé   ÚCommentú z Header information error in afm z: line='ú')r	   ÚlenÚsplitÚ
ValueErrorÚintÚfloatÚappend)ÚafmFileNameÚlinesÚtopLevelÚ
glyphLevelÚ	inMetricsÚlineÚchunksÚcidChunkÚ
widthChunkÚ	nameChunkr(   r    ÚcidÚwidthÚnameÚinHeaderÚleftÚrights                     r   ÚparseAFMFilerT   ,   sõ  € õ ˜{¨CÑ0Ô0€EÝ
ˆ5�z„z�1‚}€}àÐ.˜% œ(Ÿ.š.¨Ñ.Ô.�%Ýˆu‰:Œ:�qŠ=ˆ=ÝÐ>ÀÑLÑMÔMÐMØ€HØ€Jà&Ð& Ð&Ñ&Ô&€EØEÐE˜ÐEÑEÔE€Eà€IØð 2ñ 2ˆØ��"�Œ:Ð+Ò+Ð+ØˆIˆIØ�!�B�$ŒZÐ+Ò+Ð+ØˆIˆIØñ 	2Ø—Z’Z ‘_”_ˆFØ8Ð8°Ð8Ñ8Ô8ˆFØ.4°Q°q°S¬kÑ+ˆH�j )ð —>’>Ñ#Ô#‰DˆAˆqØ˜’8�8�8Ð7¸$Ñ>‘8”8�8Ý�a‘&”&ˆCð ×#Ò#Ñ%Ô%‰DˆAˆqØ˜’9�9�9Ð8¸4Ñ?‘9”9�9ð!Ý˜A™œ��øÝð !ð !ð !Ý˜a™œ���ð!øøøð —?’?Ñ$Ô$‰DˆAˆqØ˜’8�8�8Ð7¸$Ñ>‘8”8�8ØˆDà×Ò˜s E¨4Ð0Ñ1Ô1Ð1ùð €HØð #ð #ˆØ��"�Œ:Ð+Ò+Ð+ØˆHØ��"�Œ:Ð+Ò+Ð+ØˆHˆHØð 
	#Ø�A�a�CŒy˜IÒ%Ð% tðhØ"Ÿjšj¨¨QÑ/Ô/‘��e�eøðhÝ �jÐT_ÐT_ÐT_ÐaeÐaeÐaeÐ!fÑgÔgÐgøøøðÝ˜E™
œ
��øðØ�øøøØ"ˆH�T‰Nøð �jÐ!Ð!s*   ÅEÅE-Å,E-Ç/H	È	H!È%H5È5H9c                   ó(   — e Zd Zd„ Zd„ Zd„ Zdd„ZdS )ÚTypeFacec                 ó  — || _         g | _        i | _        d| _        d| _        d | _        d| _        d| _        |dk    rd| _        n|dk    rd| _        nd | _        |t          v rd| _
        |                      |¦  «         d S d| _
        d S )Nr   ÚZapfDingbatsÚZapfDingbatsEncodingÚSymbolÚSymbolEncodingr!   )rP   Ú
glyphNamesÚglyphWidthsÚascentÚdescentÚ
familyNameÚboldÚitalicÚrequiredEncodingÚstandardFontsÚbuiltInÚ_loadBuiltInData©ÚselfrP   s     r   Ú__init__zTypeFace.__init__v   s¨   € ØˆŒ	ØˆŒØˆÔØˆŒØˆŒð
 ˆŒØˆŒ	ØˆŒà�>Ò!Ð!Ø$:ˆDÔ!Ð!Ø�XÒÐØ$4ˆDÔ!Ð!à$(ˆDÔ!Ø•=Ð Ð ØˆDŒLØ×!Ò! $Ñ'Ô'Ð'Ð'Ð'àˆDŒLˆLˆLr   c                 óæ   — t          |¦  «        }t          j        |         | _        t	          | j                             ¦   «         ¦  «        | _        t          j        |         \  | _        | _	        dS )z�Called for the built in 14 fonts.  Gets their glyph data.
        We presume they never change so this can be a shared reference.N)
Ústrr   ÚwidthsByFontGlyphr]   ÚlistÚkeysr\   Úascent_descentr^   r_   rg   s     r   rf   zTypeFace._loadBuiltInData�   sW   € õ �4‰yŒyˆÝ$Ô6°tÔ<ˆÔÝ˜tÔ/×4Ò4Ñ6Ô6Ñ7Ô7ˆŒÝ#,Ô#;¸DÔ#AÑ ˆŒ�D”L�L�Lr   c                 ó   — g S )z=Info function, return list of the font files this depends on.r   ©rh   s    r   ÚgetFontFileszTypeFace.getFontFiles˜   s   € àˆ	r   ú.pfbc                 óž  — |                      ¦   «         |                     ¦   «         f}t          | d¦  «        rHt          j                             | j        ¦  «        d         }|D ]}t          ||z   ¦  «        r||z   c S Œ	 t          j	        | j
        ¦  «        }n”#  t          | j
        ¦  «        }|ru|                      ¦   «         dk    rB|D ]>}t          j                             |¦  «        d         |z   }t          |¦  «        r|}Œ<d }Œ?n|                      ¦   «         dk    r|}nd }Y nxY w|€t          d|›d| j
        ›d�¦  «         |S )NÚpfbFileNamer   rs   z.afmzCan't find z for face 'r=   )r,   ÚupperÚhasattrÚosÚpathÚsplitextru   r   r   Ú
findT1FilerP   ÚbruteForceSearchForAFMr   )rh   ÚextÚpossible_extsÚ
r_basenameÚer    ÚafmÚpfbs           r   r{   zTypeFace.findT1Fileœ   si  € ØŸš™œ c§i¢i¡k¤kÐ2ˆÝ�4˜Ñ&Ô&ð 	*Ýœ×)Ò)¨$Ô*:Ñ;Ô;¸AÔ>ˆJØ"ð *ð *�Ý˜Z¨!™^Ñ,Ô,ð *Ø%¨™>Ð)Ð)Ð)ð*ð	ÝÔ$ T¤YÑ/Ô/ˆAˆAøð	Ý(¨¬Ñ3Ô3ˆCØð Ø—9’9‘;”; &Ò(Ð(Ø*ð %ð %˜Ý œg×.Ò.¨sÑ3Ô3°AÔ6¸Ñ:˜Ý$ S™>œ>ð %Ø #˜A˜Aà $˜A˜Að%ð —Y’Y‘[”[ FÒ*Ð*Ø�Aøà�øøøøøØˆ9ÝˆH°c°c°c¸4¼9¸9¸9ÐEÑFÔFÐFØˆs   ÂB ÂBD-N)rs   )r   r   r   ri   rf   rr   r{   r   r   r   rV   rV   u   sX   € € € € € ðð ð ð4Bð Bð Bðð ð ðð ð ð ð ð r   rV   c                 ó  — |€ddl m} t          | ¦  «        r| S t          j                             | ¦  «        }|D ]E}t          |¦  «        sŒt          j                             ||¦  «        }t          |¦  «        r|c S ŒF| S )Nr   ©r   )Úreportlab.rl_configr   r   rx   ry   Úbasenamer   Újoin)ÚfnÚ
searchPathÚbfnÚdirnameÚtfns        r   ÚbruteForceSearchForFiler�   ·   s�   € ØÐÐUÐUÐUÐUÐUÐUÝ��}„}Ð˜R�iÝ
Œ'×
Ò
˜2Ñ
Ô
€CØð &ð &ˆÝ˜Ñ Ô Ð* (ÝŒg�lŠl˜7 3Ñ'Ô'ˆÝ�S‰>Œ>Ð% #˜:˜:˜:Ð%Ø€Ir   c           	      óz  — ddl m} |D ]±}t          |¦  «        sŒt          |t          j        z   dz   ¦  «        }|D ]}}	 t          |¦  «        \  }}|d         | k    r|c c S Œ(#  t          j        ¦   «         \  }}}	d 	                    t          t          |j        ¦  «        ¦  «        d| z  z   f|_        ‚ xY wŒ²dS )zcLooks in all AFM files on path for face with given name.

    Returns AFM file name or None.  Ouch!r   r„   z*.[aA][fF][mM]ÚFontNamer<   z, while looking for faceName=%rN)r…   r   r   r   rx   ÚseprT   ÚsysÚexc_infor‡   Úmaprk   Úargs)
ÚfaceNamer   r‹   Ú	possiblesÚpossibleÚtopDictÚ	glyphDictÚtÚvÚbs
             r   r|   r|   Á   sï   € ð 1Ð0Ð0Ð0Ð0Ð0àð ð ˆÝ˜Ñ Ô Ð* (Ý˜G¥b¤fÑ,Ð/?Ñ?Ñ@Ô@ˆ	Ø!ð 	ð 	ˆHðÝ%1°(Ñ%;Ô%;Ñ"�˜Ø˜:Ô&¨(Ò2Ð2Ø#�O�O�O�O�Oð 3øðÝ”l‘n”n‘��!�AØŸ(š(¥3¥s¨1¬6¡?¤?Ñ3Ô3Ð4UÐX`Ñ4`Ñ`Ðb�”Øøøøð	ðð s   ¿A$Á$AB7c                   óD   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ ZdS )ÚEncodingz1Object to help you create and refer to encodings.Nc                 ó2  — || _         d| _        |t          v r,|�
J d¦   «         ‚|| _        t          j        |         | _        d S |d k    r*t          | _        t          j        t                   | _        d S t          |¦  «        r1t          |¦  «        }|j         | _        |j        d d …         | _        d S t          |¦  «        rt          | _        |d d …         | _        d S t          |t          ¦  «        r"|j         | _        |j        d d …         | _        d S d S )Nr   z2Can't have a base encoding for a standard encoding)rP   ÚfrozenÚstandardEncodingsÚbaseEncodingNamer   Ú	encodingsÚvectorr   r   ÚgetEncodingr   Ú
isinstancerž   )rh   rP   ÚbaseÚbaseEncs       r   ri   zEncoding.__init__Û   s
  € ØˆŒ	ØˆŒØÕ$Ð$Ð$Ø�<�<Ð!U‘<”<�<Ø$(ˆDÔ!Ý#Ô-¨dÔ3ˆDŒKˆKˆKØ�TŠ\ˆ\å$3ˆDÔ!Ý#Ô-­oÔ>ˆDŒKˆKˆKÝ�4‰[Œ[ð 
	)Ý! $Ñ'Ô'ˆGØ$+¤LˆDÔ!Ø!œ.¨¨¨Ô+ˆDŒKˆKˆKÝ�4‰[Œ[ð 	)Ý$3ˆDÔ!Ø˜q˜q˜qœ'ˆDŒKˆKˆKÝ˜�hÑ'Ô'ð 	)à$(¤IˆDÔ!Øœ+ a a aœ.ˆDŒKˆKˆKð	)ð 	)r   c                 ó   — | j         |         S )z.Return glyph name for that code point, or None)r¤   )rh   Úindexs     r   Ú__getitem__zEncoding.__getitem__ò   s   € ð Œ{˜5Ô!Ð!r   c                 ó°   — | j         dk    s
J d¦   «         ‚| j        |         |k    r/t          | j        ¦  «        }|||<   t          |¦  «        | _        d S d S )Nr   úCannot modify a frozen encoding)r    r¤   rm   Útuple)rh   rª   ÚvalueÚLs       r   Ú__setitem__zEncoding.__setitem__÷   sa   € àŒ{˜aÒÐÐÐ!BÑÔÐØŒ;�uÔ˜uÒ$Ð$Ý�T”[Ñ!Ô!ˆAØˆAˆe‰HÝ ™(œ(ˆDŒKˆKˆKð %Ð$r   c                 óF   — t          | j        ¦  «        | _        d| _        d S ©Nr!   )r®   r¤   r    rq   s    r   ÚfreezezEncoding.freezeÿ   s   € Ý˜DœKÑ(Ô(ˆŒØˆŒˆˆr   c                 óv   — | j         |j         k    o)t          | j        ¦  «        t          |j        ¦  «        k    S ©N)rP   r®   r¤   )rh   Úothers     r   ÚisEqualzEncoding.isEqual  s/   € ØŒy˜%œ*Ò$ÐP­¨t¬{Ñ);Ô);½UÀ5Ä<Ñ=PÔ=PÒ)PÐPr   c                 ó\   — | j         dk    s
J d¦   «         ‚|}|D ]}|| j        |<   |dz   }ŒdS )zASet a group of character names starting at the code point 'base'.r   r­   r!   N)r    r¤   )rh   r§   ÚnewNamesÚidxrP   s        r   ÚmodifyRangezEncoding.modifyRange  sS   € àŒ{˜aÒÐÐÐ!BÑÔÐØˆØð 	ð 	ˆDØ#ˆDŒK˜ÑØ˜‘'ˆCˆCð	ð 	r   c                 ó0  — g }d}t          t          | j        ¦  «        ¦  «        D ]X}| j        |         }||j        |         k    r|r|                     |¦  «         g }Œ:|r|                     |¦  «         ŒR|r||g}ŒY|r|                     |¦  «         |S )aZ  
        Return a compact list of the code points differing between two encodings

        This is in the Adobe format: list of
           [[b1, name1, name2, name3],
           [b2, name4]]
           
        where b1...bn is the starting code point, and the glyph names following
        are assigned consecutive code points.
        
        N)Úranger>   r¤   rC   )rh   ÚotherEncÚrangesÚcurRangeÚiÚglyphs         r   ÚgetDifferenceszEncoding.getDifferences  sº   € ð ˆØˆÝ•s˜4œ;Ñ'Ô'Ñ(Ô(ð 
	*ð 
	*ˆAØ”K ”NˆEØ�h”o aÔ(Ò(Ð(Øð "Ø—M’M (Ñ+Ô+Ð+Ø!�Høàð *Ø—O’O EÑ*Ô*Ð*Ð*Øð *Ø ! 5˜z�HøØð 	$Ø�MŠM˜(Ñ#Ô#Ð#Øˆr   c                 óö  — ddl m} i }| j        }t          |¦  «        }|                      |¦  «        }|g k    r|                     |¦  «        S g }|D ]D}|                     |d         ¦  «         |dd…         D ]}|�|                     d|z   ¦  «         ŒŒE|                     |¦  «        |d<   |dv r|                     |¦  «        |d<   |                     d	¦  «        |d
<   |                     |¦  «        }	|	S )z&Returns a PDF Object representing selfr   ©Úpdfdocr!   Nú/ÚDifferences)ÚMacRomanEncodingÚMacExpertEncodingÚWinAnsiEncodingÚBaseEncodingrž   ÚType)	Úreportlab.pdfbaserÇ   r¢   r¥   rÄ   ÚPDFNamerC   ÚPDFArrayÚPDFDictionary)
rh   rÇ   ÚDr¢   r¨   ÚdifferencesÚ	diffArrayr¾   Ú	glyphNameÚPDs
             r   ÚmakePDFObjectzEncoding.makePDFObject,  s6  € ð 	-Ð,Ð,Ð,Ð,Ð,àˆØÔ0ÐÝÐ.Ñ/Ô/ˆØ×)Ò)¨'Ñ2Ô2ˆð ˜"ÒÐØ—>’>Ð"2Ñ3Ô3Ð3ð ˆIØ$ð :ð :�Ø× Ò   q¤Ñ*Ô*Ð*Ø!& q r r¤ð :ð :�IØ Ð,à!×(Ò(¨¨y©Ñ9Ô9Ð9øð:ð  &Ÿš¨yÑ9Ô9ˆAˆmÑØÐ#]Ð]Ð]à$*§N¢NÐ3CÑ$DÔ$D��.Ñ!ØŸš zÑ2Ô2ˆAˆf‰IØ×%Ò% aÑ(Ô(ˆBØˆIr   r¶   )r   r   r   Ú__doc__ri   r«   r±   r´   r¸   r¼   rÄ   rØ   r   r   r   rž   rž   Ù   sš   € € € € € Ø;Ð;ð)ð )ð )ð )ð."ð "ð "ð
#ð #ð #ðð ð ðQð Qð Qðð ð ðð ð ð<ð ð ð ð r   rž   c                   óF   — e Zd ZdZdZdZdZdd„Zdd„Zd„ Z	d	„ Z
d
„ Zd„ ZdS )ÚFontaD  Represents a font (i.e combination of face and encoding).

    Defines suitable machinery for single byte fonts.  This is
    a concrete class which can handle the basic built-in fonts;
    not clear yet if embedded ones need a new font class or
    just a new typeface class (which would do the job through
    composition)r   FNc                 ó  — || _         t          |¦  «        x}| _        t          |¦  «        | _        || _        |j        r|j        €t          n|pg | _	        |  
                    ¦   «          t          | _        |dk    r| pt          | _        d S )NrX   )ÚfontNameÚgetTypeFaceÚfacer¥   ÚencodingÚencNamere   rc   ÚstandardT1SubstitutionFontsÚsubstitutionFontsÚ_calcWidthsÚ_notdefCharÚ_notdefFont)rh   rP   r•   rá   rã   rß   s         r   ri   zFont.__init__^  s˜   € ØˆŒÝ& xÑ0Ô0Ð0ˆˆtŒyÝ" 7Ñ+Ô+ˆŒØˆŒà'+¤|ð#AØ8<Ô8MÐ8Uõ #>Ð"=à):Ð)@¸bð 	Ôð 	×ÒÑÔÐÝ&ˆÔØ Ò/Ð8°DÐG½KˆÔÐÐr   Úutf8c                 ó(   — t          | |||¬¦  «        S )N©rà   )r   )rh   ÚtextÚsizerà   s       r   ÚstringWidthzFont.stringWidthj  s   € Ý$ T¨4°ÀÐIÑIÔIÐIr   c                 ó<   — d| j         j        ›d| j        j        ›d�S )Nú<r<   ú>)Ú	__class__r   rß   rP   rq   s    r   Ú__repr__zFont.__repr__m  s"   € € Ø œNÔ3Ð3Ð3°T´Y´^°^°^ÐDÐDr   c           	      ó*  — dgdz  }| j         j        }| j        j        }t	          d¦  «        D ]]}||         }|�Q	 ||         }|||<   Œ# t
          $ r5 ddl}|j        j        r!t          d| j         j
        ›d|›d�¦  «         n	 Y ŒYw xY wŒ^|| _        dS )z)Vector of widths for stringWidth functionr   é   Nz
typeface "z" does not have a glyph "z", bad font!)rß   r]   rà   r¤   r¾   ÚKeyErrorr…   Ú	rl_configÚwarnOnMissingFontGlyphsÚprintrP   Úwidths)rh   ÚwÚgwÚvecrÂ   rÖ   rO   Ú	reportlabs           r   rä   zFont._calcWidthsp  sØ   € ð ˆC�#‰IˆØŒYÔ"ˆØŒmÔ"ˆÝ�s‘”ð 	ð 	ˆAØ˜AœˆIØÐ$ðØ˜yœM�EØ �A�a‘D�DøÝð ð ð Ø.Ð.Ð.Ð.Ø Ô*ÔBð Ý˜ÐW[ÔW`ÔWeÐWeÐWeÐgpÐgpÐgpÐqÑrÔrÐrÐràøøðøøøð	 %ð ˆŒˆˆs   »A	Á	<BÂBc                 ó¼   — d}t          d¦  «        D ]I}|dz   t          t          | j        |         ¦  «        d¦  «        z   }|dk    r|dz   }|dz  dk    r|d	z   }ŒJ|S )
z<returns a pretty block in PDF Array format to aid inspectionó   [ró   ó    rç   éÿ   s    ]r.   é   ó   
)r¾   Úbytesrk   rø   )rh   rê   rÂ   s      r   Ú_formatWidthszFont._formatWidths„  sp   € àˆÝ�s‘”ð 	$ð 	$ˆAØ˜$‘;¥¥s¨4¬;°q¬>Ñ':Ô':¸6Ñ!BÔ!BÑBˆDØ�CŠxˆxØ˜e‘|�Ø�2‰v˜Š|ˆ|Ø˜e‘|�øØˆr   c                 óx  — ddl m} dt          t          |j        ¦  «        dz   ¦  «        z   }|                     ¦   «         }||_        | j        j        |_	        d| j
        z  |_        | j                             ¦   «         }t          |¦  «        r|dv r||_        | j        j        t           vrLd|_        d|_        |                     | j        ¦  «        |_        | j                             |¦  «        |_        |                     ||¦  «        }|j        d         j        }|||<   d	|z   |j        | j
        <   d
S )z«Makes and returns one or more PDF objects to be added
        to the document.  The caller supplies the internal name
        to be used (typically F1, F2... in sequence) r   rÆ   ÚFr!   zFont %s)z/MacRomanEncodingz/MacExpertEncodingz/WinAnsiEncodingr   Ú
BasicFontsrÈ   N)rÏ   rÇ   Úreprr>   ÚfontMappingÚPDFType1FontÚNamerß   rP   ÚBaseFontrÝ   Ú__Comment__rà   rØ   r   rž   rd   Ú	FirstCharÚLastCharrÑ   rø   ÚWidthsÚ
addObjectsÚFontDescriptorÚ	ReferenceÚ
idToObjectÚdict)rh   ÚdocrÇ   ÚinternalNameÚpdfFontr€   ÚrefÚfontDicts           r   r  zFont.addObjects�  s7  € ð
 	-Ð,Ð,Ð,Ð,Ð,ð �T¥# c¤oÑ"6Ô"6°qÑ"8Ñ9Ô9Ñ9ˆØ×%Ò%Ñ'Ô'ˆØ#ˆŒØœ9œ>ˆÔØ'¨$¬-Ñ7ˆÔØŒM×'Ò'Ñ)Ô)ˆÝ�Q‰xŒxð 	!˜1Ð ]Ð]Ð]à ˆGÔð ŒyŒ~¥Ð.Ð.Ø !ˆGÔØ"ˆGÔØ#Ÿ_š_¨T¬[Ñ9Ô9ˆGŒNØ%)¤Y×%9Ò%9¸#Ñ%>Ô%>ˆGÔ"à�mŠm˜G \Ñ2Ô2ˆð ”> ,Ô/Ô4ˆØ!(ˆ�Ñð *-¨|Ñ);ˆŒ˜œÑ&Ð&Ð&r   r¶   ©rç   )r   r   r   rÙ   Ú
_multiByteÚ_dynamicFontÚshapableri   rì   rñ   rä   r  r  r   r   r   rÛ   rÛ   Q  sž   € € € € € ðð ð €JØ€LØ€Hð
Hð 
Hð 
Hð 
HðJð Jð Jð JðEð Eð Eðð ð ð(	ð 	ð 	ð <ð  <ð  <ð  <ð  <r   rÛ   é€   r!   é   r5   c                 ó  — t          ||          ¦  «        t          k    st          || dz            ¦  «        |k    rFt          d|t          t          ¦  «        t          |¦  «        | ||          || dz            fz  ¦  «        ‚|t          k    rd S | dz   } || dz            dz  || dz            dz  z  || dz            z  dz  ||          z  }| dz   } | |z   t          |¦  «        k    r#t          d|| |t          |¦  «        fz  ¦  «        ‚| | |z   fS )Nr!   zGBad pfb file'%s' expected chr(%d)chr(%d) at char %d, got chr(%d)chr(%d)r   r5   é   é   z1Bad pfb file'%s' needed %d+%d bytes have only %d!)ÚchrÚ
PFB_MARKERr@   ÚordÚPFB_EOFr>   )ÚpÚdÚmrˆ   r(   s        r   Ú	_pfbCheckr+  ¶  s^  € Ý
ˆ1ˆQŒ4�y„y•*ÒÐ¥ A a¨¡c¤F¡¤¨Q¢ ÝÐdÐhjÕknÕoyÑkzÔkzÕ{~ð  @Añ  |Bô  |Bð  CDð  EFð  GHô  EIð  JKð  LMð  NOñ  LOô  JPð  hQñ  Qñ  Rô  Rð  	RØ�'‚z€z�6�6Ø	ˆA‰€AØˆq�‰sŒV�a‰K˜!˜A˜a™Cœ& 1™Ñ$ q¨¨1©¤vÑ
.°Ñ	2°Q°q´TÑ:€AØ	ˆA‰€AØˆ�s�3ˆq‰6Œ6‚z€zÝÐNÐRTÐUVÐWXÕY\Ð]^ÑY_ÔY_ÐQ`Ñ`ÑaÔaÐaØˆa�‰cˆ6€Mr   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚEmbeddedType1FacezcA Type 1 font other than one of the basic 14.

    Its glyph data will be embedded in the PDF file.c                 ó‚  — t                                | d ¦  «         t          |t          ¦  «        }t          |t          ¦  «        }t          j                             |¦  «        | _        t          j                             |¦  «        | _        d | _	        |  
                    |¦  «         |                      |¦  «         d S r¶   )rV   ri   r
   r   rx   ry   ÚabspathrD   ru   rc   Ú_loadGlyphsÚ_loadMetrics)rh   rD   ru   s      r   ri   zEmbeddedType1Face.__init__Æ  sš   € å×Ò˜$ Ñ%Ô%Ð%õ " +­lÑ;Ô;ˆÝ! +­lÑ;Ô;ˆÝœ7Ÿ?š?¨;Ñ7Ô7ˆÔÝœ7Ÿ?š?¨;Ñ7Ô7ˆÔØ $ˆÔØ×Ò˜Ñ%Ô%Ð%Ø×Ò˜+Ñ&Ô&Ð&Ð&Ð&r   c                 ó   — | j         | j        gS r¶   )rD   ru   rq   s    r   rr   zEmbeddedType1Face.getFontFilesÓ  s   € ØÔ  $Ô"2Ð3Ð3r   c                 óþ  — t          |¦  «        }t          |¦  «        sJ d|z  ¦   «         ‚t          |d¦  «        }t          d|t          |¦  «        \  }}t          ||t
          |¦  «        \  }}t          ||t          |¦  «        \  }}t          ||t          |¦  «         |||…         |||…         z   |||…         z   | _        t          | j        ¦  «        | _	        ||z
  | _
        ||z
  | _        ||z
  | _        dS )ziLoads in binary glyph data, and finds the four length
        measurements needed for the font descriptorzfile %s not foundrœ   r   N)r�   r   r   r+  Ú	PFB_ASCIIÚ
PFB_BINARYr'  Ú_binaryDatar>   Ú_lengthÚ_length1Ú_length2Ú_length3)	rh   ru   r)  Ús1Úl1Ús2Úl2Ús3Úl3s	            r   r0  zEmbeddedType1Face._loadGlyphsÖ  sü   € õ .¨kÑ:Ô:ˆÝ˜Ñ%Ô%ÐHÐHÐ':¸[Ñ'HÑHÔHÐHÝ˜+ sÑ+Ô+ˆÝ˜1˜Q�y¨Ñ5Ô5‰ˆˆBÝ˜2˜a¥
¨;Ñ7Ô7‰ˆˆBÝ˜2˜a¥	¨+Ñ6Ô6‰ˆˆBÝ�"�Q•w˜{Ñ+Ô+Ð+Ø˜R ˜Uœ8 A b¨ e¤HÑ,¨Q¨r°"¨u¬XÑ5ˆÔå˜4Ô+Ñ,Ô,ˆŒØ˜2™ˆŒØ˜2™ˆŒØ˜2™ˆŒˆˆr   c                 ó  — t          |¦  «        }t          |¦  «        \  }}|d         | _        |d         | _        |                     dd¦  «        | _        |                     dd¦  «        | _        |                     dd¦  «        | _        |                     dd¦  «        | _        |                     d	d¦  «        | _	        |                     d
d¦  «        | _
        |                     dg d¢¦  «        }|                     ¦   «         }g | _        |D ])}| j                             t          |¦  «        ¦  «         Œ*i }|D ]\  }}	}
|	||
<   Œ|| _        t!          |                     ¦   «         ¦  «        | _        | j                             ¦   «          |                     dd¦  «        dk    rÜt(          €!	 ddlm} |a~n#  i at/          d¦  «        ‚xY wdgdz  }i }i }|D ]B\  }}	}
d|cxk    rdk    r/n Œ|
||<   t(                               |
d¦  «        }|�
|||<   |||<   ŒCt1          j        d| j        z  ¦  «        }t4          j                             |||¦  «         || _        t=          ||¦  «        }t?          |¦  «         dS dS )z Loads in and parses font metricsr�   Ú
FamilyNameÚAscenderéè  Ú	Descenderr   Ú	CapHeightÚItalicAngleÚstemVÚXHeightÚFontBBox)r   r   rD  rD  ÚEncodingSchemeNÚFontSpecific)Ú_glyphname2unicodezˆcannot import module reportlab.pdfbase._glyphlist module
you can obtain a version from here
https://www.reportlab.com/ftp/_glyphlist.py
ró   r   zrl-dynamic-%s-encoding) r�   rT   rP   r`   Úgetr^   r_   Ú	capHeightÚitalicAnglerH  ÚxHeightr?   ÚbboxrC   rA   r]   rm   rn   r\   ÚsortÚ_postScriptNames2UnicodeÚreportlab.pdfbase._glyphlistrM  r@   r£   Únormalize_encodingr   Ú	RL_CodecsÚadd_dynamic_codecrc   rž   ÚregisterEncoding)rh   rD   rF   Ú	glyphDataÚstrBboxÚtokensÚtokr]   rN   rO   rP   rM  ÚnamesÚexÚrexÚcodeÚurá   Úencs                      r   r1  zEmbeddedType1Face._loadMetricsè  sÁ  € õ .¨kÑ:Ô:ˆÝ ,¨[Ñ 9Ô 9Ñˆ�9à˜ZÔ(ˆŒ	Ø" <Ô0ˆŒØ—l’l :¨tÑ4Ô4ˆŒØ—|’| K°Ñ3Ô3ˆŒØ!Ÿš k°4Ñ8Ô8ˆŒØ#Ÿ<š<¨°qÑ9Ô9ˆÔØ—\’\ '¨1Ñ-Ô-ˆŒ
Ø—|’| I¨tÑ4Ô4ˆŒà—,’,˜z¨?¨?¨?Ñ;Ô;ˆØ—’‘”ˆØˆŒ	Øð 	'ð 	'ˆCØŒI×Ò�S ™XœXÑ&Ô&Ð&Ð&àˆØ"+ð 	&ð 	&ÑˆS�%˜Ø %ˆK˜ÑÐØ&ˆÔÝ˜{×/Ò/Ñ1Ô1Ñ2Ô2ˆŒØŒ×ÒÑÔÐð �<Š<Ð(¨$Ñ/Ô/°>ÒAÐAå'Ð/ð
ØOÐOÐOÐOÐOÐOØ/AÐ,Ø*Ð*øðØ/1Ð,Ý$ðLñô ð øøøð �F˜S‘LˆEØˆBØˆCØ'0ð %ð %Ñ#��u˜dØ�d�<�<’<�<˜C’<�<�<�<�<Ø"&�E˜$‘KÝ0×4Ò4°T¸$Ñ?Ô?�AØ�}Ø$%˜˜D™	Ø $˜˜1™øÝÔ2Ð3KÈdÌiÑ3WÑXÔXˆGÝÔ×1Ò1°'¸"¸SÑAÔAÐAØ$+ˆDÔ!Ý˜7 EÑ*Ô*ˆCÝ˜SÑ!Ô!Ð!Ð!Ð!ð; BÐAs   Æ5	F? Æ?Gc                 ó  — ddl m} |                     ¦   «         }| j        |_        | j        |j        d<   | j        |j        d<   | j        |j        d<   | 	                    |d| j
        z   ¦  «        }|                     d| j        | j        | j        d|                     | j        ¦  «        |                     | j        ¦  «        | j        | j        | j        |d	œ¦  «        }| 	                    |d
| j        z   ¦  «        }|S )zFAdd whatever needed to PDF file, and return a FontDescriptor referencer   rÆ   ÚLength1ÚLength2ÚLength3z	fontFile:z/FontDescriptoré"   )rÎ   ÚAscentrF  ÚDescentÚFlagsrJ  r�   rG  ÚStemVrI  ÚFontFilezfontDescriptor:)rÏ   rÇ   Ú	PDFStreamr6  Úcontentr8  Ú
dictionaryr9  r:  r  ru   rÒ   r^   rO  r_   rÑ   rR  rÐ   rP   rP  rH  rQ  )rh   r  rÇ   ÚfontFileÚfontFileRefÚfontDescriptorÚfontDescriptorRefs          r   r  zEmbeddedType1Face.addObjects%  s  € à,Ð,Ð,Ð,Ð,Ð,à×#Ò#Ñ%Ô%ˆØÔ+ˆÔà)-¬ˆÔ˜IÑ&Ø)-¬ˆÔ˜IÑ&Ø)-¬ˆÔ˜IÑ&ð —m’m H¨k¸DÔ<LÑ.LÑMÔMˆà×-Ò-Ø%Ø”[ØœØ”lØØ—’ t¤yÑ1Ô1Ø—~’~ d¤iÑ0Ô0ØÔ*Ø”JØ”lØ#ð/ð /ñ ô ˆð  ŸMšM¨.Ð:KÈdÌiÑ:WÑXÔXÐØ Ð r   N)	r   r   r   rÙ   ri   rr   r0  r1  r  r   r   r   r-  r-  Â  sj   € € € € € ð8ð 8ð'ð 'ð 'ð4ð 4ð 4ðð ð ð$;"ð ;"ð ;"ðz!ð !ð !ð !ð !r   r-  c                 ó°   — t          | t          ¦  «        sJ d| z  ¦   «         ‚| t          | j        <   | j        t          vrt          | j        ¦  «         d S d S )NzNot a TypeFace: %s)r¦   rV   Ú
_typefacesrP   rd   ÚregisterFontFamily)rß   s    r   ÚregisterTypeFacerx  C  s_   € Ý�d�HÑ%Ô%ÐBÐBÐ';¸dÑ'BÑBÔBÐBØ …JˆtŒyÑØŒ9�Ð%Ð%õ 	˜4œ9Ñ%Ô%Ð%Ð%Ð%ð &Ð%r   c                 óP  — t          | t          ¦  «        sJ d| z  ¦   «         ‚| j        t          v rR|                      t          | j                 ¦  «        r|                      ¦   «          d S t          d| j        z  ¦  «        ‚| t          | j        <   |                      ¦   «          d S )NzNot an Encoding: %sz>Encoding "%s" already registered with a different name vector!)r¦   rž   rP   Ú
_encodingsr¸   r´   r   )rc  s    r   rY  rY  K  s•   € Ý�c�8Ñ$Ô$ÐAÐAÐ&;¸cÑ&AÑAÔAÐAØ
„x•:ÐÐà�;Š;•z #¤(Ô+Ñ,Ô,ð 	iØ�JŠJ‰LŒLˆLˆLˆLåÐ\Ð_bÔ_gÑgÑhÔhÐhà"�
�3”8ÑØ�
Š
‰Œˆˆˆr   c                 ó"  — ddl m} |s| }|                      ¦   «         } |s|p|p|}|s|}|s|}|                     | dd|¦  «         |                     | dd|¦  «         |                     | dd|¦  «         |                     | dd|¦  «         d S )Nr   )Úfontsr!   )Úreportlab.libr|  r,   Ú
addMapping)ÚfamilyÚnormalra   rb   Ú
boldItalicr|  s         r   rw  rw  X  sÁ   € Ø#Ð#Ð#Ð#Ð#Ð#ØÐ"˜F�6Ø�\Š\‰^Œ^€FØÐ< FÐ$<¨dÐ$<°f�zØÐ˜�ØÐ"˜F�6Ø	×Ò�V˜Q  6Ñ*Ô*Ð*Ø	×Ò�V˜Q  4Ñ(Ô(Ð(Ø	×Ò�V˜Q  6Ñ*Ô*Ð*Ø	×Ò�V˜Q  :Ñ.Ô.Ð.Ð.Ð.r   c                 óD  — | j         }| j        rj| j        j        }|t          vrT|t
          v r7t
          |         }|j        st          d|›d| ›d|›�¦  «        ‚|t          |<   n| xt
          |<   t          |<   n
| t          |<   | j        rt          | j         ¦  «         dS dS )zGRegisters a font, including setting up info for accelerated stringWidthzAttempt to register fonts r<   z
 for face N)	rÝ   r  rß   rP   Ú_fontsÚ_dynFaceNamesr@   r  rw  )ÚfontrÝ   r•   Úofonts       r   ÚregisterFontr‡  d  sË   € ð Œ}€HØÔð  Ø”9”>ˆØ�6Ð!Ð!Ø�=Ð(Ð(Ý% hÔ/�ØÔ)ð -Ý$˜*ÐV[ÐV[ÐV[Ð]aÐ]aÐ]aÐckÐckÐ%lÑmÔmÐmà',•F˜8Ñ$Ð$à=AÐA•˜hÑ'­&°Ñ*:øà�ˆxÑà„ð *õ 	˜4œ=Ñ)Ô)Ð)Ð)Ð)ð	*ð *r   c                 óø  — 	 t           |          S # t          $ rà | t          v rGt          | ¦  «        }t          j        |          \  |_        |_        |_        t          |¦  «         |cY S t          | ¦  «        }|r}dD ];}t          j                             |¦  «        d         |z   }t          |¦  «        r nŒ<t          |¦  «        sJ d|z  ¦   «         ‚t          ||¦  «        }t          |¦  «         |cY S ‚ w xY w)z-Lazily construct known typefaces if not found)rs   z.PFBr   zfile %s not found!)rv  rô   rd   rV   r   ÚstandardFontAttributesr`   ra   rb   rx  r|   rx   ry   rz   r   r-  )r•   rß   r�   r€   r‚   s        r   rÞ   rÞ   |  s  € ðÝ˜(Ô#Ð#øÝð ð ð à•}Ð$Ð$Ý˜HÑ%Ô%ˆDÝ8AÔ8XÐYaÔ8bÑ5ˆTŒ_˜dœi¨¬Ý˜TÑ"Ô"Ð"ð ˆKˆKˆKõ )¨Ñ2Ô2ˆCØð 	Ø)ð -ð -�AÝœ'×*Ò*¨3Ñ/Ô/°Ô2°QÑ6�CÝ  ‘~”~Ð, u uÐ,Ý  ‘~”~ÐAÐAÐ';¸cÑ'AÑAÔAÐAÝ(¨¨cÑ2Ô2�Ý  Ñ&Ô&Ð&Ø���àð+øøøs   ‚ �AC9Á)BC9Ã7C9c                 ó’   — 	 t           |          S # t          $ r- | t          v r"t          | ¦  «        }t	          |¦  «         |cY S ‚ w xY w)z-Lazily construct known encodings if not found)rz  rô   r¡   rž   rY  )rá   rc  s     r   r¥   r¥   —  s`   € ð	Ý˜'Ô"Ð"øÝð ð ð ØÕ'Ð'Ð'Ý˜7Ñ#Ô#ˆCÝ˜SÑ!Ô!Ð!àˆJˆJˆJàðøøøs   ‚ �3AÁAc                 ó(  — t          | ¦  «        } t          | ¦  «        t           u sJ dt          | ¦  «        z  ¦   «         ‚t          | ¦  «        }|j        rt          | | |j        ¦  «        }nt          | | t          ¦  «        }t          |¦  «         |S )z-search for and register a font given its namez$fontName=%s is not required type str)rk   ÚtypeÚasciirÞ   rc   rÛ   r   r‡  )rÝ   rß   r…  s      r   ÚfindFontAndRegisterrŽ  ¤  s�   € å�8‰}Œ}€HÝ�‰>Œ>�SÐ Ð Ð Ð"HÍ5ÐQYÉ?Ì?Ñ"ZÑ Ô Ð õ �xÑ Ô €DØÔð 9Ý�H˜h¨Ô(=Ñ>Ô>ˆˆå�H˜h­Ñ8Ô8ˆÝ�ÑÔÐØ€Kr   c                 ó\   — 	 t           |          S # t          $ r t          | ¦  «        cY S w xY w)zêLazily constructs known fonts if not found.

    Names of form 'face-encoding' will be built if
    face and encoding are known.  Also if the name is
    just one of the standard 14, it will make up a font
    in the default encoding.)rƒ  rô   rŽ  )rÝ   s    r   ÚgetFontr�  ²  sA   € ð-Ý�hÔÐøÝð -ð -ð -Ý" 8Ñ,Ô,Ð,Ð,Ð,ð-øøøs   ‚ �+ª+rX   rZ   c                 ó¨   — t          | ¦  «        }	 |j        }|j        }n#  |j        j        }|j        j        }Y nxY w|r|dz  }||z  ||z  fS ||fS )Ng     @�@)r�  r^   r_   rß   )rÝ   ÚfontSizer…  r^   r_   Únorms         r   ÚgetAscentDescentr”  Á  ss   € Ý�8ÑÔ€Dð$Ø”ˆØ”,ˆˆøð$Ø”Ô!ˆØ”)Ô#ˆˆˆøøøØð Ø˜‰~ˆØ�d‰{˜G D™LÐ(Ð(à�wˆÐs   ‘   <c                 ó.   — t          | |¦  «        d         S )Nr   ©r”  ©rÝ   r’  s     r   Ú	getAscentr˜  Ï  ó   € Ý˜H XÑ.Ô.¨qÔ1Ð1r   c                 ó.   — t          | |¦  «        d         S r³   r–  r—  s     r   Ú
getDescentr›  Ò  r™  r   c                  óz   — t          t                               ¦   «         ¦  «        } |                      ¦   «          | S )zReturns what's in there)rm   rƒ  rn   rS  )Úregs    r   ÚgetRegisteredFontNamesrž  Õ  s)   € å
�v�{Š{‰}Œ}Ñ
Ô
€CØ‡H‚H�J„J€JØ€Jr   rç   c                 óL   — t          |¦  «                             | ||¬¦  «        S )zjCompute width of string in points;
    not accelerated as fast enough because of instanceStringWidthT1/TTFré   )r�  rì   )rê   rÝ   r’  rà   s       r   rì   rì   Û  s'   € õ �8ÑÔ×(Ò(¨¨xÀ(Ð(ÑKÔKÐKr   c            
      óÐ  — t          d¦  «         t          t                               ¦   «         ¦  «        } |                      ¦   «          | D ]}t          d|¦  «         Œt          ¦   «          t          d¦  «         t          t
                               ¦   «         ¦  «        }|                     ¦   «          |D ]}t          d|¦  «         Œt          ¦   «          t          d¦  «         t          t                               ¦   «         ¦  «        }|                     ¦   «          |D ]A}t          |         }t          d|j        ›d|j        j	        ›d|j
        j	        ›d�¦  «         ŒBd S )	NzRegistered Encodings:z   zRegistered Typefaces:zRegistered Fonts:z    z (rÈ   ú))r÷   rm   rz  rn   rS  rv  rƒ  rÝ   rß   rP   rà   )rn   rá   Úfacesr•   ÚkÚkeyr…  s          r   ÚdumpFontDatar¥  à  sJ  € Ý	Ð
!Ñ"Ô"Ð"Ý•
—’Ñ!Ô!Ñ"Ô"€DØ‡I‚I�K„K€KØð ð ˆÝˆe�GÑÔÐÐå	�G„G€GÝ	Ð
!Ñ"Ô"Ð"Ý•—’Ñ"Ô"Ñ#Ô#€EØ	‡J‚J�L„L€LØð ð ˆÝˆe�HÑÔÐÐõ 
�G„G€GÝ	Ð
ÑÔÐÝ�V�[Š[‰]Œ]ÑÔ€AØ‡F‚F�H„H€HØð Vð VˆÝ�cŒ{ˆÝˆ $¤- - -°´´°°ÀÄÔASÐASÐASÐTÑUÔUÐUÐUðVð Vr   c                 ó  — dd l }t          dd…         D ]ê}|                      ¦   «         }t          |¦  «        j        }| D ]!}d}|D ]}||t	          |¦  «                 z   }ŒŒ"|                      ¦   «         }t          d||z
  z  ¦  «         |                      ¦   «         }| D ]%}t          |¦  «                             |d¦  «        }	Œ&|                      ¦   «         }t          d||z
  z  ¦  «         t          ¦   «          Œëd S )Nr   r!   zslow stringWidth took %0.4fé
   z'class lookup and stringWidth took %0.4f)Útimerd   r�  rø   r&  r÷   rì   )
Útextsr¨  rÝ   Út0rù   rê   r>  ÚchÚt1r@  s
             r   Útest3widthsr­  ÷  s  € à€K€K€KÝ! ! A #Ô&ð ð ˆð �YŠY‰[Œ[ˆÝ�HÑÔÔ$ˆØð 	%ð 	%ˆDØˆBØð %ð %�Ø˜!�C ™GœGœ*‘_��ð%à�YŠY‰[Œ[ˆÝÐ+¨r°B©wÑ7Ñ8Ô8Ð8à�YŠY‰[Œ[ˆØð 	9ð 	9ˆDÝ˜Ñ"Ô"×.Ò.¨t°RÑ8Ô8ˆBˆBØ�YŠY‰[Œ[ˆÝÐ7¸2À¹7ÑCÑDÔDÐDÝ‰Œˆˆð+ð r   c                  ó¨  — t          d¦  «                             ¦   «         } t          dt          | ¦  «        z  ¦  «         t          d¦  «         t	          | g¦  «         t          ¦   «          |                      ¦   «         }t          dt          |¦  «        dt          | ¦  «        z  t          |¦  «        z  fz  ¦  «         t	          |¦  «         d S )Nz-../../rlextra/rml2pdf/doc/rml_user_guide.prepzrawdata length %dztest one huge string...z7test %d shorter strings (average length %0.2f chars)...g      ð?)ÚopenÚreadr÷   r>   r­  r?   )ÚrawdataÚwordss     r   ÚtestStringWidthAlgorithmsr³    s½   € ÝÐBÑCÔC×HÒHÑJÔJ€GÝ	Ð
¥ G¡¤Ñ
,Ñ-Ô-Ð-Ý	Ð
#Ñ$Ô$Ð$Ý��	ÑÔÐÝ	�G„G€GØ�MŠM‰OŒO€EÝ	Ð
CÅsÈ5ÁzÄzÐSVÕWZÐ[bÑWcÔWcÑScÕdgÐhmÑdnÔdnÑSnÐFoÑ
oÑpÔpÐpÝ�ÑÔÐÐÐr   c                  óú   — t          d¦  «        } t          | ¦  «         t          | j        dd…         ¦  «         t          d¦  «        }t          |j        ¦  «         t          |¦  «         t	          ¦   «          d S )NÚ	Helveticar   é   ÚWombat)rV   rx  r÷   r\   r¥  )ÚhelvÚwombats     r   Útestrº    so   € Ý�KÑ Ô €DÝ�TÑÔÐÝ	ˆ$Œ/˜!˜B˜$Ô
Ñ Ô Ð å�hÑÔ€FÝ	ˆ&Ô
ÑÔÐÝ�VÑÔÐå�N„N€N€N€Nr   )rv  rz  rƒ  r„  c                 óð   — |                       ¦   «         D ]B\  }}t          ¦   «         |         }|                     ¦   «          |                     |¦  «         ŒCt          j                             ¦   «          d S r¶   )ÚitemsÚglobalsÚclearÚupdater   rW  Úreset_dynamic_codecs)Úinitial_dictsr£  r›   r)  s       r   Ú_resetrÂ  (  si   € ð ×"Ò"Ñ$Ô$ð ð ‰ˆˆ!Ý
‰)Œ)�AŒ,ˆØ	�Š‰	Œ	ˆ	Ø	�Š�‰ŒˆˆÝÔ×,Ò,Ñ.Ô.Ð.Ð.Ð.r   )Úregister_resetÚ__main__r¶   )NNNNr  )LÚ__version__rÙ   rx   r‘   r£   rÏ   r   Úreportlab.lib.loggerr   Úreportlab.lib.utilsr   r   r   r   r	   r
   r   r   r…   r   r   Úreportlab.lib.rl_accelr   r   r   rå   rW  Úregisterrd   r¡   rv  rz  rƒ  r„  Ú	Exceptionr   r   rT   rV   r�   r|   rž   râ   rÛ   r$  r%  r4  r5  r'  r+  rT  r-  rx  rY  rw  r‡  rÞ   r¥   rŽ  r�  ræ   Úextendr”  r˜  r›  rž  rì   r¥  r­  r³  rº  r  ÚcopyrÂ  rÃ  r   r   r   r   ú<module>rÍ     sÊ  ðð
 €ð	€ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø )Ð )Ð )Ð )Ð )Ð )Ø zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zÐ zØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø€à 	Ô × Ò Ñ Ô Ð ØÔ'€ØÔ/Ð à€
Ø€
Ø	€Ø€ð	ð 	ð 	ð 	ð 	�	ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	˜	ñ 	ô 	ð 	ðG"ð G"ð G"ðR@ð @ð @ð @ð @ñ @ô @ð @ðDð ð ð ðð ð ð0qð qð qð qð qñ qô qð qðn !Ð ð^<ð ^<ð ^<ð ^<ð ^<ñ ^<ô ^<ð ^<ð@ ˆ3ˆt‰9Œ9€
Ø
ˆ#ˆa‰&Œ&€	Øˆ3ˆq‰6Œ6€
ØˆˆA‰Œ€ð	ð 	ð 	ð  Ð ð!ð !ð !ð !ð !˜ñ !ô !ð !ðB&ð &ð &ð
ð 
ð 
ð
/ð 
/ð 
/ð 
/ð*ð *ð *ð0ð ð ð6ð ð ðð ð ð
-ð 
-ð 
-ð ˆg�nÑ%Ô%€Ø × "Ò " G G¨HÑ$5Ô$5°kÐ#BÑ CÔ CÐ Cðð ð ð ð2ð 2ð 2ð 2ð2ð 2ð 2ð 2ðð ð ðLð Lð Lð Lð
Vð Vð Vð.ð ð ð4ð ð ð	ð 	ð 	ð ˜Ø#ŸšÑ*Ô*Ø#ŸšÑ*Ô*Ø—[’[‘]”]Ø)×.Ò.Ñ0Ô0ð	ñ ô ð/ð /ð /ð /ð /Ð .Ð .Ð .Ð .Ð .Ø €ˆvÑ Ô Ð ØàˆZÒÐØ€D�F„F€FØÐÑÔÐÐÐð Ðr   