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
|
||||
{
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user