§
    ¢”jÅY  ã            
      ó˜  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ dd	lZdd
lmZ dd	lZ ej        e¦  «        Z G d„ de¦  «        ZdZdZddddddddddœ	Zefd„Z G d„ de¦  «        ZdZ ej        e¦  «        Z dZ! ej        e!¦  «        Z"dZ# ej        e#¦  «        Z$dZ% ej        e%¦  «        Z&d Z' ej        e'¦  «        Z( G d!„ d"e¦  «        Z) G d#„ d$e)¦  «        Z* G d%„ d&e)¦  «        Z+ G d'„ d(¦  «        Z,d)„ Z-d*„ Z.d+„ Z/ed,k    r,dd	l0Z0dd	l1Z1 e0j2         e1j3        ¦   «         j4        ¦  «         d	S d	S )-a¯  ttLib/sfnt.py -- low-level module to deal with the sfnt file format.

Defines two public classes:

- SFNTReader
- SFNTWriter

(Normally you don't have to use these classes explicitly; they are
used automatically by ttLib.TTFont.)

The reading and writing of sfnt files is separated in two distinct
classes, since whenever the number of tables changes or whenever
a table's length changes you need to rewrite the whole file anyway.
é    )Úannotations)ÚKeysView)ÚBytesIO)ÚSimpleNamespace)ÚTag)Ússtruct)Ú
TTLibErrorÚTTLibFileIsCollectionErrorN)ÚOrderedDictc                  óT   — e Zd Zd„ Zdd„Zdd	„ZeZdd„Zdd„Zdd„Z	dd„Z
d„ Zd„ ZdS )Ú
SFNTReaderc                ó@  — |rƒ| t           u rz|d         }|                     d¦  «         t          |                     d¦  «        ¦  «        }|                     d¦  «         |dk    r ddlm} t                               |¦  «        S t                               | ¦  «        S )zmReturn an instance of the SFNTReader sub-class which is compatible
        with the input file type.
        r   é   ÚwOF2)ÚWOFF2Reader)r   Úseekr   ÚreadÚfontTools.ttLib.woff2r   ÚobjectÚ__new__)ÚclsÚargsÚkwargsÚinfileÚsfntVersionr   s         úc/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/ttLib/sfnt.pyr   zSFNTReader.__new__!   s•   € ð ð 		3�C�:Ð%Ð%Ø˜!”WˆFØ�KŠK˜‰NŒNˆNÝ˜fŸkšk¨!™nœnÑ-Ô-ˆKØ�KŠK˜‰NŒNˆNØ˜fÒ$Ð$à=Ð=Ð=Ð=Ð=Ð=å—~’~ kÑ2Ô2Ð2å�~Š~˜cÑ"Ô"Ð"ó    r   éÿÿÿÿc                ó>  — || _         || _        d | _        d | _        t          | _        | j                              d¦  «         | j                              d¦  «        | _        | j                              d¦  «         | j        dk    rÍt          | j         ¦  «        }|j
        }d|cxk    r|k     sn t          d|dz
  z  ¦  «        ‚|| _
        | j                              |j        |         ¦  «         | j                              t          ¦  «        }t          |¦  «        t          k    rt          d¦  «        ‚t!          j        t$          || ¦  «         ná| j        dk    rud| _        t&          | _        | j                              t(          ¦  «        }t          |¦  «        t(          k    rt          d	¦  «        ‚t!          j        t*          || ¦  «         na| j                              t          ¦  «        }t          |¦  «        t          k    rt          d
¦  «        ‚t!          j        t$          || ¦  «         t-          | j        ¦  «        | _        | j        dvrt          d¦  «        ‚i }t/          | j        ¦  «        D ]I}|                      ¦   «         }	|	                     | j         ¦  «         t-          |	j        ¦  «        }
|	||
<   ŒJt7          t9          |                     ¦   «         d„ ¬¦  «        ¦  «        | _        | j        dk    rt?          | ¦  «        | _        d S d S )Nr   r   s   ttcfz2specify a font number between 0 and %d (inclusive)é   ú'Not a Font Collection (not enough data)ó   wOFFÚwoffz!Not a WOFF font (not enough data)z1Not a TrueType or OpenType font (not enough data))ú   ÚOTTOÚtruez1Not a TrueType or OpenType font (bad sfntVersion)c                ó   — | d         j         S )Nr    )Úoffset)Úis    r   ú<lambda>z%SFNTReader.__init__.<locals>.<lambda>`   s   € ÀqÈÄtÄ{€ r   )Úkey) ÚfileÚcheckChecksumsÚflavorÚ
flavorDataÚSFNTDirectoryEntryÚDirectoryEntryr   r   r   ÚreadTTCHeaderÚnumFontsr
   ÚoffsetTableÚsfntDirectorySizeÚlenr	   r   ÚunpackÚsfntDirectoryFormatÚWOFFDirectoryEntryÚwoffDirectorySizeÚwoffDirectoryFormatr   ÚrangeÚ	numTablesÚfromFileÚtagr   ÚsortedÚitemsÚtablesÚWOFFFlavorData)Úselfr,   r-   Ú
fontNumberÚheaderr3   ÚdatarB   r)   Úentryr?   s              r   Ú__init__zSFNTReader.__init__2   sÍ  € ØˆŒ	Ø,ˆÔàˆŒØˆŒÝ0ˆÔØŒ	�Š�qÑÔÐØœ9Ÿ>š>¨!Ñ,Ô,ˆÔØŒ	�Š�qÑÔÐØÔ˜wÒ&Ð&Ý" 4¤9Ñ-Ô-ˆFØ”ˆHØ˜
Ð-Ð-Ò-Ð- XÒ-Ð-Ð-Ð-Ý0ØHØ !‘|ñ%ñô ð ð %ˆDŒMØŒI�NŠN˜6Ô-¨jÔ9Ñ:Ô:Ð:Ø”9—>’>Õ"3Ñ4Ô4ˆDÝ�4‰yŒyÕ-Ò-Ð-Ý Ð!JÑKÔKÐKÝŒNÕ.°°dÑ;Ô;Ð;Ð;ØÔ Ò(Ð(Ø ˆDŒKÝ"4ˆDÔØ”9—>’>Õ"3Ñ4Ô4ˆDÝ�4‰yŒyÕ-Ò-Ð-Ý Ð!DÑEÔEÐEÝŒNÕ.°°dÑ;Ô;Ð;Ð;à”9—>’>Õ"3Ñ4Ô4ˆDÝ�4‰yŒyÕ-Ò-Ð-Ý Ð!TÑUÔUÐUÝŒNÕ.°°dÑ;Ô;Ð;Ý˜tÔ/Ñ0Ô0ˆÔàÔÐ#GÐGÐGÝÐPÑQÔQÐQØ,.ˆÝ�t”~Ñ&Ô&ð 	 ð 	 ˆAØ×'Ò'Ñ)Ô)ˆEØ�NŠN˜4œ9Ñ%Ô%Ð%Ý�e”i‘.”.ˆCØˆF�3‰KˆKÝ!¥&¨¯ª©¬Ð=RÐ=RÐ"SÑ"SÔ"SÑTÔTˆŒð Œ;˜&Ò Ð Ý,¨TÑ2Ô2ˆDŒOˆOˆOð !Ð r   r?   ústr | bytesÚreturnÚboolc                ó   — || j         v S ©N©rB   ©rD   r?   s     r   Úhas_keyzSFNTReader.has_keyf   s   € Ø�d”kÐ!Ð!r   úKeysView[Tag]c                ó4   — | j                              ¦   «         S rN   )rB   Úkeys©rD   s    r   rT   zSFNTReader.keysk   s   € ØŒ{×ÒÑ!Ô!Ð!r   Úbytesc                ó†  — | j         t          |¦  «                 }|                     | j        ¦  «        }| j        r…|dk    r&t          |dd…         dz   |dd…         z   ¦  «        }nt          |¦  «        }| j        dk    r||j        k    sJ d|z  ¦   «         ‚n&||j        k    rt                               d|¦  «         |S )zFetch the raw table data.ÚheadNé   ó       é   r    zbad checksum for '%s' table)	rB   r   ÚloadDatar,   r-   ÚcalcChecksumÚcheckSumÚlogÚwarning)rD   r?   rH   rG   Úchecksums        r   Ú__getitem__zSFNTReader.__getitem__n   sÌ   € à”�C ™HœHÔ%ˆØ�~Š~˜dœiÑ(Ô(ˆØÔð 	@Ø�fŠ}ˆ}å'¨¨R¨a¨R¬°;Ñ(>ÀÀbÀcÀcÄÑ(JÑKÔK��å'¨Ñ-Ô-�ØÔ" QÒ&Ð&à 5¤>Ò1Ð1Ð1Ð3PÐSVÑ3VÑ1Ô1Ð1Ð1Ø˜Uœ^Ò+Ð+å—’Ð9¸3Ñ?Ô?Ð?Øˆr   ÚNonec                ó0   — | j         t          |¦  «        = d S rN   )rB   r   rP   s     r   Ú__delitem__zSFNTReader.__delitem__€   s   € ØŒK�˜C™œÐ!Ð!Ð!r   c                ó8   — | j                              ¦   «          d S rN   )r,   ÚcloserU   s    r   rg   zSFNTReader.closeƒ   s   € ØŒ	�ŠÑÔÐÐÐr   c                óÖ   — t          | j        t          ¦  «        r| j        S | j                             ¦   «         }|d= | j        j        |d<   | j                             ¦   «         |d<   |S )Nr,   Ú	_filenameÚ_filepos)Ú
isinstancer,   r   Ú__dict__ÚcopyÚnameÚtell©rD   Ústates     r   Ú__getstate__zSFNTReader.__getstate__Œ   sc   € Ý�d”i¥Ñ)Ô)ð 	!à”=Ð ð ”×"Ò"Ñ$Ô$ˆØ�&ˆMØ!œYœ^ˆˆkÑØ œIŸNšNÑ,Ô,ˆˆjÑØˆr   c                óì   — d|vrUt          |                     d¦  «        d¦  «        | _        | j                             |                     d¦  «        ¦  «         | j                             |¦  «         d S )Nr,   ri   Úrbrj   )ÚopenÚpopr,   r   rl   Úupdaterp   s     r   Ú__setstate__zSFNTReader.__setstate__˜   sf   € Ø˜ÐÐÝ˜UŸYšY {Ñ3Ô3°TÑ:Ô:ˆDŒIØŒI�NŠN˜5Ÿ9š9 ZÑ0Ô0Ñ1Ô1Ð1ØŒ×Ò˜UÑ#Ô#Ð#Ð#Ð#r   N)r   r   )r?   rJ   rK   rL   )rK   rR   )r?   rJ   rK   rV   )r?   rJ   rK   rc   )rK   rc   )Ú__name__Ú
__module__Ú__qualname__r   rI   rQ   Ú__contains__rT   rb   re   rg   rr   rx   © r   r   r   r       sÁ   € € € € € ð#ð #ð #ð"23ð 23ð 23ð 23ðh"ð "ð "ð "ð €Lð"ð "ð "ð "ðð ð ð ð$"ð "ð "ð "ðð ð ð ð
ð 
ð 
ð$ð $ð $ð $ð $r   r   é   Fr    é   é   rY   é
   é   é   é2   éd   )	r    é   r   r   r€   r~   é   rY   é	   c                ó¾   — d|cxk    rdk    sn t          d|z  ¦  «        ‚t          r|dk    rddlm}  || |¦  «        S ddlm}  || t
          |         ¬¦  «        S )aE  Compress 'data' to Zlib format. If 'USE_ZOPFLI' variable is True,
    zopfli is used instead of the zlib module.
    The compression 'level' must be between 0 and 9. 1 gives best speed,
    9 gives best compression (0 gives no compression at all).
    The default value is a compromise between speed and compression (6).
    r   rˆ   zBad compression level: %s)Úcompress)Únumiterations)Ú
ValueErrorÚ
USE_ZOPFLIÚzlibrŠ   Úzopfli.zlibÚZOPFLI_LEVELS)rG   ÚlevelrŠ   s      r   rŠ   rŠ   ¶   s�   € ð �ˆOˆOŠOˆO˜!ŠOˆOˆOˆOÝÐ4°uÑ<Ñ=Ô=Ð=Ýð B˜ !š˜Ø!Ð!Ð!Ð!Ð!Ð!àˆx˜˜eÑ$Ô$Ð$à(Ð(Ð(Ð(Ð(Ð(àˆx˜­M¸%Ô,@ÐAÑAÔAÐAr   c                  óL   — 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 )Ú
SFNTWriterc                óð   — d}|rd|v r	|d         }n|rt          |¦  «        dk    r|d         }| t          u r&|dk    r ddlm} t                               |¦  «        S t                               | ¦  «        S )zpReturn an instance of the SFNTWriter sub-class which is compatible
        with the specified 'flavor'.
        Nr.   r   Úwoff2r   )ÚWOFF2Writer)r6   r“   r   r–   r   r   )r   r   r   r.   r–   s        r   r   zSFNTWriter.__new__Ê   s’   € ð ˆØð 	�h &Ð(Ð(Ø˜HÔ%ˆFˆFØð 	•c˜$‘i”i !’m�mØ˜!”WˆFØ•*ÐÐØ˜Ò Ð à=Ð=Ð=Ð=Ð=Ð=å—~’~ kÑ2Ô2Ð2å�~Š~˜cÑ"Ô"Ð"r   r$   Nc                ó&  — || _         || _        t          |¦  «        | _        || _        || _        | j        dk    rCt          | _        t          | _	        t          | _        d| _        t          |t          z  z   | _        nb| j        rJ d| j        z  ¦   «         ‚t           | _        t          | _	        t"          | _        ddlm}  ||d¦  «        \  | _        | _        | _        | j                              ¦   «         | _        | j        | j	        z   || j        j        z  z   | _        | j                              | j        ¦  «         | j                              d| j        | j                              ¦   «         z
  z  ¦  «         t;          ¦   «         | _        d S )Nr#   ÚwOFFúUnknown flavor '%s'r   ©ÚgetSearchRangeé   ó    )r,   r=   r   r   r.   r/   r;   ÚdirectoryFormatr:   ÚdirectorySizer9   r1   Ú	signaturer5   ÚsfntDirectoryEntrySizeÚorigNextTableOffsetr8   r0   ÚfontTools.ttLibr›   ÚsearchRangeÚentrySelectorÚ
rangeShiftro   ÚdirectoryOffsetÚ
formatSizeÚnextTableOffsetr   Úwriter   rB   )rD   r,   r=   r   r.   r/   r›   s          r   rI   zSFNTWriter.__init__Ü   s  € ð ˆŒ	Ø"ˆŒÝ˜{Ñ+Ô+ˆÔØˆŒØ$ˆŒàŒ;˜&Ò Ð Ý#6ˆDÔ Ý!2ˆDÔÝ"4ˆDÔà#ˆDŒNõ " IÕ0FÑ$FÑFð Ô$Ð$ð ”{ÐGÐGÐ$9¸D¼KÑ$GÑGÔGÐGÝ#6ˆDÔ Ý!2ˆDÔÝ"4ˆDÔà6Ð6Ð6Ð6Ð6Ð6àDRÀNØ˜2ñEô EÑAˆDÔ˜dÔ0°$´/ð  $œyŸ~š~Ñ/Ô/ˆÔàÔ ØÔ ñ!à˜$Ô-Ô8Ñ8ñ9ð 	Ôð 	Œ	�Š�tÔ+Ñ,Ô,Ð,àŒ	�Š˜ Ô!5¸¼	¿ºÑ8HÔ8HÑ!HÑIÑJÔJÐJÝ!‘m”mˆŒˆˆr   c                óP   — || j         v rt          d|z  ¦  «        ‚|| j         |<   d S )Núcannot rewrite '%s' table)rB   r	   )rD   r?   rH   s      r   ÚsetEntryzSFNTWriter.setEntry  s5   € Ø�$”+ÐÐÝÐ8¸3Ñ>Ñ?Ô?Ð?à ˆŒ�CÑÐÐr   c                óê  — || j         v rt          d|z  ¦  «        ‚|                      ¦   «         }||_        | j        |_        |dk    r9t          |dd…         dz   |dd…         z   ¦  «        |_        || _        d|_	        nt          |¦  «        |_        | 
                    | j        |¦  «         | j        dk    r'| j        |_        | xj        |j        d	z   d
z  z  c_        | j        |j        d	z   d
z  z   | _        | j                             d| j        | j                             ¦   «         z
  z  ¦  «         | j        | j                             ¦   «         k    sJ ‚|                      ||¦  «         dS )zWrite raw table data to disk.r¬   rX   NrY   rZ   r[   Tr#   r   éüÿÿÿr�   )rB   r	   r1   r?   r©   r(   r]   r^   Ú	headTableÚuncompressedÚsaveDatar,   r.   r¢   Ú
origOffsetÚ
origLengthÚlengthrª   ro   r­   )rD   r?   rG   rH   s       r   Ú__setitem__zSFNTWriter.__setitem__  sl  € à�$”+ÐÐÝÐ8¸3Ñ>Ñ?Ô?Ð?à×#Ò#Ñ%Ô%ˆØˆŒ	ØÔ+ˆŒØ�&Š=ˆ=Ý)¨$¨r°¨r¬(°[Ñ*@À4ÈÈÈÄ9Ñ*LÑMÔMˆEŒNØ!ˆDŒNØ!%ˆEÔÐå)¨$Ñ/Ô/ˆEŒNØ�Š�t”y $Ñ'Ô'Ð'àŒ;˜&Ò Ð Ø#Ô7ˆEÔØÐ$Ô$¨Ô)9¸AÑ)=ÀÑ(CÑCÐ$Ô$à#Ô3¸¼ÀqÑ8HÈBÑ7NÑOˆÔð
 	Œ	�Š˜ Ô!5¸¼	¿ºÑ8HÔ8HÑ!HÑIÑJÔJÐJØÔ# t¤y§~¢~Ñ'7Ô'7Ò7Ð7Ð7Ð7à�Š�c˜5Ñ!Ô!Ð!Ð!Ð!r   c                ó   — | j         |         S rN   rO   rP   s     r   rb   zSFNTWriter.__getitem__1  s   € ØŒ{˜3ÔÐr   c                óÆ  — t          | j                             ¦   «         ¦  «        }t          |¦  «        | j        k    r&t          d| j        t          |¦  «        fz  ¦  «        ‚| j        dk    �rœd| _        d| _        d| _	        | xj	        dt          |¦  «        z  z  c_	        |D ] \  }}| xj	        |j
        dz   dz  z  c_	        Œ!| j        r| j        nt          ¦   «         }|j        � |j        �|j        | _        |j        | _        nNt          | d
¦  «        r0t!          j        d| j        dd…         ¦  «        \  | _        | _        ndx| _        | _        |j        r•t          |j        ¦  «        | _        | j                             dd¦  «         | j                             ¦   «         | _        t3          |j        ¦  «        }t          |¦  «        | _        | j                             |¦  «         ndx| _        x| _        | _        |j        r³| j                             dd¦  «         | j                             ¦   «         }|dz   dz  }| j                             d||z
  z  ¦  «         | j                             ¦   «         | _        t          |j        ¦  «        | _        | j                             |j        ¦  «         ndx| _        | _        | j                             dd¦  «         | j                             ¦   «         | _        n| j        rJ d| j        z  ¦   «         ‚	 tA          j!        | j"        | ¦  «        }| j                             | j#        | j$        z   ¦  «         d}	|D ]$\  }}|dk    rd}	|| %                    ¦   «         z   }Œ%|	r|  &                    |¦  «         | j                             | j#        ¦  «         | j                             |¦  «         d	S )zTAll tables must have been written to disk. Now write the
        directory.
        z-wrong number of tables; expected %d, found %dr#   r"   r   r[   rœ   r   r¯   Nr°   z>HHr   rY   r†   r�   r™   rX   r    )'r@   rB   rA   r6   r=   r	   r.   r    ÚreservedÚtotalSfntSizer´   r/   rC   ÚmajorVersionÚminorVersionÚhasattrÚstructr7   r°   ÚmetaDataÚmetaOrigLengthr,   r   ro   Ú
metaOffsetrŠ   Ú
metaLengthrª   ÚprivDataÚ
privOffsetÚ
privLengthrµ   r   Úpackrž   r§   rŸ   ÚtoStringÚwriteMasterChecksum)
rD   rB   r?   rH   rG   ÚcompressedMetaDataÚoffÚ	paddedOffÚ	directoryÚseenHeads
             r   rg   zSFNTWriter.close4  s²  € õ ˜œ×)Ò)Ñ+Ô+Ñ,Ô,ˆÝˆv‰;Œ;˜$œ.Ò(Ð(ÝØ?Ø”>¥3 v¡;¤;Ð/ñ0ñô ð ð
 Œ;˜&Ò Ñ Ø$ˆDŒNØˆDŒMà!#ˆDÔØÐÔ "¥s¨6¡{¤{Ñ"2Ñ2ÐÔØ$ð Bð B‘
��UØÐ"Ô" uÔ'7¸!Ñ';¸rÑ&AÑAÐ"Ô"Ð"à&*¤oÐK�4”?�?½>Ñ;KÔ;KˆDØÔ Ð,°Ô1BÐ1NØ$(Ô$5�Ô!Ø$(Ô$5�Ô!Ð!å˜4 Ñ-Ô-ð >Ý;A¼=Ø˜tœ~¨a°¨cÔ2ñ<ô <Ñ8�DÔ% tÔ'8Ð'8ð =>Ð=�DÔ%¨Ô(9ØŒ}ð LÝ&)¨$¬-Ñ&8Ô&8�Ô#Ø”	—’˜q !Ñ$Ô$Ð$Ø"&¤)§.¢.Ñ"2Ô"2�”Ý%-¨d¬mÑ%<Ô%<Ð"Ý"%Ð&8Ñ"9Ô"9�”Ø”	—’Ð 2Ñ3Ô3Ð3Ð3àJKÐK�”ÐK $¤/°DÔ4GØŒ}ð 	6Ø”	—’˜q !Ñ$Ô$Ð$Ø”i—n’nÑ&Ô&�Ø  1™W¨™N�	Ø”	—’ ¨°S©Ñ 9Ñ:Ô:Ð:Ø"&¤)§.¢.Ñ"2Ô"2�”Ý"% d¤mÑ"4Ô"4�”Ø”	—’ ¤Ñ.Ô.Ð.Ð.à45Ð5�” $¤/àŒI�NŠN˜1˜aÑ Ô Ð Øœ)Ÿ.š.Ñ*Ô*ˆDŒKˆKð ”{ÐGÐGÐ$9¸D¼KÑ$GÑGÔGÐGØå”L Ô!5°tÑ<Ô<ˆ	àŒ	�Š�tÔ+¨dÔ.@Ñ@ÑAÔAÐAØˆØ ð 	5ð 	5‰JˆC�Ø�fŠ}ˆ}Ø�Ø! E§N¢NÑ$4Ô$4Ñ4ˆIˆIØð 	0Ø×$Ò$ YÑ/Ô/Ð/ØŒ	�Š�tÔ+Ñ,Ô,Ð,ØŒ	�Š˜	Ñ"Ô"Ð"Ð"Ð"r   c                ó$  — g }| j                              ¦   «         D ]'}|                     | j         |         j        ¦  «         Œ(| j        t
          k    rÇddlm}  || j        d¦  «        \  | _	        | _
        | _        t          j        t          | ¦  «        }t          | j                              ¦   «         ¦  «        }|D ]Z\  }}t          ¦   «         }|j        |_        |j        |_        |j        |_        |j        |_        ||                     ¦   «         z   }Œ[t.          t1          | j         ¦  «        t2          z  z   }|t1          |¦  «        k    sJ ‚|                     t5          |¦  «        ¦  «         t7          |¦  «        dz  }	d|	z
  dz  }
|
S )Nr   rš   rœ   ì   ÿÿ l   º/ac )rB   rT   Úappendr^   r1   r0   r£   r›   r=   r¤   r¥   r¦   r   rÆ   r8   r@   rA   r?   r³   r(   r´   rµ   rÇ   r5   r6   r¡   r]   Úsum)rD   rÌ   Ú	checksumsr?   r›   rB   rH   Ú	sfntEntryÚdirectory_endra   Úchecksumadjustments              r   Ú_calcMasterChecksumzSFNTWriter._calcMasterChecksum{  s�  € àˆ	Ø”;×#Ò#Ñ%Ô%ð 	8ð 	8ˆCØ×Ò˜Tœ[¨Ô-Ô6Ñ7Ô7Ð7Ð7àÔÕ"4Ò4Ð4à6Ð6Ð6Ð6Ð6Ð6àDRÀNØ” ñEô EÑAˆDÔ˜dÔ0°$´/õ  œÕ%8¸$Ñ?Ô?ˆIÝ˜DœK×-Ò-Ñ/Ô/Ñ0Ô0ˆFØ$ð =ð =‘
��UÝ.Ñ0Ô0�	Ø %¤	�	”Ø%*¤^�	Ô"Ø#(Ô#3�	Ô Ø#(Ô#3�	Ô Ø%¨	×(:Ò(:Ñ(<Ô(<Ñ<�	�	å)­C°´Ñ,<Ô,<Õ?UÑ,UÑUˆØ¥ I¡¤Ò.Ð.Ð.Ð.à×Ò� iÑ0Ô0Ñ1Ô1Ð1Ý�y‘>”> JÑ.ˆà(¨8Ñ3°zÑAÐØ!Ð!r   c                óä   — |                       |¦  «        }| j                             | j        d         j        dz   ¦  «         | j                             t          j        d|¦  «        ¦  «         d S )NrX   rY   z>L)rÖ   r,   r   rB   r(   rª   r¾   rÆ   )rD   rÌ   rÕ   s      r   rÈ   zSFNTWriter.writeMasterChecksum›  s`   € Ø!×5Ò5°iÑ@Ô@ÐàŒ	�Š�t”{ 6Ô*Ô1°AÑ5Ñ6Ô6Ð6ØŒ	�Š�œ DÐ*<Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r   c                ó   — dS ©NFr}   rU   s    r   ÚreordersTableszSFNTWriter.reordersTables¡  s   € Øˆur   )r$   NN)ry   rz   r{   r   rI   r­   r¶   rb   rg   rÖ   rÈ   rÚ   r}   r   r   r“   r“   É   s±   € € € € € ð#ð #ð #ð, 'ØØð/$ð /$ð /$ð /$ðb!ð !ð !ð"ð "ð "ð< ð  ð  ðE#ð E#ð E#ðN"ð "ð "ð@?ð ?ð ?ðð ð ð ð r   r“   a  
		> # big endian
		TTCTag:                  4s # "ttcf"
		Version:                 L  # 0x00010000 or 0x00020000
		numFonts:                L  # number of fonts
		# OffsetTable[numFonts]: L  # array with offsets from beginning of file
		# ulDsigTag:             L  # version 2.0 only
		# ulDsigLength:          L  # version 2.0 only
		# ulDsigOffset:          L  # version 2.0 only
zä
		> # big endian
		sfntVersion:    4s
		numTables:      H    # number of tables
		searchRange:    H    # (max2 <= numTables)*16
		entrySelector:  H    # log2(max2 <= numTables)
		rangeShift:     H    # numTables*16-searchRange
zc
		> # big endian
		tag:            4s
		checkSum:       L
		offset:         L
		length:         L
ab  
		> # big endian
		signature:      4s   # "wOFF"
		sfntVersion:    4s
		length:         L    # total woff file size
		numTables:      H    # number of tables
		reserved:       H    # set to 0
		totalSfntSize:  L    # uncompressed size
		majorVersion:   H    # major version of WOFF file
		minorVersion:   H    # minor version of WOFF file
		metaOffset:     L    # offset to metadata block
		metaLength:     L    # length of compressed metadata
		metaOrigLength: L    # length of uncompressed metadata
		privOffset:     L    # offset to private data block
		privLength:     L    # length of private data block
zº
		> # big endian
		tag:            4s
		offset:         L
		length:         L    # compressed length
		origLength:     L    # original length
		checkSum:       L    # original checksum
c                  óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )r1   c                ó   — d| _         d S rÙ   )r±   rU   s    r   rI   zDirectoryEntry.__init__é  s   € Ø!ˆÔÐÐr   c                ól   — t          j        | j        |                     | j        ¦  «        | ¦  «         d S rN   )r   r7   Úformatr   r¨   )rD   r,   s     r   r>   zDirectoryEntry.fromFileì  s,   € ÝŒ�t”{ D§I¢I¨d¬oÑ$>Ô$>ÀÑEÔEÐEÐEÐEr   c                ó<   — t          j        | j        || ¦  «         d S rN   )r   r7   rÞ   )rD   Ústrs     r   Ú
fromStringzDirectoryEntry.fromStringï  s   € ÝŒ�t”{ C¨Ñ.Ô.Ð.Ð.Ð.r   c                ó6   — t          j        | j        | ¦  «        S rN   )r   rÆ   rÞ   rU   s    r   rÇ   zDirectoryEntry.toStringò  s   € ÝŒ|˜DœK¨Ñ.Ô.Ð.r   c                ó¦   — t          | d¦  «        r$d| j        j        | j        t	          | ¦  «        fz  S d| j        j        t	          | ¦  «        fz  S )Nr?   z<%s '%s' at %x>z
<%s at %x>)r½   Ú	__class__ry   r?   ÚidrU   s    r   Ú__repr__zDirectoryEntry.__repr__õ  sO   € Ý�4˜ÑÔð 	FØ$¨¬Ô(?ÀÄÍ2ÈdÉ8Ì8Ð'TÑTÐTà 4¤>Ô#:½B¸t¹H¼HÐ"EÑEÐEr   c                óö   — |                      | j        ¦  «         |                     | j        ¦  «        }t	          |¦  «        | j        k    sJ ‚t          | j        d¦  «        r|                      |¦  «        }|S )NÚ
decodeData)r   r(   r   rµ   r6   r½   rä   rè   ©rD   r,   rG   s      r   r\   zDirectoryEntry.loadDataû  sl   € Ø�	Š	�$”+ÑÔÐØ�yŠy˜œÑ%Ô%ˆÝ�4‰yŒy˜DœKÒ'Ð'Ð'Ð'Ý�4”> <Ñ0Ô0ð 	)Ø—?’? 4Ñ(Ô(ˆDØˆr   c                óà   — t          | j        d¦  «        r|                      |¦  «        }t          |¦  «        | _        |                     | j        ¦  «         |                     |¦  «         d S )NÚ
encodeData)r½   rä   rë   r6   rµ   r   r(   rª   ré   s      r   r²   zDirectoryEntry.saveData  s`   € Ý�4”> <Ñ0Ô0ð 	)Ø—?’? 4Ñ(Ô(ˆDÝ˜$‘i”iˆŒØ�	Š	�$”+ÑÔÐØ�
Š
�4ÑÔÐÐÐr   c                ó   — |S rN   r}   )rD   ÚrawDatas     r   rè   zDirectoryEntry.decodeData
  s   € Øˆr   c                ó   — |S rN   r}   )rD   rG   s     r   rë   zDirectoryEntry.encodeData  s   € Øˆr   N)ry   rz   r{   rI   r>   rá   rÇ   ræ   r\   r²   rè   rë   r}   r   r   r1   r1   è  s¡   € € € € € ð"ð "ð "ðFð Fð Fð/ð /ð /ð/ð /ð /ðFð Fð Fðð ð ðð ð ðð ð ðð ð ð ð r   r1   c                  ó   — e Zd ZeZeZdS )r0   N)ry   rz   r{   ÚsfntDirectoryEntryFormatrÞ   r¡   r¨   r}   r   r   r0   r0     s   € € € € € Ø%€FØ'€J€J€Jr   r0   c                  ó2   ‡ — e Zd ZeZeZˆ fd„Zd„ Zd„ Z	ˆ xZ
S )r9   c                óœ   •— t          t          | ¦  «                             ¦   «          t          t          d¦  «        st          | _        d S d S )NÚzlibCompressionLevel)Úsuperr9   rI   r½   ÚZLIB_COMPRESSION_LEVELró   )rD   rä   s    €r   rI   zWOFFDirectoryEntry.__init__  sN   ø€ ÝÕ  $Ñ'Ô'×0Ò0Ñ2Ô2Ð2õ Õ)Ð+AÑBÔBð 	?Ý(>ˆDÔ%Ð%Ð%ð	?ð 	?r   c                ó¶   — dd l }| j        | j        k    r|}nA| j        | j        k     sJ ‚|                     |¦  «        }t	          |¦  «        | j        k    sJ ‚|S ©Nr   )rŽ   rµ   r´   Ú
decompressr6   )rD   rí   rŽ   rG   s       r   rè   zWOFFDirectoryEntry.decodeData%  se   € ØˆˆˆàŒ;˜$œ/Ò)Ð)ØˆDˆDà”; ¤Ò0Ð0Ð0Ð0Ø—?’? 7Ñ+Ô+ˆDÝ�t‘9”9 ¤Ò/Ð/Ð/Ð/Øˆr   c                óî   — t          |¦  «        | _        | j        st          || j        ¦  «        }| j        st          |¦  «        | j        k    r|}| j        | _        n|}t          |¦  «        | _        |S rN   )r6   r´   r±   rŠ   ró   rµ   )rD   rG   ÚcompressedDatarí   s       r   rë   zWOFFDirectoryEntry.encodeData0  ss   € Ý˜d™)œ)ˆŒØÔ ð 	GÝ% d¨DÔ,EÑFÔFˆNØÔð 	'¥ NÑ 3Ô 3°t´Ò FÐ FàˆGØœ/ˆDŒKˆKà$ˆGÝ˜g™,œ,ˆDŒKØˆr   )ry   rz   r{   ÚwoffDirectoryEntryFormatrÞ   ÚwoffDirectoryEntrySizer¨   rI   rè   rë   Ú__classcell__)rä   s   @r   r9   r9     s`   ø€ € € € € Ø%€FØ'€Jð	?ð 	?ð 	?ð 	?ð 	?ð	ð 	ð 	ðð ð ð ð ð ð r   r9   c                  ó    — e Zd ZdZdd„Zd„ ZdS )rC   r#   Nc                ór  — d | _         d | _        d | _        d | _        |�r|j         | _         |j        | _        |j        rŽ|j                             |j        ¦  «         |j                             |j        ¦  «        }t          |¦  «        |j        k    sJ ‚|  
                    |¦  «        }t          |¦  «        |j        k    sJ ‚|| _        |j        rc|j                             |j        ¦  «         |j                             |j        ¦  «        }t          |¦  «        |j        k    sJ ‚|| _        d S d S d S rN   )r»   r¼   r¿   rÃ   rÂ   r,   r   rÁ   r   r6   Ú_decompressrÀ   rÅ   rÄ   )rD   Úreaderrí   rG   s       r   rI   zWOFFFlavorData.__init__A  s=  € Ø ˆÔØ ˆÔØˆŒØˆŒØñ 	%Ø &Ô 3ˆDÔØ &Ô 3ˆDÔØÔ ð %Ø”× Ò  Ô!2Ñ3Ô3Ð3Ø œ+×*Ò*¨6Ô+<Ñ=Ô=�Ý˜7‘|”| vÔ'8Ò8Ð8Ð8Ð8Ø×'Ò'¨Ñ0Ô0�Ý˜4‘y”y FÔ$9Ò9Ð9Ð9Ð9Ø $�”ØÔ ð %Ø”× Ò  Ô!2Ñ3Ô3Ð3Ø”{×'Ò'¨Ô(9Ñ:Ô:�Ý˜4‘y”y FÔ$5Ò5Ð5Ð5Ð5Ø $�”��ð	%ð 	%ð%ð %r   c                ó4   — dd l }|                     |¦  «        S r÷   )rŽ   rø   )rD   rí   rŽ   s      r   r   zWOFFFlavorData._decompressV  s   € Øˆˆˆà�Š˜wÑ'Ô'Ð'r   rN   )ry   rz   r{   ÚFlavorrI   r   r}   r   r   rC   rC   >  s<   € € € € € Ø€Fð%ð %ð %ð %ð*(ð (ð (ð (ð (r   rC   c                ó8  — t          | ¦  «        dz  }|r| dd|z
  z  z  } d}d}|dz  dk    sJ ‚t          dt          | ¦  «        |¦  «        D ]L}| |||z   …         }t          j        dt          |¦  «        dz  z  |¦  «        }|t	          |¦  «        z   dz  }ŒM|S )a,  Calculate the checksum for an arbitrary block of data.

    If the data length is not a multiple of four, it assumes
    it is to be padded with null byte.

            >>> print(calcChecksum(b"abcd"))
            1633837924
            >>> print(calcChecksum(b"abcdxyz"))
            3655064932
    r   r�   r   i   ú>%dLrÏ   )r6   r<   r¾   r7   rÑ   )rG   Ú	remainderÚvalueÚ	blockSizer)   ÚblockÚlongss          r   r]   r]   \  s½   € õ �D‘	”	˜A‘€IØð (Ø�˜˜Y™Ñ'Ñ'ˆØ€EØ€IØ�q‰=˜AÒÐÐÐÝ�1•c˜$‘i”i Ñ+Ô+ð 2ð 2ˆØ�Q˜˜Y™Ð&Ô'ˆÝ”˜f­¨E©
¬
°a©Ñ8¸%Ñ@Ô@ˆØ�˜U™œÑ# zÑ1ˆˆØ€Lr   c                ó  — |                       d¦  «         |                      t          ¦  «        }t          |¦  «        t          k    rt	          d¦  «        ‚t          ¦   «         }t          j        t          ||¦  «         |j	        dk    rt	          d¦  «        ‚|j
        dk    s|j
        dk    sJ d|j
        z  ¦   «         ‚t          j        d|j        z  |                      |j        d	z  ¦  «        ¦  «        |_        |j
        dk    r	 |S )
Nr   r!   ÚttcfzNot a Font Collectioné   i   zunrecognized TTC version 0x%08xr  r   )r   r   ÚttcHeaderSizer6   r	   r   r   r7   ÚttcHeaderFormatÚTTCTagÚVersionr¾   r3   r4   )r,   rG   rD   s      r   r2   r2   t  sû   € Ø‡I‚Iˆa�L„L€LØ�9Š9•]Ñ#Ô#€DÝ
ˆ4�y„y•MÒ!Ð!ÝÐBÑCÔCÐCÝÑÔ€DÝ„N•? D¨$Ñ/Ô/Ð/Ø„{�fÒÐÝÐ0Ñ1Ô1Ð1ØŒ<˜:Ò%Ð%¨¬¸Ò)CÐ)CÐ)CØ)¨D¬LÑ8ñ *DÔ)CÐ)Cõ ”}Ø�”Ñ §	¢	¨$¬-¸!Ñ*;Ñ <Ô <ñô €DÔð „|�zÒ!Ð!ØØ€Kr   c                ód  — t          ¦   «         }d|_        d|_        ||_        |                      d¦  «         |                      t          j        t          |¦  «        ¦  «         |  	                    ¦   «         }|                      t          j        d|j        z  gdg|j        z  ¢R Ž ¦  «         |S )Nr  r  r   r  )r   r  r  r3   r   rª   r   rÆ   r  ro   r¾   )r,   r3   rD   r(   s       r   ÚwriteTTCHeaderr  ˆ  s•   € ÝÑÔ€DØ€D„KØ€D„LØ€D„MØ‡I‚Iˆa�L„L€LØ‡J‚J�wŒ|�O¨TÑ2Ô2Ñ3Ô3Ð3Ø�YŠY‰[Œ[€FØ‡J‚J�vŒ{˜6 D¤MÑ1ÐJ°a°S¸4¼=Ñ5HÐJÐJÐJÑKÔKÐKØ€Mr   Ú__main__)5Ú__doc__Ú
__future__r   Úcollections.abcr   Úior   Útypesr   ÚfontTools.misc.textToolsr   ÚfontTools.miscr   r£   r	   r
   r¾   Úcollectionsr   ÚloggingÚ	getLoggerry   r_   r   r   rõ   r�   r�   rŠ   r“   r  Úcalcsizer  r8   r5   rð   r¡   r;   r:   rû   rü   r1   r0   r9   rC   r]   r2   r  ÚsysÚdoctestÚexitÚtestmodÚfailedr}   r   r   ú<module>r%     s<  ððð ð #Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø (Ð (Ð (Ð (Ð (Ð (Ø "Ð "Ð "Ð "Ð "Ð "Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø €€€ð €gÔ˜Ñ!Ô!€ð|$ð |$ð |$ð |$ð |$�ñ |$ô |$ð |$ð@ Ð ð €
ð 	ØØØØ	Ø	Ø	Ø	Ø
ðð €ð 0ð Bð Bð Bð Bð&Yð Yð Yð Yð Y�ñ Yô Yð Yð|	€ð !�Ô  Ñ1Ô1€ðÐ ð %�GÔ$Ð%8Ñ9Ô9Ð ðÐ ð *˜Ô)Ð*BÑCÔCÐ ðÐ ð" %�GÔ$Ð%8Ñ9Ô9Ð ðÐ ð *˜Ô)Ð*BÑCÔCÐ ð&ð &ð &ð &ð &�Vñ &ô &ð &ðR(ð (ð (ð (ð (˜ñ (ô (ð (ð
%ð %ð %ð %ð %˜ñ %ô %ð %ðP(ð (ð (ð (ð (ñ (ô (ð (ð<ð ð ð0ð ð ð(	ð 	ð 	ð ˆzÒÐØ€J€J€JØ€N€N€Nà€C„Hˆ_ˆWŒ_ÑÔÔ%Ñ&Ô&Ð&Ð&Ð&ð	 Ðr   