1
0
mirror of https://github.com/ericchiang/pup synced 2024-11-24 08:58:08 +00:00

attribute function added

This commit is contained in:
ericchiang 2014-09-02 22:23:02 -04:00
parent 1c07121c07
commit fb2219a584
2 changed files with 40 additions and 3 deletions

View File

@ -164,6 +164,24 @@ References
External links
```
#### `attr{attrkey}`
Print the values of all attributes with a given key from all selected nodes.
```bash
$ pup < robots.html a attr{href} | head
#mw-navigation
#p-search
/wiki/MediaWiki:Robots.txt
//en.wikipedia.org/robots.txt
/wiki/Wikipedia:What_Wikipedia_is_not#NOTHOWTO
//en.wikipedia.org/w/index.php?title=Robots_exclusion_standard&action=edit
//meta.wikimedia.org/wiki/Help:Transwiki
//en.wikiversity.org/wiki/
//en.wikibooks.org/wiki/
//en.wikivoyage.org/wiki/
```
## Flags
```bash
@ -178,6 +196,5 @@ External links
## TODO:
* Print attribute function `attr{attr1, attr2}`
* Print as json function `json{}`
* Switch `-n` from a flag to a function

View File

@ -28,11 +28,26 @@ func (t TextDisplayer) Display(nodes []*html.Node) {
}
}
type AttrDisplayer struct {
Attr string
}
func (a AttrDisplayer) Display(nodes []*html.Node) {
for _, node := range nodes {
attributes := node.Attr
for _, attr := range attributes {
if attr.Key == a.Attr {
fmt.Println(attr.Val)
}
}
}
}
var (
// Display function helpers
displayMatcher *regexp.Regexp = regexp.MustCompile(`\{[^\}]*\}$`)
textFuncMatcher = regexp.MustCompile(`^text\{\}$`)
attrFuncMatcher = regexp.MustCompile(`^attr\{[^\}]*\}$`)
attrFuncMatcher = regexp.MustCompile(`^attr\{([^\}]*)\}$`)
)
func NewDisplayFunc(text string) (Displayer, error) {
@ -43,7 +58,12 @@ func NewDisplayFunc(text string) (Displayer, error) {
case textFuncMatcher.MatchString(text):
return TextDisplayer{}, nil
case attrFuncMatcher.MatchString(text):
return nil, fmt.Errorf("attr")
matches := attrFuncMatcher.FindStringSubmatch(text)
if len(matches) != 2 {
return nil, fmt.Errorf("")
} else {
return AttrDisplayer{matches[1]}, nil
}
}
return nil, fmt.Errorf("Not a display function")
}