mirror of
https://github.com/walles/moar.git
synced 2024-11-27 11:03:58 +03:00
Case insensitive search on lowercase-only pattern
This commit is contained in:
parent
ea5b4fdefe
commit
2f5c2da2e3
21
m/pager.go
21
m/pager.go
@ -6,6 +6,7 @@ import (
|
|||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
"github.com/gdamore/tcell"
|
"github.com/gdamore/tcell"
|
||||||
)
|
)
|
||||||
@ -279,17 +280,29 @@ func ToPattern(compileMe string) *regexp.Regexp {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
pattern, err := regexp.Compile(compileMe)
|
hasUppercase := false
|
||||||
|
for _, char := range compileMe {
|
||||||
|
if unicode.IsUpper(char) {
|
||||||
|
hasUppercase = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Smart case; be case insensitive unless there are upper case chars
|
||||||
|
// in the search string
|
||||||
|
prefix := "(?i)"
|
||||||
|
if hasUppercase {
|
||||||
|
prefix = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
pattern, err := regexp.Compile(prefix + compileMe)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// Search string is a regexp
|
// Search string is a regexp
|
||||||
// FIXME: Make this case insensitive if input is all-lowercase
|
|
||||||
return pattern
|
return pattern
|
||||||
}
|
}
|
||||||
|
|
||||||
pattern, err = regexp.Compile(regexp.QuoteMeta(compileMe))
|
pattern, err = regexp.Compile(prefix + regexp.QuoteMeta(compileMe))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// Pattern matching the string exactly
|
// Pattern matching the string exactly
|
||||||
// FIXME: Make this case insensitive if input is all-lowercase
|
|
||||||
return pattern
|
return pattern
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,4 +218,20 @@ func TestManPageFormatting(t *testing.T) {
|
|||||||
|
|
||||||
func TestToPattern(t *testing.T) {
|
func TestToPattern(t *testing.T) {
|
||||||
assert.Assert(t, ToPattern("") == nil)
|
assert.Assert(t, ToPattern("") == nil)
|
||||||
|
|
||||||
|
// Test regexp matching
|
||||||
|
assert.Assert(t, ToPattern("G.*S").MatchString("GRIIIS"))
|
||||||
|
assert.Assert(t, !ToPattern("G.*S").MatchString("gRIIIS"))
|
||||||
|
|
||||||
|
// Test case insensitive regexp matching
|
||||||
|
assert.Assert(t, ToPattern("g.*s").MatchString("GRIIIS"))
|
||||||
|
assert.Assert(t, ToPattern("g.*s").MatchString("gRIIIS"))
|
||||||
|
|
||||||
|
// Test non-regexp matching
|
||||||
|
assert.Assert(t, ToPattern(")G").MatchString(")G"))
|
||||||
|
assert.Assert(t, !ToPattern(")G").MatchString(")g"))
|
||||||
|
|
||||||
|
// Test case insensitive non-regexp matching
|
||||||
|
assert.Assert(t, ToPattern(")g").MatchString(")G"))
|
||||||
|
assert.Assert(t, ToPattern(")g").MatchString(")g"))
|
||||||
}
|
}
|
||||||
|
12
test.sh
12
test.sh
@ -2,14 +2,10 @@
|
|||||||
|
|
||||||
set -e -o pipefail
|
set -e -o pipefail
|
||||||
|
|
||||||
# Ensure we can cross compile
|
# Unit tests first
|
||||||
GOOS=linux GOARCH=386 go build
|
|
||||||
GOOS=darwin GOARCH=amd64 go build
|
|
||||||
|
|
||||||
# Unit tests first...
|
|
||||||
go test github.com/walles/moar/m
|
go test github.com/walles/moar/m
|
||||||
|
|
||||||
# ... then Verify sending the output to a file
|
# Verify sending the output to a file
|
||||||
go build
|
go build
|
||||||
|
|
||||||
RESULT="$(mktemp)"
|
RESULT="$(mktemp)"
|
||||||
@ -34,5 +30,9 @@ if ./moar does-not-exist >& /dev/null ; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Ensure we can cross compile
|
||||||
|
GOOS=linux GOARCH=386 go build
|
||||||
|
GOOS=darwin GOARCH=amd64 go build
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "All tests passed!"
|
echo "All tests passed!"
|
||||||
|
Loading…
Reference in New Issue
Block a user