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:
parent
92ecfb2926
commit
5ca40a8bda
@ -66,6 +66,8 @@ class UFOLibError(Exception): pass
|
|||||||
# ----------
|
# ----------
|
||||||
|
|
||||||
DEFAULT_GLYPHS_DIRNAME = "glyphs"
|
DEFAULT_GLYPHS_DIRNAME = "glyphs"
|
||||||
|
DATA_DIRNAME = "data"
|
||||||
|
IMAGES_DIRNAME = "images"
|
||||||
METAINFO_FILENAME = "metainfo.plist"
|
METAINFO_FILENAME = "metainfo.plist"
|
||||||
FONTINFO_FILENAME = "fontinfo.plist"
|
FONTINFO_FILENAME = "fontinfo.plist"
|
||||||
LIB_FILENAME = "lib.plist"
|
LIB_FILENAME = "lib.plist"
|
||||||
@ -216,6 +218,24 @@ class UFOReader(object):
|
|||||||
else:
|
else:
|
||||||
return True
|
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):
|
def readMetaInfo(self):
|
||||||
"""
|
"""
|
||||||
Read metainfo.plist. Only used for internal operations.
|
Read metainfo.plist. Only used for internal operations.
|
||||||
@ -387,6 +407,30 @@ class UFOReader(object):
|
|||||||
cmap[code] = [glyphName]
|
cmap[code] = [glyphName]
|
||||||
return cmap
|
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
|
# UFO Writer
|
||||||
|
Loading…
x
Reference in New Issue
Block a user