1# Scan an Apple header file, generating a Python file of generator calls. 2 3import sys 4from bgenlocations import TOOLBOXDIR, BGENDIR 5sys.path.append(BGENDIR) 6from scantools import Scanner 7 8LONG = "Icons" 9SHORT = "icn" 10OBJECT = "NOTUSED" 11 12def main(): 13 input = LONG + ".h" 14 output = SHORT + "gen.py" 15 defsoutput = TOOLBOXDIR + LONG + ".py" 16 scanner = MyScanner(input, output, defsoutput) 17 scanner.scan() 18 scanner.close() 19 print "=== Testing definitions output code ===" 20 execfile(defsoutput, {}, {}) 21 print "=== Done scanning and generating, now importing the generated code... ===" 22 exec "import " + SHORT + "support" 23 print "=== Done. It's up to you to compile it now! ===" 24 25class MyScanner(Scanner): 26 27 def destination(self, type, name, arglist): 28 classname = "Function" 29 listname = "functions" 30 if arglist: 31 t, n, m = arglist[0] 32 # This is non-functional today 33 if t == OBJECT and m == "InMode": 34 classname = "Method" 35 listname = "methods" 36 return classname, listname 37 38 def makeblacklistnames(self): 39 return [ 40 "GetIconCacheData", 41 "SetIconCacheData", 42 # Constants with funny definitions 43 "kSelectorAllHugeData", 44 "kSelectorAllAvailableData", 45 "svAllAvailableData", 46 # Something in a comment accidentally seen as a const definition 47 "err", 48 # OS8 only 49 'IconServicesTerminate', 50 # Lazy, right now. 51 "GetIconRefFromFileInfo" 52 ] 53 54 def makeblacklisttypes(self): 55 return [ 56 "IconActionUPP", 57 "IconGetterUPP", 58 "CFragInitBlockPtr", 59 "CGRect_ptr", 60 ] 61 62 def makerepairinstructions(self): 63 return [ 64 ] 65 66 def writeinitialdefs(self): 67 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 68 self.defsfile.write("from Carbon.Files import *\n") 69 70if __name__ == "__main__": 71 main() 72