aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <m.shulhan@gmail.com>2020-03-28 16:33:47 +0700
committerShulhan <m.shulhan@gmail.com>2020-03-28 16:33:47 +0700
commit7ba65e8fa06ab9212e4a7028863f6d33adedd5a0 (patch)
treeb4d12487767e78fbba5a6156092e149829160dac
parent23a277ba6c3513346e29d39c5b2226219981fce0 (diff)
downloadkamusku-7ba65e8fa06ab9212e4a7028863f6d33adedd5a0.tar.xz
kbbi: urai dan cetak contoh kalimat dalam definisi kata
-rw-r--r--cmd/kbbi/main.go12
-rw-r--r--definisi_kata.go38
2 files changed, 44 insertions, 6 deletions
diff --git a/cmd/kbbi/main.go b/cmd/kbbi/main.go
index 2f7a322..f05e139 100644
--- a/cmd/kbbi/main.go
+++ b/cmd/kbbi/main.go
@@ -87,8 +87,16 @@ func main() {
}
fmt.Println("===", kata, ":", pesan)
- for _, defKata := range daftarDefinisi {
- fmt.Printf("\t%s: %s\n", defKata.Nomina, defKata.Isi)
+ for x, defKata := range daftarDefinisi {
+ fmt.Printf(" Definisi %d: %s\n", x+1, defKata.Isi)
+
+ for y, nomina := range defKata.Kelas {
+ fmt.Printf(" Kelas #%d: %s\n", y+1, nomina)
+ }
+ for z, contoh := range defKata.Contoh {
+ fmt.Printf(" Contoh #%d: %s\n", z+1, contoh)
+ }
+ fmt.Println()
}
}
}
diff --git a/definisi_kata.go b/definisi_kata.go
index 9bd3368..f1ac008 100644
--- a/definisi_kata.go
+++ b/definisi_kata.go
@@ -5,12 +5,15 @@
package kbbi
import (
+ "strings"
+
"golang.org/x/net/html"
)
type DefinisiKata struct {
- Nomina []string
- Isi string
+ Kelas []string `json:"kelas"`
+ Isi string `json:"isi"`
+ Contoh []string `json:"contoh"`
}
func parseDefinisiKata(li *html.Node) (defKata *DefinisiKata) {
@@ -31,13 +34,40 @@ func parseDefinisiKata(li *html.Node) (defKata *DefinisiKata) {
if attr.Key != attrNameTitle {
continue
}
- defKata.Nomina = append(defKata.Nomina, attr.Val)
+ attrVal := strings.Trim(attr.Val, "[]")
+ defKata.Kelas = append(defKata.Kelas, attrVal)
}
elSpan = getNextSibling(elSpan)
}
el := getNextSibling(elFont)
- defKata.Isi = el.Data
+ defKata.Isi = strings.TrimSpace(el.Data)
+
+ if defKata.Isi[len(defKata.Isi)-1] != ':' {
+ return defKata
+ }
+
+ defKata.Isi = defKata.Isi[:len(defKata.Isi)-1]
+
+ // Parse the example of kata in the next sibling.
+ el = getNextSibling(el)
+ for el != nil {
+ if el.Data != tagNameFont {
+ break
+ }
+
+ elItalic = getFirstChild(el)
+ if elItalic.Data != tagNameItalic {
+ break
+ }
+
+ elText := getFirstChild(elItalic)
+ if elText != nil {
+ defKata.Contoh = append(defKata.Contoh, elText.Data)
+ }
+
+ el = getNextSibling(el)
+ }
return defKata
}