blob: 4838c1f990299efccd9b5d12631c037c99237840 [file] [log] [blame]
Jeremy Hylton53d527a2002-08-05 18:29:45 +00001from framer import template
2from framer.util import cstring, unindent
3
4T_SHORT = "T_SHORT"
5T_INT = "T_INT"
6T_LONG = "T_LONG"
7T_FLOAT = "T_FLOAT"
8T_DOUBLE = "T_DOUBLE"
9T_STRING = "T_STRING"
10T_OBJECT = "T_OBJECT"
11T_CHAR = "T_CHAR"
12T_BYTE = "T_BYTE"
13T_UBYTE = "T_UBYTE"
14T_UINT = "T_UINT"
15T_ULONG = "T_ULONG"
16T_STRING_INPLACE = "T_STRING_INPLACE"
17T_OBJECT_EX = "T_OBJECT_EX"
18
19RO = READONLY = "READONLY"
20READ_RESTRICTED = "READ_RESTRICTED"
21WRITE_RESTRICTED = "WRITE_RESTRICTED"
22RESTRICT = "RESTRICTED"
23
24c2t = {"int" : T_INT,
25 "unsigned int" : T_UINT,
26 "long" : T_LONG,
27 "unsigned long" : T_LONG,
28 "float" : T_FLOAT,
29 "double" : T_DOUBLE,
30 "char *" : T_CHAR,
31 "PyObject *" : T_OBJECT,
32 }
33
34class member(object):
35
36 def __init__(self, cname=None, type=None, flags=None, doc=None):
37 self.type = type
38 self.flags = flags
39 self.cname = cname
40 self.doc = doc
41 self.name = None
42 self.struct = None
43
44 def register(self, name, struct):
45 self.name = name
46 self.struct = struct
47 self.initvars()
48
49 def initvars(self):
50 v = self.vars = {}
51 v["PythonName"] = self.name
52 if self.cname is not None:
53 v["CName"] = self.cname
54 else:
55 v["CName"] = self.name
56 v["Flags"] = self.flags or "0"
57 v["Type"] = self.get_type()
58 if self.doc is not None:
59 v["Docstring"] = cstring(unindent(self.doc))
60 v["StructName"] = self.struct.name
61
62 def get_type(self):
63 """Deduce type code from struct specification if not defined"""
64 if self.type is not None:
65 return self.type
66 ctype = self.struct.get_type(self.name)
67 return c2t[ctype]
68
69 def dump(self, f):
70 if self.doc is None:
Collin Winter6afaeb72007-08-03 17:06:41 +000071 print(template.memberdef_def % self.vars, file=f)
Jeremy Hylton53d527a2002-08-05 18:29:45 +000072 else:
Collin Winter6afaeb72007-08-03 17:06:41 +000073 print(template.memberdef_def_doc % self.vars, file=f)