Packages
ex_cldr
2.40.3
2.47.5
2.47.4
2.47.3
2.47.2
2.47.1
2.47.0
2.46.0
2.45.2
2.45.1
2.45.0
2.44.1
2.44.0
2.43.2
2.43.1
2.43.0
2.42.0
2.41.1
2.41.0
2.40.4
2.40.3
2.40.2
2.40.1
2.40.0
2.39.2
2.39.1
2.39.0
2.38.1
2.38.0
2.37.5
2.37.4
2.37.3
retired
2.37.2
2.37.1
2.37.0
2.36.0
2.35.1
2.35.0
retired
2.34.2
2.34.1
2.34.0
2.33.2
2.33.1
2.33.1-rc.0
2.33.0
2.32.1
2.32.0
2.31.0
2.30.0
2.29.0
2.28.0
2.27.1
2.27.0
retired
2.26.3
2.26.2
2.26.1
2.26.0
2.25.0
2.24.2
2.24.1
2.24.0
2.24.0-rc.6
2.24.0-rc.5
2.24.0-rc.4
2.24.0-rc.3
2.24.0-rc.2
2.24.0-rc.1
2.24.0-rc.0
2.23.2
2.23.1
2.23.0
2.22.1
2.22.0
2.21.0
2.20.0
2.20.0-rc.3
2.20.0-rc.2
2.20.0-rc.1
2.20.0-rc.0
2.19.1
2.19.0
2.18.2
2.18.1
2.18.0
2.18.0-rc.0
2.17.2
2.17.1
2.17.0
2.16.2
2.16.1
2.16.1-rc.0
2.16.0
2.15.0
2.14.1
2.14.0
2.14.0-rc.0
2.13.0
2.12.1
2.12.0
2.11.1
2.11.0
2.10.2
2.10.1
2.10.0
retired
2.9.0
2.8.1
2.8.0
2.7.2
2.7.1
2.7.0
2.6.2
2.6.1
2.6.0
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.2
2.3.1
2.3.0
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.0
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.3
retired
2.0.0-rc.2
retired
2.0.0-rc.1
retired
2.0.0-rc.0
retired
1.8.2
1.8.1
1.8.0
1.7.1
1.7.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
retired
1.4.0-rc.3
retired
1.4.0-rc.2
retired
1.4.0-rc.1
retired
1.4.0-rc.0
retired
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.0
1.0.0-rc.3
retired
1.0.0-rc.2
retired
1.0.0-rc.1
retired
1.0.0-rc.0
retired
0.13.1
0.13.0
0.12.2
retired
0.12.1
retired
0.12.0
retired
0.11.0
retired
0.10.0
retired
0.9.0
retired
0.8.3
retired
0.8.2
retired
0.8.1
retired
0.8.0
retired
0.7.0
retired
0.6.2
retired
0.6.1
retired
0.6.0
retired
0.5.2
retired
0.5.1
retired
0.5.0
retired
0.4.2
retired
0.4.1
retired
0.4.0
retired
0.3.0
retired
0.2.1
retired
0.2.0
retired
0.1.3
retired
0.1.2
retired
0.1.1
retired
0.1.0
retired
0.0.20
retired
0.0.19
retired
0.0.18
retired
0.0.17
retired
0.0.16
retired
0.0.15
retired
0.0.14
retired
0.0.13
retired
0.0.12
retired
0.0.11
retired
0.0.10
retired
0.0.8
retired
0.0.7
retired
0.0.6
retired
0.0.5
retired
0.0.4
retired
0.0.3
retired
Common Locale Data Repository (CLDR) functions for Elixir to localize and format numbers, dates, lists, messages, languages, territories and units with support for over 700 locales for internationalized (i18n) and localized (L10N) applications.
Current section
Files
Jump to
Current section
Files
src/plural_rules_lexer.xrl
% Lexer for the ICU/CLDR Plural rules definitions.
% Step 1 is to read in the json rule set.
% Then for each ruleset, pass each rule to the parser in two parts:
% First the rule name
% THen the rule definition
%
% Can be invoked in elixir as:
%
% iex> :plural_rules_lexer.string(rules_as_a_char_list)
%
Definitions.
Equals = =
Not_equals = !=
Mod = %|mod
Is = is
Not = not
And = and
Or = or
Within = within
In = in
Decimal_sample = @decimal
Integer_sample = @integer
Operand = n|i|f|t|v|w|e
Tilde = ~
Comma = ,
Range = \.\.
Ellipsis = …|\.\.\.
Decimal = [0-9]+(\.[0-9]+([c][0-9])?)
Integer = [0-9]+([c][0-9])?
Whitespace = [\s\n\t]
Rules.
{Equals} : {token,{equals,TokenLine,TokenChars}}.
{Not_equals} : {token,{not_equals,TokenLine,TokenChars}}.
{Mod} : {token,{mod,TokenLine,TokenChars}}.
{Is} : {token,{is_op,TokenLine,TokenChars}}.
{Not} : {token,{not_op,TokenLine,TokenChars}}.
{And} : {token,{and_predicate,TokenLine,TokenChars}}.
{Or} : {token,{or_predicate,TokenLine,TokenChars}}.
{Within} : {token,{within_op,TokenLine,TokenChars}}.
{In} : {token,{in,TokenLine,TokenChars}}.
{Integer_sample} : {token,{sample,TokenLine,'integer'}}.
{Decimal_sample} : {token,{sample,TokenLine,'decimal'}}.
{Operand} : {token,{operand,TokenLine,TokenChars}}.
{Tilde} : {token,{tilde,TokenLine,TokenChars}}.
{Comma} : {token,{comma,TokenLine,TokenChars}}.
{Range} : {token,{range_op,TokenLine,TokenChars}}.
{Decimal} : {token,{decimal,TokenLine,decimal_exponent(TokenChars)}}.
{Integer} : {token,{integer,TokenLine,integer_exponent(TokenChars)}}.
{Ellipsis} : {token,{ellipsis,TokenLine,TokenChars}}.
{Whitespace}+ : skip_token.
Erlang code.
-import('Elixir.Decimal', [new/1]).
integer_exponent(Chars) ->
case string:split(Chars, "c") of
[I, E] ->
Exp = list_to_integer(E),
Int = list_to_integer(I),
{Int * trunc(math:pow(10, Exp)), Exp};
[I] ->
list_to_integer(I)
end.
decimal_exponent(Chars) ->
case string:split(Chars, "c") of
[F, E] ->
Exp = list_to_integer(E),
Decimal_chars = lists:flatten([F, "e", E]),
Decimal = 'Elixir.Decimal':new(list_to_binary(Decimal_chars)),
{Decimal, Exp};
[F] ->
'Elixir.Decimal':new(list_to_binary(F))
end.