Packages
Implementation of Unicode Sets and Regexes for Elixir that can be used in function guards, compiled patterns, nimble_parsec combinators and regexes.
Current section
Files
Jump to
Current section
Files
lib/set/transform.ex
defmodule Unicode.Set.Transform do
@moduledoc false
@doc false
def ranges_to_guard_clause([{first, first}], var) when is_integer(first) do
quote do
unquote(var) == unquote(first)
end
end
def ranges_to_guard_clause([{first, last}], var) when is_integer(first) do
quote do
unquote(var) in unquote(first)..unquote(last)
end
end
def ranges_to_guard_clause([{first, first} | rest], var) when is_integer(first) do
quote do
unquote(var) == unquote(first) or unquote(ranges_to_guard_clause(rest, var))
end
end
def ranges_to_guard_clause([{first, last} | rest], var) when is_integer(first) do
quote do
unquote(var) in unquote(first)..unquote(last) or unquote(ranges_to_guard_clause(rest, var))
end
end
def ranges_to_guard_clause({:not_in, ranges}, var) do
quote do
not unquote(ranges_to_guard_clause(ranges, var))
end
end
def ranges_to_guard_clause({:in, ranges}, var) do
quote do
unquote(ranges_to_guard_clause(ranges, var))
end
end
def ranges_to_guard_clause([range], var) do
ranges_to_guard_clause(range, var)
end
def ranges_to_guard_clause([range | rest], var) do
quote do
unquote(ranges_to_guard_clause(range, var)) or unquote(ranges_to_guard_clause(rest, var))
end
end
end