Current section
3 Versions
Jump to
Current section
3 Versions
Compare versions
4
files changed
+80
additions
-19
deletions
| @@ -12,10 +12,35 @@ by adding `markex` to your list of dependencies in `mix.exs`: | |
| 12 12 | ```elixir |
| 13 13 | def deps do |
| 14 14 | [ |
| 15 | - {:markex, "~> 1.0.0"} |
| 15 | + {:markex, "~> 1.1.0"} |
| 16 16 | ] |
| 17 17 | end |
| 18 18 | ``` |
| 19 19 | |
| 20 | + ## Usage |
| 21 | + |
| 22 | + ```elixir |
| 23 | + import Markex.Element.Operators |
| 24 | + alias Markex.Element |
| 25 | + |
| 26 | + text = Element.new("some text") |
| 27 | + space = Element.new(" ") |
| 28 | + hor_bar = Element.new("@", 11, 1) |
| 29 | + vert_bar = Element.new("@", 1, 5) |
| 30 | + |
| 31 | + |
| 32 | + vert_bar <|> (hor_bar <~> space <~> text <~> space <~> hor_bar) <|> vert_bar |
| 33 | + |> Element.to_string() |
| 34 | + |> IO.puts() |
| 35 | + |
| 36 | + # Result: |
| 37 | + # @@@@@@@@@@@@@ |
| 38 | + # @ @ |
| 39 | + # @ some text @ |
| 40 | + # @ @ |
| 41 | + # @@@@@@@@@@@@@ |
| 42 | + |
| 43 | + ``` |
| 44 | + |
| 20 45 | [Documentation on hex](https://hexdocs.pm/markex/readme.html). |
| @@ -10,4 +10,4 @@ | |
| 10 10 | {<<"links">>,[{<<"GitHub">>,<<"https://github.com/wmean-spec/markex">>}]}. |
| 11 11 | {<<"name">>,<<"markex">>}. |
| 12 12 | {<<"requirements">>,[]}. |
| 13 | - {<<"version">>,<<"1.0.0">>}. |
| 13 | + {<<"version">>,<<"1.1.0">>}. |
| @@ -123,9 +123,10 @@ defmodule Markex.Element do | |
| 123 123 | " # " |
| 124 124 | ] |
| 125 125 | """ |
| 126 | - @doc since: "1.0.0" |
| 127 | - @spec wider(element, pos_integer()) :: element |
| 128 | - def wider(element, n) do |
| 126 | + @doc since: "1.1.0" |
| 127 | + @spec wider(element, pos_integer(), :center | :left | :right) :: element |
| 128 | + def wider(element, n, align \\ :center) |
| 129 | + def wider(element, n, :center) do |
| 129 130 | add_space = n - width(element) |
| 130 131 | left = Integer.floor_div(add_space, 2) |
| 131 132 | |
| @@ -134,6 +135,16 @@ defmodule Markex.Element do | |
| 134 135 | |> Enum.map(&String.pad_trailing(&1, n)) |
| 135 136 | end |
| 136 137 | |
| 138 | + def wider(element, n, :left) do |
| 139 | + element |
| 140 | + |> Enum.map(&String.pad_trailing(&1, n)) |
| 141 | + end |
| 142 | + |
| 143 | + def wider(element, n, :right) do |
| 144 | + element |
| 145 | + |> Enum.map(&String.pad_leading(&1, n)) |
| 146 | + end |
| 147 | + |
| 137 148 | @doc """ |
| 138 149 | Adds space to the top and bottom of the `element` so that the height matches `n` |
| 139 150 | |
| @@ -148,9 +159,10 @@ defmodule Markex.Element do | |
| 148 159 | " " |
| 149 160 | ] |
| 150 161 | """ |
| 151 | - @doc since: "1.0.0" |
| 152 | - @spec higher(element, pos_integer()) :: element |
| 153 | - def higher(element, n) do |
| 162 | + @doc since: "1.1.0" |
| 163 | + @spec higher(element, pos_integer(), :center | :top | :bottom) :: element |
| 164 | + def higher(element, n, align \\ :center) |
| 165 | + def higher(element, n, :center) do |
| 154 166 | add_space = n - height(element) |
| 155 167 | up = Integer.floor_div(add_space, 2) |
| 156 168 | down = add_space - up |
| @@ -162,9 +174,30 @@ defmodule Markex.Element do | |
| 162 174 | |> Enum.concat(List.duplicate(blank, down)) |
| 163 175 | end |
| 164 176 | |
| 177 | + def higher(element, n, :top) do |
| 178 | + add_space = n - height(element) |
| 179 | + |
| 180 | + blank = String.duplicate(" ", width(element)) |
| 181 | + |
| 182 | + element |
| 183 | + |> Enum.concat(List.duplicate(blank, add_space)) |
| 184 | + end |
| 185 | + |
| 186 | + def higher(element, n, :bottom) do |
| 187 | + add_space = n - height(element) |
| 188 | + |
| 189 | + blank = String.duplicate(" ", width(element)) |
| 190 | + |
| 191 | + List.duplicate(blank, add_space) |
| 192 | + |> Enum.concat(element) |
| 193 | + end |
| 194 | + |
| 165 195 | @doc """ |
| 166 196 | Positions `this` on top of `that`, makes the elements wider as needed |
| 167 197 | |
| 198 | + The `align` argument can be used to position the elements correctly relative |
| 199 | + to each other and can be `:center`, `:left`, or `:right`. |
| 200 | + |
| 168 201 | See also `Markex.Element.Operators.<~>/2` and `Markex.Element.wider/2`. |
| 169 202 | |
| 170 203 | ## Examples |
| @@ -176,18 +209,21 @@ defmodule Markex.Element do | |
| 176 209 | "$$$" |
| 177 210 | ] |
| 178 211 | """ |
| 179 | - @doc since: "1.0.0" |
| 180 | - @spec over(element, element) :: element |
| 181 | - def over(this, that) do |
| 212 | + @doc since: "1.1.0" |
| 213 | + @spec over(element, element, :center | :left | :right) :: element |
| 214 | + def over(this, that, align \\ :center) do |
| 182 215 | w = max(width(this), width(that)) |
| 183 | - this = wider(this, w) |
| 184 | - that = wider(that, w) |
| 216 | + this = wider(this, w, align) |
| 217 | + that = wider(that, w, align) |
| 185 218 | Enum.concat(this, that) |
| 186 219 | end |
| 187 220 | |
| 188 221 | @doc """ |
| 189 222 | Positions `this` to the left of `that`, makes the elements higher if needed |
| 190 223 | |
| 224 | + The `align` argument can be used to position the elements correctly relative |
| 225 | + to each other and can be `:center`, `:top`, or `:bottom`. |
| 226 | + |
| 191 227 | See also `Markex.Element.Operators.<|>/2` and `Markex.Element.higher/2`. |
| 192 228 | |
| 193 229 | ## Examples |
| @@ -198,12 +234,12 @@ defmodule Markex.Element do | |
| 198 234 | " $$" |
| 199 235 | ] |
| 200 236 | """ |
| 201 | - @doc since: "1.0.0" |
| 202 | - @spec beside(element, element) :: element |
| 203 | - def beside(this, that) do |
| 237 | + @doc since: "1.1.0" |
| 238 | + @spec beside(element, element, :center | :top | :bottom) :: element |
| 239 | + def beside(this, that, align \\ :center) do |
| 204 240 | h = max(height(this), height(that)) |
| 205 | - this = higher(this, h) |
| 206 | - that = higher(that, h) |
| 241 | + this = higher(this, h, align) |
| 242 | + that = higher(that, h, align) |
| 207 243 | |
| 208 244 | Enum.zip(this, that) |
| 209 245 | |> Enum.map(fn {l1, l2} -> l1 <> l2 end) |
| @@ -4,7 +4,7 @@ defmodule Markex.MixProject do | |
| 4 4 | def project do |
| 5 5 | [ |
| 6 6 | app: :markex, |
| 7 | - version: "1.0.0", |
| 7 | + version: "1.1.0", |
| 8 8 | elixir: "~> 1.12", |
| 9 9 | start_permanent: Mix.env() == :prod, |
| 10 10 | deps: deps(), |