1e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen# Scan an Apple header file, generating a Python file of generator calls.
2e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen
3e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenimport sys
4e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenfrom bgenlocations import TOOLBOXDIR, BGENDIR
5e2ba87396cde5b57259405722910c560f7d237c6Jack Jansensys.path.append(BGENDIR)
6e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenfrom scantools import Scanner_OSX
7e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen
8e2ba87396cde5b57259405722910c560f7d237c6Jack JansenLONG = "Folders"
9e2ba87396cde5b57259405722910c560f7d237c6Jack JansenSHORT = "folder"
10e2ba87396cde5b57259405722910c560f7d237c6Jack JansenOBJECT = "NOTUSED"
11e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen
12e2ba87396cde5b57259405722910c560f7d237c6Jack Jansendef main():
13182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    input = LONG + ".h"
14182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    output = SHORT + "gen.py"
15182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    defsoutput = TOOLBOXDIR + LONG + ".py"
16182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    scanner = MyScanner(input, output, defsoutput)
17182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    scanner.scan()
18182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    scanner.close()
19182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    scanner.gentypetest(SHORT+"typetest.py")
20182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    print "=== Testing definitions output code ==="
21182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    execfile(defsoutput, {}, {})
22182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    print "=== Done scanning and generating, now importing the generated code... ==="
23182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    exec "import " + SHORT + "support"
24182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    print "=== Done.  It's up to you to compile it now! ==="
25e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen
26e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenclass MyScanner(Scanner_OSX):
27e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen
28182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def destination(self, type, name, arglist):
29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        classname = "Function"
30182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        listname = "functions"
31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        if arglist:
32182b5aca27d376b08a2904bed42b751496f932f3Tim Peters            t, n, m = arglist[0]
33182b5aca27d376b08a2904bed42b751496f932f3Tim Peters            # This is non-functional today
34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters            if t == OBJECT and m == "InMode":
35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                classname = "Method"
36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                listname = "methods"
37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return classname, listname
38e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen
39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def makeblacklistnames(self):
40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return [
41182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "FindFolderExtended", # Has funny void* argument
42182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "FSFindFolderExtended", # ditto
43182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "FolderManagerRegisterCallNotificationProcs", # ditto
44e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen
45182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "FindFolderEx", # Non-MacOS routine
46182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ]
47182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
48182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def makeblacklisttypes(self):
49182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return [
50182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "FolderManagerNotificationProcPtr",
51182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "FolderManagerNotificationUPP",
52182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "FolderRouting", # To be done, not difficult
53182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "FolderDesc", # To be done, not difficult
54182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
55182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ]
56182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
57182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def makerepairinstructions(self):
58182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return [
59182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ]
60182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
61182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def writeinitialdefs(self):
62182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
63182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        self.defsfile.write("true = True\n")
64182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        self.defsfile.write("false = False\n")
65e2ba87396cde5b57259405722910c560f7d237c6Jack Jansen
66e2ba87396cde5b57259405722910c560f7d237c6Jack Jansenif __name__ == "__main__":
67182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    main()
68