diff --git a/src/ConsoleTables/ConsoleTable.cs b/src/ConsoleTables/ConsoleTable.cs index 629815f..5f2c68f 100644 --- a/src/ConsoleTables/ConsoleTable.cs +++ b/src/ConsoleTables/ConsoleTable.cs @@ -11,6 +11,8 @@ namespace ConsoleTables { public class ConsoleTable { + private static readonly Regex AnsiRegex = new Regex(@"\e\[[0-9;]*m", RegexOptions.Compiled); + public IList Columns { get; } public IList Rows { get; } @@ -264,7 +266,7 @@ public static int GetTextWidth(string value) if (value == null) return 0; - var length = value.ToCharArray().Sum(c => UnicodeCalculator.GetWidth(c)); + var length = AnsiRegex.Replace(value, "").ToCharArray().Sum(GetCharWidth); return length; } @@ -357,13 +359,15 @@ private string GetNumberAlignment(int i) : "-"; } + private static int GetCharWidth(char c) => UnicodeCalculator.GetWidth(c); + private List ColumnLengths() { var columnLengths = Columns .Select((t, i) => Rows.Select(x => x[i]) .Union(new[] { Columns[i] }) .Where(x => x != null) - .Select(x => x.ToString().ToCharArray().Sum(c => UnicodeCalculator.GetWidth(c))).Max()) + .Max(x => AnsiRegex.Replace(x.ToString(), "").ToCharArray().Sum(GetCharWidth))) .ToList(); return columnLengths; }