|
|
@ -53,12 +53,14 @@ func main() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
switch cmd {
|
|
|
|
switch cmd {
|
|
|
|
case "*":
|
|
|
|
case "*": // select all
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
case "+":
|
|
|
|
case "+":
|
|
|
|
funcGenerator = SelectFromChildren
|
|
|
|
funcGenerator = SelectFromChildren
|
|
|
|
case ">":
|
|
|
|
case ">":
|
|
|
|
funcGenerator = SelectNextSibling
|
|
|
|
funcGenerator = SelectNextSibling
|
|
|
|
|
|
|
|
case ",": // nil will signify a comma
|
|
|
|
|
|
|
|
selectorFuncs = append(selectorFuncs, nil)
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
selector, err := ParseSelector(cmd)
|
|
|
|
selector, err := ParseSelector(cmd)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
@ -70,9 +72,16 @@ func main() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
selectedNodes := []*html.Node{}
|
|
|
|
currNodes := []*html.Node{root}
|
|
|
|
currNodes := []*html.Node{root}
|
|
|
|
for _, selectorFunc := range selectorFuncs {
|
|
|
|
for _, selectorFunc := range selectorFuncs {
|
|
|
|
currNodes = selectorFunc(currNodes)
|
|
|
|
if selectorFunc == nil { // hit a comma
|
|
|
|
|
|
|
|
selectedNodes = append(selectedNodes, currNodes...)
|
|
|
|
|
|
|
|
currNodes = []*html.Node{root}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
currNodes = selectorFunc(currNodes)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pupDisplayer.Display(currNodes)
|
|
|
|
selectedNodes = append(selectedNodes, currNodes...)
|
|
|
|
|
|
|
|
pupDisplayer.Display(selectedNodes)
|
|
|
|
}
|
|
|
|
}
|
|
|
|