Packages
localize
0.39.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.41.3
0.41.2
0.41.1
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.1
0.30.0
retired
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
0.1.0-alpha.1
Localization (parsing, formatting) of numbers, dates/time/calendar, units of measure, messages and lists. Includes localized collation.
Current section
Files
Jump to
Current section
Files
lib/localize/unit/parser/helpers.ex
defmodule Localize.Unit.Parser.Helpers do
@moduledoc false
# Runtime helper functions called by the pre-compiled parser.
# These are extracted from the combinator module so the
# NimbleParsec dependency is not needed at runtime.
@doc false
def wrap_pow([_pow_string, digits]) do
{:power, {:pow, String.to_integer(digits)}}
end
@doc false
def wrap_constant(parts) do
{:constant, Enum.join(parts)}
end
@doc false
def wrap_currency_unit([code]) do
{:single_unit, prefix: nil, power: nil, base: "curr-" <> String.upcase(code)}
end
@doc false
def wrap_single_unit(parts) do
power =
case Enum.find(parts, fn
{:power, _} -> true
_ -> false
end) do
{:power, value} -> value
nil -> nil
end
si_prefix =
case Enum.find(parts, &match?({:si_prefix, _}, &1)) do
{:si_prefix, value} -> Localize.Unit.Data.si_prefix_atom(value)
nil -> nil
end
base =
case Enum.find(parts, &match?({:base, _}, &1)) do
{:base, value} -> value
nil -> nil
end
{:single_unit, prefix: si_prefix, power: power, base: base}
end
@doc false
def wrap_per_leading(products) do
denominator = Enum.flat_map(products, fn {:product, units} -> units end)
{:unit, type: nil, numerator: [], denominator: denominator}
end
@doc false
def wrap_core_unit([{:product, numerator}]) do
{:unit, type: nil, numerator: numerator, denominator: []}
end
def wrap_core_unit([{:product, numerator} | denominator_products]) do
denominator = Enum.flat_map(denominator_products, fn {:product, units} -> units end)
{:unit, type: nil, numerator: numerator, denominator: denominator}
end
@doc false
def wrap_long_unit([category_name, {:unit, keyword}]) do
{:unit, Keyword.put(keyword, :type, category_name)}
end
@doc false
def wrap_mixed_unit(units) do
{:mixed_unit, units}
end
end