View Source Owl.Data (Owl v0.2.0)
A set of functions for iodata/0 with tags.
Link to this section Summary
Types
ANSI escape sequence.
A recursive data type that is similar to iodata/0, but additionally supports Owl.Tag.t/1.
Functions
Adds a prefix before each line of the data.
Returns list of t() containing count elements each.
Returns length of the data.
Splits data by new lines.
Divides data into parts based on a pattern saving sequences for tagged data in new tags.
Builds a tag.
Transforms data to IO.ANSI.ansidata/0 format which can be consumed by IO module.
Removes information about sequences and keeps only content of the tag.
Zips corresponding lines into 1 line.
Link to this section Types
Specs
sequence() :: :black | :red | :green | :yellow | :blue | :magenta | :cyan | :white | :black_background | :red_background | :green_background | :yellow_background | :blue_background | :magenta_background | :cyan_background | :white_background | :light_black_background | :light_red_background | :light_green_background | :light_yellow_background | :light_blue_background | :light_magenta_background | :light_cyan_background | :light_white_background | :default_color | :default_background | :blink_slow | :blink_rapid | :faint | :bright | :inverse | :underline | :italic | :overlined | :reverse | binary()
ANSI escape sequence.
An atom alias of ANSI escape sequence.
A binary representation of color like "[38;5;33m" (which is IO.ANSI.color(33) or IO.ANSI.color(0, 2, 5)).
Specs
A recursive data type that is similar to iodata/0, but additionally supports Owl.Tag.t/1.
Can be written to stdout using Owl.IO.puts/2.
Link to this section Functions
Specs
Adds a prefix before each line of the data.
An important feature is that styling of the data will be saved for each line.
Example
iex> "first\nsecond" |> Owl.Data.tag(:red) |> Owl.Data.add_prefix(Owl.Data.tag("test: ", :yellow))
[
[Owl.Data.tag("test: ", :yellow), Owl.Data.tag(["first"], :red)],
"\n",
[Owl.Data.tag("test: ", :yellow), Owl.Data.tag(["second"], :red)]
]
Specs
chunk_every(data :: t(), count :: pos_integer()) :: [t()]
Returns list of t() containing count elements each.
Example
iex> Owl.Data.chunk_every(
...> ["first second ", Owl.Data.tag(["third", Owl.Data.tag(" fourth", :blue)], :red)],
...> 7
...> )
[
"first s",
["econd ", Owl.Data.tag(["t"], :red)],
Owl.Data.tag(["hird", Owl.Data.tag([" fo"], :blue)], :red),
Owl.Data.tag(["urth"], :blue)
]
Specs
length(t()) :: non_neg_integer()
Returns length of the data.
Examples
iex> Owl.Data.length(["222"])
3
iex> Owl.Data.length([222])
1
iex> Owl.Data.length([[[]]])
0
iex> Owl.Data.length(["222", Owl.Data.tag(["333", "444"], :green)])
9
Specs
Splits data by new lines.
A special case of split/2.
Example
iex> Owl.Data.lines(["first\nsecond\n", Owl.Data.tag("third\nfourth", :red)])
["first", "second", Owl.Data.tag(["third"], :red), Owl.Data.tag(["fourth"], :red)]
Specs
split(t(), String.pattern() | Regex.t()) :: [t()]
Divides data into parts based on a pattern saving sequences for tagged data in new tags.
Example
iex> Owl.Data.split(["first second ", Owl.Data.tag("third fourth", :red)], " ")
["first", "second", Owl.Data.tag(["third"], :red), Owl.Data.tag(["fourth"], :red)]
iex> Owl.Data.split(["first second ", Owl.Data.tag("third fourth", :red)], ~r/ +/)
["first", "second", Owl.Data.tag(["third"], :red), Owl.Data.tag(["fourth"], :red)]
Specs
Builds a tag.
Examples
iex> Owl.Data.tag(["hello ", Owl.Data.tag("world", :green), "!!!"], :red) |> inspect()
~s|#Owl.Tag[:red]<["hello ", #Owl.Tag[:green]<"world">, "!!!"]>|
iex> Owl.Data.tag("hello world", [:green, :red_background]) |> inspect()
~s|#Owl.Tag[:green, :red_background]<"hello world">|
Specs
to_ansidata(t()) :: IO.ANSI.ansidata()
Transforms data to IO.ANSI.ansidata/0 format which can be consumed by IO module.
Examples
iex> "hello" |> Owl.Data.tag([:red, :cyan_background]) |> Owl.Data.to_ansidata()
[[[[[[[] | "[46m"] | "[31m"], "hello"] | "[39m"] | "[49m"] | "[0m"]
Specs
Creates a t/0 from an a list of t/0, it inserts new line characters between original elements.
Examples
iex> Owl.Data.unlines(["a", "b", "c"])
["a", "\n", "b", "\n", "c"]
iex> ["first\nsecond\n", Owl.Data.tag("third\nfourth", :red)]
...> |> Owl.Data.lines()
...> |> Owl.Data.unlines()
...> |> Owl.Data.to_ansidata()
Owl.Data.to_ansidata(["first\nsecond\n", Owl.Data.tag("third\nfourth", :red)])
Specs
Removes information about sequences and keeps only content of the tag.
Examples
iex> Owl.Data.tag("Hello", :red) |> Owl.Data.untag()
"Hello"
iex> Owl.Data.tag([72, 101, 108, 108, 111], :red) |> Owl.Data.untag()
'Hello'
iex> Owl.Data.tag(["Hello", Owl.Data.tag("world", :green)], :red) |> Owl.Data.untag()
["Hello", "world"]
iex> ["Hello ", Owl.Data.tag("world", :red), ["!"]] |> Owl.Data.untag()
["Hello ", "world", ["!"]]
Specs
Zips corresponding lines into 1 line.
The zipping finishes as soon as either data completes.
Examples
iex> Owl.Data.zip("a\nb\nc", "d\ne\nf")
[["a", "d"], "\n", ["b", "e"], "\n", ["c", "f"]]
iex> Owl.Data.zip("a\nb", "c")
[["a", "c"]]
iex> 1..3
...> |> Enum.map(&to_string/1)
...> |> Enum.map(&Owl.Box.new/1) |> Enum.reduce(&Owl.Data.zip/2) |> to_string()
"""
┌─┐┌─┐┌─┐
│3││2││1│
└─┘└─┘└─┘
""" |> String.trim_trailing()