using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IPA { public class Arguments { public static Arguments Process = new Arguments(Environment.GetCommandLineArgs()); private List positional = new List(); private Dictionary longFlags = new Dictionary(); private Dictionary flags = new Dictionary(); private Arguments(string[] args) { foreach(var arg in args) { if (arg.StartsWith("--")) { // parse as a long flag var name = arg.Substring(2); // cut off first two chars string value = null; if (name.Contains('=')) { var spl = name.Split('='); name = spl[0]; value = string.Join("=", spl, 1, spl.Length-1); } longFlags.Add(name, value); } else if (arg.StartsWith("-")) { // parse as flags var argument = arg.Substring(1); // cut off first char StringBuilder subBuildState = new StringBuilder(); bool parsingValue = false; char mainChar = ' '; foreach (char chr in argument) { if (!parsingValue) { if (chr == '=') { parsingValue = true; } else { mainChar = chr; flags.Add(chr, null); } } else { if (chr == ',') { parsingValue = false; flags[mainChar] = subBuildState.ToString(); subBuildState = new StringBuilder(); } else { subBuildState.Append(chr); } } } } else { // parse as positional positional.Add(arg); } } } public bool HasLongFlag(string flag) { return longFlags.ContainsKey(flag); } public bool HasFlag(char flag) { return flags.ContainsKey(flag); } public string GetLongFlagValue(string flag) { return longFlags[flag]; } public string GetFlagValue(char flag) { return flags[flag]; } public IReadOnlyList PositionalArgs => positional; } }