go trieval 源码

2022-07-15 浏览 (904)

golang trieval 代码

文件路径:/src/vendor/golang.org/x/net/idna/trieval.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
}

相关信息

go 源码目录

相关文章

go go118 源码

go idna10.0.0 源码

go idna9.0.0 源码

go pre_go118 源码

go punycode 源码

go tables10.0.0 源码

go tables11.0.0 源码

go tables12.0.0 源码

go tables13.0.0 源码

go tables9.0.0 源码

^