尝试使用 pandoc 库重新创建 pandoc cli 行为

Trying to recreate pandoc cli behavior by using the pandoc library

我一直在使用 pandoc 可执行文件通过

将降价文件转换为 man-page
pandoc -f markdown -s -t man foo.1.md -o foo.1

而且它一直很有效。但是,为了组织起见,我决定将 markdown 源代码分成多个文件,这样我就可以组合特定的部分来生成多个手册页。我认为最简单的方法(对于我的用例)是直接使用 pandoc 库;但是,我什至正在努力重新创建上述功能。我假设以下会做到这一点:

{-# LANGUAGE OverloadedStrings #-}
import Data.Default
import qualified Data.Text.IO as TIO
import Text.Pandoc

main :: IO ()
main = do
    input <- TIO.readFile "foo.1.md"
    res <- runIOorExplode $ 
        readMarkdown (def { readerExtensions = pandocExtensions, readerStandalone = True }) input >>=
            writeMan (def { writerExtensions = getDefaultExtensions "man" })
    TIO.writeFile "foo.1" res

但是,这会丢失 cli 调用保留的几乎所有格式。

即使查看黑线鳕并简要浏览 source-code,我也不明白 cli 调用将哪些选项传递给 readMarkdownwriteMan 函数。如果我花时间消化 Text.Pandoc.App 的 source-code 或许我能理解这一点,但我希望这里的人可以通过直截了当地告诉我应该做些什么来节省我一些时间和精力,或者通过将我指向相关的代码块。

注意:我还尝试设置 readerExtensions = getDefaultExtensions "markdown" 并取消 readerStandalone 选项。

提前致谢!

编辑:在尝试了更多之后,我意识到了这个问题。 Pandoc 实际上并没有吃掉大部分格式;问题是 pandoc 没有生成 roff 中 man-page 顶部所需的 .TH 块(因此 man -l ./foo.1 没有呈现实际存在的格式)。 目前,我的降价文件以

开头
% FOO(1) foo 0.1.0.0
% Mark Down
% Today

cli 调用正确转换为

.TH "FOO" "1" "Today" "foo 0.1.0.0" ""

并将作者致谢放在最后。 所以我想我的问题是:我需要将哪些选项传递给 readMarkdownwriteMan 才能正确解析此“header”? 我已经测试了各种似乎相关但无济于事的 options/extensions。

很抱歉回答我自己的问题,但我终于想通了。问题是我需要为手册页加载正确的模板。以下代码正确呈现了我想要的手册页:

{-# LANGUAGE OverloadedStrings #-}
import Data.Default
import qualified Data.Text.IO as TIO
import Text.Pandoc

main :: IO ()
main = do
    input <- TIO.readFile "foo.1.md"
    res <- runIOorExplode $ do
        t <- compileDefaultTemplate "man"
        readMarkdown (def { readerExtensions = pandocExtensions, readerStandalone = True }) input >>=
            writeMan (def { writerTemplate = Just t })
    TIO.writeFile "foo.1" res