Ë
    ^ãj   ã                  óª   — d dl mZ d dlmZ d dlmZmZmZmZ e	e
e
f   Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„Zd
d„Zedk(  rd dlZ ej                   «        yy)é    )Úannotations)ÚOptional)ÚKerningPairÚKerningDictÚKerningGroupsÚIntFloatNc                óŽ  — | |v r||    S |du |du k7  rt        d«      ‚|�|€t        |«      \  }}| \  }}dx}}	|j                  d«      r|}d}
n|j                  |«      }|}
|j                  d«      r|}	d}n|j                  |«      }	|}|
|fD ��cg c]  }||	fD ]
  }|�|�||f‘Œ Œ }}}|D ]  } | |v sŒ||    c S  |S c c}}w )a*  Retrieve the kerning value (if any) between a pair of elements.

    The elements can be either individual glyphs (by name) or kerning
    groups (by name), or any combination of the two.

    Providing the two glyph-to-group mappings accelerates group-lookups.
    These can be built manually, or with :py:func:`glyphsToGroups`.

    Args:
      pair:
          A tuple, in logical order (first, second) with respect
          to the reading direction, to query the font for kerning
          information on. Each element in the tuple can be either
          a glyph name or a kerning group name.
      kerning:
          A dictionary of kerning pairs.
      groups:
          A dictionary mapping each group name to its glyph names.
      fallback:
          The fallback value to return if no kern is found between
          the elements in ``pair``. Defaults to 0.
      glyphToFirstGroup:
          A dictionary mapping glyph names to the first-glyph kerning
          groups to which they belong. Defaults to ``None``.
      glyphToSecondGroup:
          A dictionary mapping glyph names to the second-glyph kerning
          groups to which they belong. Defaults to ``None``.

    Returns:
      The kerning value between the element pair. If no kerning for
      the pair is found, the fallback value is returned.

    Note: This function expects the ``kerning`` argument to be a flat
    dictionary of kerning pairs, not the nested structure used in a
    kerning.plist file.

    Examples::

      >>> groups = {
      ...     "public.kern1.O" : ["O", "D", "Q"],
      ...     "public.kern2.E" : ["E", "F"]
      ... }
      >>> kerning = {
      ...     ("public.kern1.O", "public.kern2.E") : -100,
      ...     ("public.kern1.O", "F") : -200,
      ...     ("D", "F") : -300
      ... }
      >>> lookupKerningValue(("D", "F"), kerning, groups)
      -300
      >>> lookupKerningValue(("O", "F"), kerning, groups)
      -200
      >>> lookupKerningValue(("O", "E"), kerning, groups)
      -100
      >>> lookupKerningValue(("O", "O"), kerning, groups)
      0
      >>> lookupKerningValue(("E", "E"), kerning, groups)
      0
      >>> lookupKerningValue(("E", "O"), kerning, groups)
      0
      >>> lookupKerningValue(("X", "X"), kerning, groups)
      0
      >>> lookupKerningValue(("public.kern1.O", "public.kern2.E"),
      ...     kerning, groups)
      -100
      >>> lookupKerningValue(("public.kern1.O", "F"), kerning, groups)
      -200
      >>> lookupKerningValue(("O", "public.kern2.E"), kerning, groups)
      -100
      >>> lookupKerningValue(("public.kern1.X", "public.kern2.X"), kerning, groups)
      0
      >>> glyphToFirstGroup, glyphToSecondGroup = glyphsToGroups(groups)
      >>> lookupKerningValue(("O", "E"), kerning, groups, glyphToFirstGroup=glyphToFirstGroup, glyphToSecondGroup=glyphToSecondGroup)
      -100
    NzKMust provide both 'glyphToFirstGroup' and 'glyphToSecondGroup', or neither.úpublic.kern1.úpublic.kern2.)Ú
ValueErrorÚglyphsToGroupsÚ
startswithÚget)ÚpairÚkerningÚgroupsÚfallbackÚglyphToFirstGroupÚglyphToSecondGroupÚfirstÚsecondÚ
firstGroupÚsecondGroupÚ
firstGlyphÚsecondGlyphÚaÚbÚpairss                  úZ/var/www/html/metafoliadorv2/venv/lib/python3.12/site-packages/fontTools/ufoLib/kerning.pyÚlookupKerningValuer    
   s>  € ðf ˆw�Ø�t‰}Ðà˜TÐ!Ð'9¸TÐ'AÒBÜØYó
ð 	
ð Ð Ð$6Ð$>Ü0>¸vÓ0FÑ-ÐÐ-à�M€Eˆ6Ø#Ð#€J�Ø×Ñ˜Ô(Øˆ
Ø‰
à&×*Ñ*¨5Ó1ˆ
Øˆ
Ø×Ñ˜Ô)ØˆØ‰à(×,Ñ,¨VÓ4ˆØˆð ˜jÐ)÷àØ˜{Ð+òð Øˆ=˜Q˜]ð 
ˆAŠðØð€Eñ ð ò !ˆØ�7Š?Ø˜4‘=Ò ð!ð €Oùós   ÂCc                óº   — i }i }| j                  «       D ]A  \  }}|j                  d«      r|D ]  }|||<   Œ	 Œ$|j                  d«      sŒ6|D ]  }|||<   Œ	 ŒC ||fS )ae  Build dictionaries mapping glyph names to their kerning groups.

    This is a reverse-mapping of the UFO kerning groups data structure.
    Groups are assumed to be compliant with the UFO specification; with
    the current implementation, if glyphs appear in more than one group
    anyway, the last group wins.

    Args:
      groups:
          A dictionary mapping each group name to its glyph names.

    Returns:
      A tuple of two dictionaries, respectively mapping glyph names to
      the first- and second-glyph kerning groups to which they belong.

    Examples::

      >>> groups = {
      ...     "public.kern1.O" : ["O", "D", "Q"],
      ...     "public.kern2.E" : ["E", "F"]
      ... }
      >>> glyphsToGroups(groups)
      ({'O': 'public.kern1.O', 'D': 'public.kern1.O', 'Q': 'public.kern1.O'}, {'E': 'public.kern2.E', 'F': 'public.kern2.E'})
    r
   r   )Úitemsr   )r   r   r   ÚgroupÚgroupMembersÚglyphs         r   r   r   …   sˆ   € ð2 ÐØÐØ%Ÿ|™|›~ò 2Ñˆˆ|Ø×Ñ˜OÔ,Ø%ò 1�Ø+0Ð! %Ò(ñ1à×Ñ˜oÕ.Ø%ò 2�Ø,1Ð" 5Ò)ñ2ð2ð Ð1Ð2Ð2ó    Ú__main__)r   NN)r   r   r   r   r   r   r   r   r   úOptional[StrDict]r   r(   Úreturnr   )r   r   r)   ztuple[StrDict, StrDict])Ú
__future__r   Útypingr   ÚfontTools.annotationsr   r   r   r   ÚdictÚstrÚStrDictr    r   Ú__name__ÚdoctestÚtestmod© r&   r   ú<module>r4      s�   ðÝ "å ç SÓ Sà
ˆs�Cˆx‰.€ð Ø+/Ø,0ðxØ
ðxàðxð ðxð ð	xð
 )ðxð *ðxð óxóv"3ðJ ˆzÒÛà€G‡O�OÕð r&   