damnpacket-1.3.1: src/Network/Damn/Format/IRC.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
-- | Format a dAmn message body as an inline text approximation, including
-- IRC styles.
module Network.Damn.Format.IRC
( ircFormat
, Lines
, unLines
) where
import Data.ByteString (ByteString)
import qualified Data.ByteString as B
import Data.Semigroup
import Data.String
import Data.Text.Encoding
import Network.Damn.Format.Base
import Network.Damn.Format.Damn.Internal
newtype Lines =
Lines ByteString
deriving (Show, Monoid, Semigroup, IsString)
unLines :: Lines -> [ByteString]
unLines (Lines bs) = B.split 10 bs
-- | This formatter functions as 'Network.Damn.Format.Damn.damnFormat',
-- except that bold, italics, and underlines will be converted to mIRC
-- colors.
--
-- Additionally, @Text@ will be encoded as UTF-8.
--
-- Note that this formatter will generate 'Lines', as newlines (to which
-- @&br\\t@ translates) cannot appear in IRC messages.
ircFormat :: Formatter Lines
ircFormat = either (Lines . encodeUtf8) (Lines . ircFormat')
ircFormat' :: Lump -> ByteString
ircFormat' B = "\x02"
ircFormat' C_B = "\x02"
ircFormat' Br = "\n"
ircFormat' I = "\x1D"
ircFormat' C_I = "\x1D"
ircFormat' U = "\x1F"
ircFormat' C_U = "\x1F"
ircFormat' x = damnFormat' x