Source File
graphic.go
Belonging Package
unicode
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package unicode
// Bit masks for each code point under U+0100, for fast lookup.
const (
pC = 1 << iota // a control character.
pP // a punctuation character.
pN // a numeral.
pS // a symbolic character.
pZ // a spacing character.
pLu // an upper-case letter.
pLl // a lower-case letter.
pp // a printable character according to Go's definition.
pg = pp | pZ // a graphical character according to the Unicode definition.
pLo = pLl | pLu // a letter that is neither upper nor lower case.
pLmask = pLo
)
// GraphicRanges defines the set of graphic characters according to Unicode.
var GraphicRanges = []*RangeTable{
L, M, N, P, S, Zs,
}
// PrintRanges defines the set of printable characters according to Go.
// ASCII space, U+0020, is handled separately.
var PrintRanges = []*RangeTable{
L, M, N, P, S,
}
// IsGraphic reports whether the rune is defined as a Graphic by Unicode.
// Such characters include letters, marks, numbers, punctuation, symbols, and
// spaces, from categories [L], [M], [N], [P], [S], [Zs].
func ( rune) bool {
// We convert to uint32 to avoid the extra test for negative,
// and in the index we convert to uint8 to avoid the range check.
if uint32() <= MaxLatin1 {
return properties[uint8()]&pg != 0
}
return In(, GraphicRanges...)
}
// IsPrint reports whether the rune is defined as printable by Go. Such
// characters include letters, marks, numbers, punctuation, symbols, and the
// ASCII space character, from categories [L], [M], [N], [P], [S] and the ASCII space
// character. This categorization is the same as [IsGraphic] except that the
// only spacing character is ASCII space, U+0020.
func ( rune) bool {
if uint32() <= MaxLatin1 {
return properties[uint8()]&pp != 0
}
return In(, PrintRanges...)
}
// IsOneOf reports whether the rune is a member of one of the ranges.
// The function "In" provides a nicer signature and should be used in preference to IsOneOf.
func ( []*RangeTable, rune) bool {
for , := range {
if Is(, ) {
return true
}
}
return false
}
// In reports whether the rune is a member of one of the ranges.
func ( rune, ...*RangeTable) bool {
for , := range {
if Is(, ) {
return true
}
}
return false
}
// IsControl reports whether the rune is a control character.
// The [C] ([Other]) Unicode category includes more code points
// such as surrogates; use [Is](C, r) to test for them.
func ( rune) bool {
if uint32() <= MaxLatin1 {
return properties[uint8()]&pC != 0
}
// All control characters are < MaxLatin1.
return false
}
// IsLetter reports whether the rune is a letter (category [L]).
func ( rune) bool {
if uint32() <= MaxLatin1 {
return properties[uint8()]&(pLmask) != 0
}
return isExcludingLatin(Letter, )
}
// IsMark reports whether the rune is a mark character (category [M]).
func ( rune) bool {
// There are no mark characters in Latin-1.
return isExcludingLatin(Mark, )
}
// IsNumber reports whether the rune is a number (category [N]).
func ( rune) bool {
if uint32() <= MaxLatin1 {
return properties[uint8()]&pN != 0
}
return isExcludingLatin(Number, )
}
// IsPunct reports whether the rune is a Unicode punctuation character
// (category [P]).
func ( rune) bool {
if uint32() <= MaxLatin1 {
return properties[uint8()]&pP != 0
}
return Is(Punct, )
}
// IsSpace reports whether the rune is a space character as defined
// by Unicode's White Space property; in the Latin-1 space
// this is
//
// '\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP).
//
// Other definitions of spacing characters are set by category
// Z and property [Pattern_White_Space].
func ( rune) bool {
// This property isn't the same as Z; special-case it.
if uint32() <= MaxLatin1 {
switch {
case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0:
return true
}
return false
}
return isExcludingLatin(White_Space, )
}
// IsSymbol reports whether the rune is a symbolic character.
func ( rune) bool {
if uint32() <= MaxLatin1 {
return properties[uint8()]&pS != 0
}
return isExcludingLatin(Symbol, )
}
The pages are generated with Golds v0.7.0-preview. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |