Merge pull request #695 from tig/crlf_label

Strip CR/LF in label
This commit is contained in:
Charlie Kindel
2020-06-15 13:10:15 -07:00
committed by GitHub

View File

@@ -123,8 +123,6 @@ namespace Terminal.Gui {
static ustring ClipAndJustify (ustring str, int width, TextAlignment talign)
{
// Get rid of any '\r' added by Windows
str = str.Replace ("\r", ustring.Empty);
int slen = str.RuneCount;
if (slen > width) {
var uints = str.ToRunes (width);
@@ -166,12 +164,22 @@ namespace Terminal.Gui {
Recalc (text, lines, Frame.Width, textAlignment, Bounds.Height > 1);
}
static ustring ReplaceNonPrintables (ustring str)
static ustring StripCRLF (ustring str)
{
var runes = new List<Rune> ();
foreach (var r in str.ToRunes ()) {
if (r < 0x20) {
runes.Add (new Rune (r + 0x2400)); // U+25A1 □ WHITE SQUARE
if (r != '\r' && r != '\n') {
runes.Add (r);
}
}
return ustring.Make (runes); ;
}
static ustring ReplaceCRLFWithSpace (ustring str)
{
var runes = new List<Rune> ();
foreach (var r in str.ToRunes ()) {
if (r == '\r' || r == '\n') {
runes.Add (new Rune (' ')); // r + 0x2400)); // U+25A1 □ WHITE SQUARE
} else {
runes.Add (r);
}
@@ -184,7 +192,7 @@ namespace Terminal.Gui {
int start = 0, end;
var lines = new List<ustring> ();
text = ReplaceNonPrintables (text);
text = StripCRLF (text);
while ((end = start + margin) < text.Length) {
while (text [end] != ' ' && end > start)
@@ -208,7 +216,7 @@ namespace Terminal.Gui {
lineResult.Clear ();
if (wordWrap == false) {
textStr = ReplaceNonPrintables (textStr);
textStr = ReplaceCRLFWithSpace (textStr);
lineResult.Add (ClipAndJustify (textStr, width, talign));
return;
}