static DocumentCommentOptions BuildTypeComments(OpenXmlGeneratorServices services, SchemaType element) { var list = new List <string>(); foreach (var child in element.KnownChildren) { var name = services.FindClassName(child); list.Add($"<description><see cref=\"{name}\" /> <c><{child.QName}></c></description>"); } var paragraphs = list.Count == 0 ? null : new Paragraphs { "The following table lists the possible child types:", list, }; return(new DocumentCommentOptions { Summary = new Paragraphs { element.Summary, $"This class is available in {element.Version.ToFormattedString()} and above.", $"When the object is serialized out as xml, it's qualified name is {element.Name.QName.Prefix}:{element.Name.QName.Name}.", }, Remarks = paragraphs, TrailingNewLineTabs = false, }); }
private static string GetSimpleTypeInternal(this OpenXmlGeneratorServices services, QName qname) { if (_mapping.TryGetValue(qname, out var mapped)) { return(mapped); } if (services.TryGetEnum(qname, out var @enum, out var ns)) { return($"EnumValue<{ns}.{@enum.Name}>"); } throw new InvalidOperationException($"Could not find simple type mapping for {qname}"); }
private static void WriteCompositeObject(this IndentedTextWriter writer, OpenXmlGeneratorServices services, SchemaType containingType, string type, Particle p) { writer.WriteObject("CompositeParticle.Builder", p, w => w.Write($"ParticleType.{type}"), block: writer => { using (writer.AddBlock(new() { IncludeTrailingNewline = false })) { var list = writer.TrackDelimiter(newLineCount: 1); foreach (var item in p.Items) { list.AddDelimiter(); writer.WriteItemNode(services, containingType, item); } writer.WriteLine(); } });
public static bool GetDataModelSyntax(this IndentedTextWriter writer, OpenXmlGeneratorServices services, SchemaNamespace model) { foreach (var ns in GetNamespaces(model, services).Distinct().OrderBy(n => n)) { writer.Write("using "); writer.Write(ns); writer.WriteLine(";"); } writer.WriteLine(); writer.Write("namespace "); writer.WriteLine(services.GetNamespaceApi(model.TargetNamespace)); var delimiter = writer.TrackDelimiter(separator: string.Empty, newLineCount: 2); using (writer.AddBlock(new() { AddNewLineBeforeClosing = true, IncludeTrailingNewline = false })) { foreach (var type in model.Types) { // TODO: remove them if this line: // <xsd:element name="openxmlsdk_49BECFFA_3B03_4D13_8272_D6CCB22579E3" type="xsd:unsignedInt" /> // is removed from O16Path_V30.xml if (type.Name.QName.Name == "openxmlsdk_49BECFFA_3B03_4D13_8272_D6CCB22579E3") { continue; } delimiter.AddDelimiter(); writer.WriteType(services, type); } foreach (var @enum in model.Enums) { delimiter.AddDelimiter(); writer.WriteEnumType(@enum); } } return(delimiter.Count > 0); }
private static void WriteType(this IndentedTextWriter writer, OpenXmlGeneratorServices services, SchemaType element) { writer.WriteDocumentationComment(BuildTypeComments(services, element)); writer.WriteSchemaAttribute(element.Name.QName); writer.Write("public "); if (element.IsAbstract) { writer.Write("abstract "); } var className = services.FindClassName(element.Name, fullyQualified: false); writer.Write("partial class "); writer.Write(className); writer.Write(" : "); writer.WriteLine(element.IsPart ? "OpenXmlPartRootElement" : element.BaseClass); using (writer.AddBlock(new() { AddNewLineBeforeClosing = true, IncludeTrailingNewline = false })) { var delimiter = writer.TrackDelimiter(separator: string.Empty, newLineCount: 2); delimiter.AddDelimiter(); writer.WriteDocumentationComment($"Initializes a new instance of the {className} class."); writer.Write(element.GetAccessibility()); writer.Write(" "); writer.Write(className); writer.WriteLine("() : base()"); using (writer.AddBlock(new() { IncludeTrailingNewline = false })) { } writer.WriteConstructors(services, element, ref delimiter); foreach (var attribute in element.Attributes) { delimiter.AddDelimiter(); writer.WriteAttributeProperty(services, attribute); } delimiter.AddDelimiter(); writer.WriteMetadata(services, element); if (!(element.IsDerived || element.CompositeType == ParticleOrderType.Other)) { foreach (var node in element.Children) { writer.WriteElement(services, element, node, ref delimiter); } } if (!element.IsAbstract) { delimiter.AddDelimiter(); writer.WriteInheritDoc(); writer.Write("public override OpenXmlElement CloneNode(bool deep) => CloneImp<"); writer.Write(className); writer.Write(">(deep);"); } if (element.IsPart) { writer.GetPartLoadMethods(element, className, ref delimiter); } }
public static string GetSimpleType(this OpenXmlGeneratorServices context, QName qname, bool isList) { var type = context.GetSimpleTypeInternal(qname); return(isList ? $"ListValue<{type}>" : type); }
public static void WriteParticle(this IndentedTextWriter writer, OpenXmlGeneratorServices services, SchemaType containingType, Particle particle) { writer.WriteItemNode(services, containingType, particle); }