1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// +build ignore
6
7package main
8
9// Class is the Unicode BiDi class. Each rune has a single class.
10type Class uint
11
12const (
13	L       Class = iota // LeftToRight
14	R                    // RightToLeft
15	EN                   // EuropeanNumber
16	ES                   // EuropeanSeparator
17	ET                   // EuropeanTerminator
18	AN                   // ArabicNumber
19	CS                   // CommonSeparator
20	B                    // ParagraphSeparator
21	S                    // SegmentSeparator
22	WS                   // WhiteSpace
23	ON                   // OtherNeutral
24	BN                   // BoundaryNeutral
25	NSM                  // NonspacingMark
26	AL                   // ArabicLetter
27	Control              // Control LRO - PDI
28
29	numClass
30
31	LRO // LeftToRightOverride
32	RLO // RightToLeftOverride
33	LRE // LeftToRightEmbedding
34	RLE // RightToLeftEmbedding
35	PDF // PopDirectionalFormat
36	LRI // LeftToRightIsolate
37	RLI // RightToLeftIsolate
38	FSI // FirstStrongIsolate
39	PDI // PopDirectionalIsolate
40
41	unknownClass = ^Class(0)
42)
43
44var controlToClass = map[rune]Class{
45	0x202D: LRO, // LeftToRightOverride,
46	0x202E: RLO, // RightToLeftOverride,
47	0x202A: LRE, // LeftToRightEmbedding,
48	0x202B: RLE, // RightToLeftEmbedding,
49	0x202C: PDF, // PopDirectionalFormat,
50	0x2066: LRI, // LeftToRightIsolate,
51	0x2067: RLI, // RightToLeftIsolate,
52	0x2068: FSI, // FirstStrongIsolate,
53	0x2069: PDI, // PopDirectionalIsolate,
54}
55
56// A trie entry has the following bits:
57// 7..5  XOR mask for brackets
58// 4     1: Bracket open, 0: Bracket close
59// 3..0  Class type
60
61const (
62	openMask     = 0x10
63	xorMaskShift = 5
64)
65