Added initial support for the data directory.

git-svn-id: http://svn.robofab.com/branches/ufo3k@264 b5fa9d6c-a76f-4ffd-b3cb-f825fc41095c
This commit is contained in:
Tal Leming 2011-09-12 11:35:57 +00:00
parent 92ecfb2926
commit 5ca40a8bda

View File

@ -66,6 +66,8 @@ class UFOLibError(Exception): pass
# ----------
DEFAULT_GLYPHS_DIRNAME = "glyphs"
DATA_DIRNAME = "data"
IMAGES_DIRNAME = "images"
METAINFO_FILENAME = "metainfo.plist"
FONTINFO_FILENAME = "fontinfo.plist"
LIB_FILENAME = "lib.plist"
@ -216,6 +218,24 @@ class UFOReader(object):
else:
return True
def readDataForPath(self, path):
"""
Reads the data from the file at the given path.
The path must be relative to the UFO path.
Returns None if the file does not exist.
"""
# XXX this is likely less efficient than allowing
# the caller to read files directly. However a future
# version of the UFO may not be a package with readable
# files. (ie, it could be a zip.)
path = os.path.join(self._path, path)
if not self._checkForFile(path):
return None
f = open(path, "rb")
data = f.read()
f.close()
return data
def readMetaInfo(self):
"""
Read metainfo.plist. Only used for internal operations.
@ -387,6 +407,30 @@ class UFOReader(object):
cmap[code] = [glyphName]
return cmap
def getDataDirectoryListing(self, maxDepth=100):
"""
Returns a list of all files and directories
in the data directory. The returned paths will
be relative to the UFO.
"""
path = os.path.join(self._path, DATA_DIRNAME)
if not self._checkForFile(path):
return []
listing = self._getDirectoryListing(path, maxDepth=maxDepth)
return listing
def _getDirectoryListing(self, path, depth=0, maxDepth=100):
if depth > maxDepth:
raise UFOLibError("Maximum recusion depth reached.")
result = []
for fileName in os.listdir(path):
p = os.path.join(path, fileName)
if os.path.isdir(p):
result += self._getDirectoryListing(p, depth=depth+1, maxDepth=maxDepth)
else:
p = os.path.relpath(p, self._path)
result.append(p)
return result
# ----------
# UFO Writer