using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ScriptEngine { public static class Utils { public static bool IsValidIdentifier(string name) { if (name == null || name.Length == 0) return false; if (!(Char.IsLetter(name[0]) || name[0] == '_')) return false; for (int i = 1; i < name.Length; i++) { if (!(Char.IsLetterOrDigit(name[i]) || name[i] == '_')) return false; } return true; } public static IEnumerable SplitCommandLine(string commandLine) { bool inQuotes = false; return SplitString(commandLine, c => { if (c == '\"') inQuotes = !inQuotes; return !inQuotes && c == ' '; }) .Select(arg => arg.Trim().TrimMatchingQuotes('\"')) .Where(arg => !string.IsNullOrEmpty(arg)); } private static IEnumerable SplitString(this string str, Func controller) { int nextPiece = 0; for (int c = 0; c < str.Length; c++) { if (controller(str[c])) { yield return str.Substring(nextPiece, c - nextPiece); nextPiece = c + 1; } } yield return str.Substring(nextPiece); } private static string TrimMatchingQuotes(this string input, char quote) { if ((input.Length >= 2) && (input[0] == quote) && (input[input.Length - 1] == quote)) return input.Substring(1, input.Length - 2); return input; } } }