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