Home | History | Annotate | Download | only in list
      1 # Scan an Apple header file, generating a Python file of generator calls.
      2 
      3 import sys
      4 from bgenlocations import TOOLBOXDIR, BGENDIR
      5 sys.path.append(BGENDIR)
      6 from scantools import Scanner
      7 
      8 LONG = "Lists"
      9 SHORT = "list"
     10 OBJECT = "ListHandle"
     11 
     12 def main():
     13     input = LONG + ".h"
     14     output = SHORT + "gen.py"
     15     defsoutput = TOOLBOXDIR + LONG + ".py"
     16     scanner = MyScanner(input, output, defsoutput)
     17     scanner.scan()
     18     scanner.close()
     19     print "=== Testing definitions output code ==="
     20     execfile(defsoutput, {}, {})
     21     print "=== Done scanning and generating, now importing the generated code... ==="
     22     exec "import " + SHORT + "support"
     23     print "=== Done.  It's up to you to compile it now! ==="
     24 
     25 class MyScanner(Scanner):
     26 
     27     def destination(self, type, name, arglist):
     28         classname = "Function"
     29         listname = "functions"
     30         if arglist:
     31             t, n, m = arglist[-1]
     32             # This is non-functional today
     33             if t in ('ListHandle', 'ListRef') and m == "InMode":
     34                 classname = "Method"
     35                 listname = "methods"
     36         return classname, listname
     37 
     38     def makeblacklistnames(self):
     39         return [
     40                 "LDispose",             # Done by removing the object
     41                 "LSearch",              # We don't want to handle procs just yet
     42                 "CreateCustomList",  # done manually
     43                 "SetListDefinitionProc",
     44 
     45                 # These have funny argument/return values
     46                 "GetListViewBounds",
     47                 "GetListCellIndent",
     48                 "GetListCellSize",
     49                 "GetListVisibleCells",
     50                 "GetListClickLocation",
     51                 "GetListMouseLocation",
     52                 "GetListDataBounds",
     53                 "SetListLastClick",
     54                 ]
     55 
     56     def makeblacklisttypes(self):
     57         return [
     58                 "ListClickLoopUPP",  # Too difficult for now
     59                 "ListDefSpecPtr", # later
     60                 ]
     61 
     62     def makerepairinstructions(self):
     63         return [
     64                 ([('ListBounds_ptr', '*', 'InMode')],
     65                  [('Rect_ptr', '*', 'InMode')]),
     66 
     67                 ([("Cell", "theCell", "OutMode")],
     68                  [("Cell", "theCell", "InOutMode")]),
     69 
     70                 ([("void_ptr", "*", "InMode"), ("short", "*", "InMode")],
     71                  [("InBufferShortsize", "*", "*")]),
     72 
     73                 ([("void", "*", "OutMode"), ("short", "*", "OutMode")],
     74                  [("VarOutBufferShortsize", "*", "InOutMode")]),
     75 
     76                 # SetListCellIndent doesn't have const
     77                 ([("Point", "indent", "OutMode")],
     78                  [("Point_ptr", "indent", "InMode")]),
     79 
     80                 ]
     81 
     82     def writeinitialdefs(self):
     83         self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
     84 
     85 
     86 if __name__ == "__main__":
     87     main()
     88