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