github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/text/unicode/bidi/trieval.go (about)

     1  // This file was generated by go generate; DO NOT EDIT
     2  
     3  package bidi
     4  
     5  type class int
     6  
     7  const (
     8  	_L           class = iota // LeftToRight
     9  	_R                        // RightToLeft
    10  	_EN                       // EuropeanNumber
    11  	_ES                       // EuropeanSeparator
    12  	_ET                       // EuropeanTerminator
    13  	_AN                       // ArabicNumber
    14  	_CS                       // CommonSeparator
    15  	_B                        // ParagraphSeparator
    16  	_S                        // SegmentSeparator
    17  	_WS                       // WhiteSpace
    18  	_ON                       // OtherNeutral
    19  	_BN                       // BoundaryNeutral
    20  	_NSM                      // NonspacingMark
    21  	_AL                       // ArabicLetter
    22  	classControl              // Control LRO - PDI
    23  
    24  	numClass
    25  
    26  	_LRO // LeftToRightOverride
    27  	_RLO // RightToLeftOverride
    28  	_LRE // LeftToRightEmbedding
    29  	_RLE // RightToLeftEmbedding
    30  	_PDF // PopDirectionalFormat
    31  	_LRI // LeftToRightIsolate
    32  	_RLI // RightToLeftIsolate
    33  	_FSI // FirstStrongIsolate
    34  	_PDI // PopDirectionalIsolate
    35  )
    36  
    37  var controlToClass = map[rune]class{
    38  	0x202D: _LRO, // LeftToRightOverride,
    39  	0x202E: _RLO, // RightToLeftOverride,
    40  	0x202A: _LRE, // LeftToRightEmbedding,
    41  	0x202B: _RLE, // RightToLeftEmbedding,
    42  	0x202C: _PDF, // PopDirectionalFormat,
    43  	0x2066: _LRI, // LeftToRightIsolate,
    44  	0x2067: _RLI, // RightToLeftIsolate,
    45  	0x2068: _FSI, // FirstStrongIsolate,
    46  	0x2069: _PDI, // PopDirectionalIsolate,
    47  }
    48  
    49  // A trie entry has the following bits:
    50  // 7..5  XOR mask for brackets
    51  // 4     1: Bracket open, 0: Bracket close
    52  // 3..0  class type
    53  type entry uint8
    54  
    55  const (
    56  	openMask     = 0x10
    57  	xorMaskShift = 5
    58  )
    59  
    60  func (e entry) isBracket() bool            { return e&0xF0 != 0 }
    61  func (e entry) isOpen() bool               { return e&openMask != 0 }
    62  func (e entry) reverseBracket(r rune) rune { return xorMasks[e>>xorMaskShift] ^ r }
    63  func (e entry) class(r rune) class {
    64  	c := class(e & 0x0F)
    65  	if c == classControl {
    66  		return controlToClass[r]
    67  	}
    68  	return c
    69  }