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