a
    Qh                     @   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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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   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$   


 