3434###############################################################################
3535
3636import os , sys
37+ import IfcDocumentation
38+
3739filename = sys .argv [1 ]
3840
3941#
@@ -160,12 +162,14 @@ def __init__(self,l):
160162 self .len = len (self .type )
161163 elif isinstance (self .type ,SelectType ): selections .add (self .name )
162164 simple_types .add (self .name )
165+ comment = IfcDocumentation .description (self .name )
166+ self .comment = comment + "\n " if comment else ''
163167 def __str__ (self ):
164168 global generator_mode
165169 if generator_mode == 'HEADER' and isinstance (self .type ,EnumType ):
166- return ("namespace %(name)s {typedef %(type)s %(name)s;\n std::string ToString(%(name)s v);\n %(name)s FromString(const std::string& s);}" % self .__dict__ )% self .__dict__
170+ return ("namespace %(name)s {\n %(comment)stypedef %(type)s %(name)s;\n std::string ToString(%(name)s v);\n %(name)s FromString(const std::string& s);\n }" % self .__dict__ )% self .__dict__
167171 elif generator_mode == 'HEADER' :
168- return "typedef %s %s;" % (self .type ,self .name )
172+ return "%stypedef %s %s;" % (self . comment , self .type ,self .name )
169173 elif generator_mode == 'SOURCE' and isinstance (self .type ,EnumType ):
170174 generator_mode = 'SOURCE_TO'
171175 s = "std::string %(name)s::ToString(%(name)s v) {\n if ( v < 0 || v >= %(len)d ) throw IfcException(\" Unable to find find keyword in schema\" );\n const char* names[] = %(type)s;\n return names[v];\n }\n " % self .__dict__
@@ -185,7 +189,7 @@ def __str__(self):
185189 s = ""
186190 argv = self .argstart
187191 for a in self .l :
188- class_name = indent = ""
192+ class_name = indent = comment = optional_comment = ""
189193 return_type = str (a .type )
190194 if generator_mode == 'SOURCE' :
191195 class_name = "%(class_name)s::"
@@ -204,13 +208,17 @@ def __str__(self):
204208 function_body2 = " { return !entity->getArgument(%d)->isNull(); }" % argv
205209 else :
206210 indent = " "
207- function_body = function_body2 = ";"
208- if a .optional : s += "\n %sbool %shas%s()%s" % (indent ,class_name ,a .name ,function_body2 )
211+ function_body = function_body2 = ";"
212+ comment = IfcDocumentation .description ((self .class_name ,a .name ))
213+ comment = comment + "\n " if comment else ''
214+ comment = comment .replace ("///" ,"%s///" % indent )
215+ optional_comment = "%s/// Whether the optional attribute %s is defined for this %s\n " % (indent ,a .name ,self .class_name )
216+ if a .optional : s += "\n %s%sbool %shas%s()%s" % (optional_comment ,indent ,class_name ,a .name ,function_body2 )
209217 if ( str (a .type ) in enumerations ):
210218 return_type = "%(type)s::%(type)s" % a .__dict__
211219 elif ( str (a .type ) in entity_names ):
212220 return_type = "%(type)s*" % a .__dict__
213- s += "\n %s%s %s%s()%s" % (indent ,return_type ,class_name ,a .name ,function_body )
221+ s += "\n %s%s%s %s%s()%s" % (comment , indent ,return_type ,class_name ,a .name ,function_body )
214222 argv += 1
215223 return s
216224class InverseList :
@@ -228,12 +236,15 @@ def __str__(self):
228236class Classdef :
229237 def __init__ (self ,l ):
230238 self .class_name , self .parent_class , self .arguments , self .inverse = l
239+ self .arguments .class_name = self .class_name
231240 entity_names .add (self .class_name )
232241 parent_relations [self .class_name ] = self .parent_class
233242 argument_count [self .class_name ] = len (self .arguments )
234243 def __str__ (self ):
235244 if generator_mode == 'HEADER' :
236- return "class %s : public %s {\n public:%s%s%s\n };" % (self .class_name ,
245+ comment = IfcDocumentation .description (self .class_name )
246+ comment = comment + "\n " if comment else ''
247+ return "%sclass %s : public %s {\n public:%s%s%s\n };" % (comment ,self .class_name ,
237248 "IfcBaseClass" if self .parent_class is None else self .parent_class ,
238249 self .arguments ,
239250 self .inverse ,
@@ -247,7 +258,7 @@ def __str__(self):
247258 )
248259 elif generator_mode == 'SOURCE' :
249260 self .arguments .argstart = argument_start (self .class_name )
250- return (("\n // %(class_name)s" + str (self .arguments )+ str (self .inverse )+
261+ return (("\n // Function implementations for %(class_name)s" + str (self .arguments )+ str (self .inverse )+
251262 ("\n bool %(class_name)s::is(Type::Enum v) const { return v == Type::%(class_name)s; }" if self .parent_class is None else
252263 "\n bool %(class_name)s::is(Type::Enum v) const { return v == Type::%(class_name)s || %(parent_class)s::is(v); }" )+
253264 "\n Type::Enum %(class_name)s::type() const { return Type::%(class_name)s; }" +
0 commit comments