From fedffd1784450d55e4cd3845a451f62c6bff1736 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Sat, 18 Nov 2017 13:06:10 +0900 Subject: [PATCH] Move extractURLS function --- file_checker.go | 37 +++++++++++++++++++++++++++ main_test.go => file_checker_test.go | 0 main.go | 38 ---------------------------- 3 files changed, 37 insertions(+), 38 deletions(-) rename main_test.go => file_checker_test.go (100%) diff --git a/file_checker.go b/file_checker.go index f86f68b..a1f8a2e 100644 --- a/file_checker.go +++ b/file_checker.go @@ -75,3 +75,40 @@ func (r fileResult) Ok() bool { return true } + +func extractURLs(n *html.Node) []string { + ss := make(map[string]bool) + ns := make([]*html.Node, 0, 1024) + ns = append(ns, n) + + for len(ns) > 0 { + i := len(ns) - 1 + n := ns[i] + ns = ns[:i] + + if n.Type == html.ElementNode { + switch n.Data { + case "a": + for _, a := range n.Attr { + if a.Key == "href" && isURL(a.Val) { + ss[a.Val] = true + break + } + } + case "img": + for _, a := range n.Attr { + if a.Key == "src" && isURL(a.Val) { + ss[a.Val] = true + break + } + } + } + } + + for n := n.FirstChild; n != nil; n = n.NextSibling { + ns = append(ns, n) + } + } + + return stringSetToSlice(ss) +} diff --git a/main_test.go b/file_checker_test.go similarity index 100% rename from main_test.go rename to file_checker_test.go diff --git a/main.go b/main.go index b583225..5c1930d 100644 --- a/main.go +++ b/main.go @@ -6,7 +6,6 @@ import ( "time" "github.com/docopt/docopt-go" - "golang.org/x/net/html" ) const usage = `Link checker for Markdown and HTML @@ -57,43 +56,6 @@ func main() { } } -func extractURLs(n *html.Node) []string { - ss := make(map[string]bool) - ns := make([]*html.Node, 0, 1024) - ns = append(ns, n) - - for len(ns) > 0 { - i := len(ns) - 1 - n := ns[i] - ns = ns[:i] - - if n.Type == html.ElementNode { - switch n.Data { - case "a": - for _, a := range n.Attr { - if a.Key == "href" && isURL(a.Val) { - ss[a.Val] = true - break - } - } - case "img": - for _, a := range n.Attr { - if a.Key == "src" && isURL(a.Val) { - ss[a.Val] = true - break - } - } - } - } - - for n := n.FirstChild; n != nil; n = n.NextSibling { - ns = append(ns, n) - } - } - - return stringSetToSlice(ss) -} - func isURL(s string) bool { u, err := url.Parse(s) return err == nil && (u.Scheme == "http" || u.Scheme == "https")