File: Render.hs

package info (click to toggle)
haskell-css-text 0.1.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 64 kB
  • ctags: 1
  • sloc: haskell: 220; makefile: 3
file content (42 lines) | stat: -rw-r--r-- 1,338 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{-# LANGUAGE OverloadedStrings #-}
-- | Prender CSS with renderNestedBlocks
module Text.CSS.Render
    ( renderNestedBlocks
    , renderBlocks
    , renderBlock
    , renderAttrs
    , renderAttr
    ) where

import Data.Text (Text)
import Data.Text.Lazy.Builder (Builder, fromText, singleton)
import Data.Monoid (mappend, mempty, mconcat)
import Text.CSS.Parse

(<>) :: Builder -> Builder -> Builder
(<>) = mappend

renderAttr :: (Text, Text) -> Builder
renderAttr (k, v) = fromText k <> singleton ':' <> fromText v

renderAttrs :: [(Text, Text)] -> Builder
renderAttrs [] = mempty
renderAttrs [x] = renderAttr x
renderAttrs (x:xs) = renderAttr x <> singleton ';' <> renderAttrs xs

renderBlock :: (Text, [(Text, Text)]) -> Builder
renderBlock (sel, attrs) =
    fromText sel <> singleton '{' <> renderAttrs attrs <> singleton '}'

renderBlocks :: [(Text, [(Text, Text)])] -> Builder
renderBlocks = mconcat . map renderBlock

renderNestedBlock :: NestedBlock -> Builder
renderNestedBlock (LeafBlock b) = renderBlock b
renderNestedBlock (NestedBlock t bs) = fromText t
                                    <> singleton '{'
                                    <> renderNestedBlocks bs 
                                    <> singleton '}'

renderNestedBlocks :: [NestedBlock] -> Builder
renderNestedBlocks = mconcat . map renderNestedBlock