{-# LANGUAGE CPP #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Text.Emoji
( emojis
, emojiFromAlias
, aliasesFromEmoji
, baseEmojis
, zwjEmojis
) where

import Prelude
import qualified Data.Map as M
import Data.Text (Text)

emojiMap :: M.Map Text Text
emojiMap :: Map Text Text
emojiMap = forall k a. Ord k => [(k, a)] -> Map k a
M.fromList [(Text, Text)]
emojis

emojiAliasMap :: M.Map Text [Text]
emojiAliasMap :: Map Text [Text]
emojiAliasMap =
  forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\(Text
alias, Text
s) Map Text [Text]
m -> forall k a.
Ord k =>
(Maybe a -> Maybe a) -> k -> Map k a -> Map k a
M.alter (forall {a}. a -> Maybe [a] -> Maybe [a]
go Text
alias) Text
s Map Text [Text]
m) forall a. Monoid a => a
mempty [(Text, Text)]
emojis
    where
     go :: a -> Maybe [a] -> Maybe [a]
go a
alias Maybe [a]
Nothing   = forall a. a -> Maybe a
Just [a
alias]
     go a
alias (Just [a]
as) = forall a. a -> Maybe a
Just (a
aliasforall a. a -> [a] -> [a]
:[a]
as)

-- | Lookup an emoji given its alias.
emojiFromAlias :: Text -> Maybe Text
emojiFromAlias :: Text -> Maybe Text
emojiFromAlias Text
name = forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup Text
name Map Text Text
emojiMap

-- | Lookup the aliases of an emoji.
aliasesFromEmoji :: Text -> Maybe [Text]
aliasesFromEmoji :: Text -> Maybe [Text]
aliasesFromEmoji Text
s = forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup Text
s Map Text [Text]
emojiAliasMap

-- | Association list of (alias, emoji) pairs.  Note that the
-- same emoji may have multiple aliases.
emojis :: [(Text, Text)]

-- | A list of all valid emoji (not containing zero-width joiners), taken from
-- the Unicode Emoji Specification.
baseEmojis :: [Text]

-- | A list of all valid emoji built from zero-width joiners, taken from the
-- Unicode Emoji Specification.
zwjEmojis :: [Text]
#include "emojis.inc"