changeset 27:3d6709f41037

gogemo.
author pyon@macmini
date Sun, 03 Feb 2019 20:31:02 +0900
parents 1b293bb0a011
children 8e3f320396b8
files src/gogemo/gogemo/gogemo.go src/gogemo/gogemo/gogemo_dict.go.gz src/gogemo/main.go
diffstat 3 files changed, 133 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gogemo/gogemo/gogemo.go	Sun Feb 03 20:31:02 2019 +0900
@@ -0,0 +1,83 @@
+/*
+ Gogemo Library
+ Last Change: 2019-02-03 Sun 20:20:02.
+
+ Written by T.Mutoh
+*/
+package gogemo
+
+import (
+    "bufio"
+    "fmt"
+    "io"
+    "log"
+    "os"
+    "sort"
+    "strings"
+)
+
+type Gogemo struct {
+    list map[string]int
+    files []string
+    current string
+    inv bool
+    wfn bool
+    inenc, outenc bool
+}
+
+func (m *Gogemo) Prepare(roma string, fn []string) {
+    m.files = fn
+    m.list = MakeList(roma)
+}
+
+func (m *Gogemo) SetOptions( inv, wfn bool ) {
+    m.inv = inv
+    m.wfn = wfn
+}
+
+func (m *Gogemo) SetEncodings() {
+}
+
+func (m *Gogemo) Look() {
+    keys := make([]string, 0)
+    for k, _ := range m.list {
+        keys = append(keys, k)
+    }
+    sort.Strings(keys)
+    for _, k := range keys {
+        fmt.Println(k)
+    }
+}
+
+func (m *Gogemo) Search() {
+    if len(m.files) == 0 {
+        m.Search2(os.Stdin)
+    } else {
+        for _, fn := range m.files {
+            f, err := os.Open(fn)
+            if err != nil {
+                log.Fatal(err)
+            }
+            defer f.Close()
+            m.current = fn
+            m.Search2(f)
+        }
+    }
+}
+
+func (m *Gogemo) Search2(r io.Reader) {
+    scanner := bufio.NewScanner(r)
+    for scanner.Scan() {
+        found := false
+        for str, _ := range m.list {
+            if strings.Contains(scanner.Text(), str) && !found {
+                if m.wfn {
+                    fmt.Print(m.current + ":")
+                }
+                fmt.Println(scanner.Text())
+                found = true
+            }
+        }
+    }
+}
+
Binary file src/gogemo/gogemo/gogemo_dict.go.gz has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gogemo/main.go	Sun Feb 03 20:31:02 2019 +0900
@@ -0,0 +1,50 @@
+/*
+ Gogemo: Command-line Migemo program by go.
+ Last Change: 2019-02-03 Sun 19:45:42.
+
+ Written by T.Mutoh
+*/
+package main
+
+import (
+    "flag"
+    "fmt"
+    "os"
+
+    "./gogemo"
+)
+
+const ver string = "1.0"
+
+func main() {
+    inv  := flag.Bool("v", false, "inverse")
+    wfn  := flag.Bool("f", false, "with filename")
+    look := flag.Bool("l", false, "lookup dictionary")
+    // cnt := flag.Bool("c", false, "count matched")
+    // iu  := flag.Bool("w", false, "input  encoding: utf-8")
+    // ou  := flag.Bool("W", false, "output encoding: utf-8")
+    // is  := flag.Bool("s", false, "output encoding: shift-jis")
+    // os  := flag.Bool("S", false, "output encoding: shift-jis")
+    flag.Parse()
+
+    var g gogemo.Gogemo
+    g.SetOptions(*inv, *wfn)
+
+    switch flag.NArg() {
+    case 0:
+        fmt.Fprint( os.Stderr, "[ gogemo v" + ver + " ]\n")
+        flag.PrintDefaults()
+        os.Exit(0)
+    case 1: // from stdin or look dict
+        g.Prepare(flag.Arg(0), nil)
+        if *look {
+            g.Look()
+            os.Exit(0)
+        }
+    default:
+        g.Prepare(flag.Arg(0), flag.Args()[1:])
+    }
+
+    g.Search()
+}
+