Module: Charming::UI::Truncate
- Defined in:
- lib/charming/presentation/ui/truncate.rb
Overview
Truncate cuts ANSI-styled text down to a display width, marking the cut with a trailing ellipsis. Styling active at the cut is preserved and terminated, and multi-column glyphs are never split (matching ANSISlicer).
Constant Summary collapse
- ELLIPSIS =
"…"
Class Method Summary collapse
-
.tail(text, width, ellipsis: ELLIPSIS) ⇒ Object
Truncates each line of text to width display columns, appending ellipsis to lines that overflow.
- .tail_line(line, width, ellipsis) ⇒ Object
Class Method Details
.tail(text, width, ellipsis: ELLIPSIS) ⇒ Object
Truncates each line of text to width display columns, appending ellipsis to lines that overflow. Lines that fit are returned unchanged.
15 16 17 |
# File 'lib/charming/presentation/ui/truncate.rb', line 15 def tail(text, width, ellipsis: ELLIPSIS) text.to_s.lines(chomp: true).map { |line| tail_line(line, width, ellipsis) }.join("\n") end |
.tail_line(line, width, ellipsis) ⇒ Object
19 20 21 22 23 24 25 26 |
# File 'lib/charming/presentation/ui/truncate.rb', line 19 def tail_line(line, width, ellipsis) return line if Width.measure(line) <= width ellipsis_width = Width.measure(ellipsis) return ANSISlicer.slice(line, 0, width) if ellipsis_width >= width ANSISlicer.slice(line, 0, width - ellipsis_width) + ellipsis end |