diff --git a/ConsoleTables.Tests/ConsoleTableTest.cs b/ConsoleTables.Tests/ConsoleTableTest.cs index 974b382..83181e7 100644 --- a/ConsoleTables.Tests/ConsoleTableTest.cs +++ b/ConsoleTables.Tests/ConsoleTableTest.cs @@ -72,6 +72,39 @@ public void ShouldBeAvoidErrorOnToStringFromAddRows() Count: 2", table); } + [Fact] + public void SpecialCharactersShouldNotBreakTable() + { + var users = new List + { + new() { Name = "René", Age = 59 }, + new() { Name = "Otto", Age = 52 } + }; + var table = ConsoleTable + .From(users) + .Configure(o => o.NumberAlignment = Alignment.Right) + .ToString(); + + Assert.Equal( +$@" -------------- + | Name | Age | + -------------- + | René | 59 | + -------------- + | Otto | 52 | + -------------- + + Count: 2", table); + } + + [Fact] + public void TestGetTextWidth() + { + Assert.Equal(3, ConsoleTable.GetTextWidth("abc")); + Assert.Equal(3, ConsoleTable.GetTextWidth("äöü")); + Assert.Equal(4, ConsoleTable.GetTextWidth("René")); + } + [Fact] public void NumberShouldBeRightAligned() { diff --git a/src/ConsoleTables/ConsoleTable.cs b/src/ConsoleTables/ConsoleTable.cs index 11bb72c..d5d2436 100644 --- a/src/ConsoleTables/ConsoleTable.cs +++ b/src/ConsoleTables/ConsoleTable.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Text.RegularExpressions; +using Wcwidth; namespace ConsoleTables { @@ -206,7 +207,7 @@ public static int GetTextWidth(string value) if (value == null) return 0; - var length = value.ToCharArray().Sum(c => c > 127 ? 2 : 1); + var length = value.ToCharArray().Sum(c => UnicodeCalculator.GetWidth(c)); return length; } @@ -305,7 +306,7 @@ private List ColumnLengths() .Select((t, i) => Rows.Select(x => x[i]) .Union(new[] { Columns[i] }) .Where(x => x != null) - .Select(x => x.ToString().ToCharArray().Sum(c => c > 127 ? 2 : 1)).Max()) + .Select(x => x.ToString().ToCharArray().Sum(c => UnicodeCalculator.GetWidth(c))).Max()) .ToList(); return columnLengths; } diff --git a/src/ConsoleTables/ConsoleTables.csproj b/src/ConsoleTables/ConsoleTables.csproj index 81a62e4..3aa6784 100644 --- a/src/ConsoleTables/ConsoleTables.csproj +++ b/src/ConsoleTables/ConsoleTables.csproj @@ -29,6 +29,10 @@ + + + + 2.2