diff options
author | Eric Meadows-Jönsson <eric.meadows.jonsson@gmail.com> | 2018-03-04 13:13:13 +0100 |
---|---|---|
committer | Eric Meadows-Jönsson <eric.meadows.jonsson@gmail.com> | 2018-03-04 13:13:13 +0100 |
commit | d99e4dea4fd136f79b7f57e80695b1c21732e961 (patch) | |
tree | 8b2598d0bbd5641e6dcaad35d6e032f05800fb4d | |
parent | a87046a2cfa406e1bd63beba9c438eb61b8fa0bc (diff) | |
download | elixir-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.ex | 13 | ||||
-rw-r--r-- | lib/elixir/test/elixir/io/ansi/docs_test.exs | 1 |
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 |