Ë
    íÍ:jlÑ  ã                   óª  — 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
 ddlmZmZmZmZmZ ddlm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  ej<                  e«      Z  ejB                  dd	«      Z" e
d
d«      Z# e
dd«      Z$ G d„ d e
dd«      «      Z% e&d„ d„ d„ d„ d„ d„ d„ d„ ¬«      Z'dTd„Z( G d„ d«      Z) G d„ d«      Z* G d„ d e)«      Z+d!„ Z, ejZ                  d"d"¬#«       G d$„ d%«      «       Z. G d&„ d'«      Z/ G d(„ d)«      Z0 e
d*d+«      Z1 G d,„ d-«      Z2d.„ Z3 G d/„ d0«      Z4ed1„ «       Z5ed2„ «       Z6 ee6e/d3«      Z7 ee6e+d4«      Z8ed5k(  �riddl9Z9dd6l:m;Z;  e;«       Z<e<j{                  d7«       e<j{                  d8d9e>d¬:«       e<j{                  d;d<d=¬>«       e<j                  «       Z@e@j‚                  r ej„                  ej†                  ¬?«       d@„ ZD e)e@jŠ                  e@jŒ                  «      5 ZGeGD �]´  ZH eIdAeHj”                  › dBeHj–                  › dCeHj˜                  › dD�«        eIdE«        e9jš                  eHjœ                  dF„ «      D ]ó  \  ZOZPej¢                  dGk(  reOj¤                  j§                  dH«      n ej¨                  eOj¤                  «      ZU eVeOj®                  e/«      r eIdIeU› dJeOj±                  «       › �«       n eIdIeU› �«        eIdKeOj²                  dLz  › �«        eDdMdNdOdPdQ«       ePD ]D  ZN eDeNj´                  eNj¶                  eNj¸                  eNj»                  «       eNj”                  «       ŒF Œõ eHj¼                  s�Œ^ eIdR«        eDdMdNdSdQ«       eHj¼                  D ]5  Z_ eDe_j´                  e_j¶                  e_j–                  e_j”                  «       Œ7 �Œ· 	 ddd«       yy# 1 sw Y   yxY w)UaC  
A module for reading dvi files output by TeX. Several limitations make
this not (currently) useful as a general-purpose dvi preprocessor, but
it is currently used by the pdf backend for processing usetex text.

Interface::

  with Dvi(filename, 72) as dvi:
      # iterate over pages:
      for page in dvi:
          w, h, d = page.width, page.height, page.descent
          for x, y, font, glyph, width in page.text:
              fontname = font.texname
              pointsize = font.size
              ...
          for x, y, height, width in page.boxes:
              ...
é    N)Ú
namedtuple)ÚcacheÚcached_propertyÚ	lru_cacheÚpartialÚwraps)ÚPath)Ú_apiÚcbookÚfont_manager)Ú	LoadFlagsÚDviStatez!pre outer inpage post_post finaleÚPageztext boxes height width descentÚBoxzx y height widthc                   ól   — e Zd ZdZed„ «       Z ed„ «      Z ed„ «      Z ed„ «      Zed„ «       Z	d„ Z
y)	ÚTextaÃ  
    A glyph in the dvi file.

    In order to render the glyph, load the glyph at index ``text.index``
    from the font at ``text.font.resolve_path()`` with size ``text.font.size``,
    warped with ``text.font.effects``, then draw it at position
    ``(text.x, text.y)``.

    ``text.glyph`` is the glyph number actually stored in the dvi file (whose
    interpretation depends on the font).  ``text.width`` is the glyph width in
    dvi units.
    c                 óL   — | j                   j                  | j                  «      S )zY
        The FreeType index of this glyph (that can be passed to FT_Load_Glyph).
        )ÚfontÚ_index_dvi_to_freetypeÚglyph©Úselfs    úg/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/matplotlib/dviread.pyÚindexz
Text.indexS   s   € ð �y‰y×/Ñ/°·
±
Ó;Ð;ó    c                 ó6   — | j                   j                  «       S ©N)r   Úresolve_pathr   s    r   ú<lambda>zText.<lambda>[   s   €  d§i¡i×&<Ñ&<Ó&>€ r   c                 ó.   — | j                   j                  S r   )r   Úsizer   s    r   r   zText.<lambda>\   s   €  d§i¡i§n¡n€ r   c                 ó.   — | j                   j                  S r   )r   Úeffectsr   s    r   r   zText.<lambda>]   s   € ¨¯©×):Ñ):€ r   c                 óÌ   — t        t        d«      «      | j                  j                     }|j                  �"t        |j                  «      | j                     S | j                  S )a  
        The glyph name, the native charmap glyph index, or the raw glyph index.

        If the font is a TrueType file (which can currently only happen for
        DVI files generated by xetex or luatex), then this number is the raw
        index of the glyph, which can be passed to FT_Load_Glyph/load_glyph.

        Otherwise, the font is a PostScript font.  For such fonts, if
        :file:`pdftex.map` specifies an encoding for this glyph's font,
        that is a mapping of glyph indices to Adobe glyph names; which
        is used by this property to convert dvi numbers to glyph names.
        Callers can then convert glyph names to glyph indices (with
        FT_Get_Name_Index/get_name_index), and load the glyph using
        FT_Load_Glyph/load_glyph.

        If :file:`pdftex.map` specifies no encoding for a PostScript font,
        this number is an index to the font's "native" charmap; glyphs should
        directly load using FT_Load_Char/load_char after selecting the native
        charmap.
        ú
pdftex.map)Ú
PsfontsMapÚfind_tex_filer   ÚtexnameÚencodingÚ
_parse_encr   )r   Úentrys     r   Úglyph_name_or_indexzText.glyph_name_or_index_   sT   € ô: œ=¨Ó6Ó7¸¿	¹	×8IÑ8IÑJˆà—>‘>Ð-ô ˜5Ÿ>™>Ó*¨4¯:©:Ñ6ð 	?Ø37·:±:ð	?r   c                 ó
  — | j                   j                  rt        d«      ‚| j                   j                  «       }|j                  j                  «       j                  d«      rKt        | j                  «      j                  «       rt        | j                  «      › d�S d| j                  d›�S t        j                  |«      }|j                  | j                  «      }t        j                  j!                  |«      }|xs |S )Nz'Indexing TTC fonts is not supported yetÚpkú?z#02x)r   ÚsubfontÚNotImplementedErrorr   ÚnameÚlowerÚendswithÚchrr   Úisprintabler   Úget_fontÚget_glyph_namer   Ú	fontToolsÚaglÚ	toUnicode)r   ÚpathÚfaceÚ
glyph_nameÚ	glyph_strs        r   Ú_as_unicode_or_namezText._as_unicode_or_name€   sÌ   € Ø�9‰9×ÒÜ%Ð&OÓPÐPØ�y‰y×%Ñ%Ó'ˆØ�9‰9�?‰?Ó×%Ñ% dÔ+ô .1°·±«_×-HÑ-HÔ-J”s˜4Ÿ:™:“Ð' qÐ)ð ,Ø˜Ÿ™ DÐ)Ð*ð,ä×$Ñ$ TÓ*ˆØ×(Ñ(¨¯©Ó4ˆ
Ü—M‘M×+Ñ+¨JÓ7ˆ	ØÒ&˜JÐ&r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   Ú	font_pathÚ	font_sizeÚfont_effectsr,   r@   © r   r   r   r   E   sV   „ ñð ñ<ó ð<ñ Ñ>Ó?€IÙÑ4Ó5€IÙÑ:Ó;€Làñ?ó ð?ó@'r   r   zx y font glyph widthc                 ó   — |S r   rI   ©ÚdviÚdeltas     r   r   r   –   s   € ˜5€ r   c                 ó(   — | j                  dd¬«      S ©Né   F©Úsigned©Ú	_read_argrK   s     r   r   r   ˜   ó   € ˜#Ÿ-™-¨°%˜-Ó8€ r   c                 ó(   — | j                  dd¬«      S )Né   FrQ   rS   rK   s     r   r   r   š   rU   r   c                 ó(   — | j                  dd¬«      S )NrW   TrQ   rS   rK   s     r   r   r   œ   s   € ˜#Ÿ-™-¨°$˜-Ó7€ r   c                 ó0   — |r| j                  |d¬«      S d S )NTrQ   rS   rK   s     r   r   r   ž   s   € Á˜CŸM™M¨%¸˜MÓ=€ ÈD€ r   c                 ó.   — | j                  |dz   d¬«      S )NrP   TrQ   rS   rK   s     r   r   r       s   € ˜SŸ]™]¨5°1©9¸T˜]ÓB€ r   c                 ó.   — | j                  |dz   d¬«      S rO   rS   rK   s     r   r   r   ¢   s   € ˜SŸ]™]¨5°1©9¸U˜]ÓC€ r   c                 ó4   — | j                  |dz   |dk(  ¬«      S )NrP   é   rQ   rS   rK   s     r   r   r   ¥   s   € ˜SŸ]™]¨5°1©9¸eÀq¹j˜]ÓJ€ r   )ÚrawÚu1Úu4Ús4ÚslenÚslen1Úulen1Úolen1c                 ó"   ‡ ‡‡‡‡— ˆˆˆˆˆ fd„}|S )a�  
    Decorator for dispatch by opcode. Sets the values in *table*
    from *min* to *max* to this method, adds a check that the Dvi state
    matches *state* if not None, reads arguments from the file according
    to *args*.

    Parameters
    ----------
    table : dict[int, callable]
        The dispatch table to be filled in.

    min, max : int
        Range of opcodes that calls the registered function; *max* defaults to
        *min*.

    state : _dvistate, optional
        State of the Dvi object in which these opcodes are allowed.

    args : list[str], default: ['raw']
        Sequence of argument specifications:

        - 'raw': opcode minus minimum
        - 'u1': read one unsigned byte
        - 'u4': read four bytes, treat as an unsigned number
        - 's4': read four bytes, treat as a signed number
        - 'slen': read (opcode - minimum) bytes, treat as signed
        - 'slen1': read (opcode - minimum + 1) bytes, treat as signed
        - 'ulen1': read (opcode - minimum + 1) bytes, treat as unsigned
        - 'olen1': read (opcode - minimum + 1) bytes, treat as unsigned
          if under four bytes, signed if four bytes
    c                 óÂ   •‡ ‡— ‰D �cg c]  }t         |   ‘Œ c}Št        ‰ «      ˆˆ ˆˆfd„«       }‰€|‰	‰<   |S t        ‰‰dz   «      D ]  }‰	|   �J ‚|‰	|<   Œ |S c c}w )Nc                 óˆ   •— ‰�| j                   ‰k7  rt        d«      ‚ ‰| g‰D �cg c]  } || |‰z
  «      ‘Œ c}¢­Ž S c c}w )Nzstate precondition failed)ÚstateÚ
ValueError)r   ÚbyteÚfÚget_argsÚmethodÚminri   s      €€€€r   Úwrapperz,_dispatch.<locals>.decorate.<locals>.wrapperÌ   sI   ø€ àÐ  T§Z¡Z°5Ò%8Ü Ð!<Ó=Ð=Ù˜$ÐG¸XÖ!F¸¡! D¨$¨s©(Õ"3Ò!FÒGÐGùÒ!Fs   ¦?
rP   )Ú_arg_mappingr   Úrange)
rn   Úxrp   Úirm   ÚargsÚmaxro   ri   Útables
   `   @€€€€€r   Údecoratez_dispatch.<locals>.decorateÉ   s‡   ú€ Ø-1Ö2¨”L “OÒ2ˆä	ˆv‹ö	Hó 
ð	Hð ˆ;Ø ˆE�#‰Jð
 ˆô ˜3  A¡Ó&ò #�Ø˜Q‘xÐ'Ð'Ð'Ø"��a’ð#ð ˆùò 3s   ˆArI   )rw   ro   rv   ri   ru   rx   s   ````` r   Ú	_dispatchry   ©   s   ü€ ÷@ð ð €Or   c                   óº  — e Zd ZdZdgdz  Z eee«      Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zded„Z eddej                   ¬«      d„ «       Z eddej                   d¬«      d„ «       Z edej                   d¬«      d„ «       Z eddej                   d¬«      d„ «       Zd„ Z edej                   d¬«      d„ «       Zd„ Z ed «      d!„ «       Z ed"ej2                  d#¬«      d$„ «       Z ed%ej                   ¬&«      d'„ «       Z ed(ej                   ¬&«      d)„ «       Z ed*ej                   ¬&«      d+„ «       Z ed,d-ej                   d.¬«      d/„ «       Z ed0d1ej                   d2¬«      d3„ «       Z ed4d5ej                   d2¬«      d6„ «       Z  ed7d8ej                   d.¬«      d9„ «       Z! ed:d;ej                   d2¬«      d<„ «       Z" ed=d>ej                   d2¬«      d?„ «       Z# ed@dAej                   ¬«      dB„ «       Z$ edCdDej                   d¬«      dE„ «       Z% edFdGdH¬I«      dJ„ «       Z& edKdLdM¬I«      dN„ «       Z'dO„ Z( edPejR                  dQ¬«      dR„ «       Z* edSej2                  ¬&«      dT„ «       Z+ edUdV¬W«      dX„ «       Z, edYdV¬W«      dZ„ «       Z- ed[dV¬W«      d\„ «       Z. ed]dV¬W«      d^„ «       Z/ ed_dV¬W«      d`„ «       Z0 edadV¬W«      db„ «       Z1 edc«      dd„ «       Z2y)fÚDviaI  
    A reader for a dvi ("device-independent") file, as produced by TeX.

    The current implementation can only iterate through pages in order,
    and does not even attempt to verify the postamble.

    This class can be used as a context manager to close the underlying
    file upon exit. Pages can be read via iteration. Here is an overly
    simple way to extract text without trying to detect whitespace::

        >>> with matplotlib.dviread.Dvi('input.dvi', 72) as dvi:
        ...     for page in dvi:
        ...         print(''.join(chr(t.glyph) for t in page.text))
    Né   c                 ó¦   — t         j                  d|«       t        |d«      | _        || _        i | _        t        j                  | _        d| _	        y)zù
        Read the data from the file named *filename* and convert
        TeX's internal units to units of *dpi* per inch.
        *dpi* only sets the units and does not limit the resolution.
        Use None to return TeX's internal units.
        zDvi: %sÚrbN)
Ú_logÚdebugÚopenÚfileÚdpiÚfontsÚ	_dvistateÚpreri   Ú_missing_font)r   Úfilenamerƒ   s      r   Ú__init__zDvi.__init__î   sA   € ô 	�
‰
�9˜hÔ'Ü˜ 4Ó(ˆŒ	ØˆŒØˆŒ
Ü—]‘]ˆŒ
Ø!ˆÕr   c                 ó   — | S )z+Context manager enter method, does nothing.rI   r   s    r   Ú	__enter__zDvi.__enter__ü   s   € àˆr   c                 ó$   — | j                  «        y)zX
        Context manager exit method, closes the underlying file if it is open.
        N)Úclose)r   ÚetypeÚevalueÚetraces       r   Ú__exit__zDvi.__exit__   s   € ð 	�
‰
�r   c              #   ót   K  — | j                  «       r$| j                  «       –— | j                  «       rŒ#yy­w)a\  
        Iterate through the pages of the file.

        Yields
        ------
        Page
            Details of all the text and box objects on the page.
            The Page tuple contains lists of Text and Box tuples and
            the page dimensions, and the Text and Box tuples contain
            coordinates transformed into a standard Cartesian
            coordinate system at the dpi value given when initializing.
            The coordinates are floating point numbers, but otherwise
            precision is not lost and coordinate values are not clipped to
            integers.
        N)Ú_readÚ_outputr   s    r   Ú__iter__zDvi.__iter__  s(   è ø€ ð  �j‰jŒlØ—,‘,“.Ò ð �j‰j�lùs   ‚38¶8c                 óf   — | j                   j                  s| j                   j                  «        yy)z(Close the underlying file if it is open.N)r‚   Úclosedr�   r   s    r   r�   z	Dvi.close  s"   € à�y‰y×ÒØ�I‰I�O‰OÕð  r   c                 ó>  — t         j                  x}}t         j                   x}}t         j                   }| j                  | j                  z   D ]}  }t	        |t
        «      r
|\  }}}	}
d}n|\  }}}}}
|j                  |«      \  }	}t        ||«      }t        |||	z
  «      }t        |||
z   «      }t        |||z   «      }t        ||«      }Œ | j                  �| j                  }d| _	        | j                  s| j                  st        g g ddd¬«      S | j                  €-t        | j                  | j                  ||z
  ||z
  ||z
  ¬«      S | j                  dz  }||z
  |z  }| j                  D �����
cg c])  \  }}}}}
t        ||z
  |z  ||z
  |z  |z
  |||
|z  «      ‘Œ+ }}}}}}
| j                  D ���	�
cg c]*  \  }}}	}
t        ||z
  |z  ||z
  |z  |z
  |	|z  |
|z  «      ‘Œ, }}	}}}
t        ||||z
  |z  ||z
  |z  |¬«      S c c}
}}}}w c c}
}	}}w )zk
        Output the text and boxes belonging to the most recent page.
        page = dvi._output()
        r   N©ÚtextÚboxesÚwidthÚheightÚdescentgáz®GRA)ÚnpÚinfrš   r›   Ú
isinstancer   Ú_height_depth_ofro   rv   Ú_baseline_vr   rƒ   r   )r   ÚminxÚminyÚmaxxÚmaxyÚ	maxy_pureÚeltrs   ÚyÚhÚwÚer   ÚgÚdrž   rl   rš   r›   s                      r   r”   zDvi._output  sN  € ô
 —f‘fÐˆˆtÜ—v‘v�gÐˆˆtÜ—V‘V�Gˆ	Ø—9‘9˜tŸz™zÑ)ò 	*ˆCÜ˜#œsÔ#Ø ‘
��1�a˜Ø‘à#&Ñ ��1�d˜A˜qØ×,Ñ,¨QÓ/‘��1Ü�t˜Q“<ˆDÜ�t˜Q ™UÓ#ˆDÜ�t˜Q ™UÓ#ˆDÜ�t˜Q ™UÓ#ˆDÜ˜I qÓ)‰Ið	*ð ×ÑÐ'Ø×(Ñ(ˆIØ#ˆDÔà�yŠy §¢Ü˜R r°¸1ÀaÔHÐHà�8‰8Ðä˜TŸY™Y¨d¯j©jØ" 4™i°	¸$±Ø $ Y¡ô0ð 0ð
 �H‰H˜Ñ&ˆØ˜)Ñ# qÑ(ˆð (,§y¡y÷2ò 2Ù#�Q˜˜1˜a ô �a˜‘f˜a‘Z $ q¡&¨!¡¨gÑ!5°q¸!¸Q¸q¹SÕAð 2ˆô 2ð &*§Z¡Z÷1ñ 1Ù!�a˜˜A˜qô �a˜‘f˜a‘Z $ q¡&¨!¡¨gÑ!5°q¸±s¸A¸a¹CÕ@ð 1ˆó 1ô ˜ U°4¸±9¸a±-Ø% d™N¨AÑ-°wô@ð 	@ùö2ùõ1s   Å9.HÆ>/H
c                 óh  — dg}d| _         	 | j                  j                  d«      d   } | j                  |   | |«       | j                  r| j                  j                  «       ‚| j                  |   j                  }|dk(  r|j                  |d   «       n(|dk(  r|j                  «        n|dk(  r|dxx   dz  cc<   | j                   €2t        t        | d	g «      «      d
k(  r|d   dk\  r| j                  | _         |dk(  ry| j                  t        j                  u r| j                  «        y�Œ()út
        Read one page from the file. Return True if successful,
        False if there were no more pages.
        r   NTrP   Ú_pushéÿÿÿÿÚ_popÚ_downÚstackr]   rW   éŒ   F)r£   r‚   ÚreadÚ_dtabler‡   Úto_exceptionrA   ÚappendÚpopÚlenÚgetattrÚvri   r…   Ú	post_postr�   )r   Ú
down_stackrk   r2   s       r   r“   z	Dvi._readK  s  € ð. �Sˆ
ØˆÔØØ—9‘9—>‘> !Ó$ QÑ'ˆDØˆD�L‰L˜Ñ˜t TÔ*Ø×!Ò!Ø×(Ñ(×5Ñ5Ó7Ð7Ø—<‘< Ñ%×.Ñ.ˆDØ�wŠØ×!Ñ! *¨R¡.Õ1Ø˜’Ø—‘Õ Ø˜’Ø˜2“ !Ñ#“Ø× Ñ Ð(ÜœG D¨'°2Ó6Ó7¸1Ò<Ø" 2™¨!Ò+Ø#'§6¡6�Ô Ø�sŠ{ØØ�z‰zœY×0Ñ0Ñ0Ø—
‘
”Øñ) r   c                 ód   — t         j                  | j                  j                  |«      d|¬«      S )z
        Read and return a big-endian integer *nbytes* long.
        Signedness is determined by the *signed* keyword.
        ÚbigrQ   )ÚintÚ
from_bytesr‚   r¸   )r   ÚnbytesrR   s      r   rT   zDvi._read_argz  s&   € ô
 �~‰~˜dŸi™iŸn™n¨VÓ4°eÀFˆ~ÓKÐKr   r   é   )ro   rv   ri   c                 ó   — | j                  |«       t        | j                  | j                     t        j
                  «      ry | xj                  | j                  | j                     j                  |«      z  c_        y r   ©Ú_put_char_realr¡   r„   rl   r   Ú_ExceptionInfor«   Ú	_width_of©r   Úchars     r   Ú_set_char_immediatezDvi._set_char_immediate�  óV   € à×Ñ˜DÔ!Ü�d—j‘j §¡Ñ(¬%×*>Ñ*>Ô?ØØ�Š�$—*‘*˜TŸV™VÑ$×.Ñ.¨tÓ4Ñ4Žr   é€   éƒ   )re   )ro   rv   ri   ru   c                 ó   — | j                  |«       t        | j                  | j                     t        j
                  «      ry | xj                  | j                  | j                     j                  |«      z  c_        y r   rÉ   rÍ   s     r   Ú	_set_charzDvi._set_charˆ  rÐ   r   é„   )ra   ra   )ri   ru   c                 óR   — | j                  ||«       | xj                  |z  c_        y r   )Ú_put_rule_realr«   ©r   ÚaÚbs      r   Ú	_set_rulezDvi._set_rule�  s   € à×Ñ˜A˜qÔ!Ø�Š�!‰Žr   é…   éˆ   c                 ó&   — | j                  |«       y r   )rÊ   rÍ   s     r   Ú	_put_charzDvi._put_char”  s   € à×Ñ˜DÕ!r   c                 ó  — | j                   | j                     }t        |t        j                  «      r|| _        y |j                  €L| j                  j                  t        | j                  | j                  |||j                  |«      «      «       y |j                  }|j                  |   j                  D ]®  \  }}}}}t        t        ||j                  «      |j                   |j"                  |j                  ¬«      }	| j                  j                  t        | j                  t        ||«      z   | j                  t        ||«      z   |	||	j                  |«      «      «       Œ° | j$                  j'                  |j                  |   j$                  D ���
�cg c]W  \  }}}
}t)        | j                  t        ||«      z   | j                  t        ||«      z   t        |
|«      t        ||«      «      ‘ŒY c}}
}}«       y c c}}
}}w )N©ÚscaleÚmetricsr(   Úvf)r„   rl   r¡   r   rË   r‡   Ú_vfrš   r»   r   r«   r¿   rÌ   Ú_scaleÚDviFontÚ_mul1220Ú_metricsr(   r›   Úextendr   )r   rÎ   r   râ   rs   rª   rl   r®   r¬   ÚnewfrÙ   rÚ   s               r   rÊ   zDvi._put_char_real˜  s«  € Ø�z‰z˜$Ÿ&™&Ñ!ˆÜ�dœE×0Ñ0Ô1Ø!%ˆDÕØ�X‰XÐØ�I‰I×ÑœT $§&¡&¨$¯&©&°$¸Ø"&§.¡.°Ó"6ó8õ 9ð —K‘KˆEØ!%§¡¨$¡×!4Ñ!4ò C‘��1�a˜˜AÜ¤X¨e°Q·X±XÓ%>Ø'(§z¡z¸1¿9¹9ÈÏÉôP�à—	‘	× Ñ ¤ d§f¡f¬x¸¸5Ó/AÑ&AØ&*§f¡f¬x¸¸5Ó/AÑ&AØ&*¨A¨t¯~©~¸aÓ/@ó"Bõ CðCð �J‰J×Ñð 26·±¸$±×1EÑ1E÷Gñ Gñ $. 1 a¨¨Aô  # 4§6¡6¬H°Q¸Ó,>Ñ#>Ø#'§6¡6¬H°Q¸Ó,>Ñ#>Ü#+¨A¨uÓ#5´xÀÀ5Ó7Iõ Kõ Gõ Hùõ Gs   ÆAHé‰   c                 ó(   — | j                  ||«       y r   )r×   rØ   s      r   Ú	_put_rulezDvi._put_rule¬  s   € à×Ñ˜A˜qÕ!r   c                 ó’   — |dkD  rB|dkD  r<| j                   j                  t        | j                  | j                  ||«      «       y y y ©Nr   )r›   r»   r   r«   r¿   rØ   s      r   r×   zDvi._put_rule_real°  s;   € ØˆqŠ5�Q˜’UØ�J‰J×Ñœc $§&¡&¨$¯&©&°!°QÓ7Õ8ð ˆ5r   éŠ   c                  ó   — y r   rI   ©r   Ú_s     r   Ú_nopzDvi._nop´  s   € àr   é‹   )ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   ra   c                 ó¬   — t         j                  | _        dx| _        x| _        x| _        x| _        x| _        | _        g | _	        g | _
        g | _        y rð   )r…   Úinpageri   r«   r¿   r¬   rs   rª   Úzr¶   rš   r›   )r   Úc0Úc1Úc2Úc3Úc4Úc5Úc6Úc7Úc8Úc9Úps               r   Ú_bopzDvi._bop¸  sN   € ä×%Ñ%ˆŒ
Ø>?Ð?ˆŒÐ?�”Ð?˜$œ&Ð? 4¤6Ð?¨D¬F°T´VØˆŒ
ØˆŒ	Øˆ�
r   r·   )ri   c                 óJ   — t         j                  | _        | `| `| `| `| `| `| `	y r   )
r…   Úouterri   r«   r¿   r¬   rs   rª   rù   r¶   ró   s     r   Ú_eopzDvi._eopÀ  s*   € ä—_‘_ˆŒ
ØˆF�D�F˜D˜F D F¨D¨F°D°F¸D¹Jr   é�   c                 ó¾   — | j                   j                  | j                  | j                  | j                  | j
                  | j                  | j                  f«       y r   )r¶   r»   r«   r¿   r¬   rs   rª   rù   ró   s     r   r²   z	Dvi._pushÅ  s9   € à�
‰
×Ñ˜4Ÿ6™6 4§6¡6¨4¯6©6°4·6±6¸4¿6¹6À4Ç6Á6ÐJÕKr   éŽ   c                 ó‚   — | j                   j                  «       \  | _        | _        | _        | _        | _        | _        y r   )r¶   r¼   r«   r¿   r¬   rs   rª   rù   ró   s     r   r´   zDvi._popÉ  s+   € à9=¿¹¿¹Ó9IÑ6ˆŒ�”˜œ ¤¨¬°µr   é�   é’   )rc   c                 ó.   — | xj                   |z  c_         y r   )r«   )r   rÚ   s     r   Ú_rightz
Dvi._rightÍ  ó   € à�Š�!‰Žr   é“   é—   )rb   c                 óT   — |�|| _         | xj                  | j                   z  c_        y r   )r¬   r«   )r   Únew_ws     r   Ú_right_wzDvi._right_wÑ  ó!   € àÐØˆDŒFØ�Š�$—&‘&ÑŽr   é˜   éœ   c                 óT   — |�|| _         | xj                  | j                   z  c_        y r   )rs   r«   )r   Únew_xs     r   Ú_right_xzDvi._right_x×  r  r   é�   é    c                 ó.   — | xj                   |z  c_         y r   )r¿   )r   rÙ   s     r   rµ   z	Dvi._downÝ  r  r   é¡   é¥   c                 óT   — |�|| _         | xj                  | j                   z  c_        y r   )rª   r¿   )r   Únew_ys     r   Ú_down_yzDvi._down_yá  r  r   é¦   éª   c                 óT   — |�|| _         | xj                  | j                   z  c_        y r   )rù   r¿   )r   Únew_zs     r   Ú_down_zzDvi._down_zç  r  r   é«   éê   c                 ó   — || _         y r   ©rl   )r   Úks     r   Ú_fnt_num_immediatezDvi._fnt_num_immediateí  s	   € àˆ�r   éë   éî   c                 ó   — || _         y r   r-  )r   Únew_fs     r   Ú_fnt_numzDvi._fnt_numñ  s	   € àˆ�r   éï   éò   )rd   )ro   rv   ru   c                 óâ   — | j                   j                  |«      }t        j                  ddj	                  |D �cg c]   }d|cxk  rdk  rn nt        |«      nd|z  ‘Œ" c}«      «       y c c}w )Nz!Dvi._xxx: encountered special: %sÚ é    rÇ   z<%02x>)r‚   r¸   r   r€   Újoinr5   )r   ÚdatalenÚspecialÚchs       r   Ú_xxxzDvi._xxxõ  sa   € à—)‘)—.‘. Ó)ˆÜ�
‰
Ø/Ø�G‰GØ&ö(Øð !# b¤¨3¥”S˜”W°H¸r±MÑAò (ó )õ	*ùò(s   »%A,éó   éö   )re   r`   r`   r`   r_   r_   c                 ó0   — | j                  ||||||«       y r   )Ú_fnt_def_real)r   r.  ÚcÚsr¯   rÙ   Úls          r   Ú_fnt_defzDvi._fnt_defý  s   € à×Ñ˜1˜a  A q¨!Õ,r   c                 óÂ  — | j                   j                  ||z   «      }|| d  }|j                  d«      r)|dk(  r$t        j	                  ||«      | j
                  |<   y |j                  d«      }	 t        |«      }	|dk7  r,|	j                  dk7  r||	j                  k7  rt        d|› �«      ‚	 t!        |«      }t        ||	||¬	«      | j
                  |<   y # t        $ rn}
|j                  d«      r'|j                  d«      r|dk(  r|
j                  d«       t        j                  j                  |
«      | j
                  |<   Y d }
~
y d }
~
ww xY w# t        $ r d }Y Œ¤w xY w)
Nó   [iFauLÚasciiú[ú;r   zeThis dvi file was likely generated with a too-old version of luaotfload; luaotfload 3.23 is required.ztfm checksum mismatch: rá   )r‚   r¸   Ú
startswithrç   Úfrom_luatexr„   ÚdecodeÚ_tfmfileÚFileNotFoundErrorr4   Úadd_noter   rË   Úfrom_exceptionÚchecksumrj   Ú_vffile)r   r.  rC  rD  r¯   rÙ   rE  ÚnÚfontnameÚtfmÚexcrä   s               r   rB  zDvi._fnt_def_real  sN  € Ø�I‰I�N‰N˜1˜q™5Ó!ˆØ�a�R�S�6ˆØ×Ñ˜tÔ$¨¨jªô $×/Ñ/°°1Ó5ˆD�J‰J�q‰MØØ—?‘? 7Ó+ˆð	Ü˜8Ó$ˆCð �Š6�c—l‘l aÒ'¨A°·±Ò,=ÜÐ6°q°cÐ:Ó;Ð;ð	Ü˜Ó"ˆBô   a°¸aÀBÔGˆ�
‰
�1Šøô% !ò 	Ø×"Ñ" 3Ô'¨H×,=Ñ,=¸cÔ,BÀqÈAÂvØ—‘ðJôKô "×0Ñ0×?Ñ?ÀÓDˆD�J‰J�q‰MÜûð	ûô  !ò 	ØŠBð	ús+   Á1C Â.E Ã	EÃA$EÅEÅEÅEé÷   )r_   r`   r`   r`   r_   c                 óÒ   — | j                   j                  |«       |dvrt        d|› �«      ‚|dk7  s|dk7  rt        d«      ‚|dk7  rt        d«      ‚t        j                  | _        y )N)é   é   zUnknown dvi format iÀ’ƒi  ;zNonstandard units in dvi fileéè  z%Nonstandard magnification in dvi file)r‚   r¸   rj   r…   r  ri   )r   rt   ÚnumÚdenÚmagr.  s         r   Ú_prezDvi._pre!  sh   € à�	‰	�‰�qÔØ�F‰?ÜÐ2°1°#Ð6Ó7Ð7Ø�(Š?˜c \Ò1ÜÐ<Ó=Ð=ð �$Š;ÜÐDÓEÐEô —_‘_ˆ�
r   éø   c                 ó.   — t         j                  | _        y r   )r…   rÀ   ri   ró   s     r   Ú_postz	Dvi._post3  s   € ä×(Ñ(ˆ�
r   éù   rI   ©ru   c                 ó   — t         ‚r   ©r1   r   s    r   Ú
_post_postzDvi._post_post9  ó   € ä!Ð!r   éú   c                 ó   — t         ‚r   rh  r   s    r   Ú_begin_reflectzDvi._begin_reflect=  rj  r   éû   c                 ó   — t         ‚r   rh  r   s    r   Ú_end_reflectzDvi._end_reflectA  rj  r   éü   c                 óh  — | j                  dd¬«      }| j                  dd¬«      }| j                  dd¬«      }| j                  dd¬«      }| j                  j                  |«      }| j                  dd¬«      }i }|dz  r-t        d«      D �cg c]  }| j                  dd¬«      ‘Œ c}|d<   |dz  r| j                  dd	¬«      d
z  |d<   |dz  r| j                  dd	¬«      d
z  |d<   |dz  r| j                  dd	¬«      d
z  |d<   t        j                  ||||«      | j                  |<   y c c}w )NrW   FrQ   r[  rP   i   Úrgbai   Té   rê   i    Úslanti @  Úembolden)rT   r‚   r¸   rr   rç   Ú
from_xetexr„   )	r   r.  rD  ÚflagsrE  rU  rt   r#   rô   s	            r   Ú_define_native_fontzDvi._define_native_fontE  s,  € à�N‰N˜1 UˆNÓ+ˆØ�N‰N˜1 UˆNÓ+ˆØ—‘˜q¨�Ó/ˆØ�N‰N˜1 UˆNÓ+ˆØ�I‰I�N‰N˜1ÓˆØ�N‰N˜1 UˆNÓ+ˆØˆØ�6Š>ÜHMÈaËÖQÀ1˜tŸ~™~¨a¸˜~Õ>ÒQˆG�F‰OØ�6Š>Ø $§¡¨q¸ Ó >ÀÑ FˆG�HÑØ�6Š>Ø#Ÿ~™~¨a¸˜~Ó=ÀÑEˆG�GÑØ�6Š>Ø"&§.¡.°¸4 .Ó"@À5Ñ"HˆG�JÑÜ×*Ñ*¨1¨a°°GÓ<ˆ�
‰
�1Šùò Rs   ÂD/éý   c                 óV  — | j                  dd¬«      }| j                  dd¬«      }t        d|z  «      D �cg c]  }| j                  dd¬«      ‘Œ }}t        |«      D �cg c]  }| j                  dd¬«      ‘Œ }}| j                  | j                     }t        |«      D ]h  }| j                  j                  t        | j                  |d|z     z   | j                  |d|z  dz      z   |||   |j                  ||   «      «      «       Œj | xj                  |z  c_        y c c}w c c}w )NrW   FrQ   r[  TrP   )
rT   rr   r„   rl   rš   r»   r   r«   r¿   rÌ   )r   r¬   r.  rô   Úxyr®   r   rt   s           r   Ú_set_glyphszDvi._set_glyphsX  s  € à�N‰N˜1 UˆNÓ+ˆØ�N‰N˜1 UˆNÓ+ˆÜ6;¸AÀ¹E³lÖC°ˆd�n‰n˜Q tˆnÕ,ÐCˆÐCÜ6;¸A³hÖ?°ˆT�^‰^˜A eˆ^Õ,Ð?ˆÐ?Ø�z‰z˜$Ÿ&™&Ñ!ˆÜ�q“ò 	EˆAØ�I‰I×ÑœT $§&¡&¨2¨a°!©e©9Ñ"4°d·f±f¸rÀ!ÀaÁ%È!Á)¹}Ñ6LØ"&¨¨!©¨d¯n©n¸Q¸q¹TÓ.BóDõ Eð	Eð 	�Š�!‰Žùò DùÚ?s   ·D!Á D&éþ   c                 ó¸  — | j                  dd¬«      }| j                  j                  d|z  «      }| j                  dd¬«      }| j                  dd¬«      }t        d|z  «      D �cg c]  }| j                  dd¬«      ‘Œ }}t        |«      D �cg c]  }| j                  dd¬«      ‘Œ }}| j                  | j
                     }t        |«      D ]h  }	| j                  j                  t        | j                  |d|	z     z   | j                  |d|	z  dz      z   |||	   |j                  ||	   «      «      «       Œj | xj                  |z  c_	        y c c}w c c}w )Nr[  FrQ   rW   TrP   )rT   r‚   r¸   rr   r„   rl   rš   r»   r   r«   r¿   rÌ   )
r   rE  Útr¬   r.  rô   r|  r®   r   rt   s
             r   Ú_set_text_and_glyphszDvi._set_text_and_glyphsd  s6  € à�N‰N˜1 UˆNÓ+ˆØ�I‰I�N‰N˜1˜q™5Ó!ˆØ�N‰N˜1 UˆNÓ+ˆØ�N‰N˜1 UˆNÓ+ˆÜ6;¸AÀ¹E³lÖC°ˆd�n‰n˜Q tˆnÕ,ÐCˆÐCÜ6;¸A³hÖ?°ˆT�^‰^˜A eˆ^Õ,Ð?ˆÐ?Ø�z‰z˜$Ÿ&™&Ñ!ˆÜ�q“ò 	EˆAØ�I‰I×ÑœT $§&¡&¨2¨a°!©e©9Ñ"4°d·f±f¸rÀ!ÀaÁ%È!Á)¹}Ñ6LØ"&¨¨!©¨d¯n©n¸Q¸q¹TÓ.BóDõ Eð	Eð 	�Š�!‰Žùò DùÚ?s   Á(EÂEéÿ   c                 ó   — t        d«      ‚)Nzunknown command: byte 255)rj   )r   r^   s     r   Ú
_malformedzDvi._malformedr  s   € äÐ4Ó5Ð5r   )F)3rA   rB   rC   rD   r¹   r   ry   r‰   r‹   r‘   r•   r�   r”   r“   rT   r…   rø   rÏ   rÔ   rÛ   rß   rÊ   rî   r×   rõ   r  r  r  r²   r´   r  r  r  rµ   r$  r)  r/  r4  r>  rF  rB  r†   ra  rd  ri  rm  rp  ry  r}  r�  r„  rI   r   r   r{   r{   Û   s  „ ñð ˆf�s‰l€GÙ˜	 7Ó+€Iò"òòò!ò&ò
+@òZ-ó^Lñ �1˜# Y×%5Ñ%5Ô6ñ5ó 7ð5ñ �3˜C y×'7Ñ'7¸jÔIñ5ó Jð5ñ ˆs˜)×*Ñ*°Ô>ñó ?ðñ �3˜C y×'7Ñ'7¸jÔIñ"ó Jð"òHñ( ˆs˜)×*Ñ*°Ô>ñ"ó ?ð"ò9ñ ˆsƒ^ñó ðñ ˆs˜)Ÿ/™/°
Ô;ñó <ðñ ˆs˜)×*Ñ*Ô+ñGó ,ðGñ ˆs˜)×*Ñ*Ô+ñLó ,ðLñ ˆs˜)×*Ñ*Ô+ñJó ,ðJñ �3˜C y×'7Ñ'7¸jÔIñó Jðñ �3˜C y×'7Ñ'7¸iÔHñó Iðñ
 �3˜C y×'7Ñ'7¸iÔHñó Iðñ
 �3˜C y×'7Ñ'7¸jÔIñó Jðñ �3˜C y×'7Ñ'7¸iÔHñó Iðñ
 �3˜C y×'7Ñ'7¸iÔHñó Iðñ
 �3˜C y×'7Ñ'7Ô8ñó 9ðñ �3˜C y×'7Ñ'7¸jÔIñó Jðñ �3˜C jÔ1ñ*ó 2ð*ñ �3˜CÐ&MÔNñ-ó Oð-òHñ@ ˆs˜)Ÿ-™-Ð.LÔMñ%ó Nð%ñ" ˆs˜)Ÿ/™/Ô*ñ)ó +ð)ñ
 ˆs˜Ôñ"ó ð"ñ ˆs˜Ôñ"ó ð"ñ ˆs˜Ôñ"ó ð"ñ ˆs˜Ôñ=ó ð=ñ$ ˆs˜Ôñ	ó ð	ñ ˆs˜Ôñó ðñ ˆsƒ^ñ6ó ñ6r   r{   c                   óö   — e Zd ZdZd„ Zed„ «       Zed„ «       Z ed„ «      Z	  e
j                  d«       ed„ «      «      Zed„ «       Zed	„ «       Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Zd„ Zy)rç   a¡  
    Encapsulation of a font that a DVI file can refer to.

    This class holds a font's texname and size, supports comparison,
    and knows the widths of glyphs in the same units as the AFM file.
    There are also internal attributes (for use by dviread.py) that
    are *not* used for comparison.

    The size is in Adobe points (converted from TeX points).

    Parameters
    ----------
    scale : float
        Factor by which the font is scaled from its natural size.
    metrics : Tfm | TtfMetrics
        TeX font metrics for this font
    texname : bytes
       Name of the font as used internally in the DVI file, as an ASCII
       bytestring.  This is usually very different from any external font
       names; `PsfontsMap` can be used to find the external name of the font.
    vf : Vf
       A TeX "virtual font" file, or None if this font is not virtual.

    Attributes
    ----------
    texname : bytes
    fname : str
       Compatibility shim so that DviFont can be used with
       ``_backend_pdf_ps.CharacterTracker``; not a real filename.
    size : float
       Size of the font in Adobe points, converted from the slightly
       smaller TeX points.
    c                 óŽ   — t        j                  t        |¬«       || _        || _        || _        || _        d | _        d | _        y )N)r(   )	r
   Úcheck_isinstanceÚbytesræ   ré   r(   rå   Ú_pathÚ	_encoding)r   râ   rã   r(   rä   s        r   r‰   zDviFont.__init__š  s<   € Ü×Ñœe¨WÕ5ØˆŒØˆŒØˆŒØˆŒØˆŒ
Øˆ�r   c                 óV  — |dd  j                  d«      \  }}}|j                  d«      r	|r|d d dv st        d|› �«      ‚t        j                  dk(  r|j                  d«      nt        j                  |«      }d}i }|dd  rq|dd  j                  d	«      j                  d
«      D ]K  }	|	j                  dd«      \  }
}|
dk(  r|}Œ |
dv rt        |«      dz  ||
<   Œ6t        j                  d|	«       ŒM t        |«      } | |||d ¬«      }t        |«      |_        ||_        ||_        |S )NrP   ó   ]rH  )r   ó   :zInvalid modern font name: ÚntÚutf8r   rI  rK  ú=r   )rv  ru  rê   rt  z#Ignoring invalid key-value pair: %r©rä   )Ú
rpartitionrL  rj   Úosr2   rN  ÚfsdecodeÚsplitrÄ   r   ÚwarningÚ
TtfMetricsr	   r‰  r0   r#   )Úclsrâ   r(   Úpath_bÚsepÚrestr<   r0   r#   ÚkvÚkeyÚvalrã   r   s                 r   rM  zDviFont.from_luatex£  s4  € à# A B˜K×2Ñ2°4Ó8Ñˆ��TØ×"Ñ" 4Ô(©S°T¸"¸1°XÀÑ5LÜÐ9¸'¸ÐCÓDÐDä(*¯©°4ªˆv�}‰}˜VÔ$¼R¿[¹[ÈÓ=PˆØˆØˆØ��‰8Ø˜1˜2�h—o‘o gÓ.×4Ñ4°SÓ9ò L�ØŸ8™8 C¨Ó+‘��SØ˜'’>Ø!‘GØÐ;Ñ;Ü#& s£8¨eÑ#3�G˜C’Lä—L‘LÐ!FÈÕKðLô ˜TÓ"ˆÙ�5˜' 7¨tÔ4ˆÜ˜$“ZˆŒ
ØˆŒØˆŒØˆr   c                 óî   — t         j                  dk(  r|j                  d«      nt        j                  |«      }t	        |«      } | ||d|z   dz   d ¬«      }t        |«      |_        ||_        ||_        |S )NrŽ  r�  rH  rŒ  r‘  )	r“  r2   rN  r”  r—  r	   r‰  r0   r#   )r˜  râ   r(   r0   r#   r<   rã   r   s           r   rw  zDviFont.from_xetex¼  sh   € ô *,¯©°Dªˆw�~‰~˜fÔ%¼b¿k¹kÈ'Ó>RˆÜ˜TÓ"ˆÙ�5˜' 4¨'¡>°DÑ#8¸TÔBˆÜ˜$“ZˆŒ
ØˆŒØˆŒØˆr   c                 ó    — | j                   dz  S )Ng]Ÿeáï>)ræ   r   s    r   r   zDviFont.<lambda>Ç  s   €  §¡Ð0FÑ!G€ r   ú3.11c                 óÖ   — t        t        | j                  j                  d¬«      dz   «      D �cg c].  }d| j                  j                  j	                  |d«      z  dz	  ‘Œ0 c}S c c}w )Nr³   )ÚdefaultrP   r]  r   é   )rr   rv   Ú_tfmrœ   ÚgetrÍ   s     r   r   zDviFont.<lambda>É  sZ   € äœ#˜dŸi™iŸo™o°rÔ:¸QÑ>Ó?ö<Aàð 
�—	‘	—‘×#Ñ# D¨!Ó,Ñ	,°Ó3ò<A€ ùò <As   °3A&c                 ó8   — | j                   j                  d«      S )zA fake filenamezlatin-1)r(   rN  r   s    r   ÚfnamezDviFont.fnameÍ  s   € ð �|‰|×"Ñ" 9Ó-Ð-r   c                  ó   — yrð   rI   r   s    r   Ú
face_indexzDviFont.face_indexÒ  ó   € àr   c                 ó.   — |D �ci c]  }|| “Œ c}S c c}w )z–Get the mapping from characters to the font that includes them.

        Each value maps to self; there is no fallback mechanism for DviFont.
        rI   )r   ÚstringrÎ   s      r   Ú_get_fontmapzDviFont._get_fontmapÖ  s   € ð
 (.Ö.˜t��d‘
Ò.Ð.ùÒ.s   …
c                 óš   — t        | «      t        |«      u xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )Útyper(   r!   ©r   Úothers     r   Ú__eq__zDviFont.__eq__Ý  sD   € Ü�T“
œd 5›kÐ)ò NØ—L‘L E§M¡MÑ1òNØ6:·i±iÀ5Ç:Á:Ñ6Mð	Or   c                 ó&   — | j                  |«       S r   )r³  r±  s     r   Ú__ne__zDviFont.__ne__á  s   € Ø—;‘;˜uÓ%Ð%Ð%r   c                 óN   — dt        | «      j                  › d| j                  › d�S )Nú<z: ú>)r°  rA   r(   r   s    r   Ú__repr__zDviFont.__repr__ä  s&   € Ø”4˜“:×&Ñ&Ð' r¨$¯,©,¨°qÐ9Ð9r   c                 óÀ   — | j                   j                  |«      }|€"t        j                  d|| j                  «       yt        |j                  | j                  «      S )zWidth of char in dvi units.z No width for char %d in font %s.r   )ré   Úget_metricsr   r€   r(   rè   Ú	tex_widthræ   )r   rÎ   rã   s      r   rÌ   zDviFont._width_ofç  sJ   € à—-‘-×+Ñ+¨DÓ1ˆØˆ?Ü�J‰JÐ9¸4ÀÇÁÔNØÜ˜×)Ñ)¨4¯;©;Ó7Ð7r   c                 ó^  — | j                   j                  |«      }|€%t        j                  d|| j                  «       ddgS t        |j                  | j                  «      t        |j                  | j                  «      g}t        j                  d| j                  «      r
|dk(  rd|d<   |S )z&Height and depth of char in dvi units.z!No metrics for char %d in font %sr   s	   ^cmsy\d+$r³   )ré   r»  r   r€   r(   rè   Ú
tex_heightræ   Ú	tex_depthÚreÚmatch)r   rÎ   rã   Úhds       r   r¢   zDviFont._height_depth_ofï  s�   € à—-‘-×+Ñ+¨DÓ1ˆØˆ?Ü�J‰JÐ:¸DÀ$Ç,Á,ÔOØ�q�6ˆMä�W×'Ñ'¨¯©Ó5Ü�W×&Ñ&¨¯©Ó4ð
ˆô �8‰8�M 4§<¡<Ô0°T¸Q²YØˆBˆr‰FØˆ	r   c                 ó–  — | j                   €£t        t        d«      «      }	 || j                     }|j                  €Mt        dj                  |j                  j                  d«      |j                  j                  d«      «      «      ‚t        |j                  «      | _         | j                   S | j                   S # t        $ rƒ}	 t        | j                  j                  d«      › d�«       t        t        | j                  j                  d«      › d�«      «      | _         n# t        $ r |d ‚w xY wY d }~| j                   S d }~ww xY w)Nr%   zINo usable font file found for {} ({}); the font may lack a Type-1 versionrI  z.mfz.600pk)r‰  r&   r'   r(   rˆ   rj   ÚformatÚpsnamerN  r	   ÚLookupErrorrP  )r   ÚfontmapÚpsfontrX  s       r   r   zDviFont.resolve_path  s6  € Ø�:‰:ÐÜ ¤¨|Ó!<Ó=ˆGð3Ø  §¡Ñ.�ð —?‘?Ð*Ü$ð &Jç&,¡f¨V¯]©]×-AÑ-AÀ'Ó-JØ-3¯^©^×-BÑ-BÀ7Ó-Kó'MóNð Nô " &§/¡/Ó2�”
Ø�z‰zÐˆt�z‰zÐøô ò BðBÜ! T§\¡\×%8Ñ%8¸Ó%AÐ$BÀ#Ð"FÔGô "&¤mØŸ<™<×.Ñ.¨wÓ7Ð8¸Ð?ó'Aó "B�D•Jøô )ò (Ø 4Ð'ð(úó ð �z‰zÐûðBús)   ¢B< Â<	EÃ'D#Ã-6EÄ#D0Ä0EÅEc                  ó   — yrð   rI   r   s    r   r0   zDviFont.subfont  r«  r   c                 óš   — | j                  «       j                  d«      ri S t        t        d«      «      | j                     j
                  S )Nz*.600pkr%   )r   rÁ  r&   r'   r(   r#   r   s    r   r#   zDviFont.effects  s=   € à×ÑÓ×$Ñ$ YÔ/ØˆIÜœ-¨Ó5Ó6°t·|±|ÑD×LÑLÐLr   c                 ó¶  — | j                   j                  d«      r|S | j                  €�t        j                  | j                  «       «      }t        t        d«      «      | j                      }|j                  r8t        |j                  «      D �cg c]  }|j                  |«      ‘Œ c}| _        n|j                  «       | _        | j                  |   S c c}w )z+Convert dvi glyph indices to FreeType ones.rH  r%   )r(   rL  rŠ  r   r7   r   r&   r'   r)   r*   Úget_name_indexÚ_get_type1_encoding_vector)r   Úidxr=   rÈ  r2   s        r   r   zDviFont._index_dvi_to_freetype"  s´   € ð �<‰<×"Ñ" 4Ô(ØˆJØ�>‰>Ð!Ü×(Ñ(¨×):Ñ):Ó)<Ó=ˆDÜ¤¨lÓ ;Ó<¸T¿\¹\ÑJˆFØ�Šä.8¸¿¹Ó.Iö"KØ&*ð #'×"5Ñ"5°dÕ";ò "K�•ð "&×!@Ñ!@Ó!B�”Ø�~‰~˜cÑ"Ð"ùò	"Ks   ÂCN)rA   rB   rC   rD   r‰   ÚclassmethodrM  rw  rE   r!   r
   Ú
deprecatedÚwidthsr¨  rª  r®  r³  rµ  r¹  rÌ   r¢   r   r   r0   r#   r   rI   r   r   rç   rç   w  sã   „ ñ òDð ñó ðð0 ñó ðñ ÑGÓH€Dà$ˆ_ˆT�_‰_˜VÓ$¡Xñ /Aó &Bó C€Fð ñ.ó ð.ð ñó ðò/òOò&ò:ò8òò&ð, ñó ðð ñMó ðMó
#r   rç   c                   ó@   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )ÚVfaû  
    A virtual font (\*.vf file) containing subroutines for dvi files.

    Parameters
    ----------
    filename : str or path-like

    Notes
    -----
    The virtual font format is a derivative of dvi:
    http://mirrors.ctan.org/info/knuth/virtual-fonts
    This class reuses some of the machinery of `Dvi`
    but replaces the `!_read` loop and dispatch mechanism.

    Examples
    --------
    ::

        vf = Vf(filename)
        glyph = vf[code]
        glyph.text, glyph.boxes, glyph.width
    c                 ó®   •— t         ‰| �  |d«       	 d | _        i | _        | j	                  «        | j                  «        y # | j                  «        w xY wrð   )Úsuperr‰   Ú_first_fontÚ_charsr“   r�   )r   rˆ   Ú	__class__s     €r   r‰   zVf.__init__S  sB   ø€ Ü‰Ñ˜ 1Ô%ð	Ø#ˆDÔØˆDŒKØ�J‰JŒLà�J‰J�LøˆD�J‰J�Lús   “A ÁAc                 ó    — | j                   |   S r   )r×  )r   Úcodes     r   Ú__getitem__zVf.__getitem__\  s   € Ø�{‰{˜4Ñ Ð r   c                 ó"  — dx}}dx}}	 | j                   j                  d«      d   }| j                  t        j                  u r}| j                   j                  «       dz
  }||k(  r| j                  ||«       dx}x}}nB||kD  rt        d«      ‚|dv s|dk\  rt        d|› d�«      ‚t        j                  |   | |«       Œ¸|d	k  rL|}| j                  d«      }| j                  d
«      }| j                  |«      }t        j                  | _        �n}|d	k(  rF| j                  d«      }| j                  d«      }| j                  d«      }| j                  |«       �n2d|cxk  rdk  ršn n—| j                  |d	z
  |dk(  «      }| j                  d«      }| j                  d«      }	| j                  d«      }
| j                  d«      }| j                  d«      }| j                  |||	|
||«       | j                  €•|| _        n�|dk(  rt| j                  d«      }| j                  d«      }| j                   j                  |«      }| j                  d«      }| j                  d«      }| j                  ||||«       n|dk(  ryt        d|› �«      ‚�Œ‡)r±   NrP   r   z!Packet length mismatch in vf file)rö   r·   r?  zInappropriate opcode z in vf filer6  r]   rW   r@  rY  rb  zUnknown vf opcode )r‚   r¸   ri   r…   rø   ÚtellÚ_finalize_packetrj   r{   r¹   rT   Ú_init_packetrB  rÖ  ra  )r   Úpacket_charÚpacket_endsÚ
packet_lenÚpacket_widthrk   Úbyte_atr.  rC  rD  r¯   rÙ   rE  rt   rs   ÚcsÚdss                    r   r“   zVf._read_  sp  € ð
 %)Ð(ˆ�kØ$(Ð(ˆ
�\ØØ—9‘9—>‘> !Ó$ QÑ'ˆDà�z‰zœY×-Ñ-Ñ-ØŸ)™)Ÿ.™.Ó*¨1Ñ,�Ø˜kÒ)Ø×)Ñ)¨+°|ÔDØ>BÐB�JÐB ©|à˜{Ò*Ü$Ð%HÓIÐIà˜zÑ)¨T°Sª[Ü(Ð+@ÀÀÀkÐ)RÓSÐSÜ—K‘K Ñ% d¨DÔ1Øð �cŠzØ!�
Ø"Ÿn™n¨QÓ/�Ø#Ÿ~™~¨aÓ0�Ø"×/Ñ/°Ó5�Ü&×-Ñ-�–
Ø˜’Ø!Ÿ^™^¨AÓ.�
Ø"Ÿn™n¨QÓ/�Ø#Ÿ~™~¨aÓ0�Ø×!Ñ! *Ö-Ø˜Ô# Õ#Ø—N‘N 4¨#¡:¨t°s©{Ó;�Ø—N‘N 1Ó%�Ø—N‘N 1Ó%�Ø—N‘N 1Ó%�Ø—N‘N 1Ó%�Ø—N‘N 1Ó%�Ø×"Ñ" 1 a¨¨A¨q°!Ô4Ø×#Ñ#Ð+Ø'(�DÕ$Ø˜’Ø—N‘N 1Ó%�Ø—N‘N 1Ó%�Ø—I‘I—N‘N 1Ó%�Ø—^‘^ AÓ&�Ø—^‘^ AÓ&�Ø—	‘	˜!˜Q  BÕ'Ø˜’Øä Ð#5°d°VÐ!<Ó=Ð=ñc r   c                 ó:  — | j                   t        j                  k7  rt        d«      ‚dx| _        x| _        x| _        x| _        x| _        | _	        g | _
        g | _        g | _        | j                  | _        d | _        | j                   j#                  «       |z   S )NzMisplaced packet in vf filer   )ri   r…   r  rj   r«   r¿   r¬   rs   rª   rù   r¶   rš   r›   rÖ  rl   r‡   r‚   rÝ  )r   Úpls     r   rß  zVf._init_packet™  sˆ   € Ø�:‰:œŸ™Ò(ÜÐ:Ó;Ð;Ø>?Ð?ˆŒÐ?�”Ð?˜$œ&Ð? 4¤6Ð?¨D¬F°T´VØˆŒ
ØˆŒ	ØˆŒ
Ø×!Ñ!ˆŒØ!ˆÔØ�y‰y�~‰~Ó "Ñ$Ð$r   c                 ó¨   — | j                   s1t        | j                  | j                  |d d ¬«      | j                  |<   t
        j                  | _        y )Nr™   )r‡   r   rš   r›   r×  r…   r  ri   )r   rà  rã  s      r   rÞ  zVf._finalize_packet¤  s?   € Ø×!Ò!Ü'+Ø—Y‘Y d§j¡j¸Ø Tô(+ˆD�K‰K˜Ñ$ô —_‘_ˆ�
r   c                 óä   — | j                   t        j                  urt        d«      ‚|dk7  rt        d|› �«      ‚t	        |«      rt
        j                  d|«       t        j                  | _         y )Nz pre command in middle of vf fileéÊ   zUnknown vf format zvf file comment: %s)ri   r…   r†   rj   r½   r   r€   r  )r   rt   rs   rå  ræ  s        r   ra  zVf._pre«  sY   € Ø�:‰:œYŸ]™]Ñ*ÜÐ?Ó@Ð@Ø�Š8ÜÐ1°!°Ð5Ó6Ð6ÜˆqŒ6Ü�J‰JÐ,¨aÔ0Ü—_‘_ˆ�
r   )rA   rB   rC   rD   r‰   rÛ  r“   rß  rÞ  ra  Ú__classcell__)rØ  s   @r   rÓ  rÓ  ;  s'   ø„ ñô.ò!ò8>òt	%ò%ö%r   rÓ  c                 ó   — | |z  dz	  S )z1Multiply two numbers in 12.20 fixed point format.r¤  rI   )Únum1Únum2s     r   rè   rè   ¶  s   € ð �‰I˜"ÑÐr   T)ÚfrozenÚkw_onlyc                   ó0   — e Zd ZU dZeed<   eed<   eed<   y)Ú
TexMetricsa�  
    Metrics of a glyph, with TeX semantics.

    TeX metrics have different semantics from FreeType metrics: tex_width
    corresponds to FreeType's ``advance`` (i.e., including whitespace padding);
    tex_height to ``bearingY`` (how much the glyph extends over the baseline);
    tex_depth to ``height - bearingY`` (how much the glyph extends under the
    baseline, as a positive number).
    r¼  r¾  r¿  N)rA   rB   rC   rD   rÄ   Ú__annotations__rI   r   r   ró  ró  ¼  s   … ñð ƒNØƒOØ„Nr   ró  c                   óâ   — e Zd ZdZd„ Zd„ Z  ej                  dd¬«       ed„ «      «      Z	  ej                  dd¬«       ed„ «      «      Z
  ej                  dd¬«       ed	„ «      «      Zy
)ÚTfma³  
    A TeX Font Metric file.

    This implementation covers only the bare minimum needed by the Dvi class.

    Parameters
    ----------
    filename : str or path-like

    Attributes
    ----------
    checksum : int
       Used for verifying against the dvi file.
    design_size : int
       Design size of the font (in 12.20 TeX points); unused because it is
       overridden by the scale factor specified in the dvi file.
    c           
      ó‚  — t         j                  d|«       t        |d«      5 }|j                  d«      }t	        j
                  d|dd «      \  }}}}}}	t         j                  d||||||	«       |j                  d|z  «      }
t	        j
                  d	|
d d
 «      \  | _        | _        |j                  d||z
  dz   z  «      }t	        j
                  d|› d�|j                  d|z  «      «      }t	        j
                  d|› d�|j                  d|z  «      «      }t	        j
                  d|	› d�|j                  d|	z  «      «      }d d d «       i | _        t        t        dz   «      «      D ]B  \  }}d|z     }|d|z  dz      }t        |   |dz	     |dz     ¬«      | j                  |<   ŒD y # 1 sw Y   ŒnxY w)Nzopening tfm file %sr~   é   z!6Hr[  é   z(lh=%d, bc=%d, ec=%d, nw=%d, nh=%d, nd=%drW   z!2Ié   rP   ú!rt   é   ©r¼  r¾  r¿  )r   r€   r�   r¸   ÚstructÚunpackrS  Údesign_sizeÚ_glyph_metricsÚ	enumeraterr   ró  )r   rˆ   r‚   Úheader1ÚlhÚbcÚecÚnwÚnhÚndÚheader2Ú	char_inforÑ  ÚheightsÚdepthsrÎ  rÎ   Úbyte0Úbyte1s                      r   r‰   zTfm.__init__ß  sµ  € Ü�
‰
Ð(¨(Ô3Ü�(˜DÓ!ð 	? TØ—i‘i “mˆGÜ%+§]¡]°5¸'À!ÀB¸-Ó%HÑ"ˆB��B˜˜B Ü�J‰JÐAØ˜2˜r 2 r¨2ô/à—i‘i  "¡“oˆGÜ.4¯m©m¸EÀ7È2ÈAÀ;Ó.OÑ+ˆDŒM˜4Ô+àŸ	™	 ! R¨¡U¨1¡W¡+Ó.ˆIÜ—]‘] Q r d¨! 9¨d¯i©i¸¸"¹«oÓ>ˆFÜ—m‘m a¨ t¨1 I¨t¯y©y¸¸2¹«Ó?ˆGÜ—]‘] Q r d¨! 9¨d¯i©i¸¸"¹«oÓ>ˆF÷	?ð !ˆÔÜ"¤5¨¨R°©T£?Ó3ò 	‰IˆC�Ø˜a ™eÑ$ˆEØ˜a ™e A™gÑ&ˆEÜ(2Ø  ™-Ø" 5¨A¡:Ñ.Ø  ¨¡Ñ-ô)ˆD×Ñ Ò%ñ	÷	?ð 	?ús   £D%F5Æ5F>c                 ó8   — | j                   j                  |«      S )z4Return a glyph's TexMetrics, or None if unavailable.)r  r¦  )r   rÎ  s     r   r»  zTfm.get_metrics÷  s   € à×"Ñ"×&Ñ& sÓ+Ð+r   r¡  r»  )Úalternativec                 ób   — | j                   D ��ci c]  \  }}||j                  “Œ c}}S c c}}w r   )r  r¼  ©r   rC  Úms      r   r   zTfm.<lambda>ü  ó&   € ¸$×:MÑ:M×N±$°!°Q˜q !§+¡+™~ÓN€ ùÓNó   �+c                 ób   — | j                   D ��ci c]  \  }}||j                  “Œ c}}S c c}}w r   )r  r¾  r  s      r   r   zTfm.<lambda>þ  s&   € ¸4×;NÑ;N×O±4°1°a˜q !§,¡,™ÓO€ ùÓOr  c                 ób   — | j                   D ��ci c]  \  }}||j                  “Œ c}}S c c}}w r   )r  r¿  r  s      r   r   zTfm.<lambda>   r  r  N)rA   rB   rC   rD   r‰   r»  r
   rÐ  rE   rœ   r�   ÚdepthrI   r   r   rö  rö  Ì  s|   „ ñò$ò0,ð ?ˆOˆD�O‰O˜F°Ô>ÙÑNÓOóQ€Eà?ˆ_ˆT�_‰_˜V°Ô?ÙÑOÓPóR€Fà>ˆOˆD�O‰O˜F°Ô>ÙÑNÓOóQ�Er   rö  c                   ó   — e Zd Zd„ Zd„ Zy)r—  c                 ó8   — t        j                  |«      | _        y r   )r   r7   Ú_face)r   rˆ   s     r   r‰   zTtfMetrics.__init__  s   € Ü!×*Ñ*¨8Ó4ˆ�
r   c                 óN  — | j                   j                  }| j                   j                  |t        j                  «      }t        t        |j                  |z  dz  «      t        |j                  |z  dz  «      t        |j                  |j                  z
  |z  dz  «      ¬«      S )Né   rý  )
r  Úunits_per_EMÚ
load_glyphr   ÚNO_SCALEró  ÚroundÚhoriAdvanceÚhoriBearingYr�   )r   rÎ  Úupemr®   s       r   r»  zTtfMetrics.get_metrics  s‡   € ð �z‰z×&Ñ&ˆØ�J‰J×!Ñ! #¤y×'9Ñ'9Ó:ˆÜÜ˜AŸM™M¨DÑ0°5Ñ8Ó9Ü˜QŸ^™^¨dÑ2°UÑ:Ó;Ü˜QŸX™X¨¯©Ñ6¸$Ñ>ÀÑFÓGô
ð 	
r   N)rA   rB   rC   r‰   r»  rI   r   r   r—  r—    s   „ ò5ó
r   r—  ÚPsFontz(texname psname effects encoding filenamec                   ó0   — e Zd ZdZdZed„ «       Zd„ Zd„ Zy)r&   a}  
    A psfonts.map formatted file, mapping TeX fonts to PS fonts.

    Parameters
    ----------
    filename : str or path-like

    Notes
    -----
    For historical reasons, TeX knows many Type-1 fonts by different
    names than the outside world. (For one thing, the names have to
    fit in eight characters.) Also, TeX's native fonts are not Type-1
    but Metafont, which is nontrivial to convert to PostScript except
    as a bitmap. While high-quality conversions to Type-1 format exist
    and are shipped with modern TeX distributions, we need to know
    which Type-1 fonts are the counterparts of which native fonts. For
    these reasons a mapping is needed from internal font names to font
    file names.

    A texmf tree typically includes mapping files called e.g.
    :file:`psfonts.map`, :file:`pdftex.map`, or :file:`dvipdfm.map`.
    The file :file:`psfonts.map` is used by :program:`dvips`,
    :file:`pdftex.map` by :program:`pdfTeX`, and :file:`dvipdfm.map`
    by :program:`dvipdfm`. :file:`psfonts.map` might avoid embedding
    the 35 PostScript fonts (i.e., have no filename for them, as in
    the Times-Bold example above), while the pdf-related files perhaps
    only avoid the "Base 14" pdf fonts. But the user may have
    configured these files differently.

    Examples
    --------
    >>> map = PsfontsMap(find_tex_file('pdftex.map'))
    >>> entry = map[b'ptmbo8r']
    >>> entry.texname
    b'ptmbo8r'
    >>> entry.psname
    b'Times-Bold'
    >>> entry.encoding
    '/usr/local/texlive/2008/texmf-dist/fonts/enc/dvips/base/8r.enc'
    >>> entry.effects
    {'slant': 0.16700000000000001}
    >>> entry.filename
    )Ú	_filenameÚ	_unparsedÚ_parsedc                 óR  — t         j                  | «      }t        j                  |«      |_        t        |d«      5 }i |_        |D ]B  }|j                  dd«      d   }|j                  j                  |g «      j                  |«       ŒD 	 d d d «       i |_
        |S # 1 sw Y   ŒxY w)Nr~   ó    rP   r   )ÚobjectÚ__new__r“  r”  r(  r�   r)  r•  Ú
setdefaultr»   r*  )r˜  rˆ   r   r‚   ÚlineÚtfmnames         r   r.  zPsfontsMap.__new__L  s¡   € ä�~‰~˜cÓ"ˆÜŸ™ XÓ.ˆŒô
 �(˜DÓ!ð 	D TØˆDŒNØò D�ØŸ*™* T¨1Ó-¨aÑ0�Ø—‘×)Ñ)¨'°2Ó6×=Ñ=¸dÕCñD÷	Dð
 ˆŒØˆ÷	Dð 	Dús   ¼ABÂB&c           	      ó:  — t        |t        «      sJ ‚|| j                  v r3| j                  j                  |«      D ]  }| j	                  |«      sŒ n 	 | j
                  |   S # t        $ r- t        d| j                  ›d|j                  d«      ›d�«      d ‚w xY w)NzThe font map z5 is missing a PostScript font associated to TeX font rI  zo; this problem can often be solved by installing a suitable PostScript font package in your TeX package manager)
r¡   rˆ  r)  r¼   Ú_parse_and_cache_liner*  ÚKeyErrorrÆ  r(  rN  )r   r(   r0  s      r   rÛ  zPsfontsMap.__getitem__\  s­   € Ü˜'¤5Ô)Ð)Ð)Ø�d—n‘nÑ$ØŸ™×*Ñ*¨7Ó3ò �Ø×-Ñ-¨dÕ3Ùðð	7Ø—<‘< Ñ(Ð(øÜò 	7ÜØ §¡Ð1ð 2*Ø*1¯.©.¸Ó*AÐ)Dð E+ð,ó-ð 37ð	7ð	7ús   ÁA$ Á$6Bc           	      ó  — |r|j                  d«      rydx}x}x}x}}dx}x}}	t        j                  d|«      }
|
D ]²  }|j                  «       \  }}|r–|j                  d«      r|dd }Œ/|j                  d«      r|dd }ŒF|j                  d«      rL|d	d xs, t	        t        dt	        |
«      j                  «       «      «      }|j                  d
«      r|}Œž|}d}Œ£|€|}Œ¨|�Œ«|}Œ®|sŒ±|}Œ´ i }|rZt        |j                  «       «      }|D ]<  }|dk(  rt        t	        |«      «      |d<   Œ |dk(  sŒ&t        t	        |«      «      |d<   Œ> |�(|j                  d«      rd}	n|j                  d«      sd}n|�d}|	r|r|€y|s	d|v sd|v ryt        |j                  dd«      «      d	kD  ryt        |j                  dd«      «      dkD  ry|€|}|�t        |«      }|�t        |«      }t        |||||¬«      | j                  |<   y)a%  
        Parse a line in the font mapping file.

        The format is (partially) documented at
        http://mirrors.ctan.org/systems/doc/pdftex/manual/pdftex-a.pdf
        https://tug.org/texinfohtml/dvips.html#psfonts_002emap
        Each line can have the following fields:

        - tfmname (first, only required field),
        - psname (defaults to tfmname, must come immediately after tfmname if
          present),
        - fontflags (integer, must come immediately after psname if present,
          ignored by us),
        - special (SlantFont and ExtendFont, only field that is double-quoted),
        - fontfile, encodingfile (optional, prefixed by <, <<, or <[; << always
          precedes a font, <[ always precedes an encoding, < can precede either
          but then an encoding file must have extension .enc; < and << also
          request different font subsetting behaviors but we ignore that; < can
          be separated from the filename by whitespace).

        special, fontfile, and encodingfile can appear in any order.
        )r,  ó   %ó   *ó   ;ó   #NFs   "([^"]*)(?:"|$)|(\S+)s   <<r[  s   <[ó   <rP   s   .encTs	   SlantFontru  s
   ExtendFontrê   )s   .ttfs   .ttcs   .otfr   )r(   rÅ  r#   r)   rˆ   )rL  rÀ  ÚfinditerÚgroupsÚnextÚfilterr4   Úreversedr•  ÚfloatÚabsr¦  r'   r&  r*  )r   r0  r1  Úbasenamer<  ÚencodingfileÚfontfileÚis_subsettedÚis_t1Úis_truetypeÚmatchesrÁ  ÚquotedÚunquotedÚwordr#   Úwordss                    r   r3  z PsfontsMap._parse_and_cache_linek  s\  € ñ8 �t—‘Ð'EÔFØØAEÐEˆÐE�(ÐE˜WÐE |°hØ-2Ð2ˆÐ2�u˜{Ü—+‘+Ð7¸Ó>ˆØò 	!ˆEØ$Ÿ|™|›~ÑˆF�HÙØ×&Ñ& uÔ-Ø'¨¨˜|‘HØ×(Ñ(¨Ô/Ø#+¨A¨B <‘LØ×(Ñ(¨Ô.ð !  ˜ò Fä¤ t¬T°'«]×-AÑ-AÓ-CÓ DÓEð	 ð
 —}‘} WÔ-Ø'+™à#'˜Ø'+™Ø�_Ø&‘GØÑ%Ø'‘HÚØ ‘ð/	!ð0 ˆÙÜ˜WŸ]™]›_Ó-ˆEØò ;�Ø˜<Ò'Ü',¬T°%«[Ó'9�G˜GÒ$Ø˜]Ó*Ü(-¬d°5«kÓ(:�G˜HÒ%ð	;ð ÐØ× Ñ Ð!3Ô4Ø"‘Ø×&Ñ& wÔ/Ø‘ØÐ!ØˆEÙ™<¨LÐ,@ØÙ˜' WÑ,°¸GÑ0CØÜˆw�{‰{˜7 AÓ&Ó'¨!Ò+ØÜˆw�{‰{˜8 QÓ'Ó(¨1Ò,ØàÐØˆHØÐ#Ü(¨Ó6ˆLØÐÜ$ XÓ.ˆHÜ &Ø H°gØ!¨Hô!6ˆ�‰�WÑð r   N)	rA   rB   rC   rD   Ú	__slots__r   r.  rÛ  r3  rI   r   r   r&   r&     s.   „ ñ*ðV 6€Ið
 ñó ðò7ó]r   r&   c                 óh  — t        j                  ddt        | «      j                  d¬«      «      }t        j                  d|«      j                  d«      }|j                  «       D �cg c]  }|sŒ|‘Œ	 }}t        d„ |D «       «      r|D �cg c]  }|dd ‘Œ	 c}S t        d	| › d
�«      ‚c c}w c c}w )a5  
    Parse a \*.enc file referenced from a psfonts.map style file.

    The format supported by this function is a tiny subset of PostScript.

    Parameters
    ----------
    path : `os.PathLike`

    Returns
    -------
    list
        The nth list item is the PostScript glyph name of the nth glyph.
    z%.*r8  rI  )r)   z(?s)\[(.*)\]rP   c              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)ú/N)rL  )Ú.0r0  s     r   ú	<genexpr>z_parse_enc.<locals>.<genexpr>Ý  s   è ø€ Ò
2 Dˆ4�?‰?˜3×Ñ
2ùs   ‚NzFailed to parse z as Postscript encoding)	rÀ  Úsubr	   Ú	read_textÚsearchÚgroupr•  Úallrj   )r<   Úno_commentsÚarrayr0  Úliness        r   r*   r*   Ë  s¡   € ô —&‘&˜ ¤D¨£J×$8Ñ$8À'Ð$8Ó$JÓK€KÜ�I‰I�o {Ó3×9Ñ9¸!Ó<€EØ#Ÿk™k›mÖ4�dªtŠTÐ4€EÐ4Ü
Ñ
2¨EÔ
2Ô2Ø%*Ö+˜T��Q�R’Ò+Ð+äÐ+¨D¨6Ð1HÐIÓJÐJùò	 5ùâ+s   Á(B*Á0B*ÂB/c                   ó(   — e Zd Zed„ «       Zd„ Zd„ Zy)Ú_LuatexKpsewhichc                 óZ   — t         j                  | «      }|j                  «       |_        |S r   )r-  r.  Ú	_new_procÚ_proc)r˜  r   s     r   r.  z_LuatexKpsewhich.__new__ä  s#   € ä�~‰~˜cÓ"ˆØ—^‘^Ó%ˆŒ
Øˆr   c                 ó6  — t        j                  ddt        t        j                  d«      «      gt         j
                  t         j
                  t         j                  dt        t        t        j                  «       d«      «      it        j                  ¥¬«      S )NÚluatexz	--luaonlyzkpsewhich.luaÚMT_VARTEXFONTSÚvartexfonts)ÚstdinÚstdoutÚstderrÚenv)Ú
subprocessÚPopenÚstrr   Ú_get_data_pathÚPIPEÚDEVNULLr	   ÚmplÚget_cachedirr“  Úenvironr   s    r   r^  z_LuatexKpsewhich._new_procê  so   € Ü×ÑØ�{¤C¬×(<Ñ(<¸_Ó(MÓ$NÐOä—/‘/¬*¯/©/Ä*×BTÑBTà!¤3¤t¬C×,<Ñ,<Ó,>ÀÓ'NÓ#Oð Ü—:‘:ðô ð 	 r   c                 óº  — | j                   j                  «       �| j                  «       | _         | j                   j                  j	                  t        j                  |«      dz   «       | j                   j                  j                  «        | j                   j                  j                  «       j                  «       }|dk(  rd S t        j                  |«      S )Nó   
s   nil)r_  Úpollr^  rd  Úwriter“  ÚfsencodeÚflushre  ÚreadlineÚrstripr”  )r   rˆ   Úouts      r   rU  z_LuatexKpsewhich.searchó  s˜   € Ø�:‰:�?‰?ÓÐ(ØŸ™Ó)ˆDŒJØ�
‰
×Ñ×ÑœrŸ{™{¨8Ó4°uÑ<Ô=Ø�
‰
×Ñ×ÑÔ Ø�j‰j×Ñ×(Ñ(Ó*×1Ñ1Ó3ˆØ˜f’}ˆtÐ:¬"¯+©+°cÓ*:Ð:r   N)rA   rB   rC   r   r.  r^  rU  rI   r   r   r\  r\  ã  s   „ Ø
ñó ðò
 ó;r   r\  c                 óŒ  — t        | t        «      r| j                  dd¬«      } 	 t        «       }|r|j                  | «      }n½t        j                  dk(  ri t        j                  ¥ddi¥ddœ}n(i t        j                  ¥t        j                  «       dd	œ}|d
   j                  t        t        t        j                   «       d«      «      ¬«       	 t#        j$                  dd| gt&        fi |¤Žj)                  d«      }|r|S t	        d| ›d�«      ‚# t        t
        f$ r d}Y Œ÷w xY w# t        t
        t*        f$ r d}Y ŒBw xY w)aÙ  
    Find a file in the texmf tree using kpathsea_.

    The kpathsea library, provided by most existing TeX distributions, both
    on Unix-like systems and on Windows (MikTeX), is invoked via a long-lived
    luatex process if luatex is installed, or via kpsewhich otherwise.

    .. _kpathsea: https://www.tug.org/kpathsea/

    Parameters
    ----------
    filename : str or path-like

    Raises
    ------
    FileNotFoundError
        If the file is not found.
    zutf-8Úreplace)ÚerrorsNÚwin32Úcommand_line_encoding)rg  r)   Úsurrogateescape)rg  r)   r|  rg  rc  )rb  Ú	kpsewhichz	-mktex=pkú
z:Matplotlib's TeX implementation searched for a file named z* in your texmf tree, but could not find it)r¡   rˆ  rN  r\  rP  ÚOSErrorrU  ÚsysÚplatformr“  rp  ÚgetfilesystemencodingÚupdaterj  r	   rn  ro  r   Ú_check_and_log_subprocessr   rx  ÚRuntimeError)rˆ   Úlkr<   Úkwargss       r   r'   r'   ü  sX  € ô. �(œEÔ"Ø—?‘? 7°9�?Ó=ˆðÜÓˆñ 
Ø�y‰y˜Ó"‰ä�<‰<˜7Ò"ð N¤§
¡
ÐMÐ,CÀWÑMØ")ñ+‰Fð ,¤§
¡
˜^Ü"%×";Ñ";Ó"=Ø 1ñ3ˆFð 	ˆu‰×ÑÜœt¤C×$4Ñ$4Ó$6¸ÓFÓGð 	ô 	Ið	Ü×2Ñ2Ø˜k¨8Ð4´dñØ>Dñç‰f�T‹lð ñ ØˆäØHØˆlÐDðFóGð 	Gøô; œwÐ'ò ØŠðûô. "¤7¬LÐ9ò 	ØŠDð	ús#   ¥
D Ã-D* ÄD'Ä&D'Ä*EÅEc                 ó*   —  | t        ||z   «      «      S r   )r'   )r˜  Úsuffixr(   s      r   Ú	_fontfiler�  :  s   € áŒ}˜W vÑ-Ó.Ó/Ð/r   z.tfmz.vfÚ__main__)ÚArgumentParserrˆ   rƒ   r/   )Únargsr°  r£  z-dz--debugÚ
store_true)Úaction)Úlevelc                  ó`   — t        dj                  t        dj                  | «      «      «       y )Nú z{:>11})Úprintr:  ÚmaprÄ  rf  s    r   Ú_print_fieldsr˜  P  s   € Üˆc�h‰h”s˜8Ÿ?™?¨DÓ1Ó2Õ3r   z=== NEW PAGE === (w: z, h: z, d: ú)z--- GLYPHS ---c                 ó   — | j                   S r   )r   )rš   s    r   r   r   X  s
   € ÈÏÉ€ r   rŽ  r�  zfont: z at zscale: r  rs   rª   r   r5   r¬   z--- BOXES ---r«   )NN)r^   )`rD   ÚdataclassesÚenumÚloggingr“  rÀ  rþ  rh  rƒ  Úcollectionsr   Ú	functoolsr   r   r   r   r   Úpathlibr	   ÚfontTools.aglr9   ÚnumpyrŸ   Ú
matplotlibrn  r
   r   r   Úmatplotlib.ft2fontr   Ú	getLoggerrA   r   ÚEnumr…   r   r   r   Údictrq   ry   r{   rç   rÓ  rè   Ú	dataclassró  rö  r—  r&  r&   r*   r\  r'   r�  rO  rT  Ú	itertoolsÚargparser�  ÚparserÚadd_argumentr@  Ú
parse_argsru   r€   ÚbasicConfigÚDEBUGr˜  rˆ   rƒ   rL   Úpager–  rœ   r�   rž   Úgroupbyrš   r   rV  r2   r(   rN  r”  Ú	font_namer¡   ré   r   ræ   rs   rª   r   r@   r›   ÚboxrI   r   r   ú<module>r´     s  ðñó& Û Û Û 	Û 	Û Û Û 
Ý "ß GÕ GÝ ã Û ã ß 0Ñ 0Ý (à€w×Ñ˜Ó"€ð, ˆD�I‰I�jÐ"EÓF€	ñ �&Ð;Ó<€Ù�Ð*Ó+€ôG'‰:�fÐ4Ó5ô G'ñ^ á á8á8á7á	Pá
Bá
Cñ Kô#€ó*/÷dY6ñ Y6÷xA#ñ A#ôHw%ˆô w%òvð €×Ñ˜d¨DÔ1÷ð ó 2ð÷4Qñ 4Q÷n
ñ 
ñ* 
�HÐHÓ	I€÷mñ mò`K÷0;ñ ;ð2 ñ:Gó ð:Gðz ñ0ó ð0ñ �9˜c 6Ó*€Ù
�)˜R Ó
'€ð ˆzÓÛÝ'áÓ€FØ
×Ñ˜
Ô#Ø
×Ñ˜ S¨u¸dÐÔCØ
×Ñ˜˜i°ÐÔ=Ø×ÑÓ€Dà‡z‚zØˆ×Ñ '§-¡-Õ0ò4ñ 
ˆT�]‰]˜DŸH™HÓ	%ð G¨Øó 	GˆDÙð ØŸ™˜ E¨$¯+©+¨°e¸D¿L¹L¸>ÈðLô MáÐ"Ô#Ø0˜y×0Ñ0°·±Ñ<RÓSò J‘��eØ<>¿G¹GÀtºO˜TŸ\™\×0Ñ0°Ô8Ø"- "§+¡+¨d¯l©lÓ";ð á˜dŸm™m¨SÔ1Ù˜F 9 +¨T°$×2CÑ2CÓ2EÐ1FÐGÕHá˜F 9 +Ð.Ô/Ù˜ §¡¨gÑ 5Ð6Ð7Ô8Ù˜c 3¨°¸Ô<Ø!ò J�DÙ! $§&¡&¨$¯&©&°$·*±*Ø"&×":Ñ":Ó"<¸d¿j¹jõJñJðJð �zŒzÙ�oÔ&Ù˜c 3¨¨SÔ1ØŸ:™:ò G�CÙ! #§%¡%¨¯©°·
±
¸C¿I¹IÕFòGñ'	G÷Gð Gð! ÷ Gð Gús   ÈEO	Í$AO	Ï	O