1# Scan an Apple header file, generating a Python file of generator calls.
2
3import sys
4from bgenlocations import TOOLBOXDIR, BGENDIR
5sys.path.append(BGENDIR)
6from scantools import Scanner
7
8LONG = "Appearance"
9SHORT = "app"
10OBJECT = "ThemeDrawingState"
11
12def main():
13    input = LONG + ".h"
14    output = SHORT + "gen.py"
15    defsoutput = TOOLBOXDIR + LONG + ".py"
16    scanner = MyScanner(input, output, defsoutput)
17    scanner.scan()
18    scanner.close()
19    print "=== Testing definitions output code ==="
20    execfile(defsoutput, {}, {})
21    print "=== Done scanning and generating, now importing the generated code... ==="
22    exec "import " + SHORT + "support"
23    print "=== Done.  It's up to you to compile it now! ==="
24
25class MyScanner(Scanner):
26
27    def destination(self, type, name, arglist):
28        classname = "Function"
29        listname = "functions"
30        if arglist:
31            t, n, m = arglist[0]
32            # This is non-functional today
33            if t == OBJECT and m == "InMode":
34                classname = "Method"
35                listname = "methods"
36        return classname, listname
37
38    def writeinitialdefs(self):
39        self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
40
41    def makeblacklistnames(self):
42        return [
43                "GetThemeFont",         # Funny stringbuffer in/out parameter, I think...
44                # Constants with funny definitions
45                "appearanceBadBrushIndexErr",
46                "appearanceProcessRegisteredErr",
47                "appearanceProcessNotRegisteredErr",
48                "appearanceBadTextColorIndexErr",
49                "appearanceThemeHasNoAccents",
50                "appearanceBadCursorIndexErr",
51                ]
52
53    def makeblacklisttypes(self):
54        return [
55                "MenuTitleDrawingUPP",
56                "MenuItemDrawingUPP",
57                "ThemeIteratorUPP",
58                "ThemeTabTitleDrawUPP",
59#                       "ThemeEraseUPP",
60#                       "ThemeButtonDrawUPP",
61                "WindowTitleDrawingUPP",
62                "ProcessSerialNumber_ptr",              # Too much work for now.
63                "ThemeTrackDrawInfo_ptr",       # Too much work
64#                       "ThemeButtonDrawInfo_ptr",      # ditto
65                "ThemeWindowMetrics_ptr",       # ditto
66#                       "ThemeDrawingState",    # This is an opaque pointer, so it should be simple. Later.
67                "Collection",           # No interface to collection mgr yet.
68                "BytePtr",              # Not yet.
69                ]
70
71    def makerepairinstructions(self):
72        return [
73                ([("void", 'inContext', "OutMode")],
74                 [("NULL", 'inContext', "InMode")]),
75                ([("Point", 'ioBounds', "OutMode")],
76                 [("Point", 'ioBounds', "InOutMode")]),
77                ]
78
79if __name__ == "__main__":
80    main()
81