Packages
ex_cldr_numbers
2.32.0
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).
Retired package: Deprecated - deprecated
Current section
Files
Jump to
Current section
Files
lib/cldr/number/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
unless Cldr.Config.include_module_docs?(config.generate_docs) do
@moduledoc false
end
all_symbols =
for locale <- Cldr.Locale.Loader.known_locale_names(config) do
symbols =
locale
|> Cldr.Locale.Loader.get_locale(config)
|> Map.get(:number_symbols)
|> Enum.map(fn
{number_system, nil} -> {number_system, nil}
{number_system, symbols} -> {number_system, struct(Cldr.Number.Symbol, symbols)}
end)
|> Enum.into(%{})
{locale, symbols}
end
|> Map.new()
@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!/1`. 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() | Cldr.Locale.locale_name()) ::
{:ok, map()} | {:error, {module(), String.t()}}
def number_symbols_for(locale \\ unquote(backend).get_locale())
for {locale, symbols} <- all_symbols do
def number_symbols_for(%LanguageTag{cldr_locale_name: unquote(locale)}) do
{:ok, unquote(Macro.escape(symbols))}
end
end
def number_symbols_for(locale_name) do
with {:ok, locale} <- unquote(backend).validate_locale(locale_name) do
number_symbols_for(locale)
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
all_decimal_symbols =
for {_locale, locale_symbols} <- all_symbols,
{_number_system, symbols} <- locale_symbols,
!is_nil(symbols) do
symbols.decimal
end
|> Enum.uniq()
all_grouping_symbols =
for {_locale, locale_symbols} <- all_symbols,
{_number_system, symbols} <- locale_symbols,
!is_nil(symbols) do
symbols.group
end
|> Enum.uniq()
@doc """
Returns a list of all decimal symbols defined
by the locales configured in this backend as
a list.
"""
def all_decimal_symbols do
unquote(Macro.escape(all_decimal_symbols))
end
@doc """
Returns a list of all grouping symbols defined
by the locales configured in this backend as
a list.
"""
def all_grouping_symbols do
unquote(all_grouping_symbols)
end
@doc """
Returns a list of all decimal symbols defined
by the locales configured in this backend as
a string.
This string can be used as a character class
when builing a regular expression.
"""
def all_decimal_symbols_class do
unquote(all_decimal_symbols)
end
@doc """
Returns a list of all grouping symbols defined
by the locales configured in this backend as
a string.
This string can be used as a character class
when builing a regular expression.
"""
def all_grouping_symbols_class do
unquote(Enum.join(all_grouping_symbols))
end
end
end
end
end