@@ -36,6 +36,12 @@ def __init__(self, current_scheme: XMLSchema11, parameters, analyzer_data: Analy
3636 self .__fragments = get_fragment_parameter_for_schema (self .__schema_prefix )
3737 self .__generate_fragment = len (self .__fragments ) > 0
3838
39+ self .__xmldsigfragments = []
40+ self .__generate_all_xmldsig_fragment = True
41+ if self .config ['generate_fragments' ] == 1 :
42+ self .__xmldsigfragments = get_fragment_parameter_for_schema ('xmldsig_' )
43+ self .__generate_all_xmldsig_fragment = len (self .__xmldsigfragments ) == 0
44+
3945 if self .logging_enabled :
4046 self .logger_name = str (self .h_params ['filename' ])
4147 if self .logger_name .casefold ().endswith ('.h' ) or self .logger_name .casefold ().endswith ('.c' ):
@@ -276,12 +282,19 @@ def __generate_sequence_content(self, name, comment, content, indent_level=1):
276282 return temp .render (indent = indent , level = indent_level ,
277283 sequence_comment = comment , sequence_name = name , sequence_content = content )
278284
285+ def __generate_optimized_struct (self , name , comment , indent_level = 1 ):
286+ indent = ' ' * self .config ['c_code_indent_chars' ]
287+ temp = self .generator .get_template ('SubStructOptimized.jinja' )
288+ return temp .render (indent = indent , level = indent_level , name = name , comment = comment )
289+
279290 def __get_particle_content (self , particle : Particle , elements , indent_level = 1 ):
280291 content = ''
281292 last = None
282293
294+ if particle .is_optimized is True :
295+ content += self .__generate_optimized_struct (particle .name , ": Optimized out element" , indent_level )
283296 # particle type is in list, so a separate type is generated
284- if particle .type in self .analyzer_data .known_elements :
297+ elif particle .type in self .analyzer_data .known_elements :
285298 if particle .max_occurs > 1 :
286299 # generate struct for array with length variable
287300 if particle .is_enum :
@@ -449,7 +462,7 @@ def __get_xmldsig_fragment_content(self):
449462
450463 fragment : FragmentData
451464 for fragment in self .analyzer_data .known_fragments .values ():
452- if 'xmldsig' in fragment .namespace .casefold ():
465+ if 'xmldsig' in fragment .namespace .casefold () and ( fragment . name in self . __xmldsigfragments or self . __generate_all_xmldsig_fragment is True ) :
453466 fragment_type = fragment .type
454467 if fragment .type == 'AnonType' :
455468 fragment_type = fragment .name
@@ -460,6 +473,8 @@ def __get_xmldsig_fragment_content(self):
460473 else :
461474 self .log (f'xmldsig Fragment { fragment .name } ({ fragment .type } ) '
462475 f'is not in the list of known elements.' )
476+ else :
477+ self .log (f"Skipped xmlsigFragment: { fragment .name } " )
463478
464479 temp = self .generator .get_template ('BaseStructWithUnionAndUsed.jinja' )
465480 content = temp .render (struct_name = name ,
@@ -657,6 +672,12 @@ def __init__(self, current_scheme, parameters, analyzer_data: AnalyzerData, enab
657672 self .__fragments = get_fragment_parameter_for_schema (self .__schema_prefix )
658673 self .__generate_fragment = len (self .__fragments ) > 0
659674
675+ self .__xmldsigfragments = []
676+ self .__generate_all_xmldsig_fragment = True
677+ if self .config ['generate_fragments' ] == 1 :
678+ self .__xmldsigfragments = get_fragment_parameter_for_schema ('xmldsig_' )
679+ self .__generate_all_xmldsig_fragment = len (self .__xmldsigfragments ) == 0
680+
660681 if self .logging_enabled :
661682 self .logger_name = str (self .c_params ['filename' ])
662683 if self .logger_name .casefold ().endswith ('.h' ) or self .logger_name .casefold ().endswith ('.c' ):
@@ -789,7 +810,7 @@ def __get_xmldsig_fragment_content(self):
789810
790811 fragment : FragmentData
791812 for fragment in self .analyzer_data .known_fragments .values ():
792- if 'xmldsig' in fragment .namespace .casefold ():
813+ if 'xmldsig' in fragment .namespace .casefold () and ( fragment . name in self . __xmldsigfragments or self . __generate_all_xmldsig_fragment is True ) :
793814 fragment_type = fragment .type
794815 if fragment .type == 'AnonType' :
795816 fragment_type = fragment .name
0 commit comments