certi-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[certi-cvs] certi/scripts GenMsgBase.py GenMsgJava.py GenMs...


From: certi-cvs
Subject: [certi-cvs] certi/scripts GenMsgBase.py GenMsgJava.py GenMs...
Date: Fri, 11 Jun 2010 12:43:12 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      10/06/11 12:43:12

Modified files:
        scripts        : GenMsgBase.py GenMsgJava.py GenMsgCXX.py 
                         GenerateMessages.py GenMsgPython.py 
                         GenMsgAST.py 

Log message:
        Merge from Lucas ALBA work
         - tidy up python sources with PythonTidy
           http://pypi.python.org/pypi/PythonTidy/

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgBase.py?cvsroot=certi&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgJava.py?cvsroot=certi&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgCXX.py?cvsroot=certi&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenerateMessages.py?cvsroot=certi&r1=1.39&r2=1.40
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgPython.py?cvsroot=certi&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgAST.py?cvsroot=certi&r1=1.12&r2=1.13

Patches:
Index: GenMsgBase.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgBase.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- GenMsgBase.py       16 May 2010 08:40:18 -0000      1.5
+++ GenMsgBase.py       11 Jun 2010 12:43:12 -0000      1.6
@@ -1,3 +1,5 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
 ## ----------------------------------------------------------------------------
 ## CERTI - HLA RunTime Infrastructure
 ## Copyright (C) 2002-2005  ONERA
@@ -17,22 +19,25 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgBase.py,v 1.5 2010/05/16 08:40:18 erk Exp $
+## $Id: GenMsgBase.py,v 1.6 2010/06/11 12:43:12 erk Exp $
 ## ----------------------------------------------------------------------------
 
+# We use logging for ... logging :-)
+# see http://docs.python.org/library/logging.html
+
 """
 The CERTI Message Generator.
 Generator Base class
 """
 
-# We use logging for ... logging :-)
-# see http://docs.python.org/library/logging.html
 import logging
 import sys 
 import datetime
 import GenMsgAST
     
+
 class CodeGenerator(object):
+
     """
     This is a base class generator for C{MessageAST}.
     
@@ -40,67 +45,71 @@
     """
     
     def generatorName(cls):
-        raise  Exception("This class method should be overloaded by daughter 
class <"+cls.__name__+">")    
+        raise Exception('This class method should be overloaded by daughter 
class <'
+                         + cls.__name__ + '>')
+
     generatorName = classmethod(generatorName)
     
-    def __init__(self,MessageAST,commentLineBeginWith):
+    def __init__(self, MessageAST, commentLineBeginWith):
         self.AST = MessageAST
         self.commentLineBeginWith = commentLineBeginWith
-        self.logger = logging.Logger(self.generatorName()+"Generator")
+        self.logger = logging.Logger(self.generatorName() + 'Generator')
         self.logger.setLevel(logging.ERROR)
         self.logger.addHandler(logging.StreamHandler(sys.stdout))
-        self.__indentString = "   "
+        self.__indentString = '   '
         self.__indentLevel  = 0
-        self.builtinTypeMap = {'onoff'    : 'onoff',
-                               'bool'     : 'bool',
-                               'string'   : 'string',
-                               'byte'     : 'byte',
-                               'int8'     : 'int8',
-                               'uint8'    : 'uint8',
-                               'int16'    : 'int16',
-                               'uint16'   : 'uint16',
-                               'int32'    : 'int32',
-                               'uint32'   : 'uint32',   
-                               'int64'    : 'int64',
-                               'uint64'   : 'uint64',
-                               'float'    : 'float',
-                               'double'   : 'double',}
+        self.builtinTypeMap = {
+            'onoff': 'onoff',
+            'bool': 'bool',
+            'string': 'string',
+            'byte': 'byte',
+            'int8': 'int8',
+            'uint8': 'uint8',
+            'int16': 'int16',
+            'uint16': 'uint16',
+            'int32': 'int32',
+            'uint32': 'uint32',
+            'int64': 'int64',
+            'uint64': 'uint64',
+            'float': 'float',
+            'double': 'double',
+            }
 
-    def setIndentString(self,indentString):
+    def setIndentString(self, indentString):
         self.__indentString = indentString
         
     def indent(self):
         self.__indentLevel += 1            
         
     def unIndent(self):
-        if self.__indentLevel>0:
+        if self.__indentLevel > 0:
             self.__indentLevel -= 1
         else:
-            self.logger.error("Trying to unIndent lower than 0!??!")
+            self.logger.error('Trying to unIndent lower than 0!??!')
             
     def getIndent(self):
-        res=""
+        res = ''
         i = self.__indentLevel
-        while i>0:
+        while i > 0:
              res = res + self.__indentString
              i -= 1
         return res
     
-    def getTargetTypeName(self,name):
+    def getTargetTypeName(self, name):
         if name in self.builtinTypeMap.keys():
             return self.builtinTypeMap[name]
         else:
             return name
     
-    def lowerFirst(self,str):
-        res = str[0].lower()+str[1:]
+    def lowerFirst(self, str):
+        res = str[0].lower() + str[1:]
         return res
         
-    def upperFirst(self,str):
-        res = str[0].upper()+str[1:]
+    def upperFirst(self, str):
+        res = str[0].upper() + str[1:]
         return res        
         
-    def writeComment(self,stream,ASTElement):
+    def writeComment(self, stream, ASTElement):
         """
         Write a comment block to the stream.
         
@@ -108,41 +117,56 @@
         language has whole line comment support
         with some beginning characters.
         """
+
         if ASTElement.hasComment():
             for line in ASTElement.comment.lines:
+
                 # we should not indent optional comment
                 # since they come at the end of a line
+
                 if not ASTElement.comment.isAtEOL:                
                     stream.write(self.getIndent())                
                 stream.write(self.commentLineBeginWith)
                 stream.write(str(line))
-                stream.write("\n")
+                stream.write('\n')
         else:            
-            stream.write("\n")        
+            stream.write('\n')
     
-    def generateHeader(self,stream,factoryOnly=False):
+    def generateHeader(self, stream, factoryOnly=False):
         """
         Generate the header.
         """
-        self.logger.error("generateHeader not IMPLEMENTED")
     
-    def generateBody(self,stream,factoryOnly=False):
+        self.logger.error('generateHeader not IMPLEMENTED')
+
+    def generateBody(self, stream, factoryOnly=False):
         """
         Generate the body.
         """
-        self.logger.error("generateBody not IMPLEMENTED")            
     
-    def generate(self,stream,what,factoryOnly=False):        
+        self.logger.error('generateBody not IMPLEMENTED')
+
+    def generate(
+        self,
+        stream,
+        what,
+        factoryOnly=False,
+        ):
         stream.write(self.commentLineBeginWith)
-        stream.write(" Generated on %s by the CERTI message 
generator\n"%datetime.datetime.now().strftime("%Y %B %a, %d at %H:%M:%S"))
-        if what.lower() == "header":
-            self.generateHeader(stream,factoryOnly)
-        elif what.lower() == "body":
-            self.generateBody(stream,factoryOnly)
+        stream.write(' Generated on %s by the CERTI message generator\n'
+
+                     % datetime.datetime.now().strftime('%Y %B %a, %d at 
%H:%M:%S'
+                     ))
+        if what.lower() == 'header':
+            self.generateHeader(stream, factoryOnly)
+        elif what.lower() == 'body':
+            self.generateBody(stream, factoryOnly)
         else:
-            self.logger.error("What <%s> unknown type??"%what)
+            self.logger.error('What <%s> unknown type??' % what)
+
     
 class MsgSpecGenerator(CodeGenerator):
+
     """
     This is a text generator for C{MessageAST}.
     
@@ -151,94 +175,131 @@
     """
     
     def generatorName(cls):
-        return "MsgSpec"    
+        return 'MsgSpec'
+
     generatorName = classmethod(generatorName)
     
-    def __init__(self,MessageAST):
-        super(MsgSpecGenerator,self).__init__(MessageAST,"//")
-        self.logger = logging.Logger("MsgSpecGenerator")
+    def __init__(self, MessageAST):
+        super(MsgSpecGenerator, self).__init__(MessageAST, '//')
+        self.logger = logging.Logger('MsgSpecGenerator')
         self.logger.setLevel(logging.ERROR)
         self.logger.addHandler(logging.StreamHandler(sys.stdout))
-        self.__languageName = "MsgSpec"
+        self.__languageName = 'MsgSpec'
                         
-    def generate(self,stream,what,factoryOnly=False):
+    def generate(
+        self,
+        stream,
+        what,
+        factoryOnly=False,
+        ):
         """
         Redefine super.generate.
         
         what is not important in this case.
         """
+
         # Generate package 
+
         if self.AST.hasPackage():
             self.writeComment(stream, self.AST.package)
-            stream.write("package %s\n" % self.AST.package.name)
+            stream.write('package %s\n' % self.AST.package.name)
+
        # Generate version
+
        if self.AST.hasVersion():
            self.writeComment(stream, self.AST.version)
-           stream.write("version %d.%d\n" % self.AST.version.number)
+            stream.write('version %d.%d\n' % self.AST.version.number)
 
         if not factoryOnly:
+
             # Generate native type
+
             for native in self.AST.natives:            
                 self.writeComment(stream, native)
-                stream.write("native %s {\n" % native.name)
+                stream.write('native %s {\n' % native.name)
                 self.indent()
-                if (native.hasRepresentation()):
-                    stream.write(self.getIndent()+ "representation " + 
native.getRepresentation()+"\n")
-                for (k,v) in native.languages.items():
+                if native.hasRepresentation():
+                    stream.write(self.getIndent() + 'representation '
+                                 + native.getRepresentation() + '\n')
+                for (k, v) in native.languages.items():
                     for l in v:
-                        stream.write(self.getIndent()+"language " +  k + "     
["+l.statement+"]\n")
+                        stream.write(self.getIndent() + 'language ' + k
+                                + '     [' + l.statement + ']\n')
                 self.unIndent()
-                stream.write("}\n")
+                stream.write('}\n')
                                 
             # Generate enum
+
             for enum in self.AST.enums:
                 self.writeComment(stream, enum)
-                stream.write("enum %s {\n" % enum.name)
+                stream.write('enum %s {\n' % enum.name)
                 first = True
                 self.indent()
                 for enumval in enum.values:                
                     if first:
-                        stream.write(self.getIndent()+"%s = %d, " % 
(enumval.name,enumval.value))                
-                        first=False
+                        stream.write(self.getIndent() + '%s = %d, '
+                                % (enumval.name, enumval.value))
+                        first = False
                     else:
-                        stream.write(self.getIndent()+"%s, " % enumval.name)
+                        stream.write(self.getIndent() + '%s, '
+                                % enumval.name)
                     self.writeComment(stream, enumval)
                 self.unIndent()                    
-                stream.write("}\n\n")                                
+                stream.write('''}
+
+''')
                  
             # Generate message type
+
             for msg in self.AST.messages:
                 self.writeComment(stream, msg)
-                stream.write("message %s"%msg.name)
+                stream.write('message %s' % msg.name)
                 if msg.hasMerge():
-                    stream.write(" : merge %s {\n" % msg.merge.name)
+                    stream.write(' : merge %s {\n' % msg.merge.name)
                 else:
-                    stream.write(" {\n")
+                    stream.write(' {\n')
                 
                 for field in msg.fields:
-                    if (isinstance(field, 
GenMsgAST.MessageType.CombinedField)):
-                        stream.write("        combined %s {" % (field.typeid))
+                    if isinstance(field,
+                                  GenMsgAST.MessageType.CombinedField):
+                        stream.write('        combined %s {'
+                                % field.typeid)
                         self.writeComment(stream, field)
                         for cfield in field.fields:
-                            stream.write("            %s %s %s " % 
(cfield.qualifier,cfield.typeid.name,cfield.name))
+                            stream.write('            %s %s %s '
+                                    % (cfield.qualifier,
+                                    cfield.typeid.name, cfield.name))
                             if cfield.hasDefaultValue():
-                                stream.write("[default=%s] " % 
cfield.defaultValue)                                    
+                                stream.write('[default=%s] '
+                                        % cfield.defaultValue)
                             self.writeComment(stream, cfield)
-                        stream.write("        }\n")    
+                        stream.write('        }\n')
                     else:
-                        stream.write("        %s %s %s " % 
(field.qualifier,field.typeid.name,field.name))
+                        stream.write('        %s %s %s '
+                                % (field.qualifier, field.typeid.name,
+                                field.name))
                         if field.hasDefaultValue():
-                            stream.write("[default=%s] " % field.defaultValue) 
                                   
+                            stream.write('[default=%s] '
+                                    % field.defaultValue)
                         self.writeComment(stream, field)                    
-                stream.write("}\n\n")
+                stream.write('''}
+
+''')
             
         # Generate Factory
+
         if self.AST.hasFactory():
             self.writeComment(stream, self.AST.factory)
-            stream.write("factory %s {\n" % self.AST.factory.name)
+            stream.write('factory %s {\n' % self.AST.factory.name)
             self.indent()
-            stream.write(self.getIndent()+"factoryCreator %s %s(%s)\n"% 
self.AST.factory.creator)
-            stream.write(self.getIndent()+"factoryReceiver %s %s(%s)\n"% 
self.AST.factory.receiver)
+            stream.write(self.getIndent() + 'factoryCreator %s %s(%s)\n'
+                          % self.AST.factory.creator)
+            stream.write(self.getIndent()
+                         + 'factoryReceiver %s %s(%s)\n'
+                         % self.AST.factory.receiver)
             self.unIndent()
-            stream.write("}\n\n")
+            stream.write('''}
+
+''')
+
                                                                                
  

Index: GenMsgJava.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgJava.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- GenMsgJava.py       11 Mar 2010 12:13:27 -0000      1.3
+++ GenMsgJava.py       11 Jun 2010 12:43:12 -0000      1.4
@@ -1,3 +1,5 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
 ## ----------------------------------------------------------------------------
 ## CERTI - HLA RunTime Infrastructure
 ## Copyright (C) 2002-2005  ONERA
@@ -17,33 +19,40 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgJava.py,v 1.3 2010/03/11 12:13:27 erk Exp $
+## $Id: GenMsgJava.py,v 1.4 2010/06/11 12:43:12 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
 The CERTI Message Generator.
 Java Backend Generator
 """
+
 import logging
 import GenMsgBase
 import GenMsgAST
 import sys
 
+
 class JavaGenerator(GenMsgBase.CodeGenerator):
+
     """
     This is a Java generator for C{MessageAST}.
     """
     
     def generatorName(cls):
-        return "Java"    
+        return 'Java'
+
     generatorName = classmethod(generatorName)
     
     def __init__(self, MessageAST):
-        super(JavaGenerator, self).__init__(MessageAST, "//")
+        super(JavaGenerator, self).__init__(MessageAST, '//')
+
         # Message builtin type to Java type
         # Note that java integer type are ALL signed:
         # 
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html
-        self.builtinTypeMap = {'onoff': 'boolean',
+
+        self.builtinTypeMap = {  # 'FederateHandleSet': 'FederateHandleSet',
+            'onoff': 'boolean',
             'bool': 'boolean',
             'string': 'String',
             'byte': 'byte',
@@ -60,9 +69,10 @@
             'Tag': 'byte[]',
             'Extents': 'List<CertiExtent>',
             'SuppliedParameters': 'SuppliedParameters',
-            #'FederateHandleSet': 'FederateHandleSet',
-            'Regions': 'List<Long>'}
-        self.serializeTypeMap = {'onoff': 'messageBuffer.write(%s);',
+            'Regions': 'List<Long>',
+            }
+        self.serializeTypeMap = {
+            'onoff': 'messageBuffer.write(%s);',
             'bool': 'messageBuffer.write(%s);',
             'string': 'messageBuffer.write(%s);',
             'byte': 'messageBuffer.write(%s);',
@@ -81,10 +91,12 @@
             'SuppliedAttributes': 'messageBuffer.write(%s);',
             'SuppliedParameters': 'messageBuffer.write(%s);',
             'FederateHandleSet': 'messageBuffer.write(%s);',
-            'LogicalTimeInterval':'messageBuffer.write(%s);',
+            'LogicalTimeInterval': 'messageBuffer.write(%s);',
             'Extents': 'messageBuffer.write(%s);',
-            'Regions': 'messageBuffer.writeRegions(%s);'}
-        self.deserializeTypeMap = {'onoff': '%s = 
messageBuffer.readBoolean();',
+            'Regions': 'messageBuffer.writeRegions(%s);',
+            }
+        self.deserializeTypeMap = {
+            'onoff': '%s = messageBuffer.readBoolean();',
             'bool': '%s = messageBuffer.readBoolean();',
             'string': '%s = messageBuffer.readString();',
             'byte': '%s = messageBuffer.readByte();',
@@ -103,15 +115,19 @@
             'SuppliedAttributes': '%s = 
messageBuffer.readSuppliedAttributes();',
             'SuppliedParameters': '%s = 
messageBuffer.readSuppliedParameters();',
             'FederateHandleSet': '%s = messageBuffer.readFederateHandleSet();',
-            'LogicalTimeInterval':'%s = 
messageBuffer.readLogicalTimeInterval();',
+            'LogicalTimeInterval': '%s = 
messageBuffer.readLogicalTimeInterval();',
             'Extents': '%s = messageBuffer.readExtents();',
-            'Regions': '%s = messageBuffer.readRegions();'}
+            'Regions': '%s = messageBuffer.readRegions();',
+            }
 
     def writeFieldStatement(self, stream, field):
         if field.hasDefaultValue():
-            stream.write(self.getTargetTypeName(field.typeid.name) + " " + 
field.name + "=" + str(field.defaultValue) + ";\n")
+            stream.write(self.getTargetTypeName(field.typeid.name) + ' '
+                          + field.name + '=' + str(field.defaultValue)
+                         + ';\n')
         else:
-            stream.write(self.getTargetTypeName(field.typeid.name) + " " + 
field.name + ";\n")
+            stream.write(self.getTargetTypeName(field.typeid.name) + ' '
+                          + field.name + ';\n')
 
     def generateIncludes(self, stream):
         stream.write("""import certi.communication.CertiException;
@@ -130,19 +146,25 @@
 import certi.rti.impl.CertiLogicalTime;
 import certi.rti.impl.CertiLogicalTimeInterval;
 import hla.rti.LogicalTime;
-import hla.rti.LogicalTimeInterval;\n\n""")
+import hla.rti.LogicalTimeInterval;
+
+""")
 
     def generateHeader(self, stream, factoryOnly=False):
         for native in self.AST.natives:
-            if native.hasLanguage("Java"):                               
+            if native.hasLanguage('Java'):
+
                 # This an example may be it would be worth to check whether if 
the
                 # refered native types are valids?  
-                for line in native.getLanguageLines("Java"):
-                    stream.write("Found native **" + line.statement + "**\n")
+
+                for line in native.getLanguageLines('Java'):
+                    stream.write('Found native **' + line.statement
+                                 + '**\n')
 
     def prepareName(self, name):
-        upperAfterScore = lambda x:__import__('re').sub(r'_(.)', lambda 
y:y.group(0).upper(), x)
-        return upperAfterScore(name.lower()).replace("_", "")[1:]
+        upperAfterScore = lambda x: __import__('re').sub(r'_(.)',
+                lambda y: y.group(0).upper(), x)
+        return upperAfterScore(name.lower()).replace('_', '')[1:]
 
     def getSerializeMethodName(self, name):
         if name in self.serializeTypeMap.keys():
@@ -151,7 +173,7 @@
             representation = self.getRepresentationFor(name)
             if representation:
                 return self.getSerializeMethodName(representation)
-        print "No serialize method name for <%s> " % name            
+        print 'No serialize method name for <%s> ' % name
         return None
 
     def getDeSerializeMethodName(self, name):
@@ -177,7 +199,8 @@
         """
 
         for msg in self.AST.messages:
-            file = open("messages/" + self.prepareName(msg.name) + ".java", 
"w")
+            file = open('messages/' + self.prepareName(msg.name)
+                        + '.java', 'w')
 
             file.write("""// 
----------------------------------------------------------------------------
 // CERTI - HLA Run Time Infrastructure
@@ -201,113 +224,196 @@
 """)
 
             if self.AST.hasPackage():
-                file.write("package " + self.AST.package.name + ";\n\n")
-            self.generateIncludes(file);
-            file.write(self.getIndent() + "public class " + 
self.prepareName(msg.name) + " extends CertiMessage {\n")
+                file.write('package ' + self.AST.package.name
+                           + ''';
+
+''')
+            self.generateIncludes(file)
+            file.write(self.getIndent() + 'public class '
+                       + self.prepareName(msg.name)
+                       + ' extends CertiMessage {\n')
             self.indent()
 
             if len(msg.fields) > 0:
                 for field in msg.fields:
-                    file.write(self.getIndent() + "private ");
+                    file.write(self.getIndent() + 'private ')
+
                     # Combined field and "plain" field must not be treated the 
same way
-                    if not 
isinstance(field,GenMsgAST.MessageType.CombinedField):
+
+                    if not isinstance(field,
+                            GenMsgAST.MessageType.CombinedField):
                         self.writeFieldStatement(file, field)
                     else:
+
                         # combined field may be written in a specific way
                         # or the field contained in the combined field may
                         # be written as usual and Getter/Setter for the 
combined may be 
                         # generated
+
                         for cfield in field.fields:
                             self.writeFieldStatement(file, cfield)
 
-            file.write("\n")
-            #constructor
-            file.write(self.getIndent() + "public " + 
self.prepareName(msg.name) + "() {\n")
+            file.write('\n')
+
+            # constructor
+
+            file.write(self.getIndent() + 'public '
+                       + self.prepareName(msg.name) + '() {\n')
             self.indent()
-            file.write(self.getIndent() + "super(CertiMessageType." + 
msg.name.upper()[2:] + ");\n")
+            file.write(self.getIndent() + 'super(CertiMessageType.'
+                       + msg.name.upper()[2:] + ');\n')
             self.unIndent()
-            file.write(self.getIndent() + "}\n\n");
+            file.write(self.getIndent() + '''}
 
-            file.write(self.getIndent() + "public " + 
self.prepareName(msg.name) + "(CertiLogicalTime federationTime) {\n")
+''')
+
+            file.write(self.getIndent() + 'public '
+                       + self.prepareName(msg.name)
+                       + '(CertiLogicalTime federationTime) {\n')
             self.indent()
-            file.write(self.getIndent() + "super(CertiMessageType." + 
msg.name.upper()[2:] + ", federationTime);\n")
+            file.write(self.getIndent() + 'super(CertiMessageType.'
+                       + msg.name.upper()[2:] + ', federationTime);\n')
             self.unIndent()
-            file.write(self.getIndent() + "}\n\n");
-
+            file.write(self.getIndent() + '''}
 
-            #file.write(self.getIndent() + "public " + 
self.prepareName(msg.name) + "(double federationTime, attributes) {\n")
-            #TODO attributes in constructor
-            #self.indent()
-            #file.write(self.getIndent() + "super(CertiMessageType." + 
msg.name.upper()[2:] + ", federationTime);\n")
+''')
 
-            #TODO initialize local attributes
-            #self.unIndent()
-            #file.write(self.getIndent() + "}\n\n");
+            # file.write(self.getIndent() + "public " + 
self.prepareName(msg.name) + "(double federationTime, attributes) {\n")
+            # TODO attributes in constructor
+            # self.indent()
+            # file.write(self.getIndent() + "super(CertiMessageType." + 
msg.name.upper()[2:] + ", federationTime);\n")
+
+            # TODO initialize local attributes
+            # self.unIndent()
+            # file.write(self.getIndent() + "}\n\n");
 
             if len(msg.fields) > 0:
-                file.write(self.getIndent() + "@Override\n")
-                file.write(self.getIndent() + "public void 
writeMessage(MessageBuffer messageBuffer) {\n")
+                file.write(self.getIndent() + '@Override\n')
+                file.write(self.getIndent()
+                           + 'public void writeMessage(MessageBuffer 
messageBuffer) {\n'
+                           )
                 self.indent()
-                file.write(self.getIndent() + 
"super.writeMessage(messageBuffer); //Header\n\n");
+                file.write(self.getIndent()
+                           + '''super.writeMessage(messageBuffer); //Header
+
+''')
 
                 for field in msg.fields:
+
                     # Combined field and "plain" field must not be treated the 
same way
-                    if not 
isinstance(field,GenMsgAST.MessageType.CombinedField):
-                        file.write(self.getIndent() + 
self.getSerializeMethodName(field.typeid.name) % field.name + "\n")             
                               
+
+                    if not isinstance(field,
+                            GenMsgAST.MessageType.CombinedField):
+                        file.write(self.getIndent()
+                                   + 
self.getSerializeMethodName(field.typeid.name)
+                                   % field.name + '\n')
                     else:
+
                         # FIXME TODO
+
                         for cfield in field.fields:
                             pass                    
 
                 self.unIndent()
-                file.write(self.getIndent() + "}\n\n");
+                file.write(self.getIndent() + '''}
+
+''')
 
-                file.write(self.getIndent() + "@Override\n")
-                file.write(self.getIndent() + "public void 
readMessage(MessageBuffer messageBuffer) throws CertiException {\n")
+                file.write(self.getIndent() + '@Override\n')
+                file.write(self.getIndent()
+                           + 'public void readMessage(MessageBuffer 
messageBuffer) throws CertiException {\n'
+                           )
                 self.indent()
-                file.write(self.getIndent() + 
"super.readMessage(messageBuffer); //Header \n\n");
+                file.write(self.getIndent()
+                           + '''super.readMessage(messageBuffer); //Header 
+
+''')
 
                 for field in msg.fields:
+
                     # Combined field and "plain" field must not be treated the 
same way
-                    if not 
isinstance(field,GenMsgAST.MessageType.CombinedField):
-                        file.write(self.getIndent() + 
self.getDeSerializeMethodName(field.typeid.name) % field.name + "\n")           
             
+
+                    if not isinstance(field,
+                            GenMsgAST.MessageType.CombinedField):
+                        file.write(self.getIndent()
+                                   + 
self.getDeSerializeMethodName(field.typeid.name)
+                                   % field.name + '\n')
                     else:
+
                         # FIXME TODO
+
                         for cfield in field.fields:
                             pass                
 
                 self.unIndent()
-                file.write(self.getIndent() + "}\n\n");
+                file.write(self.getIndent() + '''}
+
+''')
 
-                file.write(self.getIndent() + "@Override\n")
-                file.write(self.getIndent() + "public String toString() {\n")
+                file.write(self.getIndent() + '@Override\n')
+                file.write(self.getIndent()
+                           + 'public String toString() {\n')
                 self.indent()
-                file.write(self.getIndent() + "return (super.toString()");
+                file.write(self.getIndent() + 'return (super.toString()'
+                           )
                 for field in msg.fields:
-                    file.write(" + \", " + field.name + ": \" + " + field.name)
-                file.write(");\n")
+                    file.write(' + ", ' + field.name + ': " + '
+                               + field.name)
+                file.write(');\n')
                 self.unIndent()
-                file.write(self.getIndent() + "}\n\n");
+                file.write(self.getIndent() + '''}
+
+''')
+
+                # GETTERS
 
-                #GETTERS
                 for field in msg.fields:
+
                     # Combined field and "plain" field must not be treated the 
same way
-                    if not 
isinstance(field,GenMsgAST.MessageType.CombinedField):
-                        file.write(self.getIndent() + "public " + 
self.getTargetTypeName(field.typeid.name) + " get" + field.name[0].capitalize() 
+ field.name[1:] + "() {\n");
+
+                    if not isinstance(field,
+                            GenMsgAST.MessageType.CombinedField):
+                        file.write(self.getIndent() + 'public '
+                                   + self.getTargetTypeName(field.typeid.name)
+                                   + ' get'
+                                   + field.name[0].capitalize()
+                                   + field.name[1:] + '() {\n')
                         self.indent()
-                        file.write(self.getIndent() + "return " + field.name + 
";\n")
+                        file.write(self.getIndent() + 'return '
+                                   + field.name + ';\n')
                         self.unIndent()
-                        file.write(self.getIndent() + "}\n\n")
+                        file.write(self.getIndent() + '''}
+
+''')
+
+                # SETTERS
 
-                #SETTERS
                 for field in msg.fields:
+
                     # Combined field and "plain" field must not be treated the 
same way
-                    if not 
isinstance(field,GenMsgAST.MessageType.CombinedField):
-                        file.write(self.getIndent() + "public void set" + 
field.name[0].capitalize() + field.name[1:] + "(" + 
self.getTargetTypeName(field.typeid.name) + " new" + field.name[0].capitalize() 
+ field.name[1:] + ") {\n");
+
+                    if not isinstance(field,
+                            GenMsgAST.MessageType.CombinedField):
+                        file.write(self.getIndent() + 'public void set'
+                                   + field.name[0].capitalize()
+                                   + field.name[1:] + '('
+                                   + self.getTargetTypeName(field.typeid.name)
+                                   + ' new'
+                                   + field.name[0].capitalize()
+                                   + field.name[1:] + ') {\n')
                         self.indent()
-                        file.write(self.getIndent() + "this." + field.name + " 
= new" + field.name[0].capitalize() + field.name[1:] + ";\n")
+                        file.write(self.getIndent() + 'this.'
+                                   + field.name + ' = new'
+                                   + field.name[0].capitalize()
+                                   + field.name[1:] + ';\n')
                         self.unIndent()
-                        file.write(self.getIndent() + "}\n\n")
+                        file.write(self.getIndent() + '''}
+
+''')
+
+            file.write('''}
 
-            file.write("}\n\n")
+''')
             self.unIndent()
+
+

Index: GenMsgCXX.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgCXX.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- GenMsgCXX.py        11 Jun 2010 07:47:33 -0000      1.18
+++ GenMsgCXX.py        11 Jun 2010 12:43:12 -0000      1.19
@@ -1,4 +1,6 @@
+#!/usr/bin/python
 # -*- coding: utf-8 -*-
+
 ## ----------------------------------------------------------------------------
 ## CERTI - HLA RunTime Infrastructure
 ## Copyright (C) 2002-2005  ONERA
@@ -18,95 +20,104 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgCXX.py,v 1.18 2010/06/11 07:47:33 erk Exp $
+## $Id: GenMsgCXX.py,v 1.19 2010/06/11 12:43:12 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
 The CERTI Message Generator.
 C++ Backend Generator
 """
+
 import logging
 import GenMsgAST
 import GenMsgBase    
 import sys
 import os   
             
+
 class CXXCERTIGenerator(GenMsgBase.CodeGenerator):    
+
     """
     This is a C++ generator for C{MessageAST}.
     
     """
     
     def generatorName(cls):
-        return "CXX"
-    generatorName = classmethod(generatorName)
+        return 'CXX'
     
+    generatorName = classmethod(generatorName)
     
-    def __init__(self,MessageAST):
-        super(CXXCERTIGenerator,self).__init__(MessageAST,"//")
+    def __init__(self, MessageAST):
+        super(CXXCERTIGenerator, self).__init__(MessageAST, '//')
         self.included = dict()
         self.typedefed = dict()
-        self.builtinTypeMap = {'onoff'    : 'bool',
-                               'bool'     : 'bool',
-                               'string'   : 'std::string',
-                               'byte'     : 'uint8_t',
-                               'int8'     : 'int8_t',
-                               'uint8'    : 'uint8_t',
-                               'int16'    : 'int16_t',
-                               'uint16'   : 'uint16_t',
-                               'int32'    : 'int32_t',
-                               'uint32'   : 'uint32_t',   
-                               'int64'    : 'int64_t',
-                               'uint64'   : 'uint64_t',
-                               'float'    : 'float',
-                               'double'   : 'double',}
-        self.serializeTypeMap = {'onoff'    : 'write_bool',
-                               'bool'     : 'write_bool',
-                               'string'   : 'write_string',
-                               'byte'     : 'write_byte',
-                               'int8'     : 'write_int8',
-                               'uint8'    : 'write_uint8',
-                               'int16'    : 'write_int16',
-                               'uint16'   : 'write_uint16',
-                               'int32'    : 'write_int32',
-                               'uint32'   : 'write_uint32',   
-                               'int64'    : 'write_int64',
-                               'uint64'   : 'write_uint64',
-                               'float'    : 'write_float',
-                               'double'   : 'write_double',}
-        self.deserializeTypeMap = {'onoff'    : 'read_bool',
-                               'bool'     : 'read_bool',
-                               'string'   : 'read_string',
-                               'byte'     : 'read_byte',
-                               'int8'     : 'read_int8',
-                               'uint8'    : 'read_uint8',
-                               'int16'    : 'read_int16',
-                               'uint16'   : 'read_uint16',
-                               'int32'    : 'read_int32',
-                               'uint32'   : 'read_uint32',   
-                               'int64'    : 'read_int64',
-                               'uint64'   : 'read_uint64',
-                               'float'    : 'read_float',
-                               'double'   : 'read_double',}
-        self.__languageName="C++"
+        self.builtinTypeMap = {
+            'onoff': 'bool',
+            'bool': 'bool',
+            'string': 'std::string',
+            'byte': 'uint8_t',
+            'int8': 'int8_t',
+            'uint8': 'uint8_t',
+            'int16': 'int16_t',
+            'uint16': 'uint16_t',
+            'int32': 'int32_t',
+            'uint32': 'uint32_t',
+            'int64': 'int64_t',
+            'uint64': 'uint64_t',
+            'float': 'float',
+            'double': 'double',
+            }
+        self.serializeTypeMap = {
+            'onoff': 'write_bool',
+            'bool': 'write_bool',
+            'string': 'write_string',
+            'byte': 'write_byte',
+            'int8': 'write_int8',
+            'uint8': 'write_uint8',
+            'int16': 'write_int16',
+            'uint16': 'write_uint16',
+            'int32': 'write_int32',
+            'uint32': 'write_uint32',
+            'int64': 'write_int64',
+            'uint64': 'write_uint64',
+            'float': 'write_float',
+            'double': 'write_double',
+            }
+        self.deserializeTypeMap = {
+            'onoff': 'read_bool',
+            'bool': 'read_bool',
+            'string': 'read_string',
+            'byte': 'read_byte',
+            'int8': 'read_int8',
+            'uint8': 'read_uint8',
+            'int16': 'read_int16',
+            'uint16': 'read_uint16',
+            'int32': 'read_int32',
+            'uint32': 'read_uint32',
+            'int64': 'read_int64',
+            'uint64': 'read_uint64',
+            'float': 'read_float',
+            'double': 'read_double',
+            }
+        self.__languageName = 'C++'
         self.replacePrefix = None
-        self.exportPrefix = ""
-        self.serializeBufferType = "libhla::MessageBuffer"
-        self.messageTypeGetter = "getType()"
-        self.exception = ["std::string"]
+        self.exportPrefix = ''
+        self.serializeBufferType = 'libhla::MessageBuffer'
+        self.messageTypeGetter = 'getType()'
+        self.exception = ['std::string']
 
-    def getTargetTypeName(self,name):
+    def getTargetTypeName(self, name):
         if name in self.builtinTypeMap.keys():
             return self.builtinTypeMap[name]
         else:
-            t=self.AST.getType(name)
-        if isinstance(t,GenMsgAST.EnumType):
-            prefix=self.AST.name.split(".")[0]+"::"
-            return prefix+name
+            t = self.AST.getType(name)
+        if isinstance(t, GenMsgAST.EnumType):
+            prefix = self.AST.name.split('.')[0] + '::'
+            return prefix + name
         else:
             return name
 
-    def getRepresentationFor(self,name):
+    def getRepresentationFor(self, name):
         for native in self.AST.natives:
             if name == native.name:
                 representation = native.getRepresentation()
@@ -114,7 +125,7 @@
                     return representation
         return None
 
-    def getSerializeMethodName(self,name):
+    def getSerializeMethodName(self, name):
         if name in self.serializeTypeMap.keys():
             return self.serializeTypeMap[name]
         else:
@@ -123,7 +134,7 @@
                 return self.getSerializeMethodName(representation)
         return None
         
-    def getDeSerializeMethodName(self,name):
+    def getDeSerializeMethodName(self, name):
         if name in self.deserializeTypeMap.keys():
             return self.deserializeTypeMap[name]
         else:
@@ -132,710 +143,1032 @@
                 return self.getDeSerializeMethodName(representation)
         return None    
             
-    def openNamespaces(self,stream):
+    def openNamespaces(self, stream):
         if self.AST.hasPackage():
             self.writeComment(stream, self.AST.package)
+
             # we may have nested namespace
-            nameSpaceList = self.AST.package.name.split(".")            
+
+            nameSpaceList = self.AST.package.name.split('.')
             for ns in nameSpaceList:
-                stream.write(self.getIndent()+"namespace %s {\n\n" % ns)
+                stream.write(self.getIndent() + '''namespace %s {
+
+'''
+                             % ns)
                 self.indent()
                 
     def closeNamespaces(self, stream):        
         if self.AST.hasPackage():
+
             # we may have nested namespace
-            nameSpaceList = self.AST.package.name.split(".")
+
+            nameSpaceList = self.AST.package.name.split('.')
             nameSpaceList.reverse()
             for ns in nameSpaceList:
                 self.unIndent()
-                stream.write(self.getIndent()+"} "+self.commentLineBeginWith+" 
end of namespace %s \n" % ns)
+                stream.write(self.getIndent() + '} '
+                             + self.commentLineBeginWith
+                             + ' end of namespace %s \n' % ns)
                 
-    def writeOneGetterSetter(self,stream,field):
+    def writeOneGetterSetter(self, stream, field):
         
         targetTypeName = self.getTargetTypeName(field.typeid.name)
         
-        if field.typeid.name == "onoff":
-            if field.qualifier == "repeated":
+        if field.typeid.name == 'onoff':
+            if field.qualifier == 'repeated':
                 stream.write(self.getIndent())
-                stream.write("uint32_t 
get"+self.upperFirst(field.name)+"Size() const")
-                stream.write(" {return "+field.name+".size();}\n")
+                stream.write('uint32_t get'
+                             + self.upperFirst(field.name)
+                             + 'Size() const')
+                stream.write(' {return ' + field.name + '.size();}\n')
 
                 stream.write(self.getIndent())
-                stream.write("void 
set"+self.upperFirst(field.name)+"Size(uint32_t num)")
-                stream.write(" {"+field.name+".resize(num);}\n")
+                stream.write('void set' + self.upperFirst(field.name)
+                             + 'Size(uint32_t num)')
+                stream.write(' {' + field.name + '.resize(num);}\n')
                 
                 stream.write(self.getIndent())
-                stream.write("const std::vector<"+targetTypeName+">& 
get"+self.upperFirst(field.name)+"() const")
-                stream.write(" {return "+field.name+";}\n")
+                stream.write('const std::vector<' + targetTypeName
+                             + '>& get' + self.upperFirst(field.name)
+                             + '() const')
+                stream.write(' {return ' + field.name + ';}\n')
 
                 stream.write(self.getIndent())
-                stream.write("void "+field.name+"On(uint32_t rank)")
-                stream.write(" {"+field.name+"[rank] = true;}\n")
+                stream.write('void ' + field.name + 'On(uint32_t rank)')
+                stream.write(' {' + field.name + '[rank] = true;}\n')
             
                 stream.write(self.getIndent())
-                stream.write("void "+field.name+"Off(uint32_t rank)")
-                stream.write(" {"+field.name+"[rank] = false;}\n")
+                stream.write('void ' + field.name + 'Off(uint32_t rank)'
+                             )
+                stream.write(' {' + field.name + '[rank] = false;}\n')
         
                 stream.write(self.getIndent())
-                stream.write(targetTypeName+ " 
is"+self.upperFirst(field.name)+"On(uint32_t rank) const")
-                stream.write(" {return "+field.name+"[rank];}\n")
+                stream.write(targetTypeName + ' is'
+                             + self.upperFirst(field.name)
+                             + 'On(uint32_t rank) const')
+                stream.write(' {return ' + field.name + '[rank];}\n')
             else:
                 stream.write(self.getIndent())
-                stream.write("void "+field.name+"On()")
-                stream.write(" {"+field.name+" = true;}\n")
+                stream.write('void ' + field.name + 'On()')
+                stream.write(' {' + field.name + ' = true;}\n')
             
                 stream.write(self.getIndent())
-                stream.write("void "+field.name+"Off()")
-                stream.write(" {"+field.name+" = false;}\n")
+                stream.write('void ' + field.name + 'Off()')
+                stream.write(' {' + field.name + ' = false;}\n')
         
                 stream.write(self.getIndent())
-                stream.write(targetTypeName+ " 
is"+self.upperFirst(field.name)+"On() const")
-                stream.write(" {return "+field.name+";}\n")
+                stream.write(targetTypeName + ' is'
+                             + self.upperFirst(field.name)
+                             + 'On() const')
+                stream.write(' {return ' + field.name + ';}\n')
         else:
-            if field.qualifier == "repeated":
+            if field.qualifier == 'repeated':
                 stream.write(self.getIndent())
-                stream.write("uint32_t 
get"+self.upperFirst(field.name)+"Size() const")
-                stream.write(" {return "+field.name+".size();}\n")
+                stream.write('uint32_t get'
+                             + self.upperFirst(field.name)
+                             + 'Size() const')
+                stream.write(' {return ' + field.name + '.size();}\n')
 
                 stream.write(self.getIndent())
-                stream.write("void 
set"+self.upperFirst(field.name)+"Size(uint32_t num)")
-                stream.write(" {"+field.name+".resize(num);}\n")
+                stream.write('void set' + self.upperFirst(field.name)
+                             + 'Size(uint32_t num)')
+                stream.write(' {' + field.name + '.resize(num);}\n')
                 
                 stream.write(self.getIndent())
-                stream.write("const std::vector<"+targetTypeName+">& 
get"+self.upperFirst(field.name)+"() const")
-                stream.write(" {return "+field.name+";}\n")
+                stream.write('const std::vector<' + targetTypeName
+                             + '>& get' + self.upperFirst(field.name)
+                             + '() const')
+                stream.write(' {return ' + field.name + ';}\n')
 
                 stream.write(self.getIndent())
-                stream.write("const "+targetTypeName+"& 
get"+self.upperFirst(field.name)+"(uint32_t rank) const")
-                stream.write(" {return "+field.name+"[rank];}\n")  
+                stream.write('const ' + targetTypeName + '& get'
+                             + self.upperFirst(field.name)
+                             + '(uint32_t rank) const')
+                stream.write(' {return ' + field.name + '[rank];}\n')
                 
                 stream.write(self.getIndent())
-                stream.write(targetTypeName+"& 
get"+self.upperFirst(field.name)+"(uint32_t rank)")
-                stream.write(" {return "+field.name+"[rank];}\n")  
+                stream.write(targetTypeName + '& get'
+                             + self.upperFirst(field.name)
+                             + '(uint32_t rank)')
+                stream.write(' {return ' + field.name + '[rank];}\n')
                 
                 stream.write(self.getIndent())
-                stream.write("void set"+self.upperFirst(field.name)+"(const ")
-                stream.write(targetTypeName+"& 
new"+self.upperFirst(field.name)+", uint32_t rank)")
-                stream.write(" 
{"+field.name+"[rank]=new"+self.upperFirst(field.name)+";}\n")
+                stream.write('void set' + self.upperFirst(field.name)
+                             + '(const ')
+                stream.write(targetTypeName + '& new'
+                             + self.upperFirst(field.name)
+                             + ', uint32_t rank)')
+                stream.write(' {' + field.name + '[rank]=new'
+                             + self.upperFirst(field.name) + ';}\n')
                 
                 stream.write(self.getIndent())
-                stream.write("void 
remove"+self.upperFirst(field.name)+"(uint32_t rank)")
-                stream.write(" {"+field.name+".erase("+field.name+".begin() + 
rank);}\n")                     
+                stream.write('void remove'
+                             + self.upperFirst(field.name)
+                             + '(uint32_t rank)')
+                stream.write(' {' + field.name + '.erase(' + field.name
+                             + '.begin() + rank);}\n')
             else:
                 stream.write(self.getIndent())
-                stream.write("const "+targetTypeName+"& 
get"+self.upperFirst(field.name)+"() const")
-                stream.write(" {return "+field.name+";}\n")        
+                stream.write('const ' + targetTypeName + '& get'
+                             + self.upperFirst(field.name) + '() const')
+                stream.write(' {return ' + field.name + ';}\n')
             
                 stream.write(self.getIndent())
-                stream.write("void set"+self.upperFirst(field.name)+"(const ")
-                stream.write(targetTypeName+"& 
new"+self.upperFirst(field.name)+") {")
-                if field.qualifier == "optional":                              
          
-                    stream.write("\n")
-                    self.indent();                    
-                    
stream.write(self.getIndent()+"_has%s=true;\n"%self.upperFirst(field.name))
-                    
stream.write(self.getIndent()+field.name+"=new"+self.upperFirst(field.name)+";\n")
                    
+                stream.write('void set' + self.upperFirst(field.name)
+                             + '(const ')
+                stream.write(targetTypeName + '& new'
+                             + self.upperFirst(field.name) + ') {')
+                if field.qualifier == 'optional':
+                    stream.write('\n')
+                    self.indent()
+                    stream.write(self.getIndent() + '_has%s=true;\n'
+                                 % self.upperFirst(field.name))
+                    stream.write(self.getIndent() + field.name + '=new'
+                                 + self.upperFirst(field.name) + ';\n')
                     self.unIndent()
                     stream.write(self.getIndent())         
                 else:
-                    
stream.write(field.name+"=new"+self.upperFirst(field.name)+";")
-                stream.write("}\n")
-                if field.qualifier == "optional":
+                    stream.write(field.name + '=new'
+                                 + self.upperFirst(field.name) + ';')
+                stream.write('}\n')
+                if field.qualifier == 'optional':
                     stream.write(self.getIndent())
                     tmp = self.upperFirst(field.name)
-                    stream.write("bool has%s() {return _has%s;}\n"%(tmp,tmp))
+                    stream.write('bool has%s() {return _has%s;}\n'
+                                 % (tmp, tmp))
             
-    def writeDeclarationFieldStatement(self,stream,field):
+    def writeDeclarationFieldStatement(self, stream, field):
         stream.write(self.getIndent())     
-        if field.qualifier == "repeated":
-            stream.write("std::vector<%s> %s;" % 
(self.getTargetTypeName(field.typeid.name),field.name))        
-        else:               
-            stream.write("%s %s;" % 
(self.getTargetTypeName(field.typeid.name),field.name))                         
                       
+        if field.qualifier == 'repeated':
+            stream.write('std::vector<%s> %s;'
+                         % (self.getTargetTypeName(field.typeid.name),
+                         field.name))
+        else:
+            stream.write('%s %s;'
+                         % (self.getTargetTypeName(field.typeid.name),
+                         field.name))
         self.writeComment(stream, field)     
+
         # optional field generate another boolean field 
         # used to detect whether if the optional field has
         # been given or not.
-        if field.qualifier == "optional":
-            stream.write(self.getIndent()+"bool _has%s;\n" % 
self.upperFirst(field.name))
             
-    def generateEnum(self,stream,enum):
+        if field.qualifier == 'optional':
+            stream.write(self.getIndent() + 'bool _has%s;\n'
+                         % self.upperFirst(field.name))
+
+    def generateEnum(self, stream, enum):
         self.writeComment(stream, enum)
         stream.write(self.getIndent())
-        stream.write("typedef enum %s {\n" % enum.name)
+        stream.write('typedef enum %s {\n' % enum.name)
         self.indent()
         first = True
-        lastname = (enum.values[len(enum.values)-1]).name
+        lastname = enum.values[len(enum.values) - 1].name
         for enumval in enum.values:
             if first:
                 stream.write(self.getIndent())
-                stream.write("%s = %d, " % (enumval.name,enumval.value))       
         
-                first=False
+                stream.write('%s = %d, ' % (enumval.name,
+                             enumval.value))
+                first = False
                 self.writeComment(stream, enumval)
             else:
                 stream.write(self.getIndent())
-        if (enumval.name==lastname):
-          stream.write("%s \n" % enumval.name)            
+                if enumval.name == lastname:
+                    stream.write('%s \n' % enumval.name)
         else:
-          stream.write("%s, " % enumval.name)            
+                    stream.write('%s, ' % enumval.name)
           self.writeComment(stream, enumval)
                                             
         self.unIndent()      
         stream.write(self.getIndent())          
-        stream.write("} %s_t; " %  enum.name) 
-        stream.write(self.commentLineBeginWith + "end of enum %s \n" % 
enum.name)
+        stream.write('} %s_t; ' % enum.name)
+        stream.write(self.commentLineBeginWith + 'end of enum %s \n'
+                     % enum.name)
+
+    def generateHeader(self, stream, factoryOnly=False):
                                                     
-    def generateHeader(self,stream,factoryOnly=False):
         # write the usual header protecting MACRO
-        supposedHeaderName=stream.name
-        if supposedHeaderName != "<stdout>":
-            supposedHeaderName=os.path.basename(supposedHeaderName)
-            supposedHeaderName=os.path.splitext(supposedHeaderName)[0]
+
+        supposedHeaderName = stream.name
+        if supposedHeaderName != '<stdout>':
+            supposedHeaderName = os.path.basename(supposedHeaderName)
+            supposedHeaderName = os.path.splitext(supposedHeaderName)[0]
             headerProtectMacroName = supposedHeaderName
         else:
-            (headerProtectMacroName,ext) = os.path.splitext(self.AST.name)
+            (headerProtectMacroName, ext) = \
+                os.path.splitext(self.AST.name)
+
+        headerProtectMacroName = '%s_HH' \
+            % headerProtectMacroName.upper()
+        stream.write('#ifndef %s\n' % headerProtectMacroName)
+        stream.write('#define %s\n' % headerProtectMacroName)
             
-        headerProtectMacroName = "%s_HH" % headerProtectMacroName.upper()      
      
-        stream.write("#ifndef %s\n"%headerProtectMacroName)
-        stream.write("#define %s\n"%headerProtectMacroName)        
         # add necessary standard and global includes
-        stream.write(self.commentLineBeginWith+" ****-**** Global System 
includes ****-****\n")
-        stream.write("#include <vector>\n")
-        self.included["#include <vector>"]=1
-        stream.write("#include <string>\n")        
-        self.included["#include <string>"]=1
+
+        stream.write(self.commentLineBeginWith
+                     + ' ****-**** Global System includes ****-****\n')
+        stream.write('#include <vector>\n')
+        self.included['#include <vector>'] = 1
+        stream.write('#include <string>\n')
+        self.included['#include <string>'] = 1
+
         # add include coming from native type specification 
-        stream.write(self.commentLineBeginWith+" ****-**** Includes coming 
from native types ****-****\n")
+
+        stream.write(self.commentLineBeginWith
+                     + ' ****-**** Includes coming from native types 
****-****\n'
+                     )
         for native in self.AST.natives:
-            if native.hasLanguage("CXX"):
-                for line in native.getLanguageLines("CXX"):
+            if native.hasLanguage('CXX'):
+                for line in native.getLanguageLines('CXX'):
+
                     # we are only interested in native "include" statement
+
                     stmt = line.statement
-                    if stmt.find("#include")>=0 and (not stmt in 
self.included.keys()):
+                    if stmt.find('#include') >= 0 and not stmt \
+                        in self.included.keys():
                         self.writeComment(stream, native)
-                        stream.write(stmt+"\n")
-                        self.included[stmt]=1
+                        stream.write(stmt + '\n')
+                        self.included[stmt] = 1
+
         # Generate namespace for specified package package 
         # we may have nested namespace
+
         self.openNamespaces(stream)
         
         if not factoryOnly:
+
             # Native type should be defined in included header
-            stream.write(self.getIndent()+self.commentLineBeginWith)
-            stream.write(" Native types has been defined:\n");
-            stream.write(self.getIndent()+self.commentLineBeginWith)
-            stream.write("     - by included headers (see above)\n")
-            stream.write(self.getIndent()+self.commentLineBeginWith)
-            stream.write("     - with typedef (see below [if any])\n")
+
+            stream.write(self.getIndent() + self.commentLineBeginWith)
+            stream.write(' Native types has been defined:\n')
+            stream.write(self.getIndent() + self.commentLineBeginWith)
+            stream.write('     - by included headers (see above)\n')
+            stream.write(self.getIndent() + self.commentLineBeginWith)
+            stream.write('     - with typedef (see below [if any])\n')
             for native in self.AST.natives:  
-                if native.hasLanguage("CXX"):
-                   for line in native.getLanguageLines("CXX"):
+                if native.hasLanguage('CXX'):
+                    for line in native.getLanguageLines('CXX'):
                        stmt = line.statement
+
                        # we are only interested in native statement
                        # which are not #include
-                       if stmt.find("typedef")>=0 and (not stmt in 
self.typedefed.keys()):
+
+                        if stmt.find('typedef') >= 0 and not stmt \
+                            in self.typedefed.keys():
                            self.writeComment(stream, native)
-                           stream.write(self.getIndent()+stmt+"\n")
-                           self.typedefed[stmt]=1                              
      
+                            stream.write(self.getIndent() + stmt + '\n')
+                            self.typedefed[stmt] = 1
 
             # Put enum in a namespace in order to avoid conflict
+
             stream.write(self.getIndent())
-            stream.write("namespace %s {\n" % self.AST.name.split(".")[0])
+            stream.write('namespace %s {\n' % self.AST.name.split('.'
+                         )[0])
             self.indent()
 
             # Generate version
+
             if self.AST.hasVersion():
-                major,minor = self.AST.version.number
+                (major, minor) = self.AST.version.number
                 stream.write(self.getIndent())
-                stream.write("static const uint32_t versionMajor = %d;\n" % 
major)
+                stream.write('static const uint32_t versionMajor = %d;\n'
+                              % major)
                 stream.write(self.getIndent())
-                stream.write("static const uint32_t versionMinor = %d;\n" % 
minor)
+                stream.write('static const uint32_t versionMinor = %d;\n'
+                              % minor)
 
             # Generate enum
-            lastname = ""
+
+            lastname = ''
             for enum in self.AST.enums:
                 self.generateEnum(stream, enum)
-            stream.write("\n")
+            stream.write('\n')
                
             # close enum namespace
            
             self.unIndent()
             stream.write(self.getIndent())
-            stream.write("}\n")
+            stream.write('}\n')
 
             # Generate message type
+
             for msg in self.AST.messages:
                 self.writeComment(stream, msg)
                 stream.write(self.getIndent())                
-                stream.write("class %s %s" % (self.exportPrefix,msg.name))
+                stream.write('class %s %s' % (self.exportPrefix,
+                             msg.name))
                 if msg.hasMerge():
-                    stream.write(" : public %s {\n" % msg.merge.name)
-                    virtual = "virtual "
+                    stream.write(' : public %s {\n' % msg.merge.name)
+                    virtual = 'virtual '
                 elif msg.hasHeir():
-                    stream.write(" {\n")
-                    virtual = "virtual "
+                    stream.write(' {\n')
+                    virtual = 'virtual '
                 else:
-                    stream.write(" {\n")
-                    virtual = ""
+                    stream.write(' {\n')
+                    virtual = ''
                                     
                 self.indent()                
+
                 # begin public
-                stream.write(self.getIndent()+"public:\n") 
+
+                stream.write(self.getIndent() + 'public:\n')
                 self.indent()
                
                if msg.hasEnum():
-                   self.generateEnum(stream,msg.enum)
-                   stream.write("\n")
-               
+                    self.generateEnum(stream, msg.enum)
+                    stream.write('\n')
                    
                 if msg.hasMerge():
-                   stream.write(self.getIndent()+"typedef %s 
Super;\n"%msg.merge.name)
+                    stream.write(self.getIndent()
+                                 + 'typedef %s Super;\n'
+                                 % msg.merge.name)
+
                 # now write constructor/destructor
-                stream.write(self.getIndent()+msg.name+"();\n")
-                stream.write(self.getIndent()+virtual+"~"+msg.name+"();\n")
+
+                stream.write(self.getIndent() + msg.name + '();\n')
+                stream.write(self.getIndent() + virtual + '~'
+                             + msg.name + '();\n')
                 
                 # write virtual serialize and deserialize
                 # if we have some specific field
-                if len(msg.fields)>0:
+
+                if len(msg.fields) > 0:
+
                     # serialize/deserialize 
-                    stream.write(self.getIndent()+virtual+"void serialize(%s& 
msgBuffer);\n" % (self.serializeBufferType))
-                    stream.write(self.getIndent()+virtual+"void 
deserialize(%s& msgBuffer);\n" % (self.serializeBufferType))
+
+                    stream.write(self.getIndent() + virtual
+                                 + 'void serialize(%s& msgBuffer);\n'
+                                 % self.serializeBufferType)
+                    stream.write(self.getIndent() + virtual
+                                 + 'void deserialize(%s& msgBuffer);\n'
+                                 % self.serializeBufferType)
+
                     # specific getter/setter
-                    stream.write(self.getIndent()+self.commentLineBeginWith+" 
specific Getter(s)/Setter(s)\n")
+
+                    stream.write(self.getIndent()
+                                 + self.commentLineBeginWith
+                                 + ' specific Getter(s)/Setter(s)\n')
                     for field in msg.fields:
-                        if 
(isinstance(field,GenMsgAST.MessageType.CombinedField)):
+                        if isinstance(field,
+                                GenMsgAST.MessageType.CombinedField):
                             for cfield in field.fields:
-                                self.writeOneGetterSetter(stream,cfield)
+                                self.writeOneGetterSetter(stream,
+                                        cfield)
                         else:
-                            self.writeOneGetterSetter(stream,field)
+                            self.writeOneGetterSetter(stream, field)
+
                     # the show method
-                    stream.write(self.getIndent()+self.commentLineBeginWith+" 
the show method\n")
-                    stream.write(self.getIndent()+virtual+"std::ostream& 
show(std::ostream& out);\n")
+
+                    stream.write(self.getIndent()
+                                 + self.commentLineBeginWith
+                                 + ' the show method\n')
+                    stream.write(self.getIndent() + virtual
+                                 + 'std::ostream& show(std::ostream& out);\n'
+                                 )
                                                     
                 self.unIndent()
+
                 # end public:
                 
                 # begin protected
-                stream.write(self.getIndent()+"protected:\n")
+
+                stream.write(self.getIndent() + 'protected:\n')
                 self.indent()
                 for field in msg.fields:
-                    if (isinstance(field,GenMsgAST.MessageType.CombinedField)):
+                    if isinstance(field,
+                                  GenMsgAST.MessageType.CombinedField):
                         for cfield in field.fields:
-                            self.writeDeclarationFieldStatement(stream,cfield)
+                            self.writeDeclarationFieldStatement(stream,
+                                    cfield)
                     else:
-                        self.writeDeclarationFieldStatement(stream,field)      
              
+                        self.writeDeclarationFieldStatement(stream,
+                                field)
                 self.unIndent()
+
                 # end protected  
                 
                 # begin private
-                stream.write(self.getIndent()+"private:\n")
+
+                stream.write(self.getIndent() + 'private:\n')
                 self.indent()
                 self.unIndent()
+
                 # end private
                 
                 self.unIndent()
-                stream.write(self.getIndent() + "};\n")
+                stream.write(self.getIndent() + '};\n')
 
         # Generate Factory (if any)
         # @todo
+
         if self.AST.hasFactory():             
             self.writeComment(stream, self.AST.factory)
-            stream.write(self.getIndent() + "class %s %s {\n" % 
(self.exportPrefix,self.AST.factory.name))
+            stream.write(self.getIndent() + 'class %s %s {\n'
+                         % (self.exportPrefix, self.AST.factory.name))
             self.indent()
+
             # begin public
-            stream.write(self.getIndent()+"public:\n")            
+
+            stream.write(self.getIndent() + 'public:\n')
             self.indent()
            
-            stream.write(self.getIndent()+"static %s* %s(%s type) throw ("% 
self.AST.factory.creator)
-           stream.write("%s" %(self.exception[0]))
+            stream.write(self.getIndent()
+                         + 'static %s* %s(%s type) throw ('
+                         % self.AST.factory.creator)
+            stream.write('%s' % self.exception[0])
            for exception in self.exception[1:]:
-               stream.write(" ,%s" %(exception))
-           stream.write("); \n")
+                stream.write(' ,%s' % exception)
+            stream.write('); \n')
            
            if self.AST.factory.hasFactoryReceiver():
-                stream.write(self.getIndent()+"static %s* %s(%s stream) throw 
("% self.AST.factory.receiver)
-               stream.write("%s" %(self.exception[0]))
+                stream.write(self.getIndent()
+                             + 'static %s* %s(%s stream) throw ('
+                             % self.AST.factory.receiver)
+                stream.write('%s' % self.exception[0])
                for exception in self.exception[1:]:
-                   stream.write(" ,%s" %(exception))
-               stream.write("); \n")
+                    stream.write(' ,%s' % exception)
+                stream.write('); \n')
            
             self.unIndent()
-            #end public
-            #begin protected
-            stream.write(self.getIndent()+"protected:\n")
+
+            # end public
+            # begin protected
+
+            stream.write(self.getIndent() + 'protected:\n')
             self.indent()
             self.unIndent()
-            #end protected
-            #begin private
-            stream.write(self.getIndent()+"private:\n")
+
+            # end protected
+            # begin private
+
+            stream.write(self.getIndent() + 'private:\n')
             self.indent()
             self.unIndent()
-            #end private
+
+            # end private
+
             self.unIndent()
-            stream.write(self.getIndent()+"};\n\n")            
+            stream.write(self.getIndent() + '''};
+
+''')
                         
         # may close any open namespaces 
+
         self.closeNamespaces(stream)
+
         # close usual HEADER protecting MACRO
-        stream.write(self.commentLineBeginWith+" %s\n"%headerProtectMacroName)
-        stream.write("#endif\n")
         
-    def writeInitFieldStatement(self,stream,field):
-        if field.qualifier == "optional":
+        stream.write(self.commentLineBeginWith + ' %s\n'
+                     % headerProtectMacroName)
+        stream.write('#endif\n')
+
+    def writeInitFieldStatement(self, stream, field):
+        if field.qualifier == 'optional':
             stream.write(self.getIndent())
-            stream.write("_has"+self.upperFirst(field.name)+"=false;\n")
+            stream.write('_has' + self.upperFirst(field.name)
+                         + '=false;\n')
         if field.hasDefaultValue():            
             stream.write(self.getIndent())
-            stream.write(field.name+"="+str(field.defaultValue)+";\n")        
+            stream.write(field.name + '=' + str(field.defaultValue)
+                         + ';\n')
         else:
             stream.write(self.getIndent())
             stream.write(self.commentLineBeginWith)
-            stream.write(field.name+"= <no default value in message spec using 
builtin>\n")
+            stream.write(field.name
+                         + '= <no default value in message spec using 
builtin>\n'
+                         )
+
             # FIXME find a default value for every type beside natives
                            
-    def writeSerializeFieldStatement(self,stream,field):
+    def writeSerializeFieldStatement(self, stream, field):
         indexField = ''
-        if field.qualifier == "optional":
+        if field.qualifier == 'optional':
             stream.write(self.getIndent())
-            stream.write("msgBuffer.write_bool(_has%s);\n" % 
self.upperFirst(field.name))
+            stream.write('msgBuffer.write_bool(_has%s);\n'
+                         % self.upperFirst(field.name))
             stream.write(self.getIndent())
-            stream.write("if (_has%s) {\n" % self.upperFirst(field.name))
+            stream.write('if (_has%s) {\n'
+                         % self.upperFirst(field.name))
             self.indent()
-        elif field.qualifier == "repeated":
+        elif field.qualifier == 'repeated':
             indexField = '[i]'
             stream.write(self.getIndent())
-            stream.write("uint32_t "+field.name+"Size = 
"+field.name+".size();\n")
+            stream.write('uint32_t ' + field.name + 'Size = '
+                         + field.name + '.size();\n')
             stream.write(self.getIndent())
-            stream.write("msgBuffer.write_uint32("+field.name+"Size);\n")
+            stream.write('msgBuffer.write_uint32(' + field.name
+                         + 'Size);\n')
             stream.write(self.getIndent())
-            stream.write("for (uint32_t i = 0; i < "+field.name+"Size; ++i) 
{\n")
+            stream.write('for (uint32_t i = 0; i < ' + field.name
+                         + 'Size; ++i) {\n')
             self.indent()
             
         stream.write(self.getIndent())        
         methodName = self.getSerializeMethodName(field.typeid.name)
         if None == methodName: # field has no Serialize Method Name found in 
the map
+
             # non native field case
+
             if field.typeid.name in [m.name for m in self.AST.messages]:
-                stream.write(field.name+indexField+".serialize(msgBuffer);\n")
-            # enum type field case (enum are serialized as uint32)
+                stream.write(field.name + indexField
+                             + '.serialize(msgBuffer);\n')
             elif field.typeid.name in [m.name for m in self.AST.enums]:
-                methodName = self.getSerializeMethodName("uint32")
-                stream.write("msgBuffer."+methodName)
-                stream.write("("+field.name+indexField+");\n")
+
+            # enum type field case (enum are serialized as uint32)
+
+                methodName = self.getSerializeMethodName('uint32')
+                stream.write('msgBuffer.' + methodName)
+                stream.write('(' + field.name + indexField + ');\n')
+            else:
+
                # native field case  
+
+                stream.write(self.commentLineBeginWith
+                             + ' FIXME FIXME FIXME\n')
+                stream.write(self.getIndent()
+                             + self.commentLineBeginWith
+                             + " don't know how to serialize native field <%s> 
of type <%s>\n"
+                              % (field.name, field.typeid.name))
             else:            
-                stream.write(self.commentLineBeginWith+" FIXME FIXME FIXME\n")
-                stream.write(self.getIndent()+self.commentLineBeginWith+" 
don't know how to serialize native field <%s> of type 
<%s>\n"%(field.name,field.typeid.name))            
-        else: # field has one Serialize Method Name found in the map
-            stream.write("msgBuffer."+methodName)
-            stream.write("("+field.name+indexField+");\n")
         
-        if field.qualifier == "optional":
+              # field has one Serialize Method Name found in the map
+
+            stream.write('msgBuffer.' + methodName)
+            stream.write('(' + field.name + indexField + ');\n')
+
+        if field.qualifier == 'optional':
             self.unIndent()
-            stream.write(self.getIndent()+"}\n")
-        elif field.qualifier == "repeated":
+            stream.write(self.getIndent() + '}\n')
+        elif field.qualifier == 'repeated':
             self.unIndent()
-            stream.write(self.getIndent()+"}\n")
+            stream.write(self.getIndent() + '}\n')
             
-    def writeShowFieldStatement(self,stream,field):
+    def writeShowFieldStatement(self, stream, field):
         indexField = ''
-        if field.qualifier == "optional":
+        if field.qualifier == 'optional':
             stream.write(self.getIndent())
-            stream.write("out << \"(opt) %s =\" " % field.name)
-        elif field.qualifier == "repeated":
+            stream.write('out << "(opt) %s =" ' % field.name)
+        elif field.qualifier == 'repeated':
             indexField = '[i]'
             stream.write(self.getIndent())
-            stream.write("out << \"    %s [] =\" << std::endl;\n" % field.name 
)
+            stream.write('out << "    %s [] =" << std::endl;\n'
+                         % field.name)
             stream.write(self.getIndent())
-            stream.write("for (uint32_t i = 0; i < 
get"+self.upperFirst(field.name)+"Size(); ++i) {\n")            
+            stream.write('for (uint32_t i = 0; i < get'
+                         + self.upperFirst(field.name)
+                         + 'Size(); ++i) {\n')
             self.indent()
-            stream.write(self.getIndent()+"out ")
+            stream.write(self.getIndent() + 'out ')
         else:
             stream.write(self.getIndent())
-            stream.write("out << \" %s = \" " % field.name)
+            stream.write('out << " %s = " ' % field.name)
                    
         methodName = self.getSerializeMethodName(field.typeid.name)
         if None == methodName: # field has no Serialize Method Name found in 
the map
+
             # non native field case
+
             if field.typeid.name in [m.name for m in self.AST.messages]:       
         
-                stream.write("<< "+field.name+indexField+".show(out)")
-            # enum type field case (enum are serialized as uint32)
+                stream.write('<< ' + field.name + indexField
+                             + '.show(out)')
             elif field.typeid.name in [m.name for m in self.AST.enums]:
-                stream.write("<< %s << \" \" " %(field.name+indexField))
                 
-                #stream.write(self.commentLineBeginWith+" FIXME FIXME FIXME 
inherited message\n") 
+            # enum type field case (enum are serialized as uint32)
+
+                stream.write('<< %s << " " ' % (field.name
+                             + indexField))
+            else:
+
+                # stream.write(self.commentLineBeginWith+" FIXME FIXME FIXME 
inherited message\n")
             # native field case 
+
+                stream.write('<< "')
+                stream.write(self.getIndent()
+                             + self.commentLineBeginWith
+                             + "FIXME FIXME don't know how to serialize native 
field <%s> of type <%s>"
+                              % (field.name, field.typeid.name))
+                stream.write('"')
             else:
-                stream.write("<< \"")
-                stream.write(self.getIndent()+self.commentLineBeginWith+"FIXME 
FIXME don't know how to serialize native field <%s> of type 
<%s>"%(field.name,field.typeid.name))
-                stream.write("\"")
                                             
-        else: # field has one Serialize Method Name found in the map           
          
-            stream.write("<< %s << \" \" " % (field.name+indexField))
+              # field has one Serialize Method Name found in the map
+
+            stream.write('<< %s << " " ' % (field.name + indexField))
         
-        if field.qualifier == "optional":            
-            stream.write(self.getIndent()+"<< std::endl;\n")
-        elif field.qualifier == "repeated":
-            stream.write(";\n")
+        if field.qualifier == 'optional':
+            stream.write(self.getIndent() + '<< std::endl;\n')
+        elif field.qualifier == 'repeated':
+            stream.write(';\n')
             self.unIndent()
-            stream.write(self.getIndent()+"}\n")
-            stream.write(self.getIndent()+"out << std::endl;\n")
+            stream.write(self.getIndent() + '}\n')
+            stream.write(self.getIndent() + 'out << std::endl;\n')
         else:
-            stream.write(self.getIndent()+"<< std::endl;\n")
+            stream.write(self.getIndent() + '<< std::endl;\n')
                         
-    
-    def writeDeSerializeFieldStatement(self,stream,field):
+    def writeDeSerializeFieldStatement(self, stream, field):
         indexField = ''
-        if field.qualifier == "optional":
+        if field.qualifier == 'optional':
             stream.write(self.getIndent())
-            stream.write("_has%s = msgBuffer.read_bool();\n" % 
self.upperFirst(field.name))
+            stream.write('_has%s = msgBuffer.read_bool();\n'
+                         % self.upperFirst(field.name))
             stream.write(self.getIndent())
-            stream.write("if (_has%s) {\n" % self.upperFirst(field.name))
+            stream.write('if (_has%s) {\n'
+                         % self.upperFirst(field.name))
             self.indent()
-        elif field.qualifier == "repeated":
+        elif field.qualifier == 'repeated':
             indexField = '[i]'
             stream.write(self.getIndent())
-            stream.write("uint32_t "+field.name+"Size = 
msgBuffer.read_uint32();\n")
+            stream.write('uint32_t ' + field.name
+                         + 'Size = msgBuffer.read_uint32();\n')
             stream.write(self.getIndent())
-            stream.write(field.name+".resize("+field.name+"Size);\n")
+            stream.write(field.name + '.resize(' + field.name
+                         + 'Size);\n')
             stream.write(self.getIndent())
-            stream.write("for (uint32_t i = 0; i < "+field.name+"Size; ++i) 
{\n")
+            stream.write('for (uint32_t i = 0; i < ' + field.name
+                         + 'Size; ++i) {\n')
             self.indent()
             
         stream.write(self.getIndent())
         methodName = self.getDeSerializeMethodName(field.typeid.name)
         if None == methodName: # field has no Deserialize Method Name found in 
the map
+
             # non native field case
+
             if field.typeid.name in [m.name for m in self.AST.messages]:
-                
stream.write(field.name+indexField+".deserialize(msgBuffer);\n")
-            # enum type field case (enum are deserialized as uint32)
+                stream.write(field.name + indexField
+                             + '.deserialize(msgBuffer);\n')
             elif field.typeid.name in [m.name for m in self.AST.enums]:
-                targetTypeName = self.getTargetTypeName(field.typeid.name)
-                methodName = self.getDeSerializeMethodName("uint32")
+
+            # enum type field case (enum are deserialized as uint32)
+
+                targetTypeName = \
+                    self.getTargetTypeName(field.typeid.name)
+                methodName = self.getDeSerializeMethodName('uint32')
+
                 # We should check if the uint32 value is in enum range before 
casting it into enumtype
-                stream.write(field.name+indexField+" = 
static_cast<"+targetTypeName+">(msgBuffer."+methodName+" ());\n")
+
+                stream.write(field.name + indexField + ' = static_cast<'
+                              + targetTypeName + '>(msgBuffer.'
+                             + methodName + ' ());\n')
+            else:
+
             # native field case
+
+                stream.write(self.commentLineBeginWith
+                             + ' FIXME FIXME FIXME\n')
+                stream.write(self.getIndent()
+                             + self.commentLineBeginWith
+                             + " don't know how to deserialize native field 
<%s> of type <%s>\n"
+                              % (field.name, field.typeid.name))
             else:
-                stream.write(self.commentLineBeginWith+" FIXME FIXME FIXME\n")
-                stream.write(self.getIndent()+self.commentLineBeginWith+" 
don't know how to deserialize native field <%s> of type 
<%s>\n"%(field.name,field.typeid.name))            
-        else: # field has one Deserialize Method Name found in the map
+
+              # field has one Deserialize Method Name found in the map
+
             if methodName == 'read_string':
-                
stream.write("msgBuffer."+methodName+"("+field.name+indexField+");\n")
-            else:
-                # We may have to vast in order to enforce conversion
-                if isinstance(field.typeid,GenMsgAST.NativeType):
-                   stream.write(field.name+indexField+" = 
static_cast<"+field.typeid.name+">(msgBuffer."+methodName+"());\n")
+                stream.write('msgBuffer.' + methodName + '('
+                             + field.name + indexField + ');\n')
                 else:
-                   stream.write(field.name+indexField+" = 
msgBuffer."+methodName+"();\n")
                     
-        if field.qualifier == "optional":
-            self.unIndent()
-            stream.write(self.getIndent()+"}\n")
-        elif field.qualifier == "repeated":
-            self.unIndent()
-            stream.write(self.getIndent()+"}\n")
+                # We may have to vast in order to enforce conversion
             
-    def writeFactoryCreator(self,stream):
-        creator = 
(self.AST.factory.creator[0],self.AST.factory.name)+self.AST.factory.creator[1:]
            
-        stream.write(self.getIndent()+"%s* %s::%s(%s type) throw ("% creator)
-        stream.write("%s" %(self.exception[0]))
+                if isinstance(field.typeid, GenMsgAST.NativeType):
+                    stream.write(field.name + indexField
+                                 + ' = static_cast<'
+                                 + field.typeid.name + '>(msgBuffer.'
+                                 + methodName + '());\n')
+                else:
+                    stream.write(field.name + indexField
+                                 + ' = msgBuffer.' + methodName
+                                 + '();\n')
+
+        if field.qualifier == 'optional':
+            self.unIndent()
+            stream.write(self.getIndent() + '}\n')
+        elif field.qualifier == 'repeated':
+            self.unIndent()
+            stream.write(self.getIndent() + '}\n')
+
+    def writeFactoryCreator(self, stream):
+        creator = (self.AST.factory.creator[0], self.AST.factory.name) \
+            + self.AST.factory.creator[1:]
+        stream.write(self.getIndent() + '%s* %s::%s(%s type) throw ('
+                     % creator)
+        stream.write('%s' % self.exception[0])
         for exception in self.exception[1:]:
-            stream.write(" ,%s" %(exception))
-        stream.write(") { \n")
+            stream.write(' ,%s' % exception)
+        stream.write(') { \n')
        
         self.indent()
-        stream.write(self.getIndent()+"%s* msg = NULL;\n\n" % creator[0])
-        stream.write(self.getIndent() + "switch (type) {\n")
+        stream.write(self.getIndent() + '''%s* msg = NULL;
+
+'''
+                     % creator[0])
+        stream.write(self.getIndent() + 'switch (type) {\n')
         self.indent()
         for e in self.AST.eMessageType.values:
-            if (None!=self.replacePrefix):                        
-                stream.write(self.getIndent()+"case %s::%s:\n" % 
(creator[0],e.name.replace(self.replacePrefix[0],"",1)))   
+            if None != self.replacePrefix:
+                stream.write(self.getIndent() + 'case %s::%s:\n'
+                             % (creator[0],
+                             e.name.replace(self.replacePrefix[0], '',
+                             1)))
             else:
-               stream.write(self.getIndent()+"case %s::%s:\n" % 
(creator[0],e.name))
+                stream.write(self.getIndent() + 'case %s::%s:\n'
+                             % (creator[0], e.name))
                         
             self.indent()
            
-            if None==e.type:
+            if None == e.type:
+
                # we throw here the first exception of the list 
-                stream.write(self.getIndent()+"throw %s(\"%s message type 
should not be used!!\");\n"%(self.exception[0],e.name))
-            else:
-                stream.write(self.getIndent()+"msg = new %s();\n" % e.type)
-            stream.write(self.getIndent()+"break;\n")
-            self.unIndent()        
-        self.unIndent()
-        stream.write(self.getIndent()+ "} "+self.commentLineBeginWith+" end if 
switch (type)\n")        
-        stream.write(self.getIndent()+ "return msg;\n")
-        self.unIndent()
-        stream.write(self.getIndent()+("} /* end of %s::%s */\n\n" % 
(creator[1],creator[2])))
     
-    def writeFactoryReceiver(self,stream):
-        receiver = 
(self.AST.factory.receiver[0],self.AST.factory.name)+self.AST.factory.receiver[1:]
-        stream.write(self.getIndent()+"%s* %s::%s(%s stream) throw ("% 
receiver)
-        stream.write("%s" %(self.exception[0]))
+                stream.write(self.getIndent()
+                             + 'throw %s("%s message type should not be 
used!!");\n'
+                              % (self.exception[0], e.name))
+            else:
+                stream.write(self.getIndent() + 'msg = new %s();\n'
+                             % e.type)
+            stream.write(self.getIndent() + 'break;\n')
+            self.unIndent()
+        self.unIndent()
+        stream.write(self.getIndent() + '} '
+                     + self.commentLineBeginWith
+                     + ' end if switch (type)\n')
+        stream.write(self.getIndent() + 'return msg;\n')
+        self.unIndent()
+        stream.write(self.getIndent() + '''} /* end of %s::%s */
+
+'''
+                     % (creator[1], creator[2]))
+
+    def writeFactoryReceiver(self, stream):
+        receiver = (self.AST.factory.receiver[0],
+                    self.AST.factory.name) \
+            + self.AST.factory.receiver[1:]
+        stream.write(self.getIndent() + '%s* %s::%s(%s stream) throw ('
+                     % receiver)
+        stream.write('%s' % self.exception[0])
        for exception in self.exception[1:]:
-           stream.write(" ,%s" %(exception))
-       stream.write(") { \n")
+            stream.write(' ,%s' % exception)
+        stream.write(') { \n')
        
         self.indent()
-        stream.write(self.getIndent()+self.commentLineBeginWith+" FIXME This 
is not thread safe\n")
-        stream.write(self.getIndent()+"static %s msgBuffer;\n" % 
(self.serializeBufferType))
-        stream.write(self.getIndent()+"%s  msgGen;\n" % receiver[0])
-        stream.write(self.getIndent()+"%s* msg;\n\n" % receiver[0])
-        stream.write(self.getIndent()+self.commentLineBeginWith+" receive 
generic message \n")
-        stream.write(self.getIndent()+"msgGen.receive(stream,msgBuffer);\n")
-        stream.write(self.getIndent()+self.commentLineBeginWith+" create 
specific message from type \n")
-        
-        stream.write(self.getIndent()+"msg = ");
-        
stream.write(self.AST.factory.name+"::"+self.AST.factory.creator[1]+"(msgGen.%s);\n"
 %(self.messageTypeGetter))
-        
-        
stream.write(self.getIndent()+"msgBuffer.assumeSizeFromReservedBytes();\n")    
-        stream.write(self.getIndent()+"msg->deserialize(msgBuffer);\n")
-        stream.write(self.getIndent()+"return msg;\n")
-        self.unIndent()
-        stream.write(self.getIndent()+("} /* end of %s::%s */ \n\n" % 
(receiver[1],receiver[2])))
-    
-    def applyToFields(self,stream,fields,applyObject):
+        stream.write(self.getIndent() + self.commentLineBeginWith
+                     + ' FIXME This is not thread safe\n')
+        stream.write(self.getIndent() + 'static %s msgBuffer;\n'
+                     % self.serializeBufferType)
+        stream.write(self.getIndent() + '%s  msgGen;\n' % receiver[0])
+        stream.write(self.getIndent() + '''%s* msg;
+
+''' % receiver[0])
+        stream.write(self.getIndent() + self.commentLineBeginWith
+                     + ' receive generic message \n')
+        stream.write(self.getIndent()
+                     + 'msgGen.receive(stream,msgBuffer);\n')
+        stream.write(self.getIndent() + self.commentLineBeginWith
+                     + ' create specific message from type \n')
+
+        stream.write(self.getIndent() + 'msg = ')
+        stream.write(self.AST.factory.name + '::'
+                     + self.AST.factory.creator[1] + '(msgGen.%s);\n'
+                     % self.messageTypeGetter)
+
+        stream.write(self.getIndent()
+                     + 'msgBuffer.assumeSizeFromReservedBytes();\n')
+        stream.write(self.getIndent() + 'msg->deserialize(msgBuffer);\n'
+                     )
+        stream.write(self.getIndent() + 'return msg;\n')
+        self.unIndent()
+        stream.write(self.getIndent() + '''} /* end of %s::%s */ 
+
+'''
+                     % (receiver[1], receiver[2]))
+
+    def applyToFields(
+        self,
+        stream,
+        fields,
+        applyObject,
+        ):
         for field in fields:
-            if (isinstance(field, GenMsgAST.MessageType.CombinedField)):
+            if isinstance(field, GenMsgAST.MessageType.CombinedField):
                 for cfield in field.fields:
-                    applyObject(stream,cfield)
+                    applyObject(stream, cfield)
             else:
-                applyObject(stream,field)                        
+                applyObject(stream, field)
         
-    def generateBody(self,stream,factoryOnly=False):
+    def generateBody(self, stream, factoryOnly=False):
         """
         Generate the body.
         """
+
         # add necessary standard includes
-        stream.write("#include <vector>\n")
-        stream.write("#include <string>\n")
+
+        stream.write('#include <vector>\n')
+        stream.write('#include <string>\n')
 
         # [Try to] add corresponding header include
-        supposedHeaderName=stream.name
-        if supposedHeaderName != "<stdout>":
-            supposedHeaderName=os.path.basename(supposedHeaderName)
-            supposedHeaderName=os.path.splitext(supposedHeaderName)[0]
-           stream.write("#include \""+supposedHeaderName+".hh\"\n")
+
+        supposedHeaderName = stream.name
+        if supposedHeaderName != '<stdout>':
+            supposedHeaderName = os.path.basename(supposedHeaderName)
+            supposedHeaderName = os.path.splitext(supposedHeaderName)[0]
+            stream.write('#include "' + supposedHeaderName + '.hh"\n')
+
         # Generate namespace for specified package package 
         # we may have nested namespace
+
         self.openNamespaces(stream)
         if not factoryOnly:                        
+
             # Generate message type
+
             for msg in self.AST.messages:                                      
  
+
                 # Generate Constructor                
-                stream.write(self.getIndent()+"%s::%s() {\n" % 
(msg.name,msg.name))            
+
+                stream.write(self.getIndent() + '%s::%s() {\n'
+                             % (msg.name, msg.name))
                 self.indent()
                 if msg.hasMerge():
+
                     # Assign my name.
-                    stream.write(self.getIndent()+"this->messageName = 
\""+msg.name+"\";\n")
-                    if (None!=self.replacePrefix):                    
-                        stream.write(self.getIndent()+"this->type = 
"+msg.name.upper().replace(self.replacePrefix[0],self.replacePrefix[1],1)+";\n")
+
+                    stream.write(self.getIndent()
+                                 + 'this->messageName = "' + msg.name
+                                 + '";\n')
+                    if None != self.replacePrefix:
+                        stream.write(self.getIndent() + 'this->type = '
+                                + 
msg.name.upper().replace(self.replacePrefix[0],
+                                self.replacePrefix[1], 1) + ';\n')
                    else:
-                       stream.write(self.getIndent()+"this->type = 
"+msg.name.upper()+";\n")
+                        stream.write(self.getIndent() + 'this->type = '
+                                + msg.name.upper() + ';\n')
                         
                 # Write init value if any was provided
-                if len(msg.fields)>0:
-                    self.applyToFields(stream, msg.fields, 
self.writeInitFieldStatement)                                         
+
+                if len(msg.fields) > 0:
+                    self.applyToFields(stream, msg.fields,
+                            self.writeInitFieldStatement)
                 self.unIndent()
-                stream.write(self.getIndent()+"}\n\n")
+                stream.write(self.getIndent() + '''}
+
+''')
+
                 # Generate Destructor                
-                stream.write(self.getIndent()+"%s::~%s() {\n" % 
(msg.name,msg.name))            
+
+                stream.write(self.getIndent() + '%s::~%s() {\n'
+                             % (msg.name, msg.name))
                 self.indent()
                 self.unIndent()
-                stream.write(self.getIndent()+"}\n\n")
+                stream.write(self.getIndent() + '''}
+
+''')
                                 
                 # write virtual serialize and deserialize
                 # if we have some specific field
-                if len(msg.fields)>0:
+
+                if len(msg.fields) > 0:
+
                     # begin serialize method 
-                    stream.write(self.getIndent()+"void %s::serialize(%s& 
msgBuffer) {\n" % (msg.name,self.serializeBufferType))
+
+                    stream.write(self.getIndent()
+                                 + 'void %s::serialize(%s& msgBuffer) {\n'
+                                  % (msg.name,
+                                 self.serializeBufferType))
                     self.indent()
                     if msg.hasMerge():
-                        
stream.write(self.getIndent()+self.commentLineBeginWith)
-                        stream.write("Call mother class\n")
-                        
stream.write(self.getIndent()+"Super::serialize(msgBuffer);\n")
-                    stream.write(self.getIndent()+self.commentLineBeginWith)
-                    stream.write("Specific serialization code\n")
-                    self.applyToFields(stream, msg.fields, 
self.writeSerializeFieldStatement)                    
+                        stream.write(self.getIndent()
+                                + self.commentLineBeginWith)
+                        stream.write('Call mother class\n')
+                        stream.write(self.getIndent()
+                                + 'Super::serialize(msgBuffer);\n')
+                    stream.write(self.getIndent()
+                                 + self.commentLineBeginWith)
+                    stream.write('Specific serialization code\n')
+                    self.applyToFields(stream, msg.fields,
+                            self.writeSerializeFieldStatement)
                     self.unIndent()
-                    stream.write(self.getIndent()+"}\n\n")
+                    stream.write(self.getIndent() + '''}
+
+''')
+
                     # end serialize method
                     
                     # begin deserialize method
-                    stream.write(self.getIndent()+"void %s::deserialize(%s& 
msgBuffer) {\n" % (msg.name,self.serializeBufferType))
+
+                    stream.write(self.getIndent()
+                                 + 'void %s::deserialize(%s& msgBuffer) {\n'
+                                  % (msg.name,
+                                 self.serializeBufferType))
                     self.indent()
                     if msg.hasMerge():
-                        
stream.write(self.getIndent()+self.commentLineBeginWith)
-                        stream.write("Call mother class\n")
-                        
stream.write(self.getIndent()+"Super::deserialize(msgBuffer);\n")
-                    stream.write(self.getIndent()+self.commentLineBeginWith)
-                    stream.write("Specific deserialization code\n")
-                    self.applyToFields(stream, msg.fields, 
self.writeDeSerializeFieldStatement)                    
+                        stream.write(self.getIndent()
+                                + self.commentLineBeginWith)
+                        stream.write('Call mother class\n')
+                        stream.write(self.getIndent()
+                                + 'Super::deserialize(msgBuffer);\n')
+                    stream.write(self.getIndent()
+                                 + self.commentLineBeginWith)
+                    stream.write('Specific deserialization code\n')
+                    self.applyToFields(stream, msg.fields,
+                            self.writeDeSerializeFieldStatement)
                     self.unIndent()
-                    stream.write(self.getIndent()+"}\n\n")
+                    stream.write(self.getIndent() + '''}
+
+''')
+
                     # end deserialize method
                     # begin show method
-                    stream.write(self.getIndent()+"std::ostream& 
%s::show(std::ostream& out) {\n" % msg.name)
-                    self.indent()
-                    stream.write(self.getIndent()+"out << \"[%s -Begin]\" << 
std::endl;" % msg.name)
+
+                    stream.write(self.getIndent()
+                                 + 'std::ostream& %s::show(std::ostream& out) 
{\n'
+                                  % msg.name)
+                    self.indent()
+                    stream.write(self.getIndent()
+                                 + 'out << "[%s -Begin]" << std::endl;'
+                                 % msg.name)
                     if msg.hasMerge():
-                        
stream.write(self.getIndent()+self.commentLineBeginWith)
-                        stream.write("Call mother class\n")
-                        stream.write(self.getIndent()+"Super::show(out);\n")
-                    stream.write(self.getIndent()+self.commentLineBeginWith)
-                    stream.write("Specific show code\n")
-                    self.applyToFields(stream, msg.fields, 
self.writeShowFieldStatement)                  
-                    stream.write(self.getIndent()+"out << \"[%s -End]\" << 
std::endl;\n" % msg.name)
-                    stream.write(self.getIndent()+"return out;\n")
+                        stream.write(self.getIndent()
+                                + self.commentLineBeginWith)
+                        stream.write('Call mother class\n')
+                        stream.write(self.getIndent()
+                                + 'Super::show(out);\n')
+                    stream.write(self.getIndent()
+                                 + self.commentLineBeginWith)
+                    stream.write('Specific show code\n')
+                    self.applyToFields(stream, msg.fields,
+                            self.writeShowFieldStatement)
+                    stream.write(self.getIndent()
+                                 + 'out << "[%s -End]" << std::endl;\n'
+                                 % msg.name)
+                    stream.write(self.getIndent() + 'return out;\n')
                     self.unIndent()
-                    stream.write(self.getIndent()+"}\n\n")
+                    stream.write(self.getIndent() + '''}
+
+''')
+
                     # end show method
                     
         # Generate Factory (if any)
         # @todo
+
         if self.AST.hasFactory():                                              
               
+
             # begin creator                                                    
  
+
             self.writeFactoryCreator(stream)
+
             # begin receiver
+
            if self.AST.factory.hasFactoryReceiver():
                 self.writeFactoryReceiver(stream)                              
                              
                         
         self.closeNamespaces(stream)
         
+
 class CXXCERTIMessageGenerator(CXXCERTIGenerator):    
+
     """
     This is a C++ generator for C{MessageAST}.
     
     """               
+
     def generatorName(cls):
-        return "CXXCERTIMessage"
+        return 'CXXCERTIMessage'
+
     generatorName = classmethod(generatorName)
         
-    def __init__(self,MessageAST):
-        super(CXXCERTIMessageGenerator,self).__init__(MessageAST)   
+    def __init__(self, MessageAST):
+        super(CXXCERTIMessageGenerator, self).__init__(MessageAST)
         self.replacePrefix = list()
-        self.replacePrefix.append("M_")
-        self.replacePrefix.append("Message::")
-        self.exportPrefix = "CERTI_EXPORT"   
-       self.serializeBufferType = "libhla::MessageBuffer"
-       self.messageTypeGetter = "getMessageType()"
-       self.exception = ["NetworkError","NetworkSignal"]
+        self.replacePrefix.append('M_')
+        self.replacePrefix.append('Message::')
+        self.exportPrefix = 'CERTI_EXPORT'
+        self.serializeBufferType = 'libhla::MessageBuffer'
+        self.messageTypeGetter = 'getMessageType()'
+        self.exception = ['NetworkError', 'NetworkSignal']
+
 
 class CXXCERTINetworkMessageGenerator(CXXCERTIGenerator):    
+
     """
     This is a C++ generator for C{MessageAST}.
     
     """               
+
     def generatorName(cls):
-        return "CXXCERTINetworkMessage"
+        return 'CXXCERTINetworkMessage'
+
     generatorName = classmethod(generatorName)
     
-    def __init__(self,MessageAST):
-        super(CXXCERTINetworkMessageGenerator,self).__init__(MessageAST)   
+    def __init__(self, MessageAST):
+        super(CXXCERTINetworkMessageGenerator,
+              self).__init__(MessageAST)
         self.replacePrefix = list()
-        self.replacePrefix.append("NM_")
-        self.replacePrefix.append("NetworkMessage::")     
-        self.exportPrefix = "CERTI_EXPORT"
-        self.serializeBufferType = "libhla::MessageBuffer"
-       self.messageTypeGetter = "getMessageType()"
-       self.exception = ["NetworkError","NetworkSignal"]
+        self.replacePrefix.append('NM_')
+        self.replacePrefix.append('NetworkMessage::')
+        self.exportPrefix = 'CERTI_EXPORT'
+        self.serializeBufferType = 'libhla::MessageBuffer'
+        self.messageTypeGetter = 'getMessageType()'
+        self.exception = ['NetworkError', 'NetworkSignal']
 
 

Index: GenerateMessages.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenerateMessages.py,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -b -r1.39 -r1.40
--- GenerateMessages.py 10 Jun 2010 07:30:47 -0000      1.39
+++ GenerateMessages.py 11 Jun 2010 12:43:12 -0000      1.40
@@ -1,4 +1,5 @@
-#!/usr/bin/env python
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
 
 ## ----------------------------------------------------------------------------
 ## CERTI - HLA RunTime Infrastructure
@@ -19,7 +20,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenerateMessages.py,v 1.39 2010/06/10 07:30:47 erk Exp $
+## $Id: GenerateMessages.py,v 1.40 2010/06/11 12:43:12 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -46,32 +47,46 @@
 """
 
 import os
-import getopt, sys
+import getopt
+import sys
 import datetime
+
 # We use PLY in order to parse CERTI message specification files 
 # PLY is there: http://www.dabeaz.com/ply/
+
 import ply.yacc
 import ply.lex
+
 # We need some regular expression handling 
+
 import re
+
 # We use logging for ... logging :-)
 # see http://docs.python.org/library/logging.html
+
 import logging 
 
 # Build some logger related objects
+
 stdoutHandler = logging.StreamHandler(sys.stdout)
+
 # See formatting there:
 # http://docs.python.org/library/datetime.html#strftime-behavior
 # http://docs.python.org/library/logging.html#formatter-objects
-stdoutHandler.setFormatter(logging.Formatter("%(asctime)s.%(msecs)d-[%(name)s::%(levelname)s]
 %(message)s","%a %H:%M:%S"))
-mainlogger = logging.Logger("Main")
+
+stdoutHandler.setFormatter(logging.Formatter('%(asctime)s.%(msecs)d-[%(name)s::%(levelname)s]
 %(message)s'
+                           , '%a %H:%M:%S'))
+mainlogger = logging.Logger('Main')
 mainlogger.setLevel(logging.ERROR)
 mainlogger.addHandler(stdoutHandler)
 
 # Load AST related classes
+
 import GenMsgAST
+
 # Load backend specific language generator
 # FIXME TODO: implement automatic loading of additionnal languages
+
 import GenMsgBase
 import GenMsgCXX
 import GenMsgPython
@@ -79,23 +94,40 @@
 import GenMsgAST
 
 generatorBackends = dict()
-generatorBackends[GenMsgBase.MsgSpecGenerator.generatorName().lower()] = 
GenMsgBase.MsgSpecGenerator
-generatorBackends[GenMsgCXX.CXXCERTIGenerator.generatorName().lower()] = 
GenMsgCXX.CXXCERTIGenerator
-generatorBackends[GenMsgCXX.CXXCERTIMessageGenerator.generatorName().lower()] 
= GenMsgCXX.CXXCERTIMessageGenerator
-generatorBackends[GenMsgCXX.CXXCERTINetworkMessageGenerator.generatorName().lower()]
 = GenMsgCXX.CXXCERTINetworkMessageGenerator
-generatorBackends[GenMsgPython.PythonGenerator.generatorName().lower()] = 
GenMsgPython.PythonGenerator
-generatorBackends[GenMsgJava.JavaGenerator.generatorName().lower()] = 
GenMsgJava.JavaGenerator
+generatorBackends[GenMsgBase.MsgSpecGenerator.generatorName().lower()] = \
+    GenMsgBase.MsgSpecGenerator
+generatorBackends[GenMsgCXX.CXXCERTIGenerator.generatorName().lower()] = \
+    GenMsgCXX.CXXCERTIGenerator
+generatorBackends[GenMsgCXX.CXXCERTIMessageGenerator.generatorName().lower()] 
= \
+    GenMsgCXX.CXXCERTIMessageGenerator
+generatorBackends[GenMsgCXX.CXXCERTINetworkMessageGenerator.generatorName().lower()]
 = \
+    GenMsgCXX.CXXCERTINetworkMessageGenerator
+generatorBackends[GenMsgPython.PythonGenerator.generatorName().lower()] = \
+    GenMsgPython.PythonGenerator
+generatorBackends[GenMsgJava.JavaGenerator.generatorName().lower()] = \
+    GenMsgJava.JavaGenerator
+
 
 def usage():
-    print "Usage:\n%s --input=<message> [--language=<lang>] 
[--type=header|body] [--factory-only] [--output=<filename>] [--verbose] 
[--help]" % os.path.basename(sys.argv[0])
-    print "   Supported target languages are:"
+    print 'Usage:\n%s --input=<message> [--language=<lang>] 
[--type=header|body] [--factory-only] [--output=<filename>] [--verbose] 
[--help]' \
+        % os.path.basename(sys.argv[0])
+    print '   Supported target languages are:'
     for gene in generatorBackends.values():
-        print "       - " + gene.generatorName() 
+        print '       - ' + gene.generatorName()
+
     
 try:
-    opts, args = getopt.getopt(sys.argv[1:], "i:l:t:o:vh", 
["input=","language=","type=","factory-only","output=","verbose","help"])
+    (opts, args) = getopt.getopt(sys.argv[1:], 'i:l:t:o:vh', [
+        'input=',
+        'language=',
+        'type=',
+        'factory-only',
+        'output=',
+        'verbose',
+        'help',
+        ])
 except getopt.GetoptError, err:
-    mainlogger.error("opt = %s, msg = %s" % (err.opt,err.msg))    
+    mainlogger.error('opt = %s, msg = %s' % (err.opt, err.msg))
     usage()
     sys.exit(2)
 
@@ -104,140 +136,169 @@
     sys.exit(2)
     
 # default values for command line options
+
 verbose     = False
 factoryOnly = False
-gentype     = "header"
+gentype = 'header'
 language    = GenMsgBase.MsgSpecGenerator.generatorName()
 output      = sys.stdout
 inputFile   = None
 
 # Parse command line options
-for o, a in opts:
-    if o in ("-i", "--input"):
-        inputFile=a
-    if o in ("-l", "--language"):
-        language=a
-    if o in ("-t", "--type"):
-        gentype=a
-    if o in ("-f", "--factory-only"):
-        factoryOnly=True
-    if o in ("-o", "--output"):        
-        output=open(a,mode="w")
-    if o in ("-v", "--verbose"):
-        verbose=True
+
+for (o, a) in opts:
+    if o in ('-i', '--input'):
+        inputFile = a
+    if o in ('-l', '--language'):
+        language = a
+    if o in ('-t', '--type'):
+        gentype = a
+    if o in ('-f', '--factory-only'):
+        factoryOnly = True
+    if o in ('-o', '--output'):
+        output = open(a, mode='w')
+    if o in ('-v', '--verbose'):
+        verbose = True
         mainlogger.setLevel(logging.INFO)
-    if o in ("-h", "--help"):
+    if o in ('-h', '--help'):
         usage()
         sys.exit(0)
         
-mainlogger.info("Reading message specifications from: <%s>" % inputFile)       
-mainlogger.info("output send to: <%s>" % repr(output.name))
-mainlogger.info("Generating for language: <%s>" % language)
+mainlogger.info('Reading message specifications from: <%s>' % inputFile)
+mainlogger.info('output send to: <%s>' % repr(output.name))
+mainlogger.info('Generating for language: <%s>' % language)
 
 # Lexer+Parser specification begins here
 # reserved keywords
+
 reserved = {
-   'package'        : 'PACKAGE',
-   'version'        : 'VERSION',
-   'factory'        : 'FACTORY',
-   'factoryCreator' : 'FACTORY_CREATOR',
+    'package': 'PACKAGE',
+    'version': 'VERSION',
+    'factory': 'FACTORY',
+    'factoryCreator': 'FACTORY_CREATOR',
    'factoryReceiver': 'FACTORY_RECEIVER',   
-   'native'   : 'NATIVE',
-   'language' : 'LANGUAGE',            
-   'message'  : 'MESSAGE',
-   'merge'    : 'MERGE',
-   'enum'     : 'ENUM',
-   'default'  : 'DEFAULT',
-   'representation' : 'REPRESENTATION',            
-   'required' : 'REQUIRED',
-   'optional' : 'OPTIONAL',
-   'repeated' : 'REPEATED',
-   'combine'  : 'COMBINE',
-   'onoff'    : 'ONOFF_T',
-   'bool'     : 'BOOL_T',
-   'string'   : 'STRING_T',
-   'byte'     : 'BYTE_T',
-   'int8'     : 'INT8_T',
-   'uint8'    : 'UINT8_T',
-   'int16'    : 'INT16_T',
-   'uint16'   : 'UINT16_T',
-   'int32'    : 'INT32_T',
-   'uint32'   : 'UINT32_T',   
-   'int64'    : 'INT64_T',
-   'uint64'   : 'UINT64_T',
-   'float'    : 'FLOAT_T',
-   'double'   : 'DOUBLE_T', 
-}
+    'native': 'NATIVE',
+    'language': 'LANGUAGE',
+    'message': 'MESSAGE',
+    'merge': 'MERGE',
+    'enum': 'ENUM',
+    'default': 'DEFAULT',
+    'representation': 'REPRESENTATION',
+    'required': 'REQUIRED',
+    'optional': 'OPTIONAL',
+    'repeated': 'REPEATED',
+    'combine': 'COMBINE',
+    'onoff': 'ONOFF_T',
+    'bool': 'BOOL_T',
+    'string': 'STRING_T',
+    'byte': 'BYTE_T',
+    'int8': 'INT8_T',
+    'uint8': 'UINT8_T',
+    'int16': 'INT16_T',
+    'uint16': 'UINT16_T',
+    'int32': 'INT32_T',
+    'uint32': 'UINT32_T',
+    'int64': 'INT64_T',
+    'uint64': 'UINT64_T',
+    'float': 'FLOAT_T',
+    'double': 'DOUBLE_T',
+    }
 
 # List of token names.   This is always required
-tokens = ['ID',                          
+
+tokens = [  #          'RBRACKET','LBRACKET',
+            #          'NEWLINE',
+    'ID',
           'COMMENT',
           'INTEGER_VALUE',
           'FLOAT_VALUE',
           'BOOL_VALUE',      
           'STRING_VALUE',    
-          'RBRACE','LBRACE',
-          'RPAREN','LPAREN',
-#          'RBRACKET','LBRACKET',
+    'RBRACE',
+    'LBRACE',
+    'RPAREN',
+    'LPAREN',
           'COMMA',
           'EQUAL',
           'COLON',
           'PERIOD',
-#          'NEWLINE',
           'LANGLINE',
           ] + list(reserved.values())
 
 # This is a message of field or name identifier          
+
+
 def t_ID(t):
-    r'[a-zA-Z_][a-zA-Z_0-9]*'
-    if re.match( 
"^true$|^false$|^True$|^False$|^On$|^on$|^Off$|^off$",t.value):
+    r'''[a-zA-Z_][a-zA-Z_0-9]*'''
+
+    if re.match('^true$|^false$|^True$|^False$|^On$|^on$|^Off$|^off$',
+                t.value):
         t.type = 'BOOL_VALUE'
     else:
-        t.type = reserved.get(t.value,'ID') # Check for reserved words  
+        t.type = reserved.get(t.value, 'ID')  # Check for reserved words
     return t
 
+
 # Comment begins with // and ends up at the end of the line
+
+
 def t_COMMENT(t):
-    r'//.*'
+    r'''//.*'''
+
     return t
-    #pass
+
+
+    # pass
     # if pass No return value. Comments are discarded    
+
+
 def t_INTEGER_VALUE(t): 
-    r'\d+'     
+    r'''\d+'''
+
     try: 
         t.value = int(t.value) 
     except ValueError: 
-        print "Integer value too large", t.value 
+        print 'Integer value too large', t.value
         t.value = 0 
     return t
+
+
 def t_FLOAT_VALUE(t): 
-    r'\d+\.\d+' 
+    r'''\d+\.\d+'''
+
     try: 
         t.value = float(t.value) 
     except ValueError: 
-        print "Float value too large", t.value 
+        print 'Float value too large', t.value
         t.value = 0.0
     return t
 
+
 def t_BOOL_VALUE(t): 
-    r'true|false|True|False|On|on|Off|off'     
-    if t.value.lower()=="true" or t.value.lower()=="on":        
+    r'''true|false|True|False|On|on|Off|off'''
+
+    if t.value.lower() == 'true' or t.value.lower() == 'on':
         t.value = True
-    elif t.value.lower()=="false" or t.value.lower()=="off" :
+    elif t.value.lower() == 'false' or t.value.lower() == 'off':
         t.value = False
     else:                
-        t.lexer.logger.error("Invalid Boolean value too large", t.value) 
+        t.lexer.logger.error('Invalid Boolean value too large', t.value)
         t.value = False 
     return t
 
+
 def t_STRING_VALUE(t):
-    r'\".*\"'
+    r'''\".*\"'''
+
     return t
     
+
 t_LBRACE = r'{'
 t_RBRACE = r'}'
-#t_LBRACKET = r'\['
-#t_RBRACKET = r'\]'
+
+# t_LBRACKET = r'\['
+# t_RBRACKET = r'\]'
+
 t_LPAREN = r'\('
 t_RPAREN = r'\)'
 t_COMMA = r','
@@ -246,34 +307,48 @@
 t_PERIOD = r'\.'
 
 # Define a rule so we can track line numbers
+
+
 def t_NEWLINE(t):
-    r'\n'
+    r'''\n'''
+
     t.lexer.lineno += 1
     
+
 def t_LANGLINE(t):
-    r'\[.*\]'
+    r'''\[.*\]'''
+
     return t
     
+
 # A string containing ignored characters (spaces and tabs)
+
 t_ignore  = ' \t'
 
 # Error handling rule
+
+
 def t_error(t):
     t.lexer.logger.error("Illegal character '%s'" % t.value[0])
     t.lexer.skip(1)
 
+
 # Build the PLY lexer
-lexerlogger = logging.Logger("Lexer")
+
+lexerlogger = logging.Logger('Lexer')
 lexerlogger.setLevel(logging.ERROR)
 lexerlogger.addHandler(stdoutHandler)
 lexer = ply.lex.lex(debug=False)
 lexer.logger = lexerlogger
             
+
 def p_statement_list(p):
     '''statement_list : statement 
                       | statement statement_list'''
+
     p.parser.AST.add(p[1])
 
+
 def p_statement(p):
     '''statement : comment_block
                  | package
@@ -282,192 +357,239 @@
                  | message                 
                  | native                 
                  | enum'''        
-    p[0]=p[1]                            
+
+    p[0] = p[1]
+
         
 def p_comment_block(p):
     '''comment_block : COMMENT
                      | COMMENT comment_block'''
-    if len(p)==2:                 
-        p[0]=GenMsgAST.CommentBlock(p[1].strip('/'),isAtEOL=False)
+
+    if len(p) == 2:
+        p[0] = GenMsgAST.CommentBlock(p[1].strip('/'), isAtEOL=False)
     else:
-        p[0]=p[2]
+        p[0] = p[2]
         p[0].lines.append(p[1].strip('/'))        
     
+
 def p_package(p):
     '''package : PACKAGE package_id'''    
-    p[0]=GenMsgAST.Package(p[2])
-    p[0].linespan = (p.linespan(1)[0],p.linespan(2)[1])
+
+    p[0] = GenMsgAST.Package(p[2])
+    p[0].linespan = (p.linespan(1)[0], p.linespan(2)[1])
+
     
 def p_package_id(p):
     '''package_id : ID 
                   | ID PERIOD package_id'''
-    if len(p)==2:
-        p[0]=p[1]
+
+    if len(p) == 2:
+        p[0] = p[1]
     else:
-        p[0]=p[1]+"."+p[3]
+        p[0] = p[1] + '.' + p[3]
+
 
 def p_version(p):
     '''version : VERSION INTEGER_VALUE PERIOD INTEGER_VALUE'''
-    p[0]=GenMsgAST.Version((p[2],p[4]))
+
+    p[0] = GenMsgAST.Version((p[2], p[4]))
+
 
 def p_factory(p):
     '''factory : FACTORY ID LBRACE factory_creator factory_receiver RBRACE
                | FACTORY ID LBRACE factory_creator RBRACE'''
     
+    if len(p) == 7:
+        p[0] = GenMsgAST.Factory(p[2], p[4], p[5])
+        p[0].linespan = (p.linespan(1)[0], p.linespan(6)[1])
+    elif len(p) == 6:
     
-    if len(p)==7:
-       p[0] = GenMsgAST.Factory(p[2],p[4],p[5])
-        p[0].linespan = (p.linespan(1)[0],p.linespan(6)[1])
-       
-    elif len(p)==6:
-       p[0] = GenMsgAST.Factory(p[2],p[4])
-        p[0].linespan = (p.linespan(1)[0],p.linespan(5)[1])
-       
+        p[0] = GenMsgAST.Factory(p[2], p[4])
+        p[0].linespan = (p.linespan(1)[0], p.linespan(5)[1])
     
 
 def p_factory_creator(p):
     '''factory_creator : FACTORY_CREATOR ID ID LPAREN ID RPAREN'''
-    p[0]=(p[2],p[3],p[5])
+
+    p[0] = (p[2], p[3], p[5])
+
 
 def p_factory_receiver(p):
     '''factory_receiver : FACTORY_RECEIVER ID ID LPAREN ID RPAREN'''
-    p[0]=(p[2],p[3],p[5])
+
+    p[0] = (p[2], p[3], p[5])
+
             
 def p_message(p):
     '''message : MESSAGE ID LBRACE RBRACE 
                | MESSAGE ID LBRACE field_list RBRACE 
                | MESSAGE ID COLON MERGE ID LBRACE RBRACE 
                | MESSAGE ID COLON MERGE ID LBRACE field_list RBRACE'''
-    if len(p)==5:        
-        p[0] = GenMsgAST.MessageType(p[2],[],None)        
-    elif len(p)==6:
+
+    if len(p) == 5:
+        p[0] = GenMsgAST.MessageType(p[2], [], None)
+    elif len(p) == 6:
         p[4].reverse()
-        p[0] = GenMsgAST.MessageType(p[2],p[4],None)
-    elif len(p)==8:
-        p[0] = GenMsgAST.MessageType(p[2],[],p[5])
-    elif len(p)==9:
+        p[0] = GenMsgAST.MessageType(p[2], p[4], None)
+    elif len(p) == 8:
+        p[0] = GenMsgAST.MessageType(p[2], [], p[5])
+    elif len(p) == 9:
         p[7].reverse()
-        p[0] = GenMsgAST.MessageType(p[2],p[7],p[5])                           
         
-    p[0].linespan = (p.linespan(1)[0],p.linespan(len(p)-1)[1]) 
+        p[0] = GenMsgAST.MessageType(p[2], p[7], p[5])
+    p[0].linespan = (p.linespan(1)[0], p.linespan(len(p) - 1)[1])
+
     
 def p_native(p): 
-    'native : NATIVE ID LBRACE native_line_list RBRACE'
+    '''native : NATIVE ID LBRACE native_line_list RBRACE'''
+
     # we should reverse the language list
     # because the parse build it the other way around (recursive way)
+
     p[4].reverse()
-    p[0]=GenMsgAST.NativeType(p[2],p[4])    
-    p[0].linespan = (p.linespan(1)[0],p.linespan(5)[1])
+    p[0] = GenMsgAST.NativeType(p[2], p[4])
+    p[0].linespan = (p.linespan(1)[0], p.linespan(5)[1])
+
     
 def p_native_line_list(p):
     '''native_line_list : native_line eol_comment
                         | native_line eol_comment native_line_list'''
+
     # Create or append the list (of pair)
-    if len(p)==3:
+
+    if len(p) == 3:
         p[1].comment = p[2]
-        p[0]=[p[1]]    
+        p[0] = [p[1]]
     else:
         p[1].comment = p[2]
         p[3].append(p[1])
-        p[0]=p[3]
+        p[0] = p[3]
+
 
 def p_native_line(p):
     '''native_line : language_line
                    | representation_line'''
-    p[0]=p[1]
+
+    p[0] = p[1]
+
 
 def p_language_line(p):
     '''language_line : LANGUAGE ID LANGLINE'''
-    p[0]=GenMsgAST.NativeType.LanguageLine(p[2],p[3])
+
+    p[0] = GenMsgAST.NativeType.LanguageLine(p[2], p[3])
+
     
 def p_representation_line(p):
     '''representation_line : REPRESENTATION typeid
                         | REPRESENTATION COMBINE'''
-    p[0]=GenMsgAST.NativeType.RepresentationLine(p[2])
+
+    p[0] = GenMsgAST.NativeType.RepresentationLine(p[2])
+
         
 def p_enum(p):
-    'enum : ENUM ID LBRACE enum_value_list RBRACE'
+    '''enum : ENUM ID LBRACE enum_value_list RBRACE'''
+
     # we should reverse the enum value list
     # because the parse build it the other way around (recursive way)
+
     p[4].reverse()
-    p[0] = GenMsgAST.EnumType(p[2],p[4])
-    p[0].linespan = (p.linespan(1)[0],p.linespan(5)[1])
+    p[0] = GenMsgAST.EnumType(p[2], p[4])
+    p[0].linespan = (p.linespan(1)[0], p.linespan(5)[1])
+
     
 def p_empty(p):
-    'empty :'
+    '''empty :'''
+
     pass
 
+
 def p_eol_comment(p):
     '''eol_comment : COMMENT 
                         | empty'''
+
     # we may store the comment text for future use
-    if len(p) > 1 and isinstance(p[1],type("")) :
-        p[0] = GenMsgAST.CommentBlock(p[1].strip('/'),isAtEOL=True)
+
+    if len(p) > 1 and isinstance(p[1], type('')):
+        p[0] = GenMsgAST.CommentBlock(p[1].strip('/'), isAtEOL=True)
         p[0].linespan = p.linespan(1)        
     else:
-        p[0] = ""         
+        p[0] = ''
+
     
 def p_enum_value_list(p):
     '''enum_value_list : enum_val eol_comment  
                        | enum_val COMMA eol_comment
                        | enum_val COMMA eol_comment enum_value_list'''
+
     # Create or append the list (of pair)
-    if len(p)==3:
+
+    if len(p) == 3:
         p[1].comment = p[2]
-        p[0]=[p[1]]
-    elif len(p)==4:
+        p[0] = [p[1]]
+    elif len(p) == 4:
         p[1].comment = p[3]
-        p[0]=[p[1]]              
+        p[0] = [p[1]]
     else:
         p[1].comment = p[3]
         p[4].append(p[1])
-        p[0]=p[4]        
+        p[0] = p[4]
+
     
 def p_enum_val(p):
     '''enum_val : ID 
                 | ID EQUAL INTEGER_VALUE'''
+
     # Build a pair (ID,value)
     # value may be None    
-    if len(p)>3:
-        p[0] = GenMsgAST.EnumType.EnumValue(p[1],p[3])
-        p[0].linespan = (p.linespan(1)[0],p.linespan(3)[1])
+
+    if len(p) > 3:
+        p[0] = GenMsgAST.EnumType.EnumValue(p[1], p[3])
+        p[0].linespan = (p.linespan(1)[0], p.linespan(3)[1])
     else:
-        p[0] = GenMsgAST.EnumType.EnumValue(p[1],None)
+        p[0] = GenMsgAST.EnumType.EnumValue(p[1], None)
         p[0].linespan = p.linespan(1)     
 
+
 def p_field_list(p):
     '''field_list : field_spec eol_comment
                   | field_spec eol_comment field_list'''
-    if len(p)==3:
+
+    if len(p) == 3:
         p[0] = [p[1]]
     else:        
         p[0] = p[3]
         p[0].append(p[1])    
 
+
 def p_field_spec(p):
     '''field_spec : qualifier typeid ID eol_comment
                   | qualifier typeid ID LBRACE DEFAULT EQUAL value RBRACE 
eol_comment
                   | COMBINE typeid LBRACE field_list RBRACE eol_comment'''
     
-    if len(p)==5:
-        p[0] = GenMsgAST.MessageType.MessageField(p[1],p[2],p[3],None)
+    if len(p) == 5:
+        p[0] = GenMsgAST.MessageType.MessageField(p[1], p[2], p[3],
+                None)
         p[0].comment = p[4]
-        p[0].linespan = (p.linespan(1)[0],p.linespan(4)[1])    
-    elif len(p)==7:
+        p[0].linespan = (p.linespan(1)[0], p.linespan(4)[1])
+    elif len(p) == 7:
         p[4].reverse()
-        p[0] = GenMsgAST.MessageType.CombinedField(p[2],p[4])
+        p[0] = GenMsgAST.MessageType.CombinedField(p[2], p[4])
         p[0].comment = p[5]
-        p[0].linespan = (p.linespan(1)[0],p.linespan(4)[1])
+        p[0].linespan = (p.linespan(1)[0], p.linespan(4)[1])
     else:                
-        p[0] = GenMsgAST.MessageType.MessageField(p[1],p[2],p[3],p[7])
+        p[0] = GenMsgAST.MessageType.MessageField(p[1], p[2], p[3],
+                p[7])
         p[0].comment = p[9]   
-        p[0].linespan = (p.linespan(1)[0],p.linespan(8)[1])
+        p[0].linespan = (p.linespan(1)[0], p.linespan(8)[1])
+
 
 def p_qualifier(p):
     '''qualifier : REQUIRED
                  | REPEATED
                  | OPTIONAL'''
+
     p[0] = p[1]
     
+
 def p_typeid(p):
     '''typeid : ONOFF_T
               | BOOL_T
@@ -484,88 +606,105 @@
               | FLOAT_T
               | DOUBLE_T
               | defined_type'''
+
     p[0] = p[1]    
     
+
 def p_defined_type(p):
     '''defined_type : ID'''
+
     # A defined type is either a Message or Native or Enum Type.
     # This kind of type should be checked
     # **after* the AST has been built entirely.
     # We cannot check it now because of the recursive nature of the parser.
-    p[0]=p[1]
+
+    p[0] = p[1]
+
     
 def p_value(p):
     '''value : INTEGER_VALUE 
              | FLOAT_VALUE 
              | BOOL_VALUE
              | STRING_VALUE'''    
-    p[0]=p[1]
     
-def find_column(input,token):
+    p[0] = p[1]
+
+
+def find_column(input, token):
     '''input is the input text string
     token is a token instance'''
-    last_cr = input.rfind('\n',0,token.lexpos)
+
+    last_cr = input.rfind('\n', 0, token.lexpos)
     if last_cr < 0:
         last_cr = 0
-    column = (token.lexpos - last_cr) + 1
+    column = token.lexpos - last_cr + 1
     return column
     
+
 def p_error(p):             
     if lexer in dir(p):
-        msg = "Syntax error at '%s' on line %d column %d (token type is '%s')" 
% (p.value,p.lineno,find_column(p.lexer.lexdata, p),p.type)
+        msg = \
+            "Syntax error at '%s' on line %d column %d (token type is '%s')" \
+            % (p.value, p.lineno, find_column(p.lexer.lexdata, p),
+               p.type)
     else:
-        msg = "Syntax error at '%s' on line %d (token type is '%s')" % 
(p.value,p.lineno,p.type)
+        msg = "Syntax error at '%s' on line %d (token type is '%s')" \
+            % (p.value, p.lineno, p.type)
     parserlogger.fatal(msg)
                                                                                
  
+
 # Build the PLY parser
-parserlogger = logging.Logger("MessageParser")
+
+parserlogger = logging.Logger('MessageParser')
 parserlogger.setLevel(logging.ERROR)
 parserlogger.addHandler(stdoutHandler)
 parser = ply.yacc.yacc(debug=True)
 parser.logger = parserlogger 
 
 if inputFile != None:    
-    mainlogger.info("Parsing message file specifications...")
+    mainlogger.info('Parsing message file specifications...')
     try:    
-        msgFile =  open(inputFile,'r')
+        msgFile = open(inputFile, 'r')
     except IOError, e:        
-        mainlogger.error("IOError raised: <"+str(e)+">")
-        mainlogger.error("May be input file <%s> is unreadable or mispelled?" 
% inputFile)
+        mainlogger.error('IOError raised: <' + str(e) + '>')
+        mainlogger.error('May be input file <%s> is unreadable or mispelled?'
+                          % inputFile)
         sys.exit()
 else:
-    mainlogger.error("No input file given!!")
+    mainlogger.error('No input file given!!')
     sys.exit()
     
 lexer.lineno = 1
 parser.AST = GenMsgAST.MessageAST(inputFile)
-parser.parse(msgFile.read(),lexer=lexer,tracking=True)
+parser.parse(msgFile.read(), lexer=lexer, tracking=True)
 parser.AST.messages.reverse()
 parser.AST.enums.reverse()
 parser.AST.natives.reverse()
 msgFile.close()
-mainlogger.info("Parse succeeded %s" % (parser.AST))
+mainlogger.info('Parse succeeded %s' % parser.AST)
 
-mainlogger.info("Checking AST properties....")
+mainlogger.info('Checking AST properties....')
 checker = GenMsgAST.ASTChecker()
 checker.check(parser.AST)
 if parser.AST.checked:    
-    mainlogger.info("AST properties checked Ok.")
+    mainlogger.info('AST properties checked Ok.')
 else:
-    mainlogger.error("AST has error, generation step may produce invalid 
files!!!")
+    mainlogger.error('AST has error, generation step may produce invalid 
files!!!'
+                     )
     sys.exit()
 
-mainlogger.info("Generate %s from AST,..."%language)
+mainlogger.info('Generate %s from AST,...' % language)
 generator = None
 if language.lower() in generatorBackends.keys():
     generator = generatorBackends[language.lower()](parser.AST)
-elif language.lower()=="none":
-    mainlogger.info("Nothing to generate for <%s>." % language)
+elif language.lower() == 'none':
+    mainlogger.info('Nothing to generate for <%s>.' % language)
     usage()
 else:     
-    mainlogger.error("Language <%s> is unknown" % language)
+    mainlogger.error('Language <%s> is unknown' % language)
     usage()
     
 if generator != None:
-    generator.generate(output,gentype,factoryOnly) 
-mainlogger.info("Generate %s from AST, Done." % language)
+    generator.generate(output, gentype, factoryOnly)
+mainlogger.info('Generate %s from AST, Done.' % language)
 msgFile.close()

Index: GenMsgPython.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgPython.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- GenMsgPython.py     6 Mar 2010 12:55:10 -0000       1.2
+++ GenMsgPython.py     11 Jun 2010 12:43:12 -0000      1.3
@@ -1,3 +1,5 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
 ## ----------------------------------------------------------------------------
 ## CERTI - HLA RunTime Infrastructure
 ## Copyright (C) 2002-2005  ONERA
@@ -17,27 +19,31 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgPython.py,v 1.2 2010/03/06 12:55:10 erk Exp $
+## $Id: GenMsgPython.py,v 1.3 2010/06/11 12:43:12 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
 The CERTI Message Generator.
 Python Backend Generator
 """
+
 import logging
 import GenMsgBase       
                            
+
 class PythonGenerator(GenMsgBase.CodeGenerator):
+
     """
     This is a Python generator for C{MessageAST}.
     """
     
     def generatorName(cls):
-        return "Python"    
+        return 'Python'
+
     generatorName = classmethod(generatorName)
     
+    def __init__(self, MessageAST):
+        super(PythonGenerator, self).__init__(MessageAST, '##')
     
-    def __init__(self,MessageAST):
-        super(PythonGenerator,self).__init__(MessageAST,"##")
-        # Message builtin type to Python type
         
\ No newline at end of file
+        # Message builtin type to Python type

Index: GenMsgAST.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgAST.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- GenMsgAST.py        11 Jun 2010 07:47:33 -0000      1.12
+++ GenMsgAST.py        11 Jun 2010 12:43:12 -0000      1.13
@@ -1,4 +1,6 @@
+#!/usr/bin/python
 # -*- coding: utf-8 -*-
+
 ## ----------------------------------------------------------------------------
 ## CERTI - HLA RunTime Infrastructure
 ## Copyright (C) 2002-2005  ONERA
@@ -18,7 +20,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgAST.py,v 1.12 2010/06/11 07:47:33 erk Exp $
+## $Id: GenMsgAST.py,v 1.13 2010/06/11 12:43:12 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -27,13 +29,18 @@
 """
 
 import os
-import getopt, sys
+import getopt
+import sys
 import datetime
 import logging
+
 # Build some logger related objects
+
 stdoutHandler = logging.StreamHandler(sys.stdout)
                                       
+
 class ASTElement(object):
+
     """
     The base class for all Abstract Syntax Tree element.
 
@@ -44,43 +51,61 @@
     @type comment: C{CommentBlock}   
     """
     
-    def __init__(self,name):        
+    def __init__(self, name):
         self.__name     = name
         self.__comment  = None
         self.__linespan = None
-        self.logger = logging.Logger("ASTElement")
+        self.logger = logging.Logger('ASTElement')
         self.logger.setLevel(logging.ERROR)
         self.logger.addHandler(stdoutHandler)
     
     def __getName(self):
         return self.__name    
-    def __setName(self,name):        
+
+    def __setName(self, name):
         self.__name = name
+
     # pythonic getter/setter using properties    
-    name = property(fget=__getName,fset=__setName,fdel=None, doc="The name of 
the C{ASTElement}")    
+
+    name = property(fget=__getName, fset=__setName, fdel=None,
+                    doc='The name of the C{ASTElement}')
     
     def hasComment(self):
-        return self.__comment!=None
+        return self.__comment != None
     
     def __getComment(self):
         return self.__comment    
-    def __setComment(self,comment):
-        if isinstance(comment,type("")):
+
+    def __setComment(self, comment):
+        if isinstance(comment, type('')):
             pass
         else:
-            self.logger.info("Adding comment %s to element %s" % 
(comment.lines,self.name))
+            self.logger.info('Adding comment %s to element %s'
+                             % (comment.lines, self.name))
             self.__comment = comment
+
     # pythonic getter/setter using properties    
-    comment = property(fget=__getComment,fset=__setComment,fdel=None, doc="The 
comment block attached to the C{ASTElement}")
+
+    comment = property(fget=__getComment, fset=__setComment, fdel=None,
+                       doc='The comment block attached to the C{ASTElement}'
+                       )
     
     def __getLinespan(self):
         return self.__linespan    
-    def __setLinespan(self,linespan):        
+
+    def __setLinespan(self, linespan):
         self.__linespan = linespan
+
     # pythonic getter/setter using properties    
-    linespan = property(fget=__getLinespan,fset=__setLinespan,fdel=None, 
doc="The line span of this C{ASTElement} in the original file")    
+
+    linespan = property(fget=__getLinespan, fset=__setLinespan,
+                        fdel=None,
+                        doc='The line span of this C{ASTElement} in the 
original file'
+                        )
+
     
 class MessageAST(ASTElement):
+
     """
     Message Abstract Syntax Tree root class.
     
@@ -99,108 +124,140 @@
     @type messages: C{set} of C{MessageType}          
     
     """
-    def __init__(self,name):
-        super(MessageAST,self).__init__(name=os.path.basename(name))
+
+    def __init__(self, name):
+        super(MessageAST, self).__init__(name=os.path.basename(name))
         self.__package            = None
         self.__version            = None
         self.__factory            = None
         self.__nativeTypes        = []
         self.__messageTypes       = []
         self.__enumTypes          = []
+
         # The types dictionary is initialized with builtin types
-        self.__types                = {'onoff' : ASTElement("onoff"),
-                                       'bool' : ASTElement("bool"),
-                                       'string' : ASTElement("string"),
-                                       'byte' : ASTElement("byte"),
-                                       'int8' : ASTElement("int8"),
-                                       'uint8' : ASTElement("uint8"),
-                                       'int16' : ASTElement("int16"),
-                                       'uint16' : ASTElement("uint16"),
-                                       'int32' : ASTElement("int32"),
-                                       'uint32' : ASTElement("uint32"),   
-                                       'int64' : ASTElement("int64"),
-                                       'uint64' : ASTElement("uint64"),
-                                       'float' : ASTElement("float"),
-                                       'double' : ASTElement("double")}
+
+        self.__types = {
+            'onoff': ASTElement('onoff'),
+            'bool': ASTElement('bool'),
+            'string': ASTElement('string'),
+            'byte': ASTElement('byte'),
+            'int8': ASTElement('int8'),
+            'uint8': ASTElement('uint8'),
+            'int16': ASTElement('int16'),
+            'uint16': ASTElement('uint16'),
+            'int32': ASTElement('int32'),
+            'uint32': ASTElement('uint32'),
+            'int64': ASTElement('int64'),
+            'uint64': ASTElement('uint64'),
+            'float': ASTElement('float'),
+            'double': ASTElement('double'),
+            }
         self.__ultimateElement      = None                
-        self.logger = logging.Logger("MessageAST")
+        self.logger = logging.Logger('MessageAST')
         self.logger.setLevel(logging.ERROR)
         self.logger.addHandler(stdoutHandler)
         
     def hasPackage(self):
         return self.__package != None
+
     def __getPackage(self):
         return self.__package
-    def __setPackage(self,package):
+
+    def __setPackage(self, package):
         self.__package = package
+
     # pythonic getter/setter using properties   
-    package = property(fget=__getPackage,fset=__setPackage,fdel=None,doc=None)
+
+    package = property(fget=__getPackage, fset=__setPackage, fdel=None,
+                       doc=None)
 
     def hasVersion(self):
         return self.__version != None
+
     def __getVersion(self):
         return self.__version
-    def __setVersion(self,version):
+
+    def __setVersion(self, version):
         self.__version = version
+
     # pythonic getter/setter using properties   
-    version = property(fget=__getVersion,fset=__setVersion,fdel=None,doc=None)
+
+    version = property(fget=__getVersion, fset=__setVersion, fdel=None,
+                       doc=None)
 
     def hasFactory(self):
         return self.__factory != None
+
     def __getFactory(self):
         return self.__factory
-    def __setFactory(self,factory):
+
+    def __setFactory(self, factory):
         self.__factory = factory
+
     # pythonic getter/setter using properties   
-    factory = property(fget=__getFactory,fset=__setFactory,fdel=None,doc=None)
+
+    factory = property(fget=__getFactory, fset=__setFactory, fdel=None,
+                       doc=None)
         
     def __getNativeTypes(self):
         return self.__nativeTypes  
+
     # pythonic getter/setter using properties   
-    natives = property(fget=__getNativeTypes,fset=None,fdel=None,doc=None)
+
+    natives = property(fget=__getNativeTypes, fset=None, fdel=None,
+                       doc=None)
     
     def __getMessageTypes(self):
         return self.__messageTypes  
+
     # pythonic getter/setter using properties      
-    messages = property(fget=__getMessageTypes,fset=None,fdel=None,doc=None)
+
+    messages = property(fget=__getMessageTypes, fset=None, fdel=None,
+                        doc=None)
     
     def __getEnumTypes(self):                  
         return self.__enumTypes
+
     # pythonic getter/setter using properties   
-    enums = property(fget=__getEnumTypes,fset=None,fdel=None,doc=None)
     
-    def getRootMergeType(self,msg,verbose=0):
-       """ 
-       Return the root merge type of a message.
+    enums = property(fget=__getEnumTypes, fset=None, fdel=None,
+                     doc=None)
        
-       The idea is to find the root of the merge chain of
-       the provided message. 
-       @param msg: the message for which we want to know the root merge type
-       @type any: more precisely either C{NativeType} or C{MessageType} however
-                  only C{MessageType} may lead to a real search of the root.
-       @return: the C{MessageType} root merge type or msg if msg wasn't an 
instance of C{MessageType}
+    def getRootMergeType(self, msg, verbose=0):
        """
+    ....Return the root merge type of a message.
+    ....
+    ....The idea is to find the root of the merge chain of
+    ....the provided message. 
+    address@hidden msg: the message for which we want to know the root merge 
type
+    address@hidden any: more precisely either C{NativeType} or C{MessageType} 
however
+    ....           only C{MessageType} may lead to a real search of the root.
+    address@hidden: the C{MessageType} root merge type or msg if msg wasn't an 
instance of C{MessageType}
+    ...."""
+
        retval = None
-       # msg may be a simple string not a type         
-       if (isinstance(msg,type(""))):
+
+        # msg may be a simple string not a type    ....
+
+        if isinstance(msg, type('')):
                current = self.getType(msg)
        else:
                current = msg
                
-       while retval==None:
-               if (verbose):
-                       print "current = %s, retval = %s" % (current,retval)
-                       print "type(current)=", type(current)                   
            
-               if isinstance(current,MessageType):
+        while retval == None:
+            if verbose:
+                print 'current = %s, retval = %s' % (current, retval)
+                print 'type(current)=', type(current)
+            if isinstance(current, MessageType):
                        if current.hasMerge():
-                         current=self.getType(current.merge)
+                    current = self.getType(current.merge)
                        else: 
                          retval = current
                else:
                        retval = current   
         return retval
         
-    def add(self,any):
+    def add(self, any):
         """ 
         Add an ASTElement to the AST.
         
@@ -211,81 +268,98 @@
         @type any: some sub-class of C{ASTElement}, see: G{ASTElement}
           
         """
+
         if any == None:
-            self.logger.error("<None> given to AST some rule aren't finished") 
   
+            self.logger.error("<None> given to AST some rule aren't finished"
+                              )
         else:                     
-            self.logger.debug("Add %s %s" % (type(any).__name__,any.name))
+            self.logger.debug('Add %s %s' % (type(any).__name__,
+                              any.name))
+
             # Typename must be unique
+
             if self.isDefined(any.name):                
-                self.logger.error("%s already defined in the AST" % any.name)
-                self.logger.error(" --> Check lines (%d,%d) " % any.linespan + 
"and (%d,%d)" % self.getType(any.name).linespan+ " of <%s>" % self.name)        
                  
-            elif isinstance(any,EnumType):            
+                self.logger.error('%s already defined in the AST'
+                                  % any.name)
+                self.logger.error(' --> Check lines (%d,%d) '
+                                  % any.linespan + 'and (%d,%d)'
+                                  % self.getType(any.name).linespan
+                                  + ' of <%s>' % self.name)
+            elif isinstance(any, EnumType):
                 self.addEnumType(any)                            
-            elif isinstance(any,NativeType):
+            elif isinstance(any, NativeType):
                 self.addNativeType(any)
-            elif isinstance(any,MessageType):
+            elif isinstance(any, MessageType):
                 self.addMessageType(any)
-            elif isinstance(any,Package):
+            elif isinstance(any, Package):
                 self.package = any
-            elif isinstance(any,Version):
+            elif isinstance(any, Version):
                 self.version = any
-            elif isinstance(any,Factory):
+            elif isinstance(any, Factory):
                 self.factory = any
+            elif isinstance(any, CommentBlock):
+
             # Handle comment block preceding other AST element
-            elif isinstance(any,CommentBlock):                
+
                 if self.__ultimateElement != None:
+
                     # attach the comment block to the preceding
                     # AST element (recursion is backtracking)
                     # The list of comment line should be reversed
+
                     any.lines.reverse()
                     self.__ultimateElement.comment = any
                 else:
                     pass               
             else:            
-                self.logger.error("<%s> not handle [yet]" % any)               
    
+                self.logger.error('<%s> not handle [yet]' % any)
             self.__ultimateElement    = any            
             
-    def addMessageType(self,message): 
+    def addMessageType(self, message):
         """
         Add a message type to the AST.
         
         @param message: The message type to be added
         @type message: C{MessageType}  
         """       
+
         self.__messageTypes.append(message)
         self.__types[message.name] = message
         
-    def addEnumType(self,enumType):
+    def addEnumType(self, enumType):
         """
         Add an enum type to the AST.
         
         @param enumType: The enum type to be added
         @type enumType: C{EnumType}  
         """        
+
         self.__enumTypes.append(enumType)
         self.__types[enumType.name] = enumType               
     
-    def addNativeType(self,native):
+    def addNativeType(self, native):
         """
         Add a native type to the AST.
         
         @param native: The message type to be added
         @type native: C{NativeType}  
         """
+
         self.__nativeTypes.append(native)
         self.__types[native.name] = native
         
-    def isDefined(self,typename):
+    def isDefined(self, typename):
         """
         Return true if the typename is know in this AST.
         
         @param typename: the name of the type
         @type typename: C{string}  
         """
-        return self.getType(typename)!=None        
     
-    def getType(self,typename):
-        if isinstance(typename,type("")):
+        return self.getType(typename) != None
+
+    def getType(self, typename):
+        if isinstance(typename, type('')):
             if typename in self.__types.keys():
                 return self.__types[typename]
             else:
@@ -294,14 +368,18 @@
             return typename        
     
     def __repr__(self):
-        res = "AST with <%d> native type(s), <%d> enum, <%d> message type(s)" 
% (len(self.natives),len(self.enums),len(self.messages))
-        if (self.hasFactory()):
-            res = res + " and factory <%s> "% self.factory.name
-        if (self.hasPackage()):
-            res = res + " in package <%s>" % self.package
+        res = \
+            'AST with <%d> native type(s), <%d> enum, <%d> message type(s)' \
+            % (len(self.natives), len(self.enums), len(self.messages))
+        if self.hasFactory():
+            res = res + ' and factory <%s> ' % self.factory.name
+        if self.hasPackage():
+            res = res + ' in package <%s>' % self.package
         return res    
     
+
 class CommentBlock(ASTElement):
+
     """
     Represents a block of comment
     
@@ -310,20 +388,26 @@
     @type lines: C{list} of C{string}  
     """
     
-    def __init__(self,content,isAtEOL):
+    def __init__(self, content, isAtEOL):
         """
         C{CommentBlock} constructor
         """
-        super(CommentBlock,self).__init__(name="ANY Comment Block")
-        self.lines=[content]
-        self.__isAtEOL=isAtEOL
+
+        super(CommentBlock, self).__init__(name='ANY Comment Block')
+        self.lines = [content]
+        self.__isAtEOL = isAtEOL
         
     def __getisAtEOL(self):
         return self.__isAtEOL
+
     # pythonic getter/setter using properties   
-    isAtEOL = property(fget=__getisAtEOL,fset=None,fdel=None,doc="True if the 
comment is optional")   
+
+    isAtEOL = property(fget=__getisAtEOL, fset=None, fdel=None,
+                       doc='True if the comment is optional')
+
     
 class Package(ASTElement):
+
     """
     Represents a package.
     
@@ -331,35 +415,47 @@
     name is a C{string} containing a
     dot-separated IDs like: "fr.onera.certi"
     """
-    def __init__(self,name):        
-        super(Package,self).__init__(name)                        
+
+    def __init__(self, name):
+        super(Package, self).__init__(name)
           
     def __repr__(self):
-        return "package %s" % self.name
+        return 'package %s' % self.name
+
 
 class Version(ASTElement):
+
     """
     Represents a version number.
     
     A C{Version} is a simple C{ASTElement} whose
     name is a C{string}.
     """
-    def __init__(self,number):
-        super(Version,self).__init__(name="Version")
+
+    def __init__(self, number):
+        super(Version, self).__init__(name='Version')
         self.number = number
           
     def __repr__(self):
-        return "version %d.%d" % self.number
+        return 'version %d.%d' % self.number
+
 
 class Factory(ASTElement):
+
     """
     Represents a factory.
     
     A C{Factory} is anC{ASTElement} whose
     name is a C{string}.
     """
-    def __init__(self,name,creator,receiver=None):        
-        super(Factory,self).__init__(name)
+
+    def __init__(
+        self,
+        name,
+        creator,
+        receiver=None,
+        ):
+        super(Factory, self).__init__(name)
         self.creator  = creator
         self.receiver = receiver
        
@@ -370,12 +466,14 @@
        return self.receiver != None
           
     def __repr__(self):
-        res="factory %s" % self.name
-        res=res+ ", creator = %s %s(%s)" % creator
-        res=res+ ", receiver = %s %s(%s)" % receiver
+        res = 'factory %s' % self.name
+        res = res + ', creator = %s %s(%s)' % creator
+        res = res + ', receiver = %s %s(%s)' % receiver
         return res    
      
+
 class NativeType(ASTElement):
+
     """ 
     Represents a native message type.
     
@@ -383,14 +481,16 @@
     name is the name the native type.
     """
     
-    def __init__(self,name,lines):
-        super(NativeType,self).__init__(name=name)
+    def __init__(self, name, lines):
+        super(NativeType, self).__init__(name=name)
+
         # store language line list in a dictionary
         # in order to ease retrieval
+
         self.languages = dict()
         self.representation = None
         for l in lines:
-            if isinstance(l,NativeType.LanguageLine):
+            if isinstance(l, NativeType.LanguageLine):
                 if l.name in self.languages.keys():
                     self.languages[l.name].append(l)
                 else:
@@ -401,12 +501,12 @@
         self.nbHeir    = 0
         
     def __repr__(self):
-        return "native %s" % self.name
+        return 'native %s' % self.name
     
-    def hasLanguage(self,language):
-        return (language in self.languages.keys())
+    def hasLanguage(self, language):
+        return language in self.languages.keys()
     
-    def getLanguageLines(self,language):
+    def getLanguageLines(self, language):
         if language in self.languages.keys():
             return self.languages[language]
         
@@ -419,21 +519,30 @@
        def hasHeir(self):
                return self.nbHeir > 0
      
+
     class LanguageLine(ASTElement):
+
         """ Represents a Language Line Value
         """
-        def __init__(self,name,value):
-            super(NativeType.LanguageLine,self).__init__(name=name)    
-            self.statement = value.strip("[]")                
+
+        def __init__(self, name, value):
+            super(NativeType.LanguageLine, self).__init__(name=name)
+            self.statement = value.strip('[]')
+
 
     class RepresentationLine(ASTElement):
+
         """ Represents a Representation Line Value
         """
-        def __init__(self,value):
-            
super(NativeType.RepresentationLine,self).__init__(name='representation')
+
+        def __init__(self, value):
+            super(NativeType.RepresentationLine,
+                  self).__init__(name='representation')
             self.representation = value
                     
+
 class MessageType(ASTElement):
+
     """ 
     Represents a message type.
     
@@ -443,15 +552,21 @@
     @type merge: a C{MessageType}  
     @param combine: a combined set of fields
     """
-    def __init__(self,name,fields,merge):
-        super(MessageType,self).__init__(name=name)
+
+    def __init__(
+        self,
+        name,
+        fields,
+        merge,
+        ):
+        super(MessageType, self).__init__(name=name)
         self.fields        = fields
         self.merge         = merge
         self.enum          = None
         self.nbHeir        = 0
     
     def __repr__(self):
-        res = "message %s " % self.name
+        res = 'message %s ' % self.name
         return res
     
     def hasMerge(self):
@@ -463,44 +578,52 @@
     def hasHeir(self):
        return self.nbHeir > 0
     
+
     class CombinedField(ASTElement):
-        def __init__(self,typeid,fields):
-            super(MessageType.CombinedField,self).__init__(name="Combined")
+
+        def __init__(self, typeid, fields):
+            super(MessageType.CombinedField,
+                  self).__init__(name='Combined')
             self.typeid = typeid
             self.fields = fields            
     
+
     class MessageField(ASTElement):
+
         """ Represents a message field            
         """
-        def __init__(self,qualifier,typeid,name,defaultValue=None):
-            super(MessageType.MessageField,self).__init__(name=name)
+
+        def __init__(
+            self,
+            qualifier,
+            typeid,
+            name,
+            defaultValue=None,
+            ):
+            super(MessageType.MessageField, self).__init__(name=name)
             self.qualifier    = qualifier
-            """ The field qualifier, which may be
-                 - repeated
-                 - optional
-                 - required 
-            """
             self.typeid       = typeid
-            """ The type of the field
-            """
             self.defaultValue = defaultValue
-            """ The default value for this field
-            """
             
         def hasDefaultValue(self):
             return self.defaultValue != None
                 
+
 class EnumType(ASTElement):
+
     """ Represents an enum type 
     """
-    def __init__(self,name,values):
-        super(EnumType,self).__init__(name=name)
+
+    def __init__(self, name, values):
+        super(EnumType, self).__init__(name=name)
+
         # rebuild dictionary with value from the list                     
+
         self.values = []
         lastval     = -1        
         for val in values:                                    
-            if (val.value==None):
-                val.value = lastval+1
+            if val.value == None:
+                val.value = lastval + 1
                 self.values.append(val)
                 lastval += 1
             else:
@@ -508,48 +631,57 @@
                 lastval = val.value
         
     def __repr__(self):
-        res = "Enum %s {\n" % self.name
+        res = 'Enum %s {\n' % self.name
         for val in self.values:            
-            res = res + "  " + str(val[0]) + " = " + str(val[1]) + ", \n"
-        res = res + "}"
+            res = res + '  ' + str(val[0]) + ' = ' + str(val[1]) \
+                + ', \n'
+        res = res + '}'
         return res                 
                
+
     class EnumValue(ASTElement):
+
         """ Represents an Enum Value
         """
-        def __init__(self,name,value):
-            super(EnumType.EnumValue,self).__init__(name=name)    
+
+        def __init__(self, name, value):
+            super(EnumType.EnumValue, self).__init__(name=name)
             self.value = value
                 
+
 class ASTChecker(object):
+
     """
     The Purpose of this class is to check AST properties. 
         
     """
+
     def __init__(self):
-        self.logger = logging.Logger("ASTChecker")
+        self.logger = logging.Logger('ASTChecker')
         self.logger.setLevel(logging.ERROR)
         self.logger.addHandler(stdoutHandler)      
     
-    def checkMessageFields(self,msg,AST):  
+    def checkMessageFields(self, msg, AST):
         for f in msg.fields:
             if not AST.isDefined(f.typeid):
-                self.logger.fatal("The type <%s> used for field <%s.%s> is 
unknown (not a builtin, nor native, nor message)" % (f.typeid,msg.name,f.name))
-                self.logger.fatal(" --> Check lines (%d,%d)" % (f.linespan) + 
" of <%s>" % AST.name)                
+                self.logger.fatal('The type <%s> used for field <%s.%s> is 
unknown (not a builtin, nor native, nor message)'
+                                   % (f.typeid, msg.name, f.name))
+                self.logger.fatal(' --> Check lines (%d,%d)'
+                                  % f.linespan + ' of <%s>' % AST.name)
                 return False
             else:
-                if (isinstance(f,MessageType.MessageField)):                   
+                if isinstance(f, MessageType.MessageField):
                     f.typeid = AST.getType(f.typeid)
-                elif (isinstance(f,MessageType.CombinedField)):
-                    if (not self.checkMessageFields(f,AST)):
+                elif isinstance(f, MessageType.CombinedField):
+                    if not self.checkMessageFields(f, AST):
                        return False
                 else:
-                    self.logger.fatal("Unknown MessageField type %s" % f.str())
+                    self.logger.fatal('Unknown MessageField type %s'
+                            % f.str())
                    return False
         return True
    
-                
-    def check(self,AST):
+    def check(self, AST):
         """
         Check the AST.
         
@@ -558,6 +690,7 @@
         """
         
         # Consider the AST not checked.
+
         AST.checked = False
         
         # check if the supplied object has appropriate super type
@@ -565,56 +698,60 @@
         #        fields and not being sub-class of MesssageAST.
         #        this could be done with introspection.
         #        see: http://docs.python.org/library/inspect.html
+
         if not isinstance(AST, MessageAST):
-           self.logger.error("The supplied object is not an instance of 
MessageAST: <%s>" % type(AST))        
+            self.logger.error('The supplied object is not an instance of 
MessageAST: <%s>'
+                               % type(AST))
            return
        
         # check if all field used in message have known types
         # At the same time build the enum values for MessageTypes
-        enumval = EnumType.EnumValue("NOT_USED",None)
+
+        enumval = EnumType.EnumValue('NOT_USED', None)
         enumval.type = None
         msgTypeEnumVals = [enumval]
         lastMerge = None
         for msg in AST.messages:
+
             # We do not generate the enum factory entry for a message
             # with no merge there is no possible factory for that
             # kind of message.
             # However some message types may merge from one another
             # as soon as there is a "common" root merge type 
+
             if msg.hasMerge():
                parent = AST.getType(msg.merge)
                parent.nbHeir += 1         
-               if (None!=lastMerge):
+                if None != lastMerge:
+
                           # recurse to find root merge
+
                           rootMerge = AST.getRootMergeType(msg.merge)          
                                   
-                   if (lastMerge!=rootMerge):
-                                         blah = 
AST.getRootMergeType(msg.merge,1)
-                                         self.logger.error("Error: there is 
more than one merged type (%s != %s (root of %s)). You should use one merged 
type only" % (lastMerge,rootMerge,msg.merge))
-                                         self.logger.fatal(" --> Check lines 
(%d,%d)" % (msg.linespan) + " of <%s>" % AST.name )
+                    if lastMerge != rootMerge:
+                        blah = AST.getRootMergeType(msg.merge, 1)
+                        self.logger.error('Error: there is more than one 
merged type (%s != %s (root of %s)). You should use one merged type only'
+                                 % (lastMerge, rootMerge, msg.merge))
+                        self.logger.fatal(' --> Check lines (%d,%d)'
+                                % msg.linespan + ' of <%s>' % AST.name)
                                          return           
                else:
                    lastMerge = AST.getRootMergeType(msg.merge)
                                
-               enumval      = EnumType.EnumValue(msg.name.upper(),None)        
    
+                enumval = EnumType.EnumValue(msg.name.upper(), None)
                enumval.type = msg.name
                msgTypeEnumVals.append(enumval)         
-            if not self.checkMessageFields(msg,AST):
+            if not self.checkMessageFields(msg, AST):
                return 
        
-       
-       
-        enumval      = EnumType.EnumValue("LAST",None)
+        enumval = EnumType.EnumValue('LAST', None)
         enumval.type = None                                    
         msgTypeEnumVals.append(enumval)
-        AST.eMessageType = EnumType("MessageType",msgTypeEnumVals)
+        AST.eMessageType = EnumType('MessageType', msgTypeEnumVals)
        if lastMerge != None:
-            mergeClass=AST.getType(lastMerge)
-           if isinstance(mergeClass,MessageType):
+            mergeClass = AST.getType(lastMerge)
+            if isinstance(mergeClass, MessageType):
                 mergeClass.enum = AST.eMessageType
        
-        
-         
-
         # @todo
         # Should check if the default value of a field
         # has the appropriate type (builtin types)
@@ -623,36 +760,55 @@
                                 
         # check if merger are either native or message
         # @todo should check that merger is not an enum
+
         for msg in AST.messages:
             if msg.hasMerge():
                 if not AST.isDefined(msg.merge):
-                    self.logger.fatal("The merge target <%s> of message <%s> 
is unknown (not a builtin, nor native, nor message)" % (msg.merge,msg.name))
-                    self.logger.fatal(" --> Check lines (%d,%d)" % 
(msg.linespan) + " of <%s>" % AST.name )                           
+                    self.logger.fatal('The merge target <%s> of message <%s> 
is unknown (not a builtin, nor native, nor message)'
+                             % (msg.merge, msg.name))
+                    self.logger.fatal(' --> Check lines (%d,%d)'
+                            % msg.linespan + ' of <%s>' % AST.name)
                     return
                 else:
                     msg.merge = AST.getType(msg.merge)
                     
         # check the factory methods
+
         if AST.factory.hasFactoryCreator():                        
             if not AST.isDefined(AST.factory.creator[0]):
-                self.logger.fatal("The return type <%s> of the creator factory 
method is unknown (not a builtin, nor native, nor message)" % 
AST.factory.creator[0])
-                self.logger.fatal(" --> Check lines (%d,%d)" % 
(AST.factory.linespan) + " of <%s>" % AST.name )                
+                self.logger.fatal('The return type <%s> of the creator factory 
method is unknown (not a builtin, nor native, nor message)'
+                                   % AST.factory.creator[0])
+                self.logger.fatal(' --> Check lines (%d,%d)'
+                                  % AST.factory.linespan + ' of <%s>'
+                                  % AST.name)
                 return
             if not AST.isDefined(AST.factory.creator[2]):
-                self.logger.fatal("The parameter type <%s> of the creator 
factory method is unknown (not a builtin, nor native, nor message)" % 
AST.factory.creator[2])
-                self.logger.fatal(" --> Check lines (%d,%d)" % 
(AST.factory.linespan) + " of <%s>" % AST.name )    
+                self.logger.fatal('The parameter type <%s> of the creator 
factory method is unknown (not a builtin, nor native, nor message)'
+                                   % AST.factory.creator[2])
+                self.logger.fatal(' --> Check lines (%d,%d)'
+                                  % AST.factory.linespan + ' of <%s>'
+                                  % AST.name)
                
                return
            
        if AST.factory.hasFactoryReceiver():
             if not AST.isDefined(AST.factory.receiver[0]):
-                self.logger.fatal("The return type <%s> of the receiver 
factory method is unknown (not a builtin, nor native, nor message)" % 
AST.factory.receiver[0])
-                self.logger.fatal(" --> Check lines (%d,%d)" % 
(AST.factory.linespan) + " of <%s>" % AST.name )                
+                self.logger.fatal('The return type <%s> of the receiver 
factory method is unknown (not a builtin, nor native, nor message)'
+                                   % AST.factory.receiver[0])
+                self.logger.fatal(' --> Check lines (%d,%d)'
+                                  % AST.factory.linespan + ' of <%s>'
+                                  % AST.name)
                 return
             if not AST.isDefined(AST.factory.receiver[2]):
-                self.logger.fatal("The parameter type <%s> of the receiver 
factory method is unknown (not a builtin, nor native, nor message)" % 
AST.factory.receiver[2])
-                self.logger.fatal(" --> Check lines (%d,%d)" % 
(AST.factory.linespan) + " of <%s>" % AST.name )                
+                self.logger.fatal('The parameter type <%s> of the receiver 
factory method is unknown (not a builtin, nor native, nor message)'
+                                   % AST.factory.receiver[2])
+                self.logger.fatal(' --> Check lines (%d,%d)'
+                                  % AST.factory.linespan + ' of <%s>'
+                                  % AST.name)
                 return
+
         # Now the AST has been checked successfully
+
         AST.checked = True                  
                                                                                
  
+



reply via email to

[Prev in Thread] Current Thread [Next in Thread]