summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Meadows-Jönsson <eric.meadows.jonsson@gmail.com>2018-03-04 13:13:13 +0100
committerEric Meadows-Jönsson <eric.meadows.jonsson@gmail.com>2018-03-04 13:13:13 +0100
commitd99e4dea4fd136f79b7f57e80695b1c21732e961 (patch)
tree8b2598d0bbd5641e6dcaad35d6e032f05800fb4d
parenta87046a2cfa406e1bd63beba9c438eb61b8fa0bc (diff)
downloadelixir-emj/iex-docs-ansi-table.tar.gz
Fix table column alignment with ANSI escapesemj/iex-docs-ansi-table
-rw-r--r--lib/elixir/lib/io/ansi/docs.ex13
-rw-r--r--lib/elixir/test/elixir/io/ansi/docs_test.exs1
2 files changed, 10 insertions, 4 deletions
diff --git a/lib/elixir/lib/io/ansi/docs.ex b/lib/elixir/lib/io/ansi/docs.ex
index d5295081a..0224ea9e0 100644
--- a/lib/elixir/lib/io/ansi/docs.ex
+++ b/lib/elixir/lib/io/ansi/docs.ex
@@ -389,17 +389,22 @@ defmodule IO.ANSI.Docs do
end
defp generate_table_cell({{{col, length}, width}, :center}) do
+ ansi_diff = byte_size(col) - length
+ width = width + ansi_diff
+
col
|> String.pad_leading(div(width, 2) - div(length, 2) + length)
|> String.pad_trailing(width + 1 - rem(width, 2))
end
- defp generate_table_cell({{{col, _length}, width}, :right}) do
- String.pad_leading(col, width)
+ defp generate_table_cell({{{col, length}, width}, :right}) do
+ ansi_diff = byte_size(col) - length
+ String.pad_leading(col, width + ansi_diff)
end
- defp generate_table_cell({{{col, _length}, width}, :left}) do
- String.pad_trailing(col, width)
+ defp generate_table_cell({{{col, length}, width}, :left}) do
+ ansi_diff = byte_size(col) - length
+ String.pad_trailing(col, width + ansi_diff)
end
defp table_line?(line) do
diff --git a/lib/elixir/test/elixir/io/ansi/docs_test.exs b/lib/elixir/test/elixir/io/ansi/docs_test.exs
index 444f5cf8b..733ea09bb 100644
--- a/lib/elixir/test/elixir/io/ansi/docs_test.exs
+++ b/lib/elixir/test/elixir/io/ansi/docs_test.exs
@@ -324,6 +324,7 @@ defmodule IO.ANSI.DocsTest do
test "table with formatting in cells" do
assert format("`a` | _b_\nc | d") == "\e[36ma\e[0m | \e[4mb\e[0m\nc | d\n\e[0m"
+ assert format("`abc` | d \n`e` | f") == "\e[36mabc\e[0m | d\n\e[36me\e[0m | f\n\e[0m"
end
test "table with variable number of columns" do