From e93869c7a785a4f375685ffa33c913033ed1c85a Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Thu, 21 Jun 2007 17:08:21 +0000 Subject: * Importing Ming's mass test client --- tools/mass test client/Parsing.cs | 61 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 tools/mass test client/Parsing.cs (limited to 'tools/mass test client/Parsing.cs') diff --git a/tools/mass test client/Parsing.cs b/tools/mass test client/Parsing.cs new file mode 100644 index 0000000..371c3cd --- /dev/null +++ b/tools/mass test client/Parsing.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace libsecondlife.TestClient { + class Parsing { + public static string[] ParseArguments(string str) { + List list = new List(); + string current = ""; + string trimmed = null; + bool withinQuote = false; + bool escaped = false; + foreach (char c in str) { + if (c == '"') { + if (escaped) { + current += '"'; + escaped = false; + } else { + current += '"'; + withinQuote = !withinQuote; + } + } else if (c == ' ' || c == '\t') { + if (escaped || withinQuote) { + current += c; + escaped = false; + } else { + trimmed = current.Trim(); + if (trimmed.StartsWith("\"") && trimmed.EndsWith("\"")) { + trimmed = trimmed.Remove(0, 1); + trimmed = trimmed.Remove(trimmed.Length - 1); + trimmed = trimmed.Trim(); + } + if (trimmed.Length > 0) + list.Add(trimmed); + current = ""; + } + } else if (c == '\\') { + if (escaped) { + current += '\\'; + escaped = false; + } else { + escaped = true; + } + } else { + if (escaped) + throw new FormatException(c.ToString() + " is not an escapable character."); + current += c; + } + } + trimmed = current.Trim(); + if (trimmed.StartsWith("\"") && trimmed.EndsWith("\"")) { + trimmed = trimmed.Remove(0, 1); + trimmed = trimmed.Remove(trimmed.Length - 1); + trimmed = trimmed.Trim(); + } + if (trimmed.Length > 0) + list.Add(trimmed); + return list.ToArray(); + } + } +} -- cgit v1.1