using System; using System.Collections.Generic; using System.Text; namespace Viewer { public class CmdParser { public const string DEFAULT_KEY = "null"; public CmdParser(string[] args) : this() { string key = DEFAULT_KEY; List values = new List(); foreach (string arg in args) { if (arg.Length > 0 && arg[0] == '/') { if (key != null && values.Count > 0) { this[key] = values.ToArray(); } key = arg; values.Clear(); } else { values.Add(arg); } } if (key != null) { this[key] = values.ToArray(); } } public CmdParser() { commands = new Dictionary(StringComparer.OrdinalIgnoreCase); } private readonly Dictionary commands; public string[] this[string cmd] { get { if (commands.ContainsKey(cmd)) return commands[cmd]; return null; } set { commands[cmd] = value; } } public bool HasCommand(string cmd) { return commands.ContainsKey(cmd); } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append("Viewer.exe"); if (this[DEFAULT_KEY] != null) { foreach (string val in this[DEFAULT_KEY]) { if (val.IndexOf(" ") >= 0) { sb.Append(" \"").Append(val).Append('"'); } else { sb.Append(" ").Append(val); } } } foreach (KeyValuePair kv in commands) { if (kv.Key == DEFAULT_KEY) continue; if (kv.Key.IndexOf(" ") >= 0) { sb.Append(" \"").Append(kv.Key).Append('"'); } else { sb.Append(" ").Append(kv.Key); } if (kv.Value != null) { foreach(string val in kv.Value) { if (val.IndexOf(" ") >= 0) { sb.Append(" \"").Append(val).Append('"'); } else { sb.Append(" ").Append(val); } } } } return sb.ToString(); } } }