go graphic 源码

2022-07-15 浏览 (859)

golang graphic 代码

文件路径:/src/unicode/graphic.go

/ 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 IsGraphic(r 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(r) <= MaxLatin1 {
		return properties[uint8(r)]&pg != 0
	}
	return In(r, 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 IsPrint(r rune) bool {
	if uint32(r) <= MaxLatin1 {
		return properties[uint8(r)]&pp != 0
	}
	return In(r, 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 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
		}
	}
	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 IsControl(r rune) bool {
	if uint32(r) <= MaxLatin1 {
		return properties[uint8(r)]&pC != 0
	}
	/ All control characters are < MaxLatin1.
	return false
}

/ IsLetter reports whether the rune is a letter (category L).
func IsLetter(r rune) bool {
	if uint32(r) <= MaxLatin1 {
		return properties[uint8(r)]&(pLmask) != 0
	}
	return isExcludingLatin(Letter, r)
}

/ IsMark reports whether the rune is a mark character (category M).
func IsMark(r rune) bool {
	/ There are no mark characters in Latin-1.
	return isExcludingLatin(Mark, r)
}

/ IsNumber reports whether the rune is a number (category N).
func IsNumber(r rune) bool {
	if uint32(r) <= MaxLatin1 {
		return properties[uint8(r)]&pN != 0
	}
	return isExcludingLatin(Number, r)
}

/ IsPunct reports whether the rune is a Unicode punctuation character
/ (category P).
func IsPunct(r rune) bool {
	if uint32(r) <= MaxLatin1 {
		return properties[uint8(r)]&pP != 0
	}
	return Is(Punct, r)
}

/ 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 IsSpace(r rune) bool {
	/ This property isn't the same as Z; special-case it.
	if uint32(r) <= MaxLatin1 {
		switch r {
		case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0:
			return true
		}
		return false
	}
	return isExcludingLatin(White_Space, r)
}

/ IsSymbol reports whether the rune is a symbolic character.
func IsSymbol(r rune) bool {
	if uint32(r) <= MaxLatin1 {
		return properties[uint8(r)]&pS != 0
	}
	return isExcludingLatin(Symbol, r)
}

相关信息

go 源码目录

相关文章

go casetables 源码

go digit 源码

go digit_test 源码

go example_test 源码

go graphic_test 源码

go letter 源码

go letter_test 源码

go script_test 源码

go tables 源码

^