| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package lipgloss
- import (
- "strings"
- "github.com/muesli/reflow/ansi"
- )
- // Width returns the cell width of characters in the string. ANSI sequences are
- // ignored and characters wider than one cell (such as Chinese characters and
- // emojis) are appropriately measured.
- //
- // You should use this instead of len(string) len([]rune(string) as neither
- // will give you accurate results.
- func Width(str string) (width int) {
- for _, l := range strings.Split(str, "\n") {
- w := ansi.PrintableRuneWidth(l)
- if w > width {
- width = w
- }
- }
- return width
- }
- // Height returns height of a string in cells. This is done simply by
- // counting \n characters. If your strings use \r\n for newlines you should
- // convert them to \n first, or simply write a separate function for measuring
- // height.
- func Height(str string) int {
- return strings.Count(str, "\n") + 1
- }
- // Size returns the width and height of the string in cells. ANSI sequences are
- // ignored and characters wider than one cell (such as Chinese characters and
- // emojis) are appropriately measured.
- func Size(str string) (width, height int) {
- width = Width(str)
- height = Height(str)
- return width, height
- }
|