{-# LANGUAGE OverloadedStrings #-}
module Gemoire.Converter.Web
(
defWebConversion
, escapeContent
, escapeAttr
, defDocument
, defText
, defLink
, defH1
, defH2
, defH3
, defList
, defListItem
, defQuote
, defPre
) where
import Data.HashMap.Strict (empty)
import Data.Text (Text)
import qualified Data.Text as T
import Gemoire.Converter.Types (Conversion (..))
import Gemoire.Template (Template, template)
defWebConversion :: Conversion
defWebConversion :: Conversion
defWebConversion =
Conversion
{ targetExtension :: String
targetExtension = String
".html"
, escaper :: Text -> Text
escaper = Text -> Text
escapeContent
, preEscaper :: Text -> Text
preEscaper = Text -> Text
escapeContent
, attrEscaper :: Text -> Text
attrEscaper = Text -> Text
escapeAttr
, documentTemplate :: Template
documentTemplate = Template
defDocument
, textTemplate :: Template
textTemplate = Template
defText
, linkTemplate :: Template
linkTemplate = Template
defLink
, h1Template :: Template
h1Template = Template
defH1
, h2Template :: Template
h2Template = Template
defH2
, h3Template :: Template
h3Template = Template
defH3
, listTemplates :: (Template, Template)
listTemplates = (Template
defList, Template
defListItem)
, quoteTemplate :: Template
quoteTemplate = Template
defQuote
, preTemplate :: Template
preTemplate = Template
defPre
, rewriteRules :: [RewriteRule]
rewriteRules = []
, conversionOverrides :: Values
conversionOverrides = Values
forall k v. HashMap k v
empty
}
escapeContent :: Text -> Text
escapeContent :: Text -> Text
escapeContent = HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
">" Text
">" (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"<" Text
"<" (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"&" Text
"&"
escapeAttr :: Text -> Text
escapeAttr :: Text -> Text
escapeAttr = HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"'" Text
"'" (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"\"" Text
""" (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
T.replace Text
"&" Text
"&"
defDocument :: Template
defDocument :: Template
defDocument =
Text -> Template
template (Text -> Template) -> ([Text] -> Text) -> [Text] -> Template
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> Text
T.unlines ([Text] -> Template) -> [Text] -> Template
forall a b. (a -> b) -> a -> b
$
[ Text
"<!DOCTYPE html>"
, Text
"<html>"
, Text
" <head>"
, Text
" <title>{&title:fname&}</title>"
, Text
" </head>"
, Text
" <body>"
, Text
""
, Text
"{$body$}"
, Text
""
, Text
" </body>"
, Text
"</html>"
]
defText :: Template
defText :: Template
defText = Text -> Template
template Text
"<p>{$text$}</p>"
defLink :: Template
defLink :: Template
defLink = Text -> Template
template Text
"<a href=\"{$link$}\">{&description:link&}</a>"
defH1 :: Template
defH1 :: Template
defH1 = Text -> Template
template Text
"<h1>{$text$}</h1>"
defH2 :: Template
defH2 :: Template
defH2 = Text -> Template
template Text
"<h2>{$text$}</h2>"
defH3 :: Template
defH3 :: Template
defH3 = Text -> Template
template Text
"<h3>{$text$}</h3>"
defList :: Template
defList :: Template
defList =
Text -> Template
template (Text -> Template) -> ([Text] -> Text) -> [Text] -> Template
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text] -> Text
T.intercalate Text
"\LF" ([Text] -> Template) -> [Text] -> Template
forall a b. (a -> b) -> a -> b
$
[ Text
"<ul>"
, Text
"{$items$}"
, Text
"</ul>"
]
defListItem :: Template
defListItem :: Template
defListItem = Text -> Template
template Text
" <li>{$text$}</li>"
defQuote :: Template
defQuote :: Template
defQuote =
Text -> Template
template (Text -> Template) -> ([Text] -> Text) -> [Text] -> Template
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text] -> Text
T.intercalate Text
"\LF" ([Text] -> Template) -> [Text] -> Template
forall a b. (a -> b) -> a -> b
$
[ Text
"<blockquote>"
, Text
" {$text$}"
, Text
"</blockquote>"
]
defPre :: Template
defPre :: Template
defPre =
Text -> Template
template (Text -> Template) -> ([Text] -> Text) -> [Text] -> Template
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text] -> Text
T.intercalate Text
"\LF" ([Text] -> Template) -> [Text] -> Template
forall a b. (a -> b) -> a -> b
$
[ Text
"<pre title=\"{$alt$}\">"
, Text
"{$text$}"
, Text
"</pre>"
]