Example #1
0
        // href.m.html1/
        // href=m=html1/
        // href:m:html1/ →× xmlns:href の m 属性と同じになる。同様に _ や - も使えない
        // href+m+html1/
        // href$m$html1/ href#m#html1/ href%m%html1/
        // 見にくい。疎らな文字の方がよい
        // href^m^html1/ href~m~html1/ href'm'html1/
        // href<m>html1/ href(m)html1/ href{m}html1/
        // href.m=html1/
        public static void readSelectorTest()
        {
            SelectorParser p = new SelectorParser("td[@href.l.s=='hello'.l&@pp==pp]+td/+a[hello=99]");

            System.Console.WriteLine(p.Parse());
            return;
        }
Example #2
0
        public IEnumerable <Tag> FindAll(string selector)
        {
            SelectorParser parser        = new SelectorParser();
            var            selectorGroup = parser.Parse(selector);

            return(selectorGroup.Apply(GetTags()));
        }
        public void TestMultipleCombinators()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse("div > table tr > td");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new[] {
                    new SimpleSelectorSequence(
                        new TypeSelector("div"), new IFilter[0]),
                    new SimpleSelectorSequence(
                        new TypeSelector("table"), new IFilter[0]),
                    new SimpleSelectorSequence(
                        new TypeSelector("tr"), new IFilter[0]),
                    new SimpleSelectorSequence(
                        new TypeSelector("td"), new IFilter[0])
                },
                    new Combinator[] {
                    new ChildCombinator(),
                    new DescendantCombinator(),
                    new ChildCombinator()
                })
            }),
                selector);
        }
Example #4
0
        /// <summary> Factory.</summary>
        /// <param name="selector">Selector.
        /// </param>
        /// <param name="trace">Parser outputs trace if <tt>true</tt> .
        /// </param>
        /// <returns> Selector instance.
        /// @throws NullPointerException
        /// @throws CodeStreet.Selector.Parser.InvalidSelectorException
        /// </returns>
        /// <seealso cref="#getInstance(String)">
        /// </seealso>
        public static Selector getInstance(System.String selector, bool trace)
        {
            if ((System.Object)selector == null)
            {
                throw new System.NullReferenceException("NULL selector");
            }

            SelectorParseState exp = SelectorParser.doParse(selector, trace);

            return(new Selector(selector, exp.Root, exp.Identifiers));
        }
Example #5
0
        public static void readRuleTest2()
        {
            SelectorParser p = new SelectorParser("[@href.l.s=='hello'.l,@pp==pp]@hello4");

            p.WR.ReadNext();
            foreach (Selector.Rule rule in p.readAttrs())
            {
                System.Console.WriteLine(string.Format("{0} ({1},{2},{3},{4},{5})"
                                                       , rule, rule.varName, rule.varModifier, rule.ope, rule.value, rule.valModifier));
            }
        }
        public void Plus()
        {
            var parser = new SelectorParser();

            parser.SetContext("li:first-of-type + li");
            var not = parser.DoParse();

            Assert.IsTrue(parser.End);
            Assert.AreEqual(0, parser.Errors.Count);
            Assert.IsTrue(not != null && not.IsValid, "invalid selector");
            Assert.AreEqual("li:first-of-type+li", not.ToString());
        }
        public void NotFollowedBySpace()
        {
            var parser = new SelectorParser();

            parser.SetContext(":not(.notclass) .after");
            var not = parser.DoParse();

            Assert.IsTrue(parser.End);
            Assert.AreEqual(0, parser.Errors.Count);
            Assert.IsTrue(not.IsValid, "invalid selector");
            Assert.AreEqual(":not(.notclass) .after", not.ToString());
        }
Example #8
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="messageQueue">The MSMQ message queue from which
        /// messages will be read.</param>
        /// <param name="messageConverter">A message converter for mapping
        /// MSMQ messages to NMS messages.</param>
        /// <param name="selector">The selector string.</param>
        public BySelectorMessageReader(MessageQueue messageQueue,
                                       IMessageConverter messageConverter, string selector)
            : base(messageQueue, messageConverter)
        {
            this.selector = selector;

            SelectorParser selectorParser = new SelectorParser();

            selectionExpression = selectorParser.Parse(selector);

            evaluationContext = new MessageEvaluationContext(null);
        }
        public void Complex()
        {
            var parser = new SelectorParser();

            parser.SetContext(".parent>.child#withcondition[and='attr'] ~ .subchild:not(.notclass#notdiv xx )::test .subsub:lang(en):nth-of-type(3)");
            var sel = parser.DoParse();

            Assert.IsTrue(parser.End);
            Assert.AreEqual(0, parser.Errors.Count);
            Assert.IsTrue(sel != null && sel.IsValid, "invalid selector");
            Assert.IsNotNull(sel);
            Assert.AreEqual(".parent>.child#withcondition[and='attr']~.subchild:not(.notclass#notdiv xx)::test .subsub:lang(en):nth-of-type(3)", sel.ToString());
        }
        public void AllSelector()
        {
            var parser = new SelectorParser();

            parser.SetContext("*");
            var ch = parser.DoParse();

            Assert.IsTrue(parser.End);
            Assert.AreEqual(0, parser.Errors.Count);
            Assert.IsTrue(ch != null && ch.IsValid, "invalid selector");
            Assert.IsInstanceOfType(ch, typeof(SimpleSelector));
            Assert.AreEqual(SimpleSelector.Type.All, ((SimpleSelector)ch).SelectorType);
        }
Example #11
0
 /// <summary>
 /// </summary>
 /// <param name="SelectorString"></param>
 /// <returns></returns>
 private static IEnumerable <ComplexSelector> Parse(ReadOnlySpan <char> SelectorString)
 {// DOCS: https://www.w3.org/TR/selectors-3/#selectors
     try
     {
         SelectorParser Parser = new SelectorParser(SelectorString);
         return(Parser.Parse_Selector_List());
     }
     catch (CssException ex)
     {
         Log.Error(ex);
     }
     return(System.Array.Empty <ComplexSelector>());
 }
Example #12
0
        public static void readRuleTest()
        {
            SelectorParser p = new SelectorParser("@href.l.s=='hello'.l,@pp==pp");

            p.AR.ReadNext();
            p.readRule();
            System.Console.WriteLine(string.Format("{0} ({1},{2},{3},{4},{5})"
                                                   , p.rule, p.rule.varName, p.rule.varModifier, p.rule.ope, p.rule.value, p.rule.valModifier));
            p.AR.ReadNext();
            p.readRule();
            System.Console.WriteLine(string.Format("{0} ({1},{2},{3},{4},{5})"
                                                   , p.rule, p.rule.varName, p.rule.varModifier, p.rule.ope, p.rule.value, p.rule.valModifier));
        }
        public void TestUniversalSelector()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse("*");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new IFilter[0]))
            }),
                selector);
        }
Example #14
0
        // Leave this code here, because it will need to use the SubQuery logic in its selection
        public ISelector <T> BuildSelector(IIncludeJoin[] joins, QueryStatistics stats, SelectManyQuery subQuery, IIncludeJoin[] includeJoins)
        {
            var selector = _innerSelector = SelectorParser.ChooseSelector <T>("d.data", _schema, _mapping, Model, subQuery, joins);

            if (stats != null)
            {
                selector = new StatsSelector <T>(selector);
            }

            if (joins.Any())
            {
                selector = new IncludeSelector <T>(_schema, selector, joins);
            }

            return(selector);
        }
        public void TestAttributeSuffixFilter()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse("[href$=html]");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new AttributeSuffixFilter("href", "html")
                }))
            }),
                selector);
        }
        public void TestClassFilter()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse(".class");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new ClassFilter("class")
                }))
            }),
                selector);
        }
Example #17
0
        // Leave this code here, because it will need to use the SubQuery logic in its selection
        public ISelector <T> BuildSelector(IIncludeJoin[] joins, QueryStatistics stats, SelectManyQuery subQuery)
        {
            var selector =
                _innerSelector = SelectorParser.ChooseSelector <T>("d.data", _store.Tenancy.Default, _mapping, Model, subQuery, _store.Serializer, joins);

            if (stats != null)
            {
                selector = new StatsSelector <T>(selector);
            }

            if (joins.Any())
            {
                selector = new IncludeSelector <T>(_store.Storage, selector, joins);
            }

            return(selector);
        }
        public void TestAttributeSubstringMatcFilter()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse("[href*=www]");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new AttributeSubstringFilter("href", "www")
                }))
            }),
                selector);
        }
        public void TestAttributeIncludesSelector()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse("[rel~=copyright]");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new AttributeIncludesFilter("rel", "copyright")
                }))
            }),
                selector);
        }
        public void TestAttributeExactMatcFilter()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse("[name=username]");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new AttributeExactFilter("name", "username")
                }))
            }),
                selector);
        }
        public void TestPseudoRootSelector()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse(":root");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new RootFilter()
                }))
            }),
                selector);
        }
        public void TestAttributeDashSelector()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse("[hreflang|=en]");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new AttributeDashFilter("hreflang", "en")
                }))
            }),
                selector);
        }
        public void TestCssPseudoOnlyOfTypeSelector()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse(":only-of-type");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new OnlyOfTypeFilter()
                }))
            }),
                selector);
        }
        public void TestCssPseudoFirstChildSelector()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse(":first-child");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new FirstChildFilter()
                }))
            }),
                selector);
        }
        public void TestMultipleSelectors()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse("a,div");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new TypeSelector("a"), new IFilter[0])),
                new Selector(
                    new SimpleSelectorSequence(
                        new TypeSelector("div"), new IFilter[0]))
            }),
                selector);
        }
        public void TestCssPseudoCheckedSelector()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse(":checked");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new CheckedFilter()
                }))
            }),
                selector);
        }
        public void TestCssLangFilter()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse(":lang(en)");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new LangFilter("en")
                }))
            }),
                selector);
        }
        public void TestCssExpressionNegativeN()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse(":nth-child(-n)");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new NthChildFilter(
                        new NumericExpression(-1, 0))
                }))
            }),
                selector);
        }
        public void TestCssNegationIDFilter()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse(":not(#id)");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new NegationFilter(
                        new IDFilter("id"))
                }))
            }),
                selector);
        }
        public void TestCssNegationAttributeFilter()
        {
            SelectorParser parser   = new SelectorParser();
            var            selector = parser.Parse(":not([align=right])");

            Assert.AreEqual(
                new SelectorsGroup(
                    new[] {
                new Selector(
                    new SimpleSelectorSequence(
                        new UniversalSelector(),
                        new[] {
                    new NegationFilter(
                        new AttributeExactFilter("align", "right"))
                }))
            }),
                selector);
        }