summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Volchek <volchek2@illinois.edu>2018-04-16 22:39:33 -0500
committerDan Volchek <volchek2@illinois.edu>2018-04-16 22:39:33 -0500
commitb990f81eda42395eff63d77093092663de751712 (patch)
tree6a503cbefbfd1bb4ce98982f7f594ce5b218c08c /src
parent96753c35fd3d6baed73a933c552e5f0a5a8fa02c (diff)
downloadSMAPI-b990f81eda42395eff63d77093092663de751712.tar.gz
SMAPI-b990f81eda42395eff63d77093092663de751712.tar.bz2
SMAPI-b990f81eda42395eff63d77093092663de751712.zip
support quoted strings in console commands
Diffstat (limited to 'src')
-rw-r--r--src/SMAPI/Framework/CommandManager.cs28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/SMAPI/Framework/CommandManager.cs b/src/SMAPI/Framework/CommandManager.cs
index 79a23d03..78e03827 100644
--- a/src/SMAPI/Framework/CommandManager.cs
+++ b/src/SMAPI/Framework/CommandManager.cs
@@ -72,7 +72,7 @@ namespace StardewModdingAPI.Framework
if (string.IsNullOrWhiteSpace(input))
return false;
- string[] args = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
+ string[] args = this.ParseArgs(input);
string name = args[0];
args = args.Skip(1).ToArray();
@@ -103,6 +103,32 @@ namespace StardewModdingAPI.Framework
/*********
** Private methods
*********/
+ /// <summary>
+ /// Parses a string into an array of arguments.
+ /// </summary>
+ /// <param name="input">The string to parse.</param>
+ private string[] ParseArgs(string input)
+ {
+ bool inQuotes = false;
+ IList<string> args = new List<string>();
+ IList<char> currentArg = new List<char>();
+ foreach (char c in input)
+ {
+ if (c == '"')
+ {
+ inQuotes = !inQuotes;
+ }
+ else if (!inQuotes && char.IsWhiteSpace(c))
+ {
+ args.Add(string.Concat(currentArg));
+ currentArg.Clear();
+ }
+ else
+ currentArg.Add(c);
+ }
+ return args.Where(item => !string.IsNullOrWhiteSpace(item)).ToArray();
+ }
+
/// <summary>Get a normalised command name.</summary>
/// <param name="name">The command name.</param>
private string GetNormalisedName(string name)