{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
{- |
   Module      : Text.Pandoc.Templates
   Copyright   : Copyright (C) 2009-2019 John MacFarlane
   License     : GNU GPL, version 2 or above

   Maintainer  : John MacFarlane <jgm@berkeley.edu>
   Stability   : alpha
   Portability : portable

Utility functions for working with pandoc templates.
-}

module Text.Pandoc.Templates ( Template
                             , compileTemplate
                             , renderTemplate
                             , getDefaultTemplate
                             ) where

import Prelude
import System.FilePath ((<.>), (</>))
import Text.DocTemplates (Template, compileTemplate, renderTemplate)
import Text.Pandoc.Class (PandocMonad, readDataFile)
import qualified Text.Pandoc.UTF8 as UTF8
import Data.Text (Text)
import qualified Data.Text as T

-- | Get default template for the specified writer.
getDefaultTemplate :: PandocMonad m
                   => Text           -- ^ Name of writer
                   -> m Text
getDefaultTemplate :: Text -> m Text
getDefaultTemplate writer :: Text
writer = do
  let format :: Text
format = (Char -> Bool) -> Text -> Text
T.takeWhile (Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` ("+-" :: String)) Text
writer  -- strip off extensions
  case Text
format of
       "native"  -> Text -> m Text
forall (m :: * -> *) a. Monad m => a -> m a
return ""
       "json"    -> Text -> m Text
forall (m :: * -> *) a. Monad m => a -> m a
return ""
       "docx"    -> Text -> m Text
forall (m :: * -> *) a. Monad m => a -> m a
return ""
       "fb2"     -> Text -> m Text
forall (m :: * -> *) a. Monad m => a -> m a
return ""
       "pptx"    -> Text -> m Text
forall (m :: * -> *) a. Monad m => a -> m a
return ""
       "ipynb"   -> Text -> m Text
forall (m :: * -> *) a. Monad m => a -> m a
return ""
       "odt"     -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "opendocument"
       "html"    -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "html5"
       "docbook" -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "docbook5"
       "epub"    -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "epub3"
       "beamer"  -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "latex"
       "markdown_strict"   -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "markdown"
       "multimarkdown"     -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "markdown"
       "markdown_github"   -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "markdown"
       "markdown_mmd"      -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "markdown"
       "markdown_phpextra" -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "markdown"
       "gfm"               -> Text -> m Text
forall (m :: * -> *). PandocMonad m => Text -> m Text
getDefaultTemplate "commonmark"
       _        -> do
         let fname :: [Char]
fname = "templates" [Char] -> [Char] -> [Char]
</> "default" [Char] -> [Char] -> [Char]
<.> Text -> [Char]
T.unpack Text
format
         ByteString -> Text
UTF8.toText (ByteString -> Text) -> m ByteString -> m Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> m ByteString
forall (m :: * -> *). PandocMonad m => [Char] -> m ByteString
readDataFile [Char]
fname