module ListT.HTMLParser.Renderer where import BasePrelude hiding (fromString) import Conversion import Conversion.Text import Data.Text (Text) import Data.Text.Lazy.Builder import HTMLTokenizer (Token(..), OpeningTag, Identifier(..), Attribute) import qualified Data.CaseInsensitive as CI openingTag :: OpeningTag -> Builder openingTag (name, attrs, closed) = singleton '<' <> identifier 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 '"') . convert) value $ identifier name identifier :: Identifier -> Builder identifier (Identifier namespace name) = foldMap (flip mappend ":" . convert . CI.foldedCase) namespace <> (convert . CI.foldedCase) name closingTag :: Identifier -> Builder closingTag name = fromString " identifier name <> singleton '>' text :: Text -> Builder text = convert 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