/// <summary> /// Registers the file, with description provided. Later, this description is used for <see cref="generateReadmeFiles(aceAuthorNotation, string, int)"/> /> /// </summary> /// <param name="filename">The filename.</param> /// <param name="fileDescription">The file description.</param> /// <param name="updateExisting">if set to <c>true</c> it will force update if any existing file description was found.</param> public void RegisterFile(String filename, String fileDescription, Boolean updateExisting = false) { lock (addFileDescriptionLock) { if (updateExisting) { if (AdditionalFileEntries.ContainsKey(filename)) { AdditionalFileEntries.Remove(filename); } } if (!AdditionalFileEntries.ContainsKey(filename)) { AdditionalFileEntries.Add(filename, this.GetFileDescription(filename, fileDescription)); } else { if (!fileDescription.isNullOrEmpty()) { AdditionalFileEntries[filename] = this.GetFileDescription(filename, fileDescription); } } } }
/// <summary> /// Generates the folder readme. /// </summary> /// <param name="notation">The notation.</param> /// <param name="builder">The builder.</param> /// <param name="directoryStructureDepthLimit">The directory structure depth limit - i.e. until what subdirectory depth is described in the readme file.</param> /// <returns></returns> internal string generateFolderReadme(aceAuthorNotation notation, ITextRender builder = null, Int32 directoryStructureDepthLimit = 3) { if (builder == null) { builder = new builderForMarkdown(); } String prefix = ""; String mypath = path; if (parent != null) { mypath = mypath.removeStartsWith(parent.path); prefix = path; } builder.AppendHeading("Directory information", 2); builder.AppendHeading(caption, 3); builder.AppendLine(" > " + mypath); builder.AppendLine(" > " + description); builder.AppendHorizontalLine(); foreach (String st in AdditionalDescriptionLines) { builder.AppendLine(st); } if (AdditionalDescriptionLines.Any()) { builder.AppendHorizontalLine(); } if (AdditionalFileEntries.Any()) { builder.AppendHeading("Files in this directory:", 2); String format = "D" + AdditionalFileEntries.Count().ToString().Length.ToString(); Int32 flc = 1; List <String> sortedKeys = AdditionalFileEntries.Keys.ToList(); sortedKeys.Sort(String.CompareOrdinal); foreach (String key in sortedKeys) { builder.AppendLine(flc.ToString(format) + " : " + AdditionalFileEntries[key].description); flc++; } } //builder.AppendHeading("Folder treeview", 2); //builder.Append(this.tree) builder.AppendHorizontalLine(); builder.AppendHeading("Subdirectories of: " + prefix, 2); var folderNodes = this.getAllChildrenInType <folderNode>(null, false, true, 0, directoryStructureDepthLimit); foreach (var fold in folderNodes) { Int32 levelDistance = fold.level - level; String insert = " -- ".Repeat(levelDistance); if (levelDistance > directoryStructureDepthLimit) { if (fold.count() > 0) { builder.AppendCite(insert + "> directory " + fold.caption + " with [" + fold.count() + "] sub directories ..."); } } else { builder.AppendLine(String.Format("{0,-60} : {1,-100}", insert + "> " + fold.caption, fold.path.removeStartsWith(prefix))); if (!fold.description.isNullOrEmpty()) { builder.AppendLine(insert + "| " + fold.description); } } //builder.AppendLine(); // builder.prevTabLevel(); } // AdditionalFileEntries.Sort(String.CompareOrdinal); if (notation != null) { builder.AppendHorizontalLine(); notation.GetDescription(builder); } builder.AppendLine(); builder.AppendHorizontalLine(); builder.AppendLine(imbSciStringExtensions.add(imbSciStringExtensions.add("File generated: ", DateTime.Now.ToLongDateString(), " "), DateTime.Now.ToLongTimeString())); return(builder.ContentToString(true)); }