From 5ea27bffa9020ddcdc62774a29e399e76ae5997c Mon Sep 17 00:00:00 2001 From: Shulhan Date: Sun, 5 Apr 2020 21:37:06 +0700 Subject: all: simplify iterating HTML tree with NodeIterator --- direct_client.go | 39 ++++----------------------------------- go.mod | 2 +- go.sum | 4 ++-- kata.go | 26 ++++---------------------- 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) } } -- cgit v1.3