1c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen# Scan <Drag.h>, generating draggen.py. 2c4f6331690a379624a1230110123a2c6ddaff72bJack Jansenimport sys 3c4ff194bdd0b70241a8e56cfaa07d76eff6f3585Jack Jansenfrom bgenlocations import TOOLBOXDIR, BGENDIR, INCLUDEDIR 4c4f6331690a379624a1230110123a2c6ddaff72bJack Jansensys.path.append(BGENDIR) 5c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 6c4f6331690a379624a1230110123a2c6ddaff72bJack Jansenfrom scantools import Scanner 7c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 8c4f6331690a379624a1230110123a2c6ddaff72bJack JansenMISSING_DEFINES=""" 9182b5aca27d376b08a2904bed42b751496f932f3Tim PeterskDragHasLeftSenderWindow = (1 << 0) 10c4f6331690a379624a1230110123a2c6ddaff72bJack JansenkDragInsideSenderApplication = (1 << 1) 11182b5aca27d376b08a2904bed42b751496f932f3Tim PeterskDragInsideSenderWindow = (1 << 2) 12182b5aca27d376b08a2904bed42b751496f932f3Tim PeterskDragRegionAndImage = (1 << 4) 13182b5aca27d376b08a2904bed42b751496f932f3Tim PetersflavorSenderOnly = (1 << 0) 14182b5aca27d376b08a2904bed42b751496f932f3Tim PetersflavorSenderTranslated = (1 << 1) 15182b5aca27d376b08a2904bed42b751496f932f3Tim PetersflavorNotSaved = (1 << 2) 16182b5aca27d376b08a2904bed42b751496f932f3Tim PetersflavorSystemTranslated = (1 << 8) 17c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen""" 18c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 19c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 20c4f6331690a379624a1230110123a2c6ddaff72bJack Jansendef main(): 21182b5aca27d376b08a2904bed42b751496f932f3Tim Peters input = INCLUDEDIR + "Drag.h" 22182b5aca27d376b08a2904bed42b751496f932f3Tim Peters output = "draggen.py" 23182b5aca27d376b08a2904bed42b751496f932f3Tim Peters defsoutput = TOOLBOXDIR + "Dragconst.py" 24182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner = MyScanner(input, output, defsoutput) 25182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.scan() 26182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.close() 27182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Testing definitions output code ===" 28182b5aca27d376b08a2904bed42b751496f932f3Tim Peters execfile(defsoutput, {}, {}) 29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Done scanning and generating, now doing 'import dragsupport' ===" 30182b5aca27d376b08a2904bed42b751496f932f3Tim Peters import dragsupport 31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Done. It's up to you to compile Dragmodule.c ===" 32c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 33c4f6331690a379624a1230110123a2c6ddaff72bJack Jansenclass MyScanner(Scanner): 34c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def destination(self, type, name, arglist): 36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Function" 37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "functions" 38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if arglist: 39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters t, n, m = arglist[0] 40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if t in ('DragReference', 'DragRef') and m == "InMode": 41182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Method" 42182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "methods" 43182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return classname, listname 44c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 45182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def writeinitialdefs(self): 46182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 47182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("from Carbon.TextEdit import *\n") 48182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("from Carbon.QuickDraw import *\n") 49182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("fkDragActionAll = -1\n") 50182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("\n") 51182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Defines unparseable in Drag.h 52182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write(MISSING_DEFINES) 53c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 54182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklistnames(self): 55182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 56182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "kDragActionAll", 57182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 58c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 59182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklisttypes(self): 60182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 61182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "DragTrackingHandlerUPP", 62182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "DragReceiveHandlerUPP", 63182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "DragSendDataUPP", 64182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "DragInputUPP", 65182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "DragDrawingUPP", 66182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 67c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 68182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makerepairinstructions(self): 69182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 70182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("void_ptr", "*", "InMode"), ("Size", "*", "InMode")], 71182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("OptionalInBuffer", "*", "*")]), 72182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 73182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([("void", "*", "OutMode"), ("Size", "*", "OutMode")], 74182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [("VarOutBuffer", "*", "InOutMode")]), 75182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 76182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 77c4f6331690a379624a1230110123a2c6ddaff72bJack Jansen 78c4f6331690a379624a1230110123a2c6ddaff72bJack Jansenif __name__ == "__main__": 79182b5aca27d376b08a2904bed42b751496f932f3Tim Peters main() 80