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