Ë
    £eh>)  ã                   óZ   — d Z dd„Zd„ Zd	d„Zd„ Zedk(  rddlZ ej                  «        yy)
z
Conversion functions.
c                 ó†  — t        |«      \  }}t        | j                  «       «      D ]z  \  }}||v r&||vr"|j                  d«      s|j	                  |«       t        |j                  «       «      D ]/  }||v sŒ||vsŒ|j                  d«      rŒ|j	                  |«       Œ1 Œ| i }|D ]]  }t        |j                  «       «      t        |j                  «       «      z   }	|j                  dd«      }
d|
z   }
t        |
|	«      }
|
||<   Œ_ i }|D ]]  }t        |j                  «       «      t        |j                  «       «      z   }	|j                  dd«      }
d|
z   }
t        |
|	«      }
|
||<   Œ_ i }t        | j                  «       «      D ]V  \  }}|j                  ||«      }i }t        |j                  «       «      D ]  \  }}|j                  ||«      }|||<   Œ |||<   ŒX t        |j                  «       «      }|t        |j                  «       «      z  }|D ]  \  }}
t        ||   «      }|||
<   Œ ||t        ||¬«      fS )Nzpublic.kern1.zpublic.kern2.ú@MMK_L_Ú ú@MMK_R_)Úside1Úside2)
ÚfindKnownKerningGroupsÚlistÚitemsÚ
startswithÚaddÚkeysÚreplaceÚmakeUniqueGroupNameÚgetÚdict)ÚkerningÚgroupsÚglyphSetÚfirstReferencedGroupsÚsecondReferencedGroupsÚfirstÚsecondsÚsecondÚfirstRenamedGroupsÚexistingGroupNamesÚnewNameÚsecondRenamedGroupsÚ
newKerningÚ
newSecondsÚvalueÚallRenamedGroupsÚoldNameÚgroups                     úY/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/ufoLib/converters.pyÚ%convertUFO1OrUFO2KerningToUFO3Kerningr%      sr  € ä4JÈ6Ó4RÑ1ÐÐ1ä˜wŸ}™}›Ó/ò 7‰ˆˆwØ�F‰?˜u¨HÑ4Ø×#Ñ# OÔ4Ø%×)Ñ)¨%Ô0Ü˜7Ÿ<™<›>Ó*ò 	7ˆFØ˜Ò F°(Ò$:Ø×(Ñ(¨Õ9Ø*×.Ñ.¨vÕ6ñ	7ð	7ð ÐØ&ò 
,ˆä! &§+¡+£-Ó0´4Ð8J×8OÑ8OÓ8QÓ3RÑRÐà—-‘- 	¨2Ó.ˆà! GÑ+ˆä% gÐ/AÓBˆà$+Ð˜5Ò!ð
,ð ÐØ(ò 
.ˆä! &§+¡+£-Ó0´4Ð8K×8PÑ8PÓ8RÓ3SÑSÐà—.‘. ¨BÓ/ˆà! GÑ+ˆä% gÐ/AÓBˆà&-Ð˜FÒ#ð
.ð €JÜ˜wŸ}™}›Ó/ò '‰ˆˆwØ"×&Ñ& u¨eÓ4ˆØˆ
Ü! '§-¡-£/Ó2ò 	'‰MˆF�EØ(×,Ñ,¨V°VÓ<ˆFØ!&ˆJ�vÒð	'ð 'ˆ
�5Òð'ô Ð.×4Ñ4Ó6Ó7ÐØœÐ0×6Ñ6Ó8Ó9Ñ9ÐØ,ò  Ñˆ�Ü�V˜G‘_Ó%ˆØˆˆwŠð ð �vœtÐ*<ÐDWÔXÐXÐXó    c                 ó&  — dg}dg}t        «       }t        «       }t        | j                  «       «      D ]X  }|D ]&  }|j                  |«      sŒ|j	                  |«        n |D ]&  }|j                  |«      sŒ|j	                  |«        ŒX ŒZ ||fS )aá  
    This will find kerning groups with known prefixes.
    In some cases not all kerning groups will be referenced
    by the kerning pairs. The algorithm for locating groups
    in convertUFO1OrUFO2KerningToUFO3Kerning will miss these
    unreferenced groups. By scanning for known prefixes
    this function will catch all of the prefixed groups.

    These are the prefixes and sides that are handled:
    @MMK_L_ - side 1
    @MMK_R_ - side 2

    >>> testGroups = {
    ...     "@MMK_L_1" : None,
    ...     "@MMK_L_2" : None,
    ...     "@MMK_L_3" : None,
    ...     "@MMK_R_1" : None,
    ...     "@MMK_R_2" : None,
    ...     "@MMK_R_3" : None,
    ...     "@MMK_l_1" : None,
    ...     "@MMK_r_1" : None,
    ...     "@MMK_X_1" : None,
    ...     "foo" : None,
    ... }
    >>> first, second = findKnownKerningGroups(testGroups)
    >>> sorted(first) == ['@MMK_L_1', '@MMK_L_2', '@MMK_L_3']
    True
    >>> sorted(second) == ['@MMK_R_1', '@MMK_R_2', '@MMK_R_3']
    True
    r   r   )Úsetr	   r   r   r   )r   ÚknownFirstGroupPrefixesÚknownSecondGroupPrefixesÚfirstGroupsÚsecondGroupsÚ	groupNameÚfirstPrefixÚsecondPrefixs           r$   r   r   A   s¥   € ð>  )˜kÐØ )˜{ÐÜ“%€KÜ“5€LÜ˜&Ÿ+™+›-Ó(ò ˆ	Ø2ò 	ˆKØ×#Ñ# KÕ0Ø—‘ 	Ô*Ùð	ð 5ò 	ˆLØ×#Ñ# LÕ1Ø× Ñ  Ô+Ùñ	ðð ˜Ð$Ð$r&   é    c                 óJ   — | }|dkD  rd||fz  }||v rt        | ||dz   «      S |S )Nr0   z%s%dé   )r   )ÚnameÚ
groupNamesÚcounterr   s       r$   r   r   p   s=   € à€GØ�‚{Ø˜G WÐ-Ñ-ˆà�*ÑÜ" 4¨°W¸q±[ÓAÐAà€Nr&   c                   ó   — y)a  
    No known prefixes.

    >>> testKerning = {
    ...     "A" : {
    ...         "A" : 1,
    ...         "B" : 2,
    ...         "CGroup" : 3,
    ...         "DGroup" : 4
    ...     },
    ...     "BGroup" : {
    ...         "A" : 5,
    ...         "B" : 6,
    ...         "CGroup" : 7,
    ...         "DGroup" : 8
    ...     },
    ...     "CGroup" : {
    ...         "A" : 9,
    ...         "B" : 10,
    ...         "CGroup" : 11,
    ...         "DGroup" : 12
    ...     },
    ... }
    >>> testGroups = {
    ...     "BGroup" : ["B"],
    ...     "CGroup" : ["C"],
    ...     "DGroup" : ["D"],
    ... }
    >>> kerning, groups, maps = convertUFO1OrUFO2KerningToUFO3Kerning(
    ...     testKerning, testGroups, [])
    >>> expected = {
    ...     "A" : {
    ...         "A": 1,
    ...         "B": 2,
    ...         "public.kern2.CGroup": 3,
    ...         "public.kern2.DGroup": 4
    ...     },
    ...     "public.kern1.BGroup": {
    ...         "A": 5,
    ...         "B": 6,
    ...         "public.kern2.CGroup": 7,
    ...         "public.kern2.DGroup": 8
    ...     },
    ...     "public.kern1.CGroup": {
    ...         "A": 9,
    ...         "B": 10,
    ...         "public.kern2.CGroup": 11,
    ...         "public.kern2.DGroup": 12
    ...     }
    ... }
    >>> kerning == expected
    True
    >>> expected = {
    ...     "BGroup": ["B"],
    ...     "CGroup": ["C"],
    ...     "DGroup": ["D"],
    ...     "public.kern1.BGroup": ["B"],
    ...     "public.kern1.CGroup": ["C"],
    ...     "public.kern2.CGroup": ["C"],
    ...     "public.kern2.DGroup": ["D"],
    ... }
    >>> groups == expected
    True

    Known prefixes.

    >>> testKerning = {
    ...     "A" : {
    ...         "A" : 1,
    ...         "B" : 2,
    ...         "@MMK_R_CGroup" : 3,
    ...         "@MMK_R_DGroup" : 4
    ...     },
    ...     "@MMK_L_BGroup" : {
    ...         "A" : 5,
    ...         "B" : 6,
    ...         "@MMK_R_CGroup" : 7,
    ...         "@MMK_R_DGroup" : 8
    ...     },
    ...     "@MMK_L_CGroup" : {
    ...         "A" : 9,
    ...         "B" : 10,
    ...         "@MMK_R_CGroup" : 11,
    ...         "@MMK_R_DGroup" : 12
    ...     },
    ... }
    >>> testGroups = {
    ...     "@MMK_L_BGroup" : ["B"],
    ...     "@MMK_L_CGroup" : ["C"],
    ...     "@MMK_L_XGroup" : ["X"],
    ...     "@MMK_R_CGroup" : ["C"],
    ...     "@MMK_R_DGroup" : ["D"],
    ...     "@MMK_R_XGroup" : ["X"],
    ... }
    >>> kerning, groups, maps = convertUFO1OrUFO2KerningToUFO3Kerning(
    ...     testKerning, testGroups, [])
    >>> expected = {
    ...     "A" : {
    ...         "A": 1,
    ...         "B": 2,
    ...         "public.kern2.CGroup": 3,
    ...         "public.kern2.DGroup": 4
    ...     },
    ...     "public.kern1.BGroup": {
    ...         "A": 5,
    ...         "B": 6,
    ...         "public.kern2.CGroup": 7,
    ...         "public.kern2.DGroup": 8
    ...     },
    ...     "public.kern1.CGroup": {
    ...         "A": 9,
    ...         "B": 10,
    ...         "public.kern2.CGroup": 11,
    ...         "public.kern2.DGroup": 12
    ...     }
    ... }
    >>> kerning == expected
    True
    >>> expected = {
    ...     "@MMK_L_BGroup": ["B"],
    ...     "@MMK_L_CGroup": ["C"],
    ...     "@MMK_L_XGroup": ["X"],
    ...     "@MMK_R_CGroup": ["C"],
    ...     "@MMK_R_DGroup": ["D"],
    ...     "@MMK_R_XGroup": ["X"],
    ...     "public.kern1.BGroup": ["B"],
    ...     "public.kern1.CGroup": ["C"],
    ...     "public.kern1.XGroup": ["X"],
    ...     "public.kern2.CGroup": ["C"],
    ...     "public.kern2.DGroup": ["D"],
    ...     "public.kern2.XGroup": ["X"],
    ... }
    >>> groups == expected
    True

    >>> from .validators import kerningValidator
    >>> kerningValidator(kerning)
    (True, None)

    Mixture of known prefixes and groups without prefixes.

    >>> testKerning = {
    ...     "A" : {
    ...         "A" : 1,
    ...         "B" : 2,
    ...         "@MMK_R_CGroup" : 3,
    ...         "DGroup" : 4
    ...     },
    ...     "BGroup" : {
    ...         "A" : 5,
    ...         "B" : 6,
    ...         "@MMK_R_CGroup" : 7,
    ...         "DGroup" : 8
    ...     },
    ...     "@MMK_L_CGroup" : {
    ...         "A" : 9,
    ...         "B" : 10,
    ...         "@MMK_R_CGroup" : 11,
    ...         "DGroup" : 12
    ...     },
    ... }
    >>> testGroups = {
    ...     "BGroup" : ["B"],
    ...     "@MMK_L_CGroup" : ["C"],
    ...     "@MMK_R_CGroup" : ["C"],
    ...     "DGroup" : ["D"],
    ... }
    >>> kerning, groups, maps = convertUFO1OrUFO2KerningToUFO3Kerning(
    ...     testKerning, testGroups, [])
    >>> expected = {
    ...     "A" : {
    ...         "A": 1,
    ...         "B": 2,
    ...         "public.kern2.CGroup": 3,
    ...         "public.kern2.DGroup": 4
    ...     },
    ...     "public.kern1.BGroup": {
    ...         "A": 5,
    ...         "B": 6,
    ...         "public.kern2.CGroup": 7,
    ...         "public.kern2.DGroup": 8
    ...     },
    ...     "public.kern1.CGroup": {
    ...         "A": 9,
    ...         "B": 10,
    ...         "public.kern2.CGroup": 11,
    ...         "public.kern2.DGroup": 12
    ...     }
    ... }
    >>> kerning == expected
    True
    >>> expected = {
    ...     "BGroup": ["B"],
    ...     "@MMK_L_CGroup": ["C"],
    ...     "@MMK_R_CGroup": ["C"],
    ...     "DGroup": ["D"],
    ...     "public.kern1.BGroup": ["B"],
    ...     "public.kern1.CGroup": ["C"],
    ...     "public.kern2.CGroup": ["C"],
    ...     "public.kern2.DGroup": ["D"],
    ... }
    >>> groups == expected
    True
    N© r7   r&   r$   Útestr8   |   s   � r&   Ú__main__N)r7   )r0   )Ú__doc__r%   r   r   r8   Ú__name__ÚdoctestÚtestmodr7   r&   r$   ú<module>r>      sA   ðñó6Yòr,%ó^	òLð^ ˆzÒÛà€G‡O�OÕð r&   