blob: e48a229de764d01c2d546c28bee74b8c8ee6b60e [file] [log] [blame]
Jack Jansen2aadb892001-07-13 20:56:52 +00001# Scan an Apple header file, generating a Python file of generator calls.
2
3import sys
Jack Jansenaaebdd62002-08-05 15:39:30 +00004from bgenlocations import TOOLBOXDIR, BGENDIR
Jack Jansen2aadb892001-07-13 20:56:52 +00005sys.path.append(BGENDIR)
6from scantools import Scanner_OSX
Jack Jansen2aadb892001-07-13 20:56:52 +00007
8LONG = "MacTextEditor"
9SHORT = "mlte"
10OBJECTS = ("TXNObject", "TXNFontMenuObject")
11# ADD object typenames here
12
13def main():
Tim Peters182b5ac2004-07-18 06:16:08 +000014 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! ==="
Jack Jansen2aadb892001-07-13 20:56:52 +000026
27class MyScanner(Scanner_OSX):
28
Tim Peters182b5ac2004-07-18 06:16:08 +000029 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
Jack Jansen2aadb892001-07-13 20:56:52 +000038
Tim Peters182b5ac2004-07-18 06:16:08 +000039 def writeinitialdefs(self):
40 self.defsfile.write("""
Jack Jansenf0ded2f2001-07-14 14:00:50 +000041def 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')
Jack Jansen7ca993e2002-08-15 22:05:58 +000052kTXNUseEncodingWordRulesMask = 0x80000000
53kTXNFontSizeAttributeSize = 4
Jack Jansenda6081f2003-12-03 23:20:13 +000054normal = 0
Jack Jansenf0ded2f2001-07-14 14:00:50 +000055""")
Jack Jansen2aadb892001-07-13 20:56:52 +000056
Tim Peters182b5ac2004-07-18 06:16:08 +000057 def makeblacklistnames(self):
58 return [
59 "TXNGetFontDefaults", # Arg is too difficult
60 "TXNSetFontDefaults", # Arg is too difficult
61 "TXNInitTextension", # done manually
Jack Jansen2aadb892001-07-13 20:56:52 +000062
Tim Peters182b5ac2004-07-18 06:16:08 +000063 # 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 ]
Jack Jansenda6081f2003-12-03 23:20:13 +000083
Tim Peters182b5ac2004-07-18 06:16:08 +000084 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
Jack Jansen2aadb892001-07-13 20:56:52 +0000103
Tim Peters182b5ac2004-07-18 06:16:08 +0000104 "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
Jack Jansen2aadb892001-07-13 20:56:52 +0000141if __name__ == "__main__":
Tim Peters182b5ac2004-07-18 06:16:08 +0000142 main()