// 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; }
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); }
/// <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)); }
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()); }
/// <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); }
/// <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>()); }
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); }
// 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); }
// 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); }