code: def parseLayoutFeatures(font):
      
      featxt = tounicode(font.features.text or "", "utf-8")
      if not featxt:
          return ast.FeatureFile()
      buf = UnicodeIO(featxt)
      # the path is used by the lexer to resolve 'include' statements
      # and print filename in error messages. For the UFO spec, this
      # should be the path of the UFO, not the inner features.fea:
      # https://github.com/unified-font-object/ufo-spec/issues/55
      ufoPath = font.path
      if ufoPath is not None:
          buf.name = ufoPath
      glyphNames = set(font.keys())
      try:
          parser = Parser(buf, glyphNames)
          doc = parser.parse()
      except IncludedFeaNotFound as e:
          if ufoPath and os.path.exists(os.path.join(ufoPath, e.args[0])):
              logger.warning(
                  "Please change the file name in the include(...); "
                  "statement to be relative to the UFO itself, "
                  "instead of relative to the 'features.fea' file "
                  "contained in it."
              )
          raise
      return doc
docs: Parse OpenType layout features in the UFO and return a
      feaLib.ast.FeatureFile instance.