Parse() public static method

public static Parse ( string raw, int start, int stop, string filePath ) : Selector
raw string
start int
stop int
filePath string
return Selector
Example #1
0
        internal static new Selector Parse(string name, int start, int stop, string filePath)
        {
            name = name.Substring(1);
            switch (name)
            {
            case "link": return(LinkSingleton.BindToPosition(start, stop, filePath));

            case "visited": return(VisitedSingleton.BindToPosition(start, stop, filePath));

            case "active": return(ActiveSingleton.BindToPosition(start, stop, filePath));

            case "hover": return(HoverSingleton.BindToPosition(start, stop, filePath));

            case "focus": return(FocusSingleton.BindToPosition(start, stop, filePath));

            case "first-letter": return(FirstLetterSingleton.BindToPosition(start, stop, filePath));

            case "first-line": return(FirstLineSingleton.BindToPosition(start, stop, filePath));

            case "first-child": return(FirstChildSingleton.BindToPosition(start, stop, filePath));

            case "before": return(BeforeSingleton.BindToPosition(start, stop, filePath));

            case "after": return(AfterSingleton.BindToPosition(start, stop, filePath));

            case "last-child": return(LastChildSingleton.BindToPosition(start, stop, filePath));

            case "empty": return(EmptySingleton.BindToPosition(start, stop, filePath));

            case "checked": return(CheckedSingleton.BindToPosition(start, stop, filePath));

            case "disabled": return(DisabledSingleton.BindToPosition(start, stop, filePath));

            case "first-of-type": return(FirstOfTypeSingleton.BindToPosition(start, stop, filePath));

            case "last-of-type": return(LastOfTypeSingleton.BindToPosition(start, stop, filePath));

            case "only-child": return(OnlyChildSingleton.BindToPosition(start, stop, filePath));

            case "only-of-type": return(OnlyOfTypeSingleton.BindToPosition(start, stop, filePath));

            case "root": return(RootSingleton.BindToPosition(start, stop, filePath));

            case "target": return(TargetSingleton.BindToPosition(start, stop, filePath));

            case "enabled": return(EnabledSingleton.BindToPosition(start, stop, filePath));

            case "default": return(DefaultSingleton.BindToPosition(start, stop, filePath));

            case "valid": return(ValidSingleton.BindToPosition(start, stop, filePath));

            case "invalid": return(InvalidSingleton.BindToPosition(start, stop, filePath));

            case "in-range": return(InRangeSingleton.BindToPosition(start, stop, filePath));

            case "out-of-range": return(OutOfRangeSingleton.BindToPosition(start, stop, filePath));

            case "required": return(RequiredSingleton.BindToPosition(start, stop, filePath));

            case "optional": return(OptionalSingleton.BindToPosition(start, stop, filePath));

            case "read-only": return(ReadOnlySingleton.BindToPosition(start, stop, filePath));

            case "read-write": return(ReadWriteSingleton.BindToPosition(start, stop, filePath));
            }

            int i = name.IndexOf('(');

            if (!name.EndsWith(")"))
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stop, filePath), "Unknown pseudo class [" + name + "]");
                throw new StoppedParsingException();
            }

            string inner = name.Substring(i + 1, name.Length - 1 - (i + 1));

            if (name.StartsWith("lang("))
            {
                return(new LangPseudoClassSelector(inner, start, stop, filePath));
            }
            if (name.StartsWith("not("))
            {
                return(new NotPseudoClassSelector(Selector.Parse(inner, start, stop, filePath), start, stop, filePath));
            }
            if (name.StartsWith("nth-last-child("))
            {
                return(new NthLastChildPseudoClassSelector(NthParameter.Parse(inner), start, stop, filePath));
            }
            if (name.StartsWith("nth-of-type("))
            {
                return(new NthOfTypePseudoClassSelector(NthParameter.Parse(inner), start, stop, filePath));
            }
            if (name.StartsWith("nth-last-of-type("))
            {
                return(new NthLastOfTypePseudoClassSelector(NthParameter.Parse(inner), start, stop, filePath));
            }
            if (name.StartsWith("nth-child("))
            {
                return(new NthChildPsuedoClassSelector(NthParameter.Parse(inner), start, stop, filePath));
            }

            Current.RecordError(ErrorType.Parser, Position.Create(start, stop, filePath), "Unknown pseudo class [" + name + "]");
            throw new StoppedParsingException();
        }