/Tools/framer/framer/member.py
http://unladen-swallow.googlecode.com/ · Python · 73 lines · 63 code · 9 blank · 1 comment · 7 complexity · dc66feb3e5e9085c68cd2249fe6d93f9 MD5 · raw file
- from framer import template
- from framer.util import cstring, unindent
- T_SHORT = "T_SHORT"
- T_INT = "T_INT"
- T_LONG = "T_LONG"
- T_FLOAT = "T_FLOAT"
- T_DOUBLE = "T_DOUBLE"
- T_STRING = "T_STRING"
- T_OBJECT = "T_OBJECT"
- T_CHAR = "T_CHAR"
- T_BYTE = "T_BYTE"
- T_UBYTE = "T_UBYTE"
- T_UINT = "T_UINT"
- T_ULONG = "T_ULONG"
- T_STRING_INPLACE = "T_STRING_INPLACE"
- T_OBJECT_EX = "T_OBJECT_EX"
- RO = READONLY = "READONLY"
- READ_RESTRICTED = "READ_RESTRICTED"
- WRITE_RESTRICTED = "WRITE_RESTRICTED"
- RESTRICT = "RESTRICTED"
- c2t = {"int" : T_INT,
- "unsigned int" : T_UINT,
- "long" : T_LONG,
- "unsigned long" : T_LONG,
- "float" : T_FLOAT,
- "double" : T_DOUBLE,
- "char *" : T_CHAR,
- "PyObject *" : T_OBJECT,
- }
- class member(object):
- def __init__(self, cname=None, type=None, flags=None, doc=None):
- self.type = type
- self.flags = flags
- self.cname = cname
- self.doc = doc
- self.name = None
- self.struct = None
- def register(self, name, struct):
- self.name = name
- self.struct = struct
- self.initvars()
- def initvars(self):
- v = self.vars = {}
- v["PythonName"] = self.name
- if self.cname is not None:
- v["CName"] = self.cname
- else:
- v["CName"] = self.name
- v["Flags"] = self.flags or "0"
- v["Type"] = self.get_type()
- if self.doc is not None:
- v["Docstring"] = cstring(unindent(self.doc))
- v["StructName"] = self.struct.name
- def get_type(self):
- """Deduce type code from struct specification if not defined"""
- if self.type is not None:
- return self.type
- ctype = self.struct.get_type(self.name)
- return c2t[ctype]
- def dump(self, f):
- if self.doc is None:
- print >> f, template.memberdef_def % self.vars
- else:
- print >> f, template.memberdef_def_doc % self.vars