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