module

Anvil::Text

Styled-Text-Schicht.

termisu ist ein Zellen-Puffer: er kennt Zellen, Farben und Breiten, aber keine Zeilen, keine Spans und keine Umbrüche. Genau das liegt hier — und es ist der Teil, den eine App sonst jedes Mal selbst schreibt.

Breiten kommen aus Termisu::UnicodeWidth, damit die Umbruchrechnung dieselbe Auffassung von "wie breit ist das" hat wie der Renderer, der es später zeichnet. Zwei Quellen dafür wären eine Fehlerquelle: was hier als 79 Spalten breit gilt, muss dort in 79 Zellen passen.

Constants

EMPTY_LINE = [] of Span

Class methods

grapheme_width(grapheme : String) : Int32

Anzeigebreite in Terminalspalten. Grapheme-Cluster, nicht Codepoints: ein Emoji mit Variation Selector ist eine Zelle breit gemeint und zwei Codepoints lang. Breite eines einzelnen Grapheme-Clusters.

Source
line(text : String, style : Style = Style::NONE) : StyledLine
Source
plain(line : StyledLine) : String
Source
render(line : StyledLine, io : IO, color : Bool = true) : Nil

Schreibt eine gestylte Zeile als ANSI in ein IO.

Mit color: false kommt reiner Text heraus — für Pipes, Protokolle und Tests, die sich nicht mit Escape-Sequenzen herumschlagen wollen.

Source
sgr_color(color : Color, base : Int32) : String

Farbanteil einer SGR-Sequenz. base ist 38 für Vorder-, 48 für Hintergrund.

Source
to_ansi(line : StyledLine, color : Bool = true) : String
Source
truncate(line : StyledLine, width : Int32, ellipsis : String | Nil = nil) : StyledLine

Kürzt auf width Spalten. Mit ellipsis wird dafür Platz freigehalten, und das Kürzel erbt den Stil des Spans, an dem geschnitten wurde — sonst springt es optisch aus der Zeile.

Source
width(text : String) : Int32
Source
width(line : StyledLine) : Int32
Source
wrap(line : StyledLine, width : Int32) : Array(StyledLine)

Bricht auf width Spalten um und liefert die entstandenen Zeilen.

Umbrochen wird über Span-Grenzen hinweg — ein Wort, das in einem Span beginnt und im nächsten endet, bleibt zusammen und behält je Teil seinen eigenen Stil. Passt ein einzelnes Wort nicht in eine ganze Zeile, wird es hart getrennt, statt eine überbreite Zeile zu erzeugen: die Zusage "eine Zeile ist nie breiter als width" ist das, worauf die Inline-Region ihre Höhenrechnung stützt.

Source

Nested types