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_OSX
7
8LONG = "MacTextEditor"
9SHORT = "mlte"
10OBJECTS = ("TXNObject", "TXNFontMenuObject")
11# ADD object typenames here
12
13def main():
14    input = "MacTextEditor.h"
15    output = SHORT + "gen.py"
16    defsoutput = TOOLBOXDIR + LONG + ".py"
17    scanner = MyScanner(input, output, defsoutput)
18    scanner.scan()
19    scanner.gentypetest(SHORT+"typetest.py")
20    scanner.close()
21    print "=== Testing definitions output code ==="
22    execfile(defsoutput, {}, {})
23    print "=== Done scanning and generating, now importing the generated code... ==="
24    exec "import " + SHORT + "support"
25    print "=== Done.  It's up to you to compile it now! ==="
26
27class MyScanner(Scanner_OSX):
28
29    def destination(self, type, name, arglist):
30        classname = "Function"
31        listname = "functions"
32        if arglist:
33            t, n, m = arglist[0]
34            if t in OBJECTS and m == "InMode":
35                classname = "Method"
36                listname = t + "_methods"
37        return classname, listname
38
39    def writeinitialdefs(self):
40        self.defsfile.write("""
41def FOUR_CHAR_CODE(x): return x
42false = 0
43true = 1
44kTXNClearThisControl = 0xFFFFFFFF
45kTXNClearTheseFontFeatures = 0x80000000
46kTXNDontCareTypeSize = 0xFFFFFFFF
47kTXNDecrementTypeSize = 0x80000000
48kTXNUseCurrentSelection = 0xFFFFFFFF
49kTXNStartOffset = 0
50kTXNEndOffset = 0x7FFFFFFF
51MovieFileType = FOUR_CHAR_CODE('moov')
52kTXNUseEncodingWordRulesMask = 0x80000000
53kTXNFontSizeAttributeSize = 4
54normal = 0
55""")
56
57    def makeblacklistnames(self):
58        return [
59                "TXNGetFontDefaults", # Arg is too difficult
60                "TXNSetFontDefaults", # Arg is too difficult
61                "TXNInitTextension", # done manually
62
63                # Constants with funny definitions
64                "kTXNClearThisControl",
65                "kTXNClearTheseFontFeatures",
66                "kTXNDontCareTypeSize",
67                "kTXNDecrementTypeSize",
68                "kTXNUseCurrentSelection",
69                "kTXNStartOffset",
70                "kTXNEndOffset",
71                "kTXNQDFontNameAttributeSize",
72                "kTXNQDFontFamilyIDAttributeSize",
73                "kTXNQDFontSizeAttributeSize",
74                "kTXNQDFontStyleAttributeSize",
75                "kTXNQDFontColorAttributeSize",
76                "kTXNTextEncodingAttributeSize",
77                "kTXNUseEncodingWordRulesMask",
78                "kTXNFontSizeAttributeSize",
79                "status",
80                "justification",
81                'TXNTSMCheck', # OS8
82                ]
83
84    def makeblacklisttypes(self):
85        return [
86                "TXNTab", # TBD
87                "TXNMargins", # TBD
88                "TXNControlData", #TBD
89                "TXNATSUIFeatures", #TBD
90                "TXNATSUIVariations", #TBD
91                "TXNAttributeData", #TBD
92                "TXNTypeAttributes", #TBD
93                "TXNMatchTextRecord", #TBD
94                "TXNBackground", #TBD
95                "TXNFindUPP",
96                "ATSUStyle", #TBD
97                "TXNBackground_ptr", #TBD
98                "TXNControlData_ptr", #TBD
99                "TXNControlTag_ptr", #TBD
100                "TXNLongRect", #TBD
101                "TXNLongRect_ptr", #TBD
102                "TXNTypeAttributes_ptr", #TBD
103
104                "TXNActionKeyMapperProcPtr",
105                "TXNActionKeyMapperUPP",
106                "TXNTextBoxOptionsData",
107                "TXNCountOptions",
108                "void_ptr",
109                ]
110
111    def makerepairinstructions(self):
112        return [
113                # TXNNewObject has a lot of optional parameters
114                ([("FSSpec_ptr", "iFileSpec", "InMode")],
115                 [("OptFSSpecPtr", "*", "*")]),
116                ([("Rect", "iFrame", "OutMode")],
117                 [("OptRectPtr", "*", "InMode")]),
118
119                # In UH 332 some of the "const" are missing for input parameters passed
120                # by reference. We fix that up here.
121                ([("EventRecord", "iEvent", "OutMode")],
122                 [("EventRecord_ptr", "*", "InMode")]),
123                ([("FSSpec", "iFileSpecification", "OutMode")],
124                 [("FSSpec_ptr", "*", "InMode")]),
125                ([("TXNMacOSPreferredFontDescription", "iFontDefaults", "OutMode")],
126                 [("TXNMacOSPreferredFontDescription_ptr", "*", "InMode")]),
127
128                # In buffers are passed as void *
129                ([("void", "*", "OutMode"), ("ByteCount", "*", "InMode")],
130                 [("MlteInBuffer", "*", "InMode")]),
131
132                # The AdjustCursor region handle is optional
133                ([("RgnHandle", "ioCursorRgn", "InMode")],
134                 [("OptRgnHandle", "*", "*")]),
135
136                # The GWorld for TXNDraw is optional
137                ([('GWorldPtr', 'iDrawPort', 'InMode')],
138                 [('OptGWorldPtr', '*', '*')]),
139                ]
140
141if __name__ == "__main__":
142    main()
143