First try to use the OSATerminology module to get the terminology

resources before reverting to manually reading the resources.

Unfortunately there is still a bug in here somewhere: it doesn't work
for all applications.
This commit is contained in:
Jack Jansen 2003-03-06 23:04:38 +00:00
parent 7a251db9e6
commit fa1bf1c518

View file

@ -15,23 +15,35 @@ import types
import StringIO import StringIO
import keyword import keyword
import macresource import macresource
from aetools import unpack import aetools
import distutils.sysconfig
import OSATerminology
from Carbon.Res import * from Carbon.Res import *
import MacOS
DEFAULT_PACKAGEFOLDER=os.path.join(sys.prefix, 'Lib', 'plat-mac', 'lib-scriptpackages') _MAC_LIB_FOLDER=os.path.dirname(aetools.__file__)
DEFAULT_STANDARD_PACKAGEFOLDER=os.path.join(_MAC_LIB_FOLDER, 'lib-scriptpackages')
DEFAULT_USER_PACKAGEFOLDER=distutils.sysconfig.get_python_lib()
def main(): def main():
if len(sys.argv) > 1: if len(sys.argv) > 1:
for filename in sys.argv[1:]: for filename in sys.argv[1:]:
processfile(filename) processfile(filename)
else: else:
filename = EasyDialogs.AskFileForOpen(message='Select file with aeut/aete resource:') # The dialogOptionFlags below allows selection of .app bundles.
filename = EasyDialogs.AskFileForOpen(
message='Select scriptable application',
dialogOptionFlags=0x1056)
if not filename: if not filename:
sys.exit(0) sys.exit(0)
processfile(filename) try:
processfile(filename)
except MacOS.Error, arg:
print "Error getting terminology:", arg
print "Retry, manually parsing resources"
processfile_fromresource(filename)
def processfile(fullname): def processfile_fromresource(fullname):
"""Process all resources in a single file""" """Process all resources in a single file"""
cur = CurResFile() cur = CurResFile()
print "Processing", fullname print "Processing", fullname
@ -60,6 +72,22 @@ def processfile(fullname):
UseResFile(cur) UseResFile(cur)
compileaetelist(aetelist, fullname) compileaetelist(aetelist, fullname)
def processfile(fullname):
"""Ask an application for its terminology and process that"""
aedescobj, launched = OSATerminology.GetSysTerminology(fullname)
if launched:
print "Launched", fullname
raw = aetools.unpack(aedescobj)
if not raw:
print 'Unpack returned empty value:', raw
return
if not raw[0].data:
print 'Unpack returned value without data:', raw
return
aedata = raw[0]
aete = decode(aedata.data)
compileaete(aete, None, fullname)
def compileaetelist(aetelist, fullname): def compileaetelist(aetelist, fullname):
for aete, resinfo in aetelist: for aete, resinfo in aetelist:
compileaete(aete, resinfo, fullname) compileaete(aete, resinfo, fullname)
@ -240,12 +268,12 @@ def compileaete(aete, resinfo, fname):
if len(packagename) > 27: if len(packagename) > 27:
packagename = packagename[:27] packagename = packagename[:27]
pathname = EasyDialogs.AskFolder(message='Create and select package folder for %s'%packagename, pathname = EasyDialogs.AskFolder(message='Create and select package folder for %s'%packagename,
defaultLocation=DEFAULT_PACKAGEFOLDER) defaultLocation=DEFAULT_USER_PACKAGEFOLDER)
if not pathname: if not pathname:
return return
packagename = os.path.split(os.path.normpath(pathname))[1] packagename = os.path.split(os.path.normpath(pathname))[1]
basepkgname = EasyDialogs.AskFolder(message='Package folder for base suite (usually StdSuites)', basepkgname = EasyDialogs.AskFolder(message='Package folder for base suite (usually StdSuites)',
defaultLocation=DEFAULT_PACKAGEFOLDER) defaultLocation=DEFAULT_STANDARD_PACKAGEFOLDER)
if basepkgname: if basepkgname:
dirname, basepkgname = os.path.split(os.path.normpath(basepkgname)) dirname, basepkgname = os.path.split(os.path.normpath(basepkgname))
if not dirname in sys.path: if not dirname in sys.path:
@ -907,4 +935,3 @@ def identify(str):
if __name__ == '__main__': if __name__ == '__main__':
main() main()
sys.exit(1) sys.exit(1)
print identify('for')