LHS和Markdown:代码块

17

我很喜欢Markdown(可能是因为Stack Overflow),也喜欢用Haskell编程。最近我发现了Literate Haskell(LHS),想要将Markdown和LHS结合起来使用。让我举个愚蠢的例子:

Crazy Literate Haskell
======================

This is an example of some literate Haskell Code:

> module Main where

Look at that IO Monad work:

> main = return 2 >>= print

Wasn't that cool?

那是一个示例Haskell文件,旨在稍后由Markdown解析。然而,我希望代码实际上出现在HTML代码块中,并且没有它们之前的">"。因此,我不能仅仅将所有代码行缩进四个空格,因为那会产生上面看到的Markdown。基本上,我希望HTML的输出像这样:
<h1>Crazy Literate Haskell</h1>

<p>This is an example of some literate Haskell Code:</p>

<pre><code>module Main where
</code></pre>

<p>Look at that IO Monad work:</p>

<pre><code>main = return 2 &gt;&gt;= print
</code></pre>

<p>Wasn't that cool?</p>

需要注意的是它没有">"符号。我该怎么做?

现在显然我可以通过sed 's_^> _ _'来处理.lhs文件,但我并不想这样做。我更希望有一些我不知道的内置函数。 - Robert Massaioli
1个回答

18

使用Pandoc。它有一个markdown+lhs模式,可在字面的Haskell文件中使用Markdown语法。如果不喜欢它生成的HTML,则可以使用API修改文档结构。

安装方法:

cabal install pandoc

6
这里粘贴的HTML代码 http://hpaste.org/fastcgi/hpaste.fcgi/raw?id=29029 是将你的Markdown剪切并粘贴到pandoc中的结果,使用以下命令:pbpaste | pandoc -r markdown+lhs -w html -s | pbcopy以防您开始写Haskell博客......请注意,您可以请求pandoc使用鸟类轨迹来编写literate htmlpbpaste | pandoc -r markdown+lhs -w html+lhs | pbpaste--然后您会得到这个结果:http://hpaste.org/fastcgi/hpaste.fcgi/view?id=29030该HTML格式奇怪,但合法;您可以通过将其通过“tidy”进行处理来消除它。 - applicative
这是一个非常好的答案,Dave和applicative都很棒。谢谢,这正是我想要的。标记为答案。 - Robert Massaioli
而为了在StackOverflow上发布它(作为普通的markdown,不带.lhs技巧),可以执行pandoc --from markdown+lhs --to markdown!(源markdown中的HTML样式注释会被错误地处理。我用它们来存储文件末尾的Emacs变量。) - imz -- Ivan Zakharyaschev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接