github.com/binkynet/BinkyNet@v1.12.1-0.20240421190447-da4e34c20be0/proto_vendor/golang.org/x/text/unicode/bidi/bidi.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 //go:generate go run gen.go gen_trieval.go gen_ranges.go 6 7 // Package bidi contains functionality for bidirectional text support. 8 // 9 // See http://www.unicode.org/reports/tr9. 10 // 11 // NOTE: UNDER CONSTRUCTION. This API may change in backwards incompatible ways 12 // and without notice. 13 package bidi // import "golang.org/x/text/unicode/bidi" 14 15 // TODO: 16 // The following functionality would not be hard to implement, but hinges on 17 // the definition of a Segmenter interface. For now this is up to the user. 18 // - Iterate over paragraphs 19 // - Segmenter to iterate over runs directly from a given text. 20 // Also: 21 // - Transformer for reordering? 22 // - Transformer (validator, really) for Bidi Rule. 23 24 // This API tries to avoid dealing with embedding levels for now. Under the hood 25 // these will be computed, but the question is to which extent the user should 26 // know they exist. We should at some point allow the user to specify an 27 // embedding hierarchy, though. 28 29 // A Direction indicates the overall flow of text. 30 type Direction int 31 32 const ( 33 // LeftToRight indicates the text contains no right-to-left characters and 34 // that either there are some left-to-right characters or the option 35 // DefaultDirection(LeftToRight) was passed. 36 LeftToRight Direction = iota 37 38 // RightToLeft indicates the text contains no left-to-right characters and 39 // that either there are some right-to-left characters or the option 40 // DefaultDirection(RightToLeft) was passed. 41 RightToLeft 42 43 // Mixed indicates text contains both left-to-right and right-to-left 44 // characters. 45 Mixed 46 47 // Neutral means that text contains no left-to-right and right-to-left 48 // characters and that no default direction has been set. 49 Neutral 50 ) 51 52 type options struct{} 53 54 // An Option is an option for Bidi processing. 55 type Option func(*options) 56 57 // ICU allows the user to define embedding levels. This may be used, for example, 58 // to use hierarchical structure of markup languages to define embeddings. 59 // The following option may be a way to expose this functionality in this API. 60 // // LevelFunc sets a function that associates nesting levels with the given text. 61 // // The levels function will be called with monotonically increasing values for p. 62 // func LevelFunc(levels func(p int) int) Option { 63 // panic("unimplemented") 64 // } 65 66 // DefaultDirection sets the default direction for a Paragraph. The direction is 67 // overridden if the text contains directional characters. 68 func DefaultDirection(d Direction) Option { 69 panic("unimplemented") 70 } 71 72 // A Paragraph holds a single Paragraph for Bidi processing. 73 type Paragraph struct { 74 // buffers 75 } 76 77 // SetBytes configures p for the given paragraph text. It replaces text 78 // previously set by SetBytes or SetString. If b contains a paragraph separator 79 // it will only process the first paragraph and report the number of bytes 80 // consumed from b including this separator. Error may be non-nil if options are 81 // given. 82 func (p *Paragraph) SetBytes(b []byte, opts ...Option) (n int, err error) { 83 panic("unimplemented") 84 } 85 86 // SetString configures p for the given paragraph text. It replaces text 87 // previously set by SetBytes or SetString. If b contains a paragraph separator 88 // it will only process the first paragraph and report the number of bytes 89 // consumed from b including this separator. Error may be non-nil if options are 90 // given. 91 func (p *Paragraph) SetString(s string, opts ...Option) (n int, err error) { 92 panic("unimplemented") 93 } 94 95 // IsLeftToRight reports whether the principle direction of rendering for this 96 // paragraphs is left-to-right. If this returns false, the principle direction 97 // of rendering is right-to-left. 98 func (p *Paragraph) IsLeftToRight() bool { 99 panic("unimplemented") 100 } 101 102 // Direction returns the direction of the text of this paragraph. 103 // 104 // The direction may be LeftToRight, RightToLeft, Mixed, or Neutral. 105 func (p *Paragraph) Direction() Direction { 106 panic("unimplemented") 107 } 108 109 // RunAt reports the Run at the given position of the input text. 110 // 111 // This method can be used for computing line breaks on paragraphs. 112 func (p *Paragraph) RunAt(pos int) Run { 113 panic("unimplemented") 114 } 115 116 // Order computes the visual ordering of all the runs in a Paragraph. 117 func (p *Paragraph) Order() (Ordering, error) { 118 panic("unimplemented") 119 } 120 121 // Line computes the visual ordering of runs for a single line starting and 122 // ending at the given positions in the original text. 123 func (p *Paragraph) Line(start, end int) (Ordering, error) { 124 panic("unimplemented") 125 } 126 127 // An Ordering holds the computed visual order of runs of a Paragraph. Calling 128 // SetBytes or SetString on the originating Paragraph invalidates an Ordering. 129 // The methods of an Ordering should only be called by one goroutine at a time. 130 type Ordering struct{} 131 132 // Direction reports the directionality of the runs. 133 // 134 // The direction may be LeftToRight, RightToLeft, Mixed, or Neutral. 135 func (o *Ordering) Direction() Direction { 136 panic("unimplemented") 137 } 138 139 // NumRuns returns the number of runs. 140 func (o *Ordering) NumRuns() int { 141 panic("unimplemented") 142 } 143 144 // Run returns the ith run within the ordering. 145 func (o *Ordering) Run(i int) Run { 146 panic("unimplemented") 147 } 148 149 // TODO: perhaps with options. 150 // // Reorder creates a reader that reads the runes in visual order per character. 151 // // Modifiers remain after the runes they modify. 152 // func (l *Runs) Reorder() io.Reader { 153 // panic("unimplemented") 154 // } 155 156 // A Run is a continuous sequence of characters of a single direction. 157 type Run struct { 158 } 159 160 // String returns the text of the run in its original order. 161 func (r *Run) String() string { 162 panic("unimplemented") 163 } 164 165 // Bytes returns the text of the run in its original order. 166 func (r *Run) Bytes() []byte { 167 panic("unimplemented") 168 } 169 170 // TODO: methods for 171 // - Display order 172 // - headers and footers 173 // - bracket replacement. 174 175 // Direction reports the direction of the run. 176 func (r *Run) Direction() Direction { 177 panic("unimplemented") 178 } 179 180 // Position of the Run within the text passed to SetBytes or SetString of the 181 // originating Paragraph value. 182 func (r *Run) Pos() (start, end int) { 183 panic("unimplemented") 184 } 185 186 // AppendReverse reverses the order of characters of in, appends them to out, 187 // and returns the result. Modifiers will still follow the runes they modify. 188 // Brackets are replaced with their counterparts. 189 func AppendReverse(out, in []byte) []byte { 190 panic("unimplemented") 191 } 192 193 // ReverseString reverses the order of characters in s and returns a new string. 194 // Modifiers will still follow the runes they modify. Brackets are replaced with 195 // their counterparts. 196 func ReverseString(s string) string { 197 panic("unimplemented") 198 }