Pando c `writeMarkdown` не включает метаданные, т.е. запись (чтение) не является - какое расширение требуется? - PullRequest
0 голосов
/ 26 мая 2020

Я хочу создать утилиту для преобразования некоторого текста в файле уценки и хочу создать новый файл уценки. Метаданные не меняются.

Операции чтения и записи должны быть обратными (или, по крайней мере, идемпотентными), но я не могу найти способ, чтобы 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$
...