我正在使用这个haskell pandoc包含文件筛选器
#!/usr/bin/env runhaskell
-- includes.hs
import Text.Pandoc.JSON
doInclude :: Block -> IO Block
doInclude cb@(CodeBlock (id, classes, namevals) contents) =
case lookup "include" namevals of
Just f -> return . (CodeBlock (id, classes, namevals)) =<< readFile f
Nothing -> return cb
doInclude x = return x
main :: IO ()
main = toJSONFilter doInclude在markdown中使用以下代码片段
~~~~ {include="tasks/mdbook.js"}
~~~~这实际上包括文件到标记,但我希望它也包括代码格式,例如
```js此处的文件内容
我如何更新上面的haskell代码来完成这个?使用类似于
~~~~ {code="tasks/mdbook.js", format="js"}
~~~~发布于 2014-03-11 08:06:08
由于include筛选器保留了代码块的所有classes,因此您只需使用以下代码即可包含文件内容并对其应用代码格式:
~~~~ {.javascript include="tasks/mdbook.js"}
~~~~发布于 2014-02-06 03:37:35
我假设您正在尝试解决的问题是拥有一个引用某段代码的标记文档,并且您希望避免将代码复制粘贴到文档中以及手动同步两个版本的噩梦。因此,您已经尝试通过过滤器将源文件包含到markdown文档中来解决这个问题。
我用不同的方式解决了同样的问题。我将所有(相关)源代码保存在markdown文档中,并编写了一个工具来提取所有源代码。我的特殊用例是,我正在为讲座编写幻灯片,每次我编辑我的幻灯片时,我都会提取代码并确保它被编译。为了方便我的学生,我还把所有的代码打包成一个zip压缩包。
我的工具可以在这里找到:https://github.com/josefs/CodeExtract
您可以像这样编写代码块:
~~~ {.haskell file="Hello.hs"}
main = putStrLn "Hello World!"
~~~当通过我的小工具运行包含这些代码块的文档时,它将生成一个包含块中代码的文件Hello.hs。
还有一个更高级的功能,支持多个代码片段,这些代码片段可以在同一文档中结束。例如,您可以有两个代码块,如下所示:
~~~ {.haskell template="Hello.hs.tmpl" var="mainfkn"}
main = putStrLn str
~~~
~~~ {.haskell template="Hello.hs.tmpl" var="misc"}
str = "Hello World!"
~~~然后是一个模板文件,Hello.hs.tmpl,如下所示(它使用与pandoc相同的模板格式):
~~~
module Main where
$mainfkn$
$misc$
~~~它将生成一个文件Hello.hs,其中包含模板文件,但变量替换为markdown文件中相应的代码块。这非常方便。
我希望你会发现我的工具很有用,尽管我知道它可能不能解决你的特定问题。
发布于 2014-02-07 00:53:29
您似乎想要的是更新代码块的属性。下面是你可以做的:
#!/usr/bin/env runhaskell
-- includes.hs
import Text.Pandoc.JSON
doInclude :: Block -> IO Block
doInclude cb@(CodeBlock (id, classes, namevals) contents) =
case lookup "include" namevals of
Just f -> do
let newAttrs = filter ((/= "include") . fst) namevals ++ [("code",f), ("format","js")]
return . (CodeBlock (id, classes, newAttrs)) =<< readFile f
Nothing -> return cb
doInclude x = return x
main :: IO ()
main = toJSONFilter doInclude根据需要更改newAttr的代码。
https://stackoverflow.com/questions/21584396
复制相似问题