67 lines
2.5 KiB
Haskell
67 lines
2.5 KiB
Haskell
module Utils.Print where
|
|
|
|
import Import.NoModel
|
|
import qualified Data.Foldable as Fold
|
|
-- hiding (foldr) import Data.Foldable (foldr)
|
|
|
|
import Control.Monad.Except
|
|
import Import hiding (embedFile)
|
|
import Data.FileEmbed (embedFile)
|
|
|
|
import qualified Text.Pandoc as P
|
|
-- import qualified Text.Pandoc.PDF as P
|
|
import qualified Text.Pandoc.Builder as P
|
|
|
|
-- import Model.Types.Markup -- TODO-QSV: should this module be moved accordingly?
|
|
|
|
templateRenewal :: Text
|
|
templateRenewal = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/fraport_renewal.md")
|
|
|
|
templateDIN5008 :: Text
|
|
templateDIN5008 = decodeUtf8 $(Data.FileEmbed.embedFile "templates/letter/din5008.latex")
|
|
|
|
|
|
-- setMeta :: (HasMeta a, ToMetaValue b) => Text -> b -> a -> a
|
|
|
|
-- foldr :: forall b. (Element mono0 -> b -> b) -> b -> mono0 -> b
|
|
|
|
|
|
applyMetas :: (P.HasMeta p, Foldable t, P.ToMetaValue a) => t (Text, a) -> p -> p
|
|
applyMetas metas doc = Fold.foldr (uncurry P.setMeta) doc metas
|
|
|
|
addMeta :: P.Meta -> P.Pandoc -> P.Pandoc
|
|
addMeta m p = meta <> p
|
|
where meta = P.Pandoc m mempty
|
|
|
|
-- | Apply StoredMarkup as a template to itself and return the resulting Markup
|
|
-- This is a hack to allow variable interpolation within a document.
|
|
-- Pandoc currently only allows interpolation within templates.
|
|
-- An alternative Route would be to use Builders, but this prevents User-edited Markup Templates
|
|
reTemplateLetter :: P.PandocMonad m => P.Meta -> StoredMarkup -> m Text
|
|
reTemplateLetter meta StoredMarkup{..} = do
|
|
let strictMarkupInput = toStrict markupInput
|
|
partialPath = "" -- no partials used, see Text.DocTemplates
|
|
mdTemplate <- P.runWithDefaultPartials $ P.compileTemplate partialPath strictMarkupInput
|
|
case mdTemplate of
|
|
(Left err) -> throwError . P.PandocTemplateError $ pack err
|
|
(Right templ) -> do
|
|
let readeropts = def { P.readerExtensions = P.pandocExtensions }
|
|
writeropts = def { P.writerTemplate = Just templ }
|
|
-- reader :: (P.PandocMonad m, P.ToSources a) => P.ReaderOptions -> a -> m P.Pandoc
|
|
areader = case markupInputFormat of
|
|
MarkupHtml -> P.readHtml
|
|
MarkupMarkdown -> P.readMarkdown
|
|
MarkupPlaintext -> P.readMarkdown
|
|
doc1 <- areader readeropts strictMarkupInput
|
|
P.writeMarkdown writeropts $ addMeta meta doc1 -- should we apply metas here?
|
|
|
|
|
|
{-
|
|
|
|
renewalLetter :: (Foldable t, ToMetaValue b, PandocMonad m) => t (Text, b) -> PandocMonad m -> Text
|
|
renewalLetter
|
|
|
|
pdfDIN5008 :: MetaPinRenewal -> IO (Either ByteString ByteString)
|
|
pdfDIN5008
|
|
|
|
-} |