Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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 @@ -216,7 +216,15 @@
writer.Write("partial class ");
writer.Write(className);
writer.Write(" : ");
writer.WriteLine(GetBaseName(element));

if (element.KnownChildren is not null && element.KnownChildren.Any(c => c.QName.Name == "extLst") && element.ExtensionChildren is not null)
{
writer.WriteLine($"{GetBaseName(element)}, IExtensionChildrenParent<{className}>");
}
else
{
writer.WriteLine(GetBaseName(element));
}

using (writer.AddBlock(new() { AddNewLineBeforeClosing = true, IncludeTrailingNewline = false }))
{
Expand Down Expand Up @@ -320,6 +328,24 @@

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("public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {");

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

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

//writer.WriteLine("public static IEnumerable<OpenXmlSchemaType> GetExtensionChildren<T>()");

Check failure on line 343 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Run

Check failure on line 343 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Run

Check warning on line 343 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

//writer.WriteLine(" where T : IExtensionChildrenParent<T>");

Check failure on line 344 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Run

Check failure on line 344 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Run

Check warning on line 344 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

//writer.WriteLine(" => T.ExtensionChildren;");

Check failure on line 345 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Run

Check failure on line 345 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Run

Check warning on line 345 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

//writer.WriteLine();

Check failure on line 346 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Run

Check failure on line 346 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Run

Check warning on line 346 in gen/DocumentFormat.OpenXml.Generator.Models/Generators/Elements/DataModelWriterExtensions.cs

View workflow job for this annotation

GitHub Actions / Analyze (csharp)

}

var attributes = containingType.Attributes;

writer.WriteLine("internal override void ConfigureMetadata(ElementMetadata.Builder builder)");
Expand Down Expand Up @@ -356,16 +382,32 @@
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 +532,53 @@
}

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 @@ -28,7 +28,7 @@ namespace DocumentFormat.OpenXml.Office2021.MipLabelMetaData
/// <item><description><see cref="DocumentFormat.OpenXml.Office2021.MipLabelMetaData.ClassificationLabel" /> <c>&lt;clbl:label></c></description></item>
/// </list>
/// </remarks>
public partial class ClassificationLabelList : OpenXmlPartRootElement
public partial class ClassificationLabelList : OpenXmlPartRootElement, IExtensionChildrenParent<ClassificationLabelList>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/2020/mipLabelMetadata", "labelList");
Expand Down Expand Up @@ -67,6 +67,9 @@ public ClassificationLabelList(string outerXml) : base(outerXml)
{
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ internal override void ConfigureMetadata(ElementMetadata.Builder builder)
/// <item><description><see cref="DocumentFormat.OpenXml.Drawing.Transform2D" /> <c>&lt;a:xfrm></c></description></item>
/// </list>
/// </remarks>
public partial class ShapeProperties : OpenXmlCompositeElement
public partial class ShapeProperties : OpenXmlCompositeElement, IExtensionChildrenParent<ShapeProperties>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/drawing/2007/8/2/chart", "spPr");
Expand Down Expand Up @@ -455,6 +455,9 @@ public EnumValue<DocumentFormat.OpenXml.Drawing.BlackWhiteModeValues>? BlackWhit
set => SetAttribute(value);
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ internal override void ConfigureMetadata(ElementMetadata.Builder builder)
/// <item><description><see cref="DocumentFormat.OpenXml.Drawing.NonVisualDrawingPropertiesExtensionList" /> <c>&lt;a:extLst></c></description></item>
/// </list>
/// </remarks>
public partial class NonVisualDrawingProperties : OpenXmlCompositeElement
public partial class NonVisualDrawingProperties : OpenXmlCompositeElement, IExtensionChildrenParent<NonVisualDrawingProperties>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/drawing/2008/diagram", "cNvPr");
Expand Down Expand Up @@ -286,6 +286,9 @@ public StringValue? Title
set => SetAttribute(value);
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -369,7 +372,7 @@ public DocumentFormat.OpenXml.Drawing.NonVisualDrawingPropertiesExtensionList? N
/// <item><description><see cref="DocumentFormat.OpenXml.Drawing.ShapeLocks" /> <c>&lt;a:spLocks></c></description></item>
/// </list>
/// </remarks>
public partial class NonVisualDrawingShapeProperties : OpenXmlCompositeElement
public partial class NonVisualDrawingShapeProperties : OpenXmlCompositeElement, IExtensionChildrenParent<NonVisualDrawingShapeProperties>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/drawing/2008/diagram", "cNvSpPr");
Expand Down Expand Up @@ -418,6 +421,9 @@ public BooleanValue? TextBox
set => SetAttribute(value);
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -584,7 +590,7 @@ public DocumentFormat.OpenXml.Office.Drawing.NonVisualDrawingShapeProperties? No
/// <item><description><see cref="DocumentFormat.OpenXml.Drawing.Transform2D" /> <c>&lt;a:xfrm></c></description></item>
/// </list>
/// </remarks>
public partial class ShapeProperties : OpenXmlCompositeElement
public partial class ShapeProperties : OpenXmlCompositeElement, IExtensionChildrenParent<ShapeProperties>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/drawing/2008/diagram", "spPr");
Expand Down Expand Up @@ -633,6 +639,9 @@ public EnumValue<DocumentFormat.OpenXml.Drawing.BlackWhiteModeValues>? BlackWhit
set => SetAttribute(value);
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1151,7 +1160,7 @@ internal override void ConfigureMetadata(ElementMetadata.Builder builder)
/// <item><description><see cref="DocumentFormat.OpenXml.Drawing.NonVisualGroupDrawingShapePropsExtensionList" /> <c>&lt;a:extLst></c></description></item>
/// </list>
/// </remarks>
public partial class NonVisualGroupDrawingShapeProperties : OpenXmlCompositeElement
public partial class NonVisualGroupDrawingShapeProperties : OpenXmlCompositeElement, IExtensionChildrenParent<NonVisualGroupDrawingShapeProperties>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/drawing/2008/diagram", "cNvGrpSpPr");
Expand Down Expand Up @@ -1190,6 +1199,9 @@ public NonVisualGroupDrawingShapeProperties(string outerXml) : base(outerXml)
{
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1350,7 +1362,7 @@ public DocumentFormat.OpenXml.Office.Drawing.NonVisualGroupDrawingShapePropertie
/// <item><description><see cref="DocumentFormat.OpenXml.Drawing.SolidFill" /> <c>&lt;a:solidFill></c></description></item>
/// </list>
/// </remarks>
public partial class GroupShapeProperties : OpenXmlCompositeElement
public partial class GroupShapeProperties : OpenXmlCompositeElement, IExtensionChildrenParent<GroupShapeProperties>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/drawing/2008/diagram", "grpSpPr");
Expand Down Expand Up @@ -1399,6 +1411,9 @@ public EnumValue<DocumentFormat.OpenXml.Drawing.BlackWhiteModeValues>? BlackWhit
set => SetAttribute(value);
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1481,7 +1496,7 @@ public DocumentFormat.OpenXml.Drawing.TransformGroup? TransformGroup
/// <item><description><see cref="DocumentFormat.OpenXml.Office.Drawing.ShapeNonVisualProperties" /> <c>&lt;dsp:nvSpPr></c></description></item>
/// </list>
/// </remarks>
public partial class Shape : OpenXmlCompositeElement
public partial class Shape : OpenXmlCompositeElement, IExtensionChildrenParent<Shape>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/drawing/2008/diagram", "sp");
Expand Down Expand Up @@ -1530,6 +1545,9 @@ public StringValue? ModelId
set => SetAttribute(value);
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1659,7 +1677,7 @@ public DocumentFormat.OpenXml.Office.Drawing.OfficeArtExtensionList? OfficeArtEx
/// <item><description><see cref="DocumentFormat.OpenXml.Office.Drawing.Shape" /> <c>&lt;dsp:sp></c></description></item>
/// </list>
/// </remarks>
public partial class GroupShape : GroupShapeType
public partial class GroupShape : GroupShapeType, IExtensionChildrenParent<GroupShape>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/drawing/2008/diagram", "grpSp");
Expand Down Expand Up @@ -1698,6 +1716,9 @@ public GroupShape(string outerXml) : base(outerXml)
{
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1735,7 +1756,7 @@ internal override void ConfigureMetadata(ElementMetadata.Builder builder)
/// <item><description><see cref="DocumentFormat.OpenXml.Office.Drawing.Shape" /> <c>&lt;dsp:sp></c></description></item>
/// </list>
/// </remarks>
public partial class ShapeTree : GroupShapeType
public partial class ShapeTree : GroupShapeType, IExtensionChildrenParent<ShapeTree>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new("http://schemas.microsoft.com/office/drawing/2008/diagram", "spTree");
Expand Down Expand Up @@ -1774,6 +1795,9 @@ public ShapeTree(string outerXml) : base(outerXml)
{
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

internal override void ConfigureMetadata(ElementMetadata.Builder builder)
{
base.ConfigureMetadata(builder);
Expand Down Expand Up @@ -1811,7 +1835,7 @@ internal override void ConfigureMetadata(ElementMetadata.Builder builder)
/// <item><description><see cref="DocumentFormat.OpenXml.Office.Drawing.Shape" /> <c>&lt;dsp:sp></c></description></item>
/// </list>
/// </remarks>
public abstract partial class GroupShapeType : OpenXmlCompositeElement
public abstract partial class GroupShapeType : OpenXmlCompositeElement, IExtensionChildrenParent<GroupShapeType>
{
#pragma warning disable CS0109
internal static readonly new OpenXmlQualifiedName ElementQName = new(string.Empty, string.Empty);
Expand Down Expand Up @@ -1850,6 +1874,9 @@ protected GroupShapeType(string outerXml) : base(outerXml)
{
}

public static IEnumerable<OpenXmlSchemaType> ExtensionChildren { get; } = new List<OpenXmlSchemaType>() {
};

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