annotate Resources/CodeGeneration/stonegentool.py @ 482:f58fe38c8c04 bgo-commands-codegen

Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
author bgo-osimis
date Thu, 14 Feb 2019 20:58:42 +0100
parents 38997ceb9bc6
children 772516adcbf6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
1 import json
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
2 import re
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
3 import sys
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
4 from typing import Dict, List, Set
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
5 from io import StringIO
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
6 import time
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
7
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
8 """
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
9 1 2 3 4 5 6 7
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
10 12345678901234567890123456789012345678901234567890123456789012345678901234567890
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
11 """
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
12
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
13 import json
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
14 import re
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
15
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
16
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
17 class JsonHelpers:
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
18 """A set of utilities to perform JSON operations"""
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
19
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
20 @staticmethod
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
21 def removeCommentsFromJsonContent(string):
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
22 """
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
23 Remove comments from a JSON file
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
24
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
25 Comments are not allowed in JSON but, i.e., Orthanc configuration files
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
26 contains C++ like comments that we need to remove before python can
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
27 parse the file
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
28 """
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
29 # remove all occurence streamed comments (/*COMMENT */) from string
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
30 string = re.sub(re.compile("/\*.*?\*/", re.DOTALL), "", string)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
31
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
32 # remove all occurence singleline comments (//COMMENT\n ) from string
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
33 string = re.sub(re.compile("//.*?\n"), "", string)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
34
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
35 return string
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
36
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
37 @staticmethod
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
38 def loadJsonWithComments(path):
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
39 """
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
40 Reads a JSON file that may contain C++ like comments
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
41 """
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
42 with open(path, "r") as fp:
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
43 fileContent = fp.read()
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
44 fileContent = JsonHelpers.removeCommentsFromJsonContent(fileContent)
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
45 return json.loads(fileContent)
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
46
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
47
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
48 def LoadSchema(filePath: str):
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
49 return JsonHelpers.loadJsonWithComments(filePath)
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
50
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
51
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
52 # class Type:
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
53 # def __init__(self, canonicalTypeName:str, kind:str):
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
54 # allowedTypeKinds = ["primitive","enum","struct","collection"]
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
55 # """dependent type is the list of canonical types this type depends on.
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
56 # For instance, vector<map<string,int32>> depends on map<string,int32>
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
57 # that, in turn, depends on string and int32 that, in turn, depend on
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
58 # nothing"""
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
59 # self.canonicalTypeName = canonicalTypeName
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
60 # assert(kind in allowedTypeKinds)
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
61
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
62 # def setDependentTypes(self, dependentTypes:List[Type]) -> None:
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
63 # self.dependentTypes = dependentTypes
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
64
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
65 # def getDependentTypes(self) -> List[Type]:
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
66 # return self.dependentTypes
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
67
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
68
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
69 def GetCppTypeNameFromCanonical(canonicalTypeName: str) -> str:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
70 # C++: prefix map vector and string with std::map, std::vector and
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
71 # std::string
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
72 # replace int32 by int32_t
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
73 # replace float32 by float
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
74 # replace float64 by double
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
75 retVal = canonicalTypeName
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
76 retVal: str = retVal.replace("map", "std::map")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
77 retVal: str = retVal.replace("vector", "std::vector")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
78 retVal: str = retVal.replace("int32", "int32_t")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
79 retVal: str = retVal.replace("float32", "float")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
80 retVal: str = retVal.replace("float64", "double")
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
81 return retVal
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
82
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
83 def GetTypeScriptTypeNameFromCanonical(canonicalTypeName: str) -> str:
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
84 # TS: replace vector with Array and map with Map
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
85 # string remains string
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
86 # replace int32 by number
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
87 # replace float32 by number
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
88 # replace float64 by number
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
89 retVal = canonicalTypeName
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
90 retVal: str = retVal.replace("map", "Map")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
91 retVal: str = retVal.replace("vector", "Array")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
92 retVal: str = retVal.replace("int32", "number")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
93 retVal: str = retVal.replace("float32", "number")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
94 retVal: str = retVal.replace("float64", "number")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
95 retVal: str = retVal.replace("bool", "boolean")
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
96 return retVal
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
97
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
98
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
99 # class Schema:
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
100 # def __init__(self, root_prefix : str, defined_types : List[Type]):
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
101 # self.rootName : str = root_prefix
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
102 # self.definedTypes : str = defined_types
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
103
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
104
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
105 def CheckTypeSchema(definedType: Dict) -> None:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
106 allowedDefinedTypeKinds = ["enum", "struct"]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
107 if not "name" in definedType:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
108 raise Exception("type lacks the 'name' key")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
109 name = definedType["name"]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
110 if not "kind" in definedType:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
111 raise Exception(f"type {name} lacks the 'kind' key")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
112 kind = definedType["kind"]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
113 if not (kind in allowedDefinedTypeKinds):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
114 raise Exception(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
115 f"type {name} : kind {kind} is not allowed. "
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
116 + f"It must be one of {allowedDefinedTypeKinds}"
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
117 )
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
118
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
119 if not "fields" in definedType:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
120 raise Exception("type {name} lacks the 'fields' key")
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
121
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
122 # generic check on all kinds of types
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
123 fields = definedType["fields"]
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
124 for field in fields:
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
125 fieldName = field["name"]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
126 if not "name" in field:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
127 raise Exception("field in type {name} lacks the 'name' key")
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
128
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
129 # fields in struct must have types
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
130 if kind == "struct":
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
131 for field in fields:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
132 fieldName = field["name"]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
133 if not "type" in field:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
134 raise Exception(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
135 f"field {fieldName} in type {name} " + "lacks the 'type' key"
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
136 )
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
137
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
138
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
139 def CheckSchemaSchema(schema: Dict) -> None:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
140 if not "root_name" in schema:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
141 raise Exception("schema lacks the 'root_name' key")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
142 if not "types" in schema:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
143 raise Exception("schema lacks the 'types' key")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
144 for definedType in schema["types"]:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
145 CheckTypeSchema(definedType)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
146
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
147
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
148 # def CreateAndCacheTypeObject(allTypes : Dict[str,Type], typeDict : Dict) -> None:
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
149 # """This does not set the dependentTypes field"""
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
150 # typeName : str = typeDict['name']
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
151 # if typeName in allTypes:
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
152 # raise Exception(f'Type {typeName} is defined more than once!')
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
153 # else:
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
154 # typeObject = Type(typeName, typeDict['kind'])
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
155 # allTypes[typeName] = typeObject
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
156
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
157
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
158 def EatToken(sentence: str) -> (str, str):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
159 """splits "A,B,C" into "A" and "B,C" where A, B and C are type names
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
160 (including templates) like "int32", "TotoTutu", or
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
161 "map<map<int32,vector<string>>,map<string,int32>>" """
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
162
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
163 if sentence.count("<") != sentence.count(">"):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
164 raise Exception(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
165 f"Error in the partial template type list {sentence}."
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
166 + " The number of < and > do not match!"
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
167 )
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
168
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
169 # the template level we're currently in
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
170 templateLevel = 0
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
171 for i in range(len(sentence)):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
172 if (sentence[i] == ",") and (templateLevel == 0):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
173 return (sentence[0:i], sentence[i + 1 :])
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
174 elif sentence[i] == "<":
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
175 templateLevel += 1
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
176 elif sentence[i] == ">":
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
177 templateLevel -= 1
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
178 return (sentence, "")
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
179
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
180
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
181 def SplitListOfTypes(typeName: str) -> List[str]:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
182 """Splits something like
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
183 vector<string>,int32,map<string,map<string,int32>>
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
184 in:
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
185 - vector<string>
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
186 - int32
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
187 map<string,map<string,int32>>
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
188
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
189 This is not possible with a regex so
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
190 """
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
191 stillStuffToEat: bool = True
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
192 tokenList = []
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
193 restOfString = typeName
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
194 while stillStuffToEat:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
195 firstToken, restOfString = EatToken(restOfString)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
196 tokenList.append(firstToken)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
197 if restOfString == "":
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
198 stillStuffToEat = False
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
199 return tokenList
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
200
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
201
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
202 templateRegex = re.compile(r"([a-zA-Z0-9_]*[a-zA-Z0-9_]*)<([a-zA-Z0-9_,:<>]+)>")
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
203
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
204
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
205 def ParseTemplateType(typeName) -> (bool, str, List[str]):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
206 """ If the type is a template like "SOMETHING<SOME<THING,EL<SE>>>", then
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
207 it returns (true,"SOMETHING","SOME<THING,EL<SE>>")
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
208 otherwise it returns (false,"","")"""
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
209
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
210 # let's remove all whitespace from the type
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
211 # split without argument uses any whitespace string as separator
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
212 # (space, tab, newline, return or formfeed)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
213 typeName = "".join(typeName.split())
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
214 matches = templateRegex.match(typeName)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
215 if matches == None:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
216 return (False, "", "")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
217 else:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
218 # we need to split with the commas that are outside of the defined types
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
219 # simply splitting at commas won't work
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
220 listOfDependentTypes = SplitListOfTypes(matches.group(2))
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
221 return (True, matches.group(1), listOfDependentTypes)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
222
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
223
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
224 # def GetPrimitiveType(typeName : str) -> Type:
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
225 # if typeName in allTypes:
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
226 # return allTypes[typeName]
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
227 # else:
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
228 # primitiveTypes = ['int32', 'float32', 'float64', 'string']
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
229 # if not (typeName in primitiveTypes):
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
230 # raise Exception(f"Type {typeName} is unknown.")
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
231 # typeObject = Type(typeName,'primitive')
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
232 # # there are no dependent types in a primitive type --> Type object
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
233 # # constrution is finished at this point
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
234 # allTypes[typeName] = typeObject
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
235 # return typeObject
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
236
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
237
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
238 def ProcessTypeTree(
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
239 ancestors: List[str],
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
240 genOrderQueue: List[str],
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
241 structTypes: Dict[str, Dict],
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
242 typeName: str,
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
243 ) -> None:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
244 if typeName in ancestors:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
245 raise Exception(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
246 f"Cyclic dependency chain found: the last of {ancestors} "
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
247 + f"depends on {typeName} that is already in the list."
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
248 )
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
249
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
250 if not (typeName in genOrderQueue):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
251 # if we reach this point, it means the type is NOT a struct or an enum.
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
252 # it is another (non directly user-defined) type that we must parse and
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
253 # create. Let's do it!
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
254 (isTemplate, _, dependentTypeNames) = ParseTemplateType(typeName)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
255 if isTemplate:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
256 for dependentTypeName in dependentTypeNames:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
257 # childAncestors = ancestors.copy() NO TEMPLATE ANCESTOR!!!
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
258 # childAncestors.append(typeName)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
259 ProcessTypeTree(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
260 ancestors, genOrderQueue, structTypes, dependentTypeName
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
261 )
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
262 else:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
263 if typeName in structTypes:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
264 ProcessStructType_DepthFirstRecursive(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
265 genOrderQueue, structTypes, structTypes[typeName]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
266 )
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
267
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
268
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
269 def ProcessStructType_DepthFirstRecursive(
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
270 genOrderQueue: List[str], structTypes: Dict[str, Dict], typeDict: Dict
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
271 ) -> None:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
272 # let's generate the code according to the
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
273 typeName: str = typeDict["name"]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
274 if typeDict["kind"] != "struct":
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
275 raise Exception(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
276 f"Unexpected kind '{typeDict['kind']}' for " + "type '{typeName}'"
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
277 )
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
278 typeFields: List[Dict] = typeDict["fields"]
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
279 for typeField in typeFields:
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
280 ancestors = [typeName]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
281 ProcessTypeTree(ancestors, genOrderQueue, structTypes, typeField["type"])
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents: 470
diff changeset
282 # now we're pretty sure our dependencies have been processed,
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
283 # we can start marking our code for generation (it might already have
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
284 # been done if someone referenced us earlier)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
285 if not typeName in genOrderQueue:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
286 genOrderQueue.append(typeName)
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
287
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
288 def ProcessEnumerationType(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
289 outputStreams: Dict[str, StringIO], typeDict) -> None:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
290 print(f"About to process struct: {typeDict['name']}")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
291 tsText : io.StringIO = StringIO()
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
292 cppText : io.StringIO = StringIO()
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
293
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
294 tsText.write("enum %s\n" % typeDict['name'])
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
295 tsText.write("{\n")
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
296
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
297 cppText.write("enum %s\n" % typeDict['name'])
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
298 cppText.write("{\n")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
299
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
300 for i in range(len(typeDict['fields'])):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
301 field = typeDict['fields'][i]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
302 name = field['name']
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
303
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
304 tsText.write(" %s" % name)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
305 if i < len(typeDict['fields'])-1:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
306 tsText.write(",")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
307 tsText.write("\n")
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
308
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
309 cppText.write(" %s" % name)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
310 if i < len(typeDict['fields'])-1:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
311 cppText.write(",")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
312 cppText.write("\n")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
313
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
314 tsText.write("};\n\n")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
315 cppText.write("};\n\n")
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
316
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
317 outputStreams['ts'].write(tsText.getvalue())
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
318 outputStreams['cpp'].write(cppText.getvalue())
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
319
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
320
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
321 def ProcessStructType(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
322 outputStreams: Dict[str, StringIO], typeDict) -> None:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
323 print(f"About to process struct: {typeDict['name']}")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
324 tsText : io.StringIO = StringIO()
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
325 cppText : io.StringIO = StringIO()
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
326
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
327 tsText.write("class %s\n" % typeDict['name'])
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
328 tsText.write("{\n")
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
329
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
330 cppText.write("struct %s\n" % typeDict['name'])
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
331 cppText.write("{\n")
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
332
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
333 for i in range(len(typeDict['fields'])):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
334 field = typeDict['fields'][i]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
335 name = field['name']
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
336 tsType = GetTypeScriptTypeNameFromCanonical(field['type'])
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
337 tsText.write(" public %s %s;\n" % (tsType, name))
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
338 cppType = GetCppTypeNameFromCanonical(field['type'])
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
339 cppText.write(" %s %s;\n" % (cppType, name))
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
340
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
341 tsText.write("};\n\n")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
342 cppText.write("};\n\n")
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
343
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
344 outputStreams['ts'].write(tsText.getvalue())
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
345 outputStreams['cpp'].write(cppText.getvalue())
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
346
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
347 def WritePreambles(outputStreams: Dict[str, StringIO]) -> None:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
348 outputStreams["cpp"].write("""// autogenerated by stonegentool on %s
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
349 #include <cstdint>
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
350 #include <string>
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
351 #include <vector>
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
352 #include <map>
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
353 """ % time.ctime())
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
354
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
355 outputStreams["ts"].write("""// autogenerated by stonegentool on %s
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
356 """ % time.ctime())
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
357
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
358 def ProcessSchema(schema: dict) -> (str, Dict[str, StringIO]):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
359 CheckSchemaSchema(schema)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
360 rootName: str = schema["root_name"]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
361 definedTypes: list = schema["types"]
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
362
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
363 print(f"Processing schema. rootName = f{rootName}")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
364 # this will be filled with the generation queue. That is, the type
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
365 # names in the order where they must be defined.
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
366 genOrderQueue: List = []
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
367
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
368 # the struct names are mapped to their JSON dictionary
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
369 structTypes: Dict[str, Dict] = {}
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
370
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
371 outputStreams = {}
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
372 outputStreams["cpp"] = StringIO()
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
373 outputStreams["ts"] = StringIO()
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
374
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
375 WritePreambles(outputStreams)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
376
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
377 # the order here is the generation order
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
378 for definedType in definedTypes:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
379 if definedType["kind"] == "enum":
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
380 ProcessEnumerationType(outputStreams, definedType)
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
381
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
382 for definedType in definedTypes:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
383 if definedType["kind"] == "struct":
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
384 structTypes[definedType["name"]] = definedType
470
db093eb6b29d Ongoing code generation tool
bgo-osimis
parents: 469
diff changeset
385
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
386 # the order here is NOT the generation order: the types
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
387 # will be processed according to their dependency graph
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
388 for definedType in definedTypes:
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
389 if definedType["kind"] == "struct":
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
390 ProcessStructType_DepthFirstRecursive(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
391 genOrderQueue, structTypes, definedType
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
392 )
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
393
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
394 for i in range(len(genOrderQueue)):
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
395 typeName = genOrderQueue[i]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
396 typeDict = structTypes[typeName]
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
397 ProcessStructType(outputStreams, typeDict)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
398
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
399 return (rootName, outputStreams)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
400
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
401
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
402 if __name__ == "__main__":
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
403 import argparse
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
404
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
405 parser = argparse.ArgumentParser(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
406 usage="""stonegentool.py [-h] [-o OUT_DIR] [-v] input_schemas
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
407 EXAMPLE: python command_gen.py -o "generated_files/" """
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
408 + """ "mainSchema.json,App Specific Commands.json" """
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
409 )
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
410 parser.add_argument("input_schema", type=str, help="path to the schema file")
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
411 parser.add_argument(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
412 "-o",
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
413 "--out_dir",
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
414 type=str,
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
415 default=".",
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
416 help="""path of the directory where the files
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
417 will be generated. Default is current
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
418 working folder""",
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
419 )
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
420 parser.add_argument(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
421 "-v",
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
422 "--verbosity",
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
423 action="count",
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
424 default=0,
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
425 help="""increase output verbosity (0 == errors
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
426 only, 1 == some verbosity, 2 == nerd
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
427 mode""",
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
428 )
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
429
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
430 args = parser.parse_args()
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
431 inputSchemaFilename = args.input_schema
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
432 outDir = args.out_dir
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
433
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
434 print("input schema = " + str(inputSchemaFilename))
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
435 print("out dir = " + str(outDir))
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
436
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
437 (rootName, outputStreams) = ProcessSchema(LoadSchema(inputSchemaFilename))
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
438 WriteStreamsToFiles(rootName, outputStreams)
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
439
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
440 ###################
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
441 ## ATTIC ##
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
442 ###################
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
443
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
444 # this works
468
cef55b4e6c21 stonegentool first commit
bgo-osimis
parents:
diff changeset
445
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
446 if False:
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
447 obj = json.loads(
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
448 """{
469
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
449 "firstName": "Alice",
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
450 "lastName": "Hall",
52549faf47ba Ongoing code generation work
bgo-osimis
parents: 468
diff changeset
451 "age": 35
482
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
452 }"""
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
453 )
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
454 print(obj)
f58fe38c8c04 Ongoing work on codegen: ts and cpp enum and struct writing seem to be OK. No file write yet
bgo-osimis
parents: 474
diff changeset
455