...

Package text

import "gonum.org/v1/plot/text"
Overview
Index
Examples

Overview ▾

Package text provides types and functions to parse, format and render text.

Constants

Position specifies the text position.

const (
    PosLeft   = -1
    PosBottom = -1
    PosCenter = 0
    PosTop    = +1
    PosRight  = +1
)

type Handler

Handler parses, formats and renders text.

type Handler interface {
    // Cache returns the cache of fonts used by the text handler.
    Cache() *font.Cache

    // Extents returns the Extents of a font.
    Extents(fnt font.Font) font.Extents

    // Lines splits a given block of text into separate lines.
    Lines(txt string) []string

    // Box returns the bounding box of the given non-multiline text where:
    //  - width is the horizontal space from the origin.
    //  - height is the vertical space above the baseline.
    //  - depth is the vertical space below the baseline, a positive number.
    Box(txt string, fnt font.Font) (width, height, depth vg.Length)

    // Draw renders the given text with the provided style and position
    // on the canvas.
    Draw(c vg.Canvas, txt string, sty Style, pt vg.Point)
}

type Latex

Latex parses, formats and renders LaTeX.

type Latex struct {
    // Fonts is the cache of font faces used by this text handler.
    Fonts *font.Cache

    // DPI is the dot-per-inch controlling the font resolution used by LaTeX.
    // If zero, the resolution defaults to 72.
    DPI float64
}

Example

Code:

fonts := font.NewCache(liberation.Collection())
plot.DefaultTextHandler = text.Latex{
    Fonts: fonts,
}

p := plot.New()
p.Title.Text = `$f(x) = \sqrt{\alpha x \Gamma}$`
p.X.Label.Text = `$\frac{\sqrt{x}}{2\pi\Gamma\gamma}$`
p.Y.Label.Text = `$\beta$`

p.X.Min = -1
p.X.Max = +1
p.Y.Min = -1
p.Y.Max = +1

labels, err := plotter.NewLabels(plotter.XYLabels{
    XYs: []plotter.XY{
        {X: +0.0, Y: +0.0},
        {X: -0.9, Y: -0.9},
        {X: +0.6, Y: +0.0},
        {X: +0.5, Y: -0.9},
    },
    Labels: []string{
        `$\frac{\sqrt{x}}{2\pi\Gamma\gamma}$`,
        `$LaTeX$`,
        "plain",
        `$\frac{\sqrt{x}}{2\beta}$`,
    },
})
if err != nil {
    log.Fatalf("could not create labels: %+v", err)
}
labels.TextStyle[0].Font.Size = 24
labels.TextStyle[0].Color = color.RGBA{B: 255, A: 255}
labels.TextStyle[0].XAlign = draw.XCenter
labels.TextStyle[0].YAlign = draw.YCenter

labels.TextStyle[1].Font.Size = 24
labels.TextStyle[1].Color = color.RGBA{R: 255, A: 255}
labels.TextStyle[1].Rotation = math.Pi / 4

labels.TextStyle[2].Font.Size = 24
labels.TextStyle[2].Rotation = math.Pi / 4
labels.TextStyle[2].YAlign = draw.YCenter
labels.TextStyle[2].Handler = &text.Plain{Fonts: fonts}

labels.TextStyle[3].Font.Size = 24
labels.TextStyle[3].Rotation = math.Pi / 2

p.Add(labels)
p.Add(plotter.NewGlyphBoxes())
p.Add(plotter.NewGrid())

err = p.Save(10*vg.Centimeter, 5*vg.Centimeter, "testdata/latex.png")
if err != nil {
    log.Fatalf("could not save plot: %+v", err)
}

func (Latex) Box

func (hdlr Latex) Box(txt string, fnt font.Font) (width, height, depth vg.Length)

Box returns the bounding box of the given non-multiline text where:

func (Latex) Cache

func (hdlr Latex) Cache() *font.Cache

Cache returns the cache of fonts used by the text handler.

func (Latex) Draw

func (hdlr Latex) Draw(c vg.Canvas, txt string, sty Style, pt vg.Point)

Draw renders the given text with the provided style and position on the canvas.

func (Latex) Extents

func (hdlr Latex) Extents(fnt font.Font) font.Extents

Extents returns the Extents of a font.

func (Latex) Lines

func (hdlr Latex) Lines(txt string) []string

Lines splits a given block of text into separate lines.

type Plain

Plain is a text/plain handler.

type Plain struct {
    Fonts *font.Cache
}

func (Plain) Box

func (hdlr Plain) Box(txt string, fnt font.Font) (width, height, depth vg.Length)

Box returns the bounding box of the given non-multiline text where:

func (Plain) Cache

func (hdlr Plain) Cache() *font.Cache

Cache returns the cache of fonts used by the text handler.

func (Plain) Draw

func (hdlr Plain) Draw(c vg.Canvas, txt string, sty Style, pt vg.Point)

Draw renders the given text with the provided style and position on the canvas.

func (Plain) Extents

func (hdlr Plain) Extents(fnt font.Font) font.Extents

Extents returns the Extents of a font.

func (Plain) Lines

func (hdlr Plain) Lines(txt string) []string

Lines splits a given block of text into separate lines.

type Style

Style describes what text will look like.

type Style struct {
    // Color is the text color.
    Color color.Color

    // Font is the font description.
    Font font.Font

    // Rotation is the text rotation in radians, performed around the axis
    // defined by XAlign and YAlign.
    Rotation float64

    // XAlign and YAlign specify the alignment of the text.
    XAlign XAlignment
    YAlign YAlignment

    // Handler parses and formats text according to a given
    // dialect (Markdown, LaTeX, plain, ...)
    // The default is a plain text handler.
    Handler Handler
}

func (Style) FontExtents

func (s Style) FontExtents() font.Extents

FontExtents returns the extents of this Style's font.

func (Style) Height

func (s Style) Height(txt string) vg.Length

Height returns the height of the text when using the given font before any text rotation is applied.

func (Style) Rectangle

func (s Style) Rectangle(txt string) vg.Rectangle

Rectangle returns a rectangle giving the bounds of this text assuming that it is drawn at (0, 0).

func (Style) Width

func (s Style) Width(txt string) (max vg.Length)

Width returns the width of lines of text when using the given font before any text rotation is applied.

type XAlignment

XAlignment specifies text alignment in the X direction. Three preset options are available, but an arbitrary alignment can also be specified using XAlignment(desired number).

type XAlignment float64
const (
    // XLeft aligns the left edge of the text with the specified location.
    XLeft XAlignment = 0
    // XCenter aligns the horizontal center of the text with the specified location.
    XCenter XAlignment = -0.5
    // XRight aligns the right edge of the text with the specified location.
    XRight XAlignment = -1
)

type YAlignment

YAlignment specifies text alignment in the Y direction. Three preset options are available, but an arbitrary alignment can also be specified using YAlignment(desired number).

type YAlignment float64
const (
    // YTop aligns the top of of the text with the specified location.
    YTop YAlignment = -1
    // YCenter aligns the vertical center of the text with the specified location.
    YCenter YAlignment = -0.5
    // YBottom aligns the bottom of the text with the specified location.
    YBottom YAlignment = 0
)