Current section

Files

Jump to
beamoji src translators beamoji_baseemoji_translator.erl
Raw

src/translators/beamoji_baseemoji_translator.erl

-module(beamoji_baseemoji_translator).
-behaviour(beamoji_translator).
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.
-export(['🐣'/0, '⏩'/2, 'βͺ'/2]).
-spec '🐣'() -> beamoji_translator:'πŸ—Ί'().
'🐣'() ->
Path = filename:join([code:priv_dir(beamoji), "base_emoji.eterm"]),
{ok, [BaseEmoji]} = file:consult(Path),
{_I, ToBaseEmoji, FromBaseEmoji} =
lists:foldl(fun(Emoji, {I, To, From}) ->
{I + 1, maps:put(I, Emoji, To), maps:put(Emoji, I, From)}
end,
{0, #{}, #{}},
BaseEmoji),
#{'⏩' => ToBaseEmoji, 'βͺ' => FromBaseEmoji}.
-spec '⏩'(beamoji_translator:'βš›'(), beamoji_translator:'πŸ—Ί'()) ->
beamoji_translator:'βš›οΈ'().
'⏩'(UnquotedAtom, #{'⏩' := ToBaseEmoji}) ->
Letters = atom_to_list(UnquotedAtom),
Emojis = [maps:get(X, ToBaseEmoji, X) || X <- Letters],
binary_to_atom(iolist_to_binary(Emojis)).
-spec 'βͺ'(beamoji_translator:'βš›οΈ'(), beamoji_translator:'πŸ—Ί'()) ->
beamoji_translator:'βš›'().
'βͺ'(EmojifiedAtom, #{'βͺ' := FromBaseEmoji}) ->
CodePoints = string:to_graphemes(atom_to_list(EmojifiedAtom)),
Emojis = lists:map(fun characters_to_binary/1, CodePoints),
Letters = [maps:get(X, FromBaseEmoji, X) || X <- Emojis],
binary_to_atom(iolist_to_binary(Letters)).
characters_to_binary(A) when is_integer(A) ->
unicode:characters_to_binary([A]);
characters_to_binary(L) when is_list(L) ->
unicode:characters_to_binary(L).
-ifdef(TEST).
'βͺ_test'() ->
State = '🐣'(),
?assertEqual(smile, 'βͺ'('πŸ†˜πŸ§‰πŸ“±πŸ¦™πŸ‘€', State)),
?assertEqual(true, 'βͺ'('πŸ¦–πŸŒˆπŸ¦„πŸ‘€', State)),
?assertEqual(false, 'βͺ'('πŸ”₯πŸŽπŸ¦™πŸ†˜πŸ‘€', State)),
?assertEqual(undefined, 'βͺ'('πŸ¦„πŸ†•πŸΆπŸ‘€πŸ”₯πŸ“±πŸ†•πŸ‘€πŸΆ', State)),
?assertEqual(should, 'βͺ'('πŸ†˜β€οΈπŸ†—πŸ¦„πŸ¦™πŸΆ', State)),
ok.
'⏩_test'() ->
State = '🐣'(),
?assertEqual('πŸ†˜πŸ§‰πŸ“±πŸ¦™πŸ‘€', '⏩'(smile, State)),
?assertEqual('πŸ¦–πŸŒˆπŸ¦„πŸ‘€', '⏩'(true, State)),
?assertEqual('πŸ”₯πŸŽπŸ¦™πŸ†˜πŸ‘€', '⏩'(false, State)),
?assertEqual('πŸ¦„πŸ†•πŸΆπŸ‘€πŸ”₯πŸ“±πŸ†•πŸ‘€πŸΆ', '⏩'(undefined, State)),
ok.
-endif.