forked from jshiffer/matterbridge
120 lines
3.0 KiB
Go
120 lines
3.0 KiB
Go
|
// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
|
||
|
|
||
|
package idna
|
||
|
|
||
|
// This file contains definitions for interpreting the trie value of the idna
|
||
|
// trie generated by "go run gen*.go". It is shared by both the generator
|
||
|
// program and the resultant package. Sharing is achieved by the generator
|
||
|
// copying gen_trieval.go to trieval.go and changing what's above this comment.
|
||
|
|
||
|
// info holds information from the IDNA mapping table for a single rune. It is
|
||
|
// the value returned by a trie lookup. In most cases, all information fits in
|
||
|
// a 16-bit value. For mappings, this value may contain an index into a slice
|
||
|
// with the mapped string. Such mappings can consist of the actual mapped value
|
||
|
// or an XOR pattern to be applied to the bytes of the UTF8 encoding of the
|
||
|
// input rune. This technique is used by the cases packages and reduces the
|
||
|
// table size significantly.
|
||
|
//
|
||
|
// The per-rune values have the following format:
|
||
|
//
|
||
|
// if mapped {
|
||
|
// if inlinedXOR {
|
||
|
// 15..13 inline XOR marker
|
||
|
// 12..11 unused
|
||
|
// 10..3 inline XOR mask
|
||
|
// } else {
|
||
|
// 15..3 index into xor or mapping table
|
||
|
// }
|
||
|
// } else {
|
||
|
// 15..14 unused
|
||
|
// 13 mayNeedNorm
|
||
|
// 12..11 attributes
|
||
|
// 10..8 joining type
|
||
|
// 7..3 category type
|
||
|
// }
|
||
|
// 2 use xor pattern
|
||
|
// 1..0 mapped category
|
||
|
//
|
||
|
// See the definitions below for a more detailed description of the various
|
||
|
// bits.
|
||
|
type info uint16
|
||
|
|
||
|
const (
|
||
|
catSmallMask = 0x3
|
||
|
catBigMask = 0xF8
|
||
|
indexShift = 3
|
||
|
xorBit = 0x4 // interpret the index as an xor pattern
|
||
|
inlineXOR = 0xE000 // These bits are set if the XOR pattern is inlined.
|
||
|
|
||
|
joinShift = 8
|
||
|
joinMask = 0x07
|
||
|
|
||
|
// Attributes
|
||
|
attributesMask = 0x1800
|
||
|
viramaModifier = 0x1800
|
||
|
modifier = 0x1000
|
||
|
rtl = 0x0800
|
||
|
|
||
|
mayNeedNorm = 0x2000
|
||
|
)
|
||
|
|
||
|
// A category corresponds to a category defined in the IDNA mapping table.
|
||
|
type category uint16
|
||
|
|
||
|
const (
|
||
|
unknown category = 0 // not currently defined in unicode.
|
||
|
mapped category = 1
|
||
|
disallowedSTD3Mapped category = 2
|
||
|
deviation category = 3
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
valid category = 0x08
|
||
|
validNV8 category = 0x18
|
||
|
validXV8 category = 0x28
|
||
|
disallowed category = 0x40
|
||
|
disallowedSTD3Valid category = 0x80
|
||
|
ignored category = 0xC0
|
||
|
)
|
||
|
|
||
|
// join types and additional rune information
|
||
|
const (
|
||
|
joiningL = (iota + 1)
|
||
|
joiningD
|
||
|
joiningT
|
||
|
joiningR
|
||
|
|
||
|
//the following types are derived during processing
|
||
|
joinZWJ
|
||
|
joinZWNJ
|
||
|
joinVirama
|
||
|
numJoinTypes
|
||
|
)
|
||
|
|
||
|
func (c info) isMapped() bool {
|
||
|
return c&0x3 != 0
|
||
|
}
|
||
|
|
||
|
func (c info) category() category {
|
||
|
small := c & catSmallMask
|
||
|
if small != 0 {
|
||
|
return category(small)
|
||
|
}
|
||
|
return category(c & catBigMask)
|
||
|
}
|
||
|
|
||
|
func (c info) joinType() info {
|
||
|
if c.isMapped() {
|
||
|
return 0
|
||
|
}
|
||
|
return (c >> joinShift) & joinMask
|
||
|
}
|
||
|
|
||
|
func (c info) isModifier() bool {
|
||
|
return c&(modifier|catSmallMask) == modifier
|
||
|
}
|
||
|
|
||
|
func (c info) isViramaModifier() bool {
|
||
|
return c&(attributesMask|catSmallMask) == viramaModifier
|
||
|
}
|