使用python pandoc过滤器

时间:2017-06-18 21:48:10

标签: python markdown pandoc pandoc-citeproc

有没有办法在pandoc中使用'pandocfilters'包(https://github.com/jgm/pandocfilters/tree/master/examples)加粗文本?

作为一个最小的工作示例,假设我有一个markdown文件('foo.md'):

foobar.

我想把'filter.py'写成类似

的东西
from pandocfilters import toJSONFilter, Str,Emph

def boldify(key, val, fmt, meta):
    if key == 'Str' and "foo" in val:
        # this is the part I can't don't know how to do
        # I would like to make the value be bold
        return [Emph(val)]

if __name__ == '__main__':
    toJSONFilter(boldify)

所以我们运行整个事情

pandoc 'foo.md' --filter='filter.py' -o 'foo.docx'

使用此,我收到以下错误:

pandoc: Error in $.blocks[0].c[0].c: expected [a], encountered String
CallStack (from HasCallStack):
error, called at pandoc.hs:144:42 in main:Main

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我找到了答案,我会发布我发现的内容(以及我如何发现它)以期帮助其他人。

我找到了什么

强(或粗体)元素需要一个Str元素列表作为其工作的输入

我们应该更改filter.py以返回

RewriteEngine On

# Canonical redirect (in case the old URLs are indexed)
RewriteCond %{QUERY_STRING} ^id=(\d+)&title=([^/.&]+)
RewriteRule ^(longterm/home)/test\.php$ /$1/%1/%2? [R,L]

# Rewrite "pretty" URL to filesytem URL
RewriteRule ^(longterm/home)/(\d+)/([^/.]+)$ /$1/test.php?id=$2&title=$3 [L]

而不是

[Strong([Str(val)])]

[Strong(val)]

我是如何找到答案的

如果我们改变" foo.md"到:

[Strong(Str(val))]    

通过以下方式获取抽象语法树:

**(foo)** bar

我们得到了

pandoc -t json -s foo.md

特别是,位:

{" T":"斯特朗"" C":[{" T":"海峡" " C":"(富)"}]}

告诉我们获得工作AST所需的格式。