def menu_save(self): if not self.path: self.menu_save_as() return # Will call us recursively # # First save data # dhandle = self.ted.WEGetText() data = dhandle.data fp = open(self.path, 'wb') # NOTE: wb, because data has CR for end-of-line fp.write(data) if data[-1] <> '\r': fp.write('\r') fp.close() # # Now save style and soup # oldresfile = Res.CurResFile() try: rf = Res.FSpOpenResFile(self.path, 3) except Res.Error: Res.FSpCreateResFile(self.path, '????', 'TEXT', macfs.smAllScripts) rf = Res.FSpOpenResFile(self.path, 3) styles = Res.Resource('') soup = Res.Resource('') self.ted.WECopyRange(0, 0x3fffffff, None, styles, soup) styles.AddResource('styl', 128, '') soup.AddResource('SOUP', 128, '') Res.CloseResFile(rf) Res.UseResFile(oldresfile) self.ted.WEResetModCount()
def save(self, destresfile=None): if self.mode <> 'w': raise error, "can't save font: no write permission" self._buildfontassociationtable() self._buildoffsettable() self._buildboundingboxtable() self._buildglyphwidthtable() self._buildkerningtables() self._buildstylemappingtable() self._buildglyphencodingsubtable() rawnames = [ "_rawheader", "_rawfontassociationtable", "_rawoffsettable", "_rawglyphwidthtable", "_rawstylemappingtable", "_rawglyphencodingsubtable", "_rawkerningtables" ] for name in rawnames[1:]: # skip header data = getattr(self, name) if len(data) & 1: setattr(self, name, data + '\0') self.ffWTabOff = FONDheadersize + len( self._rawfontassociationtable) + len(self._rawoffsettable) self.ffStylOff = self.ffWTabOff + len(self._rawglyphwidthtable) self.ffKernOff = self.ffStylOff + len( self._rawstylemappingtable) + len(self._rawglyphencodingsubtable) self.glyphTableOffset = len(self._rawstylemappingtable) if not self._rawglyphwidthtable: self.ffWTabOff = 0 if not self._rawstylemappingtable: self.ffStylOff = 0 if not self._rawglyphencodingsubtable: self.glyphTableOffset = 0 if not self._rawkerningtables: self.ffKernOff = 0 self._buildheader() # glyphTableOffset has only just been calculated self._updatestylemappingtable() newdata = "" for name in rawnames: newdata = newdata + getattr(self, name) if destresfile is None: self.FOND.data = newdata self.FOND.ChangedResource() self.FOND.WriteResource() else: ID, type, name = self.FOND.GetResInfo() self.FOND.DetachResource() self.FOND.data = newdata saveref = Res.CurResFile() Res.UseResFile(destresfile) self.FOND.AddResource(type, ID, name) Res.UseResFile(saveref) self.changed = 0
def __init__(self, path=None): self.version = 1 self.fragments = [] self.path = path if path is not None and os.path.exists(path): currentresref = Res.CurResFile() resref = Res.FSpOpenResFile(path, 1) Res.UseResFile(resref) try: try: data = Res.Get1Resource('cfrg', 0).data except Res.Error: raise Res.Error, "no 'cfrg' resource found", sys.exc_traceback finally: Res.CloseResFile(resref) Res.UseResFile(currentresref) self.parse(data) if self.version != 1: raise error, "unknown 'cfrg' resource format"
def getstylesoup(self, pathname): if not pathname: return None, None oldrf = Res.CurResFile() try: rf = Res.FSpOpenResFile(self.path, 1) except Res.Error: return None, None try: hstyle = Res.Get1Resource('styl', 128) hstyle.DetachResource() except Res.Error: hstyle = None try: hsoup = Res.Get1Resource('SOUP', 128) hsoup.DetachResource() except Res.Error: hsoup = None Res.CloseResFile(rf) Res.UseResFile(oldrf) return hstyle, hsoup
# A minimal text editor.
#
"""codefragments.py -- wrapper to modify code fragments."""