code: def compileInterpolatableTTFs(
      ufos,
      preProcessorClass=TTFInterpolatablePreProcessor,
      outlineCompilerClass=OutlineTTFCompiler,
      featureCompilerClass=None,
      featureWriters=None,
      glyphOrder=None,
      useProductionNames=None,
      cubicConversionError=None,
      reverseDirection=True,
      inplace=False,
      layerNames=None,
      skipExportGlyphs=None,
  ):
      from ufo2ft.util import _LazyFontName
      if layerNames is None:
          layerNames = [None] * len(ufos)
      assert len(ufos) == len(layerNames)
      if skipExportGlyphs is None:
          skipExportGlyphs = set()
          for ufo in ufos:
              skipExportGlyphs.update(ufo.lib.get("public.skipExportGlyphs", []))
      logger.info("Pre-processing glyphs")
      preProcessor = preProcessorClass(
          ufos,
          inplace=inplace,
          conversionError=cubicConversionError,
          reverseDirection=reverseDirection,
          layerNames=layerNames,
          skipExportGlyphs=skipExportGlyphs,
      )
      glyphSets = preProcessor.process()
      for ufo, glyphSet, layerName in zip(ufos, glyphSets, layerNames):
          fontName = _LazyFontName(ufo)
          if layerName is not None:
              logger.info("Building OpenType tables for %s-%s", fontName, layerName)
          else:
              logger.info("Building OpenType tables for %s", fontName)
          outlineCompiler = outlineCompilerClass(
              ufo,
              glyphSet=glyphSet,
              glyphOrder=glyphOrder,
              tables=SPARSE_TTF_MASTER_TABLES if layerName else None,
          )
          ttf = outlineCompiler.compile()
          if layerName is None:
              compileFeatures(
                  ufo,
                  ttf,
                  glyphSet=glyphSet,
                  featureWriters=featureWriters,
                  featureCompilerClass=featureCompilerClass,
              )
          postProcessor = PostProcessor(ttf, ufo, glyphSet=glyphSet)
          ttf = postProcessor.process(useProductionNames)
          if layerName is not None:
              ttf["post"].underlinePosition = -0x8000
              ttf["post"].underlineThickness = -0x8000
          yield ttf