| # Scan <Drag.h>, generating draggen.py. | |
| import sys | |
| from bgenlocations import TOOLBOXDIR, BGENDIR, INCLUDEDIR | |
| sys.path.append(BGENDIR) | |
| from scantools import Scanner | |
| MISSING_DEFINES=""" | |
| kDragHasLeftSenderWindow = (1 << 0) | |
| kDragInsideSenderApplication = (1 << 1) | |
| kDragInsideSenderWindow = (1 << 2) | |
| kDragRegionAndImage = (1 << 4) | |
| flavorSenderOnly = (1 << 0) | |
| flavorSenderTranslated = (1 << 1) | |
| flavorNotSaved = (1 << 2) | |
| flavorSystemTranslated = (1 << 8) | |
| """ | |
| def main(): | |
| input = INCLUDEDIR + "Drag.h" | |
| output = "draggen.py" | |
| defsoutput = TOOLBOXDIR + "Dragconst.py" | |
| scanner = MyScanner(input, output, defsoutput) | |
| scanner.scan() | |
| scanner.close() | |
| print "=== Testing definitions output code ===" | |
| execfile(defsoutput, {}, {}) | |
| print "=== Done scanning and generating, now doing 'import dragsupport' ===" | |
| import dragsupport | |
| print "=== Done. It's up to you to compile Dragmodule.c ===" | |
| class MyScanner(Scanner): | |
| def destination(self, type, name, arglist): | |
| classname = "Function" | |
| listname = "functions" | |
| if arglist: | |
| t, n, m = arglist[0] | |
| if t in ('DragReference', 'DragRef') and m == "InMode": | |
| classname = "Method" | |
| listname = "methods" | |
| return classname, listname | |
| def writeinitialdefs(self): | |
| self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") | |
| self.defsfile.write("from Carbon.TextEdit import *\n") | |
| self.defsfile.write("from Carbon.QuickDraw import *\n") | |
| self.defsfile.write("fkDragActionAll = -1\n") | |
| self.defsfile.write("\n") | |
| # Defines unparseable in Drag.h | |
| self.defsfile.write(MISSING_DEFINES) | |
| def makeblacklistnames(self): | |
| return [ | |
| "kDragActionAll", | |
| ] | |
| def makeblacklisttypes(self): | |
| return [ | |
| "DragTrackingHandlerUPP", | |
| "DragReceiveHandlerUPP", | |
| "DragSendDataUPP", | |
| "DragInputUPP", | |
| "DragDrawingUPP", | |
| ] | |
| def makerepairinstructions(self): | |
| return [ | |
| ([("void_ptr", "*", "InMode"), ("Size", "*", "InMode")], | |
| [("OptionalInBuffer", "*", "*")]), | |
| ([("void", "*", "OutMode"), ("Size", "*", "OutMode")], | |
| [("VarOutBuffer", "*", "InOutMode")]), | |
| ] | |
| if __name__ == "__main__": | |
| main() |