docs: def _to_ufo_features(self, master, ufo):
      """Write an UFO's OpenType feature file."""
  
      # Recover the original feature code if it was stored in the user data
      original = master.userData[ORIGINAL_FEATURE_CODE_KEY]
      if original is not None:
          ufo.features.text = original
          return
  
      prefixes = []
      for prefix in self.font.featurePrefixes:
          strings = []
          if prefix.name != ANONYMOUS_FEATURE_PREFIX_NAME:
              strings.append("# Prefix: %s\n" % prefix.name)
          strings.append(autostr(prefix.automatic))
          strings.append(prefix.code)
          prefixes.append("".join(strings))
  
      prefix_str = "\n\n".join(prefixes)
  
      class_defs = []
      for class_ in self.font.classes:
          prefix = "@" if not class_.name.startswith("@") else ""
          name = prefix + class_.name
          class_defs.append(
              "{}{} = [ {} ];".format(autostr(class_.automatic), name, class_.code)
          )
      class_str = "\n\n".join(class_defs)
  
      feature_defs = []
      for feature in self.font.features:
          code = feature.code
          lines = ["feature %s {" % feature.name]
          if feature.notes:
              lines.append("# notes:")
              lines.extend("# " + line for line in feature.notes.splitlines())
          if feature.automatic:
              lines.append("# automatic")
          if feature.disabled:
              lines.append("# disabled")
              lines.extend("#" + line for line in code.splitlines())
          else:
              lines.append(code)
          lines.append("} %s;" % feature.name)
          feature_defs.append("\n".join(lines))
      fea_str = "\n\n".join(feature_defs)
  
      # Don't add a GDEF table when planning to round-trip. To get Glyphs.app-like
      # results, we would need anchor propagation or user intervention. Glyphs.app
      # only generates it on generating binaries.
      gdef_str = None
      if self.generate_GDEF:
          if re.search(r"^\s*table\s+GDEF\s+{", prefix_str, flags=re.MULTILINE):
              raise ValueError(
                  "The features already contain a `table GDEF {...}` statement. "
                  "Either delete it or set generate_GDEF to False."
              )
          gdef_str = _build_gdef(
              ufo, self._designspace.lib.get("public.skipExportGlyphs")
          )
  
      # make sure feature text is a unicode string, for defcon
      full_text = (
          "\n\n".join(filter(None, [class_str, prefix_str, fea_str, gdef_str])) + "\n"
      )
      ufo.features.text = full_text if full_text.strip() else ""