
     i                     L   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j        e          Zd
Z ej        e          ZdZ ej        e          Z G d de
j
                  Z G d de          Ze G 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                   *    e Zd ZdZd Zd Zd Z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           	         g | _         t          j        t          |d t                   |            | j        dk    r t                              d| j                   | j        x}}t          j        d|||dz                      d         | _
        |dz  }| j
        dk    rT||d          }g }t          | j
                  D ][}||t          z  |dz   t          z           }t          j        t          |t                                }	|                    |	           \|D ]}
|
j        |z   }||
j        z   }|||         }d}|                    d          rZdd l}t)          |          }|                    d d|	          5 }|                                }d d d            n# 1 swxY w Y   ~d
}t/          |d          }| j                             t1          ||
j        |
j        |                     d S 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possubTableStartdata2entriesirecord_datadocIndexEntryentrystartenddoc
compressedr*   bytesIO	gunzippers                     g/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/fontTools/ttLib/tables/S_V_G_.py	decompileztable_S_V_G_.decompile>   sg    	|T*;+;*;%<dCCC<1KKK   #66m -d3q=.ABB1Eq?QJEG4?++ 	. 	.#2367!e2633
 !(,k;M;O;O! ! }----   *]:e0059o"
>>+.. &KKK%cllGtS'BB /i'nn../ / / / / / / / / / / / / / /!%JC))##U%79I:VV   9  s    F!!F%	(F%	c                    d}t           }g }g }t          | j                  }t          j        d|          }|                    |           t          |          t          |z  z   }i }	t          | dd          }
t          | j                  D ]m\  }}t          |t          t          f          rt          | }|| j        |<   t          |j        d          }|
s|j        r|                    d          sdd l}t%                      }|                    d d|d	          5 }|                    |           d d d            n# 1 swxY w Y   |                                }t          |          t          |          k     r|}~~t          |          }||	v r	|	|         }n!|}||z  }||	|<   |                    |           t          j        d
|j        |j        ||          }|                    |           o|                    |           t3          |          }d}t          j        d|||          }||g}t3          |          }|S )Nr   r   r>   Fr   )encodingr   w)r   mtimez>HHLLz>HLL)r   lenr   r    packr&   r#   getattr	enumerate
isinstancelisttupler-   r   r1   r>   r)   r*   r   r+   writegetvaluer.   r/   extendr   )r0   r2   r   r   r   	entryListr!   datum	curOffsetseenDocsallCompressedr7   r=   docBytesr*   r?   gzippergzipped	docLength	docOffsetr:   
svgDocDatareservedheaderr1   s                            rA   compileztable_S_V_G_.compilem   s    	 	&&
D*--JJ!=
!JJ	lE::-- 	$ 	$FAs#e}-- &!3'"%Qsx':::H % %9L9L: : % !)) ]]4gQ]GG ,7MM(+++, , , , , , , , , , , , , , ,!**,,w<<#h--//&HWHI8##$X.		%	Y&	%."x(((K)3>9i E U####!!!y))
VW.A8LL
#s   !EE	
E	c                    t          | j                  D ]\  }}t          |t          t          f          rt          | }|| j        |<   |j        |j        d}|j        rd|d<    |j	        di | |
                                 |                    |j                   |
                                 |                    d           |
                                 d S )N)r.   r/   r	   r>   svgDoc)r`   )rJ   r   rK   rL   rM   r-   r.   r/   r>   begintagnewline
writecdatar1   endtag)r0   writerr2   r7   r=   attrss         rA   toXMLztable_S_V_G_.toXML   s    -- 	 	FAs#e}-- &!3'"%Q%(%5S^TTE~ (&'l#FO.....NNch'''NNMM(###NN	 	    c                    |dk    rt          | d          sg | _        t          |          }|                                }t	          |d                   }t	          |d                   }t          t          |                    dd                              }| j                            t          ||||                     d S t                              d||           d S )Nr`   r   r.   r/   r>   0zUnknown %s %s)hasattrr   r   stripintboolr   getr&   r-   r   r   )	r0   namerf   contentr2   r=   startGIDendGIDr>   s	            rA   fromXMLztable_S_V_G_.fromXML   s    84++ "!'""C))++C5011H|,--Fhuyys'C'CDDEEJLC6: N NOOOOOKKw77777rh   N)__name__
__module____qualname____doc__rB   r^   rg   rt    rh   rA   r   r   5   s\         - - -^4 4 4l  8 8 8 8 8rh   r   c                       e Zd Zd Zd ZdS )r%   c                 >    d | _         d | _        d | _        d | _        d S )Nr.   r/   r'   r(   r0   s    rA   __init__zDocumentIndexEntry.__init__   s'       rh   c                 F    d| j         d| j        d| j        d| j        S )NzstartGlyphID: z, endGlyphID: z, svgDocOffset: z, svgDocLength: r|   r}   s    rA   __repr__zDocumentIndexEntry.__repr__   s8         $///43D3D3DdFWFWY	
rh   N)ru   rv   rw   r~   r   ry   rh   rA   r%   r%      s2        ! ! !
 
 
 
 
rh   r%   c                   H    e Zd ZU eed<   eed<   eed<   dZeed<   d Zd Z	dS )	r-   r1   r.   r/   Fr>   c                 <    t          |           d d         |         S N   )r   )r0   indexs     rA   __getitem__zSVGDocument.__getitem__   s    t}}RaR ''rh   c                     dS r   ry   r}   s    rA   __len__zSVGDocument.__len__   s    qrh   N)
ru   rv   rw   str__annotations__rm   r>   rn   r   r   ry   rh   rA   r-   r-      sb         
IIIOOOJ( ( (    rh   r-   ) rx   fontTools.misc.textToolsr   r   r   r   r   fontTools.miscr    r
   collections.abcr   dataclassesr   r   ior   r    logging	getLoggerru   r   r   calcsizer   r$   r#   r   objectr%   r-   ry   rh   rA   <module>r      s   & R Q Q Q Q Q Q Q Q Q Q Q Q Q " " " " " "       $ $ $ $ $ $ * * * * * * * *         g!! $7#L11    0w/0HII H8 H8 H8 H8 H8<, H8 H8 H8V
 
 
 
 
 
 
 
     (     rh   