MoreInternals.Model.Selector.ParseRawSelector C# (CSharp) Method

ParseRawSelector() private static method

private static ParseRawSelector ( string raw, int start, int stop, string filePath ) : Selector
raw string
start int
stop int
filePath string
return Selector
        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);
        }