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>&lt;{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,
            });
        }
Exemple #2
0
    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}");
    }
Exemple #3
0
    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);
            }
        }
Exemple #6
0
    public static string GetSimpleType(this OpenXmlGeneratorServices context, QName qname, bool isList)
    {
        var type = context.GetSimpleTypeInternal(qname);

        return(isList ? $"ListValue<{type}>" : type);
    }
Exemple #7
0
 public static void WriteParticle(this IndentedTextWriter writer, OpenXmlGeneratorServices services, SchemaType containingType, Particle particle)
 {
     writer.WriteItemNode(services, containingType, particle);
 }