1d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansen# Scan an Apple header file, generating a Python file of generator calls.
2d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansen
3d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansenimport sys
4d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansenfrom bgenlocations import TOOLBOXDIR, BGENDIR
5d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansensys.path.append(BGENDIR)
6d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansenfrom scantools import Scanner_OSX
7d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansen
8d59f8d0691aff6649c70bfc764f7edce8d5f105cJack JansenLONG = "AppleHelp"
9d59f8d0691aff6649c70bfc764f7edce8d5f105cJack JansenSHORT = "ah"
10d59f8d0691aff6649c70bfc764f7edce8d5f105cJack JansenOBJECT = "NOTUSED"
11d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansen
12d59f8d0691aff6649c70bfc764f7edce8d5f105cJack 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    print "=== Testing definitions output code ==="
20182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    execfile(defsoutput, {}, {})
21182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    print "=== Done scanning and generating, now importing the generated code... ==="
22182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    exec "import " + SHORT + "support"
23182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    print "=== Done.  It's up to you to compile it now! ==="
24d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansen
25d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansenclass MyScanner(Scanner_OSX):
26d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansen
27182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def destination(self, type, name, arglist):
28182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        classname = "Function"
29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        listname = "functions"
30182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        if arglist:
31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters            t, n, m = arglist[0]
32182b5aca27d376b08a2904bed42b751496f932f3Tim Peters            # This is non-functional today
33182b5aca27d376b08a2904bed42b751496f932f3Tim Peters            if t == OBJECT and m == "InMode":
34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                classname = "Method"
35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                listname = "methods"
36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return classname, listname
37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def makeblacklistnames(self):
39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return [
40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ]
41182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
42182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def makeblacklisttypes(self):
43182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return [
44182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ]
45182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
46182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def makerepairinstructions(self):
47182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return [
48182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ]
49182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
50d59f8d0691aff6649c70bfc764f7edce8d5f105cJack Jansenif __name__ == "__main__":
51182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    main()
52