basic command system and argument processing added.
This commit is contained in:
parent
901f900527
commit
6c37b11e07
@ -7,17 +7,71 @@ namespace RecrownedAthenaeum.Tools.CommandProcessor
|
|||||||
internal class CommandEngine
|
internal class CommandEngine
|
||||||
{
|
{
|
||||||
public bool running;
|
public bool running;
|
||||||
|
public readonly Dictionary<string, ICommandEngineCommand> commands;
|
||||||
|
|
||||||
|
public CommandEngine()
|
||||||
|
{
|
||||||
|
commands = new Dictionary<string, ICommandEngineCommand>();
|
||||||
|
}
|
||||||
|
|
||||||
internal void Run()
|
internal void Run()
|
||||||
{
|
{
|
||||||
while (running)
|
while (running)
|
||||||
{
|
{
|
||||||
string command = Console.ReadLine();
|
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.CommandProcessor;
|
||||||
|
using RecrownedAthenaeum.Tools.TextureAtlasTools;
|
||||||
using System;
|
using System;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
@ -11,6 +12,7 @@ namespace RecrownedAthenaeum.Tools
|
|||||||
Console.WriteLine("Recrowned Athenaeum Console Tools version " + Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
Console.WriteLine("Recrowned Athenaeum Console Tools version " + Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||||
|
|
||||||
CommandEngine ce = new CommandEngine();
|
CommandEngine ce = new CommandEngine();
|
||||||
|
ce.commands.Add("TexturePacker", new TexturePackerCommand());
|
||||||
ce.Run();
|
ce.Run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user