/// <summary> /// Exports to C# /// </summary> /// <param name="Output">C# Output.</param> /// <param name="State">C# export state.</param> /// <param name="Indent">Indentation</param> /// <param name="Pass">Export pass</param> public override void ExportCSharp(StringBuilder Output, CSharpExportState State, int Indent, CSharpExportPass Pass) { if (Pass == CSharpExportPass.Explicit && !(this.body is null)) { if (!(this.body.Imports is null)) { foreach (Asn1Import Import in this.body.Imports) { if (string.IsNullOrEmpty(Import.Module)) { continue; } Asn1Document ImportedDocument; if (State.Settings.ContainsCode(Import.Module)) { ImportedDocument = State.Settings.GetDocument(Import.Module); } else { ImportedDocument = Import.LoadDocument(); string CSharp = ImportedDocument.ExportCSharp(State.Settings); State.Settings.AddCode(Import.Module, CSharp, ImportedDocument); } Output.Append("using "); Output.Append(State.Settings.Namespace(Import.Module)); Output.AppendLine(";"); } Output.AppendLine(); } else { Output.AppendLine(); } Output.Append(Tabs(Indent)); Output.Append("namespace "); Output.Append(State.Settings.BaseNamespace); Output.Append('.'); Output.AppendLine(Asn1Node.ToCSharp(this.identifier)); Output.Append(Tabs(Indent)); Output.AppendLine("{"); Indent++; if (!(this.body.Imports is null)) { foreach (Asn1Import Import in this.body.Imports) { if (string.IsNullOrEmpty(Import.Module)) { continue; } Asn1Document ImportedDocument = State.Settings.GetDocument(Import.Module); Asn1Node[] Nodes = ImportedDocument.Root?.Body?.Items; if (!(Nodes is null)) { foreach (Asn1Node Node in Nodes) { if (Node is Asn1TypeDefinition TypeDef && !TypeDef.ConstructedType && Array.IndexOf <string>(Import.Identifiers, TypeDef.Name) >= 0) { TypeDef.ExportCSharp(Output, State, Indent, CSharpExportPass.Preprocess); } } } } } this.body.ExportCSharp(Output, State, Indent, CSharpExportPass.Preprocess); State.ClosePending(Output); this.body.ExportCSharp(Output, State, Indent, CSharpExportPass.Variables); State.ClosePending(Output); this.body.ExportCSharp(Output, State, Indent, CSharpExportPass.Explicit); State.ClosePending(Output); Indent--; Output.Append(Tabs(Indent)); Output.AppendLine("}"); }
/// <summary> /// Exports to C# /// </summary> /// <param name="Output">C# Output.</param> /// <param name="State">C# export state.</param> /// <param name="Indent">Indentation</param> /// <param name="Pass">Export pass</param> public override void ExportCSharp(StringBuilder Output, CSharpExportState State, int Indent, CSharpExportPass Pass) { if (Pass == CSharpExportPass.Explicit && !this.TypeDefinition) { Output.Append(ToCSharp(this.Name)); Output.Append("Choice"); } else { if (Pass == CSharpExportPass.Implicit) { State.ClosePending(Output); foreach (Asn1Node Node in this.Nodes) Node.ExportCSharp(Output, State, Indent, Pass); Output.Append(Tabs(Indent)); Output.Append("public enum "); Output.Append(ToCSharp(this.Name)); Output.AppendLine("Enum"); Output.Append(Tabs(Indent)); Output.Append("{"); Indent++; bool First = true; foreach (Asn1Node Node in this.Nodes) { if (Node is Asn1FieldDefinition Field) { if (First) First = false; else Output.Append(','); Output.AppendLine(); Output.Append(Tabs(Indent)); Output.Append(Field.Name); } } Indent--; Output.AppendLine(); Output.Append(Tabs(Indent)); Output.AppendLine("}"); Output.AppendLine(); } if (Pass == CSharpExportPass.Implicit || Pass == CSharpExportPass.Explicit) { Output.Append(Tabs(Indent)); Output.Append("public class "); Output.Append(ToCSharp(this.Name)); if (!this.TypeDefinition) Output.Append("Choice"); Output.AppendLine(); Output.Append(Tabs(Indent)); Output.AppendLine("{"); Indent++; Output.Append(Tabs(Indent)); Output.Append(ToCSharp(this.Name)); if (!this.TypeDefinition) Output.Append("Enum"); Output.AppendLine(" _choice;"); foreach (Asn1Node Node in this.Nodes) Node.ExportCSharp(Output, State, Indent, CSharpExportPass.Explicit); Indent--; Output.Append(Tabs(Indent)); Output.AppendLine("}"); Output.AppendLine(); } } }
/// <summary> /// Exports to C# /// </summary> /// <param name="Output">C# Output.</param> /// <param name="State">C# export state.</param> /// <param name="Indent">Indentation</param> /// <param name="Pass">Export pass</param> public override void ExportCSharp(StringBuilder Output, CSharpExportState State, int Indent, CSharpExportPass Pass) { // Don't export macro. }