mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			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
 | 
						|
}
 |