# macRes: Tools for reading Mac resource forks

Classic Mac OS files are made up of two parts - the “data fork” which contains the file contents proper, and the “resource fork” which contains a number of structured data items called “resources”. Some fonts, such as Mac “font suitcases” and Type 1 LWFN fonts, still use the resource fork for this kind of structured data, and so to read them, fontTools needs to have access to resource forks.

The Inside Macintosh volume More Macintosh Toolbox explains the structure of resource and data forks.

exception fontTools.misc.macRes.ResourceError
  add_note()

    Exception.add_note(note) – add a note to the exception

  with_traceback()

    Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

class fontTools.misc.macRes.ResourceReader(fileOrPath)

  Reader for Mac OS resource forks.

  Parses a resource fork and returns resources according to their type. If run on OS X, this will open the resource fork in the filesystem. Otherwise, it will open the file itself and attempt to read it as though it were a resource fork.

  The returned object can be indexed by type and iterated over, returning in each case a list of py:class:Resource objects representing all the resources of a certain type.

  keys() → a set-like object providing a view on D's keys
  property types

    A list of the types of resources in the resource fork.

  countResources(resType)

    Return the number of resources of a given type.

  getIndices(resType)

    Returns a list of indices of resources of a given type.

  getNames(resType)

    Return list of names of all resources of a given type.

  getIndResource(resType, index)

    Return resource of given type located at an index ranging from 1 to the number of resources for that type, or None if not found.

  getNamedResource(resType, name)

    Return the named resource of given type, else return None.

  clear() → None. Remove all items from D.
  get(k[, d]) → D[k] if k in D, else d. d defaults to None.
  items() → a set-like object providing a view on D's items
  pop(k[, d]) → v, remove specified key and return the corresponding value.

    If key is not found, d is returned if given, otherwise KeyError is raised.

  popitem() → (k, v), remove and return some (key, value) pair

    as a 2-tuple; but raise KeyError if D is empty.

  setdefault(k[, d]) → D.get(k,d), also set D[k]=d if k not in D
  update([E, ]**F) → None. Update D from mapping/iterable E and F.

    If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v

  values() → an object providing a view on D's values

class fontTools.misc.macRes.Resource(resType=None, resData=None, resID=None, resName=None, resAttr=None)

  Represents a resource stored within a resource fork.

  type

    resource type.

  data

    resource data.

  id

    ID.

  name

    resource name.

  attr

    attributes.