case insenstive regexp search

master
Bel LaPointe 2019-12-17 15:31:00 -07:00
parent 72894cd5cc
commit 5be556a4cf
1 changed files with 9 additions and 5 deletions

View File

@ -2,17 +2,21 @@ package notes
import ( import (
"bufio" "bufio"
"bytes"
"local/notes-server/filetree" "local/notes-server/filetree"
"log" "log"
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
"regexp"
) )
func (n *Notes) Search(phrase string) (string, error) { func (n *Notes) Search(phrase string) (string, error) {
pattern, err := regexp.Compile("(?i)" + phrase)
if err != nil {
return "", err
}
files := filetree.NewFiles() files := filetree.NewFiles()
err := filepath.Walk(n.root, err = filepath.Walk(n.root,
func(walked string, info os.FileInfo, err error) error { func(walked string, info os.FileInfo, err error) error {
if err != nil { if err != nil {
return err return err
@ -23,7 +27,7 @@ func (n *Notes) Search(phrase string) (string, error) {
if size := info.Size(); size < 1 || size > (5*1024*1024) { if size := info.Size(); size < 1 || size > (5*1024*1024) {
return nil return nil
} }
ok, err := grepFile(walked, []byte(phrase)) ok, err := grepFile(walked, pattern)
if err != nil && err.Error() == "bufio.Scanner: token too long" { if err != nil && err.Error() == "bufio.Scanner: token too long" {
err = nil err = nil
} }
@ -40,7 +44,7 @@ func (n *Notes) Search(phrase string) (string, error) {
return filetree.Paths(*files).List(true), err return filetree.Paths(*files).List(true), err
} }
func grepFile(file string, phrase []byte) (bool, error) { func grepFile(file string, pattern *regexp.Regexp) (bool, error) {
f, err := os.Open(file) f, err := os.Open(file)
if err != nil { if err != nil {
return false, err return false, err
@ -48,7 +52,7 @@ func grepFile(file string, phrase []byte) (bool, error) {
defer f.Close() defer f.Close()
scanner := bufio.NewScanner(f) scanner := bufio.NewScanner(f)
for scanner.Scan() { for scanner.Scan() {
if bytes.Contains(scanner.Bytes(), phrase) { if pattern.Match(scanner.Bytes()) {
return true, scanner.Err() return true, scanner.Err()
} }
} }