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
Class methods
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.
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.
Farbanteil einer SGR-Sequenz. base ist 38 für Vorder-, 48 für Hintergrund.
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.
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.