about summary refs log tree commit diff
path: root/src/Text/Emoji/Types.hs
blob: c2040bb83b73d66bc4c6b6a52b7402ae4b48a4df (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
{-# LANGUAGE TemplateHaskell #-}
module Text.Emoji.Types where

import           Data.Char (toLower)
import           GHC.Word  (Word64 ())

data EmojiStyle
  = Emoji
  | Text
  deriving Show

data EmojiLevel
  = L1
  | L2
  | NA
  deriving Show

data EmojiModifierStatus
  = Modifier
  | Primary
  | Secondary
  | None
  deriving (Show)

data EmojiSource
  = ZDings
  | ARIB
  | JCarrier
  | WDings
  | X -- FIXME: Long Name?
  deriving (Show)

type ParserAssoc a = [(String, a)]

tupleShow :: Show a => (String -> String) -> a -> (String, a)
tupleShow f x = (f . show $ x, x)

emojiStyles :: ParserAssoc EmojiStyle
emojiStyles = map (tupleShow $ map toLower) [Emoji, Text]

emojiLevels :: ParserAssoc EmojiLevel
emojiLevels = map (tupleShow id) [L1, L2, NA]

emojiModifierStati :: ParserAssoc EmojiModifierStatus
emojiModifierStati = map (tupleShow $ map toLower) [Modifier, Primary, Secondary, None]

emojiSources :: ParserAssoc EmojiSource
emojiSources = [ ("z", ZDings), ("a", ARIB), ("j", JCarrier), ("w", WDings)
               , ("x", X) ]

type EmojiSources = [EmojiSource]

data Emoji = MkEmoji
  { _code          :: Word64
  , _defaultStyle  :: EmojiStyle
  , _emojiLevel    :: EmojiLevel
  , _emojiModifier :: EmojiModifierStatus
  , _emojiSources  :: EmojiSources
  , _version       :: String
  , _name          :: String
  } deriving Show