Skip to content
Draft
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6225,6 +6225,26 @@
]
}
]
},
"ExtensionChildren": [

{
"Name": "p:CT_Picture/p:pic",
"PropertyName": "Picture"
}
],
"ExtensionParticle": {
"Kind": "Sequence",
"Items": [
{
"Name": "p:CT_Picture/p:pic",
"Occurs": [
{
"Max": 1
}
]
}
]
}
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,19 @@ static DocumentCommentOptions BuildTypeComments(OpenXmlGeneratorServices service

private static void WriteMetadata(this IndentedTextWriter writer, OpenXmlGeneratorServices services, SchemaType containingType)
{
if (containingType.KnownChildren is not null && containingType.KnownChildren.Any(c => c.QName.Name == "extLst") && containingType.ExtensionChildren is not null)
{
writer.WriteLine("internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {");

foreach (var child in containingType.ExtensionChildren)
{
writer.WriteLine($" {services.FindClassName(child.Name)}.ElementType,");
}

writer.WriteLine("};");
writer.WriteLine();
}

var attributes = containingType.Attributes;

writer.WriteLine("internal override void ConfigureMetadata(ElementMetadata.Builder builder)");
Expand Down Expand Up @@ -356,16 +369,32 @@ private static void WriteMetadata(this IndentedTextWriter writer, OpenXmlGenerat
writer.WriteLine(";");
}

if (!containingType.IsDerived)
if (!containingType.IsDerived && containingType.KnownChildren is not null)
{
foreach (var child in containingType.KnownChildren)
{
var className = services.FindClassName(child);

writer.Write("builder.AddChild(");
writer.Write(className);
if (containingType.Name.QName.Name == "sldId" && containingType.Name.QName.Prefix == "p" && className == "DocumentFormat.OpenXml.Presentation.ExtensionList")
{
writer.Write($"{className}<DocumentFormat.OpenXml.Presentation.SlideId>");
}
else
{
writer.Write(className);
}

writer.Write(".ElementType, static () => new ");
writer.Write(className);
if (containingType.Name.QName.Name == "sldId" && containingType.Name.QName.Prefix == "p" && className == "DocumentFormat.OpenXml.Presentation.ExtensionList")
{
writer.Write($"{className}<DocumentFormat.OpenXml.Presentation.SlideId>");
}
else
{
writer.Write(className);
}

writer.WriteLine("());");
}
}
Expand Down Expand Up @@ -490,20 +519,53 @@ private static void WriteElement(this IndentedTextWriter writer, OpenXmlGenerato
}

writer.Write("public ");
writer.Write(className);

if (parent.Name.QName.Name == "sldId" && parent.Name.QName.Prefix == "p" && className == "DocumentFormat.OpenXml.Presentation.ExtensionList")
{
writer.Write(string.Concat(className, "<DocumentFormat.OpenXml.Presentation.SlideId>"));
}
else
{
writer.Write(className);
}

writer.Write("? ");
writer.WriteLine(element.PropertyName);

using (writer.AddBlock(new() { IncludeTrailingNewline = false }))
{
writer.Write("get => GetElement(");
writer.Write(className);
if (parent.Name.QName.Name == "sldId" && parent.Name.QName.Prefix == "p" && className == "DocumentFormat.OpenXml.Presentation.ExtensionList")
{
writer.Write("DocumentFormat.OpenXml.Presentation.ExtensionList<DocumentFormat.OpenXml.Presentation.SlideId>");
}
else
{
writer.Write(className);
}

writer.Write(".ElementType) as ");
writer.Write(className);
if (parent.Name.QName.Name == "sldId" && parent.Name.QName.Prefix == "p" && className == "DocumentFormat.OpenXml.Presentation.ExtensionList")
{
writer.Write("DocumentFormat.OpenXml.Presentation.ExtensionList<DocumentFormat.OpenXml.Presentation.SlideId>");
}
else
{
writer.Write(className);
}

writer.WriteLine(";");

writer.Write("set => SetElement(value, ");
writer.Write(className);
if (parent.Name.QName.Name == "sldId" && parent.Name.QName.Prefix == "p" && className == "DocumentFormat.OpenXml.Presentation.ExtensionList")
{
writer.Write("DocumentFormat.OpenXml.Presentation.ExtensionList<DocumentFormat.OpenXml.Presentation.SlideId>");
}
else
{
writer.Write(className);
}

writer.WriteLine(".ElementType);");
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,15 @@ private static void WriteCompositeObject(this IndentedTextWriter writer, OpenXml
foreach (var item in p.Items)
{
list.AddDelimiter();
writer.WriteItemNode(services, containingType, item);

if (containingType.Name.QName.Name == "sldId" && containingType.Name.QName.Prefix == "p" && item.Name.QName.Name == "extLst" && item.Name.QName.Prefix == "p")
{
writer.Write("new ElementParticle(DocumentFormat.OpenXml.Presentation.ExtensionList<DocumentFormat.OpenXml.Presentation.SlideId>.ElementType, 0, 1),");
}
else
{
writer.WriteItemNode(services, containingType, item);
}
}

writer.WriteLine();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,8 @@ static void Fill(Particle? p, List<Particle> list)
public IEnumerable<Validator> Validators { get; set; } = Enumerable.Empty<Validator>();

public Particle? Particle { get; set; }

public IEnumerable<SchemaElement> ExtensionChildren { get; set; } = Enumerable.Empty<SchemaElement>();

public Particle? ExtensionParticle { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ public ClassificationLabelList(string outerXml) : base(outerXml)
{
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,9 @@ public EnumValue<DocumentFormat.OpenXml.Drawing.BlackWhiteModeValues>? BlackWhit
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,9 @@ public StringValue? Title
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -418,6 +421,9 @@ public BooleanValue? TextBox
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -633,6 +639,9 @@ public EnumValue<DocumentFormat.OpenXml.Drawing.BlackWhiteModeValues>? BlackWhit
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1190,6 +1199,9 @@ public NonVisualGroupDrawingShapeProperties(string outerXml) : base(outerXml)
{
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1399,6 +1411,9 @@ public EnumValue<DocumentFormat.OpenXml.Drawing.BlackWhiteModeValues>? BlackWhit
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1530,6 +1545,9 @@ public StringValue? ModelId
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1698,6 +1716,9 @@ public GroupShape(string outerXml) : base(outerXml)
{
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1774,6 +1795,9 @@ public ShapeTree(string outerXml) : base(outerXml)
{
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1850,6 +1874,9 @@ protected GroupShapeType(string outerXml) : base(outerXml)
{
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ public EnumValue<DocumentFormat.OpenXml.Drawing.BlackWhiteModeValues>? BlackWhit
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -279,6 +282,9 @@ public StringValue? Title
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -411,6 +417,9 @@ public BooleanValue? IsComment
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ public StringValue? Title
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,9 @@ public StringValue? RelationshipId
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -615,6 +618,9 @@ public EnumValue<DocumentFormat.OpenXml.Drawing.PenAlignmentValues>? Alignment
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -842,6 +848,9 @@ public HiddenScene3D(string outerXml) : base(outerXml)
{
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1010,6 +1019,9 @@ public EnumValue<DocumentFormat.OpenXml.Drawing.PresetMaterialTypeValues>? Prese
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1491,6 +1503,9 @@ public BooleanValue? NoChangeShapeType
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -4039,6 +4054,9 @@ public StringValue? Title
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -4171,6 +4189,9 @@ public BooleanValue? IsComment
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ public StringValue? Name
set => SetAttribute(value);
}

internal static new List<OpenXmlSchemaType> ExtensionChildren { get; set; } = new() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down
Loading
Loading