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, )}