1// Copied from the golang.org/x/text repo; DO NOT EDIT 2 3// This file was generated by go generate; DO NOT EDIT 4 5package idna 6 7// This file contains definitions for interpreting the trie value of the idna 8// trie generated by "go run gen*.go". It is shared by both the generator 9// program and the resultant package. Sharing is achieved by the generator 10// copying gen_trieval.go to trieval.go and changing what's above this comment. 11 12// info holds information from the IDNA mapping table for a single rune. It is 13// the value returned by a trie lookup. In most cases, all information fits in 14// a 16-bit value. For mappings, this value may contain an index into a slice 15// with the mapped string. Such mappings can consist of the actual mapped value 16// or an XOR pattern to be applied to the bytes of the UTF8 encoding of the 17// input rune. This technique is used by the cases packages and reduces the 18// table size significantly. 19// 20// The per-rune values have the following format: 21// 22// if mapped { 23// if inlinedXOR { 24// 15..13 inline XOR marker 25// 12..11 unused 26// 10..3 inline XOR mask 27// } else { 28// 15..3 index into xor or mapping table 29// } 30// } else { 31// 15..13 unused 32// 12 modifier (including virama) 33// 11 virama modifier 34// 10..8 joining type 35// 7..3 category type 36// } 37// 2 use xor pattern 38// 1..0 mapped category 39// 40// See the definitions below for a more detailed description of the various 41// bits. 42type info uint16 43 44const ( 45 catSmallMask = 0x3 46 catBigMask = 0xF8 47 indexShift = 3 48 xorBit = 0x4 // interpret the index as an xor pattern 49 inlineXOR = 0xE000 // These bits are set if the XOR pattern is inlined. 50 51 joinShift = 8 52 joinMask = 0x07 53 54 viramaModifier = 0x0800 55 modifier = 0x1000 56) 57 58// A category corresponds to a category defined in the IDNA mapping table. 59type category uint16 60 61const ( 62 unknown category = 0 // not defined currently in unicode. 63 mapped category = 1 64 disallowedSTD3Mapped category = 2 65 deviation category = 3 66) 67 68const ( 69 valid category = 0x08 70 validNV8 category = 0x18 71 validXV8 category = 0x28 72 disallowed category = 0x40 73 disallowedSTD3Valid category = 0x80 74 ignored category = 0xC0 75) 76 77// join types and additional rune information 78const ( 79 joiningL = (iota + 1) 80 joiningD 81 joiningT 82 joiningR 83 84 //the following types are derived during processing 85 joinZWJ 86 joinZWNJ 87 joinVirama 88 numJoinTypes 89) 90 91func (c info) isMapped() bool { 92 return c&0x3 != 0 93} 94 95func (c info) category() category { 96 small := c & catSmallMask 97 if small != 0 { 98 return category(small) 99 } 100 return category(c & catBigMask) 101} 102 103func (c info) joinType() info { 104 if c.isMapped() { 105 return 0 106 } 107 return (c >> joinShift) & joinMask 108} 109 110func (c info) isModifier() bool { 111 return c&(modifier|catSmallMask) == modifier 112} 113 114func (c info) isViramaModifier() bool { 115 return c&(viramaModifier|catSmallMask) == viramaModifier 116} 117