module ListT.HTMLParser.Renderer where import BasePrelude hiding (fromString) import Data.Text (Text) import Data.Text.Lazy.Builder import HTMLTokenizer.Parser (Token(..), OpeningTag, ClosingTag, Attribute) import qualified Data.CaseInsensitive as CI import qualified HTMLEntities.Builder openingTag :: OpeningTag -> Builder openingTag (name, attrs, closed) = singleton '<' <> ciText name <> mconcat (map (mappend (singleton ' ') . attribute) attrs) <> bool (singleton '>') (fromString "/>") closed attribute :: Attribute -> Builder attribute (name, value) = maybe id (flip mappend . mappend (fromString "=\"") . flip mappend (singleton '"') . HTMLEntities.Builder.text) value $ ciText name ciText :: CI.CI Text -> Builder ciText = HTMLEntities.Builder.text . CI.foldedCase closingTag :: ClosingTag -> Builder closingTag name = fromString " ciText name <> singleton '>' text :: Text -> Builder text = HTMLEntities.Builder.text comment :: Text -> Builder comment content = fromString "" token :: Token -> Builder token = \case Token_OpeningTag x -> openingTag x Token_ClosingTag x -> closingTag x Token_Text x -> text x Token_Comment x -> comment x