certi-cvs
[Top][All Lists]
Advanced

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

[certi-cvs] certi/scripts GenerateMessages.py


From: certi-cvs
Subject: [certi-cvs] certi/scripts GenerateMessages.py
Date: Fri, 17 Jul 2009 15:31:59 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      09/07/17 15:31:58

Modified files:
        scripts        : GenerateMessages.py 

Log message:
        Begin to handle factory

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenerateMessages.py?cvsroot=certi&r1=1.11&r2=1.12

Patches:
Index: GenerateMessages.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenerateMessages.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- GenerateMessages.py 17 Jul 2009 00:22:05 -0000      1.11
+++ GenerateMessages.py 17 Jul 2009 15:31:58 -0000      1.12
@@ -19,7 +19,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenerateMessages.py,v 1.11 2009/07/17 00:22:05 erk Exp $
+## $Id: GenerateMessages.py,v 1.12 2009/07/17 15:31:58 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -49,10 +49,10 @@
 mainlogger.addHandler(stdoutHandler)
 
 def usage():
-    print "Usage:\n %s --file=<message> [--language=C++|Java|Python|Text] 
[--type=header|body|factory] [--output=<filename>] [--verbose] [--help]" % 
os.path.basename(sys.argv[0])
+    print "Usage:\n %s --input=<message> [--language=C++|Java|Python|Text] 
[--type=header|body] [--factory-only] [--output=<filename>] [--verbose] 
[--help]" % os.path.basename(sys.argv[0])
     
 try:
-    opts, args = getopt.getopt(sys.argv[1:], "f:l:t:o:vh", 
["file=","language=","type=","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))    
     usage()
@@ -64,18 +64,21 @@
     
 # default value
 verbose=False
+factoryOnly=False
 gentype="header"
 language="Text"
 output=sys.stdout
 
 # Parse command line options
 for o, a in opts:
-    if o in ("-f", "--file"):
-        messagefile=a
+    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"):
@@ -85,7 +88,7 @@
         usage()
         sys.exit(0)
 
-mainlogger.info("Reading message specifications from: <%s>" % messagefile)     
  
+mainlogger.info("Reading message specifications from: <%s>" % inputFile)       
 mainlogger.info("output send to: <%s>" % repr(output))
 mainlogger.info("Generating for language: <%s>" % language)
 
@@ -892,33 +895,27 @@
         else:            
             stream.write("\n")        
     
-    def generateHeader(self,stream):
+    def generateHeader(self,stream,factoryOnly=False):
         """
         Generate the header.
         """
         self.logger.error("generateHeader not IMPLEMENTED")
     
-    def generateBody(self,stream):
+    def generateBody(self,stream,factoryOnly=False):
         """
         Generate the body.
         """
-        self.logger.error("generateHeader not IMPLEMENTED")        
+        self.logger.error("generateBody not IMPLEMENTED")            
     
-    def generateFactory(self,stream):
-        """
-        Generate the Factory.
-        """
-        self.logger.error("generateHeader not IMPLEMENTED")
-    
-    def generate(self,stream,what):
+    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)
         elif what.lower() == "body":
             self.generateBody(stream)
-        elif what.lower() == "factory":
-            self.generateFactory(stream)
+        else:
+            self.logger.error("What <%s> unknown type??"%what)
     
 class TextGenerator(CodeGenerator):
     """
@@ -933,7 +930,7 @@
         self.logger.setLevel(logging.ERROR)
         self.logger.addHandler(stdoutHandler)            
                         
-    def generate(self,stream,what):
+    def generate(self,stream,what,factoryOnly=False):
         """
         Redefine super.generate.
         
@@ -944,7 +941,7 @@
             self.writeComment(stream, self.AST.package)
             stream.write("package %s\n\n" % self.AST.package.name)
 
-
+        if not factoryOnly:
         # Generate native type
         for native in self.AST.natives:            
             self.writeComment(stream, native)
@@ -992,8 +989,6 @@
             self.unIndent()
             stream.write("}\n\n")
 
-
-            
 class CXXGenerator(CodeGenerator):
     """
     This is a C++ generator for C{MessageAST}.
@@ -1065,7 +1060,7 @@
             stream.write(targetTypeName+" new"+self.upperFirst(field.name)+")")
             stream.write(" 
{"+field.name+"=new"+self.upperFirst(field.name)+";};\n")        
                                                     
-    def generateHeader(self,stream):
+    def generateHeader(self,stream,factoryOnly=False):
         # write the usual header protecting MACRO
         (headerProtectMacroName,ext) = os.path.splitext(self.AST.name)
         headerProtectMacroName = "%s__HH" % headerProtectMacroName.upper()
@@ -1162,7 +1157,6 @@
         if self.AST.hasFactory():
             pass
             
-            
         # may close any open namespaces 
         self.closeNamespaces(stream)
         # close usual HEADER protecting MACRO
@@ -1178,6 +1172,23 @@
         self.logger = logging.Logger("JavaGenerator")
         self.logger.setLevel(logging.ERROR)
         self.logger.addHandler(stdoutHandler)        
+        # 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',
+                               'bool'     : 'boolean',
+                               'string'   : 'java.lang.String',
+                               'byte'     : 'byte',
+                               'int8'     : 'byte',
+                               'uint8'    : 'byte',
+                               'int16'    : 'short',
+                               'uint16'   : 'short',
+                               'int32'    : 'int',
+                               'uint32'   : 'int',   
+                               'int64'    : 'long',
+                               'uint64'   : 'long',
+                               'float'    : 'float',
+                               'double'   : 'double',}      
                      
 class PythonGenerator(CodeGenerator):
     """
@@ -1188,6 +1199,7 @@
         self.logger = logging.Logger("PythonGenerator")
         self.logger.setLevel(logging.ERROR)
         self.logger.addHandler(stdoutHandler)
+        # Message builtin type to Java type
                                                 
                      
 # Build the PLY parser
@@ -1198,9 +1210,9 @@
 parser.logger = parserlogger 
     
 mainlogger.info("Parsing message file specifications...")    
-msgFile =  open(messagefile,'r')
+msgFile =  open(inputFile,'r')
 lexer.lineno = 1
-parser.AST = MessageAST(messagefile)
+parser.AST = MessageAST(inputFile)
 parser.parse(msgFile.read(),lexer=lexer)
 parser.AST.messages.reverse()
 parser.AST.enums.reverse()
@@ -1220,22 +1232,22 @@
 mainlogger.info("Generate %s from AST,..."%language)
 if language.lower()=="text":    
     textGen = TextGenerator(parser.AST)
-    textGen.generate(output,gentype)    
+    textGen.generate(output,gentype,factoryOnly)    
 elif language.lower()=="c++":
     cxxGen = CXXGenerator(parser.AST)
-    cxxGen.generate(output,gentype)
+    cxxGen.generate(output,gentype,factoryOnly)
 elif language.lower()=="java":
-    cxxGen = JavaGenerator(parser.AST)
-    cxxGen.generate(output,gentype)
+    javaGen = JavaGenerator(parser.AST)
+    javaGen.generate(output,gentype,factoryOnly)
 elif language.lower()=="python":
-    cxxGen = PythonGenerator(parser.AST)
-    cxxGen.generate(output,gentype)
+    pythonGen = PythonGenerator(parser.AST)
+    pythonGen.generate(output,gentype,factoryOnly)
 elif language.lower()=="none":
-    mainlogger.info("Nothing to generate for <%s>."%language)
+    mainlogger.info("Nothing to generate for <%s>." % language)
 else:
     mainlogger.error("Language <%s> is unknown" % language)
 
-mainlogger.info("Generate %s from AST, Done."%language)
+mainlogger.info("Generate %s from AST, Done." % language)
 
 sys.exit()
 for l in msgFile:




reply via email to

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