mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
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:
parent
7a251db9e6
commit
fa1bf1c518
1 changed files with 36 additions and 9 deletions
|
|
@ -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')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue