]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/golang.org/x/net/idna/trieval.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / golang.org / x / net / idna / trieval.go
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 }