
    ͏kh                     H   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j0                  e      ZdZ ej0                  e      Z G d de
j                        Z G d de      Ze G d de             Zy	)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y)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k7  r t        j                  d| j
                         | j                  x}}t        j                  d|||dz          d   | _
        |dz  }| j                  dkD  r/||d  }g }t        | j                        D ]L  }||t        z  |dz   t        z   }t        j                  t        |t                     }	|j                  |	       N |D ]  }
|
j                   |z   }||
j"                  z   }||| }d}|j%                  d      r?dd l}t)        |      }|j+                  d d|	      5 }|j-                         }d d d        ~d
}t/        |d      }| j                   j                  t1        ||
j2                  |
j4                  |              y y # 1 sw Y   WxY w)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                     Y/var/www/teggl/fontify/venv/lib/python3.12/site-packages/fontTools/ttLib/tables/S_V_G_.py	decompileztable_S_V_G_.decompile>   s    	|T*;+;%<dC<<1KKK #666m --d3q.AB1Eq??QJEG4??+ 	.#2367!e263
 !(,k;M;O! }-	. ! **]:e0005o"
>>+.%clGtS'B /i'nn./!%JC)##U%7%79I9I:V ./ /s   )GG	c                 4   d}t         }g }g }t        | j                        }t        j                  d|      }|j                  |       t        |      t        |z  z   }i }	t        | dd      }
t        | j                        D ]A  \  }}t        |t        t        f      rt        | }|| j                  |<   t        |j                  d      }|
s|j                  ry|j!                  d      shdd l}t%               }|j'                  d d|d	      5 }|j)                  |       d d d        |j+                         }t        |      t        |      k  r|}~~t        |      }||	v r|	|   }n|}||z  }||	|<   |j                  |       t        j                  d
|j,                  |j.                  ||      }|j                  |       D |j1                  |       t3        |      }d}t        j                  d|||      }||g}t3        |      }|S # 1 sw Y   xY w)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*-J!=
!JJ	lE:- 	$FAs#e}-!3'"%Qsxx':H9L9L: !) ]]4gQ]G ,7MM(+,!**,w<#h-/&HWHI8#$X.	%	Y&	%."x(KK))3>>9iE U#=	$> 	!y)
VW.A8L
#3, ,s   HH	c                    t        | j                        D ]  \  }}t        |t        t        f      rt        | }|| j                  |<   |j                  |j                  d}|j                  rd|d<    |j                  di | |j                          |j                  |j                         |j                          |j                  d       |j                           y )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%(%5%5S^^TE~~&'l#FOO..NNchh'NNMM(#NN	    c                 h   |dk(  rt        | d      sg | _        t        |      }|j                         }t	        |d         }t	        |d         }t        t        |j                  dd                  }| j                  j                  t        ||||             y t        j                  d||       y )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1H|,-Fhuyys'CDEJLLC6: NOKKw7rh   N)__name__
__module____qualname____doc__rB   r^   rg   rt    rh   rA   r   r   5   s    -^4l8rh   r   c                       e Zd Zd Zd Zy)r%   c                 <    d | _         d | _        d | _        d | _        y )Nr.   r/   r'   r(   r0   s    rA   __init__zDocumentIndexEntry.__init__   s!       rh   c                 n    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__   s.       $//43D3DdFWFWY	
rh   N)ru   rv   rw   r~   r   ry   rh   rA   r%   r%      s    !
rh   r%   c                   F    e Zd ZU eed<   eed<   eed<   dZeed<   d Zd Z	y)	r-   r1   r.   r/   Fr>   c                 $    t        |       d d |   S N   )r   )r0   indexs     rA   __getitem__zSVGDocument.__getitem__   s    t}Ra ''rh   c                      yr   ry   r}   s    rA   __len__zSVGDocument.__len__   s    rh   N)
ru   rv   rw   str__annotations__rm   r>   rn   r   r   ry   rh   rA   r-   r-      s&    
IO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 "  $ *    g! $7##L1    0w//0HI H8<,, H8V
 
 (  rh   