Move pandoc execution out of IO
This commit is contained in:
parent
eb7848064a
commit
9170a7f044
|
@ -242,6 +242,9 @@ toText a = runFunction ToText =<< toToken a
|
|||
convertImage :: (TokenableTo Image a, TokenableTo ImageConversionSettings b) => a -> b -> DepGenM' Image
|
||||
convertImage a b = runFunction ConvertImage =<< toTupleToken a b
|
||||
|
||||
runPandoc :: TokenableTo Text a => a -> DepGenM' Text
|
||||
runPandoc a = runFunction RunPandoc =<< toToken a
|
||||
|
||||
listDirectory :: TokenableTo FilePath a => a -> DepGenM' [FilePath]
|
||||
listDirectory a = runFunctionIO ListDirectory =<< toToken a
|
||||
|
||||
|
@ -269,9 +272,6 @@ copyFile' = runFunctionIO' CopyFile
|
|||
makeDir :: TokenableTo FilePath a => a -> DepGenM ()
|
||||
makeDir a = runFunctionIO' MakeDir =<< toToken a
|
||||
|
||||
runPandoc :: TokenableTo Text a => a -> DepGenM' Text
|
||||
runPandoc a = runFunctionIO RunPandoc =<< toToken a
|
||||
|
||||
|
||||
hasExtension :: (TokenableTo [String] a, TokenableTo FilePath b) => a -> b -> DepGenM' Bool
|
||||
hasExtension exts filename = do
|
||||
|
|
|
@ -12,6 +12,9 @@ import qualified Codec.Picture as CP
|
|||
import qualified Codec.Picture.STBIR as CPS
|
||||
import Data.Char (toLower)
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.Text.Lazy as TL
|
||||
import qualified Text.Pandoc as P
|
||||
import qualified Text.Blaze.Html.Renderer.Text as B
|
||||
|
||||
fileComponents :: Prelude.String -> (Prelude.String, Prelude.String)
|
||||
fileComponents s =
|
||||
|
@ -70,5 +73,12 @@ evalFunction f x = case (f, x) of
|
|||
heightResized = round (fromIntegral (CP.imageHeight image) / sizeFactor)
|
||||
in makeImage $ CPS.resize CPS.defaultOptions widthResized heightResized image
|
||||
|
||||
(RunPandoc, Text contents) ->
|
||||
let settings = P.def { P.readerExtensions = P.extensionsFromList [ P.Ext_raw_html ] }
|
||||
m = P.writeHtml5 P.def =<< P.readMarkdown settings contents
|
||||
in case P.runPure m of
|
||||
Left e -> error ("unexpected pandoc error: " ++ show e)
|
||||
Right html -> Text $ TL.toStrict $ B.renderHtml html
|
||||
|
||||
_ ->
|
||||
error "unexpected combination of function and argument type"
|
||||
|
|
|
@ -7,10 +7,7 @@ import Prelude hiding (String, FilePath)
|
|||
import Types.Values
|
||||
import Types (FunctionIO(..), Value(..), toValue, makeImage)
|
||||
|
||||
import qualified Data.Text.Lazy as TL
|
||||
import qualified Data.Text.IO as T
|
||||
import qualified Text.Pandoc as P
|
||||
import qualified Text.Blaze.Html.Renderer.Text as B
|
||||
import qualified Codec.Picture as CP
|
||||
import System.Directory (listDirectory, doesDirectoryExist, createDirectory, copyFile)
|
||||
|
||||
|
@ -47,9 +44,5 @@ evalFunctionIO f x = case (f, x) of
|
|||
createDirectory s
|
||||
pure Empty
|
||||
|
||||
(RunPandoc, Text contents) -> do
|
||||
html <- P.runIOorExplode (P.writeHtml5 P.def =<< P.readMarkdown (P.def { P.readerExtensions = P.extensionsFromList [ P.Ext_raw_html ] }) contents)
|
||||
pure $ Text $ TL.toStrict $ B.renderHtml html
|
||||
|
||||
_ ->
|
||||
error ("unexpected combination of function and argument type; got function " ++ show f ++ " with argument " ++ show x)
|
||||
|
|
|
@ -16,5 +16,6 @@ data Function = AppendStrings
|
|||
| ApplyTemplate
|
||||
| ToText
|
||||
| ConvertImage
|
||||
| RunPandoc
|
||||
deriving (Show, Lift)
|
||||
|
||||
|
|
|
@ -12,5 +12,4 @@ data FunctionIO = ListDirectory
|
|||
| SaveTextFile
|
||||
| CopyFile
|
||||
| MakeDir
|
||||
| RunPandoc
|
||||
deriving (Show, Lift)
|
||||
|
|
Loading…
Reference in New Issue