-- | A module that extends the builder monoid from BlazeHtml with function to -- insert HTML, including HTML escaping and the like. -- {-# LANGUAGE OverloadedStrings #-} module Text.Blaze.Builder.Html ( -- * Custom writes to the builder writeHtmlEscapedChar -- * Creating builders , fromHtmlEscapedChar , fromHtmlEscapedString , fromHtmlEscapedText ) where import Data.ByteString.Char8 () import Data.Monoid (mempty, mappend) import Data.Text (Text) import qualified Data.Text as T import Text.Blaze.Builder.Core import Text.Blaze.Builder.Utf8 -- | Write an unicode character to a 'Builder', doing HTML escaping. -- writeHtmlEscapedChar :: Char -- ^ Character to write -> Write -- ^ Resulting write writeHtmlEscapedChar '<' = writeByteString "<" writeHtmlEscapedChar '>' = writeByteString ">" writeHtmlEscapedChar '&' = writeByteString "&" writeHtmlEscapedChar '"' = writeByteString """ writeHtmlEscapedChar '\'' = writeByteString "'" writeHtmlEscapedChar c = writeChar c {-# INLINE writeHtmlEscapedChar #-} -- | A HTML escaped 'Char'. -- fromHtmlEscapedChar :: Char -- ^ Character to write -> Builder -- ^ Resulting 'Builder' fromHtmlEscapedChar = writeSingleton writeHtmlEscapedChar -- | A HTML escaped 'String'. -- fromHtmlEscapedString :: String -- ^ String to create a 'Builder' from -> Builder -- ^ Resulting 'Builder' fromHtmlEscapedString = writeList writeHtmlEscapedChar -- | An HTML escaped piece of 'Text'. -- fromHtmlEscapedText :: Text -- ^ 'Text' to insert -> Builder -- ^ Resulting 'Builder' fromHtmlEscapedText = writeSingleton (T.foldl appendChar mempty) where appendChar w c = w `mappend` writeHtmlEscapedChar c