basic command system and argument processing added.
This commit is contained in:
		@@ -7,17 +7,71 @@ namespace RecrownedAthenaeum.Tools.CommandProcessor
 | 
			
		||||
    internal class CommandEngine
 | 
			
		||||
    {
 | 
			
		||||
        public bool running;
 | 
			
		||||
        public readonly Dictionary<string, ICommandEngineCommand> commands;
 | 
			
		||||
 | 
			
		||||
        public CommandEngine()
 | 
			
		||||
        {
 | 
			
		||||
            commands = new Dictionary<string, ICommandEngineCommand>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal void Run()
 | 
			
		||||
        {
 | 
			
		||||
            while (running)
 | 
			
		||||
            {
 | 
			
		||||
                string command = Console.ReadLine();
 | 
			
		||||
                Process(command);
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    Process(command);
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                catch (ArgumentException)
 | 
			
		||||
                {
 | 
			
		||||
                    Console.WriteLine("Command not found.");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public void Process(string command)
 | 
			
		||||
 | 
			
		||||
        public void Process(string commandAndArguments)
 | 
			
		||||
        {
 | 
			
		||||
            string command = commandAndArguments;
 | 
			
		||||
            string[] arguments = null;
 | 
			
		||||
 | 
			
		||||
            if (commandAndArguments.Contains(' '))
 | 
			
		||||
            {
 | 
			
		||||
                command = command.Remove(command.IndexOf(' '));
 | 
			
		||||
                if (!commands.ContainsKey(command)) throw new ArgumentException();
 | 
			
		||||
                string[] argumentsSplit = commandAndArguments.Remove(command.Length).Split(' ');
 | 
			
		||||
                List<string> argumentsList = new List<string>();
 | 
			
		||||
 | 
			
		||||
                for (int i = 0; i < argumentsSplit.Length; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    if (argumentsSplit[i].Contains('"') && !argumentsSplit[i].EndsWith('"'))
 | 
			
		||||
                    {
 | 
			
		||||
                        StringBuilder quoteBuilder = new StringBuilder();
 | 
			
		||||
                        do
 | 
			
		||||
                        {
 | 
			
		||||
                            quoteBuilder.Append(' ');
 | 
			
		||||
                            quoteBuilder.Append(argumentsSplit[i]);
 | 
			
		||||
                            i++;
 | 
			
		||||
                            if (i >= argumentsSplit.Length)
 | 
			
		||||
                            {
 | 
			
		||||
                                throw new ArgumentException();
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                        } while (!argumentsSplit[i].Contains('"'));
 | 
			
		||||
                        quoteBuilder.Append(' ');
 | 
			
		||||
                        quoteBuilder.Append(argumentsSplit[i]);
 | 
			
		||||
                        argumentsList.Add(quoteBuilder.ToString().Trim());
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        argumentsList.Add(argumentsSplit[i]);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                arguments = argumentsList.ToArray();
 | 
			
		||||
            }
 | 
			
		||||
            if (!commands.ContainsKey(command)) throw new ArgumentException();
 | 
			
		||||
            commands[command].Run(arguments);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,11 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace RecrownedAthenaeum.Tools.CommandProcessor
 | 
			
		||||
{
 | 
			
		||||
    interface ICommandEngineCommand
 | 
			
		||||
    {
 | 
			
		||||
        void Run(string[] arguments);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,17 @@
 | 
			
		||||
using RecrownedAthenaeum.Tools.CommandProcessor;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace RecrownedAthenaeum.Tools.TextureAtlasTools
 | 
			
		||||
{
 | 
			
		||||
    class TexturePackerCommand : ICommandEngineCommand
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public void Run(string[] arguments)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
using RecrownedAthenaeum.Tools.CommandProcessor;
 | 
			
		||||
using RecrownedAthenaeum.Tools.TextureAtlasTools;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
@@ -11,6 +12,7 @@ namespace RecrownedAthenaeum.Tools
 | 
			
		||||
            Console.WriteLine("Recrowned Athenaeum Console Tools version " + Assembly.GetExecutingAssembly().GetName().Version.ToString());
 | 
			
		||||
 | 
			
		||||
            CommandEngine ce = new CommandEngine();
 | 
			
		||||
            ce.commands.Add("TexturePacker", new TexturePackerCommand());
 | 
			
		||||
            ce.Run();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user