Current section
Files
Jump to
Current section
Files
src/utils/text.gleam
import gleam/io
import gleam/string
import types/alignment.{type Alignment, Center, Left, Right}
import types/box_style.{type BoxStyle, Double, Rounded, Single, Thick}
pub fn overwrite_with_padding(old_text: String, new_text: String) -> Nil {
let old_length = string.length(old_text)
let new_length = string.length(new_text)
let padding_needed = case old_length > new_length {
True -> old_length - new_length
False -> 0
}
let padding = string.repeat(" ", padding_needed)
io.print("\r" <> new_text <> padding)
}
pub fn get_box_chars(
style: BoxStyle,
) -> #(String, String, String, String, String, String) {
case style {
Single -> #("┌", "┐", "└", "┘", "─", "│")
Double -> #("╔", "╗", "╚", "╝", "═", "║")
Rounded -> #("╭", "╮", "╰", "╯", "─", "│")
Thick -> #("┏", "┓", "┗", "┛", "━", "┃")
}
}
pub fn align_text(text: String, width: Int, alignment: Alignment) -> String {
let text_length = string.length(text)
case text_length >= width {
True -> string.slice(text, 0, width)
False -> {
let padding = width - text_length
case alignment {
Left -> text <> string.repeat(" ", padding)
Right -> string.repeat(" ", padding) <> text
Center -> {
let left_pad = padding / 2
let right_pad = padding - left_pad
string.repeat(" ", left_pad) <> text <> string.repeat(" ", right_pad)
}
}
}
}
}