@@ -11,6 +11,15 @@ namespace DocumentFormat.OpenXml.Generator.Generators.Elements;
1111
1212public static class DataModelWriterExtensions
1313{
14+ private static HashSet < string > _typedBasedClasses = new ( )
15+ {
16+ "OpenXmlElement" ,
17+ "OpenXmlCompositeElement" ,
18+ "OpenXmlLeafElement" ,
19+ "OpenXmlLeafTextElement" ,
20+ "OpenXmlPartRootElement" ,
21+ } ;
22+
1423 public static bool GetDataModelSyntax ( this IndentedTextWriter writer , OpenXmlGeneratorServices services , SchemaNamespace model )
1524 {
1625 foreach ( var ns in GetNamespaces ( model , services ) . Distinct ( ) . OrderBy ( n => n ) )
@@ -53,6 +62,21 @@ public static bool GetDataModelSyntax(this IndentedTextWriter writer, OpenXmlGen
5362 return delimiter . Count > 0 ;
5463 }
5564
65+ private static string GetBaseName ( SchemaType type )
66+ {
67+ if ( type . IsPart )
68+ {
69+ return "TypedOpenXmlPartRootElement" ;
70+ }
71+
72+ if ( _typedBasedClasses . Contains ( type . BaseClass ) )
73+ {
74+ return $ "Typed{ type . BaseClass } ";
75+ }
76+
77+ return type . BaseClass ;
78+ }
79+
5680 private static void WriteType ( this IndentedTextWriter writer , OpenXmlGeneratorServices services , SchemaType element )
5781 {
5882 writer . WriteDocumentationComment ( BuildTypeComments ( services , element ) ) ;
@@ -69,7 +93,7 @@ private static void WriteType(this IndentedTextWriter writer, OpenXmlGeneratorSe
6993 writer . Write ( "partial class " ) ;
7094 writer . Write ( className ) ;
7195 writer . Write ( " : " ) ;
72- writer . WriteLine ( element . IsPart ? "OpenXmlPartRootElement" : element . BaseClass ) ;
96+ writer . WriteLine ( GetBaseName ( element ) ) ;
7397
7498 using ( writer . AddBlock ( new ( ) { AddNewLineBeforeClosing = true , IncludeTrailingNewline = false } ) )
7599 {
0 commit comments