a
    ZXh                     @   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_zScalable 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| qd 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subTableStartZdata2entriesiZrecord_dataZdocIndexEntryentrystartenddoc
compressedr'   bytesIOZ	gunzipper r9   b/var/www/viveiro_mudafortebrasil/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rt| }|| j|< t|jdd}|
s|jr|dsdd l}t }|jd d|dd	}|| W d    n1 s0    Y  | }t|t|k r|}~~t|}||	v r2|	| }n|}||7 }||	|< || td
|j|j||}|| qZ|| t|}d}td|||}||g}t|}|S )Nr   r   r7   Fr   )encodingr   w)r   mtimez>HHLLz>HLL)r   lenr   r   packr#   r    getattr	enumerate
isinstancelisttupler*   r   r.   r7   r&   r'   r   r(   writegetvaluer+   r,   extendr   )r-   r/   r   r   r   Z	entryListr   ZdatumZ	curOffsetZseenDocsZallCompressedr2   r6   ZdocBytesr'   r8   ZgzipperZgzippedZ	docLengthZ	docOffsetr3   Z
svgDocDatareservedheaderr.   r9   r9   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   r7   svgDoc)rL   )rB   r   rC   rD   rE   r*   r+   r,   r7   ZbegintagnewlineZ
writecdatar.   Zendtag)r-   writerr/   r2   r6   attrsr9   r9   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 )NrL   r   r+   r,   r7   0zUnknown %s %s)hasattrr   r   stripintboolr   getr#   r*   r   r   )	r-   namerO   contentr/   r6   ZstartGIDZendGIDr7   r9   r9   r:   fromXML   s    
ztable_S_V_G_.fromXMLN)__name__
__module____qualname____doc__r;   rK   rP   rY   r9   r9   r9   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-   r9   r9   r:   __init__   s    zDocumentIndexEntry.__init__c                 C   s   d| j | j| j| jf S )NzDstartGlyphID: %s, endGlyphID: %s, svgDocOffset: %s, svgDocLength: %sr^   r_   r9   r9   r:   __repr__   s    zDocumentIndexEntry.__repr__N)rZ   r[   r\   r`   ra   r9   r9   r9   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,   Fr7   c                 C   s   t | d d | S N   )r   )r-   indexr9   r9   r:   __getitem__   s    zSVGDocument.__getitem__c                 C   s   dS rb   r9   r_   r9   r9   r:   __len__   s    zSVGDocument.__len__N)
rZ   r[   r\   str__annotations__rT   r7   rU   re   rf   r9   r9   r9   r:   r*      s   
r*   ) r]   ZfontTools.misc.textToolsr   r   r   r   r   ZfontTools.miscr    r	   collections.abcr
   Zdataclassesr   r   ior   r   logging	getLoggerrZ   r   r   calcsizer   r!   r    r   objectr"   r*   r9   r9   r9   r:   <module>   s$   


 