1# Scan <Drag.h>, generating draggen.py. 2import sys 3from bgenlocations import TOOLBOXDIR, BGENDIR, INCLUDEDIR 4sys.path.append(BGENDIR) 5 6from scantools import Scanner 7 8MISSING_DEFINES=""" 9kDragHasLeftSenderWindow = (1 << 0) 10kDragInsideSenderApplication = (1 << 1) 11kDragInsideSenderWindow = (1 << 2) 12kDragRegionAndImage = (1 << 4) 13flavorSenderOnly = (1 << 0) 14flavorSenderTranslated = (1 << 1) 15flavorNotSaved = (1 << 2) 16flavorSystemTranslated = (1 << 8) 17""" 18 19 20def main(): 21 input = INCLUDEDIR + "Drag.h" 22 output = "draggen.py" 23 defsoutput = TOOLBOXDIR + "Dragconst.py" 24 scanner = MyScanner(input, output, defsoutput) 25 scanner.scan() 26 scanner.close() 27 print "=== Testing definitions output code ===" 28 execfile(defsoutput, {}, {}) 29 print "=== Done scanning and generating, now doing 'import dragsupport' ===" 30 import dragsupport 31 print "=== Done. It's up to you to compile Dragmodule.c ===" 32 33class MyScanner(Scanner): 34 35 def destination(self, type, name, arglist): 36 classname = "Function" 37 listname = "functions" 38 if arglist: 39 t, n, m = arglist[0] 40 if t in ('DragReference', 'DragRef') and m == "InMode": 41 classname = "Method" 42 listname = "methods" 43 return classname, listname 44 45 def writeinitialdefs(self): 46 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 47 self.defsfile.write("from Carbon.TextEdit import *\n") 48 self.defsfile.write("from Carbon.QuickDraw import *\n") 49 self.defsfile.write("fkDragActionAll = -1\n") 50 self.defsfile.write("\n") 51 # Defines unparseable in Drag.h 52 self.defsfile.write(MISSING_DEFINES) 53 54 def makeblacklistnames(self): 55 return [ 56 "kDragActionAll", 57 ] 58 59 def makeblacklisttypes(self): 60 return [ 61 "DragTrackingHandlerUPP", 62 "DragReceiveHandlerUPP", 63 "DragSendDataUPP", 64 "DragInputUPP", 65 "DragDrawingUPP", 66 ] 67 68 def makerepairinstructions(self): 69 return [ 70 ([("void_ptr", "*", "InMode"), ("Size", "*", "InMode")], 71 [("OptionalInBuffer", "*", "*")]), 72 73 ([("void", "*", "OutMode"), ("Size", "*", "OutMode")], 74 [("VarOutBuffer", "*", "InOutMode")]), 75 76 ] 77 78if __name__ == "__main__": 79 main() 80