【问题标题】:Trying to recreate pandoc cli behavior by using the pandoc library尝试使用 pandoc 库重新创建 pandoc cli 行为
【发布时间】:2021-04-14 23:42:50
【问题描述】:

我一直在使用 pandoc 可执行文件将 Markdown 文件转换为手册页

pandoc -f markdown -s -t man foo.1.md -o foo.1

而且它一直在发挥作用。但是,为了组织起见,我决定将降价源分成多个文件,以便我可以组合特定的部分来生成多个手册页。我认为(对于我的用例)最简单的方法是直接使用 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 调用保留的所有格式。

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

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

提前致谢!

编辑:在玩了更多之后,我意识到了这个问题。 Pandoc 实际上并没有吃掉大量的格式。问题是 pandoc 没有生成 roff 手册页顶部所需的 .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 才能正确解析这个“标题”? 我已经测试了各种似乎无济于事的选项/扩展。

【问题讨论】:

    标签: haskell pandoc


    【解决方案1】:

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

    {-# 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
    

    【讨论】:

    • 没关系(甚至在这里)回答你自己的问题,如果没有其他人能够弄清楚并且你最终自己做了......
    猜你喜欢
    • 2014-06-12
    • 1970-01-01
    • 2013-10-03
    • 2017-09-23
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2014-05-16
    相关资源
    最近更新 更多