about summary refs log tree commit diff
path: root/pkgs/sternenseemann/tep/tepData.hs
diff options
context:
space:
mode:
authorsternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>2021-02-05 11:01:43 +0100
committersternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>2021-02-06 20:15:36 +0100
commit0960a4353bb38096e71afe3fa2e3ed89dc612117 (patch)
treeefb0c190e39b4068ec913586ef297f9eda6b458c /pkgs/sternenseemann/tep/tepData.hs
parentb1a493ed51858fdbd7b24f844782157fa83e5319 (diff)
pkgs/sternenseemann/tep: init
pkgs/sternenseemann/emoji-generic: init at unstable-2020-11-22
Diffstat (limited to 'pkgs/sternenseemann/tep/tepData.hs')
-rw-r--r--pkgs/sternenseemann/tep/tepData.hs42
1 files changed, 42 insertions, 0 deletions
diff --git a/pkgs/sternenseemann/tep/tepData.hs b/pkgs/sternenseemann/tep/tepData.hs
new file mode 100644
index 00000000..35a69319
--- /dev/null
+++ b/pkgs/sternenseemann/tep/tepData.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Main where
+
+import Text.Emoji.DataFiles.EmojiTest
+
+import Codec.Binary.UTF8.Light (w2c)
+import qualified Data.Attoparsec.Text as A
+import qualified Data.ByteString as B
+import Data.Text (Text ())
+import qualified Data.Text as T
+import qualified Data.Text.Encoding as T
+import Data.Word (Word32)
+
+parseEmojiTest :: Text -> Either String EmojiTest
+parseEmojiTest = A.parseOnly emojiTestFile
+
+reportError :: Either String a -> IO a
+reportError (Left e)  = fail e
+reportError (Right x) = pure x
+
+outputTepFormat :: EmojiTest -> IO ()
+outputTepFormat = mapM_ (outputEntry [])
+  where outputEntry p (Comment _) = pure ()
+        outputEntry p (Group _ name es) =
+          mapM_ (outputEntry (p ++ [name])) es
+        outputEntry p (Entry codes _ _ name) =
+          outputEmoji codes name p
+
+codesText :: [Word32] -> Text
+codesText = T.pack . map w2c
+
+outputEmoji :: [Word32] -> Text -> [Text] -> IO ()
+outputEmoji codes name path = B.putStr . T.encodeUtf8
+  $  codesText codes
+  <> " " <> name <> " ("
+  <> T.intercalate " → " path <> ")\n"
+
+readStdin :: IO Text
+readStdin = T.decodeUtf8 <$> B.getContents
+
+main :: IO ()
+main = readStdin >>= reportError . parseEmojiTest >>= outputTepFormat