Packages

A small package for creating 2D markup.

Current section

3 Versions

Jump to

Compare versions

4 files changed
+27 additions
-20 deletions
  @@ -3,11 +3,11 @@
3 3 {<<"description">>,<<"A small package for creating 2D markup.">>}.
4 4 {<<"elixir">>,<<"~> 1.12">>}.
5 5 {<<"files">>,
6 - [<<"lib">>,<<"lib/markex">>,<<"lib/markex/element.ex">>,
7 - <<"lib/markex/element">>,<<"lib/markex/element/operators.ex">>,
6 + [<<"lib">>,<<"lib/markex">>,<<"lib/markex/element">>,
7 + <<"lib/markex/element/operators.ex">>,<<"lib/markex/element.ex">>,
8 8 <<".formatter.exs">>,<<"mix.exs">>,<<"README.md">>,<<"LICENSE">>]}.
9 9 {<<"licenses">>,[<<"MIT">>]}.
10 10 {<<"links">>,[{<<"GitHub">>,<<"https://github.com/wmean-spec/markex">>}]}.
11 11 {<<"name">>,<<"markex">>}.
12 12 {<<"requirements">>,[]}.
13 - {<<"version">>,<<"1.1.0">>}.
13 + {<<"version">>,<<"1.1.1">>}.
  @@ -3,10 +3,12 @@ defmodule Markex.Element do
3 3 Creating and working with elements for 2D markup
4 4 """
5 5
6 + alias __MODULE__
7 +
6 8 @typedoc """
7 9 List of strings, where all string the same length
8 10 """
9 - @type element :: list(String.t())
11 + @type t :: list(String.t())
10 12
11 13 @doc """
12 14 Creates new element using regular string or list of strings
  @@ -16,7 +18,7 @@ defmodule Markex.Element do
16 18 ## Examples
17 19
18 20 iex> Markex.Element.new("Hello, world!")
19 - ["Hello, wordl!"]
21 + ["Hello, world!"]
20 22
21 23 iex> Markex.Element.new(["Hello, world!", "or something idk", "."])
22 24 [
  @@ -26,13 +28,13 @@ defmodule Markex.Element do
26 28 ]
27 29 """
28 30 @doc since: "1.0.0"
29 - @spec new(String.t()) :: element
31 + @spec new(String.t()) :: Element.t()
30 32 def new(content) when is_binary(content) do
31 33 [content]
32 34 end
33 35
34 36 @doc since: "1.0.0"
35 - @spec new(list(String.t())) :: element
37 + @spec new(list(String.t())) :: Element.t()
36 38 def new(content) when is_list(content) do
37 39 width = Enum.reduce(content, 0, &max(String.length(&1), &2))
38 40 Enum.map(content, &String.pad_trailing(&1, width))
  @@ -53,7 +55,11 @@ defmodule Markex.Element do
53 55 ]
54 56 """
55 57 @doc since: "1.0.0"
56 - @spec new(String.t(), non_neg_integer(), non_neg_integer()) :: element
58 + @spec new(String.t(), non_neg_integer(), non_neg_integer()) :: Element.t()
59 + def new(_ch, 0, _h) do
60 + []
61 + end
62 +
57 63 def new(ch, w, h) do
58 64 ch
59 65 |> String.duplicate(w)
  @@ -68,7 +74,7 @@ defmodule Markex.Element do
68 74 "##\\n##"
69 75 """
70 76 @doc since: "1.0.0"
71 - @spec to_string(element) :: String.t()
77 + @spec to_string(Element.t()) :: String.t()
72 78 def to_string(element) do
73 79 Enum.join(element, "\n")
74 80 end
  @@ -79,7 +85,7 @@ defmodule Markex.Element do
79 85 Also see `Markex.Element.size/1`
80 86 """
81 87 @doc since: "1.0.0"
82 - @spec height(element) :: non_neg_integer()
88 + @spec height(Element.t()) :: non_neg_integer()
83 89 def height(element) do
84 90 length(element)
85 91 end
  @@ -90,7 +96,7 @@ defmodule Markex.Element do
90 96 Also see `Markex.Element.size/1`
91 97 """
92 98 @doc since: "1.0.0"
93 - @spec width(element) :: non_neg_integer()
99 + @spec width(Element.t()) :: non_neg_integer()
94 100 def width(element) do
95 101 if height(element) != 0 do
96 102 String.length(List.first(element))
  @@ -109,7 +115,7 @@ defmodule Markex.Element do
109 115 {4, 5}
110 116 """
111 117 @doc since: "1.0.0"
112 - @spec size(element) :: {non_neg_integer(), non_neg_integer()}
118 + @spec size(Element.t()) :: {non_neg_integer(), non_neg_integer()}
113 119 def size(element) do
114 120 {width(element), height(element)}
115 121 end
  @@ -124,7 +130,7 @@ defmodule Markex.Element do
124 130 ]
125 131 """
126 132 @doc since: "1.1.0"
127 - @spec wider(element, pos_integer(), :center | :left | :right) :: element
133 + @spec wider(Element.t(), pos_integer(), :center | :left | :right) :: Element.t()
128 134 def wider(element, n, align \\ :center)
129 135 def wider(element, n, :center) do
130 136 add_space = n - width(element)
  @@ -160,7 +166,7 @@ defmodule Markex.Element do
160 166 ]
161 167 """
162 168 @doc since: "1.1.0"
163 - @spec higher(element, pos_integer(), :center | :top | :bottom) :: element
169 + @spec higher(Element.t(), pos_integer(), :center | :top | :bottom) :: Element.t()
164 170 def higher(element, n, align \\ :center)
165 171 def higher(element, n, :center) do
166 172 add_space = n - height(element)
  @@ -210,7 +216,7 @@ defmodule Markex.Element do
210 216 ]
211 217 """
212 218 @doc since: "1.1.0"
213 - @spec over(element, element, :center | :left | :right) :: element
219 + @spec over(Element.t(), Element.t(), :center | :left | :right) :: Element.t()
214 220 def over(this, that, align \\ :center) do
215 221 w = max(width(this), width(that))
216 222 this = wider(this, w, align)
  @@ -235,7 +241,7 @@ defmodule Markex.Element do
235 241 ]
236 242 """
237 243 @doc since: "1.1.0"
238 - @spec beside(element, element, :center | :top | :bottom) :: element
244 + @spec beside(Element.t(), Element.t(), :center | :top | :bottom) :: Element.t()
239 245 def beside(this, that, align \\ :center) do
240 246 h = max(height(this), height(that))
241 247 this = higher(this, h, align)
  @@ -1,13 +1,13 @@
1 1 defmodule Markex.Element.Operators do
2 2 import Markex.Element, only: [over: 2, beside: 2]
3 3
4 - @type element :: Markex.Element.element()
4 + alias Markex.Element
5 5
6 6 @moduledoc """
7 7 Pretty operators for actions with elements
8 8 """
9 9
10 - @spec element <~> element :: element
10 + @spec Element.t() <~> Element.t() :: Element.t()
11 11 @doc """
12 12 See `Markex.Element.over/2`
13 13 """
  @@ -15,7 +15,7 @@ defmodule Markex.Element.Operators do
15 15 over(top, bottom)
16 16 end
17 17
18 - @spec element <|> element :: element
18 + @spec Element.t() <|> Element.t() :: Element.t()
19 19 @doc """
20 20 See `Markex.Element.beside/2`
21 21 """
  @@ -4,7 +4,7 @@ defmodule Markex.MixProject do
4 4 def project do
5 5 [
6 6 app: :markex,
7 - version: "1.1.0",
7 + version: "1.1.1",
8 8 elixir: "~> 1.12",
9 9 start_permanent: Mix.env() == :prod,
10 10 deps: deps(),
  @@ -32,6 +32,7 @@ defmodule Markex.MixProject do
32 32 defp deps do
33 33 [
34 34 {:ex_doc, "~> 0.24", only: :dev, runtime: false},
35 + {:dialyxir, "~> 1.0", only: :dev, runtime: false},
35 36 ]
36 37 end
37 38 end