diff Resources/CodeGeneration/stonegentool.py @ 494:fc17251477d6 bgo-commands-codegen

TS and CPP tests OK. Ongoing code for C++ program that reads list of serialized messages in N files. Requires conan
author bgo-osimis
date Sat, 23 Feb 2019 10:18:13 +0100
parents 6fbf2eae7c88
children 8b6ceae45ba0
line wrap: on
line diff
--- a/Resources/CodeGeneration/stonegentool.py	Fri Feb 22 10:48:43 2019 +0100
+++ b/Resources/CodeGeneration/stonegentool.py	Sat Feb 23 10:18:13 2019 +0100
@@ -1,6 +1,7 @@
 import json
 import yaml
 import re
+import os
 import sys
 from jinja2 import Template
 from typing import (
@@ -117,6 +118,7 @@
   retVal: str = canonicalTypename
   retVal = retVal.replace("map", "std::map")
   retVal = retVal.replace("vector", "std::vector")
+  retVal = retVal.replace("string", "std::string")
   retVal = retVal.replace("int32", "int32_t")
   retVal = retVal.replace("float32", "float")
   retVal = retVal.replace("float64", "double")
@@ -137,9 +139,24 @@
   retVal = retVal.replace("bool", "boolean")
   return retVal
 
-def NeedsConstruction(canonTypename):
+def NeedsTsConstruction(enums: Dict, tsType: str):
+  if tsType == 'boolean':
+    return False
+  elif tsType == 'number':
+    return False
+  elif tsType == 'string':
+    return False
+  else:
+    enumNames = []
+    for enum in enums:
+      enumNames.append(enum['name'])
+    if tsType in enumNames:
+      return False
   return True
 
+def NeedsCppConstruction(canonTypename):
+  return False
+
 def RegisterTemplateFunction(template,func):
   """Makes a function callable by a jinja2 template"""
   template.globals[func.__name__] = func
@@ -149,7 +166,8 @@
   template = Template(templateStr)
   RegisterTemplateFunction(template,CanonToCpp)
   RegisterTemplateFunction(template,CanonToTs)
-  RegisterTemplateFunction(template,NeedsConstruction)
+  RegisterTemplateFunction(template,NeedsTsConstruction)
+  RegisterTemplateFunction(template,NeedsCppConstruction)
   return template
 
 def MakeTemplateFromFile(templateFileName):
@@ -476,12 +494,28 @@
   )
 
   args = parser.parse_args()
-  inputSchemaFilename = args.input_schema
+  schemaFile = args.input_schema
   outDir = args.out_dir
 
-  schema: Dict = LoadSchema(inputSchemaFilename)
-  genOrder: List[str] = ComputeRequiredDeclarationOrder(schema)
-  processedSchema: Dict = ProcessSchema(schema,genOrder)
+  tdico: Dict = GetTemplatingDictFromSchemaFilename(schemaFile)
+
+  tsTemplateFile = \
+    os.path.join(os.path.dirname(__file__), 'template.in.ts')
+  template = MakeTemplateFromFile(tsTemplateFile)
+  renderedTsCode: str = template.render(**tdico)
+  outputTsFile = os.path.join( \
+    outDir,f"{tdico['rootName']}_generated.ts")
+  with open(outputTsFile,"wt",encoding='utf8') as outFile:
+    outFile.write(renderedTsCode)
+
+  cppTemplateFile = \
+    os.path.join(os.path.dirname(__file__), 'template.in.h')
+  template = MakeTemplateFromFile(cppTemplateFile)
+  renderedCppCode: str = template.render(**tdico)
+  outputCppFile = os.path.join( \
+    outDir,f"{tdico['rootName']}_generated.hpp")
+  with open(outputCppFile,"wt",encoding='utf8') as outFile:
+    outFile.write(renderedCppCode)
 
 
 # def GenEnumDecl(genc: GenCode, fullName: str, schema: Dict) -> None: