a
    ¥Q•hü  ã                   @   sÐ   d Z ddlmZmZmZmZ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mZ dd	lZdd	lZe e¡Zd
Ze e¡ZdZe e¡ZG dd„ de
j
ƒZG dd„ deƒZeG dd„ deƒƒZd	S )aP  Compiles/decompiles SVG table.

https://docs.microsoft.com/en-us/typography/opentype/spec/svg

The XML format is:

.. code-block:: xml

	<SVG>
		<svgDoc endGlyphID="1" startGlyphID="1">
			<![CDATA[ <complete SVG doc> ]]
		</svgDoc>
	...
		<svgDoc endGlyphID="n" startGlyphID="m">
			<![CDATA[ <complete SVG doc> ]]
		</svgDoc>
	</SVG>
é    )Ú	bytesjoinÚsafeEvalÚstrjoinÚtobytesÚtostr)Ússtructé   )ÚDefaultTable)ÚSequence)Ú	dataclassÚastuple)ÚBytesIONzj
	>   # big endian
	version:                  H
	offsetToSVGDocIndex:      L
	reserved:                 L
z‡
	>   # big endian
	startGlyphID:             H
	endGlyphID:               H
	svgDocOffset:             L
	svgDocLength:             L
c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Útable_S_V_G_zÉScalable Vector Graphics table

    The ``SVG`` table contains representations for glyphs in the SVG
    image format.

    See also https://learn.microsoft.com/en-us/typography/opentype/spec/stat
    c              	   C   st  g | _ t t|d t… | ¡ | jdkr4t d| j¡ | j }}t	 d|||d … ¡d | _
|d7 }| j
dk�rp||d … }g }t| j
ƒD ]6}||t |d t … }t t|tƒ ¡}	| |	¡ qŠ|D ]¨}
|
j| }||
j }|||… }d}| d¡�rJdd l}t|ƒ}|jd d|d	��}| ¡ }W d   ƒ n1 �s:0    Y  ~d
}t|dƒ}| j  t||
j|
j|ƒ¡ qÆd S )Nr   z9Unknown SVG table version '%s'. Decompiling as version 0.ú>Hé   r   Fó   ‹Úr)ÚfileobjTÚutf_8)ÚdocListr   ÚunpackÚSVG_format_0ÚSVG_format_0SizeÚversionÚlogÚwarningÚoffsetToSVGDocIndexÚstructÚ
numEntriesÚrangeÚdoc_index_entry_format_0SizeÚdoc_index_entry_format_0ÚDocumentIndexEntryÚappendÚsvgDocOffsetÚsvgDocLengthÚ
startswithÚgzipr   ÚGzipFileÚreadr   ÚSVGDocumentÚstartGlyphIDÚ
endGlyphID)ÚselfÚdataÚttFontÚposZsubTableStartÚdata2ÚentriesÚiZrecord_dataZdocIndexEntryÚentryÚstartÚendÚdocÚ
compressedr'   ÚbytesIOZ	gunzipper© r:   úV/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/ttLib/tables/S_V_G_.pyÚ	decompile>   sV    
þ
ÿÿÿÿÿ

(
ÿztable_S_V_G_.decompilec              	   C   s¬  d}t }g }g }t| jƒ}t d|¡}| |¡ t|ƒt|  }i }	t| ddƒ}
t| jƒD �]\}}t	|t
tfƒr„t|Ž }|| j|< t|jdd�}|
sž|j�r| d¡�sdd l}tƒ }|jd d|dd	��}| |¡ W d   ƒ n1 sê0    Y  | ¡ }t|ƒt|ƒk �r|}~~t|ƒ}||	v �r2|	| }n|}||7 }||	|< | |¡ t d
|j|j||¡}| |¡ qZ| |¡ t|ƒ}d}t d|||¡}||g}t|ƒ}|S )Nr   r   r8   Fr   )Úencodingr   Úw)r   Úmtimez>HHLLz>HLL)r   Úlenr   r   Úpackr#   r    ÚgetattrÚ	enumerateÚ
isinstanceÚlistÚtupler*   r   r.   r8   r&   r'   r   r(   ÚwriteÚgetvaluer+   r,   Úextendr   )r-   r/   r   r   r   Z	entryListr   ÚdatumZ	curOffsetZseenDocsZallCompressedr3   r7   ZdocBytesr'   r9   ZgzipperZgzippedZ	docLengthZ	docOffsetr4   Z
svgDocDataÚreservedÚheaderr.   r:   r:   r;   Úcompilem   sZ    ÿ


ÿ(


ÿ
ztable_S_V_G_.compilec                 C   s’   t | jƒD ]‚\}}t|ttfƒr2t|Ž }|| j|< |j|jdœ}|jrNd|d< |j	di |¤Ž | 
¡  | |j¡ | 
¡  | d¡ | 
¡  q
d S )N)r+   r,   r   r8   ÚsvgDoc)rN   )rC   r   rD   rE   rF   r*   r+   r,   r8   ÚbegintagÚnewlineÚ
writecdatar.   Úendtag)r-   Úwriterr/   r3   r7   Úattrsr:   r:   r;   ÚtoXML£   s    

ztable_S_V_G_.toXMLc           	      C   s~   |dkrlt | dƒsg | _t|ƒ}| ¡ }t|d ƒ}t|d ƒ}tt| dd¡ƒƒ}| j t	||||ƒ¡ nt
 d||¡ d S )NrN   r   r+   r,   r8   Ú0zUnknown %s %s)Úhasattrr   r   ÚstripÚintÚboolr   Úgetr#   r*   r   r   )	r-   ÚnamerT   Úcontentr/   r7   ZstartGIDZendGIDr8   r:   r:   r;   ÚfromXML²   s    
ztable_S_V_G_.fromXMLN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   rM   rU   r^   r:   r:   r:   r;   r   5   s
   /6r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r"   c                 C   s   d | _ d | _d | _d | _d S )N©r+   r,   r$   r%   ©r-   r:   r:   r;   Ú__init__Á   s    zDocumentIndexEntry.__init__c                 C   s   d| j | j| j| jf S )NzDstartGlyphID: %s, endGlyphID: %s, svgDocOffset: %s, svgDocLength: %src   rd   r:   r:   r;   Ú__repr__Ç   s    ÿÿzDocumentIndexEntry.__repr__N)r_   r`   ra   re   rf   r:   r:   r:   r;   r"   À   s   r"   c                   @   sB   e Zd ZU eed< eed< eed< dZeed< dd„ Zdd	„ Z	d
S )r*   r.   r+   r,   Fr8   c                 C   s   t | ƒd d… | S ©Né   )r   )r-   Úindexr:   r:   r;   Ú__getitem__Û   s    zSVGDocument.__getitem__c                 C   s   dS rg   r:   rd   r:   r:   r;   Ú__len__Þ   s    zSVGDocument.__len__N)
r_   r`   ra   ÚstrÚ__annotations__rY   r8   rZ   rj   rk   r:   r:   r:   r;   r*   Î   s   
r*   ) rb   ÚfontTools.misc.textToolsr   r   r   r   r   ÚfontTools.miscr   Ú r	   Úcollections.abcr
   Údataclassesr   r   Úior   r   ÚloggingÚ	getLoggerr_   r   r   Úcalcsizer   r!   r    r   Úobjectr"   r*   r:   r:   r:   r;   Ú<module>   s$   


 