|
- // Copyright 2016 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.
-
- //go:generate go run gen.go
-
- // Package runenames provides rune names from the Unicode Character Database.
- // For example, the name for '\u0100' is "LATIN CAPITAL LETTER A WITH MACRON".
- //
- // See https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt
- package runenames
-
- import (
- "sort"
- )
-
- // Name returns the name for r.
- func Name(r rune) string {
- i := sort.Search(len(entries), func(j int) bool {
- return entries[j].startRune() > r
- })
- if i == 0 {
- return ""
- }
- e := entries[i-1]
-
- offset := int(r - e.startRune())
- if offset >= e.numRunes() {
- return ""
- }
-
- if e.direct() {
- o := e.index()
- n := e.len()
- return directData[o : o+n]
- }
-
- start := int(index[e.index()+offset])
- end := int(index[e.index()+offset+1])
- base1 := e.base() << 16
- base2 := base1
- if start > end {
- base2 += 1 << 16
- }
- return singleData[start+base1 : end+base2]
- }
-
- func (e entry) len() int { return e.base() }
|