summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <m.shulhan@gmail.com>2020-04-05 21:37:06 +0700
committerShulhan <m.shulhan@gmail.com>2020-04-05 21:37:06 +0700
commit5ea27bffa9020ddcdc62774a29e399e76ae5997c (patch)
tree9d1619460c2cb3d32cb014dd0e9b477344f8e843
parent79649636835eba0ea309c1208c1056b3e98d244a (diff)
downloadkamusku-5ea27bffa9020ddcdc62774a29e399e76ae5997c.tar.xz
all: simplify iterating HTML tree with NodeIterator
-rw-r--r--direct_client.go39
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--kata.go26
4 files changed, 11 insertions, 60 deletions
diff --git a/direct_client.go b/direct_client.go
index 8fa19b9..485961d 100644
--- a/direct_client.go
+++ b/direct_client.go
@@ -224,29 +224,14 @@ func (cl *directClient) setCookies(cookies []*http.Cookie) {
func (cl *directClient) parseHTMLKataDasar(htmlBody []byte) (
kataDasar DaftarKata, err error,
) {
- node, err := html.Parse(bytes.NewReader(htmlBody))
+ iter, err := html.Parse(bytes.NewReader(htmlBody))
if err != nil {
return nil, err
}
kataDasar = make(DaftarKata)
- prev := html.NewNode(nil)
-
- for {
- switch {
- case node.FirstChild != nil && node.FirstChild != prev.Node &&
- node.LastChild != prev.Node:
- node.Node = node.FirstChild
- case node.NextSibling != nil:
- node.Node = node.NextSibling
- default:
- prev.Node = node.Node
- node.Node = node.Parent
- }
- if node.Node == nil {
- break
- }
+ for node := iter.Next(); node != nil; node = iter.Next() {
if !node.IsElement() {
continue
}
@@ -270,28 +255,12 @@ func (cl *directClient) parseHTMLKataDasar(htmlBody []byte) (
func (cl *directClient) parseHTMLLogin(htmlBody []byte) (
token string, err error,
) {
- node, err := html.Parse(bytes.NewReader(htmlBody))
+ iter, err := html.Parse(bytes.NewReader(htmlBody))
if err != nil {
return "", err
}
- prev := html.NewNode(nil)
-
- for {
- switch {
- case node.FirstChild != nil && node.FirstChild != prev.Node &&
- node.LastChild != prev.Node:
- node.Node = node.FirstChild
- case node.NextSibling != nil:
- node.Node = node.NextSibling
- default:
- prev.Node = node.Node
- node.Node = node.Parent
- }
- if node.Node == nil {
- break
- }
-
+ for node := iter.Next(); node != nil; node = iter.Next() {
if !node.IsElement() {
continue
}
diff --git a/go.mod b/go.mod
index aa96a2f..9e964b4 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/shuLhan/kbbi
go 1.13
require (
- github.com/shuLhan/share v0.14.1-0.20200405081315-fe987df87daa
+ github.com/shuLhan/share v0.14.1-0.20200405143508-d34b820adf64
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
)
diff --git a/go.sum b/go.sum
index 7ff9b47..862d195 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,5 @@
-github.com/shuLhan/share v0.14.1-0.20200405081315-fe987df87daa h1:PUSymJV6kPNjsziMhdHGjw2trQHknJPq29Is6MDYGcs=
-github.com/shuLhan/share v0.14.1-0.20200405081315-fe987df87daa/go.mod h1:mpa0ub5qmuko/muUlOROOqLCSHKU76GzuAR/sUaSwRo=
+github.com/shuLhan/share v0.14.1-0.20200405143508-d34b820adf64 h1:1UTOAeD7Jlon7/hJBLXDDxKjVNFOVrCAY1gKx7NyILg=
+github.com/shuLhan/share v0.14.1-0.20200405143508-d34b820adf64/go.mod h1:mpa0ub5qmuko/muUlOROOqLCSHKU76GzuAR/sUaSwRo=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
diff --git a/kata.go b/kata.go
index d6502f0..dfadf61 100644
--- a/kata.go
+++ b/kata.go
@@ -31,28 +31,12 @@ type Kata struct {
// definition of the word.
//
func (kata *Kata) parseHTMLEntri(htmlBody []byte) (err error) {
- node, err := html.Parse(bytes.NewReader(htmlBody))
+ iter, err := html.Parse(bytes.NewReader(htmlBody))
if err != nil {
return err
}
- prev := html.NewNode(nil)
-
- for {
- switch {
- case node.FirstChild != nil && node.FirstChild != prev.Node &&
- node.LastChild != prev.Node:
- node.Node = node.FirstChild
- case node.NextSibling != nil:
- node.Node = node.NextSibling
- default:
- prev.Node = node.Node
- node.Node = node.Parent
- }
- if node.Node == nil {
- break
- }
-
+ for node := iter.Next(); node != nil; node = iter.Next() {
if !node.IsElement() {
continue
}
@@ -71,10 +55,8 @@ func (kata *Kata) parseHTMLEntri(htmlBody []byte) (err error) {
kata.Definisi = append(kata.Definisi, defKata)
li = li.GetNextSibling()
}
- node.Node = node.NextSibling
-
- default:
- continue
+ next := node.GetNextSibling()
+ iter.SetNext(next)
}
}