16259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansen# Scan an Apple header file, generating a Python file of generator calls. 26259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansen 30c4d947eacfb360515a5ba58f1a6b96dddc6d265Jack Jansenimport sys 4aaebdd6a02dd4d650b14e2192e327336ecb62a98Jack Jansenfrom bgenlocations import TOOLBOXDIR, BGENDIR 50c4d947eacfb360515a5ba58f1a6b96dddc6d265Jack Jansensys.path.append(BGENDIR) 66259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansenfrom scantools import Scanner 76259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansen 86259af9bbbb0968abce4b91b966139fb7b3d386eJack JansenLONG = "Fonts" 921f96872f20080d5f07a72ea4141fac137ac9b15Jack JansenSHORT = "fm" 106259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansen 116259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansendef main(): 12182b5aca27d376b08a2904bed42b751496f932f3Tim Peters input = "Fonts.h" 13182b5aca27d376b08a2904bed42b751496f932f3Tim Peters output = SHORT + "gen.py" 14182b5aca27d376b08a2904bed42b751496f932f3Tim Peters defsoutput = TOOLBOXDIR + LONG + ".py" 15182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner = MyScanner(input, output, defsoutput) 16182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.scan() 17182b5aca27d376b08a2904bed42b751496f932f3Tim Peters scanner.close() 18182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Testing definitions output code ===" 19182b5aca27d376b08a2904bed42b751496f932f3Tim Peters execfile(defsoutput, {}, {}) 20182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Done scanning and generating, now importing the generated code... ===" 21182b5aca27d376b08a2904bed42b751496f932f3Tim Peters exec "import " + SHORT + "support" 22182b5aca27d376b08a2904bed42b751496f932f3Tim Peters print "=== Done. It's up to you to compile it now! ===" 236259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansen 246259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansenclass MyScanner(Scanner): 256259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansen 26182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def destination(self, type, name, arglist): 27182b5aca27d376b08a2904bed42b751496f932f3Tim Peters classname = "Function" 28182b5aca27d376b08a2904bed42b751496f932f3Tim Peters listname = "functions" 29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return classname, listname 306259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansen 31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklistnames(self): 32182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 33182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "OutlineMetrics", # Too complicated 34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AntiTextIsAntiAliased", # XXXX Missing from library... 35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AntiTextGetEnabled", 36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AntiTextSetEnabled", 37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AntiTextGetApplicationAware", 38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "AntiTextSetApplicationAware", 39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # These are tricky: they're not Carbon dependent or anything, but they 40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # exist only on 8.6 or later (both in Carbon and Classic). 41182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # Disabling them is the easiest path. 42182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'SetAntiAliasedTextEnabled', 43182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'IsAntiAliasedTextEnabled', 44182b5aca27d376b08a2904bed42b751496f932f3Tim Peters # OS8-only 45182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'InitFonts', 46182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'SetFontLock', 47182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 'FlushFonts', 48182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 496259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansen 50182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makeblacklisttypes(self): 51182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 52182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FMInput_ptr", # Not needed for now 53182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FMOutPtr", # Ditto 54182b5aca27d376b08a2904bed42b751496f932f3Tim Peters## "void_ptr", # Don't know how to do this right now 55182b5aca27d376b08a2904bed42b751496f932f3Tim Peters "FontInfo", # Ditto 56182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 576259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansen 58182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def makerepairinstructions(self): 59182b5aca27d376b08a2904bed42b751496f932f3Tim Peters return [ 60182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('Str255', '*', 'InMode')], [('Str255', '*', 'OutMode')]), 61182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('FMetricRecPtr', 'theMetrics', 'InMode')], [('FMetricRecPtr', 'theMetrics', 'OutMode')]), 62182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ([('short', 'byteCount', 'InMode'), ('void_ptr', 'textAddr', 'InMode'),], 63182b5aca27d376b08a2904bed42b751496f932f3Tim Peters [('TextBuffer', 'inText', 'InMode')]), 64182b5aca27d376b08a2904bed42b751496f932f3Tim Peters ] 65182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 66182b5aca27d376b08a2904bed42b751496f932f3Tim Peters def writeinitialdefs(self): 67182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n") 68182b5aca27d376b08a2904bed42b751496f932f3Tim Peters self.defsfile.write("kNilOptions = 0\n") 69b55e5f1b62534786cf7e5be9fe25473a78613b83Jack Jansen 706259af9bbbb0968abce4b91b966139fb7b3d386eJack Jansenif __name__ == "__main__": 71182b5aca27d376b08a2904bed42b751496f932f3Tim Peters main() 72