Я хочу создать утилиту для преобразования некоторого текста в файле уценки и хочу создать новый файл уценки. Метаданные не меняются.
Операции чтения и записи должны быть обратными (или, по крайней мере, идемпотентными), но я не могу найти способ, чтобы pando c воспроизводил входной файл, включая метаданные. Какая комбинация Extensions
и Options
требуется?
Вот мой минимальный рабочий пример с новейшим pando c от lst-15.13
.
-- ---------------------------------------------------------------------------
--
-- Module : a test for pandoc output of yaml
-- ---------------------------------------------------------------------------
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Data.Text as T
import Text.Pandoc
import Control.Monad.IO.Class (liftIO )
main :: IO ()
main = do
putStrLns $ ["input", showT inputMd]
res <- sub inputMd
case res of
Left st -> putStrLns $ ["error", show st]
Right q ->
do
putStrLns $ ["result q\n", showT $ q]
putStrLns $ ["should be the same as input p\n", showT inputMd]
putStrLns $ ["same", show (inputMd == ( q))]
return ()
return ()
showT = show . T.unpack
putStrLns = putStrLn . unwords
sub :: T.Text -> IO (Either PandocError T.Text)
sub input1 = do
res <- runIO $
do
let readOptions = def{readerStandalone = True
, readerExtensions = extensionsFromList
[Ext_yaml_metadata_block ]
}
p <- readMarkdown readOptions ( input1)
-- def does not analyse metadata
-- readOptions analysis metadata
-- output is then only the markdown
-- t1 :: String <- liftIO $readFile "/home/frank/Workspace8/pandocTest/temp.tpl"
-- t2 <- compileDefaultTemplate (T.pack t1)
let writeOptions = def {writerSetextHeaders = False
, writerExtensions = extensionsFromList
[Ext_yaml_metadata_block]
-- , writerTemplate = Just t2
}
q <- writeMarkdown writeOptions p
-- def gives only the markdown part
-- but not including the titel
liftIO $ putStrLns ["AST \n", show p]
return q
res2 <- handleError res
return res
inputMd = T.unlines ["---"
,"title: The Future of AA"
,"..."
,""
,"## second level"
,"text for nothing"
] :: T.Text
Использование шаблона comiles, но выдает ошибку времени выполнения:
Could not find data file /home/frank/.stack/snapshots/x86_64-linux/668b320207ef95ba5255b2b20895a7f7315ff61076bb3ab82e76f7ef56076320/8.8.3/share/x86_64-linux-ghc-8.8.3/pandoc-2.9.1.1/data/templates/default.
$if(titleblock)$ $titleblock$