1 | # Scan an Apple header file, generating a Python file of generator calls.
|
---|
2 |
|
---|
3 | import sys
|
---|
4 | from bgenlocations import TOOLBOXDIR, BGENDIR
|
---|
5 | sys.path.append(BGENDIR)
|
---|
6 | from scantools import Scanner_OSX
|
---|
7 |
|
---|
8 | LONG = "MacTextEditor"
|
---|
9 | SHORT = "mlte"
|
---|
10 | OBJECTS = ("TXNObject", "TXNFontMenuObject")
|
---|
11 | # ADD object typenames here
|
---|
12 |
|
---|
13 | def 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 |
|
---|
27 | class 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("""
|
---|
41 | def FOUR_CHAR_CODE(x): return x
|
---|
42 | false = 0
|
---|
43 | true = 1
|
---|
44 | kTXNClearThisControl = 0xFFFFFFFF
|
---|
45 | kTXNClearTheseFontFeatures = 0x80000000
|
---|
46 | kTXNDontCareTypeSize = 0xFFFFFFFF
|
---|
47 | kTXNDecrementTypeSize = 0x80000000
|
---|
48 | kTXNUseCurrentSelection = 0xFFFFFFFF
|
---|
49 | kTXNStartOffset = 0
|
---|
50 | kTXNEndOffset = 0x7FFFFFFF
|
---|
51 | MovieFileType = FOUR_CHAR_CODE('moov')
|
---|
52 | kTXNUseEncodingWordRulesMask = 0x80000000
|
---|
53 | kTXNFontSizeAttributeSize = 4
|
---|
54 | normal = 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 |
|
---|
141 | if __name__ == "__main__":
|
---|
142 | main()
|
---|