Ë
    £ehŠ  ã                   ó’   — d Z h d£Zh d£ZdZ G d„ de«      Zddefd„Zg ddfd	„Zg ddfd
„Z	e
dk(  rddlZ ej                  «        yy)zH
User name to file name conversion.
This was taken from the UFO 3 spec.
>/   Ú*ú úúúúúúúúú	ú
úúúúúúúúúúúúúúúúúúúúúú"ú(ú)ú+ú/ú:ú<ú>ú?ú[ú\ú]ú|ú>   úclock$ÚauxÚconÚnulÚprnÚcom1Úcom2Úcom3Úcom4Úcom5Úcom6Úcom7Úcom8Úcom9Úlpt1Úlpt2Úlpt3Úlpt4Úlpt5Úlpt6Úlpt7Úlpt8Úlpt9éÿ   c                   ó   — e Zd Zy)ÚNameTranslationErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/ufoLib/filenames.pyrJ   rJ   [   s   „ ØrO   rJ   Ú ÚuserNamec                 óD  — t        | t        «      st        d«      ‚t        |«      }t        |«      }|s| d   dk(  rd| dd z   } g }| D ]6  }|t        v rd}n||j                  «       k7  r|dz  }|j                  |«       Œ8 dj                  |«      } t        |z
  |z
  }| d| } g }	| j                  d«      D ].  }
|
j                  «       t        v rd|
z   }
|	j                  |
«       Œ0 dj                  |	«      } || z   |z   }|j                  «       |v rt        | |||«      }|S )aÿ  
    `existing` should be a set-like object.

    >>> userNameToFileName("a") == "a"
    True
    >>> userNameToFileName("A") == "A_"
    True
    >>> userNameToFileName("AE") == "A_E_"
    True
    >>> userNameToFileName("Ae") == "A_e"
    True
    >>> userNameToFileName("ae") == "ae"
    True
    >>> userNameToFileName("aE") == "aE_"
    True
    >>> userNameToFileName("a.alt") == "a.alt"
    True
    >>> userNameToFileName("A.alt") == "A_.alt"
    True
    >>> userNameToFileName("A.Alt") == "A_.A_lt"
    True
    >>> userNameToFileName("A.aLt") == "A_.aL_t"
    True
    >>> userNameToFileName(u"A.alT") == "A_.alT_"
    True
    >>> userNameToFileName("T_H") == "T__H_"
    True
    >>> userNameToFileName("T_h") == "T__h"
    True
    >>> userNameToFileName("t_h") == "t_h"
    True
    >>> userNameToFileName("F_F_I") == "F__F__I_"
    True
    >>> userNameToFileName("f_f_i") == "f_f_i"
    True
    >>> userNameToFileName("Aacute_V.swash") == "A_acute_V_.swash"
    True
    >>> userNameToFileName(".notdef") == "_notdef"
    True
    >>> userNameToFileName("con") == "_con"
    True
    >>> userNameToFileName("CON") == "C_O_N_"
    True
    >>> userNameToFileName("con.alt") == "_con.alt"
    True
    >>> userNameToFileName("alt.con") == "alt._con"
    True
    z(The value for userName must be a string.é    ú.Ú_é   NrQ   )Ú
isinstanceÚstrÚ
ValueErrorÚlenÚillegalCharactersÚlowerÚappendÚjoinÚmaxFileNameLengthÚsplitÚreservedFileNamesÚhandleClash1)rR   ÚexistingÚprefixÚsuffixÚprefixLengthÚsuffixLengthÚfilteredUserNameÚ	characterÚsliceLengthÚpartsÚpartÚfullNames               rP   ÚuserNameToFileNamero   _   sF  € ôd �h¤Ô$ÜÐCÓDÐDä�v“;€LÜ�v“;€Lñ �h˜q‘k SÒ(Ø˜ ! "˜Ñ%ˆàÐØò +ˆ	àÔ)Ñ)Ø‰Ià˜)Ÿ/™/Ó+Ò+Ø˜ÑˆIØ×Ñ 	Õ*ð+ð �w‰wÐ'Ó(€Hä# lÑ2°\ÑA€KØ˜˜Ð%€Hà€EØ—‘˜sÓ#ò ˆØ�:‰:‹<Ô,Ñ,Ø˜‘:ˆDØ�‰�TÕðð �x‰x˜‹€Hà˜Ñ  6Ñ)€HØ‡~�~Ó˜8Ñ#Ü ¨(°F¸FÓCˆà€OrO   c                 óf  — t        |«      }t        |«      }|t        | «      z   |z   dz   t        kD  r"|t        | «      z   |z   dz   }t        |z
  }| d| } d}d}	|€H| t        |	«      j                  d«      z   }
||
z   |z   }|j	                  «       |vr|}n|	dz  }	|	dk\  rn|€ŒH|€t        |||«      }|S )aO  
    existing should be a case-insensitive list
    of all existing file names.

    >>> prefix = ("0" * 5) + "."
    >>> suffix = "." + ("0" * 10)
    >>> existing = ["a" * 5]

    >>> e = list(existing)
    >>> handleClash1(userName="A" * 5, existing=e,
    ...		prefix=prefix, suffix=suffix) == (
    ... 	'00000.AAAAA000000000000001.0000000000')
    True

    >>> e = list(existing)
    >>> e.append(prefix + "aaaaa" + "1".zfill(15) + suffix)
    >>> handleClash1(userName="A" * 5, existing=e,
    ...		prefix=prefix, suffix=suffix) == (
    ... 	'00000.AAAAA000000000000002.0000000000')
    True

    >>> e = list(existing)
    >>> e.append(prefix + "AAAAA" + "2".zfill(15) + suffix)
    >>> handleClash1(userName="A" * 5, existing=e,
    ...		prefix=prefix, suffix=suffix) == (
    ... 	'00000.AAAAA000000000000001.0000000000')
    True
    é   NrW   l   ÿŒIú5 )r[   r`   rY   Úzfillr]   ÚhandleClash2)rR   rd   re   rf   rg   rh   Úlrk   Ú	finalNameÚcounterÚnamern   s               rP   rc   rc   ·   sæ   € ô> �v“;€LÜ�v“;€LØ”c˜(“mÑ# lÑ2°RÑ7Ô:KÒKØœ3˜x›=Ñ(¨<Ñ7¸"Ñ<ˆÜ'¨!Ñ+ˆØ˜L˜[Ð)ˆØ€Ià€GØ
Ð
Øœ#˜g›,×,Ñ,¨RÓ0Ñ0ˆØ˜D‘= 6Ñ)ˆØ�>‰>Ó 8Ñ+Ø ˆIØà�q‰LˆGØ�oÒ%Øð Ñ
ð ÐÜ  ¨6°6Ó:ˆ	àÐrO   c                 óì   — t         t        |«      z
  t        |«      z
  }t        d|z  «      }d}d}|€4|t        |«      z   |z   }|j	                  «       | vr|}n|dz  }||k\  rn|€Œ4|€t        d«      ‚|S )aÄ  
    existing should be a case-insensitive list
    of all existing file names.

    >>> prefix = ("0" * 5) + "."
    >>> suffix = "." + ("0" * 10)
    >>> existing = [prefix + str(i) + suffix for i in range(100)]

    >>> e = list(existing)
    >>> handleClash2(existing=e, prefix=prefix, suffix=suffix) == (
    ... 	'00000.100.0000000000')
    True

    >>> e = list(existing)
    >>> e.remove(prefix + "1" + suffix)
    >>> handleClash2(existing=e, prefix=prefix, suffix=suffix) == (
    ... 	'00000.1.0000000000')
    True

    >>> e = list(existing)
    >>> e.remove(prefix + "2" + suffix)
    >>> handleClash2(existing=e, prefix=prefix, suffix=suffix) == (
    ... 	'00000.2.0000000000')
    True
    Ú9NrW   zNo unique name could be found.)r`   r[   ÚintrY   r]   rJ   )rd   re   rf   Ú	maxLengthÚmaxValueru   rv   rn   s           rP   rs   rs   ð   s™   € ô6 "¤C¨£KÑ/´#°f³+Ñ=€IÜ�3˜‘?Ó#€Hà€IØ€GØ
Ð
ØœC ›LÑ(¨6Ñ1ˆØ�>‰>Ó 8Ñ+Ø ˆIØà�q‰LˆGØ�hÒØð Ñ
ð ÐÜ"Ð#CÓDÐDàÐrO   Ú__main__rT   N)rN   rQ   rQ   )Ú__doc__r\   rb   r`   Ú	ExceptionrJ   rY   ro   rc   rs   rK   ÚdoctestÚtestmodrN   rO   rP   ú<module>r‚      sz   ðñò0Ð òbÐ ð2 Ð ô	˜9ô 	ñU ó Uðp %'¨r¸"ó 6ðr  R°ó -ð` ˆzÒÛà€G‡O�OÕð rO   