|
Packit |
63bb0d |
// Copyright 2015 The Go Authors. All rights reserved.
|
|
Packit |
63bb0d |
// Use of this source code is governed by a BSD-style
|
|
Packit |
63bb0d |
// license that can be found in the LICENSE file.
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// +build ignore
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
package main
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Class is the Unicode BiDi class. Each rune has a single class.
|
|
Packit |
63bb0d |
type Class uint
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
const (
|
|
Packit |
63bb0d |
L Class = iota // LeftToRight
|
|
Packit |
63bb0d |
R // RightToLeft
|
|
Packit |
63bb0d |
EN // EuropeanNumber
|
|
Packit |
63bb0d |
ES // EuropeanSeparator
|
|
Packit |
63bb0d |
ET // EuropeanTerminator
|
|
Packit |
63bb0d |
AN // ArabicNumber
|
|
Packit |
63bb0d |
CS // CommonSeparator
|
|
Packit |
63bb0d |
B // ParagraphSeparator
|
|
Packit |
63bb0d |
S // SegmentSeparator
|
|
Packit |
63bb0d |
WS // WhiteSpace
|
|
Packit |
63bb0d |
ON // OtherNeutral
|
|
Packit |
63bb0d |
BN // BoundaryNeutral
|
|
Packit |
63bb0d |
NSM // NonspacingMark
|
|
Packit |
63bb0d |
AL // ArabicLetter
|
|
Packit |
63bb0d |
Control // Control LRO - PDI
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
numClass
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
LRO // LeftToRightOverride
|
|
Packit |
63bb0d |
RLO // RightToLeftOverride
|
|
Packit |
63bb0d |
LRE // LeftToRightEmbedding
|
|
Packit |
63bb0d |
RLE // RightToLeftEmbedding
|
|
Packit |
63bb0d |
PDF // PopDirectionalFormat
|
|
Packit |
63bb0d |
LRI // LeftToRightIsolate
|
|
Packit |
63bb0d |
RLI // RightToLeftIsolate
|
|
Packit |
63bb0d |
FSI // FirstStrongIsolate
|
|
Packit |
63bb0d |
PDI // PopDirectionalIsolate
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
unknownClass = ^Class(0)
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
var controlToClass = map[rune]Class{
|
|
Packit |
63bb0d |
0x202D: LRO, // LeftToRightOverride,
|
|
Packit |
63bb0d |
0x202E: RLO, // RightToLeftOverride,
|
|
Packit |
63bb0d |
0x202A: LRE, // LeftToRightEmbedding,
|
|
Packit |
63bb0d |
0x202B: RLE, // RightToLeftEmbedding,
|
|
Packit |
63bb0d |
0x202C: PDF, // PopDirectionalFormat,
|
|
Packit |
63bb0d |
0x2066: LRI, // LeftToRightIsolate,
|
|
Packit |
63bb0d |
0x2067: RLI, // RightToLeftIsolate,
|
|
Packit |
63bb0d |
0x2068: FSI, // FirstStrongIsolate,
|
|
Packit |
63bb0d |
0x2069: PDI, // PopDirectionalIsolate,
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// A trie entry has the following bits:
|
|
Packit |
63bb0d |
// 7..5 XOR mask for brackets
|
|
Packit |
63bb0d |
// 4 1: Bracket open, 0: Bracket close
|
|
Packit |
63bb0d |
// 3..0 Class type
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
const (
|
|
Packit |
63bb0d |
openMask = 0x10
|
|
Packit |
63bb0d |
xorMaskShift = 5
|
|
Packit |
63bb0d |
)
|