# Copyright Bruno da Silva de Oliveira 2003. Use, modification and # distribution is subject to the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) from Exporter import Exporter from settings import * import utils #============================================================================== # EnumExporter #============================================================================== class EnumExporter(Exporter): 'Exports enumerators' def __init__(self, info): Exporter.__init__(self, info) def SetDeclarations(self, declarations): Exporter.SetDeclarations(self, declarations) if self.declarations: self.enum = self.GetDeclaration(self.info.name) else: self.enum = None def Export(self, codeunit, exported_names): if self.info.exclude: return indent = self.INDENT in_indent = self.INDENT*2 rename = self.info.rename or self.enum.name full_name = self.enum.FullName() unnamed_enum = False if rename.startswith('$_') or rename.startswith('._'): unnamed_enum = True code = '' if not unnamed_enum: code += indent + namespaces.python code += 'enum_< %s >("%s")\n' % (full_name, rename) for name in self.enum.values: rename = self.info[name].rename or name value_fullname = self.enum.ValueFullName(name) if not unnamed_enum: code += in_indent + '.value("%s", %s)\n' % (rename, value_fullname) else: code += indent + namespaces.python code += 'scope().attr("%s") = (int)%s;\n' % (rename, value_fullname ) if self.info.export_values and not unnamed_enum: code += in_indent + '.export_values()\n' if not unnamed_enum: code += indent + ';\n' code += '\n' codeunit.Write('module', code) exported_names[self.enum.FullName()] = 1 def Name(self): return self.info.name