Ë
    £ehŒ  ã                   ó0  — d Z ddlmZ ddlmZ ddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZ ddlmZ ddlmZ d	„ Zd
„ Z G d„ d«      Z G d„ de«      Zdd„Zd d„Z	 	 	 	 	 d!dededededededefd„Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)"zHelpers for writing unit tests.é    )ÚIterable)ÚBytesION)ÚTestCase)ÚConfig©Útobytes)Ú	XMLWriterc                 ó€  — t        «       }d}t        | t        «      r|| z  }nmt        | t        «      r|t	        | d«      z  }nMt        | t
        «      r|dj                  d„ | D «       «      z  }n!t        dt        | «      j                  z  «      ‚|dz  }|j                  j                  |d«       |j                  d   S )	aA  Parses a snippet of XML.

    Input can be either a single string (unicode or UTF-8 bytes), or a
    a sequence of strings.

    The result is in the same format that would be returned by
    XMLReader, but the parser imposes no constraints on the root
    element so it can be called on small snippets of TTX files.
    s   <root>úutf-8ó    c              3   ó4   K  — | ]  }t        |d «      –— Œ y­w)r   Nr   )Ú.0Úss     úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/misc/testTools.pyú	<genexpr>zparseXML.<locals>.<genexpr>"   s   è ø€ Ò@°œ  7×+Ñ@ùs   ‚z0expected string or sequence of strings; found %rs   </root>é   é   )ÚTestXMLReader_Ú
isinstanceÚbytesÚstrr   r   ÚjoinÚ	TypeErrorÚtypeÚ__name__ÚparserÚParseÚroot)Ú
xmlSnippetÚreaderÚxmls      r   ÚparseXMLr"      s´   € ô Ó€FØ
€CÜ�*œeÔ$ØˆzÑ‰Ü	�J¤Ô	$ØŒw�z 7Ó+Ñ+‰Ü	�J¤Ô	)Øˆs�x‰xÑ@°ZÔ@Ó@Ñ@‰äØ>Ü�:Ó×'Ñ'ñ(ó
ð 	
ð ˆ:Ñ€CØ
‡M�M×Ñ˜˜QÔØ�;‰;�q‰>Ðr   c                 óô   — t        |j                  «       «      D �cg c]  }t        |t        «      rŒ|‘Œ }}|D ]  \  }}}|j	                  |||| «       Œ t        |d«      r|j                  «        |S c c}w )NÚpopulateDefaults)r"   Ústripr   r   ÚfromXMLÚhasattrr$   )ÚfontÚ	parseIntor   ÚeÚ
parsed_xmlÚnameÚattrsÚcontents           r   ÚparseXmlIntor/   -   sy   € Ü% j×&6Ñ&6Ó&8Ó9ÖT˜ÄÈAÌsÕAS’!ÐT€JÐTØ *ò 6Ñˆˆe�WØ×Ñ˜$  w°Õ5ð6äˆyÐ,Ô-Ø×"Ñ"Ô$ØÐùò Us
   œA5²A5c                   óV   — e Zd Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zy)ÚFakeFontc                 ó    — || _         t        |«      D ��ci c]  \  }}||“Œ
 c}}| _        d| _        i | _        t        «       | _        y c c}}w )NF)ÚglyphOrder_Ú	enumerateÚreverseGlyphOrderDict_ÚlazyÚtablesr   Úcfg)ÚselfÚglyphsÚiÚgs       r   Ú__init__zFakeFont.__init__7   sG   € Ø!ˆÔÜ8AÀ&Ó8I×&J±°°1 q¨!¡tÓ&JˆÔ#ØˆŒ	ØˆŒÜ“8ˆ�ùó 'Ks   –A
c                 ó   — || j                   v S ©N©r7   ©r9   Útags     r   Ú__contains__zFakeFont.__contains__>   s   € Ø�d—k‘kÐ!Ð!r   c                 ó    — | j                   |   S r?   r@   rA   s     r   Ú__getitem__zFakeFont.__getitem__A   s   € Ø�{‰{˜3ÑÐr   c                 ó"   — || j                   |<   y r?   r@   )r9   rB   Útables      r   Ú__setitem__zFakeFont.__setitem__D   s   € Ø ˆ�‰�CÒr   Nc                 ó:   — | j                   j                  ||«      S r?   )r7   Úget)r9   rB   Údefaults      r   rJ   zFakeFont.getG   s   € Ø�{‰{�‰˜s GÓ,Ð,r   c                 ó    — | j                   |   S r?   ©r5   ©r9   r,   s     r   Ú
getGlyphIDzFakeFont.getGlyphIDJ   s   € Ø×*Ñ*¨4Ñ0Ð0r   c                 óJ   — |D �cg c]  }| j                  |«      ‘Œ c}S c c}w r?   )rO   ©r9   ÚlstÚgids      r   ÚgetGlyphIDManyzFakeFont.getGlyphIDManyM   s   € Ø03Ö4¨�—‘ Õ$Ò4Ð4ùÒ4ó   … c                 óZ   — |t        | j                  «      k  r| j                  |   S d|z  S )Nz	glyph%.5d)Úlenr3   )r9   ÚglyphIDs     r   ÚgetGlyphNamezFakeFont.getGlyphNameP   s1   € Ø”S˜×)Ñ)Ó*Ò*Ø×#Ñ# GÑ,Ð,à Ñ(Ð(r   c                 óJ   — |D �cg c]  }| j                  |«      ‘Œ c}S c c}w r?   )rY   rQ   s      r   ÚgetGlyphNameManyzFakeFont.getGlyphNameManyV   s!   € Ø25Ö6¨3�×!Ñ! #Õ&Ò6Ð6ùÒ6rU   c                 ó   — | j                   S r?   )r3   ©r9   s    r   ÚgetGlyphOrderzFakeFont.getGlyphOrderY   ó   € Ø×ÑÐr   c                 ó   — | j                   S r?   rM   r]   s    r   ÚgetReverseGlyphMapzFakeFont.getReverseGlyphMap\   s   € Ø×*Ñ*Ð*r   c                 ó4   — t        | j                  «       «      S r?   )Úsortedr^   r]   s    r   ÚgetGlyphNameszFakeFont.getGlyphNames_   s   € Ü�d×(Ñ(Ó*Ó+Ð+r   r?   )r   Ú
__module__Ú__qualname__r=   rC   rE   rH   rJ   rO   rT   rY   r[   r^   ra   rd   © r   r   r1   r1   6   s>   „ òò"ò ò!ó-ò1ò5ò)ò7ò ò+ó,r   r1   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)r   c                 óæ   — ddl m}  |«       | _        | j                  | j                  _        | j
                  | j                  _        | j                  | j                  _        d | _	        g | _
        y )Nr   )ÚParserCreate)Úxml.parsers.expatrj   r   ÚstartElement_ÚStartElementHandlerÚendElement_ÚEndElementHandlerÚaddCharacterData_ÚCharacterDataHandlerr   Ústack)r9   rj   s     r   r=   zTestXMLReader_.__init__d   sR   € Ý2á"“nˆŒØ*.×*<Ñ*<ˆ�‰Ô'Ø(,×(8Ñ(8ˆ�‰Ô%Ø+/×+AÑ+Aˆ�‰Ô(ØˆŒ	Øˆ�
r   c                 ó®   — ||g f}| j                   r"| j                   d   d   j                  |«       n|| _        | j                   j                  |«       y ©Néÿÿÿÿr   )rr   Úappendr   )r9   r,   r-   Úelements       r   rl   zTestXMLReader_.startElement_n   sI   € Ø˜ Ð#ˆØ�:Š:Ø�J‰J�r‰N˜1Ñ×$Ñ$ WÕ-àˆDŒIØ�
‰
×Ñ˜'Õ"r   c                 ó8   — | j                   j                  «        y r?   )rr   ÚpoprN   s     r   rn   zTestXMLReader_.endElement_v   s   € Ø�
‰
�‰Õr   c                 óF   — | j                   d   d   j                  |«       y rt   )rr   rv   )r9   Údatas     r   rp   z TestXMLReader_.addCharacterData_y   s   € Ø�
‰
�2‰�qÑ× Ñ  Õ&r   N)r   re   rf   r=   rl   rn   rp   rg   r   r   r   r   c   s   „ òò#òó'r   r   c                 óš   — t        t        «       | ¬«      }|j                  j                  d«       |j                  j	                  «        |S )N)Ú
newlinestrr   )r	   r   ÚfileÚseekÚtruncate)r}   Úwriters     r   ÚmakeXMLWriterr‚   }   s7   € ä”w“y¨ZÔ8€Fà
‡K�K×Ñ�QÔØ
‡K�K×ÑÔØ€Mr   c                 óÀ   — t        «       } | ||«       |j                  j                  «       j                  d«      }|j	                  d«      sJ ‚|j                  «       S )zºCall the passed toXML function and return the written content as a
    list of lines (unicode strings).
    Result is stripped of XML declaration and OS-specific newline characters.
    r   ú
)r‚   r~   ÚgetvalueÚdecodeÚendswithÚ
splitlines)ÚfuncÚttFontr�   r!   s       r   ÚgetXMLr‹   †   sQ   € ô
 ‹_€FÙˆ�ÔØ
�+‰+×
Ñ
Ó
 ×
'Ñ
'¨Ó
0€Cà�<‰<˜ÔÐÐØ�>‰>ÓÐr   ÚstringÚttLibVersionÚcheckSumAdjustmentÚmodifiedÚcreatedÚsfntVersionÚreturnc                 ó   — |rt        j                  dd| «      } |rt        j                  dd| «      } |rt        j                  dd| «      } |rt        j                  dd| «      } |rt        j                  dd| «      } | S )zJStrip stuff like ttLibVersion, checksums, timestamps, etc. from TTX dumps.z ttLibVersion="[^"]+"Ú z sfntVersion="[^"]+"z#<checkSumAdjustment value="[^"]+"/>z<modified value="[^"]+"/>z<created value="[^"]+"/>)ÚreÚsub)rŒ   r�   rŽ   r�   r�   r‘   s         r   ÚstripVariableItemsFromTTXr—   “   sw   € ñ Ü—‘Ð/°°VÓ<ˆáÜ—‘Ð.°°FÓ;ˆáÜ—‘Ð=¸rÀ6ÓJˆÙÜ—‘Ð3°R¸Ó@ˆÙÜ—‘Ð2°B¸Ó?ˆØ€Mr   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚMockFontzYA font-like object that automatically adds any looked up glyphname
    to its glyphOrder.c                 ód   ‡ — dg‰ _          G ˆ fd„dt        «      } |ddi«      ‰ _        d‰ _        y )Nz.notdefc                   ó   •— e Zd Zˆ fd„Zy)ú)MockFont.__init__.<locals>.AllocatingDictc                 ó^   •— ‰j                   j                  |«       t        | «      }|| |<   |S r?   )Ú_glyphOrderrv   rW   )ÚreverseDictÚkeyrS   r9   s      €r   Ú__missing__z5MockFont.__init__.<locals>.AllocatingDict.__missing__´   s0   ø€ Ø× Ñ ×'Ñ'¨Ô,Ü˜+Ó&�Ø#&�˜CÑ Ø�
r   N)r   re   rf   r¡   r]   s   €r   ÚAllocatingDictrœ   ³   s   ø„ õr   r¢   r   F)rž   ÚdictÚ_reverseGlyphOrderr6   )r9   r¢   s   ` r   r=   zMockFont.__init__°   s3   ø€ Ø%˜;ˆÔö	œTô 	ñ #1°)¸Q°Ó"@ˆÔØˆ�	r   c                 ó$   — | j                   |   }|S r?   ©r¤   )r9   ÚglyphrS   s      r   rO   zMockFont.getGlyphID½   s   € Ø×%Ñ% eÑ,ˆØˆ
r   c                 ó   — | j                   S r?   r¦   r]   s    r   ra   zMockFont.getReverseGlyphMapÁ   s   € Ø×&Ñ&Ð&r   c                 ó    — | j                   |   S r?   ©rž   )r9   rS   s     r   rY   zMockFont.getGlyphNameÄ   s   € Ø×Ñ Ñ$Ð$r   c                 ó   — | j                   S r?   rª   r]   s    r   r^   zMockFont.getGlyphOrderÇ   r_   r   N)	r   re   rf   Ú__doc__r=   rO   ra   rY   r^   rg   r   r   r™   r™   ¬   s    „ ñòòò'ò%ó r   r™   c                   ó   — e Zd Zd„ Zy)r   c                 ól   — t        j                  | |«       t        | d«      s| j                  | _        y y )NÚassertRaisesRegex)Ú	_TestCaser=   r'   ÚassertRaisesRegexpr¯   )r9   Ú
methodNames     r   r=   zTestCase.__init__Ì   s2   € Ü×Ñ˜4 Ô,ô �tÐ0Ô1Ø%)×%<Ñ%<ˆDÕ"ð 2r   N)r   re   rf   r=   rg   r   r   r   r   Ë   s   „ ó=r   r   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚDataFilesHandlerc                 ó    — d | _         d| _        y )Nr   )ÚtempdirÚnum_tempfilesr]   s    r   ÚsetUpzDataFilesHandler.setUpÕ   s   € ØˆŒØˆÕr   c                 ó\   — | j                   r t        j                  | j                   «       y y r?   )r¶   ÚshutilÚrmtreer]   s    r   ÚtearDownzDataFilesHandler.tearDownÙ   s   € Ø�<Š<Ü�M‰M˜$Ÿ,™,Õ'ð r   c                 óÌ   — t         j                  j                  t        j                  | j
                     j                  «      }t         j                  j                  |d|«      S )Nr{   )ÚosÚpathÚdirnameÚsysÚmodulesre   Ú__file__r   )r9   ÚtestfileÚfolders      r   ÚgetpathzDataFilesHandler.getpathÝ   s>   € Ü—‘—‘¤§¡¨T¯_©_Ñ!=×!FÑ!FÓGˆÜ�w‰w�|‰|˜F F¨HÓ5Ð5r   c                 óP   — | j                   st        j                  «       | _         y y r?   )r¶   ÚtempfileÚmkdtempr]   s    r   Útemp_dirzDataFilesHandler.temp_dirá   s   € Ø�|Š|Ü#×+Ñ+Ó-ˆD�Lð r   c                 ó¦   — | j                  «        t        j                  j                  | j                  |«      }t        j                  ||«       |S r?   )rÊ   r¾   r¿   r   r¶   rº   Úcopy2)r9   Ú	font_pathÚ	file_nameÚtemppaths       r   Ú	temp_fontzDataFilesHandler.temp_fontå   s6   € Ø�‰ŒÜ—7‘7—<‘< §¡¨iÓ8ˆÜ�‰�Y Ô)Øˆr   N)r   re   rf   r¸   r¼   rÆ   rÊ   rÐ   rg   r   r   r´   r´   Ô   s   „ òò(ò6ò.ór   r´   )r„   r?   )TTTTF)r¬   Úcollections.abcr   Úior   r¾   r•   rº   rÁ   rÈ   Úunittestr   r°   ÚfontTools.configr   ÚfontTools.misc.textToolsr   ÚfontTools.misc.xmlWriterr	   r"   r/   r1   Úobjectr   r‚   r‹   r   Úboolr—   r™   r´   rg   r   r   ú<module>rÙ      sÐ   ðÙ %å $Ý Û 	Û 	Û Û 
Û Ý *Ý #Ý ,Ý .òò:÷*,ñ *,ôZ'�Vô 'ó4ó
ð Ø#ØØØñØðàðð ðð ð	ð
 ðð ðð 	óô2 ˆvô  ô>=ˆyô =ô�xõ r   