|
|
// 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 }
|