예제 #1
0
        public static void Help(string stringCall = null)
        {
            if (stringCall == null)
            {
                List();
            }
            else
            {
                try
                {
                    // if the call is a library
                    if (!stringCall.Contains(' ') && !stringCall.Contains('.'))
                    {
                        Type library = CParsedInput.ParseLibrary(stringCall);

                        if (library == null)
                        {
                            CFormat.WriteLine("This library does not exist.");
                            return;
                        }

                        string libraryCallName   = CommandManager.ExternalLibraryCallNames.FirstOrDefault(x => x.Value == library).Key;
                        string libraryHelpPrompt = library.GetCustomAttribute <MMasterLibrary>().HelpPrompt;
                        if (!String.IsNullOrEmpty(libraryHelpPrompt))
                        {
                            libraryHelpPrompt = " (" + libraryHelpPrompt + ")";
                        }

                        CFormat.WriteLine(libraryCallName + libraryHelpPrompt, ConsoleColor.Yellow);
                        foreach (MethodInfo methodInfo in CommandManager.ExternalLibraries[library].Values)
                        {
                            MMasterCommand mMasterCommand = methodInfo.GetCustomAttribute <MMasterCommand>();
                            string         helpPrompt     = mMasterCommand.HelpPrompt;
                            if (!String.IsNullOrEmpty(helpPrompt))
                            {
                                helpPrompt = " (" + helpPrompt + ")";
                            }
                            CFormat.WriteLine(CFormat.Indent(3) + "." + methodInfo.Name + helpPrompt);
                        }
                    }
                    else
                    {
                        CParsedInput parsedInput = new CParsedInput(stringCall, true);

                        string helpPrompt = parsedInput.CommandMethodInfo.GetCustomAttribute <MMasterCommand>().HelpPrompt;

                        if (helpPrompt == "")
                        {
                            CFormat.WriteLine(CFormat.GetArgsFormat(parsedInput.FullCallName, parsedInput.CommandMethodInfo.GetParameters()));
                        }
                        else
                        {
                            CFormat.WriteLine(helpPrompt, CFormat.GetArgsFormat(parsedInput.FullCallName, parsedInput.CommandMethodInfo.GetParameters()));
                        }
                    }
                }
                catch (WrongCallFormatException)
                {
                    CFormat.WriteLine("Wrong call format.", "The call should be as it follows: <Library>.<Command> [arg1] [arg2] [etc.]");
                }
                catch (LibraryNotExistingException)
                {
                    CFormat.WriteLine("This library does not exist.");
                }
                catch (CommandNotExistingException)
                {
                    CFormat.WriteLine("This command does not exist.");
                }
            }
        }