Commit 6a801539 authored by Rob Pike's avatar Rob Pike

unicode: add "In" function to test membership of a rune

The existing function, IsOneOf, is hard to use. Since the slice comes
before the rune, in parallelism with the other Is functions, the slice
is clumsy to build. This CL adds a nicer-signatured In function of
equivalent functionality (its implementation is identical) that's much
easier to use. Compare:
        unicode.IsOneOf([]*unicode.RangeTable{unicode.Letter, unicode.Number}, r)
        unicode.In(r, unicode.Letter, unicode.Number)

R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/11672044
parent a0a45bbb
......@@ -39,7 +39,7 @@ func IsGraphic(r rune) bool {
if uint32(r) <= MaxLatin1 {
return properties[uint8(r)]&pg != 0
}
return IsOneOf(GraphicRanges, r)
return In(r, GraphicRanges...)
}
// IsPrint reports whether the rune is defined as printable by Go. Such
......@@ -51,12 +51,23 @@ func IsPrint(r rune) bool {
if uint32(r) <= MaxLatin1 {
return properties[uint8(r)]&pp != 0
}
return IsOneOf(PrintRanges, r)
return In(r, PrintRanges...)
}
// IsOneOf reports whether the rune is a member of one of the ranges.
func IsOneOf(set []*RangeTable, r rune) bool {
for _, inside := range set {
// The function "In" provides a nicer signature and should be used in preference to IsOneOf.
func IsOneOf(ranges []*RangeTable, r rune) bool {
for _, inside := range ranges {
if Is(inside, r) {
return true
}
}
return false
}
// In reports whether the rune is a member of one of the ranges.
func In(r rune, ranges ...*RangeTable) bool {
for _, inside := range ranges {
if Is(inside, r) {
return true
}
......
......@@ -71,7 +71,7 @@ func TestNumberLatin1(t *testing.T) {
func TestIsPrintLatin1(t *testing.T) {
for i := rune(0); i <= MaxLatin1; i++ {
got := IsPrint(i)
want := IsOneOf(PrintRanges, i)
want := In(i, PrintRanges...)
if i == ' ' {
want = true
}
......@@ -84,7 +84,7 @@ func TestIsPrintLatin1(t *testing.T) {
func TestIsGraphicLatin1(t *testing.T) {
for i := rune(0); i <= MaxLatin1; i++ {
got := IsGraphic(i)
want := IsOneOf(GraphicRanges, i)
want := In(i, GraphicRanges...)
if got != want {
t.Errorf("%U incorrect: got %t; want %t", i, got, want)
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment