private void WritePinObjects(UdnWriter Writer, IEnumerable <APIActionPin> Pins) { foreach (var Pin in Pins) { Pin.WriteObject(Writer, CompactName == null); } }
private void WriteDefinition(UdnWriter Writer) { List <string> Lines = new List <string>(); Lines.Add(String.Format("enum {0}", ShortName.StartsWith("@")? "" : ShortName)); Lines.Add(Utility.EscapeText("{")); if (Values.Count > 0) { int NamePadding = Values.Max(x => x.Name.Length) + 4; foreach (APIEnumValue Value in Values) { string ValueLine = UdnWriter.TabSpaces + Value.Name; if (Value.Initializer != null) { for (int Idx = 0; Idx < NamePadding - Value.Name.Length; Idx++) { ValueLine += UdnWriter.Space; } ValueLine += Value.Initializer; } Lines.Add(ValueLine + ","); } } Lines.Add(Utility.EscapeText("}")); WriteNestedSimpleCode(Writer, Lines); }
private void WritePins(UdnWriter Writer, IEnumerable <APIActionPin> Pins) { foreach (var Pin in Pins) { Pin.WritePin(Writer); } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(AnnotateAnonymousNames(Name), PageCrumbs, BriefDescription); // Write the syntax Writer.EnterSection("syntax", "Syntax"); WriteDefinition(Writer); Writer.LeaveSection(); // Write the enum values Writer.WriteListSection("values", "Values", "Name", "Description", Values.Select(x => x.GetListItem())); // Write the description if (!Utility.IsNullOrWhitespace(FullDescription)) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription); Writer.LeaveSection(); } // Write the references WriteReferencesSection(Writer, Entity); } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, BriefDescription); // Write the warnings if (Warnings.Count > 0) { Writer.EnterTag("[REGION:warning]"); Writer.WriteLine("**Warnings**"); foreach (string Warning in Warnings) { Writer.WriteLine("* " + Warning); } Writer.LeaveTag("[/REGION]"); } // Write the syntax Writer.EnterSection("syntax", "Syntax"); WriteDefinition(Writer); Writer.LeaveSection(); // Write the description if (!Utility.IsNullOrWhitespace(FullDescription)) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription); Writer.LeaveSection(); } } }
public void Write(UdnWriter Writer, int Depth) { if (!IsEmpty) { // CSS region for indenting Writer.EnterRegion("module-sections-list"); // Find all the modules in this category if(Modules.Count > 0) { Writer.WriteList(Modules.OrderBy(x => x.Name).Select(x => x.GetListItem())); } // Write all the subcategories foreach (APIModuleCategory Category in Categories.OrderBy(x => x.Name)) { Writer.WriteHeading(Depth, Category.Name); Writer.WriteLine(); Category.Write(Writer, Depth + 1); } // End of CSS region Writer.LeaveRegion(); } }
public override void WritePage(UdnManifest Manifest, string Path) { using (UdnWriter Writer = new UdnWriter(Path)) { Writer.WritePageHeader(Name, PageCrumbs, BriefDescription); // Write the type Writer.EnterSection("type", "Type"); WriteNestedSimpleCode(Writer, new List <string> { "typedef " + Type + " " + Name }); Writer.LeaveSection(); // Write the description if (!Utility.IsNullOrWhitespace(FullDescription)) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription); Writer.LeaveSection(); } // Write the references WriteReferencesSection(Writer, Entity); } }
public void Write(UdnWriter Writer, int Depth) { if (!IsEmpty) { // CSS region for indenting Writer.EnterRegion("module-sections-list"); // Find all the modules in this category if (Modules.Count > 0) { Writer.WriteList(Modules.OrderBy(x => x.Name).Select(x => x.GetListItem())); } // Write all the subcategories foreach (APIModuleCategory Category in Categories.OrderBy(x => x.Name)) { Writer.WriteHeading(Depth, Category.Name); Writer.WriteLine(); Category.Write(Writer, Depth + 1); } // End of CSS region Writer.LeaveRegion(); } }
public void WriteListSection(UdnWriter Writer, string SectionId, string SectionTitle, Dictionary <string, string> Descriptions) { if (NodeList.Count > 0) { // Create the list items List <MetadataListItem> ListItems = new List <MetadataListItem>(); CreateListItems(NodeList, APIDocTool.Icons.GetMetadataIconsForType(Type), Descriptions, false, ListItems); // Enter the section and list Writer.EnterSection(SectionId, SectionTitle); Writer.WriteObject("MetadataListHead"); // Write the items foreach (MetadataListItem ListItem in ListItems) { Writer.EnterObject("MetadataListItem"); Writer.WriteParam("icon", ListItem.Icon); Writer.WriteParam("name", ListItem.Name); Writer.EnterParam("value"); for (int Idx = 0; Idx < ListItem.Values.Count; Idx++) { Writer.WriteLine("{0}{1} ", ListItem.Values[Idx], (Idx + 1 < ListItem.Values.Count) ? ", " : ""); } Writer.LeaveParam(); Writer.WriteParam("desc", ListItem.Description); Writer.LeaveObject(); } // Leave the section and list Writer.WriteObject("MetadataListTail"); Writer.LeaveSection(); } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, BriefDescription); Writer.EnterTag("[OBJECT:Constant]"); Writer.EnterTag("[PARAM:briefdesc]"); if (!Utility.IsNullOrWhitespace(BriefDescription)) { Writer.WriteLine(BriefDescription); } Writer.LeaveTag("[/PARAM]"); // Write the syntax Writer.EnterTag("[PARAM:syntax]"); Writer.EnterSection("syntax", "Syntax"); WriteDefinition(Writer); Writer.LeaveSection(); Writer.LeaveTag("[/PARAM]"); // Write the description Writer.EnterTag("[PARAM:description]"); if (!Utility.IsNullOrWhitespace(FullDescription) && FullDescription != BriefDescription) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription); Writer.LeaveSection(); } Writer.LeaveTag("[/PARAM]"); Writer.LeaveTag("[/OBJECT]"); } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { if (bIsRootCategory) { Writer.WritePageHeader("Unreal Engine Blueprint API Reference", PageCrumbs, "Unreal Engine Blueprint API Reference"); Writer.WriteHeading(2, "Disclaimer"); Writer.WriteLine("The Blueprint API reference is an early work in progress, and some information may be missing or out of date. It strives to reflect all available nodes, but it is not guaranteed to be an exhaustive list."); Writer.WriteLine("For tutorials, walkthroughs and detailed guides to using Blueprints in UE4, please see the [Introduction to Blueprints](http://docs.unrealengine.com/latest/INT/Engine/Blueprints/GettingStarted/index.html) on the web."); } else { Writer.WritePageHeader(Name, PageCrumbs, Name); } if (Actions.Count > 0) { Writer.WriteHeading(2, "Actions"); Writer.WriteList(Actions.OrderBy(x => x.Name).Select(x => x.GetListItem())); } if (SubCategories.Count > 0) { Writer.WriteHeading(2, "Categories"); Writer.WriteList(SubCategories.OrderBy(x => x.Key).Select(x => x.Value.GetListItem())); } } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, Name); } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader("Unreal Engine API Reference", PageCrumbs, "Unreal Engine API Reference"); Writer.WriteHeading(2, "Disclaimer"); Writer.WriteLine("The API reference is an early work in progress, and some information may be missing or out of date. It serves mainly as a low level index of Engine classes and functions."); Writer.WriteLine("For tutorials, walkthroughs and detailed guides to programming with Unreal, please see the [Unreal Engine Programming](http://docs.unrealengine.com/latest/INT/Programming/index.html) home on the web."); Writer.WriteLine(); Writer.WriteLine("To explore the API from some of the most frequently encountered Unreal concepts and types, see the API __[getting started](" + GettingStarted.LinkPath + ")__ page."); Writer.WriteHeading(2, "Contents"); Writer.EnterRegion("memberindexlinks"); Writer.WriteLine("[Getting started]({0}) · [All constants]({1}) · [All functions]({2}) · [All enums]({3}) · [All classes]({4}) · [Class hierarchy]({5})", GettingStarted.LinkPath, ConstantIndex.LinkPath, FunctionIndex.LinkPath, EnumIndex.LinkPath, RecordIndex.LinkPath, RecordHierarchy.LinkPath); Writer.LeaveRegion(); foreach (APIModuleIndex ChildModuleIndex in ChildModuleIndexes) { Writer.WriteHeading(2, ChildModuleIndex.Name); Writer.EnterRegion("modules-list"); ChildModuleIndex.WriteModuleList(Writer, 3); Writer.LeaveRegion(); } Writer.WriteLine("<br>"); } }
private void WriteDefinition(UdnWriter Writer) { List <string> Lines = new List <string>(); if (MetadataDirective != null) { Lines.AddRange(MetadataDirective.ToMarkdown()); } StringBuilder Definition = new StringBuilder(); if (IsStatic) { Definition.Append("static "); } if (IsMutable) { Definition.Append("mutable "); } Definition.Append(Type + " " + Name); if (Bitfield != "") { Definition.Append(": " + Bitfield); } if (ArgsString != "") { Definition.Append(ArgsString); } Definition.Append(" "); Lines.Add(Definition.ToString()); WriteNestedSimpleCode(Writer, Lines); }
private void WriteDefinition(UdnWriter Writer) { List <string> Lines = new List <string>(); if (MetadataDirective != null) { Lines.AddRange(MetadataDirective.ToMarkdown()); } if (TemplateSignature != null) { Lines.Add(TemplateSignature); } if (BaseDefinitions.Count == 0) { Lines.Add(Definition); } else if (BaseDefinitions.Count == 1) { Lines.Add(Definition + " : " + BaseDefinitions[0]); } else { Lines.Add(Definition + " :"); for (int Idx = 0; Idx < BaseDefinitions.Count; Idx++) { Lines.Add(UdnWriter.TabSpaces + BaseDefinitions[Idx] + ((Idx < BaseDefinitions.Count - 1)? "," : "")); } } WriteNestedSimpleCode(Writer, Lines); }
public void WriteNestedSimpleCode(UdnWriter Writer, List <string> Lines) { Writer.EnterTag("[REGION:simplecode_api]"); string Prefix = ""; // Write the namespace introducers int LastScope = 0; for (int NextScope = Name.IndexOf("::"); NextScope != -1; NextScope = Name.IndexOf("::", NextScope + 2)) { string Namespace = Name.Substring(LastScope, NextScope - LastScope); Writer.WriteLine(Prefix + "namespace " + Namespace + " "); Writer.WriteLine(Prefix + Utility.EscapeText("{") + " "); Prefix += UdnWriter.TabSpaces; LastScope = NextScope + 2; } // Write the body foreach (string Line in Lines) { Writer.WriteLine(Prefix + Line.Replace('\r', ' ').Replace('\n', ' ').Trim() + " "); } // Write the closing braces while (Prefix.Length > 0) { Prefix = Prefix.Substring(0, Prefix.Length - UdnWriter.TabSpaces.Length); Writer.WriteLine(Prefix + Utility.EscapeText("}") + " "); } Writer.LeaveTag("[/REGION]"); }
public void WriteSyntax(UdnWriter Writer) { List <string> Lines = new List <string>(); Lines.Add(String.Format("{0} {1}", Entity.Node.Attributes["kind"].Value, Entity.Name)); Lines.Add("("); using (XmlNodeList MemberNodeList = Entity.Node.SelectNodes("sectiondef/memberdef")) { foreach (XmlNode MemberNode in MemberNodeList) { if (MemberNode.Attributes["kind"].Value == "variable") { Lines.Add(UdnWriter.TabSpaces + String.Format("{0} {1};", ConvertToMarkdown(MemberNode.SelectSingleNode("type")), MemberNode.SelectSingleNode("name").InnerText)); } else if (MemberNode.Attributes["kind"].Value == "function") { Lines.Add(UdnWriter.TabSpaces); Lines.Add(UdnWriter.TabSpaces + "// " + ConvertToMarkdown(MemberNode.SelectSingleNode("briefdescription")).Replace('\r', ' ').Replace('\n', ' ').Trim()); Lines.Add(UdnWriter.TabSpaces + ConvertFunctionNodeToMarkdown(MemberNode)); } } } Lines.Add(")"); WriteNestedSimpleCode(Writer, Lines); }
public void WriteListItem(UdnWriter Writer) { bool OutputPage = ShouldOutputPage(); // Enter the object Writer.EnterObject(OutputPage? "VariableListItem" : "VariableListItemNoLink"); // Get all the icons List <Icon> Icons = new List <Icon>(); Icons.Add(APIDocTool.Icons.Variable[(int)Protection]); if (IsStatic) { Icons.Add(APIDocTool.Icons.StaticVariable); } if (MetadataDirective != null) { Icons.Add(APIDocTool.Icons.ReflectedVariable); Icons.AddRange(MetadataDirective.Icons); } Writer.WriteParam("icons", Icons); // Write the type Writer.WriteParam("type", AbbreviatedType); Writer.WriteParam("name", Name); if (OutputPage) { Writer.WriteParam("link", "[RELATIVE:" + LinkPath + "]"); } Writer.WriteParam("description", BriefDescription); // Leave the object Writer.LeaveObject(); }
public void WritePin(UdnWriter Writer) { Writer.EnterObject("ActionPinListItem"); Writer.EnterParam("icons"); var PinType = GetTypeText(); if (PinType == "exec") { Writer.WriteRegion("input_exec", ""); } else if (bIsArray) { Writer.WriteRegion("input_array " + PinType, ""); } else { Writer.WriteRegion("input_variable " + PinType, ""); } Writer.LeaveParam(); Writer.WriteParamLiteral("name", Name); Writer.WriteParamLiteral("type", TypeText); Writer.WriteParam("tooltip", Tooltip); Writer.WriteParamLiteral("id", GetId()); Writer.LeaveObject(); }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, Name); // Tooltip/description Writer.WriteLine(Tooltip); if (Pins != null && Pins.Count() > 0) { // Visualization of the node Writer.EnterRegion("graph"); Writer.EnterObject("BlueprintNode"); if (CompactName != null) { Writer.WriteParamLiteral("type", "compact"); Writer.WriteParamLiteral("title", CompactName); } else { Writer.WriteParamLiteral("type", NodeType); Writer.WriteParamLiteral("title", Name); } Writer.EnterParam("inputs"); WritePinObjects(Writer, Pins.Where(x => x.bInputPin)); Writer.LeaveParam(); Writer.EnterParam("outputs"); WritePinObjects(Writer, Pins.Where(x => !x.bInputPin && x.GetTypeText() != "delegate")); if (bShowAddPin) { Writer.EnterObject("BlueprintPin"); Writer.WriteParamLiteral("type", "addpin"); Writer.WriteParamLiteral("id", "AddPin"); Writer.WriteParamLiteral("title", "Add pin"); Writer.LeaveObject(); } Writer.LeaveParam(); Writer.LeaveObject(); Writer.LeaveRegion(); // Inputs Writer.EnterSection("inputs", "Inputs"); Writer.WriteObject("MemberIconListHeadBlank"); WritePins(Writer, Pins.Where(x => x.bInputPin)); Writer.WriteObject("MemberIconListTail"); Writer.LeaveSection(); // Outputs Writer.EnterSection("outputs", "Outputs"); Writer.WriteObject("MemberIconListHeadBlank"); WritePins(Writer, Pins.Where(x => !x.bInputPin)); Writer.WriteObject("MemberIconListTail"); Writer.LeaveSection(); } } }
public void WriteListItem(UdnWriter Writer, bool bWithType) { // Enter the object Writer.EnterObject(bWithType? "FunctionListItemWithType" : "FunctionListItem"); // Get all the icons List <Icon> ItemIcons = new List <Icon> { Icons.Function[(int)Protection] }; if (IsStatic) { ItemIcons.Add(Icons.StaticFunction); } if (IsVirtual) { ItemIcons.Add(Icons.VirtualFunction); } if (MetadataDirective != null) { ItemIcons.Add(Icons.ReflectedFunction); ItemIcons.AddRange(MetadataDirective.Icons); } Writer.WriteParam("icons", ItemIcons); // Write the return type Writer.WriteParam("type", Markdown.Truncate(ReturnType, 12, "...")); // Write the name if (Parameters.Count == 0) { Writer.WriteParam("name", Name + "()"); Writer.WriteParam("arguments", ""); } else { Writer.WriteParam("name", Name); Writer.EnterParam("arguments"); if (Parameters.Count > 0) { Writer.WriteEscapedLine("( "); for (int Idx = 0; Idx < Parameters.Count; Idx++) { string Separator = (Idx + 1 == Parameters.Count) ? "" : ","; string Definition = Markdown.Truncate(APIMember.RemoveElaborations(Parameters[Idx].Definition), 35, "..."); Writer.WriteLine(UdnWriter.TabSpaces + Definition + Separator + " "); } Writer.WriteEscapedLine(") "); } Writer.LeaveParam(); } // Write the other parameters Writer.WriteParam("link", "[RELATIVE:" + LinkPath + "]"); Writer.WriteParam("description", BriefDescription); // Leave the object Writer.LeaveObject(); }
public static void WriteList(UdnWriter Writer, IEnumerable <APIVariable> Variables) { Writer.WriteObject("VariableListHead"); foreach (APIVariable Variable in Variables) { Variable.WriteListItem(Writer); } Writer.WriteObject("VariableListTail"); }
public static void WriteList(UdnWriter Writer, IEnumerable <APIFunction> Functions) { Writer.WriteObject("FunctionListHead"); foreach (APIFunction Function in Functions) { Function.WriteListItem(Writer); } Writer.WriteObject("FunctionListTail"); }
public static void WriteList(UdnWriter Writer, IEnumerable <APIFunction> Functions, bool bWithType) { Writer.WriteObject(bWithType? "FunctionListHeadWithType" : "FunctionListHead"); foreach (APIFunction Function in Functions) { Function.WriteListItem(Writer, bWithType); } Writer.WriteObject("FunctionListTail"); }
private void WriteSourceSection(UdnWriter Writer) { if (Entity.BodyFile != null) { DoxygenSourceFile SourceFile = Entity.Module.FindSourceFile(Entity.BodyFile); if (SourceFile != null) { int BodyStart = Math.Min(Math.Max(Entity.BodyStart - 1, 0), SourceFile.Lines.Count - 1); int BodyEnd = Math.Min(Math.Max(Entity.BodyEnd, BodyStart), SourceFile.Lines.Count); if (BodyEnd > BodyStart) { Writer.EnterSection("source", "Source"); Writer.EnterRegion("simplecode"); List <string> Lines = new List <string>(); int MinPrefix = int.MaxValue; for (int LineIdx = BodyStart; LineIdx < BodyEnd; LineIdx++) { XmlNode Node = SourceFile.Lines[LineIdx]; string MarkdownLine = (Node == null)? "" : Markdown.ParseXmlCodeLine(Node, ResolveDoxygenLink); int Prefix = 0; while (Prefix < MarkdownLine.Length && MarkdownLine[Prefix] == ' ') { Prefix++; } if (Prefix < MarkdownLine.Length && Prefix < MinPrefix) { MinPrefix = Prefix; } Lines.Add(MarkdownLine); } for (int Idx = 0; Idx < Lines.Count; Idx++) { int TextIdx = Math.Min(MinPrefix, Lines[Idx].Length); if (TextIdx == Lines[Idx].Length) { Writer.Write(" "); } while (TextIdx < Lines[Idx].Length && Lines[Idx][TextIdx] == ' ') { Writer.Write(" "); TextIdx++; } Writer.WriteLine(Lines[Idx].Substring(TextIdx) + " "); } Writer.LeaveRegion(); Writer.LeaveSection(); } } } }
public void WriteIcons(UdnWriter Writer) { List <Icon> IconList = APIDocTool.Icons.GetMetadataIcons(Type, NodeList.Select(x => x.TagText)); foreach (Icon Icon in IconList) { Writer.WriteIcon(Icon); } }
public static void WriteListSection(UdnWriter Writer, string SectionId, string SectionTitle, IEnumerable<APIFilter> Categories) { APIFilter[] CategoryArray = Categories.ToArray(); if (CategoryArray.Length > 0) { Writer.EnterSection(SectionId, SectionTitle); Writer.WriteFilterList(CategoryArray.Select(x => x.GetFilterListItem()).ToArray()); Writer.LeaveSection(); } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, "Module Index"); Writer.EnterRegion("modules-list"); WriteModuleList(Writer, 2); Writer.LeaveRegion(); } }
public static void WriteListSection(UdnWriter Writer, string SectionId, string SectionTitle, IEnumerable <APIFilter> Categories) { APIFilter[] CategoryArray = Categories.ToArray(); if (CategoryArray.Length > 0) { Writer.EnterSection(SectionId, SectionTitle); Writer.WriteFilterList(CategoryArray.Select(x => x.GetFilterListItem()).ToArray()); Writer.LeaveSection(); } }
private static void WriteRelatedClass(UdnWriter Writer, KeyValuePair <XmlNode, APIRecord> Pair) { if (Pair.Value == null) { Writer.WriteLine("{0}", Pair.Key.InnerText); } else { Writer.WriteLine("[{0}]({1}) ", Pair.Key.InnerText, Pair.Value.LinkPath); } }
protected override void WriteDefinition(UdnWriter Writer) { List <string> Lines = new List <string>(); Lines.Add("enum"); Lines.Add(Utility.EscapeText("{")); Lines.Add(UdnWriter.TabSpaces + Name + " " + Initializer); Lines.Add(Utility.EscapeText("}")); WriteNestedSimpleCode(Writer, Lines); }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader("Getting started with the Unreal Engine API", PageCrumbs, "Getting started with the Unreal Engine API"); Writer.WriteHeading(2, "Orientation"); Writer.WriteLine("Games, programs and the Unreal Editor are all *targets* built by UnrealBuildTool. Each target is compiled from C++ *modules*, each implementing a particular area of functionality. Your game is a target, and your game code is implemented in one or more modules."); Writer.WriteLine(); Writer.WriteLine("Code in each module can use other modules by referencing them in their *build rules*. Build rules for each module are given by C# scripts with the .build.cs extension. *Target rules* are given by C# scripts with the .target.cs extension."); Writer.WriteLine(); Writer.WriteLine(Manifest, "Modules supplied with the Unreal Engine are divided into three categories; the {Runtime|ModuleIndex:Runtime Modules}, functionality for the {Editor|ModuleIndex:Editor Modules}, and {Developer|ModuleIndex:Developer Modules} utilities."); Writer.WriteLine(); Writer.WriteLine(Manifest, "Most gameplay programming just uses runtime modules, and the three most commonly encountered are {Core|Filter:Core}, {CoreUObject|Filter:CoreUObject} and {Engine|Filter:Engine}."); Writer.WriteLine(); Writer.WriteHeading(2, "Core"); Writer.WriteLine(Manifest, "The **{Core|Filter:Core}** module provides a common framework for Unreal modules to communicate; a standard set of types, a {math library|Filter:Core.Math}, a {container|Filter:Core.Containers} library, and a lot of the hardware abstraction that allows Unreal to run on so many platforms."); Writer.WriteLine(Manifest, "Some common topics are listed below; full documentation is available {here|Filter:Core}."); Writer.WriteLine(); List <UdnListItem> CoreItems = new List <UdnListItem>(); CoreItems.Add(new UdnListItem("Basic types:", Manifest.FormatString("bool · float/double · {int8}/{int16}/{int32}/{int64} · {uint8}/{uint16}/{uint32}/{uint64} · {ANSICHAR} · {TCHAR} · {FString}"), null)); CoreItems.Add(new UdnListItem("Math:", Manifest.FormatString("{FMath} · {FVector} · {FRotator} · {FTransform} · {FMatrix} · {More...|Filter:Core.Math}"), null)); CoreItems.Add(new UdnListItem("Containers:", Manifest.FormatString("{TArray} · {TList} · {TMap} · {More...|Filter:Core.Containers}"), null)); CoreItems.Add(new UdnListItem("Other:", Manifest.FormatString("{FName} · {FArchive} · {FOutputDevice}"), null)); Writer.WriteList(CoreItems); Writer.WriteHeading(2, "CoreUObject"); Writer.WriteLine(Manifest, "The **{CoreUObject|Filter:CoreUObject}** module defines UObject, the base class for all managed objects in Unreal. Managed objects are key to integrating with the editor, for serialization, network replication, and runtime type information. UObject derived classes are garbage collected."); Writer.WriteLine(Manifest, "Some common topics are listed below; full documentation is available {here|Filter:CoreUObject}."); Writer.WriteLine(); List <UdnListItem> CoreUObjectItems = new List <UdnListItem>(); CoreUObjectItems.Add(new UdnListItem("Classes:", Manifest.FormatString("{UObject} · {UClass} · {UProperty} · {UPackage}"), null)); CoreUObjectItems.Add(new UdnListItem("Functions:", Manifest.FormatString("{ConstructObject} · {FindObject} · {Cast} · {CastChecked}"), null)); Writer.WriteList(CoreUObjectItems); Writer.WriteHeading(2, "Engine"); Writer.WriteLine(Manifest, "The **{Engine|Filter:Engine}** module contains functionality you’d associate with a game. The game world, actors, characters, physics and special effects are all defined here."); Writer.WriteLine(Manifest, "Some common topics are listed below; full documentation is available {here|Filter:Engine}."); Writer.WriteLine(); List <UdnListItem> EngineItems = new List <UdnListItem>(); EngineItems.Add(new UdnListItem("Actors:", Manifest.FormatString("{AActor} · {AVolume} · {AGameMode} · {AHUD} · {More...|Hierarchy:AActor}"), null)); EngineItems.Add(new UdnListItem("Pawns:", Manifest.FormatString("{APawn} · {ACharacter} · {AWheeledVehicle}"), null)); EngineItems.Add(new UdnListItem("Controllers:", Manifest.FormatString("{AController} · {AAIController} · {APlayerController}"), null)); EngineItems.Add(new UdnListItem("Components:", Manifest.FormatString("{UActorComponent} · {UBrainComponent} · {UInputComponent} · {USkeletalMeshComponent} · {UParticleSystemComponent} · {More...|Hierarchy:UActorComponent}"), null)); EngineItems.Add(new UdnListItem("Gameplay:", Manifest.FormatString("{UPlayer} · {ULocalPlayer} · {UWorld} · {ULevel}"), null)); EngineItems.Add(new UdnListItem("Assets:", Manifest.FormatString("{UTexture} · {UMaterial} · {UStaticMesh} · {USkeletalMesh} · {UParticleSystem}"), null)); Writer.WriteList(EngineItems); } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, "Overload list"); Writer.EnterTag("[REGION:members]"); APIFunction.WriteList(Writer, Overloads, Overloads.First().FunctionType != APIFunctionType.Constructor); Writer.LeaveTag("[/REGION]"); } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader("Getting started with the Unreal Engine API", PageCrumbs, "Getting started with the Unreal Engine API"); Writer.WriteHeading(2, "Orientation"); Writer.WriteLine("Games, programs and the Unreal Editor are all *targets* built by UnrealBuildTool. Each target is compiled from C++ *modules*, each implementing a particular area of functionality. Your game is a target, and your game code is implemented in one or more modules."); Writer.WriteLine(); Writer.WriteLine("Code in each module can use other modules by referencing them in their *build rules*. Build rules for each module are given by C# scripts with the .build.cs extension. *Target rules* are given by C# scripts with the .target.cs extension."); Writer.WriteLine(); Writer.WriteLine(Manifest, "Modules supplied with the Unreal Engine are divided into three categories; the {Runtime|ModuleIndex:Runtime Modules}, functionality for the {Editor|ModuleIndex:Editor Modules}, and {Developer|ModuleIndex:Developer Modules} utilities."); Writer.WriteLine(); Writer.WriteLine(Manifest, "Most gameplay programming just uses runtime modules, and the three most commonly encountered are {Core|Filter:Core}, {CoreUObject|Filter:CoreUObject} and {Engine|Filter:Engine}."); Writer.WriteLine(); Writer.WriteHeading(2, "Core"); Writer.WriteLine(Manifest, "The **{Core|Filter:Core}** module provides a common framework for Unreal modules to communicate; a standard set of types, a {math library|Filter:Core.Math}, a {container|Filter:Core.Containers} library, and a lot of the hardware abstraction that allows Unreal to run on so many platforms."); Writer.WriteLine(Manifest, "Some common topics are listed below; full documentation is available {here|Filter:Core}."); Writer.WriteLine(); List<UdnListItem> CoreItems = new List<UdnListItem>(); CoreItems.Add(new UdnListItem("Basic types:", Manifest.FormatString("bool · float/double · {int8}/{int16}/{int32}/{int64} · {uint8}/{uint16}/{uint32}/{uint64} · {ANSICHAR} · {TCHAR} · {FString}"), null)); CoreItems.Add(new UdnListItem("Math:", Manifest.FormatString("{FMath} · {FVector} · {FRotator} · {FTransform} · {FMatrix} · {More...|Filter:Core.Math}"), null)); CoreItems.Add(new UdnListItem("Containers:", Manifest.FormatString("{TArray} · {TList} · {TMap} · {More...|Filter:Core.Containers}"), null)); CoreItems.Add(new UdnListItem("Other:", Manifest.FormatString("{FName} · {FArchive} · {FOutputDevice}"), null)); Writer.WriteList(CoreItems); Writer.WriteHeading(2, "CoreUObject"); Writer.WriteLine(Manifest, "The **{CoreUObject|Filter:CoreUObject}** module defines UObject, the base class for all managed objects in Unreal. Managed objects are key to integrating with the editor, for serialization, network replication, and runtime type information. UObject derived classes are garbage collected."); Writer.WriteLine(Manifest, "Some common topics are listed below; full documentation is available {here|Filter:CoreUObject}."); Writer.WriteLine(); List<UdnListItem> CoreUObjectItems = new List<UdnListItem>(); CoreUObjectItems.Add(new UdnListItem("Classes:", Manifest.FormatString("{UObject} · {UClass} · {UProperty} · {UPackage}"), null)); CoreUObjectItems.Add(new UdnListItem("Functions:", Manifest.FormatString("{ConstructObject} · {FindObject} · {Cast} · {CastChecked}"), null)); Writer.WriteList(CoreUObjectItems); Writer.WriteHeading(2, "Engine"); Writer.WriteLine(Manifest, "The **{Engine|Filter:Engine}** module contains functionality you’d associate with a game. The game world, actors, characters, physics and special effects are all defined here."); Writer.WriteLine(Manifest, "Some common topics are listed below; full documentation is available {here|Filter:Engine}."); Writer.WriteLine(); List<UdnListItem> EngineItems = new List<UdnListItem>(); EngineItems.Add(new UdnListItem("Actors:", Manifest.FormatString("{AActor} · {AVolume} · {AGameMode} · {AHUD} · {More...|Hierarchy:AActor}"), null)); EngineItems.Add(new UdnListItem("Pawns:", Manifest.FormatString("{APawn} · {ACharacter} · {AWheeledVehicle}"), null)); EngineItems.Add(new UdnListItem("Controllers:", Manifest.FormatString("{AController} · {AAIController} · {APlayerController}"), null)); EngineItems.Add(new UdnListItem("Components:", Manifest.FormatString("{UActorComponent} · {UBrainComponent} · {UInputComponent} · {USkeletalMeshComponent} · {UParticleSystemComponent} · {More...|Hierarchy:UActorComponent}"), null)); EngineItems.Add(new UdnListItem("Gameplay:", Manifest.FormatString("{UPlayer} · {ULocalPlayer} · {UWorld} · {ULevel}"), null)); EngineItems.Add(new UdnListItem("Assets:", Manifest.FormatString("{UTexture} · {UMaterial} · {UStaticMesh} · {USkeletalMesh} · {UParticleSystem}"), null)); Writer.WriteList(EngineItems); } }
public static void WriteHierarchy(UdnWriter Writer, APIHierarchyNode RootNode, string Id) { Writer.WriteLine("<table class=\"{0}\" cellspacing=\"0\" id=\"{1}\">", RootNode.bShowButton ? "hierarchy-table-collapsed" : "hierarchy-table", Id); for(int Idx = 0; Idx < RootNode.Children.Count; Idx++) { APIHierarchyNode Node = RootNode.Children[Idx]; string ChildId = String.Format("{0}_{1}", Id, Idx + 1); // Write the start of the row Writer.WriteLine("<tr>"); // Write the button or spacer Writer.EnterTag("<td class=\"hierarchy-button-cell\">"); if (Node.Children.Count == 0 || !Node.bShowButton) { Writer.WriteObject("HierarchySpacer"); } else { Writer.EnterObject("HierarchyButton"); Writer.WriteParamLiteral("id", ChildId); Writer.LeaveObject(); } Writer.LeaveTag("</td>"); // Write the label Writer.EnterTag("<td class=\"hierarchy-label-cell\">"); if (Node.LinkPath == null) { Writer.WriteObject("HierarchyLabel", "name", Node.Label); } else { Writer.WriteObject("HierarchyLabelLinked", "name", Node.Label, "link", "[RELATIVE:" + Node.LinkPath + "]"); } // Write the contents row if (Node.Children.Count > 0) { WriteHierarchy(Writer, Node, ChildId); } Writer.LeaveTag("</td>"); // Write the end of the row Writer.WriteLine("</tr>"); } Writer.WriteLine("</table>"); }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, Description); // Create an array of links for each letter string[] CategoryLinks = new string[Categories.Count]; for (int Idx = 0; Idx < Categories.Count; Idx++) { if (Categories[Idx].Entries.Count == 0) { CategoryLinks[Idx] = Categories[Idx].Name; } else { CategoryLinks[Idx] = String.Format("[{0}](#idx_{0})", Categories[Idx].Name); } } // Write the link section Writer.WriteLine("[REGION:memberindexlinks]"); Writer.WriteLine(String.Join(" · ", CategoryLinks)); Writer.WriteLine("[/REGION]"); // Write each letter for(int Idx = 0; Idx < Categories.Count; Idx++) { if (Categories[Idx].Entries.Count > 0) { Writer.WriteLine(); Writer.WriteLine("(#idx_{0})", Categories[Idx].Name); Writer.WriteHeading(2, Categories[Idx].Name); foreach (Entry Entry in Categories[Idx].Entries) { Writer.WriteLine("[REGION:memberindexitem]"); Writer.WriteLine("[{0}]({1})", Entry.Name, Entry.LinkPath); Writer.WriteLine("[/REGION]"); } } } } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, BriefDescription); // Write the syntax Writer.EnterSection("syntax", "Syntax"); WriteDefinition(Writer); Writer.LeaveSection(); // Write the description if (!Utility.IsNullOrWhitespace(FullDescription)) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription); Writer.LeaveSection(); } // Write the references WriteReferencesSection(Writer, Entity); } }
public override void WritePage(UdnManifest Manifest, string Path) { using (UdnWriter Writer = new UdnWriter(Path)) { Writer.WritePageHeader(Name, PageCrumbs, BriefDescription); // Write the type Writer.EnterSection("type", "Type"); WriteNestedSimpleCode(Writer, new List<string> { "typedef " + Type + " " + Name }); Writer.LeaveSection(); // Write the description if (!Utility.IsNullOrWhitespace(FullDescription)) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription); Writer.LeaveSection(); } // Write the references WriteReferencesSection(Writer, Entity); } }
public override void WritePage(UdnManifest Manifest, string Path) { using (UdnWriter Writer = new UdnWriter(Path)) { Writer.WritePageHeader(Name, PageCrumbs, BriefDescription); Writer.EnterTag("[OBJECT:Typedef]"); // Write the brief description Writer.EnterTag("[PARAM:briefdesc]"); if (!Utility.IsNullOrWhitespace(BriefDescription) && BriefDescription != FullDescription) { Writer.WriteLine(BriefDescription); } Writer.LeaveTag("[/PARAM]"); // Write the type Writer.EnterTag("[PARAM:type]"); Writer.EnterSection("type", "Type"); WriteNestedSimpleCode(Writer, new List<string> { "typedef " + Type + " " + Name }); Writer.LeaveSection(); Writer.LeaveTag("[/PARAM]"); // Write the description Writer.EnterTag("[PARAM:description]"); if (!Utility.IsNullOrWhitespace(FullDescription)) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription); Writer.LeaveSection(); } Writer.LeaveTag("[/PARAM]"); // Leave the object tag Writer.LeaveTag("[/OBJECT]"); } }
private void WriteDefinition(UdnWriter Writer) { List<string> Lines = new List<string>(); Lines.Add(String.Format("enum {0}", ShortName.StartsWith("@")? "" : ShortName)); Lines.Add(Utility.EscapeText("{")); if (Values.Count > 0) { int NamePadding = Values.Max(x => x.Name.Length) + 4; foreach (APIEnumValue Value in Values) { string ValueLine = UdnWriter.TabSpaces + Value.Name; if (Value.Initializer != null) { for (int Idx = 0; Idx < NamePadding - Value.Name.Length; Idx++) ValueLine += UdnWriter.Space; ValueLine += Value.Initializer; } Lines.Add(ValueLine + ","); } } Lines.Add(Utility.EscapeText("}")); WriteNestedSimpleCode(Writer, Lines); }
public void WriteSyntax(UdnWriter Writer) { List<string> Lines = new List<string>(); Lines.Add(String.Format("{0} {1}", Entity.Node.Attributes["kind"].Value, Entity.Name)); Lines.Add("("); using (XmlNodeList MemberNodeList = Entity.Node.SelectNodes("sectiondef/memberdef")) { foreach (XmlNode MemberNode in MemberNodeList) { if (MemberNode.Attributes["kind"].Value == "variable") { Lines.Add(UdnWriter.TabSpaces + String.Format("{0} {1};", ConvertToMarkdown(MemberNode.SelectSingleNode("type")), MemberNode.SelectSingleNode("name").InnerText)); } else if(MemberNode.Attributes["kind"].Value == "function") { Lines.Add(UdnWriter.TabSpaces); Lines.Add(UdnWriter.TabSpaces + "// " + ConvertToMarkdown(MemberNode.SelectSingleNode("briefdescription")).Replace('\r', ' ').Replace('\n', ' ').Trim()); Lines.Add(UdnWriter.TabSpaces + ConvertFunctionNodeToMarkdown(MemberNode)); } } } Lines.Add(")"); WriteNestedSimpleCode(Writer, Lines); }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, BriefDescription); // Write the warnings if (Warnings.Count > 0) { Writer.EnterTag("[REGION:warning]"); Writer.WriteLine("**Warnings**"); foreach (string Warning in Warnings) { Writer.WriteLine("* " + Warning); } Writer.LeaveTag("[/REGION]"); } // Write the syntax Writer.EnterSection("syntax", "Syntax"); WriteDefinition(Writer); Writer.LeaveSection(); // Write the description if (!Utility.IsNullOrWhitespace(FullDescription)) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription); Writer.LeaveSection(); } //Write code snippets WriteSnippetSection(Writer, SnippetText); } }
private void WriteIcons(UdnWriter Writer) { Writer.WriteIcon(Icons.Function[(int)Protection]); if (IsStatic) { Writer.WriteIcon(Icons.StaticFunction); } if (IsVirtual) { Writer.WriteIcon(Icons.VirtualFunction); } if (MetadataDirective != null) { Writer.WriteIcon(Icons.ReflectedFunction); MetadataDirective.WriteIcons(Writer); } }
private void WriteDefinition(UdnWriter Writer) { List<string> Lines = new List<string>(); if (MetadataDirective != null) { Lines.AddRange(MetadataDirective.ToMarkdown()); } StringBuilder Definition = new StringBuilder(); if (IsStatic) Definition.Append("static "); if (IsMutable) Definition.Append("mutable "); Definition.Append(Type + " " + Name); if (Bitfield != "") Definition.Append(": " + Bitfield); if (ArgsString != "") Definition.Append(ArgsString); Definition.Append(" "); Lines.Add(Definition.ToString()); WriteNestedSimpleCode(Writer, Lines); }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, Name); // Tooltip/description - Write this as interleaved text and notes foreach (TooltipLine TTL in TooltipData) { switch (TTL.Type) { case TooltipLine.LineType.Normal: Writer.WriteLine(TTL.Text); break; case TooltipLine.LineType.Note: Writer.EnterRegion("note"); Writer.WriteLine(TTL.Text); Writer.LeaveRegion(); break; default: //Error? Ignore this entry for now. break; } } if (Pins != null && Pins.Count() > 0) { // Visualization of the node Writer.EnterRegion("graph"); Writer.EnterObject("BlueprintNode"); if (CompactName != null) { Writer.WriteParamLiteral("type", "compact"); Writer.WriteParamLiteral("title", CompactName); } else { Writer.WriteParamLiteral("type", NodeType); Writer.WriteParamLiteral("title", Name); } Writer.EnterParam("inputs"); WritePinObjects(Writer, Pins.Where(x => x.bInputPin)); Writer.LeaveParam(); Writer.EnterParam("outputs"); WritePinObjects(Writer, Pins.Where(x => !x.bInputPin && x.GetTypeText() != "delegate")); if (bShowAddPin) { Writer.EnterObject("BlueprintPin"); Writer.WriteParamLiteral("type", "addpin"); Writer.WriteParamLiteral("id", "AddPin"); Writer.WriteParamLiteral("title", "Add pin"); Writer.LeaveObject(); } Writer.LeaveParam(); Writer.LeaveObject(); Writer.LeaveRegion(); // Inputs Writer.EnterSection("inputs", "Inputs"); Writer.WriteObject("MemberIconListHeadBlank"); WritePins(Writer, Pins.Where(x => x.bInputPin)); Writer.WriteObject("MemberIconListTail"); Writer.LeaveSection(); // Outputs Writer.EnterSection("outputs", "Outputs"); Writer.WriteObject("MemberIconListHeadBlank"); // TODO: Remove this hack and reinstate the one-line version once UE-16475 is resolved. bool bAlreadyWroteOutputDelegate = false; for (int i = 0; i < Pins.Count; ++i) { APIActionPin Pin = Pins[i]; if (!Pin.bInputPin) { if (Pin.GetTypeText() == "delegate") { if (bAlreadyWroteOutputDelegate) { continue; } bAlreadyWroteOutputDelegate = true; } Pin.WritePin(Writer); } } //WritePins(Writer, Pins.Where(x => !x.bInputPin)); Writer.WriteObject("MemberIconListTail"); Writer.LeaveSection(); } } }
private static void WriteRelatedClass(UdnWriter Writer, KeyValuePair<XmlNode, APIRecord> Pair) { if (Pair.Value == null) { Writer.WriteLine("{0}", Pair.Key.InnerText); } else { Writer.WriteLine("[{0}]({1}) ", Pair.Key.InnerText, Pair.Value.LinkPath); } }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(FullName, PageCrumbs, BriefDescription); // Write the warnings if (Warnings.Count > 0) { Writer.EnterTag("[REGION:warning]"); Writer.WriteLine("**Warnings**"); foreach (string Warning in Warnings) { Writer.WriteLine("* " + Warning); } Writer.LeaveTag("[/REGION]"); } // Write the virtual hierarchy if (HierarchyNode != null) { Writer.EnterSection("overrides", "Override Hierarchy"); Writer.EnterTag("[REGION:hierarchy]"); APIHierarchy.WriteHierarchy(Writer, HierarchyNode, "hrch"); Writer.LeaveTag("[/REGION]"); Writer.LeaveSection(); } // Write the syntax Writer.EnterSection("syntax", "Syntax"); WriteSyntax(Writer); Writer.LeaveSection(); // Write the description if (!Utility.IsNullOrWhitespace(FullDescription)) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription); Writer.LeaveSection(); } // Enter the body Writer.EnterRegion("syntax"); // Write the return type if(!Utility.IsNullOrWhitespace(ReturnDescription)) { Writer.EnterSection("returns", "Returns"); Writer.WriteLine(ReturnDescription); Writer.LeaveSection(); } // Write the parameters if (ParameterSummaries.Count > 0) { Writer.WriteListSection("params", "Parameters", "Parameter", "Description", ParameterSummaries.Select(x => x.GetListItem())); } // Leave the body Writer.LeaveRegion(); // Write the marshalling struct if (EventParameters != null) { Writer.EnterSection("marshalling", "Marshalling"); Writer.WriteLine("May be called as an event using [{0}]({1}) as parameter frame.", EventParameters.Name, EventParameters.LinkPath); Writer.LeaveSection(); } // Write the template specializations if(TemplateSpecializations.Count > 0) { Writer.EnterSection("specializations", "Specializations"); foreach (APIFunction Specialization in TemplateSpecializations) { Writer.WriteLine("[{0}]({1}) ", Specialization.Name, Specialization.LinkPath); } Writer.LeaveSection(); } //Write code snippets WriteSnippetSection(Writer, SnippetText); // Write the @see directives WriteSeeAlsoSection(Writer, SeeAlso); // Write the reference info WriteReferencesSection(Writer, Entity); } }
private void WritePinObjects(UdnWriter Writer, IEnumerable<APIActionPin> Pins) { foreach(var Pin in Pins) { Pin.WriteObject(Writer, CompactName == null); } }
public void WriteListItem(UdnWriter Writer) { bool OutputPage = ShouldOutputPage(); // Enter the object Writer.EnterObject(OutputPage? "VariableListItem" : "VariableListItemNoLink"); // Get all the icons List<Icon> Icons = new List<Icon>(); Icons.Add(APIDocTool.Icons.Variable[(int)Protection]); if (IsStatic) { Icons.Add(APIDocTool.Icons.StaticVariable); } if (MetadataDirective != null) { Icons.Add(APIDocTool.Icons.ReflectedVariable); Icons.AddRange(MetadataDirective.Icons); } Writer.WriteParam("icons", Icons); // Write the type Writer.WriteParam("type", AbbreviatedType); Writer.WriteParam("name", Name); if(OutputPage) { Writer.WriteParam("link", "[RELATIVE:" + LinkPath + "]"); } Writer.WriteParam("description", BriefDescription); // Leave the object Writer.LeaveObject(); }
public static bool WriteListSection(UdnWriter Writer, string SectionId, string SectionTitle, IEnumerable<APIVariable> Variables) { APIVariable[] VariableArray = Variables.ToArray(); if (VariableArray.Length > 0) { Writer.EnterSection(SectionId, SectionTitle); WriteList(Writer, Variables); Writer.LeaveSection(); return true; } return false; }
private void WriteSyntax(UdnWriter Writer) { List<string> Lines = new List<string>(); if(MetadataDirective != null) { Lines.AddRange(MetadataDirective.ToMarkdown()); } if (!Utility.IsNullOrWhitespace(TemplateSignature)) { Lines.Add(TemplateSignature); } string Keywords = ""; if (IsVirtual) { Keywords += "virtual "; } if (IsStatic) { Keywords += "static "; } if (Parameters.Count > 0) { Lines.Add(Keywords + ReturnType + " " + Utility.EscapeText(Name)); Lines.Add(Utility.EscapeText("(")); for (int Idx = 0; Idx < Parameters.Count; Idx++) { string Separator = (Idx + 1 == Parameters.Count) ? "" : ","; Lines.Add(UdnWriter.TabSpaces + Parameters[Idx].Definition + Separator); } Lines.Add(Utility.EscapeText(")")); } else { Lines.Add(Keywords + ReturnType + " " + Utility.EscapeText(Name + "()")); } WriteNestedSimpleCode(Writer, Lines); }
private void WriteDefinition(UdnWriter Writer) { List<string> Lines = new List<string>(); if (MetadataDirective != null) { Lines.AddRange(MetadataDirective.ToMarkdown()); } if (TemplateSignature != null) { Lines.Add(TemplateSignature); } if(BaseDefinitions.Count == 0) { Lines.Add(Definition); } else if(BaseDefinitions.Count == 1) { Lines.Add(Definition + " : " + BaseDefinitions[0]); } else { Lines.Add(Definition + " :"); for(int Idx = 0; Idx < BaseDefinitions.Count; Idx++) { Lines.Add(UdnWriter.TabSpaces + BaseDefinitions[Idx] + ((Idx < BaseDefinitions.Count - 1)? "," : "")); } } WriteNestedSimpleCode(Writer, Lines); }
public override void WritePage(UdnManifest Manifest, string OutputPath) { using (UdnWriter Writer = new UdnWriter(OutputPath)) { Writer.WritePageHeader(Name, PageCrumbs, BriefDescription); // Write the hierarchy if (HierarchyNode != null) { Writer.EnterSection("hierarchy", "Inheritance Hierarchy"); Writer.EnterTag("[REGION:hierarchy]"); APIHierarchy.WriteHierarchy(Writer, HierarchyNode, "hrch"); Writer.LeaveTag("[/REGION]"); Writer.LeaveSection(); } // Write the record definition if (!Utility.IsNullOrWhitespace(Definition)) { Writer.EnterSection("syntax", "Syntax"); WriteDefinition(Writer); Writer.LeaveSection(); } // Write the class description if (!Utility.IsNullOrWhitespace(FullDescription)) { Writer.EnterSection("description", "Remarks"); Writer.WriteLine(FullDescription.Replace("<", "<").Replace(">", ">")); Writer.LeaveSection(); } // Write the main body section Writer.EnterRegion("syntax"); // Build a list of all the functions List<APIFunction> AllFunctions = new List<APIFunction>(); AllFunctions.AddRange(Children.OfType<APIFunction>().Where(x => x.Protection != APIProtection.Private && !x.IsDeprecated())); AllFunctions.AddRange(Children.OfType<APIFunctionGroup>().SelectMany(x => x.Children.OfType<APIFunction>()).Where(x => x.Protection != APIProtection.Private && !x.IsDeprecated())); AllFunctions.Sort((x, y) => String.Compare(x.Name, y.Name)); // Write all the specializations if (TemplateSpecializations.Count > 0) { Writer.EnterSection("specializations", "Specializations"); foreach (APIRecord Specialization in TemplateSpecializations) { Writer.WriteLine("[{0}]({1}) ", Specialization.Name, Specialization.LinkPath); } Writer.LeaveSection(); } // Write all the variables APIVariable.WriteListSection(Writer, "variables", "Variables", Children.OfType<APIVariable>().Where(x => x.Protection != APIProtection.Private && !x.IsDeprecated()).OrderBy(x => x.Name)); // Write all the constructors if (!APIFunction.WriteListSection(Writer, "constructor", "Constructors", AllFunctions.Where(x => x.FunctionType == APIFunctionType.Constructor).OrderBy(x => x.LinkPath), false) && HasAnyPrivateFunction(Name)) { Writer.EnterSection("constructor", "Constructors"); Writer.WriteLine("No constructors are accessible with public or protected access."); Writer.LeaveSection(); } // Write all the destructors if (!APIFunction.WriteListSection(Writer, "destructor", "Destructors", AllFunctions.Where(x => x.FunctionType == APIFunctionType.Destructor), false) && HasAnyPrivateFunction("~" + Name)) { Writer.EnterSection("destructors", "Destructors"); Writer.WriteLine("No destructors are accessible with public or protected access."); Writer.LeaveSection(); } // Find a list of base classes List<APIRecord> AllBaseRecords = new List<APIRecord>(); FindAllBaseRecords(AllBaseRecords); // Build a list of functions for each base record List<APIFunction>[] AllBaseFunctions = AllBaseRecords.Select(x => new List<APIFunction>()).ToArray(); foreach(APIFunction Function in AllFunctions.Where(x =>x.FunctionType == APIFunctionType.Normal && !x.IsExecFunction())) { int BaseRecordIdx = AllBaseRecords.IndexOf(Function.GetBaseImplementation().FindParent<APIRecord>()); AllBaseFunctions[Math.Max(0, BaseRecordIdx)].Add(Function); } // Write the functions for (int Idx = 0; Idx < AllBaseFunctions.Length; Idx++) { List<APIFunction> BaseFunctions = AllBaseFunctions[Idx]; if (BaseFunctions.Count > 0) { string Id = String.Format("functions_{0}", Idx); string Label = (Idx == 0) ? "Functions" : String.Format("Overridden from {0}", AllBaseRecords[Idx].Name); APIFunction.WriteListSection(Writer, Id, Label, AllBaseFunctions[Idx], true); } } // Write the operator list APIFunction.WriteListSection(Writer, "operators", "Operators", AllFunctions.Where(x => x.FunctionType == APIFunctionType.UnaryOperator || x.FunctionType == APIFunctionType.BinaryOperator), true); // Write all the inner structures Writer.WriteListSection("classes", "Classes", "Name", "Description", Children.OfType<APIRecord>().Where(x => x.Protection != APIProtection.Private).OrderBy(x => x.Name).Select(x => x.GetListItem())); // Write all the enums Writer.WriteListSection("enums", "Enums", "Name", "Description", Children.OfType<APIEnum>().OrderBy(x => x.Name).Select(x => x.GetListItem())); // Write all the typedefs Writer.WriteListSection("typedefs", "Typedefs", "Name", "Description", Children.OfType<APITypeDef>().Select(x => x.GetListItem())); // Write all the constants Writer.WriteListSection("constants", "Constants", "Name", "Description", Children.OfType<APIConstant>().Select(x => x.GetListItem())); // Leave the body Writer.LeaveRegion(); // Write the marshalling parameters if (DelegateEventParameters != null) { Writer.EnterSection("marshalling", "Marshalling"); Writer.WriteLine("Parameters are marshalled using [{0}]({1})", DelegateEventParameters.FullName, DelegateEventParameters.LinkPath); Writer.LeaveSection(); } // Write the @see directives WriteSeeAlsoSection(Writer, SeeAlso); // Write the references WriteReferencesSection(Writer, Entity); } }
public static void WriteList(UdnWriter Writer, IEnumerable<APIFunction> Functions, bool bWithType) { Writer.WriteObject(bWithType? "FunctionListHeadWithType" : "FunctionListHead"); foreach (APIFunction Function in Functions) { Function.WriteListItem(Writer, bWithType); } Writer.WriteObject("FunctionListTail"); }
public static bool WriteListSection(UdnWriter Writer, string SectionId, string SectionTitle, IEnumerable<APIFunction> Functions, bool bWithType) { APIFunction[] FunctionArray = Functions.ToArray(); if (FunctionArray.Length > 0) { Writer.EnterSection(SectionId, SectionTitle); WriteList(Writer, Functions, bWithType); Writer.LeaveSection(); return true; } return false; }
public static void WriteList(UdnWriter Writer, IEnumerable<APIVariable> Variables) { Writer.WriteObject("VariableListHead"); foreach (APIVariable Variable in Variables) { Variable.WriteListItem(Writer); } Writer.WriteObject("VariableListTail"); }
private static void WriteRelatedClasses(UdnWriter Writer, string Indent, List<KeyValuePair<XmlNode, APIRecord>> Records) { foreach (KeyValuePair<XmlNode, APIRecord> Record in Records) { if (Record.Value == null) { Writer.WriteLine("{0} {1} ", Indent, Record.Key.InnerText); } else { Writer.WriteLine("{0} [{1}]({2}) ", Indent, Record.Key.InnerText, Record.Value.LinkPath); } } }
private void WritePins(UdnWriter Writer, IEnumerable<APIActionPin> Pins) { foreach(var Pin in Pins) { Pin.WritePin(Writer); } }
public void WriteListItem(UdnWriter Writer, bool bWithType) { // Enter the object Writer.EnterObject(bWithType? "FunctionListItemWithType" : "FunctionListItem"); // Get all the icons List<Icon> ItemIcons = new List<Icon>{ Icons.Function[(int)Protection] }; if (IsStatic) { ItemIcons.Add(Icons.StaticFunction); } if (IsVirtual) { ItemIcons.Add(Icons.VirtualFunction); } if (MetadataDirective != null) { ItemIcons.Add(Icons.ReflectedFunction); ItemIcons.AddRange(MetadataDirective.Icons); } Writer.WriteParam("icons", ItemIcons); // Write the return type Writer.WriteParam("type", Markdown.Truncate(ReturnType, 12, "...")); // Write the name if(Parameters.Count == 0) { Writer.WriteParam("name", Name + "()"); Writer.WriteParam("arguments", ""); } else { Writer.WriteParam("name", Name); Writer.EnterParam("arguments"); if (Parameters.Count > 0) { Writer.WriteEscapedLine("( "); for (int Idx = 0; Idx < Parameters.Count; Idx++) { string Separator = (Idx + 1 == Parameters.Count) ? "" : ","; string Definition = Markdown.Truncate(APIMember.RemoveElaborations(Parameters[Idx].Definition), 35, "..."); // Fix spacing around pointer/reference punctuation to match Epic code standards. if (Definition != null) { Definition = Definition.Replace(" *", "*").Replace(" &", "&"); } Writer.WriteLine(UdnWriter.TabSpaces + Definition + Separator + " "); } Writer.WriteEscapedLine(") "); } Writer.LeaveParam(); } // Write the other parameters Writer.WriteParam("link", "[RELATIVE:" + LinkPath + "]"); Writer.WriteParam("description", BriefDescription); // Leave the object Writer.LeaveObject(); }