blob: b5a2b4310a92a9bd2fe5c0838b1447a3fe7b323c [file] [log] [blame]
Jack Jansen90ecdf41996-04-16 14:29:15 +00001# Scan an Apple header file, generating a Python file of generator calls.
2
Jack Jansen0c4d9471998-04-17 14:07:56 +00003import sys
4import os
Jack Jansenc4ff1942002-08-05 21:13:07 +00005from bgenlocations import TOOLBOXDIR, BGENDIR
Jack Jansen0c4d9471998-04-17 14:07:56 +00006sys.path.append(BGENDIR)
Jack Jansenb99e5212002-01-11 12:37:15 +00007from scantools import Scanner
Jack Jansen90ecdf41996-04-16 14:29:15 +00008
Jack Jansen7107c1a2003-11-20 13:31:00 +00009WASTEDIR='/Users/jack/src/waste/C_C++ Headers/'
Tim Peters182b5ac2004-07-18 06:16:08 +000010
Jack Jansenc4ff1942002-08-05 21:13:07 +000011if not os.path.exists(WASTEDIR):
Tim Peters182b5ac2004-07-18 06:16:08 +000012 raise 'Error: not found: %s', WASTEDIR
Jack Jansen90ecdf41996-04-16 14:29:15 +000013
14OBJECT = "TEHandle"
15SHORT = "waste"
16OBJECT = "WEReference"
17OBJECT2 = "WEObjectReference"
18
19def main():
Tim Peters182b5ac2004-07-18 06:16:08 +000020 input = WASTEDIR + "WASTE.h"
21 output = SHORT + "gen.py"
22 defsoutput = os.path.join(os.path.split(TOOLBOXDIR)[0], "WASTEconst.py")
23 scanner = MyScanner(input, output, defsoutput)
24 scanner.scan()
25## scanner.gentypetest(SHORT+"typetest.py")
26 scanner.close()
27 print "=== Testing definitions output code ==="
28 execfile(defsoutput, {}, {})
29 print "=== Done scanning and generating, now importing the generated code... ==="
30 exec "import " + SHORT + "support"
31 print "=== Done. It's up to you to compile it now! ==="
Jack Jansen90ecdf41996-04-16 14:29:15 +000032
Jack Jansenb99e5212002-01-11 12:37:15 +000033#class MyScanner(Scanner_PreUH3):
34class MyScanner(Scanner):
Jack Jansen90ecdf41996-04-16 14:29:15 +000035
Tim Peters182b5ac2004-07-18 06:16:08 +000036 def destination(self, type, name, arglist):
37 classname = "Function"
38 listname = "functions"
39 if arglist:
40 t, n, m = arglist[-1]
41 # This is non-functional today
42 if t == OBJECT and m == "InMode":
43 classname = "Method"
44 listname = "methods"
45 else:
46 t, n, m = arglist[0]
47 if t == OBJECT2 and m == "InMode":
48 classname = "Method2"
49 listname = "methods2"
50 return classname, listname
Jack Jansen90ecdf41996-04-16 14:29:15 +000051
Tim Peters182b5ac2004-07-18 06:16:08 +000052 def writeinitialdefs(self):
53 self.defsfile.write("kPascalStackBased = None # workaround for header parsing\n")
54 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
Jack Jansen9d799902002-03-24 23:04:18 +000055
Tim Peters182b5ac2004-07-18 06:16:08 +000056 def makeblacklistnames(self):
57 return [
58 "WEDispose",
59 "WESetInfo", # Argument type unknown...
60 "WEGetInfo",
61 "WEVersion", # Unfortunately...
62 "WEPut", # XXXX TBD: needs array of flavortypes.
63 "WEGetOneAttribute", # XXXX TBD: output buffer
64 # Incompatible constant definitions
65 "weDoAutoScroll",
66 "weDoOutlineHilite",
67 "weDoReadOnly",
68 "weDoUndo",
69 "weDoIntCutAndPaste",
70 "weDoDragAndDrop",
71 "weDoInhibitRecal",
72 "weDoUseTempMem",
73 "weDoDrawOffscreen",
74 "weDoInhibitRedraw",
75 "weDoMonoStyled",
76 "weDoMultipleUndo",
77 "weDoNoKeyboardSync",
78 "weDoInhibitICSupport",
79 "weDoInhibitColor",
80 ]
Jack Jansen90ecdf41996-04-16 14:29:15 +000081
Tim Peters182b5ac2004-07-18 06:16:08 +000082 def makeblacklisttypes(self):
83 return [
84 "DragReference", # For now...
85 "UniversalProcPtr",
86 "WEFontIDToNameUPP",
87 "WEFontNameToIDUPP",
88 "WEClickLoopUPP",
89 "WEScrollUPP",
90 "WETSMPreUpdateUPP",
91 "WETSMPostUpdateUPP",
92 "WEPreTrackDragUPP",
93 "WETranslateDragUPP",
94 "WEHiliteDropAreaUPP",
95 "WEDrawTextUPP",
96 "WEDrawTSMHiliteUPP",
97 "WEPixelToCharUPP",
98 "WECharToPixelUPP",
99 "WELineBreakUPP",
100 "WEWordBreakUPP",
101 "WECharByteUPP",
102 "WECharTypeUPP",
103 "WEEraseUPP",
104 "WEFluxUPP",
105 "WENewObjectUPP",
106 "WEDisposeObjectUPP",
107 "WEDrawObjectUPP",
108 "WEClickObjectUPP",
109 "WEStreamObjectUPP",
110 "WEHoverObjectUPP",
111 "WERuler", # XXXX To be done
112 "WERuler_ptr", # ditto
113 "WEParaInfo", # XXXX To be done
114 "WEPrintSession", # XXXX To be done
115 "WEPrintOptions_ptr", # XXXX To be done
116 ]
Jack Jansen90ecdf41996-04-16 14:29:15 +0000117
Tim Peters182b5ac2004-07-18 06:16:08 +0000118 def makerepairinstructions(self):
119 return [
120 ([("void_ptr", "*", "InMode"), ("SInt32", "*", "InMode")],
121 [("InBuffer", "*", "*")]),
Jack Jansen90ecdf41996-04-16 14:29:15 +0000122
Tim Peters182b5ac2004-07-18 06:16:08 +0000123 # WEContinuousStyle
124 ([("WEStyleMode", "ioMode", "OutMode"), ("TextStyle", "outTextStyle", "OutMode")],
125 [("WEStyleMode", "*", "InOutMode"), ("TextStyle", "*", "*")]),
126
127 # WECopyRange
128 ([('Handle', 'outText', 'InMode'), ('StScrpHandle', 'outStyles', 'InMode'),
129 ('WESoupHandle', 'outSoup', 'InMode')],
130 [('OptHandle', '*', '*'), ('OptStScrpHandle', '*', '*'),
131 ('OptSoupHandle', '*', '*')]),
132
133 # WEInsert
134 ([('StScrpHandle', 'inStyles', 'InMode'), ('WESoupHandle', 'inSoup', 'InMode')],
135 [('OptStScrpHandle', '*', '*'), ('OptSoupHandle', '*', '*')]),
136
137 # WEGetObjectOwner
138 ("WEGetObjectOwner",
139 [('WEReference', '*', 'ReturnMode')],
140 [('ExistingWEReference', '*', 'ReturnMode')]),
141
142 # WEFindParagraph
143 ([("char_ptr", "inKey", "InMode")],
144 [("stringptr", "*", "*")]),
145
146 # WESetOneAttribute
147 ([("void_ptr", "*", "InMode"), ("ByteCount", "*", "InMode")],
148 [("InBuffer", "*", "*")]),
149 ]
150
Jack Jansen90ecdf41996-04-16 14:29:15 +0000151if __name__ == "__main__":
Tim Peters182b5ac2004-07-18 06:16:08 +0000152 main()