I found this one hiding under the bed.
git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@857 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
61
libsecondlife-cs/examples/TestClient/Parsing.cs
Normal file
61
libsecondlife-cs/examples/TestClient/Parsing.cs
Normal file
@@ -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<string> list = new List<string>();
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user