Example #1
0
 public css_selector(css_element_selector right)
 {
     _right       = right;
     _media_query = null;
     _combinator  = css_combinator.descendant;
     _order       = 0;
 }
Example #2
0
        public bool parse(string text)
        {
            if (string.IsNullOrEmpty(text))
            {
                return(false);
            }
            var tokens = new List <string>();

            html.split_string(text, tokens, "", " \t>+~", "([");
            if (tokens.Count == 0)
            {
                return(false);
            }

            var right      = tokens[tokens.Count - 1].Trim();
            var combinator = '\0';

            tokens.RemoveAt(tokens.Count - 1);
            string lastToken;

            while (tokens.Count != 0 && ((lastToken = tokens[tokens.Count - 1]) == " " || lastToken == "\t" || lastToken == "+" || lastToken == "~" || lastToken == ">"))
            {
                if (combinator == ' ' || combinator == 0)
                {
                    combinator = lastToken[0];
                }
                tokens.RemoveAt(tokens.Count - 1);
            }
            var left = tokens.Aggregate(new StringBuilder(), (a, b) => a.Append(b)).ToString().Trim();

            if (string.IsNullOrEmpty(right))
            {
                return(false);
            }

            _right.parse(right);
            switch (combinator)
            {
            case '>': _combinator = css_combinator.child; break;

            case '+': _combinator = css_combinator.adjacent_sibling; break;

            case '~': _combinator = css_combinator.general_sibling; break;

            default: _combinator = css_combinator.descendant; break;
            }

            _left = null;
            if (!string.IsNullOrEmpty(left))
            {
                _left = new css_selector((media_query_list)null);
                if (!_left.parse(left))
                {
                    return(false);
                }
            }
            return(true);
        }
Example #3
0
 public css_selector(css_selector val)
 {
     _right       = val._right;
     _left        = val._left; //: shared?
     _combinator  = val._combinator;
     _specificity = val._specificity;
     _order       = val._order;
     _media_query = val._media_query;
 }
Example #4
0
 public css_selector(media_query_list media = null)
 {
     _media_query = media;
     _combinator  = css_combinator.descendant;
     _order       = 0;
 }