如何使用Text.Pandoc(Haskell)将Markdown转换为Html?

时间:2012-03-29 17:23:38

标签: haskell markdown pandoc

我有以下代码:

import Text.Pandoc

myWriterOptions = defaultWriterOptions 
    { writerHtml5 = True 
    , writerStrictMarkdown = False
    }

markdownToHtml :: String -> Html
markdownToHtml = writeHtml myWriterOptions . readMarkdown defaultParserState

如果我将它应用于降价字符串:
 "header\n=======\nA line of text.\n### A list ###\n- apple\n- orange\n- pear"

我最终得到:
"<h1 id=\"header\">header</h1>\n<p>A line of text. ### A list ### - apple - orange - pear</p>"

2 个答案:

答案 0 :(得分:4)

您的代码对我来说很好,输出也是如此。我从Try Pandoc得到了相同的输出。

如果在第二个标题和列表之前添加换行符,则会生成您正在查找的输出。如果其他Markdown实现也需要空行,我也不会感到惊讶;毕竟,如果用连字符开始一行开始一个新的列表(想想换行),那将会非常烦人。

答案 1 :(得分:1)

Pandoc API发生了一些变化。这对我有用:

{-# LANGUAGE OverloadedStrings #-}
module PandocDemo where

import Data.Monoid ((<>))
import Data.Profunctor (dimap)
import Data.Text (Text)
import qualified Data.Text as T

import Text.Pandoc

markdownToHtml :: Text -> Text
markdownToHtml = dimap inp out markdownToHtml'
  where
    inp = T.unpack
    out = either (("Error: " <>) . tshow) T.pack

markdownToHtml' :: String -> Either PandocError String
markdownToHtml' s = writeHtmlString opts <$> readMarkdown def s
  where
    opts = def { writerHtml5 = True }