using BetterSecondBotShared.API; using BetterSecondBotShared.IO; using BetterSecondBotShared.Json; using BetterSecondBotShared.logs; using BetterSecondBotShared.Static; using System; using System.Collections.Generic; using System.Reflection; using System.Text; namespace BetterSecondBot.WikiMake { class DebugModeCreateWiki { protected Dictionary> api_reports = new Dictionary>(); protected string html_header = ""; protected string html_footer = ""; protected string buildVersion = ""; protected SimpleIO io; protected Dictionary seen_command_names = new Dictionary(); public string CreateRoot() { StringBuilder sb = new StringBuilder(); sb.Append(html_header); sb.Append("

Build: "); sb.Append(buildVersion); sb.Append("


"); sb.Append(""); foreach (KeyValuePair> entry in api_reports) { sb.Append(""); sb.Append(""); sb.Append(""); } sb.Append("
InterfaceCommandsStatus
"); sb.Append(entry.Key); sb.Append(""); sb.Append(entry.Value.Key.ToString()); sb.Append(""); sb.Append(entry.Value.Value); sb.Append("
"); sb.Replace("[[AREA]]", "Home"); sb.Replace("[[SUBFOLDER]]", "files/"); sb.Replace("[[RETURNROOT]]", ""); sb = DebugModeCreateWiki.MenuActive(sb, "Home"); sb.Append(html_footer); return sb.ToString(); } protected static StringBuilder MenuActive(StringBuilder index,string area) { Dictionary active_swaps = new Dictionary { { "CoreActive", "" }, { "CLIActive", "" }, { "JSONActive", "" }, { "RLVapiActive", "" }, { "HTTPgetActive", "" }, { "HTTPpostActive", "" } }; active_swaps["" + area + "Active"] = "Active"; foreach(KeyValuePair pair in active_swaps) { index = index.Replace("[["+ pair.Key+"]]", pair.Value); } return index; } protected void InterfaceCommands(string area, API_supported_interface shared_interface,bool track_commands=false) { string[] cmds = shared_interface.GetCommandsList(); string interface_name = shared_interface.GetType().Name; foreach (string c in cmds) { if (track_commands == true) { if (seen_command_names.ContainsKey(c) == false) { seen_command_names.Add(c, interface_name); } else { LogFormater.Debug("command " + c + " from " + interface_name + " overlaps an ready loaded command from "+ seen_command_names[c]+""); } } string workspace = shared_interface.GetCommandWorkspace(c); StringBuilder sb = new StringBuilder(); sb.Append(html_header); sb.Append("

Build: "); sb.Append(buildVersion); sb.Append("


"); sb.Append("

Interface: [[AREA]]"); if(workspace != "") { sb.Append(" / [[WORKSPACE]]"); } sb.Append("


[[COMMAND]]

"); int loop = 0; int minargs = shared_interface.GetCommandArgs(c); string[] arg_types = shared_interface.GetCommandArgTypes(c); string[] arg_hints = shared_interface.GetCommandArgHints(c); if(area == "Core") { StringBuilder ExampleCall = new StringBuilder(); ExampleCall.Append("Example: [[COMMAND]]"); ExampleCall.Append("|||"); string addon = ""; while (loop < minargs) { ExampleCall.Append(addon); addon = "~#~"; string hint_value = ""; if (arg_hints.Length > loop) { if (arg_hints[loop] != null) { string[] bits = arg_hints[loop].Split("
", StringSplitOptions.RemoveEmptyEntries); if (bits.Length >= 1) { hint_value = bits[0]; } } } if (hint_value != "") { ExampleCall.Append(hint_value); } else { ExampleCall.Append("?"); LogFormater.Debug("[WikiMake] " + area + " Command " + c + " missing some required hint values"); } loop++; } sb.Append(ExampleCall.ToString()); sb.Append("
"); } sb.Append("[[HELP]]"); if (arg_types.Length > 0) { sb.Append("

Args helper

"); loop = 0; sb.Append(""); while (loop < arg_types.Length) { string hint = ""; if (arg_hints.Length > loop) { hint = arg_hints[loop]; } string Required = "X"; if ((loop + 1) > minargs) { Required = ""; } sb.Append(""); loop++; } sb.Append("
NumTypeRequiredHint
" + (loop + 1).ToString() + "" + arg_types[loop] + "" + Required + "" + hint + "
"); } sb.Append(html_footer); sb.Replace("[[COMMAND]]", c); sb.Replace("[[HELP]]", shared_interface.GetCommandHelp(c)); sb.Replace("[[MINARGS]]", minargs.ToString()); sb.Replace("[[WORKSPACE]]", workspace); sb.Replace("[[AREA]]", area); sb.Replace("[[SUBFOLDER]]", ""); sb.Replace("[[RETURNROOT]]", "../"); sb = DebugModeCreateWiki.MenuActive(sb, area); string target_file = "" + area + "" + workspace + "" + c + ".html"; io.writefile(target_file, sb.ToString()); } } protected void InterfaceWorkspaces(string area, API_supported_interface shared_interface) { string[] cmds = shared_interface.GetCommandsList(); foreach (string workspace in shared_interface.GetAllWorkspaces()) { StringBuilder sb = new StringBuilder(); sb.Append(html_header); sb.Append("

Interface: [[AREA]]"); if (workspace != "") { sb.Append(" / [[WORKSPACE]]"); } sb.Append("


"); sb.Append("

Build: "); sb.Append(buildVersion); sb.Append("


"); sb.Append(""); foreach(string c in cmds) { if(shared_interface.GetCommandWorkspace(c) == workspace) { int args = shared_interface.GetCommandArgs(c); sb.Append(""); } } sb.Append("
CommandMin args
"); sb.Append(c); sb.Append(""); sb.Append(args.ToString()); sb.Append("
"); sb.Replace("[[SUBFOLDER]]", ""); sb.Replace("[[RETURNROOT]]", "../"); sb.Replace("[[WORKSPACE]]", workspace); sb.Replace("[[AREA]]", area); sb.Append(html_footer); sb = DebugModeCreateWiki.MenuActive(sb, area); string target_file = "" + area + "" + workspace + ".html"; io.writefile(target_file, sb.ToString()); } } protected void InterfaceIndex(string area, API_supported_interface shared_interface) { StringBuilder sb = new StringBuilder(); sb.Append(html_header); sb.Append("

Interface:"); sb.Append(area); sb.Append("


"); sb.Append("

Build: "); sb.Append(buildVersion); sb.Append("


"); string[] cmds = shared_interface.GetCommandsList(); sb.Append(""); foreach (string workspace in shared_interface.GetAllWorkspaces()) { int commands_count = 0; foreach (string c in cmds) { if (shared_interface.GetCommandWorkspace(c) == workspace) { commands_count++; } } string workspace_link = "" + workspace + ""; sb.Append(""); } sb.Append("
WorkspaceCommands
"); sb.Append(workspace_link); sb.Append(""); sb.Append(commands_count.ToString()); sb.Append("
"); sb.Replace("[[SUBFOLDER]]", ""); sb.Replace("[[RETURNROOT]]", "../"); sb.Replace("[[AREA]]", area); sb.Append(html_footer); sb = DebugModeCreateWiki.MenuActive(sb, area); io.writefile(""+ area+".html", sb.ToString()); } protected void InterfaceWiki(string area,API_supported_interface shared_interface, bool track_commands = false) { LogFormater.Info("[WIKI] Starting area " + area + ""); // create index InterfaceIndex(area, shared_interface); // create workspaces InterfaceWorkspaces(area, shared_interface); // create commands InterfaceCommands(area, shared_interface, track_commands); LogFormater.Info("[WIKI] Done with area"); } public DebugModeCreateWiki(string Version, SimpleIO shareio) { io = shareio; buildVersion = Version; html_header = helpers.ReadResourceFile(Assembly.GetExecutingAssembly(), "wiki_header.txt"); html_footer = helpers.ReadResourceFile(Assembly.GetExecutingAssembly(), "wiki_footer.txt"); io.ChangeRoot("wiki"); io.ChangeRoot("wiki/files"); // JSONcfg MakeJsonConfig defaultJson = new MakeJsonConfig(); api_reports.Add("JSON", new KeyValuePair(defaultJson.ApiCommandsCount, "Ready")); InterfaceWiki("JSON", defaultJson); // CMD BSB.Commands.CoreCommandsInterface cmd = new BSB.Commands.CoreCommandsInterface(null); api_reports.Add("Core", new KeyValuePair(cmd.ApiCommandsCount, "Basic")); InterfaceWiki("Core", cmd,true); // RLVapi BSB.RLV.RLVcontrol RLVapi = new BSB.RLV.RLVcontrol(null); api_reports.Add("RLVapi", new KeyValuePair(RLVapi.ApiCommandsCount, "Basic")); InterfaceWiki("RLVapi", RLVapi, true); // HTTP post BetterSecondBot.HttpServer.HTTPCommandsInterface http_post = new BetterSecondBot.HttpServer.HTTPCommandsInterface(null,null); api_reports.Add("HTTPpost", new KeyValuePair(http_post.ApiCommandsCount, "Limited")); InterfaceWiki("HTTPpost", http_post); io.ChangeRoot("wiki"); io.writefile("index.html", CreateRoot()); } } }