转换为 Markdown 时在 pandoc 中保留自定义代码块属性
Keep custom code block attributes in pandoc when converting to Markdown
我正在将 org 文件转换为 Markdown(特别是 commonmark
)。我正在向我的代码块添加自定义属性,commonmark
编写器不支持该属性,并在转换期间将它们从代码块中删除。我正在尝试找到一种方法来保留我的自定义属性。
这是我的:
#+begin_src python :hl_lines "2"
def some_function():
print("foo bar")
return
#+end_src
这就是我想要的 .md 文件:
``` python hl_lines="2"
def some_function():
print("foo bar")
return
```
经过一些研究,我认为过滤器可以解决我的问题:我现在正在使用 panflute,一个用于编写 pandoc 过滤器的 python 库。
我发现了一些相关问题,但它们适用于其他转换 (, rst -> latex),而且我还不够了解 Lua 无法将代码翻译成 Python 和组织 - > md 转换。
感谢您的帮助。
我能够编写一个脚本,并将其发布在这里以供将来基于 Python 的有关 pandoc 过滤器的问题。
下面的过滤器需要 panflute, but there are other libs 用于 Python 中的 pandoc 过滤器。
import panflute
def keep_attributes_markdown(elem, doc, format="commonmark"):
"""Keep custom attributes specified in code block headers when exporting to Markdown"""
if type(elem) == panflute.CodeBlock:
language = "." + elem.classes[0]
attributes = ""
attributes = " ".join(
[key + "=" + value for key, value in elem.attributes.items()]
)
header = "``` { " + " ".join([language, attributes]).strip() + " }"
panflute.debug(header)
code = elem.text.strip()
footer = "```"
content = [
panflute.RawBlock(header, format=format),
panflute.RawBlock(code, format=format),
panflute.RawBlock(footer, format=format),
]
return content
def main(doc=None):
return panflute.run_filter(keep_attributes_markdown, doc=doc)
if __name__ == "__main__":
main()
您现在可以运行以下命令:
pandoc --from=org --to=commonmark --filter=/full/path/to/keep_attributes_markdown.py --output=target_file.md your_file.org
我正在将 org 文件转换为 Markdown(特别是 commonmark
)。我正在向我的代码块添加自定义属性,commonmark
编写器不支持该属性,并在转换期间将它们从代码块中删除。我正在尝试找到一种方法来保留我的自定义属性。
这是我的:
#+begin_src python :hl_lines "2"
def some_function():
print("foo bar")
return
#+end_src
这就是我想要的 .md 文件:
``` python hl_lines="2"
def some_function():
print("foo bar")
return
```
经过一些研究,我认为过滤器可以解决我的问题:我现在正在使用 panflute,一个用于编写 pandoc 过滤器的 python 库。
我发现了一些相关问题,但它们适用于其他转换 (
感谢您的帮助。
我能够编写一个脚本,并将其发布在这里以供将来基于 Python 的有关 pandoc 过滤器的问题。
下面的过滤器需要 panflute, but there are other libs 用于 Python 中的 pandoc 过滤器。
import panflute
def keep_attributes_markdown(elem, doc, format="commonmark"):
"""Keep custom attributes specified in code block headers when exporting to Markdown"""
if type(elem) == panflute.CodeBlock:
language = "." + elem.classes[0]
attributes = ""
attributes = " ".join(
[key + "=" + value for key, value in elem.attributes.items()]
)
header = "``` { " + " ".join([language, attributes]).strip() + " }"
panflute.debug(header)
code = elem.text.strip()
footer = "```"
content = [
panflute.RawBlock(header, format=format),
panflute.RawBlock(code, format=format),
panflute.RawBlock(footer, format=format),
]
return content
def main(doc=None):
return panflute.run_filter(keep_attributes_markdown, doc=doc)
if __name__ == "__main__":
main()
您现在可以运行以下命令:
pandoc --from=org --to=commonmark --filter=/full/path/to/keep_attributes_markdown.py --output=target_file.md your_file.org