# HG changeset patch # User pyon@macmini # Date 1549193462 -32400 # Node ID 3d6709f410373d272ea18689f4c4881d22ed9b14 # Parent 1b293bb0a01189f9570781ab11f558999d60b206 gogemo. diff -r 1b293bb0a011 -r 3d6709f41037 src/gogemo/gogemo/gogemo.go --- /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 + } + } + } +} + diff -r 1b293bb0a011 -r 3d6709f41037 src/gogemo/gogemo/gogemo_dict.go.gz Binary file src/gogemo/gogemo/gogemo_dict.go.gz has changed diff -r 1b293bb0a011 -r 3d6709f41037 src/gogemo/main.go --- /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() +} +