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