Packages
ex_cldr_numbers
2.1.1
2.38.3
2.38.2
2.38.1
2.38.0
2.37.0
2.36.0
2.35.2
2.35.1
2.35.0
2.34.1
2.34.0
2.33.6
2.33.5
2.33.4
2.33.3
2.33.2
2.33.1
2.33.0
2.32.4
2.32.3
2.32.2
2.32.1
2.32.0
retired
2.31.3
retired
2.31.2
2.31.1
2.31.0
2.30.1
2.30.0
2.29.0
2.28.0
2.27.3
2.27.2
2.27.1
2.27.0
2.26.0
2.25.2
2.25.1
2.25.0
2.24.0
2.23.3
2.23.2
2.23.1
2.23.0
2.23.0-rc.4
2.23.0-rc.3
2.23.0-rc.2
2.23.0-rc.1
2.23.0-rc.0
2.22.1
2.22.0
2.21.0
2.20.0
2.19.0
2.18.4
2.18.3
2.18.2
2.18.1
2.18.0
2.17.0
2.17.0-rc.1
2.17.0-rc.0
2.16.1
2.16.0
2.16.0-rc.0
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.0
2.13.2
2.13.1
2.13.0
2.13.0-rc.0
2.12.1
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.4
2.6.3
2.6.2
2.6.1
2.6.0
2.5.0
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.0
2.2.0
2.1.1
2.1.0
2.0.0
2.0.0-rc.0
1.6.0
1.5.2
1.5.1
1.5.0
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.1
1.3.0
1.3.0-rc.1
1.3.0-rc.0
retired
1.2.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.0
retired
0.3.3
0.3.2
retired
0.3.1
retired
0.3.0
retired
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Number and currency localization and formatting functions for the Common Locale Data Repository (CLDR).
Current section
Files
Jump to
Current section
Files
lib/backend/symbol.ex
defmodule Cldr.Number.Backend.Symbol do
@moduledoc false
def define_number_module(config) do
module = inspect(__MODULE__)
backend = config.backend
config = Macro.escape(config)
quote location: :keep, bind_quoted: [module: module, backend: backend, config: config] do
defmodule Number.Symbol do
@doc """
Returns a map of `Cldr.Number.Symbol.t` structs of the number symbols for each
of the number systems of a locale.
## Options
* `locale` is any valid locale name returned by `#{inspect(backend)}.known_locale_names/0`
or a `Cldr.LanguageTag` struct returned by `#{inspect(backend)}.Locale.new!/`. The
default is `#{inspect(backend)}.get_locale/0`.
## Example:
iex> #{inspect(__MODULE__)}.number_symbols_for("th")
{:ok, %{
latn: %Cldr.Number.Symbol{
decimal: ".",
exponential: "E",
group: ",",
infinity: "∞",
list: ";",
minus_sign: "-",
nan: "NaN",
per_mille: "‰",
percent_sign: "%",
plus_sign: "+",
superscripting_exponent: "×",
time_separator: ":"
},
thai: %Cldr.Number.Symbol{
decimal: ".",
exponential: "E",
group: ",",
infinity: "∞",
list: ";",
minus_sign: "-",
nan: "NaN",
per_mille: "‰",
percent_sign: "%",
plus_sign: "+",
superscripting_exponent: "×",
time_separator: ":"
}
}}
"""
@spec number_symbols_for(LanguageTag.t() | Locale.locale_name()) :: Keyword.t()
def number_symbols_for(locale \\ unquote(backend).get_locale())
for locale <- Cldr.Config.known_locale_names(config) do
symbols =
locale
|> Cldr.Config.get_locale(config)
|> Map.get(:number_symbols)
|> Enum.map(fn
{k, nil} -> {k, nil}
{k, v} -> {k, struct(Cldr.Number.Symbol, v)}
end)
|> Enum.into(%{})
def number_symbols_for(%LanguageTag{cldr_locale_name: unquote(locale)}) do
{:ok, unquote(Macro.escape(symbols))}
end
end
def number_symbols_for(locale, number_system) do
with {:ok, system_name} <-
unquote(backend).Number.System.system_name_from(number_system, locale),
{:ok, symbols} <- number_symbols_for(locale) do
symbols
|> Map.get(system_name)
|> Cldr.Number.Symbol.symbols_return(locale, number_system)
end
end
def number_symbols_for(locale_name) when is_binary(locale_name) do
with {:ok, locale} <- unquote(backend).validate_locale(locale_name) do
number_symbols_for(locale)
end
end
def number_symbols_for(locale) do
{:error, Cldr.Locale.locale_error(locale)}
end
end
end
end
end