mirror of
https://github.com/python/cpython.git
synced 2025-11-03 19:34:08 +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 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')
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue