github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/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 https://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  }