Commit 887bec44 authored by Jack Jansen's avatar Jack Jansen

Detabbed.

parent e8767923
...@@ -492,27 +492,27 @@ def compileaete(aete, resinfo, fname, output=None, basepkgname=None, ...@@ -492,27 +492,27 @@ def compileaete(aete, resinfo, fname, output=None, basepkgname=None,
fp.write("import %s\n" % modname) fp.write("import %s\n" % modname)
fp.write("\n\n_code_to_module = {\n") fp.write("\n\n_code_to_module = {\n")
for code, modname in suitelist: for code, modname in suitelist:
fp.write("\t'%s' : %s,\n"%(ascii(code), modname)) fp.write(" '%s' : %s,\n"%(ascii(code), modname))
fp.write("}\n\n") fp.write("}\n\n")
fp.write("\n\n_code_to_fullname = {\n") fp.write("\n\n_code_to_fullname = {\n")
for code, modname in suitelist: for code, modname in suitelist:
fp.write("\t'%s' : ('%s.%s', '%s'),\n"%(ascii(code), packagename, modname, modname)) fp.write(" '%s' : ('%s.%s', '%s'),\n"%(ascii(code), packagename, modname, modname))
fp.write("}\n\n") fp.write("}\n\n")
for code, modname in suitelist: for code, modname in suitelist:
fp.write("from %s import *\n"%modname) fp.write("from %s import *\n"%modname)
# Generate property dicts and element dicts for all types declared in this module # Generate property dicts and element dicts for all types declared in this module
fp.write("\ndef getbaseclasses(v):\n") fp.write("\ndef getbaseclasses(v):\n")
fp.write("\tif not getattr(v, '_propdict', None):\n") fp.write(" if not getattr(v, '_propdict', None):\n")
fp.write("\t\tv._propdict = {}\n") fp.write(" v._propdict = {}\n")
fp.write("\t\tv._elemdict = {}\n") fp.write(" v._elemdict = {}\n")
fp.write("\t\tfor superclassname in getattr(v, '_superclassnames', []):\n") fp.write(" for superclassname in getattr(v, '_superclassnames', []):\n")
fp.write("\t\t\tsuperclass = eval(superclassname)\n") fp.write(" superclass = eval(superclassname)\n")
fp.write("\t\t\tgetbaseclasses(superclass)\n") fp.write(" getbaseclasses(superclass)\n")
fp.write("\t\t\tv._propdict.update(getattr(superclass, '_propdict', {}))\n") fp.write(" v._propdict.update(getattr(superclass, '_propdict', {}))\n")
fp.write("\t\t\tv._elemdict.update(getattr(superclass, '_elemdict', {}))\n") fp.write(" v._elemdict.update(getattr(superclass, '_elemdict', {}))\n")
fp.write("\t\tv._propdict.update(getattr(v, '_privpropdict', {}))\n") fp.write(" v._propdict.update(getattr(v, '_privpropdict', {}))\n")
fp.write("\t\tv._elemdict.update(getattr(v, '_privelemdict', {}))\n") fp.write(" v._elemdict.update(getattr(v, '_privelemdict', {}))\n")
fp.write("\n") fp.write("\n")
fp.write("import StdSuites\n") fp.write("import StdSuites\n")
allprecompinfo.sort() allprecompinfo.sort()
...@@ -528,16 +528,16 @@ def compileaete(aete, resinfo, fname, output=None, basepkgname=None, ...@@ -528,16 +528,16 @@ def compileaete(aete, resinfo, fname, output=None, basepkgname=None,
fp.write("_classdeclarations = {\n") fp.write("_classdeclarations = {\n")
for codenamemapper in allprecompinfo: for codenamemapper in allprecompinfo:
for k, v in codenamemapper.getall('class'): for k, v in codenamemapper.getall('class'):
fp.write("\t%s : %s,\n" % (`k`, v)) fp.write(" %s : %s,\n" % (`k`, v))
fp.write("}\n") fp.write("}\n")
if suitelist: if suitelist:
fp.write("\n\nclass %s(%s_Events"%(packagename, suitelist[0][1])) fp.write("\n\nclass %s(%s_Events"%(packagename, suitelist[0][1]))
for code, modname in suitelist[1:]: for code, modname in suitelist[1:]:
fp.write(",\n\t\t%s_Events"%modname) fp.write(",\n %s_Events"%modname)
fp.write(",\n\t\taetools.TalkTo):\n") fp.write(",\n aetools.TalkTo):\n")
fp.write("\t_signature = %s\n\n"%`creatorsignature`) fp.write(" _signature = %s\n\n"%`creatorsignature`)
fp.write("\t_moduleName = '%s'\n\n"%packagename) fp.write(" _moduleName = '%s'\n\n"%packagename)
fp.close() fp.close()
class SuiteCompiler: class SuiteCompiler:
...@@ -594,7 +594,7 @@ class SuiteCompiler: ...@@ -594,7 +594,7 @@ class SuiteCompiler:
for event in events: for event in events:
self.findenumsinevent(event) self.findenumsinevent(event)
objc = ObjectCompiler(None, basemodule, interact=(self.edit_modnames is None), objc = ObjectCompiler(None, self.modname, basemodule, interact=(self.edit_modnames is None),
verbose=self.verbose) verbose=self.verbose)
for cls in classes: for cls in classes:
objc.compileclass(cls) objc.compileclass(cls)
...@@ -669,9 +669,9 @@ class SuiteCompiler: ...@@ -669,9 +669,9 @@ class SuiteCompiler:
for event in events: for event in events:
self.compileevent(event) self.compileevent(event)
else: else:
fp.write("\tpass\n\n") fp.write(" pass\n\n")
objc = ObjectCompiler(fp, basemodule, precompinfo, interact=(self.edit_modnames is None), objc = ObjectCompiler(fp, self.modname, basemodule, precompinfo, interact=(self.edit_modnames is None),
verbose=self.verbose) verbose=self.verbose)
for cls in classes: for cls in classes:
objc.compileclass(cls) objc.compileclass(cls)
...@@ -706,10 +706,10 @@ class SuiteCompiler: ...@@ -706,10 +706,10 @@ class SuiteCompiler:
# generate name->keyword map # generate name->keyword map
# #
if arguments: if arguments:
fp.write("\t_argmap_%s = {\n"%funcname) fp.write(" _argmap_%s = {\n"%funcname)
for a in arguments: for a in arguments:
fp.write("\t\t%s : %s,\n"%(`identify(a[0])`, `a[1]`)) fp.write(" %s : %s,\n"%(`identify(a[0])`, `a[1]`))
fp.write("\t}\n\n") fp.write(" }\n\n")
# #
# Generate function header # Generate function header
...@@ -717,7 +717,7 @@ class SuiteCompiler: ...@@ -717,7 +717,7 @@ class SuiteCompiler:
has_arg = (not is_null(accepts)) has_arg = (not is_null(accepts))
opt_arg = (has_arg and is_optional(accepts)) opt_arg = (has_arg and is_optional(accepts))
fp.write("\tdef %s(self, "%funcname) fp.write(" def %s(self, "%funcname)
if has_arg: if has_arg:
if not opt_arg: if not opt_arg:
fp.write("_object, ") # Include direct object, if it has one fp.write("_object, ") # Include direct object, if it has one
...@@ -730,40 +730,40 @@ class SuiteCompiler: ...@@ -730,40 +730,40 @@ class SuiteCompiler:
# Generate doc string (important, since it may be the only # Generate doc string (important, since it may be the only
# available documentation, due to our name-remaping) # available documentation, due to our name-remaping)
# #
fp.write('\t\t"""%s: %s\n'%(ascii(name), ascii(desc))) fp.write(' """%s: %s\n'%(ascii(name), ascii(desc)))
if has_arg: if has_arg:
fp.write("\t\tRequired argument: %s\n"%getdatadoc(accepts)) fp.write(" Required argument: %s\n"%getdatadoc(accepts))
elif opt_arg: elif opt_arg:
fp.write("\t\tOptional argument: %s\n"%getdatadoc(accepts)) fp.write(" Optional argument: %s\n"%getdatadoc(accepts))
for arg in arguments: for arg in arguments:
fp.write("\t\tKeyword argument %s: %s\n"%(identify(arg[0]), fp.write(" Keyword argument %s: %s\n"%(identify(arg[0]),
getdatadoc(arg[2]))) getdatadoc(arg[2])))
fp.write("\t\tKeyword argument _attributes: AppleEvent attribute dictionary\n") fp.write(" Keyword argument _attributes: AppleEvent attribute dictionary\n")
if not is_null(returns): if not is_null(returns):
fp.write("\t\tReturns: %s\n"%getdatadoc(returns)) fp.write(" Returns: %s\n"%getdatadoc(returns))
fp.write('\t\t"""\n') fp.write(' """\n')
# #
# Fiddle the args so everything ends up in 'arguments' dictionary # Fiddle the args so everything ends up in 'arguments' dictionary
# #
fp.write("\t\t_code = %s\n"% `code`) fp.write(" _code = %s\n"% `code`)
fp.write("\t\t_subcode = %s\n\n"% `subcode`) fp.write(" _subcode = %s\n\n"% `subcode`)
# #
# Do keyword name substitution # Do keyword name substitution
# #
if arguments: if arguments:
fp.write("\t\taetools.keysubst(_arguments, self._argmap_%s)\n"%funcname) fp.write(" aetools.keysubst(_arguments, self._argmap_%s)\n"%funcname)
else: else:
fp.write("\t\tif _arguments: raise TypeError, 'No optional args expected'\n") fp.write(" if _arguments: raise TypeError, 'No optional args expected'\n")
# #
# Stuff required arg (if there is one) into arguments # Stuff required arg (if there is one) into arguments
# #
if has_arg: if has_arg:
fp.write("\t\t_arguments['----'] = _object\n") fp.write(" _arguments['----'] = _object\n")
elif opt_arg: elif opt_arg:
fp.write("\t\tif _object:\n") fp.write(" if _object:\n")
fp.write("\t\t\t_arguments['----'] = _object\n") fp.write(" _arguments['----'] = _object\n")
else: else:
fp.write("\t\tif _no_object != None: raise TypeError, 'No direct arg expected'\n") fp.write(" if _no_object != None: raise TypeError, 'No direct arg expected'\n")
fp.write("\n") fp.write("\n")
# #
# Do enum-name substitution # Do enum-name substitution
...@@ -773,28 +773,28 @@ class SuiteCompiler: ...@@ -773,28 +773,28 @@ class SuiteCompiler:
kname = a[1] kname = a[1]
ename = a[2][0] ename = a[2][0]
if ename <> '****': if ename <> '****':
fp.write("\t\taetools.enumsubst(_arguments, %s, _Enum_%s)\n" % fp.write(" aetools.enumsubst(_arguments, %s, _Enum_%s)\n" %
(`kname`, identify(ename))) (`kname`, identify(ename)))
self.enumsneeded[ename] = 1 self.enumsneeded[ename] = 1
fp.write("\n") fp.write("\n")
# #
# Do the transaction # Do the transaction
# #
fp.write("\t\t_reply, _arguments, _attributes = self.send(_code, _subcode,\n") fp.write(" _reply, _arguments, _attributes = self.send(_code, _subcode,\n")
fp.write("\t\t\t\t_arguments, _attributes)\n") fp.write(" _arguments, _attributes)\n")
# #
# Error handling # Error handling
# #
fp.write("\t\tif _arguments.get('errn', 0):\n") fp.write(" if _arguments.get('errn', 0):\n")
fp.write("\t\t\traise aetools.Error, aetools.decodeerror(_arguments)\n") fp.write(" raise aetools.Error, aetools.decodeerror(_arguments)\n")
fp.write("\t\t# XXXX Optionally decode result\n") fp.write(" # XXXX Optionally decode result\n")
# #
# Decode result # Decode result
# #
fp.write("\t\tif _arguments.has_key('----'):\n") fp.write(" if _arguments.has_key('----'):\n")
if is_enum(returns): if is_enum(returns):
fp.write("\t\t\t# XXXX Should do enum remapping here...\n") fp.write(" # XXXX Should do enum remapping here...\n")
fp.write("\t\t\treturn _arguments['----']\n") fp.write(" return _arguments['----']\n")
fp.write("\n") fp.write("\n")
def findenumsinevent(self, event): def findenumsinevent(self, event):
...@@ -838,8 +838,11 @@ class CodeNameMapper: ...@@ -838,8 +838,11 @@ class CodeNameMapper:
if not self.code2name[type].has_key(code): if not self.code2name[type].has_key(code):
self.code2name[type][code] = name self.code2name[type][code] = name
def hasname(self, type, name): def hasname(self, name):
return self.name2code[type].has_key(name) for dict in self.name2code.values():
if dict.has_key(name):
return True
return False
def hascode(self, type, code): def hascode(self, type, code):
return self.code2name[type].has_key(code) return self.code2name[type].has_key(code)
...@@ -875,12 +878,13 @@ class CodeNameMapper: ...@@ -875,12 +878,13 @@ class CodeNameMapper:
return self return self
class ObjectCompiler: class ObjectCompiler:
def __init__(self, fp, basesuite=None, othernamemappers=None, interact=1, def __init__(self, fp, modname, basesuite, othernamemappers=None, interact=1,
verbose=None): verbose=None):
self.fp = fp self.fp = fp
self.verbose = verbose self.verbose = verbose
self.basesuite = basesuite self.basesuite = basesuite
self.can_interact = interact self.can_interact = interact
self.modulename = modname
self.namemappers = [CodeNameMapper(self.can_interact, self.verbose)] self.namemappers = [CodeNameMapper(self.can_interact, self.verbose)]
if othernamemappers: if othernamemappers:
self.othernamemappers = othernamemappers[:] self.othernamemappers = othernamemappers[:]
...@@ -925,6 +929,14 @@ class ObjectCompiler: ...@@ -925,6 +929,14 @@ class ObjectCompiler:
mapper.addmodule(m, m.__name__, 0) mapper.addmodule(m, m.__name__, 0)
self.namemappers.append(mapper) self.namemappers.append(mapper)
def hasname(self, name):
for mapper in self.othernamemappers:
if mapper.hasname(name) and mapper.modulename != self.modulename:
if self.verbose:
print >>self.verbose, "Duplicate Python identifier:", name, self.modulename, mapper.modulename
return True
return False
def askdefinitionmodule(self, type, code): def askdefinitionmodule(self, type, code):
if not self.can_interact: if not self.can_interact:
if self.verbose: if self.verbose:
...@@ -951,8 +963,8 @@ class ObjectCompiler: ...@@ -951,8 +963,8 @@ class ObjectCompiler:
else: else:
if self.fp: if self.fp:
self.fp.write('\nclass %s(aetools.ComponentItem):\n' % pname) self.fp.write('\nclass %s(aetools.ComponentItem):\n' % pname)
self.fp.write('\t"""%s - %s """\n' % (ascii(name), ascii(desc))) self.fp.write(' """%s - %s """\n' % (ascii(name), ascii(desc)))
self.fp.write('\twant = %s\n' % `code`) self.fp.write(' want = %s\n' % `code`)
self.namemappers[0].addnamecode('class', pname, code) self.namemappers[0].addnamecode('class', pname, code)
properties.sort() properties.sort()
for prop in properties: for prop in properties:
...@@ -975,11 +987,13 @@ class ObjectCompiler: ...@@ -975,11 +987,13 @@ class ObjectCompiler:
if self.fp: if self.fp:
self.fp.write("\n_Prop_%s = _Prop_%s\n"%(pname, othername)) self.fp.write("\n_Prop_%s = _Prop_%s\n"%(pname, othername))
else: else:
if self.hasname(pname):
pass
if self.fp: if self.fp:
self.fp.write("class _Prop_%s(aetools.NProperty):\n" % pname) self.fp.write("class _Prop_%s(aetools.NProperty):\n" % pname)
self.fp.write('\t"""%s - %s """\n' % (ascii(name), ascii(what[1]))) self.fp.write(' """%s - %s """\n' % (ascii(name), ascii(what[1])))
self.fp.write("\twhich = %s\n" % `code`) self.fp.write(" which = %s\n" % `code`)
self.fp.write("\twant = %s\n" % `what[0]`) self.fp.write(" want = %s\n" % `what[0]`)
self.namemappers[0].addnamecode('property', pname, code) self.namemappers[0].addnamecode('property', pname, code)
def compileelement(self, elem): def compileelement(self, elem):
...@@ -1041,11 +1055,11 @@ class ObjectCompiler: ...@@ -1041,11 +1055,11 @@ class ObjectCompiler:
if self.fp: if self.fp:
self.fp.write("%s._privpropdict = {\n"%cname) self.fp.write("%s._privpropdict = {\n"%cname)
for n in plist: for n in plist:
self.fp.write("\t'%s' : _Prop_%s,\n"%(n, n)) self.fp.write(" '%s' : _Prop_%s,\n"%(n, n))
self.fp.write("}\n") self.fp.write("}\n")
self.fp.write("%s._privelemdict = {\n"%cname) self.fp.write("%s._privelemdict = {\n"%cname)
for n, fulln in elist: for n, fulln in elist:
self.fp.write("\t'%s' : %s,\n"%(n, fulln)) self.fp.write(" '%s' : %s,\n"%(n, fulln))
self.fp.write("}\n") self.fp.write("}\n")
def compilecomparison(self, comp): def compilecomparison(self, comp):
...@@ -1054,7 +1068,7 @@ class ObjectCompiler: ...@@ -1054,7 +1068,7 @@ class ObjectCompiler:
self.namemappers[0].addnamecode('comparison', iname, code) self.namemappers[0].addnamecode('comparison', iname, code)
if self.fp: if self.fp:
self.fp.write("class %s(aetools.NComparison):\n" % iname) self.fp.write("class %s(aetools.NComparison):\n" % iname)
self.fp.write('\t"""%s - %s """\n' % (ascii(name), ascii(comment))) self.fp.write(' """%s - %s """\n' % (ascii(name), ascii(comment)))
def compileenumeration(self, enum): def compileenumeration(self, enum):
[code, items] = enum [code, items] = enum
...@@ -1069,7 +1083,7 @@ class ObjectCompiler: ...@@ -1069,7 +1083,7 @@ class ObjectCompiler:
def compileenumerator(self, item): def compileenumerator(self, item):
[name, code, desc] = item [name, code, desc] = item
self.fp.write("\t%s : %s,\t# %s\n" % (`identify(name)`, `code`, ascii(desc))) self.fp.write(" %s : %s,\t# %s\n" % (`identify(name)`, `code`, ascii(desc)))
def checkforenum(self, enum): def checkforenum(self, enum):
"""This enum code is used by an event. Make sure it's available""" """This enum code is used by an event. Make sure it's available"""
...@@ -1091,28 +1105,28 @@ class ObjectCompiler: ...@@ -1091,28 +1105,28 @@ class ObjectCompiler:
classlist = self.namemappers[0].getall('class') classlist = self.namemappers[0].getall('class')
classlist.sort() classlist.sort()
for k, v in classlist: for k, v in classlist:
self.fp.write("\t%s : %s,\n" % (`k`, v)) self.fp.write(" %s : %s,\n" % (`k`, v))
self.fp.write("}\n") self.fp.write("}\n")
## self.fp.write("\n_propdeclarations = {\n") ## self.fp.write("\n_propdeclarations = {\n")
## proplist = self.namemappers[0].getall('property') ## proplist = self.namemappers[0].getall('property')
## proplist.sort() ## proplist.sort()
## for k, v in proplist: ## for k, v in proplist:
## self.fp.write("\t%s : _Prop_%s,\n" % (`k`, v)) ## self.fp.write(" %s : _Prop_%s,\n" % (`k`, v))
## self.fp.write("}\n") ## self.fp.write("}\n")
## ##
## self.fp.write("\n_compdeclarations = {\n") ## self.fp.write("\n_compdeclarations = {\n")
## complist = self.namemappers[0].getall('comparison') ## complist = self.namemappers[0].getall('comparison')
## complist.sort() ## complist.sort()
## for k, v in complist: ## for k, v in complist:
## self.fp.write("\t%s : %s,\n" % (`k`, v)) ## self.fp.write(" %s : %s,\n" % (`k`, v))
## self.fp.write("}\n") ## self.fp.write("}\n")
## ##
## self.fp.write("\n_enumdeclarations = {\n") ## self.fp.write("\n_enumdeclarations = {\n")
## enumlist = self.namemappers[0].getall('enum') ## enumlist = self.namemappers[0].getall('enum')
## enumlist.sort() ## enumlist.sort()
## for k, v in enumlist: ## for k, v in enumlist:
## self.fp.write("\t%s : %s,\n" % (`k`, v)) ## self.fp.write(" %s : %s,\n" % (`k`, v))
## self.fp.write("}\n") ## self.fp.write("}\n")
def compiledata(data): def compiledata(data):
......
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