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

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