| 
									
										
										
										
											2021-08-12 21:03:24 +02:00
										 |  |  | // 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: | 
					
						
							|  |  |  | // | 
					
						
							| 
									
										
										
										
											2022-05-02 14:05:18 +01:00
										 |  |  | //	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 | 
					
						
							| 
									
										
										
										
											2021-08-12 21:03:24 +02:00
										 |  |  | // | 
					
						
							|  |  |  | // 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 | 
					
						
							|  |  |  | } |