]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
First try to use the OSATerminology module to get the terminology
authorJack Jansen <jack.jansen@cwi.nl>
Thu, 6 Mar 2003 23:04:38 +0000 (23:04 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Thu, 6 Mar 2003 23:04:38 +0000 (23:04 +0000)
resources before reverting to manually reading the resources.

Unfortunately there is still a bug in here somewhere: it doesn't work
for all applications.

Mac/scripts/gensuitemodule.py

index f72a50b29ba6b9a13509c2c6ad43b0617d762ce5..1cd2ef69a5c7e8850257439c86ff6db7529dcae3 100644 (file)
@@ -15,23 +15,35 @@ import types
 import StringIO
 import keyword
 import macresource
-from aetools import unpack
-
+import aetools
+import distutils.sysconfig
+import OSATerminology
 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():
        if len(sys.argv) > 1:
                for filename in sys.argv[1:]:
                        processfile(filename)
        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:
                        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"""
        cur = CurResFile()
        print "Processing", fullname
@@ -60,6 +72,22 @@ def processfile(fullname):
        UseResFile(cur)
        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):
        for aete, resinfo in aetelist:
                compileaete(aete, resinfo, fullname)
@@ -240,12 +268,12 @@ def compileaete(aete, resinfo, fname):
        if len(packagename) > 27:
                packagename = packagename[:27]
        pathname = EasyDialogs.AskFolder(message='Create and select package folder for %s'%packagename,
-               defaultLocation=DEFAULT_PACKAGEFOLDER)
+               defaultLocation=DEFAULT_USER_PACKAGEFOLDER)
        if not pathname:
                return
        packagename = os.path.split(os.path.normpath(pathname))[1]
        basepkgname = EasyDialogs.AskFolder(message='Package folder for base suite (usually StdSuites)',
-               defaultLocation=DEFAULT_PACKAGEFOLDER)
+               defaultLocation=DEFAULT_STANDARD_PACKAGEFOLDER)
        if basepkgname:
                dirname, basepkgname = os.path.split(os.path.normpath(basepkgname))
                if not dirname in sys.path:
@@ -907,4 +935,3 @@ def identify(str):
 if __name__ == '__main__':
        main()
        sys.exit(1)
-print identify('for')