Pārlūkot izejas kodu

strip crlf chars from label

Charlie Kindel 5 gadi atpakaļ
vecāks
revīzija
7ab256bc32
1 mainītis faili ar 15 papildinājumiem un 7 dzēšanām
  1. 15 7
      Terminal.Gui/Views/Label.cs

+ 15 - 7
Terminal.Gui/Views/Label.cs

@@ -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;
 			}