Commit d7a6b700 authored by Jack Jansen's avatar Jack Jansen

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.
parent 64b1ab2a
...@@ -15,23 +15,35 @@ import types ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -907,4 +935,3 @@ def identify(str):
if __name__ == '__main__': if __name__ == '__main__':
main() main()
sys.exit(1) sys.exit(1)
print identify('for')
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment