From 0960a4353bb38096e71afe3fa2e3ed89dc612117 Mon Sep 17 00:00:00 2001 From: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> Date: Fri, 5 Feb 2021 11:01:43 +0100 Subject: pkgs/sternenseemann/tep: init pkgs/sternenseemann/emoji-generic: init at unstable-2020-11-22 --- pkgs/sternenseemann/tep/tepData.hs | 42 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 pkgs/sternenseemann/tep/tepData.hs (limited to 'pkgs/sternenseemann/tep/tepData.hs') 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 -- cgit 1.4.1