{-# LANGUAGE OverloadedStrings #-} module Network.Damn.Format.Damn.Internal ( textToBytes , damnFormat' ) where import Data.ByteString (ByteString) import Data.ByteString.Builder import qualified Data.ByteString.Lazy as LB (toStrict) import Data.Char import Data.Monoid.Compat import Data.Text (Text) import qualified Data.Text import Network.Damn.Tablumps.TH import Prelude.Compat textToBytes :: Text -> ByteString textToBytes = LB.toStrict . toLazyByteString . Data.Text.foldr (\c b -> maybeEscape c <> b) "" where maybeEscape c | ord c <= 127 = word8 (fromIntegral $ ord c) | otherwise = "&#x" <> word32Hex (fromIntegral $ ord c) <> ";" damnFormat' :: Lump -> ByteString damnFormat' (A x y) = "<a href=\"" <> x <> "\" title=\"" <> y <> "\">" damnFormat' C_A = "</a>" damnFormat' (Abbr x) = "<abbr title=\"" <> x <> "\">" damnFormat' C_Abbr = "</abbr>" damnFormat' (Acro x) = "<acronym title=\"" <> x <> "\">" damnFormat' C_Acro = "</acronym>" damnFormat' (Avatar x _) = ":icon" <> x <> ":" damnFormat' B = "<b>" damnFormat' C_B = "</b>" damnFormat' Bcode = "<bcode>" damnFormat' C_Bcode = "</bcode>" damnFormat' Br = "<br/>" damnFormat' Code = "<code>" damnFormat' C_Code = "</code>" damnFormat' (Dev _ x) = ":dev" <> x <> ":" damnFormat' (Embed x y z) = "<embed src=\"" <> x <> "\" height=\"" <> y <> "\" width=\"" <> z <> "\">" damnFormat' C_Embed = "</embed>" damnFormat' (Emote x _ _ _ _) = x damnFormat' I = "<i>" damnFormat' C_I = "</i>" damnFormat' (Iframe x y z) = "<iframe src=\"" <> x <> "\" height=\"" <> y <> "\" width=\"" <> z <> "\">" damnFormat' C_Iframe = "</iframe>" damnFormat' (Img x y z) = "<img src=\"" <> x <> "\" height=\"" <> y <> "\" width=\"" <> z <> "\">" damnFormat' Li = "<li>" damnFormat' C_Li = "</li>" damnFormat' (Link x _) = x damnFormat' Ol = "<ol>" damnFormat' C_Ol = "</ol>" damnFormat' P = "<p>" damnFormat' C_P = "</p>" damnFormat' S = "<s>" damnFormat' C_S = "</s>" damnFormat' Sub = "<sub>" damnFormat' C_Sub = "</sub>" damnFormat' Sup = "<sup>" damnFormat' C_Sup = "</sup>" damnFormat' (Thumb x _ _ _ _ _) = ":thumb" <> x <> ":" damnFormat' U = "<u>" damnFormat' C_U = "</u>" damnFormat' Ul = "<ul>" damnFormat' C_Ul = "</ul>"