Packages

Elixlsx is a writer for the MS Excel OpenXML format (`.xlsx`).

Current section

Files

Jump to
elixlsr lib elixlsx compiler font_db.ex
Raw

lib/elixlsx/compiler/font_db.ex

defmodule Elixlsx.Compiler.FontDB do
alias __MODULE__
alias Elixlsx.Style.Font
alias Elixlsx.Compiler.DBUtil
defstruct fonts: %{}, element_count: 0
@type t :: %FontDB{
fonts: %{Font.t() => pos_integer},
element_count: non_neg_integer
}
@spec register_font(FontDB.t(), Font.t()) :: FontDB.t()
def register_font(fontdb, font) do
case Map.fetch(fontdb.fonts, font) do
:error ->
%FontDB{
fonts: Map.put(fontdb.fonts, font, fontdb.element_count + 1),
element_count: fontdb.element_count + 1
}
{:ok, _} ->
fontdb
end
end
def get_id(fontdb, font) do
case Map.fetch(fontdb.fonts, font) do
:error ->
raise %ArgumentError{message: "Invalid key provided for FontDB.get_id: " <> inspect(font)}
{:ok, id} ->
id
end
end
def id_sorted_fonts(fontdb), do: DBUtil.id_sorted_values(fontdb.fonts)
end