def save(self, writer, removeUnreferencedImages=False, saveAs=False, progressBar=None): """ Save images. This method should not be called externally. Subclasses may override this method to implement custom saving behavior. """ if removeUnreferencedImages: self.disableNotifications() for fileName in self.unreferencedFileNames: del self[fileName] self.enableNotifications() if saveAs: font = self.font if font is not None and font.path is not None and os.path.exists( font.path): reader = UFOReader(font.path, validate=False) readerImageNames = reader.getImageDirectoryListing( validate=self.ufoLibReadValidate) for fileName, data in self._data.items(): if data["data"] is not None or fileName not in readerImageNames: continue writer.copyImageFromReader( reader, fileName, fileName, validate=self.ufoLibWriteValidate) for fileName in self._scheduledForDeletion: try: writer.removeImage(fileName, validate=self.ufoLibWriteValidate) except UFOLibError: # this will be raised if the file doesn't exist. # instead of trying to maintain a list of in UFO # vs. in memory, simply fail and move on when # something can't be deleted because it isn't # in the UFO. pass self._scheduledForDeletion.clear() for fileName, data in self._data.items(): if not data["dirty"]: continue writer.writeImage(fileName, data["data"], validate=self.ufoLibWriteValidate) data["dirty"] = False data["onDisk"] = True data["onDiskModTime"] = writer.getFileModificationTime( "%s/%s" % ("images", fileName)) self.dirty = False
def save(self, writer, removeUnreferencedImages=False, saveAs=False, progressBar=None): """ Save images. This method should not be called externally. Subclasses may override this method to implement custom saving behavior. """ if removeUnreferencedImages: self.disableNotifications() for fileName in self.unreferencedFileNames: del self[fileName] self.enableNotifications() if saveAs: font = self.font if font is not None and font.path is not None and os.path.exists(font.path): reader = UFOReader(font.path, validate=False) readerImageNames = reader.getImageDirectoryListing(validate=self.ufoLibReadValidate) for fileName, data in self._data.items(): if data["data"] is not None or fileName not in readerImageNames: continue writer.copyImageFromReader(reader, fileName, fileName, validate=self.ufoLibWriteValidate) for fileName in self._scheduledForDeletion: try: writer.removeImage(fileName, validate=self.ufoLibWriteValidate) except UFOLibError: # this will be raised if the file doesn't exist. # instead of trying to maintain a list of in UFO # vs. in memory, simply fail and move on when # something can't be deleted because it isn't # in the UFO. pass self._scheduledForDeletion.clear() for fileName, data in self._data.items(): if not data["dirty"]: continue writer.writeImage(fileName, data["data"], validate=self.ufoLibWriteValidate) data["dirty"] = False data["onDisk"] = True data["onDiskModTime"] = writer.getFileModificationTime("%s/%s" % ("images", fileName)) self.dirty = False
def list_contents(reader: UFOReader) -> list[str]: """Returns a list of POSIX filename strings in the image data store.""" return reader.getImageDirectoryListing() # type: ignore