2023-07-06 23:49:32 -06:00
|
|
|
# typeset
|
|
|
|
|
2024-05-05 00:14:39 -06:00
|
|
|
[![Go Reference](https://pkg.go.dev/badge/git.tebibyte.media/tomo/typeset.svg)](https://pkg.go.dev/git.tebibyte.media/tomo/typeset)
|
|
|
|
|
2024-09-10 09:17:29 -06:00
|
|
|
Typeset provides utilities for text layout, wrapping, and rendering. It is
|
|
|
|
designed to avoid redundant work and minimize memory allocations wherever
|
|
|
|
posible in situations where the bounds of a section of text may change
|
|
|
|
frequently and its content semi-frequently. Text layout is performed by the
|
|
|
|
TypeSetter struct, which operates in a three-phase process:
|
2023-07-07 00:05:46 -06:00
|
|
|
|
2024-09-10 09:17:29 -06:00
|
|
|
1. Tokenization
|
|
|
|
2. Measurement
|
|
|
|
3. Layout, alignment
|
|
|
|
|
|
|
|
The results of these phases are memoized. When the state of the TypeSetter is
|
|
|
|
queried, it will run through only the required phases before returning a value.
|
|
|
|
|
|
|
|
The contents of a TypeSetter can be drawn onto any draw.Image using the Draw
|
|
|
|
function included within this package, but it is entirely possible to create a
|
|
|
|
custom draw function that iterates over TypeSetter.Runes that uses some other
|
|
|
|
method of drawing that's faster than five gazillion virtual method calls.
|