12aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansen# Scan an Apple header file, generating a Python file of generator calls.
22aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansen
32aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansenimport sys
4aaebdd6a02dd4d650b14e2192e327336ecb62a98Jack Jansenfrom bgenlocations import TOOLBOXDIR, BGENDIR
52aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansensys.path.append(BGENDIR)
62aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansenfrom scantools import Scanner_OSX
72aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansen
82aadb891e7c8192ad538413e13caa0c59fb720ecJack JansenLONG = "MacTextEditor"
92aadb891e7c8192ad538413e13caa0c59fb720ecJack JansenSHORT = "mlte"
102aadb891e7c8192ad538413e13caa0c59fb720ecJack JansenOBJECTS = ("TXNObject", "TXNFontMenuObject")
112aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansen# ADD object typenames here
122aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansen
132aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansendef main():
14182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    input = "MacTextEditor.h"
15182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    output = SHORT + "gen.py"
16182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    defsoutput = TOOLBOXDIR + LONG + ".py"
17182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    scanner = MyScanner(input, output, defsoutput)
18182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    scanner.scan()
19182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    scanner.gentypetest(SHORT+"typetest.py")
20182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    scanner.close()
21182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    print "=== Testing definitions output code ==="
22182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    execfile(defsoutput, {}, {})
23182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    print "=== Done scanning and generating, now importing the generated code... ==="
24182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    exec "import " + SHORT + "support"
25182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    print "=== Done.  It's up to you to compile it now! ==="
262aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansen
272aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansenclass MyScanner(Scanner_OSX):
282aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansen
29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def destination(self, type, name, arglist):
30182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        classname = "Function"
31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        listname = "functions"
32182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        if arglist:
33182b5aca27d376b08a2904bed42b751496f932f3Tim Peters            t, n, m = arglist[0]
34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters            if t in OBJECTS and m == "InMode":
35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                classname = "Method"
36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                listname = t + "_methods"
37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return classname, listname
38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def writeinitialdefs(self):
40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        self.defsfile.write("""
41f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack Jansendef FOUR_CHAR_CODE(x): return x
42f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack Jansenfalse = 0
43f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack Jansentrue = 1
44f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack JansenkTXNClearThisControl = 0xFFFFFFFF
45f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack JansenkTXNClearTheseFontFeatures = 0x80000000
46f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack JansenkTXNDontCareTypeSize = 0xFFFFFFFF
47f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack JansenkTXNDecrementTypeSize = 0x80000000
48f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack JansenkTXNUseCurrentSelection = 0xFFFFFFFF
49f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack JansenkTXNStartOffset = 0
50f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack JansenkTXNEndOffset = 0x7FFFFFFF
51f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack JansenMovieFileType = FOUR_CHAR_CODE('moov')
527ca993ed37f84491885cc2d96ae7d1a575a7a2f4Jack JansenkTXNUseEncodingWordRulesMask = 0x80000000
537ca993ed37f84491885cc2d96ae7d1a575a7a2f4Jack JansenkTXNFontSizeAttributeSize = 4
54da6081fccb71541004e3f36f57a9c0971a969e3bJack Jansennormal = 0
55f0ded2f0bc1bb295aaab0b4385a576a99088c18cJack Jansen""")
562aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansen
57182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def makeblacklistnames(self):
58182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return [
59182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNGetFontDefaults", # Arg is too difficult
60182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNSetFontDefaults", # Arg is too difficult
61182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNInitTextension", # done manually
62182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
63182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                # Constants with funny definitions
64182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNClearThisControl",
65182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNClearTheseFontFeatures",
66182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNDontCareTypeSize",
67182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNDecrementTypeSize",
68182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNUseCurrentSelection",
69182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNStartOffset",
70182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNEndOffset",
71182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNQDFontNameAttributeSize",
72182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNQDFontFamilyIDAttributeSize",
73182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNQDFontSizeAttributeSize",
74182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNQDFontStyleAttributeSize",
75182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNQDFontColorAttributeSize",
76182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNTextEncodingAttributeSize",
77182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNUseEncodingWordRulesMask",
78182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "kTXNFontSizeAttributeSize",
79182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "status",
80182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "justification",
81182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                'TXNTSMCheck', # OS8
82182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ]
83182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
84182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def makeblacklisttypes(self):
85182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return [
86182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNTab", # TBD
87182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNMargins", # TBD
88182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNControlData", #TBD
89182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNATSUIFeatures", #TBD
90182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNATSUIVariations", #TBD
91182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNAttributeData", #TBD
92182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNTypeAttributes", #TBD
93182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNMatchTextRecord", #TBD
94182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNBackground", #TBD
95182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNFindUPP",
96182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "ATSUStyle", #TBD
97182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNBackground_ptr", #TBD
98182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNControlData_ptr", #TBD
99182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNControlTag_ptr", #TBD
100182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNLongRect", #TBD
101182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNLongRect_ptr", #TBD
102182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNTypeAttributes_ptr", #TBD
103182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
104182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNActionKeyMapperProcPtr",
105182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNActionKeyMapperUPP",
106182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNTextBoxOptionsData",
107182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "TXNCountOptions",
108182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                "void_ptr",
109182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ]
110182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
111182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    def makerepairinstructions(self):
112182b5aca27d376b08a2904bed42b751496f932f3Tim Peters        return [
113182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                # TXNNewObject has a lot of optional parameters
114182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ([("FSSpec_ptr", "iFileSpec", "InMode")],
115182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                 [("OptFSSpecPtr", "*", "*")]),
116182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ([("Rect", "iFrame", "OutMode")],
117182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                 [("OptRectPtr", "*", "InMode")]),
118182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
119182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                # In UH 332 some of the "const" are missing for input parameters passed
120182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                # by reference. We fix that up here.
121182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ([("EventRecord", "iEvent", "OutMode")],
122182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                 [("EventRecord_ptr", "*", "InMode")]),
123182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ([("FSSpec", "iFileSpecification", "OutMode")],
124182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                 [("FSSpec_ptr", "*", "InMode")]),
125182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ([("TXNMacOSPreferredFontDescription", "iFontDefaults", "OutMode")],
126182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                 [("TXNMacOSPreferredFontDescription_ptr", "*", "InMode")]),
127182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
128182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                # In buffers are passed as void *
129182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ([("void", "*", "OutMode"), ("ByteCount", "*", "InMode")],
130182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                 [("MlteInBuffer", "*", "InMode")]),
131182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
132182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                # The AdjustCursor region handle is optional
133182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ([("RgnHandle", "ioCursorRgn", "InMode")],
134182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                 [("OptRgnHandle", "*", "*")]),
135182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
136182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                # The GWorld for TXNDraw is optional
137182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ([('GWorldPtr', 'iDrawPort', 'InMode')],
138182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                 [('OptGWorldPtr', '*', '*')]),
139182b5aca27d376b08a2904bed42b751496f932f3Tim Peters                ]
140182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
1412aadb891e7c8192ad538413e13caa0c59fb720ecJack Jansenif __name__ == "__main__":
142182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    main()
143