o
    nÄŽiä  ã                   @  sn   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d„Zedkr5d dlZe ¡  dS dS )é    )Úannotations)ÚOptional)ÚKerningPairÚKerningDictÚKerningGroupsÚIntFloatNÚpairr   Úkerningr   Úgroupsr   Úfallbackr   ÚglyphToFirstGroupúOptional[StrDict]ÚglyphToSecondGroupÚreturnc                   s*  | |v r||  S |du |du krt dƒ‚|du rBi }i }| ¡ D ]!\}}| d¡r3|D ]}|||< q+q | d¡rA|D ]}|||< q:q |dusHJ ‚|dusNJ ‚| \}	}
d }‰|	 d¡r`|	}d}n| |	¡}|	}|
 d¡rq|
‰d‰ n| |
¡‰|
‰ ‡ ‡fdd„||fD ƒ}|D ]} | |v r’||    S q†|S )a¡	  Retrieve the kerning value (if any) between a pair of elements.

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

    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 set of kerning groups.
      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
    NzKMust provide both 'glyphToFirstGroup' and 'glyphToSecondGroup', or neither.zpublic.kern1.zpublic.kern2.c                   s2   g | ]}ˆ ˆfD ]}|d ur|d ur||f‘qqS )N© )Ú.0ÚaÚb©ÚsecondGlyphÚsecondGroupr   úT/home/jeff/fluffinator/venv/lib/python3.10/site-packages/fontTools/ufoLib/kerning.pyÚ
<listcomp>|   s    ýýz&lookupKerningValue.<locals>.<listcomp>)Ú
ValueErrorÚitemsÚ
startswithÚget)r   r	   r
   r   r   r   ÚgroupÚgroupMembersÚglyphÚfirstÚsecondÚ
firstGroupÚ
firstGlyphÚpairsr   r   r   ÚlookupKerningValue
   sP   Mÿ

ÿ

€



þÿr%   Ú__main__)r   NN)r   r   r	   r   r
   r   r   r   r   r   r   r   r   r   )Ú
__future__r   Útypingr   ÚfontTools.annotationsr   r   r   r   ÚdictÚstrÚStrDictr%   Ú__name__ÚdoctestÚtestmodr   r   r   r   Ú<module>   s    ú ý