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;
}
}
}