mirror of
https://github.com/dutchcoders/transfer.sh.git
synced 2025-01-15 13:10:18 +01:00
49 lines
1 KiB
Go
49 lines
1 KiB
Go
|
// 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() }
|