private static Selector ParseRawSelector(string raw, int start, int stop, string filePath)
{
var escapeMap = BuildEscapeMap(ref raw);
raw = raw.Trim();
if (raw.Contains(',')) return ApplyEscapeMap(ParseRawCommaDelimittedSelector(raw.Split(','), start, stop, filePath), escapeMap);
if (raw.Contains('>')) return ApplyEscapeMap(ParseRawChildSelector(raw.Split('>'), start, stop, filePath), escapeMap);
if (raw.Contains('+')) return ApplyEscapeMap(ParseRawSiblingSelector(raw.Split('+'), start, stop, filePath), escapeMap);
var parts = new List<Selector>();
foreach (var x in raw.Split(' '))
{
if (x.Trim().Length == 0) continue;
parts.Add(ParseRawCompoundSelector(x, start, stop, filePath));
}
if (parts.Count == 0)
{
Current.RecordError(ErrorType.Parser, Position.Create(start, stop, filePath), "Expected selector");
throw new StoppedParsingException();
}
if (parts.Count == 1) { return ApplyEscapeMap(parts[0], escapeMap); }
var ret = parts[parts.Count - 1];
for (int i = parts.Count - 2; i >= 0; i--)
{
ret = CompoundSelector.CombineSelectors(parts[i], ret, start, stop, filePath);
}
return ApplyEscapeMap(ret, escapeMap);
}