aboutsummaryrefslogtreecommitdiff
path: root/src/internal/x/text/unicode/bidi/example_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal/x/text/unicode/bidi/example_test.go')
-rw-r--r--src/internal/x/text/unicode/bidi/example_test.go185
1 files changed, 0 insertions, 185 deletions
diff --git a/src/internal/x/text/unicode/bidi/example_test.go b/src/internal/x/text/unicode/bidi/example_test.go
deleted file mode 100644
index 56c5c4a121..0000000000
--- a/src/internal/x/text/unicode/bidi/example_test.go
+++ /dev/null
@@ -1,185 +0,0 @@
-// Code generated by running "go run gen.go -core" in golang.org/x/text. DO NOT EDIT.
-
-// +build ignore
-
-package bidi_test
-
-import (
- "fmt"
- "log"
-
- "internal/x/text/bidi"
-)
-
-func foo() {
- var sa StringAttributes
- var p Paragraph
- n, _ := p.SetString(s)
- for i, o := 0, p.Ordering(); i < o.NumRuns(); i++ {
- b := o.Run(i).Bytes()
-
- start, end := o.Run(i).Pos()
- for p := start; p < end; {
- style, n := sa.StyleAt(start)
- render()
- p += n
- }
-
- }
-}
-
-type style int
-
-const (
- styleNormal = 0
- styleSelected = 1 << (iota - 1)
- styleBold
- styleItalics
-)
-
-type styleRun struct {
- end int
- style style
-}
-
-func getTextWidth(text string, styleRuns []styleRun) int {
- // simplistic way to compute the width
- return len([]rune(text))
-}
-
-// set limit and StyleRun limit for a line
-// from text[start] and from styleRuns[styleRunStart]
-// using Bidi.getLogicalRun(...)
-// returns line width
-func getLineBreak(p *bidi.Paragraph, start int, styles []styleRun) (n int) {
- // dummy return
- return 0
-}
-
-// render runs on a line sequentially, always from left to right
-
-// prepare rendering a new line
-func startLine(d bidi.Direction, lineWidth int) {
- fmt.Println()
-}
-
-// render a run of text and advance to the right by the run width
-// the text[start..limit-1] is always in logical order
-func renderRun(text string, d bidi.Direction, styl style) {
-}
-
-// We could compute a cross-product
-// from the style runs with the directional runs
-// and then reorder it.
-// Instead, here we iterate over each run type
-// and render the intersections -
-// with shortcuts in simple (and common) cases.
-// renderParagraph() is the main function.
-
-// render a directional run with
-// (possibly) multiple style runs intersecting with it
-func renderDirectionalRun(text string, offset int, d bidi.Direction, styles []styleRun) {
- start, end := offset, len(text)+offset
- // iterate over style runs
- if run.Direction() == bidi.LeftToRight {
- styleEnd := 0
- for _, sr := range styles {
- styleEnd = styleRuns[i].end
- if start < styleEnd {
- if styleEnd > end {
- styleEnd = end
- }
- renderRun(text[start-offset:styleEnd-offset], run.Direction(), styles[i].style)
- if styleEnd == end {
- break
- }
- start = styleEnd
- }
- }
- } else {
- styleStart := 0
- for i := len(styles) - 1; i >= 0; i-- {
- if i > 0 {
- styleStart = styles[i-1].end
- } else {
- styleStart = 0
- }
- if end >= styleStart {
- if styleStart < start {
- styleStart = start
- }
- renderRun(text[styleStart-offset:end-offset], run.Direction(), styles[i].style)
- if styleStart == start {
- break
- }
- end = styleStart
- }
- }
- }
-}
-
-// the line object represents text[start..limit-1]
-func renderLine(line *bidi.Runs, text string, offset int, styles []styleRun) {
- if dir := line.Direction(); dir != bidi.Mixed {
- if len(styles) == 1 {
- renderRun(text, dir, styles[0].style)
- } else {
- for i := 0; i < line.NumRuns(); i++ {
- renderDirectionalRun(text, offset, dir, styles)
- }
- }
- } else {
- // iterate over both directional and style runs
- for i := 0; i < line.Len(); i++ {
- run := line.Run(i)
- start, _ := run.Pos()
- renderDirectionalRun(text[start-offset:], start, run.Direction(), styles)
- }
- }
-}
-
-func renderParagraph(text string, d bidi.Direction, styles []styleRun, int lineWidth) {
- var p bidi.Paragraph
- if err := p.SetString(text, bidi.DefaultDirection(d)); err != nil {
- log.Fatal(err)
- }
-
- if len(styles) == 0 {
- styles = append(styles, []styleRun{len(text), styleNormal})
- }
-
- if width := getTextWidth(text, styles); width <= lineWidth {
- // everything fits onto one line
-
- runs, err := p.Runs()
- if err != nil {
- log.Fatal(err)
- }
-
- // prepare rendering a new line from either left or right
- startLine(p.Direction(), width)
- renderLine(&runs, text, styles)
- } else {
- // we need to render several lines
-
- for start, end := 0, 0; start < len(text); start = end {
- for start >= styles[0].end {
- styles = styles[1:]
- }
- end = getLineBreak(p, start, styles[startStyles:])
-
- runs, err := p.Line(start, end)
- if err != nil {
- log.Fatal(err)
- }
-
- startLine(p.Direction(), end-start)
- renderLine(&runs, text[start:end], styles[startStyles:])
- }
- }
-}
-
-func main() {
- renderParagraph("Some Latin text...", bidi.LeftToRight, nil, 80)
- renderParagraph("Some Hebrew text...", bidi.RightToLeft, nil, 60)
-}