libgo: update to go1.9
[official-gcc.git] / libgo / go / golang_org / x / net / idna / trieval.go
blobcd88e4d6bdaa874ca4fa9c21f5943746bf4db800
1 // Code generated by running "go run gen.go -core" in golang.org/x/text. DO NOT EDIT.
3 // Code generated by running "go generate" in golang_org/x/text. DO NOT EDIT.
5 package idna
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.
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.
20 // The per-rune values have the following format:
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
40 // See the definitions below for a more detailed description of the various
41 // bits.
42 type info uint16
44 const (
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.
51 joinShift = 8
52 joinMask = 0x07
54 viramaModifier = 0x0800
55 modifier = 0x1000
58 // A category corresponds to a category defined in the IDNA mapping table.
59 type category uint16
61 const (
62 unknown category = 0 // not defined currently in unicode.
63 mapped category = 1
64 disallowedSTD3Mapped category = 2
65 deviation category = 3
68 const (
69 valid category = 0x08
70 validNV8 category = 0x18
71 validXV8 category = 0x28
72 disallowed category = 0x40
73 disallowedSTD3Valid category = 0x80
74 ignored category = 0xC0
77 // join types and additional rune information
78 const (
79 joiningL = (iota + 1)
80 joiningD
81 joiningT
82 joiningR
84 //the following types are derived during processing
85 joinZWJ
86 joinZWNJ
87 joinVirama
88 numJoinTypes
91 func (c info) isMapped() bool {
92 return c&0x3 != 0
95 func (c info) category() category {
96 small := c & catSmallMask
97 if small != 0 {
98 return category(small)
100 return category(c & catBigMask)
103 func (c info) joinType() info {
104 if c.isMapped() {
105 return 0
107 return (c >> joinShift) & joinMask
110 func (c info) isModifier() bool {
111 return c&(modifier|catSmallMask) == modifier
114 func (c info) isViramaModifier() bool {
115 return c&(viramaModifier|catSmallMask) == viramaModifier