Current section

Files

Jump to
paasaa lib mix tasks.ex
Raw

lib/mix/tasks.ex

defmodule Mix.Tasks.Paasaa.PrepareLanguages do
use Mix.Task
# mix paasaa.prepare_languages
@shortdoc "Parse and prepare erlang term file"
@moduledoc false
def run(_args) do
generate_scripts
generate_languages
Mix.shell.info "The term files generated successfully!"
:ok
end
def generate_scripts do
File.write! "./priv/scripts.binary", "./data/scripts.json"
|> File.read!
|> JSX.decode!
|> Enum.map(fn {name, expr} -> {name, Regex.compile!(expr, "u")} end)
|> :erlang.term_to_binary
end
def generate_languages do
File.write! "./priv/languages.binary", "./data/languages.json"
|> File.read!
|> JSX.decode!
|> Enum.map(&parse_trigrams/1)
|> Enum.into(%{})
|> :erlang.term_to_binary
end
defp parse_trigrams({script, langs}), do: {script, parse_trigrams langs}
defp parse_trigrams(langs) when is_map(langs) do
Enum.map langs, fn {lang, trigrams} ->
{lang, parse_trigrams trigrams}
end
end
defp parse_trigrams(trigrams_str) when is_binary(trigrams_str) do
trigrams_str
|> String.split("|")
|> Enum.with_index
|> Enum.into(%{})
end
end