MCPcopy Create free account
hub / github.com/andybalholm/cascadia / parseSimpleSelectorSequence

Method parseSimpleSelectorSequence

parser.go:708–762  ·  view source on GitHub ↗

parseSimpleSelectorSequence parses a selector sequence that applies to a single element.

()

Source from the content-addressed store, hash-verified

706// parseSimpleSelectorSequence parses a selector sequence that applies to
707// a single element.
708func (p *parser) parseSimpleSelectorSequence() (Selector, error) {
709 var result Selector
710
711 if p.i >= len(p.s) {
712 return nil, errors.New("expected selector, found EOF instead")
713 }
714
715 switch p.s[p.i] {
716 case '*':
717 // It's the universal selector. Just skip over it, since it doesn't affect the meaning.
718 p.i++
719 case '#', '.', '[', ':':
720 // There's no type selector. Wait to process the other till the main loop.
721 default:
722 r, err := p.parseTypeSelector()
723 if err != nil {
724 return nil, err
725 }
726 result = r
727 }
728
729loop:
730 for p.i < len(p.s) {
731 var ns Selector
732 var err error
733 switch p.s[p.i] {
734 case '#':
735 ns, err = p.parseIDSelector()
736 case '.':
737 ns, err = p.parseClassSelector()
738 case '[':
739 ns, err = p.parseAttributeSelector()
740 case ':':
741 ns, err = p.parsePseudoclassSelector()
742 default:
743 break loop
744 }
745 if err != nil {
746 return nil, err
747 }
748 if result == nil {
749 result = ns
750 } else {
751 result = intersectionSelector(result, ns)
752 }
753 }
754
755 if result == nil {
756 result = func(n *html.Node) bool {
757 return n.Type == html.ElementNode
758 }
759 }
760
761 return result, nil
762}
763
764// parseSelector parses a selector that may include combinators.
765func (p *parser) parseSelector() (result Selector, err error) {

Callers 1

parseSelectorMethod · 0.95

Calls 6

parseTypeSelectorMethod · 0.95
parseIDSelectorMethod · 0.95
parseClassSelectorMethod · 0.95
intersectionSelectorFunction · 0.85

Tested by

no test coverage detected