Packages
localize
0.33.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/number/plural_rules/compiler.ex
defmodule Localize.Number.PluralRule.Compiler do
@moduledoc false
# Compiles CLDR plural rule definitions into Elixir AST.
#
# Uses the Erlang leex lexer (`:plural_rules_lexer`) and yecc parser
# (`:plural_rules_parser`) to tokenize and parse rule definitions
# from the ICU/CLDR plural rules syntax.
@doc """
Tokenize a plural rule definition.
Uses the leex lexer to tokenize a CLDR plural rule definition
string into a list of tokens.
### Arguments
* `definition` is a CLDR plural rule definition string.
### Returns
* `{:ok, tokens, end_line}` on success.
* `{:error, reason}` on failure.
"""
def tokenize(definition) when is_binary(definition) do
definition
|> String.to_charlist()
|> :plural_rules_lexer.string()
end
@doc """
Parse a plural rule definition.
Using the yecc parser, parse a rule definition into an Elixir
AST that can then be `unquoted` into a function definition.
### Arguments
* `tokens` is a list of tokens from `tokenize/1`, or a binary
rule definition string.
### Returns
* `{:ok, ast}` on success.
* `{:error, reason}` on failure.
"""
def parse(tokens) when is_list(tokens) do
:plural_rules_parser.parse(tokens)
end
def parse(definition) when is_binary(definition) do
{:ok, tokens, _end_line} = tokenize(definition)
:plural_rules_parser.parse(tokens)
end
end