code: def parse_author(cls, marc):
          
          name = None
          code = None
          linked_forms = None
          is_corporation = None
          record = None
  
          # parse informations from the record
          if marc["100a"]:  # persons
              name = _first_or_none(marc["100a"])
              code = _first_or_none(marc["1007"])
              is_corporation = False
              record = marc.datafields["100"][0]  # transport all fields
          elif marc["110a"]:  # corporations
              name = _first_or_none(marc["110a"])
              code = _first_or_none(marc["1107"])
              linked_forms = marc["410a2 "]
              is_corporation = True
              record = marc.datafields["110"][0]  # transport all fields
          else:
              return None
  
          # parse linked forms (alternative names)
          linked_forms = marc["410a2 "]
  
          # put together alt_name
          type_descriptor = ["osoba", "organizace"]
          alt_name = "%s [%s]" % (name, type_descriptor[is_corporation])
          if linked_forms:
              alt_name += " (" + ", ".join(linked_forms) + ")"
  
          return cls(
              name=name,
              code=code,
              linked_forms=linked_forms,
              is_corporation=is_corporation,
              record=record,
              alt_name=alt_name,
          )
docs: Parse author from `marc` data.
  
          Args:
              marc (obj): :class:`.MARCXMLRecord` instance. See module
                  :mod:`.marcxml_parser` for details.
  
          Returns:
              obj: :class:`Author`.