code: def _gatherKerningForLookup(gpos, lookupIndex):
      
      allKerning = {}
      allLeftClasses = {}
      allRightClasses = {}
      lookup = gpos.LookupList.Lookup[lookupIndex]
      # only handle pair positioning and extension
      if lookup.LookupType not in (2, 9):
          return
      for subtableIndex, subtable in enumerate(lookup.SubTable):
          if lookup.LookupType == 2:
              format = subtable.Format
              lookupType = subtable.LookupType
              if (lookupType, format) == (2, 1):
                  kerning = _handleLookupType2Format1(subtable)
                  allKerning.update(kerning)
              elif (lookupType, format) == (2, 2):
                  kerning, leftClasses, rightClasses = _handleLookupType2Format2(subtable, lookupIndex, subtableIndex)
                  allKerning.update(kerning)
                  allLeftClasses.update(leftClasses)
                  allRightClasses.update(rightClasses)
          elif lookup.LookupType == 9:
              extSubtable = subtable.ExtSubTable
              format = extSubtable.Format
              lookupType = extSubtable.LookupType
              if (lookupType, format) == (2, 1):
                  kerning = _handleLookupType2Format1(extSubtable)
                  allKerning.update(kerning)
              elif (lookupType, format) == (2, 2):
                  kerning, leftClasses, rightClasses = _handleLookupType2Format2(extSubtable, lookupIndex, subtableIndex)
                  allKerning.update(kerning)
                  allLeftClasses.update(leftClasses)
                  allRightClasses.update(rightClasses)
      # done
      return allKerning, allLeftClasses, allRightClasses
docs: Gather the kerning and class data for a particular lookup.
      Returns kerning, left clases, right classes.
      The kerning dictionary is of this structure:
          {
              ("a", "a") : 10,
              ((1, 1, 3), "a") : -20
          }
      The class dictionaries have this structure:
          {
              (1, 1, 3) : ["x", "y", "z"]
          }
      Where the tuple means this:
          (lookup index, subtable index, class index)