| // Copyright 2016 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package text_test |
| |
| import ( |
| "fmt" |
| "image" |
| "os" |
| |
| "golang.org/x/exp/shiny/text" |
| "golang.org/x/image/font" |
| "golang.org/x/image/math/fixed" |
| ) |
| |
| // toyFace implements the font.Face interface by measuring every rune's width |
| // as 1 pixel. |
| type toyFace struct{} |
| |
| func (toyFace) Close() error { |
| return nil |
| } |
| |
| func (toyFace) Glyph(dot fixed.Point26_6, r rune) (image.Rectangle, image.Image, image.Point, fixed.Int26_6, bool) { |
| panic("unimplemented") |
| } |
| |
| func (toyFace) GlyphBounds(r rune) (fixed.Rectangle26_6, fixed.Int26_6, bool) { |
| panic("unimplemented") |
| } |
| |
| func (toyFace) GlyphAdvance(r rune) (fixed.Int26_6, bool) { |
| return fixed.I(1), true |
| } |
| |
| func (toyFace) Kern(r0, r1 rune) fixed.Int26_6 { |
| return 0 |
| } |
| |
| func (toyFace) Metrics() font.Metrics { |
| return font.Metrics{} |
| } |
| |
| func printFrame(f *text.Frame, softReturnsOnly bool) { |
| for p := f.FirstParagraph(); p != nil; p = p.Next(f) { |
| for l := p.FirstLine(f); l != nil; l = l.Next(f) { |
| for b := l.FirstBox(f); b != nil; b = b.Next(f) { |
| if softReturnsOnly { |
| os.Stdout.Write(b.TrimmedText(f)) |
| } else { |
| os.Stdout.Write(b.Text(f)) |
| } |
| } |
| if softReturnsOnly { |
| fmt.Println() |
| } |
| } |
| } |
| } |
| |
| func Example() { |
| var f text.Frame |
| f.SetFace(toyFace{}) |
| f.SetMaxWidth(fixed.I(60)) |
| |
| c := f.NewCaret() |
| c.WriteString(mobyDick) |
| c.Close() |
| |
| fmt.Println("====") |
| printFrame(&f, false) |
| fmt.Println("====") |
| fmt.Println("123456789_123456789_123456789_123456789_123456789_123456789_") |
| printFrame(&f, true) |
| fmt.Println("====") |
| |
| // Output: |
| // ==== |
| // CHAPTER 1. Loomings. |
| // Call me Ishmael. Some years ago—never mind how long precisely—having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world... |
| // ==== |
| // 123456789_123456789_123456789_123456789_123456789_123456789_ |
| // CHAPTER 1. Loomings. |
| // Call me Ishmael. Some years ago—never mind how long |
| // precisely—having little or no money in my purse, and nothing |
| // particular to interest me on shore, I thought I would sail |
| // about a little and see the watery part of the world... |
| // |
| // ==== |
| } |
| |
| const mobyDick = "CHAPTER 1. Loomings.\nCall me Ishmael. Some years ago—never mind how long precisely—having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world...\n" |